@sarasanalytics-com/design-system 0.0.158 → 0.0.159
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.
- package/README.md +24 -24
- package/esm2022/interfaces/avatar-interface.mjs +1 -1
- package/esm2022/interfaces/button-interface.mjs +1 -1
- package/esm2022/interfaces/card-carousel-interface.mjs +1 -1
- package/esm2022/interfaces/chip-interface.mjs +1 -1
- package/esm2022/interfaces/form-layout.interface.mjs +1 -1
- package/esm2022/interfaces/grid-interface.mjs +1 -1
- package/esm2022/interfaces/guide-card-interface.mjs +1 -1
- package/esm2022/interfaces/header-interface.mjs +1 -1
- package/esm2022/interfaces/icon-interface.mjs +1 -1
- package/esm2022/interfaces/layout-section-interface.mjs +1 -1
- package/esm2022/interfaces/left-nav-interface.mjs +1 -1
- package/esm2022/interfaces/menu.interface.mjs +1 -1
- package/esm2022/interfaces/message-banner.mjs +1 -1
- package/esm2022/interfaces/option-interface.mjs +1 -1
- package/esm2022/interfaces/scrolling-card-interface.mjs +1 -1
- package/esm2022/interfaces/select-interface.mjs +1 -1
- package/esm2022/interfaces/status-dot.interface.mjs +1 -1
- package/esm2022/interfaces/tab-interface.mjs +1 -1
- package/esm2022/interfaces/toast-interface.mjs +1 -1
- package/esm2022/interfaces/typography-animation-interface.mjs +1 -1
- package/esm2022/lib/accordion/accordion.component.mjs +3 -3
- package/esm2022/lib/avatar/avatar.component.mjs +3 -3
- package/esm2022/lib/button/button.component.mjs +3 -3
- package/esm2022/lib/calendar-header/calendar-header.component.mjs +3 -3
- package/esm2022/lib/card/card-body/card-body.component.mjs +1 -1
- package/esm2022/lib/card/card-custom-header/card-custom-header.component.mjs +1 -1
- package/esm2022/lib/card/card-footer-actions/card-footer-actions.component.mjs +3 -3
- package/esm2022/lib/card/card-icon/card-icon.component.mjs +1 -1
- package/esm2022/lib/card/card-title-actions/card-title-actions.component.mjs +1 -1
- package/esm2022/lib/card/card.component.mjs +3 -3
- package/esm2022/lib/card/checkbox-card/checkbox-card.component.mjs +3 -3
- package/esm2022/lib/card/guide-card/guide-card.component.mjs +3 -3
- package/esm2022/lib/card/menu-card/menu-card.component.mjs +3 -3
- package/esm2022/lib/card/thumbnail-card/thumbnail-card.component.mjs +3 -3
- package/esm2022/lib/card-carousel/card-carousel.component.mjs +3 -3
- package/esm2022/lib/categories-nav/categories-nav.component.mjs +3 -3
- package/esm2022/lib/checkbox/checkbox.component.mjs +3 -3
- package/esm2022/lib/chips/chips.component.mjs +3 -3
- package/esm2022/lib/component-library.component.mjs +9 -9
- package/esm2022/lib/component-library.service.mjs +1 -1
- package/esm2022/lib/dashboard-loader/dashboard-loader.component.mjs +1 -1
- package/esm2022/lib/data-grid/data-grid.component.mjs +6 -8
- package/esm2022/lib/datepicker/datepicker.component.mjs +3 -3
- package/esm2022/lib/dialog/dialog.component.mjs +3 -3
- package/esm2022/lib/dropdown/category-dropdown/category-dropdown.component.mjs +3 -3
- package/esm2022/lib/dropdown/ng-select/ng-select.component.mjs +3 -3
- package/esm2022/lib/filter/filter.component.mjs +3 -3
- package/esm2022/lib/form-input/form-input.component.mjs +3 -3
- package/esm2022/lib/form-select/form-select.component.mjs +14 -3
- package/esm2022/lib/grid-cell/grid-cell.component.mjs +10 -10
- package/esm2022/lib/header/header.component.mjs +3 -3
- package/esm2022/lib/icon/icon.component.mjs +3 -3
- package/esm2022/lib/icon/icon.service.mjs +1 -1
- package/esm2022/lib/layout-section/layout-section.component.mjs +3 -3
- package/esm2022/lib/left-nav/left-nav.component.mjs +3 -3
- package/esm2022/lib/list/list.component.mjs +3 -3
- package/esm2022/lib/menu/menu-list/menu-item.component.mjs +3 -3
- package/esm2022/lib/menu/menu.component.mjs +3 -3
- package/esm2022/lib/menu/menu.directive.mjs +1 -1
- package/esm2022/lib/message-banner/message-banner.component.mjs +3 -3
- package/esm2022/lib/message-banner-v2/message-banner-v2.component.mjs +73 -33
- package/esm2022/lib/mini-card/mini-card.component.mjs +3 -3
- package/esm2022/lib/page-layout/page-layout.component.mjs +3 -3
- package/esm2022/lib/progress-bar/progress-bar.component.mjs +3 -3
- package/esm2022/lib/query-builder/query-builder-demo.component.mjs +45 -45
- package/esm2022/lib/query-builder/query-builder.component.mjs +3 -3
- package/esm2022/lib/query-builder/query-builder.service.mjs +1 -1
- package/esm2022/lib/query-builder-formly/query-builder-formly.component.mjs +3 -3
- package/esm2022/lib/query-builder-textarea/query-builder-textarea-demo.component.mjs +39 -39
- package/esm2022/lib/query-builder-textarea/query-builder-textarea.component.mjs +3 -3
- package/esm2022/lib/radio-button/radio-button.component.mjs +3 -3
- package/esm2022/lib/scrolling-cards/scrolling-cards.component.mjs +3 -3
- package/esm2022/lib/skeleton/skeleton-base.component.mjs +1 -1
- package/esm2022/lib/skeleton/skeleton-container.component.mjs +9 -9
- package/esm2022/lib/skeleton/skeleton-loader.component.mjs +193 -193
- package/esm2022/lib/skeleton/skeleton-presets.mjs +1 -1
- package/esm2022/lib/skeleton/skeleton-shapes.component.mjs +1 -1
- package/esm2022/lib/spinner/spinner.component.mjs +1 -1
- package/esm2022/lib/status-dot/status-dot.component.mjs +17 -17
- package/esm2022/lib/stepper/stepper.component.mjs +3 -3
- package/esm2022/lib/tabs/tabs.component.mjs +3 -3
- package/esm2022/lib/toast/toast.component.mjs +3 -3
- package/esm2022/lib/tool-tip/tool-tip.component.mjs +3 -3
- package/esm2022/lib/typography-animation/typography-animation.component.mjs +3 -3
- package/esm2022/utils/validators.mjs +1 -1
- package/fesm2022/sarasanalytics-com-design-system.mjs +487 -438
- package/fesm2022/sarasanalytics-com-design-system.mjs.map +1 -1
- package/lib/data-grid/data-grid.component.d.ts +2 -2
- package/lib/form-select/form-select.component.d.ts +1 -0
- package/lib/message-banner-v2/message-banner-v2.component.d.ts +3 -0
- package/package.json +1 -1
- package/styles/styles.css +432 -432
|
@@ -250,7 +250,7 @@ export class QueryBuilderComponent {
|
|
|
250
250
|
this.queryChange.emit(this.model);
|
|
251
251
|
}
|
|
252
252
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: QueryBuilderComponent, deps: [{ token: i1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
253
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.4", type: QueryBuilderComponent, isStandalone: true, selector: "sa-query-builder", inputs: { config: "config" }, outputs: { queryChange: "queryChange" }, providers: [MatNativeDateModule], ngImport: i0, template: "<div class=\"sa-query-builder\">\n <form [formGroup]=\"form\">\n <div class=\"query-builder-header\">\n <div class=\"where-label\">Where</div>\n </div>\n\n <div class=\"query-builder-body\">\n <div class=\"rules-container\" formArrayName=\"rules\">\n @for (rule of rulesArray.controls; track $index) {\n <div class=\"rule-row\" [formGroupName]=\"$index\">\n <!-- Condition selector (And/Or) -->\n @if ($index > 0) {\n <div class=\"condition-selector\">\n <mat-form-field appearance=\"fill\">\n <mat-select [value]=\"getRowCondition($index)\" (selectionChange)=\"setRowCondition($index, $event.value)\">\n <mat-option value=\"and\">And</mat-option>\n <mat-option value=\"or\">Or</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n } @else {\n <div class=\"condition-placeholder\"></div>\n }\n \n <!-- Field selection -->\n <mat-form-field class=\"field-select\">\n <mat-label>Select a filter</mat-label>\n <mat-select formControlName=\"field\" (selectionChange)=\"onFieldChange($index, $event.value)\">\n @for (field of config.fields; track field.key) {\n <mat-option [value]=\"field.key\">\n {{ field.label }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n\n <!-- Operator selection -->\n <mat-form-field class=\"operator-select\">\n <mat-select formControlName=\"operator\" (selectionChange)=\"onOperatorChange($index, $event.value, rule.value.field)\">\n @for (op of getOperatorsForField(rule.value.field); track op.value) {\n <mat-option [value]=\"op.value\">\n {{ op.label }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n\n <!-- Value input based on field type -->\n @switch (getFieldType(rule.value.field)) {\n @case ('string') {\n <mat-form-field class=\"value-input\">\n <input matInput formControlName=\"value\" placeholder=\"Enter a value...\">\n </mat-form-field>\n }\n @case ('number') {\n <mat-form-field class=\"value-input\">\n <input matInput type=\"number\" formControlName=\"value\" placeholder=\"Enter a value...\">\n </mat-form-field>\n }\n @case ('date') {\n @if (!isOperatorBetween($index)) {\n <mat-form-field class=\"value-input\">\n <input matInput type=\"date\" [matDatepicker]=\"picker\" formControlName=\"value\" (click)=\"picker.open()\">\n <mat-datepicker-toggle matIconSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n </mat-form-field>\n } @else {\n <div class=\"date-range-container\">\n <mat-form-field class=\"value-input start-date\">\n <mat-label>Start date</mat-label>\n <input matInput [matDatepicker]=\"startPicker\" formControlName=\"valueStart\" (click)=\"startPicker.open()\" (dateChange)=\"onStartDateChange($index, $event)\">\n <mat-datepicker-toggle matIconSuffix [for]=\"startPicker\"></mat-datepicker-toggle>\n <mat-datepicker #startPicker></mat-datepicker>\n </mat-form-field>\n <mat-form-field class=\"value-input end-date\">\n <mat-label>End date</mat-label>\n <input matInput [matDatepicker]=\"endPicker\" formControlName=\"valueEnd\" (click)=\"endPicker.open()\" [min]=\"getMinEndDate($index)\">\n <mat-datepicker-toggle matIconSuffix [for]=\"endPicker\"></mat-datepicker-toggle>\n <mat-datepicker #endPicker [startAt]=\"getMinEndDate($index)\"></mat-datepicker>\n </mat-form-field>\n </div>\n }\n }\n @case ('boolean') {\n <mat-form-field class=\"value-input\">\n <mat-select formControlName=\"value\">\n <mat-option [value]=\"true\">True</mat-option>\n <mat-option [value]=\"false\">False</mat-option>\n </mat-select>\n </mat-form-field>\n }\n @case ('select') {\n <mat-form-field class=\"value-input\">\n <mat-select formControlName=\"value\">\n @for (option of getFieldOptions(rule.value.field); track option.value) {\n <mat-option [value]=\"option.value\">\n {{ option.label }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n }\n @default {\n <mat-form-field class=\"value-input\">\n <input matInput formControlName=\"value\" placeholder=\"Enter a value...\">\n </mat-form-field>\n }\n }\n\n <!-- Remove rule button -->\n <button mat-icon-button class=\"remove-rule-btn\" \n (click)=\"removeRule($index)\" \n [disabled]=\"rulesArray.length === 1\"\n matTooltip=\"Remove filter\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n }\n </div>\n\n <!-- Add rule button -->\n <div class=\"add-rule-container\">\n <button mat-button color=\"primary\" class=\"add-rule-btn\" (click)=\"addRule()\">\n <mat-icon>add</mat-icon> Add a filter\n </button>\n </div>\n </div>\n\n <div class=\"query-builder-footer\">\n <button mat-button class=\"reset-btn\" (click)=\"resetQuery()\">Reset</button>\n <button mat-raised-button color=\"primary\" class=\"apply-btn\" (click)=\"applyQuery()\">Apply filters</button>\n </div>\n </form>\n</div>\n", styles: [".sa-query-builder{display:flex;flex-direction:column;width:100%;background-color:#fff;border-radius:8px;padding:16px;box-sizing:border-box}.sa-query-builder .query-builder-header{display:flex;align-items:center;margin-bottom:16px;height:36px;padding-left:128px}.sa-query-builder .query-builder-header .where-label{font-size:16px;font-weight:500;color:#000000de;margin-right:16px;line-height:36px}.sa-query-builder .query-builder-body .rules-container{display:flex;flex-direction:column;gap:12px;margin-bottom:16px}.sa-query-builder .query-builder-body .rules-container .rule-row{display:flex;align-items:center;gap:12px;width:100%}.sa-query-builder .query-builder-body .rules-container .rule-row .condition-selector{width:120px;min-width:120px;margin-right:8px}.sa-query-builder .query-builder-body .rules-container .rule-row .condition-selector .mat-form-field{width:100%}.sa-query-builder .query-builder-body .rules-container .rule-row .condition-selector ::ng-deep .mat-form-field-wrapper{padding-bottom:0;margin:0}.sa-query-builder .query-builder-body .rules-container .rule-row .condition-selector ::ng-deep .mat-form-field-infix{padding:.5em 0;border-top:0}.sa-query-builder .query-builder-body .rules-container .rule-row .condition-placeholder{width:120px;min-width:120px;margin-right:8px}.sa-query-builder .query-builder-body .rules-container .rule-row .field-select{flex:2;min-width:180px}.sa-query-builder .query-builder-body .rules-container .rule-row .operator-select{flex:1;min-width:100px}.sa-query-builder .query-builder-body .rules-container .rule-row .value-input{flex:2;min-width:180px}.sa-query-builder .query-builder-body .rules-container .rule-row .date-range-container{display:flex;flex:2;gap:8px}.sa-query-builder .query-builder-body .rules-container .rule-row .date-range-container .start-date,.sa-query-builder .query-builder-body .rules-container .rule-row .date-range-container .end-date{flex:1;min-width:140px}.sa-query-builder .query-builder-body .rules-container .rule-row .remove-rule-btn{color:#0000008a}.sa-query-builder .query-builder-body .add-rule-container{margin-bottom:16px}.sa-query-builder .query-builder-body .add-rule-container .add-rule-btn{display:flex;align-items:center;gap:4px;color:#673ab7;font-weight:500}.sa-query-builder .query-builder-footer{display:flex;justify-content:flex-end;gap:12px;margin-top:16px}.sa-query-builder .query-builder-footer .reset-btn{color:#0000008a}.sa-query-builder .query-builder-footer .apply-btn{background-color:#673ab7;color:#fff}::ng-deep .mat-mdc-form-field-subscript-wrapper{display:none}::ng-deep .mat-mdc-form-field-infix{min-height:40px}::ng-deep .mat-mdc-select-panel{max-height:300px}::ng-deep .mat-mdc-option{font-size:14px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.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: i1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i1.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "ngmodule", type: FormlyModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i5.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i6.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i7.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: MatTooltipModule }, { kind: "directive", type: i8.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatButtonToggleModule }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i9.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i9.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i9.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "ngmodule", type: MatNativeDateModule }] }); }
|
|
253
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.4", type: QueryBuilderComponent, isStandalone: true, selector: "sa-query-builder", inputs: { config: "config" }, outputs: { queryChange: "queryChange" }, providers: [MatNativeDateModule], ngImport: i0, template: "<div class=\"sa-query-builder\">\r\n <form [formGroup]=\"form\">\r\n <div class=\"query-builder-header\">\r\n <div class=\"where-label\">Where</div>\r\n </div>\r\n\r\n <div class=\"query-builder-body\">\r\n <div class=\"rules-container\" formArrayName=\"rules\">\r\n @for (rule of rulesArray.controls; track $index) {\r\n <div class=\"rule-row\" [formGroupName]=\"$index\">\r\n <!-- Condition selector (And/Or) -->\r\n @if ($index > 0) {\r\n <div class=\"condition-selector\">\r\n <mat-form-field appearance=\"fill\">\r\n <mat-select [value]=\"getRowCondition($index)\" (selectionChange)=\"setRowCondition($index, $event.value)\">\r\n <mat-option value=\"and\">And</mat-option>\r\n <mat-option value=\"or\">Or</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n } @else {\r\n <div class=\"condition-placeholder\"></div>\r\n }\r\n \r\n <!-- Field selection -->\r\n <mat-form-field class=\"field-select\">\r\n <mat-label>Select a filter</mat-label>\r\n <mat-select formControlName=\"field\" (selectionChange)=\"onFieldChange($index, $event.value)\">\r\n @for (field of config.fields; track field.key) {\r\n <mat-option [value]=\"field.key\">\r\n {{ field.label }}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <!-- Operator selection -->\r\n <mat-form-field class=\"operator-select\">\r\n <mat-select formControlName=\"operator\" (selectionChange)=\"onOperatorChange($index, $event.value, rule.value.field)\">\r\n @for (op of getOperatorsForField(rule.value.field); track op.value) {\r\n <mat-option [value]=\"op.value\">\r\n {{ op.label }}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <!-- Value input based on field type -->\r\n @switch (getFieldType(rule.value.field)) {\r\n @case ('string') {\r\n <mat-form-field class=\"value-input\">\r\n <input matInput formControlName=\"value\" placeholder=\"Enter a value...\">\r\n </mat-form-field>\r\n }\r\n @case ('number') {\r\n <mat-form-field class=\"value-input\">\r\n <input matInput type=\"number\" formControlName=\"value\" placeholder=\"Enter a value...\">\r\n </mat-form-field>\r\n }\r\n @case ('date') {\r\n @if (!isOperatorBetween($index)) {\r\n <mat-form-field class=\"value-input\">\r\n <input matInput type=\"date\" [matDatepicker]=\"picker\" formControlName=\"value\" (click)=\"picker.open()\">\r\n <mat-datepicker-toggle matIconSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n <mat-datepicker #picker></mat-datepicker>\r\n </mat-form-field>\r\n } @else {\r\n <div class=\"date-range-container\">\r\n <mat-form-field class=\"value-input start-date\">\r\n <mat-label>Start date</mat-label>\r\n <input matInput [matDatepicker]=\"startPicker\" formControlName=\"valueStart\" (click)=\"startPicker.open()\" (dateChange)=\"onStartDateChange($index, $event)\">\r\n <mat-datepicker-toggle matIconSuffix [for]=\"startPicker\"></mat-datepicker-toggle>\r\n <mat-datepicker #startPicker></mat-datepicker>\r\n </mat-form-field>\r\n <mat-form-field class=\"value-input end-date\">\r\n <mat-label>End date</mat-label>\r\n <input matInput [matDatepicker]=\"endPicker\" formControlName=\"valueEnd\" (click)=\"endPicker.open()\" [min]=\"getMinEndDate($index)\">\r\n <mat-datepicker-toggle matIconSuffix [for]=\"endPicker\"></mat-datepicker-toggle>\r\n <mat-datepicker #endPicker [startAt]=\"getMinEndDate($index)\"></mat-datepicker>\r\n </mat-form-field>\r\n </div>\r\n }\r\n }\r\n @case ('boolean') {\r\n <mat-form-field class=\"value-input\">\r\n <mat-select formControlName=\"value\">\r\n <mat-option [value]=\"true\">True</mat-option>\r\n <mat-option [value]=\"false\">False</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n @case ('select') {\r\n <mat-form-field class=\"value-input\">\r\n <mat-select formControlName=\"value\">\r\n @for (option of getFieldOptions(rule.value.field); track option.value) {\r\n <mat-option [value]=\"option.value\">\r\n {{ option.label }}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n @default {\r\n <mat-form-field class=\"value-input\">\r\n <input matInput formControlName=\"value\" placeholder=\"Enter a value...\">\r\n </mat-form-field>\r\n }\r\n }\r\n\r\n <!-- Remove rule button -->\r\n <button mat-icon-button class=\"remove-rule-btn\" \r\n (click)=\"removeRule($index)\" \r\n [disabled]=\"rulesArray.length === 1\"\r\n matTooltip=\"Remove filter\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n\r\n <!-- Add rule button -->\r\n <div class=\"add-rule-container\">\r\n <button mat-button color=\"primary\" class=\"add-rule-btn\" (click)=\"addRule()\">\r\n <mat-icon>add</mat-icon> Add a filter\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"query-builder-footer\">\r\n <button mat-button class=\"reset-btn\" (click)=\"resetQuery()\">Reset</button>\r\n <button mat-raised-button color=\"primary\" class=\"apply-btn\" (click)=\"applyQuery()\">Apply filters</button>\r\n </div>\r\n </form>\r\n</div>\r\n", styles: [".sa-query-builder{display:flex;flex-direction:column;width:100%;background-color:#fff;border-radius:8px;padding:16px;box-sizing:border-box}.sa-query-builder .query-builder-header{display:flex;align-items:center;margin-bottom:16px;height:36px;padding-left:128px}.sa-query-builder .query-builder-header .where-label{font-size:16px;font-weight:500;color:#000000de;margin-right:16px;line-height:36px}.sa-query-builder .query-builder-body .rules-container{display:flex;flex-direction:column;gap:12px;margin-bottom:16px}.sa-query-builder .query-builder-body .rules-container .rule-row{display:flex;align-items:center;gap:12px;width:100%}.sa-query-builder .query-builder-body .rules-container .rule-row .condition-selector{width:120px;min-width:120px;margin-right:8px}.sa-query-builder .query-builder-body .rules-container .rule-row .condition-selector .mat-form-field{width:100%}.sa-query-builder .query-builder-body .rules-container .rule-row .condition-selector ::ng-deep .mat-form-field-wrapper{padding-bottom:0;margin:0}.sa-query-builder .query-builder-body .rules-container .rule-row .condition-selector ::ng-deep .mat-form-field-infix{padding:.5em 0;border-top:0}.sa-query-builder .query-builder-body .rules-container .rule-row .condition-placeholder{width:120px;min-width:120px;margin-right:8px}.sa-query-builder .query-builder-body .rules-container .rule-row .field-select{flex:2;min-width:180px}.sa-query-builder .query-builder-body .rules-container .rule-row .operator-select{flex:1;min-width:100px}.sa-query-builder .query-builder-body .rules-container .rule-row .value-input{flex:2;min-width:180px}.sa-query-builder .query-builder-body .rules-container .rule-row .date-range-container{display:flex;flex:2;gap:8px}.sa-query-builder .query-builder-body .rules-container .rule-row .date-range-container .start-date,.sa-query-builder .query-builder-body .rules-container .rule-row .date-range-container .end-date{flex:1;min-width:140px}.sa-query-builder .query-builder-body .rules-container .rule-row .remove-rule-btn{color:#0000008a}.sa-query-builder .query-builder-body .add-rule-container{margin-bottom:16px}.sa-query-builder .query-builder-body .add-rule-container .add-rule-btn{display:flex;align-items:center;gap:4px;color:#673ab7;font-weight:500}.sa-query-builder .query-builder-footer{display:flex;justify-content:flex-end;gap:12px;margin-top:16px}.sa-query-builder .query-builder-footer .reset-btn{color:#0000008a}.sa-query-builder .query-builder-footer .apply-btn{background-color:#673ab7;color:#fff}::ng-deep .mat-mdc-form-field-subscript-wrapper{display:none}::ng-deep .mat-mdc-form-field-infix{min-height:40px}::ng-deep .mat-mdc-select-panel{max-height:300px}::ng-deep .mat-mdc-option{font-size:14px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.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: i1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i1.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "ngmodule", type: FormlyModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i5.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i6.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i7.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: MatTooltipModule }, { kind: "directive", type: i8.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatButtonToggleModule }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i9.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i9.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i9.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "ngmodule", type: MatNativeDateModule }] }); }
|
|
254
254
|
}
|
|
255
255
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: QueryBuilderComponent, decorators: [{
|
|
256
256
|
type: Component,
|
|
@@ -267,10 +267,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
|
|
|
267
267
|
MatButtonToggleModule,
|
|
268
268
|
MatDatepickerModule,
|
|
269
269
|
MatNativeDateModule
|
|
270
|
-
], template: "<div class=\"sa-query-builder\">\n <form [formGroup]=\"form\">\n <div class=\"query-builder-header\">\n <div class=\"where-label\">Where</div>\n </div>\n\n <div class=\"query-builder-body\">\n <div class=\"rules-container\" formArrayName=\"rules\">\n @for (rule of rulesArray.controls; track $index) {\n <div class=\"rule-row\" [formGroupName]=\"$index\">\n <!-- Condition selector (And/Or) -->\n @if ($index > 0) {\n <div class=\"condition-selector\">\n <mat-form-field appearance=\"fill\">\n <mat-select [value]=\"getRowCondition($index)\" (selectionChange)=\"setRowCondition($index, $event.value)\">\n <mat-option value=\"and\">And</mat-option>\n <mat-option value=\"or\">Or</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n } @else {\n <div class=\"condition-placeholder\"></div>\n }\n \n <!-- Field selection -->\n <mat-form-field class=\"field-select\">\n <mat-label>Select a filter</mat-label>\n <mat-select formControlName=\"field\" (selectionChange)=\"onFieldChange($index, $event.value)\">\n @for (field of config.fields; track field.key) {\n <mat-option [value]=\"field.key\">\n {{ field.label }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n\n <!-- Operator selection -->\n <mat-form-field class=\"operator-select\">\n <mat-select formControlName=\"operator\" (selectionChange)=\"onOperatorChange($index, $event.value, rule.value.field)\">\n @for (op of getOperatorsForField(rule.value.field); track op.value) {\n <mat-option [value]=\"op.value\">\n {{ op.label }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n\n <!-- Value input based on field type -->\n @switch (getFieldType(rule.value.field)) {\n @case ('string') {\n <mat-form-field class=\"value-input\">\n <input matInput formControlName=\"value\" placeholder=\"Enter a value...\">\n </mat-form-field>\n }\n @case ('number') {\n <mat-form-field class=\"value-input\">\n <input matInput type=\"number\" formControlName=\"value\" placeholder=\"Enter a value...\">\n </mat-form-field>\n }\n @case ('date') {\n @if (!isOperatorBetween($index)) {\n <mat-form-field class=\"value-input\">\n <input matInput type=\"date\" [matDatepicker]=\"picker\" formControlName=\"value\" (click)=\"picker.open()\">\n <mat-datepicker-toggle matIconSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n </mat-form-field>\n } @else {\n <div class=\"date-range-container\">\n <mat-form-field class=\"value-input start-date\">\n <mat-label>Start date</mat-label>\n <input matInput [matDatepicker]=\"startPicker\" formControlName=\"valueStart\" (click)=\"startPicker.open()\" (dateChange)=\"onStartDateChange($index, $event)\">\n <mat-datepicker-toggle matIconSuffix [for]=\"startPicker\"></mat-datepicker-toggle>\n <mat-datepicker #startPicker></mat-datepicker>\n </mat-form-field>\n <mat-form-field class=\"value-input end-date\">\n <mat-label>End date</mat-label>\n <input matInput [matDatepicker]=\"endPicker\" formControlName=\"valueEnd\" (click)=\"endPicker.open()\" [min]=\"getMinEndDate($index)\">\n <mat-datepicker-toggle matIconSuffix [for]=\"endPicker\"></mat-datepicker-toggle>\n <mat-datepicker #endPicker [startAt]=\"getMinEndDate($index)\"></mat-datepicker>\n </mat-form-field>\n </div>\n }\n }\n @case ('boolean') {\n <mat-form-field class=\"value-input\">\n <mat-select formControlName=\"value\">\n <mat-option [value]=\"true\">True</mat-option>\n <mat-option [value]=\"false\">False</mat-option>\n </mat-select>\n </mat-form-field>\n }\n @case ('select') {\n <mat-form-field class=\"value-input\">\n <mat-select formControlName=\"value\">\n @for (option of getFieldOptions(rule.value.field); track option.value) {\n <mat-option [value]=\"option.value\">\n {{ option.label }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n }\n @default {\n <mat-form-field class=\"value-input\">\n <input matInput formControlName=\"value\" placeholder=\"Enter a value...\">\n </mat-form-field>\n }\n }\n\n <!-- Remove rule button -->\n <button mat-icon-button class=\"remove-rule-btn\" \n (click)=\"removeRule($index)\" \n [disabled]=\"rulesArray.length === 1\"\n matTooltip=\"Remove filter\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n }\n </div>\n\n <!-- Add rule button -->\n <div class=\"add-rule-container\">\n <button mat-button color=\"primary\" class=\"add-rule-btn\" (click)=\"addRule()\">\n <mat-icon>add</mat-icon> Add a filter\n </button>\n </div>\n </div>\n\n <div class=\"query-builder-footer\">\n <button mat-button class=\"reset-btn\" (click)=\"resetQuery()\">Reset</button>\n <button mat-raised-button color=\"primary\" class=\"apply-btn\" (click)=\"applyQuery()\">Apply filters</button>\n </div>\n </form>\n</div>\n", styles: [".sa-query-builder{display:flex;flex-direction:column;width:100%;background-color:#fff;border-radius:8px;padding:16px;box-sizing:border-box}.sa-query-builder .query-builder-header{display:flex;align-items:center;margin-bottom:16px;height:36px;padding-left:128px}.sa-query-builder .query-builder-header .where-label{font-size:16px;font-weight:500;color:#000000de;margin-right:16px;line-height:36px}.sa-query-builder .query-builder-body .rules-container{display:flex;flex-direction:column;gap:12px;margin-bottom:16px}.sa-query-builder .query-builder-body .rules-container .rule-row{display:flex;align-items:center;gap:12px;width:100%}.sa-query-builder .query-builder-body .rules-container .rule-row .condition-selector{width:120px;min-width:120px;margin-right:8px}.sa-query-builder .query-builder-body .rules-container .rule-row .condition-selector .mat-form-field{width:100%}.sa-query-builder .query-builder-body .rules-container .rule-row .condition-selector ::ng-deep .mat-form-field-wrapper{padding-bottom:0;margin:0}.sa-query-builder .query-builder-body .rules-container .rule-row .condition-selector ::ng-deep .mat-form-field-infix{padding:.5em 0;border-top:0}.sa-query-builder .query-builder-body .rules-container .rule-row .condition-placeholder{width:120px;min-width:120px;margin-right:8px}.sa-query-builder .query-builder-body .rules-container .rule-row .field-select{flex:2;min-width:180px}.sa-query-builder .query-builder-body .rules-container .rule-row .operator-select{flex:1;min-width:100px}.sa-query-builder .query-builder-body .rules-container .rule-row .value-input{flex:2;min-width:180px}.sa-query-builder .query-builder-body .rules-container .rule-row .date-range-container{display:flex;flex:2;gap:8px}.sa-query-builder .query-builder-body .rules-container .rule-row .date-range-container .start-date,.sa-query-builder .query-builder-body .rules-container .rule-row .date-range-container .end-date{flex:1;min-width:140px}.sa-query-builder .query-builder-body .rules-container .rule-row .remove-rule-btn{color:#0000008a}.sa-query-builder .query-builder-body .add-rule-container{margin-bottom:16px}.sa-query-builder .query-builder-body .add-rule-container .add-rule-btn{display:flex;align-items:center;gap:4px;color:#673ab7;font-weight:500}.sa-query-builder .query-builder-footer{display:flex;justify-content:flex-end;gap:12px;margin-top:16px}.sa-query-builder .query-builder-footer .reset-btn{color:#0000008a}.sa-query-builder .query-builder-footer .apply-btn{background-color:#673ab7;color:#fff}::ng-deep .mat-mdc-form-field-subscript-wrapper{display:none}::ng-deep .mat-mdc-form-field-infix{min-height:40px}::ng-deep .mat-mdc-select-panel{max-height:300px}::ng-deep .mat-mdc-option{font-size:14px}\n"] }]
|
|
270
|
+
], template: "<div class=\"sa-query-builder\">\r\n <form [formGroup]=\"form\">\r\n <div class=\"query-builder-header\">\r\n <div class=\"where-label\">Where</div>\r\n </div>\r\n\r\n <div class=\"query-builder-body\">\r\n <div class=\"rules-container\" formArrayName=\"rules\">\r\n @for (rule of rulesArray.controls; track $index) {\r\n <div class=\"rule-row\" [formGroupName]=\"$index\">\r\n <!-- Condition selector (And/Or) -->\r\n @if ($index > 0) {\r\n <div class=\"condition-selector\">\r\n <mat-form-field appearance=\"fill\">\r\n <mat-select [value]=\"getRowCondition($index)\" (selectionChange)=\"setRowCondition($index, $event.value)\">\r\n <mat-option value=\"and\">And</mat-option>\r\n <mat-option value=\"or\">Or</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n } @else {\r\n <div class=\"condition-placeholder\"></div>\r\n }\r\n \r\n <!-- Field selection -->\r\n <mat-form-field class=\"field-select\">\r\n <mat-label>Select a filter</mat-label>\r\n <mat-select formControlName=\"field\" (selectionChange)=\"onFieldChange($index, $event.value)\">\r\n @for (field of config.fields; track field.key) {\r\n <mat-option [value]=\"field.key\">\r\n {{ field.label }}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <!-- Operator selection -->\r\n <mat-form-field class=\"operator-select\">\r\n <mat-select formControlName=\"operator\" (selectionChange)=\"onOperatorChange($index, $event.value, rule.value.field)\">\r\n @for (op of getOperatorsForField(rule.value.field); track op.value) {\r\n <mat-option [value]=\"op.value\">\r\n {{ op.label }}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <!-- Value input based on field type -->\r\n @switch (getFieldType(rule.value.field)) {\r\n @case ('string') {\r\n <mat-form-field class=\"value-input\">\r\n <input matInput formControlName=\"value\" placeholder=\"Enter a value...\">\r\n </mat-form-field>\r\n }\r\n @case ('number') {\r\n <mat-form-field class=\"value-input\">\r\n <input matInput type=\"number\" formControlName=\"value\" placeholder=\"Enter a value...\">\r\n </mat-form-field>\r\n }\r\n @case ('date') {\r\n @if (!isOperatorBetween($index)) {\r\n <mat-form-field class=\"value-input\">\r\n <input matInput type=\"date\" [matDatepicker]=\"picker\" formControlName=\"value\" (click)=\"picker.open()\">\r\n <mat-datepicker-toggle matIconSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n <mat-datepicker #picker></mat-datepicker>\r\n </mat-form-field>\r\n } @else {\r\n <div class=\"date-range-container\">\r\n <mat-form-field class=\"value-input start-date\">\r\n <mat-label>Start date</mat-label>\r\n <input matInput [matDatepicker]=\"startPicker\" formControlName=\"valueStart\" (click)=\"startPicker.open()\" (dateChange)=\"onStartDateChange($index, $event)\">\r\n <mat-datepicker-toggle matIconSuffix [for]=\"startPicker\"></mat-datepicker-toggle>\r\n <mat-datepicker #startPicker></mat-datepicker>\r\n </mat-form-field>\r\n <mat-form-field class=\"value-input end-date\">\r\n <mat-label>End date</mat-label>\r\n <input matInput [matDatepicker]=\"endPicker\" formControlName=\"valueEnd\" (click)=\"endPicker.open()\" [min]=\"getMinEndDate($index)\">\r\n <mat-datepicker-toggle matIconSuffix [for]=\"endPicker\"></mat-datepicker-toggle>\r\n <mat-datepicker #endPicker [startAt]=\"getMinEndDate($index)\"></mat-datepicker>\r\n </mat-form-field>\r\n </div>\r\n }\r\n }\r\n @case ('boolean') {\r\n <mat-form-field class=\"value-input\">\r\n <mat-select formControlName=\"value\">\r\n <mat-option [value]=\"true\">True</mat-option>\r\n <mat-option [value]=\"false\">False</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n @case ('select') {\r\n <mat-form-field class=\"value-input\">\r\n <mat-select formControlName=\"value\">\r\n @for (option of getFieldOptions(rule.value.field); track option.value) {\r\n <mat-option [value]=\"option.value\">\r\n {{ option.label }}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n @default {\r\n <mat-form-field class=\"value-input\">\r\n <input matInput formControlName=\"value\" placeholder=\"Enter a value...\">\r\n </mat-form-field>\r\n }\r\n }\r\n\r\n <!-- Remove rule button -->\r\n <button mat-icon-button class=\"remove-rule-btn\" \r\n (click)=\"removeRule($index)\" \r\n [disabled]=\"rulesArray.length === 1\"\r\n matTooltip=\"Remove filter\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n\r\n <!-- Add rule button -->\r\n <div class=\"add-rule-container\">\r\n <button mat-button color=\"primary\" class=\"add-rule-btn\" (click)=\"addRule()\">\r\n <mat-icon>add</mat-icon> Add a filter\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"query-builder-footer\">\r\n <button mat-button class=\"reset-btn\" (click)=\"resetQuery()\">Reset</button>\r\n <button mat-raised-button color=\"primary\" class=\"apply-btn\" (click)=\"applyQuery()\">Apply filters</button>\r\n </div>\r\n </form>\r\n</div>\r\n", styles: [".sa-query-builder{display:flex;flex-direction:column;width:100%;background-color:#fff;border-radius:8px;padding:16px;box-sizing:border-box}.sa-query-builder .query-builder-header{display:flex;align-items:center;margin-bottom:16px;height:36px;padding-left:128px}.sa-query-builder .query-builder-header .where-label{font-size:16px;font-weight:500;color:#000000de;margin-right:16px;line-height:36px}.sa-query-builder .query-builder-body .rules-container{display:flex;flex-direction:column;gap:12px;margin-bottom:16px}.sa-query-builder .query-builder-body .rules-container .rule-row{display:flex;align-items:center;gap:12px;width:100%}.sa-query-builder .query-builder-body .rules-container .rule-row .condition-selector{width:120px;min-width:120px;margin-right:8px}.sa-query-builder .query-builder-body .rules-container .rule-row .condition-selector .mat-form-field{width:100%}.sa-query-builder .query-builder-body .rules-container .rule-row .condition-selector ::ng-deep .mat-form-field-wrapper{padding-bottom:0;margin:0}.sa-query-builder .query-builder-body .rules-container .rule-row .condition-selector ::ng-deep .mat-form-field-infix{padding:.5em 0;border-top:0}.sa-query-builder .query-builder-body .rules-container .rule-row .condition-placeholder{width:120px;min-width:120px;margin-right:8px}.sa-query-builder .query-builder-body .rules-container .rule-row .field-select{flex:2;min-width:180px}.sa-query-builder .query-builder-body .rules-container .rule-row .operator-select{flex:1;min-width:100px}.sa-query-builder .query-builder-body .rules-container .rule-row .value-input{flex:2;min-width:180px}.sa-query-builder .query-builder-body .rules-container .rule-row .date-range-container{display:flex;flex:2;gap:8px}.sa-query-builder .query-builder-body .rules-container .rule-row .date-range-container .start-date,.sa-query-builder .query-builder-body .rules-container .rule-row .date-range-container .end-date{flex:1;min-width:140px}.sa-query-builder .query-builder-body .rules-container .rule-row .remove-rule-btn{color:#0000008a}.sa-query-builder .query-builder-body .add-rule-container{margin-bottom:16px}.sa-query-builder .query-builder-body .add-rule-container .add-rule-btn{display:flex;align-items:center;gap:4px;color:#673ab7;font-weight:500}.sa-query-builder .query-builder-footer{display:flex;justify-content:flex-end;gap:12px;margin-top:16px}.sa-query-builder .query-builder-footer .reset-btn{color:#0000008a}.sa-query-builder .query-builder-footer .apply-btn{background-color:#673ab7;color:#fff}::ng-deep .mat-mdc-form-field-subscript-wrapper{display:none}::ng-deep .mat-mdc-form-field-infix{min-height:40px}::ng-deep .mat-mdc-select-panel{max-height:300px}::ng-deep .mat-mdc-option{font-size:14px}\n"] }]
|
|
271
271
|
}], ctorParameters: () => [{ type: i1.FormBuilder }], propDecorators: { config: [{
|
|
272
272
|
type: Input
|
|
273
273
|
}], queryChange: [{
|
|
274
274
|
type: Output
|
|
275
275
|
}] } });
|
|
276
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktYnVpbGRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnQtbGlicmFyeS9zcmMvbGliL3F1ZXJ5LWJ1aWxkZXIvcXVlcnktYnVpbGRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnQtbGlicmFyeS9zcmMvbGliL3F1ZXJ5LWJ1aWxkZXIvcXVlcnktYnVpbGRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQWtELG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckcsT0FBTyxFQUFxQixZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNuRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDeEUsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDakUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7Ozs7Ozs7O0FBd0Q3RCxNQUFNLE9BQU8scUJBQXFCO0lBcUJoQyxZQUFvQixFQUFlO1FBQWYsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQXBCMUIsV0FBTSxHQUFnQjtZQUM3QixNQUFNLEVBQUUsRUFBRTtZQUNWLFNBQVMsRUFBRTtnQkFDVCxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRTtnQkFDMUIsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUU7Z0JBQzVCLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFO2dCQUMxQixFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRTtnQkFDMUIsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUU7Z0JBQzVCLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO2dCQUM1QixFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRTtnQkFDeEMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUU7YUFDdkM7WUFDRCxnQkFBZ0IsRUFBRSxLQUFLO1NBQ3hCLENBQUM7UUFFUSxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFjLENBQUM7UUFNckQsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQztZQUN4QixTQUFTLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDbEIsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztTQUN6QixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsS0FBSyxHQUFHO1lBQ1gsU0FBUyxFQUFFLEtBQUs7WUFDaEIsS0FBSyxFQUFFLEVBQUU7U0FDVixDQUFDO0lBQ0osQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBRWYsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3ZDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzlDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBYyxDQUFDO0lBQzdDLENBQUM7SUFFRCxjQUFjO1FBQ1osSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQztZQUN4QixTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixJQUFJLEtBQUssQ0FBQztZQUNsRCxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1NBQ3pCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDcEMsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzQyxNQUFNLGVBQWUsR0FBRyxZQUFZLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxJQUFJLEdBQUcsQ0FBQztRQUVySCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQztZQUM5QixLQUFLLEVBQUUsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDO1lBQ3pCLFFBQVEsRUFBRSxDQUFDLGVBQWUsQ0FBQztZQUMzQixLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUM7WUFDYixTQUFTLEVBQUUsQ0FBQyxLQUFLLENBQUM7U0FDbkIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFhO1FBQ3RCLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxhQUFhLENBQUMsR0FBVztRQUN2QixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVELG1CQUFtQixDQUFDLElBQVk7UUFDOUIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNsRixDQUFDO0lBRUQsb0JBQW9CLENBQUMsUUFBZ0I7UUFDbkMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsS0FBSztZQUFFLE9BQU8sRUFBRSxDQUFDO1FBRXRCLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3BCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDakYsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQsWUFBWSxDQUFDLFFBQWdCO1FBQzNCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDM0MsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztJQUN2QyxDQUFDO0lBRUQsaUJBQWlCLENBQUMsS0FBYTtRQUM3QixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQWMsQ0FBQztRQUN6RCxPQUFPLFNBQVMsRUFBRSxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsS0FBSyxLQUFLLFNBQVMsQ0FBQztJQUN6RCxDQUFDO0lBRUQsZUFBZSxDQUFDLFFBQWdCO1FBQzlCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDM0MsT0FBTyxLQUFLLEVBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsYUFBYSxDQUFDLEtBQWEsRUFBRSxRQUFnQjtRQUMzQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQWMsQ0FBQztRQUN6RCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTNDLElBQUksS0FBSyxFQUFFLENBQUM7WUFDVixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDdEQsTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDLGVBQWUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUVuRyxTQUFTLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUNyRCxTQUFTLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUV2QyxtQ0FBbUM7WUFDbkMsSUFBSSxTQUFTLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7Z0JBQ2hDLFNBQVMsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzlDLENBQUM7WUFDRCxJQUFJLFNBQVMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztnQkFDOUIsU0FBUyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDNUMsQ0FBQztZQUVELG9DQUFvQztZQUNwQyxJQUFJLENBQUMsNkJBQTZCLENBQUMsS0FBSyxFQUFFLGVBQWUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekUsQ0FBQztJQUNILENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUFhLEVBQUUsUUFBZ0IsRUFBRSxRQUFnQjtRQUNoRSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBRS9ELHFDQUFxQztRQUNyQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQWMsQ0FBQztRQUN6RCxTQUFTLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QyxJQUFJLFNBQVMsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztZQUNoQyxTQUFTLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QyxDQUFDO1FBQ0QsSUFBSSxTQUFTLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDOUIsU0FBUyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUMsQ0FBQztJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsYUFBYSxDQUFDLEtBQWE7UUFDekIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFjLENBQUM7UUFDekQsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsRUFBRSxLQUFLLENBQUM7UUFFckQsNERBQTREO1FBQzVELDZCQUE2QjtRQUM3QixPQUFPLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7SUFDdEQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxpQkFBaUIsQ0FBQyxLQUFhLEVBQUUsS0FBVTtRQUN6QyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQWMsQ0FBQztRQUN6RCxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLEtBQUssQ0FBQztRQUNqRCxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBRTlCLDZDQUE2QztRQUM3QyxJQUFJLE9BQU8sSUFBSSxTQUFTLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUNwRSxTQUFTLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QyxDQUFDO0lBQ0gsQ0FBQztJQUVELDZCQUE2QixDQUFDLEtBQWEsRUFBRSxRQUFnQixFQUFFLFNBQWlCO1FBQzlFLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBYyxDQUFDO1FBRXpELDJDQUEyQztRQUMzQyxJQUFJLFFBQVEsS0FBSyxTQUFTLElBQUksU0FBUyxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQ25ELHNEQUFzRDtZQUN0RCxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO2dCQUN0QyxTQUFTLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQzVELENBQUM7WUFDRCxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO2dCQUNwQyxTQUFTLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQzFELENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLHdEQUF3RDtZQUN4RCxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztnQkFDckMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUN4QyxDQUFDO1lBQ0QsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQ25DLFNBQVMsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDdEMsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsb0JBQW9CLENBQUMsU0FBYztRQUNqQyxPQUFPO1lBQ0wsU0FBUyxFQUFFLFNBQVMsQ0FBQyxTQUFTO1lBQzlCLEtBQUssRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFO2dCQUN2QywyQ0FBMkM7Z0JBQzNDLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssTUFBTSxFQUFFLENBQUM7b0JBQzVFLE9BQU87d0JBQ0wsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO3dCQUNqQixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7d0JBQ3ZCLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFO3dCQUNyRCxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7cUJBQzFCLENBQUM7Z0JBQ0osQ0FBQztnQkFFRCxnQkFBZ0I7Z0JBQ2hCLE9BQU87b0JBQ0wsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO29CQUNqQixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7b0JBQ3ZCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztvQkFDakIsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO2lCQUMxQixDQUFDO1lBQ0osQ0FBQyxDQUFDO1NBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsZUFBZSxDQUFDLEtBQWE7UUFDM0IsSUFBSSxLQUFLLEtBQUssQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDLENBQUMscUNBQXFDO1FBRXBFLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBYyxDQUFDO1FBQ3pELE9BQU8sU0FBUyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxLQUFLLElBQUksS0FBSyxDQUFDO0lBQ3BELENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsZUFBZSxDQUFDLEtBQWEsRUFBRSxTQUF1QjtRQUNwRCxJQUFJLEtBQUssS0FBSyxDQUFDO1lBQUUsT0FBTyxDQUFDLHFDQUFxQztRQUU5RCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQWMsQ0FBQztRQUN6RCxTQUFTLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsZUFBZTtRQUNiLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsS0FBSyxDQUFDO1FBQzNELE1BQU0sWUFBWSxHQUFHLGdCQUFnQixLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDL0QsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFRCxpQkFBaUI7UUFDZixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEtBQUssS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3BFLENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVELFVBQVU7UUFDUixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEMsQ0FBQzs4R0E1UVUscUJBQXFCO2tHQUFyQixxQkFBcUIsc0lBaEJyQixDQUFDLG1CQUFtQixDQUFDLDBCQ3BEbEMsNnZNQXNJQSxzdEZEaEZJLFlBQVksOEJBQ1osbUJBQW1CLDR6Q0FDbkIsWUFBWSw4QkFDWixlQUFlLHdVQUNmLGFBQWEsbUxBQ2IsZUFBZSxna0NBQ2Ysa0JBQWtCLDhCQUNsQixjQUFjLDBXQUNkLGdCQUFnQiw0VEFDaEIscUJBQXFCLDhCQUNyQixtQkFBbUIsaWdCQUNuQixtQkFBbUI7OzJGQUdWLHFCQUFxQjtrQkFyQmpDLFNBQVM7K0JBQ0Usa0JBQWtCLGNBR2hCLElBQUksYUFDTCxDQUFDLG1CQUFtQixDQUFDLFdBQ3ZCO3dCQUNQLFlBQVk7d0JBQ1osbUJBQW1CO3dCQUNuQixZQUFZO3dCQUNaLGVBQWU7d0JBQ2YsYUFBYTt3QkFDYixlQUFlO3dCQUNmLGtCQUFrQjt3QkFDbEIsY0FBYzt3QkFDZCxnQkFBZ0I7d0JBQ2hCLHFCQUFxQjt3QkFDckIsbUJBQW1CO3dCQUNuQixtQkFBbUI7cUJBQ3BCO2dGQUdRLE1BQU07c0JBQWQsS0FBSztnQkFlSSxXQUFXO3NCQUFwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1BcnJheSwgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBGb3JtbHlGaWVsZENvbmZpZywgRm9ybWx5TW9kdWxlIH0gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgTWF0U2VsZWN0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XG5pbXBvcnQgeyBNYXRCdXR0b25Ub2dnbGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24tdG9nZ2xlJztcbmltcG9ydCB7TWF0RGF0ZXBpY2tlck1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGF0ZXBpY2tlcic7XG5pbXBvcnQgeyBNYXROYXRpdmVEYXRlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXVlcnlGaWVsZCB7XG4gIGtleTogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG4gIG9wdGlvbnM/OiB7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBhbnkgfVtdO1xuICBvcGVyYXRvcnM/OiBzdHJpbmdbXTtcbiAgZGVmYXVsdE9wZXJhdG9yPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXJ5T3BlcmF0b3Ige1xuICB2YWx1ZTogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xuICB0eXBlcz86IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXJ5Q29uZmlnIHtcbiAgZmllbGRzOiBRdWVyeUZpZWxkW107XG4gIG9wZXJhdG9yczogUXVlcnlPcGVyYXRvcltdO1xuICBkZWZhdWx0Q29uZGl0aW9uPzogJ2FuZCcgfCAnb3InO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXJ5UnVsZSB7XG4gIGZpZWxkOiBzdHJpbmc7XG4gIG9wZXJhdG9yOiBzdHJpbmc7XG4gIHZhbHVlOiBhbnk7XG4gIGNvbmRpdGlvbj86ICdhbmQnIHwgJ29yJztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBRdWVyeUdyb3VwIHtcbiAgY29uZGl0aW9uOiAnYW5kJyB8ICdvcic7XG4gIHJ1bGVzOiAoUXVlcnlSdWxlIHwgUXVlcnlHcm91cClbXTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2EtcXVlcnktYnVpbGRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9xdWVyeS1idWlsZGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcXVlcnktYnVpbGRlci5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBwcm92aWRlcnM6IFtNYXROYXRpdmVEYXRlTW9kdWxlXSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIEZvcm1seU1vZHVsZSxcbiAgICBNYXRCdXR0b25Nb2R1bGUsXG4gICAgTWF0SWNvbk1vZHVsZSxcbiAgICBNYXRTZWxlY3RNb2R1bGUsXG4gICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxuICAgIE1hdElucHV0TW9kdWxlLFxuICAgIE1hdFRvb2x0aXBNb2R1bGUsXG4gICAgTWF0QnV0dG9uVG9nZ2xlTW9kdWxlLFxuICAgIE1hdERhdGVwaWNrZXJNb2R1bGUsXG4gICAgTWF0TmF0aXZlRGF0ZU1vZHVsZVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIFF1ZXJ5QnVpbGRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIGNvbmZpZzogUXVlcnlDb25maWcgPSB7XG4gICAgZmllbGRzOiBbXSxcbiAgICBvcGVyYXRvcnM6IFtcbiAgICAgIHsgdmFsdWU6ICc9JywgbGFiZWw6ICc9JyB9LFxuICAgICAgeyB2YWx1ZTogJyE9JywgbGFiZWw6ICchPScgfSxcbiAgICAgIHsgdmFsdWU6ICc+JywgbGFiZWw6ICc+JyB9LFxuICAgICAgeyB2YWx1ZTogJzwnLCBsYWJlbDogJzwnIH0sXG4gICAgICB7IHZhbHVlOiAnPj0nLCBsYWJlbDogJz49JyB9LFxuICAgICAgeyB2YWx1ZTogJzw9JywgbGFiZWw6ICc8PScgfSxcbiAgICAgIHsgdmFsdWU6ICdjb250YWlucycsIGxhYmVsOiAnY29udGFpbnMnIH0sXG4gICAgICB7IHZhbHVlOiAnYmV0d2VlbicsIGxhYmVsOiAnYmV0d2VlbicgfVxuICAgIF0sXG4gICAgZGVmYXVsdENvbmRpdGlvbjogJ2FuZCdcbiAgfTtcblxuICBAT3V0cHV0KCkgcXVlcnlDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFF1ZXJ5R3JvdXA+KCk7XG5cbiAgZm9ybTogRm9ybUdyb3VwO1xuICBtb2RlbDogUXVlcnlHcm91cDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZiOiBGb3JtQnVpbGRlcikge1xuICAgIHRoaXMuZm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgY29uZGl0aW9uOiBbJ2FuZCddLFxuICAgICAgcnVsZXM6IHRoaXMuZmIuYXJyYXkoW10pXG4gICAgfSk7XG5cbiAgICB0aGlzLm1vZGVsID0ge1xuICAgICAgY29uZGl0aW9uOiAnYW5kJyxcbiAgICAgIHJ1bGVzOiBbXVxuICAgIH07XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRpYWxpemVGb3JtKCk7XG4gICAgdGhpcy5hZGRSdWxlKCk7XG5cbiAgICB0aGlzLmZvcm0udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICB0aGlzLm1vZGVsID0gdGhpcy50cmFuc2Zvcm1Gb3JtVG9Nb2RlbCh2YWx1ZSk7XG4gICAgICB0aGlzLnF1ZXJ5Q2hhbmdlLmVtaXQodGhpcy5tb2RlbCk7XG4gICAgfSk7XG4gIH1cblxuICBnZXQgcnVsZXNBcnJheSgpOiBGb3JtQXJyYXkge1xuICAgIHJldHVybiB0aGlzLmZvcm0uZ2V0KCdydWxlcycpIGFzIEZvcm1BcnJheTtcbiAgfVxuXG4gIGluaXRpYWxpemVGb3JtKCk6IHZvaWQge1xuICAgIHRoaXMuZm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgY29uZGl0aW9uOiBbdGhpcy5jb25maWcuZGVmYXVsdENvbmRpdGlvbiB8fCAnYW5kJ10sXG4gICAgICBydWxlczogdGhpcy5mYi5hcnJheShbXSlcbiAgICB9KTtcbiAgfVxuXG4gIGFkZFJ1bGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY29uZmlnLmZpZWxkcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBkZWZhdWx0RmllbGQgPSB0aGlzLmNvbmZpZy5maWVsZHNbMF07XG4gICAgY29uc3QgZGVmYXVsdE9wZXJhdG9yID0gZGVmYXVsdEZpZWxkLmRlZmF1bHRPcGVyYXRvciB8fCB0aGlzLmdldE9wZXJhdG9yc0ZvclR5cGUoZGVmYXVsdEZpZWxkLnR5cGUpWzBdPy52YWx1ZSB8fCAnPSc7XG5cbiAgICBjb25zdCBydWxlR3JvdXAgPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIGZpZWxkOiBbZGVmYXVsdEZpZWxkLmtleV0sXG4gICAgICBvcGVyYXRvcjogW2RlZmF1bHRPcGVyYXRvcl0sXG4gICAgICB2YWx1ZTogW251bGxdLFxuICAgICAgY29uZGl0aW9uOiBbJ2FuZCddXG4gICAgfSk7XG5cbiAgICB0aGlzLnJ1bGVzQXJyYXkucHVzaChydWxlR3JvdXApO1xuICB9XG5cbiAgcmVtb3ZlUnVsZShpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5ydWxlc0FycmF5LnJlbW92ZUF0KGluZGV4KTtcbiAgfVxuXG4gIGdldEZpZWxkQnlLZXkoa2V5OiBzdHJpbmcpOiBRdWVyeUZpZWxkIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuZmllbGRzLmZpbmQoZmllbGQgPT4gZmllbGQua2V5ID09PSBrZXkpO1xuICB9XG5cbiAgZ2V0T3BlcmF0b3JzRm9yVHlwZSh0eXBlOiBzdHJpbmcpOiBRdWVyeU9wZXJhdG9yW10ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5vcGVyYXRvcnMuZmlsdGVyKG9wID0+ICFvcC50eXBlcyB8fCBvcC50eXBlcy5pbmNsdWRlcyh0eXBlKSk7XG4gIH1cblxuICBnZXRPcGVyYXRvcnNGb3JGaWVsZChmaWVsZEtleTogc3RyaW5nKTogUXVlcnlPcGVyYXRvcltdIHtcbiAgICBjb25zdCBmaWVsZCA9IHRoaXMuZ2V0RmllbGRCeUtleShmaWVsZEtleSk7XG4gICAgaWYgKCFmaWVsZCkgcmV0dXJuIFtdO1xuXG4gICAgaWYgKGZpZWxkLm9wZXJhdG9ycykge1xuICAgICAgcmV0dXJuIHRoaXMuY29uZmlnLm9wZXJhdG9ycy5maWx0ZXIob3AgPT4gZmllbGQub3BlcmF0b3JzPy5pbmNsdWRlcyhvcC52YWx1ZSkpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmdldE9wZXJhdG9yc0ZvclR5cGUoZmllbGQudHlwZSk7XG4gIH1cblxuICBnZXRGaWVsZFR5cGUoZmllbGRLZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgZmllbGQgPSB0aGlzLmdldEZpZWxkQnlLZXkoZmllbGRLZXkpO1xuICAgIHJldHVybiBmaWVsZCA/IGZpZWxkLnR5cGUgOiAnc3RyaW5nJztcbiAgfVxuICBcbiAgaXNPcGVyYXRvckJldHdlZW4oaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHJ1bGVHcm91cCA9IHRoaXMucnVsZXNBcnJheS5hdChpbmRleCkgYXMgRm9ybUdyb3VwO1xuICAgIHJldHVybiBydWxlR3JvdXA/LmdldCgnb3BlcmF0b3InKT8udmFsdWUgPT09ICdiZXR3ZWVuJztcbiAgfVxuXG4gIGdldEZpZWxkT3B0aW9ucyhmaWVsZEtleTogc3RyaW5nKTogeyBsYWJlbDogc3RyaW5nOyB2YWx1ZTogYW55IH1bXSB7XG4gICAgY29uc3QgZmllbGQgPSB0aGlzLmdldEZpZWxkQnlLZXkoZmllbGRLZXkpO1xuICAgIHJldHVybiBmaWVsZD8ub3B0aW9ucyB8fCBbXTtcbiAgfVxuXG4gIG9uRmllbGRDaGFuZ2UoaW5kZXg6IG51bWJlciwgZmllbGRLZXk6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHJ1bGVHcm91cCA9IHRoaXMucnVsZXNBcnJheS5hdChpbmRleCkgYXMgRm9ybUdyb3VwO1xuICAgIGNvbnN0IGZpZWxkID0gdGhpcy5nZXRGaWVsZEJ5S2V5KGZpZWxkS2V5KTtcbiAgICBcbiAgICBpZiAoZmllbGQpIHtcbiAgICAgIGNvbnN0IG9wZXJhdG9ycyA9IHRoaXMuZ2V0T3BlcmF0b3JzRm9yRmllbGQoZmllbGRLZXkpO1xuICAgICAgY29uc3QgZGVmYXVsdE9wZXJhdG9yID0gZmllbGQuZGVmYXVsdE9wZXJhdG9yIHx8IChvcGVyYXRvcnMubGVuZ3RoID4gMCA/IG9wZXJhdG9yc1swXS52YWx1ZSA6ICc9Jyk7XG4gICAgICBcbiAgICAgIHJ1bGVHcm91cC5nZXQoJ29wZXJhdG9yJyk/LnNldFZhbHVlKGRlZmF1bHRPcGVyYXRvcik7XG4gICAgICBydWxlR3JvdXAuZ2V0KCd2YWx1ZScpPy5zZXRWYWx1ZShudWxsKTtcbiAgICAgIFxuICAgICAgLy8gUmVzZXQgcmFuZ2UgdmFsdWVzIGlmIHRoZXkgZXhpc3RcbiAgICAgIGlmIChydWxlR3JvdXAuZ2V0KCd2YWx1ZVN0YXJ0JykpIHtcbiAgICAgICAgcnVsZUdyb3VwLmdldCgndmFsdWVTdGFydCcpPy5zZXRWYWx1ZShudWxsKTtcbiAgICAgIH1cbiAgICAgIGlmIChydWxlR3JvdXAuZ2V0KCd2YWx1ZUVuZCcpKSB7XG4gICAgICAgIHJ1bGVHcm91cC5nZXQoJ3ZhbHVlRW5kJyk/LnNldFZhbHVlKG51bGwpO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBBZGQgcmFuZ2UgZm9ybSBjb250cm9scyBpZiBuZWVkZWRcbiAgICAgIHRoaXMudXBkYXRlRm9ybUNvbnRyb2xzRm9yT3BlcmF0b3IoaW5kZXgsIGRlZmF1bHRPcGVyYXRvciwgZmllbGQudHlwZSk7XG4gICAgfVxuICB9XG5cbiAgb25PcGVyYXRvckNoYW5nZShpbmRleDogbnVtYmVyLCBvcGVyYXRvcjogc3RyaW5nLCBmaWVsZEtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgZmllbGRUeXBlID0gdGhpcy5nZXRGaWVsZFR5cGUoZmllbGRLZXkpO1xuICAgIHRoaXMudXBkYXRlRm9ybUNvbnRyb2xzRm9yT3BlcmF0b3IoaW5kZXgsIG9wZXJhdG9yLCBmaWVsZFR5cGUpO1xuICAgIFxuICAgIC8vIFJlc2V0IHZhbHVlcyB3aGVuIG9wZXJhdG9yIGNoYW5nZXNcbiAgICBjb25zdCBydWxlR3JvdXAgPSB0aGlzLnJ1bGVzQXJyYXkuYXQoaW5kZXgpIGFzIEZvcm1Hcm91cDtcbiAgICBydWxlR3JvdXAuZ2V0KCd2YWx1ZScpPy5zZXRWYWx1ZShudWxsKTtcbiAgICBpZiAocnVsZUdyb3VwLmdldCgndmFsdWVTdGFydCcpKSB7XG4gICAgICBydWxlR3JvdXAuZ2V0KCd2YWx1ZVN0YXJ0Jyk/LnNldFZhbHVlKG51bGwpO1xuICAgIH1cbiAgICBpZiAocnVsZUdyb3VwLmdldCgndmFsdWVFbmQnKSkge1xuICAgICAgcnVsZUdyb3VwLmdldCgndmFsdWVFbmQnKT8uc2V0VmFsdWUobnVsbCk7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogR2V0cyB0aGUgbWluaW11bSBhbGxvd2VkIGRhdGUgZm9yIHRoZSBlbmQgZGF0ZSBwaWNrZXIgYmFzZWQgb24gdGhlIHNlbGVjdGVkIHN0YXJ0IGRhdGVcbiAgICogQHBhcmFtIGluZGV4IFRoZSBpbmRleCBvZiB0aGUgcnVsZSByb3dcbiAgICogQHJldHVybnMgVGhlIG1pbmltdW0gZGF0ZSBmb3IgdGhlIGVuZCBkYXRlIHBpY2tlciAodGhlIHN0YXJ0IGRhdGUgb3IgdG9kYXkgaWYgbm8gc3RhcnQgZGF0ZSlcbiAgICovXG4gIGdldE1pbkVuZERhdGUoaW5kZXg6IG51bWJlcik6IERhdGUgfCBudWxsIHtcbiAgICBjb25zdCBydWxlR3JvdXAgPSB0aGlzLnJ1bGVzQXJyYXkuYXQoaW5kZXgpIGFzIEZvcm1Hcm91cDtcbiAgICBjb25zdCBzdGFydERhdGUgPSBydWxlR3JvdXAuZ2V0KCd2YWx1ZVN0YXJ0Jyk/LnZhbHVlO1xuICAgIFxuICAgIC8vIElmIHN0YXJ0IGRhdGUgaXMgc2VsZWN0ZWQsIHVzZSBpdCBhcyBtaW5pbXVtIGZvciBlbmQgZGF0ZVxuICAgIC8vIE90aGVyd2lzZSB1c2UgdG9kYXkncyBkYXRlXG4gICAgcmV0dXJuIHN0YXJ0RGF0ZSA/IG5ldyBEYXRlKHN0YXJ0RGF0ZSkgOiBuZXcgRGF0ZSgpO1xuICB9XG4gIFxuICAvKipcbiAgICogSGFuZGxlcyBjaGFuZ2VzIHRvIHRoZSBzdGFydCBkYXRlXG4gICAqIEBwYXJhbSBpbmRleCBUaGUgaW5kZXggb2YgdGhlIHJ1bGUgcm93XG4gICAqIEBwYXJhbSBldmVudCBUaGUgZGF0ZSBjaGFuZ2UgZXZlbnRcbiAgICovXG4gIG9uU3RhcnREYXRlQ2hhbmdlKGluZGV4OiBudW1iZXIsIGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBydWxlR3JvdXAgPSB0aGlzLnJ1bGVzQXJyYXkuYXQoaW5kZXgpIGFzIEZvcm1Hcm91cDtcbiAgICBjb25zdCBlbmREYXRlID0gcnVsZUdyb3VwLmdldCgndmFsdWVFbmQnKT8udmFsdWU7XG4gICAgY29uc3Qgc3RhcnREYXRlID0gZXZlbnQudmFsdWU7XG4gICAgXG4gICAgLy8gSWYgZW5kIGRhdGUgaXMgYmVmb3JlIHN0YXJ0IGRhdGUsIHJlc2V0IGl0XG4gICAgaWYgKGVuZERhdGUgJiYgc3RhcnREYXRlICYmIG5ldyBEYXRlKGVuZERhdGUpIDwgbmV3IERhdGUoc3RhcnREYXRlKSkge1xuICAgICAgcnVsZUdyb3VwLmdldCgndmFsdWVFbmQnKT8uc2V0VmFsdWUobnVsbCk7XG4gICAgfVxuICB9XG4gIFxuICB1cGRhdGVGb3JtQ29udHJvbHNGb3JPcGVyYXRvcihpbmRleDogbnVtYmVyLCBvcGVyYXRvcjogc3RyaW5nLCBmaWVsZFR5cGU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHJ1bGVHcm91cCA9IHRoaXMucnVsZXNBcnJheS5hdChpbmRleCkgYXMgRm9ybUdyb3VwO1xuICAgIFxuICAgIC8vIEhhbmRsZSBkYXRlIHJhbmdlIGZvciAnYmV0d2Vlbicgb3BlcmF0b3JcbiAgICBpZiAob3BlcmF0b3IgPT09ICdiZXR3ZWVuJyAmJiBmaWVsZFR5cGUgPT09ICdkYXRlJykge1xuICAgICAgLy8gQWRkIHN0YXJ0IGFuZCBlbmQgZGF0ZSBjb250cm9scyBpZiB0aGV5IGRvbid0IGV4aXN0XG4gICAgICBpZiAoIXJ1bGVHcm91cC5jb250YWlucygndmFsdWVTdGFydCcpKSB7XG4gICAgICAgIHJ1bGVHcm91cC5hZGRDb250cm9sKCd2YWx1ZVN0YXJ0JywgdGhpcy5mYi5jb250cm9sKG51bGwpKTtcbiAgICAgIH1cbiAgICAgIGlmICghcnVsZUdyb3VwLmNvbnRhaW5zKCd2YWx1ZUVuZCcpKSB7XG4gICAgICAgIHJ1bGVHcm91cC5hZGRDb250cm9sKCd2YWx1ZUVuZCcsIHRoaXMuZmIuY29udHJvbChudWxsKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlbW92ZSByYW5nZSBjb250cm9scyBpZiB0aGV5IGV4aXN0IGFuZCBhcmVuJ3QgbmVlZGVkXG4gICAgICBpZiAocnVsZUdyb3VwLmNvbnRhaW5zKCd2YWx1ZVN0YXJ0JykpIHtcbiAgICAgICAgcnVsZUdyb3VwLnJlbW92ZUNvbnRyb2woJ3ZhbHVlU3RhcnQnKTtcbiAgICAgIH1cbiAgICAgIGlmIChydWxlR3JvdXAuY29udGFpbnMoJ3ZhbHVlRW5kJykpIHtcbiAgICAgICAgcnVsZUdyb3VwLnJlbW92ZUNvbnRyb2woJ3ZhbHVlRW5kJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIFxuICB0cmFuc2Zvcm1Gb3JtVG9Nb2RlbChmb3JtVmFsdWU6IGFueSk6IFF1ZXJ5R3JvdXAge1xuICAgIHJldHVybiB7XG4gICAgICBjb25kaXRpb246IGZvcm1WYWx1ZS5jb25kaXRpb24sXG4gICAgICBydWxlczogZm9ybVZhbHVlLnJ1bGVzLm1hcCgocnVsZTogYW55KSA9PiB7XG4gICAgICAgIC8vIEhhbmRsZSBkYXRlIHJhbmdlIGZvciAnYmV0d2Vlbicgb3BlcmF0b3JcbiAgICAgICAgaWYgKHJ1bGUub3BlcmF0b3IgPT09ICdiZXR3ZWVuJyAmJiB0aGlzLmdldEZpZWxkVHlwZShydWxlLmZpZWxkKSA9PT0gJ2RhdGUnKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGZpZWxkOiBydWxlLmZpZWxkLFxuICAgICAgICAgICAgb3BlcmF0b3I6IHJ1bGUub3BlcmF0b3IsXG4gICAgICAgICAgICB2YWx1ZTogeyBzdGFydDogcnVsZS52YWx1ZVN0YXJ0LCBlbmQ6IHJ1bGUudmFsdWVFbmQgfSxcbiAgICAgICAgICAgIGNvbmRpdGlvbjogcnVsZS5jb25kaXRpb25cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvLyBTdGFuZGFyZCBjYXNlXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZmllbGQ6IHJ1bGUuZmllbGQsXG4gICAgICAgICAgb3BlcmF0b3I6IHJ1bGUub3BlcmF0b3IsXG4gICAgICAgICAgdmFsdWU6IHJ1bGUudmFsdWUsXG4gICAgICAgICAgY29uZGl0aW9uOiBydWxlLmNvbmRpdGlvblxuICAgICAgICB9O1xuICAgICAgfSlcbiAgICB9O1xuICB9XG4gIFxuICAvKipcbiAgICogR2V0cyB0aGUgY29uZGl0aW9uIGZvciBhIHNwZWNpZmljIHJvd1xuICAgKiBAcGFyYW0gaW5kZXggVGhlIGluZGV4IG9mIHRoZSByb3dcbiAgICogQHJldHVybnMgVGhlIGNvbmRpdGlvbiAoYW5kL29yKSBmb3IgdGhlIHJvd1xuICAgKi9cbiAgZ2V0Um93Q29uZGl0aW9uKGluZGV4OiBudW1iZXIpOiAnYW5kJyB8ICdvcicge1xuICAgIGlmIChpbmRleCA9PT0gMCkgcmV0dXJuICdhbmQnOyAvLyBGaXJzdCByb3cgZG9lc24ndCBoYXZlIGEgY29uZGl0aW9uXG4gICAgXG4gICAgY29uc3QgcnVsZUdyb3VwID0gdGhpcy5ydWxlc0FycmF5LmF0KGluZGV4KSBhcyBGb3JtR3JvdXA7XG4gICAgcmV0dXJuIHJ1bGVHcm91cC5nZXQoJ2NvbmRpdGlvbicpPy52YWx1ZSB8fCAnYW5kJztcbiAgfVxuICBcbiAgLyoqXG4gICAqIFNldHMgdGhlIGNvbmRpdGlvbiBmb3IgYSBzcGVjaWZpYyByb3dcbiAgICogQHBhcmFtIGluZGV4IFRoZSBpbmRleCBvZiB0aGUgcm93XG4gICAqIEBwYXJhbSBjb25kaXRpb24gVGhlIGNvbmRpdGlvbiB0byBzZXQgKGFuZC9vcilcbiAgICovXG4gIHNldFJvd0NvbmRpdGlvbihpbmRleDogbnVtYmVyLCBjb25kaXRpb246ICdhbmQnIHwgJ29yJyk6IHZvaWQge1xuICAgIGlmIChpbmRleCA9PT0gMCkgcmV0dXJuOyAvLyBGaXJzdCByb3cgZG9lc24ndCBoYXZlIGEgY29uZGl0aW9uXG4gICAgXG4gICAgY29uc3QgcnVsZUdyb3VwID0gdGhpcy5ydWxlc0FycmF5LmF0KGluZGV4KSBhcyBGb3JtR3JvdXA7XG4gICAgcnVsZUdyb3VwLmdldCgnY29uZGl0aW9uJyk/LnNldFZhbHVlKGNvbmRpdGlvbik7XG4gIH1cblxuICB0b2dnbGVDb25kaXRpb24oKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudENvbmRpdGlvbiA9IHRoaXMuZm9ybS5nZXQoJ2NvbmRpdGlvbicpPy52YWx1ZTtcbiAgICBjb25zdCBuZXdDb25kaXRpb24gPSBjdXJyZW50Q29uZGl0aW9uID09PSAnYW5kJyA/ICdvcicgOiAnYW5kJztcbiAgICB0aGlzLmZvcm0uZ2V0KCdjb25kaXRpb24nKT8uc2V0VmFsdWUobmV3Q29uZGl0aW9uKTtcbiAgfVxuXG4gIGdldENvbmRpdGlvbkxhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybS5nZXQoJ2NvbmRpdGlvbicpPy52YWx1ZSA9PT0gJ2FuZCcgPyAnQU5EJyA6ICdPUic7XG4gIH1cblxuICByZXNldFF1ZXJ5KCk6IHZvaWQge1xuICAgIHRoaXMucnVsZXNBcnJheS5jbGVhcigpO1xuICAgIHRoaXMuYWRkUnVsZSgpO1xuICB9XG5cbiAgYXBwbHlRdWVyeSgpOiB2b2lkIHtcbiAgICB0aGlzLnF1ZXJ5Q2hhbmdlLmVtaXQodGhpcy5tb2RlbCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJzYS1xdWVyeS1idWlsZGVyXCI+XG4gIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiPlxuICAgIDxkaXYgY2xhc3M9XCJxdWVyeS1idWlsZGVyLWhlYWRlclwiPlxuICAgICAgPGRpdiBjbGFzcz1cIndoZXJlLWxhYmVsXCI+V2hlcmU8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJxdWVyeS1idWlsZGVyLWJvZHlcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJydWxlcy1jb250YWluZXJcIiBmb3JtQXJyYXlOYW1lPVwicnVsZXNcIj5cbiAgICAgICAgQGZvciAocnVsZSBvZiBydWxlc0FycmF5LmNvbnRyb2xzOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicnVsZS1yb3dcIiBbZm9ybUdyb3VwTmFtZV09XCIkaW5kZXhcIj5cbiAgICAgICAgICAgIDwhLS0gQ29uZGl0aW9uIHNlbGVjdG9yIChBbmQvT3IpIC0tPlxuICAgICAgICAgICAgQGlmICgkaW5kZXggPiAwKSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25kaXRpb24tc2VsZWN0b3JcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cImZpbGxcIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IFt2YWx1ZV09XCJnZXRSb3dDb25kaXRpb24oJGluZGV4KVwiIChzZWxlY3Rpb25DaGFuZ2UpPVwic2V0Um93Q29uZGl0aW9uKCRpbmRleCwgJGV2ZW50LnZhbHVlKVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cImFuZFwiPkFuZDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJvclwiPk9yPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25kaXRpb24tcGxhY2Vob2xkZXJcIj48L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgPCEtLSBGaWVsZCBzZWxlY3Rpb24gLS0+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmaWVsZC1zZWxlY3RcIj5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbD5TZWxlY3QgYSBmaWx0ZXI8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwiZmllbGRcIiAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uRmllbGRDaGFuZ2UoJGluZGV4LCAkZXZlbnQudmFsdWUpXCI+XG4gICAgICAgICAgICAgICAgQGZvciAoZmllbGQgb2YgY29uZmlnLmZpZWxkczsgdHJhY2sgZmllbGQua2V5KSB7XG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiZmllbGQua2V5XCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGZpZWxkLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgICAgICA8IS0tIE9wZXJhdG9yIHNlbGVjdGlvbiAtLT5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cIm9wZXJhdG9yLXNlbGVjdFwiPlxuICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJvcGVyYXRvclwiIChzZWxlY3Rpb25DaGFuZ2UpPVwib25PcGVyYXRvckNoYW5nZSgkaW5kZXgsICRldmVudC52YWx1ZSwgcnVsZS52YWx1ZS5maWVsZClcIj5cbiAgICAgICAgICAgICAgICBAZm9yIChvcCBvZiBnZXRPcGVyYXRvcnNGb3JGaWVsZChydWxlLnZhbHVlLmZpZWxkKTsgdHJhY2sgb3AudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJvcC52YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBvcC5sYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICAgICAgPCEtLSBWYWx1ZSBpbnB1dCBiYXNlZCBvbiBmaWVsZCB0eXBlIC0tPlxuICAgICAgICAgICAgQHN3aXRjaCAoZ2V0RmllbGRUeXBlKHJ1bGUudmFsdWUuZmllbGQpKSB7XG4gICAgICAgICAgICAgIEBjYXNlICgnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInZhbHVlLWlucHV0XCI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwidmFsdWVcIiBwbGFjZWhvbGRlcj1cIkVudGVyIGEgdmFsdWUuLi5cIj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIEBjYXNlICgnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInZhbHVlLWlucHV0XCI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT1cIm51bWJlclwiIGZvcm1Db250cm9sTmFtZT1cInZhbHVlXCIgcGxhY2Vob2xkZXI9XCJFbnRlciBhIHZhbHVlLi4uXCI+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBAY2FzZSAoJ2RhdGUnKSB7XG4gICAgICAgICAgICAgICAgQGlmICghaXNPcGVyYXRvckJldHdlZW4oJGluZGV4KSkge1xuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwidmFsdWUtaW5wdXRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9XCJkYXRlXCIgW21hdERhdGVwaWNrZXJdPVwicGlja2VyXCIgZm9ybUNvbnRyb2xOYW1lPVwidmFsdWVcIiAoY2xpY2spPVwicGlja2VyLm9wZW4oKVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdEljb25TdWZmaXggW2Zvcl09XCJwaWNrZXJcIj48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyICNwaWNrZXI+PC9tYXQtZGF0ZXBpY2tlcj5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZS1yYW5nZS1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwidmFsdWUtaW5wdXQgc3RhcnQtZGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+U3RhcnQgZGF0ZTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbbWF0RGF0ZXBpY2tlcl09XCJzdGFydFBpY2tlclwiIGZvcm1Db250cm9sTmFtZT1cInZhbHVlU3RhcnRcIiAoY2xpY2spPVwic3RhcnRQaWNrZXIub3BlbigpXCIgKGRhdGVDaGFuZ2UpPVwib25TdGFydERhdGVDaGFuZ2UoJGluZGV4LCAkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRJY29uU3VmZml4IFtmb3JdPVwic3RhcnRQaWNrZXJcIj48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXIgI3N0YXJ0UGlja2VyPjwvbWF0LWRhdGVwaWNrZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInZhbHVlLWlucHV0IGVuZC1kYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5FbmQgZGF0ZTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbbWF0RGF0ZXBpY2tlcl09XCJlbmRQaWNrZXJcIiBmb3JtQ29udHJvbE5hbWU9XCJ2YWx1ZUVuZFwiIChjbGljayk9XCJlbmRQaWNrZXIub3BlbigpXCIgW21pbl09XCJnZXRNaW5FbmREYXRlKCRpbmRleClcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdEljb25TdWZmaXggW2Zvcl09XCJlbmRQaWNrZXJcIj48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXIgI2VuZFBpY2tlciBbc3RhcnRBdF09XCJnZXRNaW5FbmREYXRlKCRpbmRleClcIj48L21hdC1kYXRlcGlja2VyPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIEBjYXNlICgnYm9vbGVhbicpIHtcbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJ2YWx1ZS1pbnB1dFwiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwidmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cInRydWVcIj5UcnVlPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiZmFsc2VcIj5GYWxzZTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIEBjYXNlICgnc2VsZWN0Jykge1xuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInZhbHVlLWlucHV0XCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJ2YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICBAZm9yIChvcHRpb24gb2YgZ2V0RmllbGRPcHRpb25zKHJ1bGUudmFsdWUuZmllbGQpOyB0cmFjayBvcHRpb24udmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBvcHRpb24ubGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIEBkZWZhdWx0IHtcbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJ2YWx1ZS1pbnB1dFwiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cInZhbHVlXCIgcGxhY2Vob2xkZXI9XCJFbnRlciBhIHZhbHVlLi4uXCI+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICA8IS0tIFJlbW92ZSBydWxlIGJ1dHRvbiAtLT5cbiAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGNsYXNzPVwicmVtb3ZlLXJ1bGUtYnRuXCIgXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVSdWxlKCRpbmRleClcIiBcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInJ1bGVzQXJyYXkubGVuZ3RoID09PSAxXCJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIlJlbW92ZSBmaWx0ZXJcIj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBBZGQgcnVsZSBidXR0b24gLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiYWRkLXJ1bGUtY29udGFpbmVyXCI+XG4gICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiBjbGFzcz1cImFkZC1ydWxlLWJ0blwiIChjbGljayk9XCJhZGRSdWxlKClcIj5cbiAgICAgICAgICA8bWF0LWljb24+YWRkPC9tYXQtaWNvbj4gQWRkIGEgZmlsdGVyXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwicXVlcnktYnVpbGRlci1mb290ZXJcIj5cbiAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjbGFzcz1cInJlc2V0LWJ0blwiIChjbGljayk9XCJyZXNldFF1ZXJ5KClcIj5SZXNldDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiBjbGFzcz1cImFwcGx5LWJ0blwiIChjbGljayk9XCJhcHBseVF1ZXJ5KClcIj5BcHBseSBmaWx0ZXJzPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZm9ybT5cbjwvZGl2PlxuIl19
|
|
276
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktYnVpbGRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnQtbGlicmFyeS9zcmMvbGliL3F1ZXJ5LWJ1aWxkZXIvcXVlcnktYnVpbGRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnQtbGlicmFyeS9zcmMvbGliL3F1ZXJ5LWJ1aWxkZXIvcXVlcnktYnVpbGRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQWtELG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckcsT0FBTyxFQUFxQixZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNuRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDeEUsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDakUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7Ozs7Ozs7O0FB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QUFtQixDQUFDLFdBQ3ZCO3dCQUNQLFlBQVk7d0JBQ1osbUJBQW1CO3dCQUNuQixZQUFZO3dCQUNaLGVBQWU7d0JBQ2YsYUFBYTt3QkFDYixlQUFlO3dCQUNmLGtCQUFrQjt3QkFDbEIsY0FBYzt3QkFDZCxnQkFBZ0I7d0JBQ2hCLHFCQUFxQjt3QkFDckIsbUJBQW1CO3dCQUNuQixtQkFBbUI7cUJBQ3BCO2dGQUdRLE1BQU07c0JBQWQsS0FBSztnQkFlSSxXQUFXO3NCQUFwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBGb3JtQXJyYXksIEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBGb3JtbHlGaWVsZENvbmZpZywgRm9ybWx5TW9kdWxlIH0gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XHJcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XHJcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcclxuaW1wb3J0IHsgTWF0U2VsZWN0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcclxuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XHJcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xyXG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XHJcbmltcG9ydCB7IE1hdEJ1dHRvblRvZ2dsZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbi10b2dnbGUnO1xyXG5pbXBvcnQge01hdERhdGVwaWNrZXJNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RhdGVwaWNrZXInO1xyXG5pbXBvcnQgeyBNYXROYXRpdmVEYXRlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXJ5RmllbGQge1xyXG4gIGtleTogc3RyaW5nO1xyXG4gIGxhYmVsOiBzdHJpbmc7XHJcbiAgdHlwZTogc3RyaW5nO1xyXG4gIG9wdGlvbnM/OiB7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBhbnkgfVtdO1xyXG4gIG9wZXJhdG9ycz86IHN0cmluZ1tdO1xyXG4gIGRlZmF1bHRPcGVyYXRvcj86IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBRdWVyeU9wZXJhdG9yIHtcclxuICB2YWx1ZTogc3RyaW5nO1xyXG4gIGxhYmVsOiBzdHJpbmc7XHJcbiAgdHlwZXM/OiBzdHJpbmdbXTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBRdWVyeUNvbmZpZyB7XHJcbiAgZmllbGRzOiBRdWVyeUZpZWxkW107XHJcbiAgb3BlcmF0b3JzOiBRdWVyeU9wZXJhdG9yW107XHJcbiAgZGVmYXVsdENvbmRpdGlvbj86ICdhbmQnIHwgJ29yJztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBRdWVyeVJ1bGUge1xyXG4gIGZpZWxkOiBzdHJpbmc7XHJcbiAgb3BlcmF0b3I6IHN0cmluZztcclxuICB2YWx1ZTogYW55O1xyXG4gIGNvbmRpdGlvbj86ICdhbmQnIHwgJ29yJztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBRdWVyeUdyb3VwIHtcclxuICBjb25kaXRpb246ICdhbmQnIHwgJ29yJztcclxuICBydWxlczogKFF1ZXJ5UnVsZSB8IFF1ZXJ5R3JvdXApW107XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc2EtcXVlcnktYnVpbGRlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3F1ZXJ5LWJ1aWxkZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3F1ZXJ5LWJ1aWxkZXIuY29tcG9uZW50LnNjc3MnXSxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIHByb3ZpZGVyczogW01hdE5hdGl2ZURhdGVNb2R1bGVdLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXHJcbiAgICBGb3JtbHlNb2R1bGUsXHJcbiAgICBNYXRCdXR0b25Nb2R1bGUsXHJcbiAgICBNYXRJY29uTW9kdWxlLFxyXG4gICAgTWF0U2VsZWN0TW9kdWxlLFxyXG4gICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxyXG4gICAgTWF0SW5wdXRNb2R1bGUsXHJcbiAgICBNYXRUb29sdGlwTW9kdWxlLFxyXG4gICAgTWF0QnV0dG9uVG9nZ2xlTW9kdWxlLFxyXG4gICAgTWF0RGF0ZXBpY2tlck1vZHVsZSxcclxuICAgIE1hdE5hdGl2ZURhdGVNb2R1bGVcclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBRdWVyeUJ1aWxkZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBJbnB1dCgpIGNvbmZpZzogUXVlcnlDb25maWcgPSB7XHJcbiAgICBmaWVsZHM6IFtdLFxyXG4gICAgb3BlcmF0b3JzOiBbXHJcbiAgICAgIHsgdmFsdWU6ICc9JywgbGFiZWw6ICc9JyB9LFxyXG4gICAgICB7IHZhbHVlOiAnIT0nLCBsYWJlbDogJyE9JyB9LFxyXG4gICAgICB7IHZhbHVlOiAnPicsIGxhYmVsOiAnPicgfSxcclxuICAgICAgeyB2YWx1ZTogJzwnLCBsYWJlbDogJzwnIH0sXHJcbiAgICAgIHsgdmFsdWU6ICc+PScsIGxhYmVsOiAnPj0nIH0sXHJcbiAgICAgIHsgdmFsdWU6ICc8PScsIGxhYmVsOiAnPD0nIH0sXHJcbiAgICAgIHsgdmFsdWU6ICdjb250YWlucycsIGxhYmVsOiAnY29udGFpbnMnIH0sXHJcbiAgICAgIHsgdmFsdWU6ICdiZXR3ZWVuJywgbGFiZWw6ICdiZXR3ZWVuJyB9XHJcbiAgICBdLFxyXG4gICAgZGVmYXVsdENvbmRpdGlvbjogJ2FuZCdcclxuICB9O1xyXG5cclxuICBAT3V0cHV0KCkgcXVlcnlDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFF1ZXJ5R3JvdXA+KCk7XHJcblxyXG4gIGZvcm06IEZvcm1Hcm91cDtcclxuICBtb2RlbDogUXVlcnlHcm91cDtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIpIHtcclxuICAgIHRoaXMuZm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICBjb25kaXRpb246IFsnYW5kJ10sXHJcbiAgICAgIHJ1bGVzOiB0aGlzLmZiLmFycmF5KFtdKVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5tb2RlbCA9IHtcclxuICAgICAgY29uZGl0aW9uOiAnYW5kJyxcclxuICAgICAgcnVsZXM6IFtdXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmluaXRpYWxpemVGb3JtKCk7XHJcbiAgICB0aGlzLmFkZFJ1bGUoKTtcclxuXHJcbiAgICB0aGlzLmZvcm0udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSh2YWx1ZSA9PiB7XHJcbiAgICAgIHRoaXMubW9kZWwgPSB0aGlzLnRyYW5zZm9ybUZvcm1Ub01vZGVsKHZhbHVlKTtcclxuICAgICAgdGhpcy5xdWVyeUNoYW5nZS5lbWl0KHRoaXMubW9kZWwpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXQgcnVsZXNBcnJheSgpOiBGb3JtQXJyYXkge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybS5nZXQoJ3J1bGVzJykgYXMgRm9ybUFycmF5O1xyXG4gIH1cclxuXHJcbiAgaW5pdGlhbGl6ZUZvcm0oKTogdm9pZCB7XHJcbiAgICB0aGlzLmZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgY29uZGl0aW9uOiBbdGhpcy5jb25maWcuZGVmYXVsdENvbmRpdGlvbiB8fCAnYW5kJ10sXHJcbiAgICAgIHJ1bGVzOiB0aGlzLmZiLmFycmF5KFtdKVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhZGRSdWxlKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY29uZmlnLmZpZWxkcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGRlZmF1bHRGaWVsZCA9IHRoaXMuY29uZmlnLmZpZWxkc1swXTtcclxuICAgIGNvbnN0IGRlZmF1bHRPcGVyYXRvciA9IGRlZmF1bHRGaWVsZC5kZWZhdWx0T3BlcmF0b3IgfHwgdGhpcy5nZXRPcGVyYXRvcnNGb3JUeXBlKGRlZmF1bHRGaWVsZC50eXBlKVswXT8udmFsdWUgfHwgJz0nO1xyXG5cclxuICAgIGNvbnN0IHJ1bGVHcm91cCA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICBmaWVsZDogW2RlZmF1bHRGaWVsZC5rZXldLFxyXG4gICAgICBvcGVyYXRvcjogW2RlZmF1bHRPcGVyYXRvcl0sXHJcbiAgICAgIHZhbHVlOiBbbnVsbF0sXHJcbiAgICAgIGNvbmRpdGlvbjogWydhbmQnXVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5ydWxlc0FycmF5LnB1c2gocnVsZUdyb3VwKTtcclxuICB9XHJcblxyXG4gIHJlbW92ZVJ1bGUoaW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5ydWxlc0FycmF5LnJlbW92ZUF0KGluZGV4KTtcclxuICB9XHJcblxyXG4gIGdldEZpZWxkQnlLZXkoa2V5OiBzdHJpbmcpOiBRdWVyeUZpZWxkIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLmNvbmZpZy5maWVsZHMuZmluZChmaWVsZCA9PiBmaWVsZC5rZXkgPT09IGtleSk7XHJcbiAgfVxyXG5cclxuICBnZXRPcGVyYXRvcnNGb3JUeXBlKHR5cGU6IHN0cmluZyk6IFF1ZXJ5T3BlcmF0b3JbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb25maWcub3BlcmF0b3JzLmZpbHRlcihvcCA9PiAhb3AudHlwZXMgfHwgb3AudHlwZXMuaW5jbHVkZXModHlwZSkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0T3BlcmF0b3JzRm9yRmllbGQoZmllbGRLZXk6IHN0cmluZyk6IFF1ZXJ5T3BlcmF0b3JbXSB7XHJcbiAgICBjb25zdCBmaWVsZCA9IHRoaXMuZ2V0RmllbGRCeUtleShmaWVsZEtleSk7XHJcbiAgICBpZiAoIWZpZWxkKSByZXR1cm4gW107XHJcblxyXG4gICAgaWYgKGZpZWxkLm9wZXJhdG9ycykge1xyXG4gICAgICByZXR1cm4gdGhpcy5jb25maWcub3BlcmF0b3JzLmZpbHRlcihvcCA9PiBmaWVsZC5vcGVyYXRvcnM/LmluY2x1ZGVzKG9wLnZhbHVlKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuZ2V0T3BlcmF0b3JzRm9yVHlwZShmaWVsZC50eXBlKTtcclxuICB9XHJcblxyXG4gIGdldEZpZWxkVHlwZShmaWVsZEtleTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGZpZWxkID0gdGhpcy5nZXRGaWVsZEJ5S2V5KGZpZWxkS2V5KTtcclxuICAgIHJldHVybiBmaWVsZCA/IGZpZWxkLnR5cGUgOiAnc3RyaW5nJztcclxuICB9XHJcbiAgXHJcbiAgaXNPcGVyYXRvckJldHdlZW4oaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgcnVsZUdyb3VwID0gdGhpcy5ydWxlc0FycmF5LmF0KGluZGV4KSBhcyBGb3JtR3JvdXA7XHJcbiAgICByZXR1cm4gcnVsZUdyb3VwPy5nZXQoJ29wZXJhdG9yJyk/LnZhbHVlID09PSAnYmV0d2Vlbic7XHJcbiAgfVxyXG5cclxuICBnZXRGaWVsZE9wdGlvbnMoZmllbGRLZXk6IHN0cmluZyk6IHsgbGFiZWw6IHN0cmluZzsgdmFsdWU6IGFueSB9W10ge1xyXG4gICAgY29uc3QgZmllbGQgPSB0aGlzLmdldEZpZWxkQnlLZXkoZmllbGRLZXkpO1xyXG4gICAgcmV0dXJuIGZpZWxkPy5vcHRpb25zIHx8IFtdO1xyXG4gIH1cclxuXHJcbiAgb25GaWVsZENoYW5nZShpbmRleDogbnVtYmVyLCBmaWVsZEtleTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCBydWxlR3JvdXAgPSB0aGlzLnJ1bGVzQXJyYXkuYXQoaW5kZXgpIGFzIEZvcm1Hcm91cDtcclxuICAgIGNvbnN0IGZpZWxkID0gdGhpcy5nZXRGaWVsZEJ5S2V5KGZpZWxkS2V5KTtcclxuICAgIFxyXG4gICAgaWYgKGZpZWxkKSB7XHJcbiAgICAgIGNvbnN0IG9wZXJhdG9ycyA9IHRoaXMuZ2V0T3BlcmF0b3JzRm9yRmllbGQoZmllbGRLZXkpO1xyXG4gICAgICBjb25zdCBkZWZhdWx0T3BlcmF0b3IgPSBmaWVsZC5kZWZhdWx0T3BlcmF0b3IgfHwgKG9wZXJhdG9ycy5sZW5ndGggPiAwID8gb3BlcmF0b3JzWzBdLnZhbHVlIDogJz0nKTtcclxuICAgICAgXHJcbiAgICAgIHJ1bGVHcm91cC5nZXQoJ29wZXJhdG9yJyk/LnNldFZhbHVlKGRlZmF1bHRPcGVyYXRvcik7XHJcbiAgICAgIHJ1bGVHcm91cC5nZXQoJ3ZhbHVlJyk/LnNldFZhbHVlKG51bGwpO1xyXG4gICAgICBcclxuICAgICAgLy8gUmVzZXQgcmFuZ2UgdmFsdWVzIGlmIHRoZXkgZXhpc3RcclxuICAgICAgaWYgKHJ1bGVHcm91cC5nZXQoJ3ZhbHVlU3RhcnQnKSkge1xyXG4gICAgICAgIHJ1bGVHcm91cC5nZXQoJ3ZhbHVlU3RhcnQnKT8uc2V0VmFsdWUobnVsbCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHJ1bGVHcm91cC5nZXQoJ3ZhbHVlRW5kJykpIHtcclxuICAgICAgICBydWxlR3JvdXAuZ2V0KCd2YWx1ZUVuZCcpPy5zZXRWYWx1ZShudWxsKTtcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgLy8gQWRkIHJhbmdlIGZvcm0gY29udHJvbHMgaWYgbmVlZGVkXHJcbiAgICAgIHRoaXMudXBkYXRlRm9ybUNvbnRyb2xzRm9yT3BlcmF0b3IoaW5kZXgsIGRlZmF1bHRPcGVyYXRvciwgZmllbGQudHlwZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbk9wZXJhdG9yQ2hhbmdlKGluZGV4OiBudW1iZXIsIG9wZXJhdG9yOiBzdHJpbmcsIGZpZWxkS2V5OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IGZpZWxkVHlwZSA9IHRoaXMuZ2V0RmllbGRUeXBlKGZpZWxkS2V5KTtcclxuICAgIHRoaXMudXBkYXRlRm9ybUNvbnRyb2xzRm9yT3BlcmF0b3IoaW5kZXgsIG9wZXJhdG9yLCBmaWVsZFR5cGUpO1xyXG4gICAgXHJcbiAgICAvLyBSZXNldCB2YWx1ZXMgd2hlbiBvcGVyYXRvciBjaGFuZ2VzXHJcbiAgICBjb25zdCBydWxlR3JvdXAgPSB0aGlzLnJ1bGVzQXJyYXkuYXQoaW5kZXgpIGFzIEZvcm1Hcm91cDtcclxuICAgIHJ1bGVHcm91cC5nZXQoJ3ZhbHVlJyk/LnNldFZhbHVlKG51bGwpO1xyXG4gICAgaWYgKHJ1bGVHcm91cC5nZXQoJ3ZhbHVlU3RhcnQnKSkge1xyXG4gICAgICBydWxlR3JvdXAuZ2V0KCd2YWx1ZVN0YXJ0Jyk/LnNldFZhbHVlKG51bGwpO1xyXG4gICAgfVxyXG4gICAgaWYgKHJ1bGVHcm91cC5nZXQoJ3ZhbHVlRW5kJykpIHtcclxuICAgICAgcnVsZUdyb3VwLmdldCgndmFsdWVFbmQnKT8uc2V0VmFsdWUobnVsbCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIFxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIG1pbmltdW0gYWxsb3dlZCBkYXRlIGZvciB0aGUgZW5kIGRhdGUgcGlja2VyIGJhc2VkIG9uIHRoZSBzZWxlY3RlZCBzdGFydCBkYXRlXHJcbiAgICogQHBhcmFtIGluZGV4IFRoZSBpbmRleCBvZiB0aGUgcnVsZSByb3dcclxuICAgKiBAcmV0dXJucyBUaGUgbWluaW11bSBkYXRlIGZvciB0aGUgZW5kIGRhdGUgcGlja2VyICh0aGUgc3RhcnQgZGF0ZSBvciB0b2RheSBpZiBubyBzdGFydCBkYXRlKVxyXG4gICAqL1xyXG4gIGdldE1pbkVuZERhdGUoaW5kZXg6IG51bWJlcik6IERhdGUgfCBudWxsIHtcclxuICAgIGNvbnN0IHJ1bGVHcm91cCA9IHRoaXMucnVsZXNBcnJheS5hdChpbmRleCkgYXMgRm9ybUdyb3VwO1xyXG4gICAgY29uc3Qgc3RhcnREYXRlID0gcnVsZUdyb3VwLmdldCgndmFsdWVTdGFydCcpPy52YWx1ZTtcclxuICAgIFxyXG4gICAgLy8gSWYgc3RhcnQgZGF0ZSBpcyBzZWxlY3RlZCwgdXNlIGl0IGFzIG1pbmltdW0gZm9yIGVuZCBkYXRlXHJcbiAgICAvLyBPdGhlcndpc2UgdXNlIHRvZGF5J3MgZGF0ZVxyXG4gICAgcmV0dXJuIHN0YXJ0RGF0ZSA/IG5ldyBEYXRlKHN0YXJ0RGF0ZSkgOiBuZXcgRGF0ZSgpO1xyXG4gIH1cclxuICBcclxuICAvKipcclxuICAgKiBIYW5kbGVzIGNoYW5nZXMgdG8gdGhlIHN0YXJ0IGRhdGVcclxuICAgKiBAcGFyYW0gaW5kZXggVGhlIGluZGV4IG9mIHRoZSBydWxlIHJvd1xyXG4gICAqIEBwYXJhbSBldmVudCBUaGUgZGF0ZSBjaGFuZ2UgZXZlbnRcclxuICAgKi9cclxuICBvblN0YXJ0RGF0ZUNoYW5nZShpbmRleDogbnVtYmVyLCBldmVudDogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCBydWxlR3JvdXAgPSB0aGlzLnJ1bGVzQXJyYXkuYXQoaW5kZXgpIGFzIEZvcm1Hcm91cDtcclxuICAgIGNvbnN0IGVuZERhdGUgPSBydWxlR3JvdXAuZ2V0KCd2YWx1ZUVuZCcpPy52YWx1ZTtcclxuICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IGV2ZW50LnZhbHVlO1xyXG4gICAgXHJcbiAgICAvLyBJZiBlbmQgZGF0ZSBpcyBiZWZvcmUgc3RhcnQgZGF0ZSwgcmVzZXQgaXRcclxuICAgIGlmIChlbmREYXRlICYmIHN0YXJ0RGF0ZSAmJiBuZXcgRGF0ZShlbmREYXRlKSA8IG5ldyBEYXRlKHN0YXJ0RGF0ZSkpIHtcclxuICAgICAgcnVsZUdyb3VwLmdldCgndmFsdWVFbmQnKT8uc2V0VmFsdWUobnVsbCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIFxyXG4gIHVwZGF0ZUZvcm1Db250cm9sc0Zvck9wZXJhdG9yKGluZGV4OiBudW1iZXIsIG9wZXJhdG9yOiBzdHJpbmcsIGZpZWxkVHlwZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCBydWxlR3JvdXAgPSB0aGlzLnJ1bGVzQXJyYXkuYXQoaW5kZXgpIGFzIEZvcm1Hcm91cDtcclxuICAgIFxyXG4gICAgLy8gSGFuZGxlIGRhdGUgcmFuZ2UgZm9yICdiZXR3ZWVuJyBvcGVyYXRvclxyXG4gICAgaWYgKG9wZXJhdG9yID09PSAnYmV0d2VlbicgJiYgZmllbGRUeXBlID09PSAnZGF0ZScpIHtcclxuICAgICAgLy8gQWRkIHN0YXJ0IGFuZCBlbmQgZGF0ZSBjb250cm9scyBpZiB0aGV5IGRvbid0IGV4aXN0XHJcbiAgICAgIGlmICghcnVsZUdyb3VwLmNvbnRhaW5zKCd2YWx1ZVN0YXJ0JykpIHtcclxuICAgICAgICBydWxlR3JvdXAuYWRkQ29udHJvbCgndmFsdWVTdGFydCcsIHRoaXMuZmIuY29udHJvbChudWxsKSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFydWxlR3JvdXAuY29udGFpbnMoJ3ZhbHVlRW5kJykpIHtcclxuICAgICAgICBydWxlR3JvdXAuYWRkQ29udHJvbCgndmFsdWVFbmQnLCB0aGlzLmZiLmNvbnRyb2wobnVsbCkpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBSZW1vdmUgcmFuZ2UgY29udHJvbHMgaWYgdGhleSBleGlzdCBhbmQgYXJlbid0IG5lZWRlZFxyXG4gICAgICBpZiAocnVsZUdyb3VwLmNvbnRhaW5zKCd2YWx1ZVN0YXJ0JykpIHtcclxuICAgICAgICBydWxlR3JvdXAucmVtb3ZlQ29udHJvbCgndmFsdWVTdGFydCcpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChydWxlR3JvdXAuY29udGFpbnMoJ3ZhbHVlRW5kJykpIHtcclxuICAgICAgICBydWxlR3JvdXAucmVtb3ZlQ29udHJvbCgndmFsdWVFbmQnKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBcclxuICB0cmFuc2Zvcm1Gb3JtVG9Nb2RlbChmb3JtVmFsdWU6IGFueSk6IFF1ZXJ5R3JvdXAge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgY29uZGl0aW9uOiBmb3JtVmFsdWUuY29uZGl0aW9uLFxyXG4gICAgICBydWxlczogZm9ybVZhbHVlLnJ1bGVzLm1hcCgocnVsZTogYW55KSA9PiB7XHJcbiAgICAgICAgLy8gSGFuZGxlIGRhdGUgcmFuZ2UgZm9yICdiZXR3ZWVuJyBvcGVyYXRvclxyXG4gICAgICAgIGlmIChydWxlLm9wZXJhdG9yID09PSAnYmV0d2VlbicgJiYgdGhpcy5nZXRGaWVsZFR5cGUocnVsZS5maWVsZCkgPT09ICdkYXRlJykge1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgZmllbGQ6IHJ1bGUuZmllbGQsXHJcbiAgICAgICAgICAgIG9wZXJhdG9yOiBydWxlLm9wZXJhdG9yLFxyXG4gICAgICAgICAgICB2YWx1ZTogeyBzdGFydDogcnVsZS52YWx1ZVN0YXJ0LCBlbmQ6IHJ1bGUudmFsdWVFbmQgfSxcclxuICAgICAgICAgICAgY29uZGl0aW9uOiBydWxlLmNvbmRpdGlvblxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gU3RhbmRhcmQgY2FzZVxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICBmaWVsZDogcnVsZS5maWVsZCxcclxuICAgICAgICAgIG9wZXJhdG9yOiBydWxlLm9wZXJhdG9yLFxyXG4gICAgICAgICAgdmFsdWU6IHJ1bGUudmFsdWUsXHJcbiAgICAgICAgICBjb25kaXRpb246IHJ1bGUuY29uZGl0aW9uXHJcbiAgICAgICAgfTtcclxuICAgICAgfSlcclxuICAgIH07XHJcbiAgfVxyXG4gIFxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIGNvbmRpdGlvbiBmb3IgYSBzcGVjaWZpYyByb3dcclxuICAgKiBAcGFyYW0gaW5kZXggVGhlIGluZGV4IG9mIHRoZSByb3dcclxuICAgKiBAcmV0dXJucyBUaGUgY29uZGl0aW9uIChhbmQvb3IpIGZvciB0aGUgcm93XHJcbiAgICovXHJcbiAgZ2V0Um93Q29uZGl0aW9uKGluZGV4OiBudW1iZXIpOiAnYW5kJyB8ICdvcicge1xyXG4gICAgaWYgKGluZGV4ID09PSAwKSByZXR1cm4gJ2FuZCc7IC8vIEZpcnN0IHJvdyBkb2Vzbid0IGhhdmUgYSBjb25kaXRpb25cclxuICAgIFxyXG4gICAgY29uc3QgcnVsZUdyb3VwID0gdGhpcy5ydWxlc0FycmF5LmF0KGluZGV4KSBhcyBGb3JtR3JvdXA7XHJcbiAgICByZXR1cm4gcnVsZUdyb3VwLmdldCgnY29uZGl0aW9uJyk/LnZhbHVlIHx8ICdhbmQnO1xyXG4gIH1cclxuICBcclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBjb25kaXRpb24gZm9yIGEgc3BlY2lmaWMgcm93XHJcbiAgICogQHBhcmFtIGluZGV4IFRoZSBpbmRleCBvZiB0aGUgcm93XHJcbiAgICogQHBhcmFtIGNvbmRpdGlvbiBUaGUgY29uZGl0aW9uIHRvIHNldCAoYW5kL29yKVxyXG4gICAqL1xyXG4gIHNldFJvd0NvbmRpdGlvbihpbmRleDogbnVtYmVyLCBjb25kaXRpb246ICdhbmQnIHwgJ29yJyk6IHZvaWQge1xyXG4gICAgaWYgKGluZGV4ID09PSAwKSByZXR1cm47IC8vIEZpcnN0IHJvdyBkb2Vzbid0IGhhdmUgYSBjb25kaXRpb25cclxuICAgIFxyXG4gICAgY29uc3QgcnVsZUdyb3VwID0gdGhpcy5ydWxlc0FycmF5LmF0KGluZGV4KSBhcyBGb3JtR3JvdXA7XHJcbiAgICBydWxlR3JvdXAuZ2V0KCdjb25kaXRpb24nKT8uc2V0VmFsdWUoY29uZGl0aW9uKTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZUNvbmRpdGlvbigpOiB2b2lkIHtcclxuICAgIGNvbnN0IGN1cnJlbnRDb25kaXRpb24gPSB0aGlzLmZvcm0uZ2V0KCdjb25kaXRpb24nKT8udmFsdWU7XHJcbiAgICBjb25zdCBuZXdDb25kaXRpb24gPSBjdXJyZW50Q29uZGl0aW9uID09PSAnYW5kJyA/ICdvcicgOiAnYW5kJztcclxuICAgIHRoaXMuZm9ybS5nZXQoJ2NvbmRpdGlvbicpPy5zZXRWYWx1ZShuZXdDb25kaXRpb24pO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29uZGl0aW9uTGFiZWwoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm0uZ2V0KCdjb25kaXRpb24nKT8udmFsdWUgPT09ICdhbmQnID8gJ0FORCcgOiAnT1InO1xyXG4gIH1cclxuXHJcbiAgcmVzZXRRdWVyeSgpOiB2b2lkIHtcclxuICAgIHRoaXMucnVsZXNBcnJheS5jbGVhcigpO1xyXG4gICAgdGhpcy5hZGRSdWxlKCk7XHJcbiAgfVxyXG5cclxuICBhcHBseVF1ZXJ5KCk6IHZvaWQge1xyXG4gICAgdGhpcy5xdWVyeUNoYW5nZS5lbWl0KHRoaXMubW9kZWwpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwic2EtcXVlcnktYnVpbGRlclwiPlxyXG4gIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInF1ZXJ5LWJ1aWxkZXItaGVhZGVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ3aGVyZS1sYWJlbFwiPldoZXJlPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwicXVlcnktYnVpbGRlci1ib2R5XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJydWxlcy1jb250YWluZXJcIiBmb3JtQXJyYXlOYW1lPVwicnVsZXNcIj5cclxuICAgICAgICBAZm9yIChydWxlIG9mIHJ1bGVzQXJyYXkuY29udHJvbHM7IHRyYWNrICRpbmRleCkge1xyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJ1bGUtcm93XCIgW2Zvcm1Hcm91cE5hbWVdPVwiJGluZGV4XCI+XHJcbiAgICAgICAgICAgIDwhLS0gQ29uZGl0aW9uIHNlbGVjdG9yIChBbmQvT3IpIC0tPlxyXG4gICAgICAgICAgICBAaWYgKCRpbmRleCA+IDApIHtcclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29uZGl0aW9uLXNlbGVjdG9yXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cImZpbGxcIj5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgW3ZhbHVlXT1cImdldFJvd0NvbmRpdGlvbigkaW5kZXgpXCIgKHNlbGVjdGlvbkNoYW5nZSk9XCJzZXRSb3dDb25kaXRpb24oJGluZGV4LCAkZXZlbnQudmFsdWUpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJhbmRcIj5BbmQ8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJvclwiPk9yPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29uZGl0aW9uLXBsYWNlaG9sZGVyXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIDwhLS0gRmllbGQgc2VsZWN0aW9uIC0tPlxyXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmaWVsZC1zZWxlY3RcIj5cclxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPlNlbGVjdCBhIGZpbHRlcjwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cImZpZWxkXCIgKHNlbGVjdGlvbkNoYW5nZSk9XCJvbkZpZWxkQ2hhbmdlKCRpbmRleCwgJGV2ZW50LnZhbHVlKVwiPlxyXG4gICAgICAgICAgICAgICAgQGZvciAoZmllbGQgb2YgY29uZmlnLmZpZWxkczsgdHJhY2sgZmllbGQua2V5KSB7XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJmaWVsZC5rZXlcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBmaWVsZC5sYWJlbCB9fVxyXG4gICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuICAgICAgICAgICAgPCEtLSBPcGVyYXRvciBzZWxlY3Rpb24gLS0+XHJcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cIm9wZXJhdG9yLXNlbGVjdFwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cIm9wZXJhdG9yXCIgKHNlbGVjdGlvbkNoYW5nZSk9XCJvbk9wZXJhdG9yQ2hhbmdlKCRpbmRleCwgJGV2ZW50LnZhbHVlLCBydWxlLnZhbHVlLmZpZWxkKVwiPlxyXG4gICAgICAgICAgICAgICAgQGZvciAob3Agb2YgZ2V0T3BlcmF0b3JzRm9yRmllbGQocnVsZS52YWx1ZS5maWVsZCk7IHRyYWNrIG9wLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJvcC52YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IG9wLmxhYmVsIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgICAgICAgICA8IS0tIFZhbHVlIGlucHV0IGJhc2VkIG9uIGZpZWxkIHR5cGUgLS0+XHJcbiAgICAgICAgICAgIEBzd2l0Y2ggKGdldEZpZWxkVHlwZShydWxlLnZhbHVlLmZpZWxkKSkge1xyXG4gICAgICAgICAgICAgIEBjYXNlICgnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwidmFsdWUtaW5wdXRcIj5cclxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cInZhbHVlXCIgcGxhY2Vob2xkZXI9XCJFbnRlciBhIHZhbHVlLi4uXCI+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBAY2FzZSAoJ251bWJlcicpIHtcclxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInZhbHVlLWlucHV0XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPVwibnVtYmVyXCIgZm9ybUNvbnRyb2xOYW1lPVwidmFsdWVcIiBwbGFjZWhvbGRlcj1cIkVudGVyIGEgdmFsdWUuLi5cIj5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIEBjYXNlICgnZGF0ZScpIHtcclxuICAgICAgICAgICAgICAgIEBpZiAoIWlzT3BlcmF0b3JCZXR3ZWVuKCRpbmRleCkpIHtcclxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwidmFsdWUtaW5wdXRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT1cImRhdGVcIiBbbWF0RGF0ZXBpY2tlcl09XCJwaWNrZXJcIiBmb3JtQ29udHJvbE5hbWU9XCJ2YWx1ZVwiIChjbGljayk9XCJwaWNrZXIub3BlbigpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRJY29uU3VmZml4IFtmb3JdPVwicGlja2VyXCI+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyICNwaWNrZXI+PC9tYXQtZGF0ZXBpY2tlcj5cclxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZS1yYW5nZS1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJ2YWx1ZS1pbnB1dCBzdGFydC1kYXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlN0YXJ0IGRhdGU8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbbWF0RGF0ZXBpY2tlcl09XCJzdGFydFBpY2tlclwiIGZvcm1Db250cm9sTmFtZT1cInZhbHVlU3RhcnRcIiAoY2xpY2spPVwic3RhcnRQaWNrZXIub3BlbigpXCIgKGRhdGVDaGFuZ2UpPVwib25TdGFydERhdGVDaGFuZ2UoJGluZGV4LCAkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdEljb25TdWZmaXggW2Zvcl09XCJzdGFydFBpY2tlclwiPjwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyICNzdGFydFBpY2tlcj48L21hdC1kYXRlcGlja2VyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwidmFsdWUtaW5wdXQgZW5kLWRhdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+RW5kIGRhdGU8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbbWF0RGF0ZXBpY2tlcl09XCJlbmRQaWNrZXJcIiBmb3JtQ29udHJvbE5hbWU9XCJ2YWx1ZUVuZFwiIChjbGljayk9XCJlbmRQaWNrZXIub3BlbigpXCIgW21pbl09XCJnZXRNaW5FbmREYXRlKCRpbmRleClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGUgbWF0SWNvblN1ZmZpeCBbZm9yXT1cImVuZFBpY2tlclwiPjwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyICNlbmRQaWNrZXIgW3N0YXJ0QXRdPVwiZ2V0TWluRW5kRGF0ZSgkaW5kZXgpXCI+PC9tYXQtZGF0ZXBpY2tlcj5cclxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgQGNhc2UgKCdib29sZWFuJykge1xyXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwidmFsdWUtaW5wdXRcIj5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwidmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwidHJ1ZVwiPlRydWU8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cImZhbHNlXCI+RmFsc2U8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIEBjYXNlICgnc2VsZWN0Jykge1xyXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwidmFsdWUtaW5wdXRcIj5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwidmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICBAZm9yIChvcHRpb24gb2YgZ2V0RmllbGRPcHRpb25zKHJ1bGUudmFsdWUuZmllbGQpOyB0cmFjayBvcHRpb24udmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgb3B0aW9uLmxhYmVsIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBAZGVmYXVsdCB7XHJcbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJ2YWx1ZS1pbnB1dFwiPlxyXG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwidmFsdWVcIiBwbGFjZWhvbGRlcj1cIkVudGVyIGEgdmFsdWUuLi5cIj5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICA8IS0tIFJlbW92ZSBydWxlIGJ1dHRvbiAtLT5cclxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gY2xhc3M9XCJyZW1vdmUtcnVsZS1idG5cIiBcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlUnVsZSgkaW5kZXgpXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInJ1bGVzQXJyYXkubGVuZ3RoID09PSAxXCJcclxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiUmVtb3ZlIGZpbHRlclwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgfVxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDwhLS0gQWRkIHJ1bGUgYnV0dG9uIC0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiYWRkLXJ1bGUtY29udGFpbmVyXCI+XHJcbiAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIGNsYXNzPVwiYWRkLXJ1bGUtYnRuXCIgKGNsaWNrKT1cImFkZFJ1bGUoKVwiPlxyXG4gICAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+IEFkZCBhIGZpbHRlclxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJxdWVyeS1idWlsZGVyLWZvb3RlclwiPlxyXG4gICAgICA8YnV0dG9uIG1hdC1idXR0b24gY2xhc3M9XCJyZXNldC1idG5cIiAoY2xpY2spPVwicmVzZXRRdWVyeSgpXCI+UmVzZXQ8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiBjbGFzcz1cImFwcGx5LWJ0blwiIChjbGljayk9XCJhcHBseVF1ZXJ5KClcIj5BcHBseSBmaWx0ZXJzPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Zvcm0+XHJcbjwvZGl2PlxyXG4iXX0=
|
|
@@ -104,4 +104,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
|
|
|
104
104
|
providedIn: 'root'
|
|
105
105
|
}]
|
|
106
106
|
}], ctorParameters: () => [] });
|
|
107
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
107
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktYnVpbGRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50LWxpYnJhcnkvc3JjL2xpYi9xdWVyeS1idWlsZGVyL3F1ZXJ5LWJ1aWxkZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQU0zQyxNQUFNLE9BQU8sbUJBQW1CO0lBRTlCLGdCQUFnQixDQUFDO0lBRWpCOzs7O09BSUc7SUFDSCxhQUFhLENBQUMsS0FBaUI7UUFDN0IsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdkQsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUMsS0FBSzthQUNmLEdBQUcsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFO1lBQ2pCLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNuQixPQUFPLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFrQixDQUFDLEdBQUcsQ0FBQztZQUN2RCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDeEQsQ0FBQztRQUNILENBQUMsQ0FBQzthQUNELElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsV0FBVyxDQUFDLEtBQWlCO1FBQzNCLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3ZELE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUVELE9BQU87WUFDTCxTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7WUFDMUIsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUU7Z0JBQ25DLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO29CQUNuQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBa0IsQ0FBQyxDQUFDO2dCQUM5QyxDQUFDO3FCQUFNLENBQUM7b0JBQ04sT0FBTzt3QkFDTCxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7d0JBQ2pCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTt3QkFDdkIsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO3FCQUNsQixDQUFDO2dCQUNKLENBQUM7WUFDSCxDQUFDLENBQUM7U0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxZQUFZLENBQUMsS0FBaUI7UUFDNUIsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdkQsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFO1lBQ3JDLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNuQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBa0IsQ0FBQyxDQUFDO1lBQy9DLENBQUM7aUJBQU0sQ0FBQztnQkFDTixPQUFPLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQztZQUN4RixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGdCQUFnQixDQUFDLFlBQTBCLEtBQUs7UUFDOUMsT0FBTztZQUNMLFNBQVM7WUFDVCxLQUFLLEVBQUUsRUFBRTtTQUNWLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsaUJBQWlCLENBQUMsS0FBYSxFQUFFLFFBQWdCLEVBQUUsS0FBVTtRQUMzRCxPQUFPO1lBQ0wsU0FBUyxFQUFFLEtBQUs7WUFDaEIsS0FBSyxFQUFFO2dCQUNMO29CQUNFLEtBQUs7b0JBQ0wsUUFBUTtvQkFDUixLQUFLO2lCQUNOO2FBQ0Y7U0FDRixDQUFDO0lBQ0osQ0FBQzs4R0FwR1UsbUJBQW1CO2tIQUFuQixtQkFBbUIsY0FGbEIsTUFBTTs7MkZBRVAsbUJBQW1CO2tCQUgvQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUXVlcnlHcm91cCwgUXVlcnlSdWxlIH0gZnJvbSAnLi9xdWVyeS1idWlsZGVyLmNvbXBvbmVudCc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBRdWVyeUJ1aWxkZXJTZXJ2aWNlIHtcclxuICBcclxuICBjb25zdHJ1Y3RvcigpIHsgfVxyXG5cclxuICAvKipcclxuICAgKiBDb252ZXJ0cyBhIHF1ZXJ5IGdyb3VwIHRvIGEgaHVtYW4tcmVhZGFibGUgc3RyaW5nXHJcbiAgICogQHBhcmFtIHF1ZXJ5IFRoZSBxdWVyeSBncm91cCB0byBjb252ZXJ0XHJcbiAgICogQHJldHVybnMgQSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHF1ZXJ5XHJcbiAgICovXHJcbiAgcXVlcnlUb1N0cmluZyhxdWVyeTogUXVlcnlHcm91cCk6IHN0cmluZyB7XHJcbiAgICBpZiAoIXF1ZXJ5IHx8ICFxdWVyeS5ydWxlcyB8fCBxdWVyeS5ydWxlcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBxdWVyeS5ydWxlc1xyXG4gICAgICAubWFwKChydWxlOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocnVsZS5jb25kaXRpb24pIHtcclxuICAgICAgICAgIHJldHVybiBgKCR7dGhpcy5xdWVyeVRvU3RyaW5nKHJ1bGUgYXMgUXVlcnlHcm91cCl9KWA7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiBgJHtydWxlLmZpZWxkfSAke3J1bGUub3BlcmF0b3J9ICR7cnVsZS52YWx1ZX1gO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgLmpvaW4oYCAke3F1ZXJ5LmNvbmRpdGlvbi50b1VwcGVyQ2FzZSgpfSBgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbnZlcnRzIGEgcXVlcnkgZ3JvdXAgdG8gYSBKU09OIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIGluIEFQSSByZXF1ZXN0c1xyXG4gICAqIEBwYXJhbSBxdWVyeSBUaGUgcXVlcnkgZ3JvdXAgdG8gY29udmVydFxyXG4gICAqIEByZXR1cm5zIEEgSlNPTiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhlIHF1ZXJ5XHJcbiAgICovXHJcbiAgcXVlcnlUb0pzb24ocXVlcnk6IFF1ZXJ5R3JvdXApOiBhbnkge1xyXG4gICAgaWYgKCFxdWVyeSB8fCAhcXVlcnkucnVsZXMgfHwgcXVlcnkucnVsZXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiB7fTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBjb25kaXRpb246IHF1ZXJ5LmNvbmRpdGlvbixcclxuICAgICAgcnVsZXM6IHF1ZXJ5LnJ1bGVzLm1hcCgocnVsZTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJ1bGUuY29uZGl0aW9uKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5xdWVyeVRvSnNvbihydWxlIGFzIFF1ZXJ5R3JvdXApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBmaWVsZDogcnVsZS5maWVsZCxcclxuICAgICAgICAgICAgb3BlcmF0b3I6IHJ1bGUub3BlcmF0b3IsXHJcbiAgICAgICAgICAgIHZhbHVlOiBydWxlLnZhbHVlXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBWYWxpZGF0ZXMgYSBxdWVyeSBncm91cCB0byBlbnN1cmUgYWxsIHJ1bGVzIGhhdmUgdmFsaWQgdmFsdWVzXHJcbiAgICogQHBhcmFtIHF1ZXJ5IFRoZSBxdWVyeSBncm91cCB0byB2YWxpZGF0ZVxyXG4gICAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHF1ZXJ5IGlzIHZhbGlkLCBmYWxzZSBvdGhlcndpc2VcclxuICAgKi9cclxuICBpc1F1ZXJ5VmFsaWQocXVlcnk6IFF1ZXJ5R3JvdXApOiBib29sZWFuIHtcclxuICAgIGlmICghcXVlcnkgfHwgIXF1ZXJ5LnJ1bGVzIHx8IHF1ZXJ5LnJ1bGVzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHF1ZXJ5LnJ1bGVzLmV2ZXJ5KChydWxlOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHJ1bGUuY29uZGl0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNRdWVyeVZhbGlkKHJ1bGUgYXMgUXVlcnlHcm91cCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHJ1bGUuZmllbGQgJiYgcnVsZS5vcGVyYXRvciAmJiBydWxlLnZhbHVlICE9PSB1bmRlZmluZWQgJiYgcnVsZS52YWx1ZSAhPT0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGVzIGFuIGVtcHR5IHF1ZXJ5IGdyb3VwXHJcbiAgICogQHBhcmFtIGNvbmRpdGlvbiBUaGUgY29uZGl0aW9uIHRvIHVzZSAoYW5kL29yKVxyXG4gICAqIEByZXR1cm5zIEFuIGVtcHR5IHF1ZXJ5IGdyb3VwXHJcbiAgICovXHJcbiAgY3JlYXRlRW1wdHlRdWVyeShjb25kaXRpb246ICdhbmQnIHwgJ29yJyA9ICdhbmQnKTogUXVlcnlHcm91cCB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBjb25kaXRpb24sXHJcbiAgICAgIHJ1bGVzOiBbXVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZXMgYSBzaW1wbGUgcXVlcnkgd2l0aCBhIHNpbmdsZSBydWxlXHJcbiAgICogQHBhcmFtIGZpZWxkIFRoZSBmaWVsZCB0byBmaWx0ZXIgb25cclxuICAgKiBAcGFyYW0gb3BlcmF0b3IgVGhlIG9wZXJhdG9yIHRvIHVzZVxyXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gZmlsdGVyIGJ5XHJcbiAgICogQHJldHVybnMgQSBxdWVyeSBncm91cCB3aXRoIGEgc2luZ2xlIHJ1bGVcclxuICAgKi9cclxuICBjcmVhdGVTaW1wbGVRdWVyeShmaWVsZDogc3RyaW5nLCBvcGVyYXRvcjogc3RyaW5nLCB2YWx1ZTogYW55KTogUXVlcnlHcm91cCB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBjb25kaXRpb246ICdhbmQnLFxyXG4gICAgICBydWxlczogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIGZpZWxkLFxyXG4gICAgICAgICAgb3BlcmF0b3IsXHJcbiAgICAgICAgICB2YWx1ZVxyXG4gICAgICAgIH1cclxuICAgICAgXVxyXG4gICAgfTtcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -108,7 +108,7 @@ export class QueryBuilderFormlyComponent extends FieldArrayType {
|
|
|
108
108
|
this.add(); // start fresh with one row
|
|
109
109
|
}
|
|
110
110
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: QueryBuilderFormlyComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
111
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.4", type: QueryBuilderFormlyComponent, isStandalone: true, selector: "sa-query-builder-formly", providers: [], usesInheritance: true, ngImport: i0, template: "<div class=\"sa-query-builder-container\">\n <div class=\"query-builder-body\">\n @for(subField of field.fieldGroup; track subField.id || $index) {\n <div class=\"row align-items-baseline query-row\" [@rowAnimation]>\n @if ($index === 0) {\n <span class=\"where-text flex-1\">Where</span>\n }\n @for (innerField of subField.fieldGroup; track innerField.key || $index) {\n @if(!!innerField.props['hasDynamicType']){\n @switch (getFilterType(innerField)) {\n @case ('STRING') {\n <formly-field [field]=\"innerField\"></formly-field>\n }\n @case ('NUMBER') {\n <formly-field [field]=\"innerField\"></formly-field>\n }\n @case ('BOOLEAN') {\n <formly-field [field]=\"innerField\"></formly-field>\n }\n @case ('CURRENCY') {\n <formly-field [field]=\"innerField\"></formly-field>\n }\n @case ('DATE') {\n\n }\n @case ('SELECT') {\n <formly-field [field]=\"createField(innerField)\"></formly-field>\n }\n @default {\n <formly-field [field]=\"createField(innerField)\"></formly-field>\n }\n }\n }@else{\n <formly-field\n class=\"col\"\n [field]=\"innerField\"\n >\n </formly-field>\n }\n }\n @if(props?.['showCopyButton']){\n <sa-icon icon=\"copyOutlined\" class=\"copy-icon pointer\" (click)=\"copy($index)\"></sa-icon>\n }\n <sa-icon icon=\"deleteIcon\" class=\"delete-icon pointer\" (click)=\"remove($index)\"></sa-icon>\n </div>\n }\n \n <!-- Buttons -->\n <div class=\"rule-button-container\">\n <sa-button icon=\"add\" iconPosition=\"left\" text=\"Add filter\"\n (onClickEvent)=\"add()\"\n [state]=\"field?.fieldGroup?.length === (props?.['maxRows'] || 5) ? 'disabled' : 'default'\"\n type=\"outline\" size=\"medium\">\n </sa-button>\n <span class=\"filters-count\">({{field?.fieldGroup?.length}}/{{props?.['maxRows'] || 5}} filters)</span>\n @if(props?.['showResetButton']){\n <sa-button iconPosition=\"left\" text=\"Reset\"\n (onClickEvent)=\"reset()\"\n type=\"primary\" size=\"medium\">\n </sa-button>\n }\n </div> \n </div>\n</div>", styles: [".sa-query-builder-container{display:flex}.sa-query-builder-container .query-builder-body{display:flex;flex-direction:column;gap:var(--small-12px);width:-webkit-fill-available}.query-builder-body .row{display:flex;height:2.25rem;justify-content:center;align-items:center;flex:1 0 0;gap:var(--small-8px);width:-webkit-fill-available}.query-row{transition:all .2s ease-in-out;border-radius:var(--small-4px);padding:var(--small-4px);margin:2px 0}.query-row ::ng-deep .query-builder-form-wrapper{transition:all .15s ease-in-out}.query-builder-form-wrapper{width:-webkit-fill-available}::ng-deep .query-builder-form-wrapper .sa-input-field.idle{border-radius:var(--small-4px);border:1px solid var(--grey-100, #EAECF0);background:var(--white, #FFF);height:2.438rem}::ng-deep .query-builder-form-wrapper .sa-input-container{height:3.438rem}::ng-deep .query-builder-form-wrapper .sa-input-container .disabled .sa-input-field input{color:var(--text-low-emphasis, #9B98A3);font-family:var(--font-family, Roboto);font-size:13px;font-style:normal;font-weight:400;line-height:var(--medium-20px);letter-spacing:.25px}.where-text{color:var(--text-medium-emphasis, #6D6979);font-family:var(--font-family-roboto);font-size:var(--small-14px);font-style:normal;font-weight:var(--font-weight-500);line-height:var(--medium-20px);letter-spacing:.1px;width:80px}.flex-1{flex:1 1 0;min-width:80px}.flex-2{flex:2 1 0;min-width:120px}.flex-4{flex:4 1 0;min-width:200px}.copy-icon,.delete-icon{transition:all .2s ease-in-out;padding:4px;border-radius:4px;opacity:.7}.copy-icon:hover,.delete-icon:hover{opacity:1;transform:scale(1.1);background-color:#0000000d}.copy-icon:active,.delete-icon:active{transform:scale(.95)}.copy-icon:hover{color:var(--primary-500, #7C3AED)}.delete-icon:hover{color:var(--error-500, #EF4444)}.rule-button-container{transition:all .2s ease-in-out}.rule-button-container sa-button{transition:all .2s ease-in-out}.rule-button-container sa-button:hover{transform:translateY(-1px)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: FormlyModule }, { kind: "component", type: i1.FormlyField, selector: "formly-field", inputs: ["field"] }, { kind: "component", type: ButtonComponent, selector: "sa-button", inputs: ["id", "type", "state", "size", "text", "ImagePath", "icon", "iconPosition", "href", "hrefTarget", "width", "isSubmit", "buttonIconSize", "showSpinner"], outputs: ["onClickEvent", "onMouseInEvent", "onMouseOutEvent"] }, { kind: "component", type: IconComponent, selector: "sa-icon", inputs: ["img", "icon", "size", "color", "iconPath", "iconUrl", "customClass", "href", "hrefTarget", "iconPosition"], outputs: ["onClickEvent"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "ngmodule", type: MatSelectModule }, { kind: "ngmodule", type: MatOptionModule }, { kind: "ngmodule", type: MatIconModule }], animations: [
|
|
111
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.4", type: QueryBuilderFormlyComponent, isStandalone: true, selector: "sa-query-builder-formly", providers: [], usesInheritance: true, ngImport: i0, template: "<div class=\"sa-query-builder-container\">\r\n <div class=\"query-builder-body\">\r\n @for(subField of field.fieldGroup; track subField.id || $index) {\r\n <div class=\"row align-items-baseline query-row\" [@rowAnimation]>\r\n @if ($index === 0) {\r\n <span class=\"where-text flex-1\">Where</span>\r\n }\r\n @for (innerField of subField.fieldGroup; track innerField.key || $index) {\r\n @if(!!innerField.props['hasDynamicType']){\r\n @switch (getFilterType(innerField)) {\r\n @case ('STRING') {\r\n <formly-field [field]=\"innerField\"></formly-field>\r\n }\r\n @case ('NUMBER') {\r\n <formly-field [field]=\"innerField\"></formly-field>\r\n }\r\n @case ('BOOLEAN') {\r\n <formly-field [field]=\"innerField\"></formly-field>\r\n }\r\n @case ('CURRENCY') {\r\n <formly-field [field]=\"innerField\"></formly-field>\r\n }\r\n @case ('DATE') {\r\n\r\n }\r\n @case ('SELECT') {\r\n <formly-field [field]=\"createField(innerField)\"></formly-field>\r\n }\r\n @default {\r\n <formly-field [field]=\"createField(innerField)\"></formly-field>\r\n }\r\n }\r\n }@else{\r\n <formly-field\r\n class=\"col\"\r\n [field]=\"innerField\"\r\n >\r\n </formly-field>\r\n }\r\n }\r\n @if(props?.['showCopyButton']){\r\n <sa-icon icon=\"copyOutlined\" class=\"copy-icon pointer\" (click)=\"copy($index)\"></sa-icon>\r\n }\r\n <sa-icon icon=\"deleteIcon\" class=\"delete-icon pointer\" (click)=\"remove($index)\"></sa-icon>\r\n </div>\r\n }\r\n \r\n <!-- Buttons -->\r\n <div class=\"rule-button-container\">\r\n <sa-button icon=\"add\" iconPosition=\"left\" text=\"Add filter\"\r\n (onClickEvent)=\"add()\"\r\n [state]=\"field?.fieldGroup?.length === (props?.['maxRows'] || 5) ? 'disabled' : 'default'\"\r\n type=\"outline\" size=\"medium\">\r\n </sa-button>\r\n <span class=\"filters-count\">({{field?.fieldGroup?.length}}/{{props?.['maxRows'] || 5}} filters)</span>\r\n @if(props?.['showResetButton']){\r\n <sa-button iconPosition=\"left\" text=\"Reset\"\r\n (onClickEvent)=\"reset()\"\r\n type=\"primary\" size=\"medium\">\r\n </sa-button>\r\n }\r\n </div> \r\n </div>\r\n</div>", styles: [".sa-query-builder-container{display:flex}.sa-query-builder-container .query-builder-body{display:flex;flex-direction:column;gap:var(--small-12px);width:-webkit-fill-available}.query-builder-body .row{display:flex;height:2.25rem;justify-content:center;align-items:center;flex:1 0 0;gap:var(--small-8px);width:-webkit-fill-available}.query-row{transition:all .2s ease-in-out;border-radius:var(--small-4px);padding:var(--small-4px);margin:2px 0}.query-row ::ng-deep .query-builder-form-wrapper{transition:all .15s ease-in-out}.query-builder-form-wrapper{width:-webkit-fill-available}::ng-deep .query-builder-form-wrapper .sa-input-field.idle{border-radius:var(--small-4px);border:1px solid var(--grey-100, #EAECF0);background:var(--white, #FFF);height:2.438rem}::ng-deep .query-builder-form-wrapper .sa-input-container{height:3.438rem}::ng-deep .query-builder-form-wrapper .sa-input-container .disabled .sa-input-field input{color:var(--text-low-emphasis, #9B98A3);font-family:var(--font-family, Roboto);font-size:13px;font-style:normal;font-weight:400;line-height:var(--medium-20px);letter-spacing:.25px}.where-text{color:var(--text-medium-emphasis, #6D6979);font-family:var(--font-family-roboto);font-size:var(--small-14px);font-style:normal;font-weight:var(--font-weight-500);line-height:var(--medium-20px);letter-spacing:.1px;width:80px}.flex-1{flex:1 1 0;min-width:80px}.flex-2{flex:2 1 0;min-width:120px}.flex-4{flex:4 1 0;min-width:200px}.copy-icon,.delete-icon{transition:all .2s ease-in-out;padding:4px;border-radius:4px;opacity:.7}.copy-icon:hover,.delete-icon:hover{opacity:1;transform:scale(1.1);background-color:#0000000d}.copy-icon:active,.delete-icon:active{transform:scale(.95)}.copy-icon:hover{color:var(--primary-500, #7C3AED)}.delete-icon:hover{color:var(--error-500, #EF4444)}.rule-button-container{transition:all .2s ease-in-out}.rule-button-container sa-button{transition:all .2s ease-in-out}.rule-button-container sa-button:hover{transform:translateY(-1px)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: FormlyModule }, { kind: "component", type: i1.FormlyField, selector: "formly-field", inputs: ["field"] }, { kind: "component", type: ButtonComponent, selector: "sa-button", inputs: ["id", "type", "state", "size", "text", "ImagePath", "icon", "iconPosition", "href", "hrefTarget", "width", "isSubmit", "buttonIconSize", "showSpinner"], outputs: ["onClickEvent", "onMouseInEvent", "onMouseOutEvent"] }, { kind: "component", type: IconComponent, selector: "sa-icon", inputs: ["img", "icon", "size", "color", "iconPath", "iconUrl", "customClass", "href", "hrefTarget", "iconPosition"], outputs: ["onClickEvent"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "ngmodule", type: MatSelectModule }, { kind: "ngmodule", type: MatOptionModule }, { kind: "ngmodule", type: MatIconModule }], animations: [
|
|
112
112
|
trigger('rowAnimation', [
|
|
113
113
|
transition(':enter', [
|
|
114
114
|
style({
|
|
@@ -180,6 +180,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
|
|
|
180
180
|
MatSelectModule,
|
|
181
181
|
MatOptionModule,
|
|
182
182
|
MatIconModule
|
|
183
|
-
], template: "<div class=\"sa-query-builder-container\">\n <div class=\"query-builder-body\">\n @for(subField of field.fieldGroup; track subField.id || $index) {\n <div class=\"row align-items-baseline query-row\" [@rowAnimation]>\n @if ($index === 0) {\n <span class=\"where-text flex-1\">Where</span>\n }\n @for (innerField of subField.fieldGroup; track innerField.key || $index) {\n @if(!!innerField.props['hasDynamicType']){\n @switch (getFilterType(innerField)) {\n @case ('STRING') {\n <formly-field [field]=\"innerField\"></formly-field>\n }\n @case ('NUMBER') {\n <formly-field [field]=\"innerField\"></formly-field>\n }\n @case ('BOOLEAN') {\n <formly-field [field]=\"innerField\"></formly-field>\n }\n @case ('CURRENCY') {\n <formly-field [field]=\"innerField\"></formly-field>\n }\n @case ('DATE') {\n\n }\n @case ('SELECT') {\n <formly-field [field]=\"createField(innerField)\"></formly-field>\n }\n @default {\n <formly-field [field]=\"createField(innerField)\"></formly-field>\n }\n }\n }@else{\n <formly-field\n class=\"col\"\n [field]=\"innerField\"\n >\n </formly-field>\n }\n }\n @if(props?.['showCopyButton']){\n <sa-icon icon=\"copyOutlined\" class=\"copy-icon pointer\" (click)=\"copy($index)\"></sa-icon>\n }\n <sa-icon icon=\"deleteIcon\" class=\"delete-icon pointer\" (click)=\"remove($index)\"></sa-icon>\n </div>\n }\n \n <!-- Buttons -->\n <div class=\"rule-button-container\">\n <sa-button icon=\"add\" iconPosition=\"left\" text=\"Add filter\"\n (onClickEvent)=\"add()\"\n [state]=\"field?.fieldGroup?.length === (props?.['maxRows'] || 5) ? 'disabled' : 'default'\"\n type=\"outline\" size=\"medium\">\n </sa-button>\n <span class=\"filters-count\">({{field?.fieldGroup?.length}}/{{props?.['maxRows'] || 5}} filters)</span>\n @if(props?.['showResetButton']){\n <sa-button iconPosition=\"left\" text=\"Reset\"\n (onClickEvent)=\"reset()\"\n type=\"primary\" size=\"medium\">\n </sa-button>\n }\n </div> \n </div>\n</div>", styles: [".sa-query-builder-container{display:flex}.sa-query-builder-container .query-builder-body{display:flex;flex-direction:column;gap:var(--small-12px);width:-webkit-fill-available}.query-builder-body .row{display:flex;height:2.25rem;justify-content:center;align-items:center;flex:1 0 0;gap:var(--small-8px);width:-webkit-fill-available}.query-row{transition:all .2s ease-in-out;border-radius:var(--small-4px);padding:var(--small-4px);margin:2px 0}.query-row ::ng-deep .query-builder-form-wrapper{transition:all .15s ease-in-out}.query-builder-form-wrapper{width:-webkit-fill-available}::ng-deep .query-builder-form-wrapper .sa-input-field.idle{border-radius:var(--small-4px);border:1px solid var(--grey-100, #EAECF0);background:var(--white, #FFF);height:2.438rem}::ng-deep .query-builder-form-wrapper .sa-input-container{height:3.438rem}::ng-deep .query-builder-form-wrapper .sa-input-container .disabled .sa-input-field input{color:var(--text-low-emphasis, #9B98A3);font-family:var(--font-family, Roboto);font-size:13px;font-style:normal;font-weight:400;line-height:var(--medium-20px);letter-spacing:.25px}.where-text{color:var(--text-medium-emphasis, #6D6979);font-family:var(--font-family-roboto);font-size:var(--small-14px);font-style:normal;font-weight:var(--font-weight-500);line-height:var(--medium-20px);letter-spacing:.1px;width:80px}.flex-1{flex:1 1 0;min-width:80px}.flex-2{flex:2 1 0;min-width:120px}.flex-4{flex:4 1 0;min-width:200px}.copy-icon,.delete-icon{transition:all .2s ease-in-out;padding:4px;border-radius:4px;opacity:.7}.copy-icon:hover,.delete-icon:hover{opacity:1;transform:scale(1.1);background-color:#0000000d}.copy-icon:active,.delete-icon:active{transform:scale(.95)}.copy-icon:hover{color:var(--primary-500, #7C3AED)}.delete-icon:hover{color:var(--error-500, #EF4444)}.rule-button-container{transition:all .2s ease-in-out}.rule-button-container sa-button{transition:all .2s ease-in-out}.rule-button-container sa-button:hover{transform:translateY(-1px)}\n"] }]
|
|
183
|
+
], template: "<div class=\"sa-query-builder-container\">\r\n <div class=\"query-builder-body\">\r\n @for(subField of field.fieldGroup; track subField.id || $index) {\r\n <div class=\"row align-items-baseline query-row\" [@rowAnimation]>\r\n @if ($index === 0) {\r\n <span class=\"where-text flex-1\">Where</span>\r\n }\r\n @for (innerField of subField.fieldGroup; track innerField.key || $index) {\r\n @if(!!innerField.props['hasDynamicType']){\r\n @switch (getFilterType(innerField)) {\r\n @case ('STRING') {\r\n <formly-field [field]=\"innerField\"></formly-field>\r\n }\r\n @case ('NUMBER') {\r\n <formly-field [field]=\"innerField\"></formly-field>\r\n }\r\n @case ('BOOLEAN') {\r\n <formly-field [field]=\"innerField\"></formly-field>\r\n }\r\n @case ('CURRENCY') {\r\n <formly-field [field]=\"innerField\"></formly-field>\r\n }\r\n @case ('DATE') {\r\n\r\n }\r\n @case ('SELECT') {\r\n <formly-field [field]=\"createField(innerField)\"></formly-field>\r\n }\r\n @default {\r\n <formly-field [field]=\"createField(innerField)\"></formly-field>\r\n }\r\n }\r\n }@else{\r\n <formly-field\r\n class=\"col\"\r\n [field]=\"innerField\"\r\n >\r\n </formly-field>\r\n }\r\n }\r\n @if(props?.['showCopyButton']){\r\n <sa-icon icon=\"copyOutlined\" class=\"copy-icon pointer\" (click)=\"copy($index)\"></sa-icon>\r\n }\r\n <sa-icon icon=\"deleteIcon\" class=\"delete-icon pointer\" (click)=\"remove($index)\"></sa-icon>\r\n </div>\r\n }\r\n \r\n <!-- Buttons -->\r\n <div class=\"rule-button-container\">\r\n <sa-button icon=\"add\" iconPosition=\"left\" text=\"Add filter\"\r\n (onClickEvent)=\"add()\"\r\n [state]=\"field?.fieldGroup?.length === (props?.['maxRows'] || 5) ? 'disabled' : 'default'\"\r\n type=\"outline\" size=\"medium\">\r\n </sa-button>\r\n <span class=\"filters-count\">({{field?.fieldGroup?.length}}/{{props?.['maxRows'] || 5}} filters)</span>\r\n @if(props?.['showResetButton']){\r\n <sa-button iconPosition=\"left\" text=\"Reset\"\r\n (onClickEvent)=\"reset()\"\r\n type=\"primary\" size=\"medium\">\r\n </sa-button>\r\n }\r\n </div> \r\n </div>\r\n</div>", styles: [".sa-query-builder-container{display:flex}.sa-query-builder-container .query-builder-body{display:flex;flex-direction:column;gap:var(--small-12px);width:-webkit-fill-available}.query-builder-body .row{display:flex;height:2.25rem;justify-content:center;align-items:center;flex:1 0 0;gap:var(--small-8px);width:-webkit-fill-available}.query-row{transition:all .2s ease-in-out;border-radius:var(--small-4px);padding:var(--small-4px);margin:2px 0}.query-row ::ng-deep .query-builder-form-wrapper{transition:all .15s ease-in-out}.query-builder-form-wrapper{width:-webkit-fill-available}::ng-deep .query-builder-form-wrapper .sa-input-field.idle{border-radius:var(--small-4px);border:1px solid var(--grey-100, #EAECF0);background:var(--white, #FFF);height:2.438rem}::ng-deep .query-builder-form-wrapper .sa-input-container{height:3.438rem}::ng-deep .query-builder-form-wrapper .sa-input-container .disabled .sa-input-field input{color:var(--text-low-emphasis, #9B98A3);font-family:var(--font-family, Roboto);font-size:13px;font-style:normal;font-weight:400;line-height:var(--medium-20px);letter-spacing:.25px}.where-text{color:var(--text-medium-emphasis, #6D6979);font-family:var(--font-family-roboto);font-size:var(--small-14px);font-style:normal;font-weight:var(--font-weight-500);line-height:var(--medium-20px);letter-spacing:.1px;width:80px}.flex-1{flex:1 1 0;min-width:80px}.flex-2{flex:2 1 0;min-width:120px}.flex-4{flex:4 1 0;min-width:200px}.copy-icon,.delete-icon{transition:all .2s ease-in-out;padding:4px;border-radius:4px;opacity:.7}.copy-icon:hover,.delete-icon:hover{opacity:1;transform:scale(1.1);background-color:#0000000d}.copy-icon:active,.delete-icon:active{transform:scale(.95)}.copy-icon:hover{color:var(--primary-500, #7C3AED)}.delete-icon:hover{color:var(--error-500, #EF4444)}.rule-button-container{transition:all .2s ease-in-out}.rule-button-container sa-button{transition:all .2s ease-in-out}.rule-button-container sa-button:hover{transform:translateY(-1px)}\n"] }]
|
|
184
184
|
}] });
|
|
185
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktYnVpbGRlci1mb3JtbHkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50LWxpYnJhcnkvc3JjL2xpYi9xdWVyeS1idWlsZGVyLWZvcm1seS9xdWVyeS1idWlsZGVyLWZvcm1seS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnQtbGlicmFyeS9zcmMvbGliL3F1ZXJ5LWJ1aWxkZXItZm9ybWx5L3F1ZXJ5LWJ1aWxkZXItZm9ybWx5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFFLGNBQWMsRUFBcUIsTUFBTSxrQkFBa0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2hELE9BQU8sRUFBYSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ25DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLE9BQU8sRUFBUyxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8s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QkFBeUIsY0FHdkIsSUFBSSxhQUNMLEVBQUUsY0FDRDt3QkFDVixPQUFPLENBQUMsY0FBYyxFQUFFOzRCQUN0QixVQUFVLENBQUMsUUFBUSxFQUFFO2dDQUNuQixLQUFLLENBQUM7b0NBQ0osT0FBTyxFQUFFLENBQUM7b0NBQ1YsU0FBUyxFQUFFLCtCQUErQjtvQ0FDMUMsTUFBTSxFQUFFLEtBQUs7b0NBQ2IsUUFBUSxFQUFFLFFBQVE7aUNBQ25CLENBQUM7Z0NBQ0YsT0FBTyxDQUFDLHNDQUFzQyxFQUFFLEtBQUssQ0FBQztvQ0FDcEQsT0FBTyxFQUFFLENBQUM7b0NBQ1YsU0FBUyxFQUFFLHdCQUF3QjtvQ0FDbkMsTUFBTSxFQUFFLEdBQUc7aUNBQ1osQ0FBQyxDQUFDOzZCQUNKLENBQUM7NEJBQ0YsVUFBVSxDQUFDLFFBQVEsRUFBRTtnQ0FDbkIsS0FBSyxDQUFDO29DQUNKLE9BQU8sRUFBRSxDQUFDO29DQUNWLFNBQVMsRUFBRSx3QkFBd0I7b0NBQ25DLE1BQU0sRUFBRSxHQUFHO2lDQUNaLENBQUM7Z0NBQ0YsT0FBTyxDQUFDLHNDQUFzQyxFQUFFLEtBQUssQ0FBQztvQ0FDcEQsT0FBTyxFQUFFLENBQUM7b0NBQ1YsU0FBUyxFQUFFLCtCQUErQjtvQ0FDMUMsTUFBTSxFQUFFLEtBQUs7b0NBQ2IsUUFBUSxFQUFFLFFBQVE7aUNBQ25CLENBQUMsQ0FBQzs2QkFDSixDQUFDO3lCQUNILENBQUM7cUJBQ0gsV0FDUTt3QkFDUCxZQUFZO3dCQUNaLG1CQUFtQjt3QkFDbkIsWUFBWTt3QkFDWixlQUFlO3dCQUNmLGFBQWE7d0JBQ2Isa0JBQWtCO3dCQUNsQixlQUFlO3dCQUNmLGVBQWU7d0JBQ2YsYUFBYTtxQkFDZCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGaWVsZEFycmF5VHlwZSwgRm9ybWx5RmllbGRDb25maWcgfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7IFxuaW1wb3J0IHsgRm9ybWx5TW9kdWxlIH0gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XG5pbXBvcnQgeyBGb3JtR3JvdXAsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBnZXQsIGtleXMgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi4vYnV0dG9uL2J1dHRvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWNvbkNvbXBvbmVudCB9IGZyb20gJy4uL2ljb24vaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBNYXRTZWxlY3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xuaW1wb3J0IHsgTWF0T3B0aW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyB0cmlnZ2VyLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIGFuaW1hdGUsIHF1ZXJ5LCBzdGFnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2EtcXVlcnktYnVpbGRlci1mb3JtbHknLFxuICB0ZW1wbGF0ZVVybDogJy4vcXVlcnktYnVpbGRlci1mb3JtbHkuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9xdWVyeS1idWlsZGVyLWZvcm1seS5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBwcm92aWRlcnM6IFtdLFxuICBhbmltYXRpb25zOiBbXG4gICAgdHJpZ2dlcigncm93QW5pbWF0aW9uJywgW1xuICAgICAgdHJhbnNpdGlvbignOmVudGVyJywgW1xuICAgICAgICBzdHlsZSh7IFxuICAgICAgICAgIG9wYWNpdHk6IDAsIFxuICAgICAgICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoLTEwcHgpIHNjYWxlKDAuOTUpJyxcbiAgICAgICAgICBoZWlnaHQ6ICcwcHgnLFxuICAgICAgICAgIG92ZXJmbG93OiAnaGlkZGVuJ1xuICAgICAgICB9KSxcbiAgICAgICAgYW5pbWF0ZSgnMzAwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpJywgc3R5bGUoeyBcbiAgICAgICAgICBvcGFjaXR5OiAxLCBcbiAgICAgICAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKDApIHNjYWxlKDEpJyxcbiAgICAgICAgICBoZWlnaHQ6ICcqJ1xuICAgICAgICB9KSlcbiAgICAgIF0pLFxuICAgICAgdHJhbnNpdGlvbignOmxlYXZlJywgW1xuICAgICAgICBzdHlsZSh7IFxuICAgICAgICAgIG9wYWNpdHk6IDEsIFxuICAgICAgICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoMCkgc2NhbGUoMSknLFxuICAgICAgICAgIGhlaWdodDogJyonXG4gICAgICAgIH0pLFxuICAgICAgICBhbmltYXRlKCcyNTBtcyBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSknLCBzdHlsZSh7IFxuICAgICAgICAgIG9wYWNpdHk6IDAsIFxuICAgICAgICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoLTEwcHgpIHNjYWxlKDAuOTUpJyxcbiAgICAgICAgICBoZWlnaHQ6ICcwcHgnLFxuICAgICAgICAgIG92ZXJmbG93OiAnaGlkZGVuJ1xuICAgICAgICB9KSlcbiAgICAgIF0pXG4gICAgXSlcbiAgXSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIEZvcm1seU1vZHVsZSxcbiAgICBCdXR0b25Db21wb25lbnQsXG4gICAgSWNvbkNvbXBvbmVudCxcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXG4gICAgTWF0U2VsZWN0TW9kdWxlLFxuICAgIE1hdE9wdGlvbk1vZHVsZSxcbiAgICBNYXRJY29uTW9kdWxlICAgIFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIFF1ZXJ5QnVpbGRlckZvcm1seUNvbXBvbmVudCBleHRlbmRzIEZpZWxkQXJyYXlUeXBlIGltcGxlbWVudHMgT25Jbml0IHtcbiAgXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIFxuICAgIFxuICB9XG4gIFxuICBnZXRSb3dDb25kaXRpb24oaW5kZXg6IG51bWJlcik6ICdhbmQnIHwgJ29yJyB7XG4gICAgICBpZiAoaW5kZXggPT09IDApIHJldHVybiAnYW5kJzsgXG4gICAgICBcbiAgICAgIGNvbnN0IHJ1bGVHcm91cCA9IHRoaXMuZm9ybUNvbnRyb2wuYXQoaW5kZXgpIGFzIEZvcm1Hcm91cDtcbiAgICAgIHJldHVybiBydWxlR3JvdXAuZ2V0KCdsb2dpY2FsT3BlcmF0b3InKT8udmFsdWUgfHwgJ2FuZCc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAqIFNldHMgdGhlIGNvbmRpdGlvbiBmb3IgYSBzcGVjaWZpYyByb3dcbiAgICogQHBhcmFtIGluZGV4IFRoZSBpbmRleCBvZiB0aGUgcm93XG4gICAqIEBwYXJhbSBjb25kaXRpb24gVGhlIGNvbmRpdGlvbiB0byBzZXQgKGFuZC9vcilcbiAgICovXG4gIHNldFJvd0NvbmRpdGlvbihpbmRleDogbnVtYmVyLCBjb25kaXRpb246ICdhbmQnIHwgJ29yJyk6IHZvaWQge1xuICAgIGlmIChpbmRleCA9PT0gMCkgcmV0dXJuOyAvLyBGaXJzdCByb3cgZG9lc24ndCBoYXZlIGEgbG9naWNhbCBvcGVyYXRvclxuICAgIFxuICAgIGNvbnN0IHJ1bGVHcm91cCA9IHRoaXMuZm9ybUNvbnRyb2wuYXQoaW5kZXgpIGFzIEZvcm1Hcm91cDtcbiAgICBydWxlR3JvdXAuZ2V0KCdsb2dpY2FsT3BlcmF0b3InKT8uc2V0VmFsdWUoY29uZGl0aW9uKTtcbiAgfVxuXG4gIGNvcHlSdWxlKCk6IHZvaWQge1xuICAgIFxuICB9XG5cbiAgY3JlYXRlRmllbGQoZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnKTogRm9ybWx5RmllbGRDb25maWcge1xuICAgIGlmKGZpZWxkLnR5cGUgPT09ICdkeW5hbWljLXR5cGUnIHx8IGZpZWxkLnR5cGUgPT09ICcnKSB7XG4gICAgICBmaWVsZC50eXBlID0gJ3NhLWlucHV0JztcbiAgICAgIGZpZWxkLnByb3BzLnR5cGUgPSAndGV4dCc7XG4gICAgICBmaWVsZC5wcm9wcy5wbGFjZWhvbGRlciA9ICdFbnRlci9TZWxlY3QnO1xuICAgIH1cbiAgICByZXR1cm4gZmllbGQ7XG4gIH1cblxuICBnZXRGaWx0ZXJUeXBlKHN1YkZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgcGFyZW50VmFsdWUgPSBnZXQoc3ViRmllbGQsICdmb3JtQ29udHJvbC5wYXJlbnQudmFsdWUnKTtcbiAgICBpZiAoIXBhcmVudFZhbHVlKSByZXR1cm4gdW5kZWZpbmVkO1xuICBcbiAgICAvLyBMb29rIHRocm91Z2ggYWxsIGtleXMgb2YgdGhlIHBhcmVudCB2YWx1ZVxuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMocGFyZW50VmFsdWUpKSB7XG4gICAgICBjb25zdCB2YWwgPSBwYXJlbnRWYWx1ZVtrZXldO1xuICAgICAgaWYgKHZhbCAmJiB0eXBlb2YgdmFsID09PSAnb2JqZWN0JyAmJiAnZmlsdGVyVHlwZScgaW4gdmFsKSB7XG4gICAgICAgIHJldHVybiB2YWwuZmlsdGVyVHlwZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8vIHJlc2V0KCk6IHZvaWQge1xuICAvLyAgIHRoaXMuZm9ybUNvbnRyb2wucmVzZXQoKTtcbiAgLy8gfVxuXG4gIC8qKlxuICAgKiBEdXBsaWNhdGVzIHRoZSByb3cgYXQgdGhlIGdpdmVuIGluZGV4LlxuICAgKiBBIGRlZXDigJNjbG9uZSBvZiB0aGF0IHJvd+KAmXMgbW9kZWwgaXMgaW5zZXJ0ZWQgcmlnaHQgYWZ0ZXIgdGhlIG9yaWdpbmFsIHJvdy5cbiAgICovXG4gIGNvcHkoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IHJvd01vZGVsID0gdGhpcy5mb3JtQ29udHJvbC5hdChpbmRleCk/LnZhbHVlO1xuICAgIGlmICghcm93TW9kZWwpIHJldHVybjtcblxuICAgIGNvbnN0IGNsb25lZE1vZGVsID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShyb3dNb2RlbCkpO1xuXG4gICAgLy8gQ2FycnkgdGhlIHZhbHVlIG92ZXIgdG8gdGhlIG5ldyByb3cgc28gdGhlIG9uSW5pdCBob29rIGNhbiByZXN0b3JlIGl0LlxuICAgIGlmIChjbG9uZWRNb2RlbC5maWx0ZXJWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjbG9uZWRNb2RlbC5fY29waWVkVmFsdWUgPSBjbG9uZWRNb2RlbC5maWx0ZXJWYWx1ZTtcbiAgICB9XG5cbiAgICAvLyBJZiBjb3B5aW5nIHRoZSBmaXJzdCByb3cgKGluZGV4IDApLCB0aGUgbmV3IHJvdyAoaW5kZXggMSkgc2hvdWxkIGhhdmUgYSBsb2dpY2FsIG9wZXJhdG9yXG4gICAgLy8gU2V0IGRlZmF1bHQgbG9naWNhbCBvcGVyYXRvciB0byAnYW5kJyBmb3IgdGhlIG5ldyByb3dcbiAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgIGNsb25lZE1vZGVsLmxvZ2ljYWxPcGVyYXRvciA9ICdhbmQnO1xuICAgIH1cblxuICAgIHRoaXMuYWRkKGluZGV4ICsgMSwgY2xvbmVkTW9kZWwpO1xuXG4gICAgLy8gRm9yY2UgcmVidWlsZCBvZiB0aGUgZmlsdGVyVmFsdWUgZmllbGQgYnkgdHJpZ2dlcmluZyBhdHRyaWJ1dGUgY2hhbmdlXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBuZXdSb3dGb3JtID0gdGhpcy5mb3JtQ29udHJvbC5hdChpbmRleCArIDEpIGFzIEZvcm1Hcm91cDtcbiAgICAgIGNvbnN0IGF0dHJDdHJsID0gbmV3Um93Rm9ybT8uZ2V0KCdhdHRyaWJ1dGUnKTtcbiAgICAgIGNvbnN0IGZpbHRlclZhbHVlQ3RybCA9IG5ld1Jvd0Zvcm0/LmdldCgnZmlsdGVyVmFsdWUnKTtcbiAgICAgIFxuICAgICAgaWYgKGF0dHJDdHJsICYmIGZpbHRlclZhbHVlQ3RybCAmJiBjbG9uZWRNb2RlbC5hdHRyaWJ1dGUpIHtcbiAgICAgICAgLy8gU3RvcmUgdGhlIGNvcGllZCB2YWx1ZSBpbiB0aGUgZm9ybSBtb2RlbCBiZWZvcmUgdHJpZ2dlcmluZyByZWJ1aWxkXG4gICAgICAgIGNvbnN0IGNvcGllZFZhbHVlID0gY2xvbmVkTW9kZWwuX2NvcGllZFZhbHVlO1xuICAgICAgICBcbiAgICAgICAgLy8gVGVtcG9yYXJpbHkgY2xlYXIgdGhlIGF0dHJpYnV0ZSB0byBmb3JjZSBhIGNoYW5nZSBldmVudFxuICAgICAgICBhdHRyQ3RybC5zZXRWYWx1ZShudWxsLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgIFxuICAgICAgICAvLyBUaGVuIHJlc3RvcmUgaXQgdG8gdHJpZ2dlciB0aGUgZmllbGQgdHlwZSByZWJ1aWxkXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGF0dHJDdHJsLnNldFZhbHVlKGNsb25lZE1vZGVsLmF0dHJpYnV0ZSwgeyBlbWl0RXZlbnQ6IHRydWUgfSk7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gRW5zdXJlIHRoZSBjb3BpZWQgdmFsdWUgaXMgc3RpbGwgYXZhaWxhYmxlIGFmdGVyIHRoZSByZWJ1aWxkXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAoY29waWVkVmFsdWUgIT09IHVuZGVmaW5lZCAmJiAhbmV3Um93Rm9ybS52YWx1ZS5fY29waWVkVmFsdWUpIHtcbiAgICAgICAgICAgICAgLy8gUmUtYWRkIHRoZSBjb3BpZWQgdmFsdWUgaWYgaXQgd2FzIGxvc3QgZHVyaW5nIHJlYnVpbGRcbiAgICAgICAgICAgICAgbmV3Um93Rm9ybS5wYXRjaFZhbHVlKHsgX2NvcGllZFZhbHVlOiBjb3BpZWRWYWx1ZSB9KTtcbiAgICAgICAgICAgICAgZmlsdGVyVmFsdWVDdHJsLnNldFZhbHVlKGNvcGllZFZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCA1MCk7XG4gICAgICAgIH0sIDEwKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBcbiAgcmVzZXQoKSB7XG4gICAgdGhpcy5maWVsZC5maWVsZEdyb3VwLnNwbGljZSgwLCB0aGlzLmZpZWxkLmZpZWxkR3JvdXAubGVuZ3RoKTsgLy8gY2xlYXJcbiAgICB0aGlzLmFkZCgpOyAvLyBzdGFydCBmcmVzaCB3aXRoIG9uZSByb3dcbiAgfVxuXG59XG4iLCI8ZGl2IGNsYXNzPVwic2EtcXVlcnktYnVpbGRlci1jb250YWluZXJcIj5cbiAgPGRpdiBjbGFzcz1cInF1ZXJ5LWJ1aWxkZXItYm9keVwiPlxuICAgIEBmb3Ioc3ViRmllbGQgb2YgZmllbGQuZmllbGRHcm91cDsgdHJhY2sgc3ViRmllbGQuaWQgfHwgJGluZGV4KSB7XG4gICAgICA8ZGl2IGNsYXNzPVwicm93IGFsaWduLWl0ZW1zLWJhc2VsaW5lIHF1ZXJ5LXJvd1wiIFtAcm93QW5pbWF0aW9uXT5cbiAgICAgICAgQGlmICgkaW5kZXggPT09IDApIHtcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIndoZXJlLXRleHQgZmxleC0xXCI+V2hlcmU8L3NwYW4+XG4gICAgICAgIH1cbiAgICAgICAgQGZvciAoaW5uZXJGaWVsZCBvZiBzdWJGaWVsZC5maWVsZEdyb3VwOyB0cmFjayBpbm5lckZpZWxkLmtleSB8fCAkaW5kZXgpIHtcbiAgICAgICAgICBAaWYoISFpbm5lckZpZWxkLnByb3BzWydoYXNEeW5hbWljVHlwZSddKXtcbiAgICAgICAgICAgIEBzd2l0Y2ggKGdldEZpbHRlclR5cGUoaW5uZXJGaWVsZCkpIHtcbiAgICAgICAgICAgICAgQGNhc2UgKCdTVFJJTkcnKSB7XG4gICAgICAgICAgICAgICAgPGZvcm1seS1maWVsZCBbZmllbGRdPVwiaW5uZXJGaWVsZFwiPjwvZm9ybWx5LWZpZWxkPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAY2FzZSAoJ05VTUJFUicpIHtcbiAgICAgICAgICAgICAgICA8Zm9ybWx5LWZpZWxkIFtmaWVsZF09XCJpbm5lckZpZWxkXCI+PC9mb3JtbHktZmllbGQ+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBjYXNlICgnQk9PTEVBTicpIHtcbiAgICAgICAgICAgICAgICAgIDxmb3JtbHktZmllbGQgW2ZpZWxkXT1cImlubmVyRmllbGRcIj48L2Zvcm1seS1maWVsZD5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBjYXNlICgnQ1VSUkVOQ1knKSB7XG4gICAgICAgICAgICAgICAgICAgIDxmb3JtbHktZmllbGQgW2ZpZWxkXT1cImlubmVyRmllbGRcIj48L2Zvcm1seS1maWVsZD5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBjYXNlICgnREFURScpIHtcblxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgQGNhc2UgKCdTRUxFQ1QnKSB7XG4gICAgICAgICAgICAgICAgICA8Zm9ybWx5LWZpZWxkIFtmaWVsZF09XCJjcmVhdGVGaWVsZChpbm5lckZpZWxkKVwiPjwvZm9ybWx5LWZpZWxkPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgQGRlZmF1bHQge1xuICAgICAgICAgICAgICAgICAgPGZvcm1seS1maWVsZCBbZmllbGRdPVwiY3JlYXRlRmllbGQoaW5uZXJGaWVsZClcIj48L2Zvcm1seS1maWVsZD5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9QGVsc2V7XG4gICAgICAgICAgICA8Zm9ybWx5LWZpZWxkXG4gICAgICAgICAgICBjbGFzcz1cImNvbFwiXG4gICAgICAgICAgICBbZmllbGRdPVwiaW5uZXJGaWVsZFwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDwvZm9ybWx5LWZpZWxkPlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBAaWYocHJvcHM/Llsnc2hvd0NvcHlCdXR0b24nXSl7XG4gICAgICAgIDxzYS1pY29uIGljb249XCJjb3B5T3V0bGluZWRcIiBjbGFzcz1cImNvcHktaWNvbiBwb2ludGVyXCIgKGNsaWNrKT1cImNvcHkoJGluZGV4KVwiPjwvc2EtaWNvbj5cbiAgICAgICAgfVxuICAgICAgICA8c2EtaWNvbiBpY29uPVwiZGVsZXRlSWNvblwiIGNsYXNzPVwiZGVsZXRlLWljb24gcG9pbnRlclwiIChjbGljayk9XCJyZW1vdmUoJGluZGV4KVwiPjwvc2EtaWNvbj5cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgXG4gICAgPCEtLSBCdXR0b25zIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJydWxlLWJ1dHRvbi1jb250YWluZXJcIj5cbiAgICAgIDxzYS1idXR0b24gaWNvbj1cImFkZFwiIGljb25Qb3NpdGlvbj1cImxlZnRcIiB0ZXh0PVwiQWRkIGZpbHRlclwiXG4gICAgICAob25DbGlja0V2ZW50KT1cImFkZCgpXCJcbiAgICAgIFtzdGF0ZV09XCJmaWVsZD8uZmllbGRHcm91cD8ubGVuZ3RoID09PSAocHJvcHM/LlsnbWF4Um93cyddIHx8IDUpID8gJ2Rpc2FibGVkJyA6ICdkZWZhdWx0J1wiXG4gICAgICB0eXBlPVwib3V0bGluZVwiIHNpemU9XCJtZWRpdW1cIj5cbiAgICAgIDwvc2EtYnV0dG9uPlxuICAgICAgPHNwYW4gY2xhc3M9XCJmaWx0ZXJzLWNvdW50XCI+KHt7ZmllbGQ/LmZpZWxkR3JvdXA/Lmxlbmd0aH19L3t7cHJvcHM/LlsnbWF4Um93cyddIHx8IDV9fSBmaWx0ZXJzKTwvc3Bhbj5cbiAgICAgIEBpZihwcm9wcz8uWydzaG93UmVzZXRCdXR0b24nXSl7XG4gICAgICA8c2EtYnV0dG9uIGljb25Qb3NpdGlvbj1cImxlZnRcIiB0ZXh0PVwiUmVzZXRcIlxuICAgICAgKG9uQ2xpY2tFdmVudCk9XCJyZXNldCgpXCJcbiAgICAgIHR5cGU9XCJwcmltYXJ5XCIgc2l6ZT1cIm1lZGl1bVwiPlxuICAgICAgPC9zYS1idXR0b24+XG4gICAgICB9XG4gICAgPC9kaXY+ICAgIFxuICAgIDwvZGl2PlxuPC9kaXY+Il19
|
|
185
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktYnVpbGRlci1mb3JtbHkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50LWxpYnJhcnkvc3JjL2xpYi9xdWVyeS1idWlsZGVyLWZvcm1seS9xdWVyeS1idWlsZGVyLWZvcm1seS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnQtbGlicmFyeS9zcmMvbGliL3F1ZXJ5LWJ1aWxkZXItZm9ybWx5L3F1ZXJ5LWJ1aWxkZXItZm9ybWx5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFFLGNBQWMsRUFBcUIsTUFBTSxrQkFBa0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2hELE9BQU8sRUFBYSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ25DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLE9BQU8sRUFBUyxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8s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QkFBeUIsY0FHdkIsSUFBSSxhQUNMLEVBQUUsY0FDRDt3QkFDVixPQUFPLENBQUMsY0FBYyxFQUFFOzRCQUN0QixVQUFVLENBQUMsUUFBUSxFQUFFO2dDQUNuQixLQUFLLENBQUM7b0NBQ0osT0FBTyxFQUFFLENBQUM7b0NBQ1YsU0FBUyxFQUFFLCtCQUErQjtvQ0FDMUMsTUFBTSxFQUFFLEtBQUs7b0NBQ2IsUUFBUSxFQUFFLFFBQVE7aUNBQ25CLENBQUM7Z0NBQ0YsT0FBTyxDQUFDLHNDQUFzQyxFQUFFLEtBQUssQ0FBQztvQ0FDcEQsT0FBTyxFQUFFLENBQUM7b0NBQ1YsU0FBUyxFQUFFLHdCQUF3QjtvQ0FDbkMsTUFBTSxFQUFFLEdBQUc7aUNBQ1osQ0FBQyxDQUFDOzZCQUNKLENBQUM7NEJBQ0YsVUFBVSxDQUFDLFFBQVEsRUFBRTtnQ0FDbkIsS0FBSyxDQUFDO29DQUNKLE9BQU8sRUFBRSxDQUFDO29DQUNWLFNBQVMsRUFBRSx3QkFBd0I7b0NBQ25DLE1BQU0sRUFBRSxHQUFHO2lDQUNaLENBQUM7Z0NBQ0YsT0FBTyxDQUFDLHNDQUFzQyxFQUFFLEtBQUssQ0FBQztvQ0FDcEQsT0FBTyxFQUFFLENBQUM7b0NBQ1YsU0FBUyxFQUFFLCtCQUErQjtvQ0FDMUMsTUFBTSxFQUFFLEtBQUs7b0NBQ2IsUUFBUSxFQUFFLFFBQVE7aUNBQ25CLENBQUMsQ0FBQzs2QkFDSixDQUFDO3lCQUNILENBQUM7cUJBQ0gsV0FDUTt3QkFDUCxZQUFZO3dCQUNaLG1CQUFtQjt3QkFDbkIsWUFBWTt3QkFDWixlQUFlO3dCQUNmLGFBQWE7d0JBQ2Isa0JBQWtCO3dCQUNsQixlQUFlO3dCQUNmLGVBQWU7d0JBQ2YsYUFBYTtxQkFDZCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZpZWxkQXJyYXlUeXBlLCBGb3JtbHlGaWVsZENvbmZpZyB9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nOyBcclxuaW1wb3J0IHsgRm9ybWx5TW9kdWxlIH0gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgZ2V0LCBrZXlzIH0gZnJvbSAnbG9kYXNoJztcclxuaW1wb3J0IHsgQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi4vYnV0dG9uL2J1dHRvbi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBJY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vaWNvbi9pY29uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xyXG5pbXBvcnQgeyBNYXRTZWxlY3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xyXG5pbXBvcnQgeyBNYXRPcHRpb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcclxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyB0cmlnZ2VyLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIGFuaW1hdGUsIHF1ZXJ5LCBzdGFnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzYS1xdWVyeS1idWlsZGVyLWZvcm1seScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3F1ZXJ5LWJ1aWxkZXItZm9ybWx5LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9xdWVyeS1idWlsZGVyLWZvcm1seS5jb21wb25lbnQuc2NzcyddLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgcHJvdmlkZXJzOiBbXSxcclxuICBhbmltYXRpb25zOiBbXHJcbiAgICB0cmlnZ2VyKCdyb3dBbmltYXRpb24nLCBbXHJcbiAgICAgIHRyYW5zaXRpb24oJzplbnRlcicsIFtcclxuICAgICAgICBzdHlsZSh7IFxyXG4gICAgICAgICAgb3BhY2l0eTogMCwgXHJcbiAgICAgICAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKC0xMHB4KSBzY2FsZSgwLjk1KScsXHJcbiAgICAgICAgICBoZWlnaHQ6ICcwcHgnLFxyXG4gICAgICAgICAgb3ZlcmZsb3c6ICdoaWRkZW4nXHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgYW5pbWF0ZSgnMzAwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpJywgc3R5bGUoeyBcclxuICAgICAgICAgIG9wYWNpdHk6IDEsIFxyXG4gICAgICAgICAgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgwKSBzY2FsZSgxKScsXHJcbiAgICAgICAgICBoZWlnaHQ6ICcqJ1xyXG4gICAgICAgIH0pKVxyXG4gICAgICBdKSxcclxuICAgICAgdHJhbnNpdGlvbignOmxlYXZlJywgW1xyXG4gICAgICAgIHN0eWxlKHsgXHJcbiAgICAgICAgICBvcGFjaXR5OiAxLCBcclxuICAgICAgICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoMCkgc2NhbGUoMSknLFxyXG4gICAgICAgICAgaGVpZ2h0OiAnKidcclxuICAgICAgICB9KSxcclxuICAgICAgICBhbmltYXRlKCcyNTBtcyBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSknLCBzdHlsZSh7IFxyXG4gICAgICAgICAgb3BhY2l0eTogMCwgXHJcbiAgICAgICAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKC0xMHB4KSBzY2FsZSgwLjk1KScsXHJcbiAgICAgICAgICBoZWlnaHQ6ICcwcHgnLFxyXG4gICAgICAgICAgb3ZlcmZsb3c6ICdoaWRkZW4nXHJcbiAgICAgICAgfSkpXHJcbiAgICAgIF0pXHJcbiAgICBdKVxyXG4gIF0sXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuICAgIEZvcm1seU1vZHVsZSxcclxuICAgIEJ1dHRvbkNvbXBvbmVudCxcclxuICAgIEljb25Db21wb25lbnQsXHJcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXHJcbiAgICBNYXRTZWxlY3RNb2R1bGUsXHJcbiAgICBNYXRPcHRpb25Nb2R1bGUsXHJcbiAgICBNYXRJY29uTW9kdWxlICAgIFxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFF1ZXJ5QnVpbGRlckZvcm1seUNvbXBvbmVudCBleHRlbmRzIEZpZWxkQXJyYXlUeXBlIGltcGxlbWVudHMgT25Jbml0IHtcclxuICBcclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIFxyXG4gICAgXHJcbiAgfVxyXG4gIFxyXG4gIGdldFJvd0NvbmRpdGlvbihpbmRleDogbnVtYmVyKTogJ2FuZCcgfCAnb3InIHtcclxuICAgICAgaWYgKGluZGV4ID09PSAwKSByZXR1cm4gJ2FuZCc7IFxyXG4gICAgICBcclxuICAgICAgY29uc3QgcnVsZUdyb3VwID0gdGhpcy5mb3JtQ29udHJvbC5hdChpbmRleCkgYXMgRm9ybUdyb3VwO1xyXG4gICAgICByZXR1cm4gcnVsZUdyb3VwLmdldCgnbG9naWNhbE9wZXJhdG9yJyk/LnZhbHVlIHx8ICdhbmQnO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAqIFNldHMgdGhlIGNvbmRpdGlvbiBmb3IgYSBzcGVjaWZpYyByb3dcclxuICAgKiBAcGFyYW0gaW5kZXggVGhlIGluZGV4IG9mIHRoZSByb3dcclxuICAgKiBAcGFyYW0gY29uZGl0aW9uIFRoZSBjb25kaXRpb24gdG8gc2V0IChhbmQvb3IpXHJcbiAgICovXHJcbiAgc2V0Um93Q29uZGl0aW9uKGluZGV4OiBudW1iZXIsIGNvbmRpdGlvbjogJ2FuZCcgfCAnb3InKTogdm9pZCB7XHJcbiAgICBpZiAoaW5kZXggPT09IDApIHJldHVybjsgLy8gRmlyc3Qgcm93IGRvZXNuJ3QgaGF2ZSBhIGxvZ2ljYWwgb3BlcmF0b3JcclxuICAgIFxyXG4gICAgY29uc3QgcnVsZUdyb3VwID0gdGhpcy5mb3JtQ29udHJvbC5hdChpbmRleCkgYXMgRm9ybUdyb3VwO1xyXG4gICAgcnVsZUdyb3VwLmdldCgnbG9naWNhbE9wZXJhdG9yJyk/LnNldFZhbHVlKGNvbmRpdGlvbik7XHJcbiAgfVxyXG5cclxuICBjb3B5UnVsZSgpOiB2b2lkIHtcclxuICAgIFxyXG4gIH1cclxuXHJcbiAgY3JlYXRlRmllbGQoZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnKTogRm9ybWx5RmllbGRDb25maWcge1xyXG4gICAgaWYoZmllbGQudHlwZSA9PT0gJ2R5bmFtaWMtdHlwZScgfHwgZmllbGQudHlwZSA9PT0gJycpIHtcclxuICAgICAgZmllbGQudHlwZSA9ICdzYS1pbnB1dCc7XHJcbiAgICAgIGZpZWxkLnByb3BzLnR5cGUgPSAndGV4dCc7XHJcbiAgICAgIGZpZWxkLnByb3BzLnBsYWNlaG9sZGVyID0gJ0VudGVyL1NlbGVjdCc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmllbGQ7XHJcbiAgfVxyXG5cclxuICBnZXRGaWx0ZXJUeXBlKHN1YkZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICBjb25zdCBwYXJlbnRWYWx1ZSA9IGdldChzdWJGaWVsZCwgJ2Zvcm1Db250cm9sLnBhcmVudC52YWx1ZScpO1xyXG4gICAgaWYgKCFwYXJlbnRWYWx1ZSkgcmV0dXJuIHVuZGVmaW5lZDtcclxuICBcclxuICAgIC8vIExvb2sgdGhyb3VnaCBhbGwga2V5cyBvZiB0aGUgcGFyZW50IHZhbHVlXHJcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKHBhcmVudFZhbHVlKSkge1xyXG4gICAgICBjb25zdCB2YWwgPSBwYXJlbnRWYWx1ZVtrZXldO1xyXG4gICAgICBpZiAodmFsICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnICYmICdmaWx0ZXJUeXBlJyBpbiB2YWwpIHtcclxuICAgICAgICByZXR1cm4gdmFsLmZpbHRlclR5cGU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICAvLyByZXNldCgpOiB2b2lkIHtcclxuICAvLyAgIHRoaXMuZm9ybUNvbnRyb2wucmVzZXQoKTtcclxuICAvLyB9XHJcblxyXG4gIC8qKlxyXG4gICAqIER1cGxpY2F0ZXMgdGhlIHJvdyBhdCB0aGUgZ2l2ZW4gaW5kZXguXHJcbiAgICogQSBkZWVw4oCTY2xvbmUgb2YgdGhhdCByb3figJlzIG1vZGVsIGlzIGluc2VydGVkIHJpZ2h0IGFmdGVyIHRoZSBvcmlnaW5hbCByb3cuXHJcbiAgICovXHJcbiAgY29weShpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBjb25zdCByb3dNb2RlbCA9IHRoaXMuZm9ybUNvbnRyb2wuYXQoaW5kZXgpPy52YWx1ZTtcclxuICAgIGlmICghcm93TW9kZWwpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBjbG9uZWRNb2RlbCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocm93TW9kZWwpKTtcclxuXHJcbiAgICAvLyBDYXJyeSB0aGUgdmFsdWUgb3ZlciB0byB0aGUgbmV3IHJvdyBzbyB0aGUgb25Jbml0IGhvb2sgY2FuIHJlc3RvcmUgaXQuXHJcbiAgICBpZiAoY2xvbmVkTW9kZWwuZmlsdGVyVmFsdWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBjbG9uZWRNb2RlbC5fY29waWVkVmFsdWUgPSBjbG9uZWRNb2RlbC5maWx0ZXJWYWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBJZiBjb3B5aW5nIHRoZSBmaXJzdCByb3cgKGluZGV4IDApLCB0aGUgbmV3IHJvdyAoaW5kZXggMSkgc2hvdWxkIGhhdmUgYSBsb2dpY2FsIG9wZXJhdG9yXHJcbiAgICAvLyBTZXQgZGVmYXVsdCBsb2dpY2FsIG9wZXJhdG9yIHRvICdhbmQnIGZvciB0aGUgbmV3IHJvd1xyXG4gICAgaWYgKGluZGV4ID09PSAwKSB7XHJcbiAgICAgIGNsb25lZE1vZGVsLmxvZ2ljYWxPcGVyYXRvciA9ICdhbmQnO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYWRkKGluZGV4ICsgMSwgY2xvbmVkTW9kZWwpO1xyXG5cclxuICAgIC8vIEZvcmNlIHJlYnVpbGQgb2YgdGhlIGZpbHRlclZhbHVlIGZpZWxkIGJ5IHRyaWdnZXJpbmcgYXR0cmlidXRlIGNoYW5nZVxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGNvbnN0IG5ld1Jvd0Zvcm0gPSB0aGlzLmZvcm1Db250cm9sLmF0KGluZGV4ICsgMSkgYXMgRm9ybUdyb3VwO1xyXG4gICAgICBjb25zdCBhdHRyQ3RybCA9IG5ld1Jvd0Zvcm0/LmdldCgnYXR0cmlidXRlJyk7XHJcbiAgICAgIGNvbnN0IGZpbHRlclZhbHVlQ3RybCA9IG5ld1Jvd0Zvcm0/LmdldCgnZmlsdGVyVmFsdWUnKTtcclxuICAgICAgXHJcbiAgICAgIGlmIChhdHRyQ3RybCAmJiBmaWx0ZXJWYWx1ZUN0cmwgJiYgY2xvbmVkTW9kZWwuYXR0cmlidXRlKSB7XHJcbiAgICAgICAgLy8gU3RvcmUgdGhlIGNvcGllZCB2YWx1ZSBpbiB0aGUgZm9ybSBtb2RlbCBiZWZvcmUgdHJpZ2dlcmluZyByZWJ1aWxkXHJcbiAgICAgICAgY29uc3QgY29waWVkVmFsdWUgPSBjbG9uZWRNb2RlbC5fY29waWVkVmFsdWU7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gVGVtcG9yYXJpbHkgY2xlYXIgdGhlIGF0dHJpYnV0ZSB0byBmb3JjZSBhIGNoYW5nZSBldmVudFxyXG4gICAgICAgIGF0dHJDdHJsLnNldFZhbHVlKG51bGwsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgICBcclxuICAgICAgICAvLyBUaGVuIHJlc3RvcmUgaXQgdG8gdHJpZ2dlciB0aGUgZmllbGQgdHlwZSByZWJ1aWxkXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICBhdHRyQ3RybC5zZXRWYWx1ZShjbG9uZWRNb2RlbC5hdHRyaWJ1dGUsIHsgZW1pdEV2ZW50OiB0cnVlIH0pO1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICAvLyBFbnN1cmUgdGhlIGNvcGllZCB2YWx1ZSBpcyBzdGlsbCBhdmFpbGFibGUgYWZ0ZXIgdGhlIHJlYnVpbGRcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoY29waWVkVmFsdWUgIT09IHVuZGVmaW5lZCAmJiAhbmV3Um93Rm9ybS52YWx1ZS5fY29waWVkVmFsdWUpIHtcclxuICAgICAgICAgICAgICAvLyBSZS1hZGQgdGhlIGNvcGllZCB2YWx1ZSBpZiBpdCB3YXMgbG9zdCBkdXJpbmcgcmVidWlsZFxyXG4gICAgICAgICAgICAgIG5ld1Jvd0Zvcm0ucGF0Y2hWYWx1ZSh7IF9jb3BpZWRWYWx1ZTogY29waWVkVmFsdWUgfSk7XHJcbiAgICAgICAgICAgICAgZmlsdGVyVmFsdWVDdHJsLnNldFZhbHVlKGNvcGllZFZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSwgNTApO1xyXG4gICAgICAgIH0sIDEwKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIFxyXG4gIHJlc2V0KCkge1xyXG4gICAgdGhpcy5maWVsZC5maWVsZEdyb3VwLnNwbGljZSgwLCB0aGlzLmZpZWxkLmZpZWxkR3JvdXAubGVuZ3RoKTsgLy8gY2xlYXJcclxuICAgIHRoaXMuYWRkKCk7IC8vIHN0YXJ0IGZyZXNoIHdpdGggb25lIHJvd1xyXG4gIH1cclxuXHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInNhLXF1ZXJ5LWJ1aWxkZXItY29udGFpbmVyXCI+XHJcbiAgPGRpdiBjbGFzcz1cInF1ZXJ5LWJ1aWxkZXItYm9keVwiPlxyXG4gICAgQGZvcihzdWJGaWVsZCBvZiBmaWVsZC5maWVsZEdyb3VwOyB0cmFjayBzdWJGaWVsZC5pZCB8fCAkaW5kZXgpIHtcclxuICAgICAgPGRpdiBjbGFzcz1cInJvdyBhbGlnbi1pdGVtcy1iYXNlbGluZSBxdWVyeS1yb3dcIiBbQHJvd0FuaW1hdGlvbl0+XHJcbiAgICAgICAgQGlmICgkaW5kZXggPT09IDApIHtcclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwid2hlcmUtdGV4dCBmbGV4LTFcIj5XaGVyZTwvc3Bhbj5cclxuICAgICAgICB9XHJcbiAgICAgICAgQGZvciAoaW5uZXJGaWVsZCBvZiBzdWJGaWVsZC5maWVsZEdyb3VwOyB0cmFjayBpbm5lckZpZWxkLmtleSB8fCAkaW5kZXgpIHtcclxuICAgICAgICAgIEBpZighIWlubmVyRmllbGQucHJvcHNbJ2hhc0R5bmFtaWNUeXBlJ10pe1xyXG4gICAgICAgICAgICBAc3dpdGNoIChnZXRGaWx0ZXJUeXBlKGlubmVyRmllbGQpKSB7XHJcbiAgICAgICAgICAgICAgQGNhc2UgKCdTVFJJTkcnKSB7XHJcbiAgICAgICAgICAgICAgICA8Zm9ybWx5LWZpZWxkIFtmaWVsZF09XCJpbm5lckZpZWxkXCI+PC9mb3JtbHktZmllbGQ+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBAY2FzZSAoJ05VTUJFUicpIHtcclxuICAgICAgICAgICAgICAgIDxmb3JtbHktZmllbGQgW2ZpZWxkXT1cImlubmVyRmllbGRcIj48L2Zvcm1seS1maWVsZD5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIEBjYXNlICgnQk9PTEVBTicpIHtcclxuICAgICAgICAgICAgICAgICAgPGZvcm1seS1maWVsZCBbZmllbGRdPVwiaW5uZXJGaWVsZFwiPjwvZm9ybWx5LWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIEBjYXNlICgnQ1VSUkVOQ1knKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgPGZvcm1seS1maWVsZCBbZmllbGRdPVwiaW5uZXJGaWVsZFwiPjwvZm9ybWx5LWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIEBjYXNlICgnREFURScpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgQGNhc2UgKCdTRUxFQ1QnKSB7XHJcbiAgICAgICAgICAgICAgICAgIDxmb3JtbHktZmllbGQgW2ZpZWxkXT1cImNyZWF0ZUZpZWxkKGlubmVyRmllbGQpXCI+PC9mb3JtbHktZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgQGRlZmF1bHQge1xyXG4gICAgICAgICAgICAgICAgICA8Zm9ybWx5LWZpZWxkIFtmaWVsZF09XCJjcmVhdGVGaWVsZChpbm5lckZpZWxkKVwiPjwvZm9ybWx5LWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1AZWxzZXtcclxuICAgICAgICAgICAgPGZvcm1seS1maWVsZFxyXG4gICAgICAgICAgICBjbGFzcz1cImNvbFwiXHJcbiAgICAgICAgICAgIFtmaWVsZF09XCJpbm5lckZpZWxkXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgIDwvZm9ybWx5LWZpZWxkPlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBAaWYocHJvcHM/Llsnc2hvd0NvcHlCdXR0b24nXSl7XHJcbiAgICAgICAgPHNhLWljb24gaWNvbj1cImNvcHlPdXRsaW5lZFwiIGNsYXNzPVwiY29weS1pY29uIHBvaW50ZXJcIiAoY2xpY2spPVwiY29weSgkaW5kZXgpXCI+PC9zYS1pY29uPlxyXG4gICAgICAgIH1cclxuICAgICAgICA8c2EtaWNvbiBpY29uPVwiZGVsZXRlSWNvblwiIGNsYXNzPVwiZGVsZXRlLWljb24gcG9pbnRlclwiIChjbGljayk9XCJyZW1vdmUoJGluZGV4KVwiPjwvc2EtaWNvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICB9XHJcbiAgXHJcbiAgICA8IS0tIEJ1dHRvbnMgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwicnVsZS1idXR0b24tY29udGFpbmVyXCI+XHJcbiAgICAgIDxzYS1idXR0b24gaWNvbj1cImFkZFwiIGljb25Qb3NpdGlvbj1cImxlZnRcIiB0ZXh0PVwiQWRkIGZpbHRlclwiXHJcbiAgICAgIChvbkNsaWNrRXZlbnQpPVwiYWRkKClcIlxyXG4gICAgICBbc3RhdGVdPVwiZmllbGQ/LmZpZWxkR3JvdXA/Lmxlbmd0aCA9PT0gKHByb3BzPy5bJ21heFJvd3MnXSB8fCA1KSA/ICdkaXNhYmxlZCcgOiAnZGVmYXVsdCdcIlxyXG4gICAgICB0eXBlPVwib3V0bGluZVwiIHNpemU9XCJtZWRpdW1cIj5cclxuICAgICAgPC9zYS1idXR0b24+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiZmlsdGVycy1jb3VudFwiPih7e2ZpZWxkPy5maWVsZEdyb3VwPy5sZW5ndGh9fS97e3Byb3BzPy5bJ21heFJvd3MnXSB8fCA1fX0gZmlsdGVycyk8L3NwYW4+XHJcbiAgICAgIEBpZihwcm9wcz8uWydzaG93UmVzZXRCdXR0b24nXSl7XHJcbiAgICAgIDxzYS1idXR0b24gaWNvblBvc2l0aW9uPVwibGVmdFwiIHRleHQ9XCJSZXNldFwiXHJcbiAgICAgIChvbkNsaWNrRXZlbnQpPVwicmVzZXQoKVwiXHJcbiAgICAgIHR5cGU9XCJwcmltYXJ5XCIgc2l6ZT1cIm1lZGl1bVwiPlxyXG4gICAgICA8L3NhLWJ1dHRvbj5cclxuICAgICAgfVxyXG4gICAgPC9kaXY+ICAgIFxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PiJdfQ==
|