@smartbit4all/ng-client 3.2.1 → 3.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,52 +1,37 @@
1
- import { Component, Input, ViewChild, } from '@angular/core';
1
+ import { Component, Input, ViewChild, ViewContainerRef, } from '@angular/core';
2
2
  import { Subject, takeUntil } from 'rxjs';
3
3
  import { FilterExpressionFieldWidgetType } from '../../smart-filter/projects';
4
4
  import { SmartFormWidgetDirection } from '../../smart-form/api/model/smartFormWidgetDirection';
5
5
  import { SmartFormWidgetType } from '../../smart-form/projects';
6
+ import { SmartformComponent } from '../../smart-form/smartform.component';
6
7
  import { FilterExpressionBuilderUiModel } from '../api/model/filterExpressionBuilderUiModel';
7
8
  import { FilterExpressionBuilderApiActions } from '../filterExpressionBuilderApiActions';
8
9
  import * as i0 from "@angular/core";
9
10
  import * as i1 from "../../smart-form/services/smartform.layout-definition.service";
10
- import * as i2 from "../../smart-form/smartform.component";
11
+ import * as i2 from "../../component-factory-service/component-factory-service.service";
11
12
  import * as i3 from "../../view-context/smart-ui-action/ui-action-toolbar.component";
12
13
  import * as i4 from "./components/smart-filter-expression-items/smart-filter-expression-items.component";
13
14
  import * as i5 from "@angular/material/button";
14
15
  import * as i6 from "@angular/common";
15
16
  export class SmartFilterEditorContentComponent {
16
- constructor(layoutService) {
17
+ constructor(layoutService, cfService) {
17
18
  this.layoutService = layoutService;
19
+ this.cfService = cfService;
18
20
  this._destroy$ = new Subject();
19
21
  this.uiActionModels = [];
20
22
  this.expressionUiActionModels = [];
21
23
  this.type = FilterExpressionBuilderUiModel.TypeEnum;
22
24
  }
23
- ngAfterViewInit() {
24
- if (this.smartFilterChangeSubscription) {
25
- this.smartFilterChangeSubscription.unsubscribe();
26
- }
27
- this.smartFilterChangeSubscription = this.simpleFilterFormChild.onBlurSubject?.pipe(takeUntil(this._destroy$)).subscribe(() => {
28
- this.saveFilter();
29
- });
30
- if (this.smartFilterSophisticatedChangeSubscription) {
31
- this.smartFilterSophisticatedChangeSubscription.unsubscribe();
32
- }
33
- this.smartFilterSophisticatedChangeSubscription =
34
- this.simpleFilterFormChild.sophisticatedValueChange?.pipe(takeUntil(this._destroy$)).subscribe((change) => {
35
- if (change.kind === 'selection') {
36
- this.saveFilter();
37
- }
38
- });
39
- }
40
25
  ngOnInit() {
41
- this.service.load();
42
26
  this.service.modelChanged.pipe(takeUntil(this._destroy$)).subscribe(() => this.setUp());
27
+ this.service.load();
43
28
  }
44
29
  ngOnDestroy() {
45
30
  this._destroy$.next();
46
31
  this._destroy$.complete();
47
32
  }
48
33
  setupSimpleFilter() {
49
- if (this.simpleFilterForm) {
34
+ if (this.simpleFilterFormChild) {
50
35
  return;
51
36
  }
52
37
  let widgets = [];
@@ -88,9 +73,25 @@ export class SmartFilterEditorContentComponent {
88
73
  useOnBlurEvent: true,
89
74
  widgets,
90
75
  };
76
+ this.simpleFilterFormChild = this.cfService.createComponent(this.simpleFilterFormVcRef, SmartformComponent, new Map([['smartForm', this.simpleFilterForm]]));
77
+ if (this.smartFilterChangeSubscription) {
78
+ this.smartFilterChangeSubscription.unsubscribe();
79
+ }
80
+ this.smartFilterChangeSubscription = this.simpleFilterFormChild.instance.onBlurSubject?.pipe(takeUntil(this._destroy$)).subscribe(() => {
81
+ this.saveFilter();
82
+ });
83
+ if (this.smartFilterSophisticatedChangeSubscription) {
84
+ this.smartFilterSophisticatedChangeSubscription.unsubscribe();
85
+ }
86
+ this.smartFilterSophisticatedChangeSubscription =
87
+ this.simpleFilterFormChild.instance.sophisticatedValueChange?.pipe(takeUntil(this._destroy$)).subscribe((change) => {
88
+ if (change.kind === 'selection') {
89
+ this.saveFilter();
90
+ }
91
+ });
91
92
  }
92
93
  extractFilterFieldFromFormModel() {
93
- let simpleFilter = this.simpleFilterFormChild?.submitForm(false).componentModel.data;
94
+ let simpleFilter = this.simpleFilterFormChild?.instance.submitForm(false).componentModel.data;
94
95
  let result = [];
95
96
  Object.keys(simpleFilter).forEach((key) => {
96
97
  result.push(simpleFilter[key]);
@@ -150,10 +151,11 @@ export class SmartFilterEditorContentComponent {
150
151
  componentModel: { data: this.service.model?.selectedField },
151
152
  widgets: generatedWidgets,
152
153
  };
154
+ this.formChild = this.cfService.createComponent(this.formChildVcRef, SmartformComponent, new Map([['smartForm', this.smartForm]]));
153
155
  if (this.smartformChangeSubscription) {
154
156
  this.smartformChangeSubscription.unsubscribe();
155
157
  }
156
- this.smartformChangeSubscription = this.formChild?.onBlurSubject
158
+ this.smartformChangeSubscription = this.formChild?.instance.onBlurSubject
157
159
  ?.pipe(takeUntil(this._destroy$))
158
160
  .subscribe(() => {
159
161
  this.save();
@@ -161,16 +163,17 @@ export class SmartFilterEditorContentComponent {
161
163
  if (this.smartformSophisticatedChangeSubscription) {
162
164
  this.smartformSophisticatedChangeSubscription.unsubscribe();
163
165
  }
164
- this.smartformSophisticatedChangeSubscription = this.formChild?.sophisticatedValueChange
165
- ?.pipe(takeUntil(this._destroy$))
166
- .subscribe((change) => {
167
- if (change.key === 'expressionData.currentOperation') {
168
- this.save();
169
- }
170
- });
166
+ this.smartformSophisticatedChangeSubscription =
167
+ this.formChild?.instance.sophisticatedValueChange
168
+ ?.pipe(takeUntil(this._destroy$))
169
+ .subscribe((change) => {
170
+ if (change.key === 'expressionData.currentOperation') {
171
+ this.save();
172
+ }
173
+ });
171
174
  }
172
175
  save() {
173
- this.formChild?.submitForm(false);
176
+ this.formChild?.instance.submitForm(false);
174
177
  this.service.peformWidgetAction({
175
178
  code: 'UPDATE_FILTER_EXPRESSION',
176
179
  params: {
@@ -230,18 +233,18 @@ export class SmartFilterEditorContentComponent {
230
233
  return widget;
231
234
  }
232
235
  }
233
- SmartFilterEditorContentComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: SmartFilterEditorContentComponent, deps: [{ token: i1.SmartformLayoutDefinitionService }], target: i0.ɵɵFactoryTarget.Component });
234
- SmartFilterEditorContentComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: SmartFilterEditorContentComponent, selector: "smart-filter-expression-editor", inputs: { service: "service" }, viewQueries: [{ propertyName: "formChild", first: true, predicate: ["form"], descendants: true }, { propertyName: "simpleFilterFormChild", first: true, predicate: ["simpleFilterFromChild"], descendants: true }], ngImport: i0, template: "<div class=\"targetGroupContentContainer\">\r\n <h3>{{ service.model?.model?.label }}</h3>\r\n\r\n <div *ngIf=\"service.model?.type === type.Simple; then simpleFilter; else complexFilter\"></div>\r\n\r\n <ng-template #simpleFilter>\r\n <div class=\"expressionsContainer\">\r\n <smartform #simpleFilterFromChild [smartForm]=\"simpleFilterForm\"></smartform>\r\n </div>\r\n </ng-template>\r\n <ng-template #complexFilter>\r\n <div class=\"uiActionsBar\" *ngIf=\"!service.model?.readOnly\">\r\n <div class=\"uiActionsInsideOfBar\">\r\n <smart-ui-action-toolbar [uiActionModels]=\"uiActionModels\"></smart-ui-action-toolbar>\r\n </div>\r\n </div>\r\n <div\r\n *ngIf=\"\r\n service?.model?.model?.workplaceList?.filters?.length;\r\n then withParameters;\r\n else withoutParameters\r\n \"\r\n ></div>\r\n <ng-template #withoutParameters>\r\n <div class=\"withoutParametersContainer\">\r\n <span class=\"mat-body\"> M\u00E9g nincs megadva param\u00E9ter </span>\r\n </div>\r\n </ng-template>\r\n <ng-template #withParameters>\r\n <div class=\"withParametersContainer\">\r\n <div\r\n class=\"expressionsContainer\"\r\n *ngIf=\"service?.model?.model?.workplaceList?.filters?.length\"\r\n >\r\n <app-expression-items\r\n [items]=\"(service.model?.model?.workplaceList)!.filters\"\r\n ></app-expression-items>\r\n </div>\r\n <div class=\"expressionEditorContainer\">\r\n <smartform #form [smartForm]=\"smartForm\"></smartform>\r\n <div *ngIf=\"smartForm\">\r\n <button (click)=\"remove()\" mat-raised-button color=\"primary\">T\u00F6rl\u00E9s</button>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ng-template>\r\n</div>\r\n", styles: [".targetGroupContentContainer{padding:1.5rem;display:flex;flex-direction:column;gap:2.5rem;height:calc(100% - 3rem);overflow:auto;position:relative}.targetGroupContentContainer h3{margin:0;font-weight:600}.uiActionsBar{padding:1.5rem;border-radius:.25rem;background-color:var(--container-color)}.uiActionsBar,.uiActionsInsideOfBar{display:flex;flex-direction:row;gap:1rem}.uiActionsInsideOfBar{position:relative;left:-3rem}.section,.notSection{display:flex;flex-direction:row;gap:1rem}.section:before{content:\"\";border:1px solid #d9d9d9;align-self:stretch}.withoutParametersContainer{display:flex;flex-direction:column;padding:2rem;background-color:var(--container-color);border-radius:.25rem}.withoutParametersContainer .mat-body{font-weight:600;text-align:center}.withParametersContainer{display:flex;flex-direction:column;padding:1.5rem;background-color:var(--container-color);border-radius:.25rem;gap:.75rem}.expressionsContainer{display:flex;flex-direction:row;flex-wrap:wrap;gap:.75rem;margin-bottom:1px solid #cdcdcd}.expressionEditorContainer{display:flex;flex-direction:column;gap:.75rem}\n"], components: [{ type: i2.SmartformComponent, selector: "smartform", inputs: ["smartForm"] }, { type: i3.UiActionToolbarComponent, selector: "smart-ui-action-toolbar", inputs: ["uiActionModels", "uiActionDescriptorService"] }, { type: i4.SmartFilterExpressionItemsComponent, selector: "app-expression-items", inputs: ["items"] }, { type: i5.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
236
+ SmartFilterEditorContentComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: SmartFilterEditorContentComponent, deps: [{ token: i1.SmartformLayoutDefinitionService }, { token: i2.ComponentFactoryService }], target: i0.ɵɵFactoryTarget.Component });
237
+ SmartFilterEditorContentComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: SmartFilterEditorContentComponent, selector: "smart-filter-expression-editor", inputs: { service: "service" }, viewQueries: [{ propertyName: "formChildVcRef", first: true, predicate: ["form"], descendants: true, read: ViewContainerRef }, { propertyName: "simpleFilterFormVcRef", first: true, predicate: ["simpleFilterFromChild"], descendants: true, read: ViewContainerRef }], ngImport: i0, template: "<div class=\"targetGroupContentContainer\">\r\n <h3>{{ service.model?.model?.label }}</h3>\r\n\r\n <div *ngIf=\"service.model?.type === type.Simple; then simpleFilter; else complexFilter\"></div>\r\n\r\n <ng-template #simpleFilter>\r\n <div class=\"expressionsContainer\">\r\n <ng-template #simpleFilterFromChild></ng-template>\r\n </div>\r\n </ng-template>\r\n <ng-template #complexFilter>\r\n <div class=\"uiActionsBar\" *ngIf=\"!service.model?.readOnly\">\r\n <div class=\"uiActionsInsideOfBar\">\r\n <smart-ui-action-toolbar [uiActionModels]=\"uiActionModels\"></smart-ui-action-toolbar>\r\n </div>\r\n </div>\r\n <div\r\n *ngIf=\"\r\n service?.model?.model?.workplaceList?.filters?.length;\r\n then withParameters;\r\n else withoutParameters\r\n \"\r\n ></div>\r\n <ng-template #withoutParameters>\r\n <div class=\"withoutParametersContainer\">\r\n <span class=\"mat-body\"> M\u00E9g nincs megadva param\u00E9ter </span>\r\n </div>\r\n </ng-template>\r\n <ng-template #withParameters>\r\n <div class=\"withParametersContainer\">\r\n <div\r\n class=\"expressionsContainer\"\r\n *ngIf=\"service?.model?.model?.workplaceList?.filters?.length\"\r\n >\r\n <app-expression-items\r\n [items]=\"(service.model?.model?.workplaceList)!.filters\"\r\n ></app-expression-items>\r\n </div>\r\n <div class=\"expressionEditorContainer\">\r\n <ng-template #form></ng-template>\r\n <div *ngIf=\"smartForm\">\r\n <button (click)=\"remove()\" mat-raised-button color=\"primary\">T\u00F6rl\u00E9s</button>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ng-template>\r\n</div>\r\n", styles: [".targetGroupContentContainer{padding:1.5rem;display:flex;flex-direction:column;gap:2.5rem;height:calc(100% - 3rem);overflow:auto;position:relative}.targetGroupContentContainer h3{margin:0;font-weight:600}.uiActionsBar{padding:1.5rem;border-radius:.25rem;background-color:var(--container-color)}.uiActionsBar,.uiActionsInsideOfBar{display:flex;flex-direction:row;gap:1rem}.uiActionsInsideOfBar{position:relative;left:-3rem}.section,.notSection{display:flex;flex-direction:row;gap:1rem}.section:before{content:\"\";border:1px solid #d9d9d9;align-self:stretch}.withoutParametersContainer{display:flex;flex-direction:column;padding:2rem;background-color:var(--container-color);border-radius:.25rem}.withoutParametersContainer .mat-body{font-weight:600;text-align:center}.withParametersContainer{display:flex;flex-direction:column;padding:1.5rem;background-color:var(--container-color);border-radius:.25rem;gap:.75rem}.expressionsContainer{display:flex;flex-direction:row;flex-wrap:wrap;gap:.75rem;margin-bottom:1px solid #cdcdcd}.expressionEditorContainer{display:flex;flex-direction:column;gap:.75rem}\n"], components: [{ type: i3.UiActionToolbarComponent, selector: "smart-ui-action-toolbar", inputs: ["uiActionModels", "uiActionDescriptorService"] }, { type: i4.SmartFilterExpressionItemsComponent, selector: "app-expression-items", inputs: ["items"] }, { type: i5.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
235
238
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: SmartFilterEditorContentComponent, decorators: [{
236
239
  type: Component,
237
- args: [{ selector: 'smart-filter-expression-editor', template: "<div class=\"targetGroupContentContainer\">\r\n <h3>{{ service.model?.model?.label }}</h3>\r\n\r\n <div *ngIf=\"service.model?.type === type.Simple; then simpleFilter; else complexFilter\"></div>\r\n\r\n <ng-template #simpleFilter>\r\n <div class=\"expressionsContainer\">\r\n <smartform #simpleFilterFromChild [smartForm]=\"simpleFilterForm\"></smartform>\r\n </div>\r\n </ng-template>\r\n <ng-template #complexFilter>\r\n <div class=\"uiActionsBar\" *ngIf=\"!service.model?.readOnly\">\r\n <div class=\"uiActionsInsideOfBar\">\r\n <smart-ui-action-toolbar [uiActionModels]=\"uiActionModels\"></smart-ui-action-toolbar>\r\n </div>\r\n </div>\r\n <div\r\n *ngIf=\"\r\n service?.model?.model?.workplaceList?.filters?.length;\r\n then withParameters;\r\n else withoutParameters\r\n \"\r\n ></div>\r\n <ng-template #withoutParameters>\r\n <div class=\"withoutParametersContainer\">\r\n <span class=\"mat-body\"> M\u00E9g nincs megadva param\u00E9ter </span>\r\n </div>\r\n </ng-template>\r\n <ng-template #withParameters>\r\n <div class=\"withParametersContainer\">\r\n <div\r\n class=\"expressionsContainer\"\r\n *ngIf=\"service?.model?.model?.workplaceList?.filters?.length\"\r\n >\r\n <app-expression-items\r\n [items]=\"(service.model?.model?.workplaceList)!.filters\"\r\n ></app-expression-items>\r\n </div>\r\n <div class=\"expressionEditorContainer\">\r\n <smartform #form [smartForm]=\"smartForm\"></smartform>\r\n <div *ngIf=\"smartForm\">\r\n <button (click)=\"remove()\" mat-raised-button color=\"primary\">T\u00F6rl\u00E9s</button>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ng-template>\r\n</div>\r\n", styles: [".targetGroupContentContainer{padding:1.5rem;display:flex;flex-direction:column;gap:2.5rem;height:calc(100% - 3rem);overflow:auto;position:relative}.targetGroupContentContainer h3{margin:0;font-weight:600}.uiActionsBar{padding:1.5rem;border-radius:.25rem;background-color:var(--container-color)}.uiActionsBar,.uiActionsInsideOfBar{display:flex;flex-direction:row;gap:1rem}.uiActionsInsideOfBar{position:relative;left:-3rem}.section,.notSection{display:flex;flex-direction:row;gap:1rem}.section:before{content:\"\";border:1px solid #d9d9d9;align-self:stretch}.withoutParametersContainer{display:flex;flex-direction:column;padding:2rem;background-color:var(--container-color);border-radius:.25rem}.withoutParametersContainer .mat-body{font-weight:600;text-align:center}.withParametersContainer{display:flex;flex-direction:column;padding:1.5rem;background-color:var(--container-color);border-radius:.25rem;gap:.75rem}.expressionsContainer{display:flex;flex-direction:row;flex-wrap:wrap;gap:.75rem;margin-bottom:1px solid #cdcdcd}.expressionEditorContainer{display:flex;flex-direction:column;gap:.75rem}\n"] }]
238
- }], ctorParameters: function () { return [{ type: i1.SmartformLayoutDefinitionService }]; }, propDecorators: { service: [{
240
+ args: [{ selector: 'smart-filter-expression-editor', template: "<div class=\"targetGroupContentContainer\">\r\n <h3>{{ service.model?.model?.label }}</h3>\r\n\r\n <div *ngIf=\"service.model?.type === type.Simple; then simpleFilter; else complexFilter\"></div>\r\n\r\n <ng-template #simpleFilter>\r\n <div class=\"expressionsContainer\">\r\n <ng-template #simpleFilterFromChild></ng-template>\r\n </div>\r\n </ng-template>\r\n <ng-template #complexFilter>\r\n <div class=\"uiActionsBar\" *ngIf=\"!service.model?.readOnly\">\r\n <div class=\"uiActionsInsideOfBar\">\r\n <smart-ui-action-toolbar [uiActionModels]=\"uiActionModels\"></smart-ui-action-toolbar>\r\n </div>\r\n </div>\r\n <div\r\n *ngIf=\"\r\n service?.model?.model?.workplaceList?.filters?.length;\r\n then withParameters;\r\n else withoutParameters\r\n \"\r\n ></div>\r\n <ng-template #withoutParameters>\r\n <div class=\"withoutParametersContainer\">\r\n <span class=\"mat-body\"> M\u00E9g nincs megadva param\u00E9ter </span>\r\n </div>\r\n </ng-template>\r\n <ng-template #withParameters>\r\n <div class=\"withParametersContainer\">\r\n <div\r\n class=\"expressionsContainer\"\r\n *ngIf=\"service?.model?.model?.workplaceList?.filters?.length\"\r\n >\r\n <app-expression-items\r\n [items]=\"(service.model?.model?.workplaceList)!.filters\"\r\n ></app-expression-items>\r\n </div>\r\n <div class=\"expressionEditorContainer\">\r\n <ng-template #form></ng-template>\r\n <div *ngIf=\"smartForm\">\r\n <button (click)=\"remove()\" mat-raised-button color=\"primary\">T\u00F6rl\u00E9s</button>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ng-template>\r\n</div>\r\n", styles: [".targetGroupContentContainer{padding:1.5rem;display:flex;flex-direction:column;gap:2.5rem;height:calc(100% - 3rem);overflow:auto;position:relative}.targetGroupContentContainer h3{margin:0;font-weight:600}.uiActionsBar{padding:1.5rem;border-radius:.25rem;background-color:var(--container-color)}.uiActionsBar,.uiActionsInsideOfBar{display:flex;flex-direction:row;gap:1rem}.uiActionsInsideOfBar{position:relative;left:-3rem}.section,.notSection{display:flex;flex-direction:row;gap:1rem}.section:before{content:\"\";border:1px solid #d9d9d9;align-self:stretch}.withoutParametersContainer{display:flex;flex-direction:column;padding:2rem;background-color:var(--container-color);border-radius:.25rem}.withoutParametersContainer .mat-body{font-weight:600;text-align:center}.withParametersContainer{display:flex;flex-direction:column;padding:1.5rem;background-color:var(--container-color);border-radius:.25rem;gap:.75rem}.expressionsContainer{display:flex;flex-direction:row;flex-wrap:wrap;gap:.75rem;margin-bottom:1px solid #cdcdcd}.expressionEditorContainer{display:flex;flex-direction:column;gap:.75rem}\n"] }]
241
+ }], ctorParameters: function () { return [{ type: i1.SmartformLayoutDefinitionService }, { type: i2.ComponentFactoryService }]; }, propDecorators: { service: [{
239
242
  type: Input
240
- }], formChild: [{
243
+ }], formChildVcRef: [{
241
244
  type: ViewChild,
242
- args: ['form']
243
- }], simpleFilterFormChild: [{
245
+ args: ['form', { read: ViewContainerRef }]
246
+ }], simpleFilterFormVcRef: [{
244
247
  type: ViewChild,
245
- args: ['simpleFilterFromChild']
248
+ args: ['simpleFilterFromChild', { read: ViewContainerRef }]
246
249
  }] } });
247
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtZmlsdGVyLWVkaXRvci1jb250ZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LW5nLWNsaWVudC9zcmMvbGliL3NtYXJ0LWZpbHRlci1lZGl0b3Ivc21hcnQtZmlsdGVyLWVkaXRvci1jb250ZW50L3NtYXJ0LWZpbHRlci1lZGl0b3ItY29udGVudC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zbWFydC1maWx0ZXItZWRpdG9yL3NtYXJ0LWZpbHRlci1lZGl0b3ItY29udGVudC9zbWFydC1maWx0ZXItZWRpdG9yLWNvbnRlbnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLFNBQVMsRUFDVCxLQUFLLEVBR0wsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxPQUFPLEVBQXNCLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5RCxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM5RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxxREFBcUQsQ0FBQztBQUMvRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQU9oRSxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUU3RixPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQzs7Ozs7Ozs7QUFRekYsTUFBTSxPQUFPLGlDQUFpQztJQWU1QyxZQUFvQixhQUErQztRQUEvQyxrQkFBYSxHQUFiLGFBQWEsQ0FBa0M7UUFkM0QsY0FBUyxHQUFrQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBR2pELG1CQUFjLEdBQW9CLEVBQUUsQ0FBQztRQUNyQyw2QkFBd0IsR0FBb0IsRUFBRSxDQUFDO1FBUS9DLFNBQUksR0FBRyw4QkFBOEIsQ0FBQyxRQUFRLENBQUM7SUFFdUIsQ0FBQztJQUV2RSxlQUFlO1FBQ2IsSUFBSSxJQUFJLENBQUMsNkJBQTZCLEVBQUU7WUFDdEMsSUFBSSxDQUFDLDZCQUE2QixDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQ2xEO1FBRUQsSUFBSSxDQUFDLDZCQUE2QixHQUFHLElBQUksQ0FBQyxxQkFBc0IsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUNsRixTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUMxQixDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDZixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDcEIsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLElBQUksQ0FBQywwQ0FBMEMsRUFBRTtZQUNuRCxJQUFJLENBQUMsMENBQTBDLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDL0Q7UUFFRCxJQUFJLENBQUMsMENBQTBDO1lBQzdDLElBQUksQ0FBQyxxQkFBc0IsQ0FBQyx3QkFBd0IsRUFBRSxJQUFJLENBQ3hELFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQzFCLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7Z0JBQ3JCLElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUU7b0JBQy9CLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztpQkFDbkI7WUFDSCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFPRCxRQUFRO1FBQ04sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUMxRixDQUFDO0lBQ0QsV0FBVztRQUNULElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDekIsT0FBTztTQUNSO1FBRUQsSUFBSSxPQUFPLEdBQTJCLEVBQUUsQ0FBQztRQUV6QyxJQUFJLEdBQXVCLENBQUM7UUFFNUIsSUFBSSxLQUFLLEdBQTJCLEVBQUUsQ0FBQztRQUV2QyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQ3ZELENBQUMscUJBQTRDLEVBQUUsS0FBYSxFQUFFLEVBQUU7WUFDOUQsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLHFCQUFxQixDQUFDO1lBRXJDLElBQUkscUJBQXFCLENBQUMsVUFBVSxLQUFLLGlCQUFpQixFQUFFO2dCQUMxRCxHQUFHLEdBQUcsS0FBSyxHQUFHLHlDQUF5QyxDQUFDO2dCQUN4RCxPQUFPLENBQUMsSUFBSSxDQUNWLElBQUksQ0FBQyxtQkFBbUIsQ0FDdEIsR0FBRyxFQUNILHFCQUFxQixDQUFDLE1BQU8sRUFDN0IscUJBQXFCLENBQUMsVUFBVSxJQUFJLCtCQUErQixDQUFDLFNBQVMsRUFDN0UscUJBQXFCLENBQUMsY0FBeUIsQ0FDaEQsQ0FDRixDQUFDO2dCQUNGLE9BQU87YUFDUjtZQUVELElBQUkscUJBQXFCLENBQUMsY0FBYyxFQUFFLGdCQUFnQixLQUFLLFNBQVMsRUFBRTtnQkFDeEUsR0FBRyxHQUFHLEtBQUssR0FBRyx3Q0FBd0MsQ0FBQztnQkFDdkQsT0FBTyxDQUFDLElBQUksQ0FDVixJQUFJLENBQUMsbUJBQW1CLENBQ3RCLEdBQUcsRUFDSCxxQkFBcUIsQ0FBQyxNQUFPLEVBQzdCLHFCQUFxQixDQUFDLFVBQVUsSUFBSSwrQkFBK0IsQ0FBQyxTQUFTLEVBQzdFLHFCQUFxQixDQUFDLGNBQXlCLENBQ2hELENBQ0YsQ0FBQztnQkFFRixHQUFHLEdBQUcsS0FBSyxHQUFHLHdDQUF3QyxDQUFDO2dCQUN2RCxPQUFPLENBQUMsSUFBSSxDQUNWLElBQUksQ0FBQyxtQkFBbUIsQ0FDdEIsR0FBRyxFQUNILHFCQUFxQixDQUFDLE1BQU8sRUFDN0IscUJBQXFCLENBQUMsVUFBVSxJQUFJLCtCQUErQixDQUFDLFNBQVMsRUFDN0UscUJBQXFCLENBQUMsY0FBeUIsQ0FDaEQsQ0FDRixDQUFDO2dCQUNGLE9BQU87YUFDUjtZQUVELElBQUkscUJBQXFCLENBQUMsY0FBYyxFQUFFLFFBQVEsRUFBRTtnQkFDbEQsSUFBSSxHQUFHLEtBQUssS0FBSyxHQUFHLHlDQUF5QyxFQUFFO29CQUM3RCxHQUFHLEdBQUcsS0FBSyxHQUFHLHdDQUF3QyxDQUFDO2lCQUN4RDtnQkFDRCxPQUFPLENBQUMsSUFBSSxDQUNWLElBQUksQ0FBQyxtQkFBbUIsQ0FDdEIsR0FBRyxFQUNILHFCQUFxQixDQUFDLE1BQU8sRUFDN0IscUJBQXFCLENBQUMsVUFBVSxJQUFJLCtCQUErQixDQUFDLFNBQVMsRUFDN0UscUJBQXFCLENBQUMsY0FBeUIsQ0FDaEQsQ0FDRixDQUFDO2dCQUNGLE9BQU87YUFDUjtZQUNELElBQUkscUJBQXFCLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRTtnQkFDbkQsSUFBSSxHQUFHLEtBQUssS0FBSyxHQUFHLGlCQUFpQixFQUFFO29CQUNyQyxHQUFHLEdBQUcsS0FBSyxHQUFHLHdDQUF3QyxDQUFDO2lCQUN4RDtnQkFDRCxPQUFPLENBQUMsSUFBSSxDQUNWLElBQUksQ0FBQyxtQkFBbUIsQ0FDdEIsR0FBRyxFQUNILHFCQUFxQixDQUFDLE1BQU8sRUFDN0IscUJBQXFCLENBQUMsVUFBVSxJQUFJLCtCQUErQixDQUFDLFNBQVMsRUFDN0UscUJBQXFCLENBQUMsY0FBeUIsQ0FDaEQsQ0FDRixDQUFDO2dCQUNGLE9BQU87YUFDUjtRQUNILENBQUMsQ0FDRixDQUFDO1FBRUYsSUFBSSxDQUFDLGdCQUFnQixHQUFHO1lBQ3RCLFNBQVMsRUFBRSx3QkFBd0IsQ0FBQyxHQUFHO1lBQ3ZDLGNBQWMsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUU7WUFDL0IscUJBQXFCLEVBQUUsSUFBSTtZQUMzQixjQUFjLEVBQUUsSUFBSTtZQUNwQixPQUFPO1NBQ1IsQ0FBQztJQUNKLENBQUM7SUFFTywrQkFBK0I7UUFDckMsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDO1FBQ3JGLElBQUksTUFBTSxHQUE0QixFQUFFLENBQUM7UUFFekMsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFXLEVBQUUsRUFBRTtZQUNoRCxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFNLENBQUMsS0FBTSxDQUFDLGFBQWMsQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO0lBQzdELENBQUM7SUFFRCxLQUFLO1FBQ0gsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDakQsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7U0FDMUI7YUFBTTtZQUNMLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBRS9CLElBQUksSUFBSSxDQUFDLE9BQVEsQ0FBQyxLQUFNLENBQUMsbUJBQW1CLEVBQUU7Z0JBQzVDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQzthQUN0QjtpQkFBTTtnQkFDTCxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQzthQUM1QjtTQUNGO0lBQ0gsQ0FBQztJQUVELHVCQUF1QjtRQUNyQixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLGVBQWUsRUFBRTtZQUN2QyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFnQixFQUFFLEVBQUU7Z0JBQ2hGLE9BQU87b0JBQ0wsWUFBWSxFQUFFLElBQUksQ0FBQyxPQUFPO29CQUMxQixRQUFRLEVBQUUsTUFBTTtpQkFDakIsQ0FBQztZQUNKLENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLG1CQUFtQixFQUFFLGVBQWUsRUFBRTtZQUM1RCxJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsbUJBQW1CLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FDekYsQ0FBQyxRQUFrQixFQUFFLEVBQUU7Z0JBQ3JCLElBQUksY0FBYyxHQUFhLEVBQUUsQ0FBQztnQkFDbEMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFXLEVBQUUsRUFBRTtvQkFDdkMsY0FBc0IsQ0FBQyxHQUFHLENBQUMsR0FBSSxRQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUN4RCxDQUFDLENBQUMsQ0FBQztnQkFDSCxjQUFjLENBQUMsTUFBTSxHQUFHO29CQUN0QixLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsYUFBYTtpQkFDekMsQ0FBQztnQkFDRixPQUFPO29CQUNMLFlBQVksRUFBRSxJQUFJLENBQUMsT0FBTztvQkFDMUIsUUFBUSxFQUFFLGNBQWM7aUJBQ3pCLENBQUM7WUFDSixDQUFDLENBQ0YsQ0FBQztTQUNIO0lBQ0gsQ0FBQztJQUVELGFBQWE7UUFDWCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbEIsT0FBTztTQUNSO1FBRUQsSUFBSSxnQkFBZ0IsR0FBMkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUM7WUFDdkUsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsU0FBUyxFQUFFLE9BQU87U0FDL0UsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFNBQVMsR0FBRztZQUNmLFNBQVMsRUFBRSx3QkFBd0IsQ0FBQyxHQUFHO1lBQ3ZDLGNBQWMsRUFBRSxJQUFJO1lBQ3BCLHFCQUFxQixFQUFFLElBQUk7WUFDM0IsY0FBYyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLGFBQWEsRUFBRTtZQUMzRCxPQUFPLEVBQUUsZ0JBQWdCO1NBQzFCLENBQUM7UUFFRixJQUFJLElBQUksQ0FBQywyQkFBMkIsRUFBRTtZQUNwQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDaEQ7UUFFRCxJQUFJLENBQUMsMkJBQTJCLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxhQUFhO1lBQzlELEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDaEMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNkLENBQUMsQ0FBQyxDQUFDO1FBRUwsSUFBSSxJQUFJLENBQUMsd0NBQXdDLEVBQUU7WUFDakQsSUFBSSxDQUFDLHdDQUF3QyxDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQzdEO1FBRUQsSUFBSSxDQUFDLHdDQUF3QyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsd0JBQXdCO1lBQ3RGLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDaEMsU0FBUyxDQUFDLENBQUMsTUFBZ0MsRUFBRSxFQUFFO1lBQzlDLElBQUksTUFBTSxDQUFDLEdBQUcsS0FBSyxpQ0FBaUMsRUFBRTtnQkFDcEQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO2FBQ2I7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxJQUFJO1FBQ0YsSUFBSSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQztZQUM5QixJQUFJLEVBQUUsMEJBQTBCO1lBQ2hDLE1BQU0sRUFBRTtnQkFDTixLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsYUFBYTthQUN6QztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxNQUFNO1FBQ0osSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQztZQUM5QixJQUFJLEVBQUUsMEJBQTBCO1lBQ2hDLE1BQU0sRUFBRTtnQkFDTixLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsYUFBYTthQUN6QztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCx5QkFBeUIsQ0FBQyxlQUFnRDtRQUN4RSxvR0FBb0c7UUFDcEcsYUFBYTtRQUNiLGtDQUFrQztRQUNsQyxnQkFBZ0I7UUFDaEIsT0FBTztRQUNQLE1BQU07UUFDTixPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRCxLQUFLLENBQUMsVUFBVTtRQUNkLElBQUksQ0FBQywrQkFBK0IsRUFBRSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUM7WUFDbEMsSUFBSSxFQUFFLGlDQUFpQyxDQUFDLDBCQUEwQjtZQUNsRSxNQUFNLEVBQUU7Z0JBQ04sS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBTTthQUMzQjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxtQkFBbUIsQ0FDekIsR0FBVyxFQUNYLEtBQWEsRUFDYixVQUEyQyxFQUMzQyxjQUF1QjtRQUV2QixJQUFJLElBQUksR0FBUSxVQUFVLENBQUM7UUFFM0IsSUFBSSxJQUFJLEtBQUssK0JBQStCLENBQUMsSUFBSSxFQUFFO1lBQ2pELElBQUksR0FBRyxtQkFBbUIsQ0FBQyxXQUFXLENBQUM7U0FDeEM7YUFBTSxJQUFJLElBQUksS0FBSywrQkFBK0IsQ0FBQyxRQUFRLEVBQUU7WUFDNUQsSUFBSSxHQUFHLG1CQUFtQixDQUFDLGdCQUFnQixDQUFDO1NBQzdDO1FBRUQsSUFBSSxNQUFNLEdBQXlCO1lBQ2pDLEdBQUc7WUFDSCxLQUFLO1lBQ0wsSUFBSTtZQUNKLEtBQUssRUFBRSxFQUFFO1lBQ1QsU0FBUyxFQUFFLElBQUk7WUFDZixTQUFTLEVBQUUsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQVksRUFBRSxFQUFFO2dCQUM3QyxPQUFPO29CQUNMLEdBQUcsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSztvQkFDcEQsS0FBSyxFQUFFLEtBQUssQ0FBQyxZQUFZO29CQUN6QixJQUFJLEVBQUUsbUJBQW1CLENBQUMsSUFBSTtvQkFDOUIsS0FBSyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJO2lCQUN0RCxDQUFDO1lBQ0osQ0FBQyxDQUFDO1NBQ0gsQ0FBQztRQUVGLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7OzhIQXRUVSxpQ0FBaUM7a0hBQWpDLGlDQUFpQywwVEM5QjlDLHUwREFnREE7MkZEbEJhLGlDQUFpQztrQkFMN0MsU0FBUzsrQkFDRSxnQ0FBZ0M7dUhBTWpDLE9BQU87c0JBQWYsS0FBSztnQkFLYSxTQUFTO3NCQUEzQixTQUFTO3VCQUFDLE1BQU07Z0JBR21CLHFCQUFxQjtzQkFBeEQsU0FBUzt1QkFBQyx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyVmlld0NoZWNrZWQsXHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBDb21wb25lbnQsXHJcbiAgSW5wdXQsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBWaWV3Q2hpbGQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIHRha2UsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBGaWx0ZXJFeHByZXNzaW9uRmllbGRXaWRnZXRUeXBlIH0gZnJvbSAnLi4vLi4vc21hcnQtZmlsdGVyL3Byb2plY3RzJztcclxuaW1wb3J0IHsgU21hcnRGb3JtV2lkZ2V0RGlyZWN0aW9uIH0gZnJvbSAnLi4vLi4vc21hcnQtZm9ybS9hcGkvbW9kZWwvc21hcnRGb3JtV2lkZ2V0RGlyZWN0aW9uJztcclxuaW1wb3J0IHsgU21hcnRGb3JtV2lkZ2V0VHlwZSB9IGZyb20gJy4uLy4uL3NtYXJ0LWZvcm0vcHJvamVjdHMnO1xyXG5pbXBvcnQgeyBTbWFydGZvcm1MYXlvdXREZWZpbml0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NtYXJ0LWZvcm0vc2VydmljZXMvc21hcnRmb3JtLmxheW91dC1kZWZpbml0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTbWFydGZvcm1Db21wb25lbnQgfSBmcm9tICcuLi8uLi9zbWFydC1mb3JtL3NtYXJ0Zm9ybS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTbWFydEZvcm1XaWRnZXQgfSBmcm9tICcuLi8uLi9zbWFydC1mb3JtL3NtYXJ0Zm9ybS5mb3JtLW1vZGVsJztcclxuaW1wb3J0IHsgU21hcnRGb3JtLCBTb3BoaXN0aWNhdGVkVmFsdWVDaGFuZ2UsIFZhbHVlIH0gZnJvbSAnLi4vLi4vc21hcnQtZm9ybS9zbWFydGZvcm0ubW9kZWwnO1xyXG5pbXBvcnQgeyBVaUFjdGlvbiB9IGZyb20gJy4uLy4uL3ZpZXctY29udGV4dC9hcGkvbW9kZWwvdWlBY3Rpb24nO1xyXG5pbXBvcnQgeyBVaUFjdGlvbk1vZGVsIH0gZnJvbSAnLi4vLi4vdmlldy1jb250ZXh0L3NtYXJ0LXVpLWFjdGlvbi91aS1hY3Rpb24ubW9kZWwnO1xyXG5pbXBvcnQgeyBGaWx0ZXJFeHByZXNzaW9uQnVpbGRlclVpTW9kZWwgfSBmcm9tICcuLi9hcGkvbW9kZWwvZmlsdGVyRXhwcmVzc2lvbkJ1aWxkZXJVaU1vZGVsJztcclxuaW1wb3J0IHsgRmlsdGVyRXhwcmVzc2lvbkZpZWxkIH0gZnJvbSAnLi4vYXBpL21vZGVsL2ZpbHRlckV4cHJlc3Npb25GaWVsZCc7XHJcbmltcG9ydCB7IEZpbHRlckV4cHJlc3Npb25CdWlsZGVyQXBpQWN0aW9ucyB9IGZyb20gJy4uL2ZpbHRlckV4cHJlc3Npb25CdWlsZGVyQXBpQWN0aW9ucyc7XHJcbmltcG9ydCB7IElTbWFydEZpbHRlckVkaXRvclNlcnZpY2UgfSBmcm9tICcuLi9zbWFydC1maWx0ZXItZWRpdG9yLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzbWFydC1maWx0ZXItZXhwcmVzc2lvbi1lZGl0b3InLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zbWFydC1maWx0ZXItZWRpdG9yLWNvbnRlbnQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3NtYXJ0LWZpbHRlci1lZGl0b3ItY29udGVudC5jb21wb25lbnQuY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTbWFydEZpbHRlckVkaXRvckNvbnRlbnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgcHJpdmF0ZSBfZGVzdHJveSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xyXG4gIEBJbnB1dCgpIHNlcnZpY2UhOiBJU21hcnRGaWx0ZXJFZGl0b3JTZXJ2aWNlO1xyXG5cclxuICB1aUFjdGlvbk1vZGVsczogVWlBY3Rpb25Nb2RlbFtdID0gW107XHJcbiAgZXhwcmVzc2lvblVpQWN0aW9uTW9kZWxzOiBVaUFjdGlvbk1vZGVsW10gPSBbXTtcclxuXHJcbiAgQFZpZXdDaGlsZCgnZm9ybScpIGZvcm1DaGlsZD86IFNtYXJ0Zm9ybUNvbXBvbmVudDtcclxuICBzbWFydEZvcm0/OiBTbWFydEZvcm07XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3NpbXBsZUZpbHRlckZyb21DaGlsZCcpIHNpbXBsZUZpbHRlckZvcm1DaGlsZD86IFNtYXJ0Zm9ybUNvbXBvbmVudDtcclxuICBzaW1wbGVGaWx0ZXJGb3JtPzogU21hcnRGb3JtO1xyXG5cclxuICB0eXBlID0gRmlsdGVyRXhwcmVzc2lvbkJ1aWxkZXJVaU1vZGVsLlR5cGVFbnVtO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGxheW91dFNlcnZpY2U6IFNtYXJ0Zm9ybUxheW91dERlZmluaXRpb25TZXJ2aWNlKSB7fVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zbWFydEZpbHRlckNoYW5nZVN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLnNtYXJ0RmlsdGVyQ2hhbmdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zbWFydEZpbHRlckNoYW5nZVN1YnNjcmlwdGlvbiA9IHRoaXMuc2ltcGxlRmlsdGVyRm9ybUNoaWxkIS5vbkJsdXJTdWJqZWN0Py5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpXHJcbiAgICApLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMuc2F2ZUZpbHRlcigpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMuc21hcnRGaWx0ZXJTb3BoaXN0aWNhdGVkQ2hhbmdlU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMuc21hcnRGaWx0ZXJTb3BoaXN0aWNhdGVkQ2hhbmdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zbWFydEZpbHRlclNvcGhpc3RpY2F0ZWRDaGFuZ2VTdWJzY3JpcHRpb24gPVxyXG4gICAgICB0aGlzLnNpbXBsZUZpbHRlckZvcm1DaGlsZCEuc29waGlzdGljYXRlZFZhbHVlQ2hhbmdlPy5waXBlKFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JClcclxuICAgICAgKS5zdWJzY3JpYmUoKGNoYW5nZSkgPT4ge1xyXG4gICAgICAgIGlmIChjaGFuZ2Uua2luZCA9PT0gJ3NlbGVjdGlvbicpIHtcclxuICAgICAgICAgIHRoaXMuc2F2ZUZpbHRlcigpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBzbWFydEZpbHRlckNoYW5nZVN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcclxuICBzbWFydEZpbHRlclNvcGhpc3RpY2F0ZWRDaGFuZ2VTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XHJcbiAgc21hcnRmb3JtQ2hhbmdlU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xyXG4gIHNtYXJ0Zm9ybVNvcGhpc3RpY2F0ZWRDaGFuZ2VTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZXJ2aWNlLmxvYWQoKTtcclxuICAgIHRoaXMuc2VydmljZS5tb2RlbENoYW5nZWQucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5zZXRVcCgpKTtcclxuICB9XHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLl9kZXN0cm95JC5uZXh0KCk7XHJcbiAgICB0aGlzLl9kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgc2V0dXBTaW1wbGVGaWx0ZXIoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zaW1wbGVGaWx0ZXJGb3JtKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgd2lkZ2V0czogU21hcnRGb3JtV2lkZ2V0PGFueT5bXSA9IFtdO1xyXG5cclxuICAgIGxldCBrZXk6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuXHJcbiAgICBsZXQgbW9kZWw6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcclxuXHJcbiAgICB0aGlzLnNlcnZpY2UubW9kZWw/Lm1vZGVsPy53b3JrcGxhY2VMaXN0Py5maWx0ZXJzLmZvckVhY2goXHJcbiAgICAgIChmaWx0ZXJFeHByZXNzaW9uRmllbGQ6IEZpbHRlckV4cHJlc3Npb25GaWVsZCwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgIG1vZGVsW2luZGV4XSA9IGZpbHRlckV4cHJlc3Npb25GaWVsZDtcclxuXHJcbiAgICAgICAgaWYgKGZpbHRlckV4cHJlc3Npb25GaWVsZC53aWRnZXRUeXBlID09PSAnU0VMRUNUX01VTFRJUExFJykge1xyXG4gICAgICAgICAga2V5ID0gaW5kZXggKyAnLmV4cHJlc3Npb25EYXRhLm9wZXJhbmQyLnNlbGVjdGVkVmFsdWVzJztcclxuICAgICAgICAgIHdpZGdldHMucHVzaChcclxuICAgICAgICAgICAgdGhpcy5jb25zdHJ1Y3RGb3JtV2lkZ2V0KFxyXG4gICAgICAgICAgICAgIGtleSxcclxuICAgICAgICAgICAgICBmaWx0ZXJFeHByZXNzaW9uRmllbGQubGFiZWwyISxcclxuICAgICAgICAgICAgICBmaWx0ZXJFeHByZXNzaW9uRmllbGQud2lkZ2V0VHlwZSA/PyBGaWx0ZXJFeHByZXNzaW9uRmllbGRXaWRnZXRUeXBlLlRleHRGaWVsZCxcclxuICAgICAgICAgICAgICBmaWx0ZXJFeHByZXNzaW9uRmllbGQucG9zc2libGVWYWx1ZXMgYXMgVmFsdWVbXVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGZpbHRlckV4cHJlc3Npb25GaWVsZC5leHByZXNzaW9uRGF0YT8uY3VycmVudE9wZXJhdGlvbiA9PT0gJ0JFVFdFRU4nKSB7XHJcbiAgICAgICAgICBrZXkgPSBpbmRleCArICcuZXhwcmVzc2lvbkRhdGEub3BlcmFuZDIudmFsdWVBc1N0cmluZyc7XHJcbiAgICAgICAgICB3aWRnZXRzLnB1c2goXHJcbiAgICAgICAgICAgIHRoaXMuY29uc3RydWN0Rm9ybVdpZGdldChcclxuICAgICAgICAgICAgICBrZXksXHJcbiAgICAgICAgICAgICAgZmlsdGVyRXhwcmVzc2lvbkZpZWxkLmxhYmVsMiEsXHJcbiAgICAgICAgICAgICAgZmlsdGVyRXhwcmVzc2lvbkZpZWxkLndpZGdldFR5cGUgPz8gRmlsdGVyRXhwcmVzc2lvbkZpZWxkV2lkZ2V0VHlwZS5UZXh0RmllbGQsXHJcbiAgICAgICAgICAgICAgZmlsdGVyRXhwcmVzc2lvbkZpZWxkLnBvc3NpYmxlVmFsdWVzIGFzIFZhbHVlW11cclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICBrZXkgPSBpbmRleCArICcuZXhwcmVzc2lvbkRhdGEub3BlcmFuZDMudmFsdWVBc1N0cmluZyc7XHJcbiAgICAgICAgICB3aWRnZXRzLnB1c2goXHJcbiAgICAgICAgICAgIHRoaXMuY29uc3RydWN0Rm9ybVdpZGdldChcclxuICAgICAgICAgICAgICBrZXksXHJcbiAgICAgICAgICAgICAgZmlsdGVyRXhwcmVzc2lvbkZpZWxkLmxhYmVsMiEsXHJcbiAgICAgICAgICAgICAgZmlsdGVyRXhwcmVzc2lvbkZpZWxkLndpZGdldFR5cGUgPz8gRmlsdGVyRXhwcmVzc2lvbkZpZWxkV2lkZ2V0VHlwZS5UZXh0RmllbGQsXHJcbiAgICAgICAgICAgICAgZmlsdGVyRXhwcmVzc2lvbkZpZWxkLnBvc3NpYmxlVmFsdWVzIGFzIFZhbHVlW11cclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChmaWx0ZXJFeHByZXNzaW9uRmllbGQuZXhwcmVzc2lvbkRhdGE/Lm9wZXJhbmQyKSB7XHJcbiAgICAgICAgICBpZiAoa2V5ICE9PSBpbmRleCArICcuZXhwcmVzc2lvbkRhdGEub3BlcmFuZDIuc2VsZWN0ZWRWYWx1ZXMnKSB7XHJcbiAgICAgICAgICAgIGtleSA9IGluZGV4ICsgJy5leHByZXNzaW9uRGF0YS5vcGVyYW5kMi52YWx1ZUFzU3RyaW5nJztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHdpZGdldHMucHVzaChcclxuICAgICAgICAgICAgdGhpcy5jb25zdHJ1Y3RGb3JtV2lkZ2V0KFxyXG4gICAgICAgICAgICAgIGtleSxcclxuICAgICAgICAgICAgICBmaWx0ZXJFeHByZXNzaW9uRmllbGQubGFiZWwyISxcclxuICAgICAgICAgICAgICBmaWx0ZXJFeHByZXNzaW9uRmllbGQud2lkZ2V0VHlwZSA/PyBGaWx0ZXJFeHByZXNzaW9uRmllbGRXaWRnZXRUeXBlLlRleHRGaWVsZCxcclxuICAgICAgICAgICAgICBmaWx0ZXJFeHByZXNzaW9uRmllbGQucG9zc2libGVWYWx1ZXMgYXMgVmFsdWVbXVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZmlsdGVyRXhwcmVzc2lvbkZpZWxkPy5leHByZXNzaW9uRGF0YT8ub3BlcmFuZDMpIHtcclxuICAgICAgICAgIGlmIChrZXkgIT09IGluZGV4ICsgJy5zZWxlY3RlZFZhbHVlcycpIHtcclxuICAgICAgICAgICAga2V5ID0gaW5kZXggKyAnLmV4cHJlc3Npb25EYXRhLm9wZXJhbmQzLnZhbHVlQXNTdHJpbmcnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgd2lkZ2V0cy5wdXNoKFxyXG4gICAgICAgICAgICB0aGlzLmNvbnN0cnVjdEZvcm1XaWRnZXQoXHJcbiAgICAgICAgICAgICAga2V5LFxyXG4gICAgICAgICAgICAgIGZpbHRlckV4cHJlc3Npb25GaWVsZC5sYWJlbDMhLFxyXG4gICAgICAgICAgICAgIGZpbHRlckV4cHJlc3Npb25GaWVsZC53aWRnZXRUeXBlID8/IEZpbHRlckV4cHJlc3Npb25GaWVsZFdpZGdldFR5cGUuVGV4dEZpZWxkLFxyXG4gICAgICAgICAgICAgIGZpbHRlckV4cHJlc3Npb25GaWVsZC5wb3NzaWJsZVZhbHVlcyBhcyBWYWx1ZVtdXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc2ltcGxlRmlsdGVyRm9ybSA9IHtcclxuICAgICAgZGlyZWN0aW9uOiBTbWFydEZvcm1XaWRnZXREaXJlY3Rpb24uUk9XLFxyXG4gICAgICBjb21wb25lbnRNb2RlbDogeyBkYXRhOiBtb2RlbCB9LFxyXG4gICAgICB1c2VPblZhbHVlQ2hhbmdlRXZlbnQ6IHRydWUsXHJcbiAgICAgIHVzZU9uQmx1ckV2ZW50OiB0cnVlLFxyXG4gICAgICB3aWRnZXRzLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXh0cmFjdEZpbHRlckZpZWxkRnJvbUZvcm1Nb2RlbCgpOiB2b2lkIHtcclxuICAgIGxldCBzaW1wbGVGaWx0ZXIgPSB0aGlzLnNpbXBsZUZpbHRlckZvcm1DaGlsZD8uc3VibWl0Rm9ybShmYWxzZSkuY29tcG9uZW50TW9kZWwuZGF0YTtcclxuICAgIGxldCByZXN1bHQ6IEZpbHRlckV4cHJlc3Npb25GaWVsZFtdID0gW107XHJcblxyXG4gICAgT2JqZWN0LmtleXMoc2ltcGxlRmlsdGVyKS5mb3JFYWNoKChrZXk6IHN0cmluZykgPT4ge1xyXG4gICAgICByZXN1bHQucHVzaChzaW1wbGVGaWx0ZXJba2V5XSk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuc2VydmljZS5tb2RlbCEubW9kZWwhLndvcmtwbGFjZUxpc3QhLmZpbHRlcnMgPSByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBzZXRVcCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNlcnZpY2UubW9kZWw/LnR5cGUgPT09IHRoaXMudHlwZS5TaW1wbGUpIHtcclxuICAgICAgdGhpcy5zZXR1cFNpbXBsZUZpbHRlcigpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jb25zdHJ1Y3RVaUFjdGlvbk1vZGVscygpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuc2VydmljZSEubW9kZWwhLnNlbGVjdGVkRmllbGRFZGl0b3IpIHtcclxuICAgICAgICB0aGlzLmNvbnN0cnVjdEZvcm0oKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNtYXJ0Rm9ybSA9IHVuZGVmaW5lZDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0VWlBY3Rpb25Nb2RlbHMoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zZXJ2aWNlLm1vZGVsPy5wb3NzaWJsZUFjdGlvbnMpIHtcclxuICAgICAgdGhpcy51aUFjdGlvbk1vZGVscyA9IHRoaXMuc2VydmljZS5tb2RlbC5wb3NzaWJsZUFjdGlvbnMubWFwKChhY3Rpb246IFVpQWN0aW9uKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIHNlcnZpY2VUb1VzZTogdGhpcy5zZXJ2aWNlLFxyXG4gICAgICAgICAgdWlBY3Rpb246IGFjdGlvbixcclxuICAgICAgICB9O1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zZXJ2aWNlLm1vZGVsPy5zZWxlY3RlZEZpZWxkRWRpdG9yPy5wb3NzaWJsZUFjdGlvbnMpIHtcclxuICAgICAgdGhpcy5leHByZXNzaW9uVWlBY3Rpb25Nb2RlbHMgPSB0aGlzLnNlcnZpY2UubW9kZWw/LnNlbGVjdGVkRmllbGRFZGl0b3IucG9zc2libGVBY3Rpb25zLm1hcChcclxuICAgICAgICAodWlBY3Rpb246IFVpQWN0aW9uKSA9PiB7XHJcbiAgICAgICAgICBsZXQgY29waWVkVWlBY3Rpb246IFVpQWN0aW9uID0ge307XHJcbiAgICAgICAgICBPYmplY3Qua2V5cyh1aUFjdGlvbikubWFwKChrZXk6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAoY29waWVkVWlBY3Rpb24gYXMgYW55KVtrZXldID0gKHVpQWN0aW9uIGFzIGFueSlba2V5XTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgY29waWVkVWlBY3Rpb24ucGFyYW1zID0ge1xyXG4gICAgICAgICAgICBmaWVsZDogdGhpcy5zZXJ2aWNlLm1vZGVsPy5zZWxlY3RlZEZpZWxkLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHNlcnZpY2VUb1VzZTogdGhpcy5zZXJ2aWNlLFxyXG4gICAgICAgICAgICB1aUFjdGlvbjogY29waWVkVWlBY3Rpb24sXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdEZvcm0oKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zbWFydEZvcm0pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBnZW5lcmF0ZWRXaWRnZXRzOiBTbWFydEZvcm1XaWRnZXQ8YW55PltdID0gdGhpcy5sYXlvdXRTZXJ2aWNlLnJlbmRlcih7XHJcbiAgICAgIGxheW91dERlZmluaXRpb25zOiB0aGlzLnNlcnZpY2UubW9kZWw/LnNlbGVjdGVkRmllbGRFZGl0b3I/LmxheW91dERlZj8ud2lkZ2V0cyxcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc21hcnRGb3JtID0ge1xyXG4gICAgICBkaXJlY3Rpb246IFNtYXJ0Rm9ybVdpZGdldERpcmVjdGlvbi5ST1csXHJcbiAgICAgIHVzZU9uQmx1ckV2ZW50OiB0cnVlLFxyXG4gICAgICB1c2VPblZhbHVlQ2hhbmdlRXZlbnQ6IHRydWUsXHJcbiAgICAgIGNvbXBvbmVudE1vZGVsOiB7IGRhdGE6IHRoaXMuc2VydmljZS5tb2RlbD8uc2VsZWN0ZWRGaWVsZCB9LFxyXG4gICAgICB3aWRnZXRzOiBnZW5lcmF0ZWRXaWRnZXRzLFxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAodGhpcy5zbWFydGZvcm1DaGFuZ2VTdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy5zbWFydGZvcm1DaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNtYXJ0Zm9ybUNoYW5nZVN1YnNjcmlwdGlvbiA9IHRoaXMuZm9ybUNoaWxkPy5vbkJsdXJTdWJqZWN0XHJcbiAgICAgID8ucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLnNhdmUoKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMuc21hcnRmb3JtU29waGlzdGljYXRlZENoYW5nZVN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLnNtYXJ0Zm9ybVNvcGhpc3RpY2F0ZWRDaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNtYXJ0Zm9ybVNvcGhpc3RpY2F0ZWRDaGFuZ2VTdWJzY3JpcHRpb24gPSB0aGlzLmZvcm1DaGlsZD8uc29waGlzdGljYXRlZFZhbHVlQ2hhbmdlXHJcbiAgICAgID8ucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChjaGFuZ2U6IFNvcGhpc3RpY2F0ZWRWYWx1ZUNoYW5nZSkgPT4ge1xyXG4gICAgICAgIGlmIChjaGFuZ2Uua2V5ID09PSAnZXhwcmVzc2lvbkRhdGEuY3VycmVudE9wZXJhdGlvbicpIHtcclxuICAgICAgICAgIHRoaXMuc2F2ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBzYXZlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5mb3JtQ2hpbGQ/LnN1Ym1pdEZvcm0oZmFsc2UpO1xyXG4gICAgdGhpcy5zZXJ2aWNlLnBlZm9ybVdpZGdldEFjdGlvbih7XHJcbiAgICAgIGNvZGU6ICdVUERBVEVfRklMVEVSX0VYUFJFU1NJT04nLFxyXG4gICAgICBwYXJhbXM6IHtcclxuICAgICAgICBtb2RlbDogdGhpcy5zZXJ2aWNlLm1vZGVsPy5zZWxlY3RlZEZpZWxkLFxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICByZW1vdmUoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlcnZpY2UucGVmb3JtV2lkZ2V0QWN0aW9uKHtcclxuICAgICAgY29kZTogJ1JFTU9WRV9GSUxURVJfRVhQUkVTU0lPTicsXHJcbiAgICAgIHBhcmFtczoge1xyXG4gICAgICAgIG1vZGVsOiB0aGlzLnNlcnZpY2UubW9kZWw/LnNlbGVjdGVkRmllbGQsXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldEZpbHRlcmVkVWlBY3Rpb25Nb2RlbHMoZmlsdGVyUHJlZGljYXRlOiAodWlBY3Rpb246IFVpQWN0aW9uKSA9PiBib29sZWFuKTogVWlBY3Rpb25Nb2RlbFtdIHtcclxuICAgIC8vIHJldHVybiB0aGlzLnNlcnZpY2UubW9kZWwhLnBvc3NpYmxlQWN0aW9ucyEuZmlsdGVyKGZpbHRlclByZWRpY2F0ZSkubWFwKCh1aUFjdGlvbjogVWlBY3Rpb24pID0+IHtcclxuICAgIC8vICAgcmV0dXJuIHtcclxuICAgIC8vICAgICBzZXJ2aWNlVG9Vc2U6IHRoaXMuc2VydmljZSxcclxuICAgIC8vICAgICB1aUFjdGlvbixcclxuICAgIC8vICAgfTtcclxuICAgIC8vIH0pO1xyXG4gICAgcmV0dXJuIFtdO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgc2F2ZUZpbHRlcigpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuZXh0cmFjdEZpbHRlckZpZWxkRnJvbUZvcm1Nb2RlbCgpO1xyXG4gICAgdGhpcy5zZXJ2aWNlLnBlcmZvcm1VaUFjdGlvblJlcXVlc3Qoe1xyXG4gICAgICBjb2RlOiBGaWx0ZXJFeHByZXNzaW9uQnVpbGRlckFwaUFjdGlvbnMuU0FWRV9FWFBSRVNTSU9OX0ZJRUxEX0xJU1QsXHJcbiAgICAgIHBhcmFtczoge1xyXG4gICAgICAgIG1vZGVsOiB0aGlzLnNlcnZpY2UubW9kZWwhLFxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbnN0cnVjdEZvcm1XaWRnZXQoXHJcbiAgICBrZXk6IHN0cmluZyxcclxuICAgIGxhYmVsOiBzdHJpbmcsXHJcbiAgICB3aWRnZXRUeXBlOiBGaWx0ZXJFeHByZXNzaW9uRmllbGRXaWRnZXRUeXBlLFxyXG4gICAgcG9zc2libGVWYWx1ZXM6IFZhbHVlW11cclxuICApOiBTbWFydEZvcm1XaWRnZXQ8YW55PiB7XHJcbiAgICBsZXQgdHlwZTogYW55ID0gd2lkZ2V0VHlwZTtcclxuXHJcbiAgICBpZiAodHlwZSA9PT0gRmlsdGVyRXhwcmVzc2lvbkZpZWxkV2lkZ2V0VHlwZS5EYXRlKSB7XHJcbiAgICAgIHR5cGUgPSBTbWFydEZvcm1XaWRnZXRUeXBlLkRBVEVfUElDS0VSO1xyXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSBGaWx0ZXJFeHByZXNzaW9uRmllbGRXaWRnZXRUeXBlLkRhdGVUaW1lKSB7XHJcbiAgICAgIHR5cGUgPSBTbWFydEZvcm1XaWRnZXRUeXBlLkRBVEVfVElNRV9QSUNLRVI7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHdpZGdldDogU21hcnRGb3JtV2lkZ2V0PGFueT4gPSB7XHJcbiAgICAgIGtleSxcclxuICAgICAgbGFiZWwsXHJcbiAgICAgIHR5cGUsXHJcbiAgICAgIHZhbHVlOiAnJyxcclxuICAgICAgc2hvd0xhYmVsOiB0cnVlLFxyXG4gICAgICB2YWx1ZUxpc3Q6IHBvc3NpYmxlVmFsdWVzLm1hcCgodmFsdWU6IFZhbHVlKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIGtleTogdmFsdWUub2JqZWN0VXJpID8gdmFsdWUub2JqZWN0VXJpIDogdmFsdWUuY29kZSEsXHJcbiAgICAgICAgICBsYWJlbDogdmFsdWUuZGlzcGxheVZhbHVlLFxyXG4gICAgICAgICAgdHlwZTogU21hcnRGb3JtV2lkZ2V0VHlwZS5JVEVNLFxyXG4gICAgICAgICAgdmFsdWU6IHZhbHVlLm9iamVjdFVyaSA/IHZhbHVlLm9iamVjdFVyaSA6IHZhbHVlLmNvZGUsXHJcbiAgICAgICAgfTtcclxuICAgICAgfSksXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiB3aWRnZXQ7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJ0YXJnZXRHcm91cENvbnRlbnRDb250YWluZXJcIj5cclxuICA8aDM+e3sgc2VydmljZS5tb2RlbD8ubW9kZWw/LmxhYmVsIH19PC9oMz5cclxuXHJcbiAgPGRpdiAqbmdJZj1cInNlcnZpY2UubW9kZWw/LnR5cGUgPT09IHR5cGUuU2ltcGxlOyB0aGVuIHNpbXBsZUZpbHRlcjsgZWxzZSBjb21wbGV4RmlsdGVyXCI+PC9kaXY+XHJcblxyXG4gIDxuZy10ZW1wbGF0ZSAjc2ltcGxlRmlsdGVyPlxyXG4gICAgPGRpdiBjbGFzcz1cImV4cHJlc3Npb25zQ29udGFpbmVyXCI+XHJcbiAgICAgIDxzbWFydGZvcm0gI3NpbXBsZUZpbHRlckZyb21DaGlsZCBbc21hcnRGb3JtXT1cInNpbXBsZUZpbHRlckZvcm1cIj48L3NtYXJ0Zm9ybT5cclxuICAgIDwvZGl2PlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcbiAgPG5nLXRlbXBsYXRlICNjb21wbGV4RmlsdGVyPlxyXG4gICAgPGRpdiBjbGFzcz1cInVpQWN0aW9uc0JhclwiICpuZ0lmPVwiIXNlcnZpY2UubW9kZWw/LnJlYWRPbmx5XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ1aUFjdGlvbnNJbnNpZGVPZkJhclwiPlxyXG4gICAgICAgIDxzbWFydC11aS1hY3Rpb24tdG9vbGJhciBbdWlBY3Rpb25Nb2RlbHNdPVwidWlBY3Rpb25Nb2RlbHNcIj48L3NtYXJ0LXVpLWFjdGlvbi10b29sYmFyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdlxyXG4gICAgICAqbmdJZj1cIlxyXG4gICAgICAgIHNlcnZpY2U/Lm1vZGVsPy5tb2RlbD8ud29ya3BsYWNlTGlzdD8uZmlsdGVycz8ubGVuZ3RoO1xyXG4gICAgICAgIHRoZW4gd2l0aFBhcmFtZXRlcnM7XHJcbiAgICAgICAgZWxzZSB3aXRob3V0UGFyYW1ldGVyc1xyXG4gICAgICBcIlxyXG4gICAgPjwvZGl2PlxyXG4gICAgPG5nLXRlbXBsYXRlICN3aXRob3V0UGFyYW1ldGVycz5cclxuICAgICAgPGRpdiBjbGFzcz1cIndpdGhvdXRQYXJhbWV0ZXJzQ29udGFpbmVyXCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXQtYm9keVwiPiBNw6lnIG5pbmNzIG1lZ2FkdmEgcGFyYW3DqXRlciA8L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSAjd2l0aFBhcmFtZXRlcnM+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ3aXRoUGFyYW1ldGVyc0NvbnRhaW5lclwiPlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzPVwiZXhwcmVzc2lvbnNDb250YWluZXJcIlxyXG4gICAgICAgICAgKm5nSWY9XCJzZXJ2aWNlPy5tb2RlbD8ubW9kZWw/LndvcmtwbGFjZUxpc3Q/LmZpbHRlcnM/Lmxlbmd0aFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPGFwcC1leHByZXNzaW9uLWl0ZW1zXHJcbiAgICAgICAgICAgIFtpdGVtc109XCIoc2VydmljZS5tb2RlbD8ubW9kZWw/LndvcmtwbGFjZUxpc3QpIS5maWx0ZXJzXCJcclxuICAgICAgICAgID48L2FwcC1leHByZXNzaW9uLWl0ZW1zPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJleHByZXNzaW9uRWRpdG9yQ29udGFpbmVyXCI+XHJcbiAgICAgICAgICA8c21hcnRmb3JtICNmb3JtIFtzbWFydEZvcm1dPVwic21hcnRGb3JtXCI+PC9zbWFydGZvcm0+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwic21hcnRGb3JtXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cInJlbW92ZSgpXCIgbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCI+VMO2cmzDqXM8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuPC9kaXY+XHJcbiJdfQ==
250
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtZmlsdGVyLWVkaXRvci1jb250ZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LW5nLWNsaWVudC9zcmMvbGliL3NtYXJ0LWZpbHRlci1lZGl0b3Ivc21hcnQtZmlsdGVyLWVkaXRvci1jb250ZW50L3NtYXJ0LWZpbHRlci1lZGl0b3ItY29udGVudC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zbWFydC1maWx0ZXItZWRpdG9yL3NtYXJ0LWZpbHRlci1lZGl0b3ItY29udGVudC9zbWFydC1maWx0ZXItZWRpdG9yLWNvbnRlbnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLFNBQVMsRUFFVCxLQUFLLEVBS0wsU0FBUyxFQUNULGdCQUFnQixHQUNqQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsT0FBTyxFQUFzQixTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDOUQsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDOUUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDL0YsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFaEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFLMUUsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFFN0YsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sc0NBQXNDLENBQUM7Ozs7Ozs7O0FBU3pGLE1BQU0sT0FBTyxpQ0FBaUM7SUFrQjVDLFlBQ1UsYUFBK0MsRUFDL0MsU0FBa0M7UUFEbEMsa0JBQWEsR0FBYixhQUFhLENBQWtDO1FBQy9DLGNBQVMsR0FBVCxT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QUFJO2lCQUN0RCxDQUFDO1lBQ0osQ0FBQyxDQUFDO1NBQ0gsQ0FBQztRQUVGLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7OzhIQXZVVSxpQ0FBaUM7a0hBQWpDLGlDQUFpQyx5TEFPakIsZ0JBQWdCLHlIQUlDLGdCQUFnQiw2QkM5QzlELG94REFnREE7MkZEYmEsaUNBQWlDO2tCQUw3QyxTQUFTOytCQUNFLGdDQUFnQzs2SkFNakMsT0FBTztzQkFBZixLQUFLO2dCQUt5QyxjQUFjO3NCQUE1RCxTQUFTO3VCQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtnQkFLN0MscUJBQXFCO3NCQURwQixTQUFTO3VCQUFDLHVCQUF1QixFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBBZnRlclZpZXdDaGVja2VkLFxyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ29tcG9uZW50LFxyXG4gIENvbXBvbmVudFJlZixcclxuICBJbnB1dCxcclxuICBPbkNoYW5nZXMsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIFZpZXdDaGlsZCxcclxuICBWaWV3Q29udGFpbmVyUmVmLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCB0YWtlLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgRmlsdGVyRXhwcmVzc2lvbkZpZWxkV2lkZ2V0VHlwZSB9IGZyb20gJy4uLy4uL3NtYXJ0LWZpbHRlci9wcm9qZWN0cyc7XHJcbmltcG9ydCB7IFNtYXJ0Rm9ybVdpZGdldERpcmVjdGlvbiB9IGZyb20gJy4uLy4uL3NtYXJ0LWZvcm0vYXBpL21vZGVsL3NtYXJ0Rm9ybVdpZGdldERpcmVjdGlvbic7XHJcbmltcG9ydCB7IFNtYXJ0Rm9ybVdpZGdldFR5cGUgfSBmcm9tICcuLi8uLi9zbWFydC1mb3JtL3Byb2plY3RzJztcclxuaW1wb3J0IHsgU21hcnRmb3JtTGF5b3V0RGVmaW5pdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zbWFydC1mb3JtL3NlcnZpY2VzL3NtYXJ0Zm9ybS5sYXlvdXQtZGVmaW5pdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU21hcnRmb3JtQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vc21hcnQtZm9ybS9zbWFydGZvcm0uY29tcG9uZW50JztcclxuaW1wb3J0IHsgU21hcnRGb3JtV2lkZ2V0IH0gZnJvbSAnLi4vLi4vc21hcnQtZm9ybS9zbWFydGZvcm0uZm9ybS1tb2RlbCc7XHJcbmltcG9ydCB7IFNtYXJ0Rm9ybSwgU29waGlzdGljYXRlZFZhbHVlQ2hhbmdlLCBWYWx1ZSB9IGZyb20gJy4uLy4uL3NtYXJ0LWZvcm0vc21hcnRmb3JtLm1vZGVsJztcclxuaW1wb3J0IHsgVWlBY3Rpb24gfSBmcm9tICcuLi8uLi92aWV3LWNvbnRleHQvYXBpL21vZGVsL3VpQWN0aW9uJztcclxuaW1wb3J0IHsgVWlBY3Rpb25Nb2RlbCB9IGZyb20gJy4uLy4uL3ZpZXctY29udGV4dC9zbWFydC11aS1hY3Rpb24vdWktYWN0aW9uLm1vZGVsJztcclxuaW1wb3J0IHsgRmlsdGVyRXhwcmVzc2lvbkJ1aWxkZXJVaU1vZGVsIH0gZnJvbSAnLi4vYXBpL21vZGVsL2ZpbHRlckV4cHJlc3Npb25CdWlsZGVyVWlNb2RlbCc7XHJcbmltcG9ydCB7IEZpbHRlckV4cHJlc3Npb25GaWVsZCB9IGZyb20gJy4uL2FwaS9tb2RlbC9maWx0ZXJFeHByZXNzaW9uRmllbGQnO1xyXG5pbXBvcnQgeyBGaWx0ZXJFeHByZXNzaW9uQnVpbGRlckFwaUFjdGlvbnMgfSBmcm9tICcuLi9maWx0ZXJFeHByZXNzaW9uQnVpbGRlckFwaUFjdGlvbnMnO1xyXG5pbXBvcnQgeyBJU21hcnRGaWx0ZXJFZGl0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vc21hcnQtZmlsdGVyLWVkaXRvci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50RmFjdG9yeVNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21wb25lbnQtZmFjdG9yeS1zZXJ2aWNlL2NvbXBvbmVudC1mYWN0b3J5LXNlcnZpY2Uuc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NtYXJ0LWZpbHRlci1leHByZXNzaW9uLWVkaXRvcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3NtYXJ0LWZpbHRlci1lZGl0b3ItY29udGVudC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vc21hcnQtZmlsdGVyLWVkaXRvci1jb250ZW50LmNvbXBvbmVudC5jc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFNtYXJ0RmlsdGVyRWRpdG9yQ29udGVudENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBwcml2YXRlIF9kZXN0cm95JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgQElucHV0KCkgc2VydmljZSE6IElTbWFydEZpbHRlckVkaXRvclNlcnZpY2U7XHJcblxyXG4gIHVpQWN0aW9uTW9kZWxzOiBVaUFjdGlvbk1vZGVsW10gPSBbXTtcclxuICBleHByZXNzaW9uVWlBY3Rpb25Nb2RlbHM6IFVpQWN0aW9uTW9kZWxbXSA9IFtdO1xyXG5cclxuICBAVmlld0NoaWxkKCdmb3JtJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pIGZvcm1DaGlsZFZjUmVmITogVmlld0NvbnRhaW5lclJlZjtcclxuICBmb3JtQ2hpbGQhOiBDb21wb25lbnRSZWY8U21hcnRmb3JtQ29tcG9uZW50PjtcclxuICBzbWFydEZvcm0/OiBTbWFydEZvcm07XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3NpbXBsZUZpbHRlckZyb21DaGlsZCcsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KVxyXG4gIHNpbXBsZUZpbHRlckZvcm1WY1JlZj86IFZpZXdDb250YWluZXJSZWY7XHJcbiAgc2ltcGxlRmlsdGVyRm9ybUNoaWxkITogQ29tcG9uZW50UmVmPFNtYXJ0Zm9ybUNvbXBvbmVudD47XHJcbiAgc2ltcGxlRmlsdGVyRm9ybT86IFNtYXJ0Rm9ybTtcclxuXHJcbiAgdHlwZSA9IEZpbHRlckV4cHJlc3Npb25CdWlsZGVyVWlNb2RlbC5UeXBlRW51bTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGxheW91dFNlcnZpY2U6IFNtYXJ0Zm9ybUxheW91dERlZmluaXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjZlNlcnZpY2U6IENvbXBvbmVudEZhY3RvcnlTZXJ2aWNlXHJcbiAgKSB7fVxyXG5cclxuICBzbWFydEZpbHRlckNoYW5nZVN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcclxuICBzbWFydEZpbHRlclNvcGhpc3RpY2F0ZWRDaGFuZ2VTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XHJcbiAgc21hcnRmb3JtQ2hhbmdlU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xyXG4gIHNtYXJ0Zm9ybVNvcGhpc3RpY2F0ZWRDaGFuZ2VTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZXJ2aWNlLm1vZGVsQ2hhbmdlZC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLnNldFVwKCkpO1xyXG4gICAgdGhpcy5zZXJ2aWNlLmxvYWQoKTtcclxuICB9XHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLl9kZXN0cm95JC5uZXh0KCk7XHJcbiAgICB0aGlzLl9kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgc2V0dXBTaW1wbGVGaWx0ZXIoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zaW1wbGVGaWx0ZXJGb3JtQ2hpbGQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCB3aWRnZXRzOiBTbWFydEZvcm1XaWRnZXQ8YW55PltdID0gW107XHJcblxyXG4gICAgbGV0IGtleTogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG5cclxuICAgIGxldCBtb2RlbDogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xyXG5cclxuICAgIHRoaXMuc2VydmljZS5tb2RlbD8ubW9kZWw/LndvcmtwbGFjZUxpc3Q/LmZpbHRlcnMuZm9yRWFjaChcclxuICAgICAgKGZpbHRlckV4cHJlc3Npb25GaWVsZDogRmlsdGVyRXhwcmVzc2lvbkZpZWxkLCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgbW9kZWxbaW5kZXhdID0gZmlsdGVyRXhwcmVzc2lvbkZpZWxkO1xyXG5cclxuICAgICAgICBpZiAoZmlsdGVyRXhwcmVzc2lvbkZpZWxkLndpZGdldFR5cGUgPT09ICdTRUxFQ1RfTVVMVElQTEUnKSB7XHJcbiAgICAgICAgICBrZXkgPSBpbmRleCArICcuZXhwcmVzc2lvbkRhdGEub3BlcmFuZDIuc2VsZWN0ZWRWYWx1ZXMnO1xyXG4gICAgICAgICAgd2lkZ2V0cy5wdXNoKFxyXG4gICAgICAgICAgICB0aGlzLmNvbnN0cnVjdEZvcm1XaWRnZXQoXHJcbiAgICAgICAgICAgICAga2V5LFxyXG4gICAgICAgICAgICAgIGZpbHRlckV4cHJlc3Npb25GaWVsZC5sYWJlbDIhLFxyXG4gICAgICAgICAgICAgIGZpbHRlckV4cHJlc3Npb25GaWVsZC53aWRnZXRUeXBlID8/IEZpbHRlckV4cHJlc3Npb25GaWVsZFdpZGdldFR5cGUuVGV4dEZpZWxkLFxyXG4gICAgICAgICAgICAgIGZpbHRlckV4cHJlc3Npb25GaWVsZC5wb3NzaWJsZVZhbHVlcyBhcyBWYWx1ZVtdXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZmlsdGVyRXhwcmVzc2lvbkZpZWxkLmV4cHJlc3Npb25EYXRhPy5jdXJyZW50T3BlcmF0aW9uID09PSAnQkVUV0VFTicpIHtcclxuICAgICAgICAgIGtleSA9IGluZGV4ICsgJy5leHByZXNzaW9uRGF0YS5vcGVyYW5kMi52YWx1ZUFzU3RyaW5nJztcclxuICAgICAgICAgIHdpZGdldHMucHVzaChcclxuICAgICAgICAgICAgdGhpcy5jb25zdHJ1Y3RGb3JtV2lkZ2V0KFxyXG4gICAgICAgICAgICAgIGtleSxcclxuICAgICAgICAgICAgICBmaWx0ZXJFeHByZXNzaW9uRmllbGQubGFiZWwyISxcclxuICAgICAgICAgICAgICBmaWx0ZXJFeHByZXNzaW9uRmllbGQud2lkZ2V0VHlwZSA/PyBGaWx0ZXJFeHByZXNzaW9uRmllbGRXaWRnZXRUeXBlLlRleHRGaWVsZCxcclxuICAgICAgICAgICAgICBmaWx0ZXJFeHByZXNzaW9uRmllbGQucG9zc2libGVWYWx1ZXMgYXMgVmFsdWVbXVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIGtleSA9IGluZGV4ICsgJy5leHByZXNzaW9uRGF0YS5vcGVyYW5kMy52YWx1ZUFzU3RyaW5nJztcclxuICAgICAgICAgIHdpZGdldHMucHVzaChcclxuICAgICAgICAgICAgdGhpcy5jb25zdHJ1Y3RGb3JtV2lkZ2V0KFxyXG4gICAgICAgICAgICAgIGtleSxcclxuICAgICAgICAgICAgICBmaWx0ZXJFeHByZXNzaW9uRmllbGQubGFiZWwyISxcclxuICAgICAgICAgICAgICBmaWx0ZXJFeHByZXNzaW9uRmllbGQud2lkZ2V0VHlwZSA/PyBGaWx0ZXJFeHByZXNzaW9uRmllbGRXaWRnZXRUeXBlLlRleHRGaWVsZCxcclxuICAgICAgICAgICAgICBmaWx0ZXJFeHByZXNzaW9uRmllbGQucG9zc2libGVWYWx1ZXMgYXMgVmFsdWVbXVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGZpbHRlckV4cHJlc3Npb25GaWVsZC5leHByZXNzaW9uRGF0YT8ub3BlcmFuZDIpIHtcclxuICAgICAgICAgIGlmIChrZXkgIT09IGluZGV4ICsgJy5leHByZXNzaW9uRGF0YS5vcGVyYW5kMi5zZWxlY3RlZFZhbHVlcycpIHtcclxuICAgICAgICAgICAga2V5ID0gaW5kZXggKyAnLmV4cHJlc3Npb25EYXRhLm9wZXJhbmQyLnZhbHVlQXNTdHJpbmcnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgd2lkZ2V0cy5wdXNoKFxyXG4gICAgICAgICAgICB0aGlzLmNvbnN0cnVjdEZvcm1XaWRnZXQoXHJcbiAgICAgICAgICAgICAga2V5LFxyXG4gICAgICAgICAgICAgIGZpbHRlckV4cHJlc3Npb25GaWVsZC5sYWJlbDIhLFxyXG4gICAgICAgICAgICAgIGZpbHRlckV4cHJlc3Npb25GaWVsZC53aWRnZXRUeXBlID8/IEZpbHRlckV4cHJlc3Npb25GaWVsZFdpZGdldFR5cGUuVGV4dEZpZWxkLFxyXG4gICAgICAgICAgICAgIGZpbHRlckV4cHJlc3Npb25GaWVsZC5wb3NzaWJsZVZhbHVlcyBhcyBWYWx1ZVtdXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChmaWx0ZXJFeHByZXNzaW9uRmllbGQ/LmV4cHJlc3Npb25EYXRhPy5vcGVyYW5kMykge1xyXG4gICAgICAgICAgaWYgKGtleSAhPT0gaW5kZXggKyAnLnNlbGVjdGVkVmFsdWVzJykge1xyXG4gICAgICAgICAgICBrZXkgPSBpbmRleCArICcuZXhwcmVzc2lvbkRhdGEub3BlcmFuZDMudmFsdWVBc1N0cmluZyc7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB3aWRnZXRzLnB1c2goXHJcbiAgICAgICAgICAgIHRoaXMuY29uc3RydWN0Rm9ybVdpZGdldChcclxuICAgICAgICAgICAgICBrZXksXHJcbiAgICAgICAgICAgICAgZmlsdGVyRXhwcmVzc2lvbkZpZWxkLmxhYmVsMyEsXHJcbiAgICAgICAgICAgICAgZmlsdGVyRXhwcmVzc2lvbkZpZWxkLndpZGdldFR5cGUgPz8gRmlsdGVyRXhwcmVzc2lvbkZpZWxkV2lkZ2V0VHlwZS5UZXh0RmllbGQsXHJcbiAgICAgICAgICAgICAgZmlsdGVyRXhwcmVzc2lvbkZpZWxkLnBvc3NpYmxlVmFsdWVzIGFzIFZhbHVlW11cclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zaW1wbGVGaWx0ZXJGb3JtID0ge1xyXG4gICAgICBkaXJlY3Rpb246IFNtYXJ0Rm9ybVdpZGdldERpcmVjdGlvbi5ST1csXHJcbiAgICAgIGNvbXBvbmVudE1vZGVsOiB7IGRhdGE6IG1vZGVsIH0sXHJcbiAgICAgIHVzZU9uVmFsdWVDaGFuZ2VFdmVudDogdHJ1ZSxcclxuICAgICAgdXNlT25CbHVyRXZlbnQ6IHRydWUsXHJcbiAgICAgIHdpZGdldHMsXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuc2ltcGxlRmlsdGVyRm9ybUNoaWxkID0gdGhpcy5jZlNlcnZpY2UuY3JlYXRlQ29tcG9uZW50KFxyXG4gICAgICB0aGlzLnNpbXBsZUZpbHRlckZvcm1WY1JlZiEsXHJcbiAgICAgIFNtYXJ0Zm9ybUNvbXBvbmVudCxcclxuICAgICAgbmV3IE1hcDxzdHJpbmcsIGFueT4oW1snc21hcnRGb3JtJywgdGhpcy5zaW1wbGVGaWx0ZXJGb3JtXV0pXHJcbiAgICApO1xyXG5cclxuICAgIGlmICh0aGlzLnNtYXJ0RmlsdGVyQ2hhbmdlU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMuc21hcnRGaWx0ZXJDaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNtYXJ0RmlsdGVyQ2hhbmdlU3Vic2NyaXB0aW9uID0gdGhpcy5zaW1wbGVGaWx0ZXJGb3JtQ2hpbGQhLmluc3RhbmNlLm9uQmx1clN1YmplY3Q/LnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JClcclxuICAgICkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5zYXZlRmlsdGVyKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAodGhpcy5zbWFydEZpbHRlclNvcGhpc3RpY2F0ZWRDaGFuZ2VTdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy5zbWFydEZpbHRlclNvcGhpc3RpY2F0ZWRDaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNtYXJ0RmlsdGVyU29waGlzdGljYXRlZENoYW5nZVN1YnNjcmlwdGlvbiA9XHJcbiAgICAgIHRoaXMuc2ltcGxlRmlsdGVyRm9ybUNoaWxkIS5pbnN0YW5jZS5zb3BoaXN0aWNhdGVkVmFsdWVDaGFuZ2U/LnBpcGUoXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKVxyXG4gICAgICApLnN1YnNjcmliZSgoY2hhbmdlKSA9PiB7XHJcbiAgICAgICAgaWYgKGNoYW5nZS5raW5kID09PSAnc2VsZWN0aW9uJykge1xyXG4gICAgICAgICAgdGhpcy5zYXZlRmlsdGVyKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXh0cmFjdEZpbHRlckZpZWxkRnJvbUZvcm1Nb2RlbCgpOiB2b2lkIHtcclxuICAgIGxldCBzaW1wbGVGaWx0ZXIgPSB0aGlzLnNpbXBsZUZpbHRlckZvcm1DaGlsZD8uaW5zdGFuY2Uuc3VibWl0Rm9ybShmYWxzZSkuY29tcG9uZW50TW9kZWwuZGF0YTtcclxuICAgIGxldCByZXN1bHQ6IEZpbHRlckV4cHJlc3Npb25GaWVsZFtdID0gW107XHJcblxyXG4gICAgT2JqZWN0LmtleXMoc2ltcGxlRmlsdGVyKS5mb3JFYWNoKChrZXk6IHN0cmluZykgPT4ge1xyXG4gICAgICByZXN1bHQucHVzaChzaW1wbGVGaWx0ZXJba2V5XSk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuc2VydmljZS5tb2RlbCEubW9kZWwhLndvcmtwbGFjZUxpc3QhLmZpbHRlcnMgPSByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBzZXRVcCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNlcnZpY2UubW9kZWw/LnR5cGUgPT09IHRoaXMudHlwZS5TaW1wbGUpIHtcclxuICAgICAgdGhpcy5zZXR1cFNpbXBsZUZpbHRlcigpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jb25zdHJ1Y3RVaUFjdGlvbk1vZGVscygpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuc2VydmljZSEubW9kZWwhLnNlbGVjdGVkRmllbGRFZGl0b3IpIHtcclxuICAgICAgICB0aGlzLmNvbnN0cnVjdEZvcm0oKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNtYXJ0Rm9ybSA9IHVuZGVmaW5lZDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0VWlBY3Rpb25Nb2RlbHMoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zZXJ2aWNlLm1vZGVsPy5wb3NzaWJsZUFjdGlvbnMpIHtcclxuICAgICAgdGhpcy51aUFjdGlvbk1vZGVscyA9IHRoaXMuc2VydmljZS5tb2RlbC5wb3NzaWJsZUFjdGlvbnMubWFwKChhY3Rpb246IFVpQWN0aW9uKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIHNlcnZpY2VUb1VzZTogdGhpcy5zZXJ2aWNlLFxyXG4gICAgICAgICAgdWlBY3Rpb246IGFjdGlvbixcclxuICAgICAgICB9O1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zZXJ2aWNlLm1vZGVsPy5zZWxlY3RlZEZpZWxkRWRpdG9yPy5wb3NzaWJsZUFjdGlvbnMpIHtcclxuICAgICAgdGhpcy5leHByZXNzaW9uVWlBY3Rpb25Nb2RlbHMgPSB0aGlzLnNlcnZpY2UubW9kZWw/LnNlbGVjdGVkRmllbGRFZGl0b3IucG9zc2libGVBY3Rpb25zLm1hcChcclxuICAgICAgICAodWlBY3Rpb246IFVpQWN0aW9uKSA9PiB7XHJcbiAgICAgICAgICBsZXQgY29waWVkVWlBY3Rpb246IFVpQWN0aW9uID0ge307XHJcbiAgICAgICAgICBPYmplY3Qua2V5cyh1aUFjdGlvbikubWFwKChrZXk6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAoY29waWVkVWlBY3Rpb24gYXMgYW55KVtrZXldID0gKHVpQWN0aW9uIGFzIGFueSlba2V5XTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgY29waWVkVWlBY3Rpb24ucGFyYW1zID0ge1xyXG4gICAgICAgICAgICBmaWVsZDogdGhpcy5zZXJ2aWNlLm1vZGVsPy5zZWxlY3RlZEZpZWxkLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHNlcnZpY2VUb1VzZTogdGhpcy5zZXJ2aWNlLFxyXG4gICAgICAgICAgICB1aUFjdGlvbjogY29waWVkVWlBY3Rpb24sXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdEZvcm0oKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zbWFydEZvcm0pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBnZW5lcmF0ZWRXaWRnZXRzOiBTbWFydEZvcm1XaWRnZXQ8YW55PltdID0gdGhpcy5sYXlvdXRTZXJ2aWNlLnJlbmRlcih7XHJcbiAgICAgIGxheW91dERlZmluaXRpb25zOiB0aGlzLnNlcnZpY2UubW9kZWw/LnNlbGVjdGVkRmllbGRFZGl0b3I/LmxheW91dERlZj8ud2lkZ2V0cyxcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc21hcnRGb3JtID0ge1xyXG4gICAgICBkaXJlY3Rpb246IFNtYXJ0Rm9ybVdpZGdldERpcmVjdGlvbi5ST1csXHJcbiAgICAgIHVzZU9uQmx1ckV2ZW50OiB0cnVlLFxyXG4gICAgICB1c2VPblZhbHVlQ2hhbmdlRXZlbnQ6IHRydWUsXHJcbiAgICAgIGNvbXBvbmVudE1vZGVsOiB7IGRhdGE6IHRoaXMuc2VydmljZS5tb2RlbD8uc2VsZWN0ZWRGaWVsZCB9LFxyXG4gICAgICB3aWRnZXRzOiBnZW5lcmF0ZWRXaWRnZXRzLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmZvcm1DaGlsZCA9IHRoaXMuY2ZTZXJ2aWNlLmNyZWF0ZUNvbXBvbmVudChcclxuICAgICAgdGhpcy5mb3JtQ2hpbGRWY1JlZiEsXHJcbiAgICAgIFNtYXJ0Zm9ybUNvbXBvbmVudCxcclxuICAgICAgbmV3IE1hcDxzdHJpbmcsIGFueT4oW1snc21hcnRGb3JtJywgdGhpcy5zbWFydEZvcm1dXSlcclxuICAgICk7XHJcblxyXG4gICAgaWYgKHRoaXMuc21hcnRmb3JtQ2hhbmdlU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMuc21hcnRmb3JtQ2hhbmdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zbWFydGZvcm1DaGFuZ2VTdWJzY3JpcHRpb24gPSB0aGlzLmZvcm1DaGlsZD8uaW5zdGFuY2Uub25CbHVyU3ViamVjdFxyXG4gICAgICA/LnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zYXZlKCk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIGlmICh0aGlzLnNtYXJ0Zm9ybVNvcGhpc3RpY2F0ZWRDaGFuZ2VTdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy5zbWFydGZvcm1Tb3BoaXN0aWNhdGVkQ2hhbmdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zbWFydGZvcm1Tb3BoaXN0aWNhdGVkQ2hhbmdlU3Vic2NyaXB0aW9uID1cclxuICAgICAgdGhpcy5mb3JtQ2hpbGQ/Lmluc3RhbmNlLnNvcGhpc3RpY2F0ZWRWYWx1ZUNoYW5nZVxyXG4gICAgICAgID8ucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKGNoYW5nZTogU29waGlzdGljYXRlZFZhbHVlQ2hhbmdlKSA9PiB7XHJcbiAgICAgICAgICBpZiAoY2hhbmdlLmtleSA9PT0gJ2V4cHJlc3Npb25EYXRhLmN1cnJlbnRPcGVyYXRpb24nKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2F2ZSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2F2ZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZm9ybUNoaWxkPy5pbnN0YW5jZS5zdWJtaXRGb3JtKGZhbHNlKTtcclxuICAgIHRoaXMuc2VydmljZS5wZWZvcm1XaWRnZXRBY3Rpb24oe1xyXG4gICAgICBjb2RlOiAnVVBEQVRFX0ZJTFRFUl9FWFBSRVNTSU9OJyxcclxuICAgICAgcGFyYW1zOiB7XHJcbiAgICAgICAgbW9kZWw6IHRoaXMuc2VydmljZS5tb2RlbD8uc2VsZWN0ZWRGaWVsZCxcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZXJ2aWNlLnBlZm9ybVdpZGdldEFjdGlvbih7XHJcbiAgICAgIGNvZGU6ICdSRU1PVkVfRklMVEVSX0VYUFJFU1NJT04nLFxyXG4gICAgICBwYXJhbXM6IHtcclxuICAgICAgICBtb2RlbDogdGhpcy5zZXJ2aWNlLm1vZGVsPy5zZWxlY3RlZEZpZWxkLFxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRGaWx0ZXJlZFVpQWN0aW9uTW9kZWxzKGZpbHRlclByZWRpY2F0ZTogKHVpQWN0aW9uOiBVaUFjdGlvbikgPT4gYm9vbGVhbik6IFVpQWN0aW9uTW9kZWxbXSB7XHJcbiAgICAvLyByZXR1cm4gdGhpcy5zZXJ2aWNlLm1vZGVsIS5wb3NzaWJsZUFjdGlvbnMhLmZpbHRlcihmaWx0ZXJQcmVkaWNhdGUpLm1hcCgodWlBY3Rpb246IFVpQWN0aW9uKSA9PiB7XHJcbiAgICAvLyAgIHJldHVybiB7XHJcbiAgICAvLyAgICAgc2VydmljZVRvVXNlOiB0aGlzLnNlcnZpY2UsXHJcbiAgICAvLyAgICAgdWlBY3Rpb24sXHJcbiAgICAvLyAgIH07XHJcbiAgICAvLyB9KTtcclxuICAgIHJldHVybiBbXTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHNhdmVGaWx0ZXIoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLmV4dHJhY3RGaWx0ZXJGaWVsZEZyb21Gb3JtTW9kZWwoKTtcclxuICAgIHRoaXMuc2VydmljZS5wZXJmb3JtVWlBY3Rpb25SZXF1ZXN0KHtcclxuICAgICAgY29kZTogRmlsdGVyRXhwcmVzc2lvbkJ1aWxkZXJBcGlBY3Rpb25zLlNBVkVfRVhQUkVTU0lPTl9GSUVMRF9MSVNULFxyXG4gICAgICBwYXJhbXM6IHtcclxuICAgICAgICBtb2RlbDogdGhpcy5zZXJ2aWNlLm1vZGVsISxcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb25zdHJ1Y3RGb3JtV2lkZ2V0KFxyXG4gICAga2V5OiBzdHJpbmcsXHJcbiAgICBsYWJlbDogc3RyaW5nLFxyXG4gICAgd2lkZ2V0VHlwZTogRmlsdGVyRXhwcmVzc2lvbkZpZWxkV2lkZ2V0VHlwZSxcclxuICAgIHBvc3NpYmxlVmFsdWVzOiBWYWx1ZVtdXHJcbiAgKTogU21hcnRGb3JtV2lkZ2V0PGFueT4ge1xyXG4gICAgbGV0IHR5cGU6IGFueSA9IHdpZGdldFR5cGU7XHJcblxyXG4gICAgaWYgKHR5cGUgPT09IEZpbHRlckV4cHJlc3Npb25GaWVsZFdpZGdldFR5cGUuRGF0ZSkge1xyXG4gICAgICB0eXBlID0gU21hcnRGb3JtV2lkZ2V0VHlwZS5EQVRFX1BJQ0tFUjtcclxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gRmlsdGVyRXhwcmVzc2lvbkZpZWxkV2lkZ2V0VHlwZS5EYXRlVGltZSkge1xyXG4gICAgICB0eXBlID0gU21hcnRGb3JtV2lkZ2V0VHlwZS5EQVRFX1RJTUVfUElDS0VSO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCB3aWRnZXQ6IFNtYXJ0Rm9ybVdpZGdldDxhbnk+ID0ge1xyXG4gICAgICBrZXksXHJcbiAgICAgIGxhYmVsLFxyXG4gICAgICB0eXBlLFxyXG4gICAgICB2YWx1ZTogJycsXHJcbiAgICAgIHNob3dMYWJlbDogdHJ1ZSxcclxuICAgICAgdmFsdWVMaXN0OiBwb3NzaWJsZVZhbHVlcy5tYXAoKHZhbHVlOiBWYWx1ZSkgPT4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICBrZXk6IHZhbHVlLm9iamVjdFVyaSA/IHZhbHVlLm9iamVjdFVyaSA6IHZhbHVlLmNvZGUhLFxyXG4gICAgICAgICAgbGFiZWw6IHZhbHVlLmRpc3BsYXlWYWx1ZSxcclxuICAgICAgICAgIHR5cGU6IFNtYXJ0Rm9ybVdpZGdldFR5cGUuSVRFTSxcclxuICAgICAgICAgIHZhbHVlOiB2YWx1ZS5vYmplY3RVcmkgPyB2YWx1ZS5vYmplY3RVcmkgOiB2YWx1ZS5jb2RlLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH0pLFxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gd2lkZ2V0O1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwidGFyZ2V0R3JvdXBDb250ZW50Q29udGFpbmVyXCI+XHJcbiAgPGgzPnt7IHNlcnZpY2UubW9kZWw/Lm1vZGVsPy5sYWJlbCB9fTwvaDM+XHJcblxyXG4gIDxkaXYgKm5nSWY9XCJzZXJ2aWNlLm1vZGVsPy50eXBlID09PSB0eXBlLlNpbXBsZTsgdGhlbiBzaW1wbGVGaWx0ZXI7IGVsc2UgY29tcGxleEZpbHRlclwiPjwvZGl2PlxyXG5cclxuICA8bmctdGVtcGxhdGUgI3NpbXBsZUZpbHRlcj5cclxuICAgIDxkaXYgY2xhc3M9XCJleHByZXNzaW9uc0NvbnRhaW5lclwiPlxyXG4gICAgICA8bmctdGVtcGxhdGUgI3NpbXBsZUZpbHRlckZyb21DaGlsZD48L25nLXRlbXBsYXRlPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuICA8bmctdGVtcGxhdGUgI2NvbXBsZXhGaWx0ZXI+XHJcbiAgICA8ZGl2IGNsYXNzPVwidWlBY3Rpb25zQmFyXCIgKm5nSWY9XCIhc2VydmljZS5tb2RlbD8ucmVhZE9ubHlcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInVpQWN0aW9uc0luc2lkZU9mQmFyXCI+XHJcbiAgICAgICAgPHNtYXJ0LXVpLWFjdGlvbi10b29sYmFyIFt1aUFjdGlvbk1vZGVsc109XCJ1aUFjdGlvbk1vZGVsc1wiPjwvc21hcnQtdWktYWN0aW9uLXRvb2xiYXI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2XHJcbiAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgc2VydmljZT8ubW9kZWw/Lm1vZGVsPy53b3JrcGxhY2VMaXN0Py5maWx0ZXJzPy5sZW5ndGg7XHJcbiAgICAgICAgdGhlbiB3aXRoUGFyYW1ldGVycztcclxuICAgICAgICBlbHNlIHdpdGhvdXRQYXJhbWV0ZXJzXHJcbiAgICAgIFwiXHJcbiAgICA+PC9kaXY+XHJcbiAgICA8bmctdGVtcGxhdGUgI3dpdGhvdXRQYXJhbWV0ZXJzPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwid2l0aG91dFBhcmFtZXRlcnNDb250YWluZXJcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdC1ib2R5XCI+IE3DqWcgbmluY3MgbWVnYWR2YSBwYXJhbcOpdGVyIDwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPG5nLXRlbXBsYXRlICN3aXRoUGFyYW1ldGVycz5cclxuICAgICAgPGRpdiBjbGFzcz1cIndpdGhQYXJhbWV0ZXJzQ29udGFpbmVyXCI+XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJleHByZXNzaW9uc0NvbnRhaW5lclwiXHJcbiAgICAgICAgICAqbmdJZj1cInNlcnZpY2U/Lm1vZGVsPy5tb2RlbD8ud29ya3BsYWNlTGlzdD8uZmlsdGVycz8ubGVuZ3RoXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8YXBwLWV4cHJlc3Npb24taXRlbXNcclxuICAgICAgICAgICAgW2l0ZW1zXT1cIihzZXJ2aWNlLm1vZGVsPy5tb2RlbD8ud29ya3BsYWNlTGlzdCkhLmZpbHRlcnNcIlxyXG4gICAgICAgICAgPjwvYXBwLWV4cHJlc3Npb24taXRlbXM+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImV4cHJlc3Npb25FZGl0b3JDb250YWluZXJcIj5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZm9ybT48L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgPGRpdiAqbmdJZj1cInNtYXJ0Rm9ybVwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJyZW1vdmUoKVwiIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiPlTDtnJsw6lzPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcbjwvZGl2PlxyXG4iXX0=
@@ -13746,42 +13746,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
13746
13746
  }] } });
13747
13747
 
13748
13748
  class SmartFilterEditorContentComponent {
13749
- constructor(layoutService) {
13749
+ constructor(layoutService, cfService) {
13750
13750
  this.layoutService = layoutService;
13751
+ this.cfService = cfService;
13751
13752
  this._destroy$ = new Subject();
13752
13753
  this.uiActionModels = [];
13753
13754
  this.expressionUiActionModels = [];
13754
13755
  this.type = FilterExpressionBuilderUiModel.TypeEnum;
13755
13756
  }
13756
- ngAfterViewInit() {
13757
- var _a, _b;
13758
- if (this.smartFilterChangeSubscription) {
13759
- this.smartFilterChangeSubscription.unsubscribe();
13760
- }
13761
- this.smartFilterChangeSubscription = (_a = this.simpleFilterFormChild.onBlurSubject) === null || _a === void 0 ? void 0 : _a.pipe(takeUntil(this._destroy$)).subscribe(() => {
13762
- this.saveFilter();
13763
- });
13764
- if (this.smartFilterSophisticatedChangeSubscription) {
13765
- this.smartFilterSophisticatedChangeSubscription.unsubscribe();
13766
- }
13767
- this.smartFilterSophisticatedChangeSubscription =
13768
- (_b = this.simpleFilterFormChild.sophisticatedValueChange) === null || _b === void 0 ? void 0 : _b.pipe(takeUntil(this._destroy$)).subscribe((change) => {
13769
- if (change.kind === 'selection') {
13770
- this.saveFilter();
13771
- }
13772
- });
13773
- }
13774
13757
  ngOnInit() {
13775
- this.service.load();
13776
13758
  this.service.modelChanged.pipe(takeUntil(this._destroy$)).subscribe(() => this.setUp());
13759
+ this.service.load();
13777
13760
  }
13778
13761
  ngOnDestroy() {
13779
13762
  this._destroy$.next();
13780
13763
  this._destroy$.complete();
13781
13764
  }
13782
13765
  setupSimpleFilter() {
13783
- var _a, _b, _c;
13784
- if (this.simpleFilterForm) {
13766
+ var _a, _b, _c, _d, _e;
13767
+ if (this.simpleFilterFormChild) {
13785
13768
  return;
13786
13769
  }
13787
13770
  let widgets = [];
@@ -13824,10 +13807,26 @@ class SmartFilterEditorContentComponent {
13824
13807
  useOnBlurEvent: true,
13825
13808
  widgets,
13826
13809
  };
13810
+ this.simpleFilterFormChild = this.cfService.createComponent(this.simpleFilterFormVcRef, SmartformComponent, new Map([['smartForm', this.simpleFilterForm]]));
13811
+ if (this.smartFilterChangeSubscription) {
13812
+ this.smartFilterChangeSubscription.unsubscribe();
13813
+ }
13814
+ this.smartFilterChangeSubscription = (_d = this.simpleFilterFormChild.instance.onBlurSubject) === null || _d === void 0 ? void 0 : _d.pipe(takeUntil(this._destroy$)).subscribe(() => {
13815
+ this.saveFilter();
13816
+ });
13817
+ if (this.smartFilterSophisticatedChangeSubscription) {
13818
+ this.smartFilterSophisticatedChangeSubscription.unsubscribe();
13819
+ }
13820
+ this.smartFilterSophisticatedChangeSubscription =
13821
+ (_e = this.simpleFilterFormChild.instance.sophisticatedValueChange) === null || _e === void 0 ? void 0 : _e.pipe(takeUntil(this._destroy$)).subscribe((change) => {
13822
+ if (change.kind === 'selection') {
13823
+ this.saveFilter();
13824
+ }
13825
+ });
13827
13826
  }
13828
13827
  extractFilterFieldFromFormModel() {
13829
13828
  var _a;
13830
- let simpleFilter = (_a = this.simpleFilterFormChild) === null || _a === void 0 ? void 0 : _a.submitForm(false).componentModel.data;
13829
+ let simpleFilter = (_a = this.simpleFilterFormChild) === null || _a === void 0 ? void 0 : _a.instance.submitForm(false).componentModel.data;
13831
13830
  let result = [];
13832
13831
  Object.keys(simpleFilter).forEach((key) => {
13833
13832
  result.push(simpleFilter[key]);
@@ -13891,24 +13890,26 @@ class SmartFilterEditorContentComponent {
13891
13890
  componentModel: { data: (_d = this.service.model) === null || _d === void 0 ? void 0 : _d.selectedField },
13892
13891
  widgets: generatedWidgets,
13893
13892
  };
13893
+ this.formChild = this.cfService.createComponent(this.formChildVcRef, SmartformComponent, new Map([['smartForm', this.smartForm]]));
13894
13894
  if (this.smartformChangeSubscription) {
13895
13895
  this.smartformChangeSubscription.unsubscribe();
13896
13896
  }
13897
- this.smartformChangeSubscription = (_f = (_e = this.formChild) === null || _e === void 0 ? void 0 : _e.onBlurSubject) === null || _f === void 0 ? void 0 : _f.pipe(takeUntil(this._destroy$)).subscribe(() => {
13897
+ this.smartformChangeSubscription = (_f = (_e = this.formChild) === null || _e === void 0 ? void 0 : _e.instance.onBlurSubject) === null || _f === void 0 ? void 0 : _f.pipe(takeUntil(this._destroy$)).subscribe(() => {
13898
13898
  this.save();
13899
13899
  });
13900
13900
  if (this.smartformSophisticatedChangeSubscription) {
13901
13901
  this.smartformSophisticatedChangeSubscription.unsubscribe();
13902
13902
  }
13903
- this.smartformSophisticatedChangeSubscription = (_h = (_g = this.formChild) === null || _g === void 0 ? void 0 : _g.sophisticatedValueChange) === null || _h === void 0 ? void 0 : _h.pipe(takeUntil(this._destroy$)).subscribe((change) => {
13904
- if (change.key === 'expressionData.currentOperation') {
13905
- this.save();
13906
- }
13907
- });
13903
+ this.smartformSophisticatedChangeSubscription =
13904
+ (_h = (_g = this.formChild) === null || _g === void 0 ? void 0 : _g.instance.sophisticatedValueChange) === null || _h === void 0 ? void 0 : _h.pipe(takeUntil(this._destroy$)).subscribe((change) => {
13905
+ if (change.key === 'expressionData.currentOperation') {
13906
+ this.save();
13907
+ }
13908
+ });
13908
13909
  }
13909
13910
  save() {
13910
13911
  var _a, _b;
13911
- (_a = this.formChild) === null || _a === void 0 ? void 0 : _a.submitForm(false);
13912
+ (_a = this.formChild) === null || _a === void 0 ? void 0 : _a.instance.submitForm(false);
13912
13913
  this.service.peformWidgetAction({
13913
13914
  code: 'UPDATE_FILTER_EXPRESSION',
13914
13915
  params: {
@@ -13971,19 +13972,19 @@ class SmartFilterEditorContentComponent {
13971
13972
  return widget;
13972
13973
  }
13973
13974
  }
13974
- SmartFilterEditorContentComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: SmartFilterEditorContentComponent, deps: [{ token: SmartformLayoutDefinitionService }], target: i0.ɵɵFactoryTarget.Component });
13975
- SmartFilterEditorContentComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: SmartFilterEditorContentComponent, selector: "smart-filter-expression-editor", inputs: { service: "service" }, viewQueries: [{ propertyName: "formChild", first: true, predicate: ["form"], descendants: true }, { propertyName: "simpleFilterFormChild", first: true, predicate: ["simpleFilterFromChild"], descendants: true }], ngImport: i0, template: "<div class=\"targetGroupContentContainer\">\r\n <h3>{{ service.model?.model?.label }}</h3>\r\n\r\n <div *ngIf=\"service.model?.type === type.Simple; then simpleFilter; else complexFilter\"></div>\r\n\r\n <ng-template #simpleFilter>\r\n <div class=\"expressionsContainer\">\r\n <smartform #simpleFilterFromChild [smartForm]=\"simpleFilterForm\"></smartform>\r\n </div>\r\n </ng-template>\r\n <ng-template #complexFilter>\r\n <div class=\"uiActionsBar\" *ngIf=\"!service.model?.readOnly\">\r\n <div class=\"uiActionsInsideOfBar\">\r\n <smart-ui-action-toolbar [uiActionModels]=\"uiActionModels\"></smart-ui-action-toolbar>\r\n </div>\r\n </div>\r\n <div\r\n *ngIf=\"\r\n service?.model?.model?.workplaceList?.filters?.length;\r\n then withParameters;\r\n else withoutParameters\r\n \"\r\n ></div>\r\n <ng-template #withoutParameters>\r\n <div class=\"withoutParametersContainer\">\r\n <span class=\"mat-body\"> M\u00E9g nincs megadva param\u00E9ter </span>\r\n </div>\r\n </ng-template>\r\n <ng-template #withParameters>\r\n <div class=\"withParametersContainer\">\r\n <div\r\n class=\"expressionsContainer\"\r\n *ngIf=\"service?.model?.model?.workplaceList?.filters?.length\"\r\n >\r\n <app-expression-items\r\n [items]=\"(service.model?.model?.workplaceList)!.filters\"\r\n ></app-expression-items>\r\n </div>\r\n <div class=\"expressionEditorContainer\">\r\n <smartform #form [smartForm]=\"smartForm\"></smartform>\r\n <div *ngIf=\"smartForm\">\r\n <button (click)=\"remove()\" mat-raised-button color=\"primary\">T\u00F6rl\u00E9s</button>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ng-template>\r\n</div>\r\n", styles: [".targetGroupContentContainer{padding:1.5rem;display:flex;flex-direction:column;gap:2.5rem;height:calc(100% - 3rem);overflow:auto;position:relative}.targetGroupContentContainer h3{margin:0;font-weight:600}.uiActionsBar{padding:1.5rem;border-radius:.25rem;background-color:var(--container-color)}.uiActionsBar,.uiActionsInsideOfBar{display:flex;flex-direction:row;gap:1rem}.uiActionsInsideOfBar{position:relative;left:-3rem}.section,.notSection{display:flex;flex-direction:row;gap:1rem}.section:before{content:\"\";border:1px solid #d9d9d9;align-self:stretch}.withoutParametersContainer{display:flex;flex-direction:column;padding:2rem;background-color:var(--container-color);border-radius:.25rem}.withoutParametersContainer .mat-body{font-weight:600;text-align:center}.withParametersContainer{display:flex;flex-direction:column;padding:1.5rem;background-color:var(--container-color);border-radius:.25rem;gap:.75rem}.expressionsContainer{display:flex;flex-direction:row;flex-wrap:wrap;gap:.75rem;margin-bottom:1px solid #cdcdcd}.expressionEditorContainer{display:flex;flex-direction:column;gap:.75rem}\n"], components: [{ type: SmartformComponent, selector: "smartform", inputs: ["smartForm"] }, { type: UiActionToolbarComponent, selector: "smart-ui-action-toolbar", inputs: ["uiActionModels", "uiActionDescriptorService"] }, { type: SmartFilterExpressionItemsComponent, selector: "app-expression-items", inputs: ["items"] }, { type: i3.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }], directives: [{ type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
13975
+ SmartFilterEditorContentComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: SmartFilterEditorContentComponent, deps: [{ token: SmartformLayoutDefinitionService }, { token: ComponentFactoryService }], target: i0.ɵɵFactoryTarget.Component });
13976
+ SmartFilterEditorContentComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: SmartFilterEditorContentComponent, selector: "smart-filter-expression-editor", inputs: { service: "service" }, viewQueries: [{ propertyName: "formChildVcRef", first: true, predicate: ["form"], descendants: true, read: ViewContainerRef }, { propertyName: "simpleFilterFormVcRef", first: true, predicate: ["simpleFilterFromChild"], descendants: true, read: ViewContainerRef }], ngImport: i0, template: "<div class=\"targetGroupContentContainer\">\r\n <h3>{{ service.model?.model?.label }}</h3>\r\n\r\n <div *ngIf=\"service.model?.type === type.Simple; then simpleFilter; else complexFilter\"></div>\r\n\r\n <ng-template #simpleFilter>\r\n <div class=\"expressionsContainer\">\r\n <ng-template #simpleFilterFromChild></ng-template>\r\n </div>\r\n </ng-template>\r\n <ng-template #complexFilter>\r\n <div class=\"uiActionsBar\" *ngIf=\"!service.model?.readOnly\">\r\n <div class=\"uiActionsInsideOfBar\">\r\n <smart-ui-action-toolbar [uiActionModels]=\"uiActionModels\"></smart-ui-action-toolbar>\r\n </div>\r\n </div>\r\n <div\r\n *ngIf=\"\r\n service?.model?.model?.workplaceList?.filters?.length;\r\n then withParameters;\r\n else withoutParameters\r\n \"\r\n ></div>\r\n <ng-template #withoutParameters>\r\n <div class=\"withoutParametersContainer\">\r\n <span class=\"mat-body\"> M\u00E9g nincs megadva param\u00E9ter </span>\r\n </div>\r\n </ng-template>\r\n <ng-template #withParameters>\r\n <div class=\"withParametersContainer\">\r\n <div\r\n class=\"expressionsContainer\"\r\n *ngIf=\"service?.model?.model?.workplaceList?.filters?.length\"\r\n >\r\n <app-expression-items\r\n [items]=\"(service.model?.model?.workplaceList)!.filters\"\r\n ></app-expression-items>\r\n </div>\r\n <div class=\"expressionEditorContainer\">\r\n <ng-template #form></ng-template>\r\n <div *ngIf=\"smartForm\">\r\n <button (click)=\"remove()\" mat-raised-button color=\"primary\">T\u00F6rl\u00E9s</button>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ng-template>\r\n</div>\r\n", styles: [".targetGroupContentContainer{padding:1.5rem;display:flex;flex-direction:column;gap:2.5rem;height:calc(100% - 3rem);overflow:auto;position:relative}.targetGroupContentContainer h3{margin:0;font-weight:600}.uiActionsBar{padding:1.5rem;border-radius:.25rem;background-color:var(--container-color)}.uiActionsBar,.uiActionsInsideOfBar{display:flex;flex-direction:row;gap:1rem}.uiActionsInsideOfBar{position:relative;left:-3rem}.section,.notSection{display:flex;flex-direction:row;gap:1rem}.section:before{content:\"\";border:1px solid #d9d9d9;align-self:stretch}.withoutParametersContainer{display:flex;flex-direction:column;padding:2rem;background-color:var(--container-color);border-radius:.25rem}.withoutParametersContainer .mat-body{font-weight:600;text-align:center}.withParametersContainer{display:flex;flex-direction:column;padding:1.5rem;background-color:var(--container-color);border-radius:.25rem;gap:.75rem}.expressionsContainer{display:flex;flex-direction:row;flex-wrap:wrap;gap:.75rem;margin-bottom:1px solid #cdcdcd}.expressionEditorContainer{display:flex;flex-direction:column;gap:.75rem}\n"], components: [{ type: UiActionToolbarComponent, selector: "smart-ui-action-toolbar", inputs: ["uiActionModels", "uiActionDescriptorService"] }, { type: SmartFilterExpressionItemsComponent, selector: "app-expression-items", inputs: ["items"] }, { type: i3.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }], directives: [{ type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
13976
13977
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: SmartFilterEditorContentComponent, decorators: [{
13977
13978
  type: Component,
13978
- args: [{ selector: 'smart-filter-expression-editor', template: "<div class=\"targetGroupContentContainer\">\r\n <h3>{{ service.model?.model?.label }}</h3>\r\n\r\n <div *ngIf=\"service.model?.type === type.Simple; then simpleFilter; else complexFilter\"></div>\r\n\r\n <ng-template #simpleFilter>\r\n <div class=\"expressionsContainer\">\r\n <smartform #simpleFilterFromChild [smartForm]=\"simpleFilterForm\"></smartform>\r\n </div>\r\n </ng-template>\r\n <ng-template #complexFilter>\r\n <div class=\"uiActionsBar\" *ngIf=\"!service.model?.readOnly\">\r\n <div class=\"uiActionsInsideOfBar\">\r\n <smart-ui-action-toolbar [uiActionModels]=\"uiActionModels\"></smart-ui-action-toolbar>\r\n </div>\r\n </div>\r\n <div\r\n *ngIf=\"\r\n service?.model?.model?.workplaceList?.filters?.length;\r\n then withParameters;\r\n else withoutParameters\r\n \"\r\n ></div>\r\n <ng-template #withoutParameters>\r\n <div class=\"withoutParametersContainer\">\r\n <span class=\"mat-body\"> M\u00E9g nincs megadva param\u00E9ter </span>\r\n </div>\r\n </ng-template>\r\n <ng-template #withParameters>\r\n <div class=\"withParametersContainer\">\r\n <div\r\n class=\"expressionsContainer\"\r\n *ngIf=\"service?.model?.model?.workplaceList?.filters?.length\"\r\n >\r\n <app-expression-items\r\n [items]=\"(service.model?.model?.workplaceList)!.filters\"\r\n ></app-expression-items>\r\n </div>\r\n <div class=\"expressionEditorContainer\">\r\n <smartform #form [smartForm]=\"smartForm\"></smartform>\r\n <div *ngIf=\"smartForm\">\r\n <button (click)=\"remove()\" mat-raised-button color=\"primary\">T\u00F6rl\u00E9s</button>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ng-template>\r\n</div>\r\n", styles: [".targetGroupContentContainer{padding:1.5rem;display:flex;flex-direction:column;gap:2.5rem;height:calc(100% - 3rem);overflow:auto;position:relative}.targetGroupContentContainer h3{margin:0;font-weight:600}.uiActionsBar{padding:1.5rem;border-radius:.25rem;background-color:var(--container-color)}.uiActionsBar,.uiActionsInsideOfBar{display:flex;flex-direction:row;gap:1rem}.uiActionsInsideOfBar{position:relative;left:-3rem}.section,.notSection{display:flex;flex-direction:row;gap:1rem}.section:before{content:\"\";border:1px solid #d9d9d9;align-self:stretch}.withoutParametersContainer{display:flex;flex-direction:column;padding:2rem;background-color:var(--container-color);border-radius:.25rem}.withoutParametersContainer .mat-body{font-weight:600;text-align:center}.withParametersContainer{display:flex;flex-direction:column;padding:1.5rem;background-color:var(--container-color);border-radius:.25rem;gap:.75rem}.expressionsContainer{display:flex;flex-direction:row;flex-wrap:wrap;gap:.75rem;margin-bottom:1px solid #cdcdcd}.expressionEditorContainer{display:flex;flex-direction:column;gap:.75rem}\n"] }]
13979
- }], ctorParameters: function () { return [{ type: SmartformLayoutDefinitionService }]; }, propDecorators: { service: [{
13979
+ args: [{ selector: 'smart-filter-expression-editor', template: "<div class=\"targetGroupContentContainer\">\r\n <h3>{{ service.model?.model?.label }}</h3>\r\n\r\n <div *ngIf=\"service.model?.type === type.Simple; then simpleFilter; else complexFilter\"></div>\r\n\r\n <ng-template #simpleFilter>\r\n <div class=\"expressionsContainer\">\r\n <ng-template #simpleFilterFromChild></ng-template>\r\n </div>\r\n </ng-template>\r\n <ng-template #complexFilter>\r\n <div class=\"uiActionsBar\" *ngIf=\"!service.model?.readOnly\">\r\n <div class=\"uiActionsInsideOfBar\">\r\n <smart-ui-action-toolbar [uiActionModels]=\"uiActionModels\"></smart-ui-action-toolbar>\r\n </div>\r\n </div>\r\n <div\r\n *ngIf=\"\r\n service?.model?.model?.workplaceList?.filters?.length;\r\n then withParameters;\r\n else withoutParameters\r\n \"\r\n ></div>\r\n <ng-template #withoutParameters>\r\n <div class=\"withoutParametersContainer\">\r\n <span class=\"mat-body\"> M\u00E9g nincs megadva param\u00E9ter </span>\r\n </div>\r\n </ng-template>\r\n <ng-template #withParameters>\r\n <div class=\"withParametersContainer\">\r\n <div\r\n class=\"expressionsContainer\"\r\n *ngIf=\"service?.model?.model?.workplaceList?.filters?.length\"\r\n >\r\n <app-expression-items\r\n [items]=\"(service.model?.model?.workplaceList)!.filters\"\r\n ></app-expression-items>\r\n </div>\r\n <div class=\"expressionEditorContainer\">\r\n <ng-template #form></ng-template>\r\n <div *ngIf=\"smartForm\">\r\n <button (click)=\"remove()\" mat-raised-button color=\"primary\">T\u00F6rl\u00E9s</button>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ng-template>\r\n</div>\r\n", styles: [".targetGroupContentContainer{padding:1.5rem;display:flex;flex-direction:column;gap:2.5rem;height:calc(100% - 3rem);overflow:auto;position:relative}.targetGroupContentContainer h3{margin:0;font-weight:600}.uiActionsBar{padding:1.5rem;border-radius:.25rem;background-color:var(--container-color)}.uiActionsBar,.uiActionsInsideOfBar{display:flex;flex-direction:row;gap:1rem}.uiActionsInsideOfBar{position:relative;left:-3rem}.section,.notSection{display:flex;flex-direction:row;gap:1rem}.section:before{content:\"\";border:1px solid #d9d9d9;align-self:stretch}.withoutParametersContainer{display:flex;flex-direction:column;padding:2rem;background-color:var(--container-color);border-radius:.25rem}.withoutParametersContainer .mat-body{font-weight:600;text-align:center}.withParametersContainer{display:flex;flex-direction:column;padding:1.5rem;background-color:var(--container-color);border-radius:.25rem;gap:.75rem}.expressionsContainer{display:flex;flex-direction:row;flex-wrap:wrap;gap:.75rem;margin-bottom:1px solid #cdcdcd}.expressionEditorContainer{display:flex;flex-direction:column;gap:.75rem}\n"] }]
13980
+ }], ctorParameters: function () { return [{ type: SmartformLayoutDefinitionService }, { type: ComponentFactoryService }]; }, propDecorators: { service: [{
13980
13981
  type: Input
13981
- }], formChild: [{
13982
+ }], formChildVcRef: [{
13982
13983
  type: ViewChild,
13983
- args: ['form']
13984
- }], simpleFilterFormChild: [{
13984
+ args: ['form', { read: ViewContainerRef }]
13985
+ }], simpleFilterFormVcRef: [{
13985
13986
  type: ViewChild,
13986
- args: ['simpleFilterFromChild']
13987
+ args: ['simpleFilterFromChild', { read: ViewContainerRef }]
13987
13988
  }] } });
13988
13989
 
13989
13990
  class SmartFilterEditorModule {