@messaia/cdk 18.2.3-rc07 → 18.2.3-rc09

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.
@@ -27,128 +27,196 @@ export class GenericListComponent extends BaseComponent {
27
27
  changeDetectorRef;
28
28
  classType;
29
29
  /**
30
- * A reference to MdPaginator element
30
+ * @property paginator
31
+ * @description A reference to the MatPaginator element.
32
+ * This is used for handling pagination in the data table.
33
+ * @type {MatPaginator | undefined}
31
34
  */
32
35
  paginator;
33
36
  /**
34
- * A reference to MdSort attribute
37
+ * @property sort
38
+ * @description A reference to the MatSort element.
39
+ * This is used for handling sorting functionality in the data table.
40
+ * @type {MatSort | undefined}
35
41
  */
36
42
  sort;
37
43
  /**
38
- * Page size options
44
+ * @property pageSizeOptions
45
+ * @description An array of available page size options for the data table.
46
+ * @type {number[]}
39
47
  */
40
48
  pageSizeOptions = [5, 10, 15, 20, 30, 50, 100, 200];
41
49
  /**
42
- * The navigations to includes
50
+ * @property includes
51
+ * @description Specifies the navigations to include when fetching data.
52
+ * @type {string[]}
43
53
  */
44
54
  includes = [];
45
55
  /**
46
- * projection: string | string[]
56
+ * @property projection
57
+ * @description Specifies the projection(s) to apply when fetching data.
58
+ * Can be a single string or an array of strings.
59
+ * @type {string | string[]}
47
60
  */
48
61
  projection = [];
49
62
  /**
50
- * The navigations to includes
63
+ * @property excludedColumns
64
+ * @description Specifies the columns to exclude from the data table.
65
+ * @type {string[]}
51
66
  */
52
67
  excludedColumns = [];
53
68
  /**
54
- * Get params
69
+ * @property query
70
+ * @description The query parameters for fetching data from the server.
71
+ * @type {any}
55
72
  */
56
73
  query = {};
57
74
  /**
58
- * Data-table datasource
75
+ * @property dataSource
76
+ * @description The data source for the data table, managing the data displayed.
77
+ * @type {TableDataSource<TEntity, TService> | any}
59
78
  */
60
79
  dataSource;
61
80
  /**
62
- * Current sort column
81
+ * @property items
82
+ * @description Initializes the items array as an optional array of entities.
83
+ * @type {TEntity[]}
84
+ */
85
+ items = [];
86
+ /**
87
+ * @property sortActive
88
+ * @description The currently active sort column in the data table.
89
+ * @type {string | undefined}
63
90
  */
64
91
  sortActive;
65
92
  /**
66
- * Current sort direction
93
+ * @property sortDirection
94
+ * @description The current sort direction for the data table. Default is 'asc'.
95
+ * @type {SortDirection}
67
96
  */
68
97
  sortDirection = 'asc';
69
98
  /**
70
- * An instance of the class to create the table for
99
+ * @property classInstance
100
+ * @description An instance of the class used to create the table for a specific type of entity.
101
+ * @type {any}
71
102
  */
72
103
  classInstance;
73
104
  /**
74
- * columns: TableColumn[]
105
+ * @property columns
106
+ * @description An array defining the table columns and their configuration.
107
+ * @type {TableColumn[]}
75
108
  */
76
109
  columns = [];
77
110
  /**
78
- * Used to display specific columns in the table.
79
- * This array defines sets of columns that can be shown
80
- * based on the active configuration, allowing for dynamic table
81
- * column customization.
82
- * @property
111
+ * @property columnSets
112
+ * @description Used to display specific columns in the table.
113
+ * This array defines sets of columns that can be shown
114
+ * based on the active configuration, allowing for dynamic table
115
+ * column customization.
116
+ * @type {string[]}
83
117
  */
84
118
  columnSets = [];
85
119
  /**
86
- * A reference to MdSort attribute
120
+ * @property dynamicTable
121
+ * @description A reference to the dynamic table component.
122
+ * @type {VdDynamicTableComponent}
87
123
  */
88
124
  dynamicTable;
89
125
  /**
90
- * listConfig: {configs: any, query: any}
126
+ * @property tableConfig
127
+ * @description Configuration object for the table, including query and column settings.
128
+ * @type {TableConfig}
91
129
  */
92
130
  tableConfig = new TableConfig();
93
131
  /**
94
- * The type of the dialog for creation
132
+ * @property addDialogType
133
+ * @description The type of the dialog used for creating new entries in the table.
134
+ * @type {any}
95
135
  */
96
136
  addDialogType = null;
97
137
  /**
98
- * Shows the column 'Checkbox'
138
+ * @property selectable
139
+ * @description If true, show the column 'Checkbox'.
140
+ * @type {boolean}
99
141
  */
100
142
  selectable = true;
101
143
  /**
102
- * If true, show the button 'Add'
144
+ * @property addable
145
+ * @description If true, show the button 'Add'.
146
+ * @type {boolean}
103
147
  */
104
148
  addable = true;
105
149
  /**
106
- * If true, show the menu 'Edit'
150
+ * @property editable
151
+ * @description If true, show the menu 'Edit'.
152
+ * @type {boolean}
107
153
  */
108
154
  editable = true;
109
155
  /**
110
- * If true, show the menu 'Delete'
156
+ * @property deletable
157
+ * @description If true, show the menu 'Delete'.
158
+ * @type {boolean}
111
159
  */
112
160
  deletable = true;
113
161
  /**
114
- * If true, show the menu 'Download'
162
+ * @property downloadable
163
+ * @description If true, show the menu 'Download'.
164
+ * @type {boolean}
115
165
  */
116
166
  downloadable = false;
117
167
  /**
118
- * If true, show the menu 'Duplicate'
168
+ * @property duplicable
169
+ * @description If true, show the menu 'Duplicate'.
170
+ * @type {boolean}
119
171
  */
120
172
  duplicable = false;
121
173
  /**
122
- * If true, show the menu 'Configure table'
174
+ * @property configurable
175
+ * @description If true, show the menu 'Configure table'.
176
+ * @type {boolean}
123
177
  */
124
178
  configurable = true;
125
179
  /**
126
- * Flag to indicate whether the table headers or columns should stick
127
- * to the viewport during scrolling.
180
+ * @property sticky
181
+ * @description Flag to indicate whether the table headers or columns should stick
182
+ * to the viewport during scrolling.
183
+ * @type {boolean}
128
184
  */
129
185
  sticky = false;
130
186
  /**
131
- * Defines the overall width of the table.
187
+ * @property tableWidth
188
+ * @description Defines the overall width of the table.
189
+ * @type {number}
132
190
  */
133
191
  tableWidth;
134
192
  /**
135
- * rowNgClass: Function
193
+ * @property rowNgClass
194
+ * @description A function to determine the dynamic CSS class for table rows.
195
+ * @type {(x: TEntity, ctx: any) => any}
136
196
  */
137
197
  rowNgClass = undefined;
138
198
  /**
139
- * rowClick: Function
199
+ * @property rowClick
200
+ * @description A function to handle row click events.
201
+ * @type {(x: TEntity, ctx: any) => any}
140
202
  */
141
203
  rowClick = undefined;
142
204
  /**
143
- * editRoute: Function
205
+ * @property onEdit
206
+ * @description A function to handle edit actions for a row.
207
+ * @type {(x: TEntity, ctx: any) => any}
144
208
  */
145
209
  onEdit = undefined;
146
210
  /**
147
- * detailsTemplate: Function
211
+ * @property detailsTemplate
212
+ * @description Template string for displaying row details.
213
+ * @type {string}
148
214
  */
149
215
  detailsTemplate = undefined;
150
216
  /**
151
- * toolbarActions: ActionItem[]
217
+ * @property toolbarActions
218
+ * @description Array of toolbar action items.
219
+ * @type {ActionItem[]}
152
220
  */
153
221
  toolbarActions = [{
154
222
  icon: 'refresh',
@@ -156,28 +224,41 @@ export class GenericListComponent extends BaseComponent {
156
224
  event: () => this.loadList()
157
225
  }];
158
226
  /**
159
- * Toolbar menu items
227
+ * @property toolbarMenuItems
228
+ * @description Array of toolbar menu items for actions.
229
+ * @type {ActionItem<TEntity>[]}
160
230
  */
161
231
  toolbarMenuItems = [];
162
232
  /**
163
- * Table row menu items
233
+ * @property rowMenuItems
234
+ * @description Array of menu items for actions related to table rows.
235
+ * @type {ActionItem<TEntity>[]}
164
236
  */
165
237
  rowMenuItems = [];
166
238
  /**
167
- * Adds a back button to the toolbar
239
+ * @property backButton
240
+ * @description Adds a back button to the toolbar.
241
+ * @type {boolean}
168
242
  */
169
243
  backButton = false;
170
244
  /**
171
- * DataLoaded event subscription
245
+ * @property dataLoadedSubscription
246
+ * @description Subscription to the DataLoaded event.
247
+ * @type {Subscription}
172
248
  */
173
249
  dataLoadedSubscription;
174
250
  /**
175
- * The key for configs
251
+ * @property configsKey
252
+ * @description The key used for storing table configurations.
253
+ * @type {string}
176
254
  */
177
255
  configsKey = '';
178
256
  /**
179
- * Constructor
180
- * @param service
257
+ * Constructor for the table component.
258
+ * @param service The service used for managing table data.
259
+ * @param route ActivatedRoute for retrieving route information.
260
+ * @param changeDetectorRef ChangeDetectorRef for managing view updates.
261
+ * @param classType The class type of the table entity.
181
262
  */
182
263
  constructor(service, route, changeDetectorRef, classType) {
183
264
  super(route, changeDetectorRef);
@@ -350,13 +431,22 @@ export class GenericListComponent extends BaseComponent {
350
431
  });
351
432
  }
352
433
  /**
353
- * Connects a collection viewer (such as a data-table) to the data source.
354
- * @param staticFieldFilters
434
+ * @method connect
435
+ * @description Connects a collection viewer (such as a data table) to the data source.
436
+ * This method initializes the data source with static field filters and an optional path.
437
+ * It also subscribes to the data source to update the displayed items in the table.
438
+ * @param {any} staticFieldFilters - Optional static field filters to apply when connecting the data source.
439
+ * @param {string} [path] - Optional path for the data source connection.
440
+ * @returns {void}
355
441
  */
356
442
  connect(staticFieldFilters = null, path) {
443
+ /* Set the optional path for the data source */
357
444
  this.dataSource.path = path;
445
+ /* Apply static field filters */
358
446
  this.dataSource.staticFieldFilters = staticFieldFilters || {};
359
- this.dataSource.connect(undefined).subscribe();
447
+ /* Update items from the data source */
448
+ this.dataSource.connect(undefined).subscribe((x) => this.items = x);
449
+ /* Add row menu items if the table is not dynamic */
360
450
  if (!this.dynamicTable) {
361
451
  this.addRowMenuItems();
362
452
  }
@@ -873,4 +963,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
873
963
  type: HostListener,
874
964
  args: ['document:keydown', ['$event']]
875
965
  }] } });
876
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nkay9zcmMvbGliL2Jhc2UvY29tcG9uZW50cy9nZW5lcmljLWxpc3QuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBYSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBRSxPQUFPLEVBQWlCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFcEMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUM5RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFHN0QsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOERBQThELENBQUM7QUFDdkcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUU5RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDOUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUVwRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0s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QUR6QixZQUFZO3VCQUFDLGtCQUFrQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIERpcmVjdGl2ZSwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25EZXN0cm95LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0UGFnaW5hdG9yIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcclxuaW1wb3J0IHsgTWF0U29ydCwgU29ydERpcmVjdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NvcnQnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IHNhdmVBcyB9IGZyb20gJ2ZpbGUtc2F2ZXInO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgVXRpbHMgfSBmcm9tICcuLi8uLi9jb21tb24vZnVuY3Rpb25zL3V0aWxzJztcclxuaW1wb3J0IHsgQXBwU3RvcmFnZSB9IGZyb20gJy4uLy4uL2NvbW1vbi9oZWxwZXJzL2FwcC1zdG9yYWdlJztcclxuaW1wb3J0IHsgQWN0aW9uSXRlbSB9IGZyb20gJy4uLy4uL2NvbW1vbi9tb2RlbHMvYWN0aW9uLWl0ZW0nO1xyXG5pbXBvcnQgeyBJRW50aXR5IH0gZnJvbSAnLi4vLi4vY29tbW9uL21vZGVscy9lbnRpdHknO1xyXG5pbXBvcnQgeyBHZW5lcmljU2VydmljZSB9IGZyb20gJy4uLy4uL2h0dHAvc2VydmljZXMvZ2VuZXJpYy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVmREeW5hbWljVGFibGVDb21wb25lbnQgfSBmcm9tICcuLi8uLi90YWJsZS9jb21wb25lbnRzL2R5bmFtaWMtdGFibGUvZHluYW1pYy10YWJsZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUYWJsZUNvbHVtblR5cGUgfSBmcm9tICcuLi8uLi90YWJsZS9lbnVtcy90YWJsZS1jb2x1bW4tdHlwZSc7XHJcbmltcG9ydCB7IGdldFRhYmxlRGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uL3RhYmxlL2Z1bmN0aW9ucy9mdW5jdGlvbnMnO1xyXG5pbXBvcnQgeyBUYWJsZUNvbHVtbiB9IGZyb20gJy4uLy4uL3RhYmxlL21vZGVscy90YWJsZS1jb2x1bW4nO1xyXG5pbXBvcnQgeyBUYWJsZUNvbHVtbkNvbmZpZyB9IGZyb20gJy4uLy4uL3RhYmxlL21vZGVscy90YWJsZS1jb2x1bW4tY29uZmlnJztcclxuaW1wb3J0IHsgVGFibGVDb25maWcgfSBmcm9tICcuLi8uLi90YWJsZS9tb2RlbHMvdGFibGUtY29uZmlnJztcclxuaW1wb3J0IHsgVGFibGVEYXRhU291cmNlIH0gZnJvbSAnLi4vLi4vdGFibGUvdGFibGUuZGF0YS1zb3VyY2UnO1xyXG5pbXBvcnQgeyBBdXRoSGVscGVyIH0gZnJvbSAnLi4vaGVscGVycy9hdXRoLWhlbHBlcic7XHJcbmltcG9ydCB7IElHZW5lcmljTGlzdENvbXBvbmVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMvaWdlbmVyaWMtbGlzdC1jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi9iYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFZkRHluYW1pY1RhYmxlQ29uZmlnRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi9keW5hbWljLXRhYmxlLWNvbmZpZy1kaWFsb2cvZHluYW1pYy10YWJsZS1jb25maWctZGlhbG9nLmNvbW5wb25lbnQnO1xyXG5cclxuLyoqXHJcbiAqIEEgYmFzZSBsaXN0IGNvbXBvbmVudCBmb3IgY29tcG9uZW50cyB3aXRoIHBhZ2luYXRpb24gc3VwcG9ydFxyXG4gKi9cclxuLy8gQGR5bmFtaWNcclxuQERpcmVjdGl2ZSgpXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBHZW5lcmljTGlzdENvbXBvbmVudDxURW50aXR5IGV4dGVuZHMgSUVudGl0eSB8IGFueSwgVFNlcnZpY2UgZXh0ZW5kcyBHZW5lcmljU2VydmljZTxURW50aXR5Pj4gZXh0ZW5kcyBCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgSUdlbmVyaWNMaXN0Q29tcG9uZW50PFRFbnRpdHk+LCBPbkRlc3Ryb3kge1xyXG5cclxuXHQvKipcclxuXHQgKiBBIHJlZmVyZW5jZSB0byBNZFBhZ2luYXRvciBlbGVtZW50XHJcblx0ICovXHJcblx0QFZpZXdDaGlsZChNYXRQYWdpbmF0b3IsIHsgc3RhdGljOiB0cnVlIH0pXHJcblx0cHVibGljIHBhZ2luYXRvcj86IE1hdFBhZ2luYXRvcjtcclxuXHJcblx0LyoqXHJcblx0ICogQSByZWZlcmVuY2UgdG8gTWRTb3J0IGF0dHJpYnV0ZVxyXG5cdCAqL1xyXG5cdEBWaWV3Q2hpbGQoTWF0U29ydCwgeyBzdGF0aWM6IHRydWUgfSlcclxuXHRwdWJsaWMgc29ydD86IE1hdFNvcnQ7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFBhZ2Ugc2l6ZSBvcHRpb25zXHJcblx0ICovXHJcblx0cHVibGljIHBhZ2VTaXplT3B0aW9uczogQXJyYXk8bnVtYmVyPiA9IFs1LCAxMCwgMTUsIDIwLCAzMCwgNTAsIDEwMCwgMjAwXTtcclxuXHJcblx0LyoqXHJcblx0ICogVGhlIG5hdmlnYXRpb25zIHRvIGluY2x1ZGVzXHJcblx0ICovXHJcblx0cHVibGljIGluY2x1ZGVzOiBBcnJheTxzdHJpbmc+ID0gW107XHJcblxyXG5cdC8qKlxyXG5cdCAqIHByb2plY3Rpb246IHN0cmluZyB8IHN0cmluZ1tdXHJcblx0ICovXHJcblx0cHVibGljIHByb2plY3Rpb246IHN0cmluZyB8IHN0cmluZ1tdID0gW107XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRoZSBuYXZpZ2F0aW9ucyB0byBpbmNsdWRlc1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBleGNsdWRlZENvbHVtbnM6IEFycmF5PHN0cmluZz4gPSBbXTtcclxuXHJcblx0LyoqXHJcblx0ICogR2V0IHBhcmFtc1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBxdWVyeTogYW55ID0ge307XHJcblxyXG5cdC8qKlxyXG5cdCAqIERhdGEtdGFibGUgZGF0YXNvdXJjZVxyXG5cdCAqL1xyXG5cdHB1YmxpYyBkYXRhU291cmNlPzogVGFibGVEYXRhU291cmNlPFRFbnRpdHksIFRTZXJ2aWNlPiB8IGFueTtcclxuXHJcblx0LyoqXHJcblx0ICogQ3VycmVudCBzb3J0IGNvbHVtblxyXG5cdCAqL1xyXG5cdHB1YmxpYyBzb3J0QWN0aXZlPzogc3RyaW5nO1xyXG5cclxuXHQvKipcclxuXHQgKiBDdXJyZW50IHNvcnQgZGlyZWN0aW9uXHJcblx0ICovXHJcblx0cHVibGljIHNvcnREaXJlY3Rpb246IFNvcnREaXJlY3Rpb24gPSAnYXNjJztcclxuXHJcblx0LyoqXHJcblx0ICogQW4gaW5zdGFuY2Ugb2YgdGhlIGNsYXNzIHRvIGNyZWF0ZSB0aGUgdGFibGUgZm9yXHJcblx0ICovXHJcblx0cHVibGljIGNsYXNzSW5zdGFuY2U6IGFueTtcclxuXHJcblx0LyoqXHJcblx0ICogY29sdW1uczogVGFibGVDb2x1bW5bXSBcclxuXHQgKi9cclxuXHRwdWJsaWMgY29sdW1uczogVGFibGVDb2x1bW5bXSA9IFtdO1xyXG5cclxuXHQvKipcclxuXHQgKiBVc2VkIHRvIGRpc3BsYXkgc3BlY2lmaWMgY29sdW1ucyBpbiB0aGUgdGFibGUuXHJcblx0ICogVGhpcyBhcnJheSBkZWZpbmVzIHNldHMgb2YgY29sdW1ucyB0aGF0IGNhbiBiZSBzaG93blxyXG5cdCAqIGJhc2VkIG9uIHRoZSBhY3RpdmUgY29uZmlndXJhdGlvbiwgYWxsb3dpbmcgZm9yIGR5bmFtaWMgdGFibGVcclxuXHQgKiBjb2x1bW4gY3VzdG9taXphdGlvbi5cclxuXHQgKiBAcHJvcGVydHlcclxuXHQgKi9cclxuXHRwdWJsaWMgY29sdW1uU2V0cz86IHN0cmluZ1tdID0gW107XHJcblxyXG5cdC8qKlxyXG5cdCAqIEEgcmVmZXJlbmNlIHRvIE1kU29ydCBhdHRyaWJ1dGVcclxuXHQgKi9cclxuXHRAVmlld0NoaWxkKFZkRHluYW1pY1RhYmxlQ29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG5cdHB1YmxpYyBkeW5hbWljVGFibGU/OiBWZER5bmFtaWNUYWJsZUNvbXBvbmVudDtcclxuXHJcblx0LyoqXHJcblx0ICogbGlzdENvbmZpZzoge2NvbmZpZ3M6IGFueSwgcXVlcnk6IGFueX1cclxuXHQgKi9cclxuXHRwdWJsaWMgdGFibGVDb25maWc6IFRhYmxlQ29uZmlnID0gbmV3IFRhYmxlQ29uZmlnKCk7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRoZSB0eXBlIG9mIHRoZSBkaWFsb2cgZm9yIGNyZWF0aW9uXHJcblx0ICovXHJcblx0cHVibGljIGFkZERpYWxvZ1R5cGU6IGFueSA9IG51bGw7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNob3dzIHRoZSBjb2x1bW4gJ0NoZWNrYm94J1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBzZWxlY3RhYmxlOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcblx0LyoqXHJcblx0ICogSWYgdHJ1ZSwgc2hvdyB0aGUgYnV0dG9uICdBZGQnXHJcblx0ICovXHJcblx0cHVibGljIGFkZGFibGU6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuXHQvKipcclxuXHQgKiBJZiB0cnVlLCBzaG93IHRoZSBtZW51ICdFZGl0J1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBlZGl0YWJsZTogYm9vbGVhbiA9IHRydWU7XHJcblxyXG5cdC8qKlxyXG5cdCAqIElmIHRydWUsIHNob3cgdGhlIG1lbnUgJ0RlbGV0ZSdcclxuXHQgKi9cclxuXHRwdWJsaWMgZGVsZXRhYmxlOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcblx0LyoqXHJcblx0ICogSWYgdHJ1ZSwgc2hvdyB0aGUgbWVudSAnRG93bmxvYWQnXHJcblx0ICovXHJcblx0cHVibGljIGRvd25sb2FkYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHQvKipcclxuXHQgKiBJZiB0cnVlLCBzaG93IHRoZSBtZW51ICdEdXBsaWNhdGUnXHJcblx0ICovXHJcblx0cHVibGljIGR1cGxpY2FibGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblx0LyoqXHJcblx0ICogSWYgdHJ1ZSwgc2hvdyB0aGUgbWVudSAnQ29uZmlndXJlIHRhYmxlJ1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBjb25maWd1cmFibGU6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuXHQvKipcclxuXHQgKiBGbGFnIHRvIGluZGljYXRlIHdoZXRoZXIgdGhlIHRhYmxlIGhlYWRlcnMgb3IgY29sdW1ucyBzaG91bGQgc3RpY2sgXHJcblx0ICogdG8gdGhlIHZpZXdwb3J0IGR1cmluZyBzY3JvbGxpbmcuXHJcblx0ICovXHJcblx0cHVibGljIHN0aWNreTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHQvKipcclxuXHQgKiBEZWZpbmVzIHRoZSBvdmVyYWxsIHdpZHRoIG9mIHRoZSB0YWJsZS5cclxuXHQgKi9cclxuXHRwdWJsaWMgdGFibGVXaWR0aD86IG51bWJlcjtcclxuXHJcblx0LyoqXHJcblx0ICogcm93TmdDbGFzczogRnVuY3Rpb25cclxuXHQgKi9cclxuXHRwdWJsaWMgcm93TmdDbGFzcz86ICh4OiBURW50aXR5LCBjdHg6IGFueSkgPT4gYW55ID0gdW5kZWZpbmVkO1xyXG5cclxuXHQvKipcclxuXHQgKiByb3dDbGljazogRnVuY3Rpb25cclxuXHQgKi9cclxuXHRwdWJsaWMgcm93Q2xpY2s/OiAoeDogVEVudGl0eSwgY3R4OiBhbnkpID0+IGFueSA9IHVuZGVmaW5lZDtcclxuXHJcblx0LyoqXHJcblx0ICogZWRpdFJvdXRlOiBGdW5jdGlvblxyXG5cdCAqL1xyXG5cdHB1YmxpYyBvbkVkaXQ/OiAoeDogVEVudGl0eSwgY3R4OiBhbnkpID0+IGFueSA9IHVuZGVmaW5lZDtcclxuXHJcblx0LyoqXHJcblx0ICogZGV0YWlsc1RlbXBsYXRlOiBGdW5jdGlvblxyXG5cdCAqL1xyXG5cdHB1YmxpYyBkZXRhaWxzVGVtcGxhdGU/OiBzdHJpbmcgPSB1bmRlZmluZWQ7XHJcblxyXG5cdC8qKlxyXG5cdCAqIHRvb2xiYXJBY3Rpb25zOiBBY3Rpb25JdGVtW11cclxuXHQgKi9cclxuXHRwdWJsaWMgdG9vbGJhckFjdGlvbnM6IEFjdGlvbkl0ZW1bXSA9IFt7XHJcblx0XHRpY29uOiAncmVmcmVzaCcsXHJcblx0XHR0b29sdGlwOiAkbG9jYWxpemVgOkBAcmVmcmVzaExpc3Q6UmVmcmVzaCB0aGUgbGlzdGAsXHJcblx0XHRldmVudDogKCkgPT4gdGhpcy5sb2FkTGlzdCgpXHJcblx0fV07XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRvb2xiYXIgbWVudSBpdGVtc1xyXG5cdCAqL1xyXG5cdHB1YmxpYyB0b29sYmFyTWVudUl0ZW1zOiBBY3Rpb25JdGVtPFRFbnRpdHk+W10gPSBbXTtcclxuXHJcblx0LyoqXHJcblx0ICogVGFibGUgcm93IG1lbnUgaXRlbXNcclxuXHQgKi9cclxuXHRwdWJsaWMgcm93TWVudUl0ZW1zOiBBY3Rpb25JdGVtPFRFbnRpdHk+W10gPSBbXTtcclxuXHJcblx0LyoqXHJcblx0ICogQWRkcyBhIGJhY2sgYnV0dG9uIHRvIHRoZSB0b29sYmFyXHJcblx0ICovXHJcblx0QElucHV0KClcclxuXHRwdWJsaWMgYmFja0J1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHQvKipcclxuXHQgKiBEYXRhTG9hZGVkIGV2ZW50IHN1YnNjcmlwdGlvblxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBkYXRhTG9hZGVkU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xyXG5cclxuXHQvKipcclxuXHQgKiBUaGUga2V5IGZvciBjb25maWdzXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGNvbmZpZ3NLZXk6IHN0cmluZyA9ICcnO1xyXG5cclxuXHQvKipcclxuXHQgKiBDb25zdHJ1Y3RvclxyXG5cdCAqIEBwYXJhbSBzZXJ2aWNlIFxyXG5cdCAqL1xyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0cHVibGljIHNlcnZpY2U6IFRTZXJ2aWNlLFxyXG5cdFx0cHJvdGVjdGVkIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuXHRcdHByb3RlY3RlZCBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcblx0XHRwdWJsaWMgY2xhc3NUeXBlPzogeyBuZXcoKTogVEVudGl0eSB9XHJcblx0KSB7XHJcblx0XHRzdXBlcihyb3V0ZSwgY2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogTGlmZWN5Y2xlIGhvb2sgdGhhdCBpcyBjYWxsZWQgYWZ0ZXIgZGF0YS1ib3VuZCBwcm9wZXJ0aWVzIFxyXG5cdCAqIG9mIGEgZGlyZWN0aXZlIGFyZSBpbml0aWFsaXplZC5cclxuXHQgKi9cclxuXHRwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XHJcblx0XHRzdXBlci5uZ09uSW5pdCgpO1xyXG5cclxuXHRcdC8qIEFzc2VtYmxlIHRoZSBjb25maWcga2V5ICovXHJcblx0XHR0aGlzLmNvbmZpZ3NLZXkgPSBbdGhpcy5wcm9qZWN0TmFtZSwgJ2xpc3QtY29uZmlnLnYyJywgd2luZG93LmJ0b2EodGhpcy5jdXJyZW50QmFzZVJvdXRlID8/ICcnKSwgdGhpcy5tZW51Py50aXRsZV0uam9pbignLicpO1xyXG5cclxuXHRcdC8qIExvYWQgbGlzdCBjb25maWdzICovXHJcblx0XHR0aGlzLnRhYmxlQ29uZmlnID0gQXBwU3RvcmFnZS5nZXRPYmplY3RFbmNvZGVkKHRoaXMuY29uZmlnc0tleSwgbmV3IFRhYmxlQ29uZmlnKCkpO1xyXG5cclxuXHRcdHRoaXMuc3RpY2t5ID0gdGhpcy50YWJsZUNvbmZpZy5zdGlja3kgPz8gZmFsc2U7XHJcblxyXG5cdFx0LyogU2V0IGJhY2sgYnV0dG9uIGZyb20gcm91dGUgcGFyYW1zICovXHJcblx0XHR0aGlzLmJhY2tCdXR0b24gPSB0aGlzLnJvdXRlPy5zbmFwc2hvdD8ucGFyYW1NYXA/LmdldCgnYmFja0J1dHRvbicpID09ICd0cnVlJztcclxuXHJcblx0XHQvKiBSZWFkIHNvbWUgcGFyYW1zIGZyb20gcm91dGluZyBkYXRhICovXHJcblx0XHR0aGlzLnJvdXRlLmRhdGEuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcclxuXHRcdFx0T2JqZWN0LmFzc2lnbih0aGlzLnF1ZXJ5LCBkYXRhLnF1ZXJ5IHx8IHt9KTtcclxuXHRcdFx0dGhpcy5jbGFzc1R5cGUgfHw9IGRhdGEuY2xhc3NUeXBlO1xyXG5cclxuXHRcdFx0aWYgKGRhdGEuY2xhc3NOYW1lKSB7XHJcblx0XHRcdFx0dGhpcy5jbGFzc05hbWUgPSBkYXRhLmNsYXNzTmFtZTtcclxuXHJcblx0XHRcdFx0LyogQ2hlY2sgaWYgdGhlIHVzZXIgaGFzIHBlcm1pc3Npb24gdG8gY3JlYXRlLCB1cGRhdGUgYW5kIGRlbGV0ZSBiYXNlZCBvbiB0aGUgY2xhc3MgbmFtZSAqL1xyXG5cdFx0XHRcdHRoaXMuY2FuQ3JlYXRlIHx8PSBBdXRoSGVscGVyLmlzUGVybWl0dGVkKGBDcmVhdGUke3RoaXMuY2xhc3NOYW1lfWApO1xyXG5cdFx0XHRcdHRoaXMuY2FuVXBkYXRlIHx8PSBBdXRoSGVscGVyLmlzUGVybWl0dGVkKGBVcGRhdGUke3RoaXMuY2xhc3NOYW1lfWApO1xyXG5cdFx0XHRcdHRoaXMuY2FuRGVsZXRlIHx8PSBBdXRoSGVscGVyLmlzUGVybWl0dGVkKGBEZWxldGUke3RoaXMuY2xhc3NOYW1lfWApO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoZGF0YS5jb2x1bW5zKSB7XHJcblx0XHRcdFx0dGhpcy5jb2x1bW5zID0gWy4uLihkYXRhLmNvbHVtbnMgfHwgW10pXTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKGRhdGEuZW5kcG9pbnQpIHtcclxuXHRcdFx0XHR0aGlzLnNlcnZpY2UuZW5kcG9pbnQgPSBkYXRhLmVuZHBvaW50O1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoZGF0YS5pbmNsdWRlcykge1xyXG5cdFx0XHRcdHRoaXMuaW5jbHVkZXMgPSBkYXRhLmluY2x1ZGVzO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRPYmplY3Qua2V5cyhkYXRhKS5mb3JFYWNoKHggPT4ge1xyXG5cdFx0XHRcdGlmICh0aGlzLmhhc093blByb3BlcnR5KHgpICYmIHggIT0gJ2NvbHVtbnMnKSB7XHJcblx0XHRcdFx0XHQodGhpcyBhcyBhbnkpW3hdID0gZGF0YVt4XTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdFx0fSk7XHJcblxyXG5cdFx0LyogR2V0IGNvbHVtbnMgZnJvbSBjbGFzcyAqL1xyXG5cdFx0aWYgKHRoaXMuY2xhc3NUeXBlKSB7XHJcblx0XHRcdHRoaXMuY2xhc3NJbnN0YW5jZSA9IG5ldyB0aGlzLmNsYXNzVHlwZSgpO1xyXG5cclxuXHRcdFx0LyogR2V0IHRoZSB0YWJsZSBkZWZpbml0aW9uIHVzaW5nIHRoZSBjbGFzcyB0eXBlICovXHJcblx0XHRcdHZhciB0YWJsZURlZmluaXRpb24gPSBnZXRUYWJsZURlZmluaXRpb24odGhpcy5jbGFzc1R5cGUpO1xyXG5cclxuXHRcdFx0LyogU2V0IHRoZSBwcm9wcyBpbiB0aGUgY3VycmVudCBvYmplY3QgZnJvbSB0aGUgdGFibGUgZGVmaW5pdGlvbiAqL1xyXG5cdFx0XHRPYmplY3Qua2V5cyh0YWJsZURlZmluaXRpb24gfHwge30pLmZvckVhY2goeCA9PiB7XHJcblx0XHRcdFx0aWYgKHRoaXMuaGFzT3duUHJvcGVydHkoeCkpIHtcclxuXHRcdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KCh0aGlzIGFzIGFueSlbeF0pICYmIEFycmF5LmlzQXJyYXkoKHRhYmxlRGVmaW5pdGlvbiBhcyBhbnkpW3hdKSkge1xyXG5cdFx0XHRcdFx0XHQodGhpcyBhcyBhbnkpW3hdID0gKHRhYmxlRGVmaW5pdGlvbiBhcyBhbnkpW3hdLmNvbmNhdCgodGhpcyBhcyBhbnkpW3hdKVxyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0KHRoaXMgYXMgYW55KVt4XSA9ICh0YWJsZURlZmluaXRpb24gYXMgYW55KVt4XTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cclxuXHRcdFx0LyogU2V0IGVuZHBvaW50IGZyb20gdGFibGUgZGVmaW5pdGlvbiwgaWYgYW55ICovXHJcblx0XHRcdGlmICh0YWJsZURlZmluaXRpb24/LmVuZHBvaW50KSB7XHJcblx0XHRcdFx0dGhpcy5zZXJ2aWNlLmVuZHBvaW50ID0gdGFibGVEZWZpbml0aW9uPy5lbmRwb2ludDtcclxuXHJcblx0XHRcdFx0LyogQ2hlY2sgaWYgdGhlIHVzZXIgaGFzIHBlcm1pc3Npb24gdG8gY3JlYXRlLCB1cGRhdGUgYW5kIGRlbGV0ZSBiYXNlZCBvbiB0aGUgYXBpIGVuZHBvaW50ICovXHJcblx0XHRcdFx0dGhpcy5jYW5DcmVhdGUgfHw9IEF1dGhIZWxwZXIuaXNQZXJtaXR0ZWQoYENyZWF0ZSR7dGhpcy5zZXJ2aWNlLmVuZHBvaW50fWApO1xyXG5cdFx0XHRcdHRoaXMuY2FuVXBkYXRlIHx8PSBBdXRoSGVscGVyLmlzUGVybWl0dGVkKGBVcGRhdGUke3RoaXMuc2VydmljZS5lbmRwb2ludH1gKTtcclxuXHRcdFx0XHR0aGlzLmNhbkRlbGV0ZSB8fD0gQXV0aEhlbHBlci5pc1Blcm1pdHRlZChgRGVsZXRlJHt0aGlzLnNlcnZpY2UuZW5kcG9pbnR9YCk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8qIFNldCB0aGUgdGFibGUgY29sdW1ucyBmcm9tIHRoZSB0YWJsZSBkZWZpbnRpb24gKi9cclxuXHRcdFx0aWYgKHRhYmxlRGVmaW5pdGlvbj8uY29sdW1ucykge1xyXG5cdFx0XHRcdHRoaXMuY29sdW1ucyA9IHRhYmxlRGVmaW5pdGlvbi5jb2x1bW5zLm1hcCh4ID0+IHsgcmV0dXJuIHsgLi4ueCB9IH0pO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvKiBIYW5kbGUgZXZlbnRzICovXHJcblx0XHRcdHRoaXMuY29sdW1ucz8uZm9yRWFjaCgoeDogVGFibGVDb2x1bW4pID0+IHtcclxuXHRcdFx0XHRpZiAodHlwZW9mIHguZXZlbnQgPT09ICdzdHJpbmcnKSB7XHJcblx0XHRcdFx0XHRsZXQgZXZlbnROYW1lOiBzdHJpbmcgPSAoKHguZXZlbnQpIGFzIHN0cmluZyk7XHJcblx0XHRcdFx0XHR4LmV2ZW50ID0gKHJvdzogYW55KSA9PiAoeC5ldmVudEFyZ3MgPyAodGhpcyBhcyBhbnkpW2V2ZW50TmFtZV0ocm93LCB4LmV2ZW50QXJncykgOiAodGhpcyBhcyBhbnkpW2V2ZW50TmFtZV0ocm93KSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHJcblx0XHRcdC8qIEhpZGUgY29sdW1ucyB1c2luZyByb3V0ZSBkYXRhICovXHJcblx0XHRcdHRoaXMucm91dGUuZGF0YS5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4ge1xyXG5cdFx0XHRcdHRoaXMuY29sdW1ucyA9IHRoaXMuY29sdW1ucz8uZmlsdGVyKCh4OiBUYWJsZUNvbHVtbikgPT4gIXguaGlkZSB8fCAheC5oaWRlKGRhdGEsIHVuZGVmaW5lZCwgdGhpcykpO1xyXG5cdFx0XHR9KTtcclxuXHJcblx0XHRcdC8qIEdldCBjdXN0b20gYWN0aW9uLCBpZiBhbnkgKi9cclxuXHRcdFx0dmFyIGFjdGlvbnMgPSB0YWJsZURlZmluaXRpb24/LmFjdGlvbnM7XHJcblx0XHRcdGlmIChhY3Rpb25zICE9IG51bGwpIHtcclxuXHRcdFx0XHRhY3Rpb25zLmZvckVhY2goeSA9PiB0aGlzLnJvd01lbnVJdGVtcz8ucHVzaCh5KSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvKiBGaWx0ZXIgdGhlIGNvbHVtbnMgYmFzZWQgb24gdGhlIGluZGl2aWR1YWwgY29sdW1uJ3MgY29sdW1uU2V0cyBwcm9wZXJ0eSBhbmQgdGhlIGdsb2JhbCBjb2x1bW5TZXRzICovXHJcblx0XHRjb25zdCBzZWxlY3RlZENvbHVtbnMgPSAodGhpcy5jb2x1bW5TZXRzPy5sZW5ndGggPz8gMCkgPiAwXHJcblx0XHRcdD8gdGhpcy5jb2x1bW5zPy5maWx0ZXIoYyA9PiB0aGlzLmNvbHVtblNldHM/LnNvbWUoc2V0ID0+IGMuY29sdW1uU2V0cz8uaW5jbHVkZXMoc2V0KSkpXHJcblx0XHRcdDogdGhpcy5jb2x1bW5zO1xyXG5cclxuXHRcdC8qIEhpZGUgZXhjbHVkZWQgY29sdW1ucyAqL1xyXG5cdFx0dGhpcy5jb2x1bW5zID0gc2VsZWN0ZWRDb2x1bW5zPy5maWx0ZXIoKHg6IFRhYmxlQ29sdW1uKSA9PiAhdGhpcy5leGNsdWRlZENvbHVtbnM/LmluY2x1ZGVzKHgubmFtZSkpO1xyXG5cclxuXHRcdC8qIEFkZCBsaXN0IG1uZXUgaXRlbXMgKi9cclxuXHRcdHRoaXMuYWRkVG9vbGJhck1lbnVJdGVtcygpO1xyXG5cclxuXHRcdGlmICh0aGlzLmR5bmFtaWNUYWJsZSkge1xyXG5cdFx0XHQvKiBBZGQgbWVudSBpdGVtcyBmb3IgZWFjaCByb3cgKi9cclxuXHRcdFx0dGhpcy5hZGRSb3dNZW51SXRlbXMoKTtcclxuXHJcblx0XHRcdC8qIENoZWNrIGlmIHRoZSBhY3Rpb24gY29sdW1uIGFscmVhZHkgZXhpc3RzICovXHJcblx0XHRcdHZhciBhY3Rpb25Db2xtdW4gPSAodGhpcy5jb2x1bW5zIGFzIFRhYmxlQ29sdW1uW10pPy5maW5kKHggPT4geC5uYW1lID09ICdhY3Rpb24nKTtcclxuXHJcblx0XHRcdC8qIElmIHNvLCBqdXN0IGFkZCB0aGUgbWVudSBpdGVtcyB0byBpdCAqL1xyXG5cdFx0XHRpZiAoYWN0aW9uQ29sbXVuKSB7XHJcblx0XHRcdFx0YWN0aW9uQ29sbXVuLnJvd01lbnVJdGVtcyA/Pz0gW107XHJcblx0XHRcdFx0dGhpcy5yb3dNZW51SXRlbXMuZm9yRWFjaCh5ID0+IGFjdGlvbkNvbG11biEucm93TWVudUl0ZW1zIS51bnNoaWZ0KHkpKTtcclxuXHJcblx0XHRcdFx0LyogQ3JlYXRlIGEgdGFibGUgbWVudSAqL1xyXG5cdFx0XHRcdGFjdGlvbkNvbG11bi5tZW51ID0gbmV3IEFjdGlvbkl0ZW0oe1xyXG5cdFx0XHRcdFx0aWNvbjogJ21vcmVfdmVydCcsXHJcblx0XHRcdFx0XHRpdGVtczogdGhpcy5yb3dNZW51SXRlbXNcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0LyogT3RoZXJ3aXNlIGFkZCBhIG5ldyBvbmUgKi9cclxuXHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0dGhpcy5jb2x1bW5zLnB1c2gobmV3IFRhYmxlQ29sdW1uKHtcclxuXHRcdFx0XHRcdGluZGV4OiAyMDAwLFxyXG5cdFx0XHRcdFx0bmFtZTogJ2FjdGlvbicsXHJcblx0XHRcdFx0XHRjb2x1bW5TZXRzOiBbJ2FjdGlvbicsICdjb21tb24nXSxcclxuXHRcdFx0XHRcdHR5cGU6IFRhYmxlQ29sdW1uVHlwZS5BY3Rpb24sXHJcblx0XHRcdFx0XHRkaXNhYmxlZDogdHJ1ZSxcclxuXHRcdFx0XHRcdG1lbnU6IG5ldyBBY3Rpb25JdGVtKHtcclxuXHRcdFx0XHRcdFx0aWNvbjogJ21vcmVfdmVydCcsXHJcblx0XHRcdFx0XHRcdGl0ZW1zOiB0aGlzLnJvd01lbnVJdGVtc1xyXG5cdFx0XHRcdFx0fSksXHJcblx0XHRcdFx0XHRyb3dNZW51SXRlbXM6IHRoaXMucm93TWVudUl0ZW1zLFxyXG5cdFx0XHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcclxuXHRcdFx0XHRcdHN0aWNreUVuZDogdHJ1ZVxyXG5cdFx0XHRcdH0pKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0dGhpcy51cGRhdGVDb2x1bW5zKHRydWUpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIFNldCBxdWVyeSBwYXJhbXMgaW50byBxdWVyeSBvYmplY3QgKi9cclxuXHRcdHRoaXMucm91dGUucXVlcnlQYXJhbXMuc3Vic2NyaWJlKHggPT4gT2JqZWN0LmFzc2lnbih0aGlzLnF1ZXJ5LCB4IHx8IHt9LCB7IHJldHVyblVybDogbnVsbCB9KSk7XHJcblxyXG5cdFx0LyogSW5pdGlsaWFsaXplIHRoZSBkYXRhIHNvdXJjZSB3aXRoIHRoZSBjdXJyZW50IHNlcnZpY2UsIHBhZ2luYXRvciBhbmQgc29ydCAqL1xyXG5cdFx0dGhpcy5zb3J0ID0gdGhpcy5keW5hbWljVGFibGU/Lm1hdFNvcnQgfHwgKHRoaXMuc29ydCA/IHRoaXMuc29ydCA6IG5ldyBNYXRTb3J0KCkpO1xyXG5cdFx0dGhpcy5kYXRhU291cmNlID0gbmV3IFRhYmxlRGF0YVNvdXJjZTxURW50aXR5LCBUU2VydmljZT4odGhpcy5zZXJ2aWNlISwgdGhpcy5wYWdpbmF0b3IsIHRoaXMuc29ydCk7XHJcblxyXG5cdFx0LyogU2V0IGluY2x1ZGVzICovXHJcblx0XHR0aGlzLmRhdGFTb3VyY2UuaW5jbHVkZXMgPSB0aGlzLmluY2x1ZGVzO1xyXG5cdFx0dGhpcy5kYXRhU291cmNlLnByb2plY3Rpb24gPSB0aGlzLnByb2plY3Rpb247XHJcblxyXG5cdFx0LyogTG9hZCBxdWVyeSBmcm9tIGJyb3dzZXIgc3RvcmFnZSAqL1xyXG5cdFx0dmFyIHN0b3JyZWRRdWVyeSA9IHRoaXMudGFibGVDb25maWc/LnF1ZXJ5O1xyXG5cdFx0aWYgKHN0b3JyZWRRdWVyeSkge1xyXG5cdFx0XHR0aGlzLmRhdGFTb3VyY2UuZmllbGRGaWx0ZXJzID0gdGhpcy5jbGVhbihzdG9ycmVkUXVlcnkuZmllbGRGaWx0ZXJzKSB8fCB7fTtcclxuXHRcdFx0dGhpcy5zb3J0QWN0aXZlID0gc3RvcnJlZFF1ZXJ5LnNvcnRCeTtcclxuXHRcdFx0dGhpcy5zb3J0RGlyZWN0aW9uID0gc3RvcnJlZFF1ZXJ5LnNvcnREaXJlY3Rpb247XHJcblx0XHRcdHRoaXMuZGF0YVNvdXJjZS5wYWdlU2l6ZSA9IHN0b3JyZWRRdWVyeS5wYWdlU2l6ZTtcclxuXHRcdFx0dGhpcy5kYXRhU291cmNlLnBhZ2VJbmRleCA9IHN0b3JyZWRRdWVyeS5wYWdlSW5kZXg7XHJcblx0XHR9XHJcblxyXG5cdFx0LyogQWRkIHNvbWUgZmlsdGVyIGZyb20gcm91dGVyICovXHJcblx0XHRpZiAodGhpcy5xdWVyeSkge1xyXG5cdFx0XHR0aGlzLmRhdGFTb3VyY2Uuc3RhdGljRmllbGRGaWx0ZXJzID0gdGhpcy5xdWVyeTtcclxuXHRcdH1cclxuXHJcblx0XHQvKiBSZW1lbWJlciB0aGUgZmlsdGVycyAqL1xyXG5cdFx0dGhpcy5kYXRhTG9hZGVkU3Vic2NyaXB0aW9uID0gdGhpcy5kYXRhU291cmNlLm9uRGF0YUxvYWRlZC5zdWJzY3JpYmUoKHJlc3VsdDogYW55KSA9PiB7XHJcblx0XHRcdGlmIChyZXN1bHQpIHtcclxuXHRcdFx0XHR0aGlzLnRhYmxlQ29uZmlnID8/PSBuZXcgVGFibGVDb25maWcoKTtcclxuXHRcdFx0XHR0aGlzLnRhYmxlQ29uZmlnLnF1ZXJ5ID0ge1xyXG5cdFx0XHRcdFx0ZmllbGRGaWx0ZXJzOiB0aGlzLmRhdGFTb3VyY2UuZmllbGRGaWx0ZXJzLFxyXG5cdFx0XHRcdFx0c29ydEJ5OiB0aGlzLnNvcnQ/LmFjdGl2ZSxcclxuXHRcdFx0XHRcdHNvcnREaXJlY3Rpb246IHRoaXMuc29ydD8uZGlyZWN0aW9uID8/ICdhc2MnLFxyXG5cdFx0XHRcdFx0cGFnZVNpemU6IHRoaXMucGFnaW5hdG9yPy5wYWdlU2l6ZSA/PyAxNSxcclxuXHRcdFx0XHRcdHBhZ2VJbmRleDogdGhpcy5wYWdpbmF0b3I/LnBhZ2VJbmRleCA/PyAxLFxyXG5cdFx0XHRcdH07XHJcblxyXG5cdFx0XHRcdC8qIFNhdmUgdGhlIHNldHRpbmdzICovXHJcblx0XHRcdFx0QXBwU3RvcmFnZS5zZXRPYmplY3RFbmNvZGVkKHRoaXMuY29uZmlnc0tleSwgdGhpcy50YWJsZUNvbmZpZyk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQ29ubmVjdHMgYSBjb2xsZWN0aW9uIHZpZXdlciAoc3VjaCBhcyBhIGRhdGEtdGFibGUpIHRvIHRoZSBkYXRhIHNvdXJjZS4gXHJcblx0ICogQHBhcmFtIHN0YXRpY0ZpZWxkRmlsdGVycyBcclxuXHQgKi9cclxuXHRwdWJsaWMgY29ubmVjdChzdGF0aWNGaWVsZEZpbHRlcnM6IGFueSA9IG51bGwsIHBhdGg/OiBzdHJpbmcpOiB2b2lkIHtcclxuXHRcdHRoaXMuZGF0YVNvdXJjZS5wYXRoID0gcGF0aDtcclxuXHRcdHRoaXMuZGF0YVNvdXJjZS5zdGF0aWNGaWVsZEZpbHRlcnMgPSBzdGF0aWNGaWVsZEZpbHRlcnMgfHwge307XHJcblx0XHR0aGlzLmRhdGFTb3VyY2UuY29ubmVjdCh1bmRlZmluZWQpLnN1YnNjcmliZSgpO1xyXG5cclxuXHRcdGlmICghdGhpcy5keW5hbWljVGFibGUpIHtcclxuXHRcdFx0dGhpcy5hZGRSb3dNZW51SXRlbXMoKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFVwZGF0ZXMgdGhlIHRhYmxlIGNvbHVtbnNcclxuXHQgKi9cclxuXHRwdWJsaWMgdXBkYXRlQ29sdW1ucyhsb2FkQ29uZmlnPzogYm9vbGVhbik6IHZvaWQge1xyXG5cdFx0LyogR2V0IGNvbmZpZyBmcm9tIGxvY2FsIHN0b3JhZ2UgKi9cclxuXHRcdGlmIChsb2FkQ29uZmlnKSB7XHJcblx0XHRcdHRoaXMubG9hZENvbHVtbkNvbmZpZ3MoKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKiBTb3J0IHRoZSBjb2x1bW5zIGJ5IGluZGV4ICovXHJcblx0XHRVdGlscy5zb3J0QXJyYXkodGhpcy5jb2x1bW5zIHx8IFtdLCAnaW5kZXgnKTtcclxuXHJcblx0XHQvKiBUcmlnZ2VyIGNoYW5nZXMgKi9cclxuXHRcdHRoaXMuZHluYW1pY1RhYmxlPy51cGRhdGVDb2x1bW5zKCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBSZWxvYWRzIGl0ZW1zXHJcblx0ICovXHJcblx0cHVibGljIGxvYWRMaXN0KHJlc2V0U2VsZWN0aW9uOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xyXG5cdFx0dGhpcz8uZGF0YVNvdXJjZT8ucmVsb2FkKHJlc2V0U2VsZWN0aW9uKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNlYXJjaFxyXG5cdCAqIEBwYXJhbSBmaWx0ZXIgXHJcblx0ICovXHJcblx0cHVibGljIHNlYXJjaChmaWx0ZXI6IHN0cmluZyk6IHZvaWQge1xyXG5cdFx0dGhpcy5kYXRhU291cmNlLmZpbHRlciA9IGZpbHRlcjtcclxuXHR9XHJcblxyXG5cclxuXHQvKipcclxuXHQgKiBOYXZpZ2F0ZXMgdG8gdGhlIGFkZCBwYWdlLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBhZGQoKTogdm9pZCB7XHJcblx0XHRpZiAodGhpcy5hZGREaWFsb2dUeXBlKSB7XHJcblx0XHRcdHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKHRoaXMuYWRkRGlhbG9nVHlwZSwgeyB3aWR0aDogJzY1MHB4JywgZGF0YTogdGhpcy5jbGFzc0luc3RhbmNlIH0pXHJcblx0XHRcdFx0LmFmdGVyQ2xvc2VkKClcclxuXHRcdFx0XHQuc3Vic2NyaWJlKCgpID0+IHRoaXMubG9hZExpc3QoZmFsc2UpKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHZhciBoYXNQYXJhbXMgPSBPYmplY3Qua2V5cyh0aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zKS5sZW5ndGggPiAwO1xyXG5cdFx0XHR0aGlzLnJvdXRlci5uYXZpZ2F0ZShcclxuXHRcdFx0XHRbYCR7dGhpcy5jdXJyZW50QmFzZVJvdXRlfS9hZGRgXSxcclxuXHRcdFx0XHR7IHF1ZXJ5UGFyYW1zOiBoYXNQYXJhbXMgPyB7IHJldHVyblVybDogdGhpcy5jdXJyZW50Um91dGUgfSA6IHt9LCByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH1cclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIE5hdmlnYXRlcyB0byB0aGUgZWRpdCBwYWdlLlxyXG5cdCAqIEBwYXJhbSBlbnRpdHkgLSBUaGUgZW50aXR5IHRvIGJlIGVkaXRlZC5cclxuXHQgKiBAcGFyYW0gY29udGV4dCAtIEFkZGl0aW9uYWwgY29udGV4dCBkYXRhLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBlZGl0KGVudGl0eT86IFRFbnRpdHksIGNvbnRleHQ/OiBhbnkpOiB2b2lkIHtcclxuXHRcdC8qIENoZWNrIGlmIGVudGl0eSBpcyBudWxsICovXHJcblx0XHRpZiAoZW50aXR5ID09PSBudWxsIHx8IGVudGl0eSA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcignRW50aXR5IG11c3QgYmUgZGVmaW5lZCBmb3IgZWRpdGluZy4nKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKiBDaGVjayBpZiB0ZXh0IGlzIHNlbGVjdGVkICovXHJcblx0XHRpZiAoIXRoaXMuaXNUZXh0U2VsZWN0ZWQoKSkge1xyXG5cdFx0XHQvKiBJZiBhIGN1c3RvbSBvbkVkaXQgZnVuY3Rpb24gaXMgcHJvdmlkZWQsIGNhbGwgaXQgKi9cclxuXHRcdFx0aWYgKHRoaXMub25FZGl0KSB7XHJcblx0XHRcdFx0LyogQ2FsbCB0aGUgY3VzdG9tIG9uRWRpdCBmdW5jdGlvbiB3aXRoIHRoZSBlbnRpdHkgYW5kIGNvbnRleHQgKi9cclxuXHRcdFx0XHR0aGlzLm9uRWRpdChlbnRpdHksIGNvbnRleHQpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdC8qIElmIG9uRWRpdCBpcyBub3QgcHJvdmlkZWQsIGNvbnN0cnVjdCB0aGUgZWRpdCByb3V0ZSBhbmQgbmF2aWdhdGUgKi9cclxuXHRcdFx0XHRjb25zdCBoYXNQYXJhbXMgPSBPYmplY3Qua2V5cyh0aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zKS5sZW5ndGggPiAwO1xyXG5cclxuXHRcdFx0XHQvKiBOYXZpZ2F0ZSB0byB0aGUgZWRpdCBwYWdlIHdpdGggdGhlIGVudGl0eSdzIGlkIGFuZCBvcHRpb25hbCBxdWVyeSBwYXJhbWV0ZXJzICovXHJcblx0XHRcdFx0dGhpcy5yb3V0ZXIubmF2aWdhdGUoXHJcblx0XHRcdFx0XHRbYCR7dGhpcy5jdXJyZW50QmFzZVJvdXRlfS9lZGl0YCwgKGVudGl0eSBhcyBhbnkpPy5pZF0sXHJcblx0XHRcdFx0XHR7IHF1ZXJ5UGFyYW1zOiBoYXNQYXJhbXMgPyB7IHJldHVyblVybDogdGhpcy5jdXJyZW50Um91dGUgfSA6IHt9LCByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH1cclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBQYXRjaGVzIHRoZSBlbnRpdHlcclxuXHQgKiBQYXRjaGVzIHRoZSBlbnRpdHlcclxuXHQgKiBAcGFyYW0gaWQgVGhlIElEIG9mIHRoZSBlbnRpdHlcclxuXHQgKiBAcGFyYW0gZmllbGRzIFRoZSBmaWVsZHMgdG8gcGF0Y2hcclxuXHQgKiBAcGFyYW0gdmFsdWUgVGhlIChvcHRpb25hbCkgdmFsdWUgdG8gY2hhbmdlXHJcblx0ICogQHBhcmFtIGluY2x1ZGVzIEluY2x1ZGVzIHNvbWUgbmF2aWdhdGlvbnNcclxuXHQgKi9cclxuXHRwdWJsaWMgcGF0Y2goaWQ6IG51bWJlciwgZmllbGRzOiBBcnJheTxzdHJpbmc+LCB2YWx1ZTogYW55LCBpbmNsdWRlcz86IGFueSk6IHZvaWQge1xyXG5cdFx0dGhpcy5fcGF0Y2goaWQsIGZpZWxkcywgdmFsdWUsIGluY2x1ZGVzLCAoXzogYW55KSA9PiB0aGlzLmxvYWRMaXN0KCkpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUGF0Y2hlcyB0aGUgZW50aXR5XHJcblx0ICogQHBhcmFtIGlkIFRoZSBJRCBvZiB0aGUgZW50aXR5XHJcblx0ICogQHBhcmFtIGZpZWxkcyBUaGUgZmllbGRzIHRvIHBhdGNoXHJcblx0ICogQHBhcmFtIHZhbHVlIFRoZSAob3B0aW9uYWwpIHZhbHVlIHRvIGNoYW5nZVxyXG5cdCAqIEBwYXJhbSBpbmNsdWRlcyBJbmNsdWRlcyBzb21lIG5hdmlnYXRpb25zXHJcblx0ICogQHBhcmFtIHN1Y2Nlc3NDYWxsYmFjayBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGUgY2FsbGVkIG9uIHN1Y2Nlc3NcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgX3BhdGNoKGlkOiBudW1iZXIsIGZpZWxkczogQXJyYXk8c3RyaW5nPiwgdmFsdWU6IGFueSwgaW5jbHVkZXM/OiBhbnksIHN1Y2Nlc3NDYWxsYmFjaz86IEZ1bmN0aW9uKTogdm9pZCB7XHJcblx0XHR0aGlzLmlzU2F2aW5nID0gdHJ1ZTtcclxuXHJcblx0XHQvKiBHZXQgZW50aXR5IGJ5IElEICovXHJcblx0XHRsZXQgZW50aXR5ID0gdGhpcy5kYXRhU291cmNlLml0ZW1zPy5maWx0ZXIoKHg6IGFueSkgPT4gKDxhbnk+eCkuaWQgPT09IGlkKVswXTtcclxuXHRcdGlmIChlbnRpdHkpIHtcclxuXHRcdFx0LyogQnVpbGQgcGF0Y2ggbWV0aG9kcyAqL1xyXG5cdFx0XHRsZXQgcGF0Y2hlcyA9IGZpZWxkcy5tYXAoeCA9PiB7IHJldHVybiB7IG9wOiAncmVwbGFjZScsIHBhdGg6IGAvJHt4fWAsIHZhbHVlOiB2YWx1ZSAhPSB1bmRlZmluZWQgPyB2YWx1ZSA6IGVudGl0eVt4XSB9OyB9KTtcclxuXHJcblx0XHRcdC8qIFNlbmQgcmVxdWVzdCAqL1xyXG5cdFx0XHR0aGlzLnNlcnZpY2VcclxuXHRcdFx0XHQucGF0Y2goaWQsIHBhdGNoZXMsIHVuZGVmaW5lZCwgeyBoZWFkZXJzOiB7ICdTaG93LU1lc3NhZ2UnOiAnWWVzJyB9LCBwYXJhbXM6IGluY2x1ZGVzID8gVXRpbHMudG9IdHRwUGFyYW1zKHsgaW5jbHVkZXM6IGluY2x1ZGVzIH0pIDogbnVsbCB9KVxyXG5cdFx0XHRcdC5zdWJzY3JpYmUoe1xyXG5cdFx0XHRcdFx0bmV4dDogKHgpID0+IHtcclxuXHRcdFx0XHRcdFx0dGhpcy5pc1NhdmluZyA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0XHRpZiAoc3VjY2Vzc0NhbGxiYWNrKSB7XHJcblx0XHRcdFx0XHRcdFx0c3VjY2Vzc0NhbGxiYWNrKHgpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9LCBlcnJvcjogKF8pID0+IHRoaXMuaXNTYXZpbmcgPSBmYWxzZVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogRGVsZXRlcyBhbiBpdGVtIGZyb20gdGhlIGRhdGFiYXNlLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBkZWxldGVJdGVtKGVudGl0eT86IFRFbnRpdHkpOiB2b2lkIHtcclxuXHRcdHRoaXMuc2hvd0RlbGV0ZUl0ZW1EaWFsb2coKS5zdWJzY3JpYmUoKGFjY2VwdDogYm9vbGVhbikgPT4ge1xyXG5cdFx0XHRpZiAoYWNjZXB0KSB7XHJcblx0XHRcdFx0dGhpcy5zZXJ2aWNlLmRlbGV0ZSgoZW50aXR5IGFzIGFueSkuaWQpLnN1YnNjcmliZSh7XHJcblx0XHRcdFx0XHRuZXh0OiAoXykgPT4gdGhpcy5vbkFmdGVySXRlbURlbGV0ZWQoPGFueT5lbnRpdHkpLFxyXG5cdFx0XHRcdFx0ZXJyb3I6IChlcnJvcikgPT4gdGhpcy5sb2coZXJyb3IpXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogRGVsZXRlcyBhbiBpdGVtIGZyb20gdGhlIGRhdGFiYXNlLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBkZWxldGVJdGVtcygpOiB2b2lkIHtcclxuXHRcdGlmICh0aGlzLmRhdGFTb3VyY2Uuc2VsZWN0aW9uTW9kZWwuaGFzVmFsdWUoKSkge1xyXG5cdFx0XHR0aGlzLnNob3dEZWxldGVJdGVtc0RpYWxvZygpLnN1YnNjcmliZSgoYWNjZXB0OiBib29sZWFuKSA9PiB7XHJcblx0XHRcdFx0aWYgKGFjY2VwdCkge1xyXG5cdFx0XHRcdFx0bGV0IGlkcyA9IHRoaXMuZGF0YVNvdXJjZS5nZXRTZWxlY3RlZElkcygpO1xyXG5cdFx0XHRcdFx0dGhpcy5zZXJ2aWNlLmRlbGV0ZUxpc3QoaWRzKS5zdWJzY3JpYmUoe1xyXG5cdFx0XHRcdFx0XHRuZXh0OiAoXykgPT4gdGhpcy5vbkFmdGVySXRlbXNEZWxldGVkKGlkcyksXHJcblx0XHRcdFx0XHRcdGVycm9yOiAoZXJyb3IpID0+IHRoaXMubG9nKGVycm9yKVxyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRvZ2dsZXMgYSBwcm9wZXJ0eS5cclxuXHQgKiBUaGlzIG1ldGhvZCBzdXBwb3J0cyBib3RoIGRpcmVjdCBhbmQgbmVzdGVkIHByb3BlcnRpZXMuXHJcblx0ICogXHJcblx0ICogQHBhcmFtIGl0ZW0gLSBUaGUgb2JqZWN0IHdob3NlIHByb3BlcnR5IHdpbGwgYmUgdG9nZ2xlZC5cclxuXHQgKiBAcGFyYW0gcHJvcGVydHkgLSBUaGUgcGF0aCB0byB0aGUgcHJvcGVydHkgdG8gdG9nZ2xlLCB3aGljaCBjYW4gYmUgYSBuZXN0ZWQgcHJvcGVydHkgKGUuZy4sICdwcm9maWxlLm5hbWUnKS5cclxuXHQgKi9cclxuXHRwdWJsaWMgdG9nZ2xlKGl0ZW06IFRFbnRpdHksIHByb3BlcnR5OiBzdHJpbmcgPSAnZW5hYmxlZCcpOiB2b2lkIHtcclxuXHRcdC8qIFJlc29sdmUgdGhlIG5lc3RlZCBwcm9wZXJ0eSB2YWx1ZSAqL1xyXG5cdFx0Y29uc3QgdmFsdWUgPSB0aGlzLmdldE5lc3RlZFByb3BlcnR5KGl0ZW0sIHByb3BlcnR5LCAnLycpO1xyXG5cclxuXHRcdC8qIFByZXBhcmUgdGhlIHBhdGNoIG9wZXJhdGlvbiAqL1xyXG5cdFx0Y29uc3QgcGF0Y2hPcGVyYXRpb24gPSB7XHJcblx0XHRcdG9wOiAncmVwbGFjZScsXHJcblx0XHRcdHBhdGg6IGAvJHsocHJvcGVydHkuc3RhcnRzV2l0aCgnLycpID8gcHJvcGVydHkuc3Vic3RyaW5nKDEpIDogcHJvcGVydHkpfWAsXHJcblx0XHRcdHZhbHVlOiB2YWx1ZVxyXG5cdFx0fTtcclxuXHJcblx0XHQvKiBBcHBseSB0aGUgcGF0Y2ggb3BlcmF0aW9uICovXHJcblx0XHR0aGlzLnNlcnZpY2VcclxuXHRcdFx0LnBhdGNoKCg8YW55Pml0ZW0pLmlkLCBbcGF0Y2hPcGVyYXRpb25dKVxyXG5cdFx0XHQuc3Vic2NyaWJlKCgpID0+IHRoaXMubG9hZExpc3QoKSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBVcGxvYWRzIHRhcm5zZmVycyBjc3YgZmlsZXNcclxuXHQgKiBAcGFyYW0gZmlsZSBUaGUgZmlsZSB0byB1cGxvYWRcclxuXHQgKiBAcGFyYW0gcmVsb2FkIElmIHRydWUsIHJlbG9hZCBpdGVtc1xyXG5cdCAqL1xyXG5cdHB1YmxpYyB1cGxvYWQoZmlsZTogRmlsZSwgcmVsb2FkOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xyXG5cdFx0dGhpcy5zZXJ2aWNlLnVwbG9hZChmaWxlKS5zdWJzY3JpYmUoe1xyXG5cdFx0XHRuZXh0OiAocmVzcG9uc2UpID0+IHtcclxuXHRcdFx0XHRyZXNwb25zZSA9IHJlc3BvbnNlLmpzb24oKTtcclxuXHJcblx0XHRcdFx0LyogUmVsb2FkIGxpc3QgKi9cclxuXHRcdFx0XHRpZiAocmVsb2FkKSB7XHJcblx0XHRcdFx0XHR0aGlzLmxvYWRMaXN0KCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LCBlcnJvcjogKGVycm9yKSA9PiB0aGlzLmxvZyhlcnJvcilcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogRG93bmxvYWRzIGEgZG9jdW1lbnRcclxuXHQgKiBAcGFyYW0gZW50aXR5IFxyXG5cdCAqL1xyXG5cdHB1YmxpYyBkb3dubG9hZChlbnRpdHk/OiBURW50aXR5LCBwYXRoOiBzdHJpbmcgPSAnZG93bmxvYWQnKTogdm9pZCB7XHJcblx0XHR0aGlzLnNlcnZpY2UuZG93bmxvYWQoYCR7cGF0aH0vJHsoZW50aXR5IGFzIElFbnRpdHkpLmlkfWApLnN1YnNjcmliZSh4ID0+IHtcclxuXHRcdFx0c2F2ZUFzKG5ldyBCbG9iKFt4LmRhdGFdLCB7fSksIHguZmlsZW5hbWUpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBEdXBsaWNhdGVzIGEgcmVjb3JkXHJcblx0ICogQHBhcmFtIGVudGl0eSBcclxuXHQgKi9cclxuXHRwdWJsaWMgZHVwbGljYXRlKGVudGl0eT86IFRFbnRpdHkpIHtcclxuXHRcdHRoaXMuc2VydmljZS5kdXBsaWNhdGUoKGVudGl0eSBhcyBhbnkpLmlkKS5zdWJzY3JpYmUoXyA9PiB0aGlzLmxvYWRMaXN0KCkpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogVGhpcyBpbmZvcm1zIHRoZSB0YWJsZSBob3cgdG8gdW5pcXVlbHkgaWRlbnRpZnkgcm93cyB0byBcclxuXHQgKiB0cmFjayBob3cgdGhlIGRhdGEgY2hhbmdlcyB3aXRoIGVhY2ggdXBkYXRlLlxyXG5cdCAqIEBwYXJhbSBpbmRleCBcclxuXHQgKiBAcGFyYW0gaXRlbSBcclxuXHQgKi9cclxuXHRwdWJsaWMgdHJhY2tCeUlkKF86IG51bWJlciwgaXRlbTogYW55KSB7XHJcblx0XHRyZXR1cm4gaXRlbS5pZDtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIE9wZW5zIHRoZSBjb25maWcgZGlhbG9nXHJcblx0ICovXHJcblx0cHVibGljIG9wZW5Db25maWdEaWFsb2coKTogdm9pZCB7XHJcblx0XHR0aGlzLmRpYWxvZy5vcGVuKFZkRHluYW1pY1RhYmxlQ29uZmlnRGlhbG9nQ29tcG9uZW50LCB7XHJcblx0XHRcdHdpZHRoOiAnMTA4MHB4JyxcclxuXHRcdFx0aGVpZ2h0OiAnODMwcHgnLFxyXG5cdFx0XHRkYXRhOiB0aGlzLFxyXG5cdFx0XHRkaXNhYmxlQ2xvc2U6IHRydWUsXHJcblx0XHRcdHBhbmVsQ2xhc3M6IFsnZmxhdC1kaWFsb2cnLCAnZGlhbG9nLWZ1bGwtc2NyZWVuJywgJ2RpYWxvZy1yZXNpemFibGUnXVxyXG5cdFx0fSkuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoXyA9PiB0aGlzLnJlbG9hZFBhZ2UoKSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBTYXZlcyB0aGUgdGFibGUgY29uZmlnXHJcblx0ICogQHBhcmFtIHRhYmxlQ29uZmlnXHJcblx0ICovXHJcblx0cHVibGljIHNhdmVDb25maWdzKHRhYmxlQ29uZmlnOiBUYWJsZUNvbmZpZyk6IHZvaWQge1xyXG5cdFx0aWYgKHRhYmxlQ29uZmlnKSB7XHJcblx0XHRcdC8qIFNldCB0aGUgY29uZmlnIGluIHRoZSBsaXN0IGNvbmZpZyAqL1xyXG5cdFx0XHR0aGlzLnRhYmxlQ29uZmlnID8/PSBuZXcgVGFibGVDb25maWcoKTtcclxuXHRcdFx0dGhpcy50YWJsZUNvbmZpZy5jb2x1bW5zID0gdGFibGVDb25maWcuY29sdW1ucyA/PyBbXTtcclxuXHRcdFx0dGhpcy50YWJsZUNvbmZpZy5zdGlja3kgPSB0YWJsZUNvbmZpZy5zdGlja3k7XHJcblx0XHRcdHRoaXMudGFibGVDb25maWcudGFibGVXaWR0aCA9IHRhYmxlQ29uZmlnLnRhYmxlV2lkdGg7XHJcblxyXG5cdFx0XHQvKiBTYXZlIHRoZSBjb25maWdzICovXHJcblx0XHRcdEFwcFN0b3JhZ2Uuc2V0T2JqZWN0RW5jb2RlZCh0aGlzLmNvbmZpZ3NLZXksIHRoaXMudGFibGVDb25maWcpO1xyXG5cclxuXHRcdFx0LyogU2V0IHRoZSB0YWJsZSBjb2x1bW5zICovXHJcblx0XHRcdHRoaXMudXBkYXRlQ29sdW1ucygpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogR2V0cyBhbmQgYXBwbGllcyB0aGUgdGFibGUgY29sdW1uIGNvbmZpZ3NcclxuXHQgKi9cclxuXHRwdWJsaWMgbG9hZENvbHVtbkNvbmZpZ3MoKTogdm9pZCB7XHJcblx0XHRpZiAodGhpcy50YWJsZUNvbmZpZz8uY29sdW1ucykge1xyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdCh0aGlzLnRhYmxlQ29uZmlnPy5jb2x1bW5zID8/IFtdKT8uZm9yRWFjaCgoeDogVGFibGVDb2x1bW5Db25maWcpID0+IHtcclxuXHRcdFx0XHRcdHZhciBjb2x1bW4gPSB0aGlzLmNvbHVtbnMuZmlsdGVyKCh5OiBUYWJsZUNvbHVtbikgPT4geS5uYW1lID09IHgubmFtZSlbMF07XHJcblx0XHRcdFx0XHRpZiAoY29sdW1uKSB7XHJcblx0XHRcdFx0XHRcdE9iamVjdC5hc3NpZ24oY29sdW1uLCB4KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSBjYXRjaCAoZXJyb3IpIHsgfVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogSW5jbHVkZXMgc29tZSBuYXZpZ2F0aW9uc1xyXG5cdCAqIEBwYXJhbSBpbmMgXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGluY2x1ZGUoLi4uaW5jOiBzdHJpbmdbXSkge1xyXG5cdFx0aW5jPy5mb3JFYWNoKHggPT4gdGhpcy5pbmNsdWRlcy5wdXNoKHgpKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEFkZCB0b29sYmFyIG1lbnUgaXRlbXNcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgYWRkVG9vbGJhck1lbnVJdGVtcygpOiB2b2lkIHtcclxuXHRcdC8qIEFkZCAnRGVsZXRlIHNlbGVjdGVkJyBtZW51IGl0ZW0gKi9cclxuXHRcdGlmICh0aGlzLmRlbGV0YWJsZSkge1xyXG5cdFx0XHR0aGlzLnRvb2xiYXJNZW51SXRlbXMucHVzaCh7XHJcblx0XHRcdFx0dGl0bGU6ICRsb2NhbGl6ZWA6QEBkZWxldGVTZWxlY3RlZDpEZWxldGUgc2VsZWN0ZWRgLFxyXG5cdFx0XHRcdGljb246ICdkZWxldGVfZm9yZXZlcicsXHJcblx0XHRcdFx0aWNvbkNsYXNzOiAndGMtb3JhbmdlLTgwMCcsXHJcblx0XHRcdFx0ZXZlbnQ6ICgpID0+IHRoaXMuZGVsZXRlSXRlbXMoKSxcclxuXHRcdFx0XHRoaWRlOiAoKSA9PiAhdGhpcy5jYW5EZWxldGUsXHJcblx0XHRcdFx0ZGlzYWJsZTogKCkgPT4gIXRoaXMuY2FuRXhlY3V0ZU11bHRpcGxlT3BlcmF0aW9ucygoeDogVEVudGl0eSkgPT4gdGhpcy5jYW5EZWxldGVJdGVtKHgpKVxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblx0XHQvKiBPcGVucyBjb25maWcgZGlhbG9nICovXHJcblx0XHRpZiAodGhpcy5jb25maWd1cmFibGUpIHtcclxuXHRcdFx0dGhpcy50b29sYmFyTWVudUl0ZW1zLnB1c2goe1xyXG5cdFx0XHRcdHRpdGxlOiAkbG9jYWxpemVgOkBAY29uZmlndXJlVGFibGU6Q29uZmlndXJlIHRhYmxlYCxcclxuXHRcdFx0XHRpY29uOiAnc2V0dGluZ3MnLFxyXG5cdFx0XHRcdGV2ZW50OiAoKSA9PiB0aGlzLm9wZW5Db25maWdEaWFsb2coKVxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAodGhpcy50b29sYmFyTWVudUl0ZW1zPy5sZW5ndGgpIHtcclxuXHRcdFx0LyogU29ydCB0aGUgbWVudSBpdGVtcyBieSBpbmRleCAqL1xyXG5cdFx0XHRVdGlscy5zb3J0QXJyYXkodGhpcy50b29sYmFyTWVudUl0ZW1zLCAnaW5kZXgnKTtcclxuXHJcblx0XHRcdC8qIEFkZCB0aGUgdG9vbGJhciBtZW51IGl0ZW1zIHRvIHRoZSB0aGUgdG9vbGJhciBhY3Rpb25zICovXHJcblx0XHRcdHRoaXMudG9vbGJhckFjdGlvbnMucHVzaCh7IGljb246ICdtb3JlX3ZlcnQnLCBpdGVtczogdGhpcy50b29sYmFyTWVudUl0ZW1zIH0pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQWRkIHJvdyBtZW51IGl0ZW1zXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGFkZFJvd01lbnVJdGVtcygpOiB2b2lkIHtcclxuXHRcdC8qIEFkZCBjaGVja2JveCBjb2x1bW4gKi9cclxuXHRcdGlmICh0aGlzLnNlbGVjdGFibGUpIHtcclxuXHRcdFx0dGhpcy5jb2x1bW5zLnVuc2hpZnQobmV3IFRhYmxlQ29sdW1uKHtcclxuXHRcdFx0XHRuYW1lOiAnc2VsZWN0JyxcclxuXHRcdFx0XHRjb2x1bW5TZXRzOiBbJ3NlbGVjdCcsICdjb21tb24nXSxcclxuXHRcdFx0XHR0eXBlOiBUYWJsZUNvbHVtblR5cGUuQ2hlY2tib3gsXHJcblx0XHRcdFx0ZGlzYWJsZTogKHJvdz86IFRFbnRpdHkpID0+ICF0aGlzLmNhblNlbGVjdEl0ZW0ocm93KSxcclxuXHRcdFx0XHRjZWxsTmdDbGFzczogKHJvdzogVEVudGl0eSkgPT4gdGhpcy5zZWxlY3RSb3dOZ0NsYXNzKHJvdyksXHJcblx0XHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcclxuXHRcdFx0XHRzdGlja3k6IHRydWVcclxuXHRcdFx0fSkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIEFkZCBkdXBsaWNhdGUgbWVudSAqL1xyXG5cdFx0aWYgKHRoaXMuZHVwbGljYWJsZSkge1xyXG5cdFx0XHR0aGlzLnJvd01lbnVJdGVtcy51bnNoaWZ0KHtcclxuXHRcdFx0XHR0aXRsZTogJGxvY2FsaXplYDpAQGR1cGxpY2F0ZTpEdXBsaWNhdGVgLFxyXG5cdFx0XHRcdGljb246ICdmaWxlX2NvcHknLFxyXG5cdFx0XHRcdGV2ZW50OiAocm93PzogVEVudGl0eSkgPT4gdGhpcy5kdXBsaWNhdGUocm93KSxcclxuXHRcdFx0XHRoaWRlOiAocm93PzogVEVudGl0eSkgPT4gIXRoaXMuY2FuRHVwbGljYXRlSXRlbShyb3cpXHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIEFkZCBkb3dubG9hZCBtZW51ICovXHJcblx0XHRpZiAodGhpcy5kb3dubG9hZGFibGUpIHtcclxuXHRcdFx0dGhpcy5yb3dNZW51SXRlbXMudW5zaGlmdCh7XHJcblx0XHRcdFx0dGl0bGU6ICRsb2NhbGl6ZWA6QEBkb3dubG9hZDpEb3dubG9hZGAsXHJcblx0XHRcdFx0aWNvbjogJ2ZpbGVfZG93bmxvYWQnLFxyXG5cdFx0XHRcdGV2ZW50OiAocm93PzogVEVudGl0eSkgPT4gdGhpcy5kb3dubG9hZChyb3cpLFxyXG5cdFx0XHRcdGhpZGU6IChyb3c/OiBURW50aXR5KSA9PiAhdGhpcy5jYW5Eb3dubG9hZEl0ZW0ocm93KVxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblx0XHQvKiBBZGQgZGVsZXRlIG1lbnUgKi9cclxuXHRcdGlmICh0aGlzLmRlbGV0YWJsZSAmJiB0aGlzLmNhbkRlbGV0ZSkge1xyXG5cdFx0XHR0aGlzLnJvd01lbnVJdGVtcy51bnNoaWZ0KHtcclxuXHRcdFx0XHR0aXRsZTogJGxvY2FsaXplYDpAQGRlbGV0ZTpEZWxldGVgLFxyXG5cdFx0XHRcdGljb246ICdkZWxldGVfZm9yZXZlcicsXHJcblx0XHRcdFx0aWNvbkNsYXNzOiAndGMtb3JhbmdlLTgwMCcsXHJcblx0XHRcdFx0ZXZlbnQ6IChyb3c/OiBURW50aXR5KSA9PiB0aGlzLmRlbGV0ZUl0ZW0ocm93KSxcclxuXHRcdFx0XHRoaWRlOiAocm93PzogVEVudGl0eSkgPT4gIXRoaXMuY2FuRGVsZXRlSXRlbShyb3cpXHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIEFkZCBlZGl0IG1lbnUgKi9cclxuXHRcdGlmICh0aGlzLmVkaXRhYmxlICYmIHRoaXMuY2FuVXBkYXRlKSB7XHJcblx0XHRcdHRoaXMucm93TWVudUl0ZW1zLnVuc2hpZnQoe1xyXG5cdFx0XHRcdHRpdGxlOiAkbG9jYWxpemVgOkBAZWRpdDpFZGl0YCxcclxuXHRcdFx0XHRpY29uOiAnZWRpdF9ub3RlJyxcclxuXHRcdFx0XHRpY29uQ2xhc3M6ICd0Yy1ibHVlLTQwMCcsXHJcblx0XHRcdFx0ZXZlbnQ6IChyb3c/OiBURW50aXR5KSA9PiB0aGlzLmVkaXQocm93LCB0aGlzKSxcclxuXHRcdFx0XHRoaWRlOiAocm93PzogVEVudGl0eSkgPT4gIXRoaXMuY2FuRWRpdEl0ZW0ocm93KVxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIERldGVybWluZXMgaWYgdGhlIGdpdmVuIGl0ZW0gY2FuIGJlIHNlbGVjdGVkLlxyXG5cdCAqIFxyXG5cdCAqIEFuIGl0ZW0gaXMgY29uc2lkZXJlZCBzZWxlY3RhYmxlIGlmOlxyXG5cdCAqIC0gSXQgZG9lcyBub3QgaGF2ZSB0aGUgYHNlbGVjdGFibGVgIHByb3BlcnR5LCBvciB0aGUgcHJvcGVydHkgaXMgYHRydWVgLlxyXG5cdCAqIC0gSXQgZG9lcyBub3QgaGF2ZSB0aGUgYGlzU2VsZWN0YWJsZWAgcHJvcGVydHksIG9yIHRoZSBwcm9wZXJ0eSBpcyBgdHJ1ZWAuXHJcblx0ICogXHJcblx0ICogQHBhcmFtIGVudGl0eSBUaGUgaXRlbSB0byBjaGVjay5cclxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGl0ZW0gaXMgc2VsZWN0YWJsZTsgb3RoZXJ3aXNlLCBgZmFsc2VgLlxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBjYW5TZWxlY3RJdGVtKGVudGl0eT86IFRFbnRpdHkpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiAoIWVudGl0eT8uaGFzT3duUHJvcGVydHkoJ3NlbGVjdGFibGUnKSB8fCAoZW50aXR5IGFzIGFueSlbJ3NlbGVjdGFibGUnXSkgJiZcclxuXHRcdFx0KCFlbnRpdHk/Lmhhc093blByb3BlcnR5KCdpc1NlbGVjdGFibGUnKSB8fCAoZW50aXR5IGFzIGFueSlbJ2lzU2VsZWN0YWJsZSddKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIERldGVybWluZXMgaWYgdGhlIGdpdmVuIGl0ZW0gY2FuIGJlIGRlbGV0ZWQuXHJcblx0ICogXHJcblx0ICogQW4gaXRlbSBpcyBjb25zaWRlcmVkIGRlbGV0YWJsZSBpZjpcclxuXHQgKiAtIFRoZSBgY2FuRGVsZXRlYCBmbGFnIGlzIGB0cnVlYC5cclxuXHQgKiAtIEl0IGRvZXMgbm90IGhhdmUgdGhlIGBkZWxldGFibGVgIHByb3BlcnR5LCBvciB0aGUgcHJvcGVydHkgaXMgYHRydWVgLlxyXG5cdCAqIC0gSXQgZG9lcyBub3QgaGF2ZSB0aGUgYGlzRGVsZXRhYmxlYCBwcm9wZXJ0eSwgb3IgdGhlIHByb3BlcnR5IGlzIGB0cnVlYC5cclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gZW50aXR5IFRoZSBpdGVtIHRvIGNoZWNrLlxyXG5cdCAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgaXRlbSBpcyBkZWxldGFibGU7IG90aGVyd2lzZSwgYGZhbHNlYC5cclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgY2FuRGVsZXRlSXRlbShlbnRpdHk/OiBURW50aXR5KTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdGhpcy5jYW5EZWxldGUgJiZcclxuXHRcdFx0KCFlbnRpdHk/Lmhhc093blByb3BlcnR5KCdkZWxldGFibGUnKSB8fCAoZW50aXR5IGFzIGFueSlbJ2RlbGV0YWJsZSddKSAmJlxyXG5cdFx0XHQoIWVudGl0eT8uaGFzT3duUHJvcGVydHkoJ2lzRGVsZXRhYmxlJykgfHwgKGVudGl0eSBhcyBhbnkpWydpc0RlbGV0YWJsZSddKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIERldGVybWluZXMgaWYgdGhlIGdpdmVuIGl0ZW0gY2FuIGJlIGVkaXRlZC5cclxuXHQgKiBcclxuXHQgKiBBbiBpdGVtIGlzIGNvbnNpZGVyZWQgZWRpdGFibGUgaWY6XHJcblx0ICogLSBUaGUgYGNhblVwZGF0ZWAgZmxhZyBpcyBgdHJ1ZWAuXHJcblx0ICogLSBJdCBkb2VzIG5vdCBoYXZlIHRoZSBgZWRpdGFibGVgIHByb3BlcnR5LCBvciB0aGUgcHJvcGVydHkgaXMgYHRydWVgLlxyXG5cdCAqIC0gSXQgZG9lcyBub3QgaGF2ZSB0aGUgYGlzRWRpdGFibGVgIHByb3BlcnR5LCBvciB0aGUgcHJvcGVydHkgaXMgYHRydWVgLlxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSBlbnRpdHkgVGhlIGl0ZW0gdG8gY2hlY2suXHJcblx0ICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBpdGVtIGlzIGVkaXRhYmxlOyBvdGhlcndpc2UsIGBmYWxzZWAuXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGNhbkVkaXRJdGVtKGVudGl0eT86IFRFbnRpdHkpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiB0aGlzLmNhblVwZGF0ZSAmJlxyXG5cdFx0XHQoIWVudGl0eT8uaGFzT3duUHJvcGVydHkoJ2VkaXRhYmxlJykgfHwgKGVudGl0eSBhcyBhbnkpWydlZGl0YWJsZSddKSAmJlxyXG5cdFx0XHQoIWVudGl0eT8uaGFzT3duUHJvcGVydHkoJ2lzRWRpdGFibGUnKSB8fCAoZW50aXR5IGFzIGFueSlbJ2lzRWRpdGFibGUnXSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBEZXRlcm1pbmVzIGlmIHRoZSBnaXZlbiBpdGVtIGNhbiBiZSBkb3dubG9hZGVkLlxyXG5cdCAqIFxyXG5cdCAqIEFuIGl0ZW0gaXMgY29uc2lkZXJlZCBkb3dubG9hZGFibGUgaWY6XHJcblx0ICogLSBJdCBkb2VzIG5vdCBoYXZlIHRoZSBgZG93bmxvYWRhYmxlYCBwcm9wZXJ0eSwgb3IgdGhlIHByb3BlcnR5IGlzIGB0cnVlYC5cclxuXHQgKiAtIEl0IGRvZXMgbm90IGhhdmUgdGhlIGBpc0Rvd25sb2FkYWJsZWAgcHJvcGVydHksIG9yIHRoZSBwcm9wZXJ0eSBpcyBgdHJ1ZWAuXHJcblx0ICogXHJcblx0ICogQHBhcmFtIGVudGl0eSBUaGUgaXRlbSB0byBjaGVjay5cclxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGl0ZW0gaXMgZG93bmxvYWRhYmxlOyBvdGhlcndpc2UsIGBmYWxzZWAuXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGNhbkRvd25sb2FkSXRlbShlbnRpdHk/OiBURW50aXR5KTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gKCFlbnRpdHk/Lmhhc093blByb3BlcnR5KCdkb3dubG9hZGFibGUnKSB8fCAoZW50aXR5IGFzIGFueSlbJ2Rvd25sb2FkYWJsZSddKSAmJlxyXG5cdFx0XHQoIWVudGl0eT8uaGFzT3duUHJvcGVydHkoJ2lzRG93bmxvYWRhYmxlJykgfHwgKGVudGl0eSBhcyBhbnkpWydpc0Rvd25sb2FkYWJsZSddKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIERldGVybWluZXMgaWYgdGhlIGdpdmVuIGl0ZW0gY2FuIGJlIGR1cGxpY2F0ZWQuXHJcblx0ICogXHJcblx0ICogQW4gaXRlbSBpcyBjb25zaWRlcmVkIGR1cGxpY2FibGUgaWY6XHJcblx0ICogLSBJdCBkb2VzIG5vdCBoYXZlIHRoZSBgZHVwbGljYWJsZWAgcHJvcGVydHksIG9yIHRoZSBwcm9wZXJ0eSBpcyBgdHJ1ZWAuXHJcblx0ICogLSBJdCBkb2VzIG5vdCBoYXZlIHRoZSBgaXNEdXBsaWNhYmxlYCBwcm9wZXJ0eSwgb3IgdGhlIHByb3BlcnR5IGlzIGB0cnVlYC5cclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gZW50aXR5IFRoZSBpdGVtIHRvIGNoZWNrLlxyXG5cdCAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgaXRlbSBpcyBkdXBsaWNhYmxlOyBvdGhlcndpc2UsIGBmYWxzZWAuXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGNhbkR1cGxpY2F0ZUl0ZW0oZW50aXR5PzogVEVudGl0eSk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuICghZW50aXR5Py5oYXNPd25Qcm9wZXJ0eSgnZHVwbGljYWJsZScpIHx8IChlbnRpdHkgYXMgYW55KVsnZHVwbGljYWJsZSddKSAmJlxyXG5cdFx0XHQoIWVudGl0eT8uaGFzT3duUHJvcGVydHkoJ2lzRHVwbGljYWJsZScpIHx8IChlbnRpdHkgYXMgYW55KVsnaXNEdXBsaWNhYmxlJ10pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUmV0dXJucyBOZ0NsYXNzIG9iamVjdCBmb3Igc2VsZWN0IGNvbHVtblxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBzZWxlY3RSb3dOZ0NsYXNzKF86IFRFbnRpdHkpOiBhbnkgeyB9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENoZWNrIGlmIHRoZSB0aGVyZSBhbnkgc2VsZWN0ZWQgcm93XHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGhhc1NlbGVjdGVkUm93cygpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuZGF0YVNvdXJjZT8uc2VsZWN0aW9uTW9kZWw/Lmhhc1ZhbHVlKCkgfTtcclxuXHJcblx0LyoqXHJcblx0ICogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBlbnRpdHkgaGFzIGJlZW4gZGVsZXRlZC5cclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgb25BZnRlckl0ZW1EZWxldGVkKGl0ZW06IElFbnRpdHkpOiB2b2lkIHtcclxuXHRcdHRoaXMubG9hZExpc3QodHJ1ZSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIGVudGl0aWVzIGhhcyBiZWVuIGRlbGV0ZWQuXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIG9uQWZ0ZXJJdGVtc0RlbGV0ZWQoaWRzOiBudW1iZXJbXSk6IHZvaWQge1xyXG5cdFx0dGhpcy5sb2FkTGlzdCh0cnVlKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENoZWNrcyBpZiB0aGUgdXNlciBjYW4gcGVyZm9ybSBtdWx0aXBsZSBvcGVyYXRpb25zIChMaWtlICdkZWxldGUgc2VsZWN0ZWQnKS5cclxuXHQgKiBAcGFyYW0gYWN0aW9uIFxyXG5cdCAqIEByZXR1cm5zIFxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBjYW5FeGVjdXRlTXVsdGlwbGVPcGVyYXRpb25zKGFjdGlvbj86IEZ1bmN0aW9uKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdGhpcy5oYXNTZWxlY3RlZFJvd3MoKSAmJiAoYWN0aW9uID8gdGhpcy5kYXRhU291cmNlPy5zZWxlY3Rpb25Nb2RlbD8uc2VsZWN0ZWQ/LmV2ZXJ5KCh4OiBhbnkpID0+IGFjdGlvbih4KSkgOiB0cnVlKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldHMgdGhlIHZhbHVlIG9mIGEgbmVzdGVkIHByb3BlcnR5IGZyb20gYW4gb2JqZWN0LlxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSBvYmogLSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxyXG5cdCAqIEBwYXJhbSBwYXRoIC0gVGhlIHBhdGggdG8gdGhlIHByb3BlcnR5LCB3aGljaCBjYW4gYmUgZGVsaW1pdGVkIGJ5IGEgY3VzdG9tIGNoYXJhY3RlciAoZS5nLiwgZG90LCBzbGFzaCkuXHJcblx0ICogQHBhcmFtIGRlbGltaXRlciAtIFRoZSBkZWxpbWl0ZXIgdXNlZCB0byBzZXBhcmF0ZSBsZXZlbHMgaW4gdGhlIHByb3BlcnR5IHBhdGggKGRlZmF1bHQgaXMgJy4nKS5cclxuXHQgKiBAcmV0dXJucyAtIFRoZSB2YWx1ZSBvZiB0aGUgbmVzdGVkIHByb3BlcnR5IG9yIHVuZGVmaW5lZCBpZiBub3QgZm91bmQuXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGdldE5lc3RlZFByb3BlcnR5KG9iajogYW55LCBwYXRoOiBzdHJpbmcsIGRlbGltaXRlcjogc3RyaW5nID0gJy4nKTogYW55IHtcclxuXHRcdC8qIFNwbGl0IHRoZSBwYXRoIGludG8gYW4gYXJyYXkgb2Yga2V5cyB1c2luZyB0aGUgc3BlY2lmaWVkIGRlbGltaXRlciAqL1xyXG5cdFx0Y29uc3Qga2V5cyA9IHBhdGguc3BsaXQoZGVsaW1pdGVyKTtcclxuXHJcblx0XHQvKiBUcmF2ZXJzZSB0aGUgb2JqZWN0IGJhc2VkIG9uIHRoZSBhcnJheSBvZiBrZXlzICovXHJcblx0XHRyZXR1cm4ga2V5cy5yZWR1Y2UoKGFjYywga2V5KSA9PiBhY2MgJiYgYWNjW2tleV0sIG9iaik7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBSZXNwb25kcyB0byB1c2VyLWluaXRpYXRlZCBldmVudHNcclxuXHQgKiBAcGFyYW0gZXZlbnQgXHJcblx0ICovXHJcblx0QEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bicsIFsnJGV2ZW50J10pXHJcblx0cHVibGljIGhhbmRsZUtleWJvYXJkRXZlbnQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuXHRcdGlmIChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpIHtcclxuXHRcdFx0c3dpdGNoIChldmVudC5rZXkpIHtcclxuXHRcdFx0XHQvKiBOYXZpZ2F0ZSB0byBhZGQgcGFnZSAqL1xyXG5cdFx0XHRcdGNhc2UgJ2EnOlxyXG5cdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHRcdFx0XHRcdHRoaXMuYWRkKCk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIGlmICh0aGlzLnBhZ2luYXRvcikge1xyXG5cdFx0XHRzd2l0Y2ggKGV2ZW50LmtleSkge1xyXG5cdFx0XHRcdC8qIE5hdmlnYXRlIHRvIHByZXZpb3VzIHBhZ2UgKi9cclxuXHRcdFx0XHRjYXNlICdQYWdlVXAnOlxyXG5cdFx0XHRcdFx0dGhpcy5wYWdpbmF0b3IucHJldmlvdXNQYWdlKCk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHJcblx0XHRcdFx0LyogTmF2aWdhdGUgdG8gbmV4dCBwYWdlICovXHJcblx0XHRcdFx0Y2FzZSAnUGFnZURvd24nOlxyXG5cdFx0XHRcdFx0dGhpcy5wYWdpbmF0b3IubmV4dFBhZ2UoKTtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBBIGNhbGxiYWNrIHVzZWQgZm9yIGFueSBjdXN0b20gY2xlYW51cCB0aGF0IG5lZWRzIHRvIG9jY3VyIFxyXG5cdCAqIHdoZW4gdGhlIGluc3RhbmNlIGlzIGRlc3Ryb3llZC5cclxuXHQgKi9cclxuXHRwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcblx0XHRzdXBlci5uZ09uRGVzdHJveSgpO1xyXG5cdFx0aWYgKHRoaXMuZGF0YUxvYWRlZFN1YnNjcmlwdGlvbikge1xyXG5cdFx0XHR0aGlzLmRhdGFMb2FkZWRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRoZSBTeW1ib2wudG9TdHJpbmdUYWcgd2VsbC1rbm93biBzeW1ib2wgaXMgYSBzdHJpbmcgdmFsdWVkIHByb3BlcnR5IHRoYXQgaXMgdXNlZCBcclxuXHQgKiBpbiB0aGUgY3JlYXRpb24gb2YgdGhlIGRlZmF1bHQgc3RyaW5nIGRlc2NyaXB0aW9uIG9mIGFuIG9iamVjdFxyXG5cdCAqL1xyXG5cdGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSgpIHsgcmV0dXJuICdHZW5lcmljTGlzdENvbXBvbmVudCc7IH1cclxufSJdfQ==
966
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nkay9zcmMvbGliL2Jhc2UvY29tcG9uZW50cy9nZW5lcmljLWxpc3QuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBYSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBRSxPQUFPLEVBQWlCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFcEMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUM5RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFHN0QsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOERBQThELENBQUM7QUFDdkcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUU5RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDOUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUVwRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0s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QkFEZixTQUFTO3VCQUFDLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBVWxDLElBQUk7c0JBRFYsU0FBUzt1QkFBQyxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQWlHN0IsWUFBWTtzQkFEbEIsU0FBUzt1QkFBQyx1QkFBdUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBMkk3QyxVQUFVO3NCQURoQixLQUFLO2dCQTZ2QkMsbUJBQW1CO3NCQUR6QixZQUFZO3VCQUFDLGtCQUFrQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIERpcmVjdGl2ZSwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25EZXN0cm95LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0UGFnaW5hdG9yIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcclxuaW1wb3J0IHsgTWF0U29ydCwgU29ydERpcmVjdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NvcnQnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IHNhdmVBcyB9IGZyb20gJ2ZpbGUtc2F2ZXInO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgVXRpbHMgfSBmcm9tICcuLi8uLi9jb21tb24vZnVuY3Rpb25zL3V0aWxzJztcclxuaW1wb3J0IHsgQXBwU3RvcmFnZSB9IGZyb20gJy4uLy4uL2NvbW1vbi9oZWxwZXJzL2FwcC1zdG9yYWdlJztcclxuaW1wb3J0IHsgQWN0aW9uSXRlbSB9IGZyb20gJy4uLy4uL2NvbW1vbi9tb2RlbHMvYWN0aW9uLWl0ZW0nO1xyXG5pbXBvcnQgeyBJRW50aXR5IH0gZnJvbSAnLi4vLi4vY29tbW9uL21vZGVscy9lbnRpdHknO1xyXG5pbXBvcnQgeyBHZW5lcmljU2VydmljZSB9IGZyb20gJy4uLy4uL2h0dHAvc2VydmljZXMvZ2VuZXJpYy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVmREeW5hbWljVGFibGVDb21wb25lbnQgfSBmcm9tICcuLi8uLi90YWJsZS9jb21wb25lbnRzL2R5bmFtaWMtdGFibGUvZHluYW1pYy10YWJsZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUYWJsZUNvbHVtblR5cGUgfSBmcm9tICcuLi8uLi90YWJsZS9lbnVtcy90YWJsZS1jb2x1bW4tdHlwZSc7XHJcbmltcG9ydCB7IGdldFRhYmxlRGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uL3RhYmxlL2Z1bmN0aW9ucy9mdW5jdGlvbnMnO1xyXG5pbXBvcnQgeyBUYWJsZUNvbHVtbiB9IGZyb20gJy4uLy4uL3RhYmxlL21vZGVscy90YWJsZS1jb2x1bW4nO1xyXG5pbXBvcnQgeyBUYWJsZUNvbHVtbkNvbmZpZyB9IGZyb20gJy4uLy4uL3RhYmxlL21vZGVscy90YWJsZS1jb2x1bW4tY29uZmlnJztcclxuaW1wb3J0IHsgVGFibGVDb25maWcgfSBmcm9tICcuLi8uLi90YWJsZS9tb2RlbHMvdGFibGUtY29uZmlnJztcclxuaW1wb3J0IHsgVGFibGVEYXRhU291cmNlIH0gZnJvbSAnLi4vLi4vdGFibGUvdGFibGUuZGF0YS1zb3VyY2UnO1xyXG5pbXBvcnQgeyBBdXRoSGVscGVyIH0gZnJvbSAnLi4vaGVscGVycy9hdXRoLWhlbHBlcic7XHJcbmltcG9ydCB7IElHZW5lcmljTGlzdENvbXBvbmVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMvaWdlbmVyaWMtbGlzdC1jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi9iYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFZkRHluYW1pY1RhYmxlQ29uZmlnRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi9keW5hbWljLXRhYmxlLWNvbmZpZy1kaWFsb2cvZHluYW1pYy10YWJsZS1jb25maWctZGlhbG9nLmNvbW5wb25lbnQnO1xyXG5cclxuLyoqXHJcbiAqIEEgYmFzZSBsaXN0IGNvbXBvbmVudCBmb3IgY29tcG9uZW50cyB3aXRoIHBhZ2luYXRpb24gc3VwcG9ydFxyXG4gKi9cclxuLy8gQGR5bmFtaWNcclxuQERpcmVjdGl2ZSgpXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBHZW5lcmljTGlzdENvbXBvbmVudDxcclxuXHRURW50aXR5IGV4dGVuZHMgSUVudGl0eSB8IGFueSxcclxuXHRUU2VydmljZSBleHRlbmRzIEdlbmVyaWNTZXJ2aWNlPFRFbnRpdHk+XHJcbj4gZXh0ZW5kcyBCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgSUdlbmVyaWNMaXN0Q29tcG9uZW50PFRFbnRpdHk+LCBPbkRlc3Ryb3kge1xyXG5cdC8qKlxyXG5cdCAqIEBwcm9wZXJ0eSBwYWdpbmF0b3JcclxuXHQgKiBAZGVzY3JpcHRpb24gQSByZWZlcmVuY2UgdG8gdGhlIE1hdFBhZ2luYXRvciBlbGVtZW50LiBcclxuXHQgKiAgICAgICAgICAgICAgVGhpcyBpcyB1c2VkIGZvciBoYW5kbGluZyBwYWdpbmF0aW9uIGluIHRoZSBkYXRhIHRhYmxlLlxyXG5cdCAqIEB0eXBlIHtNYXRQYWdpbmF0b3IgfCB1bmRlZmluZWR9XHJcblx0ICovXHJcblx0QFZpZXdDaGlsZChNYXRQYWdpbmF0b3IsIHsgc3RhdGljOiB0cnVlIH0pXHJcblx0cHVibGljIHBhZ2luYXRvcj86IE1hdFBhZ2luYXRvcjtcclxuXHJcblx0LyoqXHJcblx0ICogQHByb3BlcnR5IHNvcnRcclxuXHQgKiBAZGVzY3JpcHRpb24gQSByZWZlcmVuY2UgdG8gdGhlIE1hdFNvcnQgZWxlbWVudC4gXHJcblx0ICogICAgICAgICAgICAgIFRoaXMgaXMgdXNlZCBmb3IgaGFuZGxpbmcgc29ydGluZyBmdW5jdGlvbmFsaXR5IGluIHRoZSBkYXRhIHRhYmxlLlxyXG5cdCAqIEB0eXBlIHtNYXRTb3J0IHwgdW5kZWZpbmVkfVxyXG5cdCAqL1xyXG5cdEBWaWV3Q2hpbGQoTWF0U29ydCwgeyBzdGF0aWM6IHRydWUgfSlcclxuXHRwdWJsaWMgc29ydD86IE1hdFNvcnQ7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEBwcm9wZXJ0eSBwYWdlU2l6ZU9wdGlvbnNcclxuXHQgKiBAZGVzY3JpcHRpb24gQW4gYXJyYXkgb2YgYXZhaWxhYmxlIHBhZ2Ugc2l6ZSBvcHRpb25zIGZvciB0aGUgZGF0YSB0YWJsZS5cclxuXHQgKiBAdHlwZSB7bnVtYmVyW119XHJcblx0ICovXHJcblx0cHVibGljIHBhZ2VTaXplT3B0aW9uczogQXJyYXk8bnVtYmVyPiA9IFs1LCAxMCwgMTUsIDIwLCAzMCwgNTAsIDEwMCwgMjAwXTtcclxuXHJcblx0LyoqXHJcblx0ICogQHByb3BlcnR5IGluY2x1ZGVzXHJcblx0ICogQGRlc2NyaXB0aW9uIFNwZWNpZmllcyB0aGUgbmF2aWdhdGlvbnMgdG8gaW5jbHVkZSB3aGVuIGZldGNoaW5nIGRhdGEuXHJcblx0ICogQHR5cGUge3N0cmluZ1tdfVxyXG5cdCAqL1xyXG5cdHB1YmxpYyBpbmNsdWRlczogQXJyYXk8c3RyaW5nPiA9IFtdO1xyXG5cclxuXHQvKipcclxuXHQgKiBAcHJvcGVydHkgcHJvamVjdGlvblxyXG5cdCAqIEBkZXNjcmlwdGlvbiBTcGVjaWZpZXMgdGhlIHByb2plY3Rpb24ocykgdG8gYXBwbHkgd2hlbiBmZXRjaGluZyBkYXRhLlxyXG5cdCAqICAgICAgICAgICAgICBDYW4gYmUgYSBzaW5nbGUgc3RyaW5nIG9yIGFuIGFycmF5IG9mIHN0cmluZ3MuXHJcblx0ICogQHR5cGUge3N0cmluZyB8IHN0cmluZ1tdfVxyXG5cdCAqL1xyXG5cdHB1YmxpYyBwcm9qZWN0aW9uOiBzdHJpbmcgfCBzdHJpbmdbXSA9IFtdO1xyXG5cclxuXHQvKipcclxuXHQgKiBAcHJvcGVydHkgZXhjbHVkZWRDb2x1bW5zXHJcblx0ICogQGRlc2NyaXB0aW9uIFNwZWNpZmllcyB0aGUgY29sdW1ucyB0byBleGNsdWRlIGZyb20gdGhlIGRhdGEgdGFibGUuXHJcblx0ICogQHR5cGUge3N0cmluZ1tdfVxyXG5cdCAqL1xyXG5cdHB1YmxpYyBleGNsdWRlZENvbHVtbnM6IEFycmF5PHN0cmluZz4gPSBbXTtcclxuXHJcblx0LyoqXHJcblx0ICogQHByb3BlcnR5IHF1ZXJ5XHJcblx0ICogQGRlc2NyaXB0aW9uIFRoZSBxdWVyeSBwYXJhbWV0ZXJzIGZvciBmZXRjaGluZyBkYXRhIGZyb20gdGhlIHNlcnZlci5cclxuXHQgKiBAdHlwZSB7YW55fVxyXG5cdCAqL1xyXG5cdHB1YmxpYyBxdWVyeTogYW55ID0ge307XHJcblxyXG5cdC8qKlxyXG5cdCAqIEBwcm9wZXJ0eSBkYXRhU291cmNlXHJcblx0ICogQGRlc2NyaXB0aW9uIFRoZSBkYXRhIHNvdXJjZSBmb3IgdGhlIGRhdGEgdGFibGUsIG1hbmFnaW5nIHRoZSBkYXRhIGRpc3BsYXllZC5cclxuXHQgKiBAdHlwZSB7VGFibGVEYXRhU291cmNlPFRFbnRpdHksIFRTZXJ2aWNlPiB8IGFueX1cclxuXHQgKi9cclxuXHRwdWJsaWMgZGF0YVNvdXJjZT86IFRhYmxlRGF0YVNvdXJjZTxURW50aXR5LCBUU2VydmljZT4gfCBhbnk7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEBwcm9wZXJ0eSBpdGVtc1xyXG5cdCAqIEBkZXNjcmlwdGlvbiBJbml0aWFsaXplcyB0aGUgaXRlbXMgYXJyYXkgYXMgYW4gb3B0aW9uYWwgYXJyYXkgb2YgZW50aXRpZXMuXHJcblx0ICogQHR5cGUge1RFbnRpdHlbXX1cclxuXHQgKi9cclxuXHRwdWJsaWMgaXRlbXM/OiBURW50aXR5W10gPSBbXTtcclxuXHJcblx0LyoqXHJcblx0ICogQHByb3BlcnR5IHNvcnRBY3RpdmVcclxuXHQgKiBAZGVzY3JpcHRpb24gVGhlIGN1cnJlbnRseSBhY3RpdmUgc29ydCBjb2x1bW4gaW4gdGhlIGRhdGEgdGFibGUuXHJcblx0ICogQHR5cGUge3N0cmluZyB8IHVuZGVmaW5lZH1cclxuXHQgKi9cclxuXHRwdWJsaWMgc29ydEFjdGl2ZT86IHN0cmluZztcclxuXHJcblx0LyoqXHJcblx0ICogQHByb3BlcnR5IHNvcnREaXJlY3Rpb25cclxuXHQgKiBAZGVzY3JpcHRpb24gVGhlIGN1cnJlbnQgc29ydCBkaXJlY3Rpb24gZm9yIHRoZSBkYXRhIHRhYmxlLiBEZWZhdWx0IGlzICdhc2MnLlxyXG5cdCAqIEB0eXBlIHtTb3J0RGlyZWN0aW9ufVxyXG5cdCAqL1xyXG5cdHB1YmxpYyBzb3J0RGlyZWN0aW9uOiBTb3J0RGlyZWN0aW9uID0gJ2FzYyc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEBwcm9wZXJ0eSBjbGFzc0luc3RhbmNlXHJcblx0ICogQGRlc2NyaXB0aW9uIEFuIGluc3RhbmNlIG9mIHRoZSBjbGFzcyB1c2VkIHRvIGNyZWF0ZSB0aGUgdGFibGUgZm9yIGEgc3BlY2lmaWMgdHlwZSBvZiBlbnRpdHkuXHJcblx0ICogQHR5cGUge2FueX1cclxuXHQgKi9cclxuXHRwdWJsaWMgY2xhc3NJbnN0YW5jZTogYW55O1xyXG5cclxuXHQvKipcclxuXHQgKiBAcHJvcGVydHkgY29sdW1uc1xyXG5cdCAqIEBkZXNjcmlwdGlvbiBBbiBhcnJheSBkZWZpbmluZyB0aGUgdGFibGUgY29sdW1ucyBhbmQgdGhlaXIgY29uZmlndXJhdGlvbi5cclxuXHQgKiBAdHlwZSB7VGFibGVDb2x1bW5bXX1cclxuXHQgKi9cclxuXHRwdWJsaWMgY29sdW1uczogVGFibGVDb2x1bW5bXSA9IFtdO1xyXG5cclxuXHQvKipcclxuXHQgKiBAcHJvcGVydHkgY29sdW1uU2V0c1xyXG5cdCAqIEBkZXNjcmlwdGlvbiBVc2VkIHRvIGRpc3BsYXkgc3BlY2lmaWMgY29sdW1ucyBpbiB0aGUgdGFibGUuIFxyXG5cdCAqICAgICAgICAgICAgICBUaGlzIGFycmF5IGRlZmluZXMgc2V0cyBvZiBjb2x1bW5zIHRoYXQgY2FuIGJlIHNob3duIFxyXG5cdCAqICAgICAgICAgICAgICBiYXNlZCBvbiB0aGUgYWN0aXZlIGNvbmZpZ3VyYXRpb24sIGFsbG93aW5nIGZvciBkeW5hbWljIHRhYmxlIFxyXG5cdCAqICAgICAgICAgICAgICBjb2x1bW4gY3VzdG9taXphdGlvbi5cclxuXHQgKiBAdHlwZSB7c3RyaW5nW119XHJcblx0ICovXHJcblx0cHVibGljIGNvbHVtblNldHM/OiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuXHQvKipcclxuXHQgKiBAcHJvcGVydHkgZHluYW1pY1RhYmxlXHJcblx0ICogQGRlc2NyaXB0aW9uIEEgcmVmZXJlbmNlIHRvIHRoZSBkeW5hbWljIHRhYmxlIGNvbXBvbmVudC5cclxuXHQgKiBAdHlwZSB7VmREeW5hbWljVGFibGVDb21wb25lbnR9XHJcblx0ICovXHJcblx0QFZpZXdDaGlsZChWZER5bmFtaWNUYWJsZUNvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSlcclxuXHRwdWJsaWMgZHluYW1pY1RhYmxlPzogVmREeW5hbWljVGFibGVDb21wb25lbnQ7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEBwcm9wZXJ0eSB0YWJsZUNvbmZpZ1xyXG5cdCAqIEBkZXNjcmlwdGlvbiBDb25maWd1cmF0aW9uIG9iamVjdCBmb3IgdGhlIHRhYmxlLCBpbmNsdWRpbmcgcXVlcnkgYW5kIGNvbHVtbiBzZXR0aW5ncy5cclxuXHQgKiBAdHlwZSB7VGFibGVDb25maWd9XHJcblx0ICovXHJcblx0cHVibGljIHRhYmxlQ29uZmlnOiBUYWJsZUNvbmZpZyA9IG5ldyBUYWJsZUNvbmZpZygpO1xyXG5cclxuXHQvKipcclxuXHQgKiBAcHJvcGVydHkgYWRkRGlhbG9nVHlwZVxyXG5cdCAqIEBkZXNjcmlwdGlvbiBUaGUgdHlwZSBvZiB0aGUgZGlhbG9nIHVzZWQgZm9yIGNyZWF0aW5nIG5ldyBlbnRyaWVzIGluIHRoZSB0YWJsZS5cclxuXHQgKiBAdHlwZSB7YW55fVxyXG5cdCAqL1xyXG5cdHB1YmxpYyBhZGREaWFsb2dUeXBlOiBhbnkgPSBudWxsO1xyXG5cclxuXHQvKipcclxuXHQgKiBAcHJvcGVydHkgc2VsZWN0YWJsZVxyXG5cdCAqIEBkZXNjcmlwdGlvbiBJZiB0cnVlLCBzaG93IHRoZSBjb2x1bW4gJ0NoZWNrYm94Jy5cclxuXHQgKiBAdHlwZSB7Ym9vbGVhbn1cclxuXHQgKi9cclxuXHRwdWJsaWMgc2VsZWN0YWJsZTogYm9vbGVhbiA9IHRydWU7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEBwcm9wZXJ0eSBhZGRhYmxlXHJcblx0ICogQGRlc2NyaXB0aW9uIElmIHRydWUsIHNob3cgdGhlIGJ1dHRvbiAnQWRkJy5cclxuXHQgKiBAdHlwZSB7Ym9vbGVhbn1cclxuXHQgKi9cclxuXHRwdWJsaWMgYWRkYWJsZTogYm9vbGVhbiA9IHRydWU7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEBwcm9wZXJ0eSBlZGl0YWJsZVxyXG5cdCAqIEBkZXNjcmlwdGlvbiBJZiB0cnVlLCBzaG93IHRoZSBtZW51ICdFZGl0Jy5cclxuXHQgKiBAdHlwZSB7Ym9vbGVhbn1cclxuXHQgKi9cclxuXHRwdWJsaWMgZWRpdGFibGU6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuXHQvKipcclxuXHQgKiBAcHJvcGVydHkgZGVsZXRhYmxlXHJcblx0ICogQGRlc2NyaXB0aW9uIElmIHRydWUsIHNob3cgdGhlIG1lbnUgJ0RlbGV0ZScuXHJcblx0ICogQHR5cGUge2Jvb2xlYW59XHJcblx0ICovXHJcblx0cHVibGljIGRlbGV0YWJsZTogYm9vbGVhbiA9IHRydWU7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEBwcm9wZXJ0eSBkb3dubG9hZGFibGVcclxuXHQgKiBAZGVzY3JpcHRpb24gSWYgdHJ1ZSwgc2hvdyB0aGUgbWVudSAnRG93bmxvYWQnLlxyXG5cdCAqIEB0eXBlIHtib29sZWFufVxyXG5cdCAqL1xyXG5cdHB1YmxpYyBkb3dubG9hZGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblx0LyoqXHJcblx0ICogQHByb3BlcnR5IGR1cGxpY2FibGVcclxuXHQgKiBAZGVzY3JpcHRpb24gSWYgdHJ1ZSwgc2hvdyB0aGUgbWVudSAnRHVwbGljYXRlJy5cclxuXHQgKiBAdHlwZSB7Ym9vbGVhbn1cclxuXHQgKi9cclxuXHRwdWJsaWMgZHVwbGljYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHQvKipcclxuXHQgKiBAcHJvcGVydHkgY29uZmlndXJhYmxlXHJcblx0ICogQGRlc2NyaXB0aW9uIElmIHRydWUsIHNob3cgdGhlIG1lbnUgJ0NvbmZpZ3VyZSB0YWJsZScuXHJcblx0ICogQHR5cGUge2Jvb2xlYW59XHJcblx0ICovXHJcblx0cHVibGljIGNvbmZpZ3VyYWJsZTogYm9vbGVhbiA9IHRydWU7XHJcblx0LyoqXHJcblx0ICogQHByb3BlcnR5IHN0aWNreVxyXG5cdCAqIEBkZXNjcmlwdGlvbiBGbGFnIHRvIGluZGljYXRlIHdoZXRoZXIgdGhlIHRhYmxlIGhlYWRlcnMgb3IgY29sdW1ucyBzaG91bGQgc3RpY2sgXHJcblx0ICogICAgICAgICAgICAgIHRvIHRoZSB2aWV3cG9ydCBkdXJpbmcgc2Nyb2xsaW5nLlxyXG5cdCAqIEB0eXBlIHtib29sZWFufVxyXG5cdCAqL1xyXG5cdHB1YmxpYyBzdGlja3k6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblx0LyoqXHJcblx0ICogQHByb3BlcnR5IHRhYmxlV2lkdGhcclxuXHQgKiBAZGVzY3JpcHRpb24gRGVmaW5lcyB0aGUgb3ZlcmFsbCB3aWR0aCBvZiB0aGUgdGFibGUuXHJcblx0ICogQHR5cGUge251bWJlcn1cclxuXHQgKi9cclxuXHRwdWJsaWMgdGFibGVXaWR0aD86IG51bWJlcjtcclxuXHJcblx0LyoqXHJcblx0ICogQHByb3BlcnR5IHJvd05nQ2xhc3NcclxuXHQgKiBAZGVzY3JpcHRpb24gQSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgdGhlIGR5bmFtaWMgQ1NTIGNsYXNzIGZvciB0YWJsZSByb3dzLlxyXG5cdCAqIEB0eXBlIHsoeDogVEVudGl0eSwgY3R4OiBhbnkpID0+IGFueX1cclxuXHQgKi9cclxuXHRwdWJsaWMgcm93TmdDbGFzcz86ICh4OiBURW50aXR5LCBjdHg6IGFueSkgPT4gYW55ID0gdW5kZWZpbmVkO1xyXG5cclxuXHQvKipcclxuXHQgKiBAcHJvcGVydHkgcm93Q2xpY2tcclxuXHQgKiBAZGVzY3JpcHRpb24gQSBmdW5jdGlvbiB0byBoYW5kbGUgcm93IGNsaWNrIGV2ZW50cy5cclxuXHQgKiBAdHlwZSB7KHg6IFRFbnRpdHksIGN0eDogYW55KSA9PiBhbnl9XHJcblx0ICovXHJcblx0cHVibGljIHJvd0NsaWNrPzogKHg6IFRFbnRpdHksIGN0eDogYW55KSA9PiBhbnkgPSB1bmRlZmluZWQ7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEBwcm9wZXJ0eSBvbkVkaXRcclxuXHQgKiBAZGVzY3JpcHRpb24gQSBmdW5jdGlvbiB0byBoYW5kbGUgZWRpdCBhY3Rpb25zIGZvciBhIHJvdy5cclxuXHQgKiBAdHlwZSB7KHg6IFRFbnRpdHksIGN0eDogYW55KSA9PiBhbnl9XHJcblx0ICovXHJcblx0cHVibGljIG9uRWRpdD86ICh4OiBURW50aXR5LCBjdHg6IGFueSkgPT4gYW55ID0gdW5kZWZpbmVkO1xyXG5cclxuXHQvKipcclxuXHQgKiBAcHJvcGVydHkgZGV0YWlsc1RlbXBsYXRlXHJcblx0ICogQGRlc2NyaXB0aW9uIFRlbXBsYXRlIHN0cmluZyBmb3IgZGlzcGxheWluZyByb3cgZGV0YWlscy5cclxuXHQgKiBAdHlwZSB7c3RyaW5nfVxyXG5cdCAqL1xyXG5cdHB1YmxpYyBkZXRhaWxzVGVtcGxhdGU/OiBzdHJpbmcgPSB1bmRlZmluZWQ7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEBwcm9wZXJ0eSB0b29sYmFyQWN0aW9uc1xyXG5cdCAqIEBkZXNjcmlwdGlvbiBBcnJheSBvZiB0b29sYmFyIGFjdGlvbiBpdGVtcy5cclxuXHQgKiBAdHlwZSB7QWN0aW9uSXRlbVtdfVxyXG5cdCAqL1xyXG5cdHB1YmxpYyB0b29sYmFyQWN0aW9uczogQWN0aW9uSXRlbVtdID0gW3tcclxuXHRcdGljb246ICdyZWZyZXNoJyxcclxuXHRcdHRvb2x0aXA6ICRsb2NhbGl6ZWA6QEByZWZyZXNoTGlzdDpSZWZyZXNoIHRoZSBsaXN0YCxcclxuXHRcdGV2ZW50OiAoKSA9PiB0aGlzLmxvYWRMaXN0KClcclxuXHR9XTtcclxuXHJcblx0LyoqXHJcblx0ICogQHByb3BlcnR5IHRvb2xiYXJNZW51SXRlbXNcclxuXHQgKiBAZGVzY3JpcHRpb24gQXJyYXkgb2YgdG9vbGJhciBtZW51IGl0ZW1zIGZvciBhY3Rpb25zLlxyXG5cdCAqIEB0eXBlIHtBY3Rpb25JdGVtPFRFbnRpdHk+W119XHJcblx0ICovXHJcblx0cHVibGljIHRvb2xiYXJNZW51SXRlbXM6IEFjdGlvbkl0ZW08VEVudGl0eT5bXSA9IFtdO1xyXG5cclxuXHQvKipcclxuXHQgKiBAcHJvcGVydHkgcm93TWVudUl0ZW1zXHJcblx0ICogQGRlc2NyaXB0aW9uIEFycmF5IG9mIG1lbnUgaXRlbXMgZm9yIGFjdGlvbnMgcmVsYXRlZCB0byB0YWJsZSByb3dzLlxyXG5cdCAqIEB0eXBlIHtBY3Rpb25JdGVtPFRFbnRpdHk+W119XHJcblx0ICovXHJcblx0cHVibGljIHJvd01lbnVJdGVtczogQWN0aW9uSXRlbTxURW50aXR5PltdID0gW107XHJcblxyXG5cdC8qKlxyXG5cdCAqIEBwcm9wZXJ0eSBiYWNrQnV0dG9uXHJcblx0ICogQGRlc2NyaXB0aW9uIEFkZHMgYSBiYWNrIGJ1dHRvbiB0byB0aGUgdG9vbGJhci5cclxuXHQgKiBAdHlwZSB7Ym9vbGVhbn1cclxuXHQgKi9cclxuXHRASW5wdXQoKVxyXG5cdHB1YmxpYyBiYWNrQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEBwcm9wZXJ0eSBkYXRhTG9hZGVkU3Vic2NyaXB0aW9uXHJcblx0ICogQGRlc2NyaXB0aW9uIFN1YnNjcmlwdGlvbiB0byB0aGUgRGF0YUxvYWRlZCBldmVudC5cclxuXHQgKiBAdHlwZSB7U3Vic2NyaXB0aW9ufVxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBkYXRhTG9hZGVkU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xyXG5cclxuXHQvKipcclxuXHQgKiBAcHJvcGVydHkgY29uZmlnc0tleVxyXG5cdCAqIEBkZXNjcmlwdGlvbiBUaGUga2V5IHVzZWQgZm9yIHN0b3JpbmcgdGFibGUgY29uZmlndXJhdGlvbnMuXHJcblx0ICogQHR5cGUge3N0cmluZ31cclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgY29uZmlnc0tleTogc3RyaW5nID0gJyc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIENvbnN0cnVjdG9yIGZvciB0aGUgdGFibGUgY29tcG9uZW50LlxyXG5cdCAqIEBwYXJhbSBzZXJ2aWNlIFRoZSBzZXJ2aWNlIHVzZWQgZm9yIG1hbmFnaW5nIHRhYmxlIGRhdGEuXHJcblx0ICogQHBhcmFtIHJvdXRlIEFjdGl2YXRlZFJvdXRlIGZvciByZXRyaWV2aW5nIHJvdXRlIGluZm9ybWF0aW9uLlxyXG5cdCAqIEBwYXJhbSBjaGFuZ2VEZXRlY3RvclJlZiBDaGFuZ2VEZXRlY3RvclJlZiBmb3IgbWFuYWdpbmcgdmlldyB1cGRhdGVzLlxyXG5cdCAqIEBwYXJhbSBjbGFzc1R5cGUgVGhlIGNsYXNzIHR5cGUgb2YgdGhlIHRhYmxlIGVudGl0eS5cclxuXHQgKi9cclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdHB1YmxpYyBzZXJ2aWNlOiBUU2VydmljZSxcclxuXHRcdHByb3RlY3RlZCByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcblx0XHRwcm90ZWN0ZWQgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG5cdFx0cHVibGljIGNsYXNzVHlwZT86IHsgbmV3KCk6IFRFbnRpdHkgfVxyXG5cdCkge1xyXG5cdFx0c3VwZXIocm91dGUsIGNoYW5nZURldGVjdG9yUmVmKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIExpZmVjeWNsZSBob29rIHRoYXQgaXMgY2FsbGVkIGFmdGVyIGRhdGEtYm91bmQgcHJvcGVydGllcyBcclxuXHQgKiBvZiBhIGRpcmVjdGl2ZSBhcmUgaW5pdGlhbGl6ZWQuXHJcblx0ICovXHJcblx0cHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xyXG5cdFx0c3VwZXIubmdPbkluaXQoKTtcclxuXHJcblx0XHQvKiBBc3NlbWJsZSB0aGUgY29uZmlnIGtleSAqL1xyXG5cdFx0dGhpcy5jb25maWdzS2V5ID0gW3RoaXMucHJvamVjdE5hbWUsICdsaXN0LWNvbmZpZy52MicsIHdpbmRvdy5idG9hKHRoaXMuY3VycmVudEJhc2VSb3V0ZSA/PyAnJyksIHRoaXMubWVudT8udGl0bGVdLmpvaW4oJy4nKTtcclxuXHJcblx0XHQvKiBMb2FkIGxpc3QgY29uZmlncyAqL1xyXG5cdFx0dGhpcy50YWJsZUNvbmZpZyA9IEFwcFN0b3JhZ2UuZ2V0T2JqZWN0RW5jb2RlZCh0aGlzLmNvbmZpZ3NLZXksIG5ldyBUYWJsZUNvbmZpZygpKTtcclxuXHJcblx0XHR0aGlzLnN0aWNreSA9IHRoaXMudGFibGVDb25maWcuc3RpY2t5ID8/IGZhbHNlO1xyXG5cclxuXHRcdC8qIFNldCBiYWNrIGJ1dHRvbiBmcm9tIHJvdXRlIHBhcmFtcyAqL1xyXG5cdFx0dGhpcy5iYWNrQnV0dG9uID0gdGhpcy5yb3V0ZT8uc25hcHNob3Q/LnBhcmFtTWFwPy5nZXQoJ2JhY2tCdXR0b24nKSA9PSAndHJ1ZSc7XHJcblxyXG5cdFx0LyogUmVhZCBzb21lIHBhcmFtcyBmcm9tIHJvdXRpbmcgZGF0YSAqL1xyXG5cdFx0dGhpcy5yb3V0ZS5kYXRhLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XHJcblx0XHRcdE9iamVjdC5hc3NpZ24odGhpcy5xdWVyeSwgZGF0YS5xdWVyeSB8fCB7fSk7XHJcblx0XHRcdHRoaXMuY2xhc3NUeXBlIHx8PSBkYXRhLmNsYXNzVHlwZTtcclxuXHJcblx0XHRcdGlmIChkYXRhLmNsYXNzTmFtZSkge1xyXG5cdFx0XHRcdHRoaXMuY2xhc3NOYW1lID0gZGF0YS5jbGFzc05hbWU7XHJcblxyXG5cdFx0XHRcdC8qIENoZWNrIGlmIHRoZSB1c2VyIGhhcyBwZXJtaXNzaW9uIHRvIGNyZWF0ZSwgdXBkYXRlIGFuZCBkZWxldGUgYmFzZWQgb24gdGhlIGNsYXNzIG5hbWUgKi9cclxuXHRcdFx0XHR0aGlzLmNhbkNyZWF0ZSB8fD0gQXV0aEhlbHBlci5pc1Blcm1pdHRlZChgQ3JlYXRlJHt0aGlzLmNsYXNzTmFtZX1gKTtcclxuXHRcdFx0XHR0aGlzLmNhblVwZGF0ZSB8fD0gQXV0aEhlbHBlci5pc1Blcm1pdHRlZChgVXBkYXRlJHt0aGlzLmNsYXNzTmFtZX1gKTtcclxuXHRcdFx0XHR0aGlzLmNhbkRlbGV0ZSB8fD0gQXV0aEhlbHBlci5pc1Blcm1pdHRlZChgRGVsZXRlJHt0aGlzLmNsYXNzTmFtZX1gKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKGRhdGEuY29sdW1ucykge1xyXG5cdFx0XHRcdHRoaXMuY29sdW1ucyA9IFsuLi4oZGF0YS5jb2x1bW5zIHx8IFtdKV07XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmIChkYXRhLmVuZHBvaW50KSB7XHJcblx0XHRcdFx0dGhpcy5zZXJ2aWNlLmVuZHBvaW50ID0gZGF0YS5lbmRwb2ludDtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKGRhdGEuaW5jbHVkZXMpIHtcclxuXHRcdFx0XHR0aGlzLmluY2x1ZGVzID0gZGF0YS5pbmNsdWRlcztcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0T2JqZWN0LmtleXMoZGF0YSkuZm9yRWFjaCh4ID0+IHtcclxuXHRcdFx0XHRpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eSh4KSAmJiB4ICE9ICdjb2x1bW5zJykge1xyXG5cdFx0XHRcdFx0KHRoaXMgYXMgYW55KVt4XSA9IGRhdGFbeF07XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdH0pO1xyXG5cclxuXHRcdC8qIEdldCBjb2x1bW5zIGZyb20gY2xhc3MgKi9cclxuXHRcdGlmICh0aGlzLmNsYXNzVHlwZSkge1xyXG5cdFx0XHR0aGlzLmNsYXNzSW5zdGFuY2UgPSBuZXcgdGhpcy5jbGFzc1R5cGUoKTtcclxuXHJcblx0XHRcdC8qIEdldCB0aGUgdGFibGUgZGVmaW5pdGlvbiB1c2luZyB0aGUgY2xhc3MgdHlwZSAqL1xyXG5cdFx0XHR2YXIgdGFibGVEZWZpbml0aW9uID0gZ2V0VGFibGVEZWZpbml0aW9uKHRoaXMuY2xhc3NUeXBlKTtcclxuXHJcblx0XHRcdC8qIFNldCB0aGUgcHJvcHMgaW4gdGhlIGN1cnJlbnQgb2JqZWN0IGZyb20gdGhlIHRhYmxlIGRlZmluaXRpb24gKi9cclxuXHRcdFx0T2JqZWN0LmtleXModGFibGVEZWZpbml0aW9uIHx8IHt9KS5mb3JFYWNoKHggPT4ge1xyXG5cdFx0XHRcdGlmICh0aGlzLmhhc093blByb3BlcnR5KHgpKSB7XHJcblx0XHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheSgodGhpcyBhcyBhbnkpW3hdKSAmJiBBcnJheS5pc0FycmF5KCh0YWJsZURlZmluaXRpb24gYXMgYW55KVt4XSkpIHtcclxuXHRcdFx0XHRcdFx0KHRoaXMgYXMgYW55KVt4XSA9ICh0YWJsZURlZmluaXRpb24gYXMgYW55KVt4XS5jb25jYXQoKHRoaXMgYXMgYW55KVt4XSlcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdCh0aGlzIGFzIGFueSlbeF0gPSAodGFibGVEZWZpbml0aW9uIGFzIGFueSlbeF07XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHJcblx0XHRcdC8qIFNldCBlbmRwb2ludCBmcm9tIHRhYmxlIGRlZmluaXRpb24sIGlmIGFueSAqL1xyXG5cdFx0XHRpZiAodGFibGVEZWZpbml0aW9uPy5lbmRwb2ludCkge1xyXG5cdFx0XHRcdHRoaXMuc2VydmljZS5lbmRwb2ludCA9IHRhYmxlRGVmaW5pdGlvbj8uZW5kcG9pbnQ7XHJcblxyXG5cdFx0XHRcdC8qIENoZWNrIGlmIHRoZSB1c2VyIGhhcyBwZXJtaXNzaW9uIHRvIGNyZWF0ZSwgdXBkYXRlIGFuZCBkZWxldGUgYmFzZWQgb24gdGhlIGFwaSBlbmRwb2ludCAqL1xyXG5cdFx0XHRcdHRoaXMuY2FuQ3JlYXRlIHx8PSBBdXRoSGVscGVyLmlzUGVybWl0dGVkKGBDcmVhdGUke3RoaXMuc2VydmljZS5lbmRwb2ludH1gKTtcclxuXHRcdFx0XHR0aGlzLmNhblVwZGF0ZSB8fD0gQXV0aEhlbHBlci5pc1Blcm1pdHRlZChgVXBkYXRlJHt0aGlzLnNlcnZpY2UuZW5kcG9pbnR9YCk7XHJcblx0XHRcdFx0dGhpcy5jYW5EZWxldGUgfHw9IEF1dGhIZWxwZXIuaXNQZXJtaXR0ZWQoYERlbGV0ZSR7dGhpcy5zZXJ2aWNlLmVuZHBvaW50fWApO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvKiBTZXQgdGhlIHRhYmxlIGNvbHVtbnMgZnJvbSB0aGUgdGFibGUgZGVmaW50aW9uICovXHJcblx0XHRcdGlmICh0YWJsZURlZmluaXRpb24/LmNvbHVtbnMpIHtcclxuXHRcdFx0XHR0aGlzLmNvbHVtbnMgPSB0YWJsZURlZmluaXRpb24uY29sdW1ucy5tYXAoeCA9PiB7IHJldHVybiB7IC4uLnggfSB9KTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0LyogSGFuZGxlIGV2ZW50cyAqL1xyXG5cdFx0XHR0aGlzLmNvbHVtbnM/LmZvckVhY2goKHg6IFRhYmxlQ29sdW1uKSA9PiB7XHJcblx0XHRcdFx0aWYgKHR5cGVvZiB4LmV2ZW50ID09PSAnc3RyaW5nJykge1xyXG5cdFx0XHRcdFx0bGV0IGV2ZW50TmFtZTogc3RyaW5nID0gKCh4LmV2ZW50KSBhcyBzdHJpbmcpO1xyXG5cdFx0XHRcdFx0eC5ldmVudCA9IChyb3c6IGFueSkgPT4gKHguZXZlbnRBcmdzID8gKHRoaXMgYXMgYW55KVtldmVudE5hbWVdKHJvdywgeC5ldmVudEFyZ3MpIDogKHRoaXMgYXMgYW55KVtldmVudE5hbWVdKHJvdykpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0XHQvKiBIaWRlIGNvbHVtbnMgdXNpbmcgcm91dGUgZGF0YSAqL1xyXG5cdFx0XHR0aGlzLnJvdXRlLmRhdGEuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcclxuXHRcdFx0XHR0aGlzLmNvbHVtbnMgPSB0aGlzLmNvbHVtbnM/LmZpbHRlcigoeDogVGFibGVDb2x1bW4pID0+ICF4LmhpZGUgfHwgIXguaGlkZShkYXRhLCB1bmRlZmluZWQsIHRoaXMpKTtcclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0XHQvKiBHZXQgY3VzdG9tIGFjdGlvbiwgaWYgYW55ICovXHJcblx0XHRcdHZhciBhY3Rpb25zID0gdGFibGVEZWZpbml0aW9uPy5hY3Rpb25zO1xyXG5cdFx0XHRpZiAoYWN0aW9ucyAhPSBudWxsKSB7XHJcblx0XHRcdFx0YWN0aW9ucy5mb3JFYWNoKHkgPT4gdGhpcy5yb3dNZW51SXRlbXM/LnB1c2goeSkpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0LyogRmlsdGVyIHRoZSBjb2x1bW5zIGJhc2VkIG9uIHRoZSBpbmRpdmlkdWFsIGNvbHVtbidzIGNvbHVtblNldHMgcHJvcGVydHkgYW5kIHRoZSBnbG9iYWwgY29sdW1uU2V0cyAqL1xyXG5cdFx0Y29uc3Qgc2VsZWN0ZWRDb2x1bW5zID0gKHRoaXMuY29sdW1uU2V0cz8ubGVuZ3RoID8/IDApID4gMFxyXG5cdFx0XHQ/IHRoaXMuY29sdW1ucz8uZmlsdGVyKGMgPT4gdGhpcy5jb2x1bW5TZXRzPy5zb21lKHNldCA9PiBjLmNvbHVtblNldHM/LmluY2x1ZGVzKHNldCkpKVxyXG5cdFx0XHQ6IHRoaXMuY29sdW1ucztcclxuXHJcblx0XHQvKiBIaWRlIGV4Y2x1ZGVkIGNvbHVtbnMgKi9cclxuXHRcdHRoaXMuY29sdW1ucyA9IHNlbGVjdGVkQ29sdW1ucz8uZmlsdGVyKCh4OiBUYWJsZUNvbHVtbikgPT4gIXRoaXMuZXhjbHVkZWRDb2x1bW5zPy5pbmNsdWRlcyh4Lm5hbWUpKTtcclxuXHJcblx0XHQvKiBBZGQgbGlzdCBtbmV1IGl0ZW1zICovXHJcblx0XHR0aGlzLmFkZFRvb2xiYXJNZW51SXRlbXMoKTtcclxuXHJcblx0XHRpZiAodGhpcy5keW5hbWljVGFibGUpIHtcclxuXHRcdFx0LyogQWRkIG1lbnUgaXRlbXMgZm9yIGVhY2ggcm93ICovXHJcblx0XHRcdHRoaXMuYWRkUm93TWVudUl0ZW1zKCk7XHJcblxyXG5cdFx0XHQvKiBDaGVjayBpZiB0aGUgYWN0aW9uIGNvbHVtbiBhbHJlYWR5IGV4aXN0cyAqL1xyXG5cdFx0XHR2YXIgYWN0aW9uQ29sbXVuID0gKHRoaXMuY29sdW1ucyBhcyBUYWJsZUNvbHVtbltdKT8uZmluZCh4ID0+IHgubmFtZSA9PSAnYWN0aW9uJyk7XHJcblxyXG5cdFx0XHQvKiBJZiBzbywganVzdCBhZGQgdGhlIG1lbnUgaXRlbXMgdG8gaXQgKi9cclxuXHRcdFx0aWYgKGFjdGlvbkNvbG11bikge1xyXG5cdFx0XHRcdGFjdGlvbkNvbG11bi5yb3dNZW51SXRlbXMgPz89IFtdO1xyXG5cdFx0XHRcdHRoaXMucm93TWVudUl0ZW1zLmZvckVhY2goeSA9PiBhY3Rpb25Db2xtdW4hLnJvd01lbnVJdGVtcyEudW5zaGlmdCh5KSk7XHJcblxyXG5cdFx0XHRcdC8qIENyZWF0ZSBhIHRhYmxlIG1lbnUgKi9cclxuXHRcdFx0XHRhY3Rpb25Db2xtdW4ubWVudSA9IG5ldyBBY3Rpb25JdGVtKHtcclxuXHRcdFx0XHRcdGljb246ICdtb3JlX3ZlcnQnLFxyXG5cdFx0XHRcdFx0aXRlbXM6IHRoaXMucm93TWVudUl0ZW1zXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8qIE90aGVyd2lzZSBhZGQgYSBuZXcgb25lICovXHJcblx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMuY29sdW1ucy5wdXNoKG5ldyBUYWJsZUNvbHVtbih7XHJcblx0XHRcdFx0XHRpbmRleDogMjAwMCxcclxuXHRcdFx0XHRcdG5hbWU6ICdhY3Rpb24nLFxyXG5cdFx0XHRcdFx0Y29sdW1uU2V0czogWydhY3Rpb24nLCAnY29tbW9uJ10sXHJcblx0XHRcdFx0XHR0eXBlOiBUYWJsZUNvbHVtblR5cGUuQWN0aW9uLFxyXG5cdFx0XHRcdFx0ZGlzYWJsZWQ6IHRydWUsXHJcblx0XHRcdFx0XHRtZW51OiBuZXcgQWN0aW9uSXRlbSh7XHJcblx0XHRcdFx0XHRcdGljb246ICdtb3JlX3ZlcnQnLFxyXG5cdFx0XHRcdFx0XHRpdGVtczogdGhpcy5yb3dNZW51SXRlbXNcclxuXHRcdFx0XHRcdH0pLFxyXG5cdFx0XHRcdFx0cm93TWVudUl0ZW1zOiB0aGlzLnJvd01lbnVJdGVtcyxcclxuXHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXHJcblx0XHRcdFx0XHRzdGlja3lFbmQ6IHRydWVcclxuXHRcdFx0XHR9KSk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHRoaXMudXBkYXRlQ29sdW1ucyh0cnVlKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKiBTZXQgcXVlcnkgcGFyYW1zIGludG8gcXVlcnkgb2JqZWN0ICovXHJcblx0XHR0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZSh4ID0+IE9iamVjdC5hc3NpZ24odGhpcy5xdWVyeSwgeCB8fCB7fSwgeyByZXR1cm5Vcmw6IG51bGwgfSkpO1xyXG5cclxuXHRcdC8qIEluaXRpbGlhbGl6ZSB0aGUgZGF0YSBzb3VyY2Ugd2l0aCB0aGUgY3VycmVudCBzZXJ2aWNlLCBwYWdpbmF0b3IgYW5kIHNvcnQgKi9cclxuXHRcdHRoaXMuc29ydCA9IHRoaXMuZHluYW1pY1RhYmxlPy5tYXRTb3J0IHx8ICh0aGlzLnNvcnQgPyB0aGlzLnNvcnQgOiBuZXcgTWF0U29ydCgpKTtcclxuXHRcdHRoaXMuZGF0YVNvdXJjZSA9IG5ldyBUYWJsZURhdGFTb3VyY2U8VEVudGl0eSwgVFNlcnZpY2U+KHRoaXMuc2VydmljZSEsIHRoaXMucGFnaW5hdG9yLCB0aGlzLnNvcnQpO1xyXG5cclxuXHRcdC8qIFNldCBpbmNsdWRlcyAqL1xyXG5cdFx0dGhpcy5kYXRhU291cmNlLmluY2x1ZGVzID0gdGhpcy5pbmNsdWRlcztcclxuXHRcdHRoaXMuZGF0YVNvdXJjZS5wcm9qZWN0aW9uID0gdGhpcy5wcm9qZWN0aW9uO1xyXG5cclxuXHRcdC8qIExvYWQgcXVlcnkgZnJvbSBicm93c2VyIHN0b3JhZ2UgKi9cclxuXHRcdHZhciBzdG9ycmVkUXVlcnkgPSB0aGlzLnRhYmxlQ29uZmlnPy5xdWVyeTtcclxuXHRcdGlmIChzdG9ycmVkUXVlcnkpIHtcclxuXHRcdFx0dGhpcy5kYXRhU291cmNlLmZpZWxkRmlsdGVycyA9IHRoaXMuY2xlYW4oc3RvcnJlZFF1ZXJ5LmZpZWxkRmlsdGVycykgfHwge307XHJcblx0XHRcdHRoaXMuc29ydEFjdGl2ZSA9IHN0b3JyZWRRdWVyeS5zb3J0Qnk7XHJcblx0XHRcdHRoaXMuc29ydERpcmVjdGlvbiA9IHN0b3JyZWRRdWVyeS5zb3J0RGlyZWN0aW9uO1xyXG5cdFx0XHR0aGlzLmRhdGFTb3VyY2UucGFnZVNpemUgPSBzdG9ycmVkUXVlcnkucGFnZVNpemU7XHJcblx0XHRcdHRoaXMuZGF0YVNvdXJjZS5wYWdlSW5kZXggPSBzdG9ycmVkUXVlcnkucGFnZUluZGV4O1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIEFkZCBzb21lIGZpbHRlciBmcm9tIHJvdXRlciAqL1xyXG5cdFx0aWYgKHRoaXMucXVlcnkpIHtcclxuXHRcdFx0dGhpcy5kYXRhU291cmNlLnN0YXRpY0ZpZWxkRmlsdGVycyA9IHRoaXMucXVlcnk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyogUmVtZW1iZXIgdGhlIGZpbHRlcnMgKi9cclxuXHRcdHRoaXMuZGF0YUxvYWRlZFN1YnNjcmlwdGlvbiA9IHRoaXMuZGF0YVNvdXJjZS5vbkRhdGFMb2FkZWQuc3Vic2NyaWJlKChyZXN1bHQ6IGFueSkgPT4ge1xyXG5cdFx0XHRpZiAocmVzdWx0KSB7XHJcblx0XHRcdFx0dGhpcy50YWJsZUNvbmZpZyA/Pz0gbmV3IFRhYmxlQ29uZmlnKCk7XHJcblx0XHRcdFx0dGhpcy50YWJsZUNvbmZpZy5xdWVyeSA9IHtcclxuXHRcdFx0XHRcdGZpZWxkRmlsdGVyczogdGhpcy5kYXRhU291cmNlLmZpZWxkRmlsdGVycyxcclxuXHRcdFx0XHRcdHNvcnRCeTogdGhpcy5zb3J0Py5hY3RpdmUsXHJcblx0XHRcdFx0XHRzb3J0RGlyZWN0aW9uOiB0aGlzLnNvcnQ/LmRpcmVjdGlvbiA/PyAnYXNjJyxcclxuXHRcdFx0XHRcdHBhZ2VTaXplOiB0aGlzLnBhZ2luYXRvcj8ucGFnZVNpemUgPz8gMTUsXHJcblx0XHRcdFx0XHRwYWdlSW5kZXg6IHRoaXMucGFnaW5hdG9yPy5wYWdlSW5kZXggPz8gMSxcclxuXHRcdFx0XHR9O1xyXG5cclxuXHRcdFx0XHQvKiBTYXZlIHRoZSBzZXR0aW5ncyAqL1xyXG5cdFx0XHRcdEFwcFN0b3JhZ2Uuc2V0T2JqZWN0RW5jb2RlZCh0aGlzLmNvbmZpZ3NLZXksIHRoaXMudGFibGVDb25maWcpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEBtZXRob2QgY29ubmVjdFxyXG5cdCAqIEBkZXNjcmlwdGlvbiBDb25uZWN0cyBhIGNvbGxlY3Rpb24gdmlld2VyIChzdWNoIGFzIGEgZGF0YSB0YWJsZSkgdG8gdGhlIGRhdGEgc291cmNlLiBcclxuXHQgKiAgICAgICAgICAgICAgVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIGRhdGEgc291cmNlIHdpdGggc3RhdGljIGZpZWxkIGZpbHRlcnMgYW5kIGFuIG9wdGlvbmFsIHBhdGguIFxyXG5cdCAqICAgICAgICAgICAgICBJdCBhbHNvIHN1YnNjcmliZXMgdG8gdGhlIGRhdGEgc291cmNlIHRvIHVwZGF0ZSB0aGUgZGlzcGxheWVkIGl0ZW1zIGluIHRoZSB0YWJsZS5cclxuXHQgKiBAcGFyYW0ge2FueX0gc3RhdGljRmllbGRGaWx0ZXJzIC0gT3B0aW9uYWwgc3RhdGljIGZpZWxkIGZpbHRlcnMgdG8gYXBwbHkgd2hlbiBjb25uZWN0aW5nIHRoZSBkYXRhIHNvdXJjZS5cclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gW3BhdGhdIC0gT3B0aW9uYWwgcGF0aCBmb3IgdGhlIGRhdGEgc291cmNlIGNvbm5lY3Rpb24uXHJcblx0ICogQHJldHVybnMge3ZvaWR9XHJcblx0ICovXHJcblx0cHVibGljIGNvbm5lY3Qoc3RhdGljRmllbGRGaWx0ZXJzOiBhbnkgPSBudWxsLCBwYXRoPzogc3RyaW5nKTogdm9pZCB7XHJcblx0XHQvKiBTZXQgdGhlIG9wdGlvbmFsIHBhdGggZm9yIHRoZSBkYXRhIHNvdXJjZSAqL1xyXG5cdFx0dGhpcy5kYXRhU291cmNlLnBhdGggPSBwYXRoO1xyXG5cclxuXHRcdC8qIEFwcGx5IHN0YXRpYyBmaWVsZCBmaWx0ZXJzICovXHJcblx0XHR0aGlzLmRhdGFTb3VyY2Uuc3RhdGljRmllbGRGaWx0ZXJzID0gc3RhdGljRmllbGRGaWx0ZXJzIHx8IHt9O1xyXG5cclxuXHRcdC8qIFVwZGF0ZSBpdGVtcyBmcm9tIHRoZSBkYXRhIHNvdXJjZSAqL1xyXG5cdFx0dGhpcy5kYXRhU291cmNlLmNvbm5lY3QodW5kZWZpbmVkKS5zdWJzY3JpYmUoKHg6IFRFbnRpdHlbXSkgPT4gdGhpcy5pdGVtcyA9IHgpO1xyXG5cclxuXHRcdC8qIEFkZCByb3cgbWVudSBpdGVtcyBpZiB0aGUgdGFibGUgaXMgbm90IGR5bmFtaWMgKi9cclxuXHRcdGlmICghdGhpcy5keW5hbWljVGFibGUpIHtcclxuXHRcdFx0dGhpcy5hZGRSb3dNZW51SXRlbXMoKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFVwZGF0ZXMgdGhlIHRhYmxlIGNvbHVtbnNcclxuXHQgKi9cclxuXHRwdWJsaWMgdXBkYXRlQ29sdW1ucyhsb2FkQ29uZmlnPzogYm9vbGVhbik6IHZvaWQge1xyXG5cdFx0LyogR2V0IGNvbmZpZyBmcm9tIGxvY2FsIHN0b3JhZ2UgKi9cclxuXHRcdGlmIChsb2FkQ29uZmlnKSB7XHJcblx0XHRcdHRoaXMubG9hZENvbHVtbkNvbmZpZ3MoKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKiBTb3J0IHRoZSBjb2x1bW5zIGJ5IGluZGV4ICovXHJcblx0XHRVdGlscy5zb3J0QXJyYXkodGhpcy5jb2x1bW5zIHx8IFtdLCAnaW5kZXgnKTtcclxuXHJcblx0XHQvKiBUcmlnZ2VyIGNoYW5nZXMgKi9cclxuXHRcdHRoaXMuZHluYW1pY1RhYmxlPy51cGRhdGVDb2x1bW5zKCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBSZWxvYWRzIGl0ZW1zXHJcblx0ICovXHJcblx0cHVibGljIGxvYWRMaXN0KHJlc2V0U2VsZWN0aW9uOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xyXG5cdFx0dGhpcz8uZGF0YVNvdXJjZT8ucmVsb2FkKHJlc2V0U2VsZWN0aW9uKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNlYXJjaFxyXG5cdCAqIEBwYXJhbSBmaWx0ZXIgXHJcblx0ICovXHJcblx0cHVibGljIHNlYXJjaChmaWx0ZXI6IHN0cmluZyk6IHZvaWQge1xyXG5cdFx0dGhpcy5kYXRhU291cmNlLmZpbHRlciA9IGZpbHRlcjtcclxuXHR9XHJcblxyXG5cclxuXHQvKipcclxuXHQgKiBOYXZpZ2F0ZXMgdG8gdGhlIGFkZCBwYWdlLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBhZGQoKTogdm9pZCB7XHJcblx0XHRpZiAodGhpcy5hZGREaWFsb2dUeXBlKSB7XHJcblx0XHRcdHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKHRoaXMuYWRkRGlhbG9nVHlwZSwgeyB3aWR0aDogJzY1MHB4JywgZGF0YTogdGhpcy5jbGFzc0luc3RhbmNlIH0pXHJcblx0XHRcdFx0LmFmdGVyQ2xvc2VkKClcclxuXHRcdFx0XHQuc3Vic2NyaWJlKCgpID0+IHRoaXMubG9hZExpc3QoZmFsc2UpKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHZhciBoYXNQYXJhbXMgPSBPYmplY3Qua2V5cyh0aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zKS5sZW5ndGggPiAwO1xyXG5cdFx0XHR0aGlzLnJvdXRlci5uYXZpZ2F0ZShcclxuXHRcdFx0XHRbYCR7dGhpcy5jdXJyZW50QmFzZVJvdXRlfS9hZGRgXSxcclxuXHRcdFx0XHR7IHF1ZXJ5UGFyYW1zOiBoYXNQYXJhbXMgPyB7IHJldHVyblVybDogdGhpcy5jdXJyZW50Um91dGUgfSA6IHt9LCByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH1cclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIE5hdmlnYXRlcyB0byB0aGUgZWRpdCBwYWdlLlxyXG5cdCAqIEBwYXJhbSBlbnRpdHkgLSBUaGUgZW50aXR5IHRvIGJlIGVkaXRlZC5cclxuXHQgKiBAcGFyYW0gY29udGV4dCAtIEFkZGl0aW9uYWwgY29udGV4dCBkYXRhLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBlZGl0KGVudGl0eT86IFRFbnRpdHksIGNvbnRleHQ/OiBhbnkpOiB2b2lkIHtcclxuXHRcdC8qIENoZWNrIGlmIGVudGl0eSBpcyBudWxsICovXHJcblx0XHRpZiAoZW50aXR5ID09PSBudWxsIHx8IGVudGl0eSA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcignRW50aXR5IG11c3QgYmUgZGVmaW5lZCBmb3IgZWRpdGluZy4nKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKiBDaGVjayBpZiB0ZXh0IGlzIHNlbGVjdGVkICovXHJcblx0XHRpZiAoIXRoaXMuaXNUZXh0U2VsZWN0ZWQoKSkge1xyXG5cdFx0XHQvKiBJZiBhIGN1c3RvbSBvbkVkaXQgZnVuY3Rpb24gaXMgcHJvdmlkZWQsIGNhbGwgaXQgKi9cclxuXHRcdFx0aWYgKHRoaXMub25FZGl0KSB7XHJcblx0XHRcdFx0LyogQ2FsbCB0aGUgY3VzdG9tIG9uRWRpdCBmdW5jdGlvbiB3aXRoIHRoZSBlbnRpdHkgYW5kIGNvbnRleHQgKi9cclxuXHRcdFx0XHR0aGlzLm9uRWRpdChlbnRpdHksIGNvbnRleHQpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdC8qIElmIG9uRWRpdCBpcyBub3QgcHJvdmlkZWQsIGNvbnN0cnVjdCB0aGUgZWRpdCByb3V0ZSBhbmQgbmF2aWdhdGUgKi9cclxuXHRcdFx0XHRjb25zdCBoYXNQYXJhbXMgPSBPYmplY3Qua2V5cyh0aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zKS5sZW5ndGggPiAwO1xyXG5cclxuXHRcdFx0XHQvKiBOYXZpZ2F0ZSB0byB0aGUgZWRpdCBwYWdlIHdpdGggdGhlIGVudGl0eSdzIGlkIGFuZCBvcHRpb25hbCBxdWVyeSBwYXJhbWV0ZXJzICovXHJcblx0XHRcdFx0dGhpcy5yb3V0ZXIubmF2aWdhdGUoXHJcblx0XHRcdFx0XHRbYCR7dGhpcy5jdXJyZW50QmFzZVJvdXRlfS9lZGl0YCwgKGVudGl0eSBhcyBhbnkpPy5pZF0sXHJcblx0XHRcdFx0XHR7IHF1ZXJ5UGFyYW1zOiBoYXNQYXJhbXMgPyB7IHJldHVyblVybDogdGhpcy5jdXJyZW50Um91dGUgfSA6IHt9LCByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH1cclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBQYXRjaGVzIHRoZSBlbnRpdHlcclxuXHQgKiBQYXRjaGVzIHRoZSBlbnRpdHlcclxuXHQgKiBAcGFyYW0gaWQgVGhlIElEIG9mIHRoZSBlbnRpdHlcclxuXHQgKiBAcGFyYW0gZmllbGRzIFRoZSBmaWVsZHMgdG8gcGF0Y2hcclxuXHQgKiBAcGFyYW0gdmFsdWUgVGhlIChvcHRpb25hbCkgdmFsdWUgdG8gY2hhbmdlXHJcblx0ICogQHBhcmFtIGluY2x1ZGVzIEluY2x1ZGVzIHNvbWUgbmF2aWdhdGlvbnNcclxuXHQgKi9cclxuXHRwdWJsaWMgcGF0Y2goaWQ6IG51bWJlciwgZmllbGRzOiBBcnJheTxzdHJpbmc+LCB2YWx1ZTogYW55LCBpbmNsdWRlcz86IGFueSk6IHZvaWQge1xyXG5cdFx0dGhpcy5fcGF0Y2goaWQsIGZpZWxkcywgdmFsdWUsIGluY2x1ZGVzLCAoXzogYW55KSA9PiB0aGlzLmxvYWRMaXN0KCkpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUGF0Y2hlcyB0aGUgZW50aXR5XHJcblx0ICogQHBhcmFtIGlkIFRoZSBJRCBvZiB0aGUgZW50aXR5XHJcblx0ICogQHBhcmFtIGZpZWxkcyBUaGUgZmllbGRzIHRvIHBhdGNoXHJcblx0ICogQHBhcmFtIHZhbHVlIFRoZSAob3B0aW9uYWwpIHZhbHVlIHRvIGNoYW5nZVxyXG5cdCAqIEBwYXJhbSBpbmNsdWRlcyBJbmNsdWRlcyBzb21lIG5hdmlnYXRpb25zXHJcblx0ICogQHBhcmFtIHN1Y2Nlc3NDYWxsYmFjayBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGUgY2FsbGVkIG9uIHN1Y2Nlc3NcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgX3BhdGNoKGlkOiBudW1iZXIsIGZpZWxkczogQXJyYXk8c3RyaW5nPiwgdmFsdWU6IGFueSwgaW5jbHVkZXM/OiBhbnksIHN1Y2Nlc3NDYWxsYmFjaz86IEZ1bmN0aW9uKTogdm9pZCB7XHJcblx0XHR0aGlzLmlzU2F2aW5nID0gdHJ1ZTtcclxuXHJcblx0XHQvKiBHZXQgZW50aXR5IGJ5IElEICovXHJcblx0XHRsZXQgZW50aXR5ID0gdGhpcy5kYXRhU291cmNlLml0ZW1zPy5maWx0ZXIoKHg6IGFueSkgPT4gKDxhbnk+eCkuaWQgPT09IGlkKVswXTtcclxuXHRcdGlmIChlbnRpdHkpIHtcclxuXHRcdFx0LyogQnVpbGQgcGF0Y2ggbWV0aG9kcyAqL1xyXG5cdFx0XHRsZXQgcGF0Y2hlcyA9IGZpZWxkcy5tYXAoeCA9PiB7IHJldHVybiB7IG9wOiAncmVwbGFjZScsIHBhdGg6IGAvJHt4fWAsIHZhbHVlOiB2YWx1ZSAhPSB1bmRlZmluZWQgPyB2YWx1ZSA6IGVudGl0eVt4XSB9OyB9KTtcclxuXHJcblx0XHRcdC8qIFNlbmQgcmVxdWVzdCAqL1xyXG5cdFx0XHR0aGlzLnNlcnZpY2VcclxuXHRcdFx0XHQucGF0Y2goaWQsIHBhdGNoZXMsIHVuZGVmaW5lZCwgeyBoZWFkZXJzOiB7ICdTaG93LU1lc3NhZ2UnOiAnWWVzJyB9LCBwYXJhbXM6IGluY2x1ZGVzID8gVXRpbHMudG9IdHRwUGFyYW1zKHsgaW5jbHVkZXM6IGluY2x1ZGVzIH0pIDogbnVsbCB9KVxyXG5cdFx0XHRcdC5zdWJzY3JpYmUoe1xyXG5cdFx0XHRcdFx0bmV4dDogKHgpID0+IHtcclxuXHRcdFx0XHRcdFx0dGhpcy5pc1NhdmluZyA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0XHRpZiAoc3VjY2Vzc0NhbGxiYWNrKSB7XHJcblx0XHRcdFx0XHRcdFx0c3VjY2Vzc0NhbGxiYWNrKHgpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9LCBlcnJvcjogKF8pID0+IHRoaXMuaXNTYXZpbmcgPSBmYWxzZVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogRGVsZXRlcyBhbiBpdGVtIGZyb20gdGhlIGRhdGFiYXNlLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBkZWxldGVJdGVtKGVudGl0eT86IFRFbnRpdHkpOiB2b2lkIHtcclxuXHRcdHRoaXMuc2hvd0RlbGV0ZUl0ZW1EaWFsb2coKS5zdWJzY3JpYmUoKGFjY2VwdDogYm9vbGVhbikgPT4ge1xyXG5cdFx0XHRpZiAoYWNjZXB0KSB7XHJcblx0XHRcdFx0dGhpcy5zZXJ2aWNlLmRlbGV0ZSgoZW50aXR5IGFzIGFueSkuaWQpLnN1YnNjcmliZSh7XHJcblx0XHRcdFx0XHRuZXh0OiAoXykgPT4gdGhpcy5vbkFmdGVySXRlbURlbGV0ZWQoPGFueT5lbnRpdHkpLFxyXG5cdFx0XHRcdFx0ZXJyb3I6IChlcnJvcikgPT4gdGhpcy5sb2coZXJyb3IpXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogRGVsZXRlcyBhbiBpdGVtIGZyb20gdGhlIGRhdGFiYXNlLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBkZWxldGVJdGVtcygpOiB2b2lkIHtcclxuXHRcdGlmICh0aGlzLmRhdGFTb3VyY2Uuc2VsZWN0aW9uTW9kZWwuaGFzVmFsdWUoKSkge1xyXG5cdFx0XHR0aGlzLnNob3dEZWxldGVJdGVtc0RpYWxvZygpLnN1YnNjcmliZSgoYWNjZXB0OiBib29sZWFuKSA9PiB7XHJcblx0XHRcdFx0aWYgKGFjY2VwdCkge1xyXG5cdFx0XHRcdFx0bGV0IGlkcyA9IHRoaXMuZGF0YVNvdXJjZS5nZXRTZWxlY3RlZElkcygpO1xyXG5cdFx0XHRcdFx0dGhpcy5zZXJ2aWNlLmRlbGV0ZUxpc3QoaWRzKS5zdWJzY3JpYmUoe1xyXG5cdFx0XHRcdFx0XHRuZXh0OiAoXykgPT4gdGhpcy5vbkFmdGVySXRlbXNEZWxldGVkKGlkcyksXHJcblx0XHRcdFx0XHRcdGVycm9yOiAoZXJyb3IpID0+IHRoaXMubG9nKGVycm9yKVxyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRvZ2dsZXMgYSBwcm9wZXJ0eS5cclxuXHQgKiBUaGlzIG1ldGhvZCBzdXBwb3J0cyBib3RoIGRpcmVjdCBhbmQgbmVzdGVkIHByb3BlcnRpZXMuXHJcblx0ICogXHJcblx0ICogQHBhcmFtIGl0ZW0gLSBUaGUgb2JqZWN0IHdob3NlIHByb3BlcnR5IHdpbGwgYmUgdG9nZ2xlZC5cclxuXHQgKiBAcGFyYW0gcHJvcGVydHkgLSBUaGUgcGF0aCB0byB0aGUgcHJvcGVydHkgdG8gdG9nZ2xlLCB3aGljaCBjYW4gYmUgYSBuZXN0ZWQgcHJvcGVydHkgKGUuZy4sICdwcm9maWxlLm5hbWUnKS5cclxuXHQgKi9cclxuXHRwdWJsaWMgdG9nZ2xlKGl0ZW06IFRFbnRpdHksIHByb3BlcnR5OiBzdHJpbmcgPSAnZW5hYmxlZCcpOiB2b2lkIHtcclxuXHRcdC8qIFJlc29sdmUgdGhlIG5lc3RlZCBwcm9wZXJ0eSB2YWx1ZSAqL1xyXG5cdFx0Y29uc3QgdmFsdWUgPSB0aGlzLmdldE5lc3RlZFByb3BlcnR5KGl0ZW0sIHByb3BlcnR5LCAnLycpO1xyXG5cclxuXHRcdC8qIFByZXBhcmUgdGhlIHBhdGNoIG9wZXJhdGlvbiAqL1xyXG5cdFx0Y29uc3QgcGF0Y2hPcGVyYXRpb24gPSB7XHJcblx0XHRcdG9wOiAncmVwbGFjZScsXHJcblx0XHRcdHBhdGg6IGAvJHsocHJvcGVydHkuc3RhcnRzV2l0aCgnLycpID8gcHJvcGVydHkuc3Vic3RyaW5nKDEpIDogcHJvcGVydHkpfWAsXHJcblx0XHRcdHZhbHVlOiB2YWx1ZVxyXG5cdFx0fTtcclxuXHJcblx0XHQvKiBBcHBseSB0aGUgcGF0Y2ggb3BlcmF0aW9uICovXHJcblx0XHR0aGlzLnNlcnZpY2VcclxuXHRcdFx0LnBhdGNoKCg8YW55Pml0ZW0pLmlkLCBbcGF0Y2hPcGVyYXRpb25dKVxyXG5cdFx0XHQuc3Vic2NyaWJlKCgpID0+IHRoaXMubG9hZExpc3QoKSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBVcGxvYWRzIHRhcm5zZmVycyBjc3YgZmlsZXNcclxuXHQgKiBAcGFyYW0gZmlsZSBUaGUgZmlsZSB0byB1cGxvYWRcclxuXHQgKiBAcGFyYW0gcmVsb2FkIElmIHRydWUsIHJlbG9hZCBpdGVtc1xyXG5cdCAqL1xyXG5cdHB1YmxpYyB1cGxvYWQoZmlsZTogRmlsZSwgcmVsb2FkOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xyXG5cdFx0dGhpcy5zZXJ2aWNlLnVwbG9hZChmaWxlKS5zdWJzY3JpYmUoe1xyXG5cdFx0XHRuZXh0OiAocmVzcG9uc2UpID0+IHtcclxuXHRcdFx0XHRyZXNwb25zZSA9IHJlc3BvbnNlLmpzb24oKTtcclxuXHJcblx0XHRcdFx0LyogUmVsb2FkIGxpc3QgKi9cclxuXHRcdFx0XHRpZiAocmVsb2FkKSB7XHJcblx0XHRcdFx0XHR0aGlzLmxvYWRMaXN0KCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LCBlcnJvcjogKGVycm9yKSA9PiB0aGlzLmxvZyhlcnJvcilcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogRG93bmxvYWRzIGEgZG9jdW1lbnRcclxuXHQgKiBAcGFyYW0gZW50aXR5IFxyXG5cdCAqL1xyXG5cdHB1YmxpYyBkb3dubG9hZChlbnRpdHk/OiBURW50aXR5LCBwYXRoOiBzdHJpbmcgPSAnZG93bmxvYWQnKTogdm9pZCB7XHJcblx0XHR0aGlzLnNlcnZpY2UuZG93bmxvYWQoYCR7cGF0aH0vJHsoZW50aXR5IGFzIElFbnRpdHkpLmlkfWApLnN1YnNjcmliZSh4ID0+IHtcclxuXHRcdFx0c2F2ZUFzKG5ldyBCbG9iKFt4LmRhdGFdLCB7fSksIHguZmlsZW5hbWUpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBEdXBsaWNhdGVzIGEgcmVjb3JkXHJcblx0ICogQHBhcmFtIGVudGl0eSBcclxuXHQgKi9cclxuXHRwdWJsaWMgZHVwbGljYXRlKGVudGl0eT86IFRFbnRpdHkpIHtcclxuXHRcdHRoaXMuc2VydmljZS5kdXBsaWNhdGUoKGVudGl0eSBhcyBhbnkpLmlkKS5zdWJzY3JpYmUoXyA9PiB0aGlzLmxvYWRMaXN0KCkpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogVGhpcyBpbmZvcm1zIHRoZSB0YWJsZSBob3cgdG8gdW5pcXVlbHkgaWRlbnRpZnkgcm93cyB0byBcclxuXHQgKiB0cmFjayBob3cgdGhlIGRhdGEgY2hhbmdlcyB3aXRoIGVhY2ggdXBkYXRlLlxyXG5cdCAqIEBwYXJhbSBpbmRleCBcclxuXHQgKiBAcGFyYW0gaXRlbSBcclxuXHQgKi9cclxuXHRwdWJsaWMgdHJhY2tCeUlkKF86IG51bWJlciwgaXRlbTogYW55KSB7XHJcblx0XHRyZXR1cm4gaXRlbS5pZDtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIE9wZW5zIHRoZSBjb25maWcgZGlhbG9nXHJcblx0ICovXHJcblx0cHVibGljIG9wZW5Db25maWdEaWFsb2coKTogdm9pZCB7XHJcblx0XHR0aGlzLmRpYWxvZy5vcGVuKFZkRHluYW1pY1RhYmxlQ29uZmlnRGlhbG9nQ29tcG9uZW50LCB7XHJcblx0XHRcdHdpZHRoOiAnMTA4MHB4JyxcclxuXHRcdFx0aGVpZ2h0OiAnODMwcHgnLFxyXG5cdFx0XHRkYXRhOiB0aGlzLFxyXG5cdFx0XHRkaXNhYmxlQ2xvc2U6IHRydWUsXHJcblx0XHRcdHBhbmVsQ2xhc3M6IFsnZmxhdC1kaWFsb2cnLCAnZGlhbG9nLWZ1bGwtc2NyZWVuJywgJ2RpYWxvZy1yZXNpemFibGUnXVxyXG5cdFx0fSkuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoXyA9PiB0aGlzLnJlbG9hZFBhZ2UoKSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBTYXZlcyB0aGUgdGFibGUgY29uZmlnXHJcblx0ICogQHBhcmFtIHRhYmxlQ29uZmlnXHJcblx0ICovXHJcblx0cHVibGljIHNhdmVDb25maWdzKHRhYmxlQ29uZmlnOiBUYWJsZUNvbmZpZyk6IHZvaWQge1xyXG5cdFx0aWYgKHRhYmxlQ29uZmlnKSB7XHJcblx0XHRcdC8qIFNldCB0aGUgY29uZmlnIGluIHRoZSBsaXN0IGNvbmZpZyAqL1xyXG5cdFx0XHR0aGlzLnRhYmxlQ29uZmlnID8/PSBuZXcgVGFibGVDb25maWcoKTtcclxuXHRcdFx0dGhpcy50YWJsZUNvbmZpZy5jb2x1bW5zID0gdGFibGVDb25maWcuY29sdW1ucyA/PyBbXTtcclxuXHRcdFx0dGhpcy50YWJsZUNvbmZpZy5zdGlja3kgPSB0YWJsZUNvbmZpZy5zdGlja3k7XHJcblx0XHRcdHRoaXMudGFibGVDb25maWcudGFibGVXaWR0aCA9IHRhYmxlQ29uZmlnLnRhYmxlV2lkdGg7XHJcblxyXG5cdFx0XHQvKiBTYXZlIHRoZSBjb25maWdzICovXHJcblx0XHRcdEFwcFN0b3JhZ2Uuc2V0T2JqZWN0RW5jb2RlZCh0aGlzLmNvbmZpZ3NLZXksIHRoaXMudGFibGVDb25maWcpO1xyXG5cclxuXHRcdFx0LyogU2V0IHRoZSB0YWJsZSBjb2x1bW5zICovXHJcblx0XHRcdHRoaXMudXBkYXRlQ29sdW1ucygpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogR2V0cyBhbmQgYXBwbGllcyB0aGUgdGFibGUgY29sdW1uIGNvbmZpZ3NcclxuXHQgKi9cclxuXHRwdWJsaWMgbG9hZENvbHVtbkNvbmZpZ3MoKTogdm9pZCB7XHJcblx0XHRpZiAodGhpcy50YWJsZUNvbmZpZz8uY29sdW1ucykge1xyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdCh0aGlzLnRhYmxlQ29uZmlnPy5jb2x1bW5zID8/IFtdKT8uZm9yRWFjaCgoeDogVGFibGVDb2x1bW5Db25maWcpID0+IHtcclxuXHRcdFx0XHRcdHZhciBjb2x1bW4gPSB0aGlzLmNvbHVtbnMuZmlsdGVyKCh5OiBUYWJsZUNvbHVtbikgPT4geS5uYW1lID09IHgubmFtZSlbMF07XHJcblx0XHRcdFx0XHRpZiAoY29sdW1uKSB7XHJcblx0XHRcdFx0XHRcdE9iamVjdC5hc3NpZ24oY29sdW1uLCB4KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSBjYXRjaCAoZXJyb3IpIHsgfVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogSW5jbHVkZXMgc29tZSBuYXZpZ2F0aW9uc1xyXG5cdCAqIEBwYXJhbSBpbmMgXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGluY2x1ZGUoLi4uaW5jOiBzdHJpbmdbXSkge1xyXG5cdFx0aW5jPy5mb3JFYWNoKHggPT4gdGhpcy5pbmNsdWRlcy5wdXNoKHgpKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEFkZCB0b29sYmFyIG1lbnUgaXRlbXNcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgYWRkVG9vbGJhck1lbnVJdGVtcygpOiB2b2lkIHtcclxuXHRcdC8qIEFkZCAnRGVsZXRlIHNlbGVjdGVkJyBtZW51IGl0ZW0gKi9cclxuXHRcdGlmICh0aGlzLmRlbGV0YWJsZSkge1xyXG5cdFx0XHR0aGlzLnRvb2xiYXJNZW51SXRlbXMucHVzaCh7XHJcblx0XHRcdFx0dGl0bGU6ICRsb2NhbGl6ZWA6QEBkZWxldGVTZWxlY3RlZDpEZWxldGUgc2VsZWN0ZWRgLFxyXG5cdFx0XHRcdGljb246ICdkZWxldGVfZm9yZXZlcicsXHJcblx0XHRcdFx0aWNvbkNsYXNzOiAndGMtb3JhbmdlLTgwMCcsXHJcblx0XHRcdFx0ZXZlbnQ6ICgpID0+IHRoaXMuZGVsZXRlSXRlbXMoKSxcclxuXHRcdFx0XHRoaWRlOiAoKSA9PiAhdGhpcy5jYW5EZWxldGUsXHJcblx0XHRcdFx0ZGlzYWJsZTogKCkgPT4gIXRoaXMuY2FuRXhlY3V0ZU11bHRpcGxlT3BlcmF0aW9ucygoeDogVEVudGl0eSkgPT4gdGhpcy5jYW5EZWxldGVJdGVtKHgpKVxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblx0XHQvKiBPcGVucyBjb25maWcgZGlhbG9nICovXHJcblx0XHRpZiAodGhpcy5jb25maWd1cmFibGUpIHtcclxuXHRcdFx0dGhpcy50b29sYmFyTWVudUl0ZW1zLnB1c2goe1xyXG5cdFx0XHRcdHRpdGxlOiAkbG9jYWxpemVgOkBAY29uZmlndXJlVGFibGU6Q29uZmlndXJlIHRhYmxlYCxcclxuXHRcdFx0XHRpY29uOiAnc2V0dGluZ3MnLFxyXG5cdFx0XHRcdGV2ZW50OiAoKSA9PiB0aGlzLm9wZW5Db25maWdEaWFsb2coKVxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAodGhpcy50b29sYmFyTWVudUl0ZW1zPy5sZW5ndGgpIHtcclxuXHRcdFx0LyogU29ydCB0aGUgbWVudSBpdGVtcyBieSBpbmRleCAqL1xyXG5cdFx0XHRVdGlscy5zb3J0QXJyYXkodGhpcy50b29sYmFyTWVudUl0ZW1zLCAnaW5kZXgnKTtcclxuXHJcblx0XHRcdC8qIEFkZCB0aGUgdG9vbGJhciBtZW51IGl0ZW1zIHRvIHRoZSB0aGUgdG9vbGJhciBhY3Rpb25zICovXHJcblx0XHRcdHRoaXMudG9vbGJhckFjdGlvbnMucHVzaCh7IGljb246ICdtb3JlX3ZlcnQnLCBpdGVtczogdGhpcy50b29sYmFyTWVudUl0ZW1zIH0pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQWRkIHJvdyBtZW51IGl0ZW1zXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGFkZFJvd01lbnVJdGVtcygpOiB2b2lkIHtcclxuXHRcdC8qIEFkZCBjaGVja2JveCBjb2x1bW4gKi9cclxuXHRcdGlmICh0aGlzLnNlbGVjdGFibGUpIHtcclxuXHRcdFx0dGhpcy5jb2x1bW5zLnVuc2hpZnQobmV3IFRhYmxlQ29sdW1uKHtcclxuXHRcdFx0XHRuYW1lOiAnc2VsZWN0JyxcclxuXHRcdFx0XHRjb2x1bW5TZXRzOiBbJ3NlbGVjdCcsICdjb21tb24nXSxcclxuXHRcdFx0XHR0eXBlOiBUYWJsZUNvbHVtblR5cGUuQ2hlY2tib3gsXHJcblx0XHRcdFx0ZGlzYWJsZTogKHJvdz86IFRFbnRpdHkpID0+ICF0aGlzLmNhblNlbGVjdEl0ZW0ocm93KSxcclxuXHRcdFx0XHRjZWxsTmdDbGFzczogKHJvdzogVEVudGl0eSkgPT4gdGhpcy5zZWxlY3RSb3dOZ0NsYXNzKHJvdyksXHJcblx0XHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcclxuXHRcdFx0XHRzdGlja3k6IHRydWVcclxuXHRcdFx0fSkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIEFkZCBkdXBsaWNhdGUgbWVudSAqL1xyXG5cdFx0aWYgKHRoaXMuZHVwbGljYWJsZSkge1xyXG5cdFx0XHR0aGlzLnJvd01lbnVJdGVtcy51bnNoaWZ0KHtcclxuXHRcdFx0XHR0aXRsZTogJGxvY2FsaXplYDpAQGR1cGxpY2F0ZTpEdXBsaWNhdGVgLFxyXG5cdFx0XHRcdGljb246ICdmaWxlX2NvcHknLFxyXG5cdFx0XHRcdGV2ZW50OiAocm93PzogVEVudGl0eSkgPT4gdGhpcy5kdXBsaWNhdGUocm93KSxcclxuXHRcdFx0XHRoaWRlOiAocm93PzogVEVudGl0eSkgPT4gIXRoaXMuY2FuRHVwbGljYXRlSXRlbShyb3cpXHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIEFkZCBkb3dubG9hZCBtZW51ICovXHJcblx0XHRpZiAodGhpcy5kb3dubG9hZGFibGUpIHtcclxuXHRcdFx0dGhpcy5yb3dNZW51SXRlbXMudW5zaGlmdCh7XHJcblx0XHRcdFx0dGl0bGU6ICRsb2NhbGl6ZWA6QEBkb3dubG9hZDpEb3dubG9hZGAsXHJcblx0XHRcdFx0aWNvbjogJ2ZpbGVfZG93bmxvYWQnLFxyXG5cdFx0XHRcdGV2ZW50OiAocm93PzogVEVudGl0eSkgPT4gdGhpcy5kb3dubG9hZChyb3cpLFxyXG5cdFx0XHRcdGhpZGU6IChyb3c/OiBURW50aXR5KSA9PiAhdGhpcy5jYW5Eb3dubG9hZEl0ZW0ocm93KVxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblx0XHQvKiBBZGQgZGVsZXRlIG1lbnUgKi9cclxuXHRcdGlmICh0aGlzLmRlbGV0YWJsZSAmJiB0aGlzLmNhbkRlbGV0ZSkge1xyXG5cdFx0XHR0aGlzLnJvd01lbnVJdGVtcy51bnNoaWZ0KHtcclxuXHRcdFx0XHR0aXRsZTogJGxvY2FsaXplYDpAQGRlbGV0ZTpEZWxldGVgLFxyXG5cdFx0XHRcdGljb246ICdkZWxldGVfZm9yZXZlcicsXHJcblx0XHRcdFx0aWNvbkNsYXNzOiAndGMtb3JhbmdlLTgwMCcsXHJcblx0XHRcdFx0ZXZlbnQ6IChyb3c/OiBURW50aXR5KSA9PiB0aGlzLmRlbGV0ZUl0ZW0ocm93KSxcclxuXHRcdFx0XHRoaWRlOiAocm93PzogVEVudGl0eSkgPT4gIXRoaXMuY2FuRGVsZXRlSXRlbShyb3cpXHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIEFkZCBlZGl0IG1lbnUgKi9cclxuXHRcdGlmICh0aGlzLmVkaXRhYmxlICYmIHRoaXMuY2FuVXBkYXRlKSB7XHJcblx0XHRcdHRoaXMucm93TWVudUl0ZW1zLnVuc2hpZnQoe1xyXG5cdFx0XHRcdHRpdGxlOiAkbG9jYWxpemVgOkBAZWRpdDpFZGl0YCxcclxuXHRcdFx0XHRpY29uOiAnZWRpdF9ub3RlJyxcclxuXHRcdFx0XHRpY29uQ2xhc3M6ICd0Yy1ibHVlLTQwMCcsXHJcblx0XHRcdFx0ZXZlbnQ6IChyb3c/OiBURW50aXR5KSA9PiB0aGlzLmVkaXQocm93LCB0aGlzKSxcclxuXHRcdFx0XHRoaWRlOiAocm93PzogVEVudGl0eSkgPT4gIXRoaXMuY2FuRWRpdEl0ZW0ocm93KVxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIERldGVybWluZXMgaWYgdGhlIGdpdmVuIGl0ZW0gY2FuIGJlIHNlbGVjdGVkLlxyXG5cdCAqIFxyXG5cdCAqIEFuIGl0ZW0gaXMgY29uc2lkZXJlZCBzZWxlY3RhYmxlIGlmOlxyXG5cdCAqIC0gSXQgZG9lcyBub3QgaGF2ZSB0aGUgYHNlbGVjdGFibGVgIHByb3BlcnR5LCBvciB0aGUgcHJvcGVydHkgaXMgYHRydWVgLlxyXG5cdCAqIC0gSXQgZG9lcyBub3QgaGF2ZSB0aGUgYGlzU2VsZWN0YWJsZWAgcHJvcGVydHksIG9yIHRoZSBwcm9wZXJ0eSBpcyBgdHJ1ZWAuXHJcblx0ICogXHJcblx0ICogQHBhcmFtIGVudGl0eSBUaGUgaXRlbSB0byBjaGVjay5cclxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGl0ZW0gaXMgc2VsZWN0YWJsZTsgb3RoZXJ3aXNlLCBgZmFsc2VgLlxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBjYW5TZWxlY3RJdGVtKGVudGl0eT86IFRFbnRpdHkpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiAoIWVudGl0eT8uaGFzT3duUHJvcGVydHkoJ3NlbGVjdGFibGUnKSB8fCAoZW50aXR5IGFzIGFueSlbJ3NlbGVjdGFibGUnXSkgJiZcclxuXHRcdFx0KCFlbnRpdHk/Lmhhc093blByb3BlcnR5KCdpc1NlbGVjdGFibGUnKSB8fCAoZW50aXR5IGFzIGFueSlbJ2lzU2VsZWN0YWJsZSddKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIERldGVybWluZXMgaWYgdGhlIGdpdmVuIGl0ZW0gY2FuIGJlIGRlbGV0ZWQuXHJcblx0ICogXHJcblx0ICogQW4gaXRlbSBpcyBjb25zaWRlcmVkIGRlbGV0YWJsZSBpZjpcclxuXHQgKiAtIFRoZSBgY2FuRGVsZXRlYCBmbGFnIGlzIGB0cnVlYC5cclxuXHQgKiAtIEl0IGRvZXMgbm90IGhhdmUgdGhlIGBkZWxldGFibGVgIHByb3BlcnR5LCBvciB0aGUgcHJvcGVydHkgaXMgYHRydWVgLlxyXG5cdCAqIC0gSXQgZG9lcyBub3QgaGF2ZSB0aGUgYGlzRGVsZXRhYmxlYCBwcm9wZXJ0eSwgb3IgdGhlIHByb3BlcnR5IGlzIGB0cnVlYC5cclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gZW50aXR5IFRoZSBpdGVtIHRvIGNoZWNrLlxyXG5cdCAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgaXRlbSBpcyBkZWxldGFibGU7IG90aGVyd2lzZSwgYGZhbHNlYC5cclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgY2FuRGVsZXRlSXRlbShlbnRpdHk/OiBURW50aXR5KTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdGhpcy5jYW5EZWxldGUgJiZcclxuXHRcdFx0KCFlbnRpdHk/Lmhhc093blByb3BlcnR5KCdkZWxldGFibGUnKSB8fCAoZW50aXR5IGFzIGFueSlbJ2RlbGV0YWJsZSddKSAmJlxyXG5cdFx0XHQoIWVudGl0eT8uaGFzT3duUHJvcGVydHkoJ2lzRGVsZXRhYmxlJykgfHwgKGVudGl0eSBhcyBhbnkpWydpc0RlbGV0YWJsZSddKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIERldGVybWluZXMgaWYgdGhlIGdpdmVuIGl0ZW0gY2FuIGJlIGVkaXRlZC5cclxuXHQgKiBcclxuXHQgKiBBbiBpdGVtIGlzIGNvbnNpZGVyZWQgZWRpdGFibGUgaWY6XHJcblx0ICogLSBUaGUgYGNhblVwZGF0ZWAgZmxhZyBpcyBgdHJ1ZWAuXHJcblx0ICogLSBJdCBkb2VzIG5vdCBoYXZlIHRoZSBgZWRpdGFibGVgIHByb3BlcnR5LCBvciB0aGUgcHJvcGVydHkgaXMgYHRydWVgLlxyXG5cdCAqIC0gSXQgZG9lcyBub3QgaGF2ZSB0aGUgYGlzRWRpdGFibGVgIHByb3BlcnR5LCBvciB0aGUgcHJvcGVydHkgaXMgYHRydWVgLlxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSBlbnRpdHkgVGhlIGl0ZW0gdG8gY2hlY2suXHJcblx0ICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBpdGVtIGlzIGVkaXRhYmxlOyBvdGhlcndpc2UsIGBmYWxzZWAuXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGNhbkVkaXRJdGVtKGVudGl0eT86IFRFbnRpdHkpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiB0aGlzLmNhblVwZGF0ZSAmJlxyXG5cdFx0XHQoIWVudGl0eT8uaGFzT3duUHJvcGVydHkoJ2VkaXRhYmxlJykgfHwgKGVudGl0eSBhcyBhbnkpWydlZGl0YWJsZSddKSAmJlxyXG5cdFx0XHQoIWVudGl0eT8uaGFzT3duUHJvcGVydHkoJ2lzRWRpdGFibGUnKSB8fCAoZW50aXR5IGFzIGFueSlbJ2lzRWRpdGFibGUnXSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBEZXRlcm1pbmVzIGlmIHRoZSBnaXZlbiBpdGVtIGNhbiBiZSBkb3dubG9hZGVkLlxyXG5cdCAqIFxyXG5cdCAqIEFuIGl0ZW0gaXMgY29uc2lkZXJlZCBkb3dubG9hZGFibGUgaWY6XHJcblx0ICogLSBJdCBkb2VzIG5vdCBoYXZlIHRoZSBgZG93bmxvYWRhYmxlYCBwcm9wZXJ0eSwgb3IgdGhlIHByb3BlcnR5IGlzIGB0cnVlYC5cclxuXHQgKiAtIEl0IGRvZXMgbm90IGhhdmUgdGhlIGBpc0Rvd25sb2FkYWJsZWAgcHJvcGVydHksIG9yIHRoZSBwcm9wZXJ0eSBpcyBgdHJ1ZWAuXHJcblx0ICogXHJcblx0ICogQHBhcmFtIGVudGl0eSBUaGUgaXRlbSB0byBjaGVjay5cclxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGl0ZW0gaXMgZG93bmxvYWRhYmxlOyBvdGhlcndpc2UsIGBmYWxzZWAuXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGNhbkRvd25sb2FkSXRlbShlbnRpdHk/OiBURW50aXR5KTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gKCFlbnRpdHk/Lmhhc093blByb3BlcnR5KCdkb3dubG9hZGFibGUnKSB8fCAoZW50aXR5IGFzIGFueSlbJ2Rvd25sb2FkYWJsZSddKSAmJlxyXG5cdFx0XHQoIWVudGl0eT8uaGFzT3duUHJvcGVydHkoJ2lzRG93bmxvYWRhYmxlJykgfHwgKGVudGl0eSBhcyBhbnkpWydpc0Rvd25sb2FkYWJsZSddKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIERldGVybWluZXMgaWYgdGhlIGdpdmVuIGl0ZW0gY2FuIGJlIGR1cGxpY2F0ZWQuXHJcblx0ICogXHJcblx0ICogQW4gaXRlbSBpcyBjb25zaWRlcmVkIGR1cGxpY2FibGUgaWY6XHJcblx0ICogLSBJdCBkb2VzIG5vdCBoYXZlIHRoZSBgZHVwbGljYWJsZWAgcHJvcGVydHksIG9yIHRoZSBwcm9wZXJ0eSBpcyBgdHJ1ZWAuXHJcblx0ICogLSBJdCBkb2VzIG5vdCBoYXZlIHRoZSBgaXNEdXBsaWNhYmxlYCBwcm9wZXJ0eSwgb3IgdGhlIHByb3BlcnR5IGlzIGB0cnVlYC5cclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gZW50aXR5IFRoZSBpdGVtIHRvIGNoZWNrLlxyXG5cdCAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgaXRlbSBpcyBkdXBsaWNhYmxlOyBvdGhlcndpc2UsIGBmYWxzZWAuXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGNhbkR1cGxpY2F0ZUl0ZW0oZW50aXR5PzogVEVudGl0eSk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuICghZW50aXR5Py5oYXNPd25Qcm9wZXJ0eSgnZHVwbGljYWJsZScpIHx8IChlbnRpdHkgYXMgYW55KVsnZHVwbGljYWJsZSddKSAmJlxyXG5cdFx0XHQoIWVudGl0eT8uaGFzT3duUHJvcGVydHkoJ2lzRHVwbGljYWJsZScpIHx8IChlbnRpdHkgYXMgYW55KVsnaXNEdXBsaWNhYmxlJ10pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUmV0dXJucyBOZ0NsYXNzIG9iamVjdCBmb3Igc2VsZWN0IGNvbHVtblxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBzZWxlY3RSb3dOZ0NsYXNzKF86IFRFbnRpdHkpOiBhbnkgeyB9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENoZWNrIGlmIHRoZSB0aGVyZSBhbnkgc2VsZWN0ZWQgcm93XHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGhhc1NlbGVjdGVkUm93cygpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuZGF0YVNvdXJjZT8uc2VsZWN0aW9uTW9kZWw/Lmhhc1ZhbHVlKCkgfTtcclxuXHJcblx0LyoqXHJcblx0ICogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBlbnRpdHkgaGFzIGJlZW4gZGVsZXRlZC5cclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgb25BZnRlckl0ZW1EZWxldGVkKGl0ZW06IElFbnRpdHkpOiB2b2lkIHtcclxuXHRcdHRoaXMubG9hZExpc3QodHJ1ZSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIGVudGl0aWVzIGhhcyBiZWVuIGRlbGV0ZWQuXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIG9uQWZ0ZXJJdGVtc0RlbGV0ZWQoaWRzOiBudW1iZXJbXSk6IHZvaWQge1xyXG5cdFx0dGhpcy5sb2FkTGlzdCh0cnVlKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENoZWNrcyBpZiB0aGUgdXNlciBjYW4gcGVyZm9ybSBtdWx0aXBsZSBvcGVyYXRpb25zIChMaWtlICdkZWxldGUgc2VsZWN0ZWQnKS5cclxuXHQgKiBAcGFyYW0gYWN0aW9uIFxyXG5cdCAqIEByZXR1cm5zIFxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBjYW5FeGVjdXRlTXVsdGlwbGVPcGVyYXRpb25zKGFjdGlvbj86IEZ1bmN0aW9uKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdGhpcy5oYXNTZWxlY3RlZFJvd3MoKSAmJiAoYWN0aW9uID8gdGhpcy5kYXRhU291cmNlPy5zZWxlY3Rpb25Nb2RlbD8uc2VsZWN0ZWQ/LmV2ZXJ5KCh4OiBhbnkpID0+IGFjdGlvbih4KSkgOiB0cnVlKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldHMgdGhlIHZhbHVlIG9mIGEgbmVzdGVkIHByb3BlcnR5IGZyb20gYW4gb2JqZWN0LlxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSBvYmogLSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxyXG5cdCAqIEBwYXJhbSBwYXRoIC0gVGhlIHBhdGggdG8gdGhlIHByb3BlcnR5LCB3aGljaCBjYW4gYmUgZGVsaW1pdGVkIGJ5IGEgY3VzdG9tIGNoYXJhY3RlciAoZS5nLiwgZG90LCBzbGFzaCkuXHJcblx0ICogQHBhcmFtIGRlbGltaXRlciAtIFRoZSBkZWxpbWl0ZXIgdXNlZCB0byBzZXBhcmF0ZSBsZXZlbHMgaW4gdGhlIHByb3BlcnR5IHBhdGggKGRlZmF1bHQgaXMgJy4nKS5cclxuXHQgKiBAcmV0dXJucyAtIFRoZSB2YWx1ZSBvZiB0aGUgbmVzdGVkIHByb3BlcnR5IG9yIHVuZGVmaW5lZCBpZiBub3QgZm91bmQuXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGdldE5lc3RlZFByb3BlcnR5KG9iajogYW55LCBwYXRoOiBzdHJpbmcsIGRlbGltaXRlcjogc3RyaW5nID0gJy4nKTogYW55IHtcclxuXHRcdC8qIFNwbGl0IHRoZSBwYXRoIGludG8gYW4gYXJyYXkgb2Yga2V5cyB1c2luZyB0aGUgc3BlY2lmaWVkIGRlbGltaXRlciAqL1xyXG5cdFx0Y29uc3Qga2V5cyA9IHBhdGguc3BsaXQoZGVsaW1pdGVyKTtcclxuXHJcblx0XHQvKiBUcmF2ZXJzZSB0aGUgb2JqZWN0IGJhc2VkIG9uIHRoZSBhcnJheSBvZiBrZXlzICovXHJcblx0XHRyZXR1cm4ga2V5cy5yZWR1Y2UoKGFjYywga2V5KSA9PiBhY2MgJiYgYWNjW2tleV0sIG9iaik7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBSZXNwb25kcyB0byB1c2VyLWluaXRpYXRlZCBldmVudHNcclxuXHQgKiBAcGFyYW0gZXZlbnQgXHJcblx0ICovXHJcblx0QEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bicsIFsnJGV2ZW50J10pXHJcblx0cHVibGljIGhhbmRsZUtleWJvYXJkRXZlbnQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuXHRcdGlmIChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpIHtcclxuXHRcdFx0c3dpdGNoIChldmVudC5rZXkpIHtcclxuXHRcdFx0XHQvKiBOYXZpZ2F0ZSB0byBhZGQgcGFnZSAqL1xyXG5cdFx0XHRcdGNhc2UgJ2EnOlxyXG5cdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHRcdFx0XHRcdHRoaXMuYWRkKCk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIGlmICh0aGlzLnBhZ2luYXRvcikge1xyXG5cdFx0XHRzd2l0Y2ggKGV2ZW50LmtleSkge1xyXG5cdFx0XHRcdC8qIE5hdmlnYXRlIHRvIHByZXZpb3VzIHBhZ2UgKi9cclxuXHRcdFx0XHRjYXNlICdQYWdlVXAnOlxyXG5cdFx0XHRcdFx0dGhpcy5wYWdpbmF0b3IucHJldmlvdXNQYWdlKCk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHJcblx0XHRcdFx0LyogTmF2aWdhdGUgdG8gbmV4dCBwYWdlICovXHJcblx0XHRcdFx0Y2FzZSAnUGFnZURvd24nOlxyXG5cdFx0XHRcdFx0dGhpcy5wYWdpbmF0b3IubmV4dFBhZ2UoKTtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBBIGNhbGxiYWNrIHVzZWQgZm9yIGFueSBjdXN0b20gY2xlYW51cCB0aGF0IG5lZWRzIHRvIG9jY3VyIFxyXG5cdCAqIHdoZW4gdGhlIGluc3RhbmNlIGlzIGRlc3Ryb3llZC5cclxuXHQgKi9cclxuXHRwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcblx0XHRzdXBlci5uZ09uRGVzdHJveSgpO1xyXG5cdFx0aWYgKHRoaXMuZGF0YUxvYWRlZFN1YnNjcmlwdGlvbikge1xyXG5cdFx0XHR0aGlzLmRhdGFMb2FkZWRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRoZSBTeW1ib2wudG9TdHJpbmdUYWcgd2VsbC1rbm93biBzeW1ib2wgaXMgYSBzdHJpbmcgdmFsdWVkIHByb3BlcnR5IHRoYXQgaXMgdXNlZCBcclxuXHQgKiBpbiB0aGUgY3JlYXRpb24gb2YgdGhlIGRlZmF1bHQgc3RyaW5nIGRlc2NyaXB0aW9uIG9mIGFuIG9iamVjdFxyXG5cdCAqL1xyXG5cdGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSgpIHsgcmV0dXJuICdHZW5lcmljTGlzdENvbXBvbmVudCc7IH1cclxufSJdfQ==