@obsidian-typings/obsidian-catalyst-1.13.2 1.1.0

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.
@@ -0,0 +1,1401 @@
1
+ /*
2
+ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
+ */
4
+
5
+ "use strict";
6
+ var __defProp = Object.defineProperty;
7
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
8
+ var __getOwnPropNames = Object.getOwnPropertyNames;
9
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
10
+ var __export = (target, all) => {
11
+ for (var name in all)
12
+ __defProp(target, name, { get: all[name], enumerable: true });
13
+ };
14
+ var __copyProps = (to, from, except, desc) => {
15
+ if (from && typeof from === "object" || typeof from === "function") {
16
+ for (let key of __getOwnPropNames(from))
17
+ if (!__hasOwnProp.call(to, key) && key !== except)
18
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
19
+ }
20
+ return to;
21
+ };
22
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
23
+
24
+ // src/obsidian/implementations/index.ts
25
+ var index_exports = {};
26
+ __export(index_exports, {
27
+ CustomArrayDictImpl: () => CustomArrayDictImpl,
28
+ FileExtension: () => FileExtension,
29
+ InternalPluginName: () => InternalPluginName,
30
+ ViewType: () => ViewType,
31
+ createTFileInstance: () => createTFileInstance,
32
+ createTFolderInstance: () => createTFolderInstance,
33
+ evaluateBaseHeadless: () => evaluateBaseHeadless,
34
+ getAbstractTextComponentConstructor: () => getAbstractTextComponentConstructor,
35
+ getAllPropertiesViewConstructor: () => getAllPropertiesViewConstructor,
36
+ getAppConstructor: () => getAppConstructor,
37
+ getAppMenuBarManagerConstructor: () => getAppMenuBarManagerConstructor,
38
+ getAppSettingConstructor: () => getAppSettingConstructor,
39
+ getAudioViewConstructor: () => getAudioViewConstructor,
40
+ getBacklinkViewConstructor: () => getBacklinkViewConstructor,
41
+ getBaseComponentConstructor: () => getBaseComponentConstructor,
42
+ getBasesContextConstructor: () => getBasesContextConstructor,
43
+ getBasesControllerFromRender: () => getBasesControllerFromRender,
44
+ getBasesEntryConstructor: () => getBasesEntryConstructor,
45
+ getBasesEntryGroupConstructor: () => getBasesEntryGroupConstructor,
46
+ getBasesQueryConstructor: () => getBasesQueryConstructor,
47
+ getBasesQueryResultConstructor: () => getBasesQueryResultConstructor,
48
+ getBasesViewConfigConstructor: () => getBasesViewConfigConstructor,
49
+ getBasesViewConstructor: () => getBasesViewConstructor,
50
+ getBookmarksViewConstructor: () => getBookmarksViewConstructor,
51
+ getBooleanValueConstructor: () => getBooleanValueConstructor,
52
+ getButtonComponentConstructor: () => getButtonComponentConstructor,
53
+ getCanvasViewConstructor: () => getCanvasViewConstructor,
54
+ getCapacitorAdapterConstructor: () => getCapacitorAdapterConstructor,
55
+ getCliConstructor: () => getCliConstructor,
56
+ getColorComponentConstructor: () => getColorComponentConstructor,
57
+ getCommandsConstructor: () => getCommandsConstructor,
58
+ getComponentConstructor: () => getComponentConstructor,
59
+ getConfirmationButtonConstructor: () => getConfirmationButtonConstructor,
60
+ getConfirmationModalConstructor: () => getConfirmationModalConstructor,
61
+ getCustomCSSConstructor: () => getCustomCSSConstructor,
62
+ getDataAdapterEx: () => getDataAdapterEx,
63
+ getDateValueConstructor: () => getDateValueConstructor,
64
+ getDisplayValueComponentConstructor: () => getDisplayValueComponentConstructor,
65
+ getDragManagerConstructor: () => getDragManagerConstructor,
66
+ getDropdownComponentConstructor: () => getDropdownComponentConstructor,
67
+ getDurationValueConstructor: () => getDurationValueConstructor,
68
+ getEditableFileViewConstructor: () => getEditableFileViewConstructor,
69
+ getEditorConstructor: () => getEditorConstructor,
70
+ getEditorSuggestsConstructor: () => getEditorSuggestsConstructor,
71
+ getEmbedRegistryConstructor: () => getEmbedRegistryConstructor,
72
+ getEmptyViewConstructor: () => getEmptyViewConstructor,
73
+ getEventsConstructor: () => getEventsConstructor,
74
+ getExtraButtonComponentConstructor: () => getExtraButtonComponentConstructor,
75
+ getFileExplorerViewConstructor: () => getFileExplorerViewConstructor,
76
+ getFileManagerConstructor: () => getFileManagerConstructor,
77
+ getFilePropertiesViewConstructor: () => getFilePropertiesViewConstructor,
78
+ getFileSystemAdapterConstructor: () => getFileSystemAdapterConstructor,
79
+ getFileValueConstructor: () => getFileValueConstructor,
80
+ getFoldManagerConstructor: () => getFoldManagerConstructor,
81
+ getFrameDomConstructor: () => getFrameDomConstructor,
82
+ getFuzzySuggestModalConstructor: () => getFuzzySuggestModalConstructor,
83
+ getGraphViewConstructor: () => getGraphViewConstructor,
84
+ getHTMLValueConstructor: () => getHTMLValueConstructor,
85
+ getHotkeyManagerConstructor: () => getHotkeyManagerConstructor,
86
+ getHoverPopoverConstructor: () => getHoverPopoverConstructor,
87
+ getIconValueConstructor: () => getIconValueConstructor,
88
+ getImageValueConstructor: () => getImageValueConstructor,
89
+ getImageViewConstructor: () => getImageViewConstructor,
90
+ getInternalPluginConstructor: () => getInternalPluginConstructor,
91
+ getInternalPluginsConstructor: () => getInternalPluginsConstructor,
92
+ getKeymapConstructor: () => getKeymapConstructor,
93
+ getLinkValueConstructor: () => getLinkValueConstructor,
94
+ getListValueConstructor: () => getListValueConstructor,
95
+ getLocalGraphViewConstructor: () => getLocalGraphViewConstructor,
96
+ getMarkdownPreviewRendererConstructor: () => getMarkdownPreviewRendererConstructor,
97
+ getMarkdownPreviewViewConstructor: () => getMarkdownPreviewViewConstructor,
98
+ getMarkdownRenderChildConstructor: () => getMarkdownRenderChildConstructor,
99
+ getMarkdownRendererConstructor: () => getMarkdownRendererConstructor,
100
+ getMarkdownViewConstructor: () => getMarkdownViewConstructor,
101
+ getMenuConstructor: () => getMenuConstructor,
102
+ getMenuItemConstructor: () => getMenuItemConstructor,
103
+ getMenuSeparatorConstructor: () => getMenuSeparatorConstructor,
104
+ getMetadataCacheConstructor: () => getMetadataCacheConstructor,
105
+ getMetadataTypeManagerConstructor: () => getMetadataTypeManagerConstructor,
106
+ getModalConstructor: () => getModalConstructor,
107
+ getMomentFormatComponentConstructor: () => getMomentFormatComponentConstructor,
108
+ getNotNullValueConstructor: () => getNotNullValueConstructor,
109
+ getNoticeConstructor: () => getNoticeConstructor,
110
+ getNullValueConstructor: () => getNullValueConstructor,
111
+ getNumberValueConstructor: () => getNumberValueConstructor,
112
+ getObjectValueConstructor: () => getObjectValueConstructor,
113
+ getObsidianDOMConstructor: () => getObsidianDOMConstructor,
114
+ getOutgoingLinkViewConstructor: () => getOutgoingLinkViewConstructor,
115
+ getOutlineViewConstructor: () => getOutlineViewConstructor,
116
+ getPdfViewConstructor: () => getPdfViewConstructor,
117
+ getPluginsConstructor: () => getPluginsConstructor,
118
+ getProgressBarComponentConstructor: () => getProgressBarComponentConstructor,
119
+ getQueryControllerConstructor: () => getQueryControllerConstructor,
120
+ getRecentFileTrackerConstructor: () => getRecentFileTrackerConstructor,
121
+ getRegExpValueConstructor: () => getRegExpValueConstructor,
122
+ getRelativeDateValueConstructor: () => getRelativeDateValueConstructor,
123
+ getReleaseNotesViewConstructor: () => getReleaseNotesViewConstructor,
124
+ getRenderContextConstructor: () => getRenderContextConstructor,
125
+ getScopeConstructor: () => getScopeConstructor,
126
+ getSearchComponentConstructor: () => getSearchComponentConstructor,
127
+ getSearchViewConstructor: () => getSearchViewConstructor,
128
+ getSecretComponentConstructor: () => getSecretComponentConstructor,
129
+ getSecretStorageConstructor: () => getSecretStorageConstructor,
130
+ getSettingConstructor: () => getSettingConstructor,
131
+ getSettingGroupConstructor: () => getSettingGroupConstructor,
132
+ getSettingPageConstructor: () => getSettingPageConstructor,
133
+ getSettingTabConstructor: () => getSettingTabConstructor,
134
+ getShareReceiverConstructor: () => getShareReceiverConstructor,
135
+ getSliderComponentConstructor: () => getSliderComponentConstructor,
136
+ getStatusBarConstructor: () => getStatusBarConstructor,
137
+ getStringValueConstructor: () => getStringValueConstructor,
138
+ getSyncViewConstructor: () => getSyncViewConstructor,
139
+ getTAbstractFileConstructor: () => getTAbstractFileConstructor,
140
+ getTFileConstructor: () => getTFileConstructor,
141
+ getTFolderConstructor: () => getTFolderConstructor,
142
+ getTableViewConstructor: () => getTableViewConstructor,
143
+ getTagValueConstructor: () => getTagValueConstructor,
144
+ getTagViewConstructor: () => getTagViewConstructor,
145
+ getTasksConstructor: () => getTasksConstructor,
146
+ getTextAreaComponentConstructor: () => getTextAreaComponentConstructor,
147
+ getTextComponentConstructor: () => getTextComponentConstructor,
148
+ getToggleComponentConstructor: () => getToggleComponentConstructor,
149
+ getUrlValueConstructor: () => getUrlValueConstructor,
150
+ getValueComponentConstructor: () => getValueComponentConstructor,
151
+ getValueConstructor: () => getValueConstructor,
152
+ getVaultConstructor: () => getVaultConstructor,
153
+ getVideoViewConstructor: () => getVideoViewConstructor,
154
+ getViewConstructorByViewType: () => getViewConstructorByViewType,
155
+ getViewRegistryConstructor: () => getViewRegistryConstructor,
156
+ getWebviewerHistoryViewConstructor: () => getWebviewerHistoryViewConstructor,
157
+ getWebviewerViewConstructor: () => getWebviewerViewConstructor,
158
+ getWorkspaceConstructor: () => getWorkspaceConstructor,
159
+ getWorkspaceContainerConstructor: () => getWorkspaceContainerConstructor,
160
+ getWorkspaceFloatingConstructor: () => getWorkspaceFloatingConstructor,
161
+ getWorkspaceItemConstructor: () => getWorkspaceItemConstructor,
162
+ getWorkspaceLeafConstructor: () => getWorkspaceLeafConstructor,
163
+ getWorkspaceLeafHistoryConstructor: () => getWorkspaceLeafHistoryConstructor,
164
+ getWorkspaceMobileDrawerConstructor: () => getWorkspaceMobileDrawerConstructor,
165
+ getWorkspaceParentConstructor: () => getWorkspaceParentConstructor,
166
+ getWorkspaceProtocolHandlerConstructor: () => getWorkspaceProtocolHandlerConstructor,
167
+ getWorkspaceRibbonConstructor: () => getWorkspaceRibbonConstructor,
168
+ getWorkspaceRootConstructor: () => getWorkspaceRootConstructor,
169
+ getWorkspaceSidedockConstructor: () => getWorkspaceSidedockConstructor,
170
+ getWorkspaceSplitConstructor: () => getWorkspaceSplitConstructor,
171
+ getWorkspaceTabsConstructor: () => getWorkspaceTabsConstructor,
172
+ getWorkspaceWindowConstructor: () => getWorkspaceWindowConstructor,
173
+ isEmbedCache: () => isEmbedCache,
174
+ isFrontmatterLinkCache: () => isFrontmatterLinkCache,
175
+ isLinkCache: () => isLinkCache,
176
+ isReferenceCache: () => isReferenceCache,
177
+ loadMermaid: () => loadMermaid,
178
+ loadPdfJs: () => loadPdfJs,
179
+ loadPrism: () => loadPrism,
180
+ parentFolderPath: () => parentFolderPath
181
+ });
182
+ module.exports = __toCommonJS(index_exports);
183
+
184
+ // src/obsidian/implementations/classes/CustomArrayDictImpl.ts
185
+ var CustomArrayDictImpl = class {
186
+ /**
187
+ * Internal map storing key-to-array mappings.
188
+ */
189
+ data = /* @__PURE__ */ new Map();
190
+ /**
191
+ * Add a value to the array associated with the given key.
192
+ *
193
+ * @param key - The key.
194
+ * @param value - The value to add.
195
+ */
196
+ add(key, value) {
197
+ let values = this.get(key);
198
+ if (!values) {
199
+ values = [];
200
+ this.data.set(key, values);
201
+ }
202
+ if (!values.includes(value)) {
203
+ values.push(value);
204
+ }
205
+ }
206
+ /**
207
+ * Remove all values for the given key.
208
+ *
209
+ * @param key - The key to clear.
210
+ */
211
+ clear(key) {
212
+ this.data.delete(key);
213
+ }
214
+ /**
215
+ * Remove all keys and their values.
216
+ */
217
+ clearAll() {
218
+ this.data.clear();
219
+ }
220
+ /**
221
+ * Check whether the array for the given key contains the specified value.
222
+ *
223
+ * @param key - The key.
224
+ * @param value - The value to check.
225
+ * @returns Whether the value exists.
226
+ */
227
+ contains(key, value) {
228
+ return !!this.get(key)?.contains(value);
229
+ }
230
+ /**
231
+ * Get the total number of values across all keys.
232
+ *
233
+ * @returns Total value count.
234
+ */
235
+ count() {
236
+ let ans = 0;
237
+ for (const key of this.keys()) {
238
+ ans += this.get(key)?.length ?? 0;
239
+ }
240
+ return ans;
241
+ }
242
+ /**
243
+ * Get the array of values for the given key, or `null` if not found.
244
+ *
245
+ * @param key - The key.
246
+ * @returns Array of values, or `null`.
247
+ */
248
+ get(key) {
249
+ return this.data.get(key) || null;
250
+ }
251
+ /**
252
+ * Get all keys in the dictionary.
253
+ *
254
+ * @returns Array of keys.
255
+ */
256
+ keys() {
257
+ return Array.from(this.data.keys());
258
+ }
259
+ /**
260
+ * Remove a specific value from the array associated with the given key.
261
+ *
262
+ * @param key - The key.
263
+ * @param value - The value to remove.
264
+ */
265
+ remove(key, value) {
266
+ const values = this.get(key);
267
+ if (!values) {
268
+ return;
269
+ }
270
+ values.remove(value);
271
+ if (values.length === 0) {
272
+ this.clear(key);
273
+ }
274
+ }
275
+ };
276
+
277
+ // src/obsidian/implementations/constants/FileExtension.ts
278
+ var FileExtension = {
279
+ _3gp: "3gp",
280
+ avif: "avif",
281
+ bmp: "bmp",
282
+ canvas: "canvas",
283
+ flac: "flac",
284
+ gif: "gif",
285
+ jpeg: "jpeg",
286
+ jpg: "jpg",
287
+ m4a: "m4a",
288
+ md: "md",
289
+ mkv: "mkv",
290
+ mov: "mov",
291
+ mp3: "mp3",
292
+ mp4: "mp4",
293
+ oga: "oga",
294
+ ogg: "ogg",
295
+ ogv: "ogv",
296
+ opus: "opus",
297
+ pdf: "pdf",
298
+ png: "png",
299
+ svg: "svg",
300
+ wav: "wav",
301
+ webm: "webm",
302
+ webp: "webp"
303
+ };
304
+
305
+ // src/obsidian/implementations/constants/InternalPluginName.ts
306
+ var InternalPluginName = {
307
+ /**
308
+ * Plugin name in UI: Audio recorder.
309
+ */
310
+ AudioRecorder: "audio-recorder",
311
+ /**
312
+ * Plugin name in UI: Backlinks.
313
+ */
314
+ Backlink: "backlink",
315
+ /**
316
+ * Plugin name in UI: Bases.
317
+ */
318
+ Bases: "bases",
319
+ /**
320
+ * Plugin name in UI: Bookmarks.
321
+ */
322
+ Bookmarks: "bookmarks",
323
+ /**
324
+ * Plugin name in UI: Canvas.
325
+ */
326
+ Canvas: "canvas",
327
+ /**
328
+ * Plugin name in UI: Command palette.
329
+ */
330
+ CommandPalette: "command-palette",
331
+ /**
332
+ * Plugin name in UI: Daily notes.
333
+ */
334
+ DailyNotes: "daily-notes",
335
+ /**
336
+ * Plugin name in UI: (hidden).
337
+ */
338
+ EditorStatus: "editor-status",
339
+ /**
340
+ * Plugin name in UI: Files.
341
+ */
342
+ FileExplorer: "file-explorer",
343
+ /**
344
+ * Plugin name in UI: File recovery.
345
+ */
346
+ FileRecovery: "file-recovery",
347
+ /**
348
+ * Plugin name in UI: Footnotes.
349
+ */
350
+ Footnotes: "footnotes",
351
+ /**
352
+ * Plugin name in UI: Search.
353
+ */
354
+ GlobalSearch: "global-search",
355
+ /**
356
+ * Plugin name in UI: Graph view.
357
+ */
358
+ Graph: "graph",
359
+ /**
360
+ * Plugin name in UI: Format converter.
361
+ */
362
+ MarkdownImporter: "markdown-importer",
363
+ /**
364
+ * Plugin name in UI: Note composer.
365
+ */
366
+ NoteComposer: "note-composer",
367
+ /**
368
+ * Plugin name in UI: Outgoing links.
369
+ */
370
+ OutgoingLink: "outgoing-link",
371
+ /**
372
+ * Plugin name in UI: Outline.
373
+ */
374
+ Outline: "outline",
375
+ /**
376
+ * Plugin name in UI: Page preview.
377
+ */
378
+ PagePreview: "page-preview",
379
+ /**
380
+ * Plugin name in UI: Properties view.
381
+ */
382
+ Properties: "properties",
383
+ /**
384
+ * Plugin name in UI: Publish.
385
+ */
386
+ Publish: "publish",
387
+ /**
388
+ * Plugin name in UI: Random note.
389
+ */
390
+ RandomNote: "random-note",
391
+ /**
392
+ * Plugin name in UI: Slash commands.
393
+ */
394
+ SlashCommand: "slash-command",
395
+ /**
396
+ * Plugin name in UI: Slides.
397
+ */
398
+ Slides: "slides",
399
+ /**
400
+ * Plugin name in UI: Quick Switcher.
401
+ */
402
+ Switcher: "switcher",
403
+ /**
404
+ * Plugin name in UI: Sync.
405
+ */
406
+ Sync: "sync",
407
+ /**
408
+ * Plugin name in UI: Tags view.
409
+ */
410
+ TagPane: "tag-pane",
411
+ /**
412
+ * Plugin name in UI: Templates.
413
+ */
414
+ Templates: "templates",
415
+ /**
416
+ * Plugin name in UI: Web viewer.
417
+ */
418
+ Webviewer: "webviewer",
419
+ /**
420
+ * Plugin name in UI: Word count.
421
+ */
422
+ WordCount: "word-count",
423
+ /**
424
+ * Plugin name in UI: Workspaces.
425
+ */
426
+ Workspaces: "workspaces",
427
+ /**
428
+ * Plugin name in UI: Unique note creator.
429
+ */
430
+ ZkPrefixer: "zk-prefixer"
431
+ };
432
+
433
+ // src/obsidian/implementations/constants/ViewType.ts
434
+ var ViewType = {
435
+ AllProperties: "all-properties",
436
+ Audio: "audio",
437
+ Backlink: InternalPluginName.Backlink,
438
+ Bases: InternalPluginName.Bases,
439
+ Bookmarks: InternalPluginName.Bookmarks,
440
+ Canvas: InternalPluginName.Canvas,
441
+ Empty: "empty",
442
+ FileExplorer: InternalPluginName.FileExplorer,
443
+ FileProperties: "file-properties",
444
+ Graph: InternalPluginName.Graph,
445
+ Image: "image",
446
+ LocalGraph: "localgraph",
447
+ Markdown: "markdown",
448
+ OutgoingLink: InternalPluginName.OutgoingLink,
449
+ Outline: InternalPluginName.Outline,
450
+ Pdf: "pdf",
451
+ ReleaseNotes: "release-notes",
452
+ Search: "search",
453
+ Sync: "sync",
454
+ Table: "table",
455
+ Tag: "tag",
456
+ Video: "video",
457
+ Webviewer: "webviewer",
458
+ WebviewerHistory: "webviewer-history"
459
+ };
460
+
461
+ // src/obsidian/implementations/constructors/augmentations/bases/getBasesEntryConstructor.ts
462
+ var import_obsidian = require("obsidian");
463
+ function getBasesEntryConstructor() {
464
+ return import_obsidian.BasesEntry;
465
+ }
466
+
467
+ // src/obsidian/implementations/constructors/augmentations/bases/getBasesEntryGroupConstructor.ts
468
+ var import_obsidian2 = require("obsidian");
469
+ function getBasesEntryGroupConstructor() {
470
+ return import_obsidian2.BasesEntryGroup;
471
+ }
472
+
473
+ // src/obsidian/implementations/constructors/augmentations/bases/getBasesQueryResultConstructor.ts
474
+ var import_obsidian3 = require("obsidian");
475
+ function getBasesQueryResultConstructor() {
476
+ return import_obsidian3.BasesQueryResult;
477
+ }
478
+
479
+ // src/obsidian/implementations/constructors/augmentations/bases/getBasesViewConfigConstructor.ts
480
+ var import_obsidian4 = require("obsidian");
481
+ function getBasesViewConfigConstructor() {
482
+ return import_obsidian4.BasesViewConfig;
483
+ }
484
+
485
+ // src/obsidian/implementations/constructors/augmentations/bases/getQueryControllerConstructor.ts
486
+ var import_obsidian5 = require("obsidian");
487
+ function getQueryControllerConstructor() {
488
+ return import_obsidian5.QueryController;
489
+ }
490
+
491
+ // src/obsidian/implementations/constructors/augmentations/getAppConstructor.ts
492
+ var import_obsidian6 = require("obsidian");
493
+ function getAppConstructor() {
494
+ return import_obsidian6.App;
495
+ }
496
+
497
+ // src/obsidian/implementations/constructors/augmentations/getCapacitorAdapterConstructor.ts
498
+ var import_obsidian7 = require("obsidian");
499
+ function getCapacitorAdapterConstructor() {
500
+ return import_obsidian7.CapacitorAdapter;
501
+ }
502
+
503
+ // src/obsidian/implementations/constructors/augmentations/getConfirmationModalConstructor.ts
504
+ var import_obsidian8 = require("obsidian");
505
+ function getConfirmationModalConstructor() {
506
+ return import_obsidian8.ConfirmationModal;
507
+ }
508
+
509
+ // src/obsidian/implementations/constructors/augmentations/getEditorConstructor.ts
510
+ var import_obsidian9 = require("obsidian");
511
+ function getEditorConstructor() {
512
+ return import_obsidian9.Editor;
513
+ }
514
+
515
+ // src/obsidian/implementations/constructors/augmentations/getEventsConstructor.ts
516
+ var import_obsidian10 = require("obsidian");
517
+ function getEventsConstructor() {
518
+ return import_obsidian10.Events;
519
+ }
520
+
521
+ // src/obsidian/implementations/constructors/augmentations/getFileManagerConstructor.ts
522
+ var import_obsidian11 = require("obsidian");
523
+ function getFileManagerConstructor() {
524
+ return import_obsidian11.FileManager;
525
+ }
526
+
527
+ // src/obsidian/implementations/constructors/augmentations/getFileSystemAdapterConstructor.ts
528
+ var import_obsidian12 = require("obsidian");
529
+ function getFileSystemAdapterConstructor() {
530
+ return import_obsidian12.FileSystemAdapter;
531
+ }
532
+
533
+ // src/obsidian/implementations/constructors/augmentations/getFuzzySuggestModalConstructor.ts
534
+ var import_obsidian13 = require("obsidian");
535
+ function getFuzzySuggestModalConstructor() {
536
+ return import_obsidian13.FuzzySuggestModal;
537
+ }
538
+
539
+ // src/obsidian/implementations/constructors/augmentations/getHoverPopoverConstructor.ts
540
+ var import_obsidian14 = require("obsidian");
541
+ function getHoverPopoverConstructor() {
542
+ return import_obsidian14.HoverPopover;
543
+ }
544
+
545
+ // src/obsidian/implementations/constructors/augmentations/getKeymapConstructor.ts
546
+ var import_obsidian15 = require("obsidian");
547
+ function getKeymapConstructor() {
548
+ return import_obsidian15.Keymap;
549
+ }
550
+
551
+ // src/obsidian/implementations/constructors/augmentations/getMarkdownPreviewRendererConstructor.ts
552
+ var import_obsidian16 = require("obsidian");
553
+ function getMarkdownPreviewRendererConstructor() {
554
+ return import_obsidian16.MarkdownPreviewRenderer;
555
+ }
556
+
557
+ // src/obsidian/implementations/constructors/augmentations/getMarkdownPreviewViewConstructor.ts
558
+ var import_obsidian17 = require("obsidian");
559
+ function getMarkdownPreviewViewConstructor() {
560
+ return import_obsidian17.MarkdownPreviewView;
561
+ }
562
+
563
+ // src/obsidian/implementations/constructors/augmentations/getMarkdownRenderChildConstructor.ts
564
+ var import_obsidian18 = require("obsidian");
565
+ function getMarkdownRenderChildConstructor() {
566
+ return import_obsidian18.MarkdownRenderChild;
567
+ }
568
+
569
+ // src/obsidian/implementations/constructors/augmentations/getMarkdownRendererConstructor.ts
570
+ var import_obsidian19 = require("obsidian");
571
+ function getMarkdownRendererConstructor() {
572
+ return import_obsidian19.MarkdownRenderer;
573
+ }
574
+
575
+ // src/obsidian/implementations/constructors/augmentations/getMenuConstructor.ts
576
+ var import_obsidian20 = require("obsidian");
577
+ function getMenuConstructor() {
578
+ return import_obsidian20.Menu;
579
+ }
580
+
581
+ // src/obsidian/implementations/constructors/augmentations/getMenuItemConstructor.ts
582
+ var import_obsidian21 = require("obsidian");
583
+ function getMenuItemConstructor() {
584
+ return import_obsidian21.MenuItem;
585
+ }
586
+
587
+ // src/obsidian/implementations/constructors/augmentations/getMenuSeparatorConstructor.ts
588
+ var import_obsidian22 = require("obsidian");
589
+ function getMenuSeparatorConstructor() {
590
+ return import_obsidian22.MenuSeparator;
591
+ }
592
+
593
+ // src/obsidian/implementations/constructors/augmentations/getMetadataCacheConstructor.ts
594
+ var import_obsidian23 = require("obsidian");
595
+ function getMetadataCacheConstructor() {
596
+ return import_obsidian23.MetadataCache;
597
+ }
598
+
599
+ // src/obsidian/implementations/constructors/augmentations/getModalConstructor.ts
600
+ var import_obsidian24 = require("obsidian");
601
+ function getModalConstructor() {
602
+ return import_obsidian24.Modal;
603
+ }
604
+
605
+ // src/obsidian/implementations/constructors/augmentations/getNoticeConstructor.ts
606
+ var import_obsidian25 = require("obsidian");
607
+ function getNoticeConstructor() {
608
+ return import_obsidian25.Notice;
609
+ }
610
+
611
+ // src/obsidian/implementations/constructors/augmentations/getRenderContextConstructor.ts
612
+ var import_obsidian26 = require("obsidian");
613
+ function getRenderContextConstructor() {
614
+ return import_obsidian26.RenderContext;
615
+ }
616
+
617
+ // src/obsidian/implementations/constructors/augmentations/getScopeConstructor.ts
618
+ var import_obsidian27 = require("obsidian");
619
+ function getScopeConstructor() {
620
+ return import_obsidian27.Scope;
621
+ }
622
+
623
+ // src/obsidian/implementations/constructors/augmentations/getSecretStorageConstructor.ts
624
+ var import_obsidian28 = require("obsidian");
625
+ function getSecretStorageConstructor() {
626
+ return import_obsidian28.SecretStorage;
627
+ }
628
+
629
+ // src/obsidian/implementations/constructors/augmentations/getSettingConstructor.ts
630
+ var import_obsidian29 = require("obsidian");
631
+ function getSettingConstructor() {
632
+ return import_obsidian29.Setting;
633
+ }
634
+
635
+ // src/obsidian/implementations/constructors/augmentations/getSettingGroupConstructor.ts
636
+ var import_obsidian30 = require("obsidian");
637
+ function getSettingGroupConstructor() {
638
+ return import_obsidian30.SettingGroup;
639
+ }
640
+
641
+ // src/obsidian/implementations/constructors/augmentations/getSettingPageConstructor.ts
642
+ var import_obsidian31 = require("obsidian");
643
+ function getSettingPageConstructor() {
644
+ return import_obsidian31.SettingPage;
645
+ }
646
+
647
+ // src/obsidian/implementations/constructors/augmentations/getSettingTabConstructor.ts
648
+ var import_obsidian32 = require("obsidian");
649
+ function getSettingTabConstructor() {
650
+ return import_obsidian32.SettingTab;
651
+ }
652
+
653
+ // src/obsidian/implementations/constructors/augmentations/getTAbstractFileConstructor.ts
654
+ var import_obsidian33 = require("obsidian");
655
+ function getTAbstractFileConstructor() {
656
+ return import_obsidian33.TAbstractFile;
657
+ }
658
+
659
+ // src/obsidian/implementations/constructors/augmentations/getTasksConstructor.ts
660
+ var import_obsidian34 = require("obsidian");
661
+ function getTasksConstructor() {
662
+ return import_obsidian34.Tasks;
663
+ }
664
+
665
+ // src/obsidian/implementations/constructors/augmentations/getTFileConstructor.ts
666
+ var import_obsidian35 = require("obsidian");
667
+ function getTFileConstructor() {
668
+ return import_obsidian35.TFile;
669
+ }
670
+
671
+ // src/obsidian/implementations/constructors/augmentations/getTFolderConstructor.ts
672
+ var import_obsidian36 = require("obsidian");
673
+ function getTFolderConstructor() {
674
+ return import_obsidian36.TFolder;
675
+ }
676
+
677
+ // src/obsidian/implementations/constructors/augmentations/getVaultConstructor.ts
678
+ var import_obsidian37 = require("obsidian");
679
+ function getVaultConstructor() {
680
+ return import_obsidian37.Vault;
681
+ }
682
+
683
+ // src/obsidian/implementations/constructors/augmentations/getWorkspaceConstructor.ts
684
+ var import_obsidian38 = require("obsidian");
685
+ function getWorkspaceConstructor() {
686
+ return import_obsidian38.Workspace;
687
+ }
688
+
689
+ // src/obsidian/implementations/constructors/augmentations/getWorkspaceContainerConstructor.ts
690
+ var import_obsidian39 = require("obsidian");
691
+ function getWorkspaceContainerConstructor() {
692
+ return import_obsidian39.WorkspaceContainer;
693
+ }
694
+
695
+ // src/obsidian/implementations/constructors/augmentations/getWorkspaceFloatingConstructor.ts
696
+ var import_obsidian40 = require("obsidian");
697
+ function getWorkspaceFloatingConstructor() {
698
+ return import_obsidian40.WorkspaceFloating;
699
+ }
700
+
701
+ // src/obsidian/implementations/constructors/augmentations/getWorkspaceItemConstructor.ts
702
+ var import_obsidian41 = require("obsidian");
703
+ function getWorkspaceItemConstructor() {
704
+ return import_obsidian41.WorkspaceItem;
705
+ }
706
+
707
+ // src/obsidian/implementations/constructors/augmentations/getWorkspaceLeafConstructor.ts
708
+ var import_obsidian42 = require("obsidian");
709
+ function getWorkspaceLeafConstructor() {
710
+ return import_obsidian42.WorkspaceLeaf;
711
+ }
712
+
713
+ // src/obsidian/implementations/constructors/augmentations/getWorkspaceMobileDrawerConstructor.ts
714
+ var import_obsidian43 = require("obsidian");
715
+ function getWorkspaceMobileDrawerConstructor() {
716
+ return import_obsidian43.WorkspaceMobileDrawer;
717
+ }
718
+
719
+ // src/obsidian/implementations/constructors/augmentations/getWorkspaceParentConstructor.ts
720
+ var import_obsidian44 = require("obsidian");
721
+ function getWorkspaceParentConstructor() {
722
+ return import_obsidian44.WorkspaceParent;
723
+ }
724
+
725
+ // src/obsidian/implementations/constructors/augmentations/getWorkspaceRibbonConstructor.ts
726
+ var import_obsidian45 = require("obsidian");
727
+ function getWorkspaceRibbonConstructor() {
728
+ return import_obsidian45.WorkspaceRibbon;
729
+ }
730
+
731
+ // src/obsidian/implementations/constructors/augmentations/getWorkspaceRootConstructor.ts
732
+ var import_obsidian46 = require("obsidian");
733
+ function getWorkspaceRootConstructor() {
734
+ return import_obsidian46.WorkspaceRoot;
735
+ }
736
+
737
+ // src/obsidian/implementations/constructors/augmentations/getWorkspaceSidedockConstructor.ts
738
+ var import_obsidian47 = require("obsidian");
739
+ function getWorkspaceSidedockConstructor() {
740
+ return import_obsidian47.WorkspaceSidedock;
741
+ }
742
+
743
+ // src/obsidian/implementations/constructors/augmentations/getWorkspaceSplitConstructor.ts
744
+ var import_obsidian48 = require("obsidian");
745
+ function getWorkspaceSplitConstructor() {
746
+ return import_obsidian48.WorkspaceSplit;
747
+ }
748
+
749
+ // src/obsidian/implementations/constructors/augmentations/getWorkspaceTabsConstructor.ts
750
+ var import_obsidian49 = require("obsidian");
751
+ function getWorkspaceTabsConstructor() {
752
+ return import_obsidian49.WorkspaceTabs;
753
+ }
754
+
755
+ // src/obsidian/implementations/constructors/augmentations/getWorkspaceWindowConstructor.ts
756
+ var import_obsidian50 = require("obsidian");
757
+ function getWorkspaceWindowConstructor() {
758
+ return import_obsidian50.WorkspaceWindow;
759
+ }
760
+
761
+ // src/obsidian/implementations/constructors/augmentations/settings/setting-components/getAbstractTextComponentConstructor.ts
762
+ var import_obsidian51 = require("obsidian");
763
+ function getAbstractTextComponentConstructor() {
764
+ return import_obsidian51.AbstractTextComponent;
765
+ }
766
+
767
+ // src/obsidian/implementations/constructors/augmentations/settings/setting-components/getBaseComponentConstructor.ts
768
+ var import_obsidian52 = require("obsidian");
769
+ function getBaseComponentConstructor() {
770
+ return import_obsidian52.BaseComponent;
771
+ }
772
+
773
+ // src/obsidian/implementations/constructors/augmentations/settings/setting-components/getButtonComponentConstructor.ts
774
+ var import_obsidian53 = require("obsidian");
775
+ function getButtonComponentConstructor() {
776
+ return import_obsidian53.ButtonComponent;
777
+ }
778
+
779
+ // src/obsidian/implementations/constructors/augmentations/settings/setting-components/getColorComponentConstructor.ts
780
+ var import_obsidian54 = require("obsidian");
781
+ function getColorComponentConstructor() {
782
+ return import_obsidian54.ColorComponent;
783
+ }
784
+
785
+ // src/obsidian/implementations/constructors/augmentations/settings/setting-components/getComponentConstructor.ts
786
+ var import_obsidian55 = require("obsidian");
787
+ function getComponentConstructor() {
788
+ return import_obsidian55.Component;
789
+ }
790
+
791
+ // src/obsidian/implementations/constructors/augmentations/settings/setting-components/getConfirmationButtonConstructor.ts
792
+ var import_obsidian56 = require("obsidian");
793
+ function getConfirmationButtonConstructor() {
794
+ return import_obsidian56.ConfirmationButton;
795
+ }
796
+
797
+ // src/obsidian/implementations/constructors/augmentations/settings/setting-components/getDisplayValueComponentConstructor.ts
798
+ var import_obsidian57 = require("obsidian");
799
+ function getDisplayValueComponentConstructor() {
800
+ return import_obsidian57.DisplayValueComponent;
801
+ }
802
+
803
+ // src/obsidian/implementations/constructors/augmentations/settings/setting-components/getDropdownComponentConstructor.ts
804
+ var import_obsidian58 = require("obsidian");
805
+ function getDropdownComponentConstructor() {
806
+ return import_obsidian58.DropdownComponent;
807
+ }
808
+
809
+ // src/obsidian/implementations/constructors/augmentations/settings/setting-components/getExtraButtonComponentConstructor.ts
810
+ var import_obsidian59 = require("obsidian");
811
+ function getExtraButtonComponentConstructor() {
812
+ return import_obsidian59.ExtraButtonComponent;
813
+ }
814
+
815
+ // src/obsidian/implementations/constructors/augmentations/settings/setting-components/getMomentFormatComponentConstructor.ts
816
+ var import_obsidian60 = require("obsidian");
817
+ function getMomentFormatComponentConstructor() {
818
+ return import_obsidian60.MomentFormatComponent;
819
+ }
820
+
821
+ // src/obsidian/implementations/constructors/augmentations/settings/setting-components/getProgressBarComponentConstructor.ts
822
+ var import_obsidian61 = require("obsidian");
823
+ function getProgressBarComponentConstructor() {
824
+ return import_obsidian61.ProgressBarComponent;
825
+ }
826
+
827
+ // src/obsidian/implementations/constructors/augmentations/settings/setting-components/getSearchComponentConstructor.ts
828
+ var import_obsidian62 = require("obsidian");
829
+ function getSearchComponentConstructor() {
830
+ return import_obsidian62.SearchComponent;
831
+ }
832
+
833
+ // src/obsidian/implementations/constructors/augmentations/settings/setting-components/getSecretComponentConstructor.ts
834
+ var import_obsidian63 = require("obsidian");
835
+ function getSecretComponentConstructor() {
836
+ return import_obsidian63.SecretComponent;
837
+ }
838
+
839
+ // src/obsidian/implementations/constructors/augmentations/settings/setting-components/getSliderComponentConstructor.ts
840
+ var import_obsidian64 = require("obsidian");
841
+ function getSliderComponentConstructor() {
842
+ return import_obsidian64.SliderComponent;
843
+ }
844
+
845
+ // src/obsidian/implementations/constructors/augmentations/settings/setting-components/getTextAreaComponentConstructor.ts
846
+ var import_obsidian65 = require("obsidian");
847
+ function getTextAreaComponentConstructor() {
848
+ return import_obsidian65.TextAreaComponent;
849
+ }
850
+
851
+ // src/obsidian/implementations/constructors/augmentations/settings/setting-components/getTextComponentConstructor.ts
852
+ var import_obsidian66 = require("obsidian");
853
+ function getTextComponentConstructor() {
854
+ return import_obsidian66.TextComponent;
855
+ }
856
+
857
+ // src/obsidian/implementations/constructors/augmentations/settings/setting-components/getToggleComponentConstructor.ts
858
+ var import_obsidian67 = require("obsidian");
859
+ function getToggleComponentConstructor() {
860
+ return import_obsidian67.ToggleComponent;
861
+ }
862
+
863
+ // src/obsidian/implementations/constructors/augmentations/settings/setting-components/getValueComponentConstructor.ts
864
+ var import_obsidian68 = require("obsidian");
865
+ function getValueComponentConstructor() {
866
+ return import_obsidian68.ValueComponent;
867
+ }
868
+
869
+ // src/obsidian/implementations/constructors/augmentations/values/getBooleanValueConstructor.ts
870
+ var import_obsidian69 = require("obsidian");
871
+ function getBooleanValueConstructor() {
872
+ return import_obsidian69.BooleanValue;
873
+ }
874
+
875
+ // src/obsidian/implementations/constructors/augmentations/values/getDateValueConstructor.ts
876
+ var import_obsidian70 = require("obsidian");
877
+ function getDateValueConstructor() {
878
+ return import_obsidian70.DateValue;
879
+ }
880
+
881
+ // src/obsidian/implementations/constructors/augmentations/values/getDurationValueConstructor.ts
882
+ var import_obsidian71 = require("obsidian");
883
+ function getDurationValueConstructor() {
884
+ return import_obsidian71.DurationValue;
885
+ }
886
+
887
+ // src/obsidian/implementations/constructors/augmentations/values/getFileValueConstructor.ts
888
+ var import_obsidian72 = require("obsidian");
889
+ function getFileValueConstructor() {
890
+ return import_obsidian72.FileValue;
891
+ }
892
+
893
+ // src/obsidian/implementations/constructors/augmentations/values/getHTMLValueConstructor.ts
894
+ var import_obsidian73 = require("obsidian");
895
+ function getHTMLValueConstructor() {
896
+ return import_obsidian73.HTMLValue;
897
+ }
898
+
899
+ // src/obsidian/implementations/constructors/augmentations/values/getIconValueConstructor.ts
900
+ var import_obsidian74 = require("obsidian");
901
+ function getIconValueConstructor() {
902
+ return import_obsidian74.IconValue;
903
+ }
904
+
905
+ // src/obsidian/implementations/constructors/augmentations/values/getImageValueConstructor.ts
906
+ var import_obsidian75 = require("obsidian");
907
+ function getImageValueConstructor() {
908
+ return import_obsidian75.ImageValue;
909
+ }
910
+
911
+ // src/obsidian/implementations/constructors/augmentations/values/getLinkValueConstructor.ts
912
+ var import_obsidian76 = require("obsidian");
913
+ function getLinkValueConstructor() {
914
+ return import_obsidian76.LinkValue;
915
+ }
916
+
917
+ // src/obsidian/implementations/constructors/augmentations/values/getListValueConstructor.ts
918
+ var import_obsidian77 = require("obsidian");
919
+ function getListValueConstructor() {
920
+ return import_obsidian77.ListValue;
921
+ }
922
+
923
+ // src/obsidian/implementations/constructors/augmentations/values/getNotNullValueConstructor.ts
924
+ var import_obsidian78 = require("obsidian");
925
+ function getNotNullValueConstructor() {
926
+ return import_obsidian78.NotNullValue;
927
+ }
928
+
929
+ // src/obsidian/implementations/constructors/augmentations/values/getNullValueConstructor.ts
930
+ var import_obsidian79 = require("obsidian");
931
+ function getNullValueConstructor() {
932
+ return import_obsidian79.NullValue;
933
+ }
934
+
935
+ // src/obsidian/implementations/constructors/augmentations/values/getNumberValueConstructor.ts
936
+ var import_obsidian80 = require("obsidian");
937
+ function getNumberValueConstructor() {
938
+ return import_obsidian80.NumberValue;
939
+ }
940
+
941
+ // src/obsidian/implementations/constructors/augmentations/values/getObjectValueConstructor.ts
942
+ var import_obsidian81 = require("obsidian");
943
+ function getObjectValueConstructor() {
944
+ return import_obsidian81.ObjectValue;
945
+ }
946
+
947
+ // src/obsidian/implementations/constructors/augmentations/values/getRegExpValueConstructor.ts
948
+ var import_obsidian82 = require("obsidian");
949
+ function getRegExpValueConstructor() {
950
+ return import_obsidian82.RegExpValue;
951
+ }
952
+
953
+ // src/obsidian/implementations/constructors/augmentations/values/getRelativeDateValueConstructor.ts
954
+ var import_obsidian83 = require("obsidian");
955
+ function getRelativeDateValueConstructor() {
956
+ return import_obsidian83.RelativeDateValue;
957
+ }
958
+
959
+ // src/obsidian/implementations/constructors/augmentations/values/getStringValueConstructor.ts
960
+ var import_obsidian84 = require("obsidian");
961
+ function getStringValueConstructor() {
962
+ return import_obsidian84.StringValue;
963
+ }
964
+
965
+ // src/obsidian/implementations/constructors/augmentations/values/getTagValueConstructor.ts
966
+ var import_obsidian85 = require("obsidian");
967
+ function getTagValueConstructor() {
968
+ return import_obsidian85.TagValue;
969
+ }
970
+
971
+ // src/obsidian/implementations/constructors/augmentations/values/getUrlValueConstructor.ts
972
+ var import_obsidian86 = require("obsidian");
973
+ function getUrlValueConstructor() {
974
+ return import_obsidian86.UrlValue;
975
+ }
976
+
977
+ // src/obsidian/implementations/constructors/augmentations/values/getValueConstructor.ts
978
+ var import_obsidian87 = require("obsidian");
979
+ function getValueConstructor() {
980
+ return import_obsidian87.Value;
981
+ }
982
+
983
+ // src/obsidian/implementations/constructors/augmentations/views/getEditableFileViewConstructor.ts
984
+ var import_obsidian88 = require("obsidian");
985
+ function getEditableFileViewConstructor() {
986
+ return import_obsidian88.EditableFileView;
987
+ }
988
+
989
+ // src/obsidian/implementations/constructors/augmentations/views/getMarkdownViewConstructor.ts
990
+ var import_obsidian89 = require("obsidian");
991
+ function getMarkdownViewConstructor() {
992
+ return import_obsidian89.MarkdownView;
993
+ }
994
+
995
+ // src/obsidian/implementations/constructors/internals/getAppMenuBarManagerConstructor.ts
996
+ function getAppMenuBarManagerConstructor(app) {
997
+ return app.appMenuBarManager.constructor;
998
+ }
999
+
1000
+ // src/obsidian/implementations/constructors/internals/getAppSettingConstructor.ts
1001
+ function getAppSettingConstructor(app) {
1002
+ return app.setting.constructor;
1003
+ }
1004
+
1005
+ // src/obsidian/implementations/constructors/internals/getCliConstructor.ts
1006
+ function getCliConstructor(app) {
1007
+ return app.cli.constructor;
1008
+ }
1009
+
1010
+ // src/obsidian/implementations/constructors/internals/getCommandsConstructor.ts
1011
+ function getCommandsConstructor(app) {
1012
+ return app.commands.constructor;
1013
+ }
1014
+
1015
+ // src/obsidian/implementations/constructors/internals/getCustomCSSConstructor.ts
1016
+ function getCustomCSSConstructor(app) {
1017
+ return app.customCss.constructor;
1018
+ }
1019
+
1020
+ // src/obsidian/implementations/constructors/internals/getDragManagerConstructor.ts
1021
+ function getDragManagerConstructor(app) {
1022
+ return app.dragManager.constructor;
1023
+ }
1024
+
1025
+ // src/obsidian/implementations/constructors/internals/getEditorSuggestsConstructor.ts
1026
+ function getEditorSuggestsConstructor(app) {
1027
+ return app.workspace.editorSuggest.constructor;
1028
+ }
1029
+
1030
+ // src/obsidian/implementations/constructors/internals/getEmbedRegistryConstructor.ts
1031
+ function getEmbedRegistryConstructor(app) {
1032
+ return app.embedRegistry.constructor;
1033
+ }
1034
+
1035
+ // src/obsidian/implementations/constructors/internals/getFoldManagerConstructor.ts
1036
+ function getFoldManagerConstructor(app) {
1037
+ return app.foldManager.constructor;
1038
+ }
1039
+
1040
+ // src/obsidian/implementations/constructors/internals/getFrameDomConstructor.ts
1041
+ function getFrameDomConstructor() {
1042
+ return window.frameDom.constructor;
1043
+ }
1044
+
1045
+ // src/obsidian/implementations/constructors/internals/getHotkeyManagerConstructor.ts
1046
+ function getHotkeyManagerConstructor(app) {
1047
+ return app.hotkeyManager.constructor;
1048
+ }
1049
+
1050
+ // src/obsidian/implementations/constructors/internals/getMetadataTypeManagerConstructor.ts
1051
+ function getMetadataTypeManagerConstructor(app) {
1052
+ return app.metadataTypeManager.constructor;
1053
+ }
1054
+
1055
+ // src/obsidian/implementations/constructors/internals/getObsidianDOMConstructor.ts
1056
+ function getObsidianDOMConstructor(app) {
1057
+ return app.dom.constructor;
1058
+ }
1059
+
1060
+ // src/obsidian/implementations/constructors/internals/getPluginsConstructor.ts
1061
+ function getPluginsConstructor(app) {
1062
+ return app.plugins.constructor;
1063
+ }
1064
+
1065
+ // src/obsidian/implementations/constructors/internals/getRecentFileTrackerConstructor.ts
1066
+ function getRecentFileTrackerConstructor(app) {
1067
+ return app.workspace.recentFileTracker.constructor;
1068
+ }
1069
+
1070
+ // src/obsidian/implementations/constructors/internals/getShareReceiverConstructor.ts
1071
+ function getShareReceiverConstructor(app) {
1072
+ return app.shareReceiver.constructor;
1073
+ }
1074
+
1075
+ // src/obsidian/implementations/constructors/internals/getStatusBarConstructor.ts
1076
+ function getStatusBarConstructor(app) {
1077
+ return app.statusBar.constructor;
1078
+ }
1079
+
1080
+ // src/obsidian/implementations/constructors/internals/getViewRegistryConstructor.ts
1081
+ function getViewRegistryConstructor(app) {
1082
+ return app.viewRegistry.constructor;
1083
+ }
1084
+
1085
+ // src/obsidian/implementations/constructors/internals/getWorkspaceLeafHistoryConstructor.ts
1086
+ function getWorkspaceLeafHistoryConstructor(app) {
1087
+ const leaf = app.workspace.getMostRecentLeaf();
1088
+ if (!leaf) {
1089
+ throw new Error("No workspace leaf available to extract WorkspaceLeafHistory constructor");
1090
+ }
1091
+ return leaf.history.constructor;
1092
+ }
1093
+
1094
+ // src/obsidian/implementations/constructors/internals/internal-plugins/bases/getBasesContextConstructor.ts
1095
+ function getBasesContextConstructor(app) {
1096
+ const basesPlugin = app.internalPlugins.getPluginById(InternalPluginName.Bases);
1097
+ if (!basesPlugin) {
1098
+ throw new Error(`The ${InternalPluginName.Bases} plugin is not loaded.`);
1099
+ }
1100
+ const queryControllerConstructor = getQueryControllerConstructor();
1101
+ const queryController = new queryControllerConstructor(app, basesPlugin.instance, createDiv());
1102
+ queryController.query = {};
1103
+ const basesContext = queryController.buildBasesContext();
1104
+ return basesContext.constructor;
1105
+ }
1106
+
1107
+ // src/obsidian/implementations/constructors/internals/internal-plugins/bases/getBasesQueryConstructor.ts
1108
+ var import_obsidian91 = require("obsidian");
1109
+
1110
+ // src/obsidian/implementations/functions/getBasesControllerFromRender.ts
1111
+ var import_obsidian90 = require("obsidian");
1112
+ async function getBasesControllerFromRender(app, content, sourcePath, component) {
1113
+ const containerEl = createDiv();
1114
+ containerEl.style.position = "absolute";
1115
+ containerEl.style.left = "-9999px";
1116
+ containerEl.style.width = "600px";
1117
+ document.body.appendChild(containerEl);
1118
+ component.register(() => {
1119
+ containerEl.remove();
1120
+ });
1121
+ await import_obsidian90.MarkdownRenderer.render(app, `\`\`\`base
1122
+ ${content}
1123
+ \`\`\`
1124
+ `, containerEl, sourcePath, component);
1125
+ const queue = [component];
1126
+ const seen = /* @__PURE__ */ new Set();
1127
+ while (queue.length > 0) {
1128
+ const node = queue.shift();
1129
+ if (!node || seen.has(node)) {
1130
+ continue;
1131
+ }
1132
+ seen.add(node);
1133
+ if (node.results instanceof Map && "query" in node) {
1134
+ return node;
1135
+ }
1136
+ for (const child of node._children ?? []) {
1137
+ queue.push(child);
1138
+ }
1139
+ }
1140
+ throw new Error("Could not locate the BasesController in the rendered component tree.");
1141
+ }
1142
+
1143
+ // src/obsidian/implementations/constructors/internals/internal-plugins/bases/getBasesQueryConstructor.ts
1144
+ async function getBasesQueryConstructor(app) {
1145
+ const component = new import_obsidian91.Component();
1146
+ try {
1147
+ const controller = await getBasesControllerFromRender(app, "views: []\n", "getBasesQueryConstructor.base", component);
1148
+ const query = controller.query;
1149
+ if (!query) {
1150
+ throw new Error("The rendered base did not produce a query.");
1151
+ }
1152
+ return query.constructor;
1153
+ } finally {
1154
+ component.unload();
1155
+ }
1156
+ }
1157
+
1158
+ // src/obsidian/implementations/constructors/internals/internal-plugins/getInternalPluginConstructor.ts
1159
+ function getInternalPluginConstructor(app) {
1160
+ const anyPlugin = Object.values(app.internalPlugins.plugins)[0];
1161
+ if (!anyPlugin) {
1162
+ throw new Error("No internal plugin found");
1163
+ }
1164
+ return anyPlugin.constructor;
1165
+ }
1166
+
1167
+ // src/obsidian/implementations/constructors/internals/internal-plugins/getInternalPluginsConstructor.ts
1168
+ function getInternalPluginsConstructor(app) {
1169
+ return app.internalPlugins.constructor;
1170
+ }
1171
+
1172
+ // src/obsidian/implementations/constructors/internals/views/getViewConstructorByViewType.ts
1173
+ function getViewConstructorByViewType(app, viewType) {
1174
+ const leaf = app.workspace.createLeafInTabGroup();
1175
+ try {
1176
+ const viewCreator = app.viewRegistry.getViewCreatorByType(viewType);
1177
+ if (!viewCreator) {
1178
+ throw new Error("View creator not found");
1179
+ }
1180
+ const view = viewCreator(leaf);
1181
+ return view.constructor;
1182
+ } finally {
1183
+ leaf.detach();
1184
+ }
1185
+ }
1186
+
1187
+ // src/obsidian/implementations/constructors/internals/views/getAllPropertiesViewConstructor.ts
1188
+ function getAllPropertiesViewConstructor(app) {
1189
+ return getViewConstructorByViewType(app, ViewType.AllProperties);
1190
+ }
1191
+
1192
+ // src/obsidian/implementations/constructors/internals/views/getAudioViewConstructor.ts
1193
+ function getAudioViewConstructor(app) {
1194
+ return getViewConstructorByViewType(app, ViewType.Audio);
1195
+ }
1196
+
1197
+ // src/obsidian/implementations/constructors/internals/views/getBacklinkViewConstructor.ts
1198
+ function getBacklinkViewConstructor(app) {
1199
+ return getViewConstructorByViewType(app, ViewType.Backlink);
1200
+ }
1201
+
1202
+ // src/obsidian/implementations/constructors/internals/views/getBasesViewConstructor.ts
1203
+ function getBasesViewConstructor(app) {
1204
+ return getViewConstructorByViewType(app, ViewType.Bases);
1205
+ }
1206
+
1207
+ // src/obsidian/implementations/constructors/internals/views/getBookmarksViewConstructor.ts
1208
+ function getBookmarksViewConstructor(app) {
1209
+ return getViewConstructorByViewType(app, ViewType.Bookmarks);
1210
+ }
1211
+
1212
+ // src/obsidian/implementations/constructors/internals/views/getCanvasViewConstructor.ts
1213
+ function getCanvasViewConstructor(app) {
1214
+ return getViewConstructorByViewType(app, ViewType.Canvas);
1215
+ }
1216
+
1217
+ // src/obsidian/implementations/constructors/internals/views/getEmptyViewConstructor.ts
1218
+ function getEmptyViewConstructor(app) {
1219
+ return getViewConstructorByViewType(app, ViewType.Empty);
1220
+ }
1221
+
1222
+ // src/obsidian/implementations/constructors/internals/views/getFileExplorerViewConstructor.ts
1223
+ function getFileExplorerViewConstructor(app) {
1224
+ return getViewConstructorByViewType(app, ViewType.FileExplorer);
1225
+ }
1226
+
1227
+ // src/obsidian/implementations/constructors/internals/views/getFilePropertiesViewConstructor.ts
1228
+ function getFilePropertiesViewConstructor(app) {
1229
+ return getViewConstructorByViewType(app, ViewType.FileProperties);
1230
+ }
1231
+
1232
+ // src/obsidian/implementations/constructors/internals/views/getGraphViewConstructor.ts
1233
+ function getGraphViewConstructor(app) {
1234
+ return getViewConstructorByViewType(app, ViewType.Graph);
1235
+ }
1236
+
1237
+ // src/obsidian/implementations/constructors/internals/views/getImageViewConstructor.ts
1238
+ function getImageViewConstructor(app) {
1239
+ return getViewConstructorByViewType(app, ViewType.Image);
1240
+ }
1241
+
1242
+ // src/obsidian/implementations/constructors/internals/views/getLocalGraphViewConstructor.ts
1243
+ function getLocalGraphViewConstructor(app) {
1244
+ return getViewConstructorByViewType(app, ViewType.LocalGraph);
1245
+ }
1246
+
1247
+ // src/obsidian/implementations/constructors/internals/views/getOutgoingLinkViewConstructor.ts
1248
+ function getOutgoingLinkViewConstructor(app) {
1249
+ return getViewConstructorByViewType(app, ViewType.OutgoingLink);
1250
+ }
1251
+
1252
+ // src/obsidian/implementations/constructors/internals/views/getOutlineViewConstructor.ts
1253
+ function getOutlineViewConstructor(app) {
1254
+ return getViewConstructorByViewType(app, ViewType.Outline);
1255
+ }
1256
+
1257
+ // src/obsidian/implementations/constructors/internals/views/getPdfViewConstructor.ts
1258
+ function getPdfViewConstructor(app) {
1259
+ return getViewConstructorByViewType(app, ViewType.Pdf);
1260
+ }
1261
+
1262
+ // src/obsidian/implementations/constructors/internals/views/getReleaseNotesViewConstructor.ts
1263
+ function getReleaseNotesViewConstructor(app) {
1264
+ return getViewConstructorByViewType(app, ViewType.ReleaseNotes);
1265
+ }
1266
+
1267
+ // src/obsidian/implementations/constructors/internals/views/getSearchViewConstructor.ts
1268
+ function getSearchViewConstructor(app) {
1269
+ return getViewConstructorByViewType(app, ViewType.Search);
1270
+ }
1271
+
1272
+ // src/obsidian/implementations/constructors/internals/views/getSyncViewConstructor.ts
1273
+ function getSyncViewConstructor(app) {
1274
+ return getViewConstructorByViewType(app, ViewType.Sync);
1275
+ }
1276
+
1277
+ // src/obsidian/implementations/constructors/internals/views/getTableViewConstructor.ts
1278
+ function getTableViewConstructor(app) {
1279
+ return getViewConstructorByViewType(app, ViewType.Table);
1280
+ }
1281
+
1282
+ // src/obsidian/implementations/constructors/internals/views/getTagViewConstructor.ts
1283
+ function getTagViewConstructor(app) {
1284
+ return getViewConstructorByViewType(app, ViewType.Tag);
1285
+ }
1286
+
1287
+ // src/obsidian/implementations/constructors/internals/views/getVideoViewConstructor.ts
1288
+ function getVideoViewConstructor(app) {
1289
+ return getViewConstructorByViewType(app, ViewType.Video);
1290
+ }
1291
+
1292
+ // src/obsidian/implementations/constructors/internals/views/getWebviewerHistoryViewConstructor.ts
1293
+ function getWebviewerHistoryViewConstructor(app) {
1294
+ return getViewConstructorByViewType(app, ViewType.WebviewerHistory);
1295
+ }
1296
+
1297
+ // src/obsidian/implementations/constructors/internals/views/getWebviewerViewConstructor.ts
1298
+ function getWebviewerViewConstructor(app) {
1299
+ return getViewConstructorByViewType(app, ViewType.Webviewer);
1300
+ }
1301
+
1302
+ // src/obsidian/implementations/constructors/internals/workspace/getWorkspaceProtocolHandlerConstructor.ts
1303
+ function getWorkspaceProtocolHandlerConstructor(app) {
1304
+ return app.workspace.protocolHandler.constructor;
1305
+ }
1306
+
1307
+ // src/obsidian/implementations/utils/PathUtils.ts
1308
+ function parentFolderPath(path) {
1309
+ return path.replace(/\/?[^/]*$/, "") || "/";
1310
+ }
1311
+
1312
+ // src/obsidian/implementations/functions/createTFolderInstance.ts
1313
+ function createTFolderInstance(app, path) {
1314
+ let folder = app.vault.getFolderByPath(path);
1315
+ if (folder) {
1316
+ return folder;
1317
+ }
1318
+ folder = new (getTFolderConstructor())(app.vault, path);
1319
+ folder.parent = createTFolderInstance(app, parentFolderPath(path));
1320
+ folder.deleted = true;
1321
+ return folder;
1322
+ }
1323
+
1324
+ // src/obsidian/implementations/functions/createTFileInstance.ts
1325
+ function createTFileInstance(app, path) {
1326
+ let file = app.vault.getFileByPath(path);
1327
+ if (file) {
1328
+ return file;
1329
+ }
1330
+ file = new (getTFileConstructor())(app.vault, path);
1331
+ file.parent = createTFolderInstance(app, parentFolderPath(path));
1332
+ file.deleted = true;
1333
+ return file;
1334
+ }
1335
+
1336
+ // src/obsidian/implementations/functions/evaluateBaseHeadless.ts
1337
+ var import_obsidian92 = require("obsidian");
1338
+ async function evaluateBaseHeadless(app, content, sourcePath) {
1339
+ const SCAN_POLL_INTERVAL_IN_MILLISECONDS = 50;
1340
+ const SCAN_TIMEOUT_IN_MILLISECONDS = 3e4;
1341
+ const component = new import_obsidian92.Component();
1342
+ try {
1343
+ const controller = await getBasesControllerFromRender(app, content, sourcePath, component);
1344
+ const startTime = performance.now();
1345
+ while (controller.initialScan) {
1346
+ if (performance.now() - startTime > SCAN_TIMEOUT_IN_MILLISECONDS) {
1347
+ throw new Error("Timed out waiting for the base initial scan to settle.");
1348
+ }
1349
+ await new Promise((resolve) => {
1350
+ window.setTimeout(resolve, SCAN_POLL_INTERVAL_IN_MILLISECONDS);
1351
+ });
1352
+ }
1353
+ return Array.from(controller.results.values());
1354
+ } finally {
1355
+ component.unload();
1356
+ }
1357
+ }
1358
+
1359
+ // src/obsidian/implementations/functions/getDataAdapterEx.ts
1360
+ function getDataAdapterEx(app) {
1361
+ return app.vault.adapter;
1362
+ }
1363
+
1364
+ // src/obsidian/implementations/functions/loadMermaid.ts
1365
+ var import_obsidian93 = require("obsidian");
1366
+ async function loadMermaid() {
1367
+ return await (0, import_obsidian93.loadMermaid)();
1368
+ }
1369
+
1370
+ // src/obsidian/implementations/functions/loadPdfJs.ts
1371
+ var import_obsidian94 = require("obsidian");
1372
+ async function loadPdfJs() {
1373
+ return await (0, import_obsidian94.loadPdfJs)();
1374
+ }
1375
+
1376
+ // src/obsidian/implementations/functions/loadPrism.ts
1377
+ var import_obsidian95 = require("obsidian");
1378
+ async function loadPrism() {
1379
+ return await (0, import_obsidian95.loadPrism)();
1380
+ }
1381
+
1382
+ // src/obsidian/implementations/type-guards/isReferenceCache.ts
1383
+ function isReferenceCache(reference) {
1384
+ return !!reference.position;
1385
+ }
1386
+
1387
+ // src/obsidian/implementations/type-guards/isEmbedCache.ts
1388
+ function isEmbedCache(reference) {
1389
+ return isReferenceCache(reference) && reference.original[0] === "!";
1390
+ }
1391
+
1392
+ // src/obsidian/implementations/type-guards/isFrontmatterLinkCache.ts
1393
+ function isFrontmatterLinkCache(reference) {
1394
+ return !!reference.key;
1395
+ }
1396
+
1397
+ // src/obsidian/implementations/type-guards/isLinkCache.ts
1398
+ function isLinkCache(reference) {
1399
+ return isReferenceCache(reference) && reference.original[0] !== "!";
1400
+ }
1401
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9pbmRleC50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NsYXNzZXMvQ3VzdG9tQXJyYXlEaWN0SW1wbC50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0YW50cy9GaWxlRXh0ZW5zaW9uLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RhbnRzL0ludGVybmFsUGx1Z2luTmFtZS50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0YW50cy9WaWV3VHlwZS50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2Jhc2VzL2dldEJhc2VzRW50cnlDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2Jhc2VzL2dldEJhc2VzRW50cnlHcm91cENvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvYmFzZXMvZ2V0QmFzZXNRdWVyeVJlc3VsdENvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvYmFzZXMvZ2V0QmFzZXNWaWV3Q29uZmlnQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9iYXNlcy9nZXRRdWVyeUNvbnRyb2xsZXJDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldEFwcENvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0Q2FwYWNpdG9yQWRhcHRlckNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0Q29uZmlybWF0aW9uTW9kYWxDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldEVkaXRvckNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0RXZlbnRzQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRGaWxlTWFuYWdlckNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0RmlsZVN5c3RlbUFkYXB0ZXJDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldEZ1enp5U3VnZ2VzdE1vZGFsQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRIb3ZlclBvcG92ZXJDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldEtleW1hcENvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0TWFya2Rvd25QcmV2aWV3UmVuZGVyZXJDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldE1hcmtkb3duUHJldmlld1ZpZXdDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldE1hcmtkb3duUmVuZGVyQ2hpbGRDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldE1hcmtkb3duUmVuZGVyZXJDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldE1lbnVDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldE1lbnVJdGVtQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRNZW51U2VwYXJhdG9yQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRNZXRhZGF0YUNhY2hlQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRNb2RhbENvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0Tm90aWNlQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRSZW5kZXJDb250ZXh0Q29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRTY29wZUNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0U2VjcmV0U3RvcmFnZUNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0U2V0dGluZ0NvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0U2V0dGluZ0dyb3VwQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRTZXR0aW5nUGFnZUNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0U2V0dGluZ1RhYkNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0VEFic3RyYWN0RmlsZUNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0VGFza3NDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldFRGaWxlQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRURm9sZGVyQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRWYXVsdENvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0V29ya3NwYWNlQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRXb3Jrc3BhY2VDb250YWluZXJDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldFdvcmtzcGFjZUZsb2F0aW5nQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRXb3Jrc3BhY2VJdGVtQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRXb3Jrc3BhY2VMZWFmQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRXb3Jrc3BhY2VNb2JpbGVEcmF3ZXJDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldFdvcmtzcGFjZVBhcmVudENvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0V29ya3NwYWNlUmliYm9uQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRXb3Jrc3BhY2VSb290Q29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRXb3Jrc3BhY2VTaWRlZG9ja0NvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0V29ya3NwYWNlU3BsaXRDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldFdvcmtzcGFjZVRhYnNDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldFdvcmtzcGFjZVdpbmRvd0NvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldEFic3RyYWN0VGV4dENvbXBvbmVudENvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldEJhc2VDb21wb25lbnRDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3NldHRpbmdzL3NldHRpbmctY29tcG9uZW50cy9nZXRCdXR0b25Db21wb25lbnRDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3NldHRpbmdzL3NldHRpbmctY29tcG9uZW50cy9nZXRDb2xvckNvbXBvbmVudENvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldENvbXBvbmVudENvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldENvbmZpcm1hdGlvbkJ1dHRvbkNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldERpc3BsYXlWYWx1ZUNvbXBvbmVudENvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldERyb3Bkb3duQ29tcG9uZW50Q29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9zZXR0aW5ncy9zZXR0aW5nLWNvbXBvbmVudHMvZ2V0RXh0cmFCdXR0b25Db21wb25lbnRDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3NldHRpbmdzL3NldHRpbmctY29tcG9uZW50cy9nZXRNb21lbnRGb3JtYXRDb21wb25lbnRDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3NldHRpbmdzL3NldHRpbmctY29tcG9uZW50cy9nZXRQcm9ncmVzc0JhckNvbXBvbmVudENvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldFNlYXJjaENvbXBvbmVudENvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldFNlY3JldENvbXBvbmVudENvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldFNsaWRlckNvbXBvbmVudENvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldFRleHRBcmVhQ29tcG9uZW50Q29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9zZXR0aW5ncy9zZXR0aW5nLWNvbXBvbmVudHMvZ2V0VGV4dENvbXBvbmVudENvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldFRvZ2dsZUNvbXBvbmVudENvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldFZhbHVlQ29tcG9uZW50Q29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy92YWx1ZXMvZ2V0Qm9vbGVhblZhbHVlQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy92YWx1ZXMvZ2V0RGF0ZVZhbHVlQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy92YWx1ZXMvZ2V0RHVyYXRpb25WYWx1ZUNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvdmFsdWVzL2dldEZpbGVWYWx1ZUNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvdmFsdWVzL2dldEhUTUxWYWx1ZUNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvdmFsdWVzL2dldEljb25WYWx1ZUNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvdmFsdWVzL2dldEltYWdlVmFsdWVDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3ZhbHVlcy9nZXRMaW5rVmFsdWVDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3ZhbHVlcy9nZXRMaXN0VmFsdWVDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3ZhbHVlcy9nZXROb3ROdWxsVmFsdWVDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3ZhbHVlcy9nZXROdWxsVmFsdWVDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3ZhbHVlcy9nZXROdW1iZXJWYWx1ZUNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvdmFsdWVzL2dldE9iamVjdFZhbHVlQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy92YWx1ZXMvZ2V0UmVnRXhwVmFsdWVDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3ZhbHVlcy9nZXRSZWxhdGl2ZURhdGVWYWx1ZUNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvdmFsdWVzL2dldFN0cmluZ1ZhbHVlQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy92YWx1ZXMvZ2V0VGFnVmFsdWVDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3ZhbHVlcy9nZXRVcmxWYWx1ZUNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvdmFsdWVzL2dldFZhbHVlQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy92aWV3cy9nZXRFZGl0YWJsZUZpbGVWaWV3Q29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy92aWV3cy9nZXRNYXJrZG93blZpZXdDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvZ2V0QXBwTWVudUJhck1hbmFnZXJDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvZ2V0QXBwU2V0dGluZ0NvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2ludGVybmFscy9nZXRDbGlDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvZ2V0Q29tbWFuZHNDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvZ2V0Q3VzdG9tQ1NTQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL2dldERyYWdNYW5hZ2VyQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL2dldEVkaXRvclN1Z2dlc3RzQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL2dldEVtYmVkUmVnaXN0cnlDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvZ2V0Rm9sZE1hbmFnZXJDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvZ2V0RnJhbWVEb21Db25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvZ2V0SG90a2V5TWFuYWdlckNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2ludGVybmFscy9nZXRNZXRhZGF0YVR5cGVNYW5hZ2VyQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL2dldE9ic2lkaWFuRE9NQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL2dldFBsdWdpbnNDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvZ2V0UmVjZW50RmlsZVRyYWNrZXJDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvZ2V0U2hhcmVSZWNlaXZlckNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2ludGVybmFscy9nZXRTdGF0dXNCYXJDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvZ2V0Vmlld1JlZ2lzdHJ5Q29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL2dldFdvcmtzcGFjZUxlYWZIaXN0b3J5Q29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL2ludGVybmFsLXBsdWdpbnMvYmFzZXMvZ2V0QmFzZXNDb250ZXh0Q29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL2ludGVybmFsLXBsdWdpbnMvYmFzZXMvZ2V0QmFzZXNRdWVyeUNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvZnVuY3Rpb25zL2dldEJhc2VzQ29udHJvbGxlckZyb21SZW5kZXIudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL2ludGVybmFsLXBsdWdpbnMvZ2V0SW50ZXJuYWxQbHVnaW5Db25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvaW50ZXJuYWwtcGx1Z2lucy9nZXRJbnRlcm5hbFBsdWdpbnNDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvdmlld3MvZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZS50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvdmlld3MvZ2V0QWxsUHJvcGVydGllc1ZpZXdDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvdmlld3MvZ2V0QXVkaW9WaWV3Q29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL3ZpZXdzL2dldEJhY2tsaW5rVmlld0NvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2ludGVybmFscy92aWV3cy9nZXRCYXNlc1ZpZXdDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvdmlld3MvZ2V0Qm9va21hcmtzVmlld0NvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2ludGVybmFscy92aWV3cy9nZXRDYW52YXNWaWV3Q29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL3ZpZXdzL2dldEVtcHR5Vmlld0NvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2ludGVybmFscy92aWV3cy9nZXRGaWxlRXhwbG9yZXJWaWV3Q29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL3ZpZXdzL2dldEZpbGVQcm9wZXJ0aWVzVmlld0NvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2ludGVybmFscy92aWV3cy9nZXRHcmFwaFZpZXdDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvdmlld3MvZ2V0SW1hZ2VWaWV3Q29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL3ZpZXdzL2dldExvY2FsR3JhcGhWaWV3Q29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL3ZpZXdzL2dldE91dGdvaW5nTGlua1ZpZXdDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvdmlld3MvZ2V0T3V0bGluZVZpZXdDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvdmlld3MvZ2V0UGRmVmlld0NvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2ludGVybmFscy92aWV3cy9nZXRSZWxlYXNlTm90ZXNWaWV3Q29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL3ZpZXdzL2dldFNlYXJjaFZpZXdDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvdmlld3MvZ2V0U3luY1ZpZXdDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvdmlld3MvZ2V0VGFibGVWaWV3Q29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL3ZpZXdzL2dldFRhZ1ZpZXdDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvdmlld3MvZ2V0VmlkZW9WaWV3Q29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL3ZpZXdzL2dldFdlYnZpZXdlckhpc3RvcnlWaWV3Q29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL3ZpZXdzL2dldFdlYnZpZXdlclZpZXdDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvd29ya3NwYWNlL2dldFdvcmtzcGFjZVByb3RvY29sSGFuZGxlckNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvdXRpbHMvUGF0aFV0aWxzLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvZnVuY3Rpb25zL2NyZWF0ZVRGb2xkZXJJbnN0YW5jZS50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2Z1bmN0aW9ucy9jcmVhdGVURmlsZUluc3RhbmNlLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvZnVuY3Rpb25zL2V2YWx1YXRlQmFzZUhlYWRsZXNzLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvZnVuY3Rpb25zL2dldERhdGFBZGFwdGVyRXgudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9mdW5jdGlvbnMvbG9hZE1lcm1haWQudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9mdW5jdGlvbnMvbG9hZFBkZkpzLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvZnVuY3Rpb25zL2xvYWRQcmlzbS50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL3R5cGUtZ3VhcmRzL2lzUmVmZXJlbmNlQ2FjaGUudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy90eXBlLWd1YXJkcy9pc0VtYmVkQ2FjaGUudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy90eXBlLWd1YXJkcy9pc0Zyb250bWF0dGVyTGlua0NhY2hlLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvdHlwZS1ndWFyZHMvaXNMaW5rQ2FjaGUudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qIFRISVMgSVMgQSBHRU5FUkFURUQvQlVORExFRCBGSUxFIEJZIEJVSUxEIFNDUklQVCAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2NsYXNzZXMvQ3VzdG9tQXJyYXlEaWN0SW1wbC50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0YW50cy9GaWxlRXh0ZW5zaW9uLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RhbnRzL0ludGVybmFsUGx1Z2luTmFtZS50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0YW50cy9WaWV3VHlwZS50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2Jhc2VzL2dldEJhc2VzRW50cnlDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2Jhc2VzL2dldEJhc2VzRW50cnlHcm91cENvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvYmFzZXMvZ2V0QmFzZXNRdWVyeVJlc3VsdENvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvYmFzZXMvZ2V0QmFzZXNWaWV3Q29uZmlnQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9iYXNlcy9nZXRRdWVyeUNvbnRyb2xsZXJDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldEFwcENvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0Q2FwYWNpdG9yQWRhcHRlckNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0Q29uZmlybWF0aW9uTW9kYWxDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldEVkaXRvckNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0RXZlbnRzQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRGaWxlTWFuYWdlckNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0RmlsZVN5c3RlbUFkYXB0ZXJDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldEZ1enp5U3VnZ2VzdE1vZGFsQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRIb3ZlclBvcG92ZXJDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldEtleW1hcENvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0TWFya2Rvd25QcmV2aWV3UmVuZGVyZXJDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldE1hcmtkb3duUHJldmlld1ZpZXdDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldE1hcmtkb3duUmVuZGVyQ2hpbGRDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldE1hcmtkb3duUmVuZGVyZXJDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldE1lbnVDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldE1lbnVJdGVtQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRNZW51U2VwYXJhdG9yQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRNZXRhZGF0YUNhY2hlQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRNb2RhbENvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0Tm90aWNlQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRSZW5kZXJDb250ZXh0Q29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRTY29wZUNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0U2VjcmV0U3RvcmFnZUNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0U2V0dGluZ0NvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0U2V0dGluZ0dyb3VwQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRTZXR0aW5nUGFnZUNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0U2V0dGluZ1RhYkNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0VEFic3RyYWN0RmlsZUNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0VGFza3NDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldFRGaWxlQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRURm9sZGVyQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRWYXVsdENvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0V29ya3NwYWNlQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRXb3Jrc3BhY2VDb250YWluZXJDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldFdvcmtzcGFjZUZsb2F0aW5nQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRXb3Jrc3BhY2VJdGVtQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRXb3Jrc3BhY2VMZWFmQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRXb3Jrc3BhY2VNb2JpbGVEcmF3ZXJDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldFdvcmtzcGFjZVBhcmVudENvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0V29ya3NwYWNlUmliYm9uQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRXb3Jrc3BhY2VSb290Q29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRXb3Jrc3BhY2VTaWRlZG9ja0NvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0V29ya3NwYWNlU3BsaXRDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldFdvcmtzcGFjZVRhYnNDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldFdvcmtzcGFjZVdpbmRvd0NvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldEFic3RyYWN0VGV4dENvbXBvbmVudENvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldEJhc2VDb21wb25lbnRDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3NldHRpbmdzL3NldHRpbmctY29tcG9uZW50cy9nZXRCdXR0b25Db21wb25lbnRDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3NldHRpbmdzL3NldHRpbmctY29tcG9uZW50cy9nZXRDb2xvckNvbXBvbmVudENvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldENvbXBvbmVudENvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldENvbmZpcm1hdGlvbkJ1dHRvbkNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldERpc3BsYXlWYWx1ZUNvbXBvbmVudENvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldERyb3Bkb3duQ29tcG9uZW50Q29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9zZXR0aW5ncy9zZXR0aW5nLWNvbXBvbmVudHMvZ2V0RXh0cmFCdXR0b25Db21wb25lbnRDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3NldHRpbmdzL3NldHRpbmctY29tcG9uZW50cy9nZXRNb21lbnRGb3JtYXRDb21wb25lbnRDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3NldHRpbmdzL3NldHRpbmctY29tcG9uZW50cy9nZXRQcm9ncmVzc0JhckNvbXBvbmVudENvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldFNlYXJjaENvbXBvbmVudENvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldFNlY3JldENvbXBvbmVudENvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldFNsaWRlckNvbXBvbmVudENvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldFRleHRBcmVhQ29tcG9uZW50Q29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9zZXR0aW5ncy9zZXR0aW5nLWNvbXBvbmVudHMvZ2V0VGV4dENvbXBvbmVudENvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldFRvZ2dsZUNvbXBvbmVudENvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldFZhbHVlQ29tcG9uZW50Q29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy92YWx1ZXMvZ2V0Qm9vbGVhblZhbHVlQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy92YWx1ZXMvZ2V0RGF0ZVZhbHVlQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy92YWx1ZXMvZ2V0RHVyYXRpb25WYWx1ZUNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvdmFsdWVzL2dldEZpbGVWYWx1ZUNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvdmFsdWVzL2dldEhUTUxWYWx1ZUNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvdmFsdWVzL2dldEljb25WYWx1ZUNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvdmFsdWVzL2dldEltYWdlVmFsdWVDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3ZhbHVlcy9nZXRMaW5rVmFsdWVDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3ZhbHVlcy9nZXRMaXN0VmFsdWVDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3ZhbHVlcy9nZXROb3ROdWxsVmFsdWVDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3ZhbHVlcy9nZXROdWxsVmFsdWVDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3ZhbHVlcy9nZXROdW1iZXJWYWx1ZUNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvdmFsdWVzL2dldE9iamVjdFZhbHVlQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy92YWx1ZXMvZ2V0UmVnRXhwVmFsdWVDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3ZhbHVlcy9nZXRSZWxhdGl2ZURhdGVWYWx1ZUNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvdmFsdWVzL2dldFN0cmluZ1ZhbHVlQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy92YWx1ZXMvZ2V0VGFnVmFsdWVDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3ZhbHVlcy9nZXRVcmxWYWx1ZUNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvdmFsdWVzL2dldFZhbHVlQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy92aWV3cy9nZXRFZGl0YWJsZUZpbGVWaWV3Q29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy92aWV3cy9nZXRNYXJrZG93blZpZXdDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvZ2V0QXBwTWVudUJhck1hbmFnZXJDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvZ2V0QXBwU2V0dGluZ0NvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2ludGVybmFscy9nZXRDbGlDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvZ2V0Q29tbWFuZHNDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvZ2V0Q3VzdG9tQ1NTQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL2dldERyYWdNYW5hZ2VyQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL2dldEVkaXRvclN1Z2dlc3RzQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL2dldEVtYmVkUmVnaXN0cnlDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvZ2V0Rm9sZE1hbmFnZXJDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvZ2V0RnJhbWVEb21Db25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvZ2V0SG90a2V5TWFuYWdlckNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2ludGVybmFscy9nZXRNZXRhZGF0YVR5cGVNYW5hZ2VyQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL2dldE9ic2lkaWFuRE9NQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL2dldFBsdWdpbnNDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvZ2V0UmVjZW50RmlsZVRyYWNrZXJDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvZ2V0U2hhcmVSZWNlaXZlckNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2ludGVybmFscy9nZXRTdGF0dXNCYXJDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvZ2V0Vmlld1JlZ2lzdHJ5Q29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL2dldFdvcmtzcGFjZUxlYWZIaXN0b3J5Q29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL2ludGVybmFsLXBsdWdpbnMvYmFzZXMvZ2V0QmFzZXNDb250ZXh0Q29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL2ludGVybmFsLXBsdWdpbnMvYmFzZXMvZ2V0QmFzZXNRdWVyeUNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2ludGVybmFscy9pbnRlcm5hbC1wbHVnaW5zL2dldEludGVybmFsUGx1Z2luQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL2ludGVybmFsLXBsdWdpbnMvZ2V0SW50ZXJuYWxQbHVnaW5zQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL3ZpZXdzL2dldEFsbFByb3BlcnRpZXNWaWV3Q29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL3ZpZXdzL2dldEF1ZGlvVmlld0NvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2ludGVybmFscy92aWV3cy9nZXRCYWNrbGlua1ZpZXdDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvdmlld3MvZ2V0QmFzZXNWaWV3Q29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL3ZpZXdzL2dldEJvb2ttYXJrc1ZpZXdDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvdmlld3MvZ2V0Q2FudmFzVmlld0NvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2ludGVybmFscy92aWV3cy9nZXRFbXB0eVZpZXdDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvdmlld3MvZ2V0RmlsZUV4cGxvcmVyVmlld0NvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2ludGVybmFscy92aWV3cy9nZXRGaWxlUHJvcGVydGllc1ZpZXdDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvdmlld3MvZ2V0R3JhcGhWaWV3Q29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL3ZpZXdzL2dldEltYWdlVmlld0NvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2ludGVybmFscy92aWV3cy9nZXRMb2NhbEdyYXBoVmlld0NvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2ludGVybmFscy92aWV3cy9nZXRPdXRnb2luZ0xpbmtWaWV3Q29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL3ZpZXdzL2dldE91dGxpbmVWaWV3Q29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL3ZpZXdzL2dldFBkZlZpZXdDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvdmlld3MvZ2V0UmVsZWFzZU5vdGVzVmlld0NvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2ludGVybmFscy92aWV3cy9nZXRTZWFyY2hWaWV3Q29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL3ZpZXdzL2dldFN5bmNWaWV3Q29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL3ZpZXdzL2dldFRhYmxlVmlld0NvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2ludGVybmFscy92aWV3cy9nZXRUYWdWaWV3Q29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL3ZpZXdzL2dldFZpZGVvVmlld0NvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2ludGVybmFscy92aWV3cy9nZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2ludGVybmFscy92aWV3cy9nZXRXZWJ2aWV3ZXJIaXN0b3J5Vmlld0NvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2ludGVybmFscy92aWV3cy9nZXRXZWJ2aWV3ZXJWaWV3Q29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL3dvcmtzcGFjZS9nZXRXb3Jrc3BhY2VQcm90b2NvbEhhbmRsZXJDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2Z1bmN0aW9ucy9jcmVhdGVURmlsZUluc3RhbmNlLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vZnVuY3Rpb25zL2NyZWF0ZVRGb2xkZXJJbnN0YW5jZS50cyc7XG5leHBvcnQgKiBmcm9tICcuL2Z1bmN0aW9ucy9ldmFsdWF0ZUJhc2VIZWFkbGVzcy50cyc7XG5leHBvcnQgKiBmcm9tICcuL2Z1bmN0aW9ucy9nZXRCYXNlc0NvbnRyb2xsZXJGcm9tUmVuZGVyLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vZnVuY3Rpb25zL2dldERhdGFBZGFwdGVyRXgudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9mdW5jdGlvbnMvbG9hZE1lcm1haWQudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9mdW5jdGlvbnMvbG9hZFBkZkpzLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vZnVuY3Rpb25zL2xvYWRQcmlzbS50cyc7XG5leHBvcnQgKiBmcm9tICcuL3R5cGUtZ3VhcmRzL2lzRW1iZWRDYWNoZS50cyc7XG5leHBvcnQgKiBmcm9tICcuL3R5cGUtZ3VhcmRzL2lzRnJvbnRtYXR0ZXJMaW5rQ2FjaGUudHMnO1xuZXhwb3J0ICogZnJvbSAnLi90eXBlLWd1YXJkcy9pc0xpbmtDYWNoZS50cyc7XG5leHBvcnQgKiBmcm9tICcuL3R5cGUtZ3VhcmRzL2lzUmVmZXJlbmNlQ2FjaGUudHMnO1xuZXhwb3J0ICogZnJvbSAnLi91dGlscy9QYXRoVXRpbHMudHMnO1xuZXhwb3J0IHR5cGUgKiBmcm9tICcuLi8uLi9pbmRleC5kLnRzJztcbiIsICJpbXBvcnQgdHlwZSB7IEN1c3RvbUFycmF5RGljdCB9IGZyb20gJy4uLy4uL2ludGVybmFscy9jb2xsZWN0aW9ucy9DdXN0b21BcnJheURpY3QuZC5kLnRzJztcblxuLyoqXG4gKiBBIGRpY3Rpb25hcnkgdGhhdCBtYXBzIHN0cmluZyBrZXlzIHRvIGFycmF5cyBvZiB1bmlxdWUgdmFsdWVzLCBpbXBsZW1lbnRpbmcge0BsaW5rIEN1c3RvbUFycmF5RGljdH0uXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGNsYXNzIEN1c3RvbUFycmF5RGljdEltcGw8VD4gaW1wbGVtZW50cyBDdXN0b21BcnJheURpY3Q8VD4ge1xuICAvKipcbiAgICogSW50ZXJuYWwgbWFwIHN0b3Jpbmcga2V5LXRvLWFycmF5IG1hcHBpbmdzLlxuICAgKi9cbiAgcHVibGljIGRhdGE6IE1hcDxzdHJpbmcsIFRbXT4gPSBuZXcgTWFwKCk7XG5cbiAgLyoqXG4gICAqIEFkZCBhIHZhbHVlIHRvIHRoZSBhcnJheSBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGtleS5cbiAgICpcbiAgICogQHBhcmFtIGtleSAtIFRoZSBrZXkuXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBhZGQuXG4gICAqL1xuICBwdWJsaWMgYWRkKGtleTogc3RyaW5nLCB2YWx1ZTogVCk6IHZvaWQge1xuICAgIGxldCB2YWx1ZXMgPSB0aGlzLmdldChrZXkpO1xuICAgIGlmICghdmFsdWVzKSB7XG4gICAgICB2YWx1ZXMgPSBbXTtcbiAgICAgIHRoaXMuZGF0YS5zZXQoa2V5LCB2YWx1ZXMpO1xuICAgIH1cblxuICAgIGlmICghdmFsdWVzLmluY2x1ZGVzKHZhbHVlKSkge1xuICAgICAgdmFsdWVzLnB1c2godmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYWxsIHZhbHVlcyBmb3IgdGhlIGdpdmVuIGtleS5cbiAgICpcbiAgICogQHBhcmFtIGtleSAtIFRoZSBrZXkgdG8gY2xlYXIuXG4gICAqL1xuICBwdWJsaWMgY2xlYXIoa2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmRhdGEuZGVsZXRlKGtleSk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGFsbCBrZXlzIGFuZCB0aGVpciB2YWx1ZXMuXG4gICAqL1xuICBwdWJsaWMgY2xlYXJBbGwoKTogdm9pZCB7XG4gICAgdGhpcy5kYXRhLmNsZWFyKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgd2hldGhlciB0aGUgYXJyYXkgZm9yIHRoZSBnaXZlbiBrZXkgY29udGFpbnMgdGhlIHNwZWNpZmllZCB2YWx1ZS5cbiAgICpcbiAgICogQHBhcmFtIGtleSAtIFRoZSBrZXkuXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICogQHJldHVybnMgV2hldGhlciB0aGUgdmFsdWUgZXhpc3RzLlxuICAgKi9cbiAgcHVibGljIGNvbnRhaW5zKGtleTogc3RyaW5nLCB2YWx1ZTogVCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuZ2V0KGtleSk/LmNvbnRhaW5zKHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHRvdGFsIG51bWJlciBvZiB2YWx1ZXMgYWNyb3NzIGFsbCBrZXlzLlxuICAgKlxuICAgKiBAcmV0dXJucyBUb3RhbCB2YWx1ZSBjb3VudC5cbiAgICovXG4gIHB1YmxpYyBjb3VudCgpOiBudW1iZXIge1xuICAgIGxldCBhbnMgPSAwO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIHRoaXMua2V5cygpKSB7XG4gICAgICBhbnMgKz0gdGhpcy5nZXQoa2V5KT8ubGVuZ3RoID8/IDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFucztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGFycmF5IG9mIHZhbHVlcyBmb3IgdGhlIGdpdmVuIGtleSwgb3IgYG51bGxgIGlmIG5vdCBmb3VuZC5cbiAgICpcbiAgICogQHBhcmFtIGtleSAtIFRoZSBrZXkuXG4gICAqIEByZXR1cm5zIEFycmF5IG9mIHZhbHVlcywgb3IgYG51bGxgLlxuICAgKi9cbiAgcHVibGljIGdldChrZXk6IHN0cmluZyk6IG51bGwgfCBUW10ge1xuICAgIHJldHVybiB0aGlzLmRhdGEuZ2V0KGtleSkgfHwgbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYWxsIGtleXMgaW4gdGhlIGRpY3Rpb25hcnkuXG4gICAqXG4gICAqIEByZXR1cm5zIEFycmF5IG9mIGtleXMuXG4gICAqL1xuICBwdWJsaWMga2V5cygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5kYXRhLmtleXMoKSk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGEgc3BlY2lmaWMgdmFsdWUgZnJvbSB0aGUgYXJyYXkgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBrZXkuXG4gICAqXG4gICAqIEBwYXJhbSBrZXkgLSBUaGUga2V5LlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gcmVtb3ZlLlxuICAgKi9cbiAgcHVibGljIHJlbW92ZShrZXk6IHN0cmluZywgdmFsdWU6IFQpOiB2b2lkIHtcbiAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmdldChrZXkpO1xuICAgIGlmICghdmFsdWVzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFsdWVzLnJlbW92ZSh2YWx1ZSk7XG4gICAgaWYgKHZhbHVlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuY2xlYXIoa2V5KTtcbiAgICB9XG4gIH1cbn1cbiIsICIvKipcbiAqIENvbnN0YW50IG1hcHBpbmcgb2YgZmlsZSBleHRlbnNpb24gaWRlbnRpZmllcnMgcmVjb2duaXplZCBhbmQgc3VwcG9ydGVkIGJ5IE9ic2lkaWFuLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBjb25zdCBGaWxlRXh0ZW5zaW9uID0ge1xuICBfM2dwOiAnM2dwJyxcbiAgYXZpZjogJ2F2aWYnLFxuICBibXA6ICdibXAnLFxuICBjYW52YXM6ICdjYW52YXMnLFxuICBmbGFjOiAnZmxhYycsXG4gIGdpZjogJ2dpZicsXG4gIGpwZWc6ICdqcGVnJyxcbiAganBnOiAnanBnJyxcbiAgbTRhOiAnbTRhJyxcbiAgbWQ6ICdtZCcsXG4gIG1rdjogJ21rdicsXG4gIG1vdjogJ21vdicsXG4gIG1wMzogJ21wMycsXG4gIG1wNDogJ21wNCcsXG4gIG9nYTogJ29nYScsXG4gIG9nZzogJ29nZycsXG4gIG9ndjogJ29ndicsXG4gIG9wdXM6ICdvcHVzJyxcbiAgcGRmOiAncGRmJyxcbiAgcG5nOiAncG5nJyxcbiAgc3ZnOiAnc3ZnJyxcbiAgd2F2OiAnd2F2JyxcbiAgd2VibTogJ3dlYm0nLFxuICB3ZWJwOiAnd2VicCdcbn0gYXMgY29uc3Q7XG4iLCAiLyoqXG4gKiBDb25zdGFudCBtYXBwaW5nIG9mIGludGVybmFsIChjb3JlKSBwbHVnaW4gbmFtZSBpZGVudGlmaWVycyBidW5kbGVkIHdpdGggT2JzaWRpYW4uXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGNvbnN0IEludGVybmFsUGx1Z2luTmFtZSA9IHtcbiAgLyoqXG4gICAqIFBsdWdpbiBuYW1lIGluIFVJOiBBdWRpbyByZWNvcmRlci5cbiAgICovXG4gIEF1ZGlvUmVjb3JkZXI6ICdhdWRpby1yZWNvcmRlcicsXG4gIC8qKlxuICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogQmFja2xpbmtzLlxuICAgKi9cbiAgQmFja2xpbms6ICdiYWNrbGluaycsXG4gIC8qKlxuICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogQmFzZXMuXG4gICAqL1xuICBCYXNlczogJ2Jhc2VzJyxcbiAgLyoqXG4gICAqIFBsdWdpbiBuYW1lIGluIFVJOiBCb29rbWFya3MuXG4gICAqL1xuICBCb29rbWFya3M6ICdib29rbWFya3MnLFxuICAvKipcbiAgICogUGx1Z2luIG5hbWUgaW4gVUk6IENhbnZhcy5cbiAgICovXG4gIENhbnZhczogJ2NhbnZhcycsXG4gIC8qKlxuICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogQ29tbWFuZCBwYWxldHRlLlxuICAgKi9cbiAgQ29tbWFuZFBhbGV0dGU6ICdjb21tYW5kLXBhbGV0dGUnLFxuICAvKipcbiAgICogUGx1Z2luIG5hbWUgaW4gVUk6IERhaWx5IG5vdGVzLlxuICAgKi9cbiAgRGFpbHlOb3RlczogJ2RhaWx5LW5vdGVzJyxcbiAgLyoqXG4gICAqIFBsdWdpbiBuYW1lIGluIFVJOiAoaGlkZGVuKS5cbiAgICovXG4gIEVkaXRvclN0YXR1czogJ2VkaXRvci1zdGF0dXMnLFxuICAvKipcbiAgICogUGx1Z2luIG5hbWUgaW4gVUk6IEZpbGVzLlxuICAgKi9cbiAgRmlsZUV4cGxvcmVyOiAnZmlsZS1leHBsb3JlcicsXG4gIC8qKlxuICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogRmlsZSByZWNvdmVyeS5cbiAgICovXG4gIEZpbGVSZWNvdmVyeTogJ2ZpbGUtcmVjb3ZlcnknLFxuICAvKipcbiAgICogUGx1Z2luIG5hbWUgaW4gVUk6IEZvb3Rub3Rlcy5cbiAgICovXG4gIEZvb3Rub3RlczogJ2Zvb3Rub3RlcycsXG4gIC8qKlxuICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogU2VhcmNoLlxuICAgKi9cbiAgR2xvYmFsU2VhcmNoOiAnZ2xvYmFsLXNlYXJjaCcsXG4gIC8qKlxuICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogR3JhcGggdmlldy5cbiAgICovXG4gIEdyYXBoOiAnZ3JhcGgnLFxuICAvKipcbiAgICogUGx1Z2luIG5hbWUgaW4gVUk6IEZvcm1hdCBjb252ZXJ0ZXIuXG4gICAqL1xuICBNYXJrZG93bkltcG9ydGVyOiAnbWFya2Rvd24taW1wb3J0ZXInLFxuICAvKipcbiAgICogUGx1Z2luIG5hbWUgaW4gVUk6IE5vdGUgY29tcG9zZXIuXG4gICAqL1xuICBOb3RlQ29tcG9zZXI6ICdub3RlLWNvbXBvc2VyJyxcbiAgLyoqXG4gICAqIFBsdWdpbiBuYW1lIGluIFVJOiBPdXRnb2luZyBsaW5rcy5cbiAgICovXG4gIE91dGdvaW5nTGluazogJ291dGdvaW5nLWxpbmsnLFxuICAvKipcbiAgICogUGx1Z2luIG5hbWUgaW4gVUk6IE91dGxpbmUuXG4gICAqL1xuICBPdXRsaW5lOiAnb3V0bGluZScsXG4gIC8qKlxuICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogUGFnZSBwcmV2aWV3LlxuICAgKi9cbiAgUGFnZVByZXZpZXc6ICdwYWdlLXByZXZpZXcnLFxuICAvKipcbiAgICogUGx1Z2luIG5hbWUgaW4gVUk6IFByb3BlcnRpZXMgdmlldy5cbiAgICovXG4gIFByb3BlcnRpZXM6ICdwcm9wZXJ0aWVzJyxcbiAgLyoqXG4gICAqIFBsdWdpbiBuYW1lIGluIFVJOiBQdWJsaXNoLlxuICAgKi9cbiAgUHVibGlzaDogJ3B1Ymxpc2gnLFxuICAvKipcbiAgICogUGx1Z2luIG5hbWUgaW4gVUk6IFJhbmRvbSBub3RlLlxuICAgKi9cbiAgUmFuZG9tTm90ZTogJ3JhbmRvbS1ub3RlJyxcbiAgLyoqXG4gICAqIFBsdWdpbiBuYW1lIGluIFVJOiBTbGFzaCBjb21tYW5kcy5cbiAgICovXG4gIFNsYXNoQ29tbWFuZDogJ3NsYXNoLWNvbW1hbmQnLFxuICAvKipcbiAgICogUGx1Z2luIG5hbWUgaW4gVUk6IFNsaWRlcy5cbiAgICovXG4gIFNsaWRlczogJ3NsaWRlcycsXG4gIC8qKlxuICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogUXVpY2sgU3dpdGNoZXIuXG4gICAqL1xuICBTd2l0Y2hlcjogJ3N3aXRjaGVyJyxcbiAgLyoqXG4gICAqIFBsdWdpbiBuYW1lIGluIFVJOiBTeW5jLlxuICAgKi9cbiAgU3luYzogJ3N5bmMnLFxuICAvKipcbiAgICogUGx1Z2luIG5hbWUgaW4gVUk6IFRhZ3Mgdmlldy5cbiAgICovXG4gIFRhZ1BhbmU6ICd0YWctcGFuZScsXG4gIC8qKlxuICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogVGVtcGxhdGVzLlxuICAgKi9cbiAgVGVtcGxhdGVzOiAndGVtcGxhdGVzJyxcbiAgLyoqXG4gICAqIFBsdWdpbiBuYW1lIGluIFVJOiBXZWIgdmlld2VyLlxuICAgKi9cbiAgV2Vidmlld2VyOiAnd2Vidmlld2VyJyxcbiAgLyoqXG4gICAqIFBsdWdpbiBuYW1lIGluIFVJOiBXb3JkIGNvdW50LlxuICAgKi9cbiAgV29yZENvdW50OiAnd29yZC1jb3VudCcsXG4gIC8qKlxuICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogV29ya3NwYWNlcy5cbiAgICovXG4gIFdvcmtzcGFjZXM6ICd3b3Jrc3BhY2VzJyxcbiAgLyoqXG4gICAqIFBsdWdpbiBuYW1lIGluIFVJOiBVbmlxdWUgbm90ZSBjcmVhdG9yLlxuICAgKi9cbiAgWmtQcmVmaXhlcjogJ3prLXByZWZpeGVyJ1xufSBhcyBjb25zdDtcbiIsICJpbXBvcnQgeyBJbnRlcm5hbFBsdWdpbk5hbWUgfSBmcm9tICcuL0ludGVybmFsUGx1Z2luTmFtZS50cyc7XG5cbi8qKlxuICogQ29uc3RhbnQgbWFwcGluZyBvZiB2aWV3IHR5cGUgaWRlbnRpZmllcnMgdXNlZCB0byBvcGVuIGFuZCBtYW5hZ2UgZGlmZmVyZW50IGxlYWYgdmlld3MgaW4gT2JzaWRpYW4uXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFZpZXdUeXBlID0ge1xuICBBbGxQcm9wZXJ0aWVzOiAnYWxsLXByb3BlcnRpZXMnLFxuICBBdWRpbzogJ2F1ZGlvJyxcbiAgQmFja2xpbms6IEludGVybmFsUGx1Z2luTmFtZS5CYWNrbGluayxcbiAgQmFzZXM6IEludGVybmFsUGx1Z2luTmFtZS5CYXNlcyxcbiAgQm9va21hcmtzOiBJbnRlcm5hbFBsdWdpbk5hbWUuQm9va21hcmtzLFxuICBDYW52YXM6IEludGVybmFsUGx1Z2luTmFtZS5DYW52YXMsXG4gIEVtcHR5OiAnZW1wdHknLFxuICBGaWxlRXhwbG9yZXI6IEludGVybmFsUGx1Z2luTmFtZS5GaWxlRXhwbG9yZXIsXG4gIEZpbGVQcm9wZXJ0aWVzOiAnZmlsZS1wcm9wZXJ0aWVzJyxcbiAgR3JhcGg6IEludGVybmFsUGx1Z2luTmFtZS5HcmFwaCxcbiAgSW1hZ2U6ICdpbWFnZScsXG4gIExvY2FsR3JhcGg6ICdsb2NhbGdyYXBoJyxcbiAgTWFya2Rvd246ICdtYXJrZG93bicsXG4gIE91dGdvaW5nTGluazogSW50ZXJuYWxQbHVnaW5OYW1lLk91dGdvaW5nTGluayxcbiAgT3V0bGluZTogSW50ZXJuYWxQbHVnaW5OYW1lLk91dGxpbmUsXG4gIFBkZjogJ3BkZicsXG4gIFJlbGVhc2VOb3RlczogJ3JlbGVhc2Utbm90ZXMnLFxuICBTZWFyY2g6ICdzZWFyY2gnLFxuICBTeW5jOiAnc3luYycsXG4gIFRhYmxlOiAndGFibGUnLFxuICBUYWc6ICd0YWcnLFxuICBWaWRlbzogJ3ZpZGVvJyxcbiAgV2Vidmlld2VyOiAnd2Vidmlld2VyJyxcbiAgV2Vidmlld2VySGlzdG9yeTogJ3dlYnZpZXdlci1oaXN0b3J5J1xufSBhcyBjb25zdDtcbiIsICJpbXBvcnQgeyBCYXNlc0VudHJ5IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI0Jhc2VzRW50cnl9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jQmFzZXNFbnRyeX0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJhc2VzRW50cnlDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8QmFzZXNFbnRyeT4ge1xuICByZXR1cm4gQmFzZXNFbnRyeSBhcyBFeHRyYWN0Q29uc3RydWN0b3I8QmFzZXNFbnRyeT47XG59XG4iLCAiaW1wb3J0IHsgQmFzZXNFbnRyeUdyb3VwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI0Jhc2VzRW50cnlHcm91cH0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNCYXNlc0VudHJ5R3JvdXB9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRCYXNlc0VudHJ5R3JvdXBDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8QmFzZXNFbnRyeUdyb3VwPiB7XG4gIHJldHVybiBCYXNlc0VudHJ5R3JvdXAgYXMgRXh0cmFjdENvbnN0cnVjdG9yPEJhc2VzRW50cnlHcm91cD47XG59XG4iLCAiaW1wb3J0IHsgQmFzZXNRdWVyeVJlc3VsdCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNCYXNlc1F1ZXJ5UmVzdWx0fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI0Jhc2VzUXVlcnlSZXN1bHR9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRCYXNlc1F1ZXJ5UmVzdWx0Q29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPEJhc2VzUXVlcnlSZXN1bHQ+IHtcbiAgcmV0dXJuIEJhc2VzUXVlcnlSZXN1bHQgYXMgRXh0cmFjdENvbnN0cnVjdG9yPEJhc2VzUXVlcnlSZXN1bHQ+O1xufVxuIiwgImltcG9ydCB7IEJhc2VzVmlld0NvbmZpZyB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNCYXNlc1ZpZXdDb25maWd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jQmFzZXNWaWV3Q29uZmlnfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QmFzZXNWaWV3Q29uZmlnQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPEJhc2VzVmlld0NvbmZpZz4ge1xuICByZXR1cm4gQmFzZXNWaWV3Q29uZmlnIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxCYXNlc1ZpZXdDb25maWc+O1xufVxuIiwgImltcG9ydCB7IFF1ZXJ5Q29udHJvbGxlciB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNRdWVyeUNvbnRyb2xsZXJ9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jUXVlcnlDb250cm9sbGVyfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UXVlcnlDb250cm9sbGVyQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPFF1ZXJ5Q29udHJvbGxlcj4ge1xuICByZXR1cm4gUXVlcnlDb250cm9sbGVyIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxRdWVyeUNvbnRyb2xsZXI+O1xufVxuIiwgImltcG9ydCB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNBcHB9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jQXBwfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXBwQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPEFwcD4ge1xuICByZXR1cm4gQXBwIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxBcHA+O1xufVxuIiwgImltcG9ydCB7IENhcGFjaXRvckFkYXB0ZXIgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jQ2FwYWNpdG9yQWRhcHRlcn0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNDYXBhY2l0b3JBZGFwdGVyfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2FwYWNpdG9yQWRhcHRlckNvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxDYXBhY2l0b3JBZGFwdGVyPiB7XG4gIHJldHVybiBDYXBhY2l0b3JBZGFwdGVyIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxDYXBhY2l0b3JBZGFwdGVyPjtcbn1cbiIsICJpbXBvcnQgeyBDb25maXJtYXRpb25Nb2RhbCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNDb25maXJtYXRpb25Nb2RhbH0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNDb25maXJtYXRpb25Nb2RhbH0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENvbmZpcm1hdGlvbk1vZGFsQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPENvbmZpcm1hdGlvbk1vZGFsPiB7XG4gIHJldHVybiBDb25maXJtYXRpb25Nb2RhbCBhcyBFeHRyYWN0Q29uc3RydWN0b3I8Q29uZmlybWF0aW9uTW9kYWw+O1xufVxuIiwgImltcG9ydCB7IEVkaXRvciB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNFZGl0b3J9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jRWRpdG9yfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RWRpdG9yQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPEVkaXRvcj4ge1xuICByZXR1cm4gRWRpdG9yIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxFZGl0b3I+O1xufVxuIiwgImltcG9ydCB7IEV2ZW50cyB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNFdmVudHN9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jRXZlbnRzfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RXZlbnRzQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPEV2ZW50cz4ge1xuICByZXR1cm4gRXZlbnRzIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxFdmVudHM+O1xufVxuIiwgImltcG9ydCB7IEZpbGVNYW5hZ2VyIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI0ZpbGVNYW5hZ2VyfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI0ZpbGVNYW5hZ2VyfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmlsZU1hbmFnZXJDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8RmlsZU1hbmFnZXI+IHtcbiAgcmV0dXJuIEZpbGVNYW5hZ2VyIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxGaWxlTWFuYWdlcj47XG59XG4iLCAiaW1wb3J0IHsgRmlsZVN5c3RlbUFkYXB0ZXIgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jRmlsZVN5c3RlbUFkYXB0ZXJ9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jRmlsZVN5c3RlbUFkYXB0ZXJ9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWxlU3lzdGVtQWRhcHRlckNvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxGaWxlU3lzdGVtQWRhcHRlcj4ge1xuICByZXR1cm4gRmlsZVN5c3RlbUFkYXB0ZXIgYXMgRXh0cmFjdENvbnN0cnVjdG9yPEZpbGVTeXN0ZW1BZGFwdGVyPjtcbn1cbiIsICJpbXBvcnQgeyBGdXp6eVN1Z2dlc3RNb2RhbCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNGdXp6eVN1Z2dlc3RNb2RhbH0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNGdXp6eVN1Z2dlc3RNb2RhbH0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZ1enp5U3VnZ2VzdE1vZGFsQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPEZ1enp5U3VnZ2VzdE1vZGFsPHVua25vd24+PiB7XG4gIHJldHVybiBGdXp6eVN1Z2dlc3RNb2RhbCBhcyBFeHRyYWN0Q29uc3RydWN0b3I8RnV6enlTdWdnZXN0TW9kYWw8dW5rbm93bj4+O1xufVxuIiwgImltcG9ydCB7IEhvdmVyUG9wb3ZlciB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNIb3ZlclBvcG92ZXJ9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jSG92ZXJQb3BvdmVyfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SG92ZXJQb3BvdmVyQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPEhvdmVyUG9wb3Zlcj4ge1xuICByZXR1cm4gSG92ZXJQb3BvdmVyIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxIb3ZlclBvcG92ZXI+O1xufVxuIiwgImltcG9ydCB7IEtleW1hcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNLZXltYXB9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jS2V5bWFwfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0S2V5bWFwQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPEtleW1hcD4ge1xuICByZXR1cm4gS2V5bWFwIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxLZXltYXA+O1xufVxuIiwgImltcG9ydCB7IE1hcmtkb3duUHJldmlld1JlbmRlcmVyIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI01hcmtkb3duUHJldmlld1JlbmRlcmVyfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI01hcmtkb3duUHJldmlld1JlbmRlcmVyfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWFya2Rvd25QcmV2aWV3UmVuZGVyZXJDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8TWFya2Rvd25QcmV2aWV3UmVuZGVyZXI+IHtcbiAgcmV0dXJuIE1hcmtkb3duUHJldmlld1JlbmRlcmVyIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxNYXJrZG93blByZXZpZXdSZW5kZXJlcj47XG59XG4iLCAiaW1wb3J0IHsgTWFya2Rvd25QcmV2aWV3VmlldyB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNNYXJrZG93blByZXZpZXdWaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI01hcmtkb3duUHJldmlld1ZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRNYXJrZG93blByZXZpZXdWaWV3Q29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPE1hcmtkb3duUHJldmlld1ZpZXc+IHtcbiAgcmV0dXJuIE1hcmtkb3duUHJldmlld1ZpZXcgYXMgdW5rbm93biBhcyBFeHRyYWN0Q29uc3RydWN0b3I8TWFya2Rvd25QcmV2aWV3Vmlldz47XG59XG4iLCAiaW1wb3J0IHsgTWFya2Rvd25SZW5kZXJDaGlsZCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNNYXJrZG93blJlbmRlckNoaWxkfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI01hcmtkb3duUmVuZGVyQ2hpbGR9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRNYXJrZG93blJlbmRlckNoaWxkQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPE1hcmtkb3duUmVuZGVyQ2hpbGQ+IHtcbiAgcmV0dXJuIE1hcmtkb3duUmVuZGVyQ2hpbGQgYXMgRXh0cmFjdENvbnN0cnVjdG9yPE1hcmtkb3duUmVuZGVyQ2hpbGQ+O1xufVxuIiwgImltcG9ydCB7IE1hcmtkb3duUmVuZGVyZXIgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jTWFya2Rvd25SZW5kZXJlcn0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNNYXJrZG93blJlbmRlcmVyfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWFya2Rvd25SZW5kZXJlckNvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxNYXJrZG93blJlbmRlcmVyPiB7XG4gIHJldHVybiBNYXJrZG93blJlbmRlcmVyIGFzIHVua25vd24gYXMgRXh0cmFjdENvbnN0cnVjdG9yPE1hcmtkb3duUmVuZGVyZXI+O1xufVxuIiwgImltcG9ydCB7IE1lbnUgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jTWVudX0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNNZW51fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWVudUNvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxNZW51PiB7XG4gIHJldHVybiBNZW51IGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxNZW51Pjtcbn1cbiIsICJpbXBvcnQgeyBNZW51SXRlbSB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNNZW51SXRlbX0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNNZW51SXRlbX0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1lbnVJdGVtQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPE1lbnVJdGVtPiB7XG4gIHJldHVybiBNZW51SXRlbSBhcyB1bmtub3duIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxNZW51SXRlbT47XG59XG4iLCAiaW1wb3J0IHsgTWVudVNlcGFyYXRvciB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNNZW51U2VwYXJhdG9yfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI01lbnVTZXBhcmF0b3J9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRNZW51U2VwYXJhdG9yQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPE1lbnVTZXBhcmF0b3I+IHtcbiAgcmV0dXJuIE1lbnVTZXBhcmF0b3IgYXMgRXh0cmFjdENvbnN0cnVjdG9yPE1lbnVTZXBhcmF0b3I+O1xufVxuIiwgImltcG9ydCB7IE1ldGFkYXRhQ2FjaGUgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jTWV0YWRhdGFDYWNoZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNNZXRhZGF0YUNhY2hlfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWV0YWRhdGFDYWNoZUNvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxNZXRhZGF0YUNhY2hlPiB7XG4gIHJldHVybiBNZXRhZGF0YUNhY2hlIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxNZXRhZGF0YUNhY2hlPjtcbn1cbiIsICJpbXBvcnQgeyBNb2RhbCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNNb2RhbH0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNNb2RhbH0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1vZGFsQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPE1vZGFsPiB7XG4gIHJldHVybiBNb2RhbCBhcyBFeHRyYWN0Q29uc3RydWN0b3I8TW9kYWw+O1xufVxuIiwgImltcG9ydCB7IE5vdGljZSB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNOb3RpY2V9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jTm90aWNlfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Tm90aWNlQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPE5vdGljZT4ge1xuICByZXR1cm4gTm90aWNlIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxOb3RpY2U+O1xufVxuIiwgImltcG9ydCB7IFJlbmRlckNvbnRleHQgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jUmVuZGVyQ29udGV4dH0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNSZW5kZXJDb250ZXh0fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVuZGVyQ29udGV4dENvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxSZW5kZXJDb250ZXh0PiB7XG4gIHJldHVybiBSZW5kZXJDb250ZXh0IGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxSZW5kZXJDb250ZXh0Pjtcbn1cbiIsICJpbXBvcnQgeyBTY29wZSB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNTY29wZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNTY29wZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNjb3BlQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPFNjb3BlPiB7XG4gIHJldHVybiBTY29wZSBhcyBFeHRyYWN0Q29uc3RydWN0b3I8U2NvcGU+O1xufVxuIiwgImltcG9ydCB7IFNlY3JldFN0b3JhZ2UgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jU2VjcmV0U3RvcmFnZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNTZWNyZXRTdG9yYWdlfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VjcmV0U3RvcmFnZUNvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxTZWNyZXRTdG9yYWdlPiB7XG4gIHJldHVybiBTZWNyZXRTdG9yYWdlIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxTZWNyZXRTdG9yYWdlPjtcbn1cbiIsICJpbXBvcnQgeyBTZXR0aW5nIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI1NldHRpbmd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jU2V0dGluZ30gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNldHRpbmdDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8U2V0dGluZz4ge1xuICByZXR1cm4gU2V0dGluZyBhcyBFeHRyYWN0Q29uc3RydWN0b3I8U2V0dGluZz47XG59XG4iLCAiaW1wb3J0IHsgU2V0dGluZ0dyb3VwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI1NldHRpbmdHcm91cH0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNTZXR0aW5nR3JvdXB9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZXR0aW5nR3JvdXBDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8U2V0dGluZ0dyb3VwPiB7XG4gIHJldHVybiBTZXR0aW5nR3JvdXAgYXMgRXh0cmFjdENvbnN0cnVjdG9yPFNldHRpbmdHcm91cD47XG59XG4iLCAiaW1wb3J0IHsgU2V0dGluZ1BhZ2UgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jU2V0dGluZ1BhZ2V9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jU2V0dGluZ1BhZ2V9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZXR0aW5nUGFnZUNvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxTZXR0aW5nUGFnZT4ge1xuICByZXR1cm4gU2V0dGluZ1BhZ2UgYXMgRXh0cmFjdENvbnN0cnVjdG9yPFNldHRpbmdQYWdlPjtcbn1cbiIsICJpbXBvcnQgeyBTZXR0aW5nVGFiIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI1NldHRpbmdUYWJ9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jU2V0dGluZ1RhYn0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNldHRpbmdUYWJDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8U2V0dGluZ1RhYj4ge1xuICByZXR1cm4gU2V0dGluZ1RhYiBhcyB1bmtub3duIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxTZXR0aW5nVGFiPjtcbn1cbiIsICJpbXBvcnQgeyBUQWJzdHJhY3RGaWxlIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI1RBYnN0cmFjdEZpbGV9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jVEFic3RyYWN0RmlsZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRBYnN0cmFjdEZpbGVDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8VEFic3RyYWN0RmlsZT4ge1xuICByZXR1cm4gVEFic3RyYWN0RmlsZSBhcyB1bmtub3duIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxUQWJzdHJhY3RGaWxlPjtcbn1cbiIsICJpbXBvcnQgeyBUYXNrcyB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBDb25zdHJ1Y3RvckJhc2UgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0NvbnN0cnVjdG9yQmFzZS5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNUYXNrc30gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNUYXNrc30gY29uc3RydWN0b3IuXG4gKiBAcmVtYXJrIENvbnN0cnVjdG9yIGlzIGBudWxsYC4gU2VlIHtAbGluayBodHRwczovL2ZvcnVtLm9ic2lkaWFuLm1kL3QvYXBpLWJ1Zy10YXNrcy1jbGFzcy85ODk5M30uXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRhc2tzQ29uc3RydWN0b3IoKTogQ29uc3RydWN0b3JCYXNlPFtdLCBUYXNrcz4ge1xuICByZXR1cm4gVGFza3MgYXMgQ29uc3RydWN0b3JCYXNlPFtdLCBUYXNrcz47XG59XG4iLCAiaW1wb3J0IHsgVEZpbGUgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jVEZpbGV9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jVEZpbGV9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRURmlsZUNvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxURmlsZT4ge1xuICByZXR1cm4gVEZpbGUgYXMgRXh0cmFjdENvbnN0cnVjdG9yPFRGaWxlPjtcbn1cbiIsICJpbXBvcnQgeyBURm9sZGVyIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI1RGb2xkZXJ9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jVEZvbGRlcn0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRGb2xkZXJDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8VEZvbGRlcj4ge1xuICByZXR1cm4gVEZvbGRlciBhcyBFeHRyYWN0Q29uc3RydWN0b3I8VEZvbGRlcj47XG59XG4iLCAiaW1wb3J0IHsgVmF1bHQgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jVmF1bHR9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jVmF1bHR9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRWYXVsdENvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxWYXVsdD4ge1xuICByZXR1cm4gVmF1bHQgYXMgRXh0cmFjdENvbnN0cnVjdG9yPFZhdWx0Pjtcbn1cbiIsICJpbXBvcnQgeyBXb3Jrc3BhY2UgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jV29ya3NwYWNlfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI1dvcmtzcGFjZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFdvcmtzcGFjZUNvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxXb3Jrc3BhY2U+IHtcbiAgcmV0dXJuIFdvcmtzcGFjZSBhcyBFeHRyYWN0Q29uc3RydWN0b3I8V29ya3NwYWNlPjtcbn1cbiIsICJpbXBvcnQgeyBXb3Jrc3BhY2VDb250YWluZXIgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jV29ya3NwYWNlQ29udGFpbmVyfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI1dvcmtzcGFjZUNvbnRhaW5lcn0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFdvcmtzcGFjZUNvbnRhaW5lckNvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxXb3Jrc3BhY2VDb250YWluZXI+IHtcbiAgcmV0dXJuIFdvcmtzcGFjZUNvbnRhaW5lciBhcyB1bmtub3duIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxXb3Jrc3BhY2VDb250YWluZXI+O1xufVxuIiwgImltcG9ydCB7IFdvcmtzcGFjZUZsb2F0aW5nIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI1dvcmtzcGFjZUZsb2F0aW5nfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI1dvcmtzcGFjZUZsb2F0aW5nfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0V29ya3NwYWNlRmxvYXRpbmdDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8V29ya3NwYWNlRmxvYXRpbmc+IHtcbiAgcmV0dXJuIFdvcmtzcGFjZUZsb2F0aW5nIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxXb3Jrc3BhY2VGbG9hdGluZz47XG59XG4iLCAiaW1wb3J0IHsgV29ya3NwYWNlSXRlbSB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNXb3Jrc3BhY2VJdGVtfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI1dvcmtzcGFjZUl0ZW19IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRXb3Jrc3BhY2VJdGVtQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPFdvcmtzcGFjZUl0ZW0+IHtcbiAgcmV0dXJuIFdvcmtzcGFjZUl0ZW0gYXMgdW5rbm93biBhcyBFeHRyYWN0Q29uc3RydWN0b3I8V29ya3NwYWNlSXRlbT47XG59XG4iLCAiaW1wb3J0IHsgV29ya3NwYWNlTGVhZiB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNXb3Jrc3BhY2VMZWFmfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI1dvcmtzcGFjZUxlYWZ9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRXb3Jrc3BhY2VMZWFmQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPFdvcmtzcGFjZUxlYWY+IHtcbiAgcmV0dXJuIFdvcmtzcGFjZUxlYWYgYXMgRXh0cmFjdENvbnN0cnVjdG9yPFdvcmtzcGFjZUxlYWY+O1xufVxuIiwgImltcG9ydCB7IFdvcmtzcGFjZU1vYmlsZURyYXdlciB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNXb3Jrc3BhY2VNb2JpbGVEcmF3ZXJ9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jV29ya3NwYWNlTW9iaWxlRHJhd2VyfSBjb25zdHJ1Y3Rvci5cbiAqIEByZW1hcmsgQ29uc3RydWN0b3IgaXMgYG51bGxgLiBTZWUge0BsaW5rIGh0dHBzOi8vZm9ydW0ub2JzaWRpYW4ubWQvdC9hcGktYnVnLXRhc2tzLWNsYXNzLzk4OTkzfS5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0V29ya3NwYWNlTW9iaWxlRHJhd2VyQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPFdvcmtzcGFjZU1vYmlsZURyYXdlcj4ge1xuICByZXR1cm4gV29ya3NwYWNlTW9iaWxlRHJhd2VyIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxXb3Jrc3BhY2VNb2JpbGVEcmF3ZXI+O1xufVxuIiwgImltcG9ydCB7IFdvcmtzcGFjZVBhcmVudCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNXb3Jrc3BhY2VQYXJlbnR9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jV29ya3NwYWNlUGFyZW50fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0V29ya3NwYWNlUGFyZW50Q29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPFdvcmtzcGFjZVBhcmVudD4ge1xuICByZXR1cm4gV29ya3NwYWNlUGFyZW50IGFzIHVua25vd24gYXMgRXh0cmFjdENvbnN0cnVjdG9yPFdvcmtzcGFjZVBhcmVudD47XG59XG4iLCAiaW1wb3J0IHsgV29ya3NwYWNlUmliYm9uIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI1dvcmtzcGFjZVJpYmJvbn0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNXb3Jrc3BhY2VSaWJib259IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRXb3Jrc3BhY2VSaWJib25Db25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8V29ya3NwYWNlUmliYm9uPiB7XG4gIHJldHVybiBXb3Jrc3BhY2VSaWJib24gYXMgRXh0cmFjdENvbnN0cnVjdG9yPFdvcmtzcGFjZVJpYmJvbj47XG59XG4iLCAiaW1wb3J0IHsgV29ya3NwYWNlUm9vdCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNXb3Jrc3BhY2VSb290fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI1dvcmtzcGFjZVJvb3R9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRXb3Jrc3BhY2VSb290Q29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPFdvcmtzcGFjZVJvb3Q+IHtcbiAgcmV0dXJuIFdvcmtzcGFjZVJvb3QgYXMgRXh0cmFjdENvbnN0cnVjdG9yPFdvcmtzcGFjZVJvb3Q+O1xufVxuIiwgImltcG9ydCB7IFdvcmtzcGFjZVNpZGVkb2NrIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI1dvcmtzcGFjZVNpZGVkb2NrfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI1dvcmtzcGFjZVNpZGVkb2NrfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0V29ya3NwYWNlU2lkZWRvY2tDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8V29ya3NwYWNlU2lkZWRvY2s+IHtcbiAgcmV0dXJuIFdvcmtzcGFjZVNpZGVkb2NrIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxXb3Jrc3BhY2VTaWRlZG9jaz47XG59XG4iLCAiaW1wb3J0IHsgV29ya3NwYWNlU3BsaXQgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jV29ya3NwYWNlU3BsaXR9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jV29ya3NwYWNlU3BsaXR9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRXb3Jrc3BhY2VTcGxpdENvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxXb3Jrc3BhY2VTcGxpdD4ge1xuICByZXR1cm4gV29ya3NwYWNlU3BsaXQgYXMgRXh0cmFjdENvbnN0cnVjdG9yPFdvcmtzcGFjZVNwbGl0Pjtcbn1cbiIsICJpbXBvcnQgeyBXb3Jrc3BhY2VUYWJzIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI1dvcmtzcGFjZVRhYnN9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jV29ya3NwYWNlVGFic30gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFdvcmtzcGFjZVRhYnNDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8V29ya3NwYWNlVGFicz4ge1xuICByZXR1cm4gV29ya3NwYWNlVGFicyBhcyBFeHRyYWN0Q29uc3RydWN0b3I8V29ya3NwYWNlVGFicz47XG59XG4iLCAiaW1wb3J0IHsgV29ya3NwYWNlV2luZG93IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI1dvcmtzcGFjZVdpbmRvd30gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNXb3Jrc3BhY2VXaW5kb3d9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRXb3Jrc3BhY2VXaW5kb3dDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8V29ya3NwYWNlV2luZG93PiB7XG4gIHJldHVybiBXb3Jrc3BhY2VXaW5kb3cgYXMgRXh0cmFjdENvbnN0cnVjdG9yPFdvcmtzcGFjZVdpbmRvdz47XG59XG4iLCAiaW1wb3J0IHsgQWJzdHJhY3RUZXh0Q29tcG9uZW50IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI0Fic3RyYWN0VGV4dENvbXBvbmVudH0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNBYnN0cmFjdFRleHRDb21wb25lbnR9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBYnN0cmFjdFRleHRDb21wb25lbnRDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8XG4gIEFic3RyYWN0VGV4dENvbXBvbmVudDxIVE1MSW5wdXRFbGVtZW50IHwgSFRNTFRleHRBcmVhRWxlbWVudD5cbj4ge1xuICByZXR1cm4gQWJzdHJhY3RUZXh0Q29tcG9uZW50IGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxcbiAgICBBYnN0cmFjdFRleHRDb21wb25lbnQ8SFRNTElucHV0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQ+XG4gID47XG59XG4iLCAiaW1wb3J0IHsgQmFzZUNvbXBvbmVudCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNCYXNlQ29tcG9uZW50fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI0Jhc2VDb21wb25lbnR9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRCYXNlQ29tcG9uZW50Q29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPEJhc2VDb21wb25lbnQ+IHtcbiAgcmV0dXJuIEJhc2VDb21wb25lbnQgYXMgRXh0cmFjdENvbnN0cnVjdG9yPEJhc2VDb21wb25lbnQ+O1xufVxuIiwgImltcG9ydCB7IEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNCdXR0b25Db21wb25lbnR9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jQnV0dG9uQ29tcG9uZW50fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QnV0dG9uQ29tcG9uZW50Q29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPEJ1dHRvbkNvbXBvbmVudD4ge1xuICByZXR1cm4gQnV0dG9uQ29tcG9uZW50IGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxCdXR0b25Db21wb25lbnQ+O1xufVxuIiwgImltcG9ydCB7IENvbG9yQ29tcG9uZW50IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI0NvbG9yQ29tcG9uZW50fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI0NvbG9yQ29tcG9uZW50fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29sb3JDb21wb25lbnRDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8Q29sb3JDb21wb25lbnQ+IHtcbiAgcmV0dXJuIENvbG9yQ29tcG9uZW50IGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxDb2xvckNvbXBvbmVudD47XG59XG4iLCAiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI0NvbXBvbmVudH0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNDb21wb25lbnR9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb21wb25lbnRDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8Q29tcG9uZW50PiB7XG4gIHJldHVybiBDb21wb25lbnQgYXMgRXh0cmFjdENvbnN0cnVjdG9yPENvbXBvbmVudD47XG59XG4iLCAiaW1wb3J0IHsgQ29uZmlybWF0aW9uQnV0dG9uIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI0NvbmZpcm1hdGlvbkJ1dHRvbn0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNDb25maXJtYXRpb25CdXR0b259IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb25maXJtYXRpb25CdXR0b25Db25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8Q29uZmlybWF0aW9uQnV0dG9uPiB7XG4gIHJldHVybiBDb25maXJtYXRpb25CdXR0b24gYXMgdW5rbm93biBhcyBFeHRyYWN0Q29uc3RydWN0b3I8Q29uZmlybWF0aW9uQnV0dG9uPjtcbn1cbiIsICJpbXBvcnQgeyBEaXNwbGF5VmFsdWVDb21wb25lbnQgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jRGlzcGxheVZhbHVlQ29tcG9uZW50fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI0Rpc3BsYXlWYWx1ZUNvbXBvbmVudH0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERpc3BsYXlWYWx1ZUNvbXBvbmVudENvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxEaXNwbGF5VmFsdWVDb21wb25lbnQ+IHtcbiAgcmV0dXJuIERpc3BsYXlWYWx1ZUNvbXBvbmVudCBhcyBFeHRyYWN0Q29uc3RydWN0b3I8RGlzcGxheVZhbHVlQ29tcG9uZW50Pjtcbn1cbiIsICJpbXBvcnQgeyBEcm9wZG93bkNvbXBvbmVudCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNEcm9wZG93bkNvbXBvbmVudH0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNEcm9wZG93bkNvbXBvbmVudH0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERyb3Bkb3duQ29tcG9uZW50Q29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPERyb3Bkb3duQ29tcG9uZW50PiB7XG4gIHJldHVybiBEcm9wZG93bkNvbXBvbmVudCBhcyBFeHRyYWN0Q29uc3RydWN0b3I8RHJvcGRvd25Db21wb25lbnQ+O1xufVxuIiwgImltcG9ydCB7IEV4dHJhQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI0V4dHJhQnV0dG9uQ29tcG9uZW50fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI0V4dHJhQnV0dG9uQ29tcG9uZW50fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RXh0cmFCdXR0b25Db21wb25lbnRDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8RXh0cmFCdXR0b25Db21wb25lbnQ+IHtcbiAgcmV0dXJuIEV4dHJhQnV0dG9uQ29tcG9uZW50IGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxFeHRyYUJ1dHRvbkNvbXBvbmVudD47XG59XG4iLCAiaW1wb3J0IHsgTW9tZW50Rm9ybWF0Q29tcG9uZW50IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI01vbWVudEZvcm1hdENvbXBvbmVudH0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNNb21lbnRGb3JtYXRDb21wb25lbnR9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRNb21lbnRGb3JtYXRDb21wb25lbnRDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8TW9tZW50Rm9ybWF0Q29tcG9uZW50PiB7XG4gIHJldHVybiBNb21lbnRGb3JtYXRDb21wb25lbnQgYXMgRXh0cmFjdENvbnN0cnVjdG9yPE1vbWVudEZvcm1hdENvbXBvbmVudD47XG59XG4iLCAiaW1wb3J0IHsgUHJvZ3Jlc3NCYXJDb21wb25lbnQgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jUHJvZ3Jlc3NCYXJDb21wb25lbnR9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jUHJvZ3Jlc3NCYXJDb21wb25lbnR9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQcm9ncmVzc0JhckNvbXBvbmVudENvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxQcm9ncmVzc0JhckNvbXBvbmVudD4ge1xuICByZXR1cm4gUHJvZ3Jlc3NCYXJDb21wb25lbnQgYXMgRXh0cmFjdENvbnN0cnVjdG9yPFByb2dyZXNzQmFyQ29tcG9uZW50Pjtcbn1cbiIsICJpbXBvcnQgeyBTZWFyY2hDb21wb25lbnQgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jU2VhcmNoQ29tcG9uZW50fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI1NlYXJjaENvbXBvbmVudH0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNlYXJjaENvbXBvbmVudENvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxTZWFyY2hDb21wb25lbnQ+IHtcbiAgcmV0dXJuIFNlYXJjaENvbXBvbmVudCBhcyBFeHRyYWN0Q29uc3RydWN0b3I8U2VhcmNoQ29tcG9uZW50Pjtcbn1cbiIsICJpbXBvcnQgeyBTZWNyZXRDb21wb25lbnQgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jU2VjcmV0Q29tcG9uZW50fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI1NlY3JldENvbXBvbmVudH0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNlY3JldENvbXBvbmVudENvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxTZWNyZXRDb21wb25lbnQ+IHtcbiAgcmV0dXJuIFNlY3JldENvbXBvbmVudCBhcyBFeHRyYWN0Q29uc3RydWN0b3I8U2VjcmV0Q29tcG9uZW50Pjtcbn1cbiIsICJpbXBvcnQgeyBTbGlkZXJDb21wb25lbnQgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jU2xpZGVyQ29tcG9uZW50fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI1NsaWRlckNvbXBvbmVudH0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNsaWRlckNvbXBvbmVudENvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxTbGlkZXJDb21wb25lbnQ+IHtcbiAgcmV0dXJuIFNsaWRlckNvbXBvbmVudCBhcyBFeHRyYWN0Q29uc3RydWN0b3I8U2xpZGVyQ29tcG9uZW50Pjtcbn1cbiIsICJpbXBvcnQgeyBUZXh0QXJlYUNvbXBvbmVudCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNUZXh0QXJlYUNvbXBvbmVudH0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNUZXh0QXJlYUNvbXBvbmVudH0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRleHRBcmVhQ29tcG9uZW50Q29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPFRleHRBcmVhQ29tcG9uZW50PiB7XG4gIHJldHVybiBUZXh0QXJlYUNvbXBvbmVudCBhcyBFeHRyYWN0Q29uc3RydWN0b3I8VGV4dEFyZWFDb21wb25lbnQ+O1xufVxuIiwgImltcG9ydCB7IFRleHRDb21wb25lbnQgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jVGV4dENvbXBvbmVudH0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNUZXh0Q29tcG9uZW50fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGV4dENvbXBvbmVudENvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxUZXh0Q29tcG9uZW50PiB7XG4gIHJldHVybiBUZXh0Q29tcG9uZW50IGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxUZXh0Q29tcG9uZW50Pjtcbn1cbiIsICJpbXBvcnQgeyBUb2dnbGVDb21wb25lbnQgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jVG9nZ2xlQ29tcG9uZW50fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI1RvZ2dsZUNvbXBvbmVudH0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRvZ2dsZUNvbXBvbmVudENvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxUb2dnbGVDb21wb25lbnQ+IHtcbiAgcmV0dXJuIFRvZ2dsZUNvbXBvbmVudCBhcyBFeHRyYWN0Q29uc3RydWN0b3I8VG9nZ2xlQ29tcG9uZW50Pjtcbn1cbiIsICJpbXBvcnQgeyBWYWx1ZUNvbXBvbmVudCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNWYWx1ZUNvbXBvbmVudH0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNWYWx1ZUNvbXBvbmVudH0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFZhbHVlQ29tcG9uZW50Q29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPFZhbHVlQ29tcG9uZW50PHVua25vd24+PiB7XG4gIHJldHVybiBWYWx1ZUNvbXBvbmVudCBhcyBFeHRyYWN0Q29uc3RydWN0b3I8VmFsdWVDb21wb25lbnQ8dW5rbm93bj4+O1xufVxuIiwgImltcG9ydCB7IEJvb2xlYW5WYWx1ZSB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNCb29sZWFuVmFsdWV9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jQm9vbGVhblZhbHVlfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Qm9vbGVhblZhbHVlQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPEJvb2xlYW5WYWx1ZT4ge1xuICByZXR1cm4gQm9vbGVhblZhbHVlIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxCb29sZWFuVmFsdWU+O1xufVxuIiwgImltcG9ydCB7IERhdGVWYWx1ZSB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNEYXRlVmFsdWV9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jRGF0ZVZhbHVlfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF0ZVZhbHVlQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPERhdGVWYWx1ZT4ge1xuICByZXR1cm4gRGF0ZVZhbHVlIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxEYXRlVmFsdWU+O1xufVxuIiwgImltcG9ydCB7IER1cmF0aW9uVmFsdWUgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jRHVyYXRpb25WYWx1ZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNEdXJhdGlvblZhbHVlfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RHVyYXRpb25WYWx1ZUNvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxEdXJhdGlvblZhbHVlPiB7XG4gIHJldHVybiBEdXJhdGlvblZhbHVlIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxEdXJhdGlvblZhbHVlPjtcbn1cbiIsICJpbXBvcnQgeyBGaWxlVmFsdWUgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jRmlsZVZhbHVlfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI0ZpbGVWYWx1ZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbGVWYWx1ZUNvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxGaWxlVmFsdWU+IHtcbiAgcmV0dXJuIEZpbGVWYWx1ZSBhcyBFeHRyYWN0Q29uc3RydWN0b3I8RmlsZVZhbHVlPjtcbn1cbiIsICJpbXBvcnQgeyBIVE1MVmFsdWUgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jSFRNTFZhbHVlfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI0hUTUxWYWx1ZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEhUTUxWYWx1ZUNvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxIVE1MVmFsdWU+IHtcbiAgcmV0dXJuIEhUTUxWYWx1ZSBhcyBFeHRyYWN0Q29uc3RydWN0b3I8SFRNTFZhbHVlPjtcbn1cbiIsICJpbXBvcnQgeyBJY29uVmFsdWUgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jSWNvblZhbHVlfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI0ljb25WYWx1ZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEljb25WYWx1ZUNvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxJY29uVmFsdWU+IHtcbiAgcmV0dXJuIEljb25WYWx1ZSBhcyBFeHRyYWN0Q29uc3RydWN0b3I8SWNvblZhbHVlPjtcbn1cbiIsICJpbXBvcnQgeyBJbWFnZVZhbHVlIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI0ltYWdlVmFsdWV9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jSW1hZ2VWYWx1ZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEltYWdlVmFsdWVDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8SW1hZ2VWYWx1ZT4ge1xuICByZXR1cm4gSW1hZ2VWYWx1ZSBhcyBFeHRyYWN0Q29uc3RydWN0b3I8SW1hZ2VWYWx1ZT47XG59XG4iLCAiaW1wb3J0IHsgTGlua1ZhbHVlIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI0xpbmtWYWx1ZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNMaW5rVmFsdWV9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRMaW5rVmFsdWVDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8TGlua1ZhbHVlPiB7XG4gIHJldHVybiBMaW5rVmFsdWUgYXMgdW5rbm93biBhcyBFeHRyYWN0Q29uc3RydWN0b3I8TGlua1ZhbHVlPjtcbn1cbiIsICJpbXBvcnQgeyBMaXN0VmFsdWUgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jTGlzdFZhbHVlfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI0xpc3RWYWx1ZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldExpc3RWYWx1ZUNvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxMaXN0VmFsdWU+IHtcbiAgcmV0dXJuIExpc3RWYWx1ZSBhcyBFeHRyYWN0Q29uc3RydWN0b3I8TGlzdFZhbHVlPjtcbn1cbiIsICJpbXBvcnQgeyBOb3ROdWxsVmFsdWUgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jTm90TnVsbFZhbHVlfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI05vdE51bGxWYWx1ZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE5vdE51bGxWYWx1ZUNvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxOb3ROdWxsVmFsdWU+IHtcbiAgcmV0dXJuIE5vdE51bGxWYWx1ZSBhcyB1bmtub3duIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxOb3ROdWxsVmFsdWU+O1xufVxuIiwgImltcG9ydCB7IE51bGxWYWx1ZSB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNOdWxsVmFsdWV9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jTnVsbFZhbHVlfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TnVsbFZhbHVlQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPE51bGxWYWx1ZT4ge1xuICByZXR1cm4gTnVsbFZhbHVlIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxOdWxsVmFsdWU+O1xufVxuIiwgImltcG9ydCB7IE51bWJlclZhbHVlIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI051bWJlclZhbHVlfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI051bWJlclZhbHVlfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TnVtYmVyVmFsdWVDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8TnVtYmVyVmFsdWU+IHtcbiAgcmV0dXJuIE51bWJlclZhbHVlIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxOdW1iZXJWYWx1ZT47XG59XG4iLCAiaW1wb3J0IHsgT2JqZWN0VmFsdWUgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jT2JqZWN0VmFsdWV9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jT2JqZWN0VmFsdWV9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRPYmplY3RWYWx1ZUNvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxPYmplY3RWYWx1ZT4ge1xuICByZXR1cm4gT2JqZWN0VmFsdWUgYXMgRXh0cmFjdENvbnN0cnVjdG9yPE9iamVjdFZhbHVlPjtcbn1cbiIsICJpbXBvcnQgeyBSZWdFeHBWYWx1ZSB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNSZWdFeHBWYWx1ZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNSZWdFeHBWYWx1ZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJlZ0V4cFZhbHVlQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPFJlZ0V4cFZhbHVlPiB7XG4gIHJldHVybiBSZWdFeHBWYWx1ZSBhcyBFeHRyYWN0Q29uc3RydWN0b3I8UmVnRXhwVmFsdWU+O1xufVxuIiwgImltcG9ydCB7IFJlbGF0aXZlRGF0ZVZhbHVlIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI1JlbGF0aXZlRGF0ZVZhbHVlfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI1JlbGF0aXZlRGF0ZVZhbHVlfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVsYXRpdmVEYXRlVmFsdWVDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8UmVsYXRpdmVEYXRlVmFsdWU+IHtcbiAgcmV0dXJuIFJlbGF0aXZlRGF0ZVZhbHVlIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxSZWxhdGl2ZURhdGVWYWx1ZT47XG59XG4iLCAiaW1wb3J0IHsgU3RyaW5nVmFsdWUgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jU3RyaW5nVmFsdWV9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jU3RyaW5nVmFsdWV9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdHJpbmdWYWx1ZUNvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxTdHJpbmdWYWx1ZT4ge1xuICByZXR1cm4gU3RyaW5nVmFsdWUgYXMgRXh0cmFjdENvbnN0cnVjdG9yPFN0cmluZ1ZhbHVlPjtcbn1cbiIsICJpbXBvcnQgeyBUYWdWYWx1ZSB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNUYWdWYWx1ZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNUYWdWYWx1ZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRhZ1ZhbHVlQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPFRhZ1ZhbHVlPiB7XG4gIHJldHVybiBUYWdWYWx1ZSBhcyBFeHRyYWN0Q29uc3RydWN0b3I8VGFnVmFsdWU+O1xufVxuIiwgImltcG9ydCB7IFVybFZhbHVlIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI1VybFZhbHVlfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI1VybFZhbHVlfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VXJsVmFsdWVDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8VXJsVmFsdWU+IHtcbiAgcmV0dXJuIFVybFZhbHVlIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxVcmxWYWx1ZT47XG59XG4iLCAiaW1wb3J0IHsgVmFsdWUgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jVmFsdWV9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jVmFsdWV9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRWYWx1ZUNvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxWYWx1ZT4ge1xuICByZXR1cm4gVmFsdWUgYXMgdW5rbm93biBhcyBFeHRyYWN0Q29uc3RydWN0b3I8VmFsdWU+O1xufVxuIiwgImltcG9ydCB7IEVkaXRhYmxlRmlsZVZpZXcgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jRWRpdGFibGVGaWxlVmlld30gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNFZGl0YWJsZUZpbGVWaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RWRpdGFibGVGaWxlVmlld0NvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxFZGl0YWJsZUZpbGVWaWV3PiB7XG4gIHJldHVybiBFZGl0YWJsZUZpbGVWaWV3IGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxFZGl0YWJsZUZpbGVWaWV3Pjtcbn1cbiIsICJpbXBvcnQgeyBNYXJrZG93blZpZXcgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jTWFya2Rvd25WaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI01hcmtkb3duVmlld30gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1hcmtkb3duVmlld0NvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxNYXJrZG93blZpZXc+IHtcbiAgcmV0dXJuIE1hcmtkb3duVmlldyBhcyBFeHRyYWN0Q29uc3RydWN0b3I8TWFya2Rvd25WaWV3Pjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBBcHBNZW51QmFyTWFuYWdlciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9BcHBNZW51QmFyTWFuYWdlci5kLnRzJztcbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgQXBwTWVudUJhck1hbmFnZXJ9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwIGluc3RhbmNlLlxuICogQHJldHVybnMgVGhlIHtAbGluayBBcHBNZW51QmFyTWFuYWdlcn0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFwcE1lbnVCYXJNYW5hZ2VyQ29uc3RydWN0b3IoYXBwOiBBcHApOiBFeHRyYWN0Q29uc3RydWN0b3I8QXBwTWVudUJhck1hbmFnZXI+IHtcbiAgcmV0dXJuIGFwcC5hcHBNZW51QmFyTWFuYWdlci5jb25zdHJ1Y3RvciBhcyBFeHRyYWN0Q29uc3RydWN0b3I8QXBwTWVudUJhck1hbmFnZXI+O1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEFwcFNldHRpbmcgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvQXBwU2V0dGluZy5kLnRzJztcbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgQXBwU2V0dGluZ30gY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIEFwcFNldHRpbmd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBcHBTZXR0aW5nQ29uc3RydWN0b3IoYXBwOiBBcHApOiBFeHRyYWN0Q29uc3RydWN0b3I8QXBwU2V0dGluZz4ge1xuICByZXR1cm4gYXBwLnNldHRpbmcuY29uc3RydWN0b3IgYXMgRXh0cmFjdENvbnN0cnVjdG9yPEFwcFNldHRpbmc+O1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IENsaSB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jbGkvQ2xpLmQudHMnO1xuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBDbGl9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwIGluc3RhbmNlLlxuICogQHJldHVybnMgVGhlIHtAbGluayBDbGl9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDbGlDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxDbGk+IHtcbiAgcmV0dXJuIGFwcC5jbGkuY29uc3RydWN0b3IgYXMgRXh0cmFjdENvbnN0cnVjdG9yPENsaT47XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgQ29tbWFuZHMgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29tbWFuZHMvQ29tbWFuZHMuZC50cyc7XG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIENvbW1hbmRzfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcCBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgQ29tbWFuZHN9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb21tYW5kc0NvbnN0cnVjdG9yKGFwcDogQXBwKTogRXh0cmFjdENvbnN0cnVjdG9yPENvbW1hbmRzPiB7XG4gIHJldHVybiBhcHAuY29tbWFuZHMuY29uc3RydWN0b3IgYXMgRXh0cmFjdENvbnN0cnVjdG9yPENvbW1hbmRzPjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcbmltcG9ydCB0eXBlIHsgQ3VzdG9tQ1NTIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2N1c3RvbS1jc3MvQ3VzdG9tQ1NTLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIEN1c3RvbUNTU30gY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIEN1c3RvbUNTU30gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEN1c3RvbUNTU0NvbnN0cnVjdG9yKGFwcDogQXBwKTogRXh0cmFjdENvbnN0cnVjdG9yPEN1c3RvbUNTUz4ge1xuICByZXR1cm4gYXBwLmN1c3RvbUNzcy5jb25zdHJ1Y3RvciBhcyBFeHRyYWN0Q29uc3RydWN0b3I8Q3VzdG9tQ1NTPjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcbmltcG9ydCB0eXBlIHsgRHJhZ01hbmFnZXIgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvZHJhZy1tYW5hZ2VyL0RyYWdNYW5hZ2VyLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIERyYWdNYW5hZ2VyfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcCBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgRHJhZ01hbmFnZXJ9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREcmFnTWFuYWdlckNvbnN0cnVjdG9yKGFwcDogQXBwKTogRXh0cmFjdENvbnN0cnVjdG9yPERyYWdNYW5hZ2VyPiB7XG4gIHJldHVybiBhcHAuZHJhZ01hbmFnZXIuY29uc3RydWN0b3IgYXMgRXh0cmFjdENvbnN0cnVjdG9yPERyYWdNYW5hZ2VyPjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcbmltcG9ydCB0eXBlIHsgRWRpdG9yU3VnZ2VzdHMgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvRWRpdG9yU3VnZ2VzdHMuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgRWRpdG9yU3VnZ2VzdHN9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwIGluc3RhbmNlLlxuICogQHJldHVybnMgVGhlIHtAbGluayBFZGl0b3JTdWdnZXN0c30gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVkaXRvclN1Z2dlc3RzQ29uc3RydWN0b3IoYXBwOiBBcHApOiBFeHRyYWN0Q29uc3RydWN0b3I8RWRpdG9yU3VnZ2VzdHM+IHtcbiAgcmV0dXJuIGFwcC53b3Jrc3BhY2UuZWRpdG9yU3VnZ2VzdC5jb25zdHJ1Y3RvciBhcyBFeHRyYWN0Q29uc3RydWN0b3I8RWRpdG9yU3VnZ2VzdHM+O1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuaW1wb3J0IHR5cGUgeyBFbWJlZFJlZ2lzdHJ5IH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2VtYmVkLXJlZ2lzdHJ5L0VtYmVkUmVnaXN0cnkuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgRW1iZWRSZWdpc3RyeX0gY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIEVtYmVkUmVnaXN0cnl9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbWJlZFJlZ2lzdHJ5Q29uc3RydWN0b3IoYXBwOiBBcHApOiBFeHRyYWN0Q29uc3RydWN0b3I8RW1iZWRSZWdpc3RyeT4ge1xuICByZXR1cm4gYXBwLmVtYmVkUmVnaXN0cnkuY29uc3RydWN0b3IgYXMgRXh0cmFjdENvbnN0cnVjdG9yPEVtYmVkUmVnaXN0cnk+O1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuaW1wb3J0IHR5cGUgeyBGb2xkTWFuYWdlciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9Gb2xkTWFuYWdlci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBGb2xkTWFuYWdlcn0gY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIEZvbGRNYW5hZ2VyfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9sZE1hbmFnZXJDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxGb2xkTWFuYWdlcj4ge1xuICByZXR1cm4gYXBwLmZvbGRNYW5hZ2VyLmNvbnN0cnVjdG9yIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxGb2xkTWFuYWdlcj47XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcbmltcG9ydCB0eXBlIHsgRnJhbWVEb20gfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvRnJhbWVEb20uZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgRnJhbWVEb219IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgRnJhbWVEb219IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGcmFtZURvbUNvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxGcmFtZURvbT4ge1xuICByZXR1cm4gd2luZG93LmZyYW1lRG9tLmNvbnN0cnVjdG9yIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxGcmFtZURvbT47XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5pbXBvcnQgdHlwZSB7IEhvdGtleU1hbmFnZXIgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvaG90a2V5LW1hbmFnZXIvSG90a2V5TWFuYWdlci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBIb3RrZXlNYW5hZ2VyfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcCBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgSG90a2V5TWFuYWdlcn0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEhvdGtleU1hbmFnZXJDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxIb3RrZXlNYW5hZ2VyPiB7XG4gIHJldHVybiBhcHAuaG90a2V5TWFuYWdlci5jb25zdHJ1Y3RvciBhcyBFeHRyYWN0Q29uc3RydWN0b3I8SG90a2V5TWFuYWdlcj47XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5pbXBvcnQgdHlwZSB7IE1ldGFkYXRhVHlwZU1hbmFnZXIgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvbWV0YWRhdGEtdHlwZS1tYW5hZ2VyL01ldGFkYXRhVHlwZU1hbmFnZXIuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgTWV0YWRhdGFUeXBlTWFuYWdlcn0gY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIE1ldGFkYXRhVHlwZU1hbmFnZXJ9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRNZXRhZGF0YVR5cGVNYW5hZ2VyQ29uc3RydWN0b3IoYXBwOiBBcHApOiBFeHRyYWN0Q29uc3RydWN0b3I8TWV0YWRhdGFUeXBlTWFuYWdlcj4ge1xuICByZXR1cm4gYXBwLm1ldGFkYXRhVHlwZU1hbmFnZXIuY29uc3RydWN0b3IgYXMgRXh0cmFjdENvbnN0cnVjdG9yPE1ldGFkYXRhVHlwZU1hbmFnZXI+O1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuaW1wb3J0IHR5cGUgeyBPYnNpZGlhbkRPTSB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9PYnNpZGlhbkRPTS5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBPYnNpZGlhbkRPTX0gY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIE9ic2lkaWFuRE9NfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0T2JzaWRpYW5ET01Db25zdHJ1Y3RvcihhcHA6IEFwcCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxPYnNpZGlhbkRPTT4ge1xuICByZXR1cm4gYXBwLmRvbS5jb25zdHJ1Y3RvciBhcyBFeHRyYWN0Q29uc3RydWN0b3I8T2JzaWRpYW5ET00+O1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuaW1wb3J0IHR5cGUgeyBQbHVnaW5zIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL3BsdWdpbnMvUGx1Z2lucy5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBQbHVnaW5zfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcCBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgUGx1Z2luc30gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBsdWdpbnNDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxQbHVnaW5zPiB7XG4gIHJldHVybiBhcHAucGx1Z2lucy5jb25zdHJ1Y3RvciBhcyBFeHRyYWN0Q29uc3RydWN0b3I8UGx1Z2lucz47XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5pbXBvcnQgdHlwZSB7IFJlY2VudEZpbGVUcmFja2VyIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL1JlY2VudEZpbGVUcmFja2VyLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIFJlY2VudEZpbGVUcmFja2VyfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcCBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgUmVjZW50RmlsZVRyYWNrZXJ9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRSZWNlbnRGaWxlVHJhY2tlckNvbnN0cnVjdG9yKGFwcDogQXBwKTogRXh0cmFjdENvbnN0cnVjdG9yPFJlY2VudEZpbGVUcmFja2VyPiB7XG4gIHJldHVybiBhcHAud29ya3NwYWNlLnJlY2VudEZpbGVUcmFja2VyLmNvbnN0cnVjdG9yIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxSZWNlbnRGaWxlVHJhY2tlcj47XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5pbXBvcnQgdHlwZSB7IFNoYXJlUmVjZWl2ZXIgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvU2hhcmVSZWNlaXZlci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBTaGFyZVJlY2VpdmVyfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcCBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgU2hhcmVSZWNlaXZlcn0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNoYXJlUmVjZWl2ZXJDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxTaGFyZVJlY2VpdmVyPiB7XG4gIHJldHVybiBhcHAuc2hhcmVSZWNlaXZlci5jb25zdHJ1Y3RvciBhcyBFeHRyYWN0Q29uc3RydWN0b3I8U2hhcmVSZWNlaXZlcj47XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5pbXBvcnQgdHlwZSB7IFN0YXR1c0JhciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9TdGF0dXNCYXIuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgU3RhdHVzQmFyfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcCBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgU3RhdHVzQmFyfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RhdHVzQmFyQ29uc3RydWN0b3IoYXBwOiBBcHApOiBFeHRyYWN0Q29uc3RydWN0b3I8U3RhdHVzQmFyPiB7XG4gIHJldHVybiBhcHAuc3RhdHVzQmFyLmNvbnN0cnVjdG9yIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxTdGF0dXNCYXI+O1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuaW1wb3J0IHR5cGUgeyBWaWV3UmVnaXN0cnkgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvdmlldy1yZWdpc3RyeS9WaWV3UmVnaXN0cnkuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgVmlld1JlZ2lzdHJ5fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcCBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgVmlld1JlZ2lzdHJ5fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Vmlld1JlZ2lzdHJ5Q29uc3RydWN0b3IoYXBwOiBBcHApOiBFeHRyYWN0Q29uc3RydWN0b3I8Vmlld1JlZ2lzdHJ5PiB7XG4gIHJldHVybiBhcHAudmlld1JlZ2lzdHJ5LmNvbnN0cnVjdG9yIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxWaWV3UmVnaXN0cnk+O1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuaW1wb3J0IHR5cGUgeyBXb3Jrc3BhY2VMZWFmSGlzdG9yeSB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy93b3Jrc3BhY2UtbGVhZi1oaXN0b3J5L1dvcmtzcGFjZUxlYWZIaXN0b3J5LmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIFdvcmtzcGFjZUxlYWZIaXN0b3J5fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcCBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgV29ya3NwYWNlTGVhZkhpc3Rvcnl9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRXb3Jrc3BhY2VMZWFmSGlzdG9yeUNvbnN0cnVjdG9yKGFwcDogQXBwKTogRXh0cmFjdENvbnN0cnVjdG9yPFdvcmtzcGFjZUxlYWZIaXN0b3J5PiB7XG4gIGNvbnN0IGxlYWYgPSBhcHAud29ya3NwYWNlLmdldE1vc3RSZWNlbnRMZWFmKCk7XG4gIGlmICghbGVhZikge1xuICAgIHRocm93IG5ldyBFcnJvcignTm8gd29ya3NwYWNlIGxlYWYgYXZhaWxhYmxlIHRvIGV4dHJhY3QgV29ya3NwYWNlTGVhZkhpc3RvcnkgY29uc3RydWN0b3InKTtcbiAgfVxuICByZXR1cm4gbGVhZi5oaXN0b3J5LmNvbnN0cnVjdG9yIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxXb3Jrc3BhY2VMZWFmSGlzdG9yeT47XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5pbXBvcnQgdHlwZSB7IEJhc2VzQ29udGV4dCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2ludGVybmFscy9pbnRlcm5hbC1wbHVnaW5zL2Jhc2VzL0Jhc2VzQ29udGV4dC5kLnRzJztcbmltcG9ydCB0eXBlIHsgQmFzZXNRdWVyeSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2ludGVybmFscy9pbnRlcm5hbC1wbHVnaW5zL2Jhc2VzL0Jhc2VzUXVlcnkuZC50cyc7XG5cbmltcG9ydCB7IEludGVybmFsUGx1Z2luTmFtZSB9IGZyb20gJy4uLy4uLy4uLy4uL2NvbnN0YW50cy9JbnRlcm5hbFBsdWdpbk5hbWUudHMnO1xuaW1wb3J0IHsgZ2V0UXVlcnlDb250cm9sbGVyQ29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9hdWdtZW50YXRpb25zL2Jhc2VzL2dldFF1ZXJ5Q29udHJvbGxlckNvbnN0cnVjdG9yLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBCYXNlc0NvbnRleHR9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwIGluc3RhbmNlLlxuICogQHJldHVybnMgVGhlIHtAbGluayBCYXNlc0NvbnRleHR9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRCYXNlc0NvbnRleHRDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxCYXNlc0NvbnRleHQ+IHtcbiAgY29uc3QgYmFzZXNQbHVnaW4gPSBhcHAuaW50ZXJuYWxQbHVnaW5zLmdldFBsdWdpbkJ5SWQoSW50ZXJuYWxQbHVnaW5OYW1lLkJhc2VzKTtcbiAgaWYgKCFiYXNlc1BsdWdpbikge1xuICAgIHRocm93IG5ldyBFcnJvcihgVGhlICR7SW50ZXJuYWxQbHVnaW5OYW1lLkJhc2VzfSBwbHVnaW4gaXMgbm90IGxvYWRlZC5gKTtcbiAgfVxuICBjb25zdCBxdWVyeUNvbnRyb2xsZXJDb25zdHJ1Y3RvciA9IGdldFF1ZXJ5Q29udHJvbGxlckNvbnN0cnVjdG9yKCk7XG4gIGNvbnN0IHF1ZXJ5Q29udHJvbGxlciA9IG5ldyBxdWVyeUNvbnRyb2xsZXJDb25zdHJ1Y3RvcihhcHAsIGJhc2VzUGx1Z2luLmluc3RhbmNlLCBjcmVhdGVEaXYoKSk7XG4gIHF1ZXJ5Q29udHJvbGxlci5xdWVyeSA9IHt9IGFzIEJhc2VzUXVlcnk7XG4gIGNvbnN0IGJhc2VzQ29udGV4dCA9IHF1ZXJ5Q29udHJvbGxlci5idWlsZEJhc2VzQ29udGV4dCgpO1xuICByZXR1cm4gYmFzZXNDb250ZXh0LmNvbnN0cnVjdG9yIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxCYXNlc0NvbnRleHQ+O1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgQmFzZXNRdWVyeUNvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9CYXNlc1F1ZXJ5Q29uc3RydWN0b3IuZC50cyc7XG5cbmltcG9ydCB7IGdldEJhc2VzQ29udHJvbGxlckZyb21SZW5kZXIgfSBmcm9tICcuLi8uLi8uLi8uLi9mdW5jdGlvbnMvZ2V0QmFzZXNDb250cm9sbGVyRnJvbVJlbmRlci50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgQmFzZXNRdWVyeX0gY29uc3RydWN0b3IgKHRoZSBgLmJhc2VgIHBhcnNlciwgZXhwb3NpbmcgdGhlIHN0YXRpYyBgZnJvbVN0cmluZ2ApLlxuICpcbiAqIGBCYXNlc1F1ZXJ5YCBoYXMgbm8gcHVibGljIGBvYnNpZGlhbmAgZXhwb3J0IGFuZCBubyBsZWFmLWZyZWUgZmFjdG9yeSwgc28gdGhlIGNsYXNzIGlzIGhhcnZlc3RlZCBhdFxuICogcnVudGltZTogYSB0aHJvd2F3YXkgYmFzZSBpcyByZW5kZXJlZCBvZmYtc2NyZWVuICh2aWEge0BsaW5rIGdldEJhc2VzQ29udHJvbGxlckZyb21SZW5kZXJ9KSBhbmQgdGhlXG4gKiBjb25zdHJ1Y3RvciBpcyByZWFkIG9mZiB0aGUgcmVzdWx0aW5nIHF1ZXJ5LiBUaGUgdGhyb3dhd2F5IHJlbmRlciBpcyB0b3JuIGRvd24gYmVmb3JlIHJldHVybmluZy5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcCBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgQmFzZXNRdWVyeX0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEJhc2VzUXVlcnlDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IFByb21pc2U8QmFzZXNRdWVyeUNvbnN0cnVjdG9yPiB7XG4gIGNvbnN0IGNvbXBvbmVudCA9IG5ldyBDb21wb25lbnQoKTtcbiAgdHJ5IHtcbiAgICBjb25zdCBjb250cm9sbGVyID0gYXdhaXQgZ2V0QmFzZXNDb250cm9sbGVyRnJvbVJlbmRlcihhcHAsICd2aWV3czogW11cXG4nLCAnZ2V0QmFzZXNRdWVyeUNvbnN0cnVjdG9yLmJhc2UnLCBjb21wb25lbnQpO1xuICAgIGNvbnN0IHF1ZXJ5ID0gY29udHJvbGxlci5xdWVyeTtcbiAgICBpZiAoIXF1ZXJ5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSByZW5kZXJlZCBiYXNlIGRpZCBub3QgcHJvZHVjZSBhIHF1ZXJ5LicpO1xuICAgIH1cbiAgICByZXR1cm4gcXVlcnkuY29uc3RydWN0b3IgYXMgdW5rbm93biBhcyBCYXNlc1F1ZXJ5Q29uc3RydWN0b3I7XG4gIH0gZmluYWxseSB7XG4gICAgY29tcG9uZW50LnVubG9hZCgpO1xuICB9XG59XG4iLCAiaW1wb3J0IHR5cGUge1xuICBBcHAsXG4gIENvbXBvbmVudFxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IE1hcmtkb3duUmVuZGVyZXIgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgQmFzZXNDb250cm9sbGVyIH0gZnJvbSAnLi4vLi4vaW50ZXJuYWxzL2ludGVybmFsLXBsdWdpbnMvYmFzZXMvQmFzZXNDb250cm9sbGVyLmQudHMnO1xuXG4vKipcbiAqIFJlbmRlciBhIGJhc2UgaW50byBhIGRldGFjaGVkLCBvZmYtc2NyZWVuIGVsZW1lbnQgYW5kIHJldHVybiB0aGUgbGl2ZSB7QGxpbmsgQmFzZXNDb250cm9sbGVyfSB0aGF0IGRyaXZlc1xuICogaXQuIFRoaXMgaXMgdGhlIGxlYWYtZnJlZSByb3V0ZSB0byBoZWFkbGVzcyBiYXNlIGV2YWx1YXRpb246IGl0IHJ1bnMgT2JzaWRpYW4ncyBvd24gYmFzZS1lbWJlZCBwcm9jZXNzb3JcbiAqIHZpYSB0aGUgcHVibGljIHtAbGluayBvYnNpZGlhbiNNYXJrZG93blJlbmRlcmVyLnJlbmRlcn0sIHRoZW4gbG9jYXRlcyB0aGUgY29udHJvbGxlciBpbiB0aGUgcmVuZGVyJ3NcbiAqIGNvbXBvbmVudCB0cmVlLlxuICpcbiAqIFRoZSBjYWxsZXIgb3ducyBgY29tcG9uZW50YCdzIGxpZmVjeWNsZSBhbmQgTVVTVCBjYWxsIGBjb21wb25lbnQudW5sb2FkKClgIG9uY2UgZG9uZSB3aXRoIHRoZSBjb250cm9sbGVyXG4gKiAod2hpY2ggYWxzbyBkZXRhY2hlcyB0aGUgcmVuZGVyZWQgZWxlbWVudCkuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAgaW5zdGFuY2UuXG4gKiBAcGFyYW0gY29udGVudCAtIFRoZSBgLmJhc2VgIGZpbGUgY29udGVudCAodGhlIGJvZHkgb2YgYSBgYmFzZWAgY29kZSBibG9jaykuXG4gKiBAcGFyYW0gc291cmNlUGF0aCAtIFRoZSBwYXRoIHN1cHBseWluZyB0aGUgcXVlcnkncyBmaWxlIGNvbnRleHQuXG4gKiBAcGFyYW0gY29tcG9uZW50IC0gVGhlIGNvbXBvbmVudCB0aGF0IG93bnMgdGhlIHJlbmRlcjsgdGhlIGNhbGxlciB1bmxvYWRzIGl0LlxuICogQHJldHVybnMgVGhlIGxpdmUge0BsaW5rIEJhc2VzQ29udHJvbGxlcn0gZm9yIHRoZSByZW5kZXJlZCBiYXNlLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRCYXNlc0NvbnRyb2xsZXJGcm9tUmVuZGVyKFxuICBhcHA6IEFwcCxcbiAgY29udGVudDogc3RyaW5nLFxuICBzb3VyY2VQYXRoOiBzdHJpbmcsXG4gIGNvbXBvbmVudDogQ29tcG9uZW50XG4pOiBQcm9taXNlPEJhc2VzQ29udHJvbGxlcj4ge1xuICAvLyBUaGUgYF9jaGlsZHJlbmAgd2FsayBwbHVzIHRoZSBjb250cm9sbGVyJ3MgYHF1ZXJ5YCAvIGByZXN1bHRzYCBhcmUgcnVudGltZSBpbnRlcm5hbHMgbm90IG1vZGVsZWQgb25cbiAgLy8gQ29tcG9uZW50LCBzbyB0aGV5IGFyZSB0eXBlZCBsb2NhbGx5IHB1cmVseSB0byBicmVhZHRoLWZpcnN0IHNlYXJjaCB0aGUgcmVuZGVyIHRyZWUuXG4gIGludGVyZmFjZSBDb21wb25lbnRUcmVlTm9kZSB7XG4gICAgLyoqIFRoZSBjaGlsZCBjb21wb25lbnRzLCBpZiBhbnkuICovXG4gICAgX2NoaWxkcmVuPzogQ29tcG9uZW50VHJlZU5vZGVbXTtcblxuICAgIC8qKiBUaGUgY3VycmVudCBxdWVyeSwgcHJlc2VudCBvbiBhIGNvbnRyb2xsZXIuICovXG4gICAgcXVlcnk/OiB1bmtub3duO1xuXG4gICAgLyoqIFRoZSBxdWVyeSByZXN1bHRzLCBwcmVzZW50IGFzIGEgYE1hcGAgb24gYSBjb250cm9sbGVyLiAqL1xuICAgIHJlc3VsdHM/OiB1bmtub3duO1xuICB9XG5cbiAgLy8gVGhlIGVsZW1lbnQgbXVzdCBiZSBhdHRhY2hlZCB0byB0aGUgZG9jdW1lbnQgKG5vdCBtZXJlbHkgZGV0YWNoZWQpIGZvciB0aGUgYmFzZSdzIGluaXRpYWwgc2NhbiB0byBydW4sXG4gIC8vIHNvIGl0IGlzIHBvc2l0aW9uZWQgb2ZmLXNjcmVlbiByYXRoZXIgdGhhbiBoaWRkZW4uIEl0IGlzIHJlbW92ZWQgd2hlbiB0aGUgY2FsbGVyIHVubG9hZHMgYGNvbXBvbmVudGAuXG4gIGNvbnN0IGNvbnRhaW5lckVsID0gY3JlYXRlRGl2KCk7XG4gIGNvbnRhaW5lckVsLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgY29udGFpbmVyRWwuc3R5bGUubGVmdCA9ICctOTk5OXB4JztcbiAgY29udGFpbmVyRWwuc3R5bGUud2lkdGggPSAnNjAwcHgnO1xuICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGNvbnRhaW5lckVsKTtcbiAgY29tcG9uZW50LnJlZ2lzdGVyKCgpID0+IHtcbiAgICBjb250YWluZXJFbC5yZW1vdmUoKTtcbiAgfSk7XG5cbiAgYXdhaXQgTWFya2Rvd25SZW5kZXJlci5yZW5kZXIoYXBwLCBgXFxgXFxgXFxgYmFzZVxcbiR7Y29udGVudH1cXG5cXGBcXGBcXGBcXG5gLCBjb250YWluZXJFbCwgc291cmNlUGF0aCwgY29tcG9uZW50KTtcblxuICBjb25zdCBxdWV1ZTogQ29tcG9uZW50VHJlZU5vZGVbXSA9IFtjb21wb25lbnQgYXMgdW5rbm93biBhcyBDb21wb25lbnRUcmVlTm9kZV07XG4gIGNvbnN0IHNlZW4gPSBuZXcgU2V0PENvbXBvbmVudFRyZWVOb2RlPigpO1xuXG4gIHdoaWxlIChxdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgY29uc3Qgbm9kZSA9IHF1ZXVlLnNoaWZ0KCk7XG4gICAgaWYgKCFub2RlIHx8IHNlZW4uaGFzKG5vZGUpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgc2Vlbi5hZGQobm9kZSk7XG5cbiAgICBpZiAobm9kZS5yZXN1bHRzIGluc3RhbmNlb2YgTWFwICYmICdxdWVyeScgaW4gbm9kZSkge1xuICAgICAgcmV0dXJuIG5vZGUgYXMgdW5rbm93biBhcyBCYXNlc0NvbnRyb2xsZXI7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBub2RlLl9jaGlsZHJlbiA/PyBbXSkge1xuICAgICAgcXVldWUucHVzaChjaGlsZCk7XG4gICAgfVxuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgbG9jYXRlIHRoZSBCYXNlc0NvbnRyb2xsZXIgaW4gdGhlIHJlbmRlcmVkIGNvbXBvbmVudCB0cmVlLicpO1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbFBsdWdpbiB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9pbnRlcm5hbC1wbHVnaW5zL0ludGVybmFsUGx1Z2luLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIEludGVybmFsUGx1Z2lufSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcCBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgSW50ZXJuYWxQbHVnaW59IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnRlcm5hbFBsdWdpbkNvbnN0cnVjdG9yPEluc3RhbmNlPihhcHA6IEFwcCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxJbnRlcm5hbFBsdWdpbjxJbnN0YW5jZT4+IHtcbiAgY29uc3QgYW55UGx1Z2luID0gT2JqZWN0LnZhbHVlcyhhcHAuaW50ZXJuYWxQbHVnaW5zLnBsdWdpbnMpWzBdO1xuICBpZiAoIWFueVBsdWdpbikge1xuICAgIHRocm93IG5ldyBFcnJvcignTm8gaW50ZXJuYWwgcGx1Z2luIGZvdW5kJyk7XG4gIH1cbiAgcmV0dXJuIGFueVBsdWdpbi5jb25zdHJ1Y3RvciBhcyBFeHRyYWN0Q29uc3RydWN0b3I8SW50ZXJuYWxQbHVnaW48SW5zdGFuY2U+Pjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxQbHVnaW5zIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2ludGVybmFsLXBsdWdpbnMvSW50ZXJuYWxQbHVnaW5zLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIEludGVybmFsUGx1Z2luc30gY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIEludGVybmFsUGx1Z2luc30gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEludGVybmFsUGx1Z2luc0NvbnN0cnVjdG9yKGFwcDogQXBwKTogRXh0cmFjdENvbnN0cnVjdG9yPEludGVybmFsUGx1Z2lucz4ge1xuICByZXR1cm4gYXBwLmludGVybmFsUGx1Z2lucy5jb25zdHJ1Y3RvciBhcyBFeHRyYWN0Q29uc3RydWN0b3I8SW50ZXJuYWxQbHVnaW5zPjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcbmltcG9ydCB0eXBlIHsgVmlld1R5cGVUeXBlIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL3ZpZXdzL1ZpZXdUeXBlVHlwZS5kLmQudHMnO1xuaW1wb3J0IHR5cGUgeyBWaWV3VHlwZVZpZXdNYXBwaW5nIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL3ZpZXdzL1ZpZXdUeXBlVmlld01hcHBpbmcuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB2aWV3IGNvbnN0cnVjdG9yIGJ5IHZpZXcgdHlwZS5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcC5cbiAqIEBwYXJhbSB2aWV3VHlwZSAtIFRoZSB2aWV3IHR5cGUuXG4gKiBAcmV0dXJucyBUaGUgdmlldyBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZTxUVmlld1R5cGUgZXh0ZW5kcyBWaWV3VHlwZVR5cGU+KFxuICBhcHA6IEFwcCxcbiAgdmlld1R5cGU6IFRWaWV3VHlwZVxuKTogRXh0cmFjdENvbnN0cnVjdG9yPFZpZXdUeXBlVmlld01hcHBpbmdbVFZpZXdUeXBlXT4ge1xuICBjb25zdCBsZWFmID0gYXBwLndvcmtzcGFjZS5jcmVhdGVMZWFmSW5UYWJHcm91cCgpO1xuICB0cnkge1xuICAgIGNvbnN0IHZpZXdDcmVhdG9yID0gYXBwLnZpZXdSZWdpc3RyeS5nZXRWaWV3Q3JlYXRvckJ5VHlwZSh2aWV3VHlwZSk7XG4gICAgaWYgKCF2aWV3Q3JlYXRvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdWaWV3IGNyZWF0b3Igbm90IGZvdW5kJyk7XG4gICAgfVxuICAgIGNvbnN0IHZpZXcgPSB2aWV3Q3JlYXRvcihsZWFmKTtcbiAgICByZXR1cm4gdmlldy5jb25zdHJ1Y3RvciBhcyBFeHRyYWN0Q29uc3RydWN0b3I8Vmlld1R5cGVWaWV3TWFwcGluZ1tUVmlld1R5cGVdPjtcbiAgfSBmaW5hbGx5IHtcbiAgICBsZWFmLmRldGFjaCgpO1xuICB9XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5pbXBvcnQgdHlwZSB7IEFsbFByb3BlcnRpZXNWaWV3IH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2ludGVybmFsLXBsdWdpbnMvcHJvcGVydGllcy9BbGxQcm9wZXJ0aWVzVmlldy5kLnRzJztcblxuaW1wb3J0IHsgVmlld1R5cGUgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvVmlld1R5cGUudHMnO1xuaW1wb3J0IHsgZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZSB9IGZyb20gJy4vZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZS50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgQWxsUHJvcGVydGllc1ZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwLlxuICogQHJldHVybnMgVGhlIHtAbGluayBBbGxQcm9wZXJ0aWVzVmlld30gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFsbFByb3BlcnRpZXNWaWV3Q29uc3RydWN0b3IoYXBwOiBBcHApOiBFeHRyYWN0Q29uc3RydWN0b3I8QWxsUHJvcGVydGllc1ZpZXc+IHtcbiAgcmV0dXJuIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUoYXBwLCBWaWV3VHlwZS5BbGxQcm9wZXJ0aWVzKTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcbmltcG9ydCB0eXBlIHsgQXVkaW9WaWV3IH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL3ZpZXdzL0F1ZGlvVmlldy5kLnRzJztcblxuaW1wb3J0IHsgVmlld1R5cGUgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvVmlld1R5cGUudHMnO1xuaW1wb3J0IHsgZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZSB9IGZyb20gJy4vZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZS50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgQXVkaW9WaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcC5cbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgQXVkaW9WaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXVkaW9WaWV3Q29uc3RydWN0b3IoYXBwOiBBcHApOiBFeHRyYWN0Q29uc3RydWN0b3I8QXVkaW9WaWV3PiB7XG4gIHJldHVybiBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlKGFwcCwgVmlld1R5cGUuQXVkaW8pO1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuaW1wb3J0IHR5cGUgeyBCYWNrbGlua1ZpZXcgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvaW50ZXJuYWwtcGx1Z2lucy9iYWNrbGluay9CYWNrbGlua1ZpZXcuZC50cyc7XG5cbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL1ZpZXdUeXBlLnRzJztcbmltcG9ydCB7IGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUgfSBmcm9tICcuL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIEJhY2tsaW5rVmlld30gY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAuXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIEJhY2tsaW5rVmlld30gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJhY2tsaW5rVmlld0NvbnN0cnVjdG9yKGFwcDogQXBwKTogRXh0cmFjdENvbnN0cnVjdG9yPEJhY2tsaW5rVmlldz4ge1xuICByZXR1cm4gZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZShhcHAsIFZpZXdUeXBlLkJhY2tsaW5rKTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcbmltcG9ydCB0eXBlIHsgQmFzZXNWaWV3IH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2ludGVybmFsLXBsdWdpbnMvYmFzZXMvQmFzZXNWaWV3LmQudHMnO1xuXG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cy9WaWV3VHlwZS50cyc7XG5pbXBvcnQgeyBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlIH0gZnJvbSAnLi9nZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBCYXNlc1ZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwLlxuICogQHJldHVybnMgVGhlIHtAbGluayBCYXNlc1ZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRCYXNlc1ZpZXdDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxCYXNlc1ZpZXc+IHtcbiAgcmV0dXJuIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUoYXBwLCBWaWV3VHlwZS5CYXNlcyk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5pbXBvcnQgdHlwZSB7IEJvb2ttYXJrc1ZpZXcgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvaW50ZXJuYWwtcGx1Z2lucy9ib29rbWFya3MvQm9va21hcmtzVmlldy5kLnRzJztcblxuaW1wb3J0IHsgVmlld1R5cGUgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvVmlld1R5cGUudHMnO1xuaW1wb3J0IHsgZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZSB9IGZyb20gJy4vZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZS50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgQm9va21hcmtzVmlld30gY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAuXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIEJvb2ttYXJrc1ZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRCb29rbWFya3NWaWV3Q29uc3RydWN0b3IoYXBwOiBBcHApOiBFeHRyYWN0Q29uc3RydWN0b3I8Qm9va21hcmtzVmlldz4ge1xuICByZXR1cm4gZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZShhcHAsIFZpZXdUeXBlLkJvb2ttYXJrcyk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5pbXBvcnQgdHlwZSB7IENhbnZhc1ZpZXcgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvaW50ZXJuYWwtcGx1Z2lucy9jYW52YXMvQ2FudmFzVmlldy5kLnRzJztcblxuaW1wb3J0IHsgVmlld1R5cGUgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvVmlld1R5cGUudHMnO1xuaW1wb3J0IHsgZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZSB9IGZyb20gJy4vZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZS50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgQ2FudmFzVmlld30gY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAuXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIENhbnZhc1ZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDYW52YXNWaWV3Q29uc3RydWN0b3IoYXBwOiBBcHApOiBFeHRyYWN0Q29uc3RydWN0b3I8Q2FudmFzVmlldz4ge1xuICByZXR1cm4gZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZShhcHAsIFZpZXdUeXBlLkNhbnZhcyk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5pbXBvcnQgdHlwZSB7IEVtcHR5VmlldyB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy92aWV3cy9FbXB0eVZpZXcuZC50cyc7XG5cbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL1ZpZXdUeXBlLnRzJztcbmltcG9ydCB7IGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUgfSBmcm9tICcuL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIEVtcHR5Vmlld30gY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAuXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIEVtcHR5Vmlld30gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVtcHR5Vmlld0NvbnN0cnVjdG9yKGFwcDogQXBwKTogRXh0cmFjdENvbnN0cnVjdG9yPEVtcHR5Vmlldz4ge1xuICByZXR1cm4gZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZShhcHAsIFZpZXdUeXBlLkVtcHR5KTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcbmltcG9ydCB0eXBlIHsgRmlsZUV4cGxvcmVyVmlldyB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9pbnRlcm5hbC1wbHVnaW5zL2ZpbGUtZXhwbG9yZXIvRmlsZUV4cGxvcmVyVmlldy5kLnRzJztcblxuaW1wb3J0IHsgVmlld1R5cGUgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvVmlld1R5cGUudHMnO1xuaW1wb3J0IHsgZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZSB9IGZyb20gJy4vZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZS50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgRmlsZUV4cGxvcmVyVmlld30gY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAuXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIEZpbGVFeHBsb3JlclZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWxlRXhwbG9yZXJWaWV3Q29uc3RydWN0b3IoYXBwOiBBcHApOiBFeHRyYWN0Q29uc3RydWN0b3I8RmlsZUV4cGxvcmVyVmlldz4ge1xuICByZXR1cm4gZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZShhcHAsIFZpZXdUeXBlLkZpbGVFeHBsb3Jlcik7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5pbXBvcnQgdHlwZSB7IEZpbGVQcm9wZXJ0aWVzVmlldyB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9pbnRlcm5hbC1wbHVnaW5zL3Byb3BlcnRpZXMvRmlsZVByb3BlcnRpZXNWaWV3LmQudHMnO1xuXG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cy9WaWV3VHlwZS50cyc7XG5pbXBvcnQgeyBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlIH0gZnJvbSAnLi9nZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBGaWxlUHJvcGVydGllc1ZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwLlxuICogQHJldHVybnMgVGhlIHtAbGluayBGaWxlUHJvcGVydGllc1ZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWxlUHJvcGVydGllc1ZpZXdDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxGaWxlUHJvcGVydGllc1ZpZXc+IHtcbiAgcmV0dXJuIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUoYXBwLCBWaWV3VHlwZS5GaWxlUHJvcGVydGllcyk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5pbXBvcnQgdHlwZSB7IEdyYXBoVmlldyB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9pbnRlcm5hbC1wbHVnaW5zL2dyYXBoL0dyYXBoVmlldy5kLnRzJztcblxuaW1wb3J0IHsgVmlld1R5cGUgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvVmlld1R5cGUudHMnO1xuaW1wb3J0IHsgZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZSB9IGZyb20gJy4vZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZS50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgR3JhcGhWaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcC5cbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgR3JhcGhWaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0R3JhcGhWaWV3Q29uc3RydWN0b3IoYXBwOiBBcHApOiBFeHRyYWN0Q29uc3RydWN0b3I8R3JhcGhWaWV3PiB7XG4gIHJldHVybiBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlKGFwcCwgVmlld1R5cGUuR3JhcGgpO1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuaW1wb3J0IHR5cGUgeyBJbWFnZVZpZXcgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvdmlld3MvSW1hZ2VWaWV3LmQudHMnO1xuXG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cy9WaWV3VHlwZS50cyc7XG5pbXBvcnQgeyBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlIH0gZnJvbSAnLi9nZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBJbWFnZVZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwLlxuICogQHJldHVybnMgVGhlIHtAbGluayBJbWFnZVZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbWFnZVZpZXdDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxJbWFnZVZpZXc+IHtcbiAgcmV0dXJuIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUoYXBwLCBWaWV3VHlwZS5JbWFnZSk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5pbXBvcnQgdHlwZSB7IExvY2FsR3JhcGhWaWV3IH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2ludGVybmFsLXBsdWdpbnMvZ3JhcGgvTG9jYWxHcmFwaFZpZXcuZC50cyc7XG5cbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL1ZpZXdUeXBlLnRzJztcbmltcG9ydCB7IGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUgfSBmcm9tICcuL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIExvY2FsR3JhcGhWaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcC5cbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgTG9jYWxHcmFwaFZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRMb2NhbEdyYXBoVmlld0NvbnN0cnVjdG9yKGFwcDogQXBwKTogRXh0cmFjdENvbnN0cnVjdG9yPExvY2FsR3JhcGhWaWV3PiB7XG4gIHJldHVybiBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlKGFwcCwgVmlld1R5cGUuTG9jYWxHcmFwaCk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5pbXBvcnQgdHlwZSB7IE91dGdvaW5nTGlua1ZpZXcgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvaW50ZXJuYWwtcGx1Z2lucy9vdXRnb2luZy1saW5rL091dGdvaW5nTGlua1ZpZXcuZC50cyc7XG5cbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL1ZpZXdUeXBlLnRzJztcbmltcG9ydCB7IGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUgfSBmcm9tICcuL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIE91dGdvaW5nTGlua1ZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwLlxuICogQHJldHVybnMgVGhlIHtAbGluayBPdXRnb2luZ0xpbmtWaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3V0Z29pbmdMaW5rVmlld0NvbnN0cnVjdG9yKGFwcDogQXBwKTogRXh0cmFjdENvbnN0cnVjdG9yPE91dGdvaW5nTGlua1ZpZXc+IHtcbiAgcmV0dXJuIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUoYXBwLCBWaWV3VHlwZS5PdXRnb2luZ0xpbmspO1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuaW1wb3J0IHR5cGUgeyBPdXRsaW5lVmlldyB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9pbnRlcm5hbC1wbHVnaW5zL291dGxpbmUvT3V0bGluZVZpZXcuZC50cyc7XG5cbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL1ZpZXdUeXBlLnRzJztcbmltcG9ydCB7IGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUgfSBmcm9tICcuL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIE91dGxpbmVWaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcC5cbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgT3V0bGluZVZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRPdXRsaW5lVmlld0NvbnN0cnVjdG9yKGFwcDogQXBwKTogRXh0cmFjdENvbnN0cnVjdG9yPE91dGxpbmVWaWV3PiB7XG4gIHJldHVybiBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlKGFwcCwgVmlld1R5cGUuT3V0bGluZSk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5pbXBvcnQgdHlwZSB7IFBkZlZpZXcgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvdmlld3MvUGRmVmlldy5kLnRzJztcblxuaW1wb3J0IHsgVmlld1R5cGUgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvVmlld1R5cGUudHMnO1xuaW1wb3J0IHsgZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZSB9IGZyb20gJy4vZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZS50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgUGRmVmlld30gY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAuXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIFBkZlZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQZGZWaWV3Q29uc3RydWN0b3IoYXBwOiBBcHApOiBFeHRyYWN0Q29uc3RydWN0b3I8UGRmVmlldz4ge1xuICByZXR1cm4gZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZShhcHAsIFZpZXdUeXBlLlBkZik7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5pbXBvcnQgdHlwZSB7IFJlbGVhc2VOb3Rlc1ZpZXcgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvdmlld3MvUmVsZWFzZU5vdGVzVmlldy5kLnRzJztcblxuaW1wb3J0IHsgVmlld1R5cGUgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvVmlld1R5cGUudHMnO1xuaW1wb3J0IHsgZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZSB9IGZyb20gJy4vZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZS50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgUmVsZWFzZU5vdGVzVmlld30gY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAuXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIFJlbGVhc2VOb3Rlc1ZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRSZWxlYXNlTm90ZXNWaWV3Q29uc3RydWN0b3IoYXBwOiBBcHApOiBFeHRyYWN0Q29uc3RydWN0b3I8UmVsZWFzZU5vdGVzVmlldz4ge1xuICByZXR1cm4gZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZShhcHAsIFZpZXdUeXBlLlJlbGVhc2VOb3Rlcyk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5pbXBvcnQgdHlwZSB7IFNlYXJjaFZpZXcgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvaW50ZXJuYWwtcGx1Z2lucy9nbG9iYWwtc2VhcmNoL1NlYXJjaFZpZXcuZC50cyc7XG5cbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL1ZpZXdUeXBlLnRzJztcbmltcG9ydCB7IGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUgfSBmcm9tICcuL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIFNlYXJjaFZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwLlxuICogQHJldHVybnMgVGhlIHtAbGluayBTZWFyY2hWaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VhcmNoVmlld0NvbnN0cnVjdG9yKGFwcDogQXBwKTogRXh0cmFjdENvbnN0cnVjdG9yPFNlYXJjaFZpZXc+IHtcbiAgcmV0dXJuIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUoYXBwLCBWaWV3VHlwZS5TZWFyY2gpO1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuaW1wb3J0IHR5cGUgeyBTeW5jVmlldyB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9pbnRlcm5hbC1wbHVnaW5zL3N5bmMvU3luY1ZpZXcuZC50cyc7XG5cbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL1ZpZXdUeXBlLnRzJztcbmltcG9ydCB7IGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUgfSBmcm9tICcuL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIFN5bmNWaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcC5cbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgU3luY1ZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTeW5jVmlld0NvbnN0cnVjdG9yKGFwcDogQXBwKTogRXh0cmFjdENvbnN0cnVjdG9yPFN5bmNWaWV3PiB7XG4gIHJldHVybiBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlKGFwcCwgVmlld1R5cGUuU3luYyk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5pbXBvcnQgdHlwZSB7IFRhYmxlVmlldyB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9pbnRlcm5hbC1wbHVnaW5zL2Jhc2VzL1RhYmxlVmlldy5kLnRzJztcblxuaW1wb3J0IHsgVmlld1R5cGUgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvVmlld1R5cGUudHMnO1xuaW1wb3J0IHsgZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZSB9IGZyb20gJy4vZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZS50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgVGFibGVWaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcC5cbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgVGFibGVWaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFibGVWaWV3Q29uc3RydWN0b3IoYXBwOiBBcHApOiBFeHRyYWN0Q29uc3RydWN0b3I8VGFibGVWaWV3PiB7XG4gIHJldHVybiBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlKGFwcCwgVmlld1R5cGUuVGFibGUpO1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuaW1wb3J0IHR5cGUgeyBUYWdWaWV3IH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL3ZpZXdzL1RhZ1ZpZXcuZC50cyc7XG5cbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL1ZpZXdUeXBlLnRzJztcbmltcG9ydCB7IGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUgfSBmcm9tICcuL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIFRhZ1ZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwLlxuICogQHJldHVybnMgVGhlIHtAbGluayBUYWdWaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFnVmlld0NvbnN0cnVjdG9yKGFwcDogQXBwKTogRXh0cmFjdENvbnN0cnVjdG9yPFRhZ1ZpZXc+IHtcbiAgcmV0dXJuIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUoYXBwLCBWaWV3VHlwZS5UYWcpO1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuaW1wb3J0IHR5cGUgeyBWaWRlb1ZpZXcgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvdmlld3MvVmlkZW9WaWV3LmQudHMnO1xuXG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cy9WaWV3VHlwZS50cyc7XG5pbXBvcnQgeyBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlIH0gZnJvbSAnLi9nZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBWaWRlb1ZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwLlxuICogQHJldHVybnMgVGhlIHtAbGluayBWaWRlb1ZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaWRlb1ZpZXdDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxWaWRlb1ZpZXc+IHtcbiAgcmV0dXJuIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUoYXBwLCBWaWV3VHlwZS5WaWRlbyk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5pbXBvcnQgdHlwZSB7IFdlYnZpZXdlckhpc3RvcnlWaWV3IH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2ludGVybmFsLXBsdWdpbnMvd2Vidmlld2VyL1dlYnZpZXdlckhpc3RvcnlWaWV3LmQudHMnO1xuXG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cy9WaWV3VHlwZS50cyc7XG5pbXBvcnQgeyBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlIH0gZnJvbSAnLi9nZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBXZWJ2aWV3ZXJIaXN0b3J5Vmlld30gY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAuXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIFdlYnZpZXdlckhpc3RvcnlWaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0V2Vidmlld2VySGlzdG9yeVZpZXdDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxXZWJ2aWV3ZXJIaXN0b3J5Vmlldz4ge1xuICByZXR1cm4gZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZShhcHAsIFZpZXdUeXBlLldlYnZpZXdlckhpc3RvcnkpO1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuaW1wb3J0IHR5cGUgeyBXZWJ2aWV3ZXJWaWV3IH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2ludGVybmFsLXBsdWdpbnMvd2Vidmlld2VyL1dlYnZpZXdlclZpZXcuZC50cyc7XG5cbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL1ZpZXdUeXBlLnRzJztcbmltcG9ydCB7IGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUgfSBmcm9tICcuL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIFdlYnZpZXdlclZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwLlxuICogQHJldHVybnMgVGhlIHtAbGluayBXZWJ2aWV3ZXJWaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0V2Vidmlld2VyVmlld0NvbnN0cnVjdG9yKGFwcDogQXBwKTogRXh0cmFjdENvbnN0cnVjdG9yPFdlYnZpZXdlclZpZXc+IHtcbiAgcmV0dXJuIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUoYXBwLCBWaWV3VHlwZS5XZWJ2aWV3ZXIpO1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuaW1wb3J0IHR5cGUgeyBXb3Jrc3BhY2VQcm90b2NvbEhhbmRsZXIgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvd29ya3NwYWNlL1dvcmtzcGFjZVByb3RvY29sSGFuZGxlci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBXb3Jrc3BhY2VQcm90b2NvbEhhbmRsZXJ9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwIGluc3RhbmNlLlxuICogQHJldHVybnMgVGhlIHtAbGluayBXb3Jrc3BhY2VQcm90b2NvbEhhbmRsZXJ9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRXb3Jrc3BhY2VQcm90b2NvbEhhbmRsZXJDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxXb3Jrc3BhY2VQcm90b2NvbEhhbmRsZXI+IHtcbiAgcmV0dXJuIGFwcC53b3Jrc3BhY2UucHJvdG9jb2xIYW5kbGVyLmNvbnN0cnVjdG9yIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxXb3Jrc3BhY2VQcm90b2NvbEhhbmRsZXI+O1xufVxuIiwgIi8qKlxuICogR2V0IHRoZSBwYXJlbnQgZm9sZGVyIHBhdGggb2YgYSBnaXZlbiBwYXRoLlxuICpcbiAqIEBwYXJhbSBwYXRoIC0gVGhlIHBhdGggdG8gZ2V0IHRoZSBwYXJlbnQgZm9sZGVyIHBhdGggb2YuXG4gKiBAcmV0dXJucyBUaGUgcGFyZW50IGZvbGRlciBwYXRoLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJlbnRGb2xkZXJQYXRoKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBwYXRoLnJlcGxhY2UoL1xcLz9bXi9dKiQvLCAnJykgfHwgJy8nO1xufVxuIiwgImltcG9ydCB0eXBlIHtcbiAgQXBwLFxuICBURm9sZGVyXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgZ2V0VEZvbGRlckNvbnN0cnVjdG9yIH0gZnJvbSAnLi4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0VEZvbGRlckNvbnN0cnVjdG9yLnRzJztcbmltcG9ydCB7IHBhcmVudEZvbGRlclBhdGggfSBmcm9tICcuLi91dGlscy9QYXRoVXRpbHMudHMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYW5kIHByb3Blcmx5IGluaXRpYWxpemVzIHRoZSBpbnN0YW5jZSBvZiB7QGxpbmsgb2JzaWRpYW4jVEZvbGRlcn0gZXZlbiB0aGUgdW5kZXJseWluZyBmb2xkZXIgZG9lcyBub3QgZXhpc3QuXG4gKiBUaGlzIGRvZXNuJ3QgY3JlYXRlIHRoZSBtaXNzaW5nIGZvbGRlciBvbiB0aGUgZmlsZSBzeXN0ZW0uXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gKiBAcGFyYW0gcGF0aCAtIFRoZSBwYXRoIHRvIHRoZSBmb2xkZXIuXG4gKiBAcmV0dXJucyBUaGUgY3JlYXRlZCB7QGxpbmsgb2JzaWRpYW4jVEZvbGRlcn0gaW5zdGFuY2UuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRGb2xkZXJJbnN0YW5jZShhcHA6IEFwcCwgcGF0aDogc3RyaW5nKTogVEZvbGRlciB7XG4gIGxldCBmb2xkZXIgPSBhcHAudmF1bHQuZ2V0Rm9sZGVyQnlQYXRoKHBhdGgpO1xuICBpZiAoZm9sZGVyKSB7XG4gICAgcmV0dXJuIGZvbGRlcjtcbiAgfVxuXG4gIGZvbGRlciA9IG5ldyAoZ2V0VEZvbGRlckNvbnN0cnVjdG9yKCkpKGFwcC52YXVsdCwgcGF0aCk7XG4gIGZvbGRlci5wYXJlbnQgPSBjcmVhdGVURm9sZGVySW5zdGFuY2UoYXBwLCBwYXJlbnRGb2xkZXJQYXRoKHBhdGgpKTtcbiAgZm9sZGVyLmRlbGV0ZWQgPSB0cnVlO1xuICByZXR1cm4gZm9sZGVyO1xufVxuIiwgImltcG9ydCB0eXBlIHtcbiAgQXBwLFxuICBURmlsZVxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IGdldFRGaWxlQ29uc3RydWN0b3IgfSBmcm9tICcuLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRURmlsZUNvbnN0cnVjdG9yLnRzJztcbmltcG9ydCB7IHBhcmVudEZvbGRlclBhdGggfSBmcm9tICcuLi91dGlscy9QYXRoVXRpbHMudHMnO1xuaW1wb3J0IHsgY3JlYXRlVEZvbGRlckluc3RhbmNlIH0gZnJvbSAnLi9jcmVhdGVURm9sZGVySW5zdGFuY2UudHMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYW5kIHByb3Blcmx5IGluaXRpYWxpemVzIHRoZSBpbnN0YW5jZSBvZiB7QGxpbmsgb2JzaWRpYW4jVEZpbGV9IGV2ZW4gdGhlIHVuZGVybHlpbmcgZmlsZSBkb2VzIG5vdCBleGlzdC5cbiAqIFRoaXMgZG9lc24ndCBjcmVhdGUgdGhlIG1pc3NpbmcgZmlsZSBvbiB0aGUgZmlsZSBzeXN0ZW0uXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gKiBAcGFyYW0gcGF0aCAtIFRoZSBwYXRoIHRvIHRoZSBmaWxlLlxuICogQHJldHVybnMgVGhlIGNyZWF0ZWQge0BsaW5rIG9ic2lkaWFuI1RGaWxlfSBpbnN0YW5jZS5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVEZpbGVJbnN0YW5jZShhcHA6IEFwcCwgcGF0aDogc3RyaW5nKTogVEZpbGUge1xuICBsZXQgZmlsZSA9IGFwcC52YXVsdC5nZXRGaWxlQnlQYXRoKHBhdGgpO1xuICBpZiAoZmlsZSkge1xuICAgIHJldHVybiBmaWxlO1xuICB9XG5cbiAgZmlsZSA9IG5ldyAoZ2V0VEZpbGVDb25zdHJ1Y3RvcigpKShhcHAudmF1bHQsIHBhdGgpO1xuICBmaWxlLnBhcmVudCA9IGNyZWF0ZVRGb2xkZXJJbnN0YW5jZShhcHAsIHBhcmVudEZvbGRlclBhdGgocGF0aCkpO1xuICBmaWxlLmRlbGV0ZWQgPSB0cnVlO1xuICByZXR1cm4gZmlsZTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7XG4gIEFwcCxcbiAgQmFzZXNFbnRyeVxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgZ2V0QmFzZXNDb250cm9sbGVyRnJvbVJlbmRlciB9IGZyb20gJy4vZ2V0QmFzZXNDb250cm9sbGVyRnJvbVJlbmRlci50cyc7XG5cbi8qKlxuICogRXZhbHVhdGUgYSBgLmJhc2VgIGZpbGUgaW4gaGVhZGxlc3MgbW9kZSBcdTIwMTQgd2l0aCBubyBsZWFmIG9yIG9wZW4gdmlldyBcdTIwMTQgYW5kIHJldHVybiBpdHMgZW50cmllcy5cbiAqXG4gKiBJdCByZW5kZXJzIHRoZSBiYXNlIG9mZi1zY3JlZW4gdmlhIHtAbGluayBnZXRCYXNlc0NvbnRyb2xsZXJGcm9tUmVuZGVyfSwgd2FpdHMgZm9yIHRoZSBpbml0aWFsIHZhdWx0IHNjYW5cbiAqIHRvIHNldHRsZSwgdGhlbiByZWFkcyB0aGUgY29udHJvbGxlcidzIHJlc3VsdHMuIEV2ZXJ5dGhpbmcgaXMgdG9ybiBkb3duIGJlZm9yZSByZXR1cm5pbmcuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAgaW5zdGFuY2UuXG4gKiBAcGFyYW0gY29udGVudCAtIFRoZSBgLmJhc2VgIGZpbGUgY29udGVudCAodGhlIGJvZHkgb2YgYSBgYmFzZWAgY29kZSBibG9jaykuXG4gKiBAcGFyYW0gc291cmNlUGF0aCAtIFRoZSBwYXRoIHN1cHBseWluZyB0aGUgcXVlcnkncyBmaWxlIGNvbnRleHQuXG4gKiBAcmV0dXJucyBUaGUgZXZhbHVhdGVkIGJhc2UgZW50cmllcy5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXZhbHVhdGVCYXNlSGVhZGxlc3MoYXBwOiBBcHAsIGNvbnRlbnQ6IHN0cmluZywgc291cmNlUGF0aDogc3RyaW5nKTogUHJvbWlzZTxCYXNlc0VudHJ5W10+IHtcbiAgY29uc3QgU0NBTl9QT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyA9IDUwO1xuICBjb25zdCBTQ0FOX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTID0gMzAwMDA7XG5cbiAgY29uc3QgY29tcG9uZW50ID0gbmV3IENvbXBvbmVudCgpO1xuICB0cnkge1xuICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBhd2FpdCBnZXRCYXNlc0NvbnRyb2xsZXJGcm9tUmVuZGVyKGFwcCwgY29udGVudCwgc291cmNlUGF0aCwgY29tcG9uZW50KTtcblxuICAgIGNvbnN0IHN0YXJ0VGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgIHdoaWxlIChjb250cm9sbGVyLmluaXRpYWxTY2FuKSB7XG4gICAgICBpZiAocGVyZm9ybWFuY2Uubm93KCkgLSBzdGFydFRpbWUgPiBTQ0FOX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGltZWQgb3V0IHdhaXRpbmcgZm9yIHRoZSBiYXNlIGluaXRpYWwgc2NhbiB0byBzZXR0bGUuJyk7XG4gICAgICB9XG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgICAgICB3aW5kb3cuc2V0VGltZW91dChyZXNvbHZlLCBTQ0FOX1BPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBBcnJheS5mcm9tKGNvbnRyb2xsZXIucmVzdWx0cy52YWx1ZXMoKSk7XG4gIH0gZmluYWxseSB7XG4gICAgY29tcG9uZW50LnVubG9hZCgpO1xuICB9XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRGF0YUFkYXB0ZXJFeCB9IGZyb20gJy4uLy4uL2ludGVybmFscy9EYXRhQWRhcHRlckV4LmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUgaW5zdGFuY2Ugb2YgdGhlIGN1cnJlbnQge0BsaW5rIERhdGFBZGFwdGVyRXh9LlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBUaGUgZGF0YSBhZGFwdGVyIGV4dGVuc2lvbi5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF0YUFkYXB0ZXJFeChhcHA6IEFwcCk6IERhdGFBZGFwdGVyRXgge1xuICByZXR1cm4gYXBwLnZhdWx0LmFkYXB0ZXIgYXMgRGF0YUFkYXB0ZXJFeDtcbn1cbiIsICJpbXBvcnQgeyBsb2FkTWVybWFpZCBhcyBsb2FkTWVybWFpZE9yaWdpbmFsIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IE1lcm1haWQgfSBmcm9tICcuLi8uLi8uLi9tZXJtYWlkL2ludGVybmFscy9NZXJtYWlkLmQudHMnO1xuXG4vKipcbiAqIExvYWQgTWVybWFpZCBhbmQgcmV0dXJuIGEgcHJvbWlzZSB0byB0aGUgZ2xvYmFsIG1lcm1haWQgb2JqZWN0LlxuICogQ2FuIGFsc28gdXNlIGB3aW5kb3cubWVybWFpZGAgYWZ0ZXIgdGhpcyBwcm9taXNlIHJlc29sdmVzIHRvIGdldCB0aGUgc2FtZSByZWZlcmVuY2UuXG4gKlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGdsb2JhbCBgd2luZG93Lm1lcm1haWRgIG9iamVjdC5cbiAqXG4gKiBAc2VlIHtAbGluayBodHRwczovL21lcm1haWQuanMub3JnLyB8IE9mZmljaWFsIE1lcm1haWQgZG9jdW1lbnRhdGlvbn0uXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZE1lcm1haWQoKTogUHJvbWlzZTxNZXJtYWlkPiB7XG4gIHJldHVybiAoYXdhaXQgbG9hZE1lcm1haWRPcmlnaW5hbCgpKSBhcyBNZXJtYWlkO1xufVxuIiwgImltcG9ydCB7IGxvYWRQZGZKcyBhcyBsb2FkUGRmSnNPcmlnaW5hbCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBQZGZKc01vZHVsZSB9IGZyb20gJy4uLy4uLy4uL3BkZmpzLWRpc3QvaW50ZXJuYWxzL1BkZkpzTW9kdWxlLmQudHMnO1xuXG4vKipcbiAqIExvYWQgUERGLmpzIGFuZCByZXR1cm4gYSBwcm9taXNlIHRvIHRoZSBnbG9iYWwgcGRmanNMaWIgb2JqZWN0LlxuICogQ2FuIGFsc28gdXNlIGB3aW5kb3cucGRmanNMaWJgIGFmdGVyIHRoaXMgcHJvbWlzZSByZXNvbHZlcyB0byBnZXQgdGhlIHNhbWUgcmVmZXJlbmNlLlxuICpcbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRoZSBnbG9iYWwgYHdpbmRvdy5wZGZqc0xpYmAgb2JqZWN0LlxuICpcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW96aWxsYS5naXRodWIuaW8vcGRmLmpzLyB8IE9mZmljaWFsIFBERi5qcyBkb2N1bWVudGF0aW9ufS5cbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkUGRmSnMoKTogUHJvbWlzZTxQZGZKc01vZHVsZT4ge1xuICByZXR1cm4gKGF3YWl0IGxvYWRQZGZKc09yaWdpbmFsKCkpIGFzIFBkZkpzTW9kdWxlO1xufVxuIiwgImltcG9ydCB7IGxvYWRQcmlzbSBhcyBsb2FkUHJpc21PcmlnaW5hbCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBQcmlzbU1vZHVsZSB9IGZyb20gJy4uLy4uLy4uL3ByaXNtanMvaW50ZXJuYWxzL1ByaXNtTW9kdWxlLmQudHMnO1xuXG4vKipcbiAqIExvYWQgUHJpc20uanMgYW5kIHJldHVybiBhIHByb21pc2UgdG8gdGhlIGdsb2JhbCBQcmlzbSBvYmplY3QuXG4gKiBDYW4gYWxzbyB1c2UgYHdpbmRvdy5QcmlzbWAgYWZ0ZXIgdGhpcyBwcm9taXNlIHJlc29sdmVzIHRvIGdldCB0aGUgc2FtZSByZWZlcmVuY2UuXG4gKlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGdsb2JhbCBgd2luZG93LlByaXNtYCBvYmplY3QuXG4gKlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9wcmlzbWpzLmNvbS8gfCBPZmZpY2lhbCBQcmlzbSBkb2N1bWVudGF0aW9ufS5cbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkUHJpc20oKTogUHJvbWlzZTxQcmlzbU1vZHVsZT4ge1xuICByZXR1cm4gKGF3YWl0IGxvYWRQcmlzbU9yaWdpbmFsKCkpIGFzIFByaXNtTW9kdWxlO1xufVxuIiwgImltcG9ydCB0eXBlIHtcbiAgUmVmZXJlbmNlLFxuICBSZWZlcmVuY2VDYWNoZVxufSBmcm9tICdvYnNpZGlhbic7XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIHJlZmVyZW5jZSBpcyBhIHJlZmVyZW5jZSBjYWNoZS5cbiAqXG4gKiBAcGFyYW0gcmVmZXJlbmNlIC0gVGhlIHJlZmVyZW5jZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIHJlZmVyZW5jZSBpcyBhIHJlZmVyZW5jZSBjYWNoZS5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNSZWZlcmVuY2VDYWNoZShyZWZlcmVuY2U6IFJlZmVyZW5jZSk6IHJlZmVyZW5jZSBpcyBSZWZlcmVuY2VDYWNoZSB7XG4gIHJldHVybiAhIShyZWZlcmVuY2UgYXMgUGFydGlhbDxSZWZlcmVuY2VDYWNoZT4pLnBvc2l0aW9uO1xufVxuIiwgImltcG9ydCB0eXBlIHtcbiAgRW1iZWRDYWNoZSxcbiAgUmVmZXJlbmNlXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgaXNSZWZlcmVuY2VDYWNoZSB9IGZyb20gJy4vaXNSZWZlcmVuY2VDYWNoZS50cyc7XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIHJlZmVyZW5jZSBpcyBhbiBlbWJlZCBjYWNoZS5cbiAqXG4gKiBAcGFyYW0gcmVmZXJlbmNlIC0gVGhlIHJlZmVyZW5jZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIHJlZmVyZW5jZSBpcyBhbiBlbWJlZCBjYWNoZS5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNFbWJlZENhY2hlKHJlZmVyZW5jZTogUmVmZXJlbmNlKTogcmVmZXJlbmNlIGlzIEVtYmVkQ2FjaGUge1xuICByZXR1cm4gaXNSZWZlcmVuY2VDYWNoZShyZWZlcmVuY2UpICYmIHJlZmVyZW5jZS5vcmlnaW5hbFswXSA9PT0gJyEnO1xufVxuIiwgImltcG9ydCB0eXBlIHtcbiAgRnJvbnRtYXR0ZXJMaW5rQ2FjaGUsXG4gIFJlZmVyZW5jZVxufSBmcm9tICdvYnNpZGlhbic7XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIHJlZmVyZW5jZSBpcyBhIGZyb250bWF0dGVyIGxpbmsgY2FjaGUuXG4gKlxuICogQHBhcmFtIHJlZmVyZW5jZSAtIFRoZSByZWZlcmVuY2UgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSByZWZlcmVuY2UgaXMgYSBmcm9udG1hdHRlciBsaW5rIGNhY2hlLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Zyb250bWF0dGVyTGlua0NhY2hlKHJlZmVyZW5jZTogUmVmZXJlbmNlKTogcmVmZXJlbmNlIGlzIEZyb250bWF0dGVyTGlua0NhY2hlIHtcbiAgcmV0dXJuICEhKHJlZmVyZW5jZSBhcyBQYXJ0aWFsPEZyb250bWF0dGVyTGlua0NhY2hlPikua2V5O1xufVxuIiwgImltcG9ydCB0eXBlIHtcbiAgTGlua0NhY2hlLFxuICBSZWZlcmVuY2Vcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBpc1JlZmVyZW5jZUNhY2hlIH0gZnJvbSAnLi9pc1JlZmVyZW5jZUNhY2hlLnRzJztcblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgcmVmZXJlbmNlIGlzIGEgbGluayBjYWNoZS5cbiAqXG4gKiBAcGFyYW0gcmVmZXJlbmNlIC0gVGhlIHJlZmVyZW5jZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIHJlZmVyZW5jZSBpcyBhIGxpbmsgY2FjaGUuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTGlua0NhY2hlKHJlZmVyZW5jZTogUmVmZXJlbmNlKTogcmVmZXJlbmNlIGlzIExpbmtDYWNoZSB7XG4gIHJldHVybiBpc1JlZmVyZW5jZUNhY2hlKHJlZmVyZW5jZSkgJiYgcmVmZXJlbmNlLm9yaWdpbmFsWzBdICE9PSAnISc7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFB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Q0FBcUU7QUFDbkYsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBZ0M7QUFZekIsU0FBUyxnQ0FBcUU7QUFDbkYsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBZ0M7QUFZekIsU0FBUyxnQ0FBcUU7QUFDbkYsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBa0M7QUFZM0IsU0FBUyxrQ0FBeUU7QUFDdkYsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBOEI7QUFZdkIsU0FBUyw4QkFBaUU7QUFDL0UsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBZ0M7QUFZekIsU0FBUyxnQ0FBcUU7QUFDbkYsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBK0I7QUFZeEIsU0FBUywrQkFBNEU7QUFDMUYsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBNkI7QUFZdEIsU0FBUyw2QkFBK0Q7QUFDN0UsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBMEI7QUFZbkIsU0FBUywwQkFBeUQ7QUFDdkUsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBOEI7QUFZdkIsU0FBUyw4QkFBaUU7QUFDL0UsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBMEI7QUFZbkIsU0FBUywwQkFBeUQ7QUFDdkUsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBMEI7QUFZbkIsU0FBUywwQkFBeUQ7QUFDdkUsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBMEI7QUFZbkIsU0FBUywwQkFBeUQ7QUFDdkUsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBMkI7QUFZcEIsU0FBUywyQkFBMkQ7QUFDekUsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBMEI7QUFZbkIsU0FBUywwQkFBeUQ7QUFDdkUsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBMEI7QUFZbkIsU0FBUywwQkFBeUQ7QUFDdkUsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBNkI7QUFZdEIsU0FBUyw2QkFBK0Q7QUFDN0UsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxv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QUFTLHVCQUF1QixXQUF5RDtBQUM5RixTQUFPLENBQUMsQ0FBRSxVQUE0QztBQUN4RDs7O0FDQU8sU0FBUyxZQUFZLFdBQThDO0FBQ3hFLFNBQU8saUJBQWlCLFNBQVMsS0FBSyxVQUFVLFNBQVMsQ0FBQyxNQUFNO0FBQ2xFOyIsCiAgIm5hbWVzIjogWyJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImxvYWRNZXJtYWlkT3JpZ2luYWwiLCAiaW1wb3J0X29ic2lkaWFuIiwgImxvYWRQZGZKc09yaWdpbmFsIiwgImltcG9ydF9vYnNpZGlhbiIsICJsb2FkUHJpc21PcmlnaW5hbCJdCn0K