ngx-wapp-components 1.7.2 → 1.7.4

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.
@@ -400,10 +400,10 @@ export class WFilterPanelComponent {
400
400
  }
401
401
  }
402
402
  WFilterPanelComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: WFilterPanelComponent, deps: [{ token: i1.FormBuilder }, { token: i2.ApiService }, { token: i3.SessionStorageService }], target: i0.ɵɵFactoryTarget.Component });
403
- WFilterPanelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: WFilterPanelComponent, selector: "w-filter-panel", inputs: { authorizationApiUrl: ["apiUrl", "authorizationApiUrl"], commonDataApiUrl: "commonDataApiUrl", segmentationApiUrl: "segmentationApiUrl", token: "token", commonDataToken: "commonDataToken", segmentationToken: "segmentationToken", filterId: "filterId", dataIsLoadingSearchButton: "dataIsLoadingSearchButton", tenantId: "tenantId", translationsObject: "translationsObject" }, outputs: { searchClicked: "searchClicked", clearClicked: "clearClicked", lastQuery: "lastQuery" }, ngImport: i0, template: "<!-- TODO: Intentar otra vez pasar los componentes a los de w- porque no se alinena y el w-edit-select no va bien en field. \r\n Ahora se conservan los de p-w con estilos. -->\r\n<div *ngIf=\"queryConfigReady\" class=\"w-filter-panel-styles\">\r\n <div *ngIf=\"!filterPanelObject.allowAdvancedSearch; else baiscAndAdvanced\">\r\n <div [ngClass]=\"{ 'w-filter-panel-container-advanced' : isAdvancedSearch, 'w-filter-panel-container-basic' : !isAdvancedSearch }\">\r\n <ng-container *ngTemplateOutlet=\"basic\"></ng-container>\r\n <div class=\"flex justify-content-end button-gap\">\r\n <w-button [label]=\"translationsObject.clearButtonLabel\" type=\"tertiary\" size=\"small\" (onClick)=\"onClearClicked()\"></w-button>\r\n <w-button [label]=\"translationsObject.searchButtonLabel\" size=\"small\" (onClick)=\"onSearchClicked()\"></w-button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <ng-template #baiscAndAdvanced>\r\n <div [ngClass]=\"{ 'w-filter-panel-container-advanced' : isAdvancedSearch, 'w-filter-panel-container-basic' : !isAdvancedSearch }\">\r\n <div *ngIf=\"!isAdvancedSearch; else advancedView\">\r\n <ng-container *ngTemplateOutlet=\"basic\"></ng-container>\r\n </div>\r\n <ng-template #advancedView>\r\n <ng-container *ngTemplateOutlet=\"advanced\"></ng-container>\r\n </ng-template>\r\n\r\n <div class=\"flex justify-content-end button-gap\" [class.pt-3]=\"isAdvancedSearch\">\r\n <w-button [label]=\"translationsObject.clearButtonLabel\" type=\"tertiary\" size=\"small\" (onClick)=\"onClearClicked()\"></w-button>\r\n <w-button [label]=\"translationsObject.searchButtonLabel\" size=\"small\" (onClick)=\"onSearchClicked()\" [loading]=\"dataIsLoadingSearchButton\"></w-button>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n\r\n <ng-template #basic>\r\n <div *ngIf=\"filterPanelObject.allowAdvancedSearch\" class=\"flex justify-content-end flex-wrap\">\r\n <w-button [label]=\"translationsObject.advancedSearchTabLabel\" type=\"text\" (onClick)=\"updateSearchType()\"></w-button>\r\n </div>\r\n <div class=\"w-filter-panel-basic query-builder-style fadein animation-duration-500\">\r\n <query-builder [formControl]='queryCtrl' [config]='basicQueryConfig' [allowRuleset]='filterPanelObject.allowRuleSet' [allowRuleset]=\"filterPanelObject.allowRuleSet\" [persistValueOnFieldChange]='persistValueOnFieldChange'>\r\n <ng-container *queryButtonGroup=\"let ruleset;\">\r\n </ng-container>\r\n\r\n <ng-container *queryRemoveButton=\"let rule; let removeRule=removeRule\">\r\n </ng-container>\r\n\r\n <ng-container *querySwitchGroup=\"let ruleset; let onChange=onChange\">\r\n </ng-container>\r\n\r\n <ng-container *queryEntity=\"let rule; let entities=entities; let onChange=onChange\">\r\n <p-dropdown [disabled]=\"true\" class=\" w-edit-select-small\" *ngIf=\"false\" appendTo=\"body\" [options]=\"entities\" [(ngModel)]=\"rule.entity\" optionLabel=\"name\" optionValue=\"value\" (ngModelChange)=\"onChange($event, rule)\"></p-dropdown>\r\n </ng-container>\r\n\r\n <ng-container *queryField=\"let rule; let fields=fields; let onChange=onChange; let getFields = getFields; let value=value; let name=name; let index=index\">\r\n <span appendTo=\"body\" class=\"w-4 text-left w-filter-panel-input-text-label\" [class.w-filter-panel-boolean-label-width]=\"fieldIsBoolean(rule.field, getFields(rule.entity))\" optionLabel=\"name\" optionValue=\"value\">{{ getQueryFieldName(rule.field, getFields(rule.entity))}}</span>\r\n </ng-container>\r\n\r\n <ng-container *queryOperator=\"let rule; let operators=operators; let onChange=onChange\">\r\n <span class=\"query-builder-operator-width\">\r\n <p-dropdown class=\" w-edit-select-small\" *ngIf=\"isAdvancedSearch\" appendTo=\"body\" [(ngModel)]=\"rule.operator\" [options]=\"operators\" (ngModelChange)=\"onChange(rule)\"></p-dropdown>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; type: qbDataTypeEnum.Boolean.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-operator-width\">\r\n <w-toggle-button size=\"small\" [(ngModel)]=\"rule.value\" onLabel=\"True\" offLabel=\"False\" (ngModelChange)=\"onChange()\"></w-toggle-button>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; type: qbDataTypeEnum.Datetime.toString(); let onChange=onChange\">\r\n <span class=\"w-filter-panel-basic-query-builder-input-width\">\r\n <w-edit-calendar appendTo=\"body\" size=\"small\" [showIcon]=\"false\" [(ngModel)]=\"rule.value\" (onChange)=\"onChange()\" [showTime]=\"true\" [showSeconds]=\"true\" [placeholder]=\"translationsObject.fieldsPlaceholders.datetime\" [displayInlineBlock]=\"true\"></w-edit-calendar>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Decimal.toString(); let onChange=onChange\">\r\n <span class=\"w-filter-panel-basic-query-builder-input-width\">\r\n <p-inputNumber inputStyleClass=\"flex flex-1\" styleClass=\"flex flex-1\" class=\" w-filter-panel-basic-query-builder-input-width w-edit-input-number-small w-edit-input-number-small-height\" [(ngModel)]=\"rule.value\" inputId=\"minmax\" inputId=\"minmax\" mode=\"decimal\" [minFractionDigits]=\"2\" [maxFractionDigits]=\"5\" [min]=\"0\" [max]=\"100\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.decimal\"> </p-inputNumber>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let options=options; type: qbDataTypeEnum.List.toString(); let onChange=onChange\">\r\n <span class=\"w-filter-panel-basic-query-builder-input-width\">\r\n <p-dropdown class=\" w-edit-select-small\" appendTo=\"body\" [options]=\"options\" [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" optionLabel=\"name\" optionValue=\"value\" [placeholder]=\"translationsObject.fieldsPlaceholders.list\"></p-dropdown>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Number.toString(); let onChange=onChange\">\r\n <p-inputNumber [useGrouping]=\"false\" inputStyleClass=\"flex flex-1\" styleClass=\"flex flex-1\" class=\" w-filter-panel-basic-query-builder-input-width w-edit-input-number-small w-edit-input-number-small-height\" [(ngModel)]=\"rule.value\" inputId=\"minmax\" inputId=\"minmax\" [min]=\"0\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.number\"> </p-inputNumber>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Text.toString(); let onChange=onChange\">\r\n <input class=\" w-filter-panel-basic-query-builder-input-width w-edit-input-text-small-height w-edit-input-text-small\" type=\"text\" pInputText [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.text\"/>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let options=options; type: qbDataTypeEnum.List.toString(); let onChange=onChange\">\r\n <span class=\"w-filter-panel-basic-query-builder-input-width\">\r\n <p-multiSelect [appendTo]=\"'body'\" [options]=\"options\" [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" optionLabel=\"name\" optionValue=\"value\" display=\"chip\" [placeholder]=\"translationsObject.fieldsPlaceholders.list\"></p-multiSelect>\r\n </span>\r\n </ng-container>\r\n <ng-container *queryInput=\"let rule; let options=options; type: qbDataTypeEnum.Address.toString(); let onChange=onChange\">\r\n <w-address-field [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" [operator]=\"rule.operator\" [segmentationApiUrl]=\"segmentationApiUrl\" [segmentationApiToken]=\"segmentationToken\"></w-address-field>\r\n </ng-container>\r\n </query-builder>\r\n </div>\r\n\r\n <ng-container *ngIf=\"!isAdvancedSearch && basicQuery.rules.length==0\" >\r\n <ng-container *ngTemplateOutlet=\"noQueryData\"></ng-container>\r\n </ng-container>\r\n\r\n </ng-template>\r\n\r\n <ng-template #advanced>\r\n <div [class.query-builder-style]=\"!filterPanelObject.allowRuleSet\" class=\"w-filter-panel-container fadein animation-duration-500\">\r\n <div *ngIf=\"filterPanelObject.allowRuleSet\" class=\"flex justify-content-end flex-wrap\">\r\n <w-button class=\"mb-2\" [label]=\"translationsObject.basicSearchTabLabel\" type=\"text\" (onClick)=\"updateSearchType()\"></w-button>\r\n </div>\r\n <query-builder [formControl]='advancedQueryCtrl' [config]='advancedQueryConfig' [allowRuleset]='filterPanelObject.allowRuleSet' [allowCollapse]='filterPanelObject.allowColapse' [allowRuleset]=\"filterPanelObject.allowRuleSet\" [persistValueOnFieldChange]='persistValueOnFieldChange'>\r\n <div *ngIf=\"filterPanelObject.allowRuleSet; else noRuleSet\">\r\n <ng-container *queryButtonGroup=\"let ruleset; let addRule=addRule; let addRuleSet=addRuleSet; let removeRuleSet=removeRuleSet\">\r\n <w-button class=\"mr-2\" [label]=\"translationsObject.advancedSearch.addRuleButtonLabel\" type=\"secondary\" size=\"small\" (onClick)=\"addRule()\"></w-button>\r\n <w-button class=\"mr-2\" [label]=\"translationsObject.advancedSearch.addRuleSetButtonLabel\" type=\"secondary\" icon=\"pi pi-plus\" size=\"small\" *ngIf=\"addRuleSet\" (onClick)=\"addRuleSet()\"></w-button>\r\n <w-button class=\"mr-2\" [label]=\"translationsObject.advancedSearch.removeRuleSetButtonLabel\" type=\"tertiary\" icon=\"pi pi-minus\" size=\"small\" *ngIf=\"removeRuleSet\" (onClick)=\"removeRuleSet()\"></w-button>\r\n </ng-container>\r\n </div>\r\n\r\n <ng-template #noRuleSet>\r\n <ng-container *queryButtonGroup=\"let ruleset; let addRule=addRule; let addRuleSet=addRuleSet; let removeRuleSet=removeRuleSet\">\r\n <div class=\"flex justify-content-end flex-wrap\">\r\n <w-button [label]=\"translationsObject.basicSearchTabLabel\" type=\"text\" (onClick)=\"updateSearchType()\"></w-button>\r\n </div>\r\n <span class=\"advanced-query-button-group gap-3\">\r\n <w-button [label]=\"translationsObject.advancedSearch.addRuleButtonLabel\" type=\"secondary\" size=\"small\" (onClick)=\"addRule()\"></w-button>\r\n <w-button [label]=\"translationsObject.advancedSearch.addRuleSetButtonLabel\" type=\"secondary\" icon=\"pi pi-plus\" size=\"small\" *ngIf=\"addRuleSet\" (onClick)=\"addRuleSet()\"></w-button>\r\n <w-button [label]=\"translationsObject.advancedSearch.removeRuleSetButtonLabel\" type=\"tertiary\" icon=\"pi pi-minus\" size=\"small\" *ngIf=\"removeRuleSet\" (onClick)=\"removeRuleSet()\"></w-button>\r\n </span>\r\n </ng-container>\r\n </ng-template>\r\n <ng-container *queryArrowIcon>\r\n <button pButton pRipple type=\"button\" icon=\"pi pi-angle-right\" class=\"p-button-rounded p-button-text\"></button>\r\n </ng-container>\r\n\r\n <ng-container *queryRemoveButton=\"let rule; let removeRule=removeRule\">\r\n <w-button class=\"\" label=\"\" size=\"small\" type=\"tertiary\" icon=\"pi pi-times\" (onClick)=\"removeRule(rule)\"></w-button>\r\n </ng-container>\r\n\r\n <ng-container *querySwitchGroup=\"let ruleset; let onChange=onChange\">\r\n <div *ngIf=\"ruleset\" class=\"w-filter-panel-switch-group-padding\">\r\n <w-select-button *ngIf=\"filterPanelObject.allowLogicalRule\" [stateOptions]=\"[{label: 'And', value: 'and'}, {label: 'Or', value: 'or'}]\"\r\n [(ngModel)]=\"ruleset.condition\"\r\n [size]=\"'small'\"\r\n (value)=\"ruleset.condition = $event\">\r\n </w-select-button>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *queryEntity=\"let rule; let entities=entities; let onChange=onChange\">\r\n <p-dropdown *ngIf=\"filterPanelObject.enityMode\" class=\"field-gap w-edit-select-small w-entity-dropdown\" appendTo=\"body\" [options]=\"entities\" [(ngModel)]=\"rule.entity\" optionLabel=\"name\" optionValue=\"value\" (ngModelChange)=\"onChange($event, rule)\"></p-dropdown>\r\n </ng-container>\r\n\r\n <ng-container *queryField=\"let rule; let fields=fields; let onChange=onChange; let getFields = getFields\">\r\n <span class=\"query-builder-field-width\">\r\n <p-dropdown class=\"field-gap w-edit-select-small\" appendTo=\"body\" [options]=\"getFields(rule.entity)\" [(ngModel)]=\"rule.field\" optionLabel=\"name\" optionValue=\"value\" (ngModelChange)=\"onChange($event, rule)\"></p-dropdown>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryOperator=\"let rule; let operators=operators; let onChange=onChange\">\r\n <span class=\"query-builder-operator-width\">\r\n <p-dropdown class=\"field-gap w-edit-select-small\" appendTo=\"body\" [(ngModel)]=\"rule.operator\" [options]=\"operators\" (ngModelChange)=\"onChange(rule)\"></p-dropdown>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; type: qbDataTypeEnum.Boolean.toString(); let onChange=onChange\">\r\n <w-toggle-button class=\"field-gap toggle-button-align\" size=\"small\" [(ngModel)]=\"rule.value\" onLabel=\"True\" offLabel=\"False\" (ngModelChange)=\"onChange()\"></w-toggle-button>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; type: qbDataTypeEnum.Datetime.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width\">\r\n <w-edit-calendar class=\"field-gap\" appendTo=\"body\" size=\"small\" [showIcon]=\"false\" [(ngModel)]=\"rule.value\" (onChange)=\"onChange()\" [showTime]=\"true\" [showSeconds]=\"true\" [placeholder]=\"translationsObject.fieldsPlaceholders.datetime\" [displayInlineBlock]=\"true\"></w-edit-calendar>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Decimal.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width\">\r\n <p-inputNumber inputStyleClass=\"flex flex-1\" styleClass=\"flex flex-1\" class=\"field-gap w-edit-input-number-small w-edit-input-number-small-height\" [(ngModel)]=\"rule.value\" inputId=\"minmax\" inputId=\"minmax\" mode=\"decimal\" [minFractionDigits]=\"2\" [maxFractionDigits]=\"5\" [min]=\"0\" [max]=\"100\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.decimal\"> </p-inputNumber>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let options=options; type: qbDataTypeEnum.List.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width\">\r\n <p-dropdown class=\"field-gap w-edit-select-small\" appendTo=\"body\" [options]=\"options\" [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" optionLabel=\"name\" optionValue=\"value\" [placeholder]=\"translationsObject.fieldsPlaceholders.list\"></p-dropdown>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let options=options; type: qbDataTypeEnum.List.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width field-gap\">\r\n <w-list-field [options]=\"options\" [(ngModel)]=\"rule.value\" [operator]=\"rule.operator\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.list\"></w-list-field>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Number.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width\">\r\n <p-inputNumber [useGrouping]=\"false\" inputStyleClass=\"flex flex-1\" styleClass=\"flex flex-1\" class=\"field-gap w-edit-input-number-small w-edit-input-number-small-height\" [(ngModel)]=\"rule.value\" inputId=\"minmax\" inputId=\"minmax\" [min]=\"0\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.number\"> </p-inputNumber>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Text.toString(); let onChange=onChange\">\r\n <input class=\"field-gap query-builder-input-width w-edit-input-text-small-height w-edit-input-text-small\" type=\"text\" pInputText [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.text\"/>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let options=options; type: qbDataTypeEnum.Address.toString(); let onChange=onChange\">\r\n <w-address-field [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" [operator]=\"rule.operator\" [segmentationApiUrl]=\"segmentationApiUrl\" [segmentationApiToken]=\"segmentationToken\" [selectPlaceholder]=\"translationsObject.fieldsPlaceholders.list\"></w-address-field>\r\n </ng-container>\r\n </query-builder>\r\n\r\n <ng-container *ngIf=\"isAdvancedSearch && advancedQuery.rules.length==0\" >\r\n <ng-container *ngTemplateOutlet=\"noQueryData\"></ng-container>\r\n </ng-container>\r\n\r\n <!-- Grouped filter -->\r\n <div *ngIf=\"filterPanelObject.allowGrouped\">\r\n <div class=\"py-5\">\r\n <w-view-card-title-text [cardTitle]=\"translationsObject.groupedFilterTitle\"></w-view-card-title-text>\r\n </div>\r\n\r\n <query-builder [formControl]='groupedQueryCtrl' [config]='advancedQueryConfig' [allowRuleset]='filterPanelObject.allowRuleSet' [allowCollapse]='filterPanelObject.allowColapse' [allowRuleset]=\"filterPanelObject.allowRuleSet\" [persistValueOnFieldChange]='persistValueOnFieldChange'>\r\n <ng-container *queryButtonGroup=\"let ruleset; let addRule=addRule; let addRuleSet=addRuleSet; let removeRuleSet=removeRuleSet\">\r\n <div class=\"flex gap-3 mb-3\">\r\n <w-button [label]=\"translationsObject.advancedSearch.addRuleButtonLabel\" type=\"secondary\" size=\"small\" (onClick)=\"addRule()\"></w-button>\r\n <w-button [label]=\"translationsObject.advancedSearch.addRuleSetButtonLabel\" type=\"secondary\" icon=\"pi pi-plus\" size=\"small\" *ngIf=\"addRuleSet\" (onClick)=\"addRuleSet()\"></w-button>\r\n <w-button [label]=\"translationsObject.advancedSearch.removeRuleSetButtonLabel\" type=\"tertiary\" icon=\"pi pi-minus\" size=\"small\" *ngIf=\"removeRuleSet\" (onClick)=\"removeRuleSet()\"></w-button>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *queryArrowIcon>\r\n <button pButton pRipple type=\"button\" icon=\"pi pi-angle-right\" class=\"p-button-rounded p-button-text\"></button>\r\n </ng-container>\r\n\r\n <ng-container *queryRemoveButton=\"let rule; let removeRule=removeRule\">\r\n <w-button class=\"\" label=\"\" size=\"small\" type=\"tertiary\" icon=\"pi pi-times\" (onClick)=\"removeRule(rule)\"></w-button>\r\n </ng-container>\r\n\r\n <ng-container *querySwitchGroup=\"let ruleset; let onChange=onChange\">\r\n <div *ngIf=\"ruleset\">\r\n <w-select-button *ngIf=\"filterPanelObject.allowLogicalRule\" [stateOptions]=\"[{label: 'And', value: 'and'}, {label: 'Or', value: 'or'}]\"\r\n [(ngModel)]=\"ruleset.condition\"\r\n [size]=\"'small'\"\r\n (value)=\"ruleset.condition = $event\">\r\n </w-select-button>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *queryEntity=\"let rule; let entities=entities; let onChange=onChange\">\r\n <p-dropdown class=\"mr-3 w-edit-select-small\" *ngIf=\"filterPanelObject.enityMode\" appendTo=\"body\" [options]=\"entities\" [(ngModel)]=\"rule.entity\" optionLabel=\"name\" optionValue=\"value\" (ngModelChange)=\"onChange($event, rule)\"></p-dropdown>\r\n </ng-container>\r\n\r\n <ng-container *queryField=\"let rule; let fields=fields; let onChange=onChange; let getFields = getFields\">\r\n <span class=\"query-builder-field-width\">\r\n <p-dropdown class=\"mr-3 w-edit-select-small\" appendTo=\"body\" [options]=\"getFields(rule.entity)\" [(ngModel)]=\"rule.field\" optionLabel=\"name\" optionValue=\"value\" (ngModelChange)=\"onChange($event, rule)\"></p-dropdown>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryOperator=\"let rule; let operators=operators; let onChange=onChange\">\r\n <span class=\"query-builder-operator-width\">\r\n <p-dropdown class=\"mr-3 w-edit-select-small\" appendTo=\"body\" [(ngModel)]=\"rule.operator\" [options]=\"operators\" (ngModelChange)=\"onChange(rule)\"></p-dropdown>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; type: qbDataTypeEnum.Boolean.toString(); let onChange=onChange\">\r\n <w-toggle-button class=\"mr-3\" size=\"small\" [(ngModel)]=\"rule.value\" onLabel=\"True\" offLabel=\"False\" (ngModelChange)=\"onChange()\"></w-toggle-button>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; type: qbDataTypeEnum.Datetime.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width\">\r\n <w-edit-calendar class=\"field-gap\" appendTo=\"body\" size=\"small\" [showIcon]=\"false\" [(ngModel)]=\"rule.value\" (onChange)=\"onChange()\" [showTime]=\"true\" [showSeconds]=\"true\" [placeholder]=\"translationsObject.fieldsPlaceholders.datetime\" [displayInlineBlock]=\"true\"></w-edit-calendar>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Decimal.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width\">\r\n <p-inputNumber class=\"mr-3\" [(ngModel)]=\"rule.value\" inputId=\"minmax\" inputId=\"minmax\" mode=\"decimal\" [minFractionDigits]=\"2\" [maxFractionDigits]=\"5\" [min]=\"0\" [max]=\"100\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.decimal\"> </p-inputNumber>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let options=options; type: qbDataTypeEnum.List.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width\">\r\n <w-list-field [options]=\"options\" [(ngModel)]=\"rule.value\" [operator]=\"rule.operator\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.list\"></w-list-field>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Number.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width\">\r\n <p-inputNumber [useGrouping]=\"false\" inputStyleClass=\"flex flex-1\" styleClass=\"flex flex-1\" class=\"field-gap w-edit-input-number-small w-edit-input-number-small-height\" [(ngModel)]=\"rule.value\" inputId=\"minmax\" inputId=\"minmax\" [min]=\"0\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.number\"> </p-inputNumber>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Text.toString(); let onChange=onChange\">\r\n <input class=\"mr-3 query-builder-input-width w-edit-input-text-small-height wapp-input\" type=\"text\" pInputText [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.text\"/>\r\n </ng-container>\r\n\r\n </query-builder>\r\n\r\n <ng-container *ngIf=\"isAdvancedSearch && groupedQuery.rules.length==0\" >\r\n <ng-container *ngTemplateOutlet=\"noQueryData\"></ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template #noQueryData>\r\n <div class=\"flex justify-content-center flex-wrap card-container surface-50 mb-3\">\r\n <div class=\"flex align-items-center justify-content-center w-full h-4rem text-gray-900 border-round m-2\">\r\n {{translationsObject.noRulesLabel}}\r\n </div>\r\n </div>\r\n </ng-template>\r\n", styles: [".heading1{font-size:2.6666666667rem;line-height:3rem;font-weight:700}.heading2{font-size:2.3333333333rem;line-height:2.6666666667rem;font-weight:700}.heading3{font-size:2rem;line-height:2.3333333333rem;font-weight:700}.heading4{font-size:1.6666666667rem;line-height:2rem;font-weight:400}.heading5{font-size:1.5rem;line-height:1.8333333333rem;font-weight:600}.heading6{font-size:1.3333333333rem;line-height:1.6666666667rem;font-weight:400}.subtitle1,.w-tab-text,.w-panel-title-text,.w-sidebar-title-text{font-size:1.1666666667rem;line-height:1.3333333333rem;font-weight:600}.subtitle2,.w-table-th-text,.w-panel-subtitle-text,.w-input-small-label-text-typography,.w-input-small-label-text,.w-filter-panel-input-text-label,.w-input-small-label-disabled,.w-view-small-label-text-typography,.w-view-small-label-text,.w-button-small-text-label-text-typography,.w-button-small-text-label-text{font-size:1rem;line-height:1.3333333333rem;font-weight:600}.body,.w-table-td-text,.w-chip-text,.w-panel-content,.w-input-small-select-options-text,.w-input-small-placeholder-text-typography,.w-input-small-placeholder-text-disabled,.w-input-small-placeholder-text,:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input,:host ::ng-deep .w-edit-select-small .p-inputtext,::ng-deep .w-edit-input-text-small.p-inputtext,.w-view-small-value-text-typography,.w-view-small-value-text,.w-button-small-label-text-typography,.w-button-small-tertiary-label-text{font-size:1rem;line-height:1.3333333333rem;font-weight:400}.caption,.w-input-error-alert-text,.w-input-warning-alert-text,.w-input-success-alert-text{font-size:.6666666667rem;line-height:1rem;font-weight:400}.text846{color:#2e3134}.text700{color:#5f6368}.text500{color:#9aa0a6}.textWhite{color:#fff}.spacingXXS{padding:4px}.spacingXSM{padding:6px}.spacingXS{padding:8px}.spacingS{padding:12px}.spacingM{padding:16px}.spacingL{padding:20px}.spacingXL{padding:24px}.spacingXXL{padding:28px}.spacingXXXL{padding:32px}.focus,:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input:focus,:host ::ng-deep .w-edit-select-small .p-dropdown:not(.p-disabled).p-focus,.w-edit-input-text-small:focus{box-shadow:0 0 8px #00a6e980}.hover,:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input:hover,.w-edit-input-text-small:hover{border-radius:8px;border:1px solid #00b2eb}.input-generic-valid{border-radius:8px;border:1px solid #B3FFD3}.input-generic-valid-focus{border-radius:8px;border:1px solid #B3FFD3!important;box-shadow:0 0 8px #46ff9b80!important;padding-left:16px}.input-generic-warning{border-radius:8px;border:1px solid #FFECB8!important}.input-generic-warning-focus{border-radius:8px;border:1px solid #FFECB8!important;box-shadow:0 0 8px #ffcd4680!important;padding-left:16px}.input-generic-error-focus{border-radius:8px;border:1px solid #FFBDBD!important;box-shadow:0 0 8px #ff555580!important;padding-left:16px}.input-generic-error{border-radius:8px;border:1px solid #FFBDBD}.toggle-small-typography{font-size:12px;line-height:16px;font-weight:600}.w-button-small-tertiary-label-text,.w-button-small-text-label-text{color:#2e3134}.w-button-small-icon-text{font-size:12px}.w-control-button-small-label-text{font-size:12px;font-weight:600;line-height:16px}.w-control-button-x-small-icon-text{font-size:10px;font-weight:700}.w-control-button-small-icon-text{font-size:8px;font-weight:700}.w-button-medium-label-text-typography,.w-button-medium-tertiary-label-text{font-size:16px;font-weight:400;line-height:16px}.w-button-medium-tertiary-label-text{color:#2e3134}.w-button-medium-icon-text{font-size:16px}.w-control-button-medium-label-text{font-size:14px;font-weight:600;line-height:16px}.w-control-button-medium-icon-text{font-size:12px;font-weight:700}.w-button-large-label-text-typography,.w-button-large-tertiary-label-text{font-size:20px;font-weight:400;line-height:24px}.w-button-large-tertiary-label-text{color:#2e3134}.w-button-x-small-label-text{font-size:10px;font-weight:600;line-height:10px}.w-button-small-only-label-text{font-size:12px;font-weight:600;line-height:16px}.w-button-large-icon-text{font-size:24px}.w-view-small-label-text,.w-view-small-value-text{color:#2e3134}.w-input-no-label-height{height:36px}.w-input-disabled,:host ::ng-deep .w-edit-select-small .p-disabled{background-color:#f1f3f4;border-color:#e8eaed;opacity:1}.w-input-small-label-text,.w-filter-panel-input-text-label,.w-input-small-label-disabled{color:#2e3134}.w-input-small-label-disabled{color:#9aa0a6}.w-input-small-label-text-content{padding:12px 8px 8px 0;margin:0}.w-input-small-placeholder-text,:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input,:host ::ng-deep .w-edit-select-small .p-inputtext,::ng-deep .w-edit-input-text-small.p-inputtext{color:#2e3134}.w-input-small-placeholder-text-only-color,:host ::ng-deep .w-edit-select-small .p-dropdown .p-placeholder{color:#2e3134}.w-input-small-placeholder-text-disabled{color:#5f6368}.w-input-small-placeholder-text-disabled-only-color,:host ::ng-deep .w-edit-select-small .p-disabled .p-inputtext{color:#5f6368}.w-input-small-text-icon,.w-input-small-select-options-text{color:#2e3134}.w-input-medium-label-text-typography,.w-input-medium-label-text,.w-input-medium-label-disabled{font-size:14px;font-weight:600;line-height:16px}.w-input-medium-label-text,.w-input-medium-label-disabled{color:#2e3134}.w-input-medium-label-disabled{color:#9aa0a6}.w-input-medium-placeholder-text-typography,.w-input-medium-placeholder-text-disabled,.w-input-medium-placeholder-text{font-size:16px;font-weight:400;line-height:24px}.w-input-medium-placeholder-text,.w-input-medium-placeholder-text-only-color{color:#2e3134}.w-input-medium-placeholder-text-disabled,.w-input-medium-placeholder-text-disabled-only-color{color:#5f6368}.w-input-medium-text-icon{color:#2e3134}.w-input-medium-select-options-text,:host ::ng-deep .w-edit-select-small .p-dropdown-panel .p-dropdown-items .p-dropdown-item{font-size:16px;font-weight:400;line-height:24px;color:#2e3134}.w-input-success-alert-text{color:#00db5d;padding:8px 8px 0;margin-top:0}.w-input-warning-alert-text{color:#eeae00;padding:8px 8px 0;margin-top:0}.w-input-error-alert-text{color:#e50000;padding:8px 8px 0;margin-top:0}.w-input-alert-message-height{height:32px}.w-sidebar-title-text,.w-panel-title-text,.w-panel-subtitle-text{color:#2e3134}.w-panel-content{color:#5f6368}.w-tab-text,.w-chip-text{color:#2e3134}.w-badge-text{font-size:8px;font-weight:700;line-height:8px}.w-table-th-text{color:#2e3134}.w-table-td-text{color:#5f6368}.w-filter-panel-container-basic,.w-filter-panel-container-advanced{padding:16px 20px 20px;background-color:#fff;border-radius:8px;box-shadow:0 4px 8px #0000001a;margin-bottom:0}::ng-deep .w-filter-panel-basic .q-row{margin-top:6px!important;margin-bottom:6px!important;padding:0 0 0 6px!important}::ng-deep .w-filter-panel-container-advanced .q-row{padding:0!important;margin-bottom:8px!important}.field-gap{margin-right:8px}.button-gap{gap:16px}.w-filter-panel-switch-group-padding{padding-bottom:16px}::ng-deep .query-builder-style ul li{border:none!important;background:transparent!important;padding-left:0!important}::ng-deep .query-builder-style .q-connector:before{content:none!important}::ng-deep .query-builder-style .q-connector:after{border-width:0px!important}::ng-deep .query-builder-style .q-tree{padding:0!important}::ng-deep .query-builder-field-width .p-dropdown{width:20%}::ng-deep .query-builder-operator-width .p-dropdown{width:10%}.query-builder-input-width{width:40%}::ng-deep .query-builder-input-width .p-dropdown{width:40%}::ng-deep .query-builder-input-width .p-calendar{width:40%}::ng-deep .query-builder-input-width .w-edit-calendar-medium-display-block{width:40%}.w-filter-panel-container.query-builder-style{display:flex;flex-direction:column;justify-content:space-between;position:relative}.advanced-query-button-group{position:absolute;bottom:0;left:0;margin-bottom:-46px}.w-edit-input-text-small-height{height:32px}::ng-deep .w-edit-input-text-small.p-inputtext{border-radius:8px;border-width:1px;padding:7px 11px;border:1px solid #e8eaed}.w-edit-input-text-small:focus{border-radius:8px;border:1px solid #d6f2ff;padding-left:11px}:host ::ng-deep .w-edit-calendar-display-blok{width:40%}:host ::ng-deep .w-edit-select-small .p-dropdown{height:32px;border-width:1px;border-radius:8px;border-color:#e8eaed}:host ::ng-deep .w-edit-select-small .p-inputtext{padding:0 0 0 12px;align-self:center}:host ::ng-deep .w-edit-select-small .p-dropdown:not(.p-disabled):hover{border:1px solid #00b2eb}:host ::ng-deep .w-edit-select-small .p-dropdown:not(.p-disabled).p-focus{border:1px solid #d6f2ff}:host ::ng-deep .w-edit-select-small .p-dropdown .p-dropdown-trigger{width:auto;height:28px;padding-right:12px}:host ::ng-deep .w-entity-dropdown .p-dropdown .p-dropdown-trigger{width:auto;height:28px;padding-right:12px;padding-left:12px}:host ::ng-deep .w-edit-select-small .p-dropdown-panel{padding:8px}:host ::ng-deep .w-edit-select-small .p-dropdown-panel .p-dropdown-items{padding:0}:host ::ng-deep .w-edit-select-small .p-dropdown-panel .p-dropdown-items .p-dropdown-item{padding:8px;margin-bottom:4px}:host ::ng-deep .w-edit-select-small .p-dropdown-panel .p-dropdown-items .p-dropdown-item:hover{background:#d6f2ff;border-radius:8px}:host ::ng-deep .w-edit-select-small .p-dropdown-panel .p-dropdown-items .p-dropdown-item.p-highlight{background:#d6f2ff;border-radius:8px;color:#000}::ng-deep .select-disabled .p-dropdown .p-dropdown-trigger{display:none}:host ::ng-deep .w-edit-input-number-small-height .p-inputnumber .p-inputnumber-input{height:32px!important}.w-filter-panel-container-advanced .w-edit-input-number-small{width:40%!important}:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input{border-radius:8px;border-width:1px;padding:7px 11px!important;width:100%;border:1px solid #e8eaed}::-webkit-input-placeholder{color:#5f6368}::-moz-placeholder{color:#5f6368}:-ms-input-placeholder{color:#5f6368}:-moz-placeholder{color:#5f6368}:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input:focus{border-radius:8px;border:1px solid #d6f2ff;padding-left:11px}:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input::-moz-placeholder{color:#5f6368}:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input::-webkit-input-placeholder{color:#5f6368}:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input:-ms-input-placeholder{color:#5f6368}:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input:-moz-placeholder{color:#5f6368}:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input:disabled{background-color:#f1f3f4;border-color:#e8eaed;color:#5f6368;opacity:1}.w-filter-panel-input-text-label{padding:8px 6px 12px;margin:0}.w-filter-panel-basic-query-builder-input-width{width:100%!important}::ng-deep .w-filter-panel-basic-query-builder-input-width .p-dropdown{width:100%!important}::ng-deep .w-filter-panel-basic .q-tree-container{margin:8px 0 16px}::ng-deep .w-filter-panel-basic .q-row:not(:nth-child(3n)){display:flex!important;width:33.3333%;padding-right:64px!important}::ng-deep .w-filter-panel-basic .q-row:nth-child(3n){display:flex!important;width:33.3333%;padding-right:0!important}::ng-deep .w-filter-panel-basic .q-tree{margin:0!important;display:flex;flex-wrap:wrap;justify-content:flex-start}.w-filter-panel-boolean-label-width{width:25.5%!important}::ng-deep .q-rule{border:none!important}\n"], dependencies: [{ kind: "directive", type: i4.InputText, selector: "[pInputText]" }, { 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.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i6.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { kind: "directive", type: i7.Ripple, selector: "[pRipple]" }, { kind: "component", type: i8.Dropdown, selector: "p-dropdown", inputs: ["scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "filterPlaceholder", "filterLocale", "inputId", "selectId", "dataKey", "filterBy", "autofocus", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "overlayDirection", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "options", "filterValue"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "component", type: i9.MultiSelect, selector: "p-multiSelect", inputs: ["style", "styleClass", "panelStyle", "panelStyleClass", "inputId", "disabled", "readonly", "group", "filter", "filterPlaceHolder", "filterLocale", "overlayVisible", "tabindex", "appendTo", "dataKey", "name", "label", "ariaLabelledBy", "displaySelectedLabel", "maxSelectedLabels", "selectionLimit", "selectedItemsLabel", "showToggleAll", "emptyFilterMessage", "emptyMessage", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "showHeader", "filterBy", "scrollHeight", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "display", "autocomplete", "showClear", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "defaultLabel", "placeholder", "options", "filterValue", "itemSize"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onClear", "onPanelShow", "onPanelHide", "onLazyLoad", "onRemove"] }, { kind: "component", type: i10.InputNumber, selector: "p-inputNumber", inputs: ["showButtons", "format", "buttonLayout", "inputId", "styleClass", "style", "placeholder", "size", "maxlength", "tabindex", "title", "ariaLabel", "ariaRequired", "name", "required", "autocomplete", "min", "max", "incrementButtonClass", "decrementButtonClass", "incrementButtonIcon", "decrementButtonIcon", "readonly", "step", "allowEmpty", "locale", "localeMatcher", "mode", "currency", "currencyDisplay", "useGrouping", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "inputStyle", "inputStyleClass", "showClear", "disabled"], outputs: ["onInput", "onFocus", "onBlur", "onKeyDown", "onClear"] }, { kind: "component", type: i11.QueryBuilderComponent, selector: "query-builder", inputs: ["data", "allowRuleset", "allowCollapse", "emptyMessage", "config", "persistValueOnFieldChange", "value", "disabled", "classNames", "operatorMap", "parentValue", "parentArrowIconTemplate", "parentInputTemplates", "parentOperatorTemplate", "parentFieldTemplate", "parentEntityTemplate", "parentSwitchGroupTemplate", "parentButtonGroupTemplate", "parentRemoveButtonTemplate", "parentEmptyWarningTemplate", "parentChangeCallback", "parentTouchedCallback"] }, { kind: "directive", type: i11.QueryInputDirective, selector: "[queryInput]", inputs: ["queryInputType"] }, { kind: "directive", type: i11.QueryOperatorDirective, selector: "[queryOperator]" }, { kind: "directive", type: i11.QueryFieldDirective, selector: "[queryField]" }, { kind: "directive", type: i11.QueryEntityDirective, selector: "[queryEntity]" }, { kind: "directive", type: i11.QueryButtonGroupDirective, selector: "[queryButtonGroup]" }, { kind: "directive", type: i11.QuerySwitchGroupDirective, selector: "[querySwitchGroup]" }, { kind: "directive", type: i11.QueryRemoveButtonDirective, selector: "[queryRemoveButton]" }, { kind: "directive", type: i11.QueryArrowIconDirective, selector: "[queryArrowIcon]" }, { kind: "component", type: i12.WButtonComponent, selector: "w-button", inputs: ["type", "label", "size", "icon", "tooltipPosition", "tooltip", "disabled", "loading"], outputs: ["onClick"] }, { kind: "component", type: i13.WListFieldComponent, selector: "w-list-field", inputs: ["options", "operator", "placeholder", "onlyDropdown"] }, { kind: "component", type: i14.WViewCardTitleTextComponent, selector: "w-view-card-title-text", inputs: ["cardTitle"] }, { kind: "component", type: i15.WToggleButtonComponent, selector: "w-toggle-button", inputs: ["onLabel", "offLabel", "size", "onIcon", "offIcon", "tooltipPosition", "tooltip", "disabled", "formControl"], outputs: ["onChange"] }, { kind: "component", type: i16.WSelectButtonComponent, selector: "w-select-button", inputs: ["stateOptions", "size", "tooltipPosition", "tooltip", "disabled", "formControl"], outputs: ["onChange"] }, { kind: "component", type: i17.WEditCalendarComponent, selector: "w-edit-calendar", inputs: ["label", "showTime", "showSeconds", "timeOnly", "showIcon", "placeholder", "minDate", "maxDate", "disabled", "size", "formControl", "displayInlineBlock", "required", "requiredErrorDescription"], outputs: ["onChange"] }, { kind: "component", type: i18.WAddressFieldComponent, selector: "w-address-field", inputs: ["operator", "selectPlaceholder", "segmentationApiUrl", "segmentationApiToken"] }] });
403
+ WFilterPanelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: WFilterPanelComponent, selector: "w-filter-panel", inputs: { authorizationApiUrl: ["apiUrl", "authorizationApiUrl"], commonDataApiUrl: "commonDataApiUrl", segmentationApiUrl: "segmentationApiUrl", token: "token", commonDataToken: "commonDataToken", segmentationToken: "segmentationToken", filterId: "filterId", dataIsLoadingSearchButton: "dataIsLoadingSearchButton", tenantId: "tenantId", translationsObject: "translationsObject" }, outputs: { searchClicked: "searchClicked", clearClicked: "clearClicked", lastQuery: "lastQuery" }, ngImport: i0, template: "<!-- TODO: Intentar otra vez pasar los componentes a los de w- porque no se alinena y el w-edit-select no va bien en field. \r\n Ahora se conservan los de p-w con estilos. -->\r\n<div *ngIf=\"queryConfigReady\" class=\"w-filter-panel-styles\">\r\n <div *ngIf=\"!filterPanelObject.allowAdvancedSearch; else baiscAndAdvanced\">\r\n <div [ngClass]=\"{ 'w-filter-panel-container-advanced' : isAdvancedSearch, 'w-filter-panel-container-basic' : !isAdvancedSearch }\">\r\n <ng-container *ngTemplateOutlet=\"basic\"></ng-container>\r\n <div class=\"flex justify-content-end button-gap\">\r\n <w-button [label]=\"translationsObject.clearButtonLabel\" type=\"tertiary\" size=\"small\" (onClick)=\"onClearClicked()\"></w-button>\r\n <w-button [label]=\"translationsObject.searchButtonLabel\" size=\"small\" (onClick)=\"onSearchClicked()\"></w-button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <ng-template #baiscAndAdvanced>\r\n <div [ngClass]=\"{ 'w-filter-panel-container-advanced' : isAdvancedSearch, 'w-filter-panel-container-basic' : !isAdvancedSearch }\">\r\n <div *ngIf=\"!isAdvancedSearch; else advancedView\">\r\n <ng-container *ngTemplateOutlet=\"basic\"></ng-container>\r\n </div>\r\n <ng-template #advancedView>\r\n <ng-container *ngTemplateOutlet=\"advanced\"></ng-container>\r\n </ng-template>\r\n\r\n <div class=\"flex justify-content-end button-gap\" [class.pt-3]=\"isAdvancedSearch\">\r\n <w-button [label]=\"translationsObject.clearButtonLabel\" type=\"tertiary\" size=\"small\" (onClick)=\"onClearClicked()\"></w-button>\r\n <w-button [label]=\"translationsObject.searchButtonLabel\" size=\"small\" (onClick)=\"onSearchClicked()\" [loading]=\"dataIsLoadingSearchButton\"></w-button>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n\r\n <ng-template #basic>\r\n <div *ngIf=\"filterPanelObject.allowAdvancedSearch\" class=\"flex justify-content-end flex-wrap\">\r\n <w-button [label]=\"translationsObject.advancedSearchTabLabel\" type=\"text\" (onClick)=\"updateSearchType()\"></w-button>\r\n </div>\r\n <div class=\"w-filter-panel-basic query-builder-style fadein animation-duration-500\">\r\n <query-builder [formControl]='queryCtrl' [config]='basicQueryConfig' [allowRuleset]='filterPanelObject.allowRuleSet' [allowRuleset]=\"filterPanelObject.allowRuleSet\" [persistValueOnFieldChange]='persistValueOnFieldChange'>\r\n <ng-container *queryButtonGroup=\"let ruleset;\">\r\n </ng-container>\r\n\r\n <ng-container *queryRemoveButton=\"let rule; let removeRule=removeRule\">\r\n </ng-container>\r\n\r\n <ng-container *querySwitchGroup=\"let ruleset; let onChange=onChange\">\r\n </ng-container>\r\n\r\n <ng-container *queryEntity=\"let rule; let entities=entities; let onChange=onChange\">\r\n <p-dropdown [disabled]=\"true\" class=\" w-edit-select-small\" *ngIf=\"false\" appendTo=\"body\" [options]=\"entities\" [(ngModel)]=\"rule.entity\" optionLabel=\"name\" optionValue=\"value\" (ngModelChange)=\"onChange($event, rule)\"></p-dropdown>\r\n </ng-container>\r\n\r\n <ng-container *queryField=\"let rule; let fields=fields; let onChange=onChange; let getFields = getFields; let value=value; let name=name; let index=index\">\r\n <span appendTo=\"body\" class=\"w-4 text-left w-filter-panel-input-text-label\" [class.w-filter-panel-boolean-label-width]=\"fieldIsBoolean(rule.field, getFields(rule.entity))\" optionLabel=\"name\" optionValue=\"value\">{{ getQueryFieldName(rule.field, getFields(rule.entity))}}</span>\r\n </ng-container>\r\n\r\n <ng-container *queryOperator=\"let rule; let operators=operators; let onChange=onChange\">\r\n <span class=\"query-builder-operator-width\">\r\n <p-dropdown class=\" w-edit-select-small\" *ngIf=\"isAdvancedSearch\" appendTo=\"body\" [(ngModel)]=\"rule.operator\" [options]=\"operators\" (ngModelChange)=\"onChange(rule)\"></p-dropdown>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; type: qbDataTypeEnum.Boolean.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-operator-width\">\r\n <w-toggle-button size=\"small\" [(ngModel)]=\"rule.value\" onLabel=\"True\" offLabel=\"False\" (ngModelChange)=\"onChange()\"></w-toggle-button>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; type: qbDataTypeEnum.Datetime.toString(); let onChange=onChange\">\r\n <span class=\"w-edit-calendar\" style=\"width: 100%;\">\r\n <w-edit-calendar appendTo=\"body\" size=\"small\" [showIcon]=\"false\" [(ngModel)]=\"rule.value\" (onChange)=\"onChange()\" [showTime]=\"true\" [showSeconds]=\"true\" [placeholder]=\"translationsObject.fieldsPlaceholders.datetime\" [displayInlineBlock]=\"true\"></w-edit-calendar>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Decimal.toString(); let onChange=onChange\">\r\n <span class=\"w-filter-panel-basic-query-builder-input-width\">\r\n <p-inputNumber inputStyleClass=\"flex flex-1\" styleClass=\"flex flex-1\" class=\" w-filter-panel-basic-query-builder-input-width w-edit-input-number-small w-edit-input-number-small-height\" [(ngModel)]=\"rule.value\" inputId=\"minmax\" inputId=\"minmax\" mode=\"decimal\" [minFractionDigits]=\"2\" [maxFractionDigits]=\"5\" [min]=\"0\" [max]=\"100\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.decimal\"> </p-inputNumber>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let options=options; type: qbDataTypeEnum.List.toString(); let onChange=onChange\">\r\n <span class=\"w-filter-panel-basic-query-builder-input-width\">\r\n <p-dropdown class=\" w-edit-select-small\" appendTo=\"body\" [options]=\"options\" [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" optionLabel=\"name\" optionValue=\"value\" [placeholder]=\"translationsObject.fieldsPlaceholders.list\"></p-dropdown>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Number.toString(); let onChange=onChange\">\r\n <p-inputNumber [useGrouping]=\"false\" inputStyleClass=\"flex flex-1\" styleClass=\"flex flex-1\" class=\" w-filter-panel-basic-query-builder-input-width w-edit-input-number-small w-edit-input-number-small-height\" [(ngModel)]=\"rule.value\" inputId=\"minmax\" inputId=\"minmax\" [min]=\"0\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.number\"> </p-inputNumber>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Text.toString(); let onChange=onChange\">\r\n <input class=\" w-filter-panel-basic-query-builder-input-width w-edit-input-text-small-height w-edit-input-text-small\" type=\"text\" pInputText [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.text\"/>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let options=options; type: qbDataTypeEnum.List.toString(); let onChange=onChange\">\r\n <span class=\"w-filter-panel-basic-query-builder-input-width\">\r\n <p-multiSelect [appendTo]=\"'body'\" [options]=\"options\" [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" optionLabel=\"name\" optionValue=\"value\" display=\"chip\" [placeholder]=\"translationsObject.fieldsPlaceholders.list\"></p-multiSelect>\r\n </span>\r\n </ng-container>\r\n <ng-container *queryInput=\"let rule; let options=options; type: qbDataTypeEnum.Address.toString(); let onChange=onChange\">\r\n <w-address-field [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" [operator]=\"rule.operator\" [segmentationApiUrl]=\"segmentationApiUrl\" [segmentationApiToken]=\"segmentationToken\"></w-address-field>\r\n </ng-container>\r\n </query-builder>\r\n </div>\r\n\r\n <ng-container *ngIf=\"!isAdvancedSearch && basicQuery.rules.length==0\" >\r\n <ng-container *ngTemplateOutlet=\"noQueryData\"></ng-container>\r\n </ng-container>\r\n\r\n </ng-template>\r\n\r\n <ng-template #advanced>\r\n <div [class.query-builder-style]=\"!filterPanelObject.allowRuleSet\" class=\"w-filter-panel-container fadein animation-duration-500\">\r\n <div *ngIf=\"filterPanelObject.allowRuleSet\" class=\"flex justify-content-end flex-wrap\">\r\n <w-button class=\"mb-2\" [label]=\"translationsObject.basicSearchTabLabel\" type=\"text\" (onClick)=\"updateSearchType()\"></w-button>\r\n </div>\r\n <query-builder [formControl]='advancedQueryCtrl' [config]='advancedQueryConfig' [allowRuleset]='filterPanelObject.allowRuleSet' [allowCollapse]='filterPanelObject.allowColapse' [allowRuleset]=\"filterPanelObject.allowRuleSet\" [persistValueOnFieldChange]='persistValueOnFieldChange'>\r\n <div *ngIf=\"filterPanelObject.allowRuleSet; else noRuleSet\">\r\n <ng-container *queryButtonGroup=\"let ruleset; let addRule=addRule; let addRuleSet=addRuleSet; let removeRuleSet=removeRuleSet\">\r\n <w-button class=\"mr-2\" [label]=\"translationsObject.advancedSearch.addRuleButtonLabel\" type=\"secondary\" size=\"small\" (onClick)=\"addRule()\"></w-button>\r\n <w-button class=\"mr-2\" [label]=\"translationsObject.advancedSearch.addRuleSetButtonLabel\" type=\"secondary\" icon=\"pi pi-plus\" size=\"small\" *ngIf=\"addRuleSet\" (onClick)=\"addRuleSet()\"></w-button>\r\n <w-button class=\"mr-2\" [label]=\"translationsObject.advancedSearch.removeRuleSetButtonLabel\" type=\"tertiary\" icon=\"pi pi-minus\" size=\"small\" *ngIf=\"removeRuleSet\" (onClick)=\"removeRuleSet()\"></w-button>\r\n </ng-container>\r\n </div>\r\n\r\n <ng-template #noRuleSet>\r\n <ng-container *queryButtonGroup=\"let ruleset; let addRule=addRule; let addRuleSet=addRuleSet; let removeRuleSet=removeRuleSet\">\r\n <div class=\"flex justify-content-end flex-wrap\">\r\n <w-button [label]=\"translationsObject.basicSearchTabLabel\" type=\"text\" (onClick)=\"updateSearchType()\"></w-button>\r\n </div>\r\n <span class=\"advanced-query-button-group gap-3\">\r\n <w-button [label]=\"translationsObject.advancedSearch.addRuleButtonLabel\" type=\"secondary\" size=\"small\" (onClick)=\"addRule()\"></w-button>\r\n <w-button [label]=\"translationsObject.advancedSearch.addRuleSetButtonLabel\" type=\"secondary\" icon=\"pi pi-plus\" size=\"small\" *ngIf=\"addRuleSet\" (onClick)=\"addRuleSet()\"></w-button>\r\n <w-button [label]=\"translationsObject.advancedSearch.removeRuleSetButtonLabel\" type=\"tertiary\" icon=\"pi pi-minus\" size=\"small\" *ngIf=\"removeRuleSet\" (onClick)=\"removeRuleSet()\"></w-button>\r\n </span>\r\n </ng-container>\r\n </ng-template>\r\n <ng-container *queryArrowIcon>\r\n <button pButton pRipple type=\"button\" icon=\"pi pi-angle-right\" class=\"p-button-rounded p-button-text\"></button>\r\n </ng-container>\r\n\r\n <ng-container *queryRemoveButton=\"let rule; let removeRule=removeRule\">\r\n <w-button class=\"\" label=\"\" size=\"small\" type=\"tertiary\" icon=\"pi pi-times\" (onClick)=\"removeRule(rule)\"></w-button>\r\n </ng-container>\r\n\r\n <ng-container *querySwitchGroup=\"let ruleset; let onChange=onChange\">\r\n <div *ngIf=\"ruleset\" class=\"w-filter-panel-switch-group-padding\">\r\n <w-select-button *ngIf=\"filterPanelObject.allowLogicalRule\" [stateOptions]=\"[{label: 'And', value: 'and'}, {label: 'Or', value: 'or'}]\"\r\n [(ngModel)]=\"ruleset.condition\"\r\n [size]=\"'small'\"\r\n (value)=\"ruleset.condition = $event\">\r\n </w-select-button>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *queryEntity=\"let rule; let entities=entities; let onChange=onChange\">\r\n <p-dropdown *ngIf=\"filterPanelObject.enityMode\" class=\"field-gap w-edit-select-small w-entity-dropdown\" appendTo=\"body\" [options]=\"entities\" [(ngModel)]=\"rule.entity\" optionLabel=\"name\" optionValue=\"value\" (ngModelChange)=\"onChange($event, rule)\"></p-dropdown>\r\n </ng-container>\r\n\r\n <ng-container *queryField=\"let rule; let fields=fields; let onChange=onChange; let getFields = getFields\">\r\n <span class=\"query-builder-field-width\">\r\n <p-dropdown class=\"field-gap w-edit-select-small\" appendTo=\"body\" [options]=\"getFields(rule.entity)\" [(ngModel)]=\"rule.field\" optionLabel=\"name\" optionValue=\"value\" (ngModelChange)=\"onChange($event, rule)\"></p-dropdown>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryOperator=\"let rule; let operators=operators; let onChange=onChange\">\r\n <span class=\"query-builder-operator-width\">\r\n <p-dropdown class=\"field-gap w-edit-select-small\" appendTo=\"body\" [(ngModel)]=\"rule.operator\" [options]=\"operators\" (ngModelChange)=\"onChange(rule)\"></p-dropdown>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; type: qbDataTypeEnum.Boolean.toString(); let onChange=onChange\">\r\n <w-toggle-button class=\"field-gap toggle-button-align\" size=\"small\" [(ngModel)]=\"rule.value\" onLabel=\"True\" offLabel=\"False\" (ngModelChange)=\"onChange()\"></w-toggle-button>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; type: qbDataTypeEnum.Datetime.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width\">\r\n <w-edit-calendar class=\"field-gap\" appendTo=\"body\" size=\"small\" [showIcon]=\"false\" [(ngModel)]=\"rule.value\" (onChange)=\"onChange()\" [showTime]=\"true\" [showSeconds]=\"true\" [placeholder]=\"translationsObject.fieldsPlaceholders.datetime\" [displayInlineBlock]=\"true\"></w-edit-calendar>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Decimal.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width\">\r\n <p-inputNumber inputStyleClass=\"flex flex-1\" styleClass=\"flex flex-1\" class=\"field-gap w-edit-input-number-small w-edit-input-number-small-height\" [(ngModel)]=\"rule.value\" inputId=\"minmax\" inputId=\"minmax\" mode=\"decimal\" [minFractionDigits]=\"2\" [maxFractionDigits]=\"5\" [min]=\"0\" [max]=\"100\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.decimal\"> </p-inputNumber>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let options=options; type: qbDataTypeEnum.List.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width\">\r\n <p-dropdown class=\"field-gap w-edit-select-small\" appendTo=\"body\" [options]=\"options\" [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" optionLabel=\"name\" optionValue=\"value\" [placeholder]=\"translationsObject.fieldsPlaceholders.list\"></p-dropdown>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let options=options; type: qbDataTypeEnum.List.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width field-gap\">\r\n <w-list-field [options]=\"options\" [(ngModel)]=\"rule.value\" [operator]=\"rule.operator\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.list\"></w-list-field>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Number.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width\">\r\n <p-inputNumber [useGrouping]=\"false\" inputStyleClass=\"flex flex-1\" styleClass=\"flex flex-1\" class=\"field-gap w-edit-input-number-small w-edit-input-number-small-height\" [(ngModel)]=\"rule.value\" inputId=\"minmax\" inputId=\"minmax\" [min]=\"0\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.number\"> </p-inputNumber>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Text.toString(); let onChange=onChange\">\r\n <input class=\"field-gap query-builder-input-width w-edit-input-text-small-height w-edit-input-text-small\" type=\"text\" pInputText [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.text\"/>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let options=options; type: qbDataTypeEnum.Address.toString(); let onChange=onChange\">\r\n <w-address-field [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" [operator]=\"rule.operator\" [segmentationApiUrl]=\"segmentationApiUrl\" [segmentationApiToken]=\"segmentationToken\" [selectPlaceholder]=\"translationsObject.fieldsPlaceholders.list\"></w-address-field>\r\n </ng-container>\r\n </query-builder>\r\n\r\n <ng-container *ngIf=\"isAdvancedSearch && advancedQuery.rules.length==0\" >\r\n <ng-container *ngTemplateOutlet=\"noQueryData\"></ng-container>\r\n </ng-container>\r\n\r\n <!-- Grouped filter -->\r\n <div *ngIf=\"filterPanelObject.allowGrouped\">\r\n <div class=\"py-5\">\r\n <w-view-card-title-text [cardTitle]=\"translationsObject.groupedFilterTitle\"></w-view-card-title-text>\r\n </div>\r\n\r\n <query-builder [formControl]='groupedQueryCtrl' [config]='advancedQueryConfig' [allowRuleset]='filterPanelObject.allowRuleSet' [allowCollapse]='filterPanelObject.allowColapse' [allowRuleset]=\"filterPanelObject.allowRuleSet\" [persistValueOnFieldChange]='persistValueOnFieldChange'>\r\n <ng-container *queryButtonGroup=\"let ruleset; let addRule=addRule; let addRuleSet=addRuleSet; let removeRuleSet=removeRuleSet\">\r\n <div class=\"flex gap-3 mb-3\">\r\n <w-button [label]=\"translationsObject.advancedSearch.addRuleButtonLabel\" type=\"secondary\" size=\"small\" (onClick)=\"addRule()\"></w-button>\r\n <w-button [label]=\"translationsObject.advancedSearch.addRuleSetButtonLabel\" type=\"secondary\" icon=\"pi pi-plus\" size=\"small\" *ngIf=\"addRuleSet\" (onClick)=\"addRuleSet()\"></w-button>\r\n <w-button [label]=\"translationsObject.advancedSearch.removeRuleSetButtonLabel\" type=\"tertiary\" icon=\"pi pi-minus\" size=\"small\" *ngIf=\"removeRuleSet\" (onClick)=\"removeRuleSet()\"></w-button>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *queryArrowIcon>\r\n <button pButton pRipple type=\"button\" icon=\"pi pi-angle-right\" class=\"p-button-rounded p-button-text\"></button>\r\n </ng-container>\r\n\r\n <ng-container *queryRemoveButton=\"let rule; let removeRule=removeRule\">\r\n <w-button class=\"\" label=\"\" size=\"small\" type=\"tertiary\" icon=\"pi pi-times\" (onClick)=\"removeRule(rule)\"></w-button>\r\n </ng-container>\r\n\r\n <ng-container *querySwitchGroup=\"let ruleset; let onChange=onChange\">\r\n <div *ngIf=\"ruleset\">\r\n <w-select-button *ngIf=\"filterPanelObject.allowLogicalRule\" [stateOptions]=\"[{label: 'And', value: 'and'}, {label: 'Or', value: 'or'}]\"\r\n [(ngModel)]=\"ruleset.condition\"\r\n [size]=\"'small'\"\r\n (value)=\"ruleset.condition = $event\">\r\n </w-select-button>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *queryEntity=\"let rule; let entities=entities; let onChange=onChange\">\r\n <p-dropdown class=\"mr-3 w-edit-select-small\" *ngIf=\"filterPanelObject.enityMode\" appendTo=\"body\" [options]=\"entities\" [(ngModel)]=\"rule.entity\" optionLabel=\"name\" optionValue=\"value\" (ngModelChange)=\"onChange($event, rule)\"></p-dropdown>\r\n </ng-container>\r\n\r\n <ng-container *queryField=\"let rule; let fields=fields; let onChange=onChange; let getFields = getFields\">\r\n <span class=\"query-builder-field-width\">\r\n <p-dropdown class=\"mr-3 w-edit-select-small\" appendTo=\"body\" [options]=\"getFields(rule.entity)\" [(ngModel)]=\"rule.field\" optionLabel=\"name\" optionValue=\"value\" (ngModelChange)=\"onChange($event, rule)\"></p-dropdown>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryOperator=\"let rule; let operators=operators; let onChange=onChange\">\r\n <span class=\"query-builder-operator-width\">\r\n <p-dropdown class=\"mr-3 w-edit-select-small\" appendTo=\"body\" [(ngModel)]=\"rule.operator\" [options]=\"operators\" (ngModelChange)=\"onChange(rule)\"></p-dropdown>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; type: qbDataTypeEnum.Boolean.toString(); let onChange=onChange\">\r\n <w-toggle-button class=\"mr-3\" size=\"small\" [(ngModel)]=\"rule.value\" onLabel=\"True\" offLabel=\"False\" (ngModelChange)=\"onChange()\"></w-toggle-button>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; type: qbDataTypeEnum.Datetime.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width\">\r\n <w-edit-calendar class=\"field-gap\" appendTo=\"body\" size=\"small\" [showIcon]=\"false\" [(ngModel)]=\"rule.value\" (onChange)=\"onChange()\" [showTime]=\"true\" [showSeconds]=\"true\" [placeholder]=\"translationsObject.fieldsPlaceholders.datetime\" [displayInlineBlock]=\"true\"></w-edit-calendar>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Decimal.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width\">\r\n <p-inputNumber class=\"mr-3\" [(ngModel)]=\"rule.value\" inputId=\"minmax\" inputId=\"minmax\" mode=\"decimal\" [minFractionDigits]=\"2\" [maxFractionDigits]=\"5\" [min]=\"0\" [max]=\"100\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.decimal\"> </p-inputNumber>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let options=options; type: qbDataTypeEnum.List.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width\">\r\n <w-list-field [options]=\"options\" [(ngModel)]=\"rule.value\" [operator]=\"rule.operator\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.list\"></w-list-field>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Number.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width\">\r\n <p-inputNumber [useGrouping]=\"false\" inputStyleClass=\"flex flex-1\" styleClass=\"flex flex-1\" class=\"field-gap w-edit-input-number-small w-edit-input-number-small-height\" [(ngModel)]=\"rule.value\" inputId=\"minmax\" inputId=\"minmax\" [min]=\"0\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.number\"> </p-inputNumber>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Text.toString(); let onChange=onChange\">\r\n <input class=\"mr-3 query-builder-input-width w-edit-input-text-small-height wapp-input\" type=\"text\" pInputText [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.text\"/>\r\n </ng-container>\r\n\r\n </query-builder>\r\n\r\n <ng-container *ngIf=\"isAdvancedSearch && groupedQuery.rules.length==0\" >\r\n <ng-container *ngTemplateOutlet=\"noQueryData\"></ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template #noQueryData>\r\n <div class=\"flex justify-content-center flex-wrap card-container surface-50 mb-3\">\r\n <div class=\"flex align-items-center justify-content-center w-full h-4rem text-gray-900 border-round m-2\">\r\n {{translationsObject.noRulesLabel}}\r\n </div>\r\n </div>\r\n </ng-template>\r\n", styles: [".heading1{font-size:2.6666666667rem;line-height:3rem;font-weight:700}.heading2{font-size:2.3333333333rem;line-height:2.6666666667rem;font-weight:700}.heading3{font-size:2rem;line-height:2.3333333333rem;font-weight:700}.heading4{font-size:1.6666666667rem;line-height:2rem;font-weight:400}.heading5{font-size:1.5rem;line-height:1.8333333333rem;font-weight:600}.heading6{font-size:1.3333333333rem;line-height:1.6666666667rem;font-weight:400}.subtitle1,.w-tab-text,.w-panel-title-text,.w-sidebar-title-text{font-size:1.1666666667rem;line-height:1.3333333333rem;font-weight:600}.subtitle2,.w-table-th-text,.w-panel-subtitle-text,.w-input-small-label-text-typography,.w-input-small-label-text,.w-filter-panel-input-text-label,.w-input-small-label-disabled,.w-view-small-label-text-typography,.w-view-small-label-text,.w-button-small-text-label-text-typography,.w-button-small-text-label-text{font-size:1rem;line-height:1.3333333333rem;font-weight:600}.body,.w-table-td-text,.w-chip-text,.w-panel-content,.w-input-small-select-options-text,.w-input-small-placeholder-text-typography,.w-input-small-placeholder-text-disabled,.w-input-small-placeholder-text,:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input,:host ::ng-deep .w-edit-select-small .p-inputtext,::ng-deep .w-edit-input-text-small.p-inputtext,.w-view-small-value-text-typography,.w-view-small-value-text,.w-button-small-label-text-typography,.w-button-small-tertiary-label-text{font-size:1rem;line-height:1.3333333333rem;font-weight:400}.caption,.w-input-error-alert-text,.w-input-warning-alert-text,.w-input-success-alert-text{font-size:.6666666667rem;line-height:1rem;font-weight:400}.text846{color:#2e3134}.text700{color:#5f6368}.text500{color:#9aa0a6}.textWhite{color:#fff}.spacingXXS{padding:4px}.spacingXSM{padding:6px}.spacingXS{padding:8px}.spacingS{padding:12px}.spacingM{padding:16px}.spacingL{padding:20px}.spacingXL{padding:24px}.spacingXXL{padding:28px}.spacingXXXL{padding:32px}.focus,:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input:focus,:host ::ng-deep .w-edit-select-small .p-dropdown:not(.p-disabled).p-focus,.w-edit-input-text-small:focus{box-shadow:0 0 8px #00a6e980}.hover,:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input:hover,.w-edit-input-text-small:hover{border-radius:8px;border:1px solid #00b2eb}.input-generic-valid{border-radius:8px;border:1px solid #B3FFD3}.input-generic-valid-focus{border-radius:8px;border:1px solid #B3FFD3!important;box-shadow:0 0 8px #46ff9b80!important;padding-left:16px}.input-generic-warning{border-radius:8px;border:1px solid #FFECB8!important}.input-generic-warning-focus{border-radius:8px;border:1px solid #FFECB8!important;box-shadow:0 0 8px #ffcd4680!important;padding-left:16px}.input-generic-error-focus{border-radius:8px;border:1px solid #FFBDBD!important;box-shadow:0 0 8px #ff555580!important;padding-left:16px}.input-generic-error{border-radius:8px;border:1px solid #FFBDBD}.toggle-small-typography{font-size:12px;line-height:16px;font-weight:600}.w-button-small-tertiary-label-text,.w-button-small-text-label-text{color:#2e3134}.w-button-small-icon-text{font-size:12px}.w-control-button-small-label-text{font-size:12px;font-weight:600;line-height:16px}.w-control-button-x-small-icon-text{font-size:10px;font-weight:700}.w-control-button-small-icon-text{font-size:8px;font-weight:700}.w-button-medium-label-text-typography,.w-button-medium-tertiary-label-text{font-size:16px;font-weight:400;line-height:16px}.w-button-medium-tertiary-label-text{color:#2e3134}.w-button-medium-icon-text{font-size:16px}.w-control-button-medium-label-text{font-size:14px;font-weight:600;line-height:16px}.w-control-button-medium-icon-text{font-size:12px;font-weight:700}.w-button-large-label-text-typography,.w-button-large-tertiary-label-text{font-size:20px;font-weight:400;line-height:24px}.w-button-large-tertiary-label-text{color:#2e3134}.w-button-x-small-label-text{font-size:10px;font-weight:600;line-height:10px}.w-button-small-only-label-text{font-size:12px;font-weight:600;line-height:16px}.w-button-large-icon-text{font-size:24px}.w-view-small-label-text,.w-view-small-value-text{color:#2e3134}.w-input-no-label-height{height:36px}.w-input-disabled,:host ::ng-deep .w-edit-select-small .p-disabled{background-color:#f1f3f4;border-color:#e8eaed;opacity:1}.w-input-small-label-text,.w-filter-panel-input-text-label,.w-input-small-label-disabled{color:#2e3134}.w-input-small-label-disabled{color:#9aa0a6}.w-input-small-label-text-content{padding:12px 8px 8px 0;margin:0}.w-input-small-placeholder-text,:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input,:host ::ng-deep .w-edit-select-small .p-inputtext,::ng-deep .w-edit-input-text-small.p-inputtext{color:#2e3134}.w-input-small-placeholder-text-only-color,:host ::ng-deep .w-edit-select-small .p-dropdown .p-placeholder{color:#2e3134}.w-input-small-placeholder-text-disabled{color:#5f6368}.w-input-small-placeholder-text-disabled-only-color,:host ::ng-deep .w-edit-select-small .p-disabled .p-inputtext{color:#5f6368}.w-input-small-text-icon,.w-input-small-select-options-text{color:#2e3134}.w-input-medium-label-text-typography,.w-input-medium-label-text,.w-input-medium-label-disabled{font-size:14px;font-weight:600;line-height:16px}.w-input-medium-label-text,.w-input-medium-label-disabled{color:#2e3134}.w-input-medium-label-disabled{color:#9aa0a6}.w-input-medium-placeholder-text-typography,.w-input-medium-placeholder-text-disabled,.w-input-medium-placeholder-text{font-size:16px;font-weight:400;line-height:24px}.w-input-medium-placeholder-text,.w-input-medium-placeholder-text-only-color{color:#2e3134}.w-input-medium-placeholder-text-disabled,.w-input-medium-placeholder-text-disabled-only-color{color:#5f6368}.w-input-medium-text-icon{color:#2e3134}.w-input-medium-select-options-text,:host ::ng-deep .w-edit-select-small .p-dropdown-panel .p-dropdown-items .p-dropdown-item{font-size:16px;font-weight:400;line-height:24px;color:#2e3134}.w-input-success-alert-text{color:#00db5d;padding:8px 8px 0;margin-top:0}.w-input-warning-alert-text{color:#eeae00;padding:8px 8px 0;margin-top:0}.w-input-error-alert-text{color:#e50000;padding:8px 8px 0;margin-top:0}.w-input-alert-message-height{height:32px}.w-sidebar-title-text,.w-panel-title-text,.w-panel-subtitle-text{color:#2e3134}.w-panel-content{color:#5f6368}.w-tab-text,.w-chip-text{color:#2e3134}.w-badge-text{font-size:8px;font-weight:700;line-height:8px}.w-table-th-text{color:#2e3134}.w-table-td-text{color:#5f6368}.w-filter-panel-container-basic,.w-filter-panel-container-advanced{padding:16px 20px 20px;background-color:#fff;border-radius:8px;box-shadow:0 4px 8px #0000001a;margin-bottom:0}::ng-deep .w-filter-panel-basic .q-row{margin-top:6px!important;margin-bottom:6px!important;padding:0 0 0 6px!important}::ng-deep .w-filter-panel-container-advanced .q-row{padding:0!important;margin-bottom:8px!important}.field-gap{margin-right:8px}.button-gap{gap:16px}.w-filter-panel-switch-group-padding{padding-bottom:16px}::ng-deep .query-builder-style ul li{border:none!important;background:transparent!important;padding-left:0!important}::ng-deep .query-builder-style .q-connector:before{content:none!important}::ng-deep .query-builder-style .q-connector:after{border-width:0px!important}::ng-deep .query-builder-style .q-tree{padding:0!important}::ng-deep .query-builder-field-width .p-dropdown{width:20%}::ng-deep .query-builder-operator-width .p-dropdown{width:10%}.query-builder-input-width{width:40%}::ng-deep .query-builder-input-width .p-dropdown{width:40%}::ng-deep .query-builder-input-width .p-calendar{width:40%}::ng-deep .query-builder-input-width .w-edit-calendar-medium-display-block{width:40%}::ng-deep .w-edit-calendar .w-edit-calendar-styles{width:100%!important}.w-filter-panel-container.query-builder-style{display:flex;flex-direction:column;justify-content:space-between;position:relative}.advanced-query-button-group{position:absolute;bottom:0;left:0;margin-bottom:-46px}.w-edit-input-text-small-height{height:32px}::ng-deep .w-edit-input-text-small.p-inputtext{border-radius:8px;border-width:1px;padding:7px 11px;border:1px solid #e8eaed}.w-edit-input-text-small:focus{border-radius:8px;border:1px solid #d6f2ff;padding-left:11px}:host ::ng-deep .w-edit-calendar-display-blok{width:40%}:host ::ng-deep .w-edit-select-small .p-dropdown{height:32px;border-width:1px;border-radius:8px;border-color:#e8eaed}:host ::ng-deep .w-edit-select-small .p-inputtext{padding:0 0 0 12px;align-self:center}:host ::ng-deep .w-edit-select-small .p-dropdown:not(.p-disabled):hover{border:1px solid #00b2eb}:host ::ng-deep .w-edit-select-small .p-dropdown:not(.p-disabled).p-focus{border:1px solid #d6f2ff}:host ::ng-deep .w-edit-select-small .p-dropdown .p-dropdown-trigger{width:auto;height:28px;padding-right:12px}:host ::ng-deep .w-entity-dropdown .p-dropdown .p-dropdown-trigger{width:auto;height:28px;padding-right:12px;padding-left:12px}:host ::ng-deep .w-edit-select-small .p-dropdown-panel{padding:8px}:host ::ng-deep .w-edit-select-small .p-dropdown-panel .p-dropdown-items{padding:0}:host ::ng-deep .w-edit-select-small .p-dropdown-panel .p-dropdown-items .p-dropdown-item{padding:8px;margin-bottom:4px}:host ::ng-deep .w-edit-select-small .p-dropdown-panel .p-dropdown-items .p-dropdown-item:hover{background:#d6f2ff;border-radius:8px}:host ::ng-deep .w-edit-select-small .p-dropdown-panel .p-dropdown-items .p-dropdown-item.p-highlight{background:#d6f2ff;border-radius:8px;color:#000}::ng-deep .select-disabled .p-dropdown .p-dropdown-trigger{display:none}:host ::ng-deep .w-edit-input-number-small-height .p-inputnumber .p-inputnumber-input{height:32px!important}.w-filter-panel-container-advanced .w-edit-input-number-small{width:40%!important}:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input{border-radius:8px;border-width:1px;padding:7px 11px!important;width:100%;border:1px solid #e8eaed}::-webkit-input-placeholder{color:#5f6368}::-moz-placeholder{color:#5f6368}:-ms-input-placeholder{color:#5f6368}:-moz-placeholder{color:#5f6368}:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input:focus{border-radius:8px;border:1px solid #d6f2ff;padding-left:11px}:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input::-moz-placeholder{color:#5f6368}:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input::-webkit-input-placeholder{color:#5f6368}:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input:-ms-input-placeholder{color:#5f6368}:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input:-moz-placeholder{color:#5f6368}:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input:disabled{background-color:#f1f3f4;border-color:#e8eaed;color:#5f6368;opacity:1}.w-filter-panel-input-text-label{padding:8px 6px 12px;margin:0}.w-filter-panel-basic-query-builder-input-width{width:100%!important}::ng-deep .w-filter-panel-basic-query-builder-input-width .p-dropdown{width:100%!important}::ng-deep .w-filter-panel-basic .q-tree-container{margin:8px 0 16px}::ng-deep .w-filter-panel-basic .q-row:not(:nth-child(3n)){display:flex!important;width:33.3333%;padding-right:64px!important}::ng-deep .w-filter-panel-basic .q-row:nth-child(3n){display:flex!important;width:33.3333%;padding-right:0!important}::ng-deep .w-filter-panel-basic .q-tree{margin:0!important;display:flex;flex-wrap:wrap;justify-content:flex-start}.w-filter-panel-boolean-label-width{width:25.5%!important}::ng-deep .q-rule{border:none!important}\n"], dependencies: [{ kind: "directive", type: i4.InputText, selector: "[pInputText]" }, { 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.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i6.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { kind: "directive", type: i7.Ripple, selector: "[pRipple]" }, { kind: "component", type: i8.Dropdown, selector: "p-dropdown", inputs: ["scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "filterPlaceholder", "filterLocale", "inputId", "selectId", "dataKey", "filterBy", "autofocus", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "overlayDirection", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "options", "filterValue"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "component", type: i9.MultiSelect, selector: "p-multiSelect", inputs: ["style", "styleClass", "panelStyle", "panelStyleClass", "inputId", "disabled", "readonly", "group", "filter", "filterPlaceHolder", "filterLocale", "overlayVisible", "tabindex", "appendTo", "dataKey", "name", "label", "ariaLabelledBy", "displaySelectedLabel", "maxSelectedLabels", "selectionLimit", "selectedItemsLabel", "showToggleAll", "emptyFilterMessage", "emptyMessage", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "showHeader", "filterBy", "scrollHeight", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "display", "autocomplete", "showClear", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "defaultLabel", "placeholder", "options", "filterValue", "itemSize"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onClear", "onPanelShow", "onPanelHide", "onLazyLoad", "onRemove"] }, { kind: "component", type: i10.InputNumber, selector: "p-inputNumber", inputs: ["showButtons", "format", "buttonLayout", "inputId", "styleClass", "style", "placeholder", "size", "maxlength", "tabindex", "title", "ariaLabel", "ariaRequired", "name", "required", "autocomplete", "min", "max", "incrementButtonClass", "decrementButtonClass", "incrementButtonIcon", "decrementButtonIcon", "readonly", "step", "allowEmpty", "locale", "localeMatcher", "mode", "currency", "currencyDisplay", "useGrouping", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "inputStyle", "inputStyleClass", "showClear", "disabled"], outputs: ["onInput", "onFocus", "onBlur", "onKeyDown", "onClear"] }, { kind: "component", type: i11.QueryBuilderComponent, selector: "query-builder", inputs: ["data", "allowRuleset", "allowCollapse", "emptyMessage", "config", "persistValueOnFieldChange", "value", "disabled", "classNames", "operatorMap", "parentValue", "parentArrowIconTemplate", "parentInputTemplates", "parentOperatorTemplate", "parentFieldTemplate", "parentEntityTemplate", "parentSwitchGroupTemplate", "parentButtonGroupTemplate", "parentRemoveButtonTemplate", "parentEmptyWarningTemplate", "parentChangeCallback", "parentTouchedCallback"] }, { kind: "directive", type: i11.QueryInputDirective, selector: "[queryInput]", inputs: ["queryInputType"] }, { kind: "directive", type: i11.QueryOperatorDirective, selector: "[queryOperator]" }, { kind: "directive", type: i11.QueryFieldDirective, selector: "[queryField]" }, { kind: "directive", type: i11.QueryEntityDirective, selector: "[queryEntity]" }, { kind: "directive", type: i11.QueryButtonGroupDirective, selector: "[queryButtonGroup]" }, { kind: "directive", type: i11.QuerySwitchGroupDirective, selector: "[querySwitchGroup]" }, { kind: "directive", type: i11.QueryRemoveButtonDirective, selector: "[queryRemoveButton]" }, { kind: "directive", type: i11.QueryArrowIconDirective, selector: "[queryArrowIcon]" }, { kind: "component", type: i12.WButtonComponent, selector: "w-button", inputs: ["type", "label", "size", "icon", "tooltipPosition", "tooltip", "disabled", "loading"], outputs: ["onClick"] }, { kind: "component", type: i13.WListFieldComponent, selector: "w-list-field", inputs: ["options", "operator", "placeholder", "onlyDropdown"] }, { kind: "component", type: i14.WViewCardTitleTextComponent, selector: "w-view-card-title-text", inputs: ["cardTitle"] }, { kind: "component", type: i15.WToggleButtonComponent, selector: "w-toggle-button", inputs: ["onLabel", "offLabel", "size", "onIcon", "offIcon", "tooltipPosition", "tooltip", "disabled", "formControl"], outputs: ["onChange"] }, { kind: "component", type: i16.WSelectButtonComponent, selector: "w-select-button", inputs: ["stateOptions", "size", "tooltipPosition", "tooltip", "disabled", "formControl"], outputs: ["onChange"] }, { kind: "component", type: i17.WEditCalendarComponent, selector: "w-edit-calendar", inputs: ["label", "showTime", "showSeconds", "timeOnly", "showIcon", "placeholder", "minDate", "maxDate", "disabled", "size", "formControl", "displayInlineBlock", "required", "requiredErrorDescription"], outputs: ["onChange"] }, { kind: "component", type: i18.WAddressFieldComponent, selector: "w-address-field", inputs: ["operator", "selectPlaceholder", "segmentationApiUrl", "segmentationApiToken"] }] });
404
404
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: WFilterPanelComponent, decorators: [{
405
405
  type: Component,
406
- args: [{ selector: 'w-filter-panel', template: "<!-- TODO: Intentar otra vez pasar los componentes a los de w- porque no se alinena y el w-edit-select no va bien en field. \r\n Ahora se conservan los de p-w con estilos. -->\r\n<div *ngIf=\"queryConfigReady\" class=\"w-filter-panel-styles\">\r\n <div *ngIf=\"!filterPanelObject.allowAdvancedSearch; else baiscAndAdvanced\">\r\n <div [ngClass]=\"{ 'w-filter-panel-container-advanced' : isAdvancedSearch, 'w-filter-panel-container-basic' : !isAdvancedSearch }\">\r\n <ng-container *ngTemplateOutlet=\"basic\"></ng-container>\r\n <div class=\"flex justify-content-end button-gap\">\r\n <w-button [label]=\"translationsObject.clearButtonLabel\" type=\"tertiary\" size=\"small\" (onClick)=\"onClearClicked()\"></w-button>\r\n <w-button [label]=\"translationsObject.searchButtonLabel\" size=\"small\" (onClick)=\"onSearchClicked()\"></w-button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <ng-template #baiscAndAdvanced>\r\n <div [ngClass]=\"{ 'w-filter-panel-container-advanced' : isAdvancedSearch, 'w-filter-panel-container-basic' : !isAdvancedSearch }\">\r\n <div *ngIf=\"!isAdvancedSearch; else advancedView\">\r\n <ng-container *ngTemplateOutlet=\"basic\"></ng-container>\r\n </div>\r\n <ng-template #advancedView>\r\n <ng-container *ngTemplateOutlet=\"advanced\"></ng-container>\r\n </ng-template>\r\n\r\n <div class=\"flex justify-content-end button-gap\" [class.pt-3]=\"isAdvancedSearch\">\r\n <w-button [label]=\"translationsObject.clearButtonLabel\" type=\"tertiary\" size=\"small\" (onClick)=\"onClearClicked()\"></w-button>\r\n <w-button [label]=\"translationsObject.searchButtonLabel\" size=\"small\" (onClick)=\"onSearchClicked()\" [loading]=\"dataIsLoadingSearchButton\"></w-button>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n\r\n <ng-template #basic>\r\n <div *ngIf=\"filterPanelObject.allowAdvancedSearch\" class=\"flex justify-content-end flex-wrap\">\r\n <w-button [label]=\"translationsObject.advancedSearchTabLabel\" type=\"text\" (onClick)=\"updateSearchType()\"></w-button>\r\n </div>\r\n <div class=\"w-filter-panel-basic query-builder-style fadein animation-duration-500\">\r\n <query-builder [formControl]='queryCtrl' [config]='basicQueryConfig' [allowRuleset]='filterPanelObject.allowRuleSet' [allowRuleset]=\"filterPanelObject.allowRuleSet\" [persistValueOnFieldChange]='persistValueOnFieldChange'>\r\n <ng-container *queryButtonGroup=\"let ruleset;\">\r\n </ng-container>\r\n\r\n <ng-container *queryRemoveButton=\"let rule; let removeRule=removeRule\">\r\n </ng-container>\r\n\r\n <ng-container *querySwitchGroup=\"let ruleset; let onChange=onChange\">\r\n </ng-container>\r\n\r\n <ng-container *queryEntity=\"let rule; let entities=entities; let onChange=onChange\">\r\n <p-dropdown [disabled]=\"true\" class=\" w-edit-select-small\" *ngIf=\"false\" appendTo=\"body\" [options]=\"entities\" [(ngModel)]=\"rule.entity\" optionLabel=\"name\" optionValue=\"value\" (ngModelChange)=\"onChange($event, rule)\"></p-dropdown>\r\n </ng-container>\r\n\r\n <ng-container *queryField=\"let rule; let fields=fields; let onChange=onChange; let getFields = getFields; let value=value; let name=name; let index=index\">\r\n <span appendTo=\"body\" class=\"w-4 text-left w-filter-panel-input-text-label\" [class.w-filter-panel-boolean-label-width]=\"fieldIsBoolean(rule.field, getFields(rule.entity))\" optionLabel=\"name\" optionValue=\"value\">{{ getQueryFieldName(rule.field, getFields(rule.entity))}}</span>\r\n </ng-container>\r\n\r\n <ng-container *queryOperator=\"let rule; let operators=operators; let onChange=onChange\">\r\n <span class=\"query-builder-operator-width\">\r\n <p-dropdown class=\" w-edit-select-small\" *ngIf=\"isAdvancedSearch\" appendTo=\"body\" [(ngModel)]=\"rule.operator\" [options]=\"operators\" (ngModelChange)=\"onChange(rule)\"></p-dropdown>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; type: qbDataTypeEnum.Boolean.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-operator-width\">\r\n <w-toggle-button size=\"small\" [(ngModel)]=\"rule.value\" onLabel=\"True\" offLabel=\"False\" (ngModelChange)=\"onChange()\"></w-toggle-button>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; type: qbDataTypeEnum.Datetime.toString(); let onChange=onChange\">\r\n <span class=\"w-filter-panel-basic-query-builder-input-width\">\r\n <w-edit-calendar appendTo=\"body\" size=\"small\" [showIcon]=\"false\" [(ngModel)]=\"rule.value\" (onChange)=\"onChange()\" [showTime]=\"true\" [showSeconds]=\"true\" [placeholder]=\"translationsObject.fieldsPlaceholders.datetime\" [displayInlineBlock]=\"true\"></w-edit-calendar>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Decimal.toString(); let onChange=onChange\">\r\n <span class=\"w-filter-panel-basic-query-builder-input-width\">\r\n <p-inputNumber inputStyleClass=\"flex flex-1\" styleClass=\"flex flex-1\" class=\" w-filter-panel-basic-query-builder-input-width w-edit-input-number-small w-edit-input-number-small-height\" [(ngModel)]=\"rule.value\" inputId=\"minmax\" inputId=\"minmax\" mode=\"decimal\" [minFractionDigits]=\"2\" [maxFractionDigits]=\"5\" [min]=\"0\" [max]=\"100\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.decimal\"> </p-inputNumber>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let options=options; type: qbDataTypeEnum.List.toString(); let onChange=onChange\">\r\n <span class=\"w-filter-panel-basic-query-builder-input-width\">\r\n <p-dropdown class=\" w-edit-select-small\" appendTo=\"body\" [options]=\"options\" [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" optionLabel=\"name\" optionValue=\"value\" [placeholder]=\"translationsObject.fieldsPlaceholders.list\"></p-dropdown>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Number.toString(); let onChange=onChange\">\r\n <p-inputNumber [useGrouping]=\"false\" inputStyleClass=\"flex flex-1\" styleClass=\"flex flex-1\" class=\" w-filter-panel-basic-query-builder-input-width w-edit-input-number-small w-edit-input-number-small-height\" [(ngModel)]=\"rule.value\" inputId=\"minmax\" inputId=\"minmax\" [min]=\"0\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.number\"> </p-inputNumber>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Text.toString(); let onChange=onChange\">\r\n <input class=\" w-filter-panel-basic-query-builder-input-width w-edit-input-text-small-height w-edit-input-text-small\" type=\"text\" pInputText [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.text\"/>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let options=options; type: qbDataTypeEnum.List.toString(); let onChange=onChange\">\r\n <span class=\"w-filter-panel-basic-query-builder-input-width\">\r\n <p-multiSelect [appendTo]=\"'body'\" [options]=\"options\" [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" optionLabel=\"name\" optionValue=\"value\" display=\"chip\" [placeholder]=\"translationsObject.fieldsPlaceholders.list\"></p-multiSelect>\r\n </span>\r\n </ng-container>\r\n <ng-container *queryInput=\"let rule; let options=options; type: qbDataTypeEnum.Address.toString(); let onChange=onChange\">\r\n <w-address-field [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" [operator]=\"rule.operator\" [segmentationApiUrl]=\"segmentationApiUrl\" [segmentationApiToken]=\"segmentationToken\"></w-address-field>\r\n </ng-container>\r\n </query-builder>\r\n </div>\r\n\r\n <ng-container *ngIf=\"!isAdvancedSearch && basicQuery.rules.length==0\" >\r\n <ng-container *ngTemplateOutlet=\"noQueryData\"></ng-container>\r\n </ng-container>\r\n\r\n </ng-template>\r\n\r\n <ng-template #advanced>\r\n <div [class.query-builder-style]=\"!filterPanelObject.allowRuleSet\" class=\"w-filter-panel-container fadein animation-duration-500\">\r\n <div *ngIf=\"filterPanelObject.allowRuleSet\" class=\"flex justify-content-end flex-wrap\">\r\n <w-button class=\"mb-2\" [label]=\"translationsObject.basicSearchTabLabel\" type=\"text\" (onClick)=\"updateSearchType()\"></w-button>\r\n </div>\r\n <query-builder [formControl]='advancedQueryCtrl' [config]='advancedQueryConfig' [allowRuleset]='filterPanelObject.allowRuleSet' [allowCollapse]='filterPanelObject.allowColapse' [allowRuleset]=\"filterPanelObject.allowRuleSet\" [persistValueOnFieldChange]='persistValueOnFieldChange'>\r\n <div *ngIf=\"filterPanelObject.allowRuleSet; else noRuleSet\">\r\n <ng-container *queryButtonGroup=\"let ruleset; let addRule=addRule; let addRuleSet=addRuleSet; let removeRuleSet=removeRuleSet\">\r\n <w-button class=\"mr-2\" [label]=\"translationsObject.advancedSearch.addRuleButtonLabel\" type=\"secondary\" size=\"small\" (onClick)=\"addRule()\"></w-button>\r\n <w-button class=\"mr-2\" [label]=\"translationsObject.advancedSearch.addRuleSetButtonLabel\" type=\"secondary\" icon=\"pi pi-plus\" size=\"small\" *ngIf=\"addRuleSet\" (onClick)=\"addRuleSet()\"></w-button>\r\n <w-button class=\"mr-2\" [label]=\"translationsObject.advancedSearch.removeRuleSetButtonLabel\" type=\"tertiary\" icon=\"pi pi-minus\" size=\"small\" *ngIf=\"removeRuleSet\" (onClick)=\"removeRuleSet()\"></w-button>\r\n </ng-container>\r\n </div>\r\n\r\n <ng-template #noRuleSet>\r\n <ng-container *queryButtonGroup=\"let ruleset; let addRule=addRule; let addRuleSet=addRuleSet; let removeRuleSet=removeRuleSet\">\r\n <div class=\"flex justify-content-end flex-wrap\">\r\n <w-button [label]=\"translationsObject.basicSearchTabLabel\" type=\"text\" (onClick)=\"updateSearchType()\"></w-button>\r\n </div>\r\n <span class=\"advanced-query-button-group gap-3\">\r\n <w-button [label]=\"translationsObject.advancedSearch.addRuleButtonLabel\" type=\"secondary\" size=\"small\" (onClick)=\"addRule()\"></w-button>\r\n <w-button [label]=\"translationsObject.advancedSearch.addRuleSetButtonLabel\" type=\"secondary\" icon=\"pi pi-plus\" size=\"small\" *ngIf=\"addRuleSet\" (onClick)=\"addRuleSet()\"></w-button>\r\n <w-button [label]=\"translationsObject.advancedSearch.removeRuleSetButtonLabel\" type=\"tertiary\" icon=\"pi pi-minus\" size=\"small\" *ngIf=\"removeRuleSet\" (onClick)=\"removeRuleSet()\"></w-button>\r\n </span>\r\n </ng-container>\r\n </ng-template>\r\n <ng-container *queryArrowIcon>\r\n <button pButton pRipple type=\"button\" icon=\"pi pi-angle-right\" class=\"p-button-rounded p-button-text\"></button>\r\n </ng-container>\r\n\r\n <ng-container *queryRemoveButton=\"let rule; let removeRule=removeRule\">\r\n <w-button class=\"\" label=\"\" size=\"small\" type=\"tertiary\" icon=\"pi pi-times\" (onClick)=\"removeRule(rule)\"></w-button>\r\n </ng-container>\r\n\r\n <ng-container *querySwitchGroup=\"let ruleset; let onChange=onChange\">\r\n <div *ngIf=\"ruleset\" class=\"w-filter-panel-switch-group-padding\">\r\n <w-select-button *ngIf=\"filterPanelObject.allowLogicalRule\" [stateOptions]=\"[{label: 'And', value: 'and'}, {label: 'Or', value: 'or'}]\"\r\n [(ngModel)]=\"ruleset.condition\"\r\n [size]=\"'small'\"\r\n (value)=\"ruleset.condition = $event\">\r\n </w-select-button>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *queryEntity=\"let rule; let entities=entities; let onChange=onChange\">\r\n <p-dropdown *ngIf=\"filterPanelObject.enityMode\" class=\"field-gap w-edit-select-small w-entity-dropdown\" appendTo=\"body\" [options]=\"entities\" [(ngModel)]=\"rule.entity\" optionLabel=\"name\" optionValue=\"value\" (ngModelChange)=\"onChange($event, rule)\"></p-dropdown>\r\n </ng-container>\r\n\r\n <ng-container *queryField=\"let rule; let fields=fields; let onChange=onChange; let getFields = getFields\">\r\n <span class=\"query-builder-field-width\">\r\n <p-dropdown class=\"field-gap w-edit-select-small\" appendTo=\"body\" [options]=\"getFields(rule.entity)\" [(ngModel)]=\"rule.field\" optionLabel=\"name\" optionValue=\"value\" (ngModelChange)=\"onChange($event, rule)\"></p-dropdown>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryOperator=\"let rule; let operators=operators; let onChange=onChange\">\r\n <span class=\"query-builder-operator-width\">\r\n <p-dropdown class=\"field-gap w-edit-select-small\" appendTo=\"body\" [(ngModel)]=\"rule.operator\" [options]=\"operators\" (ngModelChange)=\"onChange(rule)\"></p-dropdown>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; type: qbDataTypeEnum.Boolean.toString(); let onChange=onChange\">\r\n <w-toggle-button class=\"field-gap toggle-button-align\" size=\"small\" [(ngModel)]=\"rule.value\" onLabel=\"True\" offLabel=\"False\" (ngModelChange)=\"onChange()\"></w-toggle-button>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; type: qbDataTypeEnum.Datetime.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width\">\r\n <w-edit-calendar class=\"field-gap\" appendTo=\"body\" size=\"small\" [showIcon]=\"false\" [(ngModel)]=\"rule.value\" (onChange)=\"onChange()\" [showTime]=\"true\" [showSeconds]=\"true\" [placeholder]=\"translationsObject.fieldsPlaceholders.datetime\" [displayInlineBlock]=\"true\"></w-edit-calendar>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Decimal.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width\">\r\n <p-inputNumber inputStyleClass=\"flex flex-1\" styleClass=\"flex flex-1\" class=\"field-gap w-edit-input-number-small w-edit-input-number-small-height\" [(ngModel)]=\"rule.value\" inputId=\"minmax\" inputId=\"minmax\" mode=\"decimal\" [minFractionDigits]=\"2\" [maxFractionDigits]=\"5\" [min]=\"0\" [max]=\"100\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.decimal\"> </p-inputNumber>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let options=options; type: qbDataTypeEnum.List.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width\">\r\n <p-dropdown class=\"field-gap w-edit-select-small\" appendTo=\"body\" [options]=\"options\" [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" optionLabel=\"name\" optionValue=\"value\" [placeholder]=\"translationsObject.fieldsPlaceholders.list\"></p-dropdown>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let options=options; type: qbDataTypeEnum.List.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width field-gap\">\r\n <w-list-field [options]=\"options\" [(ngModel)]=\"rule.value\" [operator]=\"rule.operator\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.list\"></w-list-field>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Number.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width\">\r\n <p-inputNumber [useGrouping]=\"false\" inputStyleClass=\"flex flex-1\" styleClass=\"flex flex-1\" class=\"field-gap w-edit-input-number-small w-edit-input-number-small-height\" [(ngModel)]=\"rule.value\" inputId=\"minmax\" inputId=\"minmax\" [min]=\"0\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.number\"> </p-inputNumber>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Text.toString(); let onChange=onChange\">\r\n <input class=\"field-gap query-builder-input-width w-edit-input-text-small-height w-edit-input-text-small\" type=\"text\" pInputText [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.text\"/>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let options=options; type: qbDataTypeEnum.Address.toString(); let onChange=onChange\">\r\n <w-address-field [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" [operator]=\"rule.operator\" [segmentationApiUrl]=\"segmentationApiUrl\" [segmentationApiToken]=\"segmentationToken\" [selectPlaceholder]=\"translationsObject.fieldsPlaceholders.list\"></w-address-field>\r\n </ng-container>\r\n </query-builder>\r\n\r\n <ng-container *ngIf=\"isAdvancedSearch && advancedQuery.rules.length==0\" >\r\n <ng-container *ngTemplateOutlet=\"noQueryData\"></ng-container>\r\n </ng-container>\r\n\r\n <!-- Grouped filter -->\r\n <div *ngIf=\"filterPanelObject.allowGrouped\">\r\n <div class=\"py-5\">\r\n <w-view-card-title-text [cardTitle]=\"translationsObject.groupedFilterTitle\"></w-view-card-title-text>\r\n </div>\r\n\r\n <query-builder [formControl]='groupedQueryCtrl' [config]='advancedQueryConfig' [allowRuleset]='filterPanelObject.allowRuleSet' [allowCollapse]='filterPanelObject.allowColapse' [allowRuleset]=\"filterPanelObject.allowRuleSet\" [persistValueOnFieldChange]='persistValueOnFieldChange'>\r\n <ng-container *queryButtonGroup=\"let ruleset; let addRule=addRule; let addRuleSet=addRuleSet; let removeRuleSet=removeRuleSet\">\r\n <div class=\"flex gap-3 mb-3\">\r\n <w-button [label]=\"translationsObject.advancedSearch.addRuleButtonLabel\" type=\"secondary\" size=\"small\" (onClick)=\"addRule()\"></w-button>\r\n <w-button [label]=\"translationsObject.advancedSearch.addRuleSetButtonLabel\" type=\"secondary\" icon=\"pi pi-plus\" size=\"small\" *ngIf=\"addRuleSet\" (onClick)=\"addRuleSet()\"></w-button>\r\n <w-button [label]=\"translationsObject.advancedSearch.removeRuleSetButtonLabel\" type=\"tertiary\" icon=\"pi pi-minus\" size=\"small\" *ngIf=\"removeRuleSet\" (onClick)=\"removeRuleSet()\"></w-button>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *queryArrowIcon>\r\n <button pButton pRipple type=\"button\" icon=\"pi pi-angle-right\" class=\"p-button-rounded p-button-text\"></button>\r\n </ng-container>\r\n\r\n <ng-container *queryRemoveButton=\"let rule; let removeRule=removeRule\">\r\n <w-button class=\"\" label=\"\" size=\"small\" type=\"tertiary\" icon=\"pi pi-times\" (onClick)=\"removeRule(rule)\"></w-button>\r\n </ng-container>\r\n\r\n <ng-container *querySwitchGroup=\"let ruleset; let onChange=onChange\">\r\n <div *ngIf=\"ruleset\">\r\n <w-select-button *ngIf=\"filterPanelObject.allowLogicalRule\" [stateOptions]=\"[{label: 'And', value: 'and'}, {label: 'Or', value: 'or'}]\"\r\n [(ngModel)]=\"ruleset.condition\"\r\n [size]=\"'small'\"\r\n (value)=\"ruleset.condition = $event\">\r\n </w-select-button>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *queryEntity=\"let rule; let entities=entities; let onChange=onChange\">\r\n <p-dropdown class=\"mr-3 w-edit-select-small\" *ngIf=\"filterPanelObject.enityMode\" appendTo=\"body\" [options]=\"entities\" [(ngModel)]=\"rule.entity\" optionLabel=\"name\" optionValue=\"value\" (ngModelChange)=\"onChange($event, rule)\"></p-dropdown>\r\n </ng-container>\r\n\r\n <ng-container *queryField=\"let rule; let fields=fields; let onChange=onChange; let getFields = getFields\">\r\n <span class=\"query-builder-field-width\">\r\n <p-dropdown class=\"mr-3 w-edit-select-small\" appendTo=\"body\" [options]=\"getFields(rule.entity)\" [(ngModel)]=\"rule.field\" optionLabel=\"name\" optionValue=\"value\" (ngModelChange)=\"onChange($event, rule)\"></p-dropdown>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryOperator=\"let rule; let operators=operators; let onChange=onChange\">\r\n <span class=\"query-builder-operator-width\">\r\n <p-dropdown class=\"mr-3 w-edit-select-small\" appendTo=\"body\" [(ngModel)]=\"rule.operator\" [options]=\"operators\" (ngModelChange)=\"onChange(rule)\"></p-dropdown>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; type: qbDataTypeEnum.Boolean.toString(); let onChange=onChange\">\r\n <w-toggle-button class=\"mr-3\" size=\"small\" [(ngModel)]=\"rule.value\" onLabel=\"True\" offLabel=\"False\" (ngModelChange)=\"onChange()\"></w-toggle-button>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; type: qbDataTypeEnum.Datetime.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width\">\r\n <w-edit-calendar class=\"field-gap\" appendTo=\"body\" size=\"small\" [showIcon]=\"false\" [(ngModel)]=\"rule.value\" (onChange)=\"onChange()\" [showTime]=\"true\" [showSeconds]=\"true\" [placeholder]=\"translationsObject.fieldsPlaceholders.datetime\" [displayInlineBlock]=\"true\"></w-edit-calendar>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Decimal.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width\">\r\n <p-inputNumber class=\"mr-3\" [(ngModel)]=\"rule.value\" inputId=\"minmax\" inputId=\"minmax\" mode=\"decimal\" [minFractionDigits]=\"2\" [maxFractionDigits]=\"5\" [min]=\"0\" [max]=\"100\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.decimal\"> </p-inputNumber>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let options=options; type: qbDataTypeEnum.List.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width\">\r\n <w-list-field [options]=\"options\" [(ngModel)]=\"rule.value\" [operator]=\"rule.operator\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.list\"></w-list-field>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Number.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width\">\r\n <p-inputNumber [useGrouping]=\"false\" inputStyleClass=\"flex flex-1\" styleClass=\"flex flex-1\" class=\"field-gap w-edit-input-number-small w-edit-input-number-small-height\" [(ngModel)]=\"rule.value\" inputId=\"minmax\" inputId=\"minmax\" [min]=\"0\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.number\"> </p-inputNumber>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Text.toString(); let onChange=onChange\">\r\n <input class=\"mr-3 query-builder-input-width w-edit-input-text-small-height wapp-input\" type=\"text\" pInputText [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.text\"/>\r\n </ng-container>\r\n\r\n </query-builder>\r\n\r\n <ng-container *ngIf=\"isAdvancedSearch && groupedQuery.rules.length==0\" >\r\n <ng-container *ngTemplateOutlet=\"noQueryData\"></ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template #noQueryData>\r\n <div class=\"flex justify-content-center flex-wrap card-container surface-50 mb-3\">\r\n <div class=\"flex align-items-center justify-content-center w-full h-4rem text-gray-900 border-round m-2\">\r\n {{translationsObject.noRulesLabel}}\r\n </div>\r\n </div>\r\n </ng-template>\r\n", styles: [".heading1{font-size:2.6666666667rem;line-height:3rem;font-weight:700}.heading2{font-size:2.3333333333rem;line-height:2.6666666667rem;font-weight:700}.heading3{font-size:2rem;line-height:2.3333333333rem;font-weight:700}.heading4{font-size:1.6666666667rem;line-height:2rem;font-weight:400}.heading5{font-size:1.5rem;line-height:1.8333333333rem;font-weight:600}.heading6{font-size:1.3333333333rem;line-height:1.6666666667rem;font-weight:400}.subtitle1,.w-tab-text,.w-panel-title-text,.w-sidebar-title-text{font-size:1.1666666667rem;line-height:1.3333333333rem;font-weight:600}.subtitle2,.w-table-th-text,.w-panel-subtitle-text,.w-input-small-label-text-typography,.w-input-small-label-text,.w-filter-panel-input-text-label,.w-input-small-label-disabled,.w-view-small-label-text-typography,.w-view-small-label-text,.w-button-small-text-label-text-typography,.w-button-small-text-label-text{font-size:1rem;line-height:1.3333333333rem;font-weight:600}.body,.w-table-td-text,.w-chip-text,.w-panel-content,.w-input-small-select-options-text,.w-input-small-placeholder-text-typography,.w-input-small-placeholder-text-disabled,.w-input-small-placeholder-text,:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input,:host ::ng-deep .w-edit-select-small .p-inputtext,::ng-deep .w-edit-input-text-small.p-inputtext,.w-view-small-value-text-typography,.w-view-small-value-text,.w-button-small-label-text-typography,.w-button-small-tertiary-label-text{font-size:1rem;line-height:1.3333333333rem;font-weight:400}.caption,.w-input-error-alert-text,.w-input-warning-alert-text,.w-input-success-alert-text{font-size:.6666666667rem;line-height:1rem;font-weight:400}.text846{color:#2e3134}.text700{color:#5f6368}.text500{color:#9aa0a6}.textWhite{color:#fff}.spacingXXS{padding:4px}.spacingXSM{padding:6px}.spacingXS{padding:8px}.spacingS{padding:12px}.spacingM{padding:16px}.spacingL{padding:20px}.spacingXL{padding:24px}.spacingXXL{padding:28px}.spacingXXXL{padding:32px}.focus,:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input:focus,:host ::ng-deep .w-edit-select-small .p-dropdown:not(.p-disabled).p-focus,.w-edit-input-text-small:focus{box-shadow:0 0 8px #00a6e980}.hover,:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input:hover,.w-edit-input-text-small:hover{border-radius:8px;border:1px solid #00b2eb}.input-generic-valid{border-radius:8px;border:1px solid #B3FFD3}.input-generic-valid-focus{border-radius:8px;border:1px solid #B3FFD3!important;box-shadow:0 0 8px #46ff9b80!important;padding-left:16px}.input-generic-warning{border-radius:8px;border:1px solid #FFECB8!important}.input-generic-warning-focus{border-radius:8px;border:1px solid #FFECB8!important;box-shadow:0 0 8px #ffcd4680!important;padding-left:16px}.input-generic-error-focus{border-radius:8px;border:1px solid #FFBDBD!important;box-shadow:0 0 8px #ff555580!important;padding-left:16px}.input-generic-error{border-radius:8px;border:1px solid #FFBDBD}.toggle-small-typography{font-size:12px;line-height:16px;font-weight:600}.w-button-small-tertiary-label-text,.w-button-small-text-label-text{color:#2e3134}.w-button-small-icon-text{font-size:12px}.w-control-button-small-label-text{font-size:12px;font-weight:600;line-height:16px}.w-control-button-x-small-icon-text{font-size:10px;font-weight:700}.w-control-button-small-icon-text{font-size:8px;font-weight:700}.w-button-medium-label-text-typography,.w-button-medium-tertiary-label-text{font-size:16px;font-weight:400;line-height:16px}.w-button-medium-tertiary-label-text{color:#2e3134}.w-button-medium-icon-text{font-size:16px}.w-control-button-medium-label-text{font-size:14px;font-weight:600;line-height:16px}.w-control-button-medium-icon-text{font-size:12px;font-weight:700}.w-button-large-label-text-typography,.w-button-large-tertiary-label-text{font-size:20px;font-weight:400;line-height:24px}.w-button-large-tertiary-label-text{color:#2e3134}.w-button-x-small-label-text{font-size:10px;font-weight:600;line-height:10px}.w-button-small-only-label-text{font-size:12px;font-weight:600;line-height:16px}.w-button-large-icon-text{font-size:24px}.w-view-small-label-text,.w-view-small-value-text{color:#2e3134}.w-input-no-label-height{height:36px}.w-input-disabled,:host ::ng-deep .w-edit-select-small .p-disabled{background-color:#f1f3f4;border-color:#e8eaed;opacity:1}.w-input-small-label-text,.w-filter-panel-input-text-label,.w-input-small-label-disabled{color:#2e3134}.w-input-small-label-disabled{color:#9aa0a6}.w-input-small-label-text-content{padding:12px 8px 8px 0;margin:0}.w-input-small-placeholder-text,:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input,:host ::ng-deep .w-edit-select-small .p-inputtext,::ng-deep .w-edit-input-text-small.p-inputtext{color:#2e3134}.w-input-small-placeholder-text-only-color,:host ::ng-deep .w-edit-select-small .p-dropdown .p-placeholder{color:#2e3134}.w-input-small-placeholder-text-disabled{color:#5f6368}.w-input-small-placeholder-text-disabled-only-color,:host ::ng-deep .w-edit-select-small .p-disabled .p-inputtext{color:#5f6368}.w-input-small-text-icon,.w-input-small-select-options-text{color:#2e3134}.w-input-medium-label-text-typography,.w-input-medium-label-text,.w-input-medium-label-disabled{font-size:14px;font-weight:600;line-height:16px}.w-input-medium-label-text,.w-input-medium-label-disabled{color:#2e3134}.w-input-medium-label-disabled{color:#9aa0a6}.w-input-medium-placeholder-text-typography,.w-input-medium-placeholder-text-disabled,.w-input-medium-placeholder-text{font-size:16px;font-weight:400;line-height:24px}.w-input-medium-placeholder-text,.w-input-medium-placeholder-text-only-color{color:#2e3134}.w-input-medium-placeholder-text-disabled,.w-input-medium-placeholder-text-disabled-only-color{color:#5f6368}.w-input-medium-text-icon{color:#2e3134}.w-input-medium-select-options-text,:host ::ng-deep .w-edit-select-small .p-dropdown-panel .p-dropdown-items .p-dropdown-item{font-size:16px;font-weight:400;line-height:24px;color:#2e3134}.w-input-success-alert-text{color:#00db5d;padding:8px 8px 0;margin-top:0}.w-input-warning-alert-text{color:#eeae00;padding:8px 8px 0;margin-top:0}.w-input-error-alert-text{color:#e50000;padding:8px 8px 0;margin-top:0}.w-input-alert-message-height{height:32px}.w-sidebar-title-text,.w-panel-title-text,.w-panel-subtitle-text{color:#2e3134}.w-panel-content{color:#5f6368}.w-tab-text,.w-chip-text{color:#2e3134}.w-badge-text{font-size:8px;font-weight:700;line-height:8px}.w-table-th-text{color:#2e3134}.w-table-td-text{color:#5f6368}.w-filter-panel-container-basic,.w-filter-panel-container-advanced{padding:16px 20px 20px;background-color:#fff;border-radius:8px;box-shadow:0 4px 8px #0000001a;margin-bottom:0}::ng-deep .w-filter-panel-basic .q-row{margin-top:6px!important;margin-bottom:6px!important;padding:0 0 0 6px!important}::ng-deep .w-filter-panel-container-advanced .q-row{padding:0!important;margin-bottom:8px!important}.field-gap{margin-right:8px}.button-gap{gap:16px}.w-filter-panel-switch-group-padding{padding-bottom:16px}::ng-deep .query-builder-style ul li{border:none!important;background:transparent!important;padding-left:0!important}::ng-deep .query-builder-style .q-connector:before{content:none!important}::ng-deep .query-builder-style .q-connector:after{border-width:0px!important}::ng-deep .query-builder-style .q-tree{padding:0!important}::ng-deep .query-builder-field-width .p-dropdown{width:20%}::ng-deep .query-builder-operator-width .p-dropdown{width:10%}.query-builder-input-width{width:40%}::ng-deep .query-builder-input-width .p-dropdown{width:40%}::ng-deep .query-builder-input-width .p-calendar{width:40%}::ng-deep .query-builder-input-width .w-edit-calendar-medium-display-block{width:40%}.w-filter-panel-container.query-builder-style{display:flex;flex-direction:column;justify-content:space-between;position:relative}.advanced-query-button-group{position:absolute;bottom:0;left:0;margin-bottom:-46px}.w-edit-input-text-small-height{height:32px}::ng-deep .w-edit-input-text-small.p-inputtext{border-radius:8px;border-width:1px;padding:7px 11px;border:1px solid #e8eaed}.w-edit-input-text-small:focus{border-radius:8px;border:1px solid #d6f2ff;padding-left:11px}:host ::ng-deep .w-edit-calendar-display-blok{width:40%}:host ::ng-deep .w-edit-select-small .p-dropdown{height:32px;border-width:1px;border-radius:8px;border-color:#e8eaed}:host ::ng-deep .w-edit-select-small .p-inputtext{padding:0 0 0 12px;align-self:center}:host ::ng-deep .w-edit-select-small .p-dropdown:not(.p-disabled):hover{border:1px solid #00b2eb}:host ::ng-deep .w-edit-select-small .p-dropdown:not(.p-disabled).p-focus{border:1px solid #d6f2ff}:host ::ng-deep .w-edit-select-small .p-dropdown .p-dropdown-trigger{width:auto;height:28px;padding-right:12px}:host ::ng-deep .w-entity-dropdown .p-dropdown .p-dropdown-trigger{width:auto;height:28px;padding-right:12px;padding-left:12px}:host ::ng-deep .w-edit-select-small .p-dropdown-panel{padding:8px}:host ::ng-deep .w-edit-select-small .p-dropdown-panel .p-dropdown-items{padding:0}:host ::ng-deep .w-edit-select-small .p-dropdown-panel .p-dropdown-items .p-dropdown-item{padding:8px;margin-bottom:4px}:host ::ng-deep .w-edit-select-small .p-dropdown-panel .p-dropdown-items .p-dropdown-item:hover{background:#d6f2ff;border-radius:8px}:host ::ng-deep .w-edit-select-small .p-dropdown-panel .p-dropdown-items .p-dropdown-item.p-highlight{background:#d6f2ff;border-radius:8px;color:#000}::ng-deep .select-disabled .p-dropdown .p-dropdown-trigger{display:none}:host ::ng-deep .w-edit-input-number-small-height .p-inputnumber .p-inputnumber-input{height:32px!important}.w-filter-panel-container-advanced .w-edit-input-number-small{width:40%!important}:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input{border-radius:8px;border-width:1px;padding:7px 11px!important;width:100%;border:1px solid #e8eaed}::-webkit-input-placeholder{color:#5f6368}::-moz-placeholder{color:#5f6368}:-ms-input-placeholder{color:#5f6368}:-moz-placeholder{color:#5f6368}:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input:focus{border-radius:8px;border:1px solid #d6f2ff;padding-left:11px}:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input::-moz-placeholder{color:#5f6368}:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input::-webkit-input-placeholder{color:#5f6368}:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input:-ms-input-placeholder{color:#5f6368}:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input:-moz-placeholder{color:#5f6368}:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input:disabled{background-color:#f1f3f4;border-color:#e8eaed;color:#5f6368;opacity:1}.w-filter-panel-input-text-label{padding:8px 6px 12px;margin:0}.w-filter-panel-basic-query-builder-input-width{width:100%!important}::ng-deep .w-filter-panel-basic-query-builder-input-width .p-dropdown{width:100%!important}::ng-deep .w-filter-panel-basic .q-tree-container{margin:8px 0 16px}::ng-deep .w-filter-panel-basic .q-row:not(:nth-child(3n)){display:flex!important;width:33.3333%;padding-right:64px!important}::ng-deep .w-filter-panel-basic .q-row:nth-child(3n){display:flex!important;width:33.3333%;padding-right:0!important}::ng-deep .w-filter-panel-basic .q-tree{margin:0!important;display:flex;flex-wrap:wrap;justify-content:flex-start}.w-filter-panel-boolean-label-width{width:25.5%!important}::ng-deep .q-rule{border:none!important}\n"] }]
406
+ args: [{ selector: 'w-filter-panel', template: "<!-- TODO: Intentar otra vez pasar los componentes a los de w- porque no se alinena y el w-edit-select no va bien en field. \r\n Ahora se conservan los de p-w con estilos. -->\r\n<div *ngIf=\"queryConfigReady\" class=\"w-filter-panel-styles\">\r\n <div *ngIf=\"!filterPanelObject.allowAdvancedSearch; else baiscAndAdvanced\">\r\n <div [ngClass]=\"{ 'w-filter-panel-container-advanced' : isAdvancedSearch, 'w-filter-panel-container-basic' : !isAdvancedSearch }\">\r\n <ng-container *ngTemplateOutlet=\"basic\"></ng-container>\r\n <div class=\"flex justify-content-end button-gap\">\r\n <w-button [label]=\"translationsObject.clearButtonLabel\" type=\"tertiary\" size=\"small\" (onClick)=\"onClearClicked()\"></w-button>\r\n <w-button [label]=\"translationsObject.searchButtonLabel\" size=\"small\" (onClick)=\"onSearchClicked()\"></w-button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <ng-template #baiscAndAdvanced>\r\n <div [ngClass]=\"{ 'w-filter-panel-container-advanced' : isAdvancedSearch, 'w-filter-panel-container-basic' : !isAdvancedSearch }\">\r\n <div *ngIf=\"!isAdvancedSearch; else advancedView\">\r\n <ng-container *ngTemplateOutlet=\"basic\"></ng-container>\r\n </div>\r\n <ng-template #advancedView>\r\n <ng-container *ngTemplateOutlet=\"advanced\"></ng-container>\r\n </ng-template>\r\n\r\n <div class=\"flex justify-content-end button-gap\" [class.pt-3]=\"isAdvancedSearch\">\r\n <w-button [label]=\"translationsObject.clearButtonLabel\" type=\"tertiary\" size=\"small\" (onClick)=\"onClearClicked()\"></w-button>\r\n <w-button [label]=\"translationsObject.searchButtonLabel\" size=\"small\" (onClick)=\"onSearchClicked()\" [loading]=\"dataIsLoadingSearchButton\"></w-button>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n\r\n <ng-template #basic>\r\n <div *ngIf=\"filterPanelObject.allowAdvancedSearch\" class=\"flex justify-content-end flex-wrap\">\r\n <w-button [label]=\"translationsObject.advancedSearchTabLabel\" type=\"text\" (onClick)=\"updateSearchType()\"></w-button>\r\n </div>\r\n <div class=\"w-filter-panel-basic query-builder-style fadein animation-duration-500\">\r\n <query-builder [formControl]='queryCtrl' [config]='basicQueryConfig' [allowRuleset]='filterPanelObject.allowRuleSet' [allowRuleset]=\"filterPanelObject.allowRuleSet\" [persistValueOnFieldChange]='persistValueOnFieldChange'>\r\n <ng-container *queryButtonGroup=\"let ruleset;\">\r\n </ng-container>\r\n\r\n <ng-container *queryRemoveButton=\"let rule; let removeRule=removeRule\">\r\n </ng-container>\r\n\r\n <ng-container *querySwitchGroup=\"let ruleset; let onChange=onChange\">\r\n </ng-container>\r\n\r\n <ng-container *queryEntity=\"let rule; let entities=entities; let onChange=onChange\">\r\n <p-dropdown [disabled]=\"true\" class=\" w-edit-select-small\" *ngIf=\"false\" appendTo=\"body\" [options]=\"entities\" [(ngModel)]=\"rule.entity\" optionLabel=\"name\" optionValue=\"value\" (ngModelChange)=\"onChange($event, rule)\"></p-dropdown>\r\n </ng-container>\r\n\r\n <ng-container *queryField=\"let rule; let fields=fields; let onChange=onChange; let getFields = getFields; let value=value; let name=name; let index=index\">\r\n <span appendTo=\"body\" class=\"w-4 text-left w-filter-panel-input-text-label\" [class.w-filter-panel-boolean-label-width]=\"fieldIsBoolean(rule.field, getFields(rule.entity))\" optionLabel=\"name\" optionValue=\"value\">{{ getQueryFieldName(rule.field, getFields(rule.entity))}}</span>\r\n </ng-container>\r\n\r\n <ng-container *queryOperator=\"let rule; let operators=operators; let onChange=onChange\">\r\n <span class=\"query-builder-operator-width\">\r\n <p-dropdown class=\" w-edit-select-small\" *ngIf=\"isAdvancedSearch\" appendTo=\"body\" [(ngModel)]=\"rule.operator\" [options]=\"operators\" (ngModelChange)=\"onChange(rule)\"></p-dropdown>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; type: qbDataTypeEnum.Boolean.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-operator-width\">\r\n <w-toggle-button size=\"small\" [(ngModel)]=\"rule.value\" onLabel=\"True\" offLabel=\"False\" (ngModelChange)=\"onChange()\"></w-toggle-button>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; type: qbDataTypeEnum.Datetime.toString(); let onChange=onChange\">\r\n <span class=\"w-edit-calendar\" style=\"width: 100%;\">\r\n <w-edit-calendar appendTo=\"body\" size=\"small\" [showIcon]=\"false\" [(ngModel)]=\"rule.value\" (onChange)=\"onChange()\" [showTime]=\"true\" [showSeconds]=\"true\" [placeholder]=\"translationsObject.fieldsPlaceholders.datetime\" [displayInlineBlock]=\"true\"></w-edit-calendar>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Decimal.toString(); let onChange=onChange\">\r\n <span class=\"w-filter-panel-basic-query-builder-input-width\">\r\n <p-inputNumber inputStyleClass=\"flex flex-1\" styleClass=\"flex flex-1\" class=\" w-filter-panel-basic-query-builder-input-width w-edit-input-number-small w-edit-input-number-small-height\" [(ngModel)]=\"rule.value\" inputId=\"minmax\" inputId=\"minmax\" mode=\"decimal\" [minFractionDigits]=\"2\" [maxFractionDigits]=\"5\" [min]=\"0\" [max]=\"100\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.decimal\"> </p-inputNumber>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let options=options; type: qbDataTypeEnum.List.toString(); let onChange=onChange\">\r\n <span class=\"w-filter-panel-basic-query-builder-input-width\">\r\n <p-dropdown class=\" w-edit-select-small\" appendTo=\"body\" [options]=\"options\" [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" optionLabel=\"name\" optionValue=\"value\" [placeholder]=\"translationsObject.fieldsPlaceholders.list\"></p-dropdown>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Number.toString(); let onChange=onChange\">\r\n <p-inputNumber [useGrouping]=\"false\" inputStyleClass=\"flex flex-1\" styleClass=\"flex flex-1\" class=\" w-filter-panel-basic-query-builder-input-width w-edit-input-number-small w-edit-input-number-small-height\" [(ngModel)]=\"rule.value\" inputId=\"minmax\" inputId=\"minmax\" [min]=\"0\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.number\"> </p-inputNumber>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Text.toString(); let onChange=onChange\">\r\n <input class=\" w-filter-panel-basic-query-builder-input-width w-edit-input-text-small-height w-edit-input-text-small\" type=\"text\" pInputText [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.text\"/>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let options=options; type: qbDataTypeEnum.List.toString(); let onChange=onChange\">\r\n <span class=\"w-filter-panel-basic-query-builder-input-width\">\r\n <p-multiSelect [appendTo]=\"'body'\" [options]=\"options\" [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" optionLabel=\"name\" optionValue=\"value\" display=\"chip\" [placeholder]=\"translationsObject.fieldsPlaceholders.list\"></p-multiSelect>\r\n </span>\r\n </ng-container>\r\n <ng-container *queryInput=\"let rule; let options=options; type: qbDataTypeEnum.Address.toString(); let onChange=onChange\">\r\n <w-address-field [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" [operator]=\"rule.operator\" [segmentationApiUrl]=\"segmentationApiUrl\" [segmentationApiToken]=\"segmentationToken\"></w-address-field>\r\n </ng-container>\r\n </query-builder>\r\n </div>\r\n\r\n <ng-container *ngIf=\"!isAdvancedSearch && basicQuery.rules.length==0\" >\r\n <ng-container *ngTemplateOutlet=\"noQueryData\"></ng-container>\r\n </ng-container>\r\n\r\n </ng-template>\r\n\r\n <ng-template #advanced>\r\n <div [class.query-builder-style]=\"!filterPanelObject.allowRuleSet\" class=\"w-filter-panel-container fadein animation-duration-500\">\r\n <div *ngIf=\"filterPanelObject.allowRuleSet\" class=\"flex justify-content-end flex-wrap\">\r\n <w-button class=\"mb-2\" [label]=\"translationsObject.basicSearchTabLabel\" type=\"text\" (onClick)=\"updateSearchType()\"></w-button>\r\n </div>\r\n <query-builder [formControl]='advancedQueryCtrl' [config]='advancedQueryConfig' [allowRuleset]='filterPanelObject.allowRuleSet' [allowCollapse]='filterPanelObject.allowColapse' [allowRuleset]=\"filterPanelObject.allowRuleSet\" [persistValueOnFieldChange]='persistValueOnFieldChange'>\r\n <div *ngIf=\"filterPanelObject.allowRuleSet; else noRuleSet\">\r\n <ng-container *queryButtonGroup=\"let ruleset; let addRule=addRule; let addRuleSet=addRuleSet; let removeRuleSet=removeRuleSet\">\r\n <w-button class=\"mr-2\" [label]=\"translationsObject.advancedSearch.addRuleButtonLabel\" type=\"secondary\" size=\"small\" (onClick)=\"addRule()\"></w-button>\r\n <w-button class=\"mr-2\" [label]=\"translationsObject.advancedSearch.addRuleSetButtonLabel\" type=\"secondary\" icon=\"pi pi-plus\" size=\"small\" *ngIf=\"addRuleSet\" (onClick)=\"addRuleSet()\"></w-button>\r\n <w-button class=\"mr-2\" [label]=\"translationsObject.advancedSearch.removeRuleSetButtonLabel\" type=\"tertiary\" icon=\"pi pi-minus\" size=\"small\" *ngIf=\"removeRuleSet\" (onClick)=\"removeRuleSet()\"></w-button>\r\n </ng-container>\r\n </div>\r\n\r\n <ng-template #noRuleSet>\r\n <ng-container *queryButtonGroup=\"let ruleset; let addRule=addRule; let addRuleSet=addRuleSet; let removeRuleSet=removeRuleSet\">\r\n <div class=\"flex justify-content-end flex-wrap\">\r\n <w-button [label]=\"translationsObject.basicSearchTabLabel\" type=\"text\" (onClick)=\"updateSearchType()\"></w-button>\r\n </div>\r\n <span class=\"advanced-query-button-group gap-3\">\r\n <w-button [label]=\"translationsObject.advancedSearch.addRuleButtonLabel\" type=\"secondary\" size=\"small\" (onClick)=\"addRule()\"></w-button>\r\n <w-button [label]=\"translationsObject.advancedSearch.addRuleSetButtonLabel\" type=\"secondary\" icon=\"pi pi-plus\" size=\"small\" *ngIf=\"addRuleSet\" (onClick)=\"addRuleSet()\"></w-button>\r\n <w-button [label]=\"translationsObject.advancedSearch.removeRuleSetButtonLabel\" type=\"tertiary\" icon=\"pi pi-minus\" size=\"small\" *ngIf=\"removeRuleSet\" (onClick)=\"removeRuleSet()\"></w-button>\r\n </span>\r\n </ng-container>\r\n </ng-template>\r\n <ng-container *queryArrowIcon>\r\n <button pButton pRipple type=\"button\" icon=\"pi pi-angle-right\" class=\"p-button-rounded p-button-text\"></button>\r\n </ng-container>\r\n\r\n <ng-container *queryRemoveButton=\"let rule; let removeRule=removeRule\">\r\n <w-button class=\"\" label=\"\" size=\"small\" type=\"tertiary\" icon=\"pi pi-times\" (onClick)=\"removeRule(rule)\"></w-button>\r\n </ng-container>\r\n\r\n <ng-container *querySwitchGroup=\"let ruleset; let onChange=onChange\">\r\n <div *ngIf=\"ruleset\" class=\"w-filter-panel-switch-group-padding\">\r\n <w-select-button *ngIf=\"filterPanelObject.allowLogicalRule\" [stateOptions]=\"[{label: 'And', value: 'and'}, {label: 'Or', value: 'or'}]\"\r\n [(ngModel)]=\"ruleset.condition\"\r\n [size]=\"'small'\"\r\n (value)=\"ruleset.condition = $event\">\r\n </w-select-button>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *queryEntity=\"let rule; let entities=entities; let onChange=onChange\">\r\n <p-dropdown *ngIf=\"filterPanelObject.enityMode\" class=\"field-gap w-edit-select-small w-entity-dropdown\" appendTo=\"body\" [options]=\"entities\" [(ngModel)]=\"rule.entity\" optionLabel=\"name\" optionValue=\"value\" (ngModelChange)=\"onChange($event, rule)\"></p-dropdown>\r\n </ng-container>\r\n\r\n <ng-container *queryField=\"let rule; let fields=fields; let onChange=onChange; let getFields = getFields\">\r\n <span class=\"query-builder-field-width\">\r\n <p-dropdown class=\"field-gap w-edit-select-small\" appendTo=\"body\" [options]=\"getFields(rule.entity)\" [(ngModel)]=\"rule.field\" optionLabel=\"name\" optionValue=\"value\" (ngModelChange)=\"onChange($event, rule)\"></p-dropdown>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryOperator=\"let rule; let operators=operators; let onChange=onChange\">\r\n <span class=\"query-builder-operator-width\">\r\n <p-dropdown class=\"field-gap w-edit-select-small\" appendTo=\"body\" [(ngModel)]=\"rule.operator\" [options]=\"operators\" (ngModelChange)=\"onChange(rule)\"></p-dropdown>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; type: qbDataTypeEnum.Boolean.toString(); let onChange=onChange\">\r\n <w-toggle-button class=\"field-gap toggle-button-align\" size=\"small\" [(ngModel)]=\"rule.value\" onLabel=\"True\" offLabel=\"False\" (ngModelChange)=\"onChange()\"></w-toggle-button>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; type: qbDataTypeEnum.Datetime.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width\">\r\n <w-edit-calendar class=\"field-gap\" appendTo=\"body\" size=\"small\" [showIcon]=\"false\" [(ngModel)]=\"rule.value\" (onChange)=\"onChange()\" [showTime]=\"true\" [showSeconds]=\"true\" [placeholder]=\"translationsObject.fieldsPlaceholders.datetime\" [displayInlineBlock]=\"true\"></w-edit-calendar>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Decimal.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width\">\r\n <p-inputNumber inputStyleClass=\"flex flex-1\" styleClass=\"flex flex-1\" class=\"field-gap w-edit-input-number-small w-edit-input-number-small-height\" [(ngModel)]=\"rule.value\" inputId=\"minmax\" inputId=\"minmax\" mode=\"decimal\" [minFractionDigits]=\"2\" [maxFractionDigits]=\"5\" [min]=\"0\" [max]=\"100\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.decimal\"> </p-inputNumber>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let options=options; type: qbDataTypeEnum.List.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width\">\r\n <p-dropdown class=\"field-gap w-edit-select-small\" appendTo=\"body\" [options]=\"options\" [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" optionLabel=\"name\" optionValue=\"value\" [placeholder]=\"translationsObject.fieldsPlaceholders.list\"></p-dropdown>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let options=options; type: qbDataTypeEnum.List.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width field-gap\">\r\n <w-list-field [options]=\"options\" [(ngModel)]=\"rule.value\" [operator]=\"rule.operator\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.list\"></w-list-field>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Number.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width\">\r\n <p-inputNumber [useGrouping]=\"false\" inputStyleClass=\"flex flex-1\" styleClass=\"flex flex-1\" class=\"field-gap w-edit-input-number-small w-edit-input-number-small-height\" [(ngModel)]=\"rule.value\" inputId=\"minmax\" inputId=\"minmax\" [min]=\"0\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.number\"> </p-inputNumber>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Text.toString(); let onChange=onChange\">\r\n <input class=\"field-gap query-builder-input-width w-edit-input-text-small-height w-edit-input-text-small\" type=\"text\" pInputText [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.text\"/>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let options=options; type: qbDataTypeEnum.Address.toString(); let onChange=onChange\">\r\n <w-address-field [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" [operator]=\"rule.operator\" [segmentationApiUrl]=\"segmentationApiUrl\" [segmentationApiToken]=\"segmentationToken\" [selectPlaceholder]=\"translationsObject.fieldsPlaceholders.list\"></w-address-field>\r\n </ng-container>\r\n </query-builder>\r\n\r\n <ng-container *ngIf=\"isAdvancedSearch && advancedQuery.rules.length==0\" >\r\n <ng-container *ngTemplateOutlet=\"noQueryData\"></ng-container>\r\n </ng-container>\r\n\r\n <!-- Grouped filter -->\r\n <div *ngIf=\"filterPanelObject.allowGrouped\">\r\n <div class=\"py-5\">\r\n <w-view-card-title-text [cardTitle]=\"translationsObject.groupedFilterTitle\"></w-view-card-title-text>\r\n </div>\r\n\r\n <query-builder [formControl]='groupedQueryCtrl' [config]='advancedQueryConfig' [allowRuleset]='filterPanelObject.allowRuleSet' [allowCollapse]='filterPanelObject.allowColapse' [allowRuleset]=\"filterPanelObject.allowRuleSet\" [persistValueOnFieldChange]='persistValueOnFieldChange'>\r\n <ng-container *queryButtonGroup=\"let ruleset; let addRule=addRule; let addRuleSet=addRuleSet; let removeRuleSet=removeRuleSet\">\r\n <div class=\"flex gap-3 mb-3\">\r\n <w-button [label]=\"translationsObject.advancedSearch.addRuleButtonLabel\" type=\"secondary\" size=\"small\" (onClick)=\"addRule()\"></w-button>\r\n <w-button [label]=\"translationsObject.advancedSearch.addRuleSetButtonLabel\" type=\"secondary\" icon=\"pi pi-plus\" size=\"small\" *ngIf=\"addRuleSet\" (onClick)=\"addRuleSet()\"></w-button>\r\n <w-button [label]=\"translationsObject.advancedSearch.removeRuleSetButtonLabel\" type=\"tertiary\" icon=\"pi pi-minus\" size=\"small\" *ngIf=\"removeRuleSet\" (onClick)=\"removeRuleSet()\"></w-button>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *queryArrowIcon>\r\n <button pButton pRipple type=\"button\" icon=\"pi pi-angle-right\" class=\"p-button-rounded p-button-text\"></button>\r\n </ng-container>\r\n\r\n <ng-container *queryRemoveButton=\"let rule; let removeRule=removeRule\">\r\n <w-button class=\"\" label=\"\" size=\"small\" type=\"tertiary\" icon=\"pi pi-times\" (onClick)=\"removeRule(rule)\"></w-button>\r\n </ng-container>\r\n\r\n <ng-container *querySwitchGroup=\"let ruleset; let onChange=onChange\">\r\n <div *ngIf=\"ruleset\">\r\n <w-select-button *ngIf=\"filterPanelObject.allowLogicalRule\" [stateOptions]=\"[{label: 'And', value: 'and'}, {label: 'Or', value: 'or'}]\"\r\n [(ngModel)]=\"ruleset.condition\"\r\n [size]=\"'small'\"\r\n (value)=\"ruleset.condition = $event\">\r\n </w-select-button>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *queryEntity=\"let rule; let entities=entities; let onChange=onChange\">\r\n <p-dropdown class=\"mr-3 w-edit-select-small\" *ngIf=\"filterPanelObject.enityMode\" appendTo=\"body\" [options]=\"entities\" [(ngModel)]=\"rule.entity\" optionLabel=\"name\" optionValue=\"value\" (ngModelChange)=\"onChange($event, rule)\"></p-dropdown>\r\n </ng-container>\r\n\r\n <ng-container *queryField=\"let rule; let fields=fields; let onChange=onChange; let getFields = getFields\">\r\n <span class=\"query-builder-field-width\">\r\n <p-dropdown class=\"mr-3 w-edit-select-small\" appendTo=\"body\" [options]=\"getFields(rule.entity)\" [(ngModel)]=\"rule.field\" optionLabel=\"name\" optionValue=\"value\" (ngModelChange)=\"onChange($event, rule)\"></p-dropdown>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryOperator=\"let rule; let operators=operators; let onChange=onChange\">\r\n <span class=\"query-builder-operator-width\">\r\n <p-dropdown class=\"mr-3 w-edit-select-small\" appendTo=\"body\" [(ngModel)]=\"rule.operator\" [options]=\"operators\" (ngModelChange)=\"onChange(rule)\"></p-dropdown>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; type: qbDataTypeEnum.Boolean.toString(); let onChange=onChange\">\r\n <w-toggle-button class=\"mr-3\" size=\"small\" [(ngModel)]=\"rule.value\" onLabel=\"True\" offLabel=\"False\" (ngModelChange)=\"onChange()\"></w-toggle-button>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; type: qbDataTypeEnum.Datetime.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width\">\r\n <w-edit-calendar class=\"field-gap\" appendTo=\"body\" size=\"small\" [showIcon]=\"false\" [(ngModel)]=\"rule.value\" (onChange)=\"onChange()\" [showTime]=\"true\" [showSeconds]=\"true\" [placeholder]=\"translationsObject.fieldsPlaceholders.datetime\" [displayInlineBlock]=\"true\"></w-edit-calendar>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Decimal.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width\">\r\n <p-inputNumber class=\"mr-3\" [(ngModel)]=\"rule.value\" inputId=\"minmax\" inputId=\"minmax\" mode=\"decimal\" [minFractionDigits]=\"2\" [maxFractionDigits]=\"5\" [min]=\"0\" [max]=\"100\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.decimal\"> </p-inputNumber>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let options=options; type: qbDataTypeEnum.List.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width\">\r\n <w-list-field [options]=\"options\" [(ngModel)]=\"rule.value\" [operator]=\"rule.operator\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.list\"></w-list-field>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Number.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width\">\r\n <p-inputNumber [useGrouping]=\"false\" inputStyleClass=\"flex flex-1\" styleClass=\"flex flex-1\" class=\"field-gap w-edit-input-number-small w-edit-input-number-small-height\" [(ngModel)]=\"rule.value\" inputId=\"minmax\" inputId=\"minmax\" [min]=\"0\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.number\"> </p-inputNumber>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Text.toString(); let onChange=onChange\">\r\n <input class=\"mr-3 query-builder-input-width w-edit-input-text-small-height wapp-input\" type=\"text\" pInputText [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.text\"/>\r\n </ng-container>\r\n\r\n </query-builder>\r\n\r\n <ng-container *ngIf=\"isAdvancedSearch && groupedQuery.rules.length==0\" >\r\n <ng-container *ngTemplateOutlet=\"noQueryData\"></ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template #noQueryData>\r\n <div class=\"flex justify-content-center flex-wrap card-container surface-50 mb-3\">\r\n <div class=\"flex align-items-center justify-content-center w-full h-4rem text-gray-900 border-round m-2\">\r\n {{translationsObject.noRulesLabel}}\r\n </div>\r\n </div>\r\n </ng-template>\r\n", styles: [".heading1{font-size:2.6666666667rem;line-height:3rem;font-weight:700}.heading2{font-size:2.3333333333rem;line-height:2.6666666667rem;font-weight:700}.heading3{font-size:2rem;line-height:2.3333333333rem;font-weight:700}.heading4{font-size:1.6666666667rem;line-height:2rem;font-weight:400}.heading5{font-size:1.5rem;line-height:1.8333333333rem;font-weight:600}.heading6{font-size:1.3333333333rem;line-height:1.6666666667rem;font-weight:400}.subtitle1,.w-tab-text,.w-panel-title-text,.w-sidebar-title-text{font-size:1.1666666667rem;line-height:1.3333333333rem;font-weight:600}.subtitle2,.w-table-th-text,.w-panel-subtitle-text,.w-input-small-label-text-typography,.w-input-small-label-text,.w-filter-panel-input-text-label,.w-input-small-label-disabled,.w-view-small-label-text-typography,.w-view-small-label-text,.w-button-small-text-label-text-typography,.w-button-small-text-label-text{font-size:1rem;line-height:1.3333333333rem;font-weight:600}.body,.w-table-td-text,.w-chip-text,.w-panel-content,.w-input-small-select-options-text,.w-input-small-placeholder-text-typography,.w-input-small-placeholder-text-disabled,.w-input-small-placeholder-text,:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input,:host ::ng-deep .w-edit-select-small .p-inputtext,::ng-deep .w-edit-input-text-small.p-inputtext,.w-view-small-value-text-typography,.w-view-small-value-text,.w-button-small-label-text-typography,.w-button-small-tertiary-label-text{font-size:1rem;line-height:1.3333333333rem;font-weight:400}.caption,.w-input-error-alert-text,.w-input-warning-alert-text,.w-input-success-alert-text{font-size:.6666666667rem;line-height:1rem;font-weight:400}.text846{color:#2e3134}.text700{color:#5f6368}.text500{color:#9aa0a6}.textWhite{color:#fff}.spacingXXS{padding:4px}.spacingXSM{padding:6px}.spacingXS{padding:8px}.spacingS{padding:12px}.spacingM{padding:16px}.spacingL{padding:20px}.spacingXL{padding:24px}.spacingXXL{padding:28px}.spacingXXXL{padding:32px}.focus,:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input:focus,:host ::ng-deep .w-edit-select-small .p-dropdown:not(.p-disabled).p-focus,.w-edit-input-text-small:focus{box-shadow:0 0 8px #00a6e980}.hover,:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input:hover,.w-edit-input-text-small:hover{border-radius:8px;border:1px solid #00b2eb}.input-generic-valid{border-radius:8px;border:1px solid #B3FFD3}.input-generic-valid-focus{border-radius:8px;border:1px solid #B3FFD3!important;box-shadow:0 0 8px #46ff9b80!important;padding-left:16px}.input-generic-warning{border-radius:8px;border:1px solid #FFECB8!important}.input-generic-warning-focus{border-radius:8px;border:1px solid #FFECB8!important;box-shadow:0 0 8px #ffcd4680!important;padding-left:16px}.input-generic-error-focus{border-radius:8px;border:1px solid #FFBDBD!important;box-shadow:0 0 8px #ff555580!important;padding-left:16px}.input-generic-error{border-radius:8px;border:1px solid #FFBDBD}.toggle-small-typography{font-size:12px;line-height:16px;font-weight:600}.w-button-small-tertiary-label-text,.w-button-small-text-label-text{color:#2e3134}.w-button-small-icon-text{font-size:12px}.w-control-button-small-label-text{font-size:12px;font-weight:600;line-height:16px}.w-control-button-x-small-icon-text{font-size:10px;font-weight:700}.w-control-button-small-icon-text{font-size:8px;font-weight:700}.w-button-medium-label-text-typography,.w-button-medium-tertiary-label-text{font-size:16px;font-weight:400;line-height:16px}.w-button-medium-tertiary-label-text{color:#2e3134}.w-button-medium-icon-text{font-size:16px}.w-control-button-medium-label-text{font-size:14px;font-weight:600;line-height:16px}.w-control-button-medium-icon-text{font-size:12px;font-weight:700}.w-button-large-label-text-typography,.w-button-large-tertiary-label-text{font-size:20px;font-weight:400;line-height:24px}.w-button-large-tertiary-label-text{color:#2e3134}.w-button-x-small-label-text{font-size:10px;font-weight:600;line-height:10px}.w-button-small-only-label-text{font-size:12px;font-weight:600;line-height:16px}.w-button-large-icon-text{font-size:24px}.w-view-small-label-text,.w-view-small-value-text{color:#2e3134}.w-input-no-label-height{height:36px}.w-input-disabled,:host ::ng-deep .w-edit-select-small .p-disabled{background-color:#f1f3f4;border-color:#e8eaed;opacity:1}.w-input-small-label-text,.w-filter-panel-input-text-label,.w-input-small-label-disabled{color:#2e3134}.w-input-small-label-disabled{color:#9aa0a6}.w-input-small-label-text-content{padding:12px 8px 8px 0;margin:0}.w-input-small-placeholder-text,:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input,:host ::ng-deep .w-edit-select-small .p-inputtext,::ng-deep .w-edit-input-text-small.p-inputtext{color:#2e3134}.w-input-small-placeholder-text-only-color,:host ::ng-deep .w-edit-select-small .p-dropdown .p-placeholder{color:#2e3134}.w-input-small-placeholder-text-disabled{color:#5f6368}.w-input-small-placeholder-text-disabled-only-color,:host ::ng-deep .w-edit-select-small .p-disabled .p-inputtext{color:#5f6368}.w-input-small-text-icon,.w-input-small-select-options-text{color:#2e3134}.w-input-medium-label-text-typography,.w-input-medium-label-text,.w-input-medium-label-disabled{font-size:14px;font-weight:600;line-height:16px}.w-input-medium-label-text,.w-input-medium-label-disabled{color:#2e3134}.w-input-medium-label-disabled{color:#9aa0a6}.w-input-medium-placeholder-text-typography,.w-input-medium-placeholder-text-disabled,.w-input-medium-placeholder-text{font-size:16px;font-weight:400;line-height:24px}.w-input-medium-placeholder-text,.w-input-medium-placeholder-text-only-color{color:#2e3134}.w-input-medium-placeholder-text-disabled,.w-input-medium-placeholder-text-disabled-only-color{color:#5f6368}.w-input-medium-text-icon{color:#2e3134}.w-input-medium-select-options-text,:host ::ng-deep .w-edit-select-small .p-dropdown-panel .p-dropdown-items .p-dropdown-item{font-size:16px;font-weight:400;line-height:24px;color:#2e3134}.w-input-success-alert-text{color:#00db5d;padding:8px 8px 0;margin-top:0}.w-input-warning-alert-text{color:#eeae00;padding:8px 8px 0;margin-top:0}.w-input-error-alert-text{color:#e50000;padding:8px 8px 0;margin-top:0}.w-input-alert-message-height{height:32px}.w-sidebar-title-text,.w-panel-title-text,.w-panel-subtitle-text{color:#2e3134}.w-panel-content{color:#5f6368}.w-tab-text,.w-chip-text{color:#2e3134}.w-badge-text{font-size:8px;font-weight:700;line-height:8px}.w-table-th-text{color:#2e3134}.w-table-td-text{color:#5f6368}.w-filter-panel-container-basic,.w-filter-panel-container-advanced{padding:16px 20px 20px;background-color:#fff;border-radius:8px;box-shadow:0 4px 8px #0000001a;margin-bottom:0}::ng-deep .w-filter-panel-basic .q-row{margin-top:6px!important;margin-bottom:6px!important;padding:0 0 0 6px!important}::ng-deep .w-filter-panel-container-advanced .q-row{padding:0!important;margin-bottom:8px!important}.field-gap{margin-right:8px}.button-gap{gap:16px}.w-filter-panel-switch-group-padding{padding-bottom:16px}::ng-deep .query-builder-style ul li{border:none!important;background:transparent!important;padding-left:0!important}::ng-deep .query-builder-style .q-connector:before{content:none!important}::ng-deep .query-builder-style .q-connector:after{border-width:0px!important}::ng-deep .query-builder-style .q-tree{padding:0!important}::ng-deep .query-builder-field-width .p-dropdown{width:20%}::ng-deep .query-builder-operator-width .p-dropdown{width:10%}.query-builder-input-width{width:40%}::ng-deep .query-builder-input-width .p-dropdown{width:40%}::ng-deep .query-builder-input-width .p-calendar{width:40%}::ng-deep .query-builder-input-width .w-edit-calendar-medium-display-block{width:40%}::ng-deep .w-edit-calendar .w-edit-calendar-styles{width:100%!important}.w-filter-panel-container.query-builder-style{display:flex;flex-direction:column;justify-content:space-between;position:relative}.advanced-query-button-group{position:absolute;bottom:0;left:0;margin-bottom:-46px}.w-edit-input-text-small-height{height:32px}::ng-deep .w-edit-input-text-small.p-inputtext{border-radius:8px;border-width:1px;padding:7px 11px;border:1px solid #e8eaed}.w-edit-input-text-small:focus{border-radius:8px;border:1px solid #d6f2ff;padding-left:11px}:host ::ng-deep .w-edit-calendar-display-blok{width:40%}:host ::ng-deep .w-edit-select-small .p-dropdown{height:32px;border-width:1px;border-radius:8px;border-color:#e8eaed}:host ::ng-deep .w-edit-select-small .p-inputtext{padding:0 0 0 12px;align-self:center}:host ::ng-deep .w-edit-select-small .p-dropdown:not(.p-disabled):hover{border:1px solid #00b2eb}:host ::ng-deep .w-edit-select-small .p-dropdown:not(.p-disabled).p-focus{border:1px solid #d6f2ff}:host ::ng-deep .w-edit-select-small .p-dropdown .p-dropdown-trigger{width:auto;height:28px;padding-right:12px}:host ::ng-deep .w-entity-dropdown .p-dropdown .p-dropdown-trigger{width:auto;height:28px;padding-right:12px;padding-left:12px}:host ::ng-deep .w-edit-select-small .p-dropdown-panel{padding:8px}:host ::ng-deep .w-edit-select-small .p-dropdown-panel .p-dropdown-items{padding:0}:host ::ng-deep .w-edit-select-small .p-dropdown-panel .p-dropdown-items .p-dropdown-item{padding:8px;margin-bottom:4px}:host ::ng-deep .w-edit-select-small .p-dropdown-panel .p-dropdown-items .p-dropdown-item:hover{background:#d6f2ff;border-radius:8px}:host ::ng-deep .w-edit-select-small .p-dropdown-panel .p-dropdown-items .p-dropdown-item.p-highlight{background:#d6f2ff;border-radius:8px;color:#000}::ng-deep .select-disabled .p-dropdown .p-dropdown-trigger{display:none}:host ::ng-deep .w-edit-input-number-small-height .p-inputnumber .p-inputnumber-input{height:32px!important}.w-filter-panel-container-advanced .w-edit-input-number-small{width:40%!important}:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input{border-radius:8px;border-width:1px;padding:7px 11px!important;width:100%;border:1px solid #e8eaed}::-webkit-input-placeholder{color:#5f6368}::-moz-placeholder{color:#5f6368}:-ms-input-placeholder{color:#5f6368}:-moz-placeholder{color:#5f6368}:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input:focus{border-radius:8px;border:1px solid #d6f2ff;padding-left:11px}:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input::-moz-placeholder{color:#5f6368}:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input::-webkit-input-placeholder{color:#5f6368}:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input:-ms-input-placeholder{color:#5f6368}:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input:-moz-placeholder{color:#5f6368}:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input:disabled{background-color:#f1f3f4;border-color:#e8eaed;color:#5f6368;opacity:1}.w-filter-panel-input-text-label{padding:8px 6px 12px;margin:0}.w-filter-panel-basic-query-builder-input-width{width:100%!important}::ng-deep .w-filter-panel-basic-query-builder-input-width .p-dropdown{width:100%!important}::ng-deep .w-filter-panel-basic .q-tree-container{margin:8px 0 16px}::ng-deep .w-filter-panel-basic .q-row:not(:nth-child(3n)){display:flex!important;width:33.3333%;padding-right:64px!important}::ng-deep .w-filter-panel-basic .q-row:nth-child(3n){display:flex!important;width:33.3333%;padding-right:0!important}::ng-deep .w-filter-panel-basic .q-tree{margin:0!important;display:flex;flex-wrap:wrap;justify-content:flex-start}.w-filter-panel-boolean-label-width{width:25.5%!important}::ng-deep .q-rule{border:none!important}\n"] }]
407
407
  }], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i2.ApiService }, { type: i3.SessionStorageService }]; }, propDecorators: { authorizationApiUrl: [{
408
408
  type: Input,
409
409
  args: ['apiUrl']
@@ -444,4 +444,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
444
444
  type: Output,
445
445
  args: ['lastQuery']
446
446
  }] } });
447
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidy1maWx0ZXItcGFuZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvd2FwcC1jb21wb25lbnRzL3NyYy9saWIvbWlzYy93LWZpbHRlci1wYW5lbC93LWZpbHRlci1wYW5lbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy93YXBwLWNvbXBvbmVudHMvc3JjL2xpYi9taXNjL3ctZmlsdGVyLXBhbmVsL3ctZmlsdGVyLXBhbmVsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFL0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBSWpFLE9BQU8sRUFBRSxlQUFlLEVBQWdCLE1BQU0sc0RBQXNELENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBWXJHLE1BQU0sT0FBTyxxQkFBcUI7SUFxRmhDLFlBQ1UsV0FBd0IsRUFDeEIsVUFBc0IsRUFDdEIsY0FBcUM7UUFGckMsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixtQkFBYyxHQUFkLGNBQWMsQ0FBdUI7UUFwRnhDLDhCQUF5QixHQUFZLEtBQUssQ0FBQztRQUVsRCxxQkFBZ0IsR0FBWSxLQUFLLENBQUM7UUFDbEMscUJBQWdCLEdBQVksS0FBSyxDQUFDO1FBQ2xDLG1CQUFjLEdBQUcsY0FBYyxDQUFDO1FBQ2hDLGdCQUFXLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUc1QyxlQUFVLEdBQVE7WUFDaEIsU0FBUyxFQUFFLEtBQUs7WUFDaEIsS0FBSyxFQUFFLEVBQUU7U0FDVixDQUFDO1FBQ0YsaUJBQVksR0FBUTtZQUNsQixTQUFTLEVBQUUsS0FBSztZQUNo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QyxZQUFZO3NCQUFuQyxNQUFNO3VCQUFDLGNBQWM7Z0JBQ0QsU0FBUztzQkFBN0IsTUFBTTt1QkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFFCRGF0YVR5cGVFbnVtIH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZGVscy9lbnVtcy5tb2RlbCc7XHJcbmltcG9ydCB7IFFiUGFuZWxGaWx0ZXIgfSBmcm9tICcuLi8uLi9zaGFyZWQvbW9kZWxzL2ZpbHRlci1wYW5lbC9xYi1wYW5lbC1maWx0ZXIubW9kZWwnO1xyXG5pbXBvcnQgeyBFbnRpdHksIEVudGl0eU1hcCwgRmllbGQsIEZpZWxkTWFwLCBRdWVyeUJ1aWxkZXJDb25maWcsIFJ1bGUsIFJ1bGVTZXQgfSBmcm9tICcuLi8uLi9zaGFyZWQvbW9kZWxzL2ZpbHRlci1wYW5lbC9maWVsZC5tb2RlbCc7XHJcbmltcG9ydCB7IEZpbHRlclBhbmVsVHJhbnNsYXRpb25zIH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZGVscy9maWx0ZXItcGFuZWwvZmlsdGVyLXBhbmVsLXRyYW5zbGF0aW9ucy5tb2RlbCc7XHJcbmltcG9ydCB7IFF1ZXJ5UmVzdWx0VHlwZSwgUXVlcnlSZXN1bHRzIH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZGVscy9maWx0ZXItcGFuZWwvcXVlcnktcmVzdWx0cy5tb2RlbCc7XHJcbmltcG9ydCB7IEZpbHRlckZpZWxkIH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZGVscy9maWx0ZXItcGFuZWwvZmlsdGVyLWZpZWxkLm1vZGVscyc7XHJcbmltcG9ydCB7IFFiRmlsdGVyRW50aXR5IH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZGVscy9maWx0ZXItcGFuZWwvcWItZmlsdGVyLWVudGl0eS5tb2RlbCc7XHJcbmltcG9ydCB7IEFwaVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvc2VydmljZS9hcGkvYXBpLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdG9yZWRGaWx0ZXJQYW5lbFF1ZXJ5IH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZGVscy9zdG9yZWQtZmlsdGVyLXBhbmVsLXF1ZXJ5Lm1vZGVsJztcclxuaW1wb3J0IHsgU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3NlcnZpY2VzL3Nlc3Npb24tc3RvcmFnZS5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndy1maWx0ZXItcGFuZWwnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi93LWZpbHRlci1wYW5lbC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdy1maWx0ZXItcGFuZWwuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgV0ZpbHRlclBhbmVsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBwdWJsaWMgcXVlcnlDdHJsITogRm9ybUNvbnRyb2w7XHJcbiAgcHVibGljIGFkdmFuY2VkUXVlcnlDdHJsITogRm9ybUNvbnRyb2w7XHJcbiAgcHVibGljIGdyb3VwZWRRdWVyeUN0cmwhOiBGb3JtQ29udHJvbDtcclxuICBwdWJsaWMgcGVyc2lzdFZhbHVlT25GaWVsZENoYW5nZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIFxyXG4gIHF1ZXJ5Q29uZmlnUmVhZHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc0FkdmFuY2VkU2VhcmNoOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcWJEYXRhVHlwZUVudW0gPSBRQkRhdGFUeXBlRW51bTtcclxuICBxYkRhdGFFbnVtcyA9IE9iamVjdC52YWx1ZXMoUUJEYXRhVHlwZUVudW0pO1xyXG4gIGJhc2ljUXVlcnlDb25maWchOiBhbnk7XHJcbiAgYWR2YW5jZWRRdWVyeUNvbmZpZyE6IGFueTtcclxuICBiYXNpY1F1ZXJ5OiBhbnkgPSB7XHJcbiAgICBjb25kaXRpb246ICdhbmQnLFxyXG4gICAgcnVsZXM6IFtdXHJcbiAgfTtcclxuICBncm91cGVkUXVlcnk6IGFueSA9IHtcclxuICAgIGNvbmRpdGlvbjogJ2FuZCcsXHJcbiAgICBydWxlczogW11cclxuICB9O1xyXG4gIGFkdmFuY2VkUXVlcnk6IGFueSA9IHtcclxuICAgIGNvbmRpdGlvbjogJ2FuZCcsXHJcbiAgICBydWxlczogW11cclxuICB9O1xyXG4gIGZpbHRlclBhbmVsT2JqZWN0ITogUWJQYW5lbEZpbHRlcjtcclxuICBlbnRpdHlDb25maWdHcm91cGVkOiBRdWVyeUJ1aWxkZXJDb25maWcgPSB7IGZpZWxkczoge30gfTtcclxuICBlbnRpdGllczogYW55W10gPSBbXTtcclxuICBkZWZhdWx0VmFsdWVzOiBhbnlbXSA9IFtdO1xyXG4gIGRlZmF1bHRPcGVyYXRvcnM6IGFueVtdID0gW107XHJcbiAgc3RvcmVkUXVlcnkhOiBTdG9yZWRGaWx0ZXJQYW5lbFF1ZXJ5O1xyXG4gIHBhcmVudFJvdXRlITogc3RyaW5nO1xyXG5cclxuICBASW5wdXQoJ2FwaVVybCcpIGF1dGhvcml6YXRpb25BcGlVcmwhOiBzdHJpbmc7XHJcbiAgQElucHV0KCdjb21tb25EYXRhQXBpVXJsJykgY29tbW9uRGF0YUFwaVVybCE6IHN0cmluZztcclxuICBASW5wdXQoJ3NlZ21lbnRhdGlvbkFwaVVybCcpIHNlZ21lbnRhdGlvbkFwaVVybCE6IHN0cmluZztcclxuICBASW5wdXQoJ3Rva2VuJykgdG9rZW4hOiBzdHJpbmc7XHJcbiAgQElucHV0KCdjb21tb25EYXRhVG9rZW4nKSBjb21tb25EYXRhVG9rZW4hOiBzdHJpbmc7XHJcbiAgQElucHV0KCdzZWdtZW50YXRpb25Ub2tlbicpIHNlZ21lbnRhdGlvblRva2VuITogc3RyaW5nO1xyXG4gIEBJbnB1dCgnZmlsdGVySWQnKSBmaWx0ZXJJZCE6IHN0cmluZztcclxuICBASW5wdXQoJ2RhdGFJc0xvYWRpbmdTZWFyY2hCdXR0b24nKSBkYXRhSXNMb2FkaW5nU2VhcmNoQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCd0ZW5hbnRJZCcpIHRlbmFudElkITogc3RyaW5nO1xyXG5cclxuICBASW5wdXQoJ3RyYW5zbGF0aW9uc09iamVjdCcpIHRyYW5zbGF0aW9uc09iamVjdDogRmlsdGVyUGFuZWxUcmFuc2xhdGlvbnMgPSB7XHJcbiAgICBiYXNpY1NlYXJjaFRhYkxhYmVsOiAnQmFzaWMgc2VhcmNoJyxcclxuICAgIGFkdmFuY2VkU2VhcmNoVGFiTGFiZWw6ICdBZHZhbmNlZCBzZWFyY2gnLFxyXG4gICAgZ3JvdXBlZEZpbHRlclRpdGxlOiAnR3JvdXBlZCBmaWx0ZXInLFxyXG4gICAgYWR2YW5jZWRTZWFyY2g6IHtcclxuICAgICAgYW5kQnV0dG9uTGFiZWw6ICdBbmQnLFxyXG4gICAgICBvckJ1dHRvbkxhYmVsOiAnT3InLFxyXG4gICAgICBhZGRSdWxlQnV0dG9uTGFiZWw6ICdBZGQgZmlsdGVyJyxcclxuICAgICAgYWRkUnVsZVNldEJ1dHRvbkxhYmVsOiAnQWRkIGZpbHRlciBzZXQnLFxyXG4gICAgICByZW1vdmVSdWxlU2V0QnV0dG9uTGFiZWw6ICdSZW1vdmUgcnVsZSBzZXQnXHJcbiAgICB9LFxyXG4gICAgbm9SdWxlc0xhYmVsOiAnQWRkIGZpbHRlciBvciBmaWx0ZXIgc2V0IHRvIHN0YXJ0JyxcclxuICAgIHNlYXJjaEJ1dHRvbkxhYmVsOiAnQ2xlYXInLFxyXG4gICAgY2xlYXJCdXR0b25MYWJlbDogJ0NsZWFyJyxcclxuICAgIGZpZWxkc1BsYWNlaG9sZGVyczoge1xyXG4gICAgICBib29sZWFuOiB7XHJcbiAgICAgICAgICB0cnVlOiAnVHJ1ZScsXHJcbiAgICAgICAgICBmYWxzZTogJ0ZhbHNlJ1xyXG4gICAgICB9LFxyXG4gICAgICBkZWNpbWFsOiAnSW5zZXJ0IGRlY2ltYWwgbnVtYmVyJyxcclxuICAgICAgbGlzdDogJ1NlbGVjdCBhbiBvcHRpb24nLFxyXG4gICAgICBudW1iZXI6ICdJbnNlcnQgYSBudW1iZXInLFxyXG4gICAgICB0ZXh0OiAnSW5zZXJ0IHRleHQnLFxyXG4gICAgICBkYXRldGltZTogJ1NlbGVjdCBhIGRhdGUnXHJcbiAgICB9LFxyXG4gICAgb3BlcmF0b3JzOiB7XHJcbiAgICAgIGNvbnRhaW5zOidjb250YWlucydcclxuICAgIH0sXHJcbiAgICBmaWVsZHM6IHtcclxuICAgICAgSWRsZURlYWRsaW5lOiAnSWQnLFxyXG4gICAgICBuYW1lOiAnTmFtZScsXHJcbiAgICAgIGNvZGU6ICdDb2RlJyxcclxuICAgICAgZGVsZXRlOiAnRGVsZXRlZCcsXHJcbiAgICAgIGNvdW50cnk6ICdDb3VudHJ5J1xyXG4gICAgfVxyXG4gIH07XHJcbiAgXHJcbiAgQE91dHB1dCgnc2VhcmNoQ2xpY2tlZCcpIHNlYXJjaENsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFF1ZXJ5UmVzdWx0cz4oKTtcclxuICBAT3V0cHV0KCdjbGVhckNsaWNrZWQnKSBjbGVhckNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcbiAgQE91dHB1dCgnbGFzdFF1ZXJ5JykgbGFzdFF1ZXJ5ID0gbmV3IEV2ZW50RW1pdHRlcjxRdWVyeVJlc3VsdHM+KCk7XHJcbiAgXHJcbiAgc3RhdGVPcHRpb25zOiBhbnlbXSA9IFt7IGxhYmVsOiB0aGlzLnRyYW5zbGF0aW9uc09iamVjdC5hZHZhbmNlZFNlYXJjaC5hbmRCdXR0b25MYWJlbCwgdmFsdWU6ICdhbmQnIH0sIHsgbGFiZWw6IHRoaXMudHJhbnNsYXRpb25zT2JqZWN0LmFkdmFuY2VkU2VhcmNoLm9yQnV0dG9uTGFiZWwsIHZhbHVlOiAnb3InIH1dO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLCBcclxuICAgIHByaXZhdGUgYXBpU2VydmljZTogQXBpU2VydmljZSxcclxuICAgIHByaXZhdGUgc2Vzc2lvblN0b3JhZ2U6IFNlc3Npb25TdG9yYWdlU2VydmljZVxyXG4gICkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5pc0FkdmFuY2VkU2VhcmNoID0gdGhpcy5zZXNzaW9uU3RvcmFnZS5nZXRMYXN0RmlsdGVyUGFuZWxRdWVyeSh0aGlzLnRlbmFudElkLCB0aGlzLmZpbHRlcklkKT8uYWR2YW5jZWRRdWVyeVZhbHVlID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgdGhpcy5zdG9yZWRRdWVyeT0gdGhpcy5zZXNzaW9uU3RvcmFnZS5nZXRMYXN0RmlsdGVyUGFuZWxRdWVyeSh0aGlzLnRlbmFudElkLCB0aGlzLmZpbHRlcklkKVxyXG4gICAgdGhpcy5nZXRRdWVyeUJ1aWxkZXJGaWx0ZXJQYW5lbCgpO1xyXG4gIH1cclxuICBcclxuICBpbml0UXVlcnlCdWlsZGVyQ29udHJvbHMoKSB7XHJcbiAgICB0aGlzLnF1ZXJ5Q3RybCA9IHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbCh0aGlzLmJhc2ljUXVlcnkpO1xyXG4gICAgdGhpcy5hZHZhbmNlZFF1ZXJ5Q3RybCA9IHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbCh0aGlzLmFkdmFuY2VkUXVlcnkpO1xyXG4gICAgaWYodGhpcy5maWx0ZXJQYW5lbE9iamVjdC5hbGxvd0dyb3VwZWQpIHtcclxuICAgICAgdGhpcy5ncm91cGVkUXVlcnlDdHJsID0gdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKHRoaXMuZ3JvdXBlZFF1ZXJ5KTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgaWYodGhpcy5zdG9yZWRRdWVyeSkge1xyXG4gICAgICBsZXQgbGFzdFF1ZXJ5OiBRdWVyeVJlc3VsdHMgPSB7XHJcbiAgICAgICAgdHlwZTogdGhpcy5nZXRRdWVyeVR5cGUoKSxcclxuICAgICAgICBiYXNpYzogdGhpcy5zdG9yZWRRdWVyeT8uYmFzaWNRdWVyeVZhbHVlID8gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5zdG9yZWRRdWVyeT8uYmFzaWNRdWVyeVZhbHVlKSA6IG51bGwsXHJcbiAgICAgICAgYWR2YW5jZWQ6IHRoaXMuc3RvcmVkUXVlcnk/LmFkdmFuY2VkUXVlcnlWYWx1ZSA/IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuc3RvcmVkUXVlcnk/LmFkdmFuY2VkUXVlcnlWYWx1ZSkgOiBudWxsLFxyXG4gICAgICAgIGdyb3VwZWQ6IHRoaXMuaXNBZHZhbmNlZFNlYXJjaCAmJiB0aGlzLmZpbHRlclBhbmVsT2JqZWN0LmFsbG93R3JvdXBlZCAmJiB0aGlzLmdyb3VwZWRRdWVyeUN0cmwgPyBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmdyb3VwZWRRdWVyeUN0cmw/LnZhbHVlKSA6IG51bGxcclxuICAgICAgfVxyXG4gICAgICBsYXN0UXVlcnkgPSB0aGlzLmRlbGV0ZUZpZWxkc1dpdGhvdXRWYWx1ZShsYXN0UXVlcnkpO1xyXG4gICAgICBsYXN0UXVlcnkgPSB0aGlzLmhhbmRsZUVtcHR5RmllbGRzUXVlcnkobGFzdFF1ZXJ5KTtcclxuICAgICAgdGhpcy5sYXN0UXVlcnkuZW1pdChsYXN0UXVlcnkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlU2VhcmNoVHlwZSgpIHtcclxuICAgIHRoaXMuaXNBZHZhbmNlZFNlYXJjaCA9ICF0aGlzLmlzQWR2YW5jZWRTZWFyY2g7XHJcbiAgfVxyXG5cclxuICBvblNlYXJjaENsaWNrZWQoKSB7XHJcbiAgICBsZXQgcXVlcmllczogUXVlcnlSZXN1bHRzID0ge1xyXG4gICAgICB0eXBlOiB0aGlzLmdldFF1ZXJ5VHlwZSgpLFxyXG4gICAgICBiYXNpYzogdGhpcy5pc0FkdmFuY2VkU2VhcmNoID8gbnVsbCA6IE9iamVjdC5hc3NpZ24oe30sIHRoaXMucXVlcnlDdHJsLnZhbHVlKSxcclxuICAgICAgYWR2YW5jZWQ6IHRoaXMuaXNBZHZhbmNlZFNlYXJjaCA/IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuYWR2YW5jZWRRdWVyeUN0cmwudmFsdWUpIDogbnVsbCxcclxuICAgICAgZ3JvdXBlZDogdGhpcy5pc0FkdmFuY2VkU2VhcmNoICYmIHRoaXMuZmlsdGVyUGFuZWxPYmplY3QuYWxsb3dHcm91cGVkID8gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5ncm91cGVkUXVlcnlDdHJsLnZhbHVlKSA6IG51bGxcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNldEVudGl0eShxdWVyaWVzKTtcclxuXHJcbiAgICBxdWVyaWVzID0gdGhpcy5pbml0aWFsaXplT3BlcmF0b3JzKHF1ZXJpZXMpO1xyXG4gICAgXHJcbiAgICBsZXQgc3RvcmVkUXVlcnk6IFN0b3JlZEZpbHRlclBhbmVsUXVlcnkgPSB7XHJcbiAgICAgIGlkOiB0aGlzLmZpbHRlcklkLFxyXG4gICAgICBiYXNpY1F1ZXJ5VmFsdWU6IHF1ZXJpZXMuYmFzaWMsXHJcbiAgICAgIGFkdmFuY2VkUXVlcnlWYWx1ZTogcXVlcmllcy5hZHZhbmNlZCxcclxuICAgICAgZ3JvdXBlZFF1ZXJ5VmFsdWU6IHF1ZXJpZXMuZ3JvdXBlZFxyXG4gICAgfVxyXG4gICAgdGhpcy5zZXNzaW9uU3RvcmFnZS5zZXRMYXN0RmlsdGVyUGFuZWxRdWVyeSh0aGlzLnRlbmFudElkLCBzdG9yZWRRdWVyeSk7XHJcbiAgICBcclxuICAgIHF1ZXJpZXMgPSB0aGlzLmRlbGV0ZUZpZWxkc1dpdGhvdXRWYWx1ZShxdWVyaWVzKTtcclxuICAgIHF1ZXJpZXMgPSB0aGlzLmhhbmRsZUVtcHR5RmllbGRzUXVlcnkocXVlcmllcyk7XHJcblxyXG4gICAgdGhpcy5zZWFyY2hDbGlja2VkLmVtaXQocXVlcmllcyk7XHJcbiAgfVxyXG5cclxuICBvbkNsZWFyQ2xpY2tlZCgpIHtcclxuICAgIHRoaXMucmVzZXRCYXNpY1F1ZXJ5VmFsdWVzKCk7XHJcbiAgICB0aGlzLmFkdmFuY2VkUXVlcnkucnVsZXMgPSBbXTtcclxuICAgIHRoaXMuZ3JvdXBlZFF1ZXJ5LnJ1bGVzID0gW107XHJcbiAgICB0aGlzLnNlc3Npb25TdG9yYWdlLnJlbW92ZUxhc3RGaWx0ZXJQYW5lbFF1ZXJ5KHRoaXMudGVuYW50SWQsIHRoaXMuZmlsdGVySWQpO1xyXG4gICAgdGhpcy5jbGVhckNsaWNrZWQuZW1pdCh0cnVlKTtcclxuICB9XHJcblxyXG4gIGhhbmRsZUVtcHR5RmllbGRzUXVlcnkocXVlcmllczogUXVlcnlSZXN1bHRzKTogUXVlcnlSZXN1bHRzIHtcclxuICAgIGlmKHF1ZXJpZXMuYWR2YW5jZWQgIT0gbnVsbCAmJiBxdWVyaWVzLmFkdmFuY2VkPy5ydWxlcy5sZW5ndGggPT0gMCkge1xyXG4gICAgICBxdWVyaWVzLnR5cGUgPSAwXHJcbiAgICB9XHJcbiAgICBpZihxdWVyaWVzLmJhc2ljICE9IG51bGwgJiYgcXVlcmllcy5iYXNpYz8ucnVsZXMubGVuZ3RoID09IDApIHtcclxuICAgICAgcXVlcmllcy50eXBlID0gMFxyXG4gICAgfVxyXG4gICAgaWYocXVlcmllcy5ncm91cGVkICE9IG51bGwgJiYgcXVlcmllcy5ncm91cGVkPy5ydWxlcy5sZW5ndGggPT0gMCkge1xyXG4gICAgICBxdWVyaWVzLnR5cGUgPSAwXHJcbiAgICB9XHJcbiAgICByZXR1cm4gcXVlcmllcztcclxuICB9XHJcblxyXG4gIGdldFF1ZXJ5VHlwZSgpOiBRdWVyeVJlc3VsdFR5cGUge1xyXG4gICAgaWYoIXRoaXMuaXNBZHZhbmNlZFNlYXJjaCkge1xyXG4gICAgICByZXR1cm4gUXVlcnlSZXN1bHRUeXBlLkJhc2ljO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYodGhpcy5pc0FkdmFuY2VkU2VhcmNoICYmIHRoaXMuZ3JvdXBlZFF1ZXJ5Q3RybD8udmFsdWUpIHtcclxuICAgICAgICByZXR1cm4gUXVlcnlSZXN1bHRUeXBlLkdyb3VwZWRcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gUXVlcnlSZXN1bHRUeXBlLkFkdmFuY2VkO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRFbnRpdHkocXVlcmllczogUXVlcnlSZXN1bHRzKSB7XHJcbiAgICBpZih0aGlzLmdldFF1ZXJ5VHlwZSgpID09IFF1ZXJ5UmVzdWx0VHlwZS5CYXNpYykge1xyXG4gICAgICBxdWVyaWVzLmJhc2ljIS5ydWxlcyA9IHF1ZXJpZXMuYmFzaWMhLnJ1bGVzLm1hcCgocjphbnkpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgZmllbGQ6IHIuZmllbGQsXHJcbiAgICAgICAgICBvcGVyYXRvcjogci5vcGVyYXRvcixcclxuICAgICAgICAgIHZhbHVlOiByLnZhbHVlLFxyXG4gICAgICAgICAgZW50aXR5OiB0aGlzLmVudGl0aWVzLmZpbmQoZSA9PiBlLmZpZWxkSnNvbk5hbWUgPT0gci5maWVsZCkuZW50aXR5XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0UXVlcnlCdWlsZGVyRmlsdGVyUGFuZWwoKSB7XHJcbiAgICB0aGlzLmFwaVNlcnZpY2UuZ2V0RmlsdGVyUGFuZWwodGhpcy5hdXRob3JpemF0aW9uQXBpVXJsLCB0aGlzLnRva2VuLCB0aGlzLmNvbW1vbkRhdGFBcGlVcmwsIHRoaXMuY29tbW9uRGF0YVRva2VuLCB0aGlzLmZpbHRlcklkKVxyXG4gICAgICAuc3Vic2NyaWJlKChxYlBhbmVsRmlsdGVyOiBRYlBhbmVsRmlsdGVyKSA9PiB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJQYW5lbE9iamVjdCA9IHFiUGFuZWxGaWx0ZXI7XHJcbiAgICAgICAgbGV0IGJhc2ljRmlsdGVySWRzOiBudW1iZXJbXSA9IHFiUGFuZWxGaWx0ZXIucWJwYW5lbFRvRmllbGRzLmZpbHRlcihwYW5lbFRvRmllbGQgPT4gcGFuZWxUb0ZpZWxkLmJhc2ljKS5tYXAocGFuZWxUb0ZpZWxkID0+IHBhbmVsVG9GaWVsZC5xYmZpbHRlckZpZWxkSWQpO1xyXG4gICAgICAgIGxldCBhZHZhbmNlZEZpbHRlcklkczogbnVtYmVyW10gPSBxYlBhbmVsRmlsdGVyLnFicGFuZWxUb0ZpZWxkcy5maWx0ZXIocGFuZWxUb0ZpZWxkID0+ICFwYW5lbFRvRmllbGQuYmFzaWMpLm1hcChwYW5lbFRvRmllbGQgPT4gcGFuZWxUb0ZpZWxkLnFiZmlsdGVyRmllbGRJZCk7XHJcbiAgICAgICAgdGhpcy5kZWZhdWx0VmFsdWVzID0gcWJQYW5lbEZpbHRlci5xYnBhbmVsVG9GaWVsZHMubWFwKHBhbmVsVG9GaWVsZCA9PiB7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBxYmZpbHRlckZpZWxkSWQ6IHBhbmVsVG9GaWVsZC5xYmZpbHRlckZpZWxkSWQsXHJcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogcGFuZWxUb0ZpZWxkLmRlZmF1bHRWYWx1ZVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5kZWZhdWx0T3BlcmF0b3JzID0gcWJQYW5lbEZpbHRlci5xYnBhbmVsVG9GaWVsZHMubWFwKHBhbmVsVG9GaWVsZCA9PiB7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBxYmZpbHRlckZpZWxkSWQ6IHBhbmVsVG9GaWVsZC5xYmZpbHRlckZpZWxkSWQsXHJcbiAgICAgICAgICAgIHFiZGVmYXVsdE9wZXJhdG9yOiBwYW5lbFRvRmllbGQucWJkZWZhdWx0T3BlcmF0b3JcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIGxldCBmaWx0ZXJFbnRpdHk6IFFiRmlsdGVyRW50aXR5W10gPSBxYlBhbmVsRmlsdGVyLnFicGFuZWxUb0ZpZWxkcy5tYXAocGFuZWxUb0ZpZWxkID0+IHtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGlkOiBwYW5lbFRvRmllbGQucWJmaWx0ZXJGaWVsZC5xYmZpbHRlckVudGl0eS5pZCwgXHJcbiAgICAgICAgICAgIGJhc2ljOiBwYW5lbFRvRmllbGQuYmFzaWMsXHJcbiAgICAgICAgICAgIG5hbWU6IHBhbmVsVG9GaWVsZC5xYmZpbHRlckZpZWxkLnFiZmlsdGVyRW50aXR5Lm5hbWUsIFxyXG4gICAgICAgICAgICBqc29uTmFtZTogcGFuZWxUb0ZpZWxkLnFiZmlsdGVyRmllbGQucWJmaWx0ZXJFbnRpdHkuanNvbk5hbWUsIFxyXG4gICAgICAgICAgICBmaWVsZHM6IFtdXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGxldCBmaWx0ZXJGaWVsZHM6IEZpbHRlckZpZWxkW10gPSBxYlBhbmVsRmlsdGVyLnFicGFuZWxUb0ZpZWxkcy5tYXAocCA9PiBwLnFiZmlsdGVyRmllbGQpO1xyXG4gICAgICAgIGZpbHRlckVudGl0eS5mb3JFYWNoKChlbnRpdHk6IFFiRmlsdGVyRW50aXR5LCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgbGV0IGZpZWxkcyA9IGZpbHRlckZpZWxkcy5maWx0ZXIoZSA9PiBlLnFiZmlsdGVyRW50aXR5LmlkID09IGVudGl0eS5pZCk7XHJcbiAgICAgICAgICAgZmlsdGVyRW50aXR5W2luZGV4XS5maWVsZHMgPSBmaWVsZHMgO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5iYXNpY1F1ZXJ5Q29uZmlnID0gdGhpcy5pbml0UXVlcnlCdWlsZGVyKGZpbHRlckVudGl0eSk7XHJcbiAgICAgICAgdGhpcy5iYXNpY1F1ZXJ5Q29uZmlnID0gdGhpcy5maWx0ZXJGaWVsZHNCeUlkKHRoaXMuYmFzaWNRdWVyeUNvbmZpZywgYmFzaWNGaWx0ZXJJZHMpO1xyXG4gICAgICAgIHRoaXMuYmFzaWNRdWVyeUNvbmZpZy5maWVsZHMgPSB0aGlzLnRyYW5zbGF0ZUZpZWxkcyh0aGlzLmJhc2ljUXVlcnlDb25maWcuZmllbGRzKTtcclxuICAgICAgICB0aGlzLmFkdmFuY2VkUXVlcnlDb25maWcgPSB0aGlzLmluaXRRdWVyeUJ1aWxkZXIoZmlsdGVyRW50aXR5KTtcclxuICAgICAgICB0aGlzLmFkdmFuY2VkUXVlcnlDb25maWcgPSB0aGlzLmZpbHRlckZpZWxkc0J5SWQodGhpcy5hZHZhbmNlZFF1ZXJ5Q29uZmlnLCBhZHZhbmNlZEZpbHRlcklkcyk7XHJcbiAgICAgICAgdGhpcy5hZHZhbmNlZFF1ZXJ5Q29uZmlnLmZpZWxkcyA9IHRoaXMudHJhbnNsYXRlRmllbGRzKHRoaXMuYWR2YW5jZWRRdWVyeUNvbmZpZy5maWVsZHMpO1xyXG4gICAgICAgIGxldCBydWxlcyA9IE9iamVjdC5rZXlzKHRoaXMuYmFzaWNRdWVyeUNvbmZpZy5maWVsZHMpXHJcbiAgICAgICAgICAubWFwKGZpZWxkS2V5ID0+IHsgXHJcbiAgICAgICAgICAgIGxldCBkZWZhdWx0T3BlcmF0b3IgPSB0aGlzLmRlZmF1bHRPcGVyYXRvcnMuZmluZChvcGVyYXRvciA9PiBvcGVyYXRvci5xYmZpbHRlckZpZWxkSWQgPT0gdGhpcy5iYXNpY1F1ZXJ5Q29uZmlnLmZpZWxkc1tmaWVsZEtleV0uaWQgJiYgb3BlcmF0b3IucWJkZWZhdWx0T3BlcmF0b3IgIT0gbnVsbCk7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgZmllbGQ6IGZpZWxkS2V5LCBcclxuICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5iYXNpY1F1ZXJ5Q29uZmlnLmZpZWxkc1tmaWVsZEtleV0uZGVmYXVsdFZhbHVlISxcclxuICAgICAgICAgICAgICBvcGVyYXRvcjogZGVmYXVsdE9wZXJhdG9yID8gZGVmYXVsdE9wZXJhdG9yLnFiZGVmYXVsdE9wZXJhdG9yLnN5bWJvbCA6IG51bGxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgaWYodGhpcy5zdG9yZWRRdWVyeSAmJiB0aGlzLnN0b3JlZFF1ZXJ5Py5pZCA9PSB0aGlzLmZpbHRlcklkICYmIHRoaXMuc3RvcmVkUXVlcnk/LmJhc2ljUXVlcnlWYWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmJhc2ljUXVlcnkgPSB0aGlzLnN0b3JlZFF1ZXJ5LmJhc2ljUXVlcnlWYWx1ZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuYmFzaWNRdWVyeSA9IHtcclxuICAgICAgICAgICAgICBjb25kaXRpb246ICdhbmQnLFxyXG4gICAgICAgICAgICAgIHJ1bGVzOiBydWxlc1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYodGhpcy5zdG9yZWRRdWVyeSAmJiB0aGlzLnN0b3JlZFF1ZXJ5Py5pZCA9PSB0aGlzLmZpbHRlcklkICYmIHRoaXMuc3RvcmVkUXVlcnk/LmFkdmFuY2VkUXVlcnlWYWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmFkdmFuY2VkUXVlcnkgPSB0aGlzLnN0b3JlZFF1ZXJ5LmFkdmFuY2VkUXVlcnlWYWx1ZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWR2YW5jZWRRdWVyeSA9IHtcclxuICAgICAgICAgICAgICBjb25kaXRpb246ICdhbmQnLFxyXG4gICAgICAgICAgICAgIHJ1bGVzOiBbXVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnF1ZXJ5Q29uZmlnUmVhZHkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaW5pdFF1ZXJ5QnVpbGRlckNvbnRyb2xzKCk7XHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBpbml0UXVlcnlCdWlsZGVyKGZpbHRlckVudGl0aWVzOiBRYkZpbHRlckVudGl0eVtdKSB7XHJcbiAgICBsZXQgZW50aXR5Q29uZmlnQXV4OiBRdWVyeUJ1aWxkZXJDb25maWcgPSB7IGZpZWxkczoge30gfTtcclxuICAgIGxldCBlbnRpdGllc0FycmF5OiBFbnRpdHlNYXBbXSA9IFtdO1xyXG4gICAgXHJcbiAgICBmaWx0ZXJFbnRpdGllcy5tYXAoKGUsIGluZGV4KSA9PiB7XHJcbiAgICAgIGxldCBlbnRpdHk6IEVudGl0eSA9IHsgbmFtZTogZS5qc29uTmFtZSB9O1xyXG4gICAgICByZXR1cm4gZW50aXRpZXNBcnJheVtpbmRleF0gPSB7IFtlLmpzb25OYW1lXTogZW50aXR5IH07XHJcbiAgICB9KTtcclxuXHJcbiAgICBsZXQgZW50aXRpZXNNYXA6IEVudGl0eU1hcCA9IHt9O1xyXG5cclxuICAgIGZvciAoY29uc3QgZW50aXR5IG9mIGVudGl0aWVzQXJyYXkpIHtcclxuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGVudGl0eSk7XHJcblxyXG4gICAgICBrZXlzLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICBpZih0aGlzLnRyYW5zbGF0aW9uc09iamVjdC5lbnRpdGllcykge1xyXG4gICAgICAgICAgbGV0IGVudGl0aWVzVHJhbnNsYXRpb25zS2V5cyA9IE9iamVjdC5rZXlzKHRoaXMudHJhbnNsYXRpb25zT2JqZWN0LmVudGl0aWVzKTtcclxuICAgICAgICAgIGxldCB0cmFuc2xhdGlvbiA9IGVudGl0aWVzVHJhbnNsYXRpb25zS2V5cy5maW5kKHRyYW5zbGF0aW9uS2V5ID0+IHRyYW5zbGF0aW9uS2V5ID09IGtleSk7XHJcbiAgICAgICAgICBpZih0cmFuc2xhdGlvbikge1xyXG4gICAgICAgICAgICBlbnRpdGllc01hcFtrZXldID0geyBuYW1lOiB0aGlzLnRyYW5zbGF0aW9uc09iamVjdC5lbnRpdGllc1trZXldIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGVudGl0aWVzTWFwW2tleV0gPSBlbnRpdHlba2V5XVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBlbnRpdGllc01hcFtrZXldID0gZW50aXR5W2tleV1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgZW50aXR5Q29uZmlnQXV4LmVudGl0aWVzID0gZW50aXRpZXNNYXA7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGZpZWxkczogRmllbGRNYXBbXSA9IFtdO1xyXG4gICAgZmlsdGVyRW50aXRpZXMuZm9yRWFjaCgoZmlsdGVyRW50aXR5KSA9PiB7XHJcbiAgICAgIHJldHVybiBmaWx0ZXJFbnRpdHkuZmllbGRzLmZpbHRlcigoZmlsdGVyRmllbGQ6IEZpbHRlckZpZWxkKSA9PiB7XHJcbiAgICAgICAgbGV0IGluZGV4OiBudW1iZXIgPSBmaWVsZHMubGVuZ3RoID8/IDA7XHJcbiAgICAgICAgbGV0IG9wZXJhdG9yc0ZsYXRBcnJheSA9IGZpbHRlckZpZWxkLm9wZXJhdG9ycy5tYXAoKG86YW55KSA9PiBvLnN5bWJvbCk7XHJcbiAgICAgICAgbGV0IGRlZmF1bHRPcGVyYXRvciA9IHRoaXMuZGVmYXVsdE9wZXJhdG9ycy5maW5kKG9wZXJhdG9yID0+IG9wZXJhdG9yLnFiZmlsdGVyRmllbGRJZCA9PSBmaWx0ZXJGaWVsZC5pZCk7XHJcbiAgICAgICAgbGV0IGZpZWxkOiBGaWVsZCA9IHtcclxuICAgICAgICAgIGlkOiBmaWx0ZXJGaWVsZC5pZCxcclxuICAgICAgICAgIG5hbWU6IGZpbHRlckZpZWxkLm5hbWUsXHJcbiAgICAgICAgICBvcGVyYXRvcnM6IGRlZmF1bHRPcGVyYXRvci5xYmRlZmF1bHRPcGVyYXRvcj8uc3ltYm9sID8gdGhpcy5tb3ZlRWxlbWVudFRvRmlyc3RQbGFjZShvcGVyYXRvcnNGbGF0QXJyYXksIGRlZmF1bHRPcGVyYXRvci5xYmRlZmF1bHRPcGVyYXRvcj8uc3ltYm9sKSA6IG9wZXJhdG9yc0ZsYXRBcnJheSxcclxuICAgICAgICAgIHR5cGU6IHRoaXMuZ2V0RGF0YVR5cGUoZmlsdGVyRmllbGQuZGF0YVR5cGUpLFxyXG4gICAgICAgICAgZGVmYXVsdFZhbHVlOiB0aGlzLmZvcm1hdERlZmF1bHRWYWx1ZSh0aGlzLmRlZmF1bHRWYWx1ZXMuZmluZCh2YWx1ZSA9PiB2YWx1ZS5xYmZpbHRlckZpZWxkSWQgPT0gZmlsdGVyRmllbGQuaWQpLmRlZmF1bHRWYWx1ZSwgZmlsdGVyRmllbGQuZGF0YVR5cGUpLFxyXG4gICAgICAgICAgZGVmYXVsdE9wZXJhdG9yOiBkZWZhdWx0T3BlcmF0b3IucWJkZWZhdWx0T3BlcmF0b3I/LnN5bWJvbCxcclxuICAgICAgICAgIGVudGl0eTogZmlsdGVyRW50aXR5Lmpzb25OYW1lLFxyXG4gICAgICAgICAgb3B0aW9uczogZmlsdGVyRmllbGQubGlzdE9mVmFsdWVzLFxyXG4gICAgICAgICAgdmFsaWRhdG9yOiAocnVsZTogUnVsZSwgcGFyZW50OiBSdWxlU2V0KTogYW55IHwgbnVsbCA9PiB7XHJcbiAgICAgICAgICAgIGlmIChydWxlLm9wZXJhdG9yICE9PSBcImlzIG51bGxcIiAmJiBydWxlLm9wZXJhdG9yICE9PSBcImlzIG5vdCBudWxsXCIpIHtcclxuICAgICAgICAgICAgICBpZiAocnVsZS52YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHJ1bGUudmFsdWUgPT09IG51bGwgfHwgcnVsZS52YWx1ZSA9PT0gJycgfHwgcnVsZS52YWx1ZS5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgcmVxdWlyZWQ6ICdlbXB0eSBmaWVsZCcgfTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZW50aXRpZXMucHVzaCh7ZmllbGRKc29uTmFtZTogZmlsdGVyRmllbGQuanNvbk5hbWUsIGVudGl0eTogZmllbGQuZW50aXR5fSk7XHJcbiAgICAgICAgZmllbGRzW2luZGV4XSA9IHsgW2ZpbHRlckZpZWxkLmpzb25OYW1lXTogZmllbGQgfTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBsZXQgZmllbGRzTWFwOiBGaWVsZE1hcCA9IHt9O1xyXG5cclxuICAgIGZvciAoY29uc3QgZmllbGQgb2YgZmllbGRzKSB7XHJcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhmaWVsZCk7XHJcbiAgICAgIGtleXMuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgIGZpZWxkc01hcFtrZXldID0gZmllbGRba2V5XTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBlbnRpdHlDb25maWdBdXguZmllbGRzID0gZmllbGRzTWFwO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGVudGl0eUNvbmZpZ0F1eDtcclxuICB9XHJcblxyXG4gIGZpbHRlckZpZWxkc0J5SWQoZmllbGRzT2JqOiBhbnksIGlkQXJyYXk6IG51bWJlcltdKTogYW55IHtcclxuICAgIGNvbnN0IGZpbHRlcmVkRmllbGRzOiBhbnkgPSB7fTtcclxuICAgIFxyXG4gICAgZm9yIChjb25zdCBrZXkgaW4gZmllbGRzT2JqLmZpZWxkcykge1xyXG4gICAgICBjb25zdCBmaWVsZCA9IGZpZWxkc09iai5maWVsZHNba2V5XTtcclxuICAgICAgaWYgKGlkQXJyYXkuaW5jbHVkZXMoZmllbGQuaWQpKSB7XHJcbiAgICAgICAgZmlsdGVyZWRGaWVsZHNba2V5XSA9IGZpZWxkO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHJldHVybiB7XHJcbiAgICAgIC4uLmZpZWxkc09iaixcclxuICAgICAgZmllbGRzOiBmaWx0ZXJlZEZpZWxkcyxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICB0cmFuc2xhdGVGaWVsZHMoZmllbGRzOiBGaWVsZE1hcCkge1xyXG4gICAgZm9yIChjb25zdCBrZXkgaW4gZmllbGRzKSB7XHJcbiAgICAgIGlmIChmaWVsZHMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG4gICAgICAgIGZpZWxkc1trZXldLmZpZWxkID0ga2V5O1xyXG4gICAgICAgIGZpZWxkc1trZXldLm5hbWUgPSB0aGlzLnRyYW5zbGF0aW9uc09iamVjdC5maWVsZHNba2V5XTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZpZWxkcztcclxuICB9XHJcblxyXG4gIG1vdmVFbGVtZW50VG9GaXJzdFBsYWNlKGFycmF5OiBhbnlbXSwgZWxlbWVudFRvRmlyc3RQbGFjZTogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBpbmRleCA9IGFycmF5LmluZGV4T2YoZWxlbWVudFRvRmlyc3RQbGFjZSk7XHJcbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XHJcbiAgICAgIGFycmF5LnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgIGFycmF5LnVuc2hpZnQoZWxlbWVudFRvRmlyc3RQbGFjZSk7IFxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFycmF5O1xyXG4gIH1cclxuXHJcbiAgZm9ybWF0RGVmYXVsdFZhbHVlKHZhbHVlOiBhbnksIHR5cGU6IFFCRGF0YVR5cGVFbnVtKSB7XHJcbiAgICBpZih2YWx1ZSkge1xyXG4gICAgICBpZih0eXBlID09IFFCRGF0YVR5cGVFbnVtLkJvb2xlYW4pIHtcclxuICAgICAgICByZXR1cm4gdmFsdWUudG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnO1xyXG4gICAgICB9XHJcbiAgICAgIGlmKHR5cGUgPT0gdGhpcy5xYkRhdGFUeXBlRW51bS5OdW1iZXIgfHwgdHlwZSA9PSB0aGlzLnFiRGF0YVR5cGVFbnVtLkRlY2ltYWwgfHwgdHlwZSA9PSB0aGlzLnFiRGF0YVR5cGVFbnVtLkxpc3Qpe1xyXG4gICAgICAgIHJldHVybiBOdW1iZXIodmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICB9IFxyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgZ2V0RGF0YVR5cGUoaWQ6IG51bWJlcikge1xyXG4gICAgcmV0dXJuIHRoaXMucWJEYXRhRW51bXMuZmluZCh2YWx1ZSA9PiB2YWx1ZSA9PT0gaWQpPy50b1N0cmluZygpID8/IFwiXCI7XHJcbiAgfVxyXG5cclxuICBkZWxldGVGaWVsZHNXaXRob3V0VmFsdWUoanNvbjogYW55KSB7XHJcbiAgICBpZiAoanNvbi5iYXNpYyAmJiBqc29uLmJhc2ljLnJ1bGVzKSB7XHJcbiAgICAgIGpzb24uYmFzaWMucnVsZXMgPSBqc29uLmJhc2ljLnJ1bGVzLmZpbHRlcigocnVsZTogYW55KSA9PiBydWxlLnZhbHVlICE9IG51bGwpO1xyXG4gICAgICBqc29uLmJhc2ljLnJ1bGVzID0ganNvbi5iYXNpYy5ydWxlcy5maWx0ZXIoKHJ1bGU6IGFueSkgPT4gcnVsZS52YWx1ZSAhPSB1bmRlZmluZWQpO1xyXG4gICAgICBqc29uLmJhc2ljLnJ1bGVzID0ganNvbi5iYXNpYy5ydWxlcy5maWx0ZXIoKHJ1bGU6IGFueSkgPT4gcnVsZS52YWx1ZSAhPT0gXCJcIik7XHJcbiAgICB9XHJcbiAgICBpZihqc29uLmFkdmFuY2VkICYmIGpzb24uYWR2YW5jZWQucnVsZXM/Lmxlbmd0aCAhPSAwKSB7XHJcbiAgICAgIGpzb24uYWR2YW5jZWQucnVsZXMgPSBqc29uLmFkdmFuY2VkLnJ1bGVzLmZpbHRlcigocnVsZTogYW55KSA9PiBydWxlLnJ1bGVzPy5sZW5ndGggIT0gMCk7XHJcbiAgICB9XHJcbiAgICBpZihqc29uLmdyb3VwZWQgJiYganNvbi5ncm91cGVkPy5ydWxlcy5sZW5ndGggIT0gMCkge1xyXG4gICAgICBqc29uLmdyb3VwZWQucnVsZXMgPSBqc29uLmdyb3VwZWQucnVsZXMuZmlsdGVyKChydWxlOiBhbnkpID0+IHJ1bGUucnVsZXM/Lmxlbmd0aCAhPSAwKTtcclxuICAgIH1cclxuICAgIGlmKGpzb24uZ3JvdXBlZCAmJiBqc29uLmdyb3VwZWQ/LnJ1bGVzLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgIGpzb24uZ3JvdXBlZCA9IG51bGw7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ganNvbjtcclxuICB9XHJcbiAgXHJcbiAgaW5pdGlhbGl6ZU9wZXJhdG9ycyhqc29uOiBhbnkpIHtcclxuICAgIGlmIChqc29uLmJhc2ljICYmIGpzb24uYmFzaWMucnVsZXMpIHtcclxuICAgICAganNvbi5iYXNpYy5ydWxlcy5mb3JFYWNoKChydWxlOmFueSkgPT4ge1xyXG4gICAgICAgIGlmKCFydWxlLm9wZXJhdG9yKSB7XHJcbiAgICAgICAgICBydWxlLm9wZXJhdG9yID0gXCI9XCI7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBqc29uO1xyXG4gIH1cclxuXHJcbiAgcmVzZXRCYXNpY1F1ZXJ5VmFsdWVzKCkge1xyXG4gICAgdGhpcy5iYXNpY1F1ZXJ5LnJ1bGVzLmZvckVhY2goKHJ1bGU6IFJ1bGUpID0+IHtcclxuICAgICAgaWYocnVsZS52YWx1ZSB8fCBydWxlLnZhbHVlID09IDApe1xyXG4gICAgICAgIHJ1bGUudmFsdWUgPSBudWxsXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0UXVlcnlGaWVsZE5hbWUoZmllbGROYW1lOiBzdHJpbmcsIGZpZWxkczogRmllbGRNYXApIHtcclxuICAgIGNvbnN0IGZpZWxkRW50cnkgPSBPYmplY3Qua2V5cyhmaWVsZHMpLmZpbmQoa2V5ID0+IGZpZWxkc1trZXldLmZpZWxkID09PSBmaWVsZE5hbWUpO1xyXG5cclxuICAgIHJldHVybiBmaWVsZEVudHJ5ICYmIGZpZWxkc1tmaWVsZEVudHJ5XS5uYW1lID8gZmllbGRzW2ZpZWxkRW50cnldLm5hbWUgOiBmaWVsZE5hbWU7XHJcbiAgfVxyXG5cclxuICBmaWVsZElzQm9vbGVhbihmaWVsZE5hbWU6IHN0cmluZywgZmllbGRzOiBGaWVsZE1hcCkge1xyXG4gICAgY29uc3QgZmllbGRFbnRyeSA9IE9iamVjdC5rZXlzKGZpZWxkcykuZmluZChrZXkgPT4gZmllbGRzW2tleV0uZmllbGQgPT09IGZpZWxkTmFtZSk7XHJcblxyXG4gICAgcmV0dXJuIGZpZWxkc1tmaWVsZEVudHJ5IV0udHlwZSA9PSBRQkRhdGFUeXBlRW51bS5Cb29sZWFuLnRvU3RyaW5nKCkgPyB0cnVlIDogZmFsc2U7XHJcbiAgfVxyXG5cclxufVxyXG4iLCI8IS0tIFRPRE86IEludGVudGFyIG90cmEgdmV6IHBhc2FyIGxvcyBjb21wb25lbnRlcyBhIGxvcyBkZSB3LSBwb3JxdWUgbm8gc2UgYWxpbmVuYSB5IGVsIHctZWRpdC1zZWxlY3Qgbm8gdmEgYmllbiBlbiBmaWVsZC4gXHJcbiAgQWhvcmEgc2UgY29uc2VydmFuIGxvcyBkZSBwLXcgY29uIGVzdGlsb3MuIC0tPlxyXG48ZGl2ICpuZ0lmPVwicXVlcnlDb25maWdSZWFkeVwiIGNsYXNzPVwidy1maWx0ZXItcGFuZWwtc3R5bGVzXCI+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiIWZpbHRlclBhbmVsT2JqZWN0LmFsbG93QWR2YW5jZWRTZWFyY2g7IGVsc2UgYmFpc2NBbmRBZHZhbmNlZFwiPlxyXG4gICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgJ3ctZmlsdGVyLXBhbmVsLWNvbnRhaW5lci1hZHZhbmNlZCcgOiBpc0FkdmFuY2VkU2VhcmNoLCAndy1maWx0ZXItcGFuZWwtY29udGFpbmVyLWJhc2ljJyA6ICFpc0FkdmFuY2VkU2VhcmNoIH1cIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYmFzaWNcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIGJ1dHRvbi1nYXBcIj5cclxuICAgICAgICAgIDx3LWJ1dHRvbiBbbGFiZWxdPVwidHJhbnNsYXRpb25zT2JqZWN0LmNsZWFyQnV0dG9uTGFiZWxcIiB0eXBlPVwidGVydGlhcnlcIiBzaXplPVwic21hbGxcIiAob25DbGljayk9XCJvbkNsZWFyQ2xpY2tlZCgpXCI+PC93LWJ1dHRvbj5cclxuICAgICAgICAgIDx3LWJ1dHRvbiBbbGFiZWxdPVwidHJhbnNsYXRpb25zT2JqZWN0LnNlYXJjaEJ1dHRvbkxhYmVsXCIgc2l6ZT1cInNtYWxsXCIgKG9uQ2xpY2spPVwib25TZWFyY2hDbGlja2VkKClcIj48L3ctYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSAjYmFpc2NBbmRBZHZhbmNlZD5cclxuICAgICAgPGRpdiBbbmdDbGFzc109XCJ7ICd3LWZpbHRlci1wYW5lbC1jb250YWluZXItYWR2YW5jZWQnIDogaXNBZHZhbmNlZFNlYXJjaCwgJ3ctZmlsdGVyLXBhbmVsLWNvbnRhaW5lci1iYXNpYycgOiAhaXNBZHZhbmNlZFNlYXJjaCB9XCI+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWlzQWR2YW5jZWRTZWFyY2g7IGVsc2UgYWR2YW5jZWRWaWV3XCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJiYXNpY1wiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2FkdmFuY2VkVmlldz5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImFkdmFuY2VkXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1lbmQgYnV0dG9uLWdhcFwiIFtjbGFzcy5wdC0zXT1cImlzQWR2YW5jZWRTZWFyY2hcIj5cclxuICAgICAgICAgICAgPHctYnV0dG9uIFtsYWJlbF09XCJ0cmFuc2xhdGlvbnNPYmplY3QuY2xlYXJCdXR0b25MYWJlbFwiIHR5cGU9XCJ0ZXJ0aWFyeVwiIHNpemU9XCJzbWFsbFwiIChvbkNsaWNrKT1cIm9uQ2xlYXJDbGlja2VkKClcIj48L3ctYnV0dG9uPlxyXG4gICAgICAgICAgICA8dy1idXR0b24gW2xhYmVsXT1cInRyYW5zbGF0aW9uc09iamVjdC5zZWFyY2hCdXR0b25MYWJlbFwiIHNpemU9XCJzbWFsbFwiIChvbkNsaWNrKT1cIm9uU2VhcmNoQ2xpY2tlZCgpXCIgW2xvYWRpbmddPVwiZGF0YUlzTG9hZGluZ1NlYXJjaEJ1dHRvblwiPjwvdy1idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8bmctdGVtcGxhdGUgI2Jhc2ljPlxyXG4gICAgPGRpdiAqbmdJZj1cImZpbHRlclBhbmVsT2JqZWN0LmFsbG93QWR2YW5jZWRTZWFyY2hcIiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWVuZCBmbGV4LXdyYXBcIj5cclxuICAgICAgPHctYnV0dG9uIFtsYWJlbF09XCJ0cmFuc2xhdGlvbnNPYmplY3QuYWR2YW5jZWRTZWFyY2hUYWJMYWJlbFwiIHR5cGU9XCJ0ZXh0XCIgKG9uQ2xpY2spPVwidXBkYXRlU2VhcmNoVHlwZSgpXCI+PC93LWJ1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInctZmlsdGVyLXBhbmVsLWJhc2ljIHF1ZXJ5LWJ1aWxkZXItc3R5bGUgZmFkZWluIGFuaW1hdGlvbi1kdXJhdGlvbi01MDBcIj5cclxuICAgICAgPHF1ZXJ5LWJ1aWxkZXIgW2Zvcm1Db250cm9sXT0ncXVlcnlDdHJsJyBbY29uZmlnXT0nYmFzaWNRdWVyeUNvbmZpZycgW2FsbG93UnVsZXNldF09J2ZpbHRlclBhbmVsT2JqZWN0LmFsbG93UnVsZVNldCcgW2FsbG93UnVsZXNldF09XCJmaWx0ZXJQYW5lbE9iamVjdC5hbGxvd1J1bGVTZXRcIiBbcGVyc2lzdFZhbHVlT25GaWVsZENoYW5nZV09J3BlcnNpc3RWYWx1ZU9uRmllbGRDaGFuZ2UnPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5QnV0dG9uR3JvdXA9XCJsZXQgcnVsZXNldDtcIj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqcXVlcnlSZW1vdmVCdXR0b249XCJsZXQgcnVsZTsgbGV0IHJlbW92ZVJ1bGU9cmVtb3ZlUnVsZVwiPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8bmctY29udGFpbmVyICpxdWVyeVN3aXRjaEdyb3VwPVwibGV0IHJ1bGVzZXQ7IGxldCBvbkNoYW5nZT1vbkNoYW5nZVwiPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8bmctY29udGFpbmVyICpxdWVyeUVudGl0eT1cImxldCBydWxlOyBsZXQgZW50aXRpZXM9ZW50aXRpZXM7IGxldCBvbkNoYW5nZT1vbkNoYW5nZVwiPlxyXG4gICAgICAgICAgPHAtZHJvcGRvd24gW2Rpc2FibGVkXT1cInRydWVcIiBjbGFzcz1cIiB3LWVkaXQtc2VsZWN0LXNtYWxsXCIgKm5nSWY9XCJmYWxzZVwiIGFwcGVuZFRvPVwiYm9keVwiIFtvcHRpb25zXT1cImVudGl0aWVzXCIgWyhuZ01vZGVsKV09XCJydWxlLmVudGl0eVwiIG9wdGlvbkxhYmVsPVwibmFtZVwiIG9wdGlvblZhbHVlPVwidmFsdWVcIiAobmdNb2RlbENoYW5nZSk9XCJvbkNoYW5nZSgkZXZlbnQsIHJ1bGUpXCI+PC9wLWRyb3Bkb3duPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8bmctY29udGFpbmVyICpxdWVyeUZpZWxkPVwibGV0IHJ1bGU7IGxldCBmaWVsZHM9ZmllbGRzOyBsZXQgb25DaGFuZ2U9b25DaGFuZ2U7IGxldCBnZXRGaWVsZHMgPSBnZXRGaWVsZHM7IGxldCB2YWx1ZT12YWx1ZTsgbGV0IG5hbWU9bmFtZTsgbGV0IGluZGV4PWluZGV4XCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gYXBwZW5kVG89XCJib2R5XCIgY2xhc3M9XCJ3LTQgdGV4dC1sZWZ0IHctZmlsdGVyLXBhbmVsLWlucHV0LXRleHQtbGFiZWxcIiBbY2xhc3Mudy1maWx0ZXItcGFuZWwtYm9vbGVhbi1sYWJlbC13aWR0aF09XCJmaWVsZElzQm9vbGVhbihydWxlLmZpZWxkLCBnZXRGaWVsZHMocnVsZS5lbnRpdHkpKVwiIG9wdGlvbkxhYmVsPVwibmFtZVwiIG9wdGlvblZhbHVlPVwidmFsdWVcIj57eyBnZXRRdWVyeUZpZWxkTmFtZShydWxlLmZpZWxkLCBnZXRGaWVsZHMocnVsZS5lbnRpdHkpKX19PC9zcGFuPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8bmctY29udGFpbmVyICpxdWVyeU9wZXJhdG9yPVwibGV0IHJ1bGU7IGxldCBvcGVyYXRvcnM9b3BlcmF0b3JzOyBsZXQgb25DaGFuZ2U9b25DaGFuZ2VcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJxdWVyeS1idWlsZGVyLW9wZXJhdG9yLXdpZHRoXCI+XHJcbiAgICAgICAgICAgICAgPHAtZHJvcGRvd24gY2xhc3M9XCIgdy1lZGl0LXNlbGVjdC1zbWFsbFwiICpuZ0lmPVwiaXNBZHZhbmNlZFNlYXJjaFwiIGFwcGVuZFRvPVwiYm9keVwiIFsobmdNb2RlbCldPVwicnVsZS5vcGVyYXRvclwiIFtvcHRpb25zXT1cIm9wZXJhdG9yc1wiIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlKHJ1bGUpXCI+PC9wLWRyb3Bkb3duPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5SW5wdXQ9XCJsZXQgcnVsZTsgdHlwZTogcWJEYXRhVHlwZUVudW0uQm9vbGVhbi50b1N0cmluZygpOyBsZXQgb25DaGFuZ2U9b25DaGFuZ2VcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwicXVlcnktYnVpbGRlci1vcGVyYXRvci13aWR0aFwiPlxyXG4gICAgICAgICAgICA8dy10b2dnbGUtYnV0dG9uIHNpemU9XCJzbWFsbFwiIFsobmdNb2RlbCldPVwicnVsZS52YWx1ZVwiIG9uTGFiZWw9XCJUcnVlXCIgb2ZmTGFiZWw9XCJGYWxzZVwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlKClcIj48L3ctdG9nZ2xlLWJ1dHRvbj5cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqcXVlcnlJbnB1dD1cImxldCBydWxlOyB0eXBlOiBxYkRhdGFUeXBlRW51bS5EYXRldGltZS50b1N0cmluZygpOyBsZXQgb25DaGFuZ2U9b25DaGFuZ2VcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ3LWZpbHRlci1wYW5lbC1iYXNpYy1xdWVyeS1idWlsZGVyLWlucHV0LXdpZHRoXCI+XHJcbiAgICAgICAgICAgICAgPHctZWRpdC1jYWxlbmRhciBhcHBlbmRUbz1cImJvZHlcIiBzaXplPVwic21hbGxcIiBbc2hvd0ljb25dPVwiZmFsc2VcIiBbKG5nTW9kZWwpXT1cInJ1bGUudmFsdWVcIiAob25DaGFuZ2UpPVwib25DaGFuZ2UoKVwiIFtzaG93VGltZV09XCJ0cnVlXCIgW3Nob3dTZWNvbmRzXT1cInRydWVcIiBbcGxhY2Vob2xkZXJdPVwidHJhbnNsYXRpb25zT2JqZWN0LmZpZWxkc1BsYWNlaG9sZGVycy5kYXRldGltZVwiIFtkaXNwbGF5SW5saW5lQmxvY2tdPVwidHJ1ZVwiPjwvdy1lZGl0LWNhbGVuZGFyPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5SW5wdXQ9XCJsZXQgcnVsZTsgbGV0IGZpZWxkPWZpZWxkOyB0eXBlOiBxYkRhdGFUeXBlRW51bS5EZWNpbWFsLnRvU3RyaW5nKCk7IGxldCBvbkNoYW5nZT1vbkNoYW5nZVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInctZmlsdGVyLXBhbmVsLWJhc2ljLXF1ZXJ5LWJ1aWxkZXItaW5wdXQtd2lkdGhcIj5cclxuICAgICAgICAgICAgICA8cC1pbnB1dE51bWJlciBpbnB1dFN0eWxlQ2xhc3M9XCJmbGV4IGZsZXgtMVwiIHN0eWxlQ2xhc3M9XCJmbGV4IGZsZXgtMVwiIGNsYXNzPVwiIHctZmlsdGVyLXBhbmVsLWJhc2ljLXF1ZXJ5LWJ1aWxkZXItaW5wdXQtd2lkdGggdy1lZGl0LWlucHV0LW51bWJlci1zbWFsbCB3LWVkaXQtaW5wdXQtbnVtYmVyLXNtYWxsLWhlaWdodFwiIFsobmdNb2RlbCldPVwicnVsZS52YWx1ZVwiIGlucHV0SWQ9XCJtaW5tYXhcIiBpbnB1dElkPVwibWlubWF4XCIgbW9kZT1cImRlY2ltYWxcIiBbbWluRnJhY3Rpb25EaWdpdHNdPVwiMlwiIFttYXhGcmFjdGlvbkRpZ2l0c109XCI1XCIgW21pbl09XCIwXCIgW21heF09XCIxMDBcIiAobmdNb2RlbENoYW5nZSk9XCJvbkNoYW5nZSgpXCIgW3BsYWNlaG9sZGVyXT1cInRyYW5zbGF0aW9uc09iamVjdC5maWVsZHNQbGFjZWhvbGRlcnMuZGVjaW1hbFwiPiA8L3AtaW5wdXROdW1iZXI+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqcXVlcnlJbnB1dD1cImxldCBydWxlOyBsZXQgb3B0aW9ucz1vcHRpb25zOyB0eXBlOiBxYkRhdGFUeXBlRW51bS5MaXN0LnRvU3RyaW5nKCk7IGxldCBvbkNoYW5nZT1vbkNoYW5nZVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInctZmlsdGVyLXBhbmVsLWJhc2ljLXF1ZXJ5LWJ1aWxkZXItaW5wdXQtd2lkdGhcIj5cclxuICAgICAgICAgICAgICA8cC1kcm9wZG93biBjbGFzcz1cIiB3LWVkaXQtc2VsZWN0LXNtYWxsXCIgYXBwZW5kVG89XCJib2R5XCIgW29wdGlvbnNdPVwib3B0aW9uc1wiIFsobmdNb2RlbCldPVwicnVsZS52YWx1ZVwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlKClcIiBvcHRpb25MYWJlbD1cIm5hbWVcIiBvcHRpb25WYWx1ZT1cInZhbHVlXCIgW3BsYWNlaG9sZGVyXT1cInRyYW5zbGF0aW9uc09iamVjdC5maWVsZHNQbGFjZWhvbGRlcnMubGlzdFwiPjwvcC1kcm9wZG93bj5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8bmctY29udGFpbmVyICpxdWVyeUlucHV0PVwibGV0IHJ1bGU7IGxldCBmaWVsZD1maWVsZDsgdHlwZTogcWJEYXRhVHlwZUVudW0uTnVtYmVyLnRvU3RyaW5nKCk7IGxldCBvbkNoYW5nZT1vbkNoYW5nZVwiPlxyXG4gICAgICAgICAgICAgIDxwLWlucHV0TnVtYmVyIFt1c2VHcm91cGluZ109XCJmYWxzZVwiIGlucHV0U3R5bGVDbGFzcz1cImZsZXggZmxleC0xXCIgc3R5bGVDbGFzcz1cImZsZXggZmxleC0xXCIgY2xhc3M9XCIgdy1maWx0ZXItcGFuZWwtYmFzaWMtcXVlcnktYnVpbGRlci1pbnB1dC13aWR0aCB3LWVkaXQtaW5wdXQtbnVtYmVyLXNtYWxsIHctZWRpdC1pbnB1dC1udW1iZXItc21hbGwtaGVpZ2h0XCIgWyhuZ01vZGVsKV09XCJydWxlLnZhbHVlXCIgaW5wdXRJZD1cIm1pbm1heFwiIGlucHV0SWQ9XCJtaW5tYXhcIiBbbWluXT1cIjBcIiAobmdNb2RlbENoYW5nZSk9XCJvbkNoYW5nZSgpXCIgW3BsYWNlaG9sZGVyXT1cInRyYW5zbGF0aW9uc09iamVjdC5maWVsZHNQbGFjZWhvbGRlcnMubnVtYmVyXCI+IDwvcC1pbnB1dE51bWJlcj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqcXVlcnlJbnB1dD1cImxldCBydWxlOyBsZXQgZmllbGQ9ZmllbGQ7IHR5cGU6IHFiRGF0YVR5cGVFbnVtLlRleHQudG9TdHJpbmcoKTsgbGV0IG9uQ2hhbmdlPW9uQ2hhbmdlXCI+XHJcbiAgICAgICAgICA8aW5wdXQgY2xhc3M9XCIgdy1maWx0ZXItcGFuZWwtYmFzaWMtcXVlcnktYnVpbGRlci1pbnB1dC13aWR0aCB3LWVkaXQtaW5wdXQtdGV4dC1zbWFsbC1oZWlnaHQgdy1lZGl0LWlucHV0LXRleHQtc21hbGxcIiB0eXBlPVwidGV4dFwiIHBJbnB1dFRleHQgWyhuZ01vZGVsKV09XCJydWxlLnZhbHVlXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25DaGFuZ2UoKVwiIFtwbGFjZWhvbGRlcl09XCJ0cmFuc2xhdGlvbnNPYmplY3QuZmllbGRzUGxhY2Vob2xkZXJzLnRleHRcIi8+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5SW5wdXQ9XCJsZXQgcnVsZTsgbGV0IG9wdGlvbnM9b3B0aW9uczsgdHlwZTogcWJEYXRhVHlwZUVudW0uTGlzdC50b1N0cmluZygpOyBsZXQgb25DaGFuZ2U9b25DaGFuZ2VcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ3LWZpbHRlci1wYW5lbC1iYXNpYy1xdWVyeS1idWlsZGVyLWlucHV0LXdpZHRoXCI+XHJcbiAgICAgICAgICAgICAgPHAtbXVsdGlTZWxlY3QgW2FwcGVuZFRvXT1cIidib2R5J1wiIFtvcHRpb25zXT1cIm9wdGlvbnNcIiBbKG5nTW9kZWwpXT1cInJ1bGUudmFsdWVcIiAobmdNb2RlbENoYW5nZSk9XCJvbkNoYW5nZSgpXCIgb3B0aW9uTGFiZWw9XCJuYW1lXCIgb3B0aW9uVmFsdWU9XCJ2YWx1ZVwiIGRpc3BsYXk9XCJjaGlwXCIgW3BsYWNlaG9sZGVyXT1cInRyYW5zbGF0aW9uc09iamVjdC5maWVsZHNQbGFjZWhvbGRlcnMubGlzdFwiPjwvcC1tdWx0aVNlbGVjdD5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5SW5wdXQ9XCJsZXQgcnVsZTsgbGV0IG9wdGlvbnM9b3B0aW9uczsgdHlwZTogcWJEYXRhVHlwZUVudW0uQWRkcmVzcy50b1N0cmluZygpOyBsZXQgb25DaGFuZ2U9b25DaGFuZ2VcIj5cclxuICAgICAgICAgIDx3LWFkZHJlc3MtZmllbGQgWyhuZ01vZGVsKV09XCJydWxlLnZhbHVlXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25DaGFuZ2UoKVwiIFtvcGVyYXRvcl09XCJydWxlLm9wZXJhdG9yXCIgW3NlZ21lbnRhdGlvbkFwaVVybF09XCJzZWdtZW50YXRpb25BcGlVcmxcIiBbc2VnbWVudGF0aW9uQXBpVG9rZW5dPVwic2VnbWVudGF0aW9uVG9rZW5cIj48L3ctYWRkcmVzcy1maWVsZD5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9xdWVyeS1idWlsZGVyPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0FkdmFuY2VkU2VhcmNoICYmIGJhc2ljUXVlcnkucnVsZXMubGVuZ3RoPT0wXCIgPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibm9RdWVyeURhdGFcIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICA8bmctdGVtcGxhdGUgI2FkdmFuY2VkPlxyXG4gICAgPGRpdiBbY2xhc3MucXVlcnktYnVpbGRlci1zdHlsZV09XCIhZmlsdGVyUGFuZWxPYmplY3QuYWxsb3dSdWxlU2V0XCIgY2xhc3M9XCJ3LWZpbHRlci1wYW5lbC1jb250YWluZXIgZmFkZWluIGFuaW1hdGlvbi1kdXJhdGlvbi01MDBcIj5cclxuICAgICAgPGRpdiAqbmdJZj1cImZpbHRlclBhbmVsT2JqZWN0LmFsbG93UnVsZVNldFwiIGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIGZsZXgtd3JhcFwiPlxyXG4gICAgICAgIDx3LWJ1dHRvbiBjbGFzcz1cIm1iLTJcIiBbbGFiZWxdPVwidHJhbnNsYXRpb25zT2JqZWN0LmJhc2ljU2VhcmNoVGFiTGFiZWxcIiB0eXBlPVwidGV4dFwiIChvbkNsaWNrKT1cInVwZGF0ZVNlYXJjaFR5cGUoKVwiPjwvdy1idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8cXVlcnktYnVpbGRlciBbZm9ybUNvbnRyb2xdPSdhZHZhbmNlZFF1ZXJ5Q3RybCcgW2NvbmZpZ109J2FkdmFuY2VkUXVlcnlDb25maWcnIFthbGxvd1J1bGVzZXRdPSdmaWx0ZXJQYW5lbE9iamVjdC5hbGxvd1J1bGVTZXQnIFthbGxvd0NvbGxhcHNlXT0nZmlsdGVyUGFuZWxPYmplY3QuYWxsb3dDb2xhcHNlJyBbYWxsb3dSdWxlc2V0XT1cImZpbHRlclBhbmVsT2JqZWN0LmFsbG93UnVsZVNldFwiIFtwZXJzaXN0VmFsdWVPbkZpZWxkQ2hhbmdlXT0ncGVyc2lzdFZhbHVlT25GaWVsZENoYW5nZSc+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZmlsdGVyUGFuZWxPYmplY3QuYWxsb3dSdWxlU2V0OyBlbHNlIG5vUnVsZVNldFwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpxdWVyeUJ1dHRvbkdyb3VwPVwibGV0IHJ1bGVzZXQ7IGxldCBhZGRSdWxlPWFkZFJ1bGU7IGxldCBhZGRSdWxlU2V0PWFkZFJ1bGVTZXQ7IGxldCByZW1vdmVSdWxlU2V0PXJlbW92ZVJ1bGVTZXRcIj5cclxuICAgICAgICAgICAgICAgIDx3LWJ1dHRvbiBjbGFzcz1cIm1yLTJcIiBbbGFiZWxdPVwidHJhbnNsYXRpb25zT2JqZWN0LmFkdmFuY2VkU2VhcmNoLmFkZFJ1bGVCdXR0b25MYWJlbFwiIHR5cGU9XCJzZWNvbmRhcnlcIiBzaXplPVwic21hbGxcIiAob25DbGljayk9XCJhZGRSdWxlKClcIj48L3ctYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPHctYnV0dG9uIGNsYXNzPVwibXItMlwiIFtsYWJlbF09XCJ0cmFuc2xhdGlvbnNPYmplY3QuYWR2YW5jZWRTZWFyY2guYWRkUnVsZVNldEJ1dHRvbkxhYmVsXCIgdHlwZT1cInNlY29uZGFyeVwiIGljb249XCJwaSBwaS1wbHVzXCIgc2l6ZT1cInNtYWxsXCIgKm5nSWY9XCJhZGRSdWxlU2V0XCIgKG9uQ2xpY2spPVwiYWRkUnVsZVNldCgpXCI+PC93LWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgIDx3LWJ1dHRvbiBjbGFzcz1cIm1yLTJcIiBbbGFiZWxdPVwidHJhbnNsYXRpb25zT2JqZWN0LmFkdmFuY2VkU2VhcmNoLnJlbW92ZVJ1bGVTZXRCdXR0b25MYWJlbFwiIHR5cGU9XCJ0ZXJ0aWFyeVwiIGljb249XCJwaSBwaS1taW51c1wiIHNpemU9XCJzbWFsbFwiICpuZ0lmPVwicmVtb3ZlUnVsZVNldFwiIChvbkNsaWNrKT1cInJlbW92ZVJ1bGVTZXQoKVwiPjwvdy1idXR0b24+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNub1J1bGVTZXQ+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5QnV0dG9uR3JvdXA9XCJsZXQgcnVsZXNldDsgbGV0IGFkZFJ1bGU9YWRkUnVsZTsgbGV0IGFkZFJ1bGVTZXQ9YWRkUnVsZVNldDsgbGV0IHJlbW92ZVJ1bGVTZXQ9cmVtb3ZlUnVsZVNldFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1lbmQgZmxleC13cmFwXCI+XHJcbiAgICAgICAgICAgICAgICA8dy1idXR0b24gW2xhYmVsXT1cInRyYW5zbGF0aW9uc09iamVjdC5iYXNpY1NlYXJjaFRhYkxhYmVsXCIgdHlwZT1cInRleHRcIiAob25DbGljayk9XCJ1cGRhdGVTZWFyY2hUeXBlKClcIj48L3ctYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWR2YW5jZWQtcXVlcnktYnV0dG9uLWdyb3VwIGdhcC0zXCI+XHJcbiAgICAgICAgICAgICAgICA8dy1idXR0b24gW2xhYmVsXT1cInRyYW5zbGF0aW9uc09iamVjdC5hZHZhbmNlZFNlYXJjaC5hZGRSdWxlQnV0dG9uTGFiZWxcIiB0eXBlPVwic2Vjb25kYXJ5XCIgc2l6ZT1cInNtYWxsXCIgKG9uQ2xpY2spPVwiYWRkUnVsZSgpXCI+PC93LWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgIDx3LWJ1dHRvbiBbbGFiZWxdPVwidHJhbnNsYXRpb25zT2JqZWN0LmFkdmFuY2VkU2VhcmNoLmFkZFJ1bGVTZXRCdXR0b25MYWJlbFwiIHR5cGU9XCJzZWNvbmRhcnlcIiBpY29uPVwicGkgcGktcGx1c1wiIHNpemU9XCJzbWFsbFwiICpuZ0lmPVwiYWRkUnVsZVNldFwiIChvbkNsaWNrKT1cImFkZFJ1bGVTZXQoKVwiPjwvdy1idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8dy1idXR0b24gW2xhYmVsXT1cInRyYW5zbGF0aW9uc09iamVjdC5hZHZhbmNlZFNlYXJjaC5yZW1vdmVSdWxlU2V0QnV0dG9uTGFiZWxcIiB0eXBlPVwidGVydGlhcnlcIiBpY29uPVwicGkgcGktbWludXNcIiBzaXplPVwic21hbGxcIiAqbmdJZj1cInJlbW92ZVJ1bGVTZXRcIiAob25DbGljayk9XCJyZW1vdmVSdWxlU2V0KClcIj48L3ctYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqcXVlcnlBcnJvd0ljb24+XHJcbiAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIHR5cGU9XCJidXR0b25cIiBpY29uPVwicGkgcGktYW5nbGUtcmlnaHRcIiBjbGFzcz1cInAtYnV0dG9uLXJvdW5kZWQgcC1idXR0b24tdGV4dFwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqcXVlcnlSZW1vdmVCdXR0b249XCJsZXQgcnVsZTsgbGV0IHJlbW92ZVJ1bGU9cmVtb3ZlUnVsZVwiPlxyXG4gICAgICAgICAgICA8dy1idXR0b24gY2xhc3M9XCJcIiBsYWJlbD1cIlwiIHNpemU9XCJzbWFsbFwiIHR5cGU9XCJ0ZXJ0aWFyeVwiIGljb249XCJwaSBwaS10aW1lc1wiIChvbkNsaWNrKT1cInJlbW92ZVJ1bGUocnVsZSlcIj48L3ctYnV0dG9uPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqcXVlcnlTd2l0Y2hHcm91cD1cImxldCBydWxlc2V0OyBsZXQgb25DaGFuZ2U9b25DaGFuZ2VcIj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInJ1bGVzZXRcIiBjbGFzcz1cInctZmlsdGVyLXBhbmVsLXN3aXRjaC1ncm91cC1wYWRkaW5nXCI+XHJcbiAgICAgICAgICAgICAgPHctc2VsZWN0LWJ1dHRvbiAqbmdJZj1cImZpbHRlclBhbmVsT2JqZWN0LmFsbG93TG9naWNhbFJ1bGVcIiBbc3RhdGVPcHRpb25zXT1cIlt7bGFiZWw6ICdBbmQnLCB2YWx1ZTogJ2FuZCd9LCB7bGFiZWw6ICdPcicsIHZhbHVlOiAnb3InfV1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJydWxlc2V0LmNvbmRpdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2l6ZV09XCInc21hbGwnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2YWx1ZSk9XCJydWxlc2V0LmNvbmRpdGlvbiA9ICRldmVudFwiPlxyXG4gICAgICAgICAgICAgIDwvdy1zZWxlY3QtYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5RW50aXR5PVwibGV0IHJ1bGU7IGxldCBlbnRpdGllcz1lbnRpdGllczsgbGV0IG9uQ2hhbmdlPW9uQ2hhbmdlXCI+XHJcbiAgICAgICAgICAgIDxwLWRyb3Bkb3duICpuZ0lmPVwiZmlsdGVyUGFuZWxPYmplY3QuZW5pdHlNb2RlXCIgY2xhc3M9XCJmaWVsZC1nYXAgdy1lZGl0LXNlbGVjdC1zbWFsbCB3LWVudGl0eS1kcm9wZG93blwiIGFwcGVuZFRvPVwiYm9keVwiIFtvcHRpb25zXT1cImVudGl0aWVzXCIgWyhuZ01vZGVsKV09XCJydWxlLmVudGl0eVwiIG9wdGlvbkxhYmVsPVwibmFtZVwiIG9wdGlvblZhbHVlPVwidmFsdWVcIiAobmdNb2RlbENoYW5nZSk9XCJvbkNoYW5nZSgkZXZlbnQsIHJ1bGUpXCI+PC9wLWRyb3Bkb3duPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqcXVlcnlGaWVsZD1cImxldCBydWxlOyBsZXQgZmllbGRzPWZpZWxkczsgbGV0IG9uQ2hhbmdlPW9uQ2hhbmdlOyBsZXQgZ2V0RmllbGRzID0gZ2V0RmllbGRzXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicXVlcnktYnVpbGRlci1maWVsZC13aWR0aFwiPlxyXG4gICAgICAgICAgICAgIDxwLWRyb3Bkb3duIGNsYXNzPVwiZmllbGQtZ2FwIHctZWRpdC1zZWxlY3Qtc21hbGxcIiBhcHBlbmRUbz1cImJvZHlcIiBbb3B0aW9uc109XCJnZXRGaWVsZHMocnVsZS5lbnRpdHkpXCIgWyhuZ01vZGVsKV09XCJydWxlLmZpZWxkXCIgb3B0aW9uTGFiZWw9XCJuYW1lXCIgb3B0aW9uVmFsdWU9XCJ2YWx1ZVwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlKCRldmVudCwgcnVsZSlcIj48L3AtZHJvcGRvd24+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5T3BlcmF0b3I9XCJsZXQgcnVsZTsgbGV0IG9wZXJhdG9ycz1vcGVyYXRvcnM7IGxldCBvbkNoYW5nZT1vbkNoYW5nZVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInF1ZXJ5LWJ1aWxkZXItb3BlcmF0b3Itd2lkdGhcIj5cclxuICAgICAgICAgICAgICA8cC1kcm9wZG93biBjbGFzcz1cImZpZWxkLWdhcCB3LWVkaXQtc2VsZWN0LXNtYWxsXCIgYXBwZW5kVG89XCJib2R5XCIgWyhuZ01vZGVsKV09XCJydWxlLm9wZXJhdG9yXCIgW29wdGlvbnNdPVwib3BlcmF0b3JzXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25DaGFuZ2UocnVsZSlcIj48L3AtZHJvcGRvd24+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5SW5wdXQ9XCJsZXQgcnVsZTsgdHlwZTogcWJEYXRhVHlwZUVudW0uQm9vbGVhbi50b1N0cmluZygpOyBsZXQgb25DaGFuZ2U9b25DaGFuZ2VcIj5cclxuICAgICAgICAgICAgPHctdG9nZ2xlLWJ1dHRvbiBjbGFzcz1cImZpZWxkLWdhcCB0b2dnbGUtYnV0dG9uLWFsaWduXCIgc2l6ZT1cInNtYWxsXCIgWyhuZ01vZGVsKV09XCJydWxlLnZhbHVlXCIgb25MYWJlbD1cIlRydWVcIiBvZmZMYWJlbD1cIkZhbHNlXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25DaGFuZ2UoKVwiPjwvdy10b2dnbGUtYnV0dG9uPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqcXVlcnlJbnB1dD1cImxldCBydWxlOyB0eXBlOiBxYkRhdGFUeXBlRW51bS5EYXRldGltZS50b1N0cmluZygpOyBsZXQgb25DaGFuZ2U9b25DaGFuZ2VcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJxdWVyeS1idWlsZGVyLWlucHV0LXdpZHRoXCI+XHJcbiAgICAgICAgICAgICAgPHctZWRpdC1jYWxlbmRhciBjbGFzcz1cImZpZWxkLWdhcFwiIGFwcGVuZFRvPVwiYm9keVwiIHNpemU9XCJzbWFsbFwiIFtzaG93SWNvbl09XCJmYWxzZVwiIFsobmdNb2RlbCldPVwicnVsZS52YWx1ZVwiIChvbkNoYW5nZSk9XCJvbkNoYW5nZSgpXCIgW3Nob3dUaW1lXT1cInRydWVcIiBbc2hvd1NlY29uZHNdPVwidHJ1ZVwiIFtwbGFjZWhvbGRlcl09XCJ0cmFuc2xhdGlvbnNPYmplY3QuZmllbGRzUGxhY2Vob2xkZXJzLmRhdGV0aW1lXCIgW2Rpc3BsYXlJbmxpbmVCbG9ja109XCJ0cnVlXCI+PC93LWVkaXQtY2FsZW5kYXI+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5SW5wdXQ9XCJsZXQgcnVsZTsgbGV0IGZpZWxkPWZpZWxkOyB0eXBlOiBxYkRhdGFUeXBlRW51bS5EZWNpbWFsLnRvU3RyaW5nKCk7IGxldCBvbkNoYW5nZT1vbkNoYW5nZVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInF1ZXJ5LWJ1aWxkZXItaW5wdXQtd2lkdGhcIj5cclxuICAgICAgICAgICAgICA8cC1pbnB1dE51bWJlciBpbnB1dFN0eWxlQ2xhc3M9XCJmbGV4IGZsZXgtMVwiIHN0eWxlQ2xhc3M9XCJmbGV4IGZsZXgtMVwiIGNsYXNzPVwiZmllbGQtZ2FwIHctZWRpdC1pbnB1dC1udW1iZXItc21hbGwgdy1lZGl0LWlucHV0LW51bWJlci1zbWFsbC1oZWlnaHRcIiBbKG5nTW9kZWwpXT1cInJ1bGUudmFsdWVcIiBpbnB1dElkPVwibWlubWF4XCIgaW5wdXRJZD1cIm1pbm1heFwiIG1vZGU9XCJkZWNpbWFsXCIgW21pbkZyYWN0aW9uRGlnaXRzXT1cIjJcIiBbbWF4RnJhY3Rpb25EaWdpdHNdPVwiNVwiIFttaW5dPVwiMFwiIFttYXhdPVwiMTAwXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25DaGFuZ2UoKVwiIFtwbGFjZWhvbGRlcl09XCJ0cmFuc2xhdGlvbnNPYmplY3QuZmllbGRzUGxhY2Vob2xkZXJzLmRlY2ltYWxcIj4gPC9wLWlucHV0TnVtYmVyPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpxdWVyeUlucHV0PVwibGV0IHJ1bGU7IGxldCBvcHRpb25zPW9wdGlvbnM7IHR5cGU6IHFiRGF0YVR5cGVFbnVtLkxpc3QudG9TdHJpbmcoKTsgbGV0IG9uQ2hhbmdlPW9uQ2hhbmdlXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicXVlcnktYnVpbGRlci1pbnB1dC13aWR0aFwiPlxyXG4gICAgICAgICAgICAgIDxwLWRyb3Bkb3duIGNsYXNzPVwiZmllbGQtZ2FwIHctZWRpdC1zZWxlY3Qtc21hbGxcIiBhcHBlbmRUbz1cImJvZHlcIiBbb3B0aW9uc109XCJvcHRpb25zXCIgWyhuZ01vZGVsKV09XCJydWxlLnZhbHVlXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25DaGFuZ2UoKVwiIG9wdGlvbkxhYmVsPVwibmFtZVwiIG9wdGlvblZhbHVlPVwidmFsdWVcIiBbcGxhY2Vob2xkZXJdPVwidHJhbnNsYXRpb25zT2JqZWN0LmZpZWxkc1BsYWNlaG9sZGVycy5saXN0XCI+PC9wLWRyb3Bkb3duPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpxdWVyeUlucHV0PVwibGV0IHJ1bGU7IGxldCBvcHRpb25zPW9wdGlvbnM7IHR5cGU6IHFiRGF0YVR5cGVFbnVtLkxpc3QudG9TdHJpbmcoKTsgbGV0IG9uQ2hhbmdlPW9uQ2hhbmdlXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicXVlcnktYnVpbGRlci1pbnB1dC13aWR0aCBmaWVsZC1nYXBcIj5cclxuICAgICAgICAgICAgICA8dy1saXN0LWZpZWxkIFtvcHRpb25zXT1cIm9wdGlvbnNcIiBbKG5nTW9kZWwpXT1cInJ1bGUudmFsdWVcIiBbb3BlcmF0b3JdPVwicnVsZS5vcGVyYXRvclwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlKClcIiBbcGxhY2Vob2xkZXJdPVwidHJhbnNsYXRpb25zT2JqZWN0LmZpZWxkc1BsYWNlaG9sZGVycy5saXN0XCI+PC93LWxpc3QtZmllbGQ+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5SW5wdXQ9XCJsZXQgcnVsZTsgbGV0IGZpZWxkPWZpZWxkOyB0eXBlOiBxYkRhdGFUeXBlRW51bS5OdW1iZXIudG9TdHJpbmcoKTsgbGV0IG9uQ2hhbmdlPW9uQ2hhbmdlXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicXVlcnktYnVpbGRlci1pbnB1dC13aWR0aFwiPlxyXG4gICAgICAgICAgICAgIDxwLWlucHV0TnVtYmVyIFt1c2VHcm91cGluZ109XCJmYWxzZVwiIGlucHV0U3R5bGVDbGFzcz1cImZsZXggZmxleC0xXCIgc3R5bGVDbGFzcz1cImZsZXggZmxleC0xXCIgY2xhc3M9XCJmaWVsZC1nYXAgdy1lZGl0LWlucHV0LW51bWJlci1zbWFsbCB3LWVkaXQtaW5wdXQtbnVtYmVyLXNtYWxsLWhlaWdodFwiIFsobmdNb2RlbCldPVwicnVsZS52YWx1ZVwiIGlucHV0SWQ9XCJtaW5tYXhcIiBpbnB1dElkPVwibWlubWF4XCIgW21pbl09XCIwXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25DaGFuZ2UoKVwiIFtwbGFjZWhvbGRlcl09XCJ0cmFuc2xhdGlvbnNPYmplY3QuZmllbGRzUGxhY2Vob2xkZXJzLm51bWJlclwiPiA8L3AtaW5wdXROdW1iZXI+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5SW5wdXQ9XCJsZXQgcnVsZTsgbGV0IGZpZWxkPWZpZWxkOyB0eXBlOiBxYkRhdGFUeXBlRW51bS5UZXh0LnRvU3RyaW5nKCk7IGxldCBvbkNoYW5nZT1vbkNoYW5nZVwiPlxyXG4gICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmaWVsZC1nYXAgcXVlcnktYnVpbGRlci1pbnB1dC13aWR0aCB3LWVkaXQtaW5wdXQtdGV4dC1zbWFsbC1oZWlnaHQgdy1lZGl0LWlucHV0LXRleHQtc21hbGxcIiB0eXBlPVwidGV4dFwiIHBJbnB1dFRleHQgWyhuZ01vZGVsKV09XCJydWxlLnZhbHVlXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25DaGFuZ2UoKVwiIFtwbGFjZWhvbGRlcl09XCJ0cmFuc2xhdGlvbnNPYmplY3QuZmllbGRzUGxhY2Vob2xkZXJzLnRleHRcIi8+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpxdWVyeUlucHV0PVwibGV0IHJ1bGU7IGxldCBvcHRpb25zPW9wdGlvbnM7IHR5cGU6IHFiRGF0YVR5cGVFbnVtLkFkZHJlc3MudG9TdHJpbmcoKTsgbGV0IG9uQ2hhbmdlPW9uQ2hhbmdlXCI+XHJcbiAgICAgICAgICAgIDx3LWFkZHJlc3MtZmllbGQgWyhuZ01vZGVsKV09XCJydWxlLnZhbHVlXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25DaGFuZ2UoKVwiIFtvcGVyYXRvcl09XCJydWxlLm9wZXJhdG9yXCIgW3NlZ21lbnRhdGlvbkFwaVVybF09XCJzZWdtZW50YXRpb25BcGlVcmxcIiBbc2VnbWVudGF0aW9uQXBpVG9rZW5dPVwic2VnbWVudGF0aW9uVG9rZW5cIiBbc2VsZWN0UGxhY2Vob2xkZXJdPVwidHJhbnNsYXRpb25zT2JqZWN0LmZpZWxkc1BsYWNlaG9sZGVycy5saXN0XCI+PC93LWFkZHJlc3MtZmllbGQ+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9xdWVyeS1idWlsZGVyPlxyXG5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzQWR2YW5jZWRTZWFyY2ggJiYgYWR2YW5jZWRRdWVyeS5ydWxlcy5sZW5ndGg9PTBcIiA+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm5vUXVlcnlEYXRhXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPCEtLSBHcm91cGVkIGZpbHRlciAtLT5cclxuICAgICAgPGRpdiAqbmdJZj1cImZpbHRlclBhbmVsT2JqZWN0LmFsbG93R3JvdXBlZFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJweS01XCI+XHJcbiAgICAgICAgICA8dy12aWV3LWNhcmQtdGl0bGUtdGV4dCBbY2FyZFRpdGxlXT1cInRyYW5zbGF0aW9uc09iamVjdC5ncm91cGVkRmlsdGVyVGl0bGVcIj48L3ctdmlldy1jYXJkLXRpdGxlLXRleHQ+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxxdWVyeS1idWlsZGVyIFtmb3JtQ29udHJvbF09J2dyb3VwZWRRdWVyeUN0cmwnIFtjb25maWddPSdhZHZhbmNlZFF1ZXJ5Q29uZmlnJyBbYWxsb3dSdWxlc2V0XT0nZmlsdGVyUGFuZWxPYmplY3QuYWxsb3dSdWxlU2V0JyBbYWxsb3dDb2xsYXBzZV09J2ZpbHRlclBhbmVsT2JqZWN0LmFsbG93Q29sYXBzZScgW2FsbG93UnVsZXNldF09XCJmaWx0ZXJQYW5lbE9iamVjdC5hbGxvd1J1bGVTZXRcIiBbcGVyc2lzdFZhbHVlT25GaWVsZENoYW5nZV09J3BlcnNpc3RWYWx1ZU9uRmllbGRDaGFuZ2UnPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqcXVlcnlCdXR0b25Hcm91cD1cImxldCBydWxlc2V0OyBsZXQgYWRkUnVsZT1hZGRSdWxlOyBsZXQgYWRkUnVsZVNldD1hZGRSdWxlU2V0OyBsZXQgcmVtb3ZlUnVsZVNldD1yZW1vdmVSdWxlU2V0XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC0zIG1iLTNcIj5cclxuICAgICAgICAgICAgICA8dy1idXR0b24gW2xhYmVsXT1cInRyYW5zbGF0aW9uc09iamVjdC5hZHZhbmNlZFNlYXJjaC5hZGRSdWxlQnV0dG9uTGFiZWxcIiB0eXBlPVwic2Vjb25kYXJ5XCIgc2l6ZT1cInNtYWxsXCIgKG9uQ2xpY2spPVwiYWRkUnVsZSgpXCI+PC93LWJ1dHRvbj5cclxuICAgICAgICAgICAgICA8dy1idXR0b24gW2xhYmVsXT1cInRyYW5zbGF0aW9uc09iamVjdC5hZHZhbmNlZFNlYXJjaC5hZGRSdWxlU2V0QnV0dG9uTGFiZWxcIiB0eXBlPVwic2Vjb25kYXJ5XCIgaWNvbj1cInBpIHBpLXBsdXNcIiBzaXplPVwic21hbGxcIiAqbmdJZj1cImFkZFJ1bGVTZXRcIiAob25DbGljayk9XCJhZGRSdWxlU2V0KClcIj48L3ctYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDx3LWJ1dHRvbiBbbGFiZWxdPVwidHJhbnNsYXRpb25zT2JqZWN0LmFkdmFuY2VkU2VhcmNoLnJlbW92ZVJ1bGVTZXRCdXR0b25MYWJlbFwiIHR5cGU9XCJ0ZXJ0aWFyeVwiIGljb249XCJwaSBwaS1taW51c1wiIHNpemU9XCJzbWFsbFwiICpuZ0lmPVwicmVtb3ZlUnVsZVNldFwiIChvbkNsaWNrKT1cInJlbW92ZVJ1bGVTZXQoKVwiPjwvdy1idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqcXVlcnlBcnJvd0ljb24+XHJcbiAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIHR5cGU9XCJidXR0b25cIiBpY29uPVwicGkgcGktYW5nbGUtcmlnaHRcIiBjbGFzcz1cInAtYnV0dG9uLXJvdW5kZWQgcC1idXR0b24tdGV4dFwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqcXVlcnlSZW1vdmVCdXR0b249XCJsZXQgcnVsZTsgbGV0IHJlbW92ZVJ1bGU9cmVtb3ZlUnVsZVwiPlxyXG4gICAgICAgICAgICA8dy1idXR0b24gY2xhc3M9XCJcIiBsYWJlbD1cIlwiIHNpemU9XCJzbWFsbFwiIHR5cGU9XCJ0ZXJ0aWFyeVwiIGljb249XCJwaSBwaS10aW1lc1wiIChvbkNsaWNrKT1cInJlbW92ZVJ1bGUocnVsZSlcIj48L3ctYnV0dG9uPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqcXVlcnlTd2l0Y2hHcm91cD1cImxldCBydWxlc2V0OyBsZXQgb25DaGFuZ2U9b25DaGFuZ2VcIj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInJ1bGVzZXRcIj5cclxuICAgICAgICAgICAgICA8dy1zZWxlY3QtYnV0dG9uICpuZ0lmPVwiZmlsdGVyUGFuZWxPYmplY3QuYWxsb3dMb2dpY2FsUnVsZVwiIFtzdGF0ZU9wdGlvbnNdPVwiW3tsYWJlbDogJ0FuZCcsIHZhbHVlOiAnYW5kJ30sIHtsYWJlbDogJ09yJywgdmFsdWU6ICdvcid9XVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInJ1bGVzZXQuY29uZGl0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaXplXT1cIidzbWFsbCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZhbHVlKT1cInJ1bGVzZXQuY29uZGl0aW9uID0gJGV2ZW50XCI+XHJcbiAgICAgICAgICAgICAgPC93LXNlbGVjdC1idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqcXVlcnlFbnRpdHk9XCJsZXQgcnVsZTsgbGV0IGVudGl0aWVzPWVudGl0aWVzOyBsZXQgb25DaGFuZ2U9b25DaGFuZ2VcIj5cclxuICAgICAgICAgICAgPHAtZHJvcGRvd24gY2xhc3M9XCJtci0zIHctZWRpdC1zZWxlY3Qtc21hbGxcIiAqbmdJZj1cImZpbHRlclBhbmVsT2JqZWN0LmVuaXR5TW9kZVwiIGFwcGVuZFRvPVwiYm9keVwiIFtvcHRpb25zXT1cImVudGl0aWVzXCIgWyhuZ01vZGVsKV09XCJydWxlLmVudGl0eVwiIG9wdGlvbkxhYmVsPVwibmFtZVwiIG9wdGlvblZhbHVlPVwidmFsdWVcIiAobmdNb2RlbENoYW5nZSk9XCJvbkNoYW5nZSgkZXZlbnQsIHJ1bGUpXCI+PC9wLWRyb3Bkb3duPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqcXVlcnlGaWVsZD1cImxldCBydWxlOyBsZXQgZmllbGRzPWZpZWxkczsgbGV0IG9uQ2hhbmdlPW9uQ2hhbmdlOyBsZXQgZ2V0RmllbGRzID0gZ2V0RmllbGRzXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicXVlcnktYnVpbGRlci1maWVsZC13aWR0aFwiPlxyXG4gICAgICAgICAgICAgIDxwLWRyb3Bkb3duIGNsYXNzPVwibXItMyB3LWVkaXQtc2VsZWN0LXNtYWxsXCIgYXBwZW5kVG89XCJib2R5XCIgW29wdGlvbnNdPVwiZ2V0RmllbGRzKHJ1bGUuZW50aXR5KVwiIFsobmdNb2RlbCldPVwicnVsZS5maWVsZFwiIG9wdGlvbkxhYmVsPVwibmFtZVwiIG9wdGlvblZhbHVlPVwidmFsdWVcIiAobmdNb2RlbENoYW5nZSk9XCJvbkNoYW5nZSgkZXZlbnQsIHJ1bGUpXCI+PC9wLWRyb3Bkb3duPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpxdWVyeU9wZXJhdG9yPVwibGV0IHJ1bGU7IGxldCBvcGVyYXRvcnM9b3BlcmF0b3JzOyBsZXQgb25DaGFuZ2U9b25DaGFuZ2VcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJxdWVyeS1idWlsZGVyLW9wZXJhdG9yLXdpZHRoXCI+XHJcbiAgICAgICAgICAgICAgPHAtZHJvcGRvd24gY2xhc3M9XCJtci0zIHctZWRpdC1zZWxlY3Qtc21hbGxcIiBhcHBlbmRUbz1cImJvZHlcIiBbKG5nTW9kZWwpXT1cInJ1bGUub3BlcmF0b3JcIiBbb3B0aW9uc109XCJvcGVyYXRvcnNcIiAobmdNb2RlbENoYW5nZSk9XCJvbkNoYW5nZShydWxlKVwiPjwvcC1kcm9wZG93bj5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqcXVlcnlJbnB1dD1cImxldCBydWxlOyB0eXBlOiBxYkRhdGFUeXBlRW51bS5Cb29sZWFuLnRvU3RyaW5nKCk7IGxldCBvbkNoYW5nZT1vbkNoYW5nZVwiPlxyXG4gICAgICAgICAgICA8dy10b2dnbGUtYnV0dG9uIGNsYXNzPVwibXItM1wiIHNpemU9XCJzbWFsbFwiIFsobmdNb2RlbCldPVwicnVsZS52YWx1ZVwiIG9uTGFiZWw9XCJUcnVlXCIgb2ZmTGFiZWw9XCJGYWxzZVwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlKClcIj48L3ctdG9nZ2xlLWJ1dHRvbj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5SW5wdXQ9XCJsZXQgcnVsZTsgdHlwZTogcWJEYXRhVHlwZUVudW0uRGF0ZXRpbWUudG9TdHJpbmcoKTsgbGV0IG9uQ2hhbmdlPW9uQ2hhbmdlXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicXVlcnktYnVpbGRlci1pbnB1dC13aWR0aFwiPlxyXG4gICAgICAgICAgICAgIDx3LWVkaXQtY2FsZW5kYXIgY2xhc3M9XCJmaWVsZC1nYXBcIiBhcHBlbmRUbz1cImJvZHlcIiBzaXplPVwic21hbGxcIiBbc2hvd0ljb25dPVwiZmFsc2VcIiBbKG5nTW9kZWwpXT1cInJ1bGUudmFsdWVcIiAob25DaGFuZ2UpPVwib25DaGFuZ2UoKVwiIFtzaG93VGltZV09XCJ0cnVlXCIgW3Nob3dTZWNvbmRzXT1cInRydWVcIiBbcGxhY2Vob2xkZXJdPVwidHJhbnNsYXRpb25zT2JqZWN0LmZpZWxkc1BsYWNlaG9sZGVycy5kYXRldGltZVwiIFtkaXNwbGF5SW5saW5lQmxvY2tdPVwidHJ1ZVwiPjwvdy1lZGl0LWNhbGVuZGFyPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpxdWVyeUlucHV0PVwibGV0IHJ1bGU7IGxldCBmaWVsZD1maWVsZDsgdHlwZTogcWJEYXRhVHlwZUVudW0uRGVjaW1hbC50b1N0cmluZygpOyBsZXQgb25DaGFuZ2U9b25DaGFuZ2VcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJxdWVyeS1idWlsZGVyLWlucHV0LXdpZHRoXCI+XHJcbiAgICAgICAgICAgICAgPHAtaW5wdXROdW1iZXIgY2xhc3M9XCJtci0zXCIgWyhuZ01vZGVsKV09XCJydWxlLnZhbHVlXCIgaW5wdXRJZD1cIm1pbm1heFwiIGlucHV0SWQ9XCJtaW5tYXhcIiBtb2RlPVwiZGVjaW1hbFwiIFttaW5GcmFjdGlvbkRpZ2l0c109XCIyXCIgW21heEZyYWN0aW9uRGlnaXRzXT1cIjVcIiBbbWluXT1cIjBcIiBbbWF4XT1cIjEwMFwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlKClcIiBbcGxhY2Vob2xkZXJdPVwidHJhbnNsYXRpb25zT2JqZWN0LmZpZWxkc1BsYWNlaG9sZGVycy5kZWNpbWFsXCI+IDwvcC1pbnB1dE51bWJlcj5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqcXVlcnlJbnB1dD1cImxldCBydWxlOyBsZXQgb3B0aW9ucz1vcHRpb25zOyB0eXBlOiBxYkRhdGFUeXBlRW51bS5MaXN0LnRvU3RyaW5nKCk7IGxldCBvbkNoYW5nZT1vbkNoYW5nZVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInF1ZXJ5LWJ1aWxkZXItaW5wdXQtd2lkdGhcIj5cclxuICAgICAgICAgICAgICA8dy1saXN0LWZpZWxkIFtvcHRpb25zXT1cIm9wdGlvbnNcIiBbKG5nTW9kZWwpXT1cInJ1bGUudmFsdWVcIiBbb3BlcmF0b3JdPVwicnVsZS5vcGVyYXRvclwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlKClcIiBbcGxhY2Vob2xkZXJdPVwidHJhbnNsYXRpb25zT2JqZWN0LmZpZWxkc1BsYWNlaG9sZGVycy5saXN0XCI+PC93LWxpc3QtZmllbGQ+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5SW5wdXQ9XCJsZXQgcnVsZTsgbGV0IGZpZWxkPWZpZWxkOyB0eXBlOiBxYkRhdGFUeXBlRW51bS5OdW1iZXIudG9TdHJpbmcoKTsgbGV0IG9uQ2hhbmdlPW9uQ2hhbmdlXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicXVlcnktYnVpbGRlci1pbnB1dC13aWR0aFwiPlxyXG4gICAgICAgICAgICAgIDxwLWlucHV0TnVtYmVyIFt1c2VHcm91cGluZ109XCJmYWxzZVwiIGlucHV0U3R5bGVDbGFzcz1cImZsZXggZmxleC0xXCIgc3R5bGVDbGFzcz1cImZsZXggZmxleC0xXCIgY2xhc3M9XCJmaWVsZC1nYXAgdy1lZGl0LWlucHV0LW51bWJlci1zbWFsbCB3LWVkaXQtaW5wdXQtbnVtYmVyLXNtYWxsLWhlaWdodFwiIFsobmdNb2RlbCldPVwicnVsZS52YWx1ZVwiIGlucHV0SWQ9XCJtaW5tYXhcIiBpbnB1dElkPVwibWlubWF4XCIgW21pbl09XCIwXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25DaGFuZ2UoKVwiIFtwbGFjZWhvbGRlcl09XCJ0cmFuc2xhdGlvbnNPYmplY3QuZmllbGRzUGxhY2Vob2xkZXJzLm51bWJlclwiPiA8L3AtaW5wdXROdW1iZXI+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5SW5wdXQ9XCJsZXQgcnVsZTsgbGV0IGZpZWxkPWZpZWxkOyB0eXBlOiBxYkRhdGFUeXBlRW51bS5UZXh0LnRvU3RyaW5nKCk7IGxldCBvbkNoYW5nZT1vbkNoYW5nZVwiPlxyXG4gICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJtci0zIHF1ZXJ5LWJ1aWxkZXItaW5wdXQtd2lkdGggdy1lZGl0LWlucHV0LXRleHQtc21hbGwtaGVpZ2h0IHdhcHAtaW5wdXRcIiB0eXBlPVwidGV4dFwiIHBJbnB1dFRleHQgWyhuZ01vZGVsKV09XCJydWxlLnZhbHVlXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25DaGFuZ2UoKVwiIFtwbGFjZWhvbGRlcl09XCJ0cmFuc2xhdGlvbnNPYmplY3QuZmllbGRzUGxhY2Vob2xkZXJzLnRleHRcIi8+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgPC9xdWVyeS1idWlsZGVyPlxyXG5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNBZHZhbmNlZFNlYXJjaCAmJiBncm91cGVkUXVlcnkucnVsZXMubGVuZ3RoPT0wXCIgPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm5vUXVlcnlEYXRhXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgPG5nLXRlbXBsYXRlICNub1F1ZXJ5RGF0YT5cclxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgZmxleC13cmFwIGNhcmQtY29udGFpbmVyIHN1cmZhY2UtNTAgbWItM1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciB3LWZ1bGwgaC00cmVtIHRleHQtZ3JheS05MDAgYm9yZGVyLXJvdW5kIG0tMlwiPlxyXG4gICAgICAgIHt7dHJhbnNsYXRpb25zT2JqZWN0Lm5vUnVsZXNMYWJlbH19XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuIl19
447
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidy1maWx0ZXItcGFuZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvd2FwcC1jb21wb25lbnRzL3NyYy9saWIvbWlzYy93LWZpbHRlci1wYW5lbC93LWZpbHRlci1wYW5lbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy93YXBwLWNvbXBvbmVudHMvc3JjL2xpYi9taXNjL3ctZmlsdGVyLXBhbmVsL3ctZmlsdGVyLXBhbmVsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFL0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBSWpFLE9BQU8sRUFBRSxlQUFlLEVBQWdCLE1BQU0sc0RBQXNELENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBWXJHLE1BQU0sT0FBTyxxQkFBcUI7SUFxRmhDLFlBQ1UsV0FBd0IsRUFDeEIsVUFBc0IsRUFDdEIsY0FBcUM7UUFGckMsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixtQkFBYyxHQUFkLGNBQWMsQ0FBdUI7UUFwRnhDLDhCQUF5QixHQUFZLEtBQUssQ0FBQztRQUVsRCxxQkFBZ0IsR0FBWSxLQUFLLENBQUM7UUFDbEMscUJBQWdCLEdBQVksS0FBSyxDQUFDO1FBQ2xDLG1CQUFjLEdBQUcsY0FBYyxDQUFDO1FBQ2hDLGdCQUFXLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUc1QyxlQUFVLEdBQVE7WUFDaEIsU0FBUyxFQUFFLEtBQUs7WUFDaEIsS0FBSyxFQUFFLEVBQUU7U0FDVixDQUFDO1FBQ0YsaUJBQVksR0FBUTtZQUNsQixTQUFTLEVBQUUsS0FBSztZQUNo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QyxZQUFZO3NCQUFuQyxNQUFNO3VCQUFDLGNBQWM7Z0JBQ0QsU0FBUztzQkFBN0IsTUFBTTt1QkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFFCRGF0YVR5cGVFbnVtIH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZGVscy9lbnVtcy5tb2RlbCc7XHJcbmltcG9ydCB7IFFiUGFuZWxGaWx0ZXIgfSBmcm9tICcuLi8uLi9zaGFyZWQvbW9kZWxzL2ZpbHRlci1wYW5lbC9xYi1wYW5lbC1maWx0ZXIubW9kZWwnO1xyXG5pbXBvcnQgeyBFbnRpdHksIEVudGl0eU1hcCwgRmllbGQsIEZpZWxkTWFwLCBRdWVyeUJ1aWxkZXJDb25maWcsIFJ1bGUsIFJ1bGVTZXQgfSBmcm9tICcuLi8uLi9zaGFyZWQvbW9kZWxzL2ZpbHRlci1wYW5lbC9maWVsZC5tb2RlbCc7XHJcbmltcG9ydCB7IEZpbHRlclBhbmVsVHJhbnNsYXRpb25zIH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZGVscy9maWx0ZXItcGFuZWwvZmlsdGVyLXBhbmVsLXRyYW5zbGF0aW9ucy5tb2RlbCc7XHJcbmltcG9ydCB7IFF1ZXJ5UmVzdWx0VHlwZSwgUXVlcnlSZXN1bHRzIH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZGVscy9maWx0ZXItcGFuZWwvcXVlcnktcmVzdWx0cy5tb2RlbCc7XHJcbmltcG9ydCB7IEZpbHRlckZpZWxkIH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZGVscy9maWx0ZXItcGFuZWwvZmlsdGVyLWZpZWxkLm1vZGVscyc7XHJcbmltcG9ydCB7IFFiRmlsdGVyRW50aXR5IH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZGVscy9maWx0ZXItcGFuZWwvcWItZmlsdGVyLWVudGl0eS5tb2RlbCc7XHJcbmltcG9ydCB7IEFwaVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvc2VydmljZS9hcGkvYXBpLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdG9yZWRGaWx0ZXJQYW5lbFF1ZXJ5IH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZGVscy9zdG9yZWQtZmlsdGVyLXBhbmVsLXF1ZXJ5Lm1vZGVsJztcclxuaW1wb3J0IHsgU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3NlcnZpY2VzL3Nlc3Npb24tc3RvcmFnZS5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndy1maWx0ZXItcGFuZWwnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi93LWZpbHRlci1wYW5lbC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdy1maWx0ZXItcGFuZWwuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgV0ZpbHRlclBhbmVsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBwdWJsaWMgcXVlcnlDdHJsITogRm9ybUNvbnRyb2w7XHJcbiAgcHVibGljIGFkdmFuY2VkUXVlcnlDdHJsITogRm9ybUNvbnRyb2w7XHJcbiAgcHVibGljIGdyb3VwZWRRdWVyeUN0cmwhOiBGb3JtQ29udHJvbDtcclxuICBwdWJsaWMgcGVyc2lzdFZhbHVlT25GaWVsZENoYW5nZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIFxyXG4gIHF1ZXJ5Q29uZmlnUmVhZHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc0FkdmFuY2VkU2VhcmNoOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcWJEYXRhVHlwZUVudW0gPSBRQkRhdGFUeXBlRW51bTtcclxuICBxYkRhdGFFbnVtcyA9IE9iamVjdC52YWx1ZXMoUUJEYXRhVHlwZUVudW0pO1xyXG4gIGJhc2ljUXVlcnlDb25maWchOiBhbnk7XHJcbiAgYWR2YW5jZWRRdWVyeUNvbmZpZyE6IGFueTtcclxuICBiYXNpY1F1ZXJ5OiBhbnkgPSB7XHJcbiAgICBjb25kaXRpb246ICdhbmQnLFxyXG4gICAgcnVsZXM6IFtdXHJcbiAgfTtcclxuICBncm91cGVkUXVlcnk6IGFueSA9IHtcclxuICAgIGNvbmRpdGlvbjogJ2FuZCcsXHJcbiAgICBydWxlczogW11cclxuICB9O1xyXG4gIGFkdmFuY2VkUXVlcnk6IGFueSA9IHtcclxuICAgIGNvbmRpdGlvbjogJ2FuZCcsXHJcbiAgICBydWxlczogW11cclxuICB9O1xyXG4gIGZpbHRlclBhbmVsT2JqZWN0ITogUWJQYW5lbEZpbHRlcjtcclxuICBlbnRpdHlDb25maWdHcm91cGVkOiBRdWVyeUJ1aWxkZXJDb25maWcgPSB7IGZpZWxkczoge30gfTtcclxuICBlbnRpdGllczogYW55W10gPSBbXTtcclxuICBkZWZhdWx0VmFsdWVzOiBhbnlbXSA9IFtdO1xyXG4gIGRlZmF1bHRPcGVyYXRvcnM6IGFueVtdID0gW107XHJcbiAgc3RvcmVkUXVlcnkhOiBTdG9yZWRGaWx0ZXJQYW5lbFF1ZXJ5O1xyXG4gIHBhcmVudFJvdXRlITogc3RyaW5nO1xyXG5cclxuICBASW5wdXQoJ2FwaVVybCcpIGF1dGhvcml6YXRpb25BcGlVcmwhOiBzdHJpbmc7XHJcbiAgQElucHV0KCdjb21tb25EYXRhQXBpVXJsJykgY29tbW9uRGF0YUFwaVVybCE6IHN0cmluZztcclxuICBASW5wdXQoJ3NlZ21lbnRhdGlvbkFwaVVybCcpIHNlZ21lbnRhdGlvbkFwaVVybCE6IHN0cmluZztcclxuICBASW5wdXQoJ3Rva2VuJykgdG9rZW4hOiBzdHJpbmc7XHJcbiAgQElucHV0KCdjb21tb25EYXRhVG9rZW4nKSBjb21tb25EYXRhVG9rZW4hOiBzdHJpbmc7XHJcbiAgQElucHV0KCdzZWdtZW50YXRpb25Ub2tlbicpIHNlZ21lbnRhdGlvblRva2VuITogc3RyaW5nO1xyXG4gIEBJbnB1dCgnZmlsdGVySWQnKSBmaWx0ZXJJZCE6IHN0cmluZztcclxuICBASW5wdXQoJ2RhdGFJc0xvYWRpbmdTZWFyY2hCdXR0b24nKSBkYXRhSXNMb2FkaW5nU2VhcmNoQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCd0ZW5hbnRJZCcpIHRlbmFudElkITogc3RyaW5nO1xyXG5cclxuICBASW5wdXQoJ3RyYW5zbGF0aW9uc09iamVjdCcpIHRyYW5zbGF0aW9uc09iamVjdDogRmlsdGVyUGFuZWxUcmFuc2xhdGlvbnMgPSB7XHJcbiAgICBiYXNpY1NlYXJjaFRhYkxhYmVsOiAnQmFzaWMgc2VhcmNoJyxcclxuICAgIGFkdmFuY2VkU2VhcmNoVGFiTGFiZWw6ICdBZHZhbmNlZCBzZWFyY2gnLFxyXG4gICAgZ3JvdXBlZEZpbHRlclRpdGxlOiAnR3JvdXBlZCBmaWx0ZXInLFxyXG4gICAgYWR2YW5jZWRTZWFyY2g6IHtcclxuICAgICAgYW5kQnV0dG9uTGFiZWw6ICdBbmQnLFxyXG4gICAgICBvckJ1dHRvbkxhYmVsOiAnT3InLFxyXG4gICAgICBhZGRSdWxlQnV0dG9uTGFiZWw6ICdBZGQgZmlsdGVyJyxcclxuICAgICAgYWRkUnVsZVNldEJ1dHRvbkxhYmVsOiAnQWRkIGZpbHRlciBzZXQnLFxyXG4gICAgICByZW1vdmVSdWxlU2V0QnV0dG9uTGFiZWw6ICdSZW1vdmUgcnVsZSBzZXQnXHJcbiAgICB9LFxyXG4gICAgbm9SdWxlc0xhYmVsOiAnQWRkIGZpbHRlciBvciBmaWx0ZXIgc2V0IHRvIHN0YXJ0JyxcclxuICAgIHNlYXJjaEJ1dHRvbkxhYmVsOiAnQ2xlYXInLFxyXG4gICAgY2xlYXJCdXR0b25MYWJlbDogJ0NsZWFyJyxcclxuICAgIGZpZWxkc1BsYWNlaG9sZGVyczoge1xyXG4gICAgICBib29sZWFuOiB7XHJcbiAgICAgICAgICB0cnVlOiAnVHJ1ZScsXHJcbiAgICAgICAgICBmYWxzZTogJ0ZhbHNlJ1xyXG4gICAgICB9LFxyXG4gICAgICBkZWNpbWFsOiAnSW5zZXJ0IGRlY2ltYWwgbnVtYmVyJyxcclxuICAgICAgbGlzdDogJ1NlbGVjdCBhbiBvcHRpb24nLFxyXG4gICAgICBudW1iZXI6ICdJbnNlcnQgYSBudW1iZXInLFxyXG4gICAgICB0ZXh0OiAnSW5zZXJ0IHRleHQnLFxyXG4gICAgICBkYXRldGltZTogJ1NlbGVjdCBhIGRhdGUnXHJcbiAgICB9LFxyXG4gICAgb3BlcmF0b3JzOiB7XHJcbiAgICAgIGNvbnRhaW5zOidjb250YWlucydcclxuICAgIH0sXHJcbiAgICBmaWVsZHM6IHtcclxuICAgICAgSWRsZURlYWRsaW5lOiAnSWQnLFxyXG4gICAgICBuYW1lOiAnTmFtZScsXHJcbiAgICAgIGNvZGU6ICdDb2RlJyxcclxuICAgICAgZGVsZXRlOiAnRGVsZXRlZCcsXHJcbiAgICAgIGNvdW50cnk6ICdDb3VudHJ5J1xyXG4gICAgfVxyXG4gIH07XHJcbiAgXHJcbiAgQE91dHB1dCgnc2VhcmNoQ2xpY2tlZCcpIHNlYXJjaENsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFF1ZXJ5UmVzdWx0cz4oKTtcclxuICBAT3V0cHV0KCdjbGVhckNsaWNrZWQnKSBjbGVhckNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcbiAgQE91dHB1dCgnbGFzdFF1ZXJ5JykgbGFzdFF1ZXJ5ID0gbmV3IEV2ZW50RW1pdHRlcjxRdWVyeVJlc3VsdHM+KCk7XHJcbiAgXHJcbiAgc3RhdGVPcHRpb25zOiBhbnlbXSA9IFt7IGxhYmVsOiB0aGlzLnRyYW5zbGF0aW9uc09iamVjdC5hZHZhbmNlZFNlYXJjaC5hbmRCdXR0b25MYWJlbCwgdmFsdWU6ICdhbmQnIH0sIHsgbGFiZWw6IHRoaXMudHJhbnNsYXRpb25zT2JqZWN0LmFkdmFuY2VkU2VhcmNoLm9yQnV0dG9uTGFiZWwsIHZhbHVlOiAnb3InIH1dO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLCBcclxuICAgIHByaXZhdGUgYXBpU2VydmljZTogQXBpU2VydmljZSxcclxuICAgIHByaXZhdGUgc2Vzc2lvblN0b3JhZ2U6IFNlc3Npb25TdG9yYWdlU2VydmljZVxyXG4gICkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5pc0FkdmFuY2VkU2VhcmNoID0gdGhpcy5zZXNzaW9uU3RvcmFnZS5nZXRMYXN0RmlsdGVyUGFuZWxRdWVyeSh0aGlzLnRlbmFudElkLCB0aGlzLmZpbHRlcklkKT8uYWR2YW5jZWRRdWVyeVZhbHVlID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgdGhpcy5zdG9yZWRRdWVyeT0gdGhpcy5zZXNzaW9uU3RvcmFnZS5nZXRMYXN0RmlsdGVyUGFuZWxRdWVyeSh0aGlzLnRlbmFudElkLCB0aGlzLmZpbHRlcklkKVxyXG4gICAgdGhpcy5nZXRRdWVyeUJ1aWxkZXJGaWx0ZXJQYW5lbCgpO1xyXG4gIH1cclxuICBcclxuICBpbml0UXVlcnlCdWlsZGVyQ29udHJvbHMoKSB7XHJcbiAgICB0aGlzLnF1ZXJ5Q3RybCA9IHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbCh0aGlzLmJhc2ljUXVlcnkpO1xyXG4gICAgdGhpcy5hZHZhbmNlZFF1ZXJ5Q3RybCA9IHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbCh0aGlzLmFkdmFuY2VkUXVlcnkpO1xyXG4gICAgaWYodGhpcy5maWx0ZXJQYW5lbE9iamVjdC5hbGxvd0dyb3VwZWQpIHtcclxuICAgICAgdGhpcy5ncm91cGVkUXVlcnlDdHJsID0gdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKHRoaXMuZ3JvdXBlZFF1ZXJ5KTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgaWYodGhpcy5zdG9yZWRRdWVyeSkge1xyXG4gICAgICBsZXQgbGFzdFF1ZXJ5OiBRdWVyeVJlc3VsdHMgPSB7XHJcbiAgICAgICAgdHlwZTogdGhpcy5nZXRRdWVyeVR5cGUoKSxcclxuICAgICAgICBiYXNpYzogdGhpcy5zdG9yZWRRdWVyeT8uYmFzaWNRdWVyeVZhbHVlID8gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5zdG9yZWRRdWVyeT8uYmFzaWNRdWVyeVZhbHVlKSA6IG51bGwsXHJcbiAgICAgICAgYWR2YW5jZWQ6IHRoaXMuc3RvcmVkUXVlcnk/LmFkdmFuY2VkUXVlcnlWYWx1ZSA/IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuc3RvcmVkUXVlcnk/LmFkdmFuY2VkUXVlcnlWYWx1ZSkgOiBudWxsLFxyXG4gICAgICAgIGdyb3VwZWQ6IHRoaXMuaXNBZHZhbmNlZFNlYXJjaCAmJiB0aGlzLmZpbHRlclBhbmVsT2JqZWN0LmFsbG93R3JvdXBlZCAmJiB0aGlzLmdyb3VwZWRRdWVyeUN0cmwgPyBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmdyb3VwZWRRdWVyeUN0cmw/LnZhbHVlKSA6IG51bGxcclxuICAgICAgfVxyXG4gICAgICBsYXN0UXVlcnkgPSB0aGlzLmRlbGV0ZUZpZWxkc1dpdGhvdXRWYWx1ZShsYXN0UXVlcnkpO1xyXG4gICAgICBsYXN0UXVlcnkgPSB0aGlzLmhhbmRsZUVtcHR5RmllbGRzUXVlcnkobGFzdFF1ZXJ5KTtcclxuICAgICAgdGhpcy5sYXN0UXVlcnkuZW1pdChsYXN0UXVlcnkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlU2VhcmNoVHlwZSgpIHtcclxuICAgIHRoaXMuaXNBZHZhbmNlZFNlYXJjaCA9ICF0aGlzLmlzQWR2YW5jZWRTZWFyY2g7XHJcbiAgfVxyXG5cclxuICBvblNlYXJjaENsaWNrZWQoKSB7XHJcbiAgICBsZXQgcXVlcmllczogUXVlcnlSZXN1bHRzID0ge1xyXG4gICAgICB0eXBlOiB0aGlzLmdldFF1ZXJ5VHlwZSgpLFxyXG4gICAgICBiYXNpYzogdGhpcy5pc0FkdmFuY2VkU2VhcmNoID8gbnVsbCA6IE9iamVjdC5hc3NpZ24oe30sIHRoaXMucXVlcnlDdHJsLnZhbHVlKSxcclxuICAgICAgYWR2YW5jZWQ6IHRoaXMuaXNBZHZhbmNlZFNlYXJjaCA/IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuYWR2YW5jZWRRdWVyeUN0cmwudmFsdWUpIDogbnVsbCxcclxuICAgICAgZ3JvdXBlZDogdGhpcy5pc0FkdmFuY2VkU2VhcmNoICYmIHRoaXMuZmlsdGVyUGFuZWxPYmplY3QuYWxsb3dHcm91cGVkID8gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5ncm91cGVkUXVlcnlDdHJsLnZhbHVlKSA6IG51bGxcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNldEVudGl0eShxdWVyaWVzKTtcclxuXHJcbiAgICBxdWVyaWVzID0gdGhpcy5pbml0aWFsaXplT3BlcmF0b3JzKHF1ZXJpZXMpO1xyXG4gICAgXHJcbiAgICBsZXQgc3RvcmVkUXVlcnk6IFN0b3JlZEZpbHRlclBhbmVsUXVlcnkgPSB7XHJcbiAgICAgIGlkOiB0aGlzLmZpbHRlcklkLFxyXG4gICAgICBiYXNpY1F1ZXJ5VmFsdWU6IHF1ZXJpZXMuYmFzaWMsXHJcbiAgICAgIGFkdmFuY2VkUXVlcnlWYWx1ZTogcXVlcmllcy5hZHZhbmNlZCxcclxuICAgICAgZ3JvdXBlZFF1ZXJ5VmFsdWU6IHF1ZXJpZXMuZ3JvdXBlZFxyXG4gICAgfVxyXG4gICAgdGhpcy5zZXNzaW9uU3RvcmFnZS5zZXRMYXN0RmlsdGVyUGFuZWxRdWVyeSh0aGlzLnRlbmFudElkLCBzdG9yZWRRdWVyeSk7XHJcbiAgICBcclxuICAgIHF1ZXJpZXMgPSB0aGlzLmRlbGV0ZUZpZWxkc1dpdGhvdXRWYWx1ZShxdWVyaWVzKTtcclxuICAgIHF1ZXJpZXMgPSB0aGlzLmhhbmRsZUVtcHR5RmllbGRzUXVlcnkocXVlcmllcyk7XHJcblxyXG4gICAgdGhpcy5zZWFyY2hDbGlja2VkLmVtaXQocXVlcmllcyk7XHJcbiAgfVxyXG5cclxuICBvbkNsZWFyQ2xpY2tlZCgpIHtcclxuICAgIHRoaXMucmVzZXRCYXNpY1F1ZXJ5VmFsdWVzKCk7XHJcbiAgICB0aGlzLmFkdmFuY2VkUXVlcnkucnVsZXMgPSBbXTtcclxuICAgIHRoaXMuZ3JvdXBlZFF1ZXJ5LnJ1bGVzID0gW107XHJcbiAgICB0aGlzLnNlc3Npb25TdG9yYWdlLnJlbW92ZUxhc3RGaWx0ZXJQYW5lbFF1ZXJ5KHRoaXMudGVuYW50SWQsIHRoaXMuZmlsdGVySWQpO1xyXG4gICAgdGhpcy5jbGVhckNsaWNrZWQuZW1pdCh0cnVlKTtcclxuICB9XHJcblxyXG4gIGhhbmRsZUVtcHR5RmllbGRzUXVlcnkocXVlcmllczogUXVlcnlSZXN1bHRzKTogUXVlcnlSZXN1bHRzIHtcclxuICAgIGlmKHF1ZXJpZXMuYWR2YW5jZWQgIT0gbnVsbCAmJiBxdWVyaWVzLmFkdmFuY2VkPy5ydWxlcy5sZW5ndGggPT0gMCkge1xyXG4gICAgICBxdWVyaWVzLnR5cGUgPSAwXHJcbiAgICB9XHJcbiAgICBpZihxdWVyaWVzLmJhc2ljICE9IG51bGwgJiYgcXVlcmllcy5iYXNpYz8ucnVsZXMubGVuZ3RoID09IDApIHtcclxuICAgICAgcXVlcmllcy50eXBlID0gMFxyXG4gICAgfVxyXG4gICAgaWYocXVlcmllcy5ncm91cGVkICE9IG51bGwgJiYgcXVlcmllcy5ncm91cGVkPy5ydWxlcy5sZW5ndGggPT0gMCkge1xyXG4gICAgICBxdWVyaWVzLnR5cGUgPSAwXHJcbiAgICB9XHJcbiAgICByZXR1cm4gcXVlcmllcztcclxuICB9XHJcblxyXG4gIGdldFF1ZXJ5VHlwZSgpOiBRdWVyeVJlc3VsdFR5cGUge1xyXG4gICAgaWYoIXRoaXMuaXNBZHZhbmNlZFNlYXJjaCkge1xyXG4gICAgICByZXR1cm4gUXVlcnlSZXN1bHRUeXBlLkJhc2ljO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYodGhpcy5pc0FkdmFuY2VkU2VhcmNoICYmIHRoaXMuZ3JvdXBlZFF1ZXJ5Q3RybD8udmFsdWUpIHtcclxuICAgICAgICByZXR1cm4gUXVlcnlSZXN1bHRUeXBlLkdyb3VwZWRcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gUXVlcnlSZXN1bHRUeXBlLkFkdmFuY2VkO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRFbnRpdHkocXVlcmllczogUXVlcnlSZXN1bHRzKSB7XHJcbiAgICBpZih0aGlzLmdldFF1ZXJ5VHlwZSgpID09IFF1ZXJ5UmVzdWx0VHlwZS5CYXNpYykge1xyXG4gICAgICBxdWVyaWVzLmJhc2ljIS5ydWxlcyA9IHF1ZXJpZXMuYmFzaWMhLnJ1bGVzLm1hcCgocjphbnkpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgZmllbGQ6IHIuZmllbGQsXHJcbiAgICAgICAgICBvcGVyYXRvcjogci5vcGVyYXRvcixcclxuICAgICAgICAgIHZhbHVlOiByLnZhbHVlLFxyXG4gICAgICAgICAgZW50aXR5OiB0aGlzLmVudGl0aWVzLmZpbmQoZSA9PiBlLmZpZWxkSnNvbk5hbWUgPT0gci5maWVsZCkuZW50aXR5XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0UXVlcnlCdWlsZGVyRmlsdGVyUGFuZWwoKSB7XHJcbiAgICB0aGlzLmFwaVNlcnZpY2UuZ2V0RmlsdGVyUGFuZWwodGhpcy5hdXRob3JpemF0aW9uQXBpVXJsLCB0aGlzLnRva2VuLCB0aGlzLmNvbW1vbkRhdGFBcGlVcmwsIHRoaXMuY29tbW9uRGF0YVRva2VuLCB0aGlzLmZpbHRlcklkKVxyXG4gICAgICAuc3Vic2NyaWJlKChxYlBhbmVsRmlsdGVyOiBRYlBhbmVsRmlsdGVyKSA9PiB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJQYW5lbE9iamVjdCA9IHFiUGFuZWxGaWx0ZXI7XHJcbiAgICAgICAgbGV0IGJhc2ljRmlsdGVySWRzOiBudW1iZXJbXSA9IHFiUGFuZWxGaWx0ZXIucWJwYW5lbFRvRmllbGRzLmZpbHRlcihwYW5lbFRvRmllbGQgPT4gcGFuZWxUb0ZpZWxkLmJhc2ljKS5tYXAocGFuZWxUb0ZpZWxkID0+IHBhbmVsVG9GaWVsZC5xYmZpbHRlckZpZWxkSWQpO1xyXG4gICAgICAgIGxldCBhZHZhbmNlZEZpbHRlcklkczogbnVtYmVyW10gPSBxYlBhbmVsRmlsdGVyLnFicGFuZWxUb0ZpZWxkcy5maWx0ZXIocGFuZWxUb0ZpZWxkID0+ICFwYW5lbFRvRmllbGQuYmFzaWMpLm1hcChwYW5lbFRvRmllbGQgPT4gcGFuZWxUb0ZpZWxkLnFiZmlsdGVyRmllbGRJZCk7XHJcbiAgICAgICAgdGhpcy5kZWZhdWx0VmFsdWVzID0gcWJQYW5lbEZpbHRlci5xYnBhbmVsVG9GaWVsZHMubWFwKHBhbmVsVG9GaWVsZCA9PiB7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBxYmZpbHRlckZpZWxkSWQ6IHBhbmVsVG9GaWVsZC5xYmZpbHRlckZpZWxkSWQsXHJcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogcGFuZWxUb0ZpZWxkLmRlZmF1bHRWYWx1ZVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5kZWZhdWx0T3BlcmF0b3JzID0gcWJQYW5lbEZpbHRlci5xYnBhbmVsVG9GaWVsZHMubWFwKHBhbmVsVG9GaWVsZCA9PiB7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBxYmZpbHRlckZpZWxkSWQ6IHBhbmVsVG9GaWVsZC5xYmZpbHRlckZpZWxkSWQsXHJcbiAgICAgICAgICAgIHFiZGVmYXVsdE9wZXJhdG9yOiBwYW5lbFRvRmllbGQucWJkZWZhdWx0T3BlcmF0b3JcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIGxldCBmaWx0ZXJFbnRpdHk6IFFiRmlsdGVyRW50aXR5W10gPSBxYlBhbmVsRmlsdGVyLnFicGFuZWxUb0ZpZWxkcy5tYXAocGFuZWxUb0ZpZWxkID0+IHtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGlkOiBwYW5lbFRvRmllbGQucWJmaWx0ZXJGaWVsZC5xYmZpbHRlckVudGl0eS5pZCwgXHJcbiAgICAgICAgICAgIGJhc2ljOiBwYW5lbFRvRmllbGQuYmFzaWMsXHJcbiAgICAgICAgICAgIG5hbWU6IHBhbmVsVG9GaWVsZC5xYmZpbHRlckZpZWxkLnFiZmlsdGVyRW50aXR5Lm5hbWUsIFxyXG4gICAgICAgICAgICBqc29uTmFtZTogcGFuZWxUb0ZpZWxkLnFiZmlsdGVyRmllbGQucWJmaWx0ZXJFbnRpdHkuanNvbk5hbWUsIFxyXG4gICAgICAgICAgICBmaWVsZHM6IFtdXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGxldCBmaWx0ZXJGaWVsZHM6IEZpbHRlckZpZWxkW10gPSBxYlBhbmVsRmlsdGVyLnFicGFuZWxUb0ZpZWxkcy5tYXAocCA9PiBwLnFiZmlsdGVyRmllbGQpO1xyXG4gICAgICAgIGZpbHRlckVudGl0eS5mb3JFYWNoKChlbnRpdHk6IFFiRmlsdGVyRW50aXR5LCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgbGV0IGZpZWxkcyA9IGZpbHRlckZpZWxkcy5maWx0ZXIoZSA9PiBlLnFiZmlsdGVyRW50aXR5LmlkID09IGVudGl0eS5pZCk7XHJcbiAgICAgICAgICAgZmlsdGVyRW50aXR5W2luZGV4XS5maWVsZHMgPSBmaWVsZHMgO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5iYXNpY1F1ZXJ5Q29uZmlnID0gdGhpcy5pbml0UXVlcnlCdWlsZGVyKGZpbHRlckVudGl0eSk7XHJcbiAgICAgICAgdGhpcy5iYXNpY1F1ZXJ5Q29uZmlnID0gdGhpcy5maWx0ZXJGaWVsZHNCeUlkKHRoaXMuYmFzaWNRdWVyeUNvbmZpZywgYmFzaWNGaWx0ZXJJZHMpO1xyXG4gICAgICAgIHRoaXMuYmFzaWNRdWVyeUNvbmZpZy5maWVsZHMgPSB0aGlzLnRyYW5zbGF0ZUZpZWxkcyh0aGlzLmJhc2ljUXVlcnlDb25maWcuZmllbGRzKTtcclxuICAgICAgICB0aGlzLmFkdmFuY2VkUXVlcnlDb25maWcgPSB0aGlzLmluaXRRdWVyeUJ1aWxkZXIoZmlsdGVyRW50aXR5KTtcclxuICAgICAgICB0aGlzLmFkdmFuY2VkUXVlcnlDb25maWcgPSB0aGlzLmZpbHRlckZpZWxkc0J5SWQodGhpcy5hZHZhbmNlZFF1ZXJ5Q29uZmlnLCBhZHZhbmNlZEZpbHRlcklkcyk7XHJcbiAgICAgICAgdGhpcy5hZHZhbmNlZFF1ZXJ5Q29uZmlnLmZpZWxkcyA9IHRoaXMudHJhbnNsYXRlRmllbGRzKHRoaXMuYWR2YW5jZWRRdWVyeUNvbmZpZy5maWVsZHMpO1xyXG4gICAgICAgIGxldCBydWxlcyA9IE9iamVjdC5rZXlzKHRoaXMuYmFzaWNRdWVyeUNvbmZpZy5maWVsZHMpXHJcbiAgICAgICAgICAubWFwKGZpZWxkS2V5ID0+IHsgXHJcbiAgICAgICAgICAgIGxldCBkZWZhdWx0T3BlcmF0b3IgPSB0aGlzLmRlZmF1bHRPcGVyYXRvcnMuZmluZChvcGVyYXRvciA9PiBvcGVyYXRvci5xYmZpbHRlckZpZWxkSWQgPT0gdGhpcy5iYXNpY1F1ZXJ5Q29uZmlnLmZpZWxkc1tmaWVsZEtleV0uaWQgJiYgb3BlcmF0b3IucWJkZWZhdWx0T3BlcmF0b3IgIT0gbnVsbCk7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgZmllbGQ6IGZpZWxkS2V5LCBcclxuICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5iYXNpY1F1ZXJ5Q29uZmlnLmZpZWxkc1tmaWVsZEtleV0uZGVmYXVsdFZhbHVlISxcclxuICAgICAgICAgICAgICBvcGVyYXRvcjogZGVmYXVsdE9wZXJhdG9yID8gZGVmYXVsdE9wZXJhdG9yLnFiZGVmYXVsdE9wZXJhdG9yLnN5bWJvbCA6IG51bGxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgaWYodGhpcy5zdG9yZWRRdWVyeSAmJiB0aGlzLnN0b3JlZFF1ZXJ5Py5pZCA9PSB0aGlzLmZpbHRlcklkICYmIHRoaXMuc3RvcmVkUXVlcnk/LmJhc2ljUXVlcnlWYWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmJhc2ljUXVlcnkgPSB0aGlzLnN0b3JlZFF1ZXJ5LmJhc2ljUXVlcnlWYWx1ZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuYmFzaWNRdWVyeSA9IHtcclxuICAgICAgICAgICAgICBjb25kaXRpb246ICdhbmQnLFxyXG4gICAgICAgICAgICAgIHJ1bGVzOiBydWxlc1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYodGhpcy5zdG9yZWRRdWVyeSAmJiB0aGlzLnN0b3JlZFF1ZXJ5Py5pZCA9PSB0aGlzLmZpbHRlcklkICYmIHRoaXMuc3RvcmVkUXVlcnk/LmFkdmFuY2VkUXVlcnlWYWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmFkdmFuY2VkUXVlcnkgPSB0aGlzLnN0b3JlZFF1ZXJ5LmFkdmFuY2VkUXVlcnlWYWx1ZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWR2YW5jZWRRdWVyeSA9IHtcclxuICAgICAgICAgICAgICBjb25kaXRpb246ICdhbmQnLFxyXG4gICAgICAgICAgICAgIHJ1bGVzOiBbXVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnF1ZXJ5Q29uZmlnUmVhZHkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaW5pdFF1ZXJ5QnVpbGRlckNvbnRyb2xzKCk7XHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBpbml0UXVlcnlCdWlsZGVyKGZpbHRlckVudGl0aWVzOiBRYkZpbHRlckVudGl0eVtdKSB7XHJcbiAgICBsZXQgZW50aXR5Q29uZmlnQXV4OiBRdWVyeUJ1aWxkZXJDb25maWcgPSB7IGZpZWxkczoge30gfTtcclxuICAgIGxldCBlbnRpdGllc0FycmF5OiBFbnRpdHlNYXBbXSA9IFtdO1xyXG4gICAgXHJcbiAgICBmaWx0ZXJFbnRpdGllcy5tYXAoKGUsIGluZGV4KSA9PiB7XHJcbiAgICAgIGxldCBlbnRpdHk6IEVudGl0eSA9IHsgbmFtZTogZS5qc29uTmFtZSB9O1xyXG4gICAgICByZXR1cm4gZW50aXRpZXNBcnJheVtpbmRleF0gPSB7IFtlLmpzb25OYW1lXTogZW50aXR5IH07XHJcbiAgICB9KTtcclxuXHJcbiAgICBsZXQgZW50aXRpZXNNYXA6IEVudGl0eU1hcCA9IHt9O1xyXG5cclxuICAgIGZvciAoY29uc3QgZW50aXR5IG9mIGVudGl0aWVzQXJyYXkpIHtcclxuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGVudGl0eSk7XHJcblxyXG4gICAgICBrZXlzLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICBpZih0aGlzLnRyYW5zbGF0aW9uc09iamVjdC5lbnRpdGllcykge1xyXG4gICAgICAgICAgbGV0IGVudGl0aWVzVHJhbnNsYXRpb25zS2V5cyA9IE9iamVjdC5rZXlzKHRoaXMudHJhbnNsYXRpb25zT2JqZWN0LmVudGl0aWVzKTtcclxuICAgICAgICAgIGxldCB0cmFuc2xhdGlvbiA9IGVudGl0aWVzVHJhbnNsYXRpb25zS2V5cy5maW5kKHRyYW5zbGF0aW9uS2V5ID0+IHRyYW5zbGF0aW9uS2V5ID09IGtleSk7XHJcbiAgICAgICAgICBpZih0cmFuc2xhdGlvbikge1xyXG4gICAgICAgICAgICBlbnRpdGllc01hcFtrZXldID0geyBuYW1lOiB0aGlzLnRyYW5zbGF0aW9uc09iamVjdC5lbnRpdGllc1trZXldIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGVudGl0aWVzTWFwW2tleV0gPSBlbnRpdHlba2V5XVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBlbnRpdGllc01hcFtrZXldID0gZW50aXR5W2tleV1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgZW50aXR5Q29uZmlnQXV4LmVudGl0aWVzID0gZW50aXRpZXNNYXA7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGZpZWxkczogRmllbGRNYXBbXSA9IFtdO1xyXG4gICAgZmlsdGVyRW50aXRpZXMuZm9yRWFjaCgoZmlsdGVyRW50aXR5KSA9PiB7XHJcbiAgICAgIHJldHVybiBmaWx0ZXJFbnRpdHkuZmllbGRzLmZpbHRlcigoZmlsdGVyRmllbGQ6IEZpbHRlckZpZWxkKSA9PiB7XHJcbiAgICAgICAgbGV0IGluZGV4OiBudW1iZXIgPSBmaWVsZHMubGVuZ3RoID8/IDA7XHJcbiAgICAgICAgbGV0IG9wZXJhdG9yc0ZsYXRBcnJheSA9IGZpbHRlckZpZWxkLm9wZXJhdG9ycy5tYXAoKG86YW55KSA9PiBvLnN5bWJvbCk7XHJcbiAgICAgICAgbGV0IGRlZmF1bHRPcGVyYXRvciA9IHRoaXMuZGVmYXVsdE9wZXJhdG9ycy5maW5kKG9wZXJhdG9yID0+IG9wZXJhdG9yLnFiZmlsdGVyRmllbGRJZCA9PSBmaWx0ZXJGaWVsZC5pZCk7XHJcbiAgICAgICAgbGV0IGZpZWxkOiBGaWVsZCA9IHtcclxuICAgICAgICAgIGlkOiBmaWx0ZXJGaWVsZC5pZCxcclxuICAgICAgICAgIG5hbWU6IGZpbHRlckZpZWxkLm5hbWUsXHJcbiAgICAgICAgICBvcGVyYXRvcnM6IGRlZmF1bHRPcGVyYXRvci5xYmRlZmF1bHRPcGVyYXRvcj8uc3ltYm9sID8gdGhpcy5tb3ZlRWxlbWVudFRvRmlyc3RQbGFjZShvcGVyYXRvcnNGbGF0QXJyYXksIGRlZmF1bHRPcGVyYXRvci5xYmRlZmF1bHRPcGVyYXRvcj8uc3ltYm9sKSA6IG9wZXJhdG9yc0ZsYXRBcnJheSxcclxuICAgICAgICAgIHR5cGU6IHRoaXMuZ2V0RGF0YVR5cGUoZmlsdGVyRmllbGQuZGF0YVR5cGUpLFxyXG4gICAgICAgICAgZGVmYXVsdFZhbHVlOiB0aGlzLmZvcm1hdERlZmF1bHRWYWx1ZSh0aGlzLmRlZmF1bHRWYWx1ZXMuZmluZCh2YWx1ZSA9PiB2YWx1ZS5xYmZpbHRlckZpZWxkSWQgPT0gZmlsdGVyRmllbGQuaWQpLmRlZmF1bHRWYWx1ZSwgZmlsdGVyRmllbGQuZGF0YVR5cGUpLFxyXG4gICAgICAgICAgZGVmYXVsdE9wZXJhdG9yOiBkZWZhdWx0T3BlcmF0b3IucWJkZWZhdWx0T3BlcmF0b3I/LnN5bWJvbCxcclxuICAgICAgICAgIGVudGl0eTogZmlsdGVyRW50aXR5Lmpzb25OYW1lLFxyXG4gICAgICAgICAgb3B0aW9uczogZmlsdGVyRmllbGQubGlzdE9mVmFsdWVzLFxyXG4gICAgICAgICAgdmFsaWRhdG9yOiAocnVsZTogUnVsZSwgcGFyZW50OiBSdWxlU2V0KTogYW55IHwgbnVsbCA9PiB7XHJcbiAgICAgICAgICAgIGlmIChydWxlLm9wZXJhdG9yICE9PSBcImlzIG51bGxcIiAmJiBydWxlLm9wZXJhdG9yICE9PSBcImlzIG5vdCBudWxsXCIpIHtcclxuICAgICAgICAgICAgICBpZiAocnVsZS52YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHJ1bGUudmFsdWUgPT09IG51bGwgfHwgcnVsZS52YWx1ZSA9PT0gJycgfHwgcnVsZS52YWx1ZS5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgcmVxdWlyZWQ6ICdlbXB0eSBmaWVsZCcgfTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZW50aXRpZXMucHVzaCh7ZmllbGRKc29uTmFtZTogZmlsdGVyRmllbGQuanNvbk5hbWUsIGVudGl0eTogZmllbGQuZW50aXR5fSk7XHJcbiAgICAgICAgZmllbGRzW2luZGV4XSA9IHsgW2ZpbHRlckZpZWxkLmpzb25OYW1lXTogZmllbGQgfTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBsZXQgZmllbGRzTWFwOiBGaWVsZE1hcCA9IHt9O1xyXG5cclxuICAgIGZvciAoY29uc3QgZmllbGQgb2YgZmllbGRzKSB7XHJcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhmaWVsZCk7XHJcbiAgICAgIGtleXMuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgIGZpZWxkc01hcFtrZXldID0gZmllbGRba2V5XTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBlbnRpdHlDb25maWdBdXguZmllbGRzID0gZmllbGRzTWFwO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGVudGl0eUNvbmZpZ0F1eDtcclxuICB9XHJcblxyXG4gIGZpbHRlckZpZWxkc0J5SWQoZmllbGRzT2JqOiBhbnksIGlkQXJyYXk6IG51bWJlcltdKTogYW55IHtcclxuICAgIGNvbnN0IGZpbHRlcmVkRmllbGRzOiBhbnkgPSB7fTtcclxuICAgIFxyXG4gICAgZm9yIChjb25zdCBrZXkgaW4gZmllbGRzT2JqLmZpZWxkcykge1xyXG4gICAgICBjb25zdCBmaWVsZCA9IGZpZWxkc09iai5maWVsZHNba2V5XTtcclxuICAgICAgaWYgKGlkQXJyYXkuaW5jbHVkZXMoZmllbGQuaWQpKSB7XHJcbiAgICAgICAgZmlsdGVyZWRGaWVsZHNba2V5XSA9IGZpZWxkO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHJldHVybiB7XHJcbiAgICAgIC4uLmZpZWxkc09iaixcclxuICAgICAgZmllbGRzOiBmaWx0ZXJlZEZpZWxkcyxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICB0cmFuc2xhdGVGaWVsZHMoZmllbGRzOiBGaWVsZE1hcCkge1xyXG4gICAgZm9yIChjb25zdCBrZXkgaW4gZmllbGRzKSB7XHJcbiAgICAgIGlmIChmaWVsZHMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG4gICAgICAgIGZpZWxkc1trZXldLmZpZWxkID0ga2V5O1xyXG4gICAgICAgIGZpZWxkc1trZXldLm5hbWUgPSB0aGlzLnRyYW5zbGF0aW9uc09iamVjdC5maWVsZHNba2V5XTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZpZWxkcztcclxuICB9XHJcblxyXG4gIG1vdmVFbGVtZW50VG9GaXJzdFBsYWNlKGFycmF5OiBhbnlbXSwgZWxlbWVudFRvRmlyc3RQbGFjZTogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBpbmRleCA9IGFycmF5LmluZGV4T2YoZWxlbWVudFRvRmlyc3RQbGFjZSk7XHJcbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XHJcbiAgICAgIGFycmF5LnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgIGFycmF5LnVuc2hpZnQoZWxlbWVudFRvRmlyc3RQbGFjZSk7IFxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFycmF5O1xyXG4gIH1cclxuXHJcbiAgZm9ybWF0RGVmYXVsdFZhbHVlKHZhbHVlOiBhbnksIHR5cGU6IFFCRGF0YVR5cGVFbnVtKSB7XHJcbiAgICBpZih2YWx1ZSkge1xyXG4gICAgICBpZih0eXBlID09IFFCRGF0YVR5cGVFbnVtLkJvb2xlYW4pIHtcclxuICAgICAgICByZXR1cm4gdmFsdWUudG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnO1xyXG4gICAgICB9XHJcbiAgICAgIGlmKHR5cGUgPT0gdGhpcy5xYkRhdGFUeXBlRW51bS5OdW1iZXIgfHwgdHlwZSA9PSB0aGlzLnFiRGF0YVR5cGVFbnVtLkRlY2ltYWwgfHwgdHlwZSA9PSB0aGlzLnFiRGF0YVR5cGVFbnVtLkxpc3Qpe1xyXG4gICAgICAgIHJldHVybiBOdW1iZXIodmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICB9IFxyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgZ2V0RGF0YVR5cGUoaWQ6IG51bWJlcikge1xyXG4gICAgcmV0dXJuIHRoaXMucWJEYXRhRW51bXMuZmluZCh2YWx1ZSA9PiB2YWx1ZSA9PT0gaWQpPy50b1N0cmluZygpID8/IFwiXCI7XHJcbiAgfVxyXG5cclxuICBkZWxldGVGaWVsZHNXaXRob3V0VmFsdWUoanNvbjogYW55KSB7XHJcbiAgICBpZiAoanNvbi5iYXNpYyAmJiBqc29uLmJhc2ljLnJ1bGVzKSB7XHJcbiAgICAgIGpzb24uYmFzaWMucnVsZXMgPSBqc29uLmJhc2ljLnJ1bGVzLmZpbHRlcigocnVsZTogYW55KSA9PiBydWxlLnZhbHVlICE9IG51bGwpO1xyXG4gICAgICBqc29uLmJhc2ljLnJ1bGVzID0ganNvbi5iYXNpYy5ydWxlcy5maWx0ZXIoKHJ1bGU6IGFueSkgPT4gcnVsZS52YWx1ZSAhPSB1bmRlZmluZWQpO1xyXG4gICAgICBqc29uLmJhc2ljLnJ1bGVzID0ganNvbi5iYXNpYy5ydWxlcy5maWx0ZXIoKHJ1bGU6IGFueSkgPT4gcnVsZS52YWx1ZSAhPT0gXCJcIik7XHJcbiAgICB9XHJcbiAgICBpZihqc29uLmFkdmFuY2VkICYmIGpzb24uYWR2YW5jZWQucnVsZXM/Lmxlbmd0aCAhPSAwKSB7XHJcbiAgICAgIGpzb24uYWR2YW5jZWQucnVsZXMgPSBqc29uLmFkdmFuY2VkLnJ1bGVzLmZpbHRlcigocnVsZTogYW55KSA9PiBydWxlLnJ1bGVzPy5sZW5ndGggIT0gMCk7XHJcbiAgICB9XHJcbiAgICBpZihqc29uLmdyb3VwZWQgJiYganNvbi5ncm91cGVkPy5ydWxlcy5sZW5ndGggIT0gMCkge1xyXG4gICAgICBqc29uLmdyb3VwZWQucnVsZXMgPSBqc29uLmdyb3VwZWQucnVsZXMuZmlsdGVyKChydWxlOiBhbnkpID0+IHJ1bGUucnVsZXM/Lmxlbmd0aCAhPSAwKTtcclxuICAgIH1cclxuICAgIGlmKGpzb24uZ3JvdXBlZCAmJiBqc29uLmdyb3VwZWQ/LnJ1bGVzLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgIGpzb24uZ3JvdXBlZCA9IG51bGw7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ganNvbjtcclxuICB9XHJcbiAgXHJcbiAgaW5pdGlhbGl6ZU9wZXJhdG9ycyhqc29uOiBhbnkpIHtcclxuICAgIGlmIChqc29uLmJhc2ljICYmIGpzb24uYmFzaWMucnVsZXMpIHtcclxuICAgICAganNvbi5iYXNpYy5ydWxlcy5mb3JFYWNoKChydWxlOmFueSkgPT4ge1xyXG4gICAgICAgIGlmKCFydWxlLm9wZXJhdG9yKSB7XHJcbiAgICAgICAgICBydWxlLm9wZXJhdG9yID0gXCI9XCI7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBqc29uO1xyXG4gIH1cclxuXHJcbiAgcmVzZXRCYXNpY1F1ZXJ5VmFsdWVzKCkge1xyXG4gICAgdGhpcy5iYXNpY1F1ZXJ5LnJ1bGVzLmZvckVhY2goKHJ1bGU6IFJ1bGUpID0+IHtcclxuICAgICAgaWYocnVsZS52YWx1ZSB8fCBydWxlLnZhbHVlID09IDApe1xyXG4gICAgICAgIHJ1bGUudmFsdWUgPSBudWxsXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0UXVlcnlGaWVsZE5hbWUoZmllbGROYW1lOiBzdHJpbmcsIGZpZWxkczogRmllbGRNYXApIHtcclxuICAgIGNvbnN0IGZpZWxkRW50cnkgPSBPYmplY3Qua2V5cyhmaWVsZHMpLmZpbmQoa2V5ID0+IGZpZWxkc1trZXldLmZpZWxkID09PSBmaWVsZE5hbWUpO1xyXG5cclxuICAgIHJldHVybiBmaWVsZEVudHJ5ICYmIGZpZWxkc1tmaWVsZEVudHJ5XS5uYW1lID8gZmllbGRzW2ZpZWxkRW50cnldLm5hbWUgOiBmaWVsZE5hbWU7XHJcbiAgfVxyXG5cclxuICBmaWVsZElzQm9vbGVhbihmaWVsZE5hbWU6IHN0cmluZywgZmllbGRzOiBGaWVsZE1hcCkge1xyXG4gICAgY29uc3QgZmllbGRFbnRyeSA9IE9iamVjdC5rZXlzKGZpZWxkcykuZmluZChrZXkgPT4gZmllbGRzW2tleV0uZmllbGQgPT09IGZpZWxkTmFtZSk7XHJcblxyXG4gICAgcmV0dXJuIGZpZWxkc1tmaWVsZEVudHJ5IV0udHlwZSA9PSBRQkRhdGFUeXBlRW51bS5Cb29sZWFuLnRvU3RyaW5nKCkgPyB0cnVlIDogZmFsc2U7XHJcbiAgfVxyXG5cclxufVxyXG4iLCI8IS0tIFRPRE86IEludGVudGFyIG90cmEgdmV6IHBhc2FyIGxvcyBjb21wb25lbnRlcyBhIGxvcyBkZSB3LSBwb3JxdWUgbm8gc2UgYWxpbmVuYSB5IGVsIHctZWRpdC1zZWxlY3Qgbm8gdmEgYmllbiBlbiBmaWVsZC4gXHJcbiAgQWhvcmEgc2UgY29uc2VydmFuIGxvcyBkZSBwLXcgY29uIGVzdGlsb3MuIC0tPlxyXG48ZGl2ICpuZ0lmPVwicXVlcnlDb25maWdSZWFkeVwiIGNsYXNzPVwidy1maWx0ZXItcGFuZWwtc3R5bGVzXCI+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiIWZpbHRlclBhbmVsT2JqZWN0LmFsbG93QWR2YW5jZWRTZWFyY2g7IGVsc2UgYmFpc2NBbmRBZHZhbmNlZFwiPlxyXG4gICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgJ3ctZmlsdGVyLXBhbmVsLWNvbnRhaW5lci1hZHZhbmNlZCcgOiBpc0FkdmFuY2VkU2VhcmNoLCAndy1maWx0ZXItcGFuZWwtY29udGFpbmVyLWJhc2ljJyA6ICFpc0FkdmFuY2VkU2VhcmNoIH1cIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYmFzaWNcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIGJ1dHRvbi1nYXBcIj5cclxuICAgICAgICAgIDx3LWJ1dHRvbiBbbGFiZWxdPVwidHJhbnNsYXRpb25zT2JqZWN0LmNsZWFyQnV0dG9uTGFiZWxcIiB0eXBlPVwidGVydGlhcnlcIiBzaXplPVwic21hbGxcIiAob25DbGljayk9XCJvbkNsZWFyQ2xpY2tlZCgpXCI+PC93LWJ1dHRvbj5cclxuICAgICAgICAgIDx3LWJ1dHRvbiBbbGFiZWxdPVwidHJhbnNsYXRpb25zT2JqZWN0LnNlYXJjaEJ1dHRvbkxhYmVsXCIgc2l6ZT1cInNtYWxsXCIgKG9uQ2xpY2spPVwib25TZWFyY2hDbGlja2VkKClcIj48L3ctYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSAjYmFpc2NBbmRBZHZhbmNlZD5cclxuICAgICAgPGRpdiBbbmdDbGFzc109XCJ7ICd3LWZpbHRlci1wYW5lbC1jb250YWluZXItYWR2YW5jZWQnIDogaXNBZHZhbmNlZFNlYXJjaCwgJ3ctZmlsdGVyLXBhbmVsLWNvbnRhaW5lci1iYXNpYycgOiAhaXNBZHZhbmNlZFNlYXJjaCB9XCI+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWlzQWR2YW5jZWRTZWFyY2g7IGVsc2UgYWR2YW5jZWRWaWV3XCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJiYXNpY1wiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2FkdmFuY2VkVmlldz5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImFkdmFuY2VkXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1lbmQgYnV0dG9uLWdhcFwiIFtjbGFzcy5wdC0zXT1cImlzQWR2YW5jZWRTZWFyY2hcIj5cclxuICAgICAgICAgICAgPHctYnV0dG9uIFtsYWJlbF09XCJ0cmFuc2xhdGlvbnNPYmplY3QuY2xlYXJCdXR0b25MYWJlbFwiIHR5cGU9XCJ0ZXJ0aWFyeVwiIHNpemU9XCJzbWFsbFwiIChvbkNsaWNrKT1cIm9uQ2xlYXJDbGlja2VkKClcIj48L3ctYnV0dG9uPlxyXG4gICAgICAgICAgICA8dy1idXR0b24gW2xhYmVsXT1cInRyYW5zbGF0aW9uc09iamVjdC5zZWFyY2hCdXR0b25MYWJlbFwiIHNpemU9XCJzbWFsbFwiIChvbkNsaWNrKT1cIm9uU2VhcmNoQ2xpY2tlZCgpXCIgW2xvYWRpbmddPVwiZGF0YUlzTG9hZGluZ1NlYXJjaEJ1dHRvblwiPjwvdy1idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8bmctdGVtcGxhdGUgI2Jhc2ljPlxyXG4gICAgPGRpdiAqbmdJZj1cImZpbHRlclBhbmVsT2JqZWN0LmFsbG93QWR2YW5jZWRTZWFyY2hcIiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWVuZCBmbGV4LXdyYXBcIj5cclxuICAgICAgPHctYnV0dG9uIFtsYWJlbF09XCJ0cmFuc2xhdGlvbnNPYmplY3QuYWR2YW5jZWRTZWFyY2hUYWJMYWJlbFwiIHR5cGU9XCJ0ZXh0XCIgKG9uQ2xpY2spPVwidXBkYXRlU2VhcmNoVHlwZSgpXCI+PC93LWJ1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInctZmlsdGVyLXBhbmVsLWJhc2ljIHF1ZXJ5LWJ1aWxkZXItc3R5bGUgZmFkZWluIGFuaW1hdGlvbi1kdXJhdGlvbi01MDBcIj5cclxuICAgICAgPHF1ZXJ5LWJ1aWxkZXIgW2Zvcm1Db250cm9sXT0ncXVlcnlDdHJsJyBbY29uZmlnXT0nYmFzaWNRdWVyeUNvbmZpZycgW2FsbG93UnVsZXNldF09J2ZpbHRlclBhbmVsT2JqZWN0LmFsbG93UnVsZVNldCcgW2FsbG93UnVsZXNldF09XCJmaWx0ZXJQYW5lbE9iamVjdC5hbGxvd1J1bGVTZXRcIiBbcGVyc2lzdFZhbHVlT25GaWVsZENoYW5nZV09J3BlcnNpc3RWYWx1ZU9uRmllbGRDaGFuZ2UnPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5QnV0dG9uR3JvdXA9XCJsZXQgcnVsZXNldDtcIj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqcXVlcnlSZW1vdmVCdXR0b249XCJsZXQgcnVsZTsgbGV0IHJlbW92ZVJ1bGU9cmVtb3ZlUnVsZVwiPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8bmctY29udGFpbmVyICpxdWVyeVN3aXRjaEdyb3VwPVwibGV0IHJ1bGVzZXQ7IGxldCBvbkNoYW5nZT1vbkNoYW5nZVwiPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8bmctY29udGFpbmVyICpxdWVyeUVudGl0eT1cImxldCBydWxlOyBsZXQgZW50aXRpZXM9ZW50aXRpZXM7IGxldCBvbkNoYW5nZT1vbkNoYW5nZVwiPlxyXG4gICAgICAgICAgPHAtZHJvcGRvd24gW2Rpc2FibGVkXT1cInRydWVcIiBjbGFzcz1cIiB3LWVkaXQtc2VsZWN0LXNtYWxsXCIgKm5nSWY9XCJmYWxzZVwiIGFwcGVuZFRvPVwiYm9keVwiIFtvcHRpb25zXT1cImVudGl0aWVzXCIgWyhuZ01vZGVsKV09XCJydWxlLmVudGl0eVwiIG9wdGlvbkxhYmVsPVwibmFtZVwiIG9wdGlvblZhbHVlPVwidmFsdWVcIiAobmdNb2RlbENoYW5nZSk9XCJvbkNoYW5nZSgkZXZlbnQsIHJ1bGUpXCI+PC9wLWRyb3Bkb3duPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8bmctY29udGFpbmVyICpxdWVyeUZpZWxkPVwibGV0IHJ1bGU7IGxldCBmaWVsZHM9ZmllbGRzOyBsZXQgb25DaGFuZ2U9b25DaGFuZ2U7IGxldCBnZXRGaWVsZHMgPSBnZXRGaWVsZHM7IGxldCB2YWx1ZT12YWx1ZTsgbGV0IG5hbWU9bmFtZTsgbGV0IGluZGV4PWluZGV4XCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gYXBwZW5kVG89XCJib2R5XCIgY2xhc3M9XCJ3LTQgdGV4dC1sZWZ0IHctZmlsdGVyLXBhbmVsLWlucHV0LXRleHQtbGFiZWxcIiBbY2xhc3Mudy1maWx0ZXItcGFuZWwtYm9vbGVhbi1sYWJlbC13aWR0aF09XCJmaWVsZElzQm9vbGVhbihydWxlLmZpZWxkLCBnZXRGaWVsZHMocnVsZS5lbnRpdHkpKVwiIG9wdGlvbkxhYmVsPVwibmFtZVwiIG9wdGlvblZhbHVlPVwidmFsdWVcIj57eyBnZXRRdWVyeUZpZWxkTmFtZShydWxlLmZpZWxkLCBnZXRGaWVsZHMocnVsZS5lbnRpdHkpKX19PC9zcGFuPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8bmctY29udGFpbmVyICpxdWVyeU9wZXJhdG9yPVwibGV0IHJ1bGU7IGxldCBvcGVyYXRvcnM9b3BlcmF0b3JzOyBsZXQgb25DaGFuZ2U9b25DaGFuZ2VcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJxdWVyeS1idWlsZGVyLW9wZXJhdG9yLXdpZHRoXCI+XHJcbiAgICAgICAgICAgICAgPHAtZHJvcGRvd24gY2xhc3M9XCIgdy1lZGl0LXNlbGVjdC1zbWFsbFwiICpuZ0lmPVwiaXNBZHZhbmNlZFNlYXJjaFwiIGFwcGVuZFRvPVwiYm9keVwiIFsobmdNb2RlbCldPVwicnVsZS5vcGVyYXRvclwiIFtvcHRpb25zXT1cIm9wZXJhdG9yc1wiIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlKHJ1bGUpXCI+PC9wLWRyb3Bkb3duPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5SW5wdXQ9XCJsZXQgcnVsZTsgdHlwZTogcWJEYXRhVHlwZUVudW0uQm9vbGVhbi50b1N0cmluZygpOyBsZXQgb25DaGFuZ2U9b25DaGFuZ2VcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwicXVlcnktYnVpbGRlci1vcGVyYXRvci13aWR0aFwiPlxyXG4gICAgICAgICAgICA8dy10b2dnbGUtYnV0dG9uIHNpemU9XCJzbWFsbFwiIFsobmdNb2RlbCldPVwicnVsZS52YWx1ZVwiIG9uTGFiZWw9XCJUcnVlXCIgb2ZmTGFiZWw9XCJGYWxzZVwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlKClcIj48L3ctdG9nZ2xlLWJ1dHRvbj5cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqcXVlcnlJbnB1dD1cImxldCBydWxlOyB0eXBlOiBxYkRhdGFUeXBlRW51bS5EYXRldGltZS50b1N0cmluZygpOyBsZXQgb25DaGFuZ2U9b25DaGFuZ2VcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ3LWVkaXQtY2FsZW5kYXJcIiBzdHlsZT1cIndpZHRoOiAxMDAlO1wiPlxyXG4gICAgICAgICAgICAgIDx3LWVkaXQtY2FsZW5kYXIgYXBwZW5kVG89XCJib2R5XCIgc2l6ZT1cInNtYWxsXCIgW3Nob3dJY29uXT1cImZhbHNlXCIgWyhuZ01vZGVsKV09XCJydWxlLnZhbHVlXCIgKG9uQ2hhbmdlKT1cIm9uQ2hhbmdlKClcIiBbc2hvd1RpbWVdPVwidHJ1ZVwiIFtzaG93U2Vjb25kc109XCJ0cnVlXCIgW3BsYWNlaG9sZGVyXT1cInRyYW5zbGF0aW9uc09iamVjdC5maWVsZHNQbGFjZWhvbGRlcnMuZGF0ZXRpbWVcIiBbZGlzcGxheUlubGluZUJsb2NrXT1cInRydWVcIj48L3ctZWRpdC1jYWxlbmRhcj5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8bmctY29udGFpbmVyICpxdWVyeUlucHV0PVwibGV0IHJ1bGU7IGxldCBmaWVsZD1maWVsZDsgdHlwZTogcWJEYXRhVHlwZUVudW0uRGVjaW1hbC50b1N0cmluZygpOyBsZXQgb25DaGFuZ2U9b25DaGFuZ2VcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ3LWZpbHRlci1wYW5lbC1iYXNpYy1xdWVyeS1idWlsZGVyLWlucHV0LXdpZHRoXCI+XHJcbiAgICAgICAgICAgICAgPHAtaW5wdXROdW1iZXIgaW5wdXRTdHlsZUNsYXNzPVwiZmxleCBmbGV4LTFcIiBzdHlsZUNsYXNzPVwiZmxleCBmbGV4LTFcIiBjbGFzcz1cIiB3LWZpbHRlci1wYW5lbC1iYXNpYy1xdWVyeS1idWlsZGVyLWlucHV0LXdpZHRoIHctZWRpdC1pbnB1dC1udW1iZXItc21hbGwgdy1lZGl0LWlucHV0LW51bWJlci1zbWFsbC1oZWlnaHRcIiBbKG5nTW9kZWwpXT1cInJ1bGUudmFsdWVcIiBpbnB1dElkPVwibWlubWF4XCIgaW5wdXRJZD1cIm1pbm1heFwiIG1vZGU9XCJkZWNpbWFsXCIgW21pbkZyYWN0aW9uRGlnaXRzXT1cIjJcIiBbbWF4RnJhY3Rpb25EaWdpdHNdPVwiNVwiIFttaW5dPVwiMFwiIFttYXhdPVwiMTAwXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25DaGFuZ2UoKVwiIFtwbGFjZWhvbGRlcl09XCJ0cmFuc2xhdGlvbnNPYmplY3QuZmllbGRzUGxhY2Vob2xkZXJzLmRlY2ltYWxcIj4gPC9wLWlucHV0TnVtYmVyPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5SW5wdXQ9XCJsZXQgcnVsZTsgbGV0IG9wdGlvbnM9b3B0aW9uczsgdHlwZTogcWJEYXRhVHlwZUVudW0uTGlzdC50b1N0cmluZygpOyBsZXQgb25DaGFuZ2U9b25DaGFuZ2VcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ3LWZpbHRlci1wYW5lbC1iYXNpYy1xdWVyeS1idWlsZGVyLWlucHV0LXdpZHRoXCI+XHJcbiAgICAgICAgICAgICAgPHAtZHJvcGRvd24gY2xhc3M9XCIgdy1lZGl0LXNlbGVjdC1zbWFsbFwiIGFwcGVuZFRvPVwiYm9keVwiIFtvcHRpb25zXT1cIm9wdGlvbnNcIiBbKG5nTW9kZWwpXT1cInJ1bGUudmFsdWVcIiAobmdNb2RlbENoYW5nZSk9XCJvbkNoYW5nZSgpXCIgb3B0aW9uTGFiZWw9XCJuYW1lXCIgb3B0aW9uVmFsdWU9XCJ2YWx1ZVwiIFtwbGFjZWhvbGRlcl09XCJ0cmFuc2xhdGlvbnNPYmplY3QuZmllbGRzUGxhY2Vob2xkZXJzLmxpc3RcIj48L3AtZHJvcGRvd24+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqcXVlcnlJbnB1dD1cImxldCBydWxlOyBsZXQgZmllbGQ9ZmllbGQ7IHR5cGU6IHFiRGF0YVR5cGVFbnVtLk51bWJlci50b1N0cmluZygpOyBsZXQgb25DaGFuZ2U9b25DaGFuZ2VcIj5cclxuICAgICAgICAgICAgICA8cC1pbnB1dE51bWJlciBbdXNlR3JvdXBpbmddPVwiZmFsc2VcIiBpbnB1dFN0eWxlQ2xhc3M9XCJmbGV4IGZsZXgtMVwiIHN0eWxlQ2xhc3M9XCJmbGV4IGZsZXgtMVwiIGNsYXNzPVwiIHctZmlsdGVyLXBhbmVsLWJhc2ljLXF1ZXJ5LWJ1aWxkZXItaW5wdXQtd2lkdGggdy1lZGl0LWlucHV0LW51bWJlci1zbWFsbCB3LWVkaXQtaW5wdXQtbnVtYmVyLXNtYWxsLWhlaWdodFwiIFsobmdNb2RlbCldPVwicnVsZS52YWx1ZVwiIGlucHV0SWQ9XCJtaW5tYXhcIiBpbnB1dElkPVwibWlubWF4XCIgW21pbl09XCIwXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25DaGFuZ2UoKVwiIFtwbGFjZWhvbGRlcl09XCJ0cmFuc2xhdGlvbnNPYmplY3QuZmllbGRzUGxhY2Vob2xkZXJzLm51bWJlclwiPiA8L3AtaW5wdXROdW1iZXI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5SW5wdXQ9XCJsZXQgcnVsZTsgbGV0IGZpZWxkPWZpZWxkOyB0eXBlOiBxYkRhdGFUeXBlRW51bS5UZXh0LnRvU3RyaW5nKCk7IGxldCBvbkNoYW5nZT1vbkNoYW5nZVwiPlxyXG4gICAgICAgICAgPGlucHV0IGNsYXNzPVwiIHctZmlsdGVyLXBhbmVsLWJhc2ljLXF1ZXJ5LWJ1aWxkZXItaW5wdXQtd2lkdGggdy1lZGl0LWlucHV0LXRleHQtc21hbGwtaGVpZ2h0IHctZWRpdC1pbnB1dC10ZXh0LXNtYWxsXCIgdHlwZT1cInRleHRcIiBwSW5wdXRUZXh0IFsobmdNb2RlbCldPVwicnVsZS52YWx1ZVwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlKClcIiBbcGxhY2Vob2xkZXJdPVwidHJhbnNsYXRpb25zT2JqZWN0LmZpZWxkc1BsYWNlaG9sZGVycy50ZXh0XCIvPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8bmctY29udGFpbmVyICpxdWVyeUlucHV0PVwibGV0IHJ1bGU7IGxldCBvcHRpb25zPW9wdGlvbnM7IHR5cGU6IHFiRGF0YVR5cGVFbnVtLkxpc3QudG9TdHJpbmcoKTsgbGV0IG9uQ2hhbmdlPW9uQ2hhbmdlXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidy1maWx0ZXItcGFuZWwtYmFzaWMtcXVlcnktYnVpbGRlci1pbnB1dC13aWR0aFwiPlxyXG4gICAgICAgICAgICAgIDxwLW11bHRpU2VsZWN0IFthcHBlbmRUb109XCInYm9keSdcIiBbb3B0aW9uc109XCJvcHRpb25zXCIgWyhuZ01vZGVsKV09XCJydWxlLnZhbHVlXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25DaGFuZ2UoKVwiIG9wdGlvbkxhYmVsPVwibmFtZVwiIG9wdGlvblZhbHVlPVwidmFsdWVcIiBkaXNwbGF5PVwiY2hpcFwiIFtwbGFjZWhvbGRlcl09XCJ0cmFuc2xhdGlvbnNPYmplY3QuZmllbGRzUGxhY2Vob2xkZXJzLmxpc3RcIj48L3AtbXVsdGlTZWxlY3Q+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpxdWVyeUlucHV0PVwibGV0IHJ1bGU7IGxldCBvcHRpb25zPW9wdGlvbnM7IHR5cGU6IHFiRGF0YVR5cGVFbnVtLkFkZHJlc3MudG9TdHJpbmcoKTsgbGV0IG9uQ2hhbmdlPW9uQ2hhbmdlXCI+XHJcbiAgICAgICAgICA8dy1hZGRyZXNzLWZpZWxkIFsobmdNb2RlbCldPVwicnVsZS52YWx1ZVwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlKClcIiBbb3BlcmF0b3JdPVwicnVsZS5vcGVyYXRvclwiIFtzZWdtZW50YXRpb25BcGlVcmxdPVwic2VnbWVudGF0aW9uQXBpVXJsXCIgW3NlZ21lbnRhdGlvbkFwaVRva2VuXT1cInNlZ21lbnRhdGlvblRva2VuXCI+PC93LWFkZHJlc3MtZmllbGQ+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvcXVlcnktYnVpbGRlcj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNBZHZhbmNlZFNlYXJjaCAmJiBiYXNpY1F1ZXJ5LnJ1bGVzLmxlbmd0aD09MFwiID5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm5vUXVlcnlEYXRhXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgPG5nLXRlbXBsYXRlICNhZHZhbmNlZD5cclxuICAgIDxkaXYgW2NsYXNzLnF1ZXJ5LWJ1aWxkZXItc3R5bGVdPVwiIWZpbHRlclBhbmVsT2JqZWN0LmFsbG93UnVsZVNldFwiIGNsYXNzPVwidy1maWx0ZXItcGFuZWwtY29udGFpbmVyIGZhZGVpbiBhbmltYXRpb24tZHVyYXRpb24tNTAwXCI+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJmaWx0ZXJQYW5lbE9iamVjdC5hbGxvd1J1bGVTZXRcIiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWVuZCBmbGV4LXdyYXBcIj5cclxuICAgICAgICA8dy1idXR0b24gY2xhc3M9XCJtYi0yXCIgW2xhYmVsXT1cInRyYW5zbGF0aW9uc09iamVjdC5iYXNpY1NlYXJjaFRhYkxhYmVsXCIgdHlwZT1cInRleHRcIiAob25DbGljayk9XCJ1cGRhdGVTZWFyY2hUeXBlKClcIj48L3ctYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPHF1ZXJ5LWJ1aWxkZXIgW2Zvcm1Db250cm9sXT0nYWR2YW5jZWRRdWVyeUN0cmwnIFtjb25maWddPSdhZHZhbmNlZFF1ZXJ5Q29uZmlnJyBbYWxsb3dSdWxlc2V0XT0nZmlsdGVyUGFuZWxPYmplY3QuYWxsb3dSdWxlU2V0JyBbYWxsb3dDb2xsYXBzZV09J2ZpbHRlclBhbmVsT2JqZWN0LmFsbG93Q29sYXBzZScgW2FsbG93UnVsZXNldF09XCJmaWx0ZXJQYW5lbE9iamVjdC5hbGxvd1J1bGVTZXRcIiBbcGVyc2lzdFZhbHVlT25GaWVsZENoYW5nZV09J3BlcnNpc3RWYWx1ZU9uRmllbGRDaGFuZ2UnPlxyXG4gICAgICAgICAgPGRpdiAqbmdJZj1cImZpbHRlclBhbmVsT2JqZWN0LmFsbG93UnVsZVNldDsgZWxzZSBub1J1bGVTZXRcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqcXVlcnlCdXR0b25Hcm91cD1cImxldCBydWxlc2V0OyBsZXQgYWRkUnVsZT1hZGRSdWxlOyBsZXQgYWRkUnVsZVNldD1hZGRSdWxlU2V0OyBsZXQgcmVtb3ZlUnVsZVNldD1yZW1vdmVSdWxlU2V0XCI+XHJcbiAgICAgICAgICAgICAgICA8dy1idXR0b24gY2xhc3M9XCJtci0yXCIgW2xhYmVsXT1cInRyYW5zbGF0aW9uc09iamVjdC5hZHZhbmNlZFNlYXJjaC5hZGRSdWxlQnV0dG9uTGFiZWxcIiB0eXBlPVwic2Vjb25kYXJ5XCIgc2l6ZT1cInNtYWxsXCIgKG9uQ2xpY2spPVwiYWRkUnVsZSgpXCI+PC93LWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgIDx3LWJ1dHRvbiBjbGFzcz1cIm1yLTJcIiBbbGFiZWxdPVwidHJhbnNsYXRpb25zT2JqZWN0LmFkdmFuY2VkU2VhcmNoLmFkZFJ1bGVTZXRCdXR0b25MYWJlbFwiIHR5cGU9XCJzZWNvbmRhcnlcIiBpY29uPVwicGkgcGktcGx1c1wiIHNpemU9XCJzbWFsbFwiICpuZ0lmPVwiYWRkUnVsZVNldFwiIChvbkNsaWNrKT1cImFkZFJ1bGVTZXQoKVwiPjwvdy1idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8dy1idXR0b24gY2xhc3M9XCJtci0yXCIgW2xhYmVsXT1cInRyYW5zbGF0aW9uc09iamVjdC5hZHZhbmNlZFNlYXJjaC5yZW1vdmVSdWxlU2V0QnV0dG9uTGFiZWxcIiB0eXBlPVwidGVydGlhcnlcIiBpY29uPVwicGkgcGktbWludXNcIiBzaXplPVwic21hbGxcIiAqbmdJZj1cInJlbW92ZVJ1bGVTZXRcIiAob25DbGljayk9XCJyZW1vdmVSdWxlU2V0KClcIj48L3ctYnV0dG9uPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9SdWxlU2V0PlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpxdWVyeUJ1dHRvbkdyb3VwPVwibGV0IHJ1bGVzZXQ7IGxldCBhZGRSdWxlPWFkZFJ1bGU7IGxldCBhZGRSdWxlU2V0PWFkZFJ1bGVTZXQ7IGxldCByZW1vdmVSdWxlU2V0PXJlbW92ZVJ1bGVTZXRcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIGZsZXgtd3JhcFwiPlxyXG4gICAgICAgICAgICAgICAgPHctYnV0dG9uIFtsYWJlbF09XCJ0cmFuc2xhdGlvbnNPYmplY3QuYmFzaWNTZWFyY2hUYWJMYWJlbFwiIHR5cGU9XCJ0ZXh0XCIgKG9uQ2xpY2spPVwidXBkYXRlU2VhcmNoVHlwZSgpXCI+PC93LWJ1dHRvbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFkdmFuY2VkLXF1ZXJ5LWJ1dHRvbi1ncm91cCBnYXAtM1wiPlxyXG4gICAgICAgICAgICAgICAgPHctYnV0dG9uIFtsYWJlbF09XCJ0cmFuc2xhdGlvbnNPYmplY3QuYWR2YW5jZWRTZWFyY2guYWRkUnVsZUJ1dHRvbkxhYmVsXCIgdHlwZT1cInNlY29uZGFyeVwiIHNpemU9XCJzbWFsbFwiIChvbkNsaWNrKT1cImFkZFJ1bGUoKVwiPjwvdy1idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8dy1idXR0b24gW2xhYmVsXT1cInRyYW5zbGF0aW9uc09iamVjdC5hZHZhbmNlZFNlYXJjaC5hZGRSdWxlU2V0QnV0dG9uTGFiZWxcIiB0eXBlPVwic2Vjb25kYXJ5XCIgaWNvbj1cInBpIHBpLXBsdXNcIiBzaXplPVwic21hbGxcIiAqbmdJZj1cImFkZFJ1bGVTZXRcIiAob25DbGljayk9XCJhZGRSdWxlU2V0KClcIj48L3ctYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPHctYnV0dG9uIFtsYWJlbF09XCJ0cmFuc2xhdGlvbnNPYmplY3QuYWR2YW5jZWRTZWFyY2gucmVtb3ZlUnVsZVNldEJ1dHRvbkxhYmVsXCIgdHlwZT1cInRlcnRpYXJ5XCIgaWNvbj1cInBpIHBpLW1pbnVzXCIgc2l6ZT1cInNtYWxsXCIgKm5nSWY9XCJyZW1vdmVSdWxlU2V0XCIgKG9uQ2xpY2spPVwicmVtb3ZlUnVsZVNldCgpXCI+PC93LWJ1dHRvbj5cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5QXJyb3dJY29uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHBCdXR0b24gcFJpcHBsZSB0eXBlPVwiYnV0dG9uXCIgaWNvbj1cInBpIHBpLWFuZ2xlLXJpZ2h0XCIgY2xhc3M9XCJwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLXRleHRcIj48L2J1dHRvbj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5UmVtb3ZlQnV0dG9uPVwibGV0IHJ1bGU7IGxldCByZW1vdmVSdWxlPXJlbW92ZVJ1bGVcIj5cclxuICAgICAgICAgICAgPHctYnV0dG9uIGNsYXNzPVwiXCIgbGFiZWw9XCJcIiBzaXplPVwic21hbGxcIiB0eXBlPVwidGVydGlhcnlcIiBpY29uPVwicGkgcGktdGltZXNcIiAob25DbGljayk9XCJyZW1vdmVSdWxlKHJ1bGUpXCI+PC93LWJ1dHRvbj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5U3dpdGNoR3JvdXA9XCJsZXQgcnVsZXNldDsgbGV0IG9uQ2hhbmdlPW9uQ2hhbmdlXCI+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJydWxlc2V0XCIgY2xhc3M9XCJ3LWZpbHRlci1wYW5lbC1zd2l0Y2gtZ3JvdXAtcGFkZGluZ1wiPlxyXG4gICAgICAgICAgICAgIDx3LXNlbGVjdC1idXR0b24gKm5nSWY9XCJmaWx0ZXJQYW5lbE9iamVjdC5hbGxvd0xvZ2ljYWxSdWxlXCIgW3N0YXRlT3B0aW9uc109XCJbe2xhYmVsOiAnQW5kJywgdmFsdWU6ICdhbmQnfSwge2xhYmVsOiAnT3InLCB2YWx1ZTogJ29yJ31dXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicnVsZXNldC5jb25kaXRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NpemVdPVwiJ3NtYWxsJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmFsdWUpPVwicnVsZXNldC5jb25kaXRpb24gPSAkZXZlbnRcIj5cclxuICAgICAgICAgICAgICA8L3ctc2VsZWN0LWJ1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpxdWVyeUVudGl0eT1cImxldCBydWxlOyBsZXQgZW50aXRpZXM9ZW50aXRpZXM7IGxldCBvbkNoYW5nZT1vbkNoYW5nZVwiPlxyXG4gICAgICAgICAgICA8cC1kcm9wZG93biAqbmdJZj1cImZpbHRlclBhbmVsT2JqZWN0LmVuaXR5TW9kZVwiIGNsYXNzPVwiZmllbGQtZ2FwIHctZWRpdC1zZWxlY3Qtc21hbGwgdy1lbnRpdHktZHJvcGRvd25cIiBhcHBlbmRUbz1cImJvZHlcIiBbb3B0aW9uc109XCJlbnRpdGllc1wiIFsobmdNb2RlbCldPVwicnVsZS5lbnRpdHlcIiBvcHRpb25MYWJlbD1cIm5hbWVcIiBvcHRpb25WYWx1ZT1cInZhbHVlXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25DaGFuZ2UoJGV2ZW50LCBydWxlKVwiPjwvcC1kcm9wZG93bj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5RmllbGQ9XCJsZXQgcnVsZTsgbGV0IGZpZWxkcz1maWVsZHM7IGxldCBvbkNoYW5nZT1vbkNoYW5nZTsgbGV0IGdldEZpZWxkcyA9IGdldEZpZWxkc1wiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInF1ZXJ5LWJ1aWxkZXItZmllbGQtd2lkdGhcIj5cclxuICAgICAgICAgICAgICA8cC1kcm9wZG93biBjbGFzcz1cImZpZWxkLWdhcCB3LWVkaXQtc2VsZWN0LXNtYWxsXCIgYXBwZW5kVG89XCJib2R5XCIgW29wdGlvbnNdPVwiZ2V0RmllbGRzKHJ1bGUuZW50aXR5KVwiIFsobmdNb2RlbCldPVwicnVsZS5maWVsZFwiIG9wdGlvbkxhYmVsPVwibmFtZVwiIG9wdGlvblZhbHVlPVwidmFsdWVcIiAobmdNb2RlbENoYW5nZSk9XCJvbkNoYW5nZSgkZXZlbnQsIHJ1bGUpXCI+PC9wLWRyb3Bkb3duPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpxdWVyeU9wZXJhdG9yPVwibGV0IHJ1bGU7IGxldCBvcGVyYXRvcnM9b3BlcmF0b3JzOyBsZXQgb25DaGFuZ2U9b25DaGFuZ2VcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJxdWVyeS1idWlsZGVyLW9wZXJhdG9yLXdpZHRoXCI+XHJcbiAgICAgICAgICAgICAgPHAtZHJvcGRvd24gY2xhc3M9XCJmaWVsZC1nYXAgdy1lZGl0LXNlbGVjdC1zbWFsbFwiIGFwcGVuZFRvPVwiYm9keVwiIFsobmdNb2RlbCldPVwicnVsZS5vcGVyYXRvclwiIFtvcHRpb25zXT1cIm9wZXJhdG9yc1wiIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlKHJ1bGUpXCI+PC9wLWRyb3Bkb3duPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpxdWVyeUlucHV0PVwibGV0IHJ1bGU7IHR5cGU6IHFiRGF0YVR5cGVFbnVtLkJvb2xlYW4udG9TdHJpbmcoKTsgbGV0IG9uQ2hhbmdlPW9uQ2hhbmdlXCI+XHJcbiAgICAgICAgICAgIDx3LXRvZ2dsZS1idXR0b24gY2xhc3M9XCJmaWVsZC1nYXAgdG9nZ2xlLWJ1dHRvbi1hbGlnblwiIHNpemU9XCJzbWFsbFwiIFsobmdNb2RlbCldPVwicnVsZS52YWx1ZVwiIG9uTGFiZWw9XCJUcnVlXCIgb2ZmTGFiZWw9XCJGYWxzZVwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlKClcIj48L3ctdG9nZ2xlLWJ1dHRvbj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5SW5wdXQ9XCJsZXQgcnVsZTsgdHlwZTogcWJEYXRhVHlwZUVudW0uRGF0ZXRpbWUudG9TdHJpbmcoKTsgbGV0IG9uQ2hhbmdlPW9uQ2hhbmdlXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicXVlcnktYnVpbGRlci1pbnB1dC13aWR0aFwiPlxyXG4gICAgICAgICAgICAgIDx3LWVkaXQtY2FsZW5kYXIgY2xhc3M9XCJmaWVsZC1nYXBcIiBhcHBlbmRUbz1cImJvZHlcIiBzaXplPVwic21hbGxcIiBbc2hvd0ljb25dPVwiZmFsc2VcIiBbKG5nTW9kZWwpXT1cInJ1bGUudmFsdWVcIiAob25DaGFuZ2UpPVwib25DaGFuZ2UoKVwiIFtzaG93VGltZV09XCJ0cnVlXCIgW3Nob3dTZWNvbmRzXT1cInRydWVcIiBbcGxhY2Vob2xkZXJdPVwidHJhbnNsYXRpb25zT2JqZWN0LmZpZWxkc1BsYWNlaG9sZGVycy5kYXRldGltZVwiIFtkaXNwbGF5SW5saW5lQmxvY2tdPVwidHJ1ZVwiPjwvdy1lZGl0LWNhbGVuZGFyPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpxdWVyeUlucHV0PVwibGV0IHJ1bGU7IGxldCBmaWVsZD1maWVsZDsgdHlwZTogcWJEYXRhVHlwZUVudW0uRGVjaW1hbC50b1N0cmluZygpOyBsZXQgb25DaGFuZ2U9b25DaGFuZ2VcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJxdWVyeS1idWlsZGVyLWlucHV0LXdpZHRoXCI+XHJcbiAgICAgICAgICAgICAgPHAtaW5wdXROdW1iZXIgaW5wdXRTdHlsZUNsYXNzPVwiZmxleCBmbGV4LTFcIiBzdHlsZUNsYXNzPVwiZmxleCBmbGV4LTFcIiBjbGFzcz1cImZpZWxkLWdhcCB3LWVkaXQtaW5wdXQtbnVtYmVyLXNtYWxsIHctZWRpdC1pbnB1dC1udW1iZXItc21hbGwtaGVpZ2h0XCIgWyhuZ01vZGVsKV09XCJydWxlLnZhbHVlXCIgaW5wdXRJZD1cIm1pbm1heFwiIGlucHV0SWQ9XCJtaW5tYXhcIiBtb2RlPVwiZGVjaW1hbFwiIFttaW5GcmFjdGlvbkRpZ2l0c109XCIyXCIgW21heEZyYWN0aW9uRGlnaXRzXT1cIjVcIiBbbWluXT1cIjBcIiBbbWF4XT1cIjEwMFwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlKClcIiBbcGxhY2Vob2xkZXJdPVwidHJhbnNsYXRpb25zT2JqZWN0LmZpZWxkc1BsYWNlaG9sZGVycy5kZWNpbWFsXCI+IDwvcC1pbnB1dE51bWJlcj5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqcXVlcnlJbnB1dD1cImxldCBydWxlOyBsZXQgb3B0aW9ucz1vcHRpb25zOyB0eXBlOiBxYkRhdGFUeXBlRW51bS5MaXN0LnRvU3RyaW5nKCk7IGxldCBvbkNoYW5nZT1vbkNoYW5nZVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInF1ZXJ5LWJ1aWxkZXItaW5wdXQtd2lkdGhcIj5cclxuICAgICAgICAgICAgICA8cC1kcm9wZG93biBjbGFzcz1cImZpZWxkLWdhcCB3LWVkaXQtc2VsZWN0LXNtYWxsXCIgYXBwZW5kVG89XCJib2R5XCIgW29wdGlvbnNdPVwib3B0aW9uc1wiIFsobmdNb2RlbCldPVwicnVsZS52YWx1ZVwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlKClcIiBvcHRpb25MYWJlbD1cIm5hbWVcIiBvcHRpb25WYWx1ZT1cInZhbHVlXCIgW3BsYWNlaG9sZGVyXT1cInRyYW5zbGF0aW9uc09iamVjdC5maWVsZHNQbGFjZWhvbGRlcnMubGlzdFwiPjwvcC1kcm9wZG93bj5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqcXVlcnlJbnB1dD1cImxldCBydWxlOyBsZXQgb3B0aW9ucz1vcHRpb25zOyB0eXBlOiBxYkRhdGFUeXBlRW51bS5MaXN0LnRvU3RyaW5nKCk7IGxldCBvbkNoYW5nZT1vbkNoYW5nZVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInF1ZXJ5LWJ1aWxkZXItaW5wdXQtd2lkdGggZmllbGQtZ2FwXCI+XHJcbiAgICAgICAgICAgICAgPHctbGlzdC1maWVsZCBbb3B0aW9uc109XCJvcHRpb25zXCIgWyhuZ01vZGVsKV09XCJydWxlLnZhbHVlXCIgW29wZXJhdG9yXT1cInJ1bGUub3BlcmF0b3JcIiAobmdNb2RlbENoYW5nZSk9XCJvbkNoYW5nZSgpXCIgW3BsYWNlaG9sZGVyXT1cInRyYW5zbGF0aW9uc09iamVjdC5maWVsZHNQbGFjZWhvbGRlcnMubGlzdFwiPjwvdy1saXN0LWZpZWxkPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpxdWVyeUlucHV0PVwibGV0IHJ1bGU7IGxldCBmaWVsZD1maWVsZDsgdHlwZTogcWJEYXRhVHlwZUVudW0uTnVtYmVyLnRvU3RyaW5nKCk7IGxldCBvbkNoYW5nZT1vbkNoYW5nZVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInF1ZXJ5LWJ1aWxkZXItaW5wdXQtd2lkdGhcIj5cclxuICAgICAgICAgICAgICA8cC1pbnB1dE51bWJlciBbdXNlR3JvdXBpbmddPVwiZmFsc2VcIiBpbnB1dFN0eWxlQ2xhc3M9XCJmbGV4IGZsZXgtMVwiIHN0eWxlQ2xhc3M9XCJmbGV4IGZsZXgtMVwiIGNsYXNzPVwiZmllbGQtZ2FwIHctZWRpdC1pbnB1dC1udW1iZXItc21hbGwgdy1lZGl0LWlucHV0LW51bWJlci1zbWFsbC1oZWlnaHRcIiBbKG5nTW9kZWwpXT1cInJ1bGUudmFsdWVcIiBpbnB1dElkPVwibWlubWF4XCIgaW5wdXRJZD1cIm1pbm1heFwiIFttaW5dPVwiMFwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlKClcIiBbcGxhY2Vob2xkZXJdPVwidHJhbnNsYXRpb25zT2JqZWN0LmZpZWxkc1BsYWNlaG9sZGVycy5udW1iZXJcIj4gPC9wLWlucHV0TnVtYmVyPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpxdWVyeUlucHV0PVwibGV0IHJ1bGU7IGxldCBmaWVsZD1maWVsZDsgdHlwZTogcWJEYXRhVHlwZUVudW0uVGV4dC50b1N0cmluZygpOyBsZXQgb25DaGFuZ2U9b25DaGFuZ2VcIj5cclxuICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZmllbGQtZ2FwIHF1ZXJ5LWJ1aWxkZXItaW5wdXQtd2lkdGggdy1lZGl0LWlucHV0LXRleHQtc21hbGwtaGVpZ2h0IHctZWRpdC1pbnB1dC10ZXh0LXNtYWxsXCIgdHlwZT1cInRleHRcIiBwSW5wdXRUZXh0IFsobmdNb2RlbCldPVwicnVsZS52YWx1ZVwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlKClcIiBbcGxhY2Vob2xkZXJdPVwidHJhbnNsYXRpb25zT2JqZWN0LmZpZWxkc1BsYWNlaG9sZGVycy50ZXh0XCIvPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqcXVlcnlJbnB1dD1cImxldCBydWxlOyBsZXQgb3B0aW9ucz1vcHRpb25zOyB0eXBlOiBxYkRhdGFUeXBlRW51bS5BZGRyZXNzLnRvU3RyaW5nKCk7IGxldCBvbkNoYW5nZT1vbkNoYW5nZVwiPlxyXG4gICAgICAgICAgICA8dy1hZGRyZXNzLWZpZWxkIFsobmdNb2RlbCldPVwicnVsZS52YWx1ZVwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlKClcIiBbb3BlcmF0b3JdPVwicnVsZS5vcGVyYXRvclwiIFtzZWdtZW50YXRpb25BcGlVcmxdPVwic2VnbWVudGF0aW9uQXBpVXJsXCIgW3NlZ21lbnRhdGlvbkFwaVRva2VuXT1cInNlZ21lbnRhdGlvblRva2VuXCIgW3NlbGVjdFBsYWNlaG9sZGVyXT1cInRyYW5zbGF0aW9uc09iamVjdC5maWVsZHNQbGFjZWhvbGRlcnMubGlzdFwiPjwvdy1hZGRyZXNzLWZpZWxkPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvcXVlcnktYnVpbGRlcj5cclxuXHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0FkdmFuY2VkU2VhcmNoICYmIGFkdmFuY2VkUXVlcnkucnVsZXMubGVuZ3RoPT0wXCIgPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJub1F1ZXJ5RGF0YVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgIDwhLS0gR3JvdXBlZCBmaWx0ZXIgLS0+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJmaWx0ZXJQYW5lbE9iamVjdC5hbGxvd0dyb3VwZWRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicHktNVwiPlxyXG4gICAgICAgICAgPHctdmlldy1jYXJkLXRpdGxlLXRleHQgW2NhcmRUaXRsZV09XCJ0cmFuc2xhdGlvbnNPYmplY3QuZ3JvdXBlZEZpbHRlclRpdGxlXCI+PC93LXZpZXctY2FyZC10aXRsZS10ZXh0PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8cXVlcnktYnVpbGRlciBbZm9ybUNvbnRyb2xdPSdncm91cGVkUXVlcnlDdHJsJyBbY29uZmlnXT0nYWR2YW5jZWRRdWVyeUNvbmZpZycgW2FsbG93UnVsZXNldF09J2ZpbHRlclBhbmVsT2JqZWN0LmFsbG93UnVsZVNldCcgW2FsbG93Q29sbGFwc2VdPSdmaWx0ZXJQYW5lbE9iamVjdC5hbGxvd0NvbGFwc2UnIFthbGxvd1J1bGVzZXRdPVwiZmlsdGVyUGFuZWxPYmplY3QuYWxsb3dSdWxlU2V0XCIgW3BlcnNpc3RWYWx1ZU9uRmllbGRDaGFuZ2VdPSdwZXJzaXN0VmFsdWVPbkZpZWxkQ2hhbmdlJz5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5QnV0dG9uR3JvdXA9XCJsZXQgcnVsZXNldDsgbGV0IGFkZFJ1bGU9YWRkUnVsZTsgbGV0IGFkZFJ1bGVTZXQ9YWRkUnVsZVNldDsgbGV0IHJlbW92ZVJ1bGVTZXQ9cmVtb3ZlUnVsZVNldFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBnYXAtMyBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgPHctYnV0dG9uIFtsYWJlbF09XCJ0cmFuc2xhdGlvbnNPYmplY3QuYWR2YW5jZWRTZWFyY2guYWRkUnVsZUJ1dHRvbkxhYmVsXCIgdHlwZT1cInNlY29uZGFyeVwiIHNpemU9XCJzbWFsbFwiIChvbkNsaWNrKT1cImFkZFJ1bGUoKVwiPjwvdy1idXR0b24+XHJcbiAgICAgICAgICAgICAgPHctYnV0dG9uIFtsYWJlbF09XCJ0cmFuc2xhdGlvbnNPYmplY3QuYWR2YW5jZWRTZWFyY2guYWRkUnVsZVNldEJ1dHRvbkxhYmVsXCIgdHlwZT1cInNlY29uZGFyeVwiIGljb249XCJwaSBwaS1wbHVzXCIgc2l6ZT1cInNtYWxsXCIgKm5nSWY9XCJhZGRSdWxlU2V0XCIgKG9uQ2xpY2spPVwiYWRkUnVsZVNldCgpXCI+PC93LWJ1dHRvbj5cclxuICAgICAgICAgICAgICA8dy1idXR0b24gW2xhYmVsXT1cInRyYW5zbGF0aW9uc09iamVjdC5hZHZhbmNlZFNlYXJjaC5yZW1vdmVSdWxlU2V0QnV0dG9uTGFiZWxcIiB0eXBlPVwidGVydGlhcnlcIiBpY29uPVwicGkgcGktbWludXNcIiBzaXplPVwic21hbGxcIiAqbmdJZj1cInJlbW92ZVJ1bGVTZXRcIiAob25DbGljayk9XCJyZW1vdmVSdWxlU2V0KClcIj48L3ctYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5QXJyb3dJY29uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHBCdXR0b24gcFJpcHBsZSB0eXBlPVwiYnV0dG9uXCIgaWNvbj1cInBpIHBpLWFuZ2xlLXJpZ2h0XCIgY2xhc3M9XCJwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLXRleHRcIj48L2J1dHRvbj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5UmVtb3ZlQnV0dG9uPVwibGV0IHJ1bGU7IGxldCByZW1vdmVSdWxlPXJlbW92ZVJ1bGVcIj5cclxuICAgICAgICAgICAgPHctYnV0dG9uIGNsYXNzPVwiXCIgbGFiZWw9XCJcIiBzaXplPVwic21hbGxcIiB0eXBlPVwidGVydGlhcnlcIiBpY29uPVwicGkgcGktdGltZXNcIiAob25DbGljayk9XCJyZW1vdmVSdWxlKHJ1bGUpXCI+PC93LWJ1dHRvbj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5U3dpdGNoR3JvdXA9XCJsZXQgcnVsZXNldDsgbGV0IG9uQ2hhbmdlPW9uQ2hhbmdlXCI+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJydWxlc2V0XCI+XHJcbiAgICAgICAgICAgICAgPHctc2VsZWN0LWJ1dHRvbiAqbmdJZj1cImZpbHRlclBhbmVsT2JqZWN0LmFsbG93TG9naWNhbFJ1bGVcIiBbc3RhdGVPcHRpb25zXT1cIlt7bGFiZWw6ICdBbmQnLCB2YWx1ZTogJ2FuZCd9LCB7bGFiZWw6ICdPcicsIHZhbHVlOiAnb3InfV1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJydWxlc2V0LmNvbmRpdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2l6ZV09XCInc21hbGwnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2YWx1ZSk9XCJydWxlc2V0LmNvbmRpdGlvbiA9ICRldmVudFwiPlxyXG4gICAgICAgICAgICAgIDwvdy1zZWxlY3QtYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5RW50aXR5PVwibGV0IHJ1bGU7IGxldCBlbnRpdGllcz1lbnRpdGllczsgbGV0IG9uQ2hhbmdlPW9uQ2hhbmdlXCI+XHJcbiAgICAgICAgICAgIDxwLWRyb3Bkb3duIGNsYXNzPVwibXItMyB3LWVkaXQtc2VsZWN0LXNtYWxsXCIgKm5nSWY9XCJmaWx0ZXJQYW5lbE9iamVjdC5lbml0eU1vZGVcIiBhcHBlbmRUbz1cImJvZHlcIiBbb3B0aW9uc109XCJlbnRpdGllc1wiIFsobmdNb2RlbCldPVwicnVsZS5lbnRpdHlcIiBvcHRpb25MYWJlbD1cIm5hbWVcIiBvcHRpb25WYWx1ZT1cInZhbHVlXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25DaGFuZ2UoJGV2ZW50LCBydWxlKVwiPjwvcC1kcm9wZG93bj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5RmllbGQ9XCJsZXQgcnVsZTsgbGV0IGZpZWxkcz1maWVsZHM7IGxldCBvbkNoYW5nZT1vbkNoYW5nZTsgbGV0IGdldEZpZWxkcyA9IGdldEZpZWxkc1wiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInF1ZXJ5LWJ1aWxkZXItZmllbGQtd2lkdGhcIj5cclxuICAgICAgICAgICAgICA8cC1kcm9wZG93biBjbGFzcz1cIm1yLTMgdy1lZGl0LXNlbGVjdC1zbWFsbFwiIGFwcGVuZFRvPVwiYm9keVwiIFtvcHRpb25zXT1cImdldEZpZWxkcyhydWxlLmVudGl0eSlcIiBbKG5nTW9kZWwpXT1cInJ1bGUuZmllbGRcIiBvcHRpb25MYWJlbD1cIm5hbWVcIiBvcHRpb25WYWx1ZT1cInZhbHVlXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25DaGFuZ2UoJGV2ZW50LCBydWxlKVwiPjwvcC1kcm9wZG93bj5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqcXVlcnlPcGVyYXRvcj1cImxldCBydWxlOyBsZXQgb3BlcmF0b3JzPW9wZXJhdG9yczsgbGV0IG9uQ2hhbmdlPW9uQ2hhbmdlXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicXVlcnktYnVpbGRlci1vcGVyYXRvci13aWR0aFwiPlxyXG4gICAgICAgICAgICAgIDxwLWRyb3Bkb3duIGNsYXNzPVwibXItMyB3LWVkaXQtc2VsZWN0LXNtYWxsXCIgYXBwZW5kVG89XCJib2R5XCIgWyhuZ01vZGVsKV09XCJydWxlLm9wZXJhdG9yXCIgW29wdGlvbnNdPVwib3BlcmF0b3JzXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25DaGFuZ2UocnVsZSlcIj48L3AtZHJvcGRvd24+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5SW5wdXQ9XCJsZXQgcnVsZTsgdHlwZTogcWJEYXRhVHlwZUVudW0uQm9vbGVhbi50b1N0cmluZygpOyBsZXQgb25DaGFuZ2U9b25DaGFuZ2VcIj5cclxuICAgICAgICAgICAgPHctdG9nZ2xlLWJ1dHRvbiBjbGFzcz1cIm1yLTNcIiBzaXplPVwic21hbGxcIiBbKG5nTW9kZWwpXT1cInJ1bGUudmFsdWVcIiBvbkxhYmVsPVwiVHJ1ZVwiIG9mZkxhYmVsPVwiRmFsc2VcIiAobmdNb2RlbENoYW5nZSk9XCJvbkNoYW5nZSgpXCI+PC93LXRvZ2dsZS1idXR0b24+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpxdWVyeUlucHV0PVwibGV0IHJ1bGU7IHR5cGU6IHFiRGF0YVR5cGVFbnVtLkRhdGV0aW1lLnRvU3RyaW5nKCk7IGxldCBvbkNoYW5nZT1vbkNoYW5nZVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInF1ZXJ5LWJ1aWxkZXItaW5wdXQtd2lkdGhcIj5cclxuICAgICAgICAgICAgICA8dy1lZGl0LWNhbGVuZGFyIGNsYXNzPVwiZmllbGQtZ2FwXCIgYXBwZW5kVG89XCJib2R5XCIgc2l6ZT1cInNtYWxsXCIgW3Nob3dJY29uXT1cImZhbHNlXCIgWyhuZ01vZGVsKV09XCJydWxlLnZhbHVlXCIgKG9uQ2hhbmdlKT1cIm9uQ2hhbmdlKClcIiBbc2hvd1RpbWVdPVwidHJ1ZVwiIFtzaG93U2Vjb25kc109XCJ0cnVlXCIgW3BsYWNlaG9sZGVyXT1cInRyYW5zbGF0aW9uc09iamVjdC5maWVsZHNQbGFjZWhvbGRlcnMuZGF0ZXRpbWVcIiBbZGlzcGxheUlubGluZUJsb2NrXT1cInRydWVcIj48L3ctZWRpdC1jYWxlbmRhcj5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqcXVlcnlJbnB1dD1cImxldCBydWxlOyBsZXQgZmllbGQ9ZmllbGQ7IHR5cGU6IHFiRGF0YVR5cGVFbnVtLkRlY2ltYWwudG9TdHJpbmcoKTsgbGV0IG9uQ2hhbmdlPW9uQ2hhbmdlXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicXVlcnktYnVpbGRlci1pbnB1dC13aWR0aFwiPlxyXG4gICAgICAgICAgICAgIDxwLWlucHV0TnVtYmVyIGNsYXNzPVwibXItM1wiIFsobmdNb2RlbCldPVwicnVsZS52YWx1ZVwiIGlucHV0SWQ9XCJtaW5tYXhcIiBpbnB1dElkPVwibWlubWF4XCIgbW9kZT1cImRlY2ltYWxcIiBbbWluRnJhY3Rpb25EaWdpdHNdPVwiMlwiIFttYXhGcmFjdGlvbkRpZ2l0c109XCI1XCIgW21pbl09XCIwXCIgW21heF09XCIxMDBcIiAobmdNb2RlbENoYW5nZSk9XCJvbkNoYW5nZSgpXCIgW3BsYWNlaG9sZGVyXT1cInRyYW5zbGF0aW9uc09iamVjdC5maWVsZHNQbGFjZWhvbGRlcnMuZGVjaW1hbFwiPiA8L3AtaW5wdXROdW1iZXI+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5SW5wdXQ9XCJsZXQgcnVsZTsgbGV0IG9wdGlvbnM9b3B0aW9uczsgdHlwZTogcWJEYXRhVHlwZUVudW0uTGlzdC50b1N0cmluZygpOyBsZXQgb25DaGFuZ2U9b25DaGFuZ2VcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJxdWVyeS1idWlsZGVyLWlucHV0LXdpZHRoXCI+XHJcbiAgICAgICAgICAgICAgPHctbGlzdC1maWVsZCBbb3B0aW9uc109XCJvcHRpb25zXCIgWyhuZ01vZGVsKV09XCJydWxlLnZhbHVlXCIgW29wZXJhdG9yXT1cInJ1bGUub3BlcmF0b3JcIiAobmdNb2RlbENoYW5nZSk9XCJvbkNoYW5nZSgpXCIgW3BsYWNlaG9sZGVyXT1cInRyYW5zbGF0aW9uc09iamVjdC5maWVsZHNQbGFjZWhvbGRlcnMubGlzdFwiPjwvdy1saXN0LWZpZWxkPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpxdWVyeUlucHV0PVwibGV0IHJ1bGU7IGxldCBmaWVsZD1maWVsZDsgdHlwZTogcWJEYXRhVHlwZUVudW0uTnVtYmVyLnRvU3RyaW5nKCk7IGxldCBvbkNoYW5nZT1vbkNoYW5nZVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInF1ZXJ5LWJ1aWxkZXItaW5wdXQtd2lkdGhcIj5cclxuICAgICAgICAgICAgICA8cC1pbnB1dE51bWJlciBbdXNlR3JvdXBpbmddPVwiZmFsc2VcIiBpbnB1dFN0eWxlQ2xhc3M9XCJmbGV4IGZsZXgtMVwiIHN0eWxlQ2xhc3M9XCJmbGV4IGZsZXgtMVwiIGNsYXNzPVwiZmllbGQtZ2FwIHctZWRpdC1pbnB1dC1udW1iZXItc21hbGwgdy1lZGl0LWlucHV0LW51bWJlci1zbWFsbC1oZWlnaHRcIiBbKG5nTW9kZWwpXT1cInJ1bGUudmFsdWVcIiBpbnB1dElkPVwibWlubWF4XCIgaW5wdXRJZD1cIm1pbm1heFwiIFttaW5dPVwiMFwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlKClcIiBbcGxhY2Vob2xkZXJdPVwidHJhbnNsYXRpb25zT2JqZWN0LmZpZWxkc1BsYWNlaG9sZGVycy5udW1iZXJcIj4gPC9wLWlucHV0TnVtYmVyPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpxdWVyeUlucHV0PVwibGV0IHJ1bGU7IGxldCBmaWVsZD1maWVsZDsgdHlwZTogcWJEYXRhVHlwZUVudW0uVGV4dC50b1N0cmluZygpOyBsZXQgb25DaGFuZ2U9b25DaGFuZ2VcIj5cclxuICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwibXItMyBxdWVyeS1idWlsZGVyLWlucHV0LXdpZHRoIHctZWRpdC1pbnB1dC10ZXh0LXNtYWxsLWhlaWdodCB3YXBwLWlucHV0XCIgdHlwZT1cInRleHRcIiBwSW5wdXRUZXh0IFsobmdNb2RlbCldPVwicnVsZS52YWx1ZVwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlKClcIiBbcGxhY2Vob2xkZXJdPVwidHJhbnNsYXRpb25zT2JqZWN0LmZpZWxkc1BsYWNlaG9sZGVycy50ZXh0XCIvPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDwvcXVlcnktYnVpbGRlcj5cclxuXHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzQWR2YW5jZWRTZWFyY2ggJiYgZ3JvdXBlZFF1ZXJ5LnJ1bGVzLmxlbmd0aD09MFwiID5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJub1F1ZXJ5RGF0YVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gIDxuZy10ZW1wbGF0ZSAjbm9RdWVyeURhdGE+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGZsZXgtd3JhcCBjYXJkLWNvbnRhaW5lciBzdXJmYWNlLTUwIG1iLTNcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgdy1mdWxsIGgtNHJlbSB0ZXh0LWdyYXktOTAwIGJvcmRlci1yb3VuZCBtLTJcIj5cclxuICAgICAgICB7e3RyYW5zbGF0aW9uc09iamVjdC5ub1J1bGVzTGFiZWx9fVxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcbiJdfQ==