obsidian-typings 2.8.1 → 2.8.2

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.
@@ -66,142 +66,38 @@ __export(implementations_exports, {
66
66
  });
67
67
  module.exports = __toCommonJS(implementations_exports);
68
68
 
69
- // src/obsidian/implementations/Classes/CustomArrayDictImpl.ts
70
- var CustomArrayDictImpl = class {
71
- data = /* @__PURE__ */ new Map();
72
- add(key, value) {
73
- let values = this.get(key);
74
- if (!values) {
75
- values = [];
76
- this.data.set(key, values);
77
- }
78
- if (!values.includes(value)) {
79
- values.push(value);
80
- }
81
- }
82
- remove(key, value) {
83
- const values = this.get(key);
84
- if (!values) {
85
- return;
86
- }
87
- values.remove(value);
88
- if (values.length === 0) {
89
- this.clear(key);
90
- }
91
- }
92
- get(key) {
93
- return this.data.get(key) || null;
94
- }
95
- keys() {
96
- return Array.from(this.data.keys());
97
- }
98
- clear(key) {
99
- this.data.delete(key);
100
- }
101
- clearAll() {
102
- this.data.clear();
103
- }
104
- contains(key, value) {
105
- return !!this.get(key)?.contains(value);
106
- }
107
- count() {
108
- let ans = 0;
109
- for (const key in this.keys()) {
110
- ans += this.get(key)?.length ?? 0;
111
- }
112
- return ans;
113
- }
114
- };
115
-
116
- // src/obsidian/implementations/Constructors/getTFolderConstructor.ts
69
+ // src/obsidian/implementations/Constructors/getAppConstructor.ts
117
70
  var import_obsidian = require("obsidian");
118
- function getTFolderConstructor() {
119
- return import_obsidian.TFolder;
71
+ function getAppConstructor() {
72
+ return import_obsidian.App;
120
73
  }
121
74
 
122
- // src/obsidian/implementations/Utils/PathUtils.ts
123
- function parentFolderPath(path) {
124
- return path.replace(/\/?[^\/]*$/, "") || "/";
75
+ // src/obsidian/implementations/Constructors/getTFolderConstructor.ts
76
+ var import_obsidian2 = require("obsidian");
77
+ function getTFolderConstructor() {
78
+ return import_obsidian2.TFolder;
125
79
  }
126
80
 
127
- // src/obsidian/implementations/Functions/createTFolderInstance.ts
128
- function createTFolderInstance(app, path) {
129
- let folder = app.vault.getFolderByPath(path);
130
- if (folder) {
131
- return folder;
132
- }
133
- folder = new (getTFolderConstructor())(app.vault, path);
134
- folder.parent = createTFolderInstance(app, parentFolderPath(path));
135
- folder.deleted = true;
136
- return folder;
81
+ // src/obsidian/implementations/Constructors/getInternalPluginsConstructor.ts
82
+ function getInternalPluginsConstructor(app) {
83
+ return app.internalPlugins.constructor;
137
84
  }
138
85
 
139
86
  // src/obsidian/implementations/Constructors/getTFileConstructor.ts
140
- var import_obsidian2 = require("obsidian");
87
+ var import_obsidian3 = require("obsidian");
141
88
  function getTFileConstructor() {
142
- return import_obsidian2.TFile;
89
+ return import_obsidian3.TFile;
143
90
  }
144
91
 
145
- // src/obsidian/implementations/Functions/createTFileInstance.ts
146
- function createTFileInstance(app, path) {
147
- let file = app.vault.getFileByPath(path);
148
- if (file) {
149
- return file;
92
+ // src/obsidian/implementations/Constructors/getInternalPluginConstructor.ts
93
+ function getInternalPluginConstructor(app) {
94
+ const anyPlugin = Object.values(app.internalPlugins.plugins)[0];
95
+ if (!anyPlugin) {
96
+ throw new Error("No internal plugin found");
150
97
  }
151
- file = new (getTFileConstructor())(app.vault, path);
152
- file.parent = createTFolderInstance(app, parentFolderPath(path));
153
- file.deleted = true;
154
- return file;
155
- }
156
-
157
- // src/obsidian/implementations/TypeGuards/isReferenceCache.ts
158
- function isReferenceCache(reference) {
159
- return !!reference.position;
160
- }
161
-
162
- // src/obsidian/implementations/TypeGuards/isEmbedCache.ts
163
- function isEmbedCache(reference) {
164
- return isReferenceCache(reference) && reference.original[0] === "!";
165
- }
166
-
167
- // src/obsidian/implementations/TypeGuards/isFrontmatterLinkCache.ts
168
- function isFrontmatterLinkCache(reference) {
169
- return !!reference.key;
170
- }
171
-
172
- // src/obsidian/implementations/TypeGuards/isLinkCache.ts
173
- function isLinkCache(reference) {
174
- return isReferenceCache(reference) && reference.original[0] !== "!";
98
+ return anyPlugin.constructor;
175
99
  }
176
100
 
177
- // src/obsidian/implementations/Constants/FileExtension.ts
178
- var FileExtension = {
179
- _3gp: "3gp",
180
- avif: "avif",
181
- bmp: "bmp",
182
- canvas: "canvas",
183
- flac: "flac",
184
- gif: "gif",
185
- jpeg: "jpeg",
186
- jpg: "jpg",
187
- m4a: "m4a",
188
- md: "md",
189
- mkv: "mkv",
190
- mov: "mov",
191
- mp3: "mp3",
192
- mp4: "mp4",
193
- oga: "oga",
194
- ogg: "ogg",
195
- ogv: "ogv",
196
- opus: "opus",
197
- pdf: "pdf",
198
- png: "png",
199
- svg: "svg",
200
- wav: "wav",
201
- webm: "webm",
202
- webp: "webp"
203
- };
204
-
205
101
  // src/obsidian/implementations/Constants/InternalPluginName.ts
206
102
  var InternalPluginName = {
207
103
  /**
@@ -322,6 +218,34 @@ var InternalPluginName = {
322
218
  ZkPrefixer: "zk-prefixer"
323
219
  };
324
220
 
221
+ // src/obsidian/implementations/Constants/FileExtension.ts
222
+ var FileExtension = {
223
+ _3gp: "3gp",
224
+ avif: "avif",
225
+ bmp: "bmp",
226
+ canvas: "canvas",
227
+ flac: "flac",
228
+ gif: "gif",
229
+ jpeg: "jpeg",
230
+ jpg: "jpg",
231
+ m4a: "m4a",
232
+ md: "md",
233
+ mkv: "mkv",
234
+ mov: "mov",
235
+ mp3: "mp3",
236
+ mp4: "mp4",
237
+ oga: "oga",
238
+ ogg: "ogg",
239
+ ogv: "ogv",
240
+ opus: "opus",
241
+ pdf: "pdf",
242
+ png: "png",
243
+ svg: "svg",
244
+ wav: "wav",
245
+ webm: "webm",
246
+ webp: "webp"
247
+ };
248
+
325
249
  // src/obsidian/implementations/Constants/ViewType.ts
326
250
  var ViewType = {
327
251
  AllProperties: "all-properties",
@@ -348,26 +272,102 @@ var ViewType = {
348
272
  Video: "video"
349
273
  };
350
274
 
351
- // src/obsidian/implementations/Constructors/getInternalPluginConstructor.ts
352
- function getInternalPluginConstructor(app) {
353
- const anyPlugin = Object.values(app.internalPlugins.plugins)[0];
354
- if (!anyPlugin) {
355
- throw new Error("No internal plugin found");
356
- }
357
- return anyPlugin.constructor;
275
+ // src/obsidian/implementations/TypeGuards/isReferenceCache.ts
276
+ function isReferenceCache(reference) {
277
+ return !!reference.position;
358
278
  }
359
279
 
360
- // src/obsidian/implementations/Constructors/getInternalPluginsConstructor.ts
361
- function getInternalPluginsConstructor(app) {
362
- return app.internalPlugins.constructor;
280
+ // src/obsidian/implementations/TypeGuards/isLinkCache.ts
281
+ function isLinkCache(reference) {
282
+ return isReferenceCache(reference) && reference.original[0] !== "!";
363
283
  }
364
284
 
365
- // src/obsidian/implementations/Constructors/getAppConstructor.ts
366
- var import_obsidian3 = require("obsidian");
367
- function getAppConstructor() {
368
- return import_obsidian3.App;
285
+ // src/obsidian/implementations/TypeGuards/isEmbedCache.ts
286
+ function isEmbedCache(reference) {
287
+ return isReferenceCache(reference) && reference.original[0] === "!";
288
+ }
289
+
290
+ // src/obsidian/implementations/TypeGuards/isFrontmatterLinkCache.ts
291
+ function isFrontmatterLinkCache(reference) {
292
+ return !!reference.key;
293
+ }
294
+
295
+ // src/obsidian/implementations/Utils/PathUtils.ts
296
+ function parentFolderPath(path) {
297
+ return path.replace(/\/?[^\/]*$/, "") || "/";
298
+ }
299
+
300
+ // src/obsidian/implementations/Functions/createTFolderInstance.ts
301
+ function createTFolderInstance(app, path) {
302
+ let folder = app.vault.getFolderByPath(path);
303
+ if (folder) {
304
+ return folder;
305
+ }
306
+ folder = new (getTFolderConstructor())(app.vault, path);
307
+ folder.parent = createTFolderInstance(app, parentFolderPath(path));
308
+ folder.deleted = true;
309
+ return folder;
310
+ }
311
+
312
+ // src/obsidian/implementations/Functions/createTFileInstance.ts
313
+ function createTFileInstance(app, path) {
314
+ let file = app.vault.getFileByPath(path);
315
+ if (file) {
316
+ return file;
317
+ }
318
+ file = new (getTFileConstructor())(app.vault, path);
319
+ file.parent = createTFolderInstance(app, parentFolderPath(path));
320
+ file.deleted = true;
321
+ return file;
369
322
  }
370
323
 
324
+ // src/obsidian/implementations/Classes/CustomArrayDictImpl.ts
325
+ var CustomArrayDictImpl = class {
326
+ data = /* @__PURE__ */ new Map();
327
+ add(key, value) {
328
+ let values = this.get(key);
329
+ if (!values) {
330
+ values = [];
331
+ this.data.set(key, values);
332
+ }
333
+ if (!values.includes(value)) {
334
+ values.push(value);
335
+ }
336
+ }
337
+ remove(key, value) {
338
+ const values = this.get(key);
339
+ if (!values) {
340
+ return;
341
+ }
342
+ values.remove(value);
343
+ if (values.length === 0) {
344
+ this.clear(key);
345
+ }
346
+ }
347
+ get(key) {
348
+ return this.data.get(key) || null;
349
+ }
350
+ keys() {
351
+ return Array.from(this.data.keys());
352
+ }
353
+ clear(key) {
354
+ this.data.delete(key);
355
+ }
356
+ clearAll() {
357
+ this.data.clear();
358
+ }
359
+ contains(key, value) {
360
+ return !!this.get(key)?.contains(value);
361
+ }
362
+ count() {
363
+ let ans = 0;
364
+ for (const key in this.keys()) {
365
+ ans += this.get(key)?.length ?? 0;
366
+ }
367
+ return ans;
368
+ }
369
+ };
370
+
371
371
  // src/obsidian/implementations/Constructors/Views/getViewConstructorByViewType.ts
372
372
  function getViewConstructorByViewType(app, viewType) {
373
373
  const leaf = app.workspace.createLeafInTabGroup();
@@ -383,9 +383,29 @@ function getViewConstructorByViewType(app, viewType) {
383
383
  }
384
384
  }
385
385
 
386
- // src/obsidian/implementations/Constructors/Views/getOutlineViewConstructor.ts
387
- function getOutlineViewConstructor(app) {
388
- return getViewConstructorByViewType(app, ViewType.Outline);
386
+ // src/obsidian/implementations/Constructors/Views/getAllPropertiesViewConstructor.ts
387
+ function getAllPropertiesViewConstructor(app) {
388
+ return getViewConstructorByViewType(app, ViewType.AllProperties);
389
+ }
390
+
391
+ // src/obsidian/implementations/Constructors/Views/getMarkdownViewConstructor.ts
392
+ function getMarkdownViewConstructor(app) {
393
+ return getViewConstructorByViewType(app, ViewType.Markdown);
394
+ }
395
+
396
+ // src/obsidian/implementations/Constructors/Views/getCanvasViewConstructor.ts
397
+ function getCanvasViewConstructor(app) {
398
+ return getViewConstructorByViewType(app, ViewType.Canvas);
399
+ }
400
+
401
+ // src/obsidian/implementations/Constructors/Views/getFileExplorerViewConstructor.ts
402
+ function getFileExplorerViewConstructor(app) {
403
+ return getViewConstructorByViewType(app, ViewType.FileExplorer);
404
+ }
405
+
406
+ // src/obsidian/implementations/Constructors/Views/getOutgoingLinkViewConstructor.ts
407
+ function getOutgoingLinkViewConstructor(app) {
408
+ return getViewConstructorByViewType(app, ViewType.OutgoingLink);
389
409
  }
390
410
 
391
411
  // src/obsidian/implementations/Constructors/Views/getBrowserViewConstructor.ts
@@ -393,34 +413,29 @@ function getBrowserViewConstructor(app) {
393
413
  return getViewConstructorByViewType(app, ViewType.Browser);
394
414
  }
395
415
 
396
- // src/obsidian/implementations/Constructors/Views/getReleaseNotesViewConstructor.ts
397
- function getReleaseNotesViewConstructor(app) {
398
- return getViewConstructorByViewType(app, ViewType.ReleaseNotes);
399
- }
400
-
401
416
  // src/obsidian/implementations/Constructors/Views/getPdfViewConstructor.ts
402
417
  function getPdfViewConstructor(app) {
403
418
  return getViewConstructorByViewType(app, ViewType.Pdf);
404
419
  }
405
420
 
406
- // src/obsidian/implementations/Constructors/Views/getSyncViewConstructor.ts
407
- function getSyncViewConstructor(app) {
408
- return getViewConstructorByViewType(app, ViewType.Sync);
421
+ // src/obsidian/implementations/Constructors/Views/getSearchViewConstructor.ts
422
+ function getSearchViewConstructor(app) {
423
+ return getViewConstructorByViewType(app, ViewType.Search);
409
424
  }
410
425
 
411
- // src/obsidian/implementations/Constructors/Views/getOutgoingLinkViewConstructor.ts
412
- function getOutgoingLinkViewConstructor(app) {
413
- return getViewConstructorByViewType(app, ViewType.OutgoingLink);
426
+ // src/obsidian/implementations/Constructors/Views/getFilePropertiesViewConstructor.ts
427
+ function getFilePropertiesViewConstructor(app) {
428
+ return getViewConstructorByViewType(app, ViewType.FileProperties);
414
429
  }
415
430
 
416
- // src/obsidian/implementations/Constructors/Views/getCanvasViewConstructor.ts
417
- function getCanvasViewConstructor(app) {
418
- return getViewConstructorByViewType(app, ViewType.Canvas);
431
+ // src/obsidian/implementations/Constructors/Views/getBookmarksViewConstructor.ts
432
+ function getBookmarksViewConstructor(app) {
433
+ return getViewConstructorByViewType(app, ViewType.Bookmarks);
419
434
  }
420
435
 
421
- // src/obsidian/implementations/Constructors/Views/getTagViewConstructor.ts
422
- function getTagViewConstructor(app) {
423
- return getViewConstructorByViewType(app, ViewType.Tag);
436
+ // src/obsidian/implementations/Constructors/Views/getEmptyViewConstructor.ts
437
+ function getEmptyViewConstructor(app) {
438
+ return getViewConstructorByViewType(app, ViewType.Empty);
424
439
  }
425
440
 
426
441
  // src/obsidian/implementations/Constructors/Views/getAudioViewConstructor.ts
@@ -428,29 +443,29 @@ function getAudioViewConstructor(app) {
428
443
  return getViewConstructorByViewType(app, ViewType.Audio);
429
444
  }
430
445
 
431
- // src/obsidian/implementations/Constructors/Views/getLocalGraphViewConstructor.ts
432
- function getLocalGraphViewConstructor(app) {
433
- return getViewConstructorByViewType(app, ViewType.LocalGraph);
446
+ // src/obsidian/implementations/Constructors/Views/getOutlineViewConstructor.ts
447
+ function getOutlineViewConstructor(app) {
448
+ return getViewConstructorByViewType(app, ViewType.Outline);
434
449
  }
435
450
 
436
- // src/obsidian/implementations/Constructors/Views/getBacklinkViewConstructor.ts
437
- function getBacklinkViewConstructor(app) {
438
- return getViewConstructorByViewType(app, ViewType.Backlink);
451
+ // src/obsidian/implementations/Constructors/Views/getTagViewConstructor.ts
452
+ function getTagViewConstructor(app) {
453
+ return getViewConstructorByViewType(app, ViewType.Tag);
439
454
  }
440
455
 
441
- // src/obsidian/implementations/Constructors/Views/getFileExplorerViewConstructor.ts
442
- function getFileExplorerViewConstructor(app) {
443
- return getViewConstructorByViewType(app, ViewType.FileExplorer);
456
+ // src/obsidian/implementations/Constructors/Views/getVideoViewConstructor.ts
457
+ function getVideoViewConstructor(app) {
458
+ return getViewConstructorByViewType(app, ViewType.Video);
444
459
  }
445
460
 
446
- // src/obsidian/implementations/Constructors/Views/getSearchViewConstructor.ts
447
- function getSearchViewConstructor(app) {
448
- return getViewConstructorByViewType(app, ViewType.Search);
461
+ // src/obsidian/implementations/Constructors/Views/getGraphViewConstructor.ts
462
+ function getGraphViewConstructor(app) {
463
+ return getViewConstructorByViewType(app, ViewType.Graph);
449
464
  }
450
465
 
451
- // src/obsidian/implementations/Constructors/Views/getVideoViewConstructor.ts
452
- function getVideoViewConstructor(app) {
453
- return getViewConstructorByViewType(app, ViewType.Video);
466
+ // src/obsidian/implementations/Constructors/Views/getLocalGraphViewConstructor.ts
467
+ function getLocalGraphViewConstructor(app) {
468
+ return getViewConstructorByViewType(app, ViewType.LocalGraph);
454
469
  }
455
470
 
456
471
  // src/obsidian/implementations/Constructors/Views/getImageViewConstructor.ts
@@ -463,33 +478,18 @@ function getBrowserHistoryViewConstructor(app) {
463
478
  return getViewConstructorByViewType(app, ViewType.BrowserHistory);
464
479
  }
465
480
 
466
- // src/obsidian/implementations/Constructors/Views/getEmptyViewConstructor.ts
467
- function getEmptyViewConstructor(app) {
468
- return getViewConstructorByViewType(app, ViewType.Empty);
469
- }
470
-
471
- // src/obsidian/implementations/Constructors/Views/getGraphViewConstructor.ts
472
- function getGraphViewConstructor(app) {
473
- return getViewConstructorByViewType(app, ViewType.Graph);
474
- }
475
-
476
- // src/obsidian/implementations/Constructors/Views/getFilePropertiesViewConstructor.ts
477
- function getFilePropertiesViewConstructor(app) {
478
- return getViewConstructorByViewType(app, ViewType.FileProperties);
479
- }
480
-
481
- // src/obsidian/implementations/Constructors/Views/getBookmarksViewConstructor.ts
482
- function getBookmarksViewConstructor(app) {
483
- return getViewConstructorByViewType(app, ViewType.Bookmarks);
481
+ // src/obsidian/implementations/Constructors/Views/getSyncViewConstructor.ts
482
+ function getSyncViewConstructor(app) {
483
+ return getViewConstructorByViewType(app, ViewType.Sync);
484
484
  }
485
485
 
486
- // src/obsidian/implementations/Constructors/Views/getMarkdownViewConstructor.ts
487
- function getMarkdownViewConstructor(app) {
488
- return getViewConstructorByViewType(app, ViewType.Markdown);
486
+ // src/obsidian/implementations/Constructors/Views/getReleaseNotesViewConstructor.ts
487
+ function getReleaseNotesViewConstructor(app) {
488
+ return getViewConstructorByViewType(app, ViewType.ReleaseNotes);
489
489
  }
490
490
 
491
- // src/obsidian/implementations/Constructors/Views/getAllPropertiesViewConstructor.ts
492
- function getAllPropertiesViewConstructor(app) {
493
- return getViewConstructorByViewType(app, ViewType.AllProperties);
491
+ // src/obsidian/implementations/Constructors/Views/getBacklinkViewConstructor.ts
492
+ function getBacklinkViewConstructor(app) {
493
+ return getViewConstructorByViewType(app, ViewType.Backlink);
494
494
  }
495
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9pbmRleC50cyIsICIuLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL0NsYXNzZXMvQ3VzdG9tQXJyYXlEaWN0SW1wbC50cyIsICIuLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL0NvbnN0cnVjdG9ycy9nZXRURm9sZGVyQ29uc3RydWN0b3IudHMiLCAiLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9VdGlscy9QYXRoVXRpbHMudHMiLCAiLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9GdW5jdGlvbnMvY3JlYXRlVEZvbGRlckluc3RhbmNlLnRzIiwgIi4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvQ29uc3RydWN0b3JzL2dldFRGaWxlQ29uc3RydWN0b3IudHMiLCAiLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9GdW5jdGlvbnMvY3JlYXRlVEZpbGVJbnN0YW5jZS50cyIsICIuLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL1R5cGVHdWFyZHMvaXNSZWZlcmVuY2VDYWNoZS50cyIsICIuLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL1R5cGVHdWFyZHMvaXNFbWJlZENhY2hlLnRzIiwgIi4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvVHlwZUd1YXJkcy9pc0Zyb250bWF0dGVyTGlua0NhY2hlLnRzIiwgIi4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvVHlwZUd1YXJkcy9pc0xpbmtDYWNoZS50cyIsICIuLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL0NvbnN0YW50cy9GaWxlRXh0ZW5zaW9uLnRzIiwgIi4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvQ29uc3RhbnRzL0ludGVybmFsUGx1Z2luTmFtZS50cyIsICIuLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL0NvbnN0YW50cy9WaWV3VHlwZS50cyIsICIuLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL0NvbnN0cnVjdG9ycy9nZXRJbnRlcm5hbFBsdWdpbkNvbnN0cnVjdG9yLnRzIiwgIi4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvQ29uc3RydWN0b3JzL2dldEludGVybmFsUGx1Z2luc0NvbnN0cnVjdG9yLnRzIiwgIi4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvQ29uc3RydWN0b3JzL2dldEFwcENvbnN0cnVjdG9yLnRzIiwgIi4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvQ29uc3RydWN0b3JzL1ZpZXdzL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMiLCAiLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0T3V0bGluZVZpZXdDb25zdHJ1Y3Rvci50cyIsICIuLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL0NvbnN0cnVjdG9ycy9WaWV3cy9nZXRCcm93c2VyVmlld0NvbnN0cnVjdG9yLnRzIiwgIi4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvQ29uc3RydWN0b3JzL1ZpZXdzL2dldFJlbGVhc2VOb3Rlc1ZpZXdDb25zdHJ1Y3Rvci50cyIsICIuLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL0NvbnN0cnVjdG9ycy9WaWV3cy9nZXRQZGZWaWV3Q29uc3RydWN0b3IudHMiLCAiLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0U3luY1ZpZXdDb25zdHJ1Y3Rvci50cyIsICIuLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL0NvbnN0cnVjdG9ycy9WaWV3cy9nZXRPdXRnb2luZ0xpbmtWaWV3Q29uc3RydWN0b3IudHMiLCAiLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0Q2FudmFzVmlld0NvbnN0cnVjdG9yLnRzIiwgIi4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvQ29uc3RydWN0b3JzL1ZpZXdzL2dldFRhZ1ZpZXdDb25zdHJ1Y3Rvci50cyIsICIuLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL0NvbnN0cnVjdG9ycy9WaWV3cy9nZXRBdWRpb1ZpZXdDb25zdHJ1Y3Rvci50cyIsICIuLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL0NvbnN0cnVjdG9ycy9WaWV3cy9nZXRMb2NhbEdyYXBoVmlld0NvbnN0cnVjdG9yLnRzIiwgIi4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvQ29uc3RydWN0b3JzL1ZpZXdzL2dldEJhY2tsaW5rVmlld0NvbnN0cnVjdG9yLnRzIiwgIi4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvQ29uc3RydWN0b3JzL1ZpZXdzL2dldEZpbGVFeHBsb3JlclZpZXdDb25zdHJ1Y3Rvci50cyIsICIuLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL0NvbnN0cnVjdG9ycy9WaWV3cy9nZXRTZWFyY2hWaWV3Q29uc3RydWN0b3IudHMiLCAiLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0VmlkZW9WaWV3Q29uc3RydWN0b3IudHMiLCAiLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0SW1hZ2VWaWV3Q29uc3RydWN0b3IudHMiLCAiLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0QnJvd3Nlckhpc3RvcnlWaWV3Q29uc3RydWN0b3IudHMiLCAiLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0RW1wdHlWaWV3Q29uc3RydWN0b3IudHMiLCAiLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0R3JhcGhWaWV3Q29uc3RydWN0b3IudHMiLCAiLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0RmlsZVByb3BlcnRpZXNWaWV3Q29uc3RydWN0b3IudHMiLCAiLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0Qm9va21hcmtzVmlld0NvbnN0cnVjdG9yLnRzIiwgIi4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvQ29uc3RydWN0b3JzL1ZpZXdzL2dldE1hcmtkb3duVmlld0NvbnN0cnVjdG9yLnRzIiwgIi4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvQ29uc3RydWN0b3JzL1ZpZXdzL2dldEFsbFByb3BlcnRpZXNWaWV3Q29uc3RydWN0b3IudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qIFRISVMgSVMgQSBHRU5FUkFURUQvQlVORExFRCBGSUxFIEJZIEJVSUxEIFNDUklQVCAqL1xuXG5leHBvcnQgKiBmcm9tICcuL0NsYXNzZXMvQ3VzdG9tQXJyYXlEaWN0SW1wbC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL0Z1bmN0aW9ucy9jcmVhdGVURm9sZGVySW5zdGFuY2UuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9GdW5jdGlvbnMvY3JlYXRlVEZpbGVJbnN0YW5jZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL1V0aWxzL1BhdGhVdGlscy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL1R5cGVHdWFyZHMvaXNFbWJlZENhY2hlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vVHlwZUd1YXJkcy9pc0Zyb250bWF0dGVyTGlua0NhY2hlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vVHlwZUd1YXJkcy9pc1JlZmVyZW5jZUNhY2hlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vVHlwZUd1YXJkcy9pc0xpbmtDYWNoZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL0NvbnN0YW50cy9GaWxlRXh0ZW5zaW9uLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vQ29uc3RhbnRzL1ZpZXdUeXBlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vQ29uc3RhbnRzL0ludGVybmFsUGx1Z2luTmFtZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL0NvbnN0cnVjdG9ycy9nZXRJbnRlcm5hbFBsdWdpbkNvbnN0cnVjdG9yLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vQ29uc3RydWN0b3JzL2dldEludGVybmFsUGx1Z2luc0NvbnN0cnVjdG9yLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vQ29uc3RydWN0b3JzL2dldFRGb2xkZXJDb25zdHJ1Y3Rvci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL0NvbnN0cnVjdG9ycy9nZXRBcHBDb25zdHJ1Y3Rvci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL0NvbnN0cnVjdG9ycy9nZXRURmlsZUNvbnN0cnVjdG9yLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vQ29uc3RydWN0b3JzL1ZpZXdzL2dldE91dGxpbmVWaWV3Q29uc3RydWN0b3IuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0QnJvd3NlclZpZXdDb25zdHJ1Y3Rvci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL0NvbnN0cnVjdG9ycy9WaWV3cy9nZXRSZWxlYXNlTm90ZXNWaWV3Q29uc3RydWN0b3IuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0UGRmVmlld0NvbnN0cnVjdG9yLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vQ29uc3RydWN0b3JzL1ZpZXdzL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0U3luY1ZpZXdDb25zdHJ1Y3Rvci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL0NvbnN0cnVjdG9ycy9WaWV3cy9nZXRPdXRnb2luZ0xpbmtWaWV3Q29uc3RydWN0b3IuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0Q2FudmFzVmlld0NvbnN0cnVjdG9yLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vQ29uc3RydWN0b3JzL1ZpZXdzL2dldFRhZ1ZpZXdDb25zdHJ1Y3Rvci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL0NvbnN0cnVjdG9ycy9WaWV3cy9nZXRBdWRpb1ZpZXdDb25zdHJ1Y3Rvci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL0NvbnN0cnVjdG9ycy9WaWV3cy9nZXRMb2NhbEdyYXBoVmlld0NvbnN0cnVjdG9yLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vQ29uc3RydWN0b3JzL1ZpZXdzL2dldEJhY2tsaW5rVmlld0NvbnN0cnVjdG9yLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vQ29uc3RydWN0b3JzL1ZpZXdzL2dldEZpbGVFeHBsb3JlclZpZXdDb25zdHJ1Y3Rvci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL0NvbnN0cnVjdG9ycy9WaWV3cy9nZXRTZWFyY2hWaWV3Q29uc3RydWN0b3IuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0VmlkZW9WaWV3Q29uc3RydWN0b3IuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0SW1hZ2VWaWV3Q29uc3RydWN0b3IuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0QnJvd3Nlckhpc3RvcnlWaWV3Q29uc3RydWN0b3IuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0RW1wdHlWaWV3Q29uc3RydWN0b3IuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0R3JhcGhWaWV3Q29uc3RydWN0b3IuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0RmlsZVByb3BlcnRpZXNWaWV3Q29uc3RydWN0b3IuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0Qm9va21hcmtzVmlld0NvbnN0cnVjdG9yLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vQ29uc3RydWN0b3JzL1ZpZXdzL2dldE1hcmtkb3duVmlld0NvbnN0cnVjdG9yLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vQ29uc3RydWN0b3JzL1ZpZXdzL2dldEFsbFByb3BlcnRpZXNWaWV3Q29uc3RydWN0b3IuanMnO1xuaW1wb3J0ICcuLi8uLi9pbmRleC5qcyc7XG4iLCAiaW1wb3J0IHR5cGUgeyBDdXN0b21BcnJheURpY3QgfSBmcm9tICcuLi8uLi9pbnRlcm5hbHMvQ3VzdG9tQXJyYXlEaWN0LmpzJztcblxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjbGFzcyBDdXN0b21BcnJheURpY3RJbXBsPFQ+IGltcGxlbWVudHMgQ3VzdG9tQXJyYXlEaWN0PFQ+IHtcbiAgICBwdWJsaWMgZGF0YTogTWFwPHN0cmluZywgVFtdPiA9IG5ldyBNYXAoKTtcblxuICAgIHB1YmxpYyBhZGQoa2V5OiBzdHJpbmcsIHZhbHVlOiBUKTogdm9pZCB7XG4gICAgICAgIGxldCB2YWx1ZXMgPSB0aGlzLmdldChrZXkpO1xuICAgICAgICBpZiAoIXZhbHVlcykge1xuICAgICAgICAgICAgdmFsdWVzID0gW107XG4gICAgICAgICAgICB0aGlzLmRhdGEuc2V0KGtleSwgdmFsdWVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdmFsdWVzLmluY2x1ZGVzKHZhbHVlKSkge1xuICAgICAgICAgICAgdmFsdWVzLnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZShrZXk6IHN0cmluZywgdmFsdWU6IFQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gdGhpcy5nZXQoa2V5KTtcbiAgICAgICAgaWYgKCF2YWx1ZXMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YWx1ZXMucmVtb3ZlKHZhbHVlKTtcblxuICAgICAgICBpZiAodmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5jbGVhcihrZXkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldChrZXk6IHN0cmluZyk6IFRbXSB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLmdldChrZXkpIHx8IG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIGtleXMoKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmRhdGEua2V5cygpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xlYXIoa2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kYXRhLmRlbGV0ZShrZXkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjbGVhckFsbCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kYXRhLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNvbnRhaW5zKGtleTogc3RyaW5nLCB2YWx1ZTogVCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLmdldChrZXkpPy5jb250YWlucyh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGNvdW50KCk6IG51bWJlciB7XG4gICAgICAgIGxldCBhbnMgPSAwO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLmtleXMoKSkge1xuICAgICAgICAgICAgYW5zICs9IHRoaXMuZ2V0KGtleSk/Lmxlbmd0aCA/PyAwO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFucztcbiAgICB9XG59XG4iLCAiaW1wb3J0IHtcbiAgICBURm9sZGVyXG59IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgVEZvbGRlckNvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vaW50ZXJuYWxzL0NvbnN0cnVjdG9ycy9URm9sZGVyQ29uc3RydWN0b3IudHMnO1xuXG4vKipcbiAqIEdldCB0aGUgVEZvbGRlciBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUgVEZvbGRlciBjb25zdHJ1Y3Rvci5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRGb2xkZXJDb25zdHJ1Y3RvcigpOiBURm9sZGVyQ29uc3RydWN0b3Ige1xuICAgIHJldHVybiBURm9sZGVyIGFzIFRGb2xkZXJDb25zdHJ1Y3Rvcjtcbn1cbiIsICIvKipcbiAqIEdldCB0aGUgcGFyZW50IGZvbGRlciBwYXRoIG9mIGEgZ2l2ZW4gcGF0aC5cbiAqXG4gKiBAcGFyYW0gcGF0aCAtIFRoZSBwYXRoIHRvIGdldCB0aGUgcGFyZW50IGZvbGRlciBwYXRoIG9mLlxuICogQHJldHVybnMgVGhlIHBhcmVudCBmb2xkZXIgcGF0aC5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcmVudEZvbGRlclBhdGgocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcGF0aC5yZXBsYWNlKC9cXC8/W15cXC9dKiQvLCAnJykgfHwgJy8nO1xufVxuIiwgImltcG9ydCB7XG4gICAgdHlwZSBBcHAsXG4gICAgVEZvbGRlclxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgeyBnZXRURm9sZGVyQ29uc3RydWN0b3IgfSBmcm9tICcuLi9Db25zdHJ1Y3RvcnMvZ2V0VEZvbGRlckNvbnN0cnVjdG9yLnRzJztcbmltcG9ydCB7IHBhcmVudEZvbGRlclBhdGggfSBmcm9tICcuLi9VdGlscy9QYXRoVXRpbHMuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYW5kIHByb3Blcmx5IGluaXRpYWxpemVzIHRoZSBpbnN0YW5jZSBvZiBURm9sZGVyIGV2ZW4gdGhlIHVuZGVybHlpbmcgZm9sZGVyIGRvZXMgbm90IGV4aXN0LlxuICogVGhpcyBkb2Vzbid0IGNyZWF0ZSB0aGUgbWlzc2luZyBmb2xkZXIgb24gdGhlIGZpbGUgc3lzdGVtLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVEZvbGRlckluc3RhbmNlKGFwcDogQXBwLCBwYXRoOiBzdHJpbmcpOiBURm9sZGVyIHtcbiAgICBsZXQgZm9sZGVyID0gYXBwLnZhdWx0LmdldEZvbGRlckJ5UGF0aChwYXRoKTtcbiAgICBpZiAoZm9sZGVyKSB7XG4gICAgICAgIHJldHVybiBmb2xkZXI7XG4gICAgfVxuXG4gICAgZm9sZGVyID0gbmV3IChnZXRURm9sZGVyQ29uc3RydWN0b3IoKSkoYXBwLnZhdWx0LCBwYXRoKTtcbiAgICBmb2xkZXIucGFyZW50ID0gY3JlYXRlVEZvbGRlckluc3RhbmNlKGFwcCwgcGFyZW50Rm9sZGVyUGF0aChwYXRoKSk7XG4gICAgZm9sZGVyLmRlbGV0ZWQgPSB0cnVlO1xuICAgIHJldHVybiBmb2xkZXI7XG59XG4iLCAiaW1wb3J0IHtcbiAgICBURmlsZVxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFRGaWxlQ29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi9pbnRlcm5hbHMvQ29uc3RydWN0b3JzL1RGaWxlQ29uc3RydWN0b3IudHMnO1xuXG4vKipcbiAqIEdldCB0aGUgVEZpbGUgY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIFRGaWxlIGNvbnN0cnVjdG9yLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VEZpbGVDb25zdHJ1Y3RvcigpOiBURmlsZUNvbnN0cnVjdG9yIHtcbiAgICByZXR1cm4gVEZpbGUgYXMgVEZpbGVDb25zdHJ1Y3Rvcjtcbn1cbiIsICJpbXBvcnQge1xuICAgIHR5cGUgQXBwLFxuICAgIFRGaWxlXG59IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB7IGdldFRGaWxlQ29uc3RydWN0b3IgfSBmcm9tICcuLi9Db25zdHJ1Y3RvcnMvZ2V0VEZpbGVDb25zdHJ1Y3Rvci50cyc7XG5pbXBvcnQgeyBwYXJlbnRGb2xkZXJQYXRoIH0gZnJvbSAnLi4vVXRpbHMvUGF0aFV0aWxzLmpzJztcbmltcG9ydCB7IGNyZWF0ZVRGb2xkZXJJbnN0YW5jZSB9IGZyb20gJy4vY3JlYXRlVEZvbGRlckluc3RhbmNlLnRzJztcblxuLyoqXG4gKiBDcmVhdGVzIGFuZCBwcm9wZXJseSBpbml0aWFsaXplcyB0aGUgaW5zdGFuY2Ugb2YgVEZpbGUgZXZlbiB0aGUgdW5kZXJseWluZyBmaWxlIGRvZXMgbm90IGV4aXN0LlxuICogVGhpcyBkb2Vzbid0IGNyZWF0ZSB0aGUgbWlzc2luZyBmaWxlIG9uIHRoZSBmaWxlIHN5c3RlbS5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRGaWxlSW5zdGFuY2UoYXBwOiBBcHAsIHBhdGg6IHN0cmluZyk6IFRGaWxlIHtcbiAgICBsZXQgZmlsZSA9IGFwcC52YXVsdC5nZXRGaWxlQnlQYXRoKHBhdGgpO1xuICAgIGlmIChmaWxlKSB7XG4gICAgICAgIHJldHVybiBmaWxlO1xuICAgIH1cblxuICAgIGZpbGUgPSBuZXcgKGdldFRGaWxlQ29uc3RydWN0b3IoKSkoYXBwLnZhdWx0LCBwYXRoKTtcbiAgICBmaWxlLnBhcmVudCA9IGNyZWF0ZVRGb2xkZXJJbnN0YW5jZShhcHAsIHBhcmVudEZvbGRlclBhdGgocGF0aCkpO1xuICAgIGZpbGUuZGVsZXRlZCA9IHRydWU7XG4gICAgcmV0dXJuIGZpbGU7XG59XG4iLCAiaW1wb3J0IHR5cGUge1xuICAgIFJlZmVyZW5jZSxcbiAgICBSZWZlcmVuY2VDYWNoZVxufSBmcm9tICdvYnNpZGlhbic7XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIHJlZmVyZW5jZSBpcyBhIHJlZmVyZW5jZSBjYWNoZS5cbiAqXG4gKiBAcGFyYW0gcmVmZXJlbmNlIC0gVGhlIHJlZmVyZW5jZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIHJlZmVyZW5jZSBpcyBhIHJlZmVyZW5jZSBjYWNoZS5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmVmZXJlbmNlQ2FjaGUocmVmZXJlbmNlOiBSZWZlcmVuY2UpOiByZWZlcmVuY2UgaXMgUmVmZXJlbmNlQ2FjaGUge1xuICAgIHJldHVybiAhIShyZWZlcmVuY2UgYXMgUGFydGlhbDxSZWZlcmVuY2VDYWNoZT4pLnBvc2l0aW9uO1xufVxuIiwgImltcG9ydCB0eXBlIHtcbiAgICBFbWJlZENhY2hlLFxuICAgIFJlZmVyZW5jZVxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgeyBpc1JlZmVyZW5jZUNhY2hlIH0gZnJvbSAnLi9pc1JlZmVyZW5jZUNhY2hlLnRzJztcblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgcmVmZXJlbmNlIGlzIGFuIGVtYmVkIGNhY2hlLlxuICpcbiAqIEBwYXJhbSByZWZlcmVuY2UgLSBUaGUgcmVmZXJlbmNlIHRvIGNoZWNrLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgcmVmZXJlbmNlIGlzIGFuIGVtYmVkIGNhY2hlLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gaXNFbWJlZENhY2hlKHJlZmVyZW5jZTogUmVmZXJlbmNlKTogcmVmZXJlbmNlIGlzIEVtYmVkQ2FjaGUge1xuICAgIHJldHVybiBpc1JlZmVyZW5jZUNhY2hlKHJlZmVyZW5jZSkgJiYgcmVmZXJlbmNlLm9yaWdpbmFsWzBdID09PSAnISc7XG59XG4iLCAiaW1wb3J0IHR5cGUge1xuICAgIEZyb250bWF0dGVyTGlua0NhY2hlLFxuICAgIFJlZmVyZW5jZVxufSBmcm9tICdvYnNpZGlhbic7XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIHJlZmVyZW5jZSBpcyBhIGZyb250bWF0dGVyIGxpbmsgY2FjaGUuXG4gKlxuICogQHBhcmFtIHJlZmVyZW5jZSAtIFRoZSByZWZlcmVuY2UgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSByZWZlcmVuY2UgaXMgYSBmcm9udG1hdHRlciBsaW5rIGNhY2hlLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gaXNGcm9udG1hdHRlckxpbmtDYWNoZShyZWZlcmVuY2U6IFJlZmVyZW5jZSk6IHJlZmVyZW5jZSBpcyBGcm9udG1hdHRlckxpbmtDYWNoZSB7XG4gICAgcmV0dXJuICEhKHJlZmVyZW5jZSBhcyBQYXJ0aWFsPEZyb250bWF0dGVyTGlua0NhY2hlPikua2V5O1xufVxuIiwgImltcG9ydCB0eXBlIHtcbiAgICBMaW5rQ2FjaGUsXG4gICAgUmVmZXJlbmNlXG59IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB7IGlzUmVmZXJlbmNlQ2FjaGUgfSBmcm9tICcuL2lzUmVmZXJlbmNlQ2FjaGUudHMnO1xuXG4vKipcbiAqIENoZWNrIGlmIHRoZSByZWZlcmVuY2UgaXMgYSBsaW5rIGNhY2hlLlxuICpcbiAqIEBwYXJhbSByZWZlcmVuY2UgLSBUaGUgcmVmZXJlbmNlIHRvIGNoZWNrLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgcmVmZXJlbmNlIGlzIGEgbGluayBjYWNoZS5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTGlua0NhY2hlKHJlZmVyZW5jZTogUmVmZXJlbmNlKTogcmVmZXJlbmNlIGlzIExpbmtDYWNoZSB7XG4gICAgcmV0dXJuIGlzUmVmZXJlbmNlQ2FjaGUocmVmZXJlbmNlKSAmJiByZWZlcmVuY2Uub3JpZ2luYWxbMF0gIT09ICchJztcbn1cbiIsICIvKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IEZpbGVFeHRlbnNpb24gPSB7XG4gICAgXzNncDogJzNncCcsXG4gICAgYXZpZjogJ2F2aWYnLFxuICAgIGJtcDogJ2JtcCcsXG4gICAgY2FudmFzOiAnY2FudmFzJyxcbiAgICBmbGFjOiAnZmxhYycsXG4gICAgZ2lmOiAnZ2lmJyxcbiAgICBqcGVnOiAnanBlZycsXG4gICAganBnOiAnanBnJyxcbiAgICBtNGE6ICdtNGEnLFxuICAgIG1kOiAnbWQnLFxuICAgIG1rdjogJ21rdicsXG4gICAgbW92OiAnbW92JyxcbiAgICBtcDM6ICdtcDMnLFxuICAgIG1wNDogJ21wNCcsXG4gICAgb2dhOiAnb2dhJyxcbiAgICBvZ2c6ICdvZ2cnLFxuICAgIG9ndjogJ29ndicsXG4gICAgb3B1czogJ29wdXMnLFxuICAgIHBkZjogJ3BkZicsXG4gICAgcG5nOiAncG5nJyxcbiAgICBzdmc6ICdzdmcnLFxuICAgIHdhdjogJ3dhdicsXG4gICAgd2VibTogJ3dlYm0nLFxuICAgIHdlYnA6ICd3ZWJwJ1xufSBhcyBjb25zdDtcbiIsICIvKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IEludGVybmFsUGx1Z2luTmFtZSA9IHtcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogQXVkaW8gcmVjb3JkZXJcbiAgICAgKi9cbiAgICBBdWRpb1JlY29yZGVyOiAnYXVkaW8tcmVjb3JkZXInLFxuICAgIC8qKlxuICAgICAqIFBsdWdpbiBuYW1lIGluIFVJOiBCYWNrbGlua3NcbiAgICAgKi9cbiAgICBCYWNrbGluazogJ2JhY2tsaW5rJyxcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogQm9va21hcmtzXG4gICAgICovXG4gICAgQm9va21hcmtzOiAnYm9va21hcmtzJyxcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogV2ViIHZpZXdlclxuICAgICAqL1xuICAgIEJyb3dzZXI6ICdicm93c2VyJyxcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogQ2FudmFzXG4gICAgICovXG4gICAgQ2FudmFzOiAnY2FudmFzJyxcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogQ29tbWFuZCBwYWxldHRlXG4gICAgICovXG4gICAgQ29tbWFuZFBhbGV0dGU6ICdjb21tYW5kLXBhbGV0dGUnLFxuICAgIC8qKlxuICAgICAqIFBsdWdpbiBuYW1lIGluIFVJOiBEYWlseSBub3Rlc1xuICAgICAqL1xuICAgIERhaWx5Tm90ZXM6ICdkYWlseS1ub3RlcycsXG4gICAgLyoqXG4gICAgICogUGx1Z2luIG5hbWUgaW4gVUk6IChoaWRkZW4pXG4gICAgICovXG4gICAgRWRpdG9yU3RhdHVzOiAnZWRpdG9yLXN0YXR1cycsXG4gICAgLyoqXG4gICAgICogUGx1Z2luIG5hbWUgaW4gVUk6IEZpbGVzXG4gICAgICovXG4gICAgRmlsZUV4cGxvcmVyOiAnZmlsZS1leHBsb3JlcicsXG4gICAgLyoqXG4gICAgICogUGx1Z2luIG5hbWUgaW4gVUk6IEZpbGUgcmVjb3ZlcnlcbiAgICAgKi9cbiAgICBGaWxlUmVjb3Zlcnk6ICdmaWxlLXJlY292ZXJ5JyxcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogU2VhcmNoXG4gICAgICovXG4gICAgR2xvYmFsU2VhcmNoOiAnZ2xvYmFsLXNlYXJjaCcsXG4gICAgLyoqXG4gICAgICogUGx1Z2luIG5hbWUgaW4gVUk6IEdyYXBoIHZpZXdcbiAgICAgKi9cbiAgICBHcmFwaDogJ2dyYXBoJyxcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogRm9ybWF0IGNvbnZlcnRlclxuICAgICAqL1xuICAgIE1hcmtkb3duSW1wb3J0ZXI6ICdtYXJrZG93bi1pbXBvcnRlcicsXG4gICAgLyoqXG4gICAgICogUGx1Z2luIG5hbWUgaW4gVUk6IE5vdGUgY29tcG9zZXJcbiAgICAgKi9cbiAgICBOb3RlQ29tcG9zZXI6ICdub3RlLWNvbXBvc2VyJyxcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogT3V0Z29pbmcgbGlua3NcbiAgICAgKi9cbiAgICBPdXRnb2luZ0xpbms6ICdvdXRnb2luZy1saW5rJyxcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogT3V0bGluZVxuICAgICAqL1xuICAgIE91dGxpbmU6ICdvdXRsaW5lJyxcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogUGFnZSBwcmV2aWV3XG4gICAgICovXG4gICAgUGFnZVByZXZpZXc6ICdwYWdlLXByZXZpZXcnLFxuICAgIC8qKlxuICAgICAqIFBsdWdpbiBuYW1lIGluIFVJOiBQcm9wZXJ0aWVzIHZpZXdcbiAgICAgKi9cbiAgICBQcm9wZXJ0aWVzOiAncHJvcGVydGllcycsXG4gICAgLyoqXG4gICAgICogUGx1Z2luIG5hbWUgaW4gVUk6IFB1Ymxpc2hcbiAgICAgKi9cbiAgICBQdWJsaXNoOiAncHVibGlzaCcsXG4gICAgLyoqXG4gICAgICogUGx1Z2luIG5hbWUgaW4gVUk6IFJhbmRvbSBub3RlXG4gICAgICovXG4gICAgUmFuZG9tTm90ZTogJ3JhbmRvbS1ub3RlJyxcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogU2xhc2ggY29tbWFuZHNcbiAgICAgKi9cbiAgICBTbGFzaENvbW1hbmQ6ICdzbGFzaC1jb21tYW5kJyxcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogU2xpZGVzXG4gICAgICovXG4gICAgU2xpZGVzOiAnc2xpZGVzJyxcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogUXVpY2sgU3dpdGNoZXJcbiAgICAgKi9cbiAgICBTd2l0Y2hlcjogJ3N3aXRjaGVyJyxcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogU3luY1xuICAgICAqL1xuICAgIFN5bmM6ICdzeW5jJyxcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogVGFncyB2aWV3XG4gICAgICovXG4gICAgVGFnUGFuZTogJ3RhZy1wYW5lJyxcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogVGVtcGxhdGVzXG4gICAgICovXG4gICAgVGVtcGxhdGVzOiAndGVtcGxhdGVzJyxcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogV29yZCBjb3VudFxuICAgICAqL1xuICAgIFdvcmRDb3VudDogJ3dvcmQtY291bnQnLFxuICAgIC8qKlxuICAgICAqIFBsdWdpbiBuYW1lIGluIFVJOiBXb3Jrc3BhY2VzXG4gICAgICovXG4gICAgV29ya3NwYWNlczogJ3dvcmtzcGFjZXMnLFxuICAgIC8qKlxuICAgICAqIFBsdWdpbiBuYW1lIGluIFVJOiBVbmlxdWUgbm90ZSBjcmVhdG9yXG4gICAgICovXG4gICAgWmtQcmVmaXhlcjogJ3prLXByZWZpeGVyJ1xufSBhcyBjb25zdDtcbiIsICJpbXBvcnQgeyBJbnRlcm5hbFBsdWdpbk5hbWUgfSBmcm9tICcuL0ludGVybmFsUGx1Z2luTmFtZS5qcyc7XG5cbi8qKiBAcHVibGljICovXG5leHBvcnQgY29uc3QgVmlld1R5cGUgPSB7XG4gICAgQWxsUHJvcGVydGllczogJ2FsbC1wcm9wZXJ0aWVzJyxcbiAgICBBdWRpbzogJ2F1ZGlvJyxcbiAgICBCYWNrbGluazogSW50ZXJuYWxQbHVnaW5OYW1lLkJhY2tsaW5rLFxuICAgIEJvb2ttYXJrczogSW50ZXJuYWxQbHVnaW5OYW1lLkJvb2ttYXJrcyxcbiAgICBCcm93c2VyOiAnYnJvd3NlcicsXG4gICAgQnJvd3Nlckhpc3Rvcnk6ICdicm93c2VyLWhpc3RvcnknLFxuICAgIENhbnZhczogSW50ZXJuYWxQbHVnaW5OYW1lLkNhbnZhcyxcbiAgICBFbXB0eTogJ2VtcHR5JyxcbiAgICBGaWxlRXhwbG9yZXI6IEludGVybmFsUGx1Z2luTmFtZS5GaWxlRXhwbG9yZXIsXG4gICAgRmlsZVByb3BlcnRpZXM6ICdmaWxlLXByb3BlcnRpZXMnLFxuICAgIEdyYXBoOiBJbnRlcm5hbFBsdWdpbk5hbWUuR3JhcGgsXG4gICAgSW1hZ2U6ICdpbWFnZScsXG4gICAgTG9jYWxHcmFwaDogJ2xvY2FsZ3JhcGgnLFxuICAgIE1hcmtkb3duOiAnbWFya2Rvd24nLFxuICAgIE91dGdvaW5nTGluazogSW50ZXJuYWxQbHVnaW5OYW1lLk91dGdvaW5nTGluayxcbiAgICBPdXRsaW5lOiBJbnRlcm5hbFBsdWdpbk5hbWUuT3V0bGluZSxcbiAgICBQZGY6ICdwZGYnLFxuICAgIFJlbGVhc2VOb3RlczogJ3JlbGVhc2Utbm90ZXMnLFxuICAgIFNlYXJjaDogJ3NlYXJjaCcsXG4gICAgU3luYzogJ3N5bmMnLFxuICAgIFRhZzogJ3RhZycsXG4gICAgVmlkZW86ICd2aWRlbydcbn0gYXMgY29uc3Q7XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IEludGVybmFsUGx1Z2luQ29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi9pbnRlcm5hbHMvQ29uc3RydWN0b3JzL0ludGVybmFsUGx1Z2luQ29uc3RydWN0b3IudHMnO1xuXG4vKipcbiAqIEdldCB0aGUgSW50ZXJuYWxQbHVnaW4gY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBUaGUgSW50ZXJuYWxQbHVnaW4gY29uc3RydWN0b3IuXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnRlcm5hbFBsdWdpbkNvbnN0cnVjdG9yPEluc3RhbmNlPihhcHA6IEFwcCk6IEludGVybmFsUGx1Z2luQ29uc3RydWN0b3I8SW5zdGFuY2U+IHtcbiAgICBjb25zdCBhbnlQbHVnaW4gPSBPYmplY3QudmFsdWVzKGFwcC5pbnRlcm5hbFBsdWdpbnMucGx1Z2lucylbMF07XG4gICAgaWYgKCFhbnlQbHVnaW4pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBpbnRlcm5hbCBwbHVnaW4gZm91bmQnKTtcbiAgICB9XG4gICAgcmV0dXJuIGFueVBsdWdpbi5jb25zdHJ1Y3RvciBhcyBJbnRlcm5hbFBsdWdpbkNvbnN0cnVjdG9yPEluc3RhbmNlPjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxQbHVnaW5zQ29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi9pbnRlcm5hbHMvQ29uc3RydWN0b3JzL0ludGVybmFsUGx1Z2luc0NvbnN0cnVjdG9yLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIEludGVybmFsUGx1Z2lucyBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcCBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIFRoZSBJbnRlcm5hbFBsdWdpbnMgY29uc3RydWN0b3IuXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnRlcm5hbFBsdWdpbnNDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IEludGVybmFsUGx1Z2luc0NvbnN0cnVjdG9yIHtcbiAgICByZXR1cm4gYXBwLmludGVybmFsUGx1Z2lucy5jb25zdHJ1Y3RvciBhcyBJbnRlcm5hbFBsdWdpbnNDb25zdHJ1Y3Rvcjtcbn1cbiIsICJpbXBvcnQge1xuICAgIEFwcFxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IEFwcENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vaW50ZXJuYWxzL0NvbnN0cnVjdG9ycy9BcHBDb25zdHJ1Y3Rvci50cyc7XG5cbi8qKlxuICogR2V0IHRoZSBBcHAgY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIEFwcCBjb25zdHJ1Y3Rvci5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFwcENvbnN0cnVjdG9yKCk6IEFwcENvbnN0cnVjdG9yIHtcbiAgICByZXR1cm4gQXBwIGFzIEFwcENvbnN0cnVjdG9yO1xufVxuIiwgImltcG9ydCB0eXBlIHtcbiAgICBBcHAsXG4gICAgQ29uc3RydWN0b3IsXG4gICAgVmlld1xufSBmcm9tICdvYnNpZGlhbic7XG5cbi8qKlxuICogR2V0IHRoZSB2aWV3IGNvbnN0cnVjdG9yIGJ5IHZpZXcgdHlwZS5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcC5cbiAqIEBwYXJhbSB2aWV3VHlwZSAtIFRoZSB2aWV3IHR5cGUuXG4gKiBAcmV0dXJucyBUaGUgdmlldyBjb25zdHJ1Y3Rvci5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGU8VFZpZXcgZXh0ZW5kcyBWaWV3ID0gVmlldz4oXG4gICAgYXBwOiBBcHAsXG4gICAgdmlld1R5cGU6IHN0cmluZ1xuKTogQ29uc3RydWN0b3I8VFZpZXc+IHtcbiAgICBjb25zdCBsZWFmID0gYXBwLndvcmtzcGFjZS5jcmVhdGVMZWFmSW5UYWJHcm91cCgpO1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHZpZXdDcmVhdG9yID0gYXBwLnZpZXdSZWdpc3RyeS5nZXRWaWV3Q3JlYXRvckJ5VHlwZSh2aWV3VHlwZSk7XG4gICAgICAgIGlmICghdmlld0NyZWF0b3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVmlldyBjcmVhdG9yIG5vdCBmb3VuZCcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZpZXcgPSB2aWV3Q3JlYXRvcihsZWFmKTtcbiAgICAgICAgcmV0dXJuIHZpZXcuY29uc3RydWN0b3IgYXMgQ29uc3RydWN0b3I8VFZpZXc+O1xuICAgIH0gZmluYWxseSB7XG4gICAgICAgIGxlYWYuZGV0YWNoKCk7XG4gICAgfVxufVxuIiwgImltcG9ydCB0eXBlIHtcbiAgICBBcHBcbn0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUgeyBPdXRsaW5lVmlld0NvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL0NvbnN0cnVjdG9ycy9WaWV3cy9PdXRsaW5lVmlld0NvbnN0cnVjdG9yLnRzJztcbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vQ29uc3RhbnRzL1ZpZXdUeXBlLnRzJztcbmltcG9ydCB7IGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUgfSBmcm9tICcuL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUgT3V0bGluZVZpZXcgY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIE91dGxpbmVWaWV3IGNvbnN0cnVjdG9yLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3V0bGluZVZpZXdDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IE91dGxpbmVWaWV3Q29uc3RydWN0b3Ige1xuICAgIHJldHVybiBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlKGFwcCwgVmlld1R5cGUuT3V0bGluZSkgYXMgT3V0bGluZVZpZXdDb25zdHJ1Y3Rvcjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7XG4gICAgQXBwXG59IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgQnJvd3NlclZpZXdDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9Db25zdHJ1Y3RvcnMvVmlld3MvQnJvd3NlclZpZXdDb25zdHJ1Y3Rvci5qcyc7XG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJy4uLy4uL0NvbnN0YW50cy9WaWV3VHlwZS50cyc7XG5pbXBvcnQgeyBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlIH0gZnJvbSAnLi9nZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIEJyb3dzZXJWaWV3IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSBCcm93c2VyVmlldyBjb25zdHJ1Y3Rvci5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJyb3dzZXJWaWV3Q29uc3RydWN0b3IoYXBwOiBBcHApOiBCcm93c2VyVmlld0NvbnN0cnVjdG9yIHtcbiAgICByZXR1cm4gZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZShhcHAsIFZpZXdUeXBlLkJyb3dzZXIpIGFzIEJyb3dzZXJWaWV3Q29uc3RydWN0b3I7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFR5cGVkVmlld0NvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL0NvbnN0cnVjdG9ycy9WaWV3cy9UeXBlZFZpZXdDb25zdHJ1Y3Rvci50cyc7XG5pbXBvcnQgdHlwZSB7IFJlbGVhc2VOb3Rlc1ZpZXcgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvVmlld3MvUmVsZWFzZU5vdGVzVmlldy5qcyc7XG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJy4uLy4uL0NvbnN0YW50cy9WaWV3VHlwZS50cyc7XG5pbXBvcnQgeyBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlIH0gZnJvbSAnLi9nZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIFJlbGVhc2VOb3Rlc1ZpZXcgY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIFJlbGVhc2VOb3Rlc1ZpZXcgY29uc3RydWN0b3IuXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRSZWxlYXNlTm90ZXNWaWV3Q29uc3RydWN0b3IoYXBwOiBBcHApOiBUeXBlZFZpZXdDb25zdHJ1Y3RvcjxSZWxlYXNlTm90ZXNWaWV3PiB7XG4gICAgcmV0dXJuIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUoYXBwLCBWaWV3VHlwZS5SZWxlYXNlTm90ZXMpIGFzIFR5cGVkVmlld0NvbnN0cnVjdG9yPFJlbGVhc2VOb3Rlc1ZpZXc+O1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUgeyBUeXBlZFZpZXdDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9Db25zdHJ1Y3RvcnMvVmlld3MvVHlwZWRWaWV3Q29uc3RydWN0b3IudHMnO1xuaW1wb3J0IHR5cGUgeyBQZGZWaWV3IH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL1ZpZXdzL1BkZlZpZXcuanMnO1xuaW1wb3J0IHsgVmlld1R5cGUgfSBmcm9tICcuLi8uLi9Db25zdGFudHMvVmlld1R5cGUudHMnO1xuaW1wb3J0IHsgZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZSB9IGZyb20gJy4vZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZS50cyc7XG5cbi8qKlxuICogR2V0IHRoZSBQZGZWaWV3IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSBQZGZWaWV3IGNvbnN0cnVjdG9yLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGRmVmlld0NvbnN0cnVjdG9yKGFwcDogQXBwKTogVHlwZWRWaWV3Q29uc3RydWN0b3I8UGRmVmlldz4ge1xuICAgIHJldHVybiBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlKGFwcCwgVmlld1R5cGUuUGRmKSBhcyBUeXBlZFZpZXdDb25zdHJ1Y3RvcjxQZGZWaWV3Pjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7XG4gICAgQXBwXG59IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgU3luY1ZpZXdDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9Db25zdHJ1Y3RvcnMvVmlld3MvU3luY1ZpZXdDb25zdHJ1Y3Rvci50cyc7XG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJy4uLy4uL0NvbnN0YW50cy9WaWV3VHlwZS50cyc7XG5pbXBvcnQgeyBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlIH0gZnJvbSAnLi9nZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIFN5bmNWaWV3IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSBTeW5jVmlldyBjb25zdHJ1Y3Rvci5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN5bmNWaWV3Q29uc3RydWN0b3IoYXBwOiBBcHApOiBTeW5jVmlld0NvbnN0cnVjdG9yIHtcbiAgICByZXR1cm4gZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZShhcHAsIFZpZXdUeXBlLlN5bmMpIGFzIFN5bmNWaWV3Q29uc3RydWN0b3I7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFR5cGVkVmlld0NvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL0NvbnN0cnVjdG9ycy9WaWV3cy9UeXBlZFZpZXdDb25zdHJ1Y3Rvci50cyc7XG5pbXBvcnQgdHlwZSB7IE91dGdvaW5nTGlua1ZpZXcgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvSW50ZXJuYWxQbHVnaW5zL091dGdvaW5nTGluay9PdXRnb2luZ0xpbmtWaWV3LmpzJztcbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vQ29uc3RhbnRzL1ZpZXdUeXBlLnRzJztcbmltcG9ydCB7IGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUgfSBmcm9tICcuL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUgT3V0Z29pbmdMaW5rVmlldyBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUgT3V0Z29pbmdMaW5rVmlldyBjb25zdHJ1Y3Rvci5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE91dGdvaW5nTGlua1ZpZXdDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IFR5cGVkVmlld0NvbnN0cnVjdG9yPE91dGdvaW5nTGlua1ZpZXc+IHtcbiAgICByZXR1cm4gZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZShhcHAsIFZpZXdUeXBlLk91dGdvaW5nTGluaykgYXMgVHlwZWRWaWV3Q29uc3RydWN0b3I8T3V0Z29pbmdMaW5rVmlldz47XG59XG4iLCAiaW1wb3J0IHR5cGUge1xuICAgIEFwcFxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IENhbnZhc1ZpZXdDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9Db25zdHJ1Y3RvcnMvVmlld3MvQ2FudmFzVmlld0NvbnN0cnVjdG9yLmpzJztcbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vQ29uc3RhbnRzL1ZpZXdUeXBlLnRzJztcbmltcG9ydCB7IGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUgfSBmcm9tICcuL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUgQ2FudmFzVmlldyBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUgQ2FudmFzVmlldyBjb25zdHJ1Y3Rvci5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENhbnZhc1ZpZXdDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IENhbnZhc1ZpZXdDb25zdHJ1Y3RvciB7XG4gICAgcmV0dXJuIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUoYXBwLCBWaWV3VHlwZS5DYW52YXMpIGFzIENhbnZhc1ZpZXdDb25zdHJ1Y3Rvcjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgVHlwZWRWaWV3Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvQ29uc3RydWN0b3JzL1ZpZXdzL1R5cGVkVmlld0NvbnN0cnVjdG9yLnRzJztcbmltcG9ydCB0eXBlIHsgVGFnVmlldyB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9WaWV3cy9UYWdWaWV3LmpzJztcbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vQ29uc3RhbnRzL1ZpZXdUeXBlLnRzJztcbmltcG9ydCB7IGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUgfSBmcm9tICcuL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUgVGFnVmlldyBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUgVGFnVmlldyBjb25zdHJ1Y3Rvci5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRhZ1ZpZXdDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IFR5cGVkVmlld0NvbnN0cnVjdG9yPFRhZ1ZpZXc+IHtcbiAgICByZXR1cm4gZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZShhcHAsIFZpZXdUeXBlLlRhZykgYXMgVHlwZWRWaWV3Q29uc3RydWN0b3I8VGFnVmlldz47XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFR5cGVkVmlld0NvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL0NvbnN0cnVjdG9ycy9WaWV3cy9UeXBlZFZpZXdDb25zdHJ1Y3Rvci50cyc7XG5pbXBvcnQgdHlwZSB7IEF1ZGlvVmlldyB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9WaWV3cy9BdWRpb1ZpZXcuanMnO1xuaW1wb3J0IHsgVmlld1R5cGUgfSBmcm9tICcuLi8uLi9Db25zdGFudHMvVmlld1R5cGUudHMnO1xuaW1wb3J0IHsgZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZSB9IGZyb20gJy4vZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZS50cyc7XG5cbi8qKlxuICogR2V0IHRoZSBBdWRpb1ZpZXcgY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIEF1ZGlvVmlldyBjb25zdHJ1Y3Rvci5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEF1ZGlvVmlld0NvbnN0cnVjdG9yKGFwcDogQXBwKTogVHlwZWRWaWV3Q29uc3RydWN0b3I8QXVkaW9WaWV3PiB7XG4gICAgcmV0dXJuIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUoYXBwLCBWaWV3VHlwZS5BdWRpbykgYXMgVHlwZWRWaWV3Q29uc3RydWN0b3I8QXVkaW9WaWV3Pjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgVHlwZWRWaWV3Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvQ29uc3RydWN0b3JzL1ZpZXdzL1R5cGVkVmlld0NvbnN0cnVjdG9yLnRzJztcbmltcG9ydCB0eXBlIHsgTG9jYWxHcmFwaFZpZXcgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvSW50ZXJuYWxQbHVnaW5zL0dyYXBoL0xvY2FsR3JhcGhWaWV3LmpzJztcbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vQ29uc3RhbnRzL1ZpZXdUeXBlLnRzJztcbmltcG9ydCB7IGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUgfSBmcm9tICcuL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUgTG9jYWxHcmFwaFZpZXcgY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIExvY2FsR3JhcGhWaWV3IGNvbnN0cnVjdG9yLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TG9jYWxHcmFwaFZpZXdDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IFR5cGVkVmlld0NvbnN0cnVjdG9yPExvY2FsR3JhcGhWaWV3PiB7XG4gICAgcmV0dXJuIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUoYXBwLCBWaWV3VHlwZS5Mb2NhbEdyYXBoKSBhcyBUeXBlZFZpZXdDb25zdHJ1Y3RvcjxMb2NhbEdyYXBoVmlldz47XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFR5cGVkVmlld0NvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL0NvbnN0cnVjdG9ycy9WaWV3cy9UeXBlZFZpZXdDb25zdHJ1Y3Rvci50cyc7XG5pbXBvcnQgdHlwZSB7IEJhY2tsaW5rVmlldyB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9JbnRlcm5hbFBsdWdpbnMvQmFja2xpbmsvQmFja2xpbmtWaWV3LmpzJztcbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vQ29uc3RhbnRzL1ZpZXdUeXBlLnRzJztcbmltcG9ydCB7IGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUgfSBmcm9tICcuL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUgQmFja2xpbmtWaWV3IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSBCYWNrbGlua1ZpZXcgY29uc3RydWN0b3IuXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRCYWNrbGlua1ZpZXdDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IFR5cGVkVmlld0NvbnN0cnVjdG9yPEJhY2tsaW5rVmlldz4ge1xuICAgIHJldHVybiBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlKGFwcCwgVmlld1R5cGUuQmFja2xpbmspIGFzIFR5cGVkVmlld0NvbnN0cnVjdG9yPEJhY2tsaW5rVmlldz47XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFR5cGVkVmlld0NvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL0NvbnN0cnVjdG9ycy9WaWV3cy9UeXBlZFZpZXdDb25zdHJ1Y3Rvci50cyc7XG5pbXBvcnQgdHlwZSB7IEZpbGVFeHBsb3JlclZpZXcgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvSW50ZXJuYWxQbHVnaW5zL0ZpbGVFeHBsb3Jlci9GaWxlRXhwbG9yZXJWaWV3LmpzJztcbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vQ29uc3RhbnRzL1ZpZXdUeXBlLnRzJztcbmltcG9ydCB7IGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUgfSBmcm9tICcuL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUgRmlsZUV4cGxvcmVyVmlldyBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUgRmlsZUV4cGxvcmVyVmlldyBjb25zdHJ1Y3Rvci5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbGVFeHBsb3JlclZpZXdDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IFR5cGVkVmlld0NvbnN0cnVjdG9yPEZpbGVFeHBsb3JlclZpZXc+IHtcbiAgICByZXR1cm4gZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZShhcHAsIFZpZXdUeXBlLkZpbGVFeHBsb3JlcikgYXMgVHlwZWRWaWV3Q29uc3RydWN0b3I8RmlsZUV4cGxvcmVyVmlldz47XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFR5cGVkVmlld0NvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL0NvbnN0cnVjdG9ycy9WaWV3cy9UeXBlZFZpZXdDb25zdHJ1Y3Rvci50cyc7XG5pbXBvcnQgdHlwZSB7IFNlYXJjaFZpZXcgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvSW50ZXJuYWxQbHVnaW5zL0dsb2JhbFNlYXJjaC9TZWFyY2hWaWV3LmpzJztcbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vQ29uc3RhbnRzL1ZpZXdUeXBlLnRzJztcbmltcG9ydCB7IGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUgfSBmcm9tICcuL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUgU2VhcmNoVmlldyBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUgU2VhcmNoVmlldyBjb25zdHJ1Y3Rvci5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNlYXJjaFZpZXdDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IFR5cGVkVmlld0NvbnN0cnVjdG9yPFNlYXJjaFZpZXc+IHtcbiAgICByZXR1cm4gZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZShhcHAsIFZpZXdUeXBlLlNlYXJjaCkgYXMgVHlwZWRWaWV3Q29uc3RydWN0b3I8U2VhcmNoVmlldz47XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFR5cGVkVmlld0NvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL0NvbnN0cnVjdG9ycy9WaWV3cy9UeXBlZFZpZXdDb25zdHJ1Y3Rvci50cyc7XG5pbXBvcnQgdHlwZSB7IFZpZGVvVmlldyB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9WaWV3cy9WaWRlb1ZpZXcuanMnO1xuaW1wb3J0IHsgVmlld1R5cGUgfSBmcm9tICcuLi8uLi9Db25zdGFudHMvVmlld1R5cGUudHMnO1xuaW1wb3J0IHsgZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZSB9IGZyb20gJy4vZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZS50cyc7XG5cbi8qKlxuICogR2V0IHRoZSBWaWRlb1ZpZXcgY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIFZpZGVvVmlldyBjb25zdHJ1Y3Rvci5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFZpZGVvVmlld0NvbnN0cnVjdG9yKGFwcDogQXBwKTogVHlwZWRWaWV3Q29uc3RydWN0b3I8VmlkZW9WaWV3PiB7XG4gICAgcmV0dXJuIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUoYXBwLCBWaWV3VHlwZS5WaWRlbykgYXMgVHlwZWRWaWV3Q29uc3RydWN0b3I8VmlkZW9WaWV3Pjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgVHlwZWRWaWV3Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvQ29uc3RydWN0b3JzL1ZpZXdzL1R5cGVkVmlld0NvbnN0cnVjdG9yLnRzJztcbmltcG9ydCB0eXBlIHsgSW1hZ2VWaWV3IH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL1ZpZXdzL0ltYWdlVmlldy5qcyc7XG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJy4uLy4uL0NvbnN0YW50cy9WaWV3VHlwZS50cyc7XG5pbXBvcnQgeyBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlIH0gZnJvbSAnLi9nZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIEltYWdlVmlldyBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUgSW1hZ2VWaWV3IGNvbnN0cnVjdG9yLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW1hZ2VWaWV3Q29uc3RydWN0b3IoYXBwOiBBcHApOiBUeXBlZFZpZXdDb25zdHJ1Y3RvcjxJbWFnZVZpZXc+IHtcbiAgICByZXR1cm4gZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZShhcHAsIFZpZXdUeXBlLkltYWdlKSBhcyBUeXBlZFZpZXdDb25zdHJ1Y3RvcjxJbWFnZVZpZXc+O1xufVxuIiwgImltcG9ydCB0eXBlIHtcbiAgICBBcHBcbn0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUge1xuICAgIEJyb3dzZXJIaXN0b3J5Vmlld0NvbnN0cnVjdG9yXG59IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9Db25zdHJ1Y3RvcnMvVmlld3MvQnJvd3Nlckhpc3RvcnlWaWV3Q29uc3RydWN0b3IuanMnO1xuaW1wb3J0IHsgVmlld1R5cGUgfSBmcm9tICcuLi8uLi9Db25zdGFudHMvVmlld1R5cGUudHMnO1xuaW1wb3J0IHsgZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZSB9IGZyb20gJy4vZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZS50cyc7XG5cbi8qKlxuICogR2V0IHRoZSBCcm93c2VySGlzdG9yeVZpZXcgY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIEJyb3dzZXJIaXN0b3J5VmlldyBjb25zdHJ1Y3Rvci5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJyb3dzZXJIaXN0b3J5Vmlld0NvbnN0cnVjdG9yKGFwcDogQXBwKTogQnJvd3Nlckhpc3RvcnlWaWV3Q29uc3RydWN0b3Ige1xuICAgIHJldHVybiBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlKGFwcCwgVmlld1R5cGUuQnJvd3Nlckhpc3RvcnkpIGFzIEJyb3dzZXJIaXN0b3J5Vmlld0NvbnN0cnVjdG9yO1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUgeyBUeXBlZFZpZXdDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9Db25zdHJ1Y3RvcnMvVmlld3MvVHlwZWRWaWV3Q29uc3RydWN0b3IudHMnO1xuaW1wb3J0IHR5cGUgeyBFbXB0eVZpZXcgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvVmlld3MvRW1wdHlWaWV3LmpzJztcbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vQ29uc3RhbnRzL1ZpZXdUeXBlLnRzJztcbmltcG9ydCB7IGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUgfSBmcm9tICcuL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUgRW1wdHlWaWV3IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSBFbXB0eVZpZXcgY29uc3RydWN0b3IuXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbXB0eVZpZXdDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IFR5cGVkVmlld0NvbnN0cnVjdG9yPEVtcHR5Vmlldz4ge1xuICAgIHJldHVybiBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlKGFwcCwgVmlld1R5cGUuRW1wdHkpIGFzIFR5cGVkVmlld0NvbnN0cnVjdG9yPEVtcHR5Vmlldz47XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFR5cGVkVmlld0NvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL0NvbnN0cnVjdG9ycy9WaWV3cy9UeXBlZFZpZXdDb25zdHJ1Y3Rvci50cyc7XG5pbXBvcnQgdHlwZSB7IEdyYXBoVmlldyB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9JbnRlcm5hbFBsdWdpbnMvR3JhcGgvR3JhcGhWaWV3LmpzJztcbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vQ29uc3RhbnRzL1ZpZXdUeXBlLnRzJztcbmltcG9ydCB7IGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUgfSBmcm9tICcuL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUgR3JhcGhWaWV3IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSBHcmFwaFZpZXcgY29uc3RydWN0b3IuXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRHcmFwaFZpZXdDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IFR5cGVkVmlld0NvbnN0cnVjdG9yPEdyYXBoVmlldz4ge1xuICAgIHJldHVybiBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlKGFwcCwgVmlld1R5cGUuR3JhcGgpIGFzIFR5cGVkVmlld0NvbnN0cnVjdG9yPEdyYXBoVmlldz47XG59XG4iLCAiaW1wb3J0IHR5cGUge1xuICAgIEFwcFxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7XG4gICAgRmlsZVByb3BlcnRpZXNWaWV3Q29uc3RydWN0b3Jcbn0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL0NvbnN0cnVjdG9ycy9WaWV3cy9GaWxlUHJvcGVydGllc1ZpZXdDb25zdHJ1Y3Rvci50cyc7XG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJy4uLy4uL0NvbnN0YW50cy9WaWV3VHlwZS50cyc7XG5pbXBvcnQgeyBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlIH0gZnJvbSAnLi9nZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIEZpbGVQcm9wZXJ0aWVzVmlldyBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUgRmlsZVByb3BlcnRpZXNWaWV3IGNvbnN0cnVjdG9yLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmlsZVByb3BlcnRpZXNWaWV3Q29uc3RydWN0b3IoYXBwOiBBcHApOiBGaWxlUHJvcGVydGllc1ZpZXdDb25zdHJ1Y3RvciB7XG4gICAgcmV0dXJuIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUoYXBwLCBWaWV3VHlwZS5GaWxlUHJvcGVydGllcykgYXMgRmlsZVByb3BlcnRpZXNWaWV3Q29uc3RydWN0b3I7XG59XG4iLCAiaW1wb3J0IHR5cGUge1xuICAgIEFwcFxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IEJvb2ttYXJrc1ZpZXdDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9Db25zdHJ1Y3RvcnMvVmlld3MvQm9va21hcmtzVmlld0NvbnN0cnVjdG9yLmpzJztcbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vQ29uc3RhbnRzL1ZpZXdUeXBlLnRzJztcbmltcG9ydCB7IGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUgfSBmcm9tICcuL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUgQm9va21hcmtzVmlldyBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUgQm9va21hcmtzVmlldyBjb25zdHJ1Y3Rvci5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJvb2ttYXJrc1ZpZXdDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IEJvb2ttYXJrc1ZpZXdDb25zdHJ1Y3RvciB7XG4gICAgcmV0dXJuIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUoYXBwLCBWaWV3VHlwZS5Cb29rbWFya3MpIGFzIEJvb2ttYXJrc1ZpZXdDb25zdHJ1Y3Rvcjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7XG4gICAgQXBwLFxuICAgIE1hcmtkb3duVmlld1xufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFR5cGVkVmlld0NvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL0NvbnN0cnVjdG9ycy9WaWV3cy9UeXBlZFZpZXdDb25zdHJ1Y3Rvci50cyc7XG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJy4uLy4uL0NvbnN0YW50cy9WaWV3VHlwZS50cyc7XG5pbXBvcnQgeyBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlIH0gZnJvbSAnLi9nZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIE1hcmtkb3duVmlldyBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUgTWFya2Rvd25WaWV3IGNvbnN0cnVjdG9yLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWFya2Rvd25WaWV3Q29uc3RydWN0b3IoYXBwOiBBcHApOiBUeXBlZFZpZXdDb25zdHJ1Y3RvcjxNYXJrZG93blZpZXc+IHtcbiAgICByZXR1cm4gZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZShhcHAsIFZpZXdUeXBlLk1hcmtkb3duKSBhcyBUeXBlZFZpZXdDb25zdHJ1Y3RvcjxNYXJrZG93blZpZXc+O1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUgeyBUeXBlZFZpZXdDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9Db25zdHJ1Y3RvcnMvVmlld3MvVHlwZWRWaWV3Q29uc3RydWN0b3IudHMnO1xuaW1wb3J0IHR5cGUgeyBBbGxQcm9wZXJ0aWVzVmlldyB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9JbnRlcm5hbFBsdWdpbnMvUHJvcGVydGllcy9BbGxQcm9wZXJ0aWVzVmlldy5qcyc7XG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJy4uLy4uL0NvbnN0YW50cy9WaWV3VHlwZS50cyc7XG5pbXBvcnQgeyBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlIH0gZnJvbSAnLi9nZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIEFsbFByb3BlcnRpZXNWaWV3IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSBBbGxQcm9wZXJ0aWVzVmlldyBjb25zdHJ1Y3Rvci5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFsbFByb3BlcnRpZXNWaWV3Q29uc3RydWN0b3IoYXBwOiBBcHApOiBUeXBlZFZpZXdDb25zdHJ1Y3RvcjxBbGxQcm9wZXJ0aWVzVmlldz4ge1xuICAgIHJldHVybiBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlKGFwcCwgVmlld1R5cGUuQWxsUHJvcGVydGllcykgYXMgVHlwZWRWaWV3Q29uc3RydWN0b3I8QWxsUHJvcGVydGllc1ZpZXc+O1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7OztBQ0dPLElBQU0sc0JBQU4sTUFBMkQ7QUFBQSxFQUN2RCxPQUF5QixvQkFBSSxJQUFJO0FBQUEsRUFFakMsSUFBSSxLQUFhLE9BQWdCO0FBQ3BDLFFBQUksU0FBUyxLQUFLLElBQUksR0FBRztBQUN6QixRQUFJLENBQUMsUUFBUTtBQUNULGVBQVMsQ0FBQztBQUNWLFdBQUssS0FBSyxJQUFJLEtBQUssTUFBTTtBQUFBLElBQzdCO0FBRUEsUUFBSSxDQUFDLE9BQU8sU0FBUyxLQUFLLEdBQUc7QUFDekIsYUFBTyxLQUFLLEtBQUs7QUFBQSxJQUNyQjtBQUFBLEVBQ0o7QUFBQSxFQUVPLE9BQU8sS0FBYSxPQUFnQjtBQUN2QyxVQUFNLFNBQVMsS0FBSyxJQUFJLEdBQUc7QUFDM0IsUUFBSSxDQUFDLFFBQVE7QUFDVDtBQUFBLElBQ0o7QUFDQSxXQUFPLE9BQU8sS0FBSztBQUVu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LElBQU0scUJBQXFCO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJOUIsZUFBZTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBSWYsVUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBSVYsV0FBVztBQUFBO0FBQUE7QUFBQTtBQUFBLEVBSVgsU0FBUztBQUFBO0FBQUE7QUFBQTtBQUFBLEVBSVQsUUFBUTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBSVIsZ0JBQWdCO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJaEIsWUFBWTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBSVosY0FBYztBQUFBO0FBQUE7QUFBQTtBQUFBLEVBSWQsY0FBYztBQUFBO0FBQUE7QUFBQTtBQUFBLEVBSWQsY0FBYztBQUFBO0FBQUE7QUFBQTtBQUFBLEVBSWQsY0FBYztBQUFBO0FBQUE7QUFBQTtBQUFBLEVBSWQsT0FBTztBQUFBO0FBQUE7QUFBQTtBQUFBLEVBSVAsa0JBQWtCO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJbEIsY0FBYztBQUFBO0FBQUE7QUFBQTtBQUFBLEVBSWQsY0FBYztBQUFBO0FBQUE7QUFBQTtBQUFBLEVBSWQsU0FBUztBQUFBO0FBQUE7QUFBQTtBQUFBLEVBSVQsYUFBYTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBSWIsWUFBWTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBSVosU0FBUztBQUFBO0FBQUE7QUFBQTtBQUFBLEVBSVQsWUFBWTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBSVosY0FBYztBQUFBO0FBQUE7QUFBQTtBQUFBLEVBSWQsUUFBUTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBSVIsVUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBSVYsTUFBTTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBSU4sU0FBUztBQUFBO0FBQUE7QUFBQTtBQUFBLEVBSVQsV0FBVztBQUFBO0FBQUE7QUFBQTtBQUFBLEVBSVgsV0FBVztBQUFBO0FBQUE7QUFBQTtBQUFBLEVBSVgsWUFBWTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBSVosWUFBWTtBQUNoQjs7O0FDbkhPLElBQU0sV0FBVztBQUFBLEVBQ3BCLGVBQWU7QUFBQSxFQUNmLE9BQU87QUFBQSxFQUNQLFVBQVUsbUJBQW1CO0FBQUEsRUFDN0IsV0FBVyxtQkFBbUI7QUFBQSxFQUM5QixTQUFTO0FBQUEsRUFDVCxnQkFBZ0I7QUFBQSxFQUNoQixRQUFRLG1CQUFtQjtBQUFBLEVBQzNCLE9BQU87QUFBQSxFQUNQLGNBQWMsbUJBQW1CO0FBQUEsRUFDakMsZ0JBQWdCO0FBQUEsRUFDaEIsT0FBTyxtQkFBbUI7QUFBQSxFQUMxQixPQUFPO0FBQUEsRUFDUCxZQUFZO0FBQUEsRUFDWixVQUFVO0FBQUEsRUFDVixjQUFjLG1CQUFtQjtBQUFBLEVBQ2pDLFNBQVMsbUJBQW1CO0FBQUEsRUFDNUIsS0FBSztBQUFBLEVBQ0wsY0FBYztBQUFBLEVBQ2QsUUFBUTtBQUFBLEVBQ1IsTUFBTTtBQUFBLEVBQ04sS0FBSztBQUFBLEVBQ0wsT0FBTztBQUNYOzs7QUNoQk8sU0FBUyw2QkFBdUMsS0FBK0M7QUFDbEcsUUFBTSxZQUFZLE9BQU8sT0FBTyxJQUFJLGdCQUFnQixPQUFPLEVBQUUsQ0FBQztBQUM5RCxNQUFJLENBQUMsV0FBVztBQUNaLFVBQU0sSUFBSSxNQUFNLDBCQUEwQjtBQUFBLEVBQzlDO0FBQ0EsU0FBTyxVQUFVO0FBQ3JCOzs7QUNOTyxTQUFTLDhCQUE4QixLQUFzQztBQUNoRixTQUFPLElBQUksZ0JBQWdCO0FBQy9COzs7QUNaQSxJQUFBQyxtQkFFTztBQVNBLFNBQVMsb0JBQW9DO0FBQ2hELFNBQU87QUFDWDs7O0FDQ08sU0FBUyw2QkFDWixLQUNBLFVBQ2tCO0FBQ2xCLFFBQU0sT0FBTyxJQUFJLFVBQVUscUJBQXFCO0FBQ2hELE1BQUk7QUFDQSxVQUFNLGNBQWMsSUFBSSxhQUFhLHFCQUFxQixRQUFRO0FBQ2xFLFFBQUksQ0FBQyxhQUFhO0FBQ2QsWUFBTSxJQUFJLE1BQU0sd0JBQXdCO0FBQUEsSUFDNUM7QUFDQSxVQUFNLE9BQU8sWUFBWSxJQUFJO0FBQzdCLFdBQU8sS0FBSztBQUFBLEVBQ2hCLFVBQUU7QUFDRSxTQUFLLE9BQU87QUFBQSxFQUNoQjtBQUNKOzs7QUNoQk8sU0FBUywwQkFBMEIsS0FBa0M7QUFDeEUsU0FBTyw2QkFBNkIsS0FBSyxTQUFTLE9BQU87QUFDN0Q7OztBQ0ZPLFNBQVMsMEJBQTBCLEtBQWtDO0FBQ3hFLFNBQU8sNkJBQTZCLEtBQUssU0FBUyxPQUFPO0FBQzdEOzs7QUNITyxTQUFTLCtCQUErQixLQUFrRDtBQUM3RixTQUFPLDZCQUE2QixLQUFLLFNBQVMsWUFBWTtBQUNsRTs7O0FDRk8sU0FBUyxzQkFBc0IsS0FBeUM7QUFDM0UsU0FBTyw2QkFBNkIsS0FBSyxTQUFTLEdBQUc7QUFDekQ7OztBQ0RPLFNBQVMsdUJBQXVCLEtBQStCO0FBQ2xFLFNBQU8sNkJBQTZCLEtBQUssU0FBUyxJQUFJO0FBQzFEOzs7QUNITyxTQUFTLCtCQUErQixLQUFrRDtBQUM3RixTQUFPLDZCQUE2QixLQUFLLFNBQVMsWUFBWTtBQUNsRTs7O0FDRE8sU0FBUyx5QkFBeUIsS0FBaUM7QUFDdEUsU0FBTyw2QkFBNkIsS0FBSyxTQUFTLE1BQU07QUFDNUQ7OztBQ0hPLFNBQVMsc0JBQXNCLEtBQXlDO0FBQzNFLFNBQU8sNkJBQTZCLEtBQUssU0FBUyxHQUFHO0FBQ3pEOzs7QUNGTyxTQUFTLHdCQUF3QixLQUEyQztBQUMvRSxTQUFPLDZCQUE2QixLQUFLLFNBQVMsS0FBSztBQUMzRDs7O0FDRk8sU0FBUyw2QkFBNkIsS0FBZ0Q7QUFDekYsU0FBTyw2QkFBNkIsS0FBSyxTQUFTLFVBQVU7QUFDaEU7OztBQ0ZPLFNBQVMsMkJBQTJCLEtBQThDO0FBQ3JGLFNBQU8sNkJBQTZCLEtBQUssU0FBUyxRQUFRO0FBQzlEOzs7QUNGTyxTQUFTLCtCQUErQixLQUFrRDtBQUM3RixTQUFPLDZCQUE2QixLQUFLLFNBQVMsWUFBWTtBQUNsRTs7O0FDRk8sU0FBUyx5QkFBeUIsS0FBNEM7QUFDakYsU0FBTyw2QkFBNkIsS0FBSyxTQUFTLE1BQU07QUFDNUQ7OztBQ0ZPLFNBQVMsd0JBQXdCLEtBQTJDO0FBQy9FLFNBQU8sNkJBQTZCLEtBQUssU0FBUyxLQUFLO0FBQzNEOzs7QUNGTyxTQUFTLHdCQUF3QixLQUEyQztBQUMvRSxTQUFPLDZCQUE2QixLQUFLLFNBQVMsS0FBSztBQUMzRDs7O0FDQ08sU0FBUyxpQ0FBaUMsS0FBeUM7QUFDdEYsU0FBTyw2QkFBNkIsS0FBSyxTQUFTLGNBQWM7QUFDcEU7OztBQ0xPLFNBQVMsd0JBQXdCLEtBQTJDO0FBQy9FLFNBQU8sNkJBQTZCLEtBQUssU0FBUyxLQUFLO0FBQzNEOzs7QUNGTyxTQUFTLHdCQUF3QixLQUEyQztBQUMvRSxTQUFPLDZCQUE2QixLQUFLLFNBQVMsS0FBSztBQUMzRDs7O0FDQ08sU0FBUyxpQ0FBaUMsS0FBeUM7QUFDdEYsU0FBTyw2QkFBNkIsS0FBSyxTQUFTLGNBQWM7QUFDcEU7OztBQ0pPLFNBQVMsNEJBQTRCLEtBQW9DO0FBQzVFLFNBQU8sNkJBQTZCLEtBQUssU0FBUyxTQUFTO0FBQy9EOzs7QUNETyxTQUFTLDJCQUEyQixLQUE4QztBQUNyRixTQUFPLDZCQUE2QixLQUFLLFNBQVMsUUFBUTtBQUM5RDs7O0FDSk8sU0FBUyxnQ0FBZ0MsS0FBbUQ7QUFDL0YsU0FBTyw2QkFBNkIsS0FBSyxTQUFTLGFBQWE7QUFDbkU7IiwKICAibmFtZXMiOiBbImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iXQp9Cg==
495
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9pbmRleC50cyIsICIuLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL0NvbnN0cnVjdG9ycy9nZXRBcHBDb25zdHJ1Y3Rvci50cyIsICIuLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL0NvbnN0cnVjdG9ycy9nZXRURm9sZGVyQ29uc3RydWN0b3IudHMiLCAiLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9Db25zdHJ1Y3RvcnMvZ2V0SW50ZXJuYWxQbHVnaW5zQ29uc3RydWN0b3IudHMiLCAiLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9Db25zdHJ1Y3RvcnMvZ2V0VEZpbGVDb25zdHJ1Y3Rvci50cyIsICIuLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL0NvbnN0cnVjdG9ycy9nZXRJbnRlcm5hbFBsdWdpbkNvbnN0cnVjdG9yLnRzIiwgIi4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvQ29uc3RhbnRzL0ludGVybmFsUGx1Z2luTmFtZS50cyIsICIuLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL0NvbnN0YW50cy9GaWxlRXh0ZW5zaW9uLnRzIiwgIi4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvQ29uc3RhbnRzL1ZpZXdUeXBlLnRzIiwgIi4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvVHlwZUd1YXJkcy9pc1JlZmVyZW5jZUNhY2hlLnRzIiwgIi4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvVHlwZUd1YXJkcy9pc0xpbmtDYWNoZS50cyIsICIuLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL1R5cGVHdWFyZHMvaXNFbWJlZENhY2hlLnRzIiwgIi4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvVHlwZUd1YXJkcy9pc0Zyb250bWF0dGVyTGlua0NhY2hlLnRzIiwgIi4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvVXRpbHMvUGF0aFV0aWxzLnRzIiwgIi4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvRnVuY3Rpb25zL2NyZWF0ZVRGb2xkZXJJbnN0YW5jZS50cyIsICIuLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL0Z1bmN0aW9ucy9jcmVhdGVURmlsZUluc3RhbmNlLnRzIiwgIi4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvQ2xhc3Nlcy9DdXN0b21BcnJheURpY3RJbXBsLnRzIiwgIi4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvQ29uc3RydWN0b3JzL1ZpZXdzL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMiLCAiLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0QWxsUHJvcGVydGllc1ZpZXdDb25zdHJ1Y3Rvci50cyIsICIuLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL0NvbnN0cnVjdG9ycy9WaWV3cy9nZXRNYXJrZG93blZpZXdDb25zdHJ1Y3Rvci50cyIsICIuLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL0NvbnN0cnVjdG9ycy9WaWV3cy9nZXRDYW52YXNWaWV3Q29uc3RydWN0b3IudHMiLCAiLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0RmlsZUV4cGxvcmVyVmlld0NvbnN0cnVjdG9yLnRzIiwgIi4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvQ29uc3RydWN0b3JzL1ZpZXdzL2dldE91dGdvaW5nTGlua1ZpZXdDb25zdHJ1Y3Rvci50cyIsICIuLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL0NvbnN0cnVjdG9ycy9WaWV3cy9nZXRCcm93c2VyVmlld0NvbnN0cnVjdG9yLnRzIiwgIi4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvQ29uc3RydWN0b3JzL1ZpZXdzL2dldFBkZlZpZXdDb25zdHJ1Y3Rvci50cyIsICIuLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL0NvbnN0cnVjdG9ycy9WaWV3cy9nZXRTZWFyY2hWaWV3Q29uc3RydWN0b3IudHMiLCAiLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0RmlsZVByb3BlcnRpZXNWaWV3Q29uc3RydWN0b3IudHMiLCAiLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0Qm9va21hcmtzVmlld0NvbnN0cnVjdG9yLnRzIiwgIi4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvQ29uc3RydWN0b3JzL1ZpZXdzL2dldEVtcHR5Vmlld0NvbnN0cnVjdG9yLnRzIiwgIi4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvQ29uc3RydWN0b3JzL1ZpZXdzL2dldEF1ZGlvVmlld0NvbnN0cnVjdG9yLnRzIiwgIi4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvQ29uc3RydWN0b3JzL1ZpZXdzL2dldE91dGxpbmVWaWV3Q29uc3RydWN0b3IudHMiLCAiLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0VGFnVmlld0NvbnN0cnVjdG9yLnRzIiwgIi4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvQ29uc3RydWN0b3JzL1ZpZXdzL2dldFZpZGVvVmlld0NvbnN0cnVjdG9yLnRzIiwgIi4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvQ29uc3RydWN0b3JzL1ZpZXdzL2dldEdyYXBoVmlld0NvbnN0cnVjdG9yLnRzIiwgIi4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvQ29uc3RydWN0b3JzL1ZpZXdzL2dldExvY2FsR3JhcGhWaWV3Q29uc3RydWN0b3IudHMiLCAiLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0SW1hZ2VWaWV3Q29uc3RydWN0b3IudHMiLCAiLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0QnJvd3Nlckhpc3RvcnlWaWV3Q29uc3RydWN0b3IudHMiLCAiLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0U3luY1ZpZXdDb25zdHJ1Y3Rvci50cyIsICIuLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL0NvbnN0cnVjdG9ycy9WaWV3cy9nZXRSZWxlYXNlTm90ZXNWaWV3Q29uc3RydWN0b3IudHMiLCAiLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0QmFja2xpbmtWaWV3Q29uc3RydWN0b3IudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qIFRISVMgSVMgQSBHRU5FUkFURUQvQlVORExFRCBGSUxFIEJZIEJVSUxEIFNDUklQVCAqL1xuXG5leHBvcnQgKiBmcm9tICcuL0NvbnN0cnVjdG9ycy9nZXRBcHBDb25zdHJ1Y3Rvci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL0NvbnN0cnVjdG9ycy9nZXRURm9sZGVyQ29uc3RydWN0b3IuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9Db25zdHJ1Y3RvcnMvZ2V0SW50ZXJuYWxQbHVnaW5zQ29uc3RydWN0b3IuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9Db25zdHJ1Y3RvcnMvZ2V0VEZpbGVDb25zdHJ1Y3Rvci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL0NvbnN0cnVjdG9ycy9nZXRJbnRlcm5hbFBsdWdpbkNvbnN0cnVjdG9yLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vQ29uc3RhbnRzL0ludGVybmFsUGx1Z2luTmFtZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL0NvbnN0YW50cy9GaWxlRXh0ZW5zaW9uLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vQ29uc3RhbnRzL1ZpZXdUeXBlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vVHlwZUd1YXJkcy9pc0xpbmtDYWNoZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL1R5cGVHdWFyZHMvaXNSZWZlcmVuY2VDYWNoZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL1R5cGVHdWFyZHMvaXNFbWJlZENhY2hlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vVHlwZUd1YXJkcy9pc0Zyb250bWF0dGVyTGlua0NhY2hlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vVXRpbHMvUGF0aFV0aWxzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vRnVuY3Rpb25zL2NyZWF0ZVRGaWxlSW5zdGFuY2UuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9GdW5jdGlvbnMvY3JlYXRlVEZvbGRlckluc3RhbmNlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vQ2xhc3Nlcy9DdXN0b21BcnJheURpY3RJbXBsLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vQ29uc3RydWN0b3JzL1ZpZXdzL2dldEFsbFByb3BlcnRpZXNWaWV3Q29uc3RydWN0b3IuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0TWFya2Rvd25WaWV3Q29uc3RydWN0b3IuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0Q2FudmFzVmlld0NvbnN0cnVjdG9yLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vQ29uc3RydWN0b3JzL1ZpZXdzL2dldEZpbGVFeHBsb3JlclZpZXdDb25zdHJ1Y3Rvci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL0NvbnN0cnVjdG9ycy9WaWV3cy9nZXRPdXRnb2luZ0xpbmtWaWV3Q29uc3RydWN0b3IuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0QnJvd3NlclZpZXdDb25zdHJ1Y3Rvci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL0NvbnN0cnVjdG9ycy9WaWV3cy9nZXRQZGZWaWV3Q29uc3RydWN0b3IuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL0NvbnN0cnVjdG9ycy9WaWV3cy9nZXRTZWFyY2hWaWV3Q29uc3RydWN0b3IuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0RmlsZVByb3BlcnRpZXNWaWV3Q29uc3RydWN0b3IuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0Qm9va21hcmtzVmlld0NvbnN0cnVjdG9yLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vQ29uc3RydWN0b3JzL1ZpZXdzL2dldEVtcHR5Vmlld0NvbnN0cnVjdG9yLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vQ29uc3RydWN0b3JzL1ZpZXdzL2dldEF1ZGlvVmlld0NvbnN0cnVjdG9yLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vQ29uc3RydWN0b3JzL1ZpZXdzL2dldE91dGxpbmVWaWV3Q29uc3RydWN0b3IuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0VGFnVmlld0NvbnN0cnVjdG9yLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vQ29uc3RydWN0b3JzL1ZpZXdzL2dldFZpZGVvVmlld0NvbnN0cnVjdG9yLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vQ29uc3RydWN0b3JzL1ZpZXdzL2dldEdyYXBoVmlld0NvbnN0cnVjdG9yLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vQ29uc3RydWN0b3JzL1ZpZXdzL2dldExvY2FsR3JhcGhWaWV3Q29uc3RydWN0b3IuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0SW1hZ2VWaWV3Q29uc3RydWN0b3IuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0QnJvd3Nlckhpc3RvcnlWaWV3Q29uc3RydWN0b3IuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0U3luY1ZpZXdDb25zdHJ1Y3Rvci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL0NvbnN0cnVjdG9ycy9WaWV3cy9nZXRSZWxlYXNlTm90ZXNWaWV3Q29uc3RydWN0b3IuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0QmFja2xpbmtWaWV3Q29uc3RydWN0b3IuanMnO1xuaW1wb3J0ICcuLi8uLi9pbmRleC5qcyc7XG4iLCAiaW1wb3J0IHtcbiAgICBBcHBcbn0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUgeyBBcHBDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uL2ludGVybmFscy9Db25zdHJ1Y3RvcnMvQXBwQ29uc3RydWN0b3IudHMnO1xuXG4vKipcbiAqIEdldCB0aGUgQXBwIGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSBBcHAgY29uc3RydWN0b3IuXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBcHBDb25zdHJ1Y3RvcigpOiBBcHBDb25zdHJ1Y3RvciB7XG4gICAgcmV0dXJuIEFwcCBhcyBBcHBDb25zdHJ1Y3Rvcjtcbn1cbiIsICJpbXBvcnQge1xuICAgIFRGb2xkZXJcbn0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUgeyBURm9sZGVyQ29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi9pbnRlcm5hbHMvQ29uc3RydWN0b3JzL1RGb2xkZXJDb25zdHJ1Y3Rvci50cyc7XG5cbi8qKlxuICogR2V0IHRoZSBURm9sZGVyIGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSBURm9sZGVyIGNvbnN0cnVjdG9yLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VEZvbGRlckNvbnN0cnVjdG9yKCk6IFRGb2xkZXJDb25zdHJ1Y3RvciB7XG4gICAgcmV0dXJuIFRGb2xkZXIgYXMgVEZvbGRlckNvbnN0cnVjdG9yO1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbFBsdWdpbnNDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uL2ludGVybmFscy9Db25zdHJ1Y3RvcnMvSW50ZXJuYWxQbHVnaW5zQ29uc3RydWN0b3IudHMnO1xuXG4vKipcbiAqIEdldCB0aGUgSW50ZXJuYWxQbHVnaW5zIGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwIGluc3RhbmNlLlxuICogQHJldHVybnMgVGhlIEludGVybmFsUGx1Z2lucyBjb25zdHJ1Y3Rvci5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEludGVybmFsUGx1Z2luc0NvbnN0cnVjdG9yKGFwcDogQXBwKTogSW50ZXJuYWxQbHVnaW5zQ29uc3RydWN0b3Ige1xuICAgIHJldHVybiBhcHAuaW50ZXJuYWxQbHVnaW5zLmNvbnN0cnVjdG9yIGFzIEludGVybmFsUGx1Z2luc0NvbnN0cnVjdG9yO1xufVxuIiwgImltcG9ydCB7XG4gICAgVEZpbGVcbn0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUgeyBURmlsZUNvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vaW50ZXJuYWxzL0NvbnN0cnVjdG9ycy9URmlsZUNvbnN0cnVjdG9yLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIFRGaWxlIGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSBURmlsZSBjb25zdHJ1Y3Rvci5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRGaWxlQ29uc3RydWN0b3IoKTogVEZpbGVDb25zdHJ1Y3RvciB7XG4gICAgcmV0dXJuIFRGaWxlIGFzIFRGaWxlQ29uc3RydWN0b3I7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IEludGVybmFsUGx1Z2luQ29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi9pbnRlcm5hbHMvQ29uc3RydWN0b3JzL0ludGVybmFsUGx1Z2luQ29uc3RydWN0b3IudHMnO1xuXG4vKipcbiAqIEdldCB0aGUgSW50ZXJuYWxQbHVnaW4gY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBUaGUgSW50ZXJuYWxQbHVnaW4gY29uc3RydWN0b3IuXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnRlcm5hbFBsdWdpbkNvbnN0cnVjdG9yPEluc3RhbmNlPihhcHA6IEFwcCk6IEludGVybmFsUGx1Z2luQ29uc3RydWN0b3I8SW5zdGFuY2U+IHtcbiAgICBjb25zdCBhbnlQbHVnaW4gPSBPYmplY3QudmFsdWVzKGFwcC5pbnRlcm5hbFBsdWdpbnMucGx1Z2lucylbMF07XG4gICAgaWYgKCFhbnlQbHVnaW4pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBpbnRlcm5hbCBwbHVnaW4gZm91bmQnKTtcbiAgICB9XG4gICAgcmV0dXJuIGFueVBsdWdpbi5jb25zdHJ1Y3RvciBhcyBJbnRlcm5hbFBsdWdpbkNvbnN0cnVjdG9yPEluc3RhbmNlPjtcbn1cbiIsICIvKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IEludGVybmFsUGx1Z2luTmFtZSA9IHtcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogQXVkaW8gcmVjb3JkZXJcbiAgICAgKi9cbiAgICBBdWRpb1JlY29yZGVyOiAnYXVkaW8tcmVjb3JkZXInLFxuICAgIC8qKlxuICAgICAqIFBsdWdpbiBuYW1lIGluIFVJOiBCYWNrbGlua3NcbiAgICAgKi9cbiAgICBCYWNrbGluazogJ2JhY2tsaW5rJyxcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogQm9va21hcmtzXG4gICAgICovXG4gICAgQm9va21hcmtzOiAnYm9va21hcmtzJyxcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogV2ViIHZpZXdlclxuICAgICAqL1xuICAgIEJyb3dzZXI6ICdicm93c2VyJyxcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogQ2FudmFzXG4gICAgICovXG4gICAgQ2FudmFzOiAnY2FudmFzJyxcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogQ29tbWFuZCBwYWxldHRlXG4gICAgICovXG4gICAgQ29tbWFuZFBhbGV0dGU6ICdjb21tYW5kLXBhbGV0dGUnLFxuICAgIC8qKlxuICAgICAqIFBsdWdpbiBuYW1lIGluIFVJOiBEYWlseSBub3Rlc1xuICAgICAqL1xuICAgIERhaWx5Tm90ZXM6ICdkYWlseS1ub3RlcycsXG4gICAgLyoqXG4gICAgICogUGx1Z2luIG5hbWUgaW4gVUk6IChoaWRkZW4pXG4gICAgICovXG4gICAgRWRpdG9yU3RhdHVzOiAnZWRpdG9yLXN0YXR1cycsXG4gICAgLyoqXG4gICAgICogUGx1Z2luIG5hbWUgaW4gVUk6IEZpbGVzXG4gICAgICovXG4gICAgRmlsZUV4cGxvcmVyOiAnZmlsZS1leHBsb3JlcicsXG4gICAgLyoqXG4gICAgICogUGx1Z2luIG5hbWUgaW4gVUk6IEZpbGUgcmVjb3ZlcnlcbiAgICAgKi9cbiAgICBGaWxlUmVjb3Zlcnk6ICdmaWxlLXJlY292ZXJ5JyxcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogU2VhcmNoXG4gICAgICovXG4gICAgR2xvYmFsU2VhcmNoOiAnZ2xvYmFsLXNlYXJjaCcsXG4gICAgLyoqXG4gICAgICogUGx1Z2luIG5hbWUgaW4gVUk6IEdyYXBoIHZpZXdcbiAgICAgKi9cbiAgICBHcmFwaDogJ2dyYXBoJyxcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogRm9ybWF0IGNvbnZlcnRlclxuICAgICAqL1xuICAgIE1hcmtkb3duSW1wb3J0ZXI6ICdtYXJrZG93bi1pbXBvcnRlcicsXG4gICAgLyoqXG4gICAgICogUGx1Z2luIG5hbWUgaW4gVUk6IE5vdGUgY29tcG9zZXJcbiAgICAgKi9cbiAgICBOb3RlQ29tcG9zZXI6ICdub3RlLWNvbXBvc2VyJyxcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogT3V0Z29pbmcgbGlua3NcbiAgICAgKi9cbiAgICBPdXRnb2luZ0xpbms6ICdvdXRnb2luZy1saW5rJyxcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogT3V0bGluZVxuICAgICAqL1xuICAgIE91dGxpbmU6ICdvdXRsaW5lJyxcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogUGFnZSBwcmV2aWV3XG4gICAgICovXG4gICAgUGFnZVByZXZpZXc6ICdwYWdlLXByZXZpZXcnLFxuICAgIC8qKlxuICAgICAqIFBsdWdpbiBuYW1lIGluIFVJOiBQcm9wZXJ0aWVzIHZpZXdcbiAgICAgKi9cbiAgICBQcm9wZXJ0aWVzOiAncHJvcGVydGllcycsXG4gICAgLyoqXG4gICAgICogUGx1Z2luIG5hbWUgaW4gVUk6IFB1Ymxpc2hcbiAgICAgKi9cbiAgICBQdWJsaXNoOiAncHVibGlzaCcsXG4gICAgLyoqXG4gICAgICogUGx1Z2luIG5hbWUgaW4gVUk6IFJhbmRvbSBub3RlXG4gICAgICovXG4gICAgUmFuZG9tTm90ZTogJ3JhbmRvbS1ub3RlJyxcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogU2xhc2ggY29tbWFuZHNcbiAgICAgKi9cbiAgICBTbGFzaENvbW1hbmQ6ICdzbGFzaC1jb21tYW5kJyxcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogU2xpZGVzXG4gICAgICovXG4gICAgU2xpZGVzOiAnc2xpZGVzJyxcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogUXVpY2sgU3dpdGNoZXJcbiAgICAgKi9cbiAgICBTd2l0Y2hlcjogJ3N3aXRjaGVyJyxcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogU3luY1xuICAgICAqL1xuICAgIFN5bmM6ICdzeW5jJyxcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogVGFncyB2aWV3XG4gICAgICovXG4gICAgVGFnUGFuZTogJ3RhZy1wYW5lJyxcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogVGVtcGxhdGVzXG4gICAgICovXG4gICAgVGVtcGxhdGVzOiAndGVtcGxhdGVzJyxcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogV29yZCBjb3VudFxuICAgICAqL1xuICAgIFdvcmRDb3VudDogJ3dvcmQtY291bnQnLFxuICAgIC8qKlxuICAgICAqIFBsdWdpbiBuYW1lIGluIFVJOiBXb3Jrc3BhY2VzXG4gICAgICovXG4gICAgV29ya3NwYWNlczogJ3dvcmtzcGFjZXMnLFxuICAgIC8qKlxuICAgICAqIFBsdWdpbiBuYW1lIGluIFVJOiBVbmlxdWUgbm90ZSBjcmVhdG9yXG4gICAgICovXG4gICAgWmtQcmVmaXhlcjogJ3prLXByZWZpeGVyJ1xufSBhcyBjb25zdDtcbiIsICIvKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IEZpbGVFeHRlbnNpb24gPSB7XG4gICAgXzNncDogJzNncCcsXG4gICAgYXZpZjogJ2F2aWYnLFxuICAgIGJtcDogJ2JtcCcsXG4gICAgY2FudmFzOiAnY2FudmFzJyxcbiAgICBmbGFjOiAnZmxhYycsXG4gICAgZ2lmOiAnZ2lmJyxcbiAgICBqcGVnOiAnanBlZycsXG4gICAganBnOiAnanBnJyxcbiAgICBtNGE6ICdtNGEnLFxuICAgIG1kOiAnbWQnLFxuICAgIG1rdjogJ21rdicsXG4gICAgbW92OiAnbW92JyxcbiAgICBtcDM6ICdtcDMnLFxuICAgIG1wNDogJ21wNCcsXG4gICAgb2dhOiAnb2dhJyxcbiAgICBvZ2c6ICdvZ2cnLFxuICAgIG9ndjogJ29ndicsXG4gICAgb3B1czogJ29wdXMnLFxuICAgIHBkZjogJ3BkZicsXG4gICAgcG5nOiAncG5nJyxcbiAgICBzdmc6ICdzdmcnLFxuICAgIHdhdjogJ3dhdicsXG4gICAgd2VibTogJ3dlYm0nLFxuICAgIHdlYnA6ICd3ZWJwJ1xufSBhcyBjb25zdDtcbiIsICJpbXBvcnQgeyBJbnRlcm5hbFBsdWdpbk5hbWUgfSBmcm9tICcuL0ludGVybmFsUGx1Z2luTmFtZS5qcyc7XG5cbi8qKiBAcHVibGljICovXG5leHBvcnQgY29uc3QgVmlld1R5cGUgPSB7XG4gICAgQWxsUHJvcGVydGllczogJ2FsbC1wcm9wZXJ0aWVzJyxcbiAgICBBdWRpbzogJ2F1ZGlvJyxcbiAgICBCYWNrbGluazogSW50ZXJuYWxQbHVnaW5OYW1lLkJhY2tsaW5rLFxuICAgIEJvb2ttYXJrczogSW50ZXJuYWxQbHVnaW5OYW1lLkJvb2ttYXJrcyxcbiAgICBCcm93c2VyOiAnYnJvd3NlcicsXG4gICAgQnJvd3Nlckhpc3Rvcnk6ICdicm93c2VyLWhpc3RvcnknLFxuICAgIENhbnZhczogSW50ZXJuYWxQbHVnaW5OYW1lLkNhbnZhcyxcbiAgICBFbXB0eTogJ2VtcHR5JyxcbiAgICBGaWxlRXhwbG9yZXI6IEludGVybmFsUGx1Z2luTmFtZS5GaWxlRXhwbG9yZXIsXG4gICAgRmlsZVByb3BlcnRpZXM6ICdmaWxlLXByb3BlcnRpZXMnLFxuICAgIEdyYXBoOiBJbnRlcm5hbFBsdWdpbk5hbWUuR3JhcGgsXG4gICAgSW1hZ2U6ICdpbWFnZScsXG4gICAgTG9jYWxHcmFwaDogJ2xvY2FsZ3JhcGgnLFxuICAgIE1hcmtkb3duOiAnbWFya2Rvd24nLFxuICAgIE91dGdvaW5nTGluazogSW50ZXJuYWxQbHVnaW5OYW1lLk91dGdvaW5nTGluayxcbiAgICBPdXRsaW5lOiBJbnRlcm5hbFBsdWdpbk5hbWUuT3V0bGluZSxcbiAgICBQZGY6ICdwZGYnLFxuICAgIFJlbGVhc2VOb3RlczogJ3JlbGVhc2Utbm90ZXMnLFxuICAgIFNlYXJjaDogJ3NlYXJjaCcsXG4gICAgU3luYzogJ3N5bmMnLFxuICAgIFRhZzogJ3RhZycsXG4gICAgVmlkZW86ICd2aWRlbydcbn0gYXMgY29uc3Q7XG4iLCAiaW1wb3J0IHR5cGUge1xuICAgIFJlZmVyZW5jZSxcbiAgICBSZWZlcmVuY2VDYWNoZVxufSBmcm9tICdvYnNpZGlhbic7XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIHJlZmVyZW5jZSBpcyBhIHJlZmVyZW5jZSBjYWNoZS5cbiAqXG4gKiBAcGFyYW0gcmVmZXJlbmNlIC0gVGhlIHJlZmVyZW5jZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIHJlZmVyZW5jZSBpcyBhIHJlZmVyZW5jZSBjYWNoZS5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmVmZXJlbmNlQ2FjaGUocmVmZXJlbmNlOiBSZWZlcmVuY2UpOiByZWZlcmVuY2UgaXMgUmVmZXJlbmNlQ2FjaGUge1xuICAgIHJldHVybiAhIShyZWZlcmVuY2UgYXMgUGFydGlhbDxSZWZlcmVuY2VDYWNoZT4pLnBvc2l0aW9uO1xufVxuIiwgImltcG9ydCB0eXBlIHtcbiAgICBMaW5rQ2FjaGUsXG4gICAgUmVmZXJlbmNlXG59IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB7IGlzUmVmZXJlbmNlQ2FjaGUgfSBmcm9tICcuL2lzUmVmZXJlbmNlQ2FjaGUudHMnO1xuXG4vKipcbiAqIENoZWNrIGlmIHRoZSByZWZlcmVuY2UgaXMgYSBsaW5rIGNhY2hlLlxuICpcbiAqIEBwYXJhbSByZWZlcmVuY2UgLSBUaGUgcmVmZXJlbmNlIHRvIGNoZWNrLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgcmVmZXJlbmNlIGlzIGEgbGluayBjYWNoZS5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTGlua0NhY2hlKHJlZmVyZW5jZTogUmVmZXJlbmNlKTogcmVmZXJlbmNlIGlzIExpbmtDYWNoZSB7XG4gICAgcmV0dXJuIGlzUmVmZXJlbmNlQ2FjaGUocmVmZXJlbmNlKSAmJiByZWZlcmVuY2Uub3JpZ2luYWxbMF0gIT09ICchJztcbn1cbiIsICJpbXBvcnQgdHlwZSB7XG4gICAgRW1iZWRDYWNoZSxcbiAgICBSZWZlcmVuY2Vcbn0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHsgaXNSZWZlcmVuY2VDYWNoZSB9IGZyb20gJy4vaXNSZWZlcmVuY2VDYWNoZS50cyc7XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIHJlZmVyZW5jZSBpcyBhbiBlbWJlZCBjYWNoZS5cbiAqXG4gKiBAcGFyYW0gcmVmZXJlbmNlIC0gVGhlIHJlZmVyZW5jZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIHJlZmVyZW5jZSBpcyBhbiBlbWJlZCBjYWNoZS5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRW1iZWRDYWNoZShyZWZlcmVuY2U6IFJlZmVyZW5jZSk6IHJlZmVyZW5jZSBpcyBFbWJlZENhY2hlIHtcbiAgICByZXR1cm4gaXNSZWZlcmVuY2VDYWNoZShyZWZlcmVuY2UpICYmIHJlZmVyZW5jZS5vcmlnaW5hbFswXSA9PT0gJyEnO1xufVxuIiwgImltcG9ydCB0eXBlIHtcbiAgICBGcm9udG1hdHRlckxpbmtDYWNoZSxcbiAgICBSZWZlcmVuY2Vcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG4vKipcbiAqIENoZWNrIGlmIHRoZSByZWZlcmVuY2UgaXMgYSBmcm9udG1hdHRlciBsaW5rIGNhY2hlLlxuICpcbiAqIEBwYXJhbSByZWZlcmVuY2UgLSBUaGUgcmVmZXJlbmNlIHRvIGNoZWNrLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgcmVmZXJlbmNlIGlzIGEgZnJvbnRtYXR0ZXIgbGluayBjYWNoZS5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRnJvbnRtYXR0ZXJMaW5rQ2FjaGUocmVmZXJlbmNlOiBSZWZlcmVuY2UpOiByZWZlcmVuY2UgaXMgRnJvbnRtYXR0ZXJMaW5rQ2FjaGUge1xuICAgIHJldHVybiAhIShyZWZlcmVuY2UgYXMgUGFydGlhbDxGcm9udG1hdHRlckxpbmtDYWNoZT4pLmtleTtcbn1cbiIsICIvKipcbiAqIEdldCB0aGUgcGFyZW50IGZvbGRlciBwYXRoIG9mIGEgZ2l2ZW4gcGF0aC5cbiAqXG4gKiBAcGFyYW0gcGF0aCAtIFRoZSBwYXRoIHRvIGdldCB0aGUgcGFyZW50IGZvbGRlciBwYXRoIG9mLlxuICogQHJldHVybnMgVGhlIHBhcmVudCBmb2xkZXIgcGF0aC5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcmVudEZvbGRlclBhdGgocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcGF0aC5yZXBsYWNlKC9cXC8/W15cXC9dKiQvLCAnJykgfHwgJy8nO1xufVxuIiwgImltcG9ydCB7XG4gICAgdHlwZSBBcHAsXG4gICAgVEZvbGRlclxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgeyBnZXRURm9sZGVyQ29uc3RydWN0b3IgfSBmcm9tICcuLi9Db25zdHJ1Y3RvcnMvZ2V0VEZvbGRlckNvbnN0cnVjdG9yLnRzJztcbmltcG9ydCB7IHBhcmVudEZvbGRlclBhdGggfSBmcm9tICcuLi9VdGlscy9QYXRoVXRpbHMuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYW5kIHByb3Blcmx5IGluaXRpYWxpemVzIHRoZSBpbnN0YW5jZSBvZiBURm9sZGVyIGV2ZW4gdGhlIHVuZGVybHlpbmcgZm9sZGVyIGRvZXMgbm90IGV4aXN0LlxuICogVGhpcyBkb2Vzbid0IGNyZWF0ZSB0aGUgbWlzc2luZyBmb2xkZXIgb24gdGhlIGZpbGUgc3lzdGVtLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVEZvbGRlckluc3RhbmNlKGFwcDogQXBwLCBwYXRoOiBzdHJpbmcpOiBURm9sZGVyIHtcbiAgICBsZXQgZm9sZGVyID0gYXBwLnZhdWx0LmdldEZvbGRlckJ5UGF0aChwYXRoKTtcbiAgICBpZiAoZm9sZGVyKSB7XG4gICAgICAgIHJldHVybiBmb2xkZXI7XG4gICAgfVxuXG4gICAgZm9sZGVyID0gbmV3IChnZXRURm9sZGVyQ29uc3RydWN0b3IoKSkoYXBwLnZhdWx0LCBwYXRoKTtcbiAgICBmb2xkZXIucGFyZW50ID0gY3JlYXRlVEZvbGRlckluc3RhbmNlKGFwcCwgcGFyZW50Rm9sZGVyUGF0aChwYXRoKSk7XG4gICAgZm9sZGVyLmRlbGV0ZWQgPSB0cnVlO1xuICAgIHJldHVybiBmb2xkZXI7XG59XG4iLCAiaW1wb3J0IHtcbiAgICB0eXBlIEFwcCxcbiAgICBURmlsZVxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgeyBnZXRURmlsZUNvbnN0cnVjdG9yIH0gZnJvbSAnLi4vQ29uc3RydWN0b3JzL2dldFRGaWxlQ29uc3RydWN0b3IudHMnO1xuaW1wb3J0IHsgcGFyZW50Rm9sZGVyUGF0aCB9IGZyb20gJy4uL1V0aWxzL1BhdGhVdGlscy5qcyc7XG5pbXBvcnQgeyBjcmVhdGVURm9sZGVySW5zdGFuY2UgfSBmcm9tICcuL2NyZWF0ZVRGb2xkZXJJbnN0YW5jZS50cyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhbmQgcHJvcGVybHkgaW5pdGlhbGl6ZXMgdGhlIGluc3RhbmNlIG9mIFRGaWxlIGV2ZW4gdGhlIHVuZGVybHlpbmcgZmlsZSBkb2VzIG5vdCBleGlzdC5cbiAqIFRoaXMgZG9lc24ndCBjcmVhdGUgdGhlIG1pc3NpbmcgZmlsZSBvbiB0aGUgZmlsZSBzeXN0ZW0uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVURmlsZUluc3RhbmNlKGFwcDogQXBwLCBwYXRoOiBzdHJpbmcpOiBURmlsZSB7XG4gICAgbGV0IGZpbGUgPSBhcHAudmF1bHQuZ2V0RmlsZUJ5UGF0aChwYXRoKTtcbiAgICBpZiAoZmlsZSkge1xuICAgICAgICByZXR1cm4gZmlsZTtcbiAgICB9XG5cbiAgICBmaWxlID0gbmV3IChnZXRURmlsZUNvbnN0cnVjdG9yKCkpKGFwcC52YXVsdCwgcGF0aCk7XG4gICAgZmlsZS5wYXJlbnQgPSBjcmVhdGVURm9sZGVySW5zdGFuY2UoYXBwLCBwYXJlbnRGb2xkZXJQYXRoKHBhdGgpKTtcbiAgICBmaWxlLmRlbGV0ZWQgPSB0cnVlO1xuICAgIHJldHVybiBmaWxlO1xufVxuIiwgImltcG9ydCB0eXBlIHsgQ3VzdG9tQXJyYXlEaWN0IH0gZnJvbSAnLi4vLi4vaW50ZXJuYWxzL0N1c3RvbUFycmF5RGljdC5qcyc7XG5cbi8qKiBAcHVibGljICovXG5leHBvcnQgY2xhc3MgQ3VzdG9tQXJyYXlEaWN0SW1wbDxUPiBpbXBsZW1lbnRzIEN1c3RvbUFycmF5RGljdDxUPiB7XG4gICAgcHVibGljIGRhdGE6IE1hcDxzdHJpbmcsIFRbXT4gPSBuZXcgTWFwKCk7XG5cbiAgICBwdWJsaWMgYWRkKGtleTogc3RyaW5nLCB2YWx1ZTogVCk6IHZvaWQge1xuICAgICAgICBsZXQgdmFsdWVzID0gdGhpcy5nZXQoa2V5KTtcbiAgICAgICAgaWYgKCF2YWx1ZXMpIHtcbiAgICAgICAgICAgIHZhbHVlcyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5kYXRhLnNldChrZXksIHZhbHVlcyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXZhbHVlcy5pbmNsdWRlcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbHVlcy5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmUoa2V5OiBzdHJpbmcsIHZhbHVlOiBUKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZ2V0KGtleSk7XG4gICAgICAgIGlmICghdmFsdWVzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFsdWVzLnJlbW92ZSh2YWx1ZSk7XG5cbiAgICAgICAgaWYgKHZhbHVlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXIoa2V5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXQoa2V5OiBzdHJpbmcpOiBUW10gfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5nZXQoa2V5KSB8fCBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBrZXlzKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5kYXRhLmtleXMoKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGNsZWFyKGtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGF0YS5kZWxldGUoa2V5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xlYXJBbGwoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGF0YS5jbGVhcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb250YWlucyhrZXk6IHN0cmluZywgdmFsdWU6IFQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5nZXQoa2V5KT8uY29udGFpbnModmFsdWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb3VudCgpOiBudW1iZXIge1xuICAgICAgICBsZXQgYW5zID0gMDtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5rZXlzKCkpIHtcbiAgICAgICAgICAgIGFucyArPSB0aGlzLmdldChrZXkpPy5sZW5ndGggPz8gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhbnM7XG4gICAgfVxufVxuIiwgImltcG9ydCB0eXBlIHtcbiAgICBBcHAsXG4gICAgQ29uc3RydWN0b3IsXG4gICAgVmlld1xufSBmcm9tICdvYnNpZGlhbic7XG5cbi8qKlxuICogR2V0IHRoZSB2aWV3IGNvbnN0cnVjdG9yIGJ5IHZpZXcgdHlwZS5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcC5cbiAqIEBwYXJhbSB2aWV3VHlwZSAtIFRoZSB2aWV3IHR5cGUuXG4gKiBAcmV0dXJucyBUaGUgdmlldyBjb25zdHJ1Y3Rvci5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGU8VFZpZXcgZXh0ZW5kcyBWaWV3ID0gVmlldz4oXG4gICAgYXBwOiBBcHAsXG4gICAgdmlld1R5cGU6IHN0cmluZ1xuKTogQ29uc3RydWN0b3I8VFZpZXc+IHtcbiAgICBjb25zdCBsZWFmID0gYXBwLndvcmtzcGFjZS5jcmVhdGVMZWFmSW5UYWJHcm91cCgpO1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHZpZXdDcmVhdG9yID0gYXBwLnZpZXdSZWdpc3RyeS5nZXRWaWV3Q3JlYXRvckJ5VHlwZSh2aWV3VHlwZSk7XG4gICAgICAgIGlmICghdmlld0NyZWF0b3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVmlldyBjcmVhdG9yIG5vdCBmb3VuZCcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZpZXcgPSB2aWV3Q3JlYXRvcihsZWFmKTtcbiAgICAgICAgcmV0dXJuIHZpZXcuY29uc3RydWN0b3IgYXMgQ29uc3RydWN0b3I8VFZpZXc+O1xuICAgIH0gZmluYWxseSB7XG4gICAgICAgIGxlYWYuZGV0YWNoKCk7XG4gICAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUgeyBUeXBlZFZpZXdDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9Db25zdHJ1Y3RvcnMvVmlld3MvVHlwZWRWaWV3Q29uc3RydWN0b3IudHMnO1xuaW1wb3J0IHR5cGUgeyBBbGxQcm9wZXJ0aWVzVmlldyB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9JbnRlcm5hbFBsdWdpbnMvUHJvcGVydGllcy9BbGxQcm9wZXJ0aWVzVmlldy5qcyc7XG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJy4uLy4uL0NvbnN0YW50cy9WaWV3VHlwZS50cyc7XG5pbXBvcnQgeyBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlIH0gZnJvbSAnLi9nZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIEFsbFByb3BlcnRpZXNWaWV3IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSBBbGxQcm9wZXJ0aWVzVmlldyBjb25zdHJ1Y3Rvci5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFsbFByb3BlcnRpZXNWaWV3Q29uc3RydWN0b3IoYXBwOiBBcHApOiBUeXBlZFZpZXdDb25zdHJ1Y3RvcjxBbGxQcm9wZXJ0aWVzVmlldz4ge1xuICAgIHJldHVybiBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlKGFwcCwgVmlld1R5cGUuQWxsUHJvcGVydGllcykgYXMgVHlwZWRWaWV3Q29uc3RydWN0b3I8QWxsUHJvcGVydGllc1ZpZXc+O1xufVxuIiwgImltcG9ydCB0eXBlIHtcbiAgICBBcHAsXG4gICAgTWFya2Rvd25WaWV3XG59IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgVHlwZWRWaWV3Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvQ29uc3RydWN0b3JzL1ZpZXdzL1R5cGVkVmlld0NvbnN0cnVjdG9yLnRzJztcbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vQ29uc3RhbnRzL1ZpZXdUeXBlLnRzJztcbmltcG9ydCB7IGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUgfSBmcm9tICcuL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUgTWFya2Rvd25WaWV3IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSBNYXJrZG93blZpZXcgY29uc3RydWN0b3IuXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRNYXJrZG93blZpZXdDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IFR5cGVkVmlld0NvbnN0cnVjdG9yPE1hcmtkb3duVmlldz4ge1xuICAgIHJldHVybiBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlKGFwcCwgVmlld1R5cGUuTWFya2Rvd24pIGFzIFR5cGVkVmlld0NvbnN0cnVjdG9yPE1hcmtkb3duVmlldz47XG59XG4iLCAiaW1wb3J0IHR5cGUge1xuICAgIEFwcFxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IENhbnZhc1ZpZXdDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9Db25zdHJ1Y3RvcnMvVmlld3MvQ2FudmFzVmlld0NvbnN0cnVjdG9yLmpzJztcbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vQ29uc3RhbnRzL1ZpZXdUeXBlLnRzJztcbmltcG9ydCB7IGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUgfSBmcm9tICcuL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUgQ2FudmFzVmlldyBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUgQ2FudmFzVmlldyBjb25zdHJ1Y3Rvci5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENhbnZhc1ZpZXdDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IENhbnZhc1ZpZXdDb25zdHJ1Y3RvciB7XG4gICAgcmV0dXJuIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUoYXBwLCBWaWV3VHlwZS5DYW52YXMpIGFzIENhbnZhc1ZpZXdDb25zdHJ1Y3Rvcjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgVHlwZWRWaWV3Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvQ29uc3RydWN0b3JzL1ZpZXdzL1R5cGVkVmlld0NvbnN0cnVjdG9yLnRzJztcbmltcG9ydCB0eXBlIHsgRmlsZUV4cGxvcmVyVmlldyB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9JbnRlcm5hbFBsdWdpbnMvRmlsZUV4cGxvcmVyL0ZpbGVFeHBsb3JlclZpZXcuanMnO1xuaW1wb3J0IHsgVmlld1R5cGUgfSBmcm9tICcuLi8uLi9Db25zdGFudHMvVmlld1R5cGUudHMnO1xuaW1wb3J0IHsgZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZSB9IGZyb20gJy4vZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZS50cyc7XG5cbi8qKlxuICogR2V0IHRoZSBGaWxlRXhwbG9yZXJWaWV3IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSBGaWxlRXhwbG9yZXJWaWV3IGNvbnN0cnVjdG9yLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmlsZUV4cGxvcmVyVmlld0NvbnN0cnVjdG9yKGFwcDogQXBwKTogVHlwZWRWaWV3Q29uc3RydWN0b3I8RmlsZUV4cGxvcmVyVmlldz4ge1xuICAgIHJldHVybiBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlKGFwcCwgVmlld1R5cGUuRmlsZUV4cGxvcmVyKSBhcyBUeXBlZFZpZXdDb25zdHJ1Y3RvcjxGaWxlRXhwbG9yZXJWaWV3Pjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgVHlwZWRWaWV3Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvQ29uc3RydWN0b3JzL1ZpZXdzL1R5cGVkVmlld0NvbnN0cnVjdG9yLnRzJztcbmltcG9ydCB0eXBlIHsgT3V0Z29pbmdMaW5rVmlldyB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9JbnRlcm5hbFBsdWdpbnMvT3V0Z29pbmdMaW5rL091dGdvaW5nTGlua1ZpZXcuanMnO1xuaW1wb3J0IHsgVmlld1R5cGUgfSBmcm9tICcuLi8uLi9Db25zdGFudHMvVmlld1R5cGUudHMnO1xuaW1wb3J0IHsgZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZSB9IGZyb20gJy4vZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZS50cyc7XG5cbi8qKlxuICogR2V0IHRoZSBPdXRnb2luZ0xpbmtWaWV3IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSBPdXRnb2luZ0xpbmtWaWV3IGNvbnN0cnVjdG9yLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3V0Z29pbmdMaW5rVmlld0NvbnN0cnVjdG9yKGFwcDogQXBwKTogVHlwZWRWaWV3Q29uc3RydWN0b3I8T3V0Z29pbmdMaW5rVmlldz4ge1xuICAgIHJldHVybiBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlKGFwcCwgVmlld1R5cGUuT3V0Z29pbmdMaW5rKSBhcyBUeXBlZFZpZXdDb25zdHJ1Y3RvcjxPdXRnb2luZ0xpbmtWaWV3Pjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7XG4gICAgQXBwXG59IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgQnJvd3NlclZpZXdDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9Db25zdHJ1Y3RvcnMvVmlld3MvQnJvd3NlclZpZXdDb25zdHJ1Y3Rvci5qcyc7XG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJy4uLy4uL0NvbnN0YW50cy9WaWV3VHlwZS50cyc7XG5pbXBvcnQgeyBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlIH0gZnJvbSAnLi9nZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIEJyb3dzZXJWaWV3IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSBCcm93c2VyVmlldyBjb25zdHJ1Y3Rvci5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJyb3dzZXJWaWV3Q29uc3RydWN0b3IoYXBwOiBBcHApOiBCcm93c2VyVmlld0NvbnN0cnVjdG9yIHtcbiAgICByZXR1cm4gZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZShhcHAsIFZpZXdUeXBlLkJyb3dzZXIpIGFzIEJyb3dzZXJWaWV3Q29uc3RydWN0b3I7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFR5cGVkVmlld0NvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL0NvbnN0cnVjdG9ycy9WaWV3cy9UeXBlZFZpZXdDb25zdHJ1Y3Rvci50cyc7XG5pbXBvcnQgdHlwZSB7IFBkZlZpZXcgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvVmlld3MvUGRmVmlldy5qcyc7XG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJy4uLy4uL0NvbnN0YW50cy9WaWV3VHlwZS50cyc7XG5pbXBvcnQgeyBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlIH0gZnJvbSAnLi9nZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIFBkZlZpZXcgY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIFBkZlZpZXcgY29uc3RydWN0b3IuXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQZGZWaWV3Q29uc3RydWN0b3IoYXBwOiBBcHApOiBUeXBlZFZpZXdDb25zdHJ1Y3RvcjxQZGZWaWV3PiB7XG4gICAgcmV0dXJuIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUoYXBwLCBWaWV3VHlwZS5QZGYpIGFzIFR5cGVkVmlld0NvbnN0cnVjdG9yPFBkZlZpZXc+O1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUgeyBUeXBlZFZpZXdDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9Db25zdHJ1Y3RvcnMvVmlld3MvVHlwZWRWaWV3Q29uc3RydWN0b3IudHMnO1xuaW1wb3J0IHR5cGUgeyBTZWFyY2hWaWV3IH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL0ludGVybmFsUGx1Z2lucy9HbG9iYWxTZWFyY2gvU2VhcmNoVmlldy5qcyc7XG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJy4uLy4uL0NvbnN0YW50cy9WaWV3VHlwZS50cyc7XG5pbXBvcnQgeyBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlIH0gZnJvbSAnLi9nZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIFNlYXJjaFZpZXcgY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIFNlYXJjaFZpZXcgY29uc3RydWN0b3IuXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWFyY2hWaWV3Q29uc3RydWN0b3IoYXBwOiBBcHApOiBUeXBlZFZpZXdDb25zdHJ1Y3RvcjxTZWFyY2hWaWV3PiB7XG4gICAgcmV0dXJuIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUoYXBwLCBWaWV3VHlwZS5TZWFyY2gpIGFzIFR5cGVkVmlld0NvbnN0cnVjdG9yPFNlYXJjaFZpZXc+O1xufVxuIiwgImltcG9ydCB0eXBlIHtcbiAgICBBcHBcbn0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUge1xuICAgIEZpbGVQcm9wZXJ0aWVzVmlld0NvbnN0cnVjdG9yXG59IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9Db25zdHJ1Y3RvcnMvVmlld3MvRmlsZVByb3BlcnRpZXNWaWV3Q29uc3RydWN0b3IudHMnO1xuaW1wb3J0IHsgVmlld1R5cGUgfSBmcm9tICcuLi8uLi9Db25zdGFudHMvVmlld1R5cGUudHMnO1xuaW1wb3J0IHsgZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZSB9IGZyb20gJy4vZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZS50cyc7XG5cbi8qKlxuICogR2V0IHRoZSBGaWxlUHJvcGVydGllc1ZpZXcgY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIEZpbGVQcm9wZXJ0aWVzVmlldyBjb25zdHJ1Y3Rvci5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbGVQcm9wZXJ0aWVzVmlld0NvbnN0cnVjdG9yKGFwcDogQXBwKTogRmlsZVByb3BlcnRpZXNWaWV3Q29uc3RydWN0b3Ige1xuICAgIHJldHVybiBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlKGFwcCwgVmlld1R5cGUuRmlsZVByb3BlcnRpZXMpIGFzIEZpbGVQcm9wZXJ0aWVzVmlld0NvbnN0cnVjdG9yO1xufVxuIiwgImltcG9ydCB0eXBlIHtcbiAgICBBcHBcbn0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUgeyBCb29rbWFya3NWaWV3Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvQ29uc3RydWN0b3JzL1ZpZXdzL0Jvb2ttYXJrc1ZpZXdDb25zdHJ1Y3Rvci5qcyc7XG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJy4uLy4uL0NvbnN0YW50cy9WaWV3VHlwZS50cyc7XG5pbXBvcnQgeyBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlIH0gZnJvbSAnLi9nZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIEJvb2ttYXJrc1ZpZXcgY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIEJvb2ttYXJrc1ZpZXcgY29uc3RydWN0b3IuXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRCb29rbWFya3NWaWV3Q29uc3RydWN0b3IoYXBwOiBBcHApOiBCb29rbWFya3NWaWV3Q29uc3RydWN0b3Ige1xuICAgIHJldHVybiBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlKGFwcCwgVmlld1R5cGUuQm9va21hcmtzKSBhcyBCb29rbWFya3NWaWV3Q29uc3RydWN0b3I7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFR5cGVkVmlld0NvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL0NvbnN0cnVjdG9ycy9WaWV3cy9UeXBlZFZpZXdDb25zdHJ1Y3Rvci50cyc7XG5pbXBvcnQgdHlwZSB7IEVtcHR5VmlldyB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9WaWV3cy9FbXB0eVZpZXcuanMnO1xuaW1wb3J0IHsgVmlld1R5cGUgfSBmcm9tICcuLi8uLi9Db25zdGFudHMvVmlld1R5cGUudHMnO1xuaW1wb3J0IHsgZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZSB9IGZyb20gJy4vZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZS50cyc7XG5cbi8qKlxuICogR2V0IHRoZSBFbXB0eVZpZXcgY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIEVtcHR5VmlldyBjb25zdHJ1Y3Rvci5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVtcHR5Vmlld0NvbnN0cnVjdG9yKGFwcDogQXBwKTogVHlwZWRWaWV3Q29uc3RydWN0b3I8RW1wdHlWaWV3PiB7XG4gICAgcmV0dXJuIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUoYXBwLCBWaWV3VHlwZS5FbXB0eSkgYXMgVHlwZWRWaWV3Q29uc3RydWN0b3I8RW1wdHlWaWV3Pjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgVHlwZWRWaWV3Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvQ29uc3RydWN0b3JzL1ZpZXdzL1R5cGVkVmlld0NvbnN0cnVjdG9yLnRzJztcbmltcG9ydCB0eXBlIHsgQXVkaW9WaWV3IH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL1ZpZXdzL0F1ZGlvVmlldy5qcyc7XG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJy4uLy4uL0NvbnN0YW50cy9WaWV3VHlwZS50cyc7XG5pbXBvcnQgeyBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlIH0gZnJvbSAnLi9nZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIEF1ZGlvVmlldyBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUgQXVkaW9WaWV3IGNvbnN0cnVjdG9yLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXVkaW9WaWV3Q29uc3RydWN0b3IoYXBwOiBBcHApOiBUeXBlZFZpZXdDb25zdHJ1Y3RvcjxBdWRpb1ZpZXc+IHtcbiAgICByZXR1cm4gZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZShhcHAsIFZpZXdUeXBlLkF1ZGlvKSBhcyBUeXBlZFZpZXdDb25zdHJ1Y3RvcjxBdWRpb1ZpZXc+O1xufVxuIiwgImltcG9ydCB0eXBlIHtcbiAgICBBcHBcbn0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUgeyBPdXRsaW5lVmlld0NvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL0NvbnN0cnVjdG9ycy9WaWV3cy9PdXRsaW5lVmlld0NvbnN0cnVjdG9yLnRzJztcbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vQ29uc3RhbnRzL1ZpZXdUeXBlLnRzJztcbmltcG9ydCB7IGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUgfSBmcm9tICcuL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUgT3V0bGluZVZpZXcgY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIE91dGxpbmVWaWV3IGNvbnN0cnVjdG9yLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3V0bGluZVZpZXdDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IE91dGxpbmVWaWV3Q29uc3RydWN0b3Ige1xuICAgIHJldHVybiBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlKGFwcCwgVmlld1R5cGUuT3V0bGluZSkgYXMgT3V0bGluZVZpZXdDb25zdHJ1Y3Rvcjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgVHlwZWRWaWV3Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvQ29uc3RydWN0b3JzL1ZpZXdzL1R5cGVkVmlld0NvbnN0cnVjdG9yLnRzJztcbmltcG9ydCB0eXBlIHsgVGFnVmlldyB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9WaWV3cy9UYWdWaWV3LmpzJztcbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vQ29uc3RhbnRzL1ZpZXdUeXBlLnRzJztcbmltcG9ydCB7IGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUgfSBmcm9tICcuL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUgVGFnVmlldyBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUgVGFnVmlldyBjb25zdHJ1Y3Rvci5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRhZ1ZpZXdDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IFR5cGVkVmlld0NvbnN0cnVjdG9yPFRhZ1ZpZXc+IHtcbiAgICByZXR1cm4gZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZShhcHAsIFZpZXdUeXBlLlRhZykgYXMgVHlwZWRWaWV3Q29uc3RydWN0b3I8VGFnVmlldz47XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFR5cGVkVmlld0NvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL0NvbnN0cnVjdG9ycy9WaWV3cy9UeXBlZFZpZXdDb25zdHJ1Y3Rvci50cyc7XG5pbXBvcnQgdHlwZSB7IFZpZGVvVmlldyB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9WaWV3cy9WaWRlb1ZpZXcuanMnO1xuaW1wb3J0IHsgVmlld1R5cGUgfSBmcm9tICcuLi8uLi9Db25zdGFudHMvVmlld1R5cGUudHMnO1xuaW1wb3J0IHsgZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZSB9IGZyb20gJy4vZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZS50cyc7XG5cbi8qKlxuICogR2V0IHRoZSBWaWRlb1ZpZXcgY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIFZpZGVvVmlldyBjb25zdHJ1Y3Rvci5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFZpZGVvVmlld0NvbnN0cnVjdG9yKGFwcDogQXBwKTogVHlwZWRWaWV3Q29uc3RydWN0b3I8VmlkZW9WaWV3PiB7XG4gICAgcmV0dXJuIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUoYXBwLCBWaWV3VHlwZS5WaWRlbykgYXMgVHlwZWRWaWV3Q29uc3RydWN0b3I8VmlkZW9WaWV3Pjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgVHlwZWRWaWV3Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvQ29uc3RydWN0b3JzL1ZpZXdzL1R5cGVkVmlld0NvbnN0cnVjdG9yLnRzJztcbmltcG9ydCB0eXBlIHsgR3JhcGhWaWV3IH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL0ludGVybmFsUGx1Z2lucy9HcmFwaC9HcmFwaFZpZXcuanMnO1xuaW1wb3J0IHsgVmlld1R5cGUgfSBmcm9tICcuLi8uLi9Db25zdGFudHMvVmlld1R5cGUudHMnO1xuaW1wb3J0IHsgZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZSB9IGZyb20gJy4vZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZS50cyc7XG5cbi8qKlxuICogR2V0IHRoZSBHcmFwaFZpZXcgY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIEdyYXBoVmlldyBjb25zdHJ1Y3Rvci5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEdyYXBoVmlld0NvbnN0cnVjdG9yKGFwcDogQXBwKTogVHlwZWRWaWV3Q29uc3RydWN0b3I8R3JhcGhWaWV3PiB7XG4gICAgcmV0dXJuIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUoYXBwLCBWaWV3VHlwZS5HcmFwaCkgYXMgVHlwZWRWaWV3Q29uc3RydWN0b3I8R3JhcGhWaWV3Pjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgVHlwZWRWaWV3Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvQ29uc3RydWN0b3JzL1ZpZXdzL1R5cGVkVmlld0NvbnN0cnVjdG9yLnRzJztcbmltcG9ydCB0eXBlIHsgTG9jYWxHcmFwaFZpZXcgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvSW50ZXJuYWxQbHVnaW5zL0dyYXBoL0xvY2FsR3JhcGhWaWV3LmpzJztcbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vQ29uc3RhbnRzL1ZpZXdUeXBlLnRzJztcbmltcG9ydCB7IGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUgfSBmcm9tICcuL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUgTG9jYWxHcmFwaFZpZXcgY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIExvY2FsR3JhcGhWaWV3IGNvbnN0cnVjdG9yLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TG9jYWxHcmFwaFZpZXdDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IFR5cGVkVmlld0NvbnN0cnVjdG9yPExvY2FsR3JhcGhWaWV3PiB7XG4gICAgcmV0dXJuIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUoYXBwLCBWaWV3VHlwZS5Mb2NhbEdyYXBoKSBhcyBUeXBlZFZpZXdDb25zdHJ1Y3RvcjxMb2NhbEdyYXBoVmlldz47XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFR5cGVkVmlld0NvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL0NvbnN0cnVjdG9ycy9WaWV3cy9UeXBlZFZpZXdDb25zdHJ1Y3Rvci50cyc7XG5pbXBvcnQgdHlwZSB7IEltYWdlVmlldyB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9WaWV3cy9JbWFnZVZpZXcuanMnO1xuaW1wb3J0IHsgVmlld1R5cGUgfSBmcm9tICcuLi8uLi9Db25zdGFudHMvVmlld1R5cGUudHMnO1xuaW1wb3J0IHsgZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZSB9IGZyb20gJy4vZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZS50cyc7XG5cbi8qKlxuICogR2V0IHRoZSBJbWFnZVZpZXcgY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIEltYWdlVmlldyBjb25zdHJ1Y3Rvci5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEltYWdlVmlld0NvbnN0cnVjdG9yKGFwcDogQXBwKTogVHlwZWRWaWV3Q29uc3RydWN0b3I8SW1hZ2VWaWV3PiB7XG4gICAgcmV0dXJuIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUoYXBwLCBWaWV3VHlwZS5JbWFnZSkgYXMgVHlwZWRWaWV3Q29uc3RydWN0b3I8SW1hZ2VWaWV3Pjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7XG4gICAgQXBwXG59IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHtcbiAgICBCcm93c2VySGlzdG9yeVZpZXdDb25zdHJ1Y3RvclxufSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvQ29uc3RydWN0b3JzL1ZpZXdzL0Jyb3dzZXJIaXN0b3J5Vmlld0NvbnN0cnVjdG9yLmpzJztcbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vQ29uc3RhbnRzL1ZpZXdUeXBlLnRzJztcbmltcG9ydCB7IGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUgfSBmcm9tICcuL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUgQnJvd3Nlckhpc3RvcnlWaWV3IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSBCcm93c2VySGlzdG9yeVZpZXcgY29uc3RydWN0b3IuXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRCcm93c2VySGlzdG9yeVZpZXdDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IEJyb3dzZXJIaXN0b3J5Vmlld0NvbnN0cnVjdG9yIHtcbiAgICByZXR1cm4gZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZShhcHAsIFZpZXdUeXBlLkJyb3dzZXJIaXN0b3J5KSBhcyBCcm93c2VySGlzdG9yeVZpZXdDb25zdHJ1Y3Rvcjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7XG4gICAgQXBwXG59IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgU3luY1ZpZXdDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9Db25zdHJ1Y3RvcnMvVmlld3MvU3luY1ZpZXdDb25zdHJ1Y3Rvci50cyc7XG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJy4uLy4uL0NvbnN0YW50cy9WaWV3VHlwZS50cyc7XG5pbXBvcnQgeyBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlIH0gZnJvbSAnLi9nZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIFN5bmNWaWV3IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSBTeW5jVmlldyBjb25zdHJ1Y3Rvci5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN5bmNWaWV3Q29uc3RydWN0b3IoYXBwOiBBcHApOiBTeW5jVmlld0NvbnN0cnVjdG9yIHtcbiAgICByZXR1cm4gZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZShhcHAsIFZpZXdUeXBlLlN5bmMpIGFzIFN5bmNWaWV3Q29uc3RydWN0b3I7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFR5cGVkVmlld0NvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL0NvbnN0cnVjdG9ycy9WaWV3cy9UeXBlZFZpZXdDb25zdHJ1Y3Rvci50cyc7XG5pbXBvcnQgdHlwZSB7IFJlbGVhc2VOb3Rlc1ZpZXcgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvVmlld3MvUmVsZWFzZU5vdGVzVmlldy5qcyc7XG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJy4uLy4uL0NvbnN0YW50cy9WaWV3VHlwZS50cyc7XG5pbXBvcnQgeyBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlIH0gZnJvbSAnLi9nZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIFJlbGVhc2VOb3Rlc1ZpZXcgY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIFJlbGVhc2VOb3Rlc1ZpZXcgY29uc3RydWN0b3IuXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRSZWxlYXNlTm90ZXNWaWV3Q29uc3RydWN0b3IoYXBwOiBBcHApOiBUeXBlZFZpZXdDb25zdHJ1Y3RvcjxSZWxlYXNlTm90ZXNWaWV3PiB7XG4gICAgcmV0dXJuIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUoYXBwLCBWaWV3VHlwZS5SZWxlYXNlTm90ZXMpIGFzIFR5cGVkVmlld0NvbnN0cnVjdG9yPFJlbGVhc2VOb3Rlc1ZpZXc+O1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUgeyBUeXBlZFZpZXdDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9Db25zdHJ1Y3RvcnMvVmlld3MvVHlwZWRWaWV3Q29uc3RydWN0b3IudHMnO1xuaW1wb3J0IHR5cGUgeyBCYWNrbGlua1ZpZXcgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvSW50ZXJuYWxQbHVnaW5zL0JhY2tsaW5rL0JhY2tsaW5rVmlldy5qcyc7XG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJy4uLy4uL0NvbnN0YW50cy9WaWV3VHlwZS50cyc7XG5pbXBvcnQgeyBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlIH0gZnJvbSAnLi9nZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIEJhY2tsaW5rVmlldyBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUgQmFja2xpbmtWaWV3IGNvbnN0cnVjdG9yLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QmFja2xpbmtWaWV3Q29uc3RydWN0b3IoYXBwOiBBcHApOiBUeXBlZFZpZXdDb25zdHJ1Y3RvcjxCYWNrbGlua1ZpZXc+IHtcbiAgICByZXR1cm4gZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZShhcHAsIFZpZXdUeXBlLkJhY2tsaW5rKSBhcyBUeXBlZFZpZXdDb25zdHJ1Y3RvcjxCYWNrbGlua1ZpZXc+O1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7OztBQ0FBLHNCQUVPO0FBU0EsU0FBUyxvQkFBb0M7QUFDaEQsU0FBTztBQUNYOzs7QUNiQSxJQUFBQSxtQkFFTztBQVNBLFNBQVMsd0JBQTRDO0FBQ3hELFNBQU87QUFDWDs7O0FDSE8sU0FBUyw4QkFBOEIsS0FBc0M7QUFDaEYsU0FBTyxJQUFJLGdCQUFnQjtBQUMvQjs7O0FDWkEsSUFBQUMsbUJBRU87QUFTQSxTQUFTLHNCQUF3QztBQUNwRCxTQUFPO0FBQ1g7OztBQ0hPLFNBQVMsNkJBQXVDLEtBQStDO0FBQ2xHLFFBQU0sWUFBWSxPQUFPLE9BQU8sSUFBSSxnQkFBZ0IsT0FBTyxFQUFFLENBQUM7QUFDOUQsTUFBSSxDQUFDLFdBQVc7QUFDWixVQUFNLElBQUksTUFBTSwwQkFBMEI7QUFBQSxFQUM5QztBQUNBLFNBQU8sVUFBVTtBQUNyQjs7O0FDZk8sSUFBTSxxQkFBcUI7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUk5QixlQUFlO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJZixVQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJVixXQUFXO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJWCxTQUFTO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJVCxRQUFRO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJUixnQkFBZ0I7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUloQixZQUFZO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJWixjQUFjO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJZCxjQUFjO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJZCxjQUFjO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJZCxjQUFjO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJZCxPQUFPO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJUCxrQkFBa0I7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUlsQixjQUFjO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJZCxjQUFjO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJZCxTQUFTO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJVCxhQUFhO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJYixZQUFZO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJWixTQUFTO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJVCxZQUFZO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJWixjQUFjO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJZCxRQUFRO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJUixVQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJVixNQUFNO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJTixTQUFTO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJVCxXQUFXO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJWCxXQUFXO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJWCxZQUFZO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJWixZQUFZO0FBQ2hCOzs7QUNySE8sSUFBTSxnQkFB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Tyw2QkFBNkIsS0FBSyxTQUFTLEdBQUc7QUFDekQ7OztBQ0ZPLFNBQVMsd0JBQXdCLEtBQTJDO0FBQy9FLFNBQU8sNkJBQTZCLEtBQUssU0FBUyxLQUFLO0FBQzNEOzs7QUNGTyxTQUFTLHdCQUF3QixLQUEyQztBQUMvRSxTQUFPLDZCQUE2QixLQUFLLFNBQVMsS0FBSztBQUMzRDs7O0FDRk8sU0FBUyw2QkFBNkIsS0FBZ0Q7QUFDekYsU0FBTyw2QkFBNkIsS0FBSyxTQUFTLFVBQVU7QUFDaEU7OztBQ0ZPLFNBQVMsd0JBQXdCLEtBQTJDO0FBQy9FLFNBQU8sNkJBQTZCLEtBQUssU0FBUyxLQUFLO0FBQzNEOzs7QUNDTyxTQUFTLGlDQUFpQyxLQUF5QztBQUN0RixTQUFPLDZCQUE2QixLQUFLLFNBQVMsY0FBYztBQUNwRTs7O0FDSk8sU0FBUyx1QkFBdUIsS0FBK0I7QUFDbEUsU0FBTyw2QkFBNkIsS0FBSyxTQUFTLElBQUk7QUFDMUQ7OztBQ0hPLFNBQVMsK0JBQStCLEtBQWtEO0FBQzdGLFNBQU8sNkJBQTZCLEtBQUssU0FBUyxZQUFZO0FBQ2xFOzs7QUNGTyxTQUFTLDJCQUEyQixLQUE4QztBQUNyRixTQUFPLDZCQUE2QixLQUFLLFNBQVMsUUFBUTtBQUM5RDsiLAogICJuYW1lcyI6IFsiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiJdCn0K