@progress-chef/platform-shared-components 0.0.154 → 0.0.155
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/assets/icons/IconFont.css +6 -3
- package/assets/icons/IconFont.scss +6 -3
- package/assets/icons/IconFont.ttf +0 -0
- package/assets/icons/IconFont.woff +0 -0
- package/assets/icons/IconFont.woff2 +0 -0
- package/esm2022/lib/atoms/atoms.module.mjs +15 -1
- package/esm2022/lib/atoms/drag-and-drop/drag-and-drop.component.mjs +31 -3
- package/esm2022/lib/atoms/markdown-display/markdown-display.component.mjs +39 -0
- package/esm2022/lib/atoms/markdown-display/markdown-display.module.mjs +26 -0
- package/esm2022/lib/atoms/markdown-display/markdown-display.service.mjs +53 -0
- package/esm2022/lib/atoms/tree-list/tree-list.component.mjs +404 -0
- package/esm2022/lib/atoms/tree-list/tree-list.interfaces.mjs +2 -0
- package/esm2022/lib/atoms/tree-list/tree-list.module.mjs +44 -0
- package/esm2022/lib/atoms/tree-view/tree-view.component.mjs +521 -0
- package/esm2022/lib/atoms/tree-view/tree-view.interfaces.mjs +2 -0
- package/esm2022/lib/atoms/tree-view/tree-view.module.mjs +44 -0
- package/esm2022/public-api.mjs +7 -1
- package/fesm2022/progress-chef-platform-shared-components.mjs +1139 -13
- package/fesm2022/progress-chef-platform-shared-components.mjs.map +1 -1
- package/lib/atoms/atoms.module.d.ts +5 -3
- package/lib/atoms/drag-and-drop/drag-and-drop.component.d.ts +10 -1
- package/lib/atoms/markdown-display/markdown-display.component.d.ts +22 -0
- package/lib/atoms/markdown-display/markdown-display.module.d.ts +8 -0
- package/lib/atoms/markdown-display/markdown-display.service.d.ts +23 -0
- package/lib/atoms/tree-list/tree-list.component.d.ts +288 -0
- package/lib/atoms/tree-list/tree-list.interfaces.d.ts +31 -0
- package/lib/atoms/tree-list/tree-list.module.d.ts +13 -0
- package/lib/atoms/tree-view/tree-view.component.d.ts +279 -0
- package/lib/atoms/tree-view/tree-view.interfaces.d.ts +23 -0
- package/lib/atoms/tree-view/tree-view.module.d.ts +13 -0
- package/package.json +2 -1
- package/public-api.d.ts +6 -0
|
@@ -0,0 +1,521 @@
|
|
|
1
|
+
import { Component, Input, Output, EventEmitter, ViewChild } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { of } from 'rxjs';
|
|
4
|
+
import { TreeViewModule } from '@progress/kendo-angular-treeview';
|
|
5
|
+
import { IconsModule } from '@progress/kendo-angular-icons';
|
|
6
|
+
import { ButtonComponent } from '../button/button.component';
|
|
7
|
+
import { IconComponent } from '../icon/icon.component';
|
|
8
|
+
import { LoaderComponent } from '../loader/loader.component';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
import * as i1 from "@angular/common";
|
|
11
|
+
import * as i2 from "@progress/kendo-angular-treeview";
|
|
12
|
+
/**
|
|
13
|
+
* Custom TreeView component that wraps Kendo's TreeView with design system styling.
|
|
14
|
+
*
|
|
15
|
+
* This component provides a hierarchical tree structure for displaying and navigating data.
|
|
16
|
+
* It supports selection, expansion, icons, and custom templates.
|
|
17
|
+
*/
|
|
18
|
+
export class TreeViewComponent {
|
|
19
|
+
constructor() {
|
|
20
|
+
/**
|
|
21
|
+
* The data source for the tree view
|
|
22
|
+
*/
|
|
23
|
+
this.data = [];
|
|
24
|
+
// Basic Properties
|
|
25
|
+
this.selectable = false;
|
|
26
|
+
this.filterable = false;
|
|
27
|
+
this.checkboxes = false;
|
|
28
|
+
this.checkable = false;
|
|
29
|
+
this.dragAndDrop = false;
|
|
30
|
+
this.expandable = true;
|
|
31
|
+
this.loading = false;
|
|
32
|
+
this.animate = true;
|
|
33
|
+
this.size = 'medium';
|
|
34
|
+
// Field Configuration
|
|
35
|
+
this.textField = 'text';
|
|
36
|
+
this.childrenField = 'children';
|
|
37
|
+
this.hasChildrenField = 'hasChildren';
|
|
38
|
+
this.expandedField = 'expanded';
|
|
39
|
+
this.selectedField = 'selected';
|
|
40
|
+
this.disabledField = 'disabled';
|
|
41
|
+
this.checkedField = 'checked';
|
|
42
|
+
this.iconClassField = 'iconClass';
|
|
43
|
+
this.iconField = 'icon';
|
|
44
|
+
this.imageUrlField = 'imageUrl';
|
|
45
|
+
this.spriteCssClassField = 'spriteCssClass';
|
|
46
|
+
// Selection and Expansion
|
|
47
|
+
this.disabledKeys = [];
|
|
48
|
+
this.expandBy = ''; //if expandBy is empty, expandedKeys will use index to track expansion. Otherwise, it will use the field name to decide the expandedKeys.
|
|
49
|
+
this.expandedKeys = [];
|
|
50
|
+
this.selectedKeys = [];
|
|
51
|
+
this.checkedKeys = [];
|
|
52
|
+
this.expandDisabledNodes = false;
|
|
53
|
+
this.disableNodes = false;
|
|
54
|
+
// Checkbox Configuration
|
|
55
|
+
this.enableCheck = false;
|
|
56
|
+
this.checkChildren = false;
|
|
57
|
+
this.checkDisabledChildren = false;
|
|
58
|
+
this.checkParents = false;
|
|
59
|
+
this.checkOnClick = false;
|
|
60
|
+
this.uncheckCollapsedChildren = false;
|
|
61
|
+
this.checkMode = "multiple";
|
|
62
|
+
this.pageSize = 0;
|
|
63
|
+
this.loadOnDemand = false;
|
|
64
|
+
// Filtering
|
|
65
|
+
this.filter = '';
|
|
66
|
+
// Keyboard Navigation
|
|
67
|
+
this.navigable = true;
|
|
68
|
+
// Basic Events
|
|
69
|
+
this.selectionChange = new EventEmitter();
|
|
70
|
+
this.expand = new EventEmitter();
|
|
71
|
+
this.collapse = new EventEmitter();
|
|
72
|
+
this.checkedChange = new EventEmitter();
|
|
73
|
+
this.nodeClick = new EventEmitter();
|
|
74
|
+
this.nodeDblClick = new EventEmitter();
|
|
75
|
+
// Drag and Drop Events
|
|
76
|
+
this.nodeDragStart = new EventEmitter();
|
|
77
|
+
this.nodeDrag = new EventEmitter();
|
|
78
|
+
this.nodeDrop = new EventEmitter();
|
|
79
|
+
this.nodeDragEnd = new EventEmitter();
|
|
80
|
+
this.addItem = new EventEmitter();
|
|
81
|
+
this.removeItem = new EventEmitter();
|
|
82
|
+
// Key Change Events (Two-way binding support)
|
|
83
|
+
this.expandedKeysChange = new EventEmitter();
|
|
84
|
+
this.selectedKeysChange = new EventEmitter();
|
|
85
|
+
this.checkedKeysChange = new EventEmitter();
|
|
86
|
+
// Filter Events
|
|
87
|
+
this.filterChange = new EventEmitter();
|
|
88
|
+
// Load More Events
|
|
89
|
+
this.loadMore = new EventEmitter();
|
|
90
|
+
// Children Loading Events
|
|
91
|
+
this.childrenLoaded = new EventEmitter();
|
|
92
|
+
/**
|
|
93
|
+
* Currently selected items
|
|
94
|
+
*/
|
|
95
|
+
this.selectedItems = [];
|
|
96
|
+
/**
|
|
97
|
+
* Currently checked items
|
|
98
|
+
*/
|
|
99
|
+
this.checkedItems = [];
|
|
100
|
+
/**
|
|
101
|
+
* Extracts and returns child items from a tree node using the configured children field.
|
|
102
|
+
* Provides a standardized way for the Kendo TreeView to access hierarchical child data
|
|
103
|
+
* regardless of the actual field name used in the data structure.
|
|
104
|
+
*
|
|
105
|
+
* @param dataItem - The tree node data item to extract children from
|
|
106
|
+
* @returns Observable array of child items or empty array if no children exist
|
|
107
|
+
*/
|
|
108
|
+
this.children = (dataItem) => of(dataItem[this.childrenField]);
|
|
109
|
+
/**
|
|
110
|
+
* Determines whether a tree node has child items for proper expand/collapse icon display.
|
|
111
|
+
* Checks for the existence of children property and logs the result for debugging purposes.
|
|
112
|
+
* Used by the TreeView to decide whether to show expansion indicators for each node.
|
|
113
|
+
*
|
|
114
|
+
* @param dataItem - The tree node data item to check for children
|
|
115
|
+
* @returns Boolean indicating whether the node has children that can be expanded
|
|
116
|
+
*/
|
|
117
|
+
this.hasChildren = (dataItem) => { return !!dataItem[this.childrenField]; };
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Generates CSS classes for the tree-view container element based on current component state.
|
|
121
|
+
* Applies conditional styling classes to reflect loading states and enable appropriate visual feedback.
|
|
122
|
+
*
|
|
123
|
+
* @returns A space-separated string of CSS class names to apply to the tree-view container
|
|
124
|
+
*/
|
|
125
|
+
getTreeViewClasses() {
|
|
126
|
+
const classes = ['lib-tree-view'];
|
|
127
|
+
if (this.loading) {
|
|
128
|
+
classes.push('lib-tree-view--loading');
|
|
129
|
+
}
|
|
130
|
+
return classes.join(' ');
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Provides comprehensive checkable settings configuration for the Kendo TreeView component.
|
|
134
|
+
* Aggregates all checkbox-related input properties into a single configuration object
|
|
135
|
+
* that controls checkbox behavior including parent-child relationships and interaction modes.
|
|
136
|
+
*
|
|
137
|
+
* @returns CheckableSettings object with all checkbox configuration options
|
|
138
|
+
*/
|
|
139
|
+
get checkableSettings() {
|
|
140
|
+
return {
|
|
141
|
+
checkChildren: this.checkChildren,
|
|
142
|
+
checkDisabledChildren: this.checkDisabledChildren,
|
|
143
|
+
checkParents: this.checkParents,
|
|
144
|
+
enabled: this.enableCheck,
|
|
145
|
+
mode: this.checkMode,
|
|
146
|
+
checkOnClick: this.checkOnClick,
|
|
147
|
+
uncheckCollapsedChildren: this.uncheckCollapsedChildren,
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
// Event Handlers
|
|
151
|
+
/**
|
|
152
|
+
* Handles tree node selection changes when users select or deselect nodes.
|
|
153
|
+
* Updates the internal selected items state and propagates the selection event
|
|
154
|
+
* to parent components for external handling and synchronization.
|
|
155
|
+
*
|
|
156
|
+
* @param event - The selection change event containing the newly selected items array
|
|
157
|
+
*/
|
|
158
|
+
onSelectionChange(event) {
|
|
159
|
+
this.selectedItems = event;
|
|
160
|
+
this.selectionChange.emit(event);
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Handles checkbox state changes when users check or uncheck tree nodes.
|
|
164
|
+
* Updates the internal checked items state and emits the change event to notify
|
|
165
|
+
* parent components of the new checkbox selections for form validation or data processing.
|
|
166
|
+
*
|
|
167
|
+
* @param event - The checked change event containing the newly checked items array
|
|
168
|
+
*/
|
|
169
|
+
onCheckedChange(event) {
|
|
170
|
+
this.checkedItems = event;
|
|
171
|
+
this.checkedChange.emit(event);
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Handles tree node expansion events when users click expand icons or use keyboard navigation.
|
|
175
|
+
* Updates the node's expanded state in the data model and emits the expand event
|
|
176
|
+
* for parent components to handle lazy loading of child data or state persistence.
|
|
177
|
+
*
|
|
178
|
+
* @param event - The expand event containing the expanded node data and context information
|
|
179
|
+
*/
|
|
180
|
+
onExpand(event) {
|
|
181
|
+
if (event.dataItem) {
|
|
182
|
+
event.dataItem[this.expandedField] = true;
|
|
183
|
+
}
|
|
184
|
+
this.expand.emit(event);
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Handles tree node collapse events when users click collapse icons or use keyboard navigation.
|
|
188
|
+
* Updates the node's expanded state in the data model and emits the collapse event
|
|
189
|
+
* for parent components to handle state cleanup or memory optimization.
|
|
190
|
+
*
|
|
191
|
+
* @param event - The collapse event containing the collapsed node data and context information
|
|
192
|
+
*/
|
|
193
|
+
onCollapse(event) {
|
|
194
|
+
if (event.dataItem) {
|
|
195
|
+
event.dataItem[this.expandedField] = false;
|
|
196
|
+
}
|
|
197
|
+
this.collapse.emit(event);
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Handles single-click events on tree nodes for custom interaction handling.
|
|
201
|
+
* Propagates click events to parent components for navigation, selection logic,
|
|
202
|
+
* or custom actions based on the clicked node's data and context.
|
|
203
|
+
*
|
|
204
|
+
* @param event - The node click event containing clicked node data and mouse event details
|
|
205
|
+
*/
|
|
206
|
+
onNodeClick(event) {
|
|
207
|
+
this.nodeClick.emit(event);
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Handles double-click events on tree nodes for enhanced interaction patterns.
|
|
211
|
+
* Typically used for opening detailed views, editing modes, or quick actions
|
|
212
|
+
* that differ from single-click behavior. Emits event for parent component handling.
|
|
213
|
+
*
|
|
214
|
+
* @param event - The node double-click event containing node data and mouse event details
|
|
215
|
+
*/
|
|
216
|
+
onNodeDblClick(event) {
|
|
217
|
+
this.nodeDblClick.emit(event);
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Handles the initiation of drag operations when users start dragging tree nodes.
|
|
221
|
+
* Validates that drag-and-drop functionality is enabled before proceeding and
|
|
222
|
+
* emits the drag start event for parent components to handle drag state setup.
|
|
223
|
+
*
|
|
224
|
+
* @param event - The tree item drag start event containing source node and drag context
|
|
225
|
+
*/
|
|
226
|
+
onNodeDragStart(event) {
|
|
227
|
+
if (!this.dragAndDrop) {
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
this.nodeDragStart.emit(event);
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Handles ongoing drag operations as users move nodes during drag-and-drop actions.
|
|
234
|
+
* Provides real-time feedback and validation during the drag process, allowing
|
|
235
|
+
* parent components to update UI indicators or validate drop targets.
|
|
236
|
+
*
|
|
237
|
+
* @param event - The tree item drag event containing current drag position and target information
|
|
238
|
+
*/
|
|
239
|
+
onNodeDrag(event) {
|
|
240
|
+
this.nodeDrag.emit(event);
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Handles the completion of drag operations when users finish dragging nodes.
|
|
244
|
+
* Provides cleanup and final processing for drag-and-drop operations, allowing
|
|
245
|
+
* parent components to finalize data updates and reset drag-related UI states.
|
|
246
|
+
*
|
|
247
|
+
* @param event - The tree item drag end event containing final drag state and completion context
|
|
248
|
+
*/
|
|
249
|
+
onNodeDragEnd(event) {
|
|
250
|
+
this.nodeDragEnd.emit(event);
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Handles item addition events when new nodes are added to the tree structure.
|
|
254
|
+
* Propagates add events to parent components for data persistence, validation,
|
|
255
|
+
* and tree structure updates to maintain data integrity.
|
|
256
|
+
*
|
|
257
|
+
* @param event - The tree item add event containing new item data and insertion context
|
|
258
|
+
*/
|
|
259
|
+
onAddItem(event) {
|
|
260
|
+
this.addItem.emit(event);
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Handles item removal events when nodes are deleted from the tree structure.
|
|
264
|
+
* Propagates remove events to parent components for confirmation dialogs, data cleanup,
|
|
265
|
+
* and cascading deletions of child nodes when necessary.
|
|
266
|
+
*
|
|
267
|
+
* @param event - The tree item remove event containing deleted item data and context
|
|
268
|
+
*/
|
|
269
|
+
onRemoveItem(event) {
|
|
270
|
+
this.removeItem.emit(event);
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Handles expanded keys changes for two-way binding support with parent components.
|
|
274
|
+
* Synchronizes internal expanded state with external data binding, enabling
|
|
275
|
+
* programmatic control of tree expansion and state persistence across component updates.
|
|
276
|
+
*
|
|
277
|
+
* @param keys - Array of string keys representing currently expanded tree nodes
|
|
278
|
+
*/
|
|
279
|
+
onExpandedKeysChange(keys) {
|
|
280
|
+
this.expandedKeys = keys;
|
|
281
|
+
this.expandedKeysChange.emit(keys);
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* Handles selected keys changes for two-way binding support with parent components.
|
|
285
|
+
* Synchronizes internal selection state with external data binding, enabling
|
|
286
|
+
* programmatic control of tree selection and form integration capabilities.
|
|
287
|
+
*
|
|
288
|
+
* @param keys - Array of string keys representing currently selected tree nodes
|
|
289
|
+
*/
|
|
290
|
+
onSelectedKeysChange(keys) {
|
|
291
|
+
this.selectedKeys = keys;
|
|
292
|
+
this.selectedKeysChange.emit(keys);
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Handles checked keys changes for two-way binding support with parent components.
|
|
296
|
+
* Synchronizes internal checkbox state with external data binding, enabling
|
|
297
|
+
* programmatic control of checkbox selections and form validation integration.
|
|
298
|
+
*
|
|
299
|
+
* @param keys - Array of string keys representing currently checked tree nodes
|
|
300
|
+
*/
|
|
301
|
+
onCheckedKeysChange(keys) {
|
|
302
|
+
this.checkedKeys = keys;
|
|
303
|
+
this.checkedKeysChange.emit(keys);
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* Handles filter text changes when users type in search fields or apply filtering criteria.
|
|
307
|
+
* Updates the internal filter state and propagates changes to parent components
|
|
308
|
+
* for server-side filtering or custom search logic implementation.
|
|
309
|
+
*
|
|
310
|
+
* @param filter - The filter string entered by the user for tree node searching
|
|
311
|
+
*/
|
|
312
|
+
onFilterChange(filter) {
|
|
313
|
+
this.filter = filter;
|
|
314
|
+
this.filterChange.emit(filter);
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Handle load more event
|
|
318
|
+
*/
|
|
319
|
+
onLoadMore(event) {
|
|
320
|
+
this.loadMore.emit(event);
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* Handle children loaded event
|
|
324
|
+
*/
|
|
325
|
+
onChildrenLoaded(event) {
|
|
326
|
+
this.childrenLoaded.emit(event);
|
|
327
|
+
}
|
|
328
|
+
// Utility Methods
|
|
329
|
+
/**
|
|
330
|
+
* Expand all nodes
|
|
331
|
+
*/
|
|
332
|
+
expandAll() {
|
|
333
|
+
if (this.treeViewElement) {
|
|
334
|
+
// Implementation depends on Kendo TreeView API
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
/**
|
|
338
|
+
* Get item from lookup
|
|
339
|
+
*/
|
|
340
|
+
itemLookup(index) {
|
|
341
|
+
if (this.treeViewElement) {
|
|
342
|
+
return this.treeViewElement.itemLookup(index);
|
|
343
|
+
}
|
|
344
|
+
return undefined;
|
|
345
|
+
}
|
|
346
|
+
/**
|
|
347
|
+
* Log function for debugging events
|
|
348
|
+
*/
|
|
349
|
+
log(eventName, event) {
|
|
350
|
+
console.log(`${eventName}:`, event);
|
|
351
|
+
}
|
|
352
|
+
/**
|
|
353
|
+
* Handle drop event with custom logic
|
|
354
|
+
*/
|
|
355
|
+
handleDrop(event) {
|
|
356
|
+
console.log('handleDrop:', event);
|
|
357
|
+
// Add custom drop handling logic here
|
|
358
|
+
this.nodeDrop.emit(event);
|
|
359
|
+
}
|
|
360
|
+
/**
|
|
361
|
+
* Handle node drag start event
|
|
362
|
+
*/
|
|
363
|
+
onDragStart(event) {
|
|
364
|
+
if (!this.dragAndDrop) {
|
|
365
|
+
event.preventDefault();
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: TreeViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
369
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: TreeViewComponent, isStandalone: true, selector: "lib-tree-view", inputs: { data: "data", selectable: "selectable", filterable: "filterable", checkboxes: "checkboxes", checkable: "checkable", dragAndDrop: "dragAndDrop", expandable: "expandable", loading: "loading", animate: "animate", size: "size", textField: "textField", childrenField: "childrenField", hasChildrenField: "hasChildrenField", expandedField: "expandedField", selectedField: "selectedField", disabledField: "disabledField", checkedField: "checkedField", iconClassField: "iconClassField", iconField: "iconField", imageUrlField: "imageUrlField", spriteCssClassField: "spriteCssClassField", disabledKeys: "disabledKeys", expandBy: "expandBy", expandedKeys: "expandedKeys", selectedKeys: "selectedKeys", checkedKeys: "checkedKeys", expandDisabledNodes: "expandDisabledNodes", disableNodes: "disableNodes", enableCheck: "enableCheck", checkChildren: "checkChildren", checkDisabledChildren: "checkDisabledChildren", checkParents: "checkParents", checkOnClick: "checkOnClick", uncheckCollapsedChildren: "uncheckCollapsedChildren", checkMode: "checkMode", fetchChildren: "fetchChildren", isChecked: "isChecked", isDisabled: "isDisabled", isExpanded: "isExpanded", isSelected: "isSelected", isVisible: "isVisible", nodeTemplate: "nodeTemplate", loadMoreButtonTemplate: "loadMoreButtonTemplate", loadMoreService: "loadMoreService", pageSize: "pageSize", loadOnDemand: "loadOnDemand", filter: "filter", filterSettings: "filterSettings", navigable: "navigable", trackBy: "trackBy" }, outputs: { selectionChange: "selectionChange", expand: "expand", collapse: "collapse", checkedChange: "checkedChange", nodeClick: "nodeClick", nodeDblClick: "nodeDblClick", nodeDragStart: "nodeDragStart", nodeDrag: "nodeDrag", nodeDrop: "nodeDrop", nodeDragEnd: "nodeDragEnd", addItem: "addItem", removeItem: "removeItem", expandedKeysChange: "expandedKeysChange", selectedKeysChange: "selectedKeysChange", checkedKeysChange: "checkedKeysChange", filterChange: "filterChange", loadMore: "loadMore", childrenLoaded: "childrenLoaded" }, viewQueries: [{ propertyName: "treeViewElement", first: true, predicate: ["treeViewElement"], descendants: true }], ngImport: i0, template: "<div [class]=\"getTreeViewClasses()\">\n\n <div class=\"treeview-panel\">\n\n <ng-container [ngSwitch]=\"checkable\">\n\n <kendo-treeview #treeViewElement *ngSwitchCase=\"true\" [children]=\"children\" kendoTreeViewHierarchyBinding\n kendoTreeViewExpandable [kendoTreeViewCheckable]=\"checkableSettings\" kendoTreeViewDragAndDrop\n kendoTreeViewDragAndDropEditing [nodes]=\"data\" [textField]=\"textField\" [childrenField]=\"childrenField\"\n [filterable]=\"filterable\" [expandBy]=\"expandBy\" [(expandedKeys)]=\"expandedKeys\"\n [expandDisabledNodes]=\"expandDisabledNodes\" (selectionChange)=\"onSelectionChange($event)\"\n (checkedChange)=\"onCheckedChange($event)\" (expand)=\"onExpand($event)\" (collapse)=\"onCollapse($event)\"\n (nodeClick)=\"onNodeClick($event)\" (expandedKeysChange)=\"onExpandedKeysChange($event)\"\n (nodeDragStart)=\"onDragStart($event)\" (nodeDrop)=\"handleDrop($event)\" (addItem)=\"log('addItem', $event)\"\n (removeItem)=\"log('removeItem', $event)\" (nodeDragEnd)=\"log('nodeDragEnd', $event)\"\n (nodeDrag)=\"onNodeDrag($event)\" class=\"lib-tree-view__kendo-tree\" [kendoTreeViewSelectable]=\"selectable\"\n [filter]=\"filter\" [size]=\"size\" [navigable]=\"navigable\" [loadOnDemand]=\"loadOnDemand\" [trackBy]=\"trackBy\"\n [hasChildren]=\"hasChildren\" [(selectedKeys)]=\"selectedKeys\" (filterChange)=\"onFilterChange($event)\">\n\n <!-- Custom Node Template -->\n <ng-template *ngIf=\"nodeTemplate\" kendoTreeViewNodeTemplate let-dataItem=\"dataItem\" let-index=\"index\">\n <ng-container [ngTemplateOutlet]=\"nodeTemplate\" [ngTemplateOutletContext]=\"{ \n $implicit: dataItem, \n dataItem: dataItem, \n index: index \n }\">\n </ng-container>\n </ng-template>\n\n <!-- Load More Button Template -->\n <ng-template *ngIf=\"loadMoreButtonTemplate\" kendoTreeViewLoadMoreButtonTemplate let-dataItem=\"dataItem\">\n <ng-container [ngTemplateOutlet]=\"loadMoreButtonTemplate\" [ngTemplateOutletContext]=\"{ \n $implicit: dataItem, \n dataItem: dataItem \n }\">\n </ng-container>\n </ng-template>\n\n </kendo-treeview>\n\n <!-- TreeView without checkable functionality -->\n <kendo-treeview #treeViewElement *ngSwitchDefault kendoTreeViewHierarchyBinding kendoTreeViewExpandable\n kendoTreeViewDragAndDrop kendoTreeViewDragAndDropEditing [nodes]=\"data\" [textField]=\"textField\"\n [childrenField]=\"childrenField\" [filterable]=\"filterable\" [expandBy]=\"expandBy\" [(expandedKeys)]=\"expandedKeys\"\n [expandDisabledNodes]=\"expandDisabledNodes\" (selectionChange)=\"onSelectionChange($event)\"\n (checkedChange)=\"onCheckedChange($event)\" (expand)=\"onExpand($event)\" (collapse)=\"onCollapse($event)\"\n (nodeClick)=\"onNodeClick($event)\" (expandedKeysChange)=\"onExpandedKeysChange($event)\"\n (nodeDragStart)=\"onDragStart($event)\" (nodeDrag)=\"onNodeDrag($event)\" (nodeDrop)=\"handleDrop($event)\"\n (addItem)=\"log('addItem', $event)\" (removeItem)=\"log('removeItem', $event)\"\n (nodeDragEnd)=\"log('nodeDragEnd', $event)\" class=\"lib-tree-view__kendo-tree\"\n [kendoTreeViewSelectable]=\"selectable\" [size]=\"size\" [navigable]=\"navigable\" [loadOnDemand]=\"loadOnDemand\"\n [trackBy]=\"trackBy\" [hasChildren]=\"hasChildren\" [(selectedKeys)]=\"selectedKeys\"\n (filterChange)=\"onFilterChange($event)\">\n\n <!-- Custom Node Template -->\n <ng-template *ngIf=\"nodeTemplate\" kendoTreeViewNodeTemplate let-dataItem=\"dataItem\" let-index=\"index\">\n <ng-container [ngTemplateOutlet]=\"nodeTemplate\" [ngTemplateOutletContext]=\"{ \n $implicit: dataItem, \n dataItem: dataItem, \n index: index \n }\">\n </ng-container>\n </ng-template>\n\n <!-- Load More Button Template -->\n <ng-template *ngIf=\"loadMoreButtonTemplate\" kendoTreeViewLoadMoreButtonTemplate let-dataItem=\"dataItem\">\n <ng-container [ngTemplateOutlet]=\"loadMoreButtonTemplate\" [ngTemplateOutletContext]=\"{ \n $implicit: dataItem, \n dataItem: dataItem \n }\">\n </ng-container>\n </ng-template>\n\n </kendo-treeview>\n </ng-container>\n\n <!-- Loading indicator -->\n <div *ngIf=\"loading\" class=\"lib-tree-view__loading\">\n <lib-loader size=\"medium\" type=\"pulsing\" themeColor=\"primary\"></lib-loader>\n </div>\n </div>\n", styles: [".lib-tree-view{position:relative;width:100%}.lib-tree-view__loading{position:absolute;inset:0;z-index:10;display:flex;align-items:center;justify-content:center;background-color:#fffc}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "ngmodule", type: TreeViewModule }, { kind: "component", type: i2.TreeViewComponent, selector: "kendo-treeview", inputs: ["filterInputPlaceholder", "expandDisabledNodes", "animate", "nodeTemplate", "loadMoreButtonTemplate", "trackBy", "nodes", "textField", "hasChildren", "isChecked", "isDisabled", "hasCheckbox", "isExpanded", "isSelected", "isVisible", "navigable", "children", "loadOnDemand", "filterable", "filter", "size", "disableParentNodesOnly"], outputs: ["childrenLoaded", "blur", "focus", "expand", "collapse", "nodeDragStart", "nodeDrag", "filterStateChange", "nodeDrop", "nodeDragEnd", "addItem", "removeItem", "checkedChange", "selectionChange", "filterChange", "nodeClick", "nodeDblClick"], exportAs: ["kendoTreeView"] }, { kind: "directive", type: i2.NodeTemplateDirective, selector: "[kendoTreeViewNodeTemplate]" }, { kind: "directive", type: i2.CheckDirective, selector: "[kendoTreeViewCheckable]", inputs: ["isChecked", "checkBy", "checkedKeys", "kendoTreeViewCheckable"], outputs: ["checkedKeysChange"] }, { kind: "directive", type: i2.ExpandDirective, selector: "[kendoTreeViewExpandable]", inputs: ["isExpanded", "expandBy", "expandOnFilter", "expandedKeys"], outputs: ["expandedKeysChange"] }, { kind: "directive", type: i2.SelectDirective, selector: "[kendoTreeViewSelectable]", inputs: ["isSelected", "selectBy", "kendoTreeViewSelectable", "selectedKeys"], outputs: ["selectedKeysChange"] }, { kind: "directive", type: i2.HierarchyBindingDirective, selector: "[kendoTreeViewHierarchyBinding]", inputs: ["childrenField", "nodes", "isVisible", "loadOnDemand"] }, { kind: "directive", type: i2.DragAndDropDirective, selector: "[kendoTreeViewDragAndDrop]", inputs: ["allowCopy", "dropZoneTreeViews", "startDragAfter", "autoScroll"] }, { kind: "directive", type: i2.DragAndDropEditingDirective, selector: "[kendoTreeViewDragAndDropEditing]", inputs: ["editService"] }, { kind: "directive", type: i2.LoadMoreButtonTemplateDirective, selector: "[kendoTreeViewLoadMoreButtonTemplate]" }, { kind: "ngmodule", type: IconsModule }, { kind: "component", type: LoaderComponent, selector: "lib-loader", inputs: ["size", "type", "themeColor"] }] }); }
|
|
370
|
+
}
|
|
371
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: TreeViewComponent, decorators: [{
|
|
372
|
+
type: Component,
|
|
373
|
+
args: [{ standalone: true, selector: 'lib-tree-view', imports: [
|
|
374
|
+
CommonModule,
|
|
375
|
+
TreeViewModule,
|
|
376
|
+
IconsModule,
|
|
377
|
+
ButtonComponent,
|
|
378
|
+
IconComponent,
|
|
379
|
+
LoaderComponent
|
|
380
|
+
], template: "<div [class]=\"getTreeViewClasses()\">\n\n <div class=\"treeview-panel\">\n\n <ng-container [ngSwitch]=\"checkable\">\n\n <kendo-treeview #treeViewElement *ngSwitchCase=\"true\" [children]=\"children\" kendoTreeViewHierarchyBinding\n kendoTreeViewExpandable [kendoTreeViewCheckable]=\"checkableSettings\" kendoTreeViewDragAndDrop\n kendoTreeViewDragAndDropEditing [nodes]=\"data\" [textField]=\"textField\" [childrenField]=\"childrenField\"\n [filterable]=\"filterable\" [expandBy]=\"expandBy\" [(expandedKeys)]=\"expandedKeys\"\n [expandDisabledNodes]=\"expandDisabledNodes\" (selectionChange)=\"onSelectionChange($event)\"\n (checkedChange)=\"onCheckedChange($event)\" (expand)=\"onExpand($event)\" (collapse)=\"onCollapse($event)\"\n (nodeClick)=\"onNodeClick($event)\" (expandedKeysChange)=\"onExpandedKeysChange($event)\"\n (nodeDragStart)=\"onDragStart($event)\" (nodeDrop)=\"handleDrop($event)\" (addItem)=\"log('addItem', $event)\"\n (removeItem)=\"log('removeItem', $event)\" (nodeDragEnd)=\"log('nodeDragEnd', $event)\"\n (nodeDrag)=\"onNodeDrag($event)\" class=\"lib-tree-view__kendo-tree\" [kendoTreeViewSelectable]=\"selectable\"\n [filter]=\"filter\" [size]=\"size\" [navigable]=\"navigable\" [loadOnDemand]=\"loadOnDemand\" [trackBy]=\"trackBy\"\n [hasChildren]=\"hasChildren\" [(selectedKeys)]=\"selectedKeys\" (filterChange)=\"onFilterChange($event)\">\n\n <!-- Custom Node Template -->\n <ng-template *ngIf=\"nodeTemplate\" kendoTreeViewNodeTemplate let-dataItem=\"dataItem\" let-index=\"index\">\n <ng-container [ngTemplateOutlet]=\"nodeTemplate\" [ngTemplateOutletContext]=\"{ \n $implicit: dataItem, \n dataItem: dataItem, \n index: index \n }\">\n </ng-container>\n </ng-template>\n\n <!-- Load More Button Template -->\n <ng-template *ngIf=\"loadMoreButtonTemplate\" kendoTreeViewLoadMoreButtonTemplate let-dataItem=\"dataItem\">\n <ng-container [ngTemplateOutlet]=\"loadMoreButtonTemplate\" [ngTemplateOutletContext]=\"{ \n $implicit: dataItem, \n dataItem: dataItem \n }\">\n </ng-container>\n </ng-template>\n\n </kendo-treeview>\n\n <!-- TreeView without checkable functionality -->\n <kendo-treeview #treeViewElement *ngSwitchDefault kendoTreeViewHierarchyBinding kendoTreeViewExpandable\n kendoTreeViewDragAndDrop kendoTreeViewDragAndDropEditing [nodes]=\"data\" [textField]=\"textField\"\n [childrenField]=\"childrenField\" [filterable]=\"filterable\" [expandBy]=\"expandBy\" [(expandedKeys)]=\"expandedKeys\"\n [expandDisabledNodes]=\"expandDisabledNodes\" (selectionChange)=\"onSelectionChange($event)\"\n (checkedChange)=\"onCheckedChange($event)\" (expand)=\"onExpand($event)\" (collapse)=\"onCollapse($event)\"\n (nodeClick)=\"onNodeClick($event)\" (expandedKeysChange)=\"onExpandedKeysChange($event)\"\n (nodeDragStart)=\"onDragStart($event)\" (nodeDrag)=\"onNodeDrag($event)\" (nodeDrop)=\"handleDrop($event)\"\n (addItem)=\"log('addItem', $event)\" (removeItem)=\"log('removeItem', $event)\"\n (nodeDragEnd)=\"log('nodeDragEnd', $event)\" class=\"lib-tree-view__kendo-tree\"\n [kendoTreeViewSelectable]=\"selectable\" [size]=\"size\" [navigable]=\"navigable\" [loadOnDemand]=\"loadOnDemand\"\n [trackBy]=\"trackBy\" [hasChildren]=\"hasChildren\" [(selectedKeys)]=\"selectedKeys\"\n (filterChange)=\"onFilterChange($event)\">\n\n <!-- Custom Node Template -->\n <ng-template *ngIf=\"nodeTemplate\" kendoTreeViewNodeTemplate let-dataItem=\"dataItem\" let-index=\"index\">\n <ng-container [ngTemplateOutlet]=\"nodeTemplate\" [ngTemplateOutletContext]=\"{ \n $implicit: dataItem, \n dataItem: dataItem, \n index: index \n }\">\n </ng-container>\n </ng-template>\n\n <!-- Load More Button Template -->\n <ng-template *ngIf=\"loadMoreButtonTemplate\" kendoTreeViewLoadMoreButtonTemplate let-dataItem=\"dataItem\">\n <ng-container [ngTemplateOutlet]=\"loadMoreButtonTemplate\" [ngTemplateOutletContext]=\"{ \n $implicit: dataItem, \n dataItem: dataItem \n }\">\n </ng-container>\n </ng-template>\n\n </kendo-treeview>\n </ng-container>\n\n <!-- Loading indicator -->\n <div *ngIf=\"loading\" class=\"lib-tree-view__loading\">\n <lib-loader size=\"medium\" type=\"pulsing\" themeColor=\"primary\"></lib-loader>\n </div>\n </div>\n", styles: [".lib-tree-view{position:relative;width:100%}.lib-tree-view__loading{position:absolute;inset:0;z-index:10;display:flex;align-items:center;justify-content:center;background-color:#fffc}\n"] }]
|
|
381
|
+
}], propDecorators: { treeViewElement: [{
|
|
382
|
+
type: ViewChild,
|
|
383
|
+
args: ['treeViewElement', { static: false }]
|
|
384
|
+
}], data: [{
|
|
385
|
+
type: Input
|
|
386
|
+
}], selectable: [{
|
|
387
|
+
type: Input
|
|
388
|
+
}], filterable: [{
|
|
389
|
+
type: Input
|
|
390
|
+
}], checkboxes: [{
|
|
391
|
+
type: Input
|
|
392
|
+
}], checkable: [{
|
|
393
|
+
type: Input
|
|
394
|
+
}], dragAndDrop: [{
|
|
395
|
+
type: Input
|
|
396
|
+
}], expandable: [{
|
|
397
|
+
type: Input
|
|
398
|
+
}], loading: [{
|
|
399
|
+
type: Input
|
|
400
|
+
}], animate: [{
|
|
401
|
+
type: Input
|
|
402
|
+
}], size: [{
|
|
403
|
+
type: Input
|
|
404
|
+
}], textField: [{
|
|
405
|
+
type: Input
|
|
406
|
+
}], childrenField: [{
|
|
407
|
+
type: Input
|
|
408
|
+
}], hasChildrenField: [{
|
|
409
|
+
type: Input
|
|
410
|
+
}], expandedField: [{
|
|
411
|
+
type: Input
|
|
412
|
+
}], selectedField: [{
|
|
413
|
+
type: Input
|
|
414
|
+
}], disabledField: [{
|
|
415
|
+
type: Input
|
|
416
|
+
}], checkedField: [{
|
|
417
|
+
type: Input
|
|
418
|
+
}], iconClassField: [{
|
|
419
|
+
type: Input
|
|
420
|
+
}], iconField: [{
|
|
421
|
+
type: Input
|
|
422
|
+
}], imageUrlField: [{
|
|
423
|
+
type: Input
|
|
424
|
+
}], spriteCssClassField: [{
|
|
425
|
+
type: Input
|
|
426
|
+
}], disabledKeys: [{
|
|
427
|
+
type: Input
|
|
428
|
+
}], expandBy: [{
|
|
429
|
+
type: Input
|
|
430
|
+
}], expandedKeys: [{
|
|
431
|
+
type: Input
|
|
432
|
+
}], selectedKeys: [{
|
|
433
|
+
type: Input
|
|
434
|
+
}], checkedKeys: [{
|
|
435
|
+
type: Input
|
|
436
|
+
}], expandDisabledNodes: [{
|
|
437
|
+
type: Input
|
|
438
|
+
}], disableNodes: [{
|
|
439
|
+
type: Input
|
|
440
|
+
}], enableCheck: [{
|
|
441
|
+
type: Input
|
|
442
|
+
}], checkChildren: [{
|
|
443
|
+
type: Input
|
|
444
|
+
}], checkDisabledChildren: [{
|
|
445
|
+
type: Input
|
|
446
|
+
}], checkParents: [{
|
|
447
|
+
type: Input
|
|
448
|
+
}], checkOnClick: [{
|
|
449
|
+
type: Input
|
|
450
|
+
}], uncheckCollapsedChildren: [{
|
|
451
|
+
type: Input
|
|
452
|
+
}], checkMode: [{
|
|
453
|
+
type: Input
|
|
454
|
+
}], fetchChildren: [{
|
|
455
|
+
type: Input
|
|
456
|
+
}], isChecked: [{
|
|
457
|
+
type: Input
|
|
458
|
+
}], isDisabled: [{
|
|
459
|
+
type: Input
|
|
460
|
+
}], isExpanded: [{
|
|
461
|
+
type: Input
|
|
462
|
+
}], isSelected: [{
|
|
463
|
+
type: Input
|
|
464
|
+
}], isVisible: [{
|
|
465
|
+
type: Input
|
|
466
|
+
}], nodeTemplate: [{
|
|
467
|
+
type: Input
|
|
468
|
+
}], loadMoreButtonTemplate: [{
|
|
469
|
+
type: Input
|
|
470
|
+
}], loadMoreService: [{
|
|
471
|
+
type: Input
|
|
472
|
+
}], pageSize: [{
|
|
473
|
+
type: Input
|
|
474
|
+
}], loadOnDemand: [{
|
|
475
|
+
type: Input
|
|
476
|
+
}], filter: [{
|
|
477
|
+
type: Input
|
|
478
|
+
}], filterSettings: [{
|
|
479
|
+
type: Input
|
|
480
|
+
}], navigable: [{
|
|
481
|
+
type: Input
|
|
482
|
+
}], trackBy: [{
|
|
483
|
+
type: Input
|
|
484
|
+
}], selectionChange: [{
|
|
485
|
+
type: Output
|
|
486
|
+
}], expand: [{
|
|
487
|
+
type: Output
|
|
488
|
+
}], collapse: [{
|
|
489
|
+
type: Output
|
|
490
|
+
}], checkedChange: [{
|
|
491
|
+
type: Output
|
|
492
|
+
}], nodeClick: [{
|
|
493
|
+
type: Output
|
|
494
|
+
}], nodeDblClick: [{
|
|
495
|
+
type: Output
|
|
496
|
+
}], nodeDragStart: [{
|
|
497
|
+
type: Output
|
|
498
|
+
}], nodeDrag: [{
|
|
499
|
+
type: Output
|
|
500
|
+
}], nodeDrop: [{
|
|
501
|
+
type: Output
|
|
502
|
+
}], nodeDragEnd: [{
|
|
503
|
+
type: Output
|
|
504
|
+
}], addItem: [{
|
|
505
|
+
type: Output
|
|
506
|
+
}], removeItem: [{
|
|
507
|
+
type: Output
|
|
508
|
+
}], expandedKeysChange: [{
|
|
509
|
+
type: Output
|
|
510
|
+
}], selectedKeysChange: [{
|
|
511
|
+
type: Output
|
|
512
|
+
}], checkedKeysChange: [{
|
|
513
|
+
type: Output
|
|
514
|
+
}], filterChange: [{
|
|
515
|
+
type: Output
|
|
516
|
+
}], loadMore: [{
|
|
517
|
+
type: Output
|
|
518
|
+
}], childrenLoaded: [{
|
|
519
|
+
type: Output
|
|
520
|
+
}] } });
|
|
521
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NoYXJlZC9zcmMvbGliL2F0b21zL3RyZWUtdmlldy90cmVlLXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2hhcmVkL3NyYy9saWIvYXRvbXMvdHJlZS12aWV3L3RyZWUtdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBMEIsTUFBTSxlQUFlLENBQUM7QUFDMUcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEMsT0FBTyxFQUNMLGNBQWMsRUFTZixNQUFNLGtDQUFrQyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7OztBQUc3RDs7Ozs7R0FLRztBQWVILE1BQU0sT0FBTyxpQkFBaUI7SUFkOUI7UUFxQkU7O1dBRUc7UUFDTSxTQUFJLEdBQW1CLEVBQUUsQ0FBQztRQUVuQyxtQkFBbUI7UUFDVixlQUFVLEdBQVksS0FBSyxDQUFDO1FBQzVCLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFDNUIsZUFBVSxHQUFZLEtBQUssQ0FBQztRQUM1QixjQUFTLEdBQVksS0FBSyxDQUFDO1FBQzNCLGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBQzdCLGVBQVUsR0FBWSxJQUFJLENBQUM7UUFD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WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgVmlld0NoaWxkLCBSZW5kZXJlcjIsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIFRyZWVWaWV3TW9kdWxlLFxuICBUcmVlVmlld0NvbXBvbmVudCBhcyBLZW5kb1RyZWVWaWV3Q29tcG9uZW50LFxuICBUcmVlSXRlbUxvb2t1cCxcbiAgVHJlZUl0ZW1BZGRSZW1vdmVBcmdzLFxuICBUcmVlSXRlbURyb3BFdmVudCxcbiAgVHJlZUl0ZW1EcmFnU3RhcnRFdmVudCxcbiAgVHJlZUl0ZW1EcmFnRXZlbnQsXG4gIENoZWNrYWJsZVNldHRpbmdzLFxuICBDaGVja01vZGVcbn0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItdHJlZXZpZXcnO1xuaW1wb3J0IHsgSWNvbnNNb2R1bGUgfSBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci1pY29ucyc7XG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi9idXR0b24vYnV0dG9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vaWNvbi9pY29uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBMb2FkZXJDb21wb25lbnQgfSBmcm9tICcuLi9sb2FkZXIvbG9hZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUcmVlVmlld05vZGUgfSBmcm9tICcuL3RyZWUtdmlldy5pbnRlcmZhY2VzJztcblxuLyoqXG4gKiBDdXN0b20gVHJlZVZpZXcgY29tcG9uZW50IHRoYXQgd3JhcHMgS2VuZG8ncyBUcmVlVmlldyB3aXRoIGRlc2lnbiBzeXN0ZW0gc3R5bGluZy5cbiAqIFxuICogVGhpcyBjb21wb25lbnQgcHJvdmlkZXMgYSBoaWVyYXJjaGljYWwgdHJlZSBzdHJ1Y3R1cmUgZm9yIGRpc3BsYXlpbmcgYW5kIG5hdmlnYXRpbmcgZGF0YS5cbiAqIEl0IHN1cHBvcnRzIHNlbGVjdGlvbiwgZXhwYW5zaW9uLCBpY29ucywgYW5kIGN1c3RvbSB0ZW1wbGF0ZXMuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ2xpYi10cmVlLXZpZXcnLFxuICB0ZW1wbGF0ZVVybDogJy4vdHJlZS12aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdHJlZS12aWV3LmNvbXBvbmVudC5zY3NzJ10sXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgVHJlZVZpZXdNb2R1bGUsXG4gICAgSWNvbnNNb2R1bGUsXG4gICAgQnV0dG9uQ29tcG9uZW50LFxuICAgIEljb25Db21wb25lbnQsXG4gICAgTG9hZGVyQ29tcG9uZW50XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgVHJlZVZpZXdDb21wb25lbnQge1xuXG4gIC8qKlxuICAgKiBWaWV3Q2hpbGQgcmVmZXJlbmNlIHRvIHRoZSBLZW5kbyBUcmVlVmlldyBjb21wb25lbnQgaW5zdGFuY2VcbiAgICovXG4gIEBWaWV3Q2hpbGQoJ3RyZWVWaWV3RWxlbWVudCcsIHsgc3RhdGljOiBmYWxzZSB9KSB0cmVlVmlld0VsZW1lbnQhOiBhbnk7XG5cbiAgLyoqXG4gICAqIFRoZSBkYXRhIHNvdXJjZSBmb3IgdGhlIHRyZWUgdmlld1xuICAgKi9cbiAgQElucHV0KCkgZGF0YTogVHJlZVZpZXdOb2RlW10gPSBbXTtcblxuICAvLyBCYXNpYyBQcm9wZXJ0aWVzXG4gIEBJbnB1dCgpIHNlbGVjdGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgZmlsdGVyYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBjaGVja2JveGVzOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGNoZWNrYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBkcmFnQW5kRHJvcDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBleHBhbmRhYmxlOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBhbmltYXRlOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgc2l6ZTogJ3NtYWxsJyB8ICdtZWRpdW0nIHwgJ2xhcmdlJyB8ICdub25lJyA9ICdtZWRpdW0nO1xuXG4gIC8vIEZpZWxkIENvbmZpZ3VyYXRpb25cbiAgQElucHV0KCkgdGV4dEZpZWxkOiBzdHJpbmcgPSAndGV4dCc7XG4gIEBJbnB1dCgpIGNoaWxkcmVuRmllbGQ6IHN0cmluZyA9ICdjaGlsZHJlbic7XG4gIEBJbnB1dCgpIGhhc0NoaWxkcmVuRmllbGQ6IHN0cmluZyA9ICdoYXNDaGlsZHJlbic7XG4gIEBJbnB1dCgpIGV4cGFuZGVkRmllbGQ6IHN0cmluZyA9ICdleHBhbmRlZCc7XG4gIEBJbnB1dCgpIHNlbGVjdGVkRmllbGQ6IHN0cmluZyA9ICdzZWxlY3RlZCc7XG4gIEBJbnB1dCgpIGRpc2FibGVkRmllbGQ6IHN0cmluZyA9ICdkaXNhYmxlZCc7XG4gIEBJbnB1dCgpIGNoZWNrZWRGaWVsZDogc3RyaW5nID0gJ2NoZWNrZWQnO1xuICBASW5wdXQoKSBpY29uQ2xhc3NGaWVsZDogc3RyaW5nID0gJ2ljb25DbGFzcyc7XG4gIEBJbnB1dCgpIGljb25GaWVsZDogc3RyaW5nID0gJ2ljb24nO1xuICBASW5wdXQoKSBpbWFnZVVybEZpZWxkOiBzdHJpbmcgPSAnaW1hZ2VVcmwnO1xuICBASW5wdXQoKSBzcHJpdGVDc3NDbGFzc0ZpZWxkOiBzdHJpbmcgPSAnc3ByaXRlQ3NzQ2xhc3MnO1xuXG4gIC8vIFNlbGVjdGlvbiBhbmQgRXhwYW5zaW9uXG4gIEBJbnB1dCgpIGRpc2FibGVkS2V5czogc3RyaW5nW10gPSBbXTtcbiAgQElucHV0KCkgZXhwYW5kQnk6IHN0cmluZyB8ICgoaXRlbTogVHJlZVZpZXdOb2RlKSA9PiBzdHJpbmcpID0gJyc7Ly9pZiBleHBhbmRCeSBpcyBlbXB0eSwgZXhwYW5kZWRLZXlzIHdpbGwgdXNlIGluZGV4IHRvIHRyYWNrIGV4cGFuc2lvbi4gT3RoZXJ3aXNlLCBpdCB3aWxsIHVzZSB0aGUgZmllbGQgbmFtZSB0byBkZWNpZGUgdGhlIGV4cGFuZGVkS2V5cy5cbiAgQElucHV0KCkgZXhwYW5kZWRLZXlzOiBzdHJpbmdbXSA9IFtdO1xuICBASW5wdXQoKSBzZWxlY3RlZEtleXM6IHN0cmluZ1tdID0gW107XG4gIEBJbnB1dCgpIGNoZWNrZWRLZXlzOiBzdHJpbmdbXSA9IFtdO1xuICBASW5wdXQoKSBleHBhbmREaXNhYmxlZE5vZGVzOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGRpc2FibGVOb2RlczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIENoZWNrYm94IENvbmZpZ3VyYXRpb25cbiAgQElucHV0KCkgZW5hYmxlQ2hlY2s6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgY2hlY2tDaGlsZHJlbjogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBjaGVja0Rpc2FibGVkQ2hpbGRyZW46IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgY2hlY2tQYXJlbnRzOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGNoZWNrT25DbGljazogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSB1bmNoZWNrQ29sbGFwc2VkQ2hpbGRyZW46IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgY2hlY2tNb2RlOiBDaGVja01vZGUgPSBcIm11bHRpcGxlXCI7XG5cbiAgLy8gRGF0YSBMb2FkaW5nXG4gIEBJbnB1dCgpIGZldGNoQ2hpbGRyZW46ICgoaXRlbTogYW55KSA9PiBhbnlbXSkgfCB1bmRlZmluZWQ7XG4gIEBJbnB1dCgpIGlzQ2hlY2tlZDogKChpdGVtOiBhbnkpID0+IGJvb2xlYW4pIHwgdW5kZWZpbmVkO1xuICBASW5wdXQoKSBpc0Rpc2FibGVkOiAoKGl0ZW06IGFueSkgPT4gYm9vbGVhbikgfCB1bmRlZmluZWQ7XG4gIEBJbnB1dCgpIGlzRXhwYW5kZWQ6ICgoaXRlbTogYW55KSA9PiBib29sZWFuKSB8IHVuZGVmaW5lZDtcbiAgQElucHV0KCkgaXNTZWxlY3RlZDogKChpdGVtOiBhbnkpID0+IGJvb2xlYW4pIHwgdW5kZWZpbmVkO1xuICBASW5wdXQoKSBpc1Zpc2libGU6ICgoaXRlbTogYW55KSA9PiBib29sZWFuKSB8IHVuZGVmaW5lZDtcblxuICAvLyBUZW1wbGF0ZXNcbiAgQElucHV0KCkgbm9kZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkO1xuICBASW5wdXQoKSBsb2FkTW9yZUJ1dHRvblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkO1xuXG4gIC8vIExvYWQgTW9yZSBDb25maWd1cmF0aW9uXG4gIEBJbnB1dCgpIGxvYWRNb3JlU2VydmljZTogKChpdGVtOiBhbnkpID0+IGFueVtdKSB8IHVuZGVmaW5lZDtcbiAgQElucHV0KCkgcGFnZVNpemU6IG51bWJlciA9IDA7XG4gIEBJbnB1dCgpIGxvYWRPbkRlbWFuZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIEZpbHRlcmluZ1xuICBASW5wdXQoKSBmaWx0ZXI6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBmaWx0ZXJTZXR0aW5nczogYW55O1xuXG4gIC8vIEtleWJvYXJkIE5hdmlnYXRpb25cbiAgQElucHV0KCkgbmF2aWdhYmxlOiBib29sZWFuID0gdHJ1ZTtcblxuICAvLyBUcmFjayBieSBmdW5jdGlvblxuICBASW5wdXQoKSB0cmFja0J5OiAoKGluZGV4OiBudW1iZXIsIGl0ZW06IFRyZWVWaWV3Tm9kZSkgPT4gYW55KSB8IHVuZGVmaW5lZDtcblxuICAvLyBCYXNpYyBFdmVudHNcbiAgQE91dHB1dCgpIHNlbGVjdGlvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgZXhwYW5kID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBjb2xsYXBzZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgY2hlY2tlZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgbm9kZUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBub2RlRGJsQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAvLyBEcmFnIGFuZCBEcm9wIEV2ZW50c1xuICBAT3V0cHV0KCkgbm9kZURyYWdTdGFydCA9IG5ldyBFdmVudEVtaXR0ZXI8VHJlZUl0ZW1EcmFnU3RhcnRFdmVudD4oKTtcbiAgQE91dHB1dCgpIG5vZGVEcmFnID0gbmV3IEV2ZW50RW1pdHRlcjxUcmVlSXRlbURyYWdFdmVudD4oKTtcbiAgQE91dHB1dCgpIG5vZGVEcm9wID0gbmV3IEV2ZW50RW1pdHRlcjxUcmVlSXRlbURyb3BFdmVudD4oKTtcbiAgQE91dHB1dCgpIG5vZGVEcmFnRW5kID0gbmV3IEV2ZW50RW1pdHRlcjxUcmVlSXRlbURyYWdFdmVudD4oKTtcbiAgQE91dHB1dCgpIGFkZEl0ZW0gPSBuZXcgRXZlbnRFbWl0dGVyPFRyZWVJdGVtQWRkUmVtb3ZlQXJncz4oKTtcbiAgQE91dHB1dCgpIHJlbW92ZUl0ZW0gPSBuZXcgRXZlbnRFbWl0dGVyPFRyZWVJdGVtQWRkUmVtb3ZlQXJncz4oKTtcblxuICAvLyBLZXkgQ2hhbmdlIEV2ZW50cyAoVHdvLXdheSBiaW5kaW5nIHN1cHBvcnQpXG4gIEBPdXRwdXQoKSBleHBhbmRlZEtleXNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZ1tdPigpO1xuICBAT3V0cHV0KCkgc2VsZWN0ZWRLZXlzQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmdbXT4oKTtcbiAgQE91dHB1dCgpIGNoZWNrZWRLZXlzQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmdbXT4oKTtcblxuICAvLyBGaWx0ZXIgRXZlbnRzXG4gIEBPdXRwdXQoKSBmaWx0ZXJDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICAvLyBMb2FkIE1vcmUgRXZlbnRzXG4gIEBPdXRwdXQoKSBsb2FkTW9yZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIC8vIENoaWxkcmVuIExvYWRpbmcgRXZlbnRzXG4gIEBPdXRwdXQoKSBjaGlsZHJlbkxvYWRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAvKipcbiAgICogQ3VycmVudGx5IHNlbGVjdGVkIGl0ZW1zXG4gICAqL1xuICBzZWxlY3RlZEl0ZW1zOiBUcmVlVmlld05vZGVbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBDdXJyZW50bHkgY2hlY2tlZCBpdGVtc1xuICAgKi9cbiAgY2hlY2tlZEl0ZW1zOiBUcmVlVmlld05vZGVbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgQ1NTIGNsYXNzZXMgZm9yIHRoZSB0cmVlLXZpZXcgY29udGFpbmVyIGVsZW1lbnQgYmFzZWQgb24gY3VycmVudCBjb21wb25lbnQgc3RhdGUuXG4gICAqIEFwcGxpZXMgY29uZGl0aW9uYWwgc3R5bGluZyBjbGFzc2VzIHRvIHJlZmxlY3QgbG9hZGluZyBzdGF0ZXMgYW5kIGVuYWJsZSBhcHByb3ByaWF0ZSB2aXN1YWwgZmVlZGJhY2suXG4gICAqIFxuICAgKiBAcmV0dXJucyBBIHNwYWNlLXNlcGFyYXRlZCBzdHJpbmcgb2YgQ1NTIGNsYXNzIG5hbWVzIHRvIGFwcGx5IHRvIHRoZSB0cmVlLXZpZXcgY29udGFpbmVyXG4gICAqL1xuICBnZXRUcmVlVmlld0NsYXNzZXMoKTogc3RyaW5nIHtcbiAgICBjb25zdCBjbGFzc2VzID0gWydsaWItdHJlZS12aWV3J107XG5cbiAgICBpZiAodGhpcy5sb2FkaW5nKSB7XG4gICAgICBjbGFzc2VzLnB1c2goJ2xpYi10cmVlLXZpZXctLWxvYWRpbmcnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2xhc3Nlcy5qb2luKCcgJyk7XG4gIH1cblxuICAvKipcbiAgICogUHJvdmlkZXMgY29tcHJlaGVuc2l2ZSBjaGVja2FibGUgc2V0dGluZ3MgY29uZmlndXJhdGlvbiBmb3IgdGhlIEtlbmRvIFRyZWVWaWV3IGNvbXBvbmVudC5cbiAgICogQWdncmVnYXRlcyBhbGwgY2hlY2tib3gtcmVsYXRlZCBpbnB1dCBwcm9wZXJ0aWVzIGludG8gYSBzaW5nbGUgY29uZmlndXJhdGlvbiBvYmplY3RcbiAgICogdGhhdCBjb250cm9scyBjaGVja2JveCBiZWhhdmlvciBpbmNsdWRpbmcgcGFyZW50LWNoaWxkIHJlbGF0aW9uc2hpcHMgYW5kIGludGVyYWN0aW9uIG1vZGVzLlxuICAgKiBcbiAgICogQHJldHVybnMgQ2hlY2thYmxlU2V0dGluZ3Mgb2JqZWN0IHdpdGggYWxsIGNoZWNrYm94IGNvbmZpZ3VyYXRpb24gb3B0aW9uc1xuICAgKi9cbiAgcHVibGljIGdldCBjaGVja2FibGVTZXR0aW5ncygpOiBDaGVja2FibGVTZXR0aW5ncyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNoZWNrQ2hpbGRyZW46IHRoaXMuY2hlY2tDaGlsZHJlbixcbiAgICAgIGNoZWNrRGlzYWJsZWRDaGlsZHJlbjogdGhpcy5jaGVja0Rpc2FibGVkQ2hpbGRyZW4sXG4gICAgICBjaGVja1BhcmVudHM6IHRoaXMuY2hlY2tQYXJlbnRzLFxuICAgICAgZW5hYmxlZDogdGhpcy5lbmFibGVDaGVjayxcbiAgICAgIG1vZGU6IHRoaXMuY2hlY2tNb2RlLFxuICAgICAgY2hlY2tPbkNsaWNrOiB0aGlzLmNoZWNrT25DbGljayxcbiAgICAgIHVuY2hlY2tDb2xsYXBzZWRDaGlsZHJlbjogdGhpcy51bmNoZWNrQ29sbGFwc2VkQ2hpbGRyZW4sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWN0cyBhbmQgcmV0dXJucyBjaGlsZCBpdGVtcyBmcm9tIGEgdHJlZSBub2RlIHVzaW5nIHRoZSBjb25maWd1cmVkIGNoaWxkcmVuIGZpZWxkLlxuICAgKiBQcm92aWRlcyBhIHN0YW5kYXJkaXplZCB3YXkgZm9yIHRoZSBLZW5kbyBUcmVlVmlldyB0byBhY2Nlc3MgaGllcmFyY2hpY2FsIGNoaWxkIGRhdGFcbiAgICogcmVnYXJkbGVzcyBvZiB0aGUgYWN0dWFsIGZpZWxkIG5hbWUgdXNlZCBpbiB0aGUgZGF0YSBzdHJ1Y3R1cmUuXG4gICAqIFxuICAgKiBAcGFyYW0gZGF0YUl0ZW0gLSBUaGUgdHJlZSBub2RlIGRhdGEgaXRlbSB0byBleHRyYWN0IGNoaWxkcmVuIGZyb21cbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZSBhcnJheSBvZiBjaGlsZCBpdGVtcyBvciBlbXB0eSBhcnJheSBpZiBubyBjaGlsZHJlbiBleGlzdFxuICAgKi9cbiAgcHVibGljIGNoaWxkcmVuID0gKGRhdGFJdGVtOiBhbnkpOiBPYnNlcnZhYmxlPGFueVtdPiA9PiBvZihkYXRhSXRlbVt0aGlzLmNoaWxkcmVuRmllbGRdKTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgdHJlZSBub2RlIGhhcyBjaGlsZCBpdGVtcyBmb3IgcHJvcGVyIGV4cGFuZC9jb2xsYXBzZSBpY29uIGRpc3BsYXkuXG4gICAqIENoZWNrcyBmb3IgdGhlIGV4aXN0ZW5jZSBvZiBjaGlsZHJlbiBwcm9wZXJ0eSBhbmQgbG9ncyB0aGUgcmVzdWx0IGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuXG4gICAqIFVzZWQgYnkgdGhlIFRyZWVWaWV3IHRvIGRlY2lkZSB3aGV0aGVyIHRvIHNob3cgZXhwYW5zaW9uIGluZGljYXRvcnMgZm9yIGVhY2ggbm9kZS5cbiAgICogXG4gICAqIEBwYXJhbSBkYXRhSXRlbSAtIFRoZSB0cmVlIG5vZGUgZGF0YSBpdGVtIHRvIGNoZWNrIGZvciBjaGlsZHJlblxuICAgKiBAcmV0dXJucyBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgbm9kZSBoYXMgY2hpbGRyZW4gdGhhdCBjYW4gYmUgZXhwYW5kZWRcbiAgICovXG4gIHB1YmxpYyBoYXNDaGlsZHJlbiA9IChkYXRhSXRlbTogYW55KTogYm9vbGVhbiA9PiB7IHJldHVybiAhIWRhdGFJdGVtW3RoaXMuY2hpbGRyZW5GaWVsZF0gfTtcblxuICAvLyBFdmVudCBIYW5kbGVyc1xuXG4gIC8qKlxuICAgKiBIYW5kbGVzIHRyZWUgbm9kZSBzZWxlY3Rpb24gY2hhbmdlcyB3aGVuIHVzZXJzIHNlbGVjdCBvciBkZXNlbGVjdCBub2Rlcy5cbiAgICogVXBkYXRlcyB0aGUgaW50ZXJuYWwgc2VsZWN0ZWQgaXRlbXMgc3RhdGUgYW5kIHByb3BhZ2F0ZXMgdGhlIHNlbGVjdGlvbiBldmVudFxuICAgKiB0byBwYXJlbnQgY29tcG9uZW50cyBmb3IgZXh0ZXJuYWwgaGFuZGxpbmcgYW5kIHN5bmNocm9uaXphdGlvbi5cbiAgICogXG4gICAqIEBwYXJhbSBldmVudCAtIFRoZSBzZWxlY3Rpb24gY2hhbmdlIGV2ZW50IGNvbnRhaW5pbmcgdGhlIG5ld2x5IHNlbGVjdGVkIGl0ZW1zIGFycmF5XG4gICAqL1xuICBvblNlbGVjdGlvbkNoYW5nZShldmVudDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gZXZlbnQ7XG4gICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdChldmVudCk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyBjaGVja2JveCBzdGF0ZSBjaGFuZ2VzIHdoZW4gdXNlcnMgY2hlY2sgb3IgdW5jaGVjayB0cmVlIG5vZGVzLlxuICAgKiBVcGRhdGVzIHRoZSBpbnRlcm5hbCBjaGVja2VkIGl0ZW1zIHN0YXRlIGFuZCBlbWl0cyB0aGUgY2hhbmdlIGV2ZW50IHRvIG5vdGlmeVxuICAgKiBwYXJlbnQgY29tcG9uZW50cyBvZiB0aGUgbmV3IGNoZWNrYm94IHNlbGVjdGlvbnMgZm9yIGZvcm0gdmFsaWRhdGlvbiBvciBkYXRhIHByb2Nlc3NpbmcuXG4gICAqIFxuICAgKiBAcGFyYW0gZXZlbnQgLSBUaGUgY2hlY2tlZCBjaGFuZ2UgZXZlbnQgY29udGFpbmluZyB0aGUgbmV3bHkgY2hlY2tlZCBpdGVtcyBhcnJheVxuICAgKi9cbiAgb25DaGVja2VkQ2hhbmdlKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmNoZWNrZWRJdGVtcyA9IGV2ZW50O1xuICAgIHRoaXMuY2hlY2tlZENoYW5nZS5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIHRyZWUgbm9kZSBleHBhbnNpb24gZXZlbnRzIHdoZW4gdXNlcnMgY2xpY2sgZXhwYW5kIGljb25zIG9yIHVzZSBrZXlib2FyZCBuYXZpZ2F0aW9uLlxuICAgKiBVcGRhdGVzIHRoZSBub2RlJ3MgZXhwYW5kZWQgc3RhdGUgaW4gdGhlIGRhdGEgbW9kZWwgYW5kIGVtaXRzIHRoZSBleHBhbmQgZXZlbnRcbiAgICogZm9yIHBhcmVudCBjb21wb25lbnRzIHRvIGhhbmRsZSBsYXp5IGxvYWRpbmcgb2YgY2hpbGQgZGF0YSBvciBzdGF0ZSBwZXJzaXN0ZW5jZS5cbiAgICogXG4gICAqIEBwYXJhbSBldmVudCAtIFRoZSBleHBhbmQgZXZlbnQgY29udGFpbmluZyB0aGUgZXhwYW5kZWQgbm9kZSBkYXRhIGFuZCBjb250ZXh0IGluZm9ybWF0aW9uXG4gICAqL1xuICBvbkV4cGFuZChldmVudDogYW55KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50LmRhdGFJdGVtKSB7XG4gICAgICBldmVudC5kYXRhSXRlbVt0aGlzLmV4cGFuZGVkRmllbGRdID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5leHBhbmQuZW1pdChldmVudCk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyB0cmVlIG5vZGUgY29sbGFwc2UgZXZlbnRzIHdoZW4gdXNlcnMgY2xpY2sgY29sbGFwc2UgaWNvbnMgb3IgdXNlIGtleWJvYXJkIG5hdmlnYXRpb24uXG4gICAqIFVwZGF0ZXMgdGhlIG5vZGUncyBleHBhbmRlZCBzdGF0ZSBpbiB0aGUgZGF0YSBtb2RlbCBhbmQgZW1pdHMgdGhlIGNvbGxhcHNlIGV2ZW50XG4gICAqIGZvciBwYXJlbnQgY29tcG9uZW50cyB0byBoYW5kbGUgc3RhdGUgY2xlYW51cCBvciBtZW1vcnkgb3B0aW1pemF0aW9uLlxuICAgKiBcbiAgICogQHBhcmFtIGV2ZW50IC0gVGhlIGNvbGxhcHNlIGV2ZW50IGNvbnRhaW5pbmcgdGhlIGNvbGxhcHNlZCBub2RlIGRhdGEgYW5kIGNvbnRleHQgaW5mb3JtYXRpb25cbiAgICovXG4gIG9uQ29sbGFwc2UoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIGlmIChldmVudC5kYXRhSXRlbSkge1xuICAgICAgZXZlbnQuZGF0YUl0ZW1bdGhpcy5leHBhbmRlZEZpZWxkXSA9IGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLmNvbGxhcHNlLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgc2luZ2xlLWNsaWNrIGV2ZW50cyBvbiB0cmVlIG5vZGVzIGZvciBjdXN0b20gaW50ZXJhY3Rpb24gaGFuZGxpbmcuXG4gICAqIFByb3BhZ2F0ZXMgY2xpY2sgZXZlbnRzIHRvIHBhcmVudCBjb21wb25lbnRzIGZvciBuYXZpZ2F0aW9uLCBzZWxlY3Rpb24gbG9naWMsXG4gICAqIG9yIGN1c3RvbSBhY3Rpb25zIGJhc2VkIG9uIHRoZSBjbGlja2VkIG5vZGUncyBkYXRhIGFuZCBjb250ZXh0LlxuICAgKiBcbiAgICogQHBhcmFtIGV2ZW50IC0gVGhlIG5vZGUgY2xpY2sgZXZlbnQgY29udGFpbmluZyBjbGlja2VkIG5vZGUgZGF0YSBhbmQgbW91c2UgZXZlbnQgZGV0YWlsc1xuICAgKi9cbiAgb25Ob2RlQ2xpY2soZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMubm9kZUNsaWNrLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgZG91YmxlLWNsaWNrIGV2ZW50cyBvbiB0cmVlIG5vZGVzIGZvciBlbmhhbmNlZCBpbnRlcmFjdGlvbiBwYXR0ZXJucy5cbiAgICogVHlwaWNhbGx5IHVzZWQgZm9yIG9wZW5pbmcgZGV0YWlsZWQgdmlld3MsIGVkaXRpbmcgbW9kZXMsIG9yIHF1aWNrIGFjdGlvbnNcbiAgICogdGhhdCBkaWZmZXIgZnJvbSBzaW5nbGUtY2xpY2sgYmVoYXZpb3IuIEVtaXRzIGV2ZW50IGZvciBwYXJlbnQgY29tcG9uZW50IGhhbmRsaW5nLlxuICAgKiBcbiAgICogQHBhcmFtIGV2ZW50IC0gVGhlIG5vZGUgZG91YmxlLWNsaWNrIGV2ZW50IGNvbnRhaW5pbmcgbm9kZSBkYXRhIGFuZCBtb3VzZSBldmVudCBkZXRhaWxzXG4gICAqL1xuICBvbk5vZGVEYmxDbGljayhldmVudDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5ub2RlRGJsQ2xpY2suZW1pdChldmVudCk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyB0aGUgaW5pdGlhdGlvbiBvZiBkcmFnIG9wZXJhdGlvbnMgd2hlbiB1c2VycyBzdGFydCBkcmFnZ2luZyB0cmVlIG5vZGVzLlxuICAgKiBWYWxpZGF0ZXMgdGhhdCBkcmFnLWFuZC1kcm9wIGZ1bmN0aW9uYWxpdHkgaXMgZW5hYmxlZCBiZWZvcmUgcHJvY2VlZGluZyBhbmRcbiAgICogZW1pdHMgdGhlIGRyYWcgc3RhcnQgZXZlbnQgZm9yIHBhcmVudCBjb21wb25lbnRzIHRvIGhhbmRsZSBkcmFnIHN0YXRlIHNldHVwLlxuICAgKiBcbiAgICogQHBhcmFtIGV2ZW50IC0gVGhlIHRyZWUgaXRlbSBkcmFnIHN0YXJ0IGV2ZW50IGNvbnRhaW5pbmcgc291cmNlIG5vZGUgYW5kIGRyYWcgY29udGV4dFxuICAgKi9cbiAgb25Ob2RlRHJhZ1N0YXJ0KGV2ZW50OiBUcmVlSXRlbURyYWdTdGFydEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRyYWdBbmREcm9wKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMubm9kZURyYWdTdGFydC5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIG9uZ29pbmcgZHJhZyBvcGVyYXRpb25zIGFzIHVzZXJzIG1vdmUgbm9kZXMgZHVyaW5nIGRyYWctYW5kLWRyb3AgYWN0aW9ucy5cbiAgICogUHJvdmlkZXMgcmVhbC10aW1lIGZlZWRiYWNrIGFuZCB2YWxpZGF0aW9uIGR1cmluZyB0aGUgZHJhZyBwcm9jZXNzLCBhbGxvd2luZ1xuICAgKiBwYXJlbnQgY29tcG9uZW50cyB0byB1cGRhdGUgVUkgaW5kaWNhdG9ycyBvciB2YWxpZGF0ZSBkcm9wIHRhcmdldHMuXG4gICAqIFxuICAgKiBAcGFyYW0gZXZlbnQgLSBUaGUgdHJlZSBpdGVtIGRyYWcgZXZlbnQgY29udGFpbmluZyBjdXJyZW50IGRyYWcgcG9zaXRpb24gYW5kIHRhcmdldCBpbmZvcm1hdGlvblxuICAgKi9cbiAgb25Ob2RlRHJhZyhldmVudDogVHJlZUl0ZW1EcmFnRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLm5vZGVEcmFnLmVtaXQoZXZlbnQpO1xuICB9XG5cblxuICAvKipcbiAgICogSGFuZGxlcyB0aGUgY29tcGxldGlvbiBvZiBkcmFnIG9wZXJhdGlvbnMgd2hlbiB1c2VycyBmaW5pc2ggZHJhZ2dpbmcgbm9kZXMuXG4gICAqIFByb3ZpZGVzIGNsZWFudXAgYW5kIGZpbmFsIHByb2Nlc3NpbmcgZm9yIGRyYWctYW5kLWRyb3Agb3BlcmF0aW9ucywgYWxsb3dpbmdcbiAgICogcGFyZW50IGNvbXBvbmVudHMgdG8gZmluYWxpemUgZGF0YSB1cGRhdGVzIGFuZCByZXNldCBkcmFnLXJlbGF0ZWQgVUkgc3RhdGVzLlxuICAgKiBcbiAgICogQHBhcmFtIGV2ZW50IC0gVGhlIHRyZWUgaXRlbSBkcmFnIGVuZCBldmVudCBjb250YWluaW5nIGZpbmFsIGRyYWcgc3RhdGUgYW5kIGNvbXBsZXRpb24gY29udGV4dFxuICAgKi9cbiAgb25Ob2RlRHJhZ0VuZChldmVudDogVHJlZUl0ZW1EcmFnRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLm5vZGVEcmFnRW5kLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgaXRlbSBhZGRpdGlvbiBldmVudHMgd2hlbiBuZXcgbm9kZXMgYXJlIGFkZGVkIHRvIHRoZSB0cmVlIHN0cnVjdHVyZS5cbiAgICogUHJvcGFnYXRlcyBhZGQgZXZlbnRzIHRvIHBhcmVudCBjb21wb25lbnRzIGZvciBkYXRhIHBlcnNpc3RlbmNlLCB2YWxpZGF0aW9uLFxuICAgKiBhbmQgdHJlZSBzdHJ1Y3R1cmUgdXBkYXRlcyB0byBtYWludGFpbiBkYXRhIGludGVncml0eS5cbiAgICogXG4gICAqIEBwYXJhbSBldmVudCAtIFRoZSB0cmVlIGl0ZW0gYWRkIGV2ZW50IGNvbnRhaW5pbmcgbmV3IGl0ZW0gZGF0YSBhbmQgaW5zZXJ0aW9uIGNvbnRleHRcbiAgICovXG4gIG9uQWRkSXRlbShldmVudDogVHJlZUl0ZW1BZGRSZW1vdmVBcmdzKTogdm9pZCB7XG4gICAgdGhpcy5hZGRJdGVtLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgaXRlbSByZW1vdmFsIGV2ZW50cyB3aGVuIG5vZGVzIGFyZSBkZWxldGVkIGZyb20gdGhlIHRyZWUgc3RydWN0dXJlLlxuICAgKiBQcm9wYWdhdGVzIHJlbW92ZSBldmVudHMgdG8gcGFyZW50IGNvbXBvbmVudHMgZm9yIGNvbmZpcm1hdGlvbiBkaWFsb2dzLCBkYXRhIGNsZWFudXAsXG4gICAqIGFuZCBjYXNjYWRpbmcgZGVsZXRpb25zIG9mIGNoaWxkIG5vZGVzIHdoZW4gbmVjZXNzYXJ5LlxuICAgKiBcbiAgICogQHBhcmFtIGV2ZW50IC0gVGhlIHRyZWUgaXRlbSByZW1vdmUgZXZlbnQgY29udGFpbmluZyBkZWxldGVkIGl0ZW0gZGF0YSBhbmQgY29udGV4dFxuICAgKi9cbiAgb25SZW1vdmVJdGVtKGV2ZW50OiBUcmVlSXRlbUFkZFJlbW92ZUFyZ3MpOiB2b2lkIHtcbiAgICB0aGlzLnJlbW92ZUl0ZW0uZW1pdChldmVudCk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyBleHBhbmRlZCBrZXlzIGNoYW5nZXMgZm9yIHR3by13YXkgYmluZGluZyBzdXBwb3J0IHdpdGggcGFyZW50IGNvbXBvbmVudHMuXG4gICAqIFN5bmNocm9uaXplcyBpbnRlcm5hbCBleHBhbmRlZCBzdGF0ZSB3aXRoIGV4dGVybmFsIGRhdGEgYmluZGluZywgZW5hYmxpbmdcbiAgICogcHJvZ3JhbW1hdGljIGNvbnRyb2wgb2YgdHJlZSBleHBhbnNpb24gYW5kIHN0YXRlIHBlcnNpc3RlbmNlIGFjcm9zcyBjb21wb25lbnQgdXBkYXRlcy5cbiAgICogXG4gICAqIEBwYXJhbSBrZXlzIC0gQXJyYXkgb2Ygc3RyaW5nIGtleXMgcmVwcmVzZW50aW5nIGN1cnJlbnRseSBleHBhbmRlZCB0cmVlIG5vZGVzXG4gICAqL1xuICBvbkV4cGFuZGVkS2V5c0NoYW5nZShrZXlzOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgIHRoaXMuZXhwYW5kZWRLZXlzID0ga2V5cztcbiAgICB0aGlzLmV4cGFuZGVkS2V5c0NoYW5nZS5lbWl0KGtleXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgc2VsZWN0ZWQga2V5cyBjaGFuZ2VzIGZvciB0d28td2F5IGJpbmRpbmcgc3VwcG9ydCB3aXRoIHBhcmVudCBjb21wb25lbnRzLlxuICAgKiBTeW5jaHJvbml6ZXMgaW50ZXJuYWwgc2VsZWN0aW9uIHN0YXRlIHdpdGggZXh0ZXJuYWwgZGF0YSBiaW5kaW5nLCBlbmFibGluZ1xuICAgKiBwcm9ncmFtbWF0aWMgY29udHJvbCBvZiB0cmVlIHNlbGVjdGlvbiBhbmQgZm9ybSBpbnRlZ3JhdGlvbiBjYXBhYmlsaXRpZXMuXG4gICAqIFxuICAgKiBAcGFyYW0ga2V5cyAtIEFycmF5IG9mIHN0cmluZyBrZXlzIHJlcHJlc2VudGluZyBjdXJyZW50bHkgc2VsZWN0ZWQgdHJlZSBub2Rlc1xuICAgKi9cbiAgb25TZWxlY3RlZEtleXNDaGFuZ2Uoa2V5czogc3RyaW5nW10pOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkS2V5cyA9IGtleXM7XG4gICAgdGhpcy5zZWxlY3RlZEtleXNDaGFuZ2UuZW1pdChrZXlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIGNoZWNrZWQga2V5cyBjaGFuZ2VzIGZvciB0d28td2F5IGJpbmRpbmcgc3VwcG9ydCB3aXRoIHBhcmVudCBjb21wb25lbnRzLlxuICAgKiBTeW5jaHJvbml6ZXMgaW50ZXJuYWwgY2hlY2tib3ggc3RhdGUgd2l0aCBleHRlcm5hbCBkYXRhIGJpbmRpbmcsIGVuYWJsaW5nXG4gICAqIHByb2dyYW1tYXRpYyBjb250cm9sIG9mIGNoZWNrYm94IHNlbGVjdGlvbnMgYW5kIGZvcm0gdmFsaWRhdGlvbiBpbnRlZ3JhdGlvbi5cbiAgICogXG4gICAqIEBwYXJhbSBrZXlzIC0gQXJyYXkgb2Ygc3RyaW5nIGtleXMgcmVwcmVzZW50aW5nIGN1cnJlbnRseSBjaGVja2VkIHRyZWUgbm9kZXNcbiAgICovXG4gIG9uQ2hlY2tlZEtleXNDaGFuZ2Uoa2V5czogc3RyaW5nW10pOiB2b2lkIHtcbiAgICB0aGlzLmNoZWNrZWRLZXlzID0ga2V5cztcbiAgICB0aGlzLmNoZWNrZWRLZXlzQ2hhbmdlLmVtaXQoa2V5cyk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyBmaWx0ZXIgdGV4dCBjaGFuZ2VzIHdoZW4gdXNlcnMgdHlwZSBpbiBzZWFyY2ggZmllbGRzIG9yIGFwcGx5IGZpbHRlcmluZyBjcml0ZXJpYS5cbiAgICogVXBkYXRlcyB0aGUgaW50ZXJuYWwgZmlsdGVyIHN0YXRlIGFuZCBwcm9wYWdhdGVzIGNoYW5nZXMgdG8gcGFyZW50IGNvbXBvbmVudHNcbiAgICogZm9yIHNlcnZlci1zaWRlIGZpbHRlcmluZyBvciBjdXN0b20gc2VhcmNoIGxvZ2ljIGltcGxlbWVudGF0aW9uLlxuICAgKiBcbiAgICogQHBhcmFtIGZpbHRlciAtIFRoZSBmaWx0ZXIgc3RyaW5nIGVudGVyZWQgYnkgdGhlIHVzZXIgZm9yIHRyZWUgbm9kZSBzZWFyY2hpbmdcbiAgICovXG4gIG9uRmlsdGVyQ2hhbmdlKGZpbHRlcjogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5maWx0ZXIgPSBmaWx0ZXI7XG4gICAgdGhpcy5maWx0ZXJDaGFuZ2UuZW1pdChmaWx0ZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBsb2FkIG1vcmUgZXZlbnRcbiAgICovXG4gIG9uTG9hZE1vcmUoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMubG9hZE1vcmUuZW1pdChldmVudCk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGNoaWxkcmVuIGxvYWRlZCBldmVudFxuICAgKi9cbiAgb25DaGlsZHJlbkxvYWRlZChldmVudDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5jaGlsZHJlbkxvYWRlZC5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIC8vIFV0aWxpdHkgTWV0aG9kc1xuXG4gIC8qKlxuICAgKiBFeHBhbmQgYWxsIG5vZGVzXG4gICAqL1xuICBleHBhbmRBbGwoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudHJlZVZpZXdFbGVtZW50KSB7XG4gICAgICAvLyBJbXBsZW1lbnRhdGlvbiBkZXBlbmRzIG9uIEtlbmRvIFRyZWVWaWV3IEFQSVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgaXRlbSBmcm9tIGxvb2t1cFxuICAgKi9cbiAgaXRlbUxvb2t1cChpbmRleDogc3RyaW5nKTogVHJlZUl0ZW1Mb29rdXAgfCB1bmRlZmluZWQge1xuICAgIGlmICh0aGlzLnRyZWVWaWV3RWxlbWVudCkge1xuICAgICAgcmV0dXJuIHRoaXMudHJlZVZpZXdFbGVtZW50Lml0ZW1Mb29rdXAoaW5kZXgpO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIExvZyBmdW5jdGlvbiBmb3IgZGVidWdnaW5nIGV2ZW50c1xuICAgKi9cbiAgbG9nKGV2ZW50TmFtZTogc3RyaW5nLCBldmVudDogYW55KTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coYCR7ZXZlbnROYW1lfTpgLCBldmVudCk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGRyb3AgZXZlbnQgd2l0aCBjdXN0b20gbG9naWNcbiAgICovXG4gIGhhbmRsZURyb3AoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKCdoYW5kbGVEcm9wOicsIGV2ZW50KTtcbiAgICAvLyBBZGQgY3VzdG9tIGRyb3AgaGFuZGxpbmcgbG9naWMgaGVyZVxuICAgIHRoaXMubm9kZURyb3AuZW1pdChldmVudCk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIG5vZGUgZHJhZyBzdGFydCBldmVudFxuICAgKi9cbiAgb25EcmFnU3RhcnQoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kcmFnQW5kRHJvcCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgW2NsYXNzXT1cImdldFRyZWVWaWV3Q2xhc3NlcygpXCI+XG5cbiAgPGRpdiBjbGFzcz1cInRyZWV2aWV3LXBhbmVsXCI+XG5cbiAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJjaGVja2FibGVcIj5cblxuICAgICAgPGtlbmRvLXRyZWV2aWV3ICN0cmVlVmlld0VsZW1lbnQgKm5nU3dpdGNoQ2FzZT1cInRydWVcIiBbY2hpbGRyZW5dPVwiY2hpbGRyZW5cIiBrZW5kb1RyZWVWaWV3SGllcmFyY2h5QmluZGluZ1xuICAgICAgICBrZW5kb1RyZWVWaWV3RXhwYW5kYWJsZSBba2VuZG9UcmVlVmlld0NoZWNrYWJsZV09XCJjaGVja2FibGVTZXR0aW5nc1wiIGtlbmRvVHJlZVZpZXdEcmFnQW5kRHJvcFxuICAgICAgICBrZW5kb1RyZWVWaWV3RHJhZ0FuZERyb3BFZGl0aW5nIFtub2Rlc109XCJkYXRhXCIgW3RleHRGaWVsZF09XCJ0ZXh0RmllbGRcIiBbY2hpbGRyZW5GaWVsZF09XCJjaGlsZHJlbkZpZWxkXCJcbiAgICAgICAgW2ZpbHRlcmFibGVdPVwiZmlsdGVyYWJsZVwiIFtleHBhbmRCeV09XCJleHBhbmRCeVwiIFsoZXhwYW5kZWRLZXlzKV09XCJleHBhbmRlZEtleXNcIlxuICAgICAgICBbZXhwYW5kRGlzYWJsZWROb2Rlc109XCJleHBhbmREaXNhYmxlZE5vZGVzXCIgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgKGNoZWNrZWRDaGFuZ2UpPVwib25DaGVja2VkQ2hhbmdlKCRldmVudClcIiAoZXhwYW5kKT1cIm9uRXhwYW5kKCRldmVudClcIiAoY29sbGFwc2UpPVwib25Db2xsYXBzZSgkZXZlbnQpXCJcbiAgICAgICAgKG5vZGVDbGljayk9XCJvbk5vZGVDbGljaygkZXZlbnQpXCIgKGV4cGFuZGVkS2V5c0NoYW5nZSk9XCJvbkV4cGFuZGVkS2V5c0NoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgKG5vZGVEcmFnU3RhcnQpPVwib25EcmFnU3RhcnQoJGV2ZW50KVwiIChub2RlRHJvcCk9XCJoYW5kbGVEcm9wKCRldmVudClcIiAoYWRkSXRlbSk9XCJsb2coJ2FkZEl0ZW0nLCAkZXZlbnQpXCJcbiAgICAgICAgKHJlbW92ZUl0ZW0pPVwibG9nKCdyZW1vdmVJdGVtJywgJGV2ZW50KVwiIChub2RlRHJhZ0VuZCk9XCJsb2coJ25vZGVEcmFnRW5kJywgJGV2ZW50KVwiXG4gICAgICAgIChub2RlRHJhZyk9XCJvbk5vZGVEcmFnKCRldmVudClcIiBjbGFzcz1cImxpYi10cmVlLXZpZXdfX2tlbmRvLXRyZWVcIiBba2VuZG9UcmVlVmlld1NlbGVjdGFibGVdPVwic2VsZWN0YWJsZVwiXG4gICAgICAgIFtmaWx0ZXJdPVwiZmlsdGVyXCIgW3NpemVdPVwic2l6ZVwiIFtuYXZpZ2FibGVdPVwibmF2aWdhYmxlXCIgW2xvYWRPbkRlbWFuZF09XCJsb2FkT25EZW1hbmRcIiBbdHJhY2tCeV09XCJ0cmFja0J5XCJcbiAgICAgICAgW2hhc0NoaWxkcmVuXT1cImhhc0NoaWxkcmVuXCIgWyhzZWxlY3RlZEtleXMpXT1cInNlbGVjdGVkS2V5c1wiIChmaWx0ZXJDaGFuZ2UpPVwib25GaWx0ZXJDaGFuZ2UoJGV2ZW50KVwiPlxuXG4gICAgICAgIDwhLS0gQ3VzdG9tIE5vZGUgVGVtcGxhdGUgLS0+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cIm5vZGVUZW1wbGF0ZVwiIGtlbmRvVHJlZVZpZXdOb2RlVGVtcGxhdGUgbGV0LWRhdGFJdGVtPVwiZGF0YUl0ZW1cIiBsZXQtaW5kZXg9XCJpbmRleFwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwibm9kZVRlbXBsYXRlXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgXG4gICAgICAgICRpbXBsaWNpdDogZGF0YUl0ZW0sIFxuICAgICAgICBkYXRhSXRlbTogZGF0YUl0ZW0sIFxuICAgICAgICBpbmRleDogaW5kZXggXG4gICAgICB9XCI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgPCEtLSBMb2FkIE1vcmUgQnV0dG9uIFRlbXBsYXRlIC0tPlxuICAgICAgICA8bmctdGVtcGxhdGUgKm5nSWY9XCJsb2FkTW9yZUJ1dHRvblRlbXBsYXRlXCIga2VuZG9UcmVlVmlld0xvYWRNb3JlQnV0dG9uVGVtcGxhdGUgbGV0LWRhdGFJdGVtPVwiZGF0YUl0ZW1cIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxvYWRNb3JlQnV0dG9uVGVtcGxhdGVcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBcbiAgICAgICAgJGltcGxpY2l0OiBkYXRhSXRlbSwgXG4gICAgICAgIGRhdGFJdGVtOiBkYXRhSXRlbSBcbiAgICAgIH1cIj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgPC9rZW5kby10cmVldmlldz5cblxuICAgICAgPCEtLSBUcmVlVmlldyB3aXRob3V0IGNoZWNrYWJsZSBmdW5jdGlvbmFsaXR5IC0tPlxuICAgICAgPGtlbmRvLXRyZWV2aWV3ICN0cmVlVmlld0VsZW1lbnQgKm5nU3dpdGNoRGVmYXVsdCBrZW5kb1RyZWVWaWV3SGllcmFyY2h5QmluZGluZyBrZW5kb1RyZWVWaWV3RXhwYW5kYWJsZVxuICAgICAgICBrZW5kb1RyZWVWaWV3RHJhZ0FuZERyb3Aga2VuZG9UcmVlVmlld0RyYWdBbmREcm9wRWRpdGluZyBbbm9kZXNdPVwiZGF0YVwiIFt0ZXh0RmllbGRdPVwidGV4dEZpZWxkXCJcbiAgICAgICAgW2NoaWxkcmVuRmllbGRdPVwiY2hpbGRyZW5GaWVsZFwiIFtmaWx0ZXJhYmxlXT1cImZpbHRlcmFibGVcIiBbZXhwYW5kQnldPVwiZXhwYW5kQnlcIiBbKGV4cGFuZGVkS2V5cyldPVwiZXhwYW5kZWRLZXlzXCJcbiAgICAgICAgW2V4cGFuZERpc2FibGVkTm9kZXNdPVwiZXhwYW5kRGlzYWJsZWROb2Rlc1wiIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIChjaGVja2VkQ2hhbmdlKT1cIm9uQ2hlY2tlZENoYW5nZSgkZXZlbnQpXCIgKGV4cGFuZCk9XCJvbkV4cGFuZCgkZXZlbnQpXCIgKGNvbGxhcHNlKT1cIm9uQ29sbGFwc2UoJGV2ZW50KVwiXG4gICAgICAgIChub2RlQ2xpY2spPVwib25Ob2RlQ2xpY2soJGV2ZW50KVwiIChleHBhbmRlZEtleXNDaGFuZ2UpPVwib25FeHBhbmRlZEtleXNDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIChub2RlRHJhZ1N0YXJ0KT1cIm9uRHJhZ1N0YXJ0KCRldmVudClcIiAobm9kZURyYWcpPVwib25Ob2RlRHJhZygkZXZlbnQpXCIgKG5vZGVEcm9wKT1cImhhbmRsZURyb3AoJGV2ZW50KVwiXG4gICAgICAgIChhZGRJdGVtKT1cImxvZygnYWRkSXRlbScsICRldmVudClcIiAocmVtb3ZlSXRlbSk9XCJsb2coJ3JlbW92ZUl0ZW0nLCAkZXZlbnQpXCJcbiAgICAgICAgKG5vZGVEcmFnRW5kKT1cImxvZygnbm9kZURyYWdFbmQnLCAkZXZlbnQpXCIgY2xhc3M9XCJsaWItdHJlZS12aWV3X19rZW5kby10cmVlXCJcbiAgICAgICAgW2tlbmRvVHJlZVZpZXdTZWxlY3RhYmxlXT1cInNlbGVjdGFibGVcIiBbc2l6ZV09XCJzaXplXCIgW25hdmlnYWJsZV09XCJuYXZpZ2FibGVcIiBbbG9hZE9uRGVtYW5kXT1cImxvYWRPbkRlbWFuZFwiXG4gICAgICAgIFt0cmFja0J5XT1cInRyYWNrQnlcIiBbaGFzQ2hpbGRyZW5dPVwiaGFzQ2hpbGRyZW5cIiBbKHNlbGVjdGVkS2V5cyldPVwic2VsZWN0ZWRLZXlzXCJcbiAgICAgICAgKGZpbHRlckNoYW5nZSk9XCJvbkZpbHRlckNoYW5nZSgkZXZlbnQpXCI+XG5cbiAgICAgICAgPCEtLSBDdXN0b20gTm9kZSBUZW1wbGF0ZSAtLT5cbiAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwibm9kZVRlbXBsYXRlXCIga2VuZG9UcmVlVmlld05vZGVUZW1wbGF0ZSBsZXQtZGF0YUl0ZW09XCJkYXRhSXRlbVwiIGxldC1pbmRleD1cImluZGV4XCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJub2RlVGVtcGxhdGVcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBcbiAgICAgICAgJGltcGxpY2l0OiBkYXRhSXRlbSwgXG4gICAgICAgIGRhdGFJdGVtOiBkYXRhSXRlbSwgXG4gICAgICAgIGluZGV4OiBpbmRleCBcbiAgICAgIH1cIj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICA8IS0tIExvYWQgTW9yZSBCdXR0b24gVGVtcGxhdGUgLS0+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cImxvYWRNb3JlQnV0dG9uVGVtcGxhdGVcIiBrZW5kb1RyZWVWaWV3TG9hZE1vcmVCdXR0b25UZW1wbGF0ZSBsZXQtZGF0YUl0ZW09XCJkYXRhSXRlbVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwibG9hZE1vcmVCdXR0b25UZW1wbGF0ZVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IFxuICAgICAgICAkaW1wbGljaXQ6IGRhdGFJdGVtLCBcbiAgICAgICAgZGF0YUl0ZW06IGRhdGFJdGVtIFxuICAgICAgfVwiPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICA8L2tlbmRvLXRyZWV2aWV3PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPCEtLSBMb2FkaW5nIGluZGljYXRvciAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwibG9hZGluZ1wiIGNsYXNzPVwibGliLXRyZWUtdmlld19fbG9hZGluZ1wiPlxuICAgICAgPGxpYi1sb2FkZXIgc2l6ZT1cIm1lZGl1bVwiIHR5cGU9XCJwdWxzaW5nXCIgdGhlbWVDb2xvcj1cInByaW1hcnlcIj48L2xpYi1sb2FkZXI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS12aWV3LmludGVyZmFjZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaGFyZWQvc3JjL2xpYi9hdG9tcy90cmVlLXZpZXcvdHJlZS12aWV3LmludGVyZmFjZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVHJlZVZpZXcgbm9kZSBpbnRlcmZhY2Ugd2l0aCBjb21wcmVoZW5zaXZlIHByb3BlcnRpZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUcmVlVmlld05vZGUge1xuICAvLyBDb3JlIFByb3BlcnRpZXNcbiAgdGV4dDogc3RyaW5nO1xuICB2YWx1ZT86IGFueTtcbiAgaWQ/OiBzdHJpbmcgfCBudW1iZXI7XG5cbiAgLy8gU3RhdGUgUHJvcGVydGllc1xuICBleHBhbmRlZD86IGJvb2xlYW47XG4gIHNlbGVjdGVkPzogYm9vbGVhbjtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBjaGVja2VkPzogYm9vbGVhbjtcbiAgdmlzaWJsZT86IGJvb2xlYW47XG5cbiAgLy8gSGllcmFyY2h5IFByb3BlcnRpZXNcbiAgY2hpbGRyZW4/OiBUcmVlVmlld05vZGVbXTtcbiAgcGFyZW50SWQ/OiBzdHJpbmcgfCBudW1iZXI7XG5cbiAgLy8gVmlzdWFsIFByb3BlcnRpZXNcbiAgaWNvbj86IHN0cmluZztcbiAgaWNvbkNsYXNzPzogc3RyaW5nO1xuICBpbWFnZVVybD86IHN0cmluZztcbiAgc3ByaXRlQ3NzQ2xhc3M/OiBzdHJpbmc7XG4gIGNzc0NsYXNzPzogc3RyaW5nO1xuXG4gIC8vIExvYWQgTW9yZSBQcm9wZXJ0aWVzXG4gIGhhc01vcmU/OiBib29sZWFuO1xuICBsb2FkTW9yZVRleHQ/OiBzdHJpbmc7XG5cbiAgLy8gQ3VzdG9tIFByb3BlcnRpZXNcbiAgW2tleTogc3RyaW5nXTogYW55O1xufVxuIl19
|