@dangl/angular-ava 0.1.1-fe--1-add-tree-p0091 → 1.0.0-beta0097

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1 +1,181 @@
1
- # Dangl.AngularAva
1
+ # Dangl.AngularAva
2
+
3
+ [![Node version](https://img.shields.io/npm/v/@dangl/angular-ava)](https://www.npmjs.com/package/@dangl/angular-ava)
4
+
5
+ `@dangl/angular-ava` is an UI library for Angular applications. It's used to render trees of AVA Projects. _AVA_ in German stands for _Ausschreibung, Vergabe & Abrechnung_ (_Tendering, awarding & billing_), they represent services and elements of construction projects.
6
+
7
+ [AVACloud by Dangl**IT** GmbH](https://www.dangl-it.com/products/avacloud-gaeb-saas/) is one way of creating such data structures.
8
+
9
+ ## Usage
10
+
11
+ ### Import the Module
12
+
13
+ ```typescript
14
+ import { AngularAvaModule } from '../../projects/angular-ava/src/lib/angular-ava.module';
15
+
16
+ @NgModule({
17
+ declarations: [AppComponent],
18
+ imports: [AngularAvaModule],
19
+ providers: [],
20
+ bootstrap: [AppComponent]
21
+ })
22
+ export class AppModule {}
23
+ ```
24
+
25
+ ### Use the Component
26
+
27
+ ```html
28
+ <ava-tree [project]="projectData" (selectClick)="selected($event, 0)">
29
+ </ava-tree>
30
+ ```
31
+
32
+ `projectData` must be of type `ProjectDto`.
33
+
34
+ ### Input Parameters
35
+
36
+ ```typescript
37
+ /**
38
+ * This is the main data element for the tree structure. You should supply a ProjectDto with
39
+ * exactly one service specification in it.
40
+ */
41
+ @Input() project: ProjectDto | null = null;
42
+
43
+ /**
44
+ * Optionally, you can supply a map of expansion states for the tree. The keys should be the
45
+ * id properties of the elements in the tree, and the values should be true if the element is
46
+ * expanded, and false if it is collapsed.
47
+ */
48
+ @Input() expansionState: { [id: string]: boolean } = {};
49
+
50
+ /**
51
+ * Optionally, you can supply the id of the node that should be selected in the tree initially.
52
+ */
53
+ @Input() selectedNodeId: string | null = null;
54
+
55
+ /**
56
+ * Optional, defaults to 20px. If this is set, then the tree will be indented by the given value each level.
57
+ * This can be any valid CSS value for the padding-left property, such as 20px, 1em, or 5%.
58
+ *
59
+ */
60
+ @Input() indent = '20px';
61
+
62
+ /**
63
+ * Optional, you can supply a color to be used as the background color for the selected line. Defaults to the primary
64
+ * color from the Material theme, which is #00acc1.
65
+ */
66
+ @Input() selectedColor: string | null = null;
67
+
68
+ /**
69
+ * You can specify which view type to use for the tree. The default is ModeViewType.Tree, but you can also use
70
+ * ModeViewType.List or ModeViewType.Table.
71
+ */
72
+ @Input() modeView: ModeViewType = ModeViewType.Tree;
73
+
74
+ /** Optional, defaults to true. If this is disabled, then the double click event for elements is not raised,
75
+ * and clicking on an elemt sends an immediate result since the component has not to wait and check if a double click event
76
+ * is fired.
77
+ */
78
+ @Input() allowDblClick = true;
79
+
80
+ /**
81
+ * If this is set to true, then the tree will be in selection mode, and the user can select elements
82
+ * by clicking on them. The selected elements will be emitted in the selectedElementsChanged event.
83
+ */
84
+ @Input() isSelectionMode = false;
85
+
86
+ /**
87
+ * You can optionally supply a list of elements that should be selected initially. This is only used if
88
+ * isSelectionMode is true.
89
+ */
90
+ @Input() initiallySelectedElements: SelectedElement[] | null = null;
91
+
92
+ /**
93
+ * You can supply a map of strings to be used for the text in the tree. This allows you to translate
94
+ * the text in the tree to other languages.
95
+ * {
96
+ * textSearch: string,
97
+ * textNothing: string,
98
+ * textNothingFiltered: string,
99
+ * textAll: string,
100
+ * tooltipAllOpen: string,
101
+ * tooltipAllClose: string,
102
+ * tooltipAllAdd:string,
103
+ * tooltipAllRemove: string,
104
+ * }
105
+ */
106
+ @Input() set textWords(words: ITextWords | null)
107
+
108
+ /**
109
+ * Defaults to true. If this is enabled, then navigating in the tree with the keyboard only works
110
+ * if the mouse is over the tree area. This limitation is useful if you have multiple trees or other components
111
+ * that might be using keyboard input.
112
+ */
113
+ @Input() mouseAwareKeyboardControl = true;
114
+
115
+ /**
116
+ * With this parameter, you can configure which keys will be listenend to to switch the tree elements,
117
+ * and also to disable the functionality of the keys */
118
+ @Input() set customKeyboardOperationConfig(config: IKeyboardOperationConfig) {
119
+ this.keyboardOperationService.mergeConfigOperation(config);
120
+ }
121
+
122
+ /**
123
+ * You can supply custom filters that are processed when the filter input is changed. Default filters are used
124
+ * that check for short text and item number matches, and you can either add custom filters or replace the default ones.
125
+ */
126
+ @Input() listFilterFunc = DEFAULT_FILTERS;
127
+
128
+ /**
129
+ * Optional. For table views, this allows you to add custom columns to the table.
130
+ * addTableColumns: Array of objects
131
+ * {
132
+ * name: string, // name of column
133
+ * title: string, // showed title of column
134
+ * align?: string, // optional alight: left(default) / center / right
135
+ * numberFormat?: string // optional format of number value, example: '1.2-2'
136
+ * }
137
+ */
138
+ @Input() addTableColumns: TableColumnType[] = [];
139
+
140
+ /**
141
+ * This allows you to supply a list of functions that can be used to change the appearance of elements.
142
+ * They objects contain a predicate function that is evaluated, along with an option to configure the
143
+ * appearance of the element.
144
+ * functionView: Array of objects
145
+ * {
146
+ * name: string, // name of view part: you can add/remove it when it need
147
+ * func: (element: any, result?: any) => boolean, // this filter function calculate condition to change view
148
+ * view: {
149
+ * iconName?: string, // changed name of icon
150
+ * iconColor?: string, // changed color of icon
151
+ * textBold?: string, // changed weight of text
152
+ * textColor?: string // changed color of text
153
+ * }
154
+ * }
155
+ */
156
+ @Input() functionView: IFunctionViewLine[] | null = null;
157
+ ```
158
+
159
+ ### Output Parameters
160
+
161
+ ```typescript
162
+ /**
163
+ * This is emitted when an element is selected by clicking on it. The selected element is emitted as the event value.
164
+ */
165
+ @Output() selectClick = new EventEmitter<IElementDto | null>();
166
+ /**
167
+ * This is emitted when an element is selected by double clicking on it. The selected element is emitted as the event value.
168
+ */
169
+ @Output() selectDblClick = new EventEmitter<IElementDto>();
170
+ /**
171
+ * This is emitted when an element is selected by right clicking on it. The selected element is emitted as the event value.
172
+ */
173
+ @Output() contextMenuEvent = new EventEmitter<ContextMenuDataType>();
174
+ /**
175
+ * This is emitted when the selected elements in the tree are changed. The selected elements are emitted as the event value.
176
+ * Selected elements are elements whose checkboxes are checked, and are different than elements that are in an active selection state.
177
+ * Typcial use cases for this include e.g. selecting multiple elements within a service specification without
178
+ * actually focussing them, e.g. for further processing.
179
+ */
180
+ @Output() selectedElementsChanged = new EventEmitter<SelectedElement[]>();
181
+ ```
@@ -143,10 +143,25 @@ export class AvaTreeComponent {
143
143
  * }
144
144
  */
145
145
  this.functionView = null;
146
- this.selectClick = new EventEmitter(); // event after element selected by click
147
- this.selectDblClick = new EventEmitter(); // event after element selected by double click
148
- this.contextMenuEvent = new EventEmitter(); // event after element call context menu by right button click
149
- this.selectedElementsChanged = new EventEmitter(); // event after changed selecting in selecting mode
146
+ /**
147
+ * This is emitted when an element is selected by clicking on it. The selected element is emitted as the event value.
148
+ */
149
+ this.selectClick = new EventEmitter();
150
+ /**
151
+ * This is emitted when an element is selected by double clicking on it. The selected element is emitted as the event value.
152
+ */
153
+ this.selectDblClick = new EventEmitter();
154
+ /**
155
+ * This is emitted when an element is selected by right clicking on it. The selected element is emitted as the event value.
156
+ */
157
+ this.contextMenuEvent = new EventEmitter();
158
+ /**
159
+ * This is emitted when the selected elements in the tree are changed. The selected elements are emitted as the event value.
160
+ * Selected elements are elements whose checkboxes are checked, and are different than elements that are in an active selection state.
161
+ * Typcial use cases for this include e.g. selecting multiple elements within a service specification without
162
+ * actually focussing them, e.g. for further processing.
163
+ */
164
+ this.selectedElementsChanged = new EventEmitter();
150
165
  this.selectedElement = null;
151
166
  this.isListenKeyboard = false;
152
167
  this.isEmiteSelectedElements = false;
@@ -409,4 +424,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImpor
409
424
  type: ViewChild,
410
425
  args: ['avaTreeFilterInput']
411
426
  }] } });
412
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZhLXRyZWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1hdmEvc3JjL2xpYi9hdmEtdHJlZS90cmVlL2NvbXBvbmVudHMvYXZhLXRyZWUvYXZhLXRyZWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1hdmEvc3JjL2xpYi9hdmEtdHJlZS90cmVlL2NvbXBvbmVudHMvYXZhLXRyZWUvYXZhLXRyZWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUtMLE1BQU0sRUFDTixJQUFJLEVBRUosU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUxRixPQUFPLEVBQUUsZUFBZSxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFdEUsT0FBTyxFQUlMLFlBQVksRUFLYixNQUFNLGFBQWEsQ0FBQztBQUVyQixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUN0RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQTRCLHdCQUF3QixFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDdEksT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDN0UsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNENBQTRDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUXRGLE1BQU0sT0FBTyxnQkFBZ0I7SUF3RDNCOzs7Ozs7Ozs7Ozs7O09BYUc7SUFD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RyxjQUFjO3NCQUF0QixLQUFLO2dCQVlHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBa0JHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRUksV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyx1QkFBdUI7c0JBQWhDLE1BQU07Z0JBQ3NCLGNBQWM7c0JBQTFDLFNBQVM7dUJBQUMsZ0JBQWdCO2dCQUNFLGNBQWM7c0JBQTFDLFNBQVM7dUJBQUMsZ0JBQWdCO2dCQUNNLGtCQUFrQjtzQkFBbEQsU0FBUzt1QkFBQyxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBTZWxmLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFJlcGxheVN1YmplY3QsIFN1YmplY3QsIGRlYm91bmNlVGltZSwgZmlsdGVyLCBmcm9tRXZlbnQsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBERUZBVUxUX0ZJTFRFUlMsIERFRkFVTFRfVEVYVF9XT1JEUyB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBJVGV4dFdvcmRzIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2RlZmF1bHRUZXh0V29yZHMnO1xuaW1wb3J0IHtcbiAgQ29udGV4dE1lbnVEYXRhVHlwZSxcbiAgSUVsZW1lbnREdG8sXG4gIElGdW5jdGlvblZpZXdMaW5lLFxuICBNb2RlVmlld1R5cGUsXG4gIFByb2plY3REdG8sXG4gIFNlbGVjdGVkRWxlbWVudCxcbiAgU2VydmljZVNwZWNpZmljYXRpb25EdG8sXG4gIFRhYmxlQ29sdW1uVHlwZVxufSBmcm9tICcuLi8uLi9tb2RlbCc7XG5pbXBvcnQgeyBTZWxlY3RpbmdFbGVtZW50c1R5cGUgfSBmcm9tICcuLi8uLi9tb2RlbC9zZWxlY3RpbmcubW9kZWwnO1xuaW1wb3J0IHsgRXhwYW5kUGFyZW50R3JvdXBTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZXhwYW5kLXBhcmVudC1ncm91cC5zZXJ2aWNlJztcbmltcG9ydCB7IEZsYXRFbGVtZW50c1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mbGF0LWVsZW1lbnRzLnNlcnZpY2UnO1xuaW1wb3J0IHsgSUtleWJvYXJkT3BlcmF0aW9uQ29uZmlnLCBLZXlib2FyZE9wZXJhdGlvblNlcnZpY2UsIEtleWJvYXJkT3BlcmF0aW9uVHlwZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2tleWJvYXJkLW9wZXJhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFNlbGVjdEVsZW1lbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2VsZWN0LWVsZW1lbnQuc2VydmljZSc7XG5pbXBvcnQgeyBUcmVlTm9kZVNlbGVjdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90cmVlLW5vZGUtc2VsZWN0aW9uLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhdmEtdHJlZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9hdmEtdHJlZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2F2YS10cmVlLmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW0ZsYXRFbGVtZW50c1NlcnZpY2UsIFNlbGVjdEVsZW1lbnRTZXJ2aWNlLCBUcmVlTm9kZVNlbGVjdGlvblNlcnZpY2UsIEV4cGFuZFBhcmVudEdyb3VwU2VydmljZSwgS2V5Ym9hcmRPcGVyYXRpb25TZXJ2aWNlXVxufSlcbmV4cG9ydCBjbGFzcyBBdmFUcmVlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCB7XG4gIC8qKlxuICAgKiBUaGlzIGlzIHRoZSBtYWluIGRhdGEgZWxlbWVudCBmb3IgdGhlIHRyZWUgc3RydWN0dXJlLiBZb3Ugc2hvdWxkIHN1cHBseSBhIFByb2plY3REdG8gd2l0aFxuICAgKiBleGFjdGx5IG9uZSBzZXJ2aWNlIHNwZWNpZmljYXRpb24gaW4gaXQuXG4gICAqL1xuICBASW5wdXQoKSBwcm9qZWN0OiBQcm9qZWN0RHRvIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsbHksIHlvdSBjYW4gc3VwcGx5IGEgbWFwIG9mIGV4cGFuc2lvbiBzdGF0ZXMgZm9yIHRoZSB0cmVlLiBUaGUga2V5cyBzaG91bGQgYmUgdGhlXG4gICAqIGlkIHByb3BlcnRpZXMgb2YgdGhlIGVsZW1lbnRzIGluIHRoZSB0cmVlLCBhbmQgdGhlIHZhbHVlcyBzaG91bGQgYmUgdHJ1ZSBpZiB0aGUgZWxlbWVudCBpc1xuICAgKiBleHBhbmRlZCwgYW5kIGZhbHNlIGlmIGl0IGlzIGNvbGxhcHNlZC5cbiAgICovXG4gIEBJbnB1dCgpIGV4cGFuc2lvblN0YXRlOiB7IFtpZDogc3RyaW5nXTogYm9vbGVhbiB9ID0ge307XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsbHksIHlvdSBjYW4gc3VwcGx5IHRoZSBpZCBvZiB0aGUgbm9kZSB0aGF0IHNob3VsZCBiZSBzZWxlY3RlZCBpbiB0aGUgdHJlZSBpbml0aWFsbHkuXG4gICAqL1xuICBASW5wdXQoKSBzZWxlY3RlZE5vZGVJZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsLCBkZWZhdWx0cyB0byAyMHB4LiBJZiB0aGlzIGlzIHNldCwgdGhlbiB0aGUgdHJlZSB3aWxsIGJlIGluZGVudGVkIGJ5IHRoZSBnaXZlbiB2YWx1ZSBlYWNoIGxldmVsLlxuICAgKiBUaGlzIGNhbiBiZSBhbnkgdmFsaWQgQ1NTIHZhbHVlIGZvciB0aGUgcGFkZGluZy1sZWZ0IHByb3BlcnR5LCBzdWNoIGFzIDIwcHgsIDFlbSwgb3IgNSUuXG4gICAqXG4gICAqL1xuICBASW5wdXQoKSBpbmRlbnQgPSAnMjBweCc7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsLCB5b3UgY2FuIHN1cHBseSBhIGNvbG9yIHRvIGJlIHVzZWQgYXMgdGhlIGJhY2tncm91bmQgY29sb3IgZm9yIHRoZSBzZWxlY3RlZCBsaW5lLiBEZWZhdWx0cyB0byB0aGUgcHJpbWFyeVxuICAgKiBjb2xvciBmcm9tIHRoZSBNYXRlcmlhbCB0aGVtZSwgd2hpY2ggaXMgIzAwYWNjMS5cbiAgICovXG4gIEBJbnB1dCgpIHNlbGVjdGVkQ29sb3I6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBZb3UgY2FuIHNwZWNpZnkgd2hpY2ggdmlldyB0eXBlIHRvIHVzZSBmb3IgdGhlIHRyZWUuIFRoZSBkZWZhdWx0IGlzIE1vZGVWaWV3VHlwZS5UcmVlLCBidXQgeW91IGNhbiBhbHNvIHVzZVxuICAgKiBNb2RlVmlld1R5cGUuTGlzdCBvciBNb2RlVmlld1R5cGUuVGFibGUuXG4gICAqL1xuICBASW5wdXQoKSBtb2RlVmlldzogTW9kZVZpZXdUeXBlID0gTW9kZVZpZXdUeXBlLlRyZWU7XG5cbiAgLyoqIE9wdGlvbmFsLCBkZWZhdWx0cyB0byB0cnVlLiBJZiB0aGlzIGlzIGRpc2FibGVkLCB0aGVuIHRoZSBkb3VibGUgY2xpY2sgZXZlbnQgZm9yIGVsZW1lbnRzIGlzIG5vdCByYWlzZWQsXG4gICAqIGFuZCBjbGlja2luZyBvbiBhbiBlbGVtdCBzZW5kcyBhbiBpbW1lZGlhdGUgcmVzdWx0IHNpbmNlIHRoZSBjb21wb25lbnQgaGFzIG5vdCB0byB3YWl0IGFuZCBjaGVjayBpZiBhIGRvdWJsZSBjbGljayBldmVudFxuICAgKiBpcyBmaXJlZC5cbiAgICovXG4gIEBJbnB1dCgpIGFsbG93RGJsQ2xpY2sgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBJZiB0aGlzIGlzIHNldCB0byB0cnVlLCB0aGVuIHRoZSB0cmVlIHdpbGwgYmUgaW4gc2VsZWN0aW9uIG1vZGUsIGFuZCB0aGUgdXNlciBjYW4gc2VsZWN0IGVsZW1lbnRzXG4gICAqIGJ5IGNsaWNraW5nIG9uIHRoZW0uIFRoZSBzZWxlY3RlZCBlbGVtZW50cyB3aWxsIGJlIGVtaXR0ZWQgaW4gdGhlIHNlbGVjdGVkRWxlbWVudHNDaGFuZ2VkIGV2ZW50LlxuICAgKi9cbiAgQElucHV0KCkgaXNTZWxlY3Rpb25Nb2RlID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFlvdSBjYW4gb3B0aW9uYWxseSBzdXBwbHkgYSBsaXN0IG9mIGVsZW1lbnRzIHRoYXQgc2hvdWxkIGJlIHNlbGVjdGVkIGluaXRpYWxseS4gVGhpcyBpcyBvbmx5IHVzZWQgaWZcbiAgICogaXNTZWxlY3Rpb25Nb2RlIGlzIHRydWUuXG4gICAqL1xuICBASW5wdXQoKSBpbml0aWFsbHlTZWxlY3RlZEVsZW1lbnRzOiBTZWxlY3RlZEVsZW1lbnRbXSB8IG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBZb3UgY2FuIHN1cHBseSBhIG1hcCBvZiBzdHJpbmdzIHRvIGJlIHVzZWQgZm9yIHRoZSB0ZXh0IGluIHRoZSB0cmVlLiBUaGlzIGFsbG93cyB5b3UgdG8gdHJhbnNsYXRlXG4gICAqIHRoZSB0ZXh0IGluIHRoZSB0cmVlIHRvIG90aGVyIGxhbmd1YWdlcy5cbiAgICoge1xuICAgKiAgIHRleHRTZWFyY2g6IHN0cmluZyxcbiAgICogICB0ZXh0Tm90aGluZzogc3RyaW5nLFxuICAgKiAgIHRleHROb3RoaW5nRmlsdGVyZWQ6IHN0cmluZyxcbiAgICogICB0ZXh0QWxsOiBzdHJpbmcsXG4gICAqICAgdG9vbHRpcEFsbE9wZW46IHN0cmluZyxcbiAgICogICB0b29sdGlwQWxsQ2xvc2U6IHN0cmluZyxcbiAgICogICB0b29sdGlwQWxsQWRkOnN0cmluZyxcbiAgICogICB0b29sdGlwQWxsUmVtb3ZlOiBzdHJpbmcsXG4gICAqIH1cbiAgICovXG4gIEBJbnB1dCgpIHNldCB0ZXh0V29yZHMod29yZHM6IElUZXh0V29yZHMgfCBudWxsKSB7XG4gICAgdGhpcy5fdGV4dFdvcmRzID0geyAuLi50aGlzLnRleHRXb3JkcywgLi4ud29yZHMgfTtcbiAgfSAvLyBhbGxvdyB0byB0cmFuc2xhdGUgYWxsIHRleHRzIHRvIG90aGVyIGxhbmd1YWdlXG4gIGdldCB0ZXh0V29yZHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RleHRXb3JkcztcbiAgfVxuICBwcml2YXRlIF90ZXh0V29yZHM6IElUZXh0V29yZHMgfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogRGVmYXVsdHMgdG8gdHJ1ZS4gSWYgdGhpcyBpcyBlbmFibGVkLCB0aGVuIG5hdmlnYXRpbmcgaW4gdGhlIHRyZWUgd2l0aCB0aGUga2V5Ym9hcmQgb25seSB3b3Jrc1xuICAgKiBpZiB0aGUgbW91c2UgaXMgb3ZlciB0aGUgdHJlZSBhcmVhLiBUaGlzIGxpbWl0YXRpb24gaXMgdXNlZnVsIGlmIHlvdSBoYXZlIG11bHRpcGxlIHRyZWVzIG9yIG90aGVyIGNvbXBvbmVudHNcbiAgICogdGhhdCBtaWdodCBiZSB1c2luZyBrZXlib2FyZCBpbnB1dC5cbiAgICovXG4gIEBJbnB1dCgpIG1vdXNlQXdhcmVLZXlib2FyZENvbnRyb2wgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBXaXRoIHRoaXMgcGFyYW1ldGVyLCB5b3UgY2FuIGNvbmZpZ3VyZSB3aGljaCBrZXlzIHdpbGwgYmUgbGlzdGVuZW5kIHRvIHRvIHN3aXRjaCB0aGUgdHJlZSBlbGVtZW50cyxcbiAgICogYW5kIGFsc28gdG8gZGlzYWJsZSB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUga2V5cyAqL1xuICBASW5wdXQoKSBzZXQgY3VzdG9tS2V5Ym9hcmRPcGVyYXRpb25Db25maWcoY29uZmlnOiBJS2V5Ym9hcmRPcGVyYXRpb25Db25maWcpIHtcbiAgICB0aGlzLmtleWJvYXJkT3BlcmF0aW9uU2VydmljZS5tZXJnZUNvbmZpZ09wZXJhdGlvbihjb25maWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFlvdSBjYW4gc3VwcGx5IGN1c3RvbSBmaWx0ZXJzIHRoYXQgYXJlIHByb2Nlc3NlZCB3aGVuIHRoZSBmaWx0ZXIgaW5wdXQgaXMgY2hhbmdlZC4gRGVmYXVsdCBmaWx0ZXJzIGFyZSB1c2VkXG4gICAqIHRoYXQgY2hlY2sgZm9yIHNob3J0IHRleHQgYW5kIGl0ZW0gbnVtYmVyIG1hdGNoZXMsIGFuZCB5b3UgY2FuIGVpdGhlciBhZGQgY3VzdG9tIGZpbHRlcnMgb3IgcmVwbGFjZSB0aGUgZGVmYXVsdCBvbmVzLlxuICAgKi9cbiAgQElucHV0KCkgbGlzdEZpbHRlckZ1bmMgPSBERUZBVUxUX0ZJTFRFUlM7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsLiBGb3IgdGFibGUgdmlld3MsIHRoaXMgYWxsb3dzIHlvdSB0byBhZGQgY3VzdG9tIGNvbHVtbnMgdG8gdGhlIHRhYmxlLlxuICAgKiBhZGRUYWJsZUNvbHVtbnM6IEFycmF5IG9mIG9iamVjdHNcbiAgICoge1xuICAgKiAgIG5hbWU6IHN0cmluZywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbmFtZSBvZiBjb2x1bW5cbiAgICogICB0aXRsZTogc3RyaW5nLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNob3dlZCB0aXRsZSBvZiBjb2x1bW5cbiAgICogICBhbGlnbj86IHN0cmluZywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9wdGlvbmFsIGFsaWdodDogbGVmdChkZWZhdWx0KSAvIGNlbnRlciAvIHJpZ2h0XG4gICAqICAgbnVtYmVyRm9ybWF0Pzogc3RyaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvcHRpb25hbCBmb3JtYXQgb2YgbnVtYmVyIHZhbHVlLCBleGFtcGxlOiAnMS4yLTInXG4gICAqIH1cbiAgICovXG4gIEBJbnB1dCgpIGFkZFRhYmxlQ29sdW1uczogVGFibGVDb2x1bW5UeXBlW10gPSBbXTtcblxuICAvKipcbiAgICogVGhpcyBhbGxvd3MgeW91IHRvIHN1cHBseSBhIGxpc3Qgb2YgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHVzZWQgdG8gY2hhbmdlIHRoZSBhcHBlYXJhbmNlIG9mIGVsZW1lbnRzLlxuICAgKiBUaGV5IG9iamVjdHMgY29udGFpbiBhIHByZWRpY2F0ZSBmdW5jdGlvbiB0aGF0IGlzIGV2YWx1YXRlZCwgYWxvbmcgd2l0aCBhbiBvcHRpb24gdG8gY29uZmlndXJlIHRoZVxuICAgKiBhcHBlYXJhbmNlIG9mIHRoZSBlbGVtZW50LlxuICAgKiAgIGZ1bmN0aW9uVmlldzogQXJyYXkgb2Ygb2JqZWN0c1xuICAgKiAgIHtcbiAgICogICAgIG5hbWU6IHN0cmluZywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5hbWUgb2YgdmlldyBwYXJ0OiB5b3UgY2FuIGFkZC9yZW1vdmUgaXQgd2hlbiBpdCBuZWVkXG4gICAqICAgICBmdW5jOiAoZWxlbWVudDogYW55LCByZXN1bHQ/OiBhbnkpID0+IGJvb2xlYW4sICAvLyB0aGlzIGZpbHRlciBmdW5jdGlvbiBjYWxjdWxhdGUgY29uZGl0aW9uIHRvIGNoYW5nZSB2aWV3XG4gICAqICAgICB2aWV3OiB7XG4gICAqICAgICAgIGljb25OYW1lPzogc3RyaW5nLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGFuZ2VkIG5hbWUgb2YgaWNvblxuICAgKiAgICAgICBpY29uQ29sb3I/OiBzdHJpbmcsICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hhbmdlZCBjb2xvciBvZiBpY29uXG4gICAqICAgICAgIHRleHRCb2xkPzogc3RyaW5nLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGFuZ2VkIHdlaWdodCBvZiB0ZXh0XG4gICAqICAgICAgIHRleHRDb2xvcj86IHN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGFuZ2VkIGNvbG9yIG9mIHRleHRcbiAgICogICAgIH1cbiAgICogICB9XG4gICAqL1xuICBASW5wdXQoKSBmdW5jdGlvblZpZXc6IElGdW5jdGlvblZpZXdMaW5lW10gfCBudWxsID0gbnVsbDtcblxuICBAT3V0cHV0KCkgc2VsZWN0Q2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPElFbGVtZW50RHRvIHwgbnVsbD4oKTsgLy8gZXZlbnQgYWZ0ZXIgZWxlbWVudCBzZWxlY3RlZCBieSBjbGlja1xuICBAT3V0cHV0KCkgc2VsZWN0RGJsQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPElFbGVtZW50RHRvPigpOyAvLyBldmVudCBhZnRlciBlbGVtZW50IHNlbGVjdGVkIGJ5IGRvdWJsZSBjbGlja1xuICBAT3V0cHV0KCkgY29udGV4dE1lbnVFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8Q29udGV4dE1lbnVEYXRhVHlwZT4oKTsgLy8gZXZlbnQgYWZ0ZXIgZWxlbWVudCBjYWxsIGNvbnRleHQgbWVudSBieSByaWdodCBidXR0b24gY2xpY2tcbiAgQE91dHB1dCgpIHNlbGVjdGVkRWxlbWVudHNDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxTZWxlY3RlZEVsZW1lbnRbXT4oKTsgLy8gZXZlbnQgYWZ0ZXIgY2hhbmdlZCBzZWxlY3RpbmcgaW4gc2VsZWN0aW5nIG1vZGVcbiAgQFZpZXdDaGlsZCgnYXZhVHJlZVdyYXBwZXInKSBhdmFUcmVlV3JhcHBlciE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKCdhdmFNYWluV3JhcHBlcicpIGF2YU1haW5XcmFwcGVyITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoJ2F2YVRyZWVGaWx0ZXJJbnB1dCcpIGF2YVRyZWVGaWx0ZXJJbnB1dCE6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG4gIHNlbGVjdGVkRWxlbWVudDogSUVsZW1lbnREdG8gfCBudWxsID0gbnVsbDtcbiAgc2VydmljZVNwZWNpZmljYXRpb24hOiBTZXJ2aWNlU3BlY2lmaWNhdGlvbkR0bztcbiAgaXNMaXN0ZW5LZXlib2FyZCA9IGZhbHNlO1xuICBwcml2YXRlIGlzRW1pdGVTZWxlY3RlZEVsZW1lbnRzID0gZmFsc2U7XG4gIHByaXZhdGUgc2VsZWN0aW5nRWxlbWVudHNUcmVlRGF0YTogU2VsZWN0aW5nRWxlbWVudHNUeXBlW10gPSBbXTtcbiAgZmxhdEVsZW1lbnRzOiBJRWxlbWVudER0b1tdIHwgbnVsbCA9IG51bGw7XG4gIHByZXNlbGVjdGVkRWxlbWVudDogSUVsZW1lbnREdG8gfCBudWxsID0gbnVsbDtcbiAgZmlsdGVySW5wdXQgPSAnJztcbiAgbGlzdE1vZGVWaWV3VHlwZSA9IE1vZGVWaWV3VHlwZTtcbiAgcHJpdmF0ZSBmaWx0ZXIgPSAnJztcbiAgcHJpdmF0ZSAkZmlsdGVyID0gbmV3IFJlcGxheVN1YmplY3Q8c3RyaW5nPigxKTtcbiAgZmlsdGVyZWRFbGVtZW50TGlzdDogSUVsZW1lbnREdG9bXSA9IFtdO1xuICBwcml2YXRlICRkZXN0cm95ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBAU2VsZigpIHByaXZhdGUgZmxhdEVsZW1lbnRzU2VydmljZTogRmxhdEVsZW1lbnRzU2VydmljZSxcbiAgICBAU2VsZigpIHByaXZhdGUgc2VsZWN0RWxlbWVudFNlcnZpY2U6IFNlbGVjdEVsZW1lbnRTZXJ2aWNlLFxuICAgIEBTZWxmKCkgcHJpdmF0ZSB0cmVlTm9kZVNlbGVjdGlvblNlcnZpY2U6IFRyZWVOb2RlU2VsZWN0aW9uU2VydmljZSxcbiAgICBAU2VsZigpIHByaXZhdGUgZXhwYW5kUGFyZW50R3JvdXBTZXJ2aWNlOiBFeHBhbmRQYXJlbnRHcm91cFNlcnZpY2UsXG4gICAgQFNlbGYoKSBwcml2YXRlIGtleWJvYXJkT3BlcmF0aW9uU2VydmljZTogS2V5Ym9hcmRPcGVyYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmVcbiAgKSB7XG4gICAgdGhpcy5fdGV4dFdvcmRzID0geyAuLi5ERUZBVUxUX1RFWFRfV09SRFMgfTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0RWxlbWVudFNlcnZpY2UucHJlc2VsZWN0ZWRFbGVtZW50LnBpcGUodGFrZVVudGlsKHRoaXMuJGRlc3Ryb3kpKS5zdWJzY3JpYmUoKGUpID0+ICh0aGlzLnByZXNlbGVjdGVkRWxlbWVudCA9IGUpKTtcbiAgICB0aGlzLnNlbGVjdEVsZW1lbnRTZXJ2aWNlLnNlbGVjdENsaWNrRWxlbWVudC5waXBlKHRha2VVbnRpbCh0aGlzLiRkZXN0cm95KSkuc3Vic2NyaWJlKChlKSA9PiB7XG4gICAgICB0aGlzLnNlbGVjdGVkRWxlbWVudCA9IGU7XG4gICAgICB0aGlzLnNlbGVjdENsaWNrLmVtaXQoZSk7XG4gICAgfSk7XG4gICAgdGhpcy5zZWxlY3RFbGVtZW50U2VydmljZS5zZWxlY3REYmxDbGlja0VsZW1lbnQucGlwZSh0YWtlVW50aWwodGhpcy4kZGVzdHJveSkpLnN1YnNjcmliZSgoZSkgPT4gdGhpcy5zZWxlY3REYmxDbGljay5lbWl0KGUpKTtcbiAgICB0aGlzLnNlbGVjdEVsZW1lbnRTZXJ2aWNlLnNlbGVjdENvbnRleHRNZW51RWxlbWVudC5waXBlKHRha2VVbnRpbCh0aGlzLiRkZXN0cm95KSkuc3Vic2NyaWJlKChlKSA9PiB0aGlzLmNvbnRleHRNZW51RXZlbnQuZW1pdChlKSk7XG4gICAgdGhpcy5mbGF0RWxlbWVudHNTZXJ2aWNlLmZsYXRFbGVtZW50c0R0by5waXBlKHRha2VVbnRpbCh0aGlzLiRkZXN0cm95KSkuc3Vic2NyaWJlKChlKSA9PiB7XG4gICAgICB0aGlzLmZsYXRFbGVtZW50cyA9IGU7XG4gICAgICB0aGlzLmdldEZpbHRlcmVkTGlzdCgpO1xuICAgIH0pO1xuXG4gICAgdGhpcy4kZmlsdGVyLnBpcGUodGFrZVVudGlsKHRoaXMuJGRlc3Ryb3kpLCBkZWJvdW5jZVRpbWUoMjUwKSkuc3Vic2NyaWJlKChmaWx0ZXIpID0+IHtcbiAgICAgIHRoaXMuZmlsdGVyID0gZmlsdGVyO1xuICAgICAgdGhpcy5nZXRGaWx0ZXJlZExpc3QoKTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRpYWxpemVFdmVudExpc3RlbmVycygpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIHRoaXMuZmxhdEVsZW1lbnRzU2VydmljZS5saXN0RmlsdGVyRnVuYyA9IHRoaXMubGlzdEZpbHRlckZ1bmM7XG4gICAgdGhpcy5mbGF0RWxlbWVudHNTZXJ2aWNlLmZ1bmN0aW9uVmlldyA9IHRoaXMuZnVuY3Rpb25WaWV3O1xuXG4gICAgaWYgKGNoYW5nZXNbJ3Byb2plY3QnXSAmJiB0aGlzLnByb2plY3Q/LnNlcnZpY2VTcGVjaWZpY2F0aW9ucz8uWzBdKSB7XG4gICAgICB0aGlzLnNlcnZpY2VTcGVjaWZpY2F0aW9uID0gdGhpcy5wcm9qZWN0LnNlcnZpY2VTcGVjaWZpY2F0aW9uc1swXTtcbiAgICAgIHRoaXMuZmxhdEVsZW1lbnRzU2VydmljZS5zZXRFbGVtZW50c0R0byh0aGlzLnNlcnZpY2VTcGVjaWZpY2F0aW9uKTtcblxuICAgICAgaWYgKHRoaXMuaXNTZWxlY3Rpb25Nb2RlKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0aW5nRWxlbWVudHNUcmVlRGF0YSA9IHRoaXMudHJlZU5vZGVTZWxlY3Rpb25TZXJ2aWNlLmxvYWRTZWxlY3RpbmdFbGVtZW50cyh0aGlzLnNlcnZpY2VTcGVjaWZpY2F0aW9uLmVsZW1lbnRzKTtcbiAgICAgICAgdGhpcy50cmVlTm9kZVNlbGVjdGlvblNlcnZpY2UudHJlZU5vZGVTZWxlY3RpbmcucGlwZSh0YWtlVW50aWwodGhpcy4kZGVzdHJveSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuaXNFbWl0ZVNlbGVjdGVkRWxlbWVudHMpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBzZWxlY3RpbmdUcmVlID0gdGhpcy50cmVlTm9kZVNlbGVjdGlvblNlcnZpY2UuZ2V0VHJlZVJvb3QodGhpcy5zZWxlY3RpbmdFbGVtZW50c1RyZWVEYXRhKTtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEVsZW1lbnRzQ2hhbmdlZC5lbWl0KHNlbGVjdGluZ1RyZWUpO1xuICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoKGNoYW5nZXNbJ3NlbGVjdGVkTm9kZUlkJ10gJiYgdGhpcy5wcm9qZWN0KSB8fCBjaGFuZ2VzWydwcm9qZWN0J10pIHtcbiAgICAgIHRoaXMuZmxhdEVsZW1lbnRzU2VydmljZS5nZXRPbmVFbGVtZW50QnlJZCh0aGlzLnNlbGVjdGVkTm9kZUlkKS5zdWJzY3JpYmUoKGUpID0+IHtcbiAgICAgICAgaWYgKGUpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdEVsZW1lbnRTZXJ2aWNlLnNldENsaWNrRWxlbWVudChlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNTZWxlY3Rpb25Nb2RlICYmIChjaGFuZ2VzWydpbml0aWFsbHlTZWxlY3RlZEVsZW1lbnRzJ10gfHwgY2hhbmdlc1sncHJvamVjdCddKSkge1xuICAgICAgdGhpcy5mb3JtU2VsZWN0aW5nTGlzdCgpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuJGRlc3Ryb3kubmV4dCh0cnVlKTtcbiAgICB0aGlzLiRkZXN0cm95LmNvbXBsZXRlKCk7XG4gIH1cblxuICBwcml2YXRlIG1vdXNlT3ZlcigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNMaXN0ZW5LZXlib2FyZCkge1xuICAgICAgdGhpcy5pc0xpc3RlbktleWJvYXJkID0gdHJ1ZTtcbiAgICAgIHRoaXMuYXZhVHJlZUZpbHRlcklucHV0Py5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtb3VzZU91dCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzTGlzdGVuS2V5Ym9hcmQgPSBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlR2xvYmFsS2V5Ym9hcmRFdmVudChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgY29uc3Qga2V5RXZlbnQgPSBldmVudCBhcyBLZXlib2FyZEV2ZW50O1xuICAgICAgaWYgKCF0aGlzLm1vdXNlQXdhcmVLZXlib2FyZENvbnRyb2wgfHwgdGhpcy5pc0xpc3RlbktleWJvYXJkKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLnByZXNlbGVjdGVkRWxlbWVudCB8fCB0aGlzLnNlbGVjdGVkRWxlbWVudDtcblxuICAgICAgICBjb25zdCB7IG9wZXJhdGlvbiwgbmV4dEVsZW1lbnQgfSA9IHRoaXMua2V5Ym9hcmRPcGVyYXRpb25TZXJ2aWNlLmhhbmRsZUtleWJvYXJkRXZlbnQoa2V5RXZlbnQsIGVsZW1lbnQpIHx8IHsgbmV4dEVsZW1lbnQ6IG51bGwgfTtcbiAgICAgICAgc3dpdGNoIChvcGVyYXRpb24pIHtcbiAgICAgICAgICBjYXNlIEtleWJvYXJkT3BlcmF0aW9uVHlwZS5Nb3ZlU2VsZWN0ZWRQb3NpdGlvblVwOlxuICAgICAgICAgICAgdGhpcy5zaG93RWxlbWVudChuZXh0RWxlbWVudCwgJy5zZWxlY3QnKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgS2V5Ym9hcmRPcGVyYXRpb25UeXBlLk1vdmVTZWxlY3RlZFBvc2l0aW9uRG93bjpcbiAgICAgICAgICAgIHRoaXMuc2hvd0VsZW1lbnQobmV4dEVsZW1lbnQsICcuc2VsZWN0Jyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIEtleWJvYXJkT3BlcmF0aW9uVHlwZS5Nb3ZlQ2hvc2VuUG9zaXRpb25Eb3duOlxuICAgICAgICAgICAgdGhpcy5zaG93RWxlbWVudChuZXh0RWxlbWVudCwgbmV4dEVsZW1lbnQ/LmlkID09PSB0aGlzLnNlbGVjdGVkRWxlbWVudD8uaWQgPyAnLnNlbGVjdCcgOiAnLmNob29zZScpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBLZXlib2FyZE9wZXJhdGlvblR5cGUuTW92ZUNob3NlblBvc2l0aW9uVXA6XG4gICAgICAgICAgICB0aGlzLnNob3dFbGVtZW50KG5leHRFbGVtZW50LCBuZXh0RWxlbWVudD8uaWQgPT09IHRoaXMuc2VsZWN0ZWRFbGVtZW50Py5pZCA/ICcuc2VsZWN0JyA6ICcuY2hvb3NlJyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2hvd0VsZW1lbnQoZWxlbWVudDogSUVsZW1lbnREdG8gfCBudWxsLCBuYW1lUXVlcnk6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICBpZiAodGhpcy5tb2RlVmlldyA9PT0gTW9kZVZpZXdUeXBlLlRyZWUpIHtcbiAgICAgICAgdGhpcy5leHBhbmRQYXJlbnRHcm91cHMoZWxlbWVudCk7XG4gICAgICB9XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2Nyb2xsTGluZShuYW1lUXVlcnkpLCAwKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNjcm9sbExpbmUobmFtZVF1ZXJ5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBwYXJlbnRSZWN0ID0gdGhpcy5hdmFUcmVlV3JhcHBlcj8ubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBzaG93ZWRFbGVtZW50ID0gdGhpcy5hdmFUcmVlV3JhcHBlcj8ubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKG5hbWVRdWVyeSkgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICBpZiAoIXNob3dlZEVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjaGlsZFJlY3QgPSBzaG93ZWRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGlmIChcbiAgICAgIGNoaWxkUmVjdC5ib3R0b20gPiBwYXJlbnRSZWN0LmJvdHRvbSB8fFxuICAgICAgY2hpbGRSZWN0LnRvcCA8IHBhcmVudFJlY3QudG9wIHx8XG4gICAgICAodGhpcy5tb2RlVmlldyA9PT0gTW9kZVZpZXdUeXBlLlRhYmxlICYmIGNoaWxkUmVjdC50b3AgPCBwYXJlbnRSZWN0LnRvcCArIDI0KVxuICAgICkge1xuICAgICAgc2hvd2VkRWxlbWVudD8uc2Nyb2xsSW50b1ZpZXcoKTtcbiAgICAgIHRoaXMuYXZhVHJlZVdyYXBwZXI/Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG8oeyBsZWZ0OiAwIH0pO1xuICAgICAgaWYgKHRoaXMubW9kZVZpZXcgPT09IE1vZGVWaWV3VHlwZS5UYWJsZSkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuY29ycmVjdFNjcm9sbFRhYmxlTGluZShzaG93ZWRFbGVtZW50LCBwYXJlbnRSZWN0KSwgMCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjb3JyZWN0U2Nyb2xsVGFibGVMaW5lKHNob3dlZEVsZW1lbnQ6IEhUTUxFbGVtZW50LCBwYXJlbnRSZWN0OiBET01SZWN0KTogdm9pZCB7XG4gICAgY29uc3QgY2hpbGRSZWN0ID0gc2hvd2VkRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBpZiAoY2hpbGRSZWN0LnRvcCA8IHBhcmVudFJlY3QudG9wICsgMjQpIHtcbiAgICAgIHRoaXMuYXZhVHJlZVdyYXBwZXIubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgLT0gMjQ7XG4gICAgfVxuICB9XG5cbiAgZXhwYW5kUGFyZW50R3JvdXBzKGVsZW1lbnQ6IElFbGVtZW50RHRvKTogdm9pZCB7XG4gICAgdGhpcy5leHBhbmRQYXJlbnRHcm91cFNlcnZpY2UuZXhwYW5kUGFyZW50R3JvdXBzKGVsZW1lbnQsIHRoaXMuZmxhdEVsZW1lbnRzLCB0aGlzLmV4cGFuc2lvblN0YXRlKTtcbiAgfVxuXG4gIG9uRmlsdGVyKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLiRmaWx0ZXIubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBjaGFuZ2VBbGxFbGVtZW50c0V4cGFuc2lvblN0YXR1cyhpc0V4cGFuZGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKCFpc0V4cGFuZGVkKSB7XG4gICAgICBPYmplY3Qua2V5cyh0aGlzLmV4cGFuc2lvblN0YXRlKS5mb3JFYWNoKChpZDogc3RyaW5nKSA9PiBkZWxldGUgdGhpcy5leHBhbnNpb25TdGF0ZVtpZF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZsYXRFbGVtZW50cz8uZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICBpZiAoaXRlbS5lbGVtZW50VHlwZURpc2NyaW1pbmF0b3IgPT09ICdTZXJ2aWNlU3BlY2lmaWNhdGlvbkdyb3VwRHRvJykge1xuICAgICAgICAgIHRoaXMuZXhwYW5zaW9uU3RhdGVbaXRlbS5pZF0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZvcm1TZWxlY3RpbmdMaXN0KCk6IHZvaWQge1xuICAgIHRoaXMuaXNFbWl0ZVNlbGVjdGVkRWxlbWVudHMgPSBmYWxzZTtcbiAgICBpZiAoIXRoaXMuaW5pdGlhbGx5U2VsZWN0ZWRFbGVtZW50cykge1xuICAgICAgdGhpcy5pc0VtaXRlU2VsZWN0ZWRFbGVtZW50cyA9IHRydWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy50cmVlTm9kZVNlbGVjdGlvblNlcnZpY2UuZ2V0RmxhdFNlbGVjdGVkTGlzdElkKHRoaXMuaW5pdGlhbGx5U2VsZWN0ZWRFbGVtZW50cyk7XG4gICAgdGhpcy50cmVlTm9kZVNlbGVjdGlvblNlcnZpY2UuZmxhdFNlbGVjdGVkTGlzdElkLmZvckVhY2goKGlkLCBpbmRleCkgPT4ge1xuICAgICAgdGhpcy50cmVlTm9kZVNlbGVjdGlvblNlcnZpY2UuY2hhbmdlU2VsZWN0aW5nKHRydWUsIGlkKTtcbiAgICAgIGlmIChpbmRleCA9PT0gdGhpcy50cmVlTm9kZVNlbGVjdGlvblNlcnZpY2UuZmxhdFNlbGVjdGVkTGlzdElkLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgdGhpcy5pc0VtaXRlU2VsZWN0ZWRFbGVtZW50cyA9IHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzZWxlY3RPckRlc2VsZWN0QWxsKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy50cmVlTm9kZVNlbGVjdGlvblNlcnZpY2UuY2hhbmdlQWxsKHZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RmlsdGVyZWRMaXN0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmZsYXRFbGVtZW50cz8ubGVuZ3RoKSB7XG4gICAgICBpZiAoIXRoaXMuZmlsdGVyKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyZWRFbGVtZW50TGlzdCA9IHRoaXMuZmxhdEVsZW1lbnRzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5maWx0ZXJlZEVsZW1lbnRMaXN0ID0gdGhpcy5mbGF0RWxlbWVudHMuZmlsdGVyKChpdGVtKSA9PiB0aGlzLmZsYXRFbGVtZW50c1NlcnZpY2UuY2hlY2tGaWx0ZXJWYWx1ZShpdGVtLCB0aGlzLmZpbHRlcikpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUV2ZW50TGlzdGVuZXJzKCk6IHZvaWQge1xuICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIGZyb21FdmVudCh0aGlzLmF2YU1haW5XcmFwcGVyLm5hdGl2ZUVsZW1lbnQsICdtb3VzZWxlYXZlJylcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuJGRlc3Ryb3kpKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLm1vdXNlT3V0KCk7XG4gICAgICAgIH0pO1xuXG4gICAgICBmcm9tRXZlbnQodGhpcy5hdmFNYWluV3JhcHBlci5uYXRpdmVFbGVtZW50LCAnbW91c2VlbnRlcicpXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiRkZXN0cm95KSlcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5tb3VzZU92ZXIoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgIGlmICghdGhpcy5pc1NlbGVjdGlvbk1vZGUpIHtcbiAgICAgICAgZnJvbUV2ZW50KGRvY3VtZW50LCAna2V5ZG93bicpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy4kZGVzdHJveSksXG4gICAgICAgICAgICBmaWx0ZXIoKCkgPT4gIXRoaXMubW91c2VBd2FyZUtleWJvYXJkQ29udHJvbCB8fCB0aGlzLmlzTGlzdGVuS2V5Ym9hcmQpXG4gICAgICAgICAgKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVHbG9iYWxLZXlib2FyZEV2ZW50KGV2ZW50KTtcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cIm1haW4td3JhcHBlclwiXG4gICNhdmFNYWluV3JhcHBlclxuPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJjb250cm9sXCJcbiAgICAjY29udHJvbFxuICA+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiY29udHJvbC1maWx0ZXJcIj5cbiAgICAgIDxtYXQtbGFiZWw+e3sgdGV4dFdvcmRzPy50ZXh0U2VhcmNoIH19PC9tYXQtbGFiZWw+XG4gICAgICA8aW5wdXRcbiAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgW25nTW9kZWxdPVwiZmlsdGVySW5wdXRcIlxuICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkZpbHRlcigkZXZlbnQpXCJcbiAgICAgICAgI2F2YVRyZWVGaWx0ZXJJbnB1dFxuICAgICAgLz5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtb2RlVmlldyA9PT0gbGlzdE1vZGVWaWV3VHlwZS5UcmVlXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwiY29udHJvbC1pY29uXCJcbiAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgIChjbGljayk9XCJjaGFuZ2VBbGxFbGVtZW50c0V4cGFuc2lvblN0YXR1cyh0cnVlKVwiXG4gICAgICAgIFttYXRUb29sdGlwXT1cInRleHRXb3Jkcz8udG9vbHRpcEFsbE9wZW4gfHwgJydcIlxuICAgICAgPlxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJsYXllci1iYWNrZ3JvdW5kXCI+bGF5ZXJzPC9tYXQtaWNvbj5cbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibGF5ZXItaWNvblwiPmFkZDwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJjb250cm9sLWljb25cIlxuICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgKGNsaWNrKT1cImNoYW5nZUFsbEVsZW1lbnRzRXhwYW5zaW9uU3RhdHVzKGZhbHNlKVwiXG4gICAgICAgIFttYXRUb29sdGlwXT1cInRleHRXb3Jkcz8udG9vbHRpcEFsbENsb3NlIHx8ICcnXCJcbiAgICAgID5cbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibGF5ZXItYmFja2dyb3VuZFwiPmxheWVyczwvbWF0LWljb24+XG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImxheWVyLWljb25cIj5yZW1vdmU8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzU2VsZWN0aW9uTW9kZVwiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAoY2xpY2spPVwic2VsZWN0T3JEZXNlbGVjdEFsbCh0cnVlKVwiXG4gICAgICAgIFttYXRUb29sdGlwXT1cInRleHRXb3Jkcz8udG9vbHRpcEFsbEFkZCB8fCAnJ1wiXG4gICAgICAgIGNsYXNzPVwiY29udHJvbC1idXR0b25cIlxuICAgICAgPlxuICAgICAgICA8bWF0LWljb24+YWRkPC9tYXQtaWNvbj5cbiAgICAgICAgPHNwYW4+e3sgdGV4dFdvcmRzPy50ZXh0QWxsIH19PC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uXG4gICAgICAgIChjbGljayk9XCJzZWxlY3RPckRlc2VsZWN0QWxsKGZhbHNlKVwiXG4gICAgICAgIFttYXRUb29sdGlwXT1cInRleHRXb3Jkcz8udG9vbHRpcEFsbFJlbW92ZSB8fCAnJ1wiXG4gICAgICAgIGNsYXNzPVwiY29udHJvbC1idXR0b25cIlxuICAgICAgPlxuICAgICAgICA8bWF0LWljb24+cmVtb3ZlPC9tYXQtaWNvbj5cbiAgICAgICAgPHNwYW4+e3sgdGV4dFdvcmRzPy50ZXh0QWxsIH19PC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuICA8ZGl2XG4gICAgW3N0eWxlLmhlaWdodF09XCInY2FsYygxMDAlIC0gJyArIGNvbnRyb2wub2Zmc2V0SGVpZ2h0ICsgJ3B4KSdcIlxuICAgIGNsYXNzPVwiYXZhLXRyZWUtd3JhcHBlclwiXG4gICAgI2F2YVRyZWVXcmFwcGVyXG4gID5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmxhdEVsZW1lbnRzPy5sZW5ndGg7IGVsc2Ugbm90aGluZ1wiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpbHRlcmVkRWxlbWVudExpc3Q/Lmxlbmd0aDsgZWxzZSBub3RoaW5nRmlsdGVyZWRcIj5cbiAgICAgICAgPGF2YS10cmVlLXN0cnVjdHVyZVxuICAgICAgICAgICpuZ0lmPVwibW9kZVZpZXcgPT09IGxpc3RNb2RlVmlld1R5cGUuVHJlZSAmJiAhYXZhVHJlZUZpbHRlcklucHV0LnZhbHVlXCJcbiAgICAgICAgICBbc2VydmljZVNwZWNpZmljYXRpb25dPVwic2VydmljZVNwZWNpZmljYXRpb25cIlxuICAgICAgICAgIFtpbmRlbnRdPVwiaW5kZW50XCJcbiAgICAgICAgICBbZXhwYW5zaW9uU3RhdGVdPVwiZXhwYW5zaW9uU3RhdGVcIlxuICAgICAgICAgIFtpc1NlbGVjdGlvbk1vZGVdPVwiaXNTZWxlY3Rpb25Nb2RlXCJcbiAgICAgICAgICBbc2VsZWN0ZWRDb2xvcl09XCJzZWxlY3RlZENvbG9yXCJcbiAgICAgICAgICBbYWxsb3dEYmxDbGlja109XCJhbGxvd0RibENsaWNrXCJcbiAgICAgICAgPlxuICAgICAgICA8L2F2YS10cmVlLXN0cnVjdHVyZT5cbiAgICAgICAgPGF2YS1saXN0LXN0cnVjdHVyZVxuICAgICAgICAgICpuZ0lmPVwibW9kZVZpZXcgPT09IGxpc3RNb2RlVmlld1R5cGUuTGlzdCB8fCAobW9kZVZpZXcgPT09IGxpc3RNb2RlVmlld1R5cGUuVHJlZSAmJiBhdmFUcmVlRmlsdGVySW5wdXQudmFsdWUpXCJcbiAgICAgICAgICBbZmlsdGVyZWRFbGVtZW50TGlzdF09XCJmaWx0ZXJlZEVsZW1lbnRMaXN0XCJcbiAgICAgICAgICBbaXNTZWxlY3Rpb25Nb2RlXT1cImlzU2VsZWN0aW9uTW9kZVwiXG4gICAgICAgICAgW3NlbGVjdGVkQ29sb3JdPVwic2VsZWN0ZWRDb2xvclwiXG4gICAgICAgICAgW2FsbG93RGJsQ2xpY2tdPVwiYWxsb3dEYmxDbGlja1wiXG4gICAgICAgID5cbiAgICAgICAgPC9hdmEtbGlzdC1zdHJ1Y3R1cmU+XG4gICAgICAgIDxhdmEtdGFibGUtc3RydWN0dXJlXG4gICAgICAgICAgKm5nSWY9XCJtb2RlVmlldyA9PT0gbGlzdE1vZGVWaWV3VHlwZS5UYWJsZVwiXG4gICAgICAgICAgW2ZpbHRlcmVkRWxlbWVudExpc3RdPVwiZmlsdGVyZWRFbGVtZW50TGlzdFwiXG4gICAgICAgICAgW2lzU2VsZWN0aW9uTW9kZV09XCJpc1NlbGVjdGlvbk1vZGVcIlxuICAgICAgICAgIFthZGRUYWJsZUNvbHVtbnNdPVwiYWRkVGFibGVDb2x1bW5zXCJcbiAgICAgICAgICBbc2VsZWN0ZWRDb2xvcl09XCJzZWxlY3RlZENvbG9yXCJcbiAgICAgICAgICBbYWxsb3dEYmxDbGlja109XCJhbGxvd0RibENsaWNrXCJcbiAgICAgICAgPlxuICAgICAgICA8L2F2YS10YWJsZS1zdHJ1Y3R1cmU+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L2Rpdj5cbjxuZy10ZW1wbGF0ZSAjbm90aGluZz5cbiAge3sgdGV4dFdvcmRzPy50ZXh0Tm90aGluZyB9fVxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjbm90aGluZ0ZpbHRlcmVkPlxuICB7eyB0ZXh0V29yZHM/LnRleHROb3RoaW5nRmlsdGVyZWQgfX1cbjwvbmctdGVtcGxhdGU+XG4iXX0=
427
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZhLXRyZWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1hdmEvc3JjL2xpYi9hdmEtdHJlZS90cmVlL2NvbXBvbmVudHMvYXZhLXRyZWUvYXZhLXRyZWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1hdmEvc3JjL2xpYi9hdmEtdHJlZS90cmVlL2NvbXBvbmVudHMvYXZhLXRyZWUvYXZhLXRyZWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUtMLE1BQU0sRUFDTixJQUFJLEVBRUosU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUxRixPQUFPLEVBQUUsZUFBZSxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFdEUsT0FBTyxFQUlMLFlBQVksRUFLYixNQUFNLGFBQWEsQ0FBQztBQUVyQixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUN0RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQTRCLHdCQUF3QixFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDdEksT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDN0UsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNENBQTRDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUXRGLE1BQU0sT0FBTyxnQkFBZ0I7SUF3RDNCOzs7Ozs7Ozs7Ozs7O09BYUc7SUFD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LGNBQWM7c0JBQXRCLEtBQUs7Z0JBWUcsZUFBZTtzQkFBdkIsS0FBSztnQkFrQkcsWUFBWTtzQkFBcEIsS0FBSztnQkFLSSxXQUFXO3NCQUFwQixNQUFNO2dCQUtHLGNBQWM7c0JBQXZCLE1BQU07Z0JBS0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQVFHLHVCQUF1QjtzQkFBaEMsTUFBTTtnQkFFc0IsY0FBYztzQkFBMUMsU0FBUzt1QkFBQyxnQkFBZ0I7Z0JBQ0UsY0FBYztzQkFBMUMsU0FBUzt1QkFBQyxnQkFBZ0I7Z0JBQ00sa0JBQWtCO3NCQUFsRCxTQUFTO3VCQUFDLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgTmdab25lLFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFNlbGYsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgUmVwbGF5U3ViamVjdCwgU3ViamVjdCwgZGVib3VuY2VUaW1lLCBmaWx0ZXIsIGZyb21FdmVudCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IERFRkFVTFRfRklMVEVSUywgREVGQVVMVF9URVhUX1dPUkRTIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IElUZXh0V29yZHMgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvZGVmYXVsdFRleHRXb3Jkcyc7XG5pbXBvcnQge1xuICBDb250ZXh0TWVudURhdGFUeXBlLFxuICBJRWxlbWVudER0byxcbiAgSUZ1bmN0aW9uVmlld0xpbmUsXG4gIE1vZGVWaWV3VHlwZSxcbiAgUHJvamVjdER0byxcbiAgU2VsZWN0ZWRFbGVtZW50LFxuICBTZXJ2aWNlU3BlY2lmaWNhdGlvbkR0byxcbiAgVGFibGVDb2x1bW5UeXBlXG59IGZyb20gJy4uLy4uL21vZGVsJztcbmltcG9ydCB7IFNlbGVjdGluZ0VsZW1lbnRzVHlwZSB9IGZyb20gJy4uLy4uL21vZGVsL3NlbGVjdGluZy5tb2RlbCc7XG5pbXBvcnQgeyBFeHBhbmRQYXJlbnRHcm91cFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9leHBhbmQtcGFyZW50LWdyb3VwLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmxhdEVsZW1lbnRzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ZsYXQtZWxlbWVudHMuc2VydmljZSc7XG5pbXBvcnQgeyBJS2V5Ym9hcmRPcGVyYXRpb25Db25maWcsIEtleWJvYXJkT3BlcmF0aW9uU2VydmljZSwgS2V5Ym9hcmRPcGVyYXRpb25UeXBlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMva2V5Ym9hcmQtb3BlcmF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2VsZWN0RWxlbWVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zZWxlY3QtZWxlbWVudC5zZXJ2aWNlJztcbmltcG9ydCB7IFRyZWVOb2RlU2VsZWN0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RyZWUtbm9kZS1zZWxlY3Rpb24uc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F2YS10cmVlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2F2YS10cmVlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYXZhLXRyZWUuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbRmxhdEVsZW1lbnRzU2VydmljZSwgU2VsZWN0RWxlbWVudFNlcnZpY2UsIFRyZWVOb2RlU2VsZWN0aW9uU2VydmljZSwgRXhwYW5kUGFyZW50R3JvdXBTZXJ2aWNlLCBLZXlib2FyZE9wZXJhdGlvblNlcnZpY2VdXG59KVxuZXhwb3J0IGNsYXNzIEF2YVRyZWVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcbiAgLyoqXG4gICAqIFRoaXMgaXMgdGhlIG1haW4gZGF0YSBlbGVtZW50IGZvciB0aGUgdHJlZSBzdHJ1Y3R1cmUuIFlvdSBzaG91bGQgc3VwcGx5IGEgUHJvamVjdER0byB3aXRoXG4gICAqIGV4YWN0bHkgb25lIHNlcnZpY2Ugc3BlY2lmaWNhdGlvbiBpbiBpdC5cbiAgICovXG4gIEBJbnB1dCgpIHByb2plY3Q6IFByb2plY3REdG8gfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogT3B0aW9uYWxseSwgeW91IGNhbiBzdXBwbHkgYSBtYXAgb2YgZXhwYW5zaW9uIHN0YXRlcyBmb3IgdGhlIHRyZWUuIFRoZSBrZXlzIHNob3VsZCBiZSB0aGVcbiAgICogaWQgcHJvcGVydGllcyBvZiB0aGUgZWxlbWVudHMgaW4gdGhlIHRyZWUsIGFuZCB0aGUgdmFsdWVzIHNob3VsZCBiZSB0cnVlIGlmIHRoZSBlbGVtZW50IGlzXG4gICAqIGV4cGFuZGVkLCBhbmQgZmFsc2UgaWYgaXQgaXMgY29sbGFwc2VkLlxuICAgKi9cbiAgQElucHV0KCkgZXhwYW5zaW9uU3RhdGU6IHsgW2lkOiBzdHJpbmddOiBib29sZWFuIH0gPSB7fTtcblxuICAvKipcbiAgICogT3B0aW9uYWxseSwgeW91IGNhbiBzdXBwbHkgdGhlIGlkIG9mIHRoZSBub2RlIHRoYXQgc2hvdWxkIGJlIHNlbGVjdGVkIGluIHRoZSB0cmVlIGluaXRpYWxseS5cbiAgICovXG4gIEBJbnB1dCgpIHNlbGVjdGVkTm9kZUlkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogT3B0aW9uYWwsIGRlZmF1bHRzIHRvIDIwcHguIElmIHRoaXMgaXMgc2V0LCB0aGVuIHRoZSB0cmVlIHdpbGwgYmUgaW5kZW50ZWQgYnkgdGhlIGdpdmVuIHZhbHVlIGVhY2ggbGV2ZWwuXG4gICAqIFRoaXMgY2FuIGJlIGFueSB2YWxpZCBDU1MgdmFsdWUgZm9yIHRoZSBwYWRkaW5nLWxlZnQgcHJvcGVydHksIHN1Y2ggYXMgMjBweCwgMWVtLCBvciA1JS5cbiAgICpcbiAgICovXG4gIEBJbnB1dCgpIGluZGVudCA9ICcyMHB4JztcblxuICAvKipcbiAgICogT3B0aW9uYWwsIHlvdSBjYW4gc3VwcGx5IGEgY29sb3IgdG8gYmUgdXNlZCBhcyB0aGUgYmFja2dyb3VuZCBjb2xvciBmb3IgdGhlIHNlbGVjdGVkIGxpbmUuIERlZmF1bHRzIHRvIHRoZSBwcmltYXJ5XG4gICAqIGNvbG9yIGZyb20gdGhlIE1hdGVyaWFsIHRoZW1lLCB3aGljaCBpcyAjMDBhY2MxLlxuICAgKi9cbiAgQElucHV0KCkgc2VsZWN0ZWRDb2xvcjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIFlvdSBjYW4gc3BlY2lmeSB3aGljaCB2aWV3IHR5cGUgdG8gdXNlIGZvciB0aGUgdHJlZS4gVGhlIGRlZmF1bHQgaXMgTW9kZVZpZXdUeXBlLlRyZWUsIGJ1dCB5b3UgY2FuIGFsc28gdXNlXG4gICAqIE1vZGVWaWV3VHlwZS5MaXN0IG9yIE1vZGVWaWV3VHlwZS5UYWJsZS5cbiAgICovXG4gIEBJbnB1dCgpIG1vZGVWaWV3OiBNb2RlVmlld1R5cGUgPSBNb2RlVmlld1R5cGUuVHJlZTtcblxuICAvKiogT3B0aW9uYWwsIGRlZmF1bHRzIHRvIHRydWUuIElmIHRoaXMgaXMgZGlzYWJsZWQsIHRoZW4gdGhlIGRvdWJsZSBjbGljayBldmVudCBmb3IgZWxlbWVudHMgaXMgbm90IHJhaXNlZCxcbiAgICogYW5kIGNsaWNraW5nIG9uIGFuIGVsZW10IHNlbmRzIGFuIGltbWVkaWF0ZSByZXN1bHQgc2luY2UgdGhlIGNvbXBvbmVudCBoYXMgbm90IHRvIHdhaXQgYW5kIGNoZWNrIGlmIGEgZG91YmxlIGNsaWNrIGV2ZW50XG4gICAqIGlzIGZpcmVkLlxuICAgKi9cbiAgQElucHV0KCkgYWxsb3dEYmxDbGljayA9IHRydWU7XG5cbiAgLyoqXG4gICAqIElmIHRoaXMgaXMgc2V0IHRvIHRydWUsIHRoZW4gdGhlIHRyZWUgd2lsbCBiZSBpbiBzZWxlY3Rpb24gbW9kZSwgYW5kIHRoZSB1c2VyIGNhbiBzZWxlY3QgZWxlbWVudHNcbiAgICogYnkgY2xpY2tpbmcgb24gdGhlbS4gVGhlIHNlbGVjdGVkIGVsZW1lbnRzIHdpbGwgYmUgZW1pdHRlZCBpbiB0aGUgc2VsZWN0ZWRFbGVtZW50c0NoYW5nZWQgZXZlbnQuXG4gICAqL1xuICBASW5wdXQoKSBpc1NlbGVjdGlvbk1vZGUgPSBmYWxzZTtcblxuICAvKipcbiAgICogWW91IGNhbiBvcHRpb25hbGx5IHN1cHBseSBhIGxpc3Qgb2YgZWxlbWVudHMgdGhhdCBzaG91bGQgYmUgc2VsZWN0ZWQgaW5pdGlhbGx5LiBUaGlzIGlzIG9ubHkgdXNlZCBpZlxuICAgKiBpc1NlbGVjdGlvbk1vZGUgaXMgdHJ1ZS5cbiAgICovXG4gIEBJbnB1dCgpIGluaXRpYWxseVNlbGVjdGVkRWxlbWVudHM6IFNlbGVjdGVkRWxlbWVudFtdIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIFlvdSBjYW4gc3VwcGx5IGEgbWFwIG9mIHN0cmluZ3MgdG8gYmUgdXNlZCBmb3IgdGhlIHRleHQgaW4gdGhlIHRyZWUuIFRoaXMgYWxsb3dzIHlvdSB0byB0cmFuc2xhdGVcbiAgICogdGhlIHRleHQgaW4gdGhlIHRyZWUgdG8gb3RoZXIgbGFuZ3VhZ2VzLlxuICAgKiB7XG4gICAqICAgdGV4dFNlYXJjaDogc3RyaW5nLFxuICAgKiAgIHRleHROb3RoaW5nOiBzdHJpbmcsXG4gICAqICAgdGV4dE5vdGhpbmdGaWx0ZXJlZDogc3RyaW5nLFxuICAgKiAgIHRleHRBbGw6IHN0cmluZyxcbiAgICogICB0b29sdGlwQWxsT3Blbjogc3RyaW5nLFxuICAgKiAgIHRvb2x0aXBBbGxDbG9zZTogc3RyaW5nLFxuICAgKiAgIHRvb2x0aXBBbGxBZGQ6c3RyaW5nLFxuICAgKiAgIHRvb2x0aXBBbGxSZW1vdmU6IHN0cmluZyxcbiAgICogfVxuICAgKi9cbiAgQElucHV0KCkgc2V0IHRleHRXb3Jkcyh3b3JkczogSVRleHRXb3JkcyB8IG51bGwpIHtcbiAgICB0aGlzLl90ZXh0V29yZHMgPSB7IC4uLnRoaXMudGV4dFdvcmRzLCAuLi53b3JkcyB9O1xuICB9IC8vIGFsbG93IHRvIHRyYW5zbGF0ZSBhbGwgdGV4dHMgdG8gb3RoZXIgbGFuZ3VhZ2VcbiAgZ2V0IHRleHRXb3JkcygpIHtcbiAgICByZXR1cm4gdGhpcy5fdGV4dFdvcmRzO1xuICB9XG4gIHByaXZhdGUgX3RleHRXb3JkczogSVRleHRXb3JkcyB8IG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBEZWZhdWx0cyB0byB0cnVlLiBJZiB0aGlzIGlzIGVuYWJsZWQsIHRoZW4gbmF2aWdhdGluZyBpbiB0aGUgdHJlZSB3aXRoIHRoZSBrZXlib2FyZCBvbmx5IHdvcmtzXG4gICAqIGlmIHRoZSBtb3VzZSBpcyBvdmVyIHRoZSB0cmVlIGFyZWEuIFRoaXMgbGltaXRhdGlvbiBpcyB1c2VmdWwgaWYgeW91IGhhdmUgbXVsdGlwbGUgdHJlZXMgb3Igb3RoZXIgY29tcG9uZW50c1xuICAgKiB0aGF0IG1pZ2h0IGJlIHVzaW5nIGtleWJvYXJkIGlucHV0LlxuICAgKi9cbiAgQElucHV0KCkgbW91c2VBd2FyZUtleWJvYXJkQ29udHJvbCA9IHRydWU7XG5cbiAgLyoqXG4gICAqIFdpdGggdGhpcyBwYXJhbWV0ZXIsIHlvdSBjYW4gY29uZmlndXJlIHdoaWNoIGtleXMgd2lsbCBiZSBsaXN0ZW5lbmQgdG8gdG8gc3dpdGNoIHRoZSB0cmVlIGVsZW1lbnRzLFxuICAgKiBhbmQgYWxzbyB0byBkaXNhYmxlIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSBrZXlzICovXG4gIEBJbnB1dCgpIHNldCBjdXN0b21LZXlib2FyZE9wZXJhdGlvbkNvbmZpZyhjb25maWc6IElLZXlib2FyZE9wZXJhdGlvbkNvbmZpZykge1xuICAgIHRoaXMua2V5Ym9hcmRPcGVyYXRpb25TZXJ2aWNlLm1lcmdlQ29uZmlnT3BlcmF0aW9uKGNvbmZpZyk7XG4gIH1cblxuICAvKipcbiAgICogWW91IGNhbiBzdXBwbHkgY3VzdG9tIGZpbHRlcnMgdGhhdCBhcmUgcHJvY2Vzc2VkIHdoZW4gdGhlIGZpbHRlciBpbnB1dCBpcyBjaGFuZ2VkLiBEZWZhdWx0IGZpbHRlcnMgYXJlIHVzZWRcbiAgICogdGhhdCBjaGVjayBmb3Igc2hvcnQgdGV4dCBhbmQgaXRlbSBudW1iZXIgbWF0Y2hlcywgYW5kIHlvdSBjYW4gZWl0aGVyIGFkZCBjdXN0b20gZmlsdGVycyBvciByZXBsYWNlIHRoZSBkZWZhdWx0IG9uZXMuXG4gICAqL1xuICBASW5wdXQoKSBsaXN0RmlsdGVyRnVuYyA9IERFRkFVTFRfRklMVEVSUztcblxuICAvKipcbiAgICogT3B0aW9uYWwuIEZvciB0YWJsZSB2aWV3cywgdGhpcyBhbGxvd3MgeW91IHRvIGFkZCBjdXN0b20gY29sdW1ucyB0byB0aGUgdGFibGUuXG4gICAqIGFkZFRhYmxlQ29sdW1uczogQXJyYXkgb2Ygb2JqZWN0c1xuICAgKiB7XG4gICAqICAgbmFtZTogc3RyaW5nLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBuYW1lIG9mIGNvbHVtblxuICAgKiAgIHRpdGxlOiBzdHJpbmcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2hvd2VkIHRpdGxlIG9mIGNvbHVtblxuICAgKiAgIGFsaWduPzogc3RyaW5nLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3B0aW9uYWwgYWxpZ2h0OiBsZWZ0KGRlZmF1bHQpIC8gY2VudGVyIC8gcmlnaHRcbiAgICogICBudW1iZXJGb3JtYXQ/OiBzdHJpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9wdGlvbmFsIGZvcm1hdCBvZiBudW1iZXIgdmFsdWUsIGV4YW1wbGU6ICcxLjItMidcbiAgICogfVxuICAgKi9cbiAgQElucHV0KCkgYWRkVGFibGVDb2x1bW5zOiBUYWJsZUNvbHVtblR5cGVbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBUaGlzIGFsbG93cyB5b3UgdG8gc3VwcGx5IGEgbGlzdCBvZiBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgdXNlZCB0byBjaGFuZ2UgdGhlIGFwcGVhcmFuY2Ugb2YgZWxlbWVudHMuXG4gICAqIFRoZXkgb2JqZWN0cyBjb250YWluIGEgcHJlZGljYXRlIGZ1bmN0aW9uIHRoYXQgaXMgZXZhbHVhdGVkLCBhbG9uZyB3aXRoIGFuIG9wdGlvbiB0byBjb25maWd1cmUgdGhlXG4gICAqIGFwcGVhcmFuY2Ugb2YgdGhlIGVsZW1lbnQuXG4gICAqICAgZnVuY3Rpb25WaWV3OiBBcnJheSBvZiBvYmplY3RzXG4gICAqICAge1xuICAgKiAgICAgbmFtZTogc3RyaW5nLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbmFtZSBvZiB2aWV3IHBhcnQ6IHlvdSBjYW4gYWRkL3JlbW92ZSBpdCB3aGVuIGl0IG5lZWRcbiAgICogICAgIGZ1bmM6IChlbGVtZW50OiBhbnksIHJlc3VsdD86IGFueSkgPT4gYm9vbGVhbiwgIC8vIHRoaXMgZmlsdGVyIGZ1bmN0aW9uIGNhbGN1bGF0ZSBjb25kaXRpb24gdG8gY2hhbmdlIHZpZXdcbiAgICogICAgIHZpZXc6IHtcbiAgICogICAgICAgaWNvbk5hbWU/OiBzdHJpbmcsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoYW5nZWQgbmFtZSBvZiBpY29uXG4gICAqICAgICAgIGljb25Db2xvcj86IHN0cmluZywgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGFuZ2VkIGNvbG9yIG9mIGljb25cbiAgICogICAgICAgdGV4dEJvbGQ/OiBzdHJpbmcsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoYW5nZWQgd2VpZ2h0IG9mIHRleHRcbiAgICogICAgICAgdGV4dENvbG9yPzogc3RyaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoYW5nZWQgY29sb3Igb2YgdGV4dFxuICAgKiAgICAgfVxuICAgKiAgIH1cbiAgICovXG4gIEBJbnB1dCgpIGZ1bmN0aW9uVmlldzogSUZ1bmN0aW9uVmlld0xpbmVbXSB8IG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGlzIGlzIGVtaXR0ZWQgd2hlbiBhbiBlbGVtZW50IGlzIHNlbGVjdGVkIGJ5IGNsaWNraW5nIG9uIGl0LiBUaGUgc2VsZWN0ZWQgZWxlbWVudCBpcyBlbWl0dGVkIGFzIHRoZSBldmVudCB2YWx1ZS5cbiAgICovXG4gIEBPdXRwdXQoKSBzZWxlY3RDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8SUVsZW1lbnREdG8gfCBudWxsPigpO1xuXG4gIC8qKlxuICAgKiBUaGlzIGlzIGVtaXR0ZWQgd2hlbiBhbiBlbGVtZW50IGlzIHNlbGVjdGVkIGJ5IGRvdWJsZSBjbGlja2luZyBvbiBpdC4gVGhlIHNlbGVjdGVkIGVsZW1lbnQgaXMgZW1pdHRlZCBhcyB0aGUgZXZlbnQgdmFsdWUuXG4gICAqL1xuICBAT3V0cHV0KCkgc2VsZWN0RGJsQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPElFbGVtZW50RHRvPigpO1xuXG4gIC8qKlxuICAgKiBUaGlzIGlzIGVtaXR0ZWQgd2hlbiBhbiBlbGVtZW50IGlzIHNlbGVjdGVkIGJ5IHJpZ2h0IGNsaWNraW5nIG9uIGl0LiBUaGUgc2VsZWN0ZWQgZWxlbWVudCBpcyBlbWl0dGVkIGFzIHRoZSBldmVudCB2YWx1ZS5cbiAgICovXG4gIEBPdXRwdXQoKSBjb250ZXh0TWVudUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxDb250ZXh0TWVudURhdGFUeXBlPigpO1xuXG4gIC8qKlxuICAgKiBUaGlzIGlzIGVtaXR0ZWQgd2hlbiB0aGUgc2VsZWN0ZWQgZWxlbWVudHMgaW4gdGhlIHRyZWUgYXJlIGNoYW5nZWQuIFRoZSBzZWxlY3RlZCBlbGVtZW50cyBhcmUgZW1pdHRlZCBhcyB0aGUgZXZlbnQgdmFsdWUuXG4gICAqIFNlbGVjdGVkIGVsZW1lbnRzIGFyZSBlbGVtZW50cyB3aG9zZSBjaGVja2JveGVzIGFyZSBjaGVja2VkLCBhbmQgYXJlIGRpZmZlcmVudCB0aGFuIGVsZW1lbnRzIHRoYXQgYXJlIGluIGFuIGFjdGl2ZSBzZWxlY3Rpb24gc3RhdGUuXG4gICAqIFR5cGNpYWwgdXNlIGNhc2VzIGZvciB0aGlzIGluY2x1ZGUgZS5nLiBzZWxlY3RpbmcgbXVsdGlwbGUgZWxlbWVudHMgd2l0aGluIGEgc2VydmljZSBzcGVjaWZpY2F0aW9uIHdpdGhvdXRcbiAgICogYWN0dWFsbHkgZm9jdXNzaW5nIHRoZW0sIGUuZy4gZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZy5cbiAgICovXG4gIEBPdXRwdXQoKSBzZWxlY3RlZEVsZW1lbnRzQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8U2VsZWN0ZWRFbGVtZW50W10+KCk7XG5cbiAgQFZpZXdDaGlsZCgnYXZhVHJlZVdyYXBwZXInKSBhdmFUcmVlV3JhcHBlciE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKCdhdmFNYWluV3JhcHBlcicpIGF2YU1haW5XcmFwcGVyITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoJ2F2YVRyZWVGaWx0ZXJJbnB1dCcpIGF2YVRyZWVGaWx0ZXJJbnB1dCE6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG4gIHNlbGVjdGVkRWxlbWVudDogSUVsZW1lbnREdG8gfCBudWxsID0gbnVsbDtcbiAgc2VydmljZVNwZWNpZmljYXRpb24hOiBTZXJ2aWNlU3BlY2lmaWNhdGlvbkR0bztcbiAgaXNMaXN0ZW5LZXlib2FyZCA9IGZhbHNlO1xuICBwcml2YXRlIGlzRW1pdGVTZWxlY3RlZEVsZW1lbnRzID0gZmFsc2U7XG4gIHByaXZhdGUgc2VsZWN0aW5nRWxlbWVudHNUcmVlRGF0YTogU2VsZWN0aW5nRWxlbWVudHNUeXBlW10gPSBbXTtcbiAgZmxhdEVsZW1lbnRzOiBJRWxlbWVudER0b1tdIHwgbnVsbCA9IG51bGw7XG4gIHByZXNlbGVjdGVkRWxlbWVudDogSUVsZW1lbnREdG8gfCBudWxsID0gbnVsbDtcbiAgZmlsdGVySW5wdXQgPSAnJztcbiAgbGlzdE1vZGVWaWV3VHlwZSA9IE1vZGVWaWV3VHlwZTtcbiAgcHJpdmF0ZSBmaWx0ZXIgPSAnJztcbiAgcHJpdmF0ZSAkZmlsdGVyID0gbmV3IFJlcGxheVN1YmplY3Q8c3RyaW5nPigxKTtcbiAgZmlsdGVyZWRFbGVtZW50TGlzdDogSUVsZW1lbnREdG9bXSA9IFtdO1xuICBwcml2YXRlICRkZXN0cm95ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBAU2VsZigpIHByaXZhdGUgZmxhdEVsZW1lbnRzU2VydmljZTogRmxhdEVsZW1lbnRzU2VydmljZSxcbiAgICBAU2VsZigpIHByaXZhdGUgc2VsZWN0RWxlbWVudFNlcnZpY2U6IFNlbGVjdEVsZW1lbnRTZXJ2aWNlLFxuICAgIEBTZWxmKCkgcHJpdmF0ZSB0cmVlTm9kZVNlbGVjdGlvblNlcnZpY2U6IFRyZWVOb2RlU2VsZWN0aW9uU2VydmljZSxcbiAgICBAU2VsZigpIHByaXZhdGUgZXhwYW5kUGFyZW50R3JvdXBTZXJ2aWNlOiBFeHBhbmRQYXJlbnRHcm91cFNlcnZpY2UsXG4gICAgQFNlbGYoKSBwcml2YXRlIGtleWJvYXJkT3BlcmF0aW9uU2VydmljZTogS2V5Ym9hcmRPcGVyYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmVcbiAgKSB7XG4gICAgdGhpcy5fdGV4dFdvcmRzID0geyAuLi5ERUZBVUxUX1RFWFRfV09SRFMgfTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0RWxlbWVudFNlcnZpY2UucHJlc2VsZWN0ZWRFbGVtZW50LnBpcGUodGFrZVVudGlsKHRoaXMuJGRlc3Ryb3kpKS5zdWJzY3JpYmUoKGUpID0+ICh0aGlzLnByZXNlbGVjdGVkRWxlbWVudCA9IGUpKTtcbiAgICB0aGlzLnNlbGVjdEVsZW1lbnRTZXJ2aWNlLnNlbGVjdENsaWNrRWxlbWVudC5waXBlKHRha2VVbnRpbCh0aGlzLiRkZXN0cm95KSkuc3Vic2NyaWJlKChlKSA9PiB7XG4gICAgICB0aGlzLnNlbGVjdGVkRWxlbWVudCA9IGU7XG4gICAgICB0aGlzLnNlbGVjdENsaWNrLmVtaXQoZSk7XG4gICAgfSk7XG4gICAgdGhpcy5zZWxlY3RFbGVtZW50U2VydmljZS5zZWxlY3REYmxDbGlja0VsZW1lbnQucGlwZSh0YWtlVW50aWwodGhpcy4kZGVzdHJveSkpLnN1YnNjcmliZSgoZSkgPT4gdGhpcy5zZWxlY3REYmxDbGljay5lbWl0KGUpKTtcbiAgICB0aGlzLnNlbGVjdEVsZW1lbnRTZXJ2aWNlLnNlbGVjdENvbnRleHRNZW51RWxlbWVudC5waXBlKHRha2VVbnRpbCh0aGlzLiRkZXN0cm95KSkuc3Vic2NyaWJlKChlKSA9PiB0aGlzLmNvbnRleHRNZW51RXZlbnQuZW1pdChlKSk7XG4gICAgdGhpcy5mbGF0RWxlbWVudHNTZXJ2aWNlLmZsYXRFbGVtZW50c0R0by5waXBlKHRha2VVbnRpbCh0aGlzLiRkZXN0cm95KSkuc3Vic2NyaWJlKChlKSA9PiB7XG4gICAgICB0aGlzLmZsYXRFbGVtZW50cyA9IGU7XG4gICAgICB0aGlzLmdldEZpbHRlcmVkTGlzdCgpO1xuICAgIH0pO1xuXG4gICAgdGhpcy4kZmlsdGVyLnBpcGUodGFrZVVudGlsKHRoaXMuJGRlc3Ryb3kpLCBkZWJvdW5jZVRpbWUoMjUwKSkuc3Vic2NyaWJlKChmaWx0ZXIpID0+IHtcbiAgICAgIHRoaXMuZmlsdGVyID0gZmlsdGVyO1xuICAgICAgdGhpcy5nZXRGaWx0ZXJlZExpc3QoKTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRpYWxpemVFdmVudExpc3RlbmVycygpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIHRoaXMuZmxhdEVsZW1lbnRzU2VydmljZS5saXN0RmlsdGVyRnVuYyA9IHRoaXMubGlzdEZpbHRlckZ1bmM7XG4gICAgdGhpcy5mbGF0RWxlbWVudHNTZXJ2aWNlLmZ1bmN0aW9uVmlldyA9IHRoaXMuZnVuY3Rpb25WaWV3O1xuXG4gICAgaWYgKGNoYW5nZXNbJ3Byb2plY3QnXSAmJiB0aGlzLnByb2plY3Q/LnNlcnZpY2VTcGVjaWZpY2F0aW9ucz8uWzBdKSB7XG4gICAgICB0aGlzLnNlcnZpY2VTcGVjaWZpY2F0aW9uID0gdGhpcy5wcm9qZWN0LnNlcnZpY2VTcGVjaWZpY2F0aW9uc1swXTtcbiAgICAgIHRoaXMuZmxhdEVsZW1lbnRzU2VydmljZS5zZXRFbGVtZW50c0R0byh0aGlzLnNlcnZpY2VTcGVjaWZpY2F0aW9uKTtcblxuICAgICAgaWYgKHRoaXMuaXNTZWxlY3Rpb25Nb2RlKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0aW5nRWxlbWVudHNUcmVlRGF0YSA9IHRoaXMudHJlZU5vZGVTZWxlY3Rpb25TZXJ2aWNlLmxvYWRTZWxlY3RpbmdFbGVtZW50cyh0aGlzLnNlcnZpY2VTcGVjaWZpY2F0aW9uLmVsZW1lbnRzKTtcbiAgICAgICAgdGhpcy50cmVlTm9kZVNlbGVjdGlvblNlcnZpY2UudHJlZU5vZGVTZWxlY3RpbmcucGlwZSh0YWtlVW50aWwodGhpcy4kZGVzdHJveSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuaXNFbWl0ZVNlbGVjdGVkRWxlbWVudHMpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBzZWxlY3RpbmdUcmVlID0gdGhpcy50cmVlTm9kZVNlbGVjdGlvblNlcnZpY2UuZ2V0VHJlZVJvb3QodGhpcy5zZWxlY3RpbmdFbGVtZW50c1RyZWVEYXRhKTtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEVsZW1lbnRzQ2hhbmdlZC5lbWl0KHNlbGVjdGluZ1RyZWUpO1xuICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoKGNoYW5nZXNbJ3NlbGVjdGVkTm9kZUlkJ10gJiYgdGhpcy5wcm9qZWN0KSB8fCBjaGFuZ2VzWydwcm9qZWN0J10pIHtcbiAgICAgIHRoaXMuZmxhdEVsZW1lbnRzU2VydmljZS5nZXRPbmVFbGVtZW50QnlJZCh0aGlzLnNlbGVjdGVkTm9kZUlkKS5zdWJzY3JpYmUoKGUpID0+IHtcbiAgICAgICAgaWYgKGUpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdEVsZW1lbnRTZXJ2aWNlLnNldENsaWNrRWxlbWVudChlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNTZWxlY3Rpb25Nb2RlICYmIChjaGFuZ2VzWydpbml0aWFsbHlTZWxlY3RlZEVsZW1lbnRzJ10gfHwgY2hhbmdlc1sncHJvamVjdCddKSkge1xuICAgICAgdGhpcy5mb3JtU2VsZWN0aW5nTGlzdCgpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuJGRlc3Ryb3kubmV4dCh0cnVlKTtcbiAgICB0aGlzLiRkZXN0cm95LmNvbXBsZXRlKCk7XG4gIH1cblxuICBwcml2YXRlIG1vdXNlT3ZlcigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNMaXN0ZW5LZXlib2FyZCkge1xuICAgICAgdGhpcy5pc0xpc3RlbktleWJvYXJkID0gdHJ1ZTtcbiAgICAgIHRoaXMuYXZhVHJlZUZpbHRlcklucHV0Py5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtb3VzZU91dCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzTGlzdGVuS2V5Ym9hcmQgPSBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlR2xvYmFsS2V5Ym9hcmRFdmVudChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgY29uc3Qga2V5RXZlbnQgPSBldmVudCBhcyBLZXlib2FyZEV2ZW50O1xuICAgICAgaWYgKCF0aGlzLm1vdXNlQXdhcmVLZXlib2FyZENvbnRyb2wgfHwgdGhpcy5pc0xpc3RlbktleWJvYXJkKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLnByZXNlbGVjdGVkRWxlbWVudCB8fCB0aGlzLnNlbGVjdGVkRWxlbWVudDtcblxuICAgICAgICBjb25zdCB7IG9wZXJhdGlvbiwgbmV4dEVsZW1lbnQgfSA9IHRoaXMua2V5Ym9hcmRPcGVyYXRpb25TZXJ2aWNlLmhhbmRsZUtleWJvYXJkRXZlbnQoa2V5RXZlbnQsIGVsZW1lbnQpIHx8IHsgbmV4dEVsZW1lbnQ6IG51bGwgfTtcbiAgICAgICAgc3dpdGNoIChvcGVyYXRpb24pIHtcbiAgICAgICAgICBjYXNlIEtleWJvYXJkT3BlcmF0aW9uVHlwZS5Nb3ZlU2VsZWN0ZWRQb3NpdGlvblVwOlxuICAgICAgICAgICAgdGhpcy5zaG93RWxlbWVudChuZXh0RWxlbWVudCwgJy5zZWxlY3QnKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgS2V5Ym9hcmRPcGVyYXRpb25UeXBlLk1vdmVTZWxlY3RlZFBvc2l0aW9uRG93bjpcbiAgICAgICAgICAgIHRoaXMuc2hvd0VsZW1lbnQobmV4dEVsZW1lbnQsICcuc2VsZWN0Jyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIEtleWJvYXJkT3BlcmF0aW9uVHlwZS5Nb3ZlQ2hvc2VuUG9zaXRpb25Eb3duOlxuICAgICAgICAgICAgdGhpcy5zaG93RWxlbWVudChuZXh0RWxlbWVudCwgbmV4dEVsZW1lbnQ/LmlkID09PSB0aGlzLnNlbGVjdGVkRWxlbWVudD8uaWQgPyAnLnNlbGVjdCcgOiAnLmNob29zZScpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBLZXlib2FyZE9wZXJhdGlvblR5cGUuTW92ZUNob3NlblBvc2l0aW9uVXA6XG4gICAgICAgICAgICB0aGlzLnNob3dFbGVtZW50KG5leHRFbGVtZW50LCBuZXh0RWxlbWVudD8uaWQgPT09IHRoaXMuc2VsZWN0ZWRFbGVtZW50Py5pZCA/ICcuc2VsZWN0JyA6ICcuY2hvb3NlJyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2hvd0VsZW1lbnQoZWxlbWVudDogSUVsZW1lbnREdG8gfCBudWxsLCBuYW1lUXVlcnk6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICBpZiAodGhpcy5tb2RlVmlldyA9PT0gTW9kZVZpZXdUeXBlLlRyZWUpIHtcbiAgICAgICAgdGhpcy5leHBhbmRQYXJlbnRHcm91cHMoZWxlbWVudCk7XG4gICAgICB9XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2Nyb2xsTGluZShuYW1lUXVlcnkpLCAwKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNjcm9sbExpbmUobmFtZVF1ZXJ5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBwYXJlbnRSZWN0ID0gdGhpcy5hdmFUcmVlV3JhcHBlcj8ubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBzaG93ZWRFbGVtZW50ID0gdGhpcy5hdmFUcmVlV3JhcHBlcj8ubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKG5hbWVRdWVyeSkgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICBpZiAoIXNob3dlZEVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjaGlsZFJlY3QgPSBzaG93ZWRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGlmIChcbiAgICAgIGNoaWxkUmVjdC5ib3R0b20gPiBwYXJlbnRSZWN0LmJvdHRvbSB8fFxuICAgICAgY2hpbGRSZWN0LnRvcCA8IHBhcmVudFJlY3QudG9wIHx8XG4gICAgICAodGhpcy5tb2RlVmlldyA9PT0gTW9kZVZpZXdUeXBlLlRhYmxlICYmIGNoaWxkUmVjdC50b3AgPCBwYXJlbnRSZWN0LnRvcCArIDI0KVxuICAgICkge1xuICAgICAgc2hvd2VkRWxlbWVudD8uc2Nyb2xsSW50b1ZpZXcoKTtcbiAgICAgIHRoaXMuYXZhVHJlZVdyYXBwZXI/Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG8oeyBsZWZ0OiAwIH0pO1xuICAgICAgaWYgKHRoaXMubW9kZVZpZXcgPT09IE1vZGVWaWV3VHlwZS5UYWJsZSkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuY29ycmVjdFNjcm9sbFRhYmxlTGluZShzaG93ZWRFbGVtZW50LCBwYXJlbnRSZWN0KSwgMCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjb3JyZWN0U2Nyb2xsVGFibGVMaW5lKHNob3dlZEVsZW1lbnQ6IEhUTUxFbGVtZW50LCBwYXJlbnRSZWN0OiBET01SZWN0KTogdm9pZCB7XG4gICAgY29uc3QgY2hpbGRSZWN0ID0gc2hvd2VkRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBpZiAoY2hpbGRSZWN0LnRvcCA8IHBhcmVudFJlY3QudG9wICsgMjQpIHtcbiAgICAgIHRoaXMuYXZhVHJlZVdyYXBwZXIubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgLT0gMjQ7XG4gICAgfVxuICB9XG5cbiAgZXhwYW5kUGFyZW50R3JvdXBzKGVsZW1lbnQ6IElFbGVtZW50RHRvKTogdm9pZCB7XG4gICAgdGhpcy5leHBhbmRQYXJlbnRHcm91cFNlcnZpY2UuZXhwYW5kUGFyZW50R3JvdXBzKGVsZW1lbnQsIHRoaXMuZmxhdEVsZW1lbnRzLCB0aGlzLmV4cGFuc2lvblN0YXRlKTtcbiAgfVxuXG4gIG9uRmlsdGVyKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLiRmaWx0ZXIubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBjaGFuZ2VBbGxFbGVtZW50c0V4cGFuc2lvblN0YXR1cyhpc0V4cGFuZGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKCFpc0V4cGFuZGVkKSB7XG4gICAgICBPYmplY3Qua2V5cyh0aGlzLmV4cGFuc2lvblN0YXRlKS5mb3JFYWNoKChpZDogc3RyaW5nKSA9PiBkZWxldGUgdGhpcy5leHBhbnNpb25TdGF0ZVtpZF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZsYXRFbGVtZW50cz8uZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICBpZiAoaXRlbS5lbGVtZW50VHlwZURpc2NyaW1pbmF0b3IgPT09ICdTZXJ2aWNlU3BlY2lmaWNhdGlvbkdyb3VwRHRvJykge1xuICAgICAgICAgIHRoaXMuZXhwYW5zaW9uU3RhdGVbaXRlbS5pZF0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZvcm1TZWxlY3RpbmdMaXN0KCk6IHZvaWQge1xuICAgIHRoaXMuaXNFbWl0ZVNlbGVjdGVkRWxlbWVudHMgPSBmYWxzZTtcbiAgICBpZiAoIXRoaXMuaW5pdGlhbGx5U2VsZWN0ZWRFbGVtZW50cykge1xuICAgICAgdGhpcy5pc0VtaXRlU2VsZWN0ZWRFbGVtZW50cyA9IHRydWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy50cmVlTm9kZVNlbGVjdGlvblNlcnZpY2UuZ2V0RmxhdFNlbGVjdGVkTGlzdElkKHRoaXMuaW5pdGlhbGx5U2VsZWN0ZWRFbGVtZW50cyk7XG4gICAgdGhpcy50cmVlTm9kZVNlbGVjdGlvblNlcnZpY2UuZmxhdFNlbGVjdGVkTGlzdElkLmZvckVhY2goKGlkLCBpbmRleCkgPT4ge1xuICAgICAgdGhpcy50cmVlTm9kZVNlbGVjdGlvblNlcnZpY2UuY2hhbmdlU2VsZWN0aW5nKHRydWUsIGlkKTtcbiAgICAgIGlmIChpbmRleCA9PT0gdGhpcy50cmVlTm9kZVNlbGVjdGlvblNlcnZpY2UuZmxhdFNlbGVjdGVkTGlzdElkLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgdGhpcy5pc0VtaXRlU2VsZWN0ZWRFbGVtZW50cyA9IHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzZWxlY3RPckRlc2VsZWN0QWxsKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy50cmVlTm9kZVNlbGVjdGlvblNlcnZpY2UuY2hhbmdlQWxsKHZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RmlsdGVyZWRMaXN0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmZsYXRFbGVtZW50cz8ubGVuZ3RoKSB7XG4gICAgICBpZiAoIXRoaXMuZmlsdGVyKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyZWRFbGVtZW50TGlzdCA9IHRoaXMuZmxhdEVsZW1lbnRzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5maWx0ZXJlZEVsZW1lbnRMaXN0ID0gdGhpcy5mbGF0RWxlbWVudHMuZmlsdGVyKChpdGVtKSA9PiB0aGlzLmZsYXRFbGVtZW50c1NlcnZpY2UuY2hlY2tGaWx0ZXJWYWx1ZShpdGVtLCB0aGlzLmZpbHRlcikpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUV2ZW50TGlzdGVuZXJzKCk6IHZvaWQge1xuICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIGZyb21FdmVudCh0aGlzLmF2YU1haW5XcmFwcGVyLm5hdGl2ZUVsZW1lbnQsICdtb3VzZWxlYXZlJylcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuJGRlc3Ryb3kpKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLm1vdXNlT3V0KCk7XG4gICAgICAgIH0pO1xuXG4gICAgICBmcm9tRXZlbnQodGhpcy5hdmFNYWluV3JhcHBlci5uYXRpdmVFbGVtZW50LCAnbW91c2VlbnRlcicpXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiRkZXN0cm95KSlcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5tb3VzZU92ZXIoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgIGlmICghdGhpcy5pc1NlbGVjdGlvbk1vZGUpIHtcbiAgICAgICAgZnJvbUV2ZW50KGRvY3VtZW50LCAna2V5ZG93bicpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy4kZGVzdHJveSksXG4gICAgICAgICAgICBmaWx0ZXIoKCkgPT4gIXRoaXMubW91c2VBd2FyZUtleWJvYXJkQ29udHJvbCB8fCB0aGlzLmlzTGlzdGVuS2V5Ym9hcmQpXG4gICAgICAgICAgKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVHbG9iYWxLZXlib2FyZEV2ZW50KGV2ZW50KTtcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cIm1haW4td3JhcHBlclwiXG4gICNhdmFNYWluV3JhcHBlclxuPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJjb250cm9sXCJcbiAgICAjY29udHJvbFxuICA+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiY29udHJvbC1maWx0ZXJcIj5cbiAgICAgIDxtYXQtbGFiZWw+e3sgdGV4dFdvcmRzPy50ZXh0U2VhcmNoIH19PC9tYXQtbGFiZWw+XG4gICAgICA8aW5wdXRcbiAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgW25nTW9kZWxdPVwiZmlsdGVySW5wdXRcIlxuICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkZpbHRlcigkZXZlbnQpXCJcbiAgICAgICAgI2F2YVRyZWVGaWx0ZXJJbnB1dFxuICAgICAgLz5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtb2RlVmlldyA9PT0gbGlzdE1vZGVWaWV3VHlwZS5UcmVlXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwiY29udHJvbC1pY29uXCJcbiAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgIChjbGljayk9XCJjaGFuZ2VBbGxFbGVtZW50c0V4cGFuc2lvblN0YXR1cyh0cnVlKVwiXG4gICAgICAgIFttYXRUb29sdGlwXT1cInRleHRXb3Jkcz8udG9vbHRpcEFsbE9wZW4gfHwgJydcIlxuICAgICAgPlxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJsYXllci1iYWNrZ3JvdW5kXCI+bGF5ZXJzPC9tYXQtaWNvbj5cbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibGF5ZXItaWNvblwiPmFkZDwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJjb250cm9sLWljb25cIlxuICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgKGNsaWNrKT1cImNoYW5nZUFsbEVsZW1lbnRzRXhwYW5zaW9uU3RhdHVzKGZhbHNlKVwiXG4gICAgICAgIFttYXRUb29sdGlwXT1cInRleHRXb3Jkcz8udG9vbHRpcEFsbENsb3NlIHx8ICcnXCJcbiAgICAgID5cbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibGF5ZXItYmFja2dyb3VuZFwiPmxheWVyczwvbWF0LWljb24+XG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImxheWVyLWljb25cIj5yZW1vdmU8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzU2VsZWN0aW9uTW9kZVwiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAoY2xpY2spPVwic2VsZWN0T3JEZXNlbGVjdEFsbCh0cnVlKVwiXG4gICAgICAgIFttYXRUb29sdGlwXT1cInRleHRXb3Jkcz8udG9vbHRpcEFsbEFkZCB8fCAnJ1wiXG4gICAgICAgIGNsYXNzPVwiY29udHJvbC1idXR0b25cIlxuICAgICAgPlxuICAgICAgICA8bWF0LWljb24+YWRkPC9tYXQtaWNvbj5cbiAgICAgICAgPHNwYW4+e3sgdGV4dFdvcmRzPy50ZXh0QWxsIH19PC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uXG4gICAgICAgIChjbGljayk9XCJzZWxlY3RPckRlc2VsZWN0QWxsKGZhbHNlKVwiXG4gICAgICAgIFttYXRUb29sdGlwXT1cInRleHRXb3Jkcz8udG9vbHRpcEFsbFJlbW92ZSB8fCAnJ1wiXG4gICAgICAgIGNsYXNzPVwiY29udHJvbC1idXR0b25cIlxuICAgICAgPlxuICAgICAgICA8bWF0LWljb24+cmVtb3ZlPC9tYXQtaWNvbj5cbiAgICAgICAgPHNwYW4+e3sgdGV4dFdvcmRzPy50ZXh0QWxsIH19PC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuICA8ZGl2XG4gICAgW3N0eWxlLmhlaWdodF09XCInY2FsYygxMDAlIC0gJyArIGNvbnRyb2wub2Zmc2V0SGVpZ2h0ICsgJ3B4KSdcIlxuICAgIGNsYXNzPVwiYXZhLXRyZWUtd3JhcHBlclwiXG4gICAgI2F2YVRyZWVXcmFwcGVyXG4gID5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmxhdEVsZW1lbnRzPy5sZW5ndGg7IGVsc2Ugbm90aGluZ1wiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpbHRlcmVkRWxlbWVudExpc3Q/Lmxlbmd0aDsgZWxzZSBub3RoaW5nRmlsdGVyZWRcIj5cbiAgICAgICAgPGF2YS10cmVlLXN0cnVjdHVyZVxuICAgICAgICAgICpuZ0lmPVwibW9kZVZpZXcgPT09IGxpc3RNb2RlVmlld1R5cGUuVHJlZSAmJiAhYXZhVHJlZUZpbHRlcklucHV0LnZhbHVlXCJcbiAgICAgICAgICBbc2VydmljZVNwZWNpZmljYXRpb25dPVwic2VydmljZVNwZWNpZmljYXRpb25cIlxuICAgICAgICAgIFtpbmRlbnRdPVwiaW5kZW50XCJcbiAgICAgICAgICBbZXhwYW5zaW9uU3RhdGVdPVwiZXhwYW5zaW9uU3RhdGVcIlxuICAgICAgICAgIFtpc1NlbGVjdGlvbk1vZGVdPVwiaXNTZWxlY3Rpb25Nb2RlXCJcbiAgICAgICAgICBbc2VsZWN0ZWRDb2xvcl09XCJzZWxlY3RlZENvbG9yXCJcbiAgICAgICAgICBbYWxsb3dEYmxDbGlja109XCJhbGxvd0RibENsaWNrXCJcbiAgICAgICAgPlxuICAgICAgICA8L2F2YS10cmVlLXN0cnVjdHVyZT5cbiAgICAgICAgPGF2YS1saXN0LXN0cnVjdHVyZVxuICAgICAgICAgICpuZ0lmPVwibW9kZVZpZXcgPT09IGxpc3RNb2RlVmlld1R5cGUuTGlzdCB8fCAobW9kZVZpZXcgPT09IGxpc3RNb2RlVmlld1R5cGUuVHJlZSAmJiBhdmFUcmVlRmlsdGVySW5wdXQudmFsdWUpXCJcbiAgICAgICAgICBbZmlsdGVyZWRFbGVtZW50TGlzdF09XCJmaWx0ZXJlZEVsZW1lbnRMaXN0XCJcbiAgICAgICAgICBbaXNTZWxlY3Rpb25Nb2RlXT1cImlzU2VsZWN0aW9uTW9kZVwiXG4gICAgICAgICAgW3NlbGVjdGVkQ29sb3JdPVwic2VsZWN0ZWRDb2xvclwiXG4gICAgICAgICAgW2FsbG93RGJsQ2xpY2tdPVwiYWxsb3dEYmxDbGlja1wiXG4gICAgICAgID5cbiAgICAgICAgPC9hdmEtbGlzdC1zdHJ1Y3R1cmU+XG4gICAgICAgIDxhdmEtdGFibGUtc3RydWN0dXJlXG4gICAgICAgICAgKm5nSWY9XCJtb2RlVmlldyA9PT0gbGlzdE1vZGVWaWV3VHlwZS5UYWJsZVwiXG4gICAgICAgICAgW2ZpbHRlcmVkRWxlbWVudExpc3RdPVwiZmlsdGVyZWRFbGVtZW50TGlzdFwiXG4gICAgICAgICAgW2lzU2VsZWN0aW9uTW9kZV09XCJpc1NlbGVjdGlvbk1vZGVcIlxuICAgICAgICAgIFthZGRUYWJsZUNvbHVtbnNdPVwiYWRkVGFibGVDb2x1bW5zXCJcbiAgICAgICAgICBbc2VsZWN0ZWRDb2xvcl09XCJzZWxlY3RlZENvbG9yXCJcbiAgICAgICAgICBbYWxsb3dEYmxDbGlja109XCJhbGxvd0RibENsaWNrXCJcbiAgICAgICAgPlxuICAgICAgICA8L2F2YS10YWJsZS1zdHJ1Y3R1cmU+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L2Rpdj5cbjxuZy10ZW1wbGF0ZSAjbm90aGluZz5cbiAge3sgdGV4dFdvcmRzPy50ZXh0Tm90aGluZyB9fVxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjbm90aGluZ0ZpbHRlcmVkPlxuICB7eyB0ZXh0V29yZHM/LnRleHROb3RoaW5nRmlsdGVyZWQgfX1cbjwvbmctdGVtcGxhdGU+XG4iXX0=
@@ -1,10 +1,10 @@
1
1
  // This file is automatically generated as part of the build process
2
2
  export const version = {
3
- version: "0.1.1-fe--1-add-tree-p0091",
4
- commitInfo: "Branch.feature-FE--1-add-tree-package.Sha.d3582e7bea9f370a0c9d40b97a1219ae980faa9f",
5
- commitDate: "2024-02-17",
6
- commitHash: "d3582e7bea9f370a0c9d40b97a1219ae980faa9f",
7
- informationalVersion: "0.1.1-FE--1-add-tree-package.91+Branch.feature-FE--1-add-tree-package.Sha.d3582e7bea9f370a0c9d40b97a1219ae980faa9f",
8
- buildDateUtc: new Date(Date.UTC(2024, 1, 17, 21, 42, 54))
3
+ version: "1.0.0-beta0097",
4
+ commitInfo: "Branch.develop.Sha.399e14b252d32955f69fbe5731f0dc7db12e03c5",
5
+ commitDate: "2024-02-18",
6
+ commitHash: "399e14b252d32955f69fbe5731f0dc7db12e03c5",
7
+ informationalVersion: "1.0.0-beta.97+Branch.develop.Sha.399e14b252d32955f69fbe5731f0dc7db12e03c5",
8
+ buildDateUtc: new Date(Date.UTC(2024, 1, 18, 12, 55, 26))
9
9
  };
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItYXZhL3NyYy9saWIvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxvRUFBb0U7QUFFcEUsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHO0lBQ25CLE9BQU8sRUFBRSw0QkFBNEI7SUFDckMsVUFBVSxFQUFFLG9GQUFvRjtJQUNoRyxVQUFVLEVBQUUsWUFBWTtJQUN4QixVQUFVLEVBQUUsMENBQTBDO0lBQ3RELG9CQUFvQixFQUFFLG9IQUFvSDtJQUMxSSxZQUFZLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQzVELENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUaGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYXMgcGFydCBvZiB0aGUgYnVpbGQgcHJvY2Vzc1xuXG5leHBvcnQgY29uc3QgdmVyc2lvbiA9IHtcbiAgICB2ZXJzaW9uOiBcIjAuMS4xLWZlLS0xLWFkZC10cmVlLXAwMDkxXCIsXG4gICAgY29tbWl0SW5mbzogXCJCcmFuY2guZmVhdHVyZS1GRS0tMS1hZGQtdHJlZS1wYWNrYWdlLlNoYS5kMzU4MmU3YmVhOWYzNzBhMGM5ZDQwYjk3YTEyMTlhZTk4MGZhYTlmXCIsXG4gICAgY29tbWl0RGF0ZTogXCIyMDI0LTAyLTE3XCIsXG4gICAgY29tbWl0SGFzaDogXCJkMzU4MmU3YmVhOWYzNzBhMGM5ZDQwYjk3YTEyMTlhZTk4MGZhYTlmXCIsXG4gICAgaW5mb3JtYXRpb25hbFZlcnNpb246IFwiMC4xLjEtRkUtLTEtYWRkLXRyZWUtcGFja2FnZS45MStCcmFuY2guZmVhdHVyZS1GRS0tMS1hZGQtdHJlZS1wYWNrYWdlLlNoYS5kMzU4MmU3YmVhOWYzNzBhMGM5ZDQwYjk3YTEyMTlhZTk4MGZhYTlmXCIsXG4gICAgYnVpbGREYXRlVXRjOiBuZXcgRGF0ZShEYXRlLlVUQygyMDI0LCAxLCAxNywgMjEsIDQyLCA1NCkpXG59XG4iXX0=
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItYXZhL3NyYy9saWIvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxvRUFBb0U7QUFFcEUsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHO0lBQ25CLE9BQU8sRUFBRSxnQkFBZ0I7SUFDekIsVUFBVSxFQUFFLDZEQUE2RDtJQUN6RSxVQUFVLEVBQUUsWUFBWTtJQUN4QixVQUFVLEVBQUUsMENBQTBDO0lBQ3RELG9CQUFvQixFQUFFLDJFQUEyRTtJQUNqRyxZQUFZLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQzVELENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUaGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYXMgcGFydCBvZiB0aGUgYnVpbGQgcHJvY2Vzc1xuXG5leHBvcnQgY29uc3QgdmVyc2lvbiA9IHtcbiAgICB2ZXJzaW9uOiBcIjEuMC4wLWJldGEwMDk3XCIsXG4gICAgY29tbWl0SW5mbzogXCJCcmFuY2guZGV2ZWxvcC5TaGEuMzk5ZTE0YjI1MmQzMjk1NWY2OWZiZTU3MzFmMGRjN2RiMTJlMDNjNVwiLFxuICAgIGNvbW1pdERhdGU6IFwiMjAyNC0wMi0xOFwiLFxuICAgIGNvbW1pdEhhc2g6IFwiMzk5ZTE0YjI1MmQzMjk1NWY2OWZiZTU3MzFmMGRjN2RiMTJlMDNjNVwiLFxuICAgIGluZm9ybWF0aW9uYWxWZXJzaW9uOiBcIjEuMC4wLWJldGEuOTcrQnJhbmNoLmRldmVsb3AuU2hhLjM5OWUxNGIyNTJkMzI5NTVmNjlmYmU1NzMxZjBkYzdkYjEyZTAzYzVcIixcbiAgICBidWlsZERhdGVVdGM6IG5ldyBEYXRlKERhdGUuVVRDKDIwMjQsIDEsIDE4LCAxMiwgNTUsIDI2KSlcbn1cbiJdfQ==
@@ -1217,10 +1217,25 @@ class AvaTreeComponent {
1217
1217
  * }
1218
1218
  */
1219
1219
  this.functionView = null;
1220
- this.selectClick = new EventEmitter(); // event after element selected by click
1221
- this.selectDblClick = new EventEmitter(); // event after element selected by double click
1222
- this.contextMenuEvent = new EventEmitter(); // event after element call context menu by right button click
1223
- this.selectedElementsChanged = new EventEmitter(); // event after changed selecting in selecting mode
1220
+ /**
1221
+ * This is emitted when an element is selected by clicking on it. The selected element is emitted as the event value.
1222
+ */
1223
+ this.selectClick = new EventEmitter();
1224
+ /**
1225
+ * This is emitted when an element is selected by double clicking on it. The selected element is emitted as the event value.
1226
+ */
1227
+ this.selectDblClick = new EventEmitter();
1228
+ /**
1229
+ * This is emitted when an element is selected by right clicking on it. The selected element is emitted as the event value.
1230
+ */
1231
+ this.contextMenuEvent = new EventEmitter();
1232
+ /**
1233
+ * This is emitted when the selected elements in the tree are changed. The selected elements are emitted as the event value.
1234
+ * Selected elements are elements whose checkboxes are checked, and are different than elements that are in an active selection state.
1235
+ * Typcial use cases for this include e.g. selecting multiple elements within a service specification without
1236
+ * actually focussing them, e.g. for further processing.
1237
+ */
1238
+ this.selectedElementsChanged = new EventEmitter();
1224
1239
  this.selectedElement = null;
1225
1240
  this.isListenKeyboard = false;
1226
1241
  this.isEmiteSelectedElements = false;
@@ -1554,12 +1569,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImpor
1554
1569
 
1555
1570
  // This file is automatically generated as part of the build process
1556
1571
  const version = {
1557
- version: "0.1.1-fe--1-add-tree-p0091",
1558
- commitInfo: "Branch.feature-FE--1-add-tree-package.Sha.d3582e7bea9f370a0c9d40b97a1219ae980faa9f",
1559
- commitDate: "2024-02-17",
1560
- commitHash: "d3582e7bea9f370a0c9d40b97a1219ae980faa9f",
1561
- informationalVersion: "0.1.1-FE--1-add-tree-package.91+Branch.feature-FE--1-add-tree-package.Sha.d3582e7bea9f370a0c9d40b97a1219ae980faa9f",
1562
- buildDateUtc: new Date(Date.UTC(2024, 1, 17, 21, 42, 54))
1572
+ version: "1.0.0-beta0097",
1573
+ commitInfo: "Branch.develop.Sha.399e14b252d32955f69fbe5731f0dc7db12e03c5",
1574
+ commitDate: "2024-02-18",
1575
+ commitHash: "399e14b252d32955f69fbe5731f0dc7db12e03c5",
1576
+ informationalVersion: "1.0.0-beta.97+Branch.develop.Sha.399e14b252d32955f69fbe5731f0dc7db12e03c5",
1577
+ buildDateUtc: new Date(Date.UTC(2024, 1, 18, 12, 55, 26))
1563
1578
  };
1564
1579
 
1565
1580
  /*