@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.
- package/CHANGELOG.md +3 -0
- package/LICENSE +21 -0
- package/README.md +25 -0
- package/dist/cjs/implementations.cjs +1401 -0
- package/dist/cjs/implementations.d.cts +45561 -0
- package/dist/cjs/types.d.cts +73182 -0
- package/dist/esm/implementations.d.mts +1 -0
- package/dist/esm/implementations.mjs +1379 -0
- package/dist/esm/types.d.mts +1 -0
- package/dist/obsidian-typings.api.json +340410 -0
- package/implementations/package.json +5 -0
- package/package.json +143 -0
|
@@ -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
|