@alfresco/aca-shared 5.4.0-13492897022 → 5.4.0-13560776567

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.
@@ -79,64 +79,43 @@ export const isContentServiceEnabled = (context) => {
79
79
  const flag = context.appConfig.get('plugins.contentService');
80
80
  return flag === true || flag === 'true';
81
81
  };
82
- /**
83
- * Checks if upload action is supported for the given context
84
- * JSON ref: `app.isUploadSupported`
85
- *
86
- * @param context Rule execution context
87
- */
88
- export const isUploadSupported = (context) => [isContentServiceEnabled(context), navigation.isPersonalFiles(context) || navigation.isLibraryContent(context), canUpload(context)].every(Boolean);
89
- /**
90
- * Checks if user can copy selected node.
91
- * JSON ref: `app.canCopyNode`
92
- *
93
- * @param context Rule execution context
94
- */
95
- export const canCopyNode = (context) => [hasSelection(context), navigation.isNotTrashcan(context), navigation.isNotLibraries(context)].every(Boolean);
96
82
  /**
97
83
  * Checks if user can mark selected nodes as **Favorite**.
98
84
  * JSON ref: `app.selection.canAddFavorite`
99
85
  */
100
86
  export function canAddFavorite(context) {
101
- if (hasSelection(context)) {
102
- if (navigation.isFavorites(context) || navigation.isLibraries(context) || navigation.isTrashcan(context)) {
103
- return false;
104
- }
105
- return context.selection.nodes.some((node) => !node.entry.isFavorite);
87
+ if (navigation.isFavorites(context) || navigation.isLibraries(context) || navigation.isTrashcan(context)) {
88
+ return false;
106
89
  }
107
- return false;
90
+ return context.selection.nodes.some((node) => !node.entry.isFavorite);
108
91
  }
109
92
  /**
110
93
  * Checks if user can un-mark selected nodes as **Favorite**.
111
94
  * JSON ref: `app.selection.canRemoveFavorite`
112
95
  */
113
96
  export function canRemoveFavorite(context) {
114
- if (hasSelection(context) && !navigation.isTrashcan(context)) {
115
- if (navigation.isFavorites(context)) {
116
- return true;
117
- }
118
- return context.selection.nodes.every((node) => node.entry.isFavorite);
97
+ if (navigation.isFavorites(context)) {
98
+ return true;
119
99
  }
120
- return false;
100
+ return context.selection.nodes.every((node) => node.entry.isFavorite);
121
101
  }
122
102
  /**
123
103
  * Checks if user can share selected file.
124
104
  * JSON ref: `app.selection.file.canShare`
125
105
  */
126
- export const canShareFile = (context) => [context.selection.file, navigation.isNotTrashcan(context), repository.hasQuickShareEnabled(context), !isShared(context)].every(Boolean);
106
+ export const canShareFile = (context) => [context.selection.file, !navigation.isTrashcan(context), repository.hasQuickShareEnabled(context), !isShared(context)].every(Boolean);
127
107
  /**
128
108
  * Checks if user can perform "Join" or "Cancel Join Request" on a library.
129
109
  * JSON ref: `canToggleJoinLibrary`
130
110
  */
131
- export const canToggleJoinLibrary = (context) => [hasLibrarySelected(context), !isPrivateLibrary(context), hasNoLibraryRole(context)].every(Boolean) ||
132
- [hasLibrarySelected(context), isPrivateLibrary(context), hasNoLibraryRole(context), isAdmin(context)].every(Boolean);
111
+ export const canToggleJoinLibrary = (context) => !isPrivateLibrary(context) || [isPrivateLibrary(context), isAdmin(context)].every(Boolean);
133
112
  /**
134
113
  * Checks if user can edit the selected folder.
135
114
  * JSON ref: `canEditFolder`
136
115
  *
137
116
  * @param context Rule execution context
138
117
  */
139
- export const canEditFolder = (context) => [canUpdateSelectedFolder(context), navigation.isNotTrashcan(context)].every(Boolean);
118
+ export const canEditFolder = (context) => [canUpdateSelectedFolder(context), !navigation.isTrashcan(context)].every(Boolean);
140
119
  /**
141
120
  * Checks if the selected file is already shared.
142
121
  * JSON ref: `app.selection.file.isShared`
@@ -145,7 +124,7 @@ export function isShared(context) {
145
124
  if (navigation.isSharedFiles(context) && context.selection.file) {
146
125
  return true;
147
126
  }
148
- if (navigation.isNotTrashcan(context) && hasSelection(context) && context.selection.file) {
127
+ if (!navigation.isTrashcan(context) && hasSelection(context) && context.selection.file) {
149
128
  return !!context.selection.file.entry?.properties?.['qshare:sharedId'];
150
129
  }
151
130
  return false;
@@ -155,38 +134,23 @@ export function isShared(context) {
155
134
  * JSON ref: `app.selection.canDelete`
156
135
  */
157
136
  export function canDeleteSelection(context) {
158
- if (navigation.isNotTrashcan(context) && navigation.isNotLibraries(context) && hasSelection(context)) {
159
- if (hasLockedFiles(context)) {
160
- return false;
161
- }
162
- // temp workaround for Favorites api
163
- if (navigation.isFavorites(context)) {
164
- return true;
165
- }
166
- if (navigation.isPreview(context)) {
167
- return context.permissions.check(context.selection.nodes, ['delete']);
168
- }
169
- // workaround for Shared Files
170
- if (navigation.isSharedFiles(context)) {
171
- return context.permissions.check(context.selection.nodes, ['delete'], {
172
- target: 'allowableOperationsOnTarget'
173
- });
174
- }
137
+ if (hasLockedFiles(context)) {
138
+ return false;
139
+ }
140
+ // temp workaround for Favorites api
141
+ if (navigation.isFavorites(context)) {
142
+ return true;
143
+ }
144
+ if (navigation.isPreview(context)) {
175
145
  return context.permissions.check(context.selection.nodes, ['delete']);
176
146
  }
177
- return false;
178
- }
179
- /**
180
- * Checks if user can un-share selected nodes.
181
- * JSON ref: `app.selection.canUnshare`
182
- */
183
- export function canUnshareNodes(context) {
184
- if (hasSelection(context)) {
147
+ // workaround for Shared Files
148
+ if (navigation.isSharedFiles(context)) {
185
149
  return context.permissions.check(context.selection.nodes, ['delete'], {
186
150
  target: 'allowableOperationsOnTarget'
187
151
  });
188
152
  }
189
- return false;
153
+ return context.permissions.check(context.selection.nodes, ['delete']);
190
154
  }
191
155
  /**
192
156
  * Checks if user selected anything.
@@ -198,7 +162,7 @@ export const hasSelection = (context) => !context.selection.isEmpty;
198
162
  * JSON ref: `app.navigation.folder.canCreate`
199
163
  */
200
164
  export function canCreateFolder(context) {
201
- if (isContentServiceEnabled(context) && (navigation.isPersonalFiles(context) || navigation.isLibraryContent(context))) {
165
+ if (navigation.isPersonalFiles(context) || navigation.isLibraryContent(context)) {
202
166
  const { currentFolder } = context.navigation;
203
167
  if (currentFolder) {
204
168
  return context.permissions.check(currentFolder, ['create']);
@@ -206,29 +170,12 @@ export function canCreateFolder(context) {
206
170
  }
207
171
  return false;
208
172
  }
209
- /**
210
- * Checks if user can create a Library
211
- * JSON ref: `app.canCreateLibrary`
212
- *
213
- * @param context Rule execution context
214
- */
215
- export const canCreateLibrary = (context) => [isContentServiceEnabled(context), navigation.isLibraries(context)].every(Boolean);
216
- /**
217
- * Checks if user can upload content to current folder.
218
- * JSON ref: `app.navigation.folder.canUpload`
219
- */
220
- export function canUpload(context) {
221
- return canCreateFolder(context);
222
- }
223
173
  /**
224
174
  * Checks if user can download selected nodes (either files or folders).
225
175
  * JSON ref: `app.selection.canDownload`
226
176
  */
227
177
  export function canDownloadSelection(context) {
228
- if (hasSelection(context) && navigation.isNotTrashcan(context)) {
229
- return context.selection.nodes.every((node) => node.entry && (node.entry.isFile || node.entry.isFolder || !!node.entry.nodeId));
230
- }
231
- return false;
178
+ return context.selection.nodes.every((node) => node.entry && (node.entry.isFile || node.entry.isFolder || !!node.entry.nodeId));
232
179
  }
233
180
  /**
234
181
  * Checks if user has selected a folder.
@@ -255,11 +202,6 @@ export function hasLibraryRole(context) {
255
202
  const library = context.selection.library;
256
203
  return library ? !!library.entry?.role : false;
257
204
  }
258
- /**
259
- * Checks if the selected library has no **role** property defined.
260
- * JSON ref: `app.selection.hasNoLibraryRole`
261
- */
262
- export const hasNoLibraryRole = (context) => !hasLibraryRole(context);
263
205
  /**
264
206
  * Checks if user has selected a file.
265
207
  * JSON ref: `app.selection.file`
@@ -351,52 +293,17 @@ export function canUploadVersion(context) {
351
293
  }
352
294
  return [
353
295
  hasFileSelected(context),
354
- navigation.isNotTrashcan(context),
296
+ !navigation.isTrashcan(context),
355
297
  isWriteLocked(context) ? isUserWriteLockOwner(context) : canUpdateSelectedNode(context)
356
298
  ].every(Boolean);
357
299
  }
358
- /**
359
- * Checks if user has trashcan item selected.
360
- * JSON ref: `isTrashcanItemSelected`
361
- *
362
- * @param context Rule execution context
363
- */
364
- export const isTrashcanItemSelected = (context) => [navigation.isTrashcan(context), hasSelection(context)].every(Boolean);
365
- /**
366
- * Checks if user can view the file.
367
- * JSON ref: `canViewFile`
368
- *
369
- * @param context Rule execution context
370
- */
371
- export const canViewFile = (context) => [hasFileSelected(context), navigation.isNotTrashcan(context)].every(Boolean);
372
- /**
373
- * Checks if user can **Leave** selected library.
374
- * JSON ref: `canLeaveLibrary`
375
- *
376
- * @param context Rule execution context
377
- */
378
- export const canLeaveLibrary = (context) => [hasLibrarySelected(context), hasLibraryRole(context)].every(Boolean);
379
300
  /**
380
301
  * Checks if user can toggle shared link mode.
381
302
  * JSON ref: `canToggleSharedLink`
382
303
  *
383
304
  * @param context Rule execution context
384
305
  */
385
- export const canToggleSharedLink = (context) => [hasFileSelected(context), [canShareFile(context), isShared(context)].some(Boolean)].every(Boolean);
386
- /**
387
- * Checks if user can show **Info Drawer** for the selected node.
388
- * JSON ref: `canShowInfoDrawer`
389
- *
390
- * @param context Rule execution context
391
- */
392
- export const canShowInfoDrawer = (context) => [hasSelection(context), navigation.isNotLibraries(context), navigation.isNotTrashcan(context)].every(Boolean);
393
- /**
394
- * Checks if user can manage file versions for the selected node.
395
- * JSON ref: `canManageFileVersions`
396
- *
397
- * @param context Rule execution context
398
- */
399
- export const canManageFileVersions = (context) => [hasFileSelected(context), navigation.isNotTrashcan(context), !hasLockedFiles(context)].every(Boolean);
306
+ export const canToggleSharedLink = (context) => [canShareFile(context), isShared(context)].some(Boolean);
400
307
  /**
401
308
  * Checks if user can edit aspects for the selected node.
402
309
  * JSON ref: `canEditAspects`
@@ -407,24 +314,10 @@ export const canEditAspects = (context) => [
407
314
  !isMultiselection(context),
408
315
  canUpdateSelectedNode(context),
409
316
  !isWriteLocked(context),
410
- navigation.isNotTrashcan(context),
317
+ !navigation.isTrashcan(context),
411
318
  repository.isMajorVersionAvailable(context, '7')
412
319
  ].every(Boolean);
413
- export const canShowExpand = (context) => [!navigation.isLibraries(context), !navigation.isDetails(context)].every(Boolean);
414
- /**
415
- * Checks if user can manage permissions for the selected node.
416
- * JSON ref: `canManagePermissions`
417
- *
418
- * @param context Rule execution context
419
- */
420
- export const canManagePermissions = (context) => [canUpdateSelectedNode(context), navigation.isNotTrashcan(context), !isSmartFolder(context), !isMultiselection(context)].every(Boolean);
421
- /**
422
- * Checks if user can toggle **Edit Offline** mode for selected node.
423
- * JSON ref: `canToggleEditOffline`
424
- *
425
- * @param context Rule execution context
426
- */
427
- export const canToggleEditOffline = (context) => [hasFileSelected(context), navigation.isNotTrashcan(context), canLockFile(context) || canUnlockFile(context)].every(Boolean);
320
+ export const canToggleFileLock = (context) => [canLockFile(context) || canUnlockFile(context)].some(Boolean);
428
321
  /**
429
322
  * @deprecated Uses workarounds for for recent files and search api issues.
430
323
  * Checks if user can toggle **Favorite** state for a node.
@@ -447,20 +340,7 @@ export const canShowLogout = (context) => !context.withCredentials;
447
340
  *
448
341
  * @param context Rule execution context
449
342
  */
450
- export const isLibraryManager = (context) => hasLibrarySelected(context) && (context.selection.library?.entry.role === 'SiteManager' || isAdmin(context));
451
- /**
452
- * Checks if the preview button for search results can be showed
453
- * JSON ref: `canInfoPreview`
454
- *
455
- * @param context Rule execution context
456
- */
457
- export const canInfoPreview = (context) => {
458
- const isSearchResult = navigation.isSearchResults(context);
459
- const isNotMultiselect = !isMultiselection(context);
460
- const isFileSelected = !hasFolderSelected(context);
461
- const isPreview = !navigation.isPreview(context);
462
- return isSearchResult && isNotMultiselect && isFileSelected && isPreview;
463
- };
343
+ export const isLibraryManager = (context) => context.selection.library?.entry.role === 'SiteManager' || isAdmin(context);
464
344
  /**
465
345
  * Checks if the file can be opened with MS Office
466
346
  * JSON ref: `aos.canOpenWithOffice`
@@ -528,5 +408,5 @@ export const canDisplayKnowledgeRetrievalButton = (context) => context.appConfig
528
408
  navigation.isSharedFiles(context) ||
529
409
  navigation.isRecentFiles(context) ||
530
410
  navigation.isFavorites(context) ||
531
- ((navigation.isSearchResults(context) || navigation.isLibraryContent(context)) && navigation.isNotLibraries(context)));
532
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLnJ1bGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYWNhLXNoYXJlZC9ydWxlcy9zcmMvYXBwLnJ1bGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBSUgsT0FBTyxLQUFLLFVBQVUsTUFBTSxvQkFBb0IsQ0FBQztBQUNqRCxPQUFPLEtBQUssVUFBVSxNQUFNLG9CQUFvQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFdkMsb0JBQW9CO0FBQ3BCLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHO0lBQ2pDLEdBQUcsRUFBRSxTQUFTO0lBQ2QsSUFBSSxFQUFFLFNBQVM7SUFDZixJQUFJLEVBQUUsU0FBUztJQUNmLEdBQUcsRUFBRSxTQUFTO0lBQ2QsSUFBSSxFQUFFLFNBQVM7SUFDZixJQUFJLEVBQUUsU0FBUztJQUNmLEdBQUcsRUFBRSxTQUFTO0lBQ2QsR0FBRyxFQUFFLFVBQVU7SUFDZixJQUFJLEVBQUUsVUFBVTtJQUNoQixJQUFJLEVBQUUsVUFBVTtJQUNoQixJQUFJLEVBQUUsVUFBVTtJQUNoQixHQUFHLEVBQUUsVUFBVTtJQUNmLElBQUksRUFBRSxVQUFVO0lBQ2hCLElBQUksRUFBRSxVQUFVO0lBQ2hCLElBQUksRUFBRSxVQUFVO0lBQ2hCLEdBQUcsRUFBRSxlQUFlO0lBQ3BCLElBQUksRUFBRSxlQUFlO0lBQ3JCLEdBQUcsRUFBRSxlQUFlO0lBQ3BCLElBQUksRUFBRSxlQUFlO0lBQ3JCLElBQUksRUFBRSxlQUFlO0lBQ3JCLElBQUksRUFBRSxlQUFlO0lBQ3JCLEdBQUcsRUFBRSxlQUFlO0lBQ3BCLElBQUksRUFBRSxlQUFlO0lBQ3JCLElBQUksRUFBRSxlQUFlO0lBQ3JCLElBQUksRUFBRSxlQUFlO0lBQ3JCLElBQUksRUFBRSxlQUFlO0lBQ3JCLElBQUksRUFBRSxlQUFlO0lBQ3JCLEdBQUcsRUFBRSxVQUFVO0lBQ2YsR0FBRyxFQUFFLFVBQVU7SUFDZixHQUFHLEVBQUUsVUFBVTtJQUNmLElBQUksRUFBRSxVQUFVO0lBQ2hCLElBQUksRUFBRSxVQUFVO0lBQ2hCLElBQUksRUFBRSxVQUFVO0lBQ2hCLElBQUksRUFBRSxVQUFVO0lBQ2hCLElBQUksRUFBRSxVQUFVO0lBQ2hCLElBQUksRUFBRSxVQUFVO0NBQ2pCLENBQUM7QUFFRixtQkFBbUI7QUFFbkIsTUFBTSxVQUFVLGdCQUFnQixDQUFDLFFBQWdCO0lBQy9DLElBQUksUUFBUSxFQUFFLENBQUM7UUFDYixNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFFdkUsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFPRDs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxDQUFDLE9BQXVCLEVBQVcsRUFBRTtJQUMxRSxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBbUIsd0JBQXdCLENBQUMsQ0FBQztJQUMvRSxPQUFPLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLE1BQU0sQ0FBQztBQUMxQyxDQUFDLENBQUM7QUFFRjs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQUMsT0FBdUIsRUFBVyxFQUFFLENBQ3BFLENBQUMsdUJBQXVCLENBQUMsT0FBTyxDQUFDLEVBQUUsVUFBVSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsSUFBSSxVQUFVLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLEVBQUUsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3JKOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLENBQUMsT0FBb0IsRUFBVyxFQUFFLENBQzNELENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLFVBQVUsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEVBQUUsVUFBVSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUVoSDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUFDLE9BQW9CO0lBQ2pELElBQUksWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDMUIsSUFBSSxVQUFVLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLFVBQVUsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ3pHLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNELE9BQU8sT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxPQUFvQjtJQUNwRCxJQUFJLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUM3RCxJQUFJLFVBQVUsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNwQyxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxPQUFPLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLENBQUMsT0FBb0IsRUFBVyxFQUFFLENBQzVELENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsRUFBRSxVQUFVLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7QUFFM0k7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxPQUFvQixFQUFXLEVBQUUsQ0FDcEUsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxFQUFFLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztJQUNuRyxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxFQUFFLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxFQUFFLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUV2SDs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxDQUFDLE9BQW9CLEVBQVcsRUFBRSxDQUFDLENBQUMsdUJBQXVCLENBQUMsT0FBTyxDQUFDLEVBQUUsVUFBVSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUVySjs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsUUFBUSxDQUFDLE9BQW9CO0lBQzNDLElBQUksVUFBVSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2hFLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELElBQUksVUFBVSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN6RixPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQixDQUFDLE9BQW9CO0lBQ3JELElBQUksVUFBVSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxVQUFVLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ3JHLElBQUksY0FBYyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDNUIsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsb0NBQW9DO1FBQ3BDLElBQUksVUFBVSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ3BDLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELElBQUksVUFBVSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ2xDLE9BQU8sT0FBTyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLENBQUM7UUFFRCw4QkFBOEI7UUFDOUIsSUFBSSxVQUFVLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDdEMsT0FBTyxPQUFPLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUNwRSxNQUFNLEVBQUUsNkJBQTZCO2FBQ3RDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxPQUFPLE9BQU8sQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLGVBQWUsQ0FBQyxPQUFvQjtJQUNsRCxJQUFJLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQzFCLE9BQU8sT0FBTyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNwRSxNQUFNLEVBQUUsNkJBQTZCO1NBQ3RDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxPQUFvQixFQUFXLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDO0FBRTFGOzs7R0FHRztBQUNILE1BQU0sVUFBVSxlQUFlLENBQUMsT0FBdUI7SUFDckQsSUFBSSx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLElBQUksVUFBVSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN0SCxNQUFNLEVBQUUsYUFBYSxFQUFFLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQztRQUU3QyxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ2xCLE9BQU8sT0FBTyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUM5RCxDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxPQUF1QixFQUFXLEVBQUUsQ0FDbkUsQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsRUFBRSxVQUFVLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBRXJGOzs7R0FHRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQUMsT0FBdUI7SUFDL0MsT0FBTyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDbEMsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxPQUFvQjtJQUN2RCxJQUFJLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxVQUFVLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDL0QsT0FBTyxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3ZJLENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLE9BQW9CLEVBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQztBQUUvRjs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLE9BQW9CLEVBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQztBQUVqRzs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsT0FBb0I7SUFDbkQsT0FBTyxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsVUFBVSxLQUFLLFNBQVMsQ0FBQztBQUNwRSxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FBQyxPQUFvQjtJQUNqRCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQztJQUMxQyxPQUFPLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDakQsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLENBQUMsT0FBb0IsRUFBVyxFQUFFLENBQUMsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7QUFFNUY7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLENBQUMsT0FBb0IsRUFBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDO0FBRTdGOzs7R0FHRztBQUNILE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxPQUFvQjtJQUN4RCxJQUFJLE9BQU8sQ0FBQyxTQUFTLElBQUksWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDL0MsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7UUFFckMsSUFBSSxJQUFJLEVBQUUsS0FBSyxDQUFDLE1BQU0sSUFBSSxjQUFjLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNsRCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCxPQUFPLE9BQU8sQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVELE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxPQUFvQjtJQUNuRCxJQUFJLG1CQUFtQixHQUFHLEtBQUssQ0FBQztJQUNoQyxJQUFJLE9BQU8sQ0FBQyxTQUFTLElBQUksWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDL0MsbUJBQW1CLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFDRCxPQUFPLG1CQUFtQixDQUFDO0FBQzdCLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsdUJBQXVCLENBQUMsT0FBb0I7SUFDMUQsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7SUFDckMsSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUNYLE9BQU87UUFDTCwrQkFBK0I7UUFDL0IsVUFBVSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxPQUFPLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FDdkYsQ0FBQztJQUNKLENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUFDLE9BQW9CO0lBQ2pELElBQUksT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUM5QixPQUFPLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQzNDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUN2QixPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7WUFFRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUMsYUFBYSxDQUFDLEtBQUssZ0JBQWdCLENBQUM7UUFDNUYsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLENBQUMsT0FBb0IsRUFBVyxFQUFFLENBQzdELENBQUMsQ0FBQyxDQUNBLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsQ0FBQyxhQUFhLENBQUMsS0FBSyxZQUFZO0lBQzdFLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsQ0FBQyxhQUFhLENBQUMsS0FBSyxnQkFBZ0IsQ0FDbEYsQ0FBQztBQUVKOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLE9BQW9CLEVBQVcsRUFBRSxDQUNwRSxhQUFhLENBQUMsT0FBTyxDQUFDO0lBQ3RCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDO0lBQ3hELE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBRSxLQUFLLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO0FBRXJGOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxDQUFDLE9BQW9CLEVBQVcsRUFBRSxDQUFDLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxJQUFJLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBRXhIOzs7R0FHRztBQUNILE1BQU0sVUFBVSxhQUFhLENBQUMsT0FBb0I7SUFDaEQsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7SUFDbkMsT0FBTyxhQUFhLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQ3pILENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsT0FBb0I7SUFDbkQsSUFBSSxVQUFVLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLFVBQVUsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUN6RSxPQUFPLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsT0FBTztRQUNMLGVBQWUsQ0FBQyxPQUFPLENBQUM7UUFDeEIsVUFBVSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUM7UUFDakMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDO0tBQ3hGLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ25CLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLENBQUMsT0FBb0IsRUFBVyxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUVoSjs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxDQUFDLE9BQW9CLEVBQVcsRUFBRSxDQUFDLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxFQUFFLFVBQVUsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7QUFFM0k7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsQ0FBQyxPQUFvQixFQUFXLEVBQUUsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxFQUFFLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUV4STs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLENBQUMsT0FBb0IsRUFBVyxFQUFFLENBQ25FLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUV0Rzs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQUMsT0FBb0IsRUFBVyxFQUFFLENBQ2pFLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLFVBQVUsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLEVBQUUsVUFBVSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUVoSDs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLENBQUMsT0FBb0IsRUFBVyxFQUFFLENBQ3JFLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxFQUFFLFVBQVUsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7QUFFekc7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxPQUFvQixFQUFXLEVBQUUsQ0FDOUQ7SUFDRSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztJQUMxQixxQkFBcUIsQ0FBQyxPQUFPLENBQUM7SUFDOUIsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDO0lBQ3ZCLFVBQVUsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDO0lBQ2pDLFVBQVUsQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDO0NBQ2pELENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBRW5CLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxDQUFDLE9BQW9CLEVBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUVsSjs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLENBQUMsT0FBb0IsRUFBVyxFQUFFLENBQ3BFLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLEVBQUUsVUFBVSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBRTFJOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxPQUFvQixFQUFXLEVBQUUsQ0FDcEUsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLEVBQUUsVUFBVSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsRUFBRSxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBRS9IOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLE9BQW9CLEVBQVcsRUFBRSxDQUNqRTtJQUNFLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxFQUFFLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUNuRSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEVBQUUsVUFBVSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsRUFBRSxVQUFVLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxFQUFFLFVBQVUsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQy9JLE9BQU8sQ0FDUjtDQUNGLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBRW5COzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLENBQUMsT0FBdUIsRUFBVyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDO0FBRTVGOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxPQUFvQixFQUFXLEVBQUUsQ0FDaEUsa0JBQWtCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsSUFBSSxLQUFLLGFBQWEsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUUvRzs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxDQUFDLE9BQW9CLEVBQVcsRUFBRTtJQUM5RCxNQUFNLGNBQWMsR0FBRyxVQUFVLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzNELE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNwRCxNQUFNLGNBQWMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ25ELE1BQU0sU0FBUyxHQUFHLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUVqRCxPQUFPLGNBQWMsSUFBSSxnQkFBZ0IsSUFBSSxjQUFjLElBQUksU0FBUyxDQUFDO0FBQzNFLENBQUMsQ0FBQztBQUVGOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLGlCQUFpQixDQUFDLE9BQXVCO0lBQ3ZELE1BQU0sSUFBSSxHQUFHLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQW1CLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUM7SUFFdEYsSUFBSSxJQUFJLEtBQUssTUFBTSxFQUFFLENBQUM7UUFDcEIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsSUFBSSxPQUFPLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRSxVQUFVLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztRQUNyRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxJQUFJLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxDQUFDO1FBQ3hCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDO0lBRW5DLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDakIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsTUFBTSxTQUFTLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwRCxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztRQUNsRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUMzQixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDeEIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsS0FBSyxZQUFZLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLEtBQUssZ0JBQWdCLEVBQUUsQ0FBQztRQUN2SCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN4RCxJQUFJLFNBQVMsSUFBSSxTQUFTLENBQUMsRUFBRSxLQUFLLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDckQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsOEJBQThCO0lBQzlCLElBQUksT0FBTyxDQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUUsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDbkQsaURBQWlEO1FBQ2pELElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsNkJBQTZCLENBQUMsRUFBRSxDQUFDO1lBQzdELE9BQU8sT0FBTyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQ2pELE1BQU0sRUFBRSw2QkFBNkI7YUFDdEMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLE9BQU8sQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDckQsQ0FBQztBQUVELE1BQU0sVUFBVSxhQUFhLENBQUMsT0FBb0I7SUFDaEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFDaEMsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7UUFDckMsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDMUIsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBQ0QsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxXQUFXLElBQUksRUFBRSxDQUFDO1FBQ2xELE9BQU8sV0FBVyxDQUFDLFFBQVEsQ0FBQyw2QkFBNkIsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsNkJBQTZCLENBQUMsQ0FBQztJQUNwSCxDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsT0FBdUIsRUFBVyxFQUFFLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMscUJBQXFCLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFFdkgsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxPQUF1QixFQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUVuSSxNQUFNLENBQUMsTUFBTSxrQ0FBa0MsR0FBRyxDQUFDLE9BQXVCLEVBQVcsRUFBRSxDQUNyRixPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxtQ0FBbUMsRUFBRSxLQUFLLENBQUM7SUFDakUsQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQztRQUNsQyxVQUFVLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQztRQUNqQyxVQUFVLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQztRQUNqQyxVQUFVLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQztRQUMvQixDQUFDLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsSUFBSSxVQUFVLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxVQUFVLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogQ29weXJpZ2h0IMKpIDIwMDUtMjAyNSBIeWxhbmQgU29mdHdhcmUsIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIEFsZnJlc2NvIEV4YW1wbGUgQ29udGVudCBBcHBsaWNhdGlvblxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBBbGZyZXNjbyBFeGFtcGxlIENvbnRlbnQgQXBwbGljYXRpb24uXG4gKiBJZiB0aGUgc29mdHdhcmUgd2FzIHB1cmNoYXNlZCB1bmRlciBhIHBhaWQgQWxmcmVzY28gbGljZW5zZSwgdGhlIHRlcm1zIG9mXG4gKiB0aGUgcGFpZCBsaWNlbnNlIGFncmVlbWVudCB3aWxsIHByZXZhaWwuIE90aGVyd2lzZSwgdGhlIHNvZnR3YXJlIGlzXG4gKiBwcm92aWRlZCB1bmRlciB0aGUgZm9sbG93aW5nIG9wZW4gc291cmNlIGxpY2Vuc2UgdGVybXM6XG4gKlxuICogVGhlIEFsZnJlc2NvIEV4YW1wbGUgQ29udGVudCBBcHBsaWNhdGlvbiBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuICpcbiAqIFRoZSBBbGZyZXNjbyBFeGFtcGxlIENvbnRlbnQgQXBwbGljYXRpb24gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGVcbiAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICogZnJvbSBIeWxhbmQgU29mdHdhcmUuIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiAqL1xuXG5pbXBvcnQgeyBBcHBDb25maWdTZXJ2aWNlIH0gZnJvbSAnQGFsZnJlc2NvL2FkZi1jb3JlJztcbmltcG9ydCB7IFJ1bGVDb250ZXh0IH0gZnJvbSAnQGFsZnJlc2NvL2FkZi1leHRlbnNpb25zJztcbmltcG9ydCAqIGFzIG5hdmlnYXRpb24gZnJvbSAnLi9uYXZpZ2F0aW9uLnJ1bGVzJztcbmltcG9ydCAqIGFzIHJlcG9zaXRvcnkgZnJvbSAnLi9yZXBvc2l0b3J5LnJ1bGVzJztcbmltcG9ydCB7IGlzQWRtaW4gfSBmcm9tICcuL3VzZXIucnVsZXMnO1xuXG4vKiBjc3BlbGw6ZGlzYWJsZSAqL1xuZXhwb3J0IGNvbnN0IHN1cHBvcnRlZEV4dGVuc2lvbnMgPSB7XG4gIGRvYzogJ21zLXdvcmQnLFxuICBkb2N4OiAnbXMtd29yZCcsXG4gIGRvY206ICdtcy13b3JkJyxcbiAgZG90OiAnbXMtd29yZCcsXG4gIGRvdHg6ICdtcy13b3JkJyxcbiAgZG90bTogJ21zLXdvcmQnLFxuICBydGY6ICdtcy13b3JkJyxcbiAgeGxzOiAnbXMtZXhjZWwnLFxuICB4bHN4OiAnbXMtZXhjZWwnLFxuICB4bHNiOiAnbXMtZXhjZWwnLFxuICB4bHNtOiAnbXMtZXhjZWwnLFxuICB4bHQ6ICdtcy1leGNlbCcsXG4gIHhsdHg6ICdtcy1leGNlbCcsXG4gIHhsdG06ICdtcy1leGNlbCcsXG4gIHhsYW06ICdtcy1leGNlbCcsXG4gIHBwdDogJ21zLXBvd2VycG9pbnQnLFxuICBwcHR4OiAnbXMtcG93ZXJwb2ludCcsXG4gIHBvdDogJ21zLXBvd2VycG9pbnQnLFxuICBwb3R4OiAnbXMtcG93ZXJwb2ludCcsXG4gIHBvdG06ICdtcy1wb3dlcnBvaW50JyxcbiAgcHB0bTogJ21zLXBvd2VycG9pbnQnLFxuICBwcHM6ICdtcy1wb3dlcnBvaW50JyxcbiAgcHBzeDogJ21zLXBvd2VycG9pbnQnLFxuICBwcGFtOiAnbXMtcG93ZXJwb2ludCcsXG4gIHBwc206ICdtcy1wb3dlcnBvaW50JyxcbiAgc2xkeDogJ21zLXBvd2VycG9pbnQnLFxuICBzbGRtOiAnbXMtcG93ZXJwb2ludCcsXG4gIHZzZDogJ21zLXZpc2lvJyxcbiAgdnNzOiAnbXMtdmlzaW8nLFxuICB2c3Q6ICdtcy12aXNpbycsXG4gIHZzZHg6ICdtcy12aXNpbycsXG4gIHZzZG06ICdtcy12aXNpbycsXG4gIHZzc3g6ICdtcy12aXNpbycsXG4gIHZzc206ICdtcy12aXNpbycsXG4gIHZzdHg6ICdtcy12aXNpbycsXG4gIHZzdG06ICdtcy12aXNpbydcbn07XG5cbi8qIGNzcGVsbDplbmFibGUgKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbGVFeHRlbnNpb24oZmlsZU5hbWU6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICBpZiAoZmlsZU5hbWUpIHtcbiAgICBjb25zdCBtYXRjaCA9IGZpbGVOYW1lLnRvTG93ZXJDYXNlKCkubWF0Y2goL1xcLihbXlxcLi9cXD9cXCNdKykoJHxcXD98XFwjKS8pO1xuXG4gICAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMV0gOiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWNhUnVsZUNvbnRleHQgZXh0ZW5kcyBSdWxlQ29udGV4dCB7XG4gIHdpdGhDcmVkZW50aWFsczogYm9vbGVhbjtcbiAgYXBwQ29uZmlnOiBBcHBDb25maWdTZXJ2aWNlO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgY29udGVudCBwbHVnaW4gaXMgZW5hYmxlZC5cbiAqIEpTT04gcmVmOiBgYXBwLmlzQ29udGVudFNlcnZpY2VFbmFibGVkYFxuICovXG5leHBvcnQgY29uc3QgaXNDb250ZW50U2VydmljZUVuYWJsZWQgPSAoY29udGV4dDogQWNhUnVsZUNvbnRleHQpOiBib29sZWFuID0+IHtcbiAgY29uc3QgZmxhZyA9IGNvbnRleHQuYXBwQ29uZmlnLmdldDxib29sZWFuIHwgc3RyaW5nPigncGx1Z2lucy5jb250ZW50U2VydmljZScpO1xuICByZXR1cm4gZmxhZyA9PT0gdHJ1ZSB8fCBmbGFnID09PSAndHJ1ZSc7XG59O1xuXG4vKipcbiAqIENoZWNrcyBpZiB1cGxvYWQgYWN0aW9uIGlzIHN1cHBvcnRlZCBmb3IgdGhlIGdpdmVuIGNvbnRleHRcbiAqIEpTT04gcmVmOiBgYXBwLmlzVXBsb2FkU3VwcG9ydGVkYFxuICpcbiAqIEBwYXJhbSBjb250ZXh0IFJ1bGUgZXhlY3V0aW9uIGNvbnRleHRcbiAqL1xuZXhwb3J0IGNvbnN0IGlzVXBsb2FkU3VwcG9ydGVkID0gKGNvbnRleHQ6IEFjYVJ1bGVDb250ZXh0KTogYm9vbGVhbiA9PlxuICBbaXNDb250ZW50U2VydmljZUVuYWJsZWQoY29udGV4dCksIG5hdmlnYXRpb24uaXNQZXJzb25hbEZpbGVzKGNvbnRleHQpIHx8IG5hdmlnYXRpb24uaXNMaWJyYXJ5Q29udGVudChjb250ZXh0KSwgY2FuVXBsb2FkKGNvbnRleHQpXS5ldmVyeShCb29sZWFuKTtcbi8qKlxuICogQ2hlY2tzIGlmIHVzZXIgY2FuIGNvcHkgc2VsZWN0ZWQgbm9kZS5cbiAqIEpTT04gcmVmOiBgYXBwLmNhbkNvcHlOb2RlYFxuICpcbiAqIEBwYXJhbSBjb250ZXh0IFJ1bGUgZXhlY3V0aW9uIGNvbnRleHRcbiAqL1xuZXhwb3J0IGNvbnN0IGNhbkNvcHlOb2RlID0gKGNvbnRleHQ6IFJ1bGVDb250ZXh0KTogYm9vbGVhbiA9PlxuICBbaGFzU2VsZWN0aW9uKGNvbnRleHQpLCBuYXZpZ2F0aW9uLmlzTm90VHJhc2hjYW4oY29udGV4dCksIG5hdmlnYXRpb24uaXNOb3RMaWJyYXJpZXMoY29udGV4dCldLmV2ZXJ5KEJvb2xlYW4pO1xuXG4vKipcbiAqIENoZWNrcyBpZiB1c2VyIGNhbiBtYXJrIHNlbGVjdGVkIG5vZGVzIGFzICoqRmF2b3JpdGUqKi5cbiAqIEpTT04gcmVmOiBgYXBwLnNlbGVjdGlvbi5jYW5BZGRGYXZvcml0ZWBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhbkFkZEZhdm9yaXRlKGNvbnRleHQ6IFJ1bGVDb250ZXh0KTogYm9vbGVhbiB7XG4gIGlmIChoYXNTZWxlY3Rpb24oY29udGV4dCkpIHtcbiAgICBpZiAobmF2aWdhdGlvbi5pc0Zhdm9yaXRlcyhjb250ZXh0KSB8fCBuYXZpZ2F0aW9uLmlzTGlicmFyaWVzKGNvbnRleHQpIHx8IG5hdmlnYXRpb24uaXNUcmFzaGNhbihjb250ZXh0KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gY29udGV4dC5zZWxlY3Rpb24ubm9kZXMuc29tZSgobm9kZSkgPT4gIW5vZGUuZW50cnkuaXNGYXZvcml0ZSk7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB1c2VyIGNhbiB1bi1tYXJrIHNlbGVjdGVkIG5vZGVzIGFzICoqRmF2b3JpdGUqKi5cbiAqIEpTT04gcmVmOiBgYXBwLnNlbGVjdGlvbi5jYW5SZW1vdmVGYXZvcml0ZWBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhblJlbW92ZUZhdm9yaXRlKGNvbnRleHQ6IFJ1bGVDb250ZXh0KTogYm9vbGVhbiB7XG4gIGlmIChoYXNTZWxlY3Rpb24oY29udGV4dCkgJiYgIW5hdmlnYXRpb24uaXNUcmFzaGNhbihjb250ZXh0KSkge1xuICAgIGlmIChuYXZpZ2F0aW9uLmlzRmF2b3JpdGVzKGNvbnRleHQpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRleHQuc2VsZWN0aW9uLm5vZGVzLmV2ZXJ5KChub2RlKSA9PiBub2RlLmVudHJ5LmlzRmF2b3JpdGUpO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdXNlciBjYW4gc2hhcmUgc2VsZWN0ZWQgZmlsZS5cbiAqIEpTT04gcmVmOiBgYXBwLnNlbGVjdGlvbi5maWxlLmNhblNoYXJlYFxuICovXG5leHBvcnQgY29uc3QgY2FuU2hhcmVGaWxlID0gKGNvbnRleHQ6IFJ1bGVDb250ZXh0KTogYm9vbGVhbiA9PlxuICBbY29udGV4dC5zZWxlY3Rpb24uZmlsZSwgbmF2aWdhdGlvbi5pc05vdFRyYXNoY2FuKGNvbnRleHQpLCByZXBvc2l0b3J5Lmhhc1F1aWNrU2hhcmVFbmFibGVkKGNvbnRleHQpLCAhaXNTaGFyZWQoY29udGV4dCldLmV2ZXJ5KEJvb2xlYW4pO1xuXG4vKipcbiAqIENoZWNrcyBpZiB1c2VyIGNhbiBwZXJmb3JtIFwiSm9pblwiIG9yIFwiQ2FuY2VsIEpvaW4gUmVxdWVzdFwiIG9uIGEgbGlicmFyeS5cbiAqIEpTT04gcmVmOiBgY2FuVG9nZ2xlSm9pbkxpYnJhcnlgXG4gKi9cbmV4cG9ydCBjb25zdCBjYW5Ub2dnbGVKb2luTGlicmFyeSA9IChjb250ZXh0OiBSdWxlQ29udGV4dCk6IGJvb2xlYW4gPT5cbiAgW2hhc0xpYnJhcnlTZWxlY3RlZChjb250ZXh0KSwgIWlzUHJpdmF0ZUxpYnJhcnkoY29udGV4dCksIGhhc05vTGlicmFyeVJvbGUoY29udGV4dCldLmV2ZXJ5KEJvb2xlYW4pIHx8XG4gIFtoYXNMaWJyYXJ5U2VsZWN0ZWQoY29udGV4dCksIGlzUHJpdmF0ZUxpYnJhcnkoY29udGV4dCksIGhhc05vTGlicmFyeVJvbGUoY29udGV4dCksIGlzQWRtaW4oY29udGV4dCldLmV2ZXJ5KEJvb2xlYW4pO1xuXG4vKipcbiAqIENoZWNrcyBpZiB1c2VyIGNhbiBlZGl0IHRoZSBzZWxlY3RlZCBmb2xkZXIuXG4gKiBKU09OIHJlZjogYGNhbkVkaXRGb2xkZXJgXG4gKlxuICogQHBhcmFtIGNvbnRleHQgUnVsZSBleGVjdXRpb24gY29udGV4dFxuICovXG5leHBvcnQgY29uc3QgY2FuRWRpdEZvbGRlciA9IChjb250ZXh0OiBSdWxlQ29udGV4dCk6IGJvb2xlYW4gPT4gW2NhblVwZGF0ZVNlbGVjdGVkRm9sZGVyKGNvbnRleHQpLCBuYXZpZ2F0aW9uLmlzTm90VHJhc2hjYW4oY29udGV4dCldLmV2ZXJ5KEJvb2xlYW4pO1xuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgc2VsZWN0ZWQgZmlsZSBpcyBhbHJlYWR5IHNoYXJlZC5cbiAqIEpTT04gcmVmOiBgYXBwLnNlbGVjdGlvbi5maWxlLmlzU2hhcmVkYFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTaGFyZWQoY29udGV4dDogUnVsZUNvbnRleHQpOiBib29sZWFuIHtcbiAgaWYgKG5hdmlnYXRpb24uaXNTaGFyZWRGaWxlcyhjb250ZXh0KSAmJiBjb250ZXh0LnNlbGVjdGlvbi5maWxlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAobmF2aWdhdGlvbi5pc05vdFRyYXNoY2FuKGNvbnRleHQpICYmIGhhc1NlbGVjdGlvbihjb250ZXh0KSAmJiBjb250ZXh0LnNlbGVjdGlvbi5maWxlKSB7XG4gICAgcmV0dXJuICEhY29udGV4dC5zZWxlY3Rpb24uZmlsZS5lbnRyeT8ucHJvcGVydGllcz8uWydxc2hhcmU6c2hhcmVkSWQnXTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdXNlciBjYW4gZGVsZXRlIHNlbGVjdGVkIG5vZGVzLlxuICogSlNPTiByZWY6IGBhcHAuc2VsZWN0aW9uLmNhbkRlbGV0ZWBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhbkRlbGV0ZVNlbGVjdGlvbihjb250ZXh0OiBSdWxlQ29udGV4dCk6IGJvb2xlYW4ge1xuICBpZiAobmF2aWdhdGlvbi5pc05vdFRyYXNoY2FuKGNvbnRleHQpICYmIG5hdmlnYXRpb24uaXNOb3RMaWJyYXJpZXMoY29udGV4dCkgJiYgaGFzU2VsZWN0aW9uKGNvbnRleHQpKSB7XG4gICAgaWYgKGhhc0xvY2tlZEZpbGVzKGNvbnRleHQpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gdGVtcCB3b3JrYXJvdW5kIGZvciBGYXZvcml0ZXMgYXBpXG4gICAgaWYgKG5hdmlnYXRpb24uaXNGYXZvcml0ZXMoY29udGV4dCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChuYXZpZ2F0aW9uLmlzUHJldmlldyhjb250ZXh0KSkge1xuICAgICAgcmV0dXJuIGNvbnRleHQucGVybWlzc2lvbnMuY2hlY2soY29udGV4dC5zZWxlY3Rpb24ubm9kZXMsIFsnZGVsZXRlJ10pO1xuICAgIH1cblxuICAgIC8vIHdvcmthcm91bmQgZm9yIFNoYXJlZCBGaWxlc1xuICAgIGlmIChuYXZpZ2F0aW9uLmlzU2hhcmVkRmlsZXMoY29udGV4dCkpIHtcbiAgICAgIHJldHVybiBjb250ZXh0LnBlcm1pc3Npb25zLmNoZWNrKGNvbnRleHQuc2VsZWN0aW9uLm5vZGVzLCBbJ2RlbGV0ZSddLCB7XG4gICAgICAgIHRhcmdldDogJ2FsbG93YWJsZU9wZXJhdGlvbnNPblRhcmdldCdcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBjb250ZXh0LnBlcm1pc3Npb25zLmNoZWNrKGNvbnRleHQuc2VsZWN0aW9uLm5vZGVzLCBbJ2RlbGV0ZSddKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHVzZXIgY2FuIHVuLXNoYXJlIHNlbGVjdGVkIG5vZGVzLlxuICogSlNPTiByZWY6IGBhcHAuc2VsZWN0aW9uLmNhblVuc2hhcmVgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYW5VbnNoYXJlTm9kZXMoY29udGV4dDogUnVsZUNvbnRleHQpOiBib29sZWFuIHtcbiAgaWYgKGhhc1NlbGVjdGlvbihjb250ZXh0KSkge1xuICAgIHJldHVybiBjb250ZXh0LnBlcm1pc3Npb25zLmNoZWNrKGNvbnRleHQuc2VsZWN0aW9uLm5vZGVzLCBbJ2RlbGV0ZSddLCB7XG4gICAgICB0YXJnZXQ6ICdhbGxvd2FibGVPcGVyYXRpb25zT25UYXJnZXQnXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB1c2VyIHNlbGVjdGVkIGFueXRoaW5nLlxuICogSlNPTiByZWY6IGBhcHAuc2VsZWN0aW9uLm5vdEVtcHR5YFxuICovXG5leHBvcnQgY29uc3QgaGFzU2VsZWN0aW9uID0gKGNvbnRleHQ6IFJ1bGVDb250ZXh0KTogYm9vbGVhbiA9PiAhY29udGV4dC5zZWxlY3Rpb24uaXNFbXB0eTtcblxuLyoqXG4gKiBDaGVja3MgaWYgdXNlciBjYW4gY3JlYXRlIGEgbmV3IGZvbGRlciB3aXRoIGN1cnJlbnQgcGF0aC5cbiAqIEpTT04gcmVmOiBgYXBwLm5hdmlnYXRpb24uZm9sZGVyLmNhbkNyZWF0ZWBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhbkNyZWF0ZUZvbGRlcihjb250ZXh0OiBBY2FSdWxlQ29udGV4dCk6IGJvb2xlYW4ge1xuICBpZiAoaXNDb250ZW50U2VydmljZUVuYWJsZWQoY29udGV4dCkgJiYgKG5hdmlnYXRpb24uaXNQZXJzb25hbEZpbGVzKGNvbnRleHQpIHx8IG5hdmlnYXRpb24uaXNMaWJyYXJ5Q29udGVudChjb250ZXh0KSkpIHtcbiAgICBjb25zdCB7IGN1cnJlbnRGb2xkZXIgfSA9IGNvbnRleHQubmF2aWdhdGlvbjtcblxuICAgIGlmIChjdXJyZW50Rm9sZGVyKSB7XG4gICAgICByZXR1cm4gY29udGV4dC5wZXJtaXNzaW9ucy5jaGVjayhjdXJyZW50Rm9sZGVyLCBbJ2NyZWF0ZSddKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB1c2VyIGNhbiBjcmVhdGUgYSBMaWJyYXJ5XG4gKiBKU09OIHJlZjogYGFwcC5jYW5DcmVhdGVMaWJyYXJ5YFxuICpcbiAqIEBwYXJhbSBjb250ZXh0IFJ1bGUgZXhlY3V0aW9uIGNvbnRleHRcbiAqL1xuZXhwb3J0IGNvbnN0IGNhbkNyZWF0ZUxpYnJhcnkgPSAoY29udGV4dDogQWNhUnVsZUNvbnRleHQpOiBib29sZWFuID0+XG4gIFtpc0NvbnRlbnRTZXJ2aWNlRW5hYmxlZChjb250ZXh0KSwgbmF2aWdhdGlvbi5pc0xpYnJhcmllcyhjb250ZXh0KV0uZXZlcnkoQm9vbGVhbik7XG5cbi8qKlxuICogQ2hlY2tzIGlmIHVzZXIgY2FuIHVwbG9hZCBjb250ZW50IHRvIGN1cnJlbnQgZm9sZGVyLlxuICogSlNPTiByZWY6IGBhcHAubmF2aWdhdGlvbi5mb2xkZXIuY2FuVXBsb2FkYFxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FuVXBsb2FkKGNvbnRleHQ6IEFjYVJ1bGVDb250ZXh0KTogYm9vbGVhbiB7XG4gIHJldHVybiBjYW5DcmVhdGVGb2xkZXIoY29udGV4dCk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHVzZXIgY2FuIGRvd25sb2FkIHNlbGVjdGVkIG5vZGVzIChlaXRoZXIgZmlsZXMgb3IgZm9sZGVycykuXG4gKiBKU09OIHJlZjogYGFwcC5zZWxlY3Rpb24uY2FuRG93bmxvYWRgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYW5Eb3dubG9hZFNlbGVjdGlvbihjb250ZXh0OiBSdWxlQ29udGV4dCk6IGJvb2xlYW4ge1xuICBpZiAoaGFzU2VsZWN0aW9uKGNvbnRleHQpICYmIG5hdmlnYXRpb24uaXNOb3RUcmFzaGNhbihjb250ZXh0KSkge1xuICAgIHJldHVybiBjb250ZXh0LnNlbGVjdGlvbi5ub2Rlcy5ldmVyeSgobm9kZTogYW55KSA9PiBub2RlLmVudHJ5ICYmIChub2RlLmVudHJ5LmlzRmlsZSB8fCBub2RlLmVudHJ5LmlzRm9sZGVyIHx8ICEhbm9kZS5lbnRyeS5ub2RlSWQpKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHVzZXIgaGFzIHNlbGVjdGVkIGEgZm9sZGVyLlxuICogSlNPTiByZWY6IGBhcHAuc2VsZWN0aW9uLmZvbGRlcmBcbiAqL1xuZXhwb3J0IGNvbnN0IGhhc0ZvbGRlclNlbGVjdGVkID0gKGNvbnRleHQ6IFJ1bGVDb250ZXh0KTogYm9vbGVhbiA9PiAhIWNvbnRleHQuc2VsZWN0aW9uLmZvbGRlcjtcblxuLyoqXG4gKiBDaGVja3MgaWYgdXNlciBoYXMgc2VsZWN0ZWQgYSBsaWJyYXJ5IChzaXRlKS5cbiAqIEpTT04gcmVmOiBgYXBwLnNlbGVjdGlvbi5saWJyYXJ5YFxuICovXG5leHBvcnQgY29uc3QgaGFzTGlicmFyeVNlbGVjdGVkID0gKGNvbnRleHQ6IFJ1bGVDb250ZXh0KTogYm9vbGVhbiA9PiAhIWNvbnRleHQuc2VsZWN0aW9uLmxpYnJhcnk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIHVzZXIgaGFzIHNlbGVjdGVkIGEgKipwcml2YXRlKiogbGlicmFyeSAoc2l0ZSlcbiAqIEpTT04gcmVmOiBgYXBwLnNlbGVjdGlvbi5pc1ByaXZhdGVMaWJyYXJ5YFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQcml2YXRlTGlicmFyeShjb250ZXh0OiBSdWxlQ29udGV4dCk6IGJvb2xlYW4ge1xuICByZXR1cm4gY29udGV4dC5zZWxlY3Rpb24ubGlicmFyeT8uZW50cnk/LnZpc2liaWxpdHkgPT09ICdQUklWQVRFJztcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIHNlbGVjdGVkIGxpYnJhcnkgaGFzIGEgKipyb2xlKiogcHJvcGVydHkgZGVmaW5lZC5cbiAqIEpTT04gcmVmOiBgYXBwLnNlbGVjdGlvbi5oYXNMaWJyYXJ5Um9sZWBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc0xpYnJhcnlSb2xlKGNvbnRleHQ6IFJ1bGVDb250ZXh0KTogYm9vbGVhbiB7XG4gIGNvbnN0IGxpYnJhcnkgPSBjb250ZXh0LnNlbGVjdGlvbi5saWJyYXJ5O1xuICByZXR1cm4gbGlicmFyeSA/ICEhbGlicmFyeS5lbnRyeT8ucm9sZSA6IGZhbHNlO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgc2VsZWN0ZWQgbGlicmFyeSBoYXMgbm8gKipyb2xlKiogcHJvcGVydHkgZGVmaW5lZC5cbiAqIEpTT04gcmVmOiBgYXBwLnNlbGVjdGlvbi5oYXNOb0xpYnJhcnlSb2xlYFxuICovXG5leHBvcnQgY29uc3QgaGFzTm9MaWJyYXJ5Um9sZSA9IChjb250ZXh0OiBSdWxlQ29udGV4dCk6IGJvb2xlYW4gPT4gIWhhc0xpYnJhcnlSb2xlKGNvbnRleHQpO1xuXG4vKipcbiAqIENoZWNrcyBpZiB1c2VyIGhhcyBzZWxlY3RlZCBhIGZpbGUuXG4gKiBKU09OIHJlZjogYGFwcC5zZWxlY3Rpb24uZmlsZWBcbiAqL1xuZXhwb3J0IGNvbnN0IGhhc0ZpbGVTZWxlY3RlZCA9IChjb250ZXh0OiBSdWxlQ29udGV4dCk6IGJvb2xlYW4gPT4gISFjb250ZXh0Py5zZWxlY3Rpb24/LmZpbGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIHVzZXIgY2FuIHVwZGF0ZSB0aGUgZmlyc3Qgc2VsZWN0ZWQgbm9kZS5cbiAqIEpTT04gcmVmOiBgYXBwLnNlbGVjdGlvbi5maXJzdC5jYW5VcGRhdGVgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYW5VcGRhdGVTZWxlY3RlZE5vZGUoY29udGV4dDogUnVsZUNvbnRleHQpOiBib29sZWFuIHtcbiAgaWYgKGNvbnRleHQuc2VsZWN0aW9uICYmIGhhc1NlbGVjdGlvbihjb250ZXh0KSkge1xuICAgIGNvbnN0IG5vZGUgPSBjb250ZXh0LnNlbGVjdGlvbi5maXJzdDtcblxuICAgIGlmIChub2RlPy5lbnRyeS5pc0ZpbGUgJiYgaGFzTG9ja2VkRmlsZXMoY29udGV4dCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udGV4dC5wZXJtaXNzaW9ucy5jaGVjayhub2RlLCBbJ3VwZGF0ZSddKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc011bHRpc2VsZWN0aW9uKGNvbnRleHQ6IFJ1bGVDb250ZXh0KTogYm9vbGVhbiB7XG4gIGxldCBpc011bHRpTm9kZVNlbGVjdGVkID0gZmFsc2U7XG4gIGlmIChjb250ZXh0LnNlbGVjdGlvbiAmJiBoYXNTZWxlY3Rpb24oY29udGV4dCkpIHtcbiAgICBpc011bHRpTm9kZVNlbGVjdGVkID0gY29udGV4dC5zZWxlY3Rpb24uY291bnQgPiAxO1xuICB9XG4gIHJldHVybiBpc011bHRpTm9kZVNlbGVjdGVkO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB1c2VyIGNhbiB1cGRhdGUgdGhlIGZpcnN0IHNlbGVjdGVkIGZvbGRlci5cbiAqIEpTT04gcmVmOiBgYXBwLnNlbGVjdGlvbi5mb2xkZXIuY2FuVXBkYXRlYFxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FuVXBkYXRlU2VsZWN0ZWRGb2xkZXIoY29udGV4dDogUnVsZUNvbnRleHQpOiBib29sZWFuIHtcbiAgY29uc3QgeyBmb2xkZXIgfSA9IGNvbnRleHQuc2VsZWN0aW9uO1xuICBpZiAoZm9sZGVyKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIC8vIHdvcmthcm91bmQgZm9yIEZhdm9yaXRlcyBBcGlcbiAgICAgIG5hdmlnYXRpb24uaXNGYXZvcml0ZXMoY29udGV4dCkgfHwgY29udGV4dC5wZXJtaXNzaW9ucy5jaGVjayhmb2xkZXIuZW50cnksIFsndXBkYXRlJ10pXG4gICAgKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHVzZXIgaGFzIHNlbGVjdGVkIGEgKipsb2NrZWQqKiBmaWxlIG5vZGUuXG4gKiBKU09OIHJlZjogYGFwcC5zZWxlY3Rpb24uZmlsZS5pc0xvY2tlZGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc0xvY2tlZEZpbGVzKGNvbnRleHQ6IFJ1bGVDb250ZXh0KTogYm9vbGVhbiB7XG4gIGlmIChjb250ZXh0Py5zZWxlY3Rpb24/Lm5vZGVzKSB7XG4gICAgcmV0dXJuIGNvbnRleHQuc2VsZWN0aW9uLm5vZGVzLnNvbWUoKG5vZGUpID0+IHtcbiAgICAgIGlmICghbm9kZS5lbnRyeS5pc0ZpbGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbm9kZS5lbnRyeS5pc0xvY2tlZCB8fCBub2RlLmVudHJ5LnByb3BlcnRpZXM/LlsnY206bG9ja1R5cGUnXSA9PT0gJ1JFQURfT05MWV9MT0NLJztcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIHNlbGVjdGVkIGZpbGUgaGFzICoqd3JpdGUqKiBvciAqKnJlYWQtb25seSoqIGxvY2tzIHNwZWNpZmllZC5cbiAqIEpTT04gcmVmOiBgYXBwLnNlbGVjdGlvbi5maWxlLmlzTG9ja2VkYFxuICovXG5leHBvcnQgY29uc3QgaXNXcml0ZUxvY2tlZCA9IChjb250ZXh0OiBSdWxlQ29udGV4dCk6IGJvb2xlYW4gPT5cbiAgISEoXG4gICAgY29udGV4dD8uc2VsZWN0aW9uPy5maWxlPy5lbnRyeT8ucHJvcGVydGllcz8uWydjbTpsb2NrVHlwZSddID09PSAnV1JJVEVfTE9DSycgfHxcbiAgICBjb250ZXh0Py5zZWxlY3Rpb24/LmZpbGU/LmVudHJ5Py5wcm9wZXJ0aWVzPy5bJ2NtOmxvY2tUeXBlJ10gPT09ICdSRUFEX09OTFlfTE9DSydcbiAgKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIHNlbGVjdGVkIGZpbGUgaGFzICoqd3JpdGUqKiBvciAqKnJlYWQtb25seSoqIGxvY2tzIHNwZWNpZmllZCxcbiAqIGFuZCB0aGF0IGN1cnJlbnQgdXNlciBpcyB0aGUgb3duZXIgb2YgdGhlIGxvY2suXG4gKiBKU09OIHJlZjogYGFwcC5zZWxlY3Rpb24uZmlsZS5pc0xvY2tPd25lcmBcbiAqL1xuZXhwb3J0IGNvbnN0IGlzVXNlcldyaXRlTG9ja093bmVyID0gKGNvbnRleHQ6IFJ1bGVDb250ZXh0KTogYm9vbGVhbiA9PlxuICBpc1dyaXRlTG9ja2VkKGNvbnRleHQpICYmXG4gIGNvbnRleHQuc2VsZWN0aW9uLmZpbGU/LmVudHJ5LnByb3BlcnRpZXNbJ2NtOmxvY2tPd25lciddICYmXG4gIGNvbnRleHQuc2VsZWN0aW9uLmZpbGU/LmVudHJ5LnByb3BlcnRpZXNbJ2NtOmxvY2tPd25lciddLmlkID09PSBjb250ZXh0LnByb2ZpbGUuaWQ7XG5cbi8qKlxuICogQ2hlY2tzIGlmIHVzZXIgY2FuIGxvY2sgc2VsZWN0ZWQgZmlsZS5cbiAqIEpTT04gcmVmOiBgYXBwLnNlbGVjdGlvbi5maWxlLmNhbkxvY2tgXG4gKi9cbmV4cG9ydCBjb25zdCBjYW5Mb2NrRmlsZSA9IChjb250ZXh0OiBSdWxlQ29udGV4dCk6IGJvb2xlYW4gPT4gIWlzV3JpdGVMb2NrZWQoY29udGV4dCkgJiYgY2FuVXBkYXRlU2VsZWN0ZWROb2RlKGNvbnRleHQpO1xuXG4vKipcbiAqIENoZWNrcyBpZiB1c2VyIGNhbiB1bmxvY2sgc2VsZWN0ZWQgZmlsZS5cbiAqIEpTT04gcmVmOiBgYXBwLnNlbGVjdGlvbi5maWxlLmNhblVubG9ja2BcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhblVubG9ja0ZpbGUoY29udGV4dDogUnVsZUNvbnRleHQpOiBib29sZWFuIHtcbiAgY29uc3QgeyBmaWxlIH0gPSBjb250ZXh0LnNlbGVjdGlvbjtcbiAgcmV0dXJuIGlzV3JpdGVMb2NrZWQoY29udGV4dCkgJiYgKGNvbnRleHQucGVybWlzc2lvbnMuY2hlY2soZmlsZT8uZW50cnksIFsnZGVsZXRlJ10pIHx8IGlzVXNlcldyaXRlTG9ja093bmVyKGNvbnRleHQpKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdXNlciBjYW4gdXBsb2FkIGEgbmV3IHZlcnNpb24gb2YgdGhlIGZpbGUuXG4gKiBKU09OIHJlZjogYGFwcC5zZWxlY3Rpb24uZmlsZS5jYW5VcGxvYWRWZXJzaW9uYFxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FuVXBsb2FkVmVyc2lvbihjb250ZXh0OiBSdWxlQ29udGV4dCk6IGJvb2xlYW4ge1xuICBpZiAobmF2aWdhdGlvbi5pc0Zhdm9yaXRlcyhjb250ZXh0KSB8fCBuYXZpZ2F0aW9uLmlzU2hhcmVkRmlsZXMoY29udGV4dCkpIHtcbiAgICByZXR1cm4gaGFzRmlsZVNlbGVjdGVkKGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIFtcbiAgICBoYXNGaWxlU2VsZWN0ZWQoY29udGV4dCksXG4gICAgbmF2aWdhdGlvbi5pc05vdFRyYXNoY2FuKGNvbnRleHQpLFxuICAgIGlzV3JpdGVMb2NrZWQoY29udGV4dCkgPyBpc1VzZXJXcml0ZUxvY2tPd25lcihjb250ZXh0KSA6IGNhblVwZGF0ZVNlbGVjdGVkTm9kZShjb250ZXh0KVxuICBdLmV2ZXJ5KEJvb2xlYW4pO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB1c2VyIGhhcyB0cmFzaGNhbiBpdGVtIHNlbGVjdGVkLlxuICogSlNPTiByZWY6IGBpc1RyYXNoY2FuSXRlbVNlbGVjdGVkYFxuICpcbiAqIEBwYXJhbSBjb250ZXh0IFJ1bGUgZXhlY3V0aW9uIGNvbnRleHRcbiAqL1xuZXhwb3J0IGNvbnN0IGlzVHJhc2hjYW5JdGVtU2VsZWN0ZWQgPSAoY29udGV4dDogUnVsZUNvbnRleHQpOiBib29sZWFuID0+IFtuYXZpZ2F0aW9uLmlzVHJhc2hjYW4oY29udGV4dCksIGhhc1NlbGVjdGlvbihjb250ZXh0KV0uZXZlcnkoQm9vbGVhbik7XG5cbi8qKlxuICogQ2hlY2tzIGlmIHVzZXIgY2FuIHZpZXcgdGhlIGZpbGUuXG4gKiBKU09OIHJlZjogYGNhblZpZXdGaWxlYFxuICpcbiAqIEBwYXJhbSBjb250ZXh0IFJ1bGUgZXhlY3V0aW9uIGNvbnRleHRcbiAqL1xuZXhwb3J0IGNvbnN0IGNhblZpZXdGaWxlID0gKGNvbnRleHQ6IFJ1bGVDb250ZXh0KTogYm9vbGVhbiA9PiBbaGFzRmlsZVNlbGVjdGVkKGNvbnRleHQpLCBuYXZpZ2F0aW9uLmlzTm90VHJhc2hjYW4oY29udGV4dCldLmV2ZXJ5KEJvb2xlYW4pO1xuXG4vKipcbiAqIENoZWNrcyBpZiB1c2VyIGNhbiAqKkxlYXZlKiogc2VsZWN0ZWQgbGlicmFyeS5cbiAqIEpTT04gcmVmOiBgY2FuTGVhdmVMaWJyYXJ5YFxuICpcbiAqIEBwYXJhbSBjb250ZXh0IFJ1bGUgZXhlY3V0aW9uIGNvbnRleHRcbiAqL1xuZXhwb3J0IGNvbnN0IGNhbkxlYXZlTGlicmFyeSA9IChjb250ZXh0OiBSdWxlQ29udGV4dCk6IGJvb2xlYW4gPT4gW2hhc0xpYnJhcnlTZWxlY3RlZChjb250ZXh0KSwgaGFzTGlicmFyeVJvbGUoY29udGV4dCldLmV2ZXJ5KEJvb2xlYW4pO1xuXG4vKipcbiAqIENoZWNrcyBpZiB1c2VyIGNhbiB0b2dnbGUgc2hhcmVkIGxpbmsgbW9kZS5cbiAqIEpTT04gcmVmOiBgY2FuVG9nZ2xlU2hhcmVkTGlua2BcbiAqXG4gKiBAcGFyYW0gY29udGV4dCBSdWxlIGV4ZWN1dGlvbiBjb250ZXh0XG4gKi9cbmV4cG9ydCBjb25zdCBjYW5Ub2dnbGVTaGFyZWRMaW5rID0gKGNvbnRleHQ6IFJ1bGVDb250ZXh0KTogYm9vbGVhbiA9PlxuICBbaGFzRmlsZVNlbGVjdGVkKGNvbnRleHQpLCBbY2FuU2hhcmVGaWxlKGNvbnRleHQpLCBpc1NoYXJlZChjb250ZXh0KV0uc29tZShCb29sZWFuKV0uZXZlcnkoQm9vbGVhbik7XG5cbi8qKlxuICogQ2hlY2tzIGlmIHVzZXIgY2FuIHNob3cgKipJbmZvIERyYXdlcioqIGZvciB0aGUgc2VsZWN0ZWQgbm9kZS5cbiAqIEpTT04gcmVmOiBgY2FuU2hvd0luZm9EcmF3ZXJgXG4gKlxuICogQHBhcmFtIGNvbnRleHQgUnVsZSBleGVjdXRpb24gY29udGV4dFxuICovXG5leHBvcnQgY29uc3QgY2FuU2hvd0luZm9EcmF3ZXIgPSAoY29udGV4dDogUnVsZUNvbnRleHQpOiBib29sZWFuID0+XG4gIFtoYXNTZWxlY3Rpb24oY29udGV4dCksIG5hdmlnYXRpb24uaXNOb3RMaWJyYXJpZXMoY29udGV4dCksIG5hdmlnYXRpb24uaXNOb3RUcmFzaGNhbihjb250ZXh0KV0uZXZlcnkoQm9vbGVhbik7XG5cbi8qKlxuICogQ2hlY2tzIGlmIHVzZXIgY2FuIG1hbmFnZSBmaWxlIHZlcnNpb25zIGZvciB0aGUgc2VsZWN0ZWQgbm9kZS5cbiAqIEpTT04gcmVmOiBgY2FuTWFuYWdlRmlsZVZlcnNpb25zYFxuICpcbiAqIEBwYXJhbSBjb250ZXh0IFJ1bGUgZXhlY3V0aW9uIGNvbnRleHRcbiAqL1xuZXhwb3J0IGNvbnN0IGNhbk1hbmFnZUZpbGVWZXJzaW9ucyA9IChjb250ZXh0OiBSdWxlQ29udGV4dCk6IGJvb2xlYW4gPT5cbiAgW2hhc0ZpbGVTZWxlY3RlZChjb250ZXh0KSwgbmF2aWdhdGlvbi5pc05vdFRyYXNoY2FuKGNvbnRleHQpLCAhaGFzTG9ja2VkRmlsZXMoY29udGV4dCldLmV2ZXJ5KEJvb2xlYW4pO1xuXG4vKipcbiAqIENoZWNrcyBpZiB1c2VyIGNhbiBlZGl0IGFzcGVjdHMgZm9yIHRoZSBzZWxlY3RlZCBub2RlLlxuICogSlNPTiByZWY6IGBjYW5FZGl0QXNwZWN0c2BcbiAqXG4gKiBAcGFyYW0gY29udGV4dCBSdWxlIGV4ZWN1dGlvbiBjb250ZXh0XG4gKi9cbmV4cG9ydCBjb25zdCBjYW5FZGl0QXNwZWN0cyA9IChjb250ZXh0OiBSdWxlQ29udGV4dCk6IGJvb2xlYW4gPT5cbiAgW1xuICAgICFpc011bHRpc2VsZWN0aW9uKGNvbnRleHQpLFxuICAgIGNhblVwZGF0ZVNlbGVjdGVkTm9kZShjb250ZXh0KSxcbiAgICAhaXNXcml0ZUxvY2tlZChjb250ZXh0KSxcbiAgICBuYXZpZ2F0aW9uLmlzTm90VHJhc2hjYW4oY29udGV4dCksXG4gICAgcmVwb3NpdG9yeS5pc01ham9yVmVyc2lvbkF2YWlsYWJsZShjb250ZXh0LCAnNycpXG4gIF0uZXZlcnkoQm9vbGVhbik7XG5cbmV4cG9ydCBjb25zdCBjYW5TaG93RXhwYW5kID0gKGNvbnRleHQ6IFJ1bGVDb250ZXh0KTogYm9vbGVhbiA9PiBbIW5hdmlnYXRpb24uaXNMaWJyYXJpZXMoY29udGV4dCksICFuYXZpZ2F0aW9uLmlzRGV0YWlscyhjb250ZXh0KV0uZXZlcnkoQm9vbGVhbik7XG5cbi8qKlxuICogQ2hlY2tzIGlmIHVzZXIgY2FuIG1hbmFnZSBwZXJtaXNzaW9ucyBmb3IgdGhlIHNlbGVjdGVkIG5vZGUuXG4gKiBKU09OIHJlZjogYGNhbk1hbmFnZVBlcm1pc3Npb25zYFxuICpcbiAqIEBwYXJhbSBjb250ZXh0IFJ1bGUgZXhlY3V0aW9uIGNvbnRleHRcbiAqL1xuZXhwb3J0IGNvbnN0IGNhbk1hbmFnZVBlcm1pc3Npb25zID0gKGNvbnRleHQ6IFJ1bGVDb250ZXh0KTogYm9vbGVhbiA9PlxuICBbY2FuVXBkYXRlU2VsZWN0ZWROb2RlKGNvbnRleHQpLCBuYXZpZ2F0aW9uLmlzTm90VHJhc2hjYW4oY29udGV4dCksICFpc1NtYXJ0Rm9sZGVyKGNvbnRleHQpLCAhaXNNdWx0aXNlbGVjdGlvbihjb250ZXh0KV0uZXZlcnkoQm9vbGVhbik7XG5cbi8qKlxuICogQ2hlY2tzIGlmIHVzZXIgY2FuIHRvZ2dsZSAqKkVkaXQgT2ZmbGluZSoqIG1vZGUgZm9yIHNlbGVjdGVkIG5vZGUuXG4gKiBKU09OIHJlZjogYGNhblRvZ2dsZUVkaXRPZmZsaW5lYFxuICpcbiAqIEBwYXJhbSBjb250ZXh0IFJ1bGUgZXhlY3V0aW9uIGNvbnRleHRcbiAqL1xuZXhwb3J0IGNvbnN0IGNhblRvZ2dsZUVkaXRPZmZsaW5lID0gKGNvbnRleHQ6IFJ1bGVDb250ZXh0KTogYm9vbGVhbiA9PlxuICBbaGFzRmlsZVNlbGVjdGVkKGNvbnRleHQpLCBuYXZpZ2F0aW9uLmlzTm90VHJhc2hjYW4oY29udGV4dCksIGNhbkxvY2tGaWxlKGNvbnRleHQpIHx8IGNhblVubG9ja0ZpbGUoY29udGV4dCldLmV2ZXJ5KEJvb2xlYW4pO1xuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZXMgd29ya2Fyb3VuZHMgZm9yIGZvciByZWNlbnQgZmlsZXMgYW5kIHNlYXJjaCBhcGkgaXNzdWVzLlxuICogQ2hlY2tzIGlmIHVzZXIgY2FuIHRvZ2dsZSAqKkZhdm9yaXRlKiogc3RhdGUgZm9yIGEgbm9kZS5cbiAqIEBwYXJhbSBjb250ZXh0IFJ1bGUgZXhlY3V0aW9uIGNvbnRleHRcbiAqL1xuZXhwb3J0IGNvbnN0IGNhblRvZ2dsZUZhdm9yaXRlID0gKGNvbnRleHQ6IFJ1bGVDb250ZXh0KTogYm9vbGVhbiA9PlxuICBbXG4gICAgW2NhbkFkZEZhdm9yaXRlKGNvbnRleHQpLCBjYW5SZW1vdmVGYXZvcml0ZShjb250ZXh0KV0uc29tZShCb29sZWFuKSxcbiAgICBbbmF2aWdhdGlvbi5pc1JlY2VudEZpbGVzKGNvbnRleHQpLCBuYXZpZ2F0aW9uLmlzU2hhcmVkRmlsZXMoY29udGV4dCksIG5hdmlnYXRpb24uaXNTZWFyY2hSZXN1bHRzKGNvbnRleHQpLCBuYXZpZ2F0aW9uLmlzRmF2b3JpdGVzKGNvbnRleHQpXS5zb21lKFxuICAgICAgQm9vbGVhblxuICAgIClcbiAgXS5ldmVyeShCb29sZWFuKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYXBwbGljYXRpb24gc2hvdWxkIHJlbmRlciBsb2dvdXQgb3B0aW9uLlxuICogSlNPTiByZWY6IGBjYW5TaG93TG9nb3V0YFxuICpcbiAqIEBwYXJhbSBjb250ZXh0IFJ1bGUgZXhlY3V0aW9uIGNvbnRleHRcbiAqL1xuZXhwb3J0IGNvbnN0IGNhblNob3dMb2dvdXQgPSAoY29udGV4dDogQWNhUnVsZUNvbnRleHQpOiBib29sZWFuID0+ICFjb250ZXh0LndpdGhDcmVkZW50aWFscztcblxuLyoqXG4gKiBDaGVja3MgaWYgdXNlciBpcyBsaWJyYXJ5IG1hbmFnZXJcbiAqIEpTT04gcmVmOiBgaXNMaWJyYXJ5TWFuYWdlcmBcbiAqXG4gKiBAcGFyYW0gY29udGV4dCBSdWxlIGV4ZWN1dGlvbiBjb250ZXh0XG4gKi9cbmV4cG9ydCBjb25zdCBpc0xpYnJhcnlNYW5hZ2VyID0gKGNvbnRleHQ6IFJ1bGVDb250ZXh0KTogYm9vbGVhbiA9PlxuICBoYXNMaWJyYXJ5U2VsZWN0ZWQoY29udGV4dCkgJiYgKGNvbnRleHQuc2VsZWN0aW9uLmxpYnJhcnk/LmVudHJ5LnJvbGUgPT09ICdTaXRlTWFuYWdlcicgfHwgaXNBZG1pbihjb250ZXh0KSk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBwcmV2aWV3IGJ1dHRvbiBmb3Igc2VhcmNoIHJlc3VsdHMgY2FuIGJlIHNob3dlZFxuICogSlNPTiByZWY6IGBjYW5JbmZvUHJldmlld2BcbiAqXG4gKiBAcGFyYW0gY29udGV4dCBSdWxlIGV4ZWN1dGlvbiBjb250ZXh0XG4gKi9cbmV4cG9ydCBjb25zdCBjYW5JbmZvUHJldmlldyA9IChjb250ZXh0OiBSdWxlQ29udGV4dCk6IGJvb2xlYW4gPT4ge1xuICBjb25zdCBpc1NlYXJjaFJlc3VsdCA9IG5hdmlnYXRpb24uaXNTZWFyY2hSZXN1bHRzKGNvbnRleHQpO1xuICBjb25zdCBpc05vdE11bHRpc2VsZWN0ID0gIWlzTXVsdGlzZWxlY3Rpb24oY29udGV4dCk7XG4gIGNvbnN0IGlzRmlsZVNlbGVjdGVkID0gIWhhc0ZvbGRlclNlbGVjdGVkKGNvbnRleHQpO1xuICBjb25zdCBpc1ByZXZpZXcgPSAhbmF2aWdhdGlvbi5pc1ByZXZpZXcoY29udGV4dCk7XG5cbiAgcmV0dXJuIGlzU2VhcmNoUmVzdWx0ICYmIGlzTm90TXVsdGlzZWxlY3QgJiYgaXNGaWxlU2VsZWN0ZWQgJiYgaXNQcmV2aWV3O1xufTtcblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIGZpbGUgY2FuIGJlIG9wZW5lZCB3aXRoIE1TIE9mZmljZVxuICogSlNPTiByZWY6IGBhb3MuY2FuT3BlbldpdGhPZmZpY2VgXG4gKlxuICogQHBhcmFtIGNvbnRleHQgUnVsZSBleGVjdXRpb24gY29udGV4dFxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FuT3BlbldpdGhPZmZpY2UoY29udGV4dDogQWNhUnVsZUNvbnRleHQpOiBib29sZWFuIHtcbiAgY29uc3QgZmxhZyA9IGAke2NvbnRleHQuYXBwQ29uZmlnLmdldDxib29sZWFuIHwgc3RyaW5nPigncGx1Z2lucy5hb3NQbHVnaW4nLCBmYWxzZSl9YDtcblxuICBpZiAoZmxhZyAhPT0gJ3RydWUnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKGNvbnRleHQubmF2aWdhdGlvbj8udXJsPy5zdGFydHNXaXRoKCcvdHJhc2hjYW4nKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghY29udGV4dD8uc2VsZWN0aW9uKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgeyBmaWxlIH0gPSBjb250ZXh0LnNlbGVjdGlvbjtcblxuICBpZiAoIWZpbGU/LmVudHJ5KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgZXh0ZW5zaW9uID0gZ2V0RmlsZUV4dGVuc2lvbihmaWxlLmVudHJ5Lm5hbWUpO1xuICBpZiAoIWV4dGVuc2lvbiB8fCAhc3VwcG9ydGVkRXh0ZW5zaW9uc1tleHRlbnNpb25dKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCFmaWxlLmVudHJ5LnByb3BlcnRpZXMpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoZmlsZS5lbnRyeS5pc0xvY2tlZCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChmaWxlLmVudHJ5LnByb3BlcnRpZXNbJ2NtOmxvY2tUeXBlJ10gPT09ICdXUklURV9MT0NLJyB8fCBmaWxlLmVudHJ5LnByb3BlcnRpZXNbJ2NtOmxvY2tUeXBlJ10gPT09ICdSRUFEX09OTFlfTE9DSycpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBsb2NrT3duZXIgPSBmaWxlLmVudHJ5LnByb3BlcnRpZXNbJ2NtOmxvY2tPd25lciddO1xuICBpZiAobG9ja093bmVyICYmIGxvY2tPd25lci5pZCAhPT0gY29udGV4dC5wcm9maWxlLmlkKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gd29ya2Fyb3VuZCBmb3IgU2hhcmVkIGZpbGVzXG4gIGlmIChjb250ZXh0Lm5hdmlnYXRpb24/LnVybD8uc3RhcnRzV2l0aCgnL3NoYXJlZCcpKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgIGlmIChmaWxlLmVudHJ5Lmhhc093blByb3BlcnR5KCdhbGxvd2FibGVPcGVyYXRpb25zT25UYXJnZXQnKSkge1xuICAgICAgcmV0dXJuIGNvbnRleHQucGVybWlzc2lvbnMuY2hlY2soZmlsZSwgWyd1cGRhdGUnXSwge1xuICAgICAgICB0YXJnZXQ6ICdhbGxvd2FibGVPcGVyYXRpb25zT25UYXJnZXQnXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY29udGV4dC5wZXJtaXNzaW9ucy5jaGVjayhmaWxlLCBbJ3VwZGF0ZSddKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU21hcnRGb2xkZXIoY29udGV4dDogUnVsZUNvbnRleHQpOiBib29sZWFuIHtcbiAgaWYgKCFjb250ZXh0LnNlbGVjdGlvbj8uaXNFbXB0eSkge1xuICAgIGNvbnN0IG5vZGUgPSBjb250ZXh0LnNlbGVjdGlvbi5maXJzdDtcbiAgICBpZiAoIW5vZGU/LmVudHJ5LmlzRm9sZGVyKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IG5vZGVBc3BlY3RzID0gbm9kZS5lbnRyeT8uYXNwZWN0TmFtZXMgPz8gW107XG4gICAgcmV0dXJuIG5vZGVBc3BlY3RzLmluY2x1ZGVzKCdzbWY6Y3VzdG9tQ29uZmlnU21hcnRGb2xkZXInKSB8fCBub2RlQXNwZWN0cy5pbmNsdWRlcygnc21mOnN5c3RlbUNvbmZpZ1NtYXJ0Rm9sZGVyJyk7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgY29uc3QgYXJlVGFnc0VuYWJsZWQgPSAoY29udGV4dDogQWNhUnVsZUNvbnRleHQpOiBib29sZWFuID0+IGNvbnRleHQuYXBwQ29uZmlnLmdldCgncGx1Z2lucy50YWdzRW5hYmxlZCcsIHRydWUpO1xuXG5leHBvcnQgY29uc3QgYXJlQ2F0ZWdvcmllc0VuYWJsZWQgPSAoY29udGV4dDogQWNhUnVsZUNvbnRleHQpOiBib29sZWFuID0+IGNvbnRleHQuYXBwQ29uZmlnLmdldCgncGx1Z2lucy5jYXRlZ29yaWVzRW5hYmxlZCcsIHRydWUpO1xuXG5leHBvcnQgY29uc3QgY2FuRGlzcGxheUtub3dsZWRnZVJldHJpZXZhbEJ1dHRvbiA9IChjb250ZXh0OiBBY2FSdWxlQ29udGV4dCk6IGJvb2xlYW4gPT5cbiAgY29udGV4dC5hcHBDb25maWcuZ2V0KCdwbHVnaW5zLmtub3dsZWRnZVJldHJpZXZhbEVuYWJsZWQnLCBmYWxzZSkgJiZcbiAgKG5hdmlnYXRpb24uaXNQZXJzb25hbEZpbGVzKGNvbnRleHQpIHx8XG4gICAgbmF2aWdhdGlvbi5pc1NoYXJlZEZpbGVzKGNvbnRleHQpIHx8XG4gICAgbmF2aWdhdGlvbi5pc1JlY2VudEZpbGVzKGNvbnRleHQpIHx8XG4gICAgbmF2aWdhdGlvbi5pc0Zhdm9yaXRlcyhjb250ZXh0KSB8fFxuICAgICgobmF2aWdhdGlvbi5pc1NlYXJjaFJlc3VsdHMoY29udGV4dCkgfHwgbmF2aWdhdGlvbi5pc0xpYnJhcnlDb250ZW50KGNvbnRleHQpKSAmJiBuYXZpZ2F0aW9uLmlzTm90TGlicmFyaWVzKGNvbnRleHQpKSk7XG4iXX0=
411
+ ((navigation.isSearchResults(context) || navigation.isLibraryContent(context)) && !navigation.isLibraries(context)));
412
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLnJ1bGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYWNhLXNoYXJlZC9ydWxlcy9zcmMvYXBwLnJ1bGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBSUgsT0FBTyxLQUFLLFVBQVUsTUFBTSxvQkFBb0IsQ0FBQztBQUNqRCxPQUFPLEtBQUssVUFBVSxNQUFNLG9CQUFvQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFdkMsb0JBQW9CO0FBQ3BCLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHO0lBQ2pDLEdBQUcsRUFBRSxTQUFTO0lBQ2QsSUFBSSxFQUFFLFNBQVM7SUFDZixJQUFJLEVBQUUsU0FBUztJQUNmLEdBQUcsRUFBRSxTQUFTO0lBQ2QsSUFBSSxFQUFFLFNBQVM7SUFDZixJQUFJLEVBQUUsU0FBUztJQUNmLEdBQUcsRUFBRSxTQUFTO0lBQ2QsR0FBRyxFQUFFLFVBQVU7SUFDZixJQUFJLEVBQUUsVUFBVTtJQUNoQixJQUFJLEVBQUUsVUFBVTtJQUNoQixJQUFJLEVBQUUsVUFBVTtJQUNoQixHQUFHLEVBQUUsVUFBVTtJQUNmLElBQUksRUFBRSxVQUFVO0lBQ2hCLElBQUksRUFBRSxVQUFVO0lBQ2hCLElBQUksRUFBRSxVQUFVO0lBQ2hCLEdBQUcsRUFBRSxlQUFlO0lBQ3BCLElBQUksRUFBRSxlQUFlO0lBQ3JCLEdBQUcsRUFBRSxlQUFlO0lBQ3BCLElBQUksRUFBRSxlQUFlO0lBQ3JCLElBQUksRUFBRSxlQUFlO0lBQ3JCLElBQUksRUFBRSxlQUFlO0lBQ3JCLEdBQUcsRUFBRSxlQUFlO0lBQ3BCLElBQUksRUFBRSxlQUFlO0lBQ3JCLElBQUksRUFBRSxlQUFlO0lBQ3JCLElBQUksRUFBRSxlQUFlO0lBQ3JCLElBQUksRUFBRSxlQUFlO0lBQ3JCLElBQUksRUFBRSxlQUFlO0lB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QUNsRCxPQUFPLFdBQVcsQ0FBQyxRQUFRLENBQUMsNkJBQTZCLENBQUMsSUFBSSxXQUFXLENBQUMsUUFBUSxDQUFDLDZCQUE2QixDQUFDLENBQUM7SUFDcEgsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxDQUFDLE9BQXVCLEVBQVcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLHFCQUFxQixFQUFFLElBQUksQ0FBQyxDQUFDO0FBRXZILE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLENBQUMsT0FBdUIsRUFBVyxFQUFFLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsMkJBQTJCLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFFbkksTUFBTSxDQUFDLE1BQU0sa0NBQWtDLEdBQUcsQ0FBQyxPQUF1QixFQUFXLEVBQUUsQ0FDckYsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsbUNBQW1DLEVBQUUsS0FBSyxDQUFDO0lBQ2pFLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUM7UUFDbEMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUM7UUFDakMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUM7UUFDakMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUM7UUFDL0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLElBQUksVUFBVSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogQ29weXJpZ2h0IMKpIDIwMDUtMjAyNSBIeWxhbmQgU29mdHdhcmUsIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIEFsZnJlc2NvIEV4YW1wbGUgQ29udGVudCBBcHBsaWNhdGlvblxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBBbGZyZXNjbyBFeGFtcGxlIENvbnRlbnQgQXBwbGljYXRpb24uXG4gKiBJZiB0aGUgc29mdHdhcmUgd2FzIHB1cmNoYXNlZCB1bmRlciBhIHBhaWQgQWxmcmVzY28gbGljZW5zZSwgdGhlIHRlcm1zIG9mXG4gKiB0aGUgcGFpZCBsaWNlbnNlIGFncmVlbWVudCB3aWxsIHByZXZhaWwuIE90aGVyd2lzZSwgdGhlIHNvZnR3YXJlIGlzXG4gKiBwcm92aWRlZCB1bmRlciB0aGUgZm9sbG93aW5nIG9wZW4gc291cmNlIGxpY2Vuc2UgdGVybXM6XG4gKlxuICogVGhlIEFsZnJlc2NvIEV4YW1wbGUgQ29udGVudCBBcHBsaWNhdGlvbiBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuICpcbiAqIFRoZSBBbGZyZXNjbyBFeGFtcGxlIENvbnRlbnQgQXBwbGljYXRpb24gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGVcbiAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICogZnJvbSBIeWxhbmQgU29mdHdhcmUuIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiAqL1xuXG5pbXBvcnQgeyBBcHBDb25maWdTZXJ2aWNlIH0gZnJvbSAnQGFsZnJlc2NvL2FkZi1jb3JlJztcbmltcG9ydCB7IFJ1bGVDb250ZXh0IH0gZnJvbSAnQGFsZnJlc2NvL2FkZi1leHRlbnNpb25zJztcbmltcG9ydCAqIGFzIG5hdmlnYXRpb24gZnJvbSAnLi9uYXZpZ2F0aW9uLnJ1bGVzJztcbmltcG9ydCAqIGFzIHJlcG9zaXRvcnkgZnJvbSAnLi9yZXBvc2l0b3J5LnJ1bGVzJztcbmltcG9ydCB7IGlzQWRtaW4gfSBmcm9tICcuL3VzZXIucnVsZXMnO1xuXG4vKiBjc3BlbGw6ZGlzYWJsZSAqL1xuZXhwb3J0IGNvbnN0IHN1cHBvcnRlZEV4dGVuc2lvbnMgPSB7XG4gIGRvYzogJ21zLXdvcmQnLFxuICBkb2N4OiAnbXMtd29yZCcsXG4gIGRvY206ICdtcy13b3JkJyxcbiAgZG90OiAnbXMtd29yZCcsXG4gIGRvdHg6ICdtcy13b3JkJyxcbiAgZG90bTogJ21zLXdvcmQnLFxuICBydGY6ICdtcy13b3JkJyxcbiAgeGxzOiAnbXMtZXhjZWwnLFxuICB4bHN4OiAnbXMtZXhjZWwnLFxuICB4bHNiOiAnbXMtZXhjZWwnLFxuICB4bHNtOiAnbXMtZXhjZWwnLFxuICB4bHQ6ICdtcy1leGNlbCcsXG4gIHhsdHg6ICdtcy1leGNlbCcsXG4gIHhsdG06ICdtcy1leGNlbCcsXG4gIHhsYW06ICdtcy1leGNlbCcsXG4gIHBwdDogJ21zLXBvd2VycG9pbnQnLFxuICBwcHR4OiAnbXMtcG93ZXJwb2ludCcsXG4gIHBvdDogJ21zLXBvd2VycG9pbnQnLFxuICBwb3R4OiAnbXMtcG93ZXJwb2ludCcsXG4gIHBvdG06ICdtcy1wb3dlcnBvaW50JyxcbiAgcHB0bTogJ21zLXBvd2VycG9pbnQnLFxuICBwcHM6ICdtcy1wb3dlcnBvaW50JyxcbiAgcHBzeDogJ21zLXBvd2VycG9pbnQnLFxuICBwcGFtOiAnbXMtcG93ZXJwb2ludCcsXG4gIHBwc206ICdtcy1wb3dlcnBvaW50JyxcbiAgc2xkeDogJ21zLXBvd2VycG9pbnQnLFxuICBzbGRtOiAnbXMtcG93ZXJwb2ludCcsXG4gIHZzZDogJ21zLXZpc2lvJyxcbiAgdnNzOiAnbXMtdmlzaW8nLFxuICB2c3Q6ICdtcy12aXNpbycsXG4gIHZzZHg6ICdtcy12aXNpbycsXG4gIHZzZG06ICdtcy12aXNpbycsXG4gIHZzc3g6ICdtcy12aXNpbycsXG4gIHZzc206ICdtcy12aXNpbycsXG4gIHZzdHg6ICdtcy12aXNpbycsXG4gIHZzdG06ICdtcy12aXNpbydcbn07XG5cbi8qIGNzcGVsbDplbmFibGUgKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbGVFeHRlbnNpb24oZmlsZU5hbWU6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICBpZiAoZmlsZU5hbWUpIHtcbiAgICBjb25zdCBtYXRjaCA9IGZpbGVOYW1lLnRvTG93ZXJDYXNlKCkubWF0Y2goL1xcLihbXlxcLi9cXD9cXCNdKykoJHxcXD98XFwjKS8pO1xuXG4gICAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMV0gOiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWNhUnVsZUNvbnRleHQgZXh0ZW5kcyBSdWxlQ29udGV4dCB7XG4gIHdpdGhDcmVkZW50aWFsczogYm9vbGVhbjtcbiAgYXBwQ29uZmlnOiBBcHBDb25maWdTZXJ2aWNlO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgY29udGVudCBwbHVnaW4gaXMgZW5hYmxlZC5cbiAqIEpTT04gcmVmOiBgYXBwLmlzQ29udGVudFNlcnZpY2VFbmFibGVkYFxuICovXG5leHBvcnQgY29uc3QgaXNDb250ZW50U2VydmljZUVuYWJsZWQgPSAoY29udGV4dDogQWNhUnVsZUNvbnRleHQpOiBib29sZWFuID0+IHtcbiAgY29uc3QgZmxhZyA9IGNvbnRleHQuYXBwQ29uZmlnLmdldDxib29sZWFuIHwgc3RyaW5nPigncGx1Z2lucy5jb250ZW50U2VydmljZScpO1xuICByZXR1cm4gZmxhZyA9PT0gdHJ1ZSB8fCBmbGFnID09PSAndHJ1ZSc7XG59O1xuXG4vKipcbiAqIENoZWNrcyBpZiB1c2VyIGNhbiBtYXJrIHNlbGVjdGVkIG5vZGVzIGFzICoqRmF2b3JpdGUqKi5cbiAqIEpTT04gcmVmOiBgYXBwLnNlbGVjdGlvbi5jYW5BZGRGYXZvcml0ZWBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhbkFkZEZhdm9yaXRlKGNvbnRleHQ6IFJ1bGVDb250ZXh0KTogYm9vbGVhbiB7XG4gIGlmIChuYXZpZ2F0aW9uLmlzRmF2b3JpdGVzKGNvbnRleHQpIHx8IG5hdmlnYXRpb24uaXNMaWJyYXJpZXMoY29udGV4dCkgfHwgbmF2aWdhdGlvbi5pc1RyYXNoY2FuKGNvbnRleHQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBjb250ZXh0LnNlbGVjdGlvbi5ub2Rlcy5zb21lKChub2RlKSA9PiAhbm9kZS5lbnRyeS5pc0Zhdm9yaXRlKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdXNlciBjYW4gdW4tbWFyayBzZWxlY3RlZCBub2RlcyBhcyAqKkZhdm9yaXRlKiouXG4gKiBKU09OIHJlZjogYGFwcC5zZWxlY3Rpb24uY2FuUmVtb3ZlRmF2b3JpdGVgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYW5SZW1vdmVGYXZvcml0ZShjb250ZXh0OiBSdWxlQ29udGV4dCk6IGJvb2xlYW4ge1xuICBpZiAobmF2aWdhdGlvbi5pc0Zhdm9yaXRlcyhjb250ZXh0KSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBjb250ZXh0LnNlbGVjdGlvbi5ub2Rlcy5ldmVyeSgobm9kZSkgPT4gbm9kZS5lbnRyeS5pc0Zhdm9yaXRlKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdXNlciBjYW4gc2hhcmUgc2VsZWN0ZWQgZmlsZS5cbiAqIEpTT04gcmVmOiBgYXBwLnNlbGVjdGlvbi5maWxlLmNhblNoYXJlYFxuICovXG5leHBvcnQgY29uc3QgY2FuU2hhcmVGaWxlID0gKGNvbnRleHQ6IFJ1bGVDb250ZXh0KTogYm9vbGVhbiA9PlxuICBbY29udGV4dC5zZWxlY3Rpb24uZmlsZSwgIW5hdmlnYXRpb24uaXNUcmFzaGNhbihjb250ZXh0KSwgcmVwb3NpdG9yeS5oYXNRdWlja1NoYXJlRW5hYmxlZChjb250ZXh0KSwgIWlzU2hhcmVkKGNvbnRleHQpXS5ldmVyeShCb29sZWFuKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgdXNlciBjYW4gcGVyZm9ybSBcIkpvaW5cIiBvciBcIkNhbmNlbCBKb2luIFJlcXVlc3RcIiBvbiBhIGxpYnJhcnkuXG4gKiBKU09OIHJlZjogYGNhblRvZ2dsZUpvaW5MaWJyYXJ5YFxuICovXG5leHBvcnQgY29uc3QgY2FuVG9nZ2xlSm9pbkxpYnJhcnkgPSAoY29udGV4dDogUnVsZUNvbnRleHQpOiBib29sZWFuID0+XG4gICFpc1ByaXZhdGVMaWJyYXJ5KGNvbnRleHQpIHx8IFtpc1ByaXZhdGVMaWJyYXJ5KGNvbnRleHQpLCBpc0FkbWluKGNvbnRleHQpXS5ldmVyeShCb29sZWFuKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgdXNlciBjYW4gZWRpdCB0aGUgc2VsZWN0ZWQgZm9sZGVyLlxuICogSlNPTiByZWY6IGBjYW5FZGl0Rm9sZGVyYFxuICpcbiAqIEBwYXJhbSBjb250ZXh0IFJ1bGUgZXhlY3V0aW9uIGNvbnRleHRcbiAqL1xuZXhwb3J0IGNvbnN0IGNhbkVkaXRGb2xkZXIgPSAoY29udGV4dDogUnVsZUNvbnRleHQpOiBib29sZWFuID0+IFtjYW5VcGRhdGVTZWxlY3RlZEZvbGRlcihjb250ZXh0KSwgIW5hdmlnYXRpb24uaXNUcmFzaGNhbihjb250ZXh0KV0uZXZlcnkoQm9vbGVhbik7XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBzZWxlY3RlZCBmaWxlIGlzIGFscmVhZHkgc2hhcmVkLlxuICogSlNPTiByZWY6IGBhcHAuc2VsZWN0aW9uLmZpbGUuaXNTaGFyZWRgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1NoYXJlZChjb250ZXh0OiBSdWxlQ29udGV4dCk6IGJvb2xlYW4ge1xuICBpZiAobmF2aWdhdGlvbi5pc1NoYXJlZEZpbGVzKGNvbnRleHQpICYmIGNvbnRleHQuc2VsZWN0aW9uLmZpbGUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmICghbmF2aWdhdGlvbi5pc1RyYXNoY2FuKGNvbnRleHQpICYmIGhhc1NlbGVjdGlvbihjb250ZXh0KSAmJiBjb250ZXh0LnNlbGVjdGlvbi5maWxlKSB7XG4gICAgcmV0dXJuICEhY29udGV4dC5zZWxlY3Rpb24uZmlsZS5lbnRyeT8ucHJvcGVydGllcz8uWydxc2hhcmU6c2hhcmVkSWQnXTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdXNlciBjYW4gZGVsZXRlIHNlbGVjdGVkIG5vZGVzLlxuICogSlNPTiByZWY6IGBhcHAuc2VsZWN0aW9uLmNhbkRlbGV0ZWBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhbkRlbGV0ZVNlbGVjdGlvbihjb250ZXh0OiBSdWxlQ29udGV4dCk6IGJvb2xlYW4ge1xuICBpZiAoaGFzTG9ja2VkRmlsZXMoY29udGV4dCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyB0ZW1wIHdvcmthcm91bmQgZm9yIEZhdm9yaXRlcyBhcGlcbiAgaWYgKG5hdmlnYXRpb24uaXNGYXZvcml0ZXMoY29udGV4dCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChuYXZpZ2F0aW9uLmlzUHJldmlldyhjb250ZXh0KSkge1xuICAgIHJldHVybiBjb250ZXh0LnBlcm1pc3Npb25zLmNoZWNrKGNvbnRleHQuc2VsZWN0aW9uLm5vZGVzLCBbJ2RlbGV0ZSddKTtcbiAgfVxuXG4gIC8vIHdvcmthcm91bmQgZm9yIFNoYXJlZCBGaWxlc1xuICBpZiAobmF2aWdhdGlvbi5pc1NoYXJlZEZpbGVzKGNvbnRleHQpKSB7XG4gICAgcmV0dXJuIGNvbnRleHQucGVybWlzc2lvbnMuY2hlY2soY29udGV4dC5zZWxlY3Rpb24ubm9kZXMsIFsnZGVsZXRlJ10sIHtcbiAgICAgIHRhcmdldDogJ2FsbG93YWJsZU9wZXJhdGlvbnNPblRhcmdldCdcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBjb250ZXh0LnBlcm1pc3Npb25zLmNoZWNrKGNvbnRleHQuc2VsZWN0aW9uLm5vZGVzLCBbJ2RlbGV0ZSddKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdXNlciBzZWxlY3RlZCBhbnl0aGluZy5cbiAqIEpTT04gcmVmOiBgYXBwLnNlbGVjdGlvbi5ub3RFbXB0eWBcbiAqL1xuZXhwb3J0IGNvbnN0IGhhc1NlbGVjdGlvbiA9IChjb250ZXh0OiBSdWxlQ29udGV4dCk6IGJvb2xlYW4gPT4gIWNvbnRleHQuc2VsZWN0aW9uLmlzRW1wdHk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIHVzZXIgY2FuIGNyZWF0ZSBhIG5ldyBmb2xkZXIgd2l0aCBjdXJyZW50IHBhdGguXG4gKiBKU09OIHJlZjogYGFwcC5uYXZpZ2F0aW9uLmZvbGRlci5jYW5DcmVhdGVgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYW5DcmVhdGVGb2xkZXIoY29udGV4dDogQWNhUnVsZUNvbnRleHQpOiBib29sZWFuIHtcbiAgaWYgKG5hdmlnYXRpb24uaXNQZXJzb25hbEZpbGVzKGNvbnRleHQpIHx8IG5hdmlnYXRpb24uaXNMaWJyYXJ5Q29udGVudChjb250ZXh0KSkge1xuICAgIGNvbnN0IHsgY3VycmVudEZvbGRlciB9ID0gY29udGV4dC5uYXZpZ2F0aW9uO1xuXG4gICAgaWYgKGN1cnJlbnRGb2xkZXIpIHtcbiAgICAgIHJldHVybiBjb250ZXh0LnBlcm1pc3Npb25zLmNoZWNrKGN1cnJlbnRGb2xkZXIsIFsnY3JlYXRlJ10pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHVzZXIgY2FuIGRvd25sb2FkIHNlbGVjdGVkIG5vZGVzIChlaXRoZXIgZmlsZXMgb3IgZm9sZGVycykuXG4gKiBKU09OIHJlZjogYGFwcC5zZWxlY3Rpb24uY2FuRG93bmxvYWRgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYW5Eb3dubG9hZFNlbGVjdGlvbihjb250ZXh0OiBSdWxlQ29udGV4dCk6IGJvb2xlYW4ge1xuICByZXR1cm4gY29udGV4dC5zZWxlY3Rpb24ubm9kZXMuZXZlcnkoKG5vZGU6IGFueSkgPT4gbm9kZS5lbnRyeSAmJiAobm9kZS5lbnRyeS5pc0ZpbGUgfHwgbm9kZS5lbnRyeS5pc0ZvbGRlciB8fCAhIW5vZGUuZW50cnkubm9kZUlkKSk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHVzZXIgaGFzIHNlbGVjdGVkIGEgZm9sZGVyLlxuICogSlNPTiByZWY6IGBhcHAuc2VsZWN0aW9uLmZvbGRlcmBcbiAqL1xuZXhwb3J0IGNvbnN0IGhhc0ZvbGRlclNlbGVjdGVkID0gKGNvbnRleHQ6IFJ1bGVDb250ZXh0KTogYm9vbGVhbiA9PiAhIWNvbnRleHQuc2VsZWN0aW9uLmZvbGRlcjtcblxuLyoqXG4gKiBDaGVja3MgaWYgdXNlciBoYXMgc2VsZWN0ZWQgYSBsaWJyYXJ5IChzaXRlKS5cbiAqIEpTT04gcmVmOiBgYXBwLnNlbGVjdGlvbi5saWJyYXJ5YFxuICovXG5leHBvcnQgY29uc3QgaGFzTGlicmFyeVNlbGVjdGVkID0gKGNvbnRleHQ6IFJ1bGVDb250ZXh0KTogYm9vbGVhbiA9PiAhIWNvbnRleHQuc2VsZWN0aW9uLmxpYnJhcnk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIHVzZXIgaGFzIHNlbGVjdGVkIGEgKipwcml2YXRlKiogbGlicmFyeSAoc2l0ZSlcbiAqIEpTT04gcmVmOiBgYXBwLnNlbGVjdGlvbi5pc1ByaXZhdGVMaWJyYXJ5YFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQcml2YXRlTGlicmFyeShjb250ZXh0OiBSdWxlQ29udGV4dCk6IGJvb2xlYW4ge1xuICByZXR1cm4gY29udGV4dC5zZWxlY3Rpb24ubGlicmFyeT8uZW50cnk/LnZpc2liaWxpdHkgPT09ICdQUklWQVRFJztcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIHNlbGVjdGVkIGxpYnJhcnkgaGFzIGEgKipyb2xlKiogcHJvcGVydHkgZGVmaW5lZC5cbiAqIEpTT04gcmVmOiBgYXBwLnNlbGVjdGlvbi5oYXNMaWJyYXJ5Um9sZWBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc0xpYnJhcnlSb2xlKGNvbnRleHQ6IFJ1bGVDb250ZXh0KTogYm9vbGVhbiB7XG4gIGNvbnN0IGxpYnJhcnkgPSBjb250ZXh0LnNlbGVjdGlvbi5saWJyYXJ5O1xuICByZXR1cm4gbGlicmFyeSA/ICEhbGlicmFyeS5lbnRyeT8ucm9sZSA6IGZhbHNlO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB1c2VyIGhhcyBzZWxlY3RlZCBhIGZpbGUuXG4gKiBKU09OIHJlZjogYGFwcC5zZWxlY3Rpb24uZmlsZWBcbiAqL1xuZXhwb3J0IGNvbnN0IGhhc0ZpbGVTZWxlY3RlZCA9IChjb250ZXh0OiBSdWxlQ29udGV4dCk6IGJvb2xlYW4gPT4gISFjb250ZXh0Py5zZWxlY3Rpb24/LmZpbGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIHVzZXIgY2FuIHVwZGF0ZSB0aGUgZmlyc3Qgc2VsZWN0ZWQgbm9kZS5cbiAqIEpTT04gcmVmOiBgYXBwLnNlbGVjdGlvbi5maXJzdC5jYW5VcGRhdGVgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYW5VcGRhdGVTZWxlY3RlZE5vZGUoY29udGV4dDogUnVsZUNvbnRleHQpOiBib29sZWFuIHtcbiAgaWYgKGNvbnRleHQuc2VsZWN0aW9uICYmIGhhc1NlbGVjdGlvbihjb250ZXh0KSkge1xuICAgIGNvbnN0IG5vZGUgPSBjb250ZXh0LnNlbGVjdGlvbi5maXJzdDtcblxuICAgIGlmIChub2RlPy5lbnRyeS5pc0ZpbGUgJiYgaGFzTG9ja2VkRmlsZXMoY29udGV4dCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udGV4dC5wZXJtaXNzaW9ucy5jaGVjayhub2RlLCBbJ3VwZGF0ZSddKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc011bHRpc2VsZWN0aW9uKGNvbnRleHQ6IFJ1bGVDb250ZXh0KTogYm9vbGVhbiB7XG4gIGxldCBpc011bHRpTm9kZVNlbGVjdGVkID0gZmFsc2U7XG4gIGlmIChjb250ZXh0LnNlbGVjdGlvbiAmJiBoYXNTZWxlY3Rpb24oY29udGV4dCkpIHtcbiAgICBpc011bHRpTm9kZVNlbGVjdGVkID0gY29udGV4dC5zZWxlY3Rpb24uY291bnQgPiAxO1xuICB9XG4gIHJldHVybiBpc011bHRpTm9kZVNlbGVjdGVkO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB1c2VyIGNhbiB1cGRhdGUgdGhlIGZpcnN0IHNlbGVjdGVkIGZvbGRlci5cbiAqIEpTT04gcmVmOiBgYXBwLnNlbGVjdGlvbi5mb2xkZXIuY2FuVXBkYXRlYFxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FuVXBkYXRlU2VsZWN0ZWRGb2xkZXIoY29udGV4dDogUnVsZUNvbnRleHQpOiBib29sZWFuIHtcbiAgY29uc3QgeyBmb2xkZXIgfSA9IGNvbnRleHQuc2VsZWN0aW9uO1xuICBpZiAoZm9sZGVyKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIC8vIHdvcmthcm91bmQgZm9yIEZhdm9yaXRlcyBBcGlcbiAgICAgIG5hdmlnYXRpb24uaXNGYXZvcml0ZXMoY29udGV4dCkgfHwgY29udGV4dC5wZXJtaXNzaW9ucy5jaGVjayhmb2xkZXIuZW50cnksIFsndXBkYXRlJ10pXG4gICAgKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHVzZXIgaGFzIHNlbGVjdGVkIGEgKipsb2NrZWQqKiBmaWxlIG5vZGUuXG4gKiBKU09OIHJlZjogYGFwcC5zZWxlY3Rpb24uZmlsZS5pc0xvY2tlZGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc0xvY2tlZEZpbGVzKGNvbnRleHQ6IFJ1bGVDb250ZXh0KTogYm9vbGVhbiB7XG4gIGlmIChjb250ZXh0Py5zZWxlY3Rpb24/Lm5vZGVzKSB7XG4gICAgcmV0dXJuIGNvbnRleHQuc2VsZWN0aW9uLm5vZGVzLnNvbWUoKG5vZGUpID0+IHtcbiAgICAgIGlmICghbm9kZS5lbnRyeS5pc0ZpbGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbm9kZS5lbnRyeS5pc0xvY2tlZCB8fCBub2RlLmVudHJ5LnByb3BlcnRpZXM/LlsnY206bG9ja1R5cGUnXSA9PT0gJ1JFQURfT05MWV9MT0NLJztcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIHNlbGVjdGVkIGZpbGUgaGFzICoqd3JpdGUqKiBvciAqKnJlYWQtb25seSoqIGxvY2tzIHNwZWNpZmllZC5cbiAqIEpTT04gcmVmOiBgYXBwLnNlbGVjdGlvbi5maWxlLmlzTG9ja2VkYFxuICovXG5leHBvcnQgY29uc3QgaXNXcml0ZUxvY2tlZCA9IChjb250ZXh0OiBSdWxlQ29udGV4dCk6IGJvb2xlYW4gPT5cbiAgISEoXG4gICAgY29udGV4dD8uc2VsZWN0aW9uPy5maWxlPy5lbnRyeT8ucHJvcGVydGllcz8uWydjbTpsb2NrVHlwZSddID09PSAnV1JJVEVfTE9DSycgfHxcbiAgICBjb250ZXh0Py5zZWxlY3Rpb24/LmZpbGU/LmVudHJ5Py5wcm9wZXJ0aWVzPy5bJ2NtOmxvY2tUeXBlJ10gPT09ICdSRUFEX09OTFlfTE9DSydcbiAgKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIHNlbGVjdGVkIGZpbGUgaGFzICoqd3JpdGUqKiBvciAqKnJlYWQtb25seSoqIGxvY2tzIHNwZWNpZmllZCxcbiAqIGFuZCB0aGF0IGN1cnJlbnQgdXNlciBpcyB0aGUgb3duZXIgb2YgdGhlIGxvY2suXG4gKiBKU09OIHJlZjogYGFwcC5zZWxlY3Rpb24uZmlsZS5pc0xvY2tPd25lcmBcbiAqL1xuZXhwb3J0IGNvbnN0IGlzVXNlcldyaXRlTG9ja093bmVyID0gKGNvbnRleHQ6IFJ1bGVDb250ZXh0KTogYm9vbGVhbiA9PlxuICBpc1dyaXRlTG9ja2VkKGNvbnRleHQpICYmXG4gIGNvbnRleHQuc2VsZWN0aW9uLmZpbGU/LmVudHJ5LnByb3BlcnRpZXNbJ2NtOmxvY2tPd25lciddICYmXG4gIGNvbnRleHQuc2VsZWN0aW9uLmZpbGU/LmVudHJ5LnByb3BlcnRpZXNbJ2NtOmxvY2tPd25lciddLmlkID09PSBjb250ZXh0LnByb2ZpbGUuaWQ7XG5cbi8qKlxuICogQ2hlY2tzIGlmIHVzZXIgY2FuIGxvY2sgc2VsZWN0ZWQgZmlsZS5cbiAqIEpTT04gcmVmOiBgYXBwLnNlbGVjdGlvbi5maWxlLmNhbkxvY2tgXG4gKi9cbmV4cG9ydCBjb25zdCBjYW5Mb2NrRmlsZSA9IChjb250ZXh0OiBSdWxlQ29udGV4dCk6IGJvb2xlYW4gPT4gIWlzV3JpdGVMb2NrZWQoY29udGV4dCkgJiYgY2FuVXBkYXRlU2VsZWN0ZWROb2RlKGNvbnRleHQpO1xuXG4vKipcbiAqIENoZWNrcyBpZiB1c2VyIGNhbiB1bmxvY2sgc2VsZWN0ZWQgZmlsZS5cbiAqIEpTT04gcmVmOiBgYXBwLnNlbGVjdGlvbi5maWxlLmNhblVubG9ja2BcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhblVubG9ja0ZpbGUoY29udGV4dDogUnVsZUNvbnRleHQpOiBib29sZWFuIHtcbiAgY29uc3QgeyBmaWxlIH0gPSBjb250ZXh0LnNlbGVjdGlvbjtcbiAgcmV0dXJuIGlzV3JpdGVMb2NrZWQoY29udGV4dCkgJiYgKGNvbnRleHQucGVybWlzc2lvbnMuY2hlY2soZmlsZT8uZW50cnksIFsnZGVsZXRlJ10pIHx8IGlzVXNlcldyaXRlTG9ja093bmVyKGNvbnRleHQpKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdXNlciBjYW4gdXBsb2FkIGEgbmV3IHZlcnNpb24gb2YgdGhlIGZpbGUuXG4gKiBKU09OIHJlZjogYGFwcC5zZWxlY3Rpb24uZmlsZS5jYW5VcGxvYWRWZXJzaW9uYFxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FuVXBsb2FkVmVyc2lvbihjb250ZXh0OiBSdWxlQ29udGV4dCk6IGJvb2xlYW4ge1xuICBpZiAobmF2aWdhdGlvbi5pc0Zhdm9yaXRlcyhjb250ZXh0KSB8fCBuYXZpZ2F0aW9uLmlzU2hhcmVkRmlsZXMoY29udGV4dCkpIHtcbiAgICByZXR1cm4gaGFzRmlsZVNlbGVjdGVkKGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIFtcbiAgICBoYXNGaWxlU2VsZWN0ZWQoY29udGV4dCksXG4gICAgIW5hdmlnYXRpb24uaXNUcmFzaGNhbihjb250ZXh0KSxcbiAgICBpc1dyaXRlTG9ja2VkKGNvbnRleHQpID8gaXNVc2VyV3JpdGVMb2NrT3duZXIoY29udGV4dCkgOiBjYW5VcGRhdGVTZWxlY3RlZE5vZGUoY29udGV4dClcbiAgXS5ldmVyeShCb29sZWFuKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdXNlciBjYW4gdG9nZ2xlIHNoYXJlZCBsaW5rIG1vZGUuXG4gKiBKU09OIHJlZjogYGNhblRvZ2dsZVNoYXJlZExpbmtgXG4gKlxuICogQHBhcmFtIGNvbnRleHQgUnVsZSBleGVjdXRpb24gY29udGV4dFxuICovXG5leHBvcnQgY29uc3QgY2FuVG9nZ2xlU2hhcmVkTGluayA9IChjb250ZXh0OiBSdWxlQ29udGV4dCk6IGJvb2xlYW4gPT4gW2NhblNoYXJlRmlsZShjb250ZXh0KSwgaXNTaGFyZWQoY29udGV4dCldLnNvbWUoQm9vbGVhbik7XG5cbi8qKlxuICogQ2hlY2tzIGlmIHVzZXIgY2FuIGVkaXQgYXNwZWN0cyBmb3IgdGhlIHNlbGVjdGVkIG5vZGUuXG4gKiBKU09OIHJlZjogYGNhbkVkaXRBc3BlY3RzYFxuICpcbiAqIEBwYXJhbSBjb250ZXh0IFJ1bGUgZXhlY3V0aW9uIGNvbnRleHRcbiAqL1xuZXhwb3J0IGNvbnN0IGNhbkVkaXRBc3BlY3RzID0gKGNvbnRleHQ6IFJ1bGVDb250ZXh0KTogYm9vbGVhbiA9PlxuICBbXG4gICAgIWlzTXVsdGlzZWxlY3Rpb24oY29udGV4dCksXG4gICAgY2FuVXBkYXRlU2VsZWN0ZWROb2RlKGNvbnRleHQpLFxuICAgICFpc1dyaXRlTG9ja2VkKGNvbnRleHQpLFxuICAgICFuYXZpZ2F0aW9uLmlzVHJhc2hjYW4oY29udGV4dCksXG4gICAgcmVwb3NpdG9yeS5pc01ham9yVmVyc2lvbkF2YWlsYWJsZShjb250ZXh0LCAnNycpXG4gIF0uZXZlcnkoQm9vbGVhbik7XG5cbmV4cG9ydCBjb25zdCBjYW5Ub2dnbGVGaWxlTG9jayA9IChjb250ZXh0OiBSdWxlQ29udGV4dCk6IGJvb2xlYW4gPT4gW2NhbkxvY2tGaWxlKGNvbnRleHQpIHx8IGNhblVubG9ja0ZpbGUoY29udGV4dCldLnNvbWUoQm9vbGVhbik7XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlcyB3b3JrYXJvdW5kcyBmb3IgZm9yIHJlY2VudCBmaWxlcyBhbmQgc2VhcmNoIGFwaSBpc3N1ZXMuXG4gKiBDaGVja3MgaWYgdXNlciBjYW4gdG9nZ2xlICoqRmF2b3JpdGUqKiBzdGF0ZSBmb3IgYSBub2RlLlxuICogQHBhcmFtIGNvbnRleHQgUnVsZSBleGVjdXRpb24gY29udGV4dFxuICovXG5leHBvcnQgY29uc3QgY2FuVG9nZ2xlRmF2b3JpdGUgPSAoY29udGV4dDogUnVsZUNvbnRleHQpOiBib29sZWFuID0+XG4gIFtcbiAgICBbY2FuQWRkRmF2b3JpdGUoY29udGV4dCksIGNhblJlbW92ZUZhdm9yaXRlKGNvbnRleHQpXS5zb21lKEJvb2xlYW4pLFxuICAgIFtuYXZpZ2F0aW9uLmlzUmVjZW50RmlsZXMoY29udGV4dCksIG5hdmlnYXRpb24uaXNTaGFyZWRGaWxlcyhjb250ZXh0KSwgbmF2aWdhdGlvbi5pc1NlYXJjaFJlc3VsdHMoY29udGV4dCksIG5hdmlnYXRpb24uaXNGYXZvcml0ZXMoY29udGV4dCldLnNvbWUoXG4gICAgICBCb29sZWFuXG4gICAgKVxuICBdLmV2ZXJ5KEJvb2xlYW4pO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhcHBsaWNhdGlvbiBzaG91bGQgcmVuZGVyIGxvZ291dCBvcHRpb24uXG4gKiBKU09OIHJlZjogYGNhblNob3dMb2dvdXRgXG4gKlxuICogQHBhcmFtIGNvbnRleHQgUnVsZSBleGVjdXRpb24gY29udGV4dFxuICovXG5leHBvcnQgY29uc3QgY2FuU2hvd0xvZ291dCA9IChjb250ZXh0OiBBY2FSdWxlQ29udGV4dCk6IGJvb2xlYW4gPT4gIWNvbnRleHQud2l0aENyZWRlbnRpYWxzO1xuXG4vKipcbiAqIENoZWNrcyBpZiB1c2VyIGlzIGxpYnJhcnkgbWFuYWdlclxuICogSlNPTiByZWY6IGBpc0xpYnJhcnlNYW5hZ2VyYFxuICpcbiAqIEBwYXJhbSBjb250ZXh0IFJ1bGUgZXhlY3V0aW9uIGNvbnRleHRcbiAqL1xuZXhwb3J0IGNvbnN0IGlzTGlicmFyeU1hbmFnZXIgPSAoY29udGV4dDogUnVsZUNvbnRleHQpOiBib29sZWFuID0+IGNvbnRleHQuc2VsZWN0aW9uLmxpYnJhcnk/LmVudHJ5LnJvbGUgPT09ICdTaXRlTWFuYWdlcicgfHwgaXNBZG1pbihjb250ZXh0KTtcblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIGZpbGUgY2FuIGJlIG9wZW5lZCB3aXRoIE1TIE9mZmljZVxuICogSlNPTiByZWY6IGBhb3MuY2FuT3BlbldpdGhPZmZpY2VgXG4gKlxuICogQHBhcmFtIGNvbnRleHQgUnVsZSBleGVjdXRpb24gY29udGV4dFxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FuT3BlbldpdGhPZmZpY2UoY29udGV4dDogQWNhUnVsZUNvbnRleHQpOiBib29sZWFuIHtcbiAgY29uc3QgZmxhZyA9IGAke2NvbnRleHQuYXBwQ29uZmlnLmdldDxib29sZWFuIHwgc3RyaW5nPigncGx1Z2lucy5hb3NQbHVnaW4nLCBmYWxzZSl9YDtcblxuICBpZiAoZmxhZyAhPT0gJ3RydWUnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKGNvbnRleHQubmF2aWdhdGlvbj8udXJsPy5zdGFydHNXaXRoKCcvdHJhc2hjYW4nKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghY29udGV4dD8uc2VsZWN0aW9uKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgeyBmaWxlIH0gPSBjb250ZXh0LnNlbGVjdGlvbjtcblxuICBpZiAoIWZpbGU/LmVudHJ5KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgZXh0ZW5zaW9uID0gZ2V0RmlsZUV4dGVuc2lvbihmaWxlLmVudHJ5Lm5hbWUpO1xuICBpZiAoIWV4dGVuc2lvbiB8fCAhc3VwcG9ydGVkRXh0ZW5zaW9uc1tleHRlbnNpb25dKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCFmaWxlLmVudHJ5LnByb3BlcnRpZXMpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoZmlsZS5lbnRyeS5pc0xvY2tlZCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChmaWxlLmVudHJ5LnByb3BlcnRpZXNbJ2NtOmxvY2tUeXBlJ10gPT09ICdXUklURV9MT0NLJyB8fCBmaWxlLmVudHJ5LnByb3BlcnRpZXNbJ2NtOmxvY2tUeXBlJ10gPT09ICdSRUFEX09OTFlfTE9DSycpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBsb2NrT3duZXIgPSBmaWxlLmVudHJ5LnByb3BlcnRpZXNbJ2NtOmxvY2tPd25lciddO1xuICBpZiAobG9ja093bmVyICYmIGxvY2tPd25lci5pZCAhPT0gY29udGV4dC5wcm9maWxlLmlkKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gd29ya2Fyb3VuZCBmb3IgU2hhcmVkIGZpbGVzXG4gIGlmIChjb250ZXh0Lm5hdmlnYXRpb24/LnVybD8uc3RhcnRzV2l0aCgnL3NoYXJlZCcpKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgIGlmIChmaWxlLmVudHJ5Lmhhc093blByb3BlcnR5KCdhbGxvd2FibGVPcGVyYXRpb25zT25UYXJnZXQnKSkge1xuICAgICAgcmV0dXJuIGNvbnRleHQucGVybWlzc2lvbnMuY2hlY2soZmlsZSwgWyd1cGRhdGUnXSwge1xuICAgICAgICB0YXJnZXQ6ICdhbGxvd2FibGVPcGVyYXRpb25zT25UYXJnZXQnXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY29udGV4dC5wZXJtaXNzaW9ucy5jaGVjayhmaWxlLCBbJ3VwZGF0ZSddKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU21hcnRGb2xkZXIoY29udGV4dDogUnVsZUNvbnRleHQpOiBib29sZWFuIHtcbiAgaWYgKCFjb250ZXh0LnNlbGVjdGlvbj8uaXNFbXB0eSkge1xuICAgIGNvbnN0IG5vZGUgPSBjb250ZXh0LnNlbGVjdGlvbi5maXJzdDtcbiAgICBpZiAoIW5vZGU/LmVudHJ5LmlzRm9sZGVyKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IG5vZGVBc3BlY3RzID0gbm9kZS5lbnRyeT8uYXNwZWN0TmFtZXMgPz8gW107XG4gICAgcmV0dXJuIG5vZGVBc3BlY3RzLmluY2x1ZGVzKCdzbWY6Y3VzdG9tQ29uZmlnU21hcnRGb2xkZXInKSB8fCBub2RlQXNwZWN0cy5pbmNsdWRlcygnc21mOnN5c3RlbUNvbmZpZ1NtYXJ0Rm9sZGVyJyk7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgY29uc3QgYXJlVGFnc0VuYWJsZWQgPSAoY29udGV4dDogQWNhUnVsZUNvbnRleHQpOiBib29sZWFuID0+IGNvbnRleHQuYXBwQ29uZmlnLmdldCgncGx1Z2lucy50YWdzRW5hYmxlZCcsIHRydWUpO1xuXG5leHBvcnQgY29uc3QgYXJlQ2F0ZWdvcmllc0VuYWJsZWQgPSAoY29udGV4dDogQWNhUnVsZUNvbnRleHQpOiBib29sZWFuID0+IGNvbnRleHQuYXBwQ29uZmlnLmdldCgncGx1Z2lucy5jYXRlZ29yaWVzRW5hYmxlZCcsIHRydWUpO1xuXG5leHBvcnQgY29uc3QgY2FuRGlzcGxheUtub3dsZWRnZVJldHJpZXZhbEJ1dHRvbiA9IChjb250ZXh0OiBBY2FSdWxlQ29udGV4dCk6IGJvb2xlYW4gPT5cbiAgY29udGV4dC5hcHBDb25maWcuZ2V0KCdwbHVnaW5zLmtub3dsZWRnZVJldHJpZXZhbEVuYWJsZWQnLCBmYWxzZSkgJiZcbiAgKG5hdmlnYXRpb24uaXNQZXJzb25hbEZpbGVzKGNvbnRleHQpIHx8XG4gICAgbmF2aWdhdGlvbi5pc1NoYXJlZEZpbGVzKGNvbnRleHQpIHx8XG4gICAgbmF2aWdhdGlvbi5pc1JlY2VudEZpbGVzKGNvbnRleHQpIHx8XG4gICAgbmF2aWdhdGlvbi5pc0Zhdm9yaXRlcyhjb250ZXh0KSB8fFxuICAgICgobmF2aWdhdGlvbi5pc1NlYXJjaFJlc3VsdHMoY29udGV4dCkgfHwgbmF2aWdhdGlvbi5pc0xpYnJhcnlDb250ZW50KGNvbnRleHQpKSAmJiAhbmF2aWdhdGlvbi5pc0xpYnJhcmllcyhjb250ZXh0KSkpO1xuIl19
@@ -37,11 +37,6 @@ export function isFavorites(context) {
37
37
  const { url } = context.navigation;
38
38
  return url?.startsWith('/favorites') && !isPreview(context);
39
39
  }
40
- /**
41
- * Checks if the activated route is not **Favorites**.
42
- * JSON ref: `app.navigation.isNotFavorites`
43
- */
44
- export const isNotFavorites = (context) => !isFavorites(context);
45
40
  /**
46
41
  * Checks if a **Shared Files** route is activated.
47
42
  * JSON ref: `app.navigation.isSharedFiles`
@@ -50,11 +45,6 @@ export function isSharedFiles(context) {
50
45
  const { url } = context.navigation;
51
46
  return url?.startsWith('/shared') && !isPreview(context);
52
47
  }
53
- /**
54
- * Checks if the activated route is not **Shared Files**.
55
- * JSON ref: `app.navigation.isNotSharedFiles`
56
- */
57
- export const isNotSharedFiles = (context) => !isSharedFiles(context);
58
48
  /**
59
49
  * Checks if a **Trashcan** route is activated.
60
50
  * JSON ref: `app.navigation.isTrashcan`
@@ -63,11 +53,6 @@ export function isTrashcan(context) {
63
53
  const { url } = context.navigation;
64
54
  return url?.startsWith('/trashcan');
65
55
  }
66
- /**
67
- * Checks if the activated route is not **Trashcan**.
68
- * JSON ref: `app.navigation.isNotTrashcan`
69
- */
70
- export const isNotTrashcan = (context) => !isTrashcan(context);
71
56
  /**
72
57
  * Checks if a **Personal Files** route is activated.
73
58
  * JSON ref: `app.navigation.isPersonalFiles`
@@ -76,14 +61,6 @@ export function isPersonalFiles(context) {
76
61
  const { url } = context.navigation;
77
62
  return url?.startsWith('/personal-files');
78
63
  }
79
- /**
80
- * Checks if a **Library Files** route is activated.
81
- * JSON ref: `app.navigation.isLibraryFiles`
82
- */
83
- export function isLibraryFiles(context) {
84
- const { url } = context.navigation;
85
- return url?.startsWith('/libraries');
86
- }
87
64
  /**
88
65
  * Checks if a **Library Files** or **Library Search Result** route is activated.
89
66
  * JSON ref: `app.navigation.isLibraryFiles`
@@ -100,16 +77,6 @@ export function isDetails(context) {
100
77
  const { url } = context.navigation;
101
78
  return url?.includes('/details');
102
79
  }
103
- /**
104
- * Checks if the activated route is not **Details**.
105
- * JSON ref: `app.navigation.isNotDetails`
106
- */
107
- export const isNotDetails = (context) => !isDetails(context);
108
- /**
109
- * Checks if the activated route is neither **Libraries** nor **Library Search Results**.
110
- * JSON ref: `app.navigation.isNotLibraries`
111
- */
112
- export const isNotLibraries = (context) => !isLibraries(context);
113
80
  /**
114
81
  * Checks if a **Recent Files** route is activated.
115
82
  * JSON ref: `app.navigation.isRecentFiles`
@@ -118,11 +85,6 @@ export function isRecentFiles(context) {
118
85
  const { url } = context.navigation;
119
86
  return url?.startsWith('/recent-files');
120
87
  }
121
- /**
122
- * Checks if the activated route is not **Recent Files**.
123
- * JSON ref: `app.navigation.isNotRecentFiles`
124
- */
125
- export const isNotRecentFiles = (context) => !isRecentFiles(context);
126
88
  /**
127
89
  * Checks if a **Search Results** route is activated.
128
90
  * JSON ref: `app.navigation.isSearchResults`
@@ -133,33 +95,4 @@ export function isSearchResults(context
133
95
  const { url } = context.navigation;
134
96
  return url?.startsWith('/search');
135
97
  }
136
- /**
137
- * Checks if the activated route is not **Search Results**.
138
- * JSON ref: `app.navigation.isNotSearchResults`
139
- */
140
- export const isNotSearchResults = (context) => !isSearchResults(context);
141
- /**
142
- * Checks if a **Shared Preview** route is activated.
143
- * JSON ref: `app.navigation.isSharedPreview`
144
- */
145
- export function isSharedPreview(context) {
146
- const { url } = context.navigation;
147
- return url?.startsWith('/shared/preview/') || (url?.startsWith('/shared') && url?.includes('viewer:view'));
148
- }
149
- /**
150
- * Checks if a **Favorites Preview** route is activated.
151
- * JSON ref: `app.navigation.isFavoritesPreview`
152
- */
153
- export function isFavoritesPreview(context) {
154
- const { url } = context.navigation;
155
- return url?.startsWith('/favorites/preview/') || (url?.startsWith('/favorites') && url?.includes('viewer:view'));
156
- }
157
- /**
158
- * Checks if a **Shared File Preview** route is activated.
159
- * JSON ref: `app.navigation.isFavoritesPreview`
160
- */
161
- export function isSharedFileViewer(context) {
162
- const { url } = context.navigation;
163
- return url?.startsWith('/preview/s/');
164
- }
165
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbi5ydWxlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FjYS1zaGFyZWQvcnVsZXMvc3JjL25hdmlnYXRpb24ucnVsZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFJSDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUFDLE9BQW9CO0lBQzVDLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDO0lBQ25DLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUNyRyxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FBQyxPQUFvQjtJQUM5QyxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQztJQUNuQyxPQUFPLEdBQUcsRUFBRSxVQUFVLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDOUQsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxDQUFDLE9BQW9CLEVBQVcsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBRXZGOzs7R0FHRztBQUNILE1BQU0sVUFBVSxhQUFhLENBQUMsT0FBb0I7SUFDaEQsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUM7SUFDbkMsT0FBTyxHQUFHLEVBQUUsVUFBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzNELENBQUM7QUFFRDs7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Q0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLENBQUMsT0FBb0IsRUFBVyxFQUFFLENBQUMsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7QUFFL0Y7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLGVBQWUsQ0FBQyxPQUFvQjtJQUNsRCxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQztJQUNuQyxPQUFPLEdBQUcsRUFBRSxVQUFVLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsU0FBUyxDQUFDLElBQUksR0FBRyxFQUFFLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO0FBQzdHLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsT0FBb0I7SUFDckQsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUM7SUFDbkMsT0FBTyxHQUFHLEVBQUUsVUFBVSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLFlBQVksQ0FBQyxJQUFJLEdBQUcsRUFBRSxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztBQUNuSCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQixDQUFDLE9BQW9CO0lBQ3JELE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDO0lBQ25DLE9BQU8sR0FBRyxFQUFFLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUN4QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBDb3B5cmlnaHQgwqkgMjAwNS0yMDI1IEh5bGFuZCBTb2Z0d2FyZSwgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogQWxmcmVzY28gRXhhbXBsZSBDb250ZW50IEFwcGxpY2F0aW9uXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEFsZnJlc2NvIEV4YW1wbGUgQ29udGVudCBBcHBsaWNhdGlvbi5cbiAqIElmIHRoZSBzb2Z0d2FyZSB3YXMgcHVyY2hhc2VkIHVuZGVyIGEgcGFpZCBBbGZyZXNjbyBsaWNlbnNlLCB0aGUgdGVybXMgb2ZcbiAqIHRoZSBwYWlkIGxpY2Vuc2UgYWdyZWVtZW50IHdpbGwgcHJldmFpbC4gT3RoZXJ3aXNlLCB0aGUgc29mdHdhcmUgaXNcbiAqIHByb3ZpZGVkIHVuZGVyIHRoZSBmb2xsb3dpbmcgb3BlbiBzb3VyY2UgbGljZW5zZSB0ZXJtczpcbiAqXG4gKiBUaGUgQWxmcmVzY28gRXhhbXBsZSBDb250ZW50IEFwcGxpY2F0aW9uIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4gKlxuICogVGhlIEFsZnJlc2NvIEV4YW1wbGUgQ29udGVudCBBcHBsaWNhdGlvbiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcbiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZVxuICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gKiBmcm9tIEh5bGFuZCBTb2Z0d2FyZS4gSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuICovXG5cbmltcG9ydCB7IFJ1bGVDb250ZXh0IH0gZnJvbSAnQGFsZnJlc2NvL2FkZi1leHRlbnNpb25zJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBQcmV2aWV3IHJvdXRlIGlzIGFjdGl2YXRlZC5cbiAqIEpTT04gcmVmOiBgYXBwLm5hdmlnYXRpb24uaXNQcmV2aWV3YFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQcmV2aWV3KGNvbnRleHQ6IFJ1bGVDb250ZXh0KTogYm9vbGVhbiB7XG4gIGNvbnN0IHsgdXJsIH0gPSBjb250ZXh0Lm5hdmlnYXRpb247XG4gIHJldHVybiB1cmwgJiYgKHVybC5pbmNsdWRlcygnL3ByZXZpZXcvJykgfHwgdXJsLmluY2x1ZGVzKCd2aWV3ZXI6dmlldycpIHx8IHVybC5pbmNsdWRlcygnL3ZpZXcvJykpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhICoqRmF2b3JpdGVzKiogcm91dGUgaXMgYWN0aXZhdGVkLlxuICogSlNPTiByZWY6IGBhcHAubmF2aWdhdGlvbi5pc0Zhdm9yaXRlc2BcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRmF2b3JpdGVzKGNvbnRleHQ6IFJ1bGVDb250ZXh0KTogYm9vbGVhbiB7XG4gIGNvbnN0IHsgdXJsIH0gPSBjb250ZXh0Lm5hdmlnYXRpb247XG4gIHJldHVybiB1cmw/LnN0YXJ0c1dpdGgoJy9mYXZvcml0ZXMnKSAmJiAhaXNQcmV2aWV3KGNvbnRleHQpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgYWN0aXZhdGVkIHJvdXRlIGlzIG5vdCAqKkZhdm9yaXRlcyoqLlxuICogSlNPTiByZWY6IGBhcHAubmF2aWdhdGlvbi5pc05vdEZhdm9yaXRlc2BcbiAqL1xuZXhwb3J0IGNvbnN0IGlzTm90RmF2b3JpdGVzID0gKGNvbnRleHQ6IFJ1bGVDb250ZXh0KTogYm9vbGVhbiA9PiAhaXNGYXZvcml0ZXMoY29udGV4dCk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgKipTaGFyZWQgRmlsZXMqKiByb3V0ZSBpcyBhY3RpdmF0ZWQuXG4gKiBKU09OIHJlZjogYGFwcC5uYXZpZ2F0aW9uLmlzU2hhcmVkRmlsZXNgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1NoYXJlZEZpbGVzKGNvbnRleHQ6IFJ1bGVDb250ZXh0KTogYm9vbGVhbiB7XG4gIGNvbnN0IHsgdXJsIH0gPSBjb250ZXh0Lm5hdmlnYXRpb247XG4gIHJldHVybiB1cmw/LnN0YXJ0c1dpdGgoJy9zaGFyZWQnKSAmJiAhaXNQcmV2aWV3KGNvbnRleHQpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgYWN0aXZhdGVkIHJvdXRlIGlzIG5vdCAqKlNoYXJlZCBGaWxlcyoqLlxuICogSlNPTiByZWY6IGBhcHAubmF2aWdhdGlvbi5pc05vdFNoYXJlZEZpbGVzYFxuICovXG5leHBvcnQgY29uc3QgaXNOb3RTaGFyZWRGaWxlcyA9IChjb250ZXh0OiBSdWxlQ29udGV4dCk6IGJvb2xlYW4gPT4gIWlzU2hhcmVkRmlsZXMoY29udGV4dCk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgKipUcmFzaGNhbioqIHJvdXRlIGlzIGFjdGl2YXRlZC5cbiAqIEpTT04gcmVmOiBgYXBwLm5hdmlnYXRpb24uaXNUcmFzaGNhbmBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVHJhc2hjYW4oY29udGV4dDogUnVsZUNvbnRleHQpOiBib29sZWFuIHtcbiAgY29uc3QgeyB1cmwgfSA9IGNvbnRleHQubmF2aWdhdGlvbjtcbiAgcmV0dXJuIHVybD8uc3RhcnRzV2l0aCgnL3RyYXNoY2FuJyk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBhY3RpdmF0ZWQgcm91dGUgaXMgbm90ICoqVHJhc2hjYW4qKi5cbiAqIEpTT04gcmVmOiBgYXBwLm5hdmlnYXRpb24uaXNOb3RUcmFzaGNhbmBcbiAqL1xuZXhwb3J0IGNvbnN0IGlzTm90VHJhc2hjYW4gPSAoY29udGV4dDogUnVsZUNvbnRleHQpOiBib29sZWFuID0+ICFpc1RyYXNoY2FuKGNvbnRleHQpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhICoqUGVyc29uYWwgRmlsZXMqKiByb3V0ZSBpcyBhY3RpdmF0ZWQuXG4gKiBKU09OIHJlZjogYGFwcC5uYXZpZ2F0aW9uLmlzUGVyc29uYWxGaWxlc2BcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUGVyc29uYWxGaWxlcyhjb250ZXh0OiBSdWxlQ29udGV4dCk6IGJvb2xlYW4ge1xuICBjb25zdCB7IHVybCB9ID0gY29udGV4dC5uYXZpZ2F0aW9uO1xuICByZXR1cm4gdXJsPy5zdGFydHNXaXRoKCcvcGVyc29uYWwtZmlsZXMnKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYSAqKkxpYnJhcnkgRmlsZXMqKiByb3V0ZSBpcyBhY3RpdmF0ZWQuXG4gKiBKU09OIHJlZjogYGFwcC5uYXZpZ2F0aW9uLmlzTGlicmFyeUZpbGVzYFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNMaWJyYXJ5RmlsZXMoY29udGV4dDogUnVsZUNvbnRleHQpOiBib29sZWFuIHtcbiAgY29uc3QgeyB1cmwgfSA9IGNvbnRleHQubmF2aWdhdGlvbjtcbiAgcmV0dXJuIHVybD8uc3RhcnRzV2l0aCgnL2xpYnJhcmllcycpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhICoqTGlicmFyeSBGaWxlcyoqIG9yICoqTGlicmFyeSBTZWFyY2ggUmVzdWx0Kiogcm91dGUgaXMgYWN0aXZhdGVkLlxuICogSlNPTiByZWY6IGBhcHAubmF2aWdhdGlvbi5pc0xpYnJhcnlGaWxlc2BcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTGlicmFyaWVzKGNvbnRleHQ6IFJ1bGVDb250ZXh0KTogYm9vbGVhbiB7XG4gIGNvbnN0IHsgdXJsIH0gPSBjb250ZXh0Lm5hdmlnYXRpb247XG4gIHJldHVybiB1cmw/LmVuZHNXaXRoKCcvbGlicmFyaWVzJykgfHwgdXJsPy5zdGFydHNXaXRoKCcvc2VhcmNoLWxpYnJhcmllcycpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNMaWJyYXJ5Q29udGVudChjb250ZXh0OiBSdWxlQ29udGV4dCk6IGJvb2xlYW4ge1xuICBjb25zdCB7IHVybCB9ID0gY29udGV4dC5uYXZpZ2F0aW9uO1xuICByZXR1cm4gdXJsPy5lbmRzV2l0aCgnL2xpYnJhcmllcycpIHx8IHVybD8uaW5jbHVkZXMoJy9saWJyYXJpZXMvJykgfHwgdXJsPy5zdGFydHNXaXRoKCcvc2VhcmNoLWxpYnJhcmllcycpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEZXRhaWxzKGNvbnRleHQ6IFJ1bGVDb250ZXh0KTogYm9vbGVhbiB7XG4gIGNvbnN0IHsgdXJsIH0gPSBjb250ZXh0Lm5hdmlnYXRpb247XG4gIHJldHVybiB1cmw/LmluY2x1ZGVzKCcvZGV0YWlscycpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgYWN0aXZhdGVkIHJvdXRlIGlzIG5vdCAqKkRldGFpbHMqKi5cbiAqIEpTT04gcmVmOiBgYXBwLm5hdmlnYXRpb24uaXNOb3REZXRhaWxzYFxuICovXG5leHBvcnQgY29uc3QgaXNOb3REZXRhaWxzID0gKGNvbnRleHQ6IFJ1bGVDb250ZXh0KTogYm9vbGVhbiA9PiAhaXNEZXRhaWxzKGNvbnRleHQpO1xuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgYWN0aXZhdGVkIHJvdXRlIGlzIG5laXRoZXIgKipMaWJyYXJpZXMqKiBub3IgKipMaWJyYXJ5IFNlYXJjaCBSZXN1bHRzKiouXG4gKiBKU09OIHJlZjogYGFwcC5uYXZpZ2F0aW9uLmlzTm90TGlicmFyaWVzYFxuICovXG5leHBvcnQgY29uc3QgaXNOb3RMaWJyYXJpZXMgPSAoY29udGV4dDogUnVsZUNvbnRleHQpOiBib29sZWFuID0+ICFpc0xpYnJhcmllcyhjb250ZXh0KTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSAqKlJlY2VudCBGaWxlcyoqIHJvdXRlIGlzIGFjdGl2YXRlZC5cbiAqIEpTT04gcmVmOiBgYXBwLm5hdmlnYXRpb24uaXNSZWNlbnRGaWxlc2BcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmVjZW50RmlsZXMoY29udGV4dDogUnVsZUNvbnRleHQpOiBib29sZWFuIHtcbiAgY29uc3QgeyB1cmwgfSA9IGNvbnRleHQubmF2aWdhdGlvbjtcbiAgcmV0dXJuIHVybD8uc3RhcnRzV2l0aCgnL3JlY2VudC1maWxlcycpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgYWN0aXZhdGVkIHJvdXRlIGlzIG5vdCAqKlJlY2VudCBGaWxlcyoqLlxuICogSlNPTiByZWY6IGBhcHAubmF2aWdhdGlvbi5pc05vdFJlY2VudEZpbGVzYFxuICovXG5leHBvcnQgY29uc3QgaXNOb3RSZWNlbnRGaWxlcyA9IChjb250ZXh0OiBSdWxlQ29udGV4dCk6IGJvb2xlYW4gPT4gIWlzUmVjZW50RmlsZXMoY29udGV4dCk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgKipTZWFyY2ggUmVzdWx0cyoqIHJvdXRlIGlzIGFjdGl2YXRlZC5cbiAqIEpTT04gcmVmOiBgYXBwLm5hdmlnYXRpb24uaXNTZWFyY2hSZXN1bHRzYFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTZWFyY2hSZXN1bHRzKFxuICBjb250ZXh0OiBSdWxlQ29udGV4dFxuICAvLyAuLi5hcmdzOiBSdWxlUGFyYW1ldGVyW11cbik6IGJvb2xlYW4ge1xuICBjb25zdCB7IHVybCB9ID0gY29udGV4dC5uYXZpZ2F0aW9uO1xuICByZXR1cm4gdXJsPy5zdGFydHNXaXRoKCcvc2VhcmNoJyk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBhY3RpdmF0ZWQgcm91dGUgaXMgbm90ICoqU2VhcmNoIFJlc3VsdHMqKi5cbiAqIEpTT04gcmVmOiBgYXBwLm5hdmlnYXRpb24uaXNOb3RTZWFyY2hSZXN1bHRzYFxuICovXG5leHBvcnQgY29uc3QgaXNOb3RTZWFyY2hSZXN1bHRzID0gKGNvbnRleHQ6IFJ1bGVDb250ZXh0KTogYm9vbGVhbiA9PiAhaXNTZWFyY2hSZXN1bHRzKGNvbnRleHQpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhICoqU2hhcmVkIFByZXZpZXcqKiByb3V0ZSBpcyBhY3RpdmF0ZWQuXG4gKiBKU09OIHJlZjogYGFwcC5uYXZpZ2F0aW9uLmlzU2hhcmVkUHJldmlld2BcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU2hhcmVkUHJldmlldyhjb250ZXh0OiBSdWxlQ29udGV4dCk6IGJvb2xlYW4ge1xuICBjb25zdCB7IHVybCB9ID0gY29udGV4dC5uYXZpZ2F0aW9uO1xuICByZXR1cm4gdXJsPy5zdGFydHNXaXRoKCcvc2hhcmVkL3ByZXZpZXcvJykgfHwgKHVybD8uc3RhcnRzV2l0aCgnL3NoYXJlZCcpICYmIHVybD8uaW5jbHVkZXMoJ3ZpZXdlcjp2aWV3JykpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhICoqRmF2b3JpdGVzIFByZXZpZXcqKiByb3V0ZSBpcyBhY3RpdmF0ZWQuXG4gKiBKU09OIHJlZjogYGFwcC5uYXZpZ2F0aW9uLmlzRmF2b3JpdGVzUHJldmlld2BcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRmF2b3JpdGVzUHJldmlldyhjb250ZXh0OiBSdWxlQ29udGV4dCk6IGJvb2xlYW4ge1xuICBjb25zdCB7IHVybCB9ID0gY29udGV4dC5uYXZpZ2F0aW9uO1xuICByZXR1cm4gdXJsPy5zdGFydHNXaXRoKCcvZmF2b3JpdGVzL3ByZXZpZXcvJykgfHwgKHVybD8uc3RhcnRzV2l0aCgnL2Zhdm9yaXRlcycpICYmIHVybD8uaW5jbHVkZXMoJ3ZpZXdlcjp2aWV3JykpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhICoqU2hhcmVkIEZpbGUgUHJldmlldyoqIHJvdXRlIGlzIGFjdGl2YXRlZC5cbiAqIEpTT04gcmVmOiBgYXBwLm5hdmlnYXRpb24uaXNGYXZvcml0ZXNQcmV2aWV3YFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTaGFyZWRGaWxlVmlld2VyKGNvbnRleHQ6IFJ1bGVDb250ZXh0KTogYm9vbGVhbiB7XG4gIGNvbnN0IHsgdXJsIH0gPSBjb250ZXh0Lm5hdmlnYXRpb247XG4gIHJldHVybiB1cmw/LnN0YXJ0c1dpdGgoJy9wcmV2aWV3L3MvJyk7XG59XG4iXX0=
98
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbi5ydWxlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FjYS1zaGFyZWQvcnVsZXMvc3JjL25hdmlnYXRpb24ucnVsZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFJSDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUFDLE9BQW9CO0lBQzVDLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDO0lBQ25DLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUNyRyxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FBQyxPQUFvQjtJQUM5QyxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQztJQUNuQyxPQUFPLEdBQUcsRUFBRSxVQUFVLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDOUQsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxhQUFhLENBQUMsT0FBb0I7SUFDaEQsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUM7SUFDbkMsT0FBTyxHQUFHLEVBQUUsVUFBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzNELENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsVUFBVSxDQUFDLE9BQW9CO0lBQzdDLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDO0lBQ25DLE9BQU8sR0FBRyxFQUFFLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUN0QyxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLGVBQWUsQ0FBQyxPQUFvQjtJQUNsRCxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQztJQUNuQyxPQUFPLEdBQUcsRUFBRSxVQUFVLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUM1QyxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FBQyxPQUFvQjtJQUM5QyxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQztJQUNuQyxPQUFPLEdBQUcsRUFBRSxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksR0FBRyxFQUFFLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0FBQzdFLENBQUM7QUFFRCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsT0FBb0I7SUFDbkQsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUM7SUFDbkMsT0FBTyxHQUFHLEVBQUUsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLEdBQUcsRUFBRSxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksR0FBRyxFQUFFLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0FBQzdHLENBQUM7QUFFRCxNQUFNLFVBQVUsU0FBUyxDQUFDLE9BQW9CO0lBQzVDLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDO0lBQ25DLE9BQU8sR0FBRyxFQUFFLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNuQyxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FBQyxPQUFvQjtJQUNoRCxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQztJQUNuQyxPQUFPLEdBQUcsRUFBRSxVQUFVLENBQUMsZUFBZSxDQUFDLENBQUM7QUFDMUMsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxlQUFlLENBQzdCLE9BQW9CO0FBQ3BCLDJCQUEyQjs7SUFFM0IsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUM7SUFDbkMsT0FBTyxHQUFHLEVBQUUsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3BDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIENvcHlyaWdodCDCqSAyMDA1LTIwMjUgSHlsYW5kIFNvZnR3YXJlLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBBbGZyZXNjbyBFeGFtcGxlIENvbnRlbnQgQXBwbGljYXRpb25cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQWxmcmVzY28gRXhhbXBsZSBDb250ZW50IEFwcGxpY2F0aW9uLlxuICogSWYgdGhlIHNvZnR3YXJlIHdhcyBwdXJjaGFzZWQgdW5kZXIgYSBwYWlkIEFsZnJlc2NvIGxpY2Vuc2UsIHRoZSB0ZXJtcyBvZlxuICogdGhlIHBhaWQgbGljZW5zZSBhZ3JlZW1lbnQgd2lsbCBwcmV2YWlsLiBPdGhlcndpc2UsIHRoZSBzb2Z0d2FyZSBpc1xuICogcHJvdmlkZWQgdW5kZXIgdGhlIGZvbGxvd2luZyBvcGVuIHNvdXJjZSBsaWNlbnNlIHRlcm1zOlxuICpcbiAqIFRoZSBBbGZyZXNjbyBFeGFtcGxlIENvbnRlbnQgQXBwbGljYXRpb24gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbiAqXG4gKiBUaGUgQWxmcmVzY28gRXhhbXBsZSBDb250ZW50IEFwcGxpY2F0aW9uIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlXG4gKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAqIGZyb20gSHlsYW5kIFNvZnR3YXJlLiBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4gKi9cblxuaW1wb3J0IHsgUnVsZUNvbnRleHQgfSBmcm9tICdAYWxmcmVzY28vYWRmLWV4dGVuc2lvbnMnO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIFByZXZpZXcgcm91dGUgaXMgYWN0aXZhdGVkLlxuICogSlNPTiByZWY6IGBhcHAubmF2aWdhdGlvbi5pc1ByZXZpZXdgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ByZXZpZXcoY29udGV4dDogUnVsZUNvbnRleHQpOiBib29sZWFuIHtcbiAgY29uc3QgeyB1cmwgfSA9IGNvbnRleHQubmF2aWdhdGlvbjtcbiAgcmV0dXJuIHVybCAmJiAodXJsLmluY2x1ZGVzKCcvcHJldmlldy8nKSB8fCB1cmwuaW5jbHVkZXMoJ3ZpZXdlcjp2aWV3JykgfHwgdXJsLmluY2x1ZGVzKCcvdmlldy8nKSk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgKipGYXZvcml0ZXMqKiByb3V0ZSBpcyBhY3RpdmF0ZWQuXG4gKiBKU09OIHJlZjogYGFwcC5uYXZpZ2F0aW9uLmlzRmF2b3JpdGVzYFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNGYXZvcml0ZXMoY29udGV4dDogUnVsZUNvbnRleHQpOiBib29sZWFuIHtcbiAgY29uc3QgeyB1cmwgfSA9IGNvbnRleHQubmF2aWdhdGlvbjtcbiAgcmV0dXJuIHVybD8uc3RhcnRzV2l0aCgnL2Zhdm9yaXRlcycpICYmICFpc1ByZXZpZXcoY29udGV4dCk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgKipTaGFyZWQgRmlsZXMqKiByb3V0ZSBpcyBhY3RpdmF0ZWQuXG4gKiBKU09OIHJlZjogYGFwcC5uYXZpZ2F0aW9uLmlzU2hhcmVkRmlsZXNgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1NoYXJlZEZpbGVzKGNvbnRleHQ6IFJ1bGVDb250ZXh0KTogYm9vbGVhbiB7XG4gIGNvbnN0IHsgdXJsIH0gPSBjb250ZXh0Lm5hdmlnYXRpb247XG4gIHJldHVybiB1cmw/LnN0YXJ0c1dpdGgoJy9zaGFyZWQnKSAmJiAhaXNQcmV2aWV3KGNvbnRleHQpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhICoqVHJhc2hjYW4qKiByb3V0ZSBpcyBhY3RpdmF0ZWQuXG4gKiBKU09OIHJlZjogYGFwcC5uYXZpZ2F0aW9uLmlzVHJhc2hjYW5gXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1RyYXNoY2FuKGNvbnRleHQ6IFJ1bGVDb250ZXh0KTogYm9vbGVhbiB7XG4gIGNvbnN0IHsgdXJsIH0gPSBjb250ZXh0Lm5hdmlnYXRpb247XG4gIHJldHVybiB1cmw/LnN0YXJ0c1dpdGgoJy90cmFzaGNhbicpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhICoqUGVyc29uYWwgRmlsZXMqKiByb3V0ZSBpcyBhY3RpdmF0ZWQuXG4gKiBKU09OIHJlZjogYGFwcC5uYXZpZ2F0aW9uLmlzUGVyc29uYWxGaWxlc2BcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUGVyc29uYWxGaWxlcyhjb250ZXh0OiBSdWxlQ29udGV4dCk6IGJvb2xlYW4ge1xuICBjb25zdCB7IHVybCB9ID0gY29udGV4dC5uYXZpZ2F0aW9uO1xuICByZXR1cm4gdXJsPy5zdGFydHNXaXRoKCcvcGVyc29uYWwtZmlsZXMnKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYSAqKkxpYnJhcnkgRmlsZXMqKiBvciAqKkxpYnJhcnkgU2VhcmNoIFJlc3VsdCoqIHJvdXRlIGlzIGFjdGl2YXRlZC5cbiAqIEpTT04gcmVmOiBgYXBwLm5hdmlnYXRpb24uaXNMaWJyYXJ5RmlsZXNgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0xpYnJhcmllcyhjb250ZXh0OiBSdWxlQ29udGV4dCk6IGJvb2xlYW4ge1xuICBjb25zdCB7IHVybCB9ID0gY29udGV4dC5uYXZpZ2F0aW9uO1xuICByZXR1cm4gdXJsPy5lbmRzV2l0aCgnL2xpYnJhcmllcycpIHx8IHVybD8uc3RhcnRzV2l0aCgnL3NlYXJjaC1saWJyYXJpZXMnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTGlicmFyeUNvbnRlbnQoY29udGV4dDogUnVsZUNvbnRleHQpOiBib29sZWFuIHtcbiAgY29uc3QgeyB1cmwgfSA9IGNvbnRleHQubmF2aWdhdGlvbjtcbiAgcmV0dXJuIHVybD8uZW5kc1dpdGgoJy9saWJyYXJpZXMnKSB8fCB1cmw/LmluY2x1ZGVzKCcvbGlicmFyaWVzLycpIHx8IHVybD8uc3RhcnRzV2l0aCgnL3NlYXJjaC1saWJyYXJpZXMnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGV0YWlscyhjb250ZXh0OiBSdWxlQ29udGV4dCk6IGJvb2xlYW4ge1xuICBjb25zdCB7IHVybCB9ID0gY29udGV4dC5uYXZpZ2F0aW9uO1xuICByZXR1cm4gdXJsPy5pbmNsdWRlcygnL2RldGFpbHMnKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYSAqKlJlY2VudCBGaWxlcyoqIHJvdXRlIGlzIGFjdGl2YXRlZC5cbiAqIEpTT04gcmVmOiBgYXBwLm5hdmlnYXRpb24uaXNSZWNlbnRGaWxlc2BcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmVjZW50RmlsZXMoY29udGV4dDogUnVsZUNvbnRleHQpOiBib29sZWFuIHtcbiAgY29uc3QgeyB1cmwgfSA9IGNvbnRleHQubmF2aWdhdGlvbjtcbiAgcmV0dXJuIHVybD8uc3RhcnRzV2l0aCgnL3JlY2VudC1maWxlcycpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhICoqU2VhcmNoIFJlc3VsdHMqKiByb3V0ZSBpcyBhY3RpdmF0ZWQuXG4gKiBKU09OIHJlZjogYGFwcC5uYXZpZ2F0aW9uLmlzU2VhcmNoUmVzdWx0c2BcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU2VhcmNoUmVzdWx0cyhcbiAgY29udGV4dDogUnVsZUNvbnRleHRcbiAgLy8gLi4uYXJnczogUnVsZVBhcmFtZXRlcltdXG4pOiBib29sZWFuIHtcbiAgY29uc3QgeyB1cmwgfSA9IGNvbnRleHQubmF2aWdhdGlvbjtcbiAgcmV0dXJuIHVybD8uc3RhcnRzV2l0aCgnL3NlYXJjaCcpO1xufVxuIl19