@flogeez/angular-tiptap-editor 3.5.5 → 3.6.1

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.
Files changed (35) hide show
  1. package/CHANGELOG.md +27 -1
  2. package/README.md +2 -2
  3. package/esm2022/lib/components/editor/angular-tiptap-editor.component.mjs +93 -21
  4. package/esm2022/lib/config/ate-editor.config.mjs +3 -1
  5. package/esm2022/lib/config/ate-slash-commands.config.mjs +2 -1
  6. package/esm2022/lib/directives/ate-tooltip.directive.mjs +37 -2
  7. package/esm2022/lib/extensions/ate-block-shortcuts.extension.mjs +100 -0
  8. package/esm2022/lib/extensions/ate-pasted-image.extension.mjs +7 -3
  9. package/esm2022/lib/i18n/ateTranslationsModel.mjs +1 -1
  10. package/esm2022/lib/i18n/es_ateTranslations.mjs +230 -0
  11. package/esm2022/lib/i18n/pt_ateTranslations.mjs +220 -0
  12. package/esm2022/lib/models/ate-editor-config.model.mjs +1 -1
  13. package/esm2022/lib/models/ate-editor-ref.mjs +3 -3
  14. package/esm2022/lib/models/ate-image.model.mjs +12 -2
  15. package/esm2022/lib/services/ate-editor-commands.service.mjs +6 -3
  16. package/esm2022/lib/services/ate-i18n.service.mjs +19 -9
  17. package/esm2022/lib/services/ate-image.service.mjs +18 -11
  18. package/esm2022/lib/utils/ate-extensions.utils.mjs +79 -0
  19. package/esm2022/public-api.mjs +2 -1
  20. package/fesm2022/flogeez-angular-tiptap-editor.mjs +814 -47
  21. package/fesm2022/flogeez-angular-tiptap-editor.mjs.map +1 -1
  22. package/lib/components/editor/angular-tiptap-editor.component.d.ts +12 -2
  23. package/lib/config/ate-slash-commands.config.d.ts +2 -0
  24. package/lib/extensions/ate-block-shortcuts.extension.d.ts +32 -0
  25. package/lib/i18n/ateTranslationsModel.d.ts +1 -1
  26. package/lib/i18n/es_ateTranslations.d.ts +2 -0
  27. package/lib/i18n/pt_ateTranslations.d.ts +2 -0
  28. package/lib/models/ate-editor-config.model.d.ts +8 -0
  29. package/lib/models/ate-image.model.d.ts +30 -2
  30. package/lib/services/ate-editor-commands.service.d.ts +2 -1
  31. package/lib/services/ate-i18n.service.d.ts +3 -1
  32. package/lib/services/ate-image.service.d.ts +5 -3
  33. package/lib/utils/ate-extensions.utils.d.ts +13 -0
  34. package/package.json +1 -1
  35. package/public-api.d.ts +1 -0
@@ -1,6 +1,7 @@
1
1
  import { Injectable, signal, computed, inject } from "@angular/core";
2
2
  import { isObservable, firstValueFrom } from "rxjs";
3
3
  import { AteI18nService } from "./ate-i18n.service";
4
+ import { AteImageValidationError, } from "../models/ate-image.model";
4
5
  import * as i0 from "@angular/core";
5
6
  export class AteImageService {
6
7
  constructor() {
@@ -187,12 +188,13 @@ export class AteImageService {
187
188
  const maxSize = options?.maxSize || 10 * 1024 * 1024;
188
189
  const allowedTypes = options?.allowedTypes || [];
189
190
  if (allowedTypes.length > 0 && !allowedTypes.includes(file.type)) {
190
- return { valid: false, error: this.t().invalidFileType };
191
+ return { valid: false, error: this.t().invalidFileType, reason: "invalid-type" };
191
192
  }
192
193
  if (file.size > maxSize) {
193
194
  return {
194
195
  valid: false,
195
196
  error: `${this.t().imageTooLarge} (max ${Math.round(maxSize / 1024 / 1024)}MB)`,
197
+ reason: "too-large",
196
198
  };
197
199
  }
198
200
  return { valid: true };
@@ -248,7 +250,7 @@ export class AteImageService {
248
250
  });
249
251
  }
250
252
  /** Core upload logic with progress tracking */
251
- async uploadImageWithProgress(editor, file, insertionStrategy, actionMessage, options) {
253
+ async uploadImageWithProgress(editor, file, insertionStrategy, actionMessage, options, source) {
252
254
  try {
253
255
  this.currentEditor = editor;
254
256
  this.isUploading.set(true);
@@ -277,6 +279,11 @@ export class AteImageService {
277
279
  catch (error) {
278
280
  this.resetUploadState();
279
281
  console.error(this.t().uploadError, error);
282
+ this.onImageRejectedCallback?.({
283
+ reason: error instanceof AteImageValidationError ? error.reason : "upload-failed",
284
+ file,
285
+ source,
286
+ });
280
287
  throw error;
281
288
  }
282
289
  }
@@ -287,7 +294,7 @@ export class AteImageService {
287
294
  allowedTypes: options?.allowedTypes,
288
295
  });
289
296
  if (!validation.valid) {
290
- throw new Error(validation.error);
297
+ throw new AteImageValidationError(validation.reason ?? "invalid-type", validation.error ?? "");
291
298
  }
292
299
  onStep?.(30, this.t().compressing);
293
300
  const result = await this.compressImage(file, options?.quality || 0.8, options?.maxWidth || 1920, options?.maxHeight || 1200);
@@ -343,7 +350,7 @@ export class AteImageService {
343
350
  this.currentEditor = null;
344
351
  }
345
352
  /** Main entry point for file upload and insertion */
346
- async uploadAndInsertImage(editor, file, options) {
353
+ async uploadAndInsertImage(editor, file, options, source = "api") {
347
354
  return this.uploadImageWithProgress(editor, file, (ed, result) => {
348
355
  this.insertImage(ed, {
349
356
  src: result.src,
@@ -352,7 +359,7 @@ export class AteImageService {
352
359
  width: result.width,
353
360
  height: result.height,
354
361
  });
355
- }, this.t().insertingImage, options);
362
+ }, this.t().insertingImage, options, source);
356
363
  }
357
364
  /** Trigger an editor transaction to force decoration update */
358
365
  forceEditorUpdate() {
@@ -378,7 +385,7 @@ export class AteImageService {
378
385
  const file = e.target.files?.[0];
379
386
  if (file && file.type.startsWith("image/")) {
380
387
  try {
381
- await uploadMethod(editor, file, options);
388
+ await uploadMethod(editor, file, options, "picker");
382
389
  resolve();
383
390
  }
384
391
  catch (error) {
@@ -409,7 +416,7 @@ export class AteImageService {
409
416
  return this.selectFileAndProcess(editor, this.uploadAndReplaceImage.bind(this), options);
410
417
  }
411
418
  /** Internal helper used by replacement logic */
412
- async uploadAndReplaceImage(editor, file, options) {
419
+ async uploadAndReplaceImage(editor, file, options, source = "api") {
413
420
  // Store current position to ensure we can re-select the image even if selection blurs during upload
414
421
  const wasActive = editor.isActive("resizableImage");
415
422
  await this.uploadImageWithProgress(editor, file, (ed, result) => {
@@ -439,7 +446,7 @@ export class AteImageService {
439
446
  }
440
447
  // After replacement, ensure the image is tracked in our signals
441
448
  this.selectImage(ed);
442
- }, this.t().replacingImage, options);
449
+ }, this.t().replacingImage, options, source);
443
450
  }
444
451
  /**
445
452
  * Handle image drop event.
@@ -461,7 +468,7 @@ export class AteImageService {
461
468
  if (pos) {
462
469
  editor.commands.setTextSelection(pos.pos);
463
470
  }
464
- void this.uploadAndInsertImage(editor, file, options);
471
+ this.uploadAndInsertImage(editor, file, options, "drop").catch(() => undefined);
465
472
  return true;
466
473
  }
467
474
  /**
@@ -477,7 +484,7 @@ export class AteImageService {
477
484
  return false;
478
485
  }
479
486
  event.preventDefault();
480
- void this.uploadAndInsertImage(editor, imageFile, options);
487
+ this.uploadAndInsertImage(editor, imageFile, options, "paste").catch(() => undefined);
481
488
  return true;
482
489
  }
483
490
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AteImageService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
@@ -486,4 +493,4 @@ export class AteImageService {
486
493
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AteImageService, decorators: [{
487
494
  type: Injectable
488
495
  }] });
489
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXRlLWltYWdlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXRpcHRhcC1lZGl0b3Ivc3JjL2xpYi9zZXJ2aWNlcy9hdGUtaW1hZ2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXJFLE9BQU8sRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7QUFVcEQsTUFBTSxPQUFPLGVBQWU7SUFENUI7UUFJRSw4QkFBOEI7UUFDOUIsa0JBQWEsR0FBRyxNQUFNLENBQXNCLElBQUksQ0FBQyxDQUFDO1FBQ2xELG9CQUFlLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsS0FBSyxJQUFJLENBQUMsQ0FBQztRQUVoRSxxQkFBcUI7UUFDckIsZUFBVSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVuQixTQUFJLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3JCLE1BQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUUzQywyQkFBMkI7UUFDM0IsZ0JBQVcsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUIsbUJBQWMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0Isa0JBQWEsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFM0I7OztXQUdHO1FBQ0gsa0JBQWEsR0FBaUMsSUFBSSxDQUFDO1FBRTNDLGtCQUFhLEdBQWtCLElBQUksQ0FBQztLQTBqQjdDO0lBeGpCQyxnREFBZ0Q7SUFDaEQsV0FBVyxDQUFDLE1BQWM7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RSxHQUFHLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDakYsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNSLE1BQU0sQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzVDLENBQUM7UUFFRCxLQUFLLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3RELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOztPQUVHO0lBQ0gsV0FBVyxDQUFDLE1BQWMsRUFBRSxLQUFxQixFQUFFLE9BQStCO1FBQ2hGLE1BQU0sY0FBYyxHQUFHLEtBQUssQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDO1FBQ2xELElBQUksQ0FBQyxjQUFjLElBQUksY0FBYyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNuRCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDMUYsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2YsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLEtBQUssSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDM0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDOytHQWpsQlUsZUFBZTttSEFBZixlQUFlOzs0RkFBZixlQUFlO2tCQUQzQixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgc2lnbmFsLCBjb21wdXRlZCwgaW5qZWN0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEVkaXRvciB9IGZyb20gXCJAdGlwdGFwL2NvcmVcIjtcbmltcG9ydCB7IGlzT2JzZXJ2YWJsZSwgZmlyc3RWYWx1ZUZyb20gfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgQXRlSTE4blNlcnZpY2UgfSBmcm9tIFwiLi9hdGUtaTE4bi5zZXJ2aWNlXCI7XG5pbXBvcnQge1xuICBBdGVSZXNpemVPcHRpb25zLFxuICBBdGVJbWFnZVVwbG9hZE9wdGlvbnMsXG4gIEF0ZUltYWdlVXBsb2FkSGFuZGxlcixcbiAgQXRlSW1hZ2VVcGxvYWRSZXN1bHQsXG4gIEF0ZUltYWdlRGF0YSxcbn0gZnJvbSBcIi4uL21vZGVscy9hdGUtaW1hZ2UubW9kZWxcIjtcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEF0ZUltYWdlU2VydmljZSB7XG4gIG9uSW1hZ2VVcGxvYWRlZENhbGxiYWNrPzogKHJlc3VsdDogQXRlSW1hZ2VVcGxvYWRSZXN1bHQpID0+IHZvaWQ7XG5cbiAgLyoqIFNpZ25hbHMgZm9yIGltYWdlIHN0YXRlICovXG4gIHNlbGVjdGVkSW1hZ2UgPSBzaWduYWw8QXRlSW1hZ2VEYXRhIHwgbnVsbD4obnVsbCk7XG4gIGlzSW1hZ2VTZWxlY3RlZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc2VsZWN0ZWRJbWFnZSgpICE9PSBudWxsKTtcblxuICAvKiogUmVzaXppbmcgc3RhdGUgKi9cbiAgaXNSZXNpemluZyA9IHNpZ25hbChmYWxzZSk7XG5cbiAgcHJpdmF0ZSBpMThuID0gaW5qZWN0KEF0ZUkxOG5TZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSB0ID0gdGhpcy5pMThuLmltYWdlVXBsb2FkO1xuXG4gIC8qKiBVcGxvYWQgc3RhdGUgc2lnbmFscyAqL1xuICBpc1VwbG9hZGluZyA9IHNpZ25hbChmYWxzZSk7XG4gIHVwbG9hZFByb2dyZXNzID0gc2lnbmFsKDApO1xuICB1cGxvYWRNZXNzYWdlID0gc2lnbmFsKFwiXCIpO1xuXG4gIC8qKlxuICAgKiBDdXN0b20gdXBsb2FkIGhhbmRsZXIuXG4gICAqIElmIHNldCwgdGhpcyBoYW5kbGVyIHJlcGxhY2VzIHRoZSBkZWZhdWx0IGJhc2U2NCBjb252ZXJzaW9uLlxuICAgKi9cbiAgdXBsb2FkSGFuZGxlcjogQXRlSW1hZ2VVcGxvYWRIYW5kbGVyIHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSBjdXJyZW50RWRpdG9yOiBFZGl0b3IgfCBudWxsID0gbnVsbDtcblxuICAvKiogU2VsZWN0IGFuZCB0cmFjayBhbiBpbWFnZSBmcm9tIHRoZSBlZGl0b3IgKi9cbiAgc2VsZWN0SW1hZ2UoZWRpdG9yOiBFZGl0b3IpOiB2b2lkIHtcbiAgICBpZiAoZWRpdG9yLmlzQWN0aXZlKFwicmVzaXphYmxlSW1hZ2VcIikpIHtcbiAgICAgIGNvbnN0IGF0dHJzID0gZWRpdG9yLmdldEF0dHJpYnV0ZXMoXCJyZXNpemFibGVJbWFnZVwiKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRJbWFnZS5zZXQoe1xuICAgICAgICBzcmM6IGF0dHJzW1wic3JjXCJdLFxuICAgICAgICBhbHQ6IGF0dHJzW1wiYWx0XCJdLFxuICAgICAgICB0aXRsZTogYXR0cnNbXCJ0aXRsZVwiXSxcbiAgICAgICAgd2lkdGg6IGF0dHJzW1wid2lkdGhcIl0sXG4gICAgICAgIGhlaWdodDogYXR0cnNbXCJoZWlnaHRcIl0sXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RlZEltYWdlLnNldChudWxsKTtcbiAgICB9XG4gIH1cblxuICBjbGVhclNlbGVjdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkSW1hZ2Uuc2V0KG51bGwpO1xuICB9XG5cbiAgLyoqIEluc2VydCBhIG5ldyBpbWFnZSBhbmQgZW5zdXJlIGl0J3Mgc2VsZWN0ZWQgKi9cbiAgaW5zZXJ0SW1hZ2UoZWRpdG9yOiBFZGl0b3IsIGltYWdlRGF0YTogQXRlSW1hZ2VEYXRhKTogdm9pZCB7XG4gICAgZWRpdG9yXG4gICAgICAuY2hhaW4oKVxuICAgICAgLmZvY3VzKClcbiAgICAgIC5zZXRSZXNpemFibGVJbWFnZShpbWFnZURhdGEpXG4gICAgICAuY29tbWFuZCgoeyB0ciwgY29tbWFuZHMgfSkgPT4ge1xuICAgICAgICAvLyBTZWxlY3Rpb24gaXMgdXN1YWxseSBhZnRlciB0aGUgbm9kZS4gTm9kZSBpcyBhdCB0ci5zZWxlY3Rpb24uZnJvbSAtIDEuXG4gICAgICAgIGNvbnN0IHsgZnJvbSB9ID0gdHIuc2VsZWN0aW9uO1xuICAgICAgICAvLyBUcnkgdG8gc2VsZWN0IG5vZGUgYXQgY3VycmVudCBwb3MgKGlmIGl0IHdhcyBhbHJlYWR5IHNlbGVjdGVkKSBvciBwcmV2aW91cyBwb3NcbiAgICAgICAgcmV0dXJuIGNvbW1hbmRzLnNldE5vZGVTZWxlY3Rpb24oZnJvbSkgfHwgY29tbWFuZHMuc2V0Tm9kZVNlbGVjdGlvbihmcm9tIC0gMSkgfHwgdHJ1ZTtcbiAgICAgIH0pXG4gICAgICAucnVuKCk7XG4gIH1cblxuICAvKiogVXBkYXRlIGF0dHJpYnV0ZXMgb2YgdGhlIGN1cnJlbnRseSBhY3RpdmUgaW1hZ2UgKi9cbiAgdXBkYXRlSW1hZ2VBdHRyaWJ1dGVzKGVkaXRvcjogRWRpdG9yLCBhdHRyaWJ1dGVzOiBQYXJ0aWFsPEF0ZUltYWdlRGF0YT4pOiB2b2lkIHtcbiAgICBpZiAoZWRpdG9yLmlzQWN0aXZlKFwicmVzaXphYmxlSW1hZ2VcIikpIHtcbiAgICAgIGNvbnN0IHBvcyA9IGVkaXRvci5zdGF0ZS5zZWxlY3Rpb24uZnJvbTtcbiAgICAgIGVkaXRvclxuICAgICAgICAuY2hhaW4oKVxuICAgICAgICAuZm9jdXMoKVxuICAgICAgICAudXBkYXRlQXR0cmlidXRlcyhcInJlc2l6YWJsZUltYWdlXCIsIGF0dHJpYnV0ZXMpXG4gICAgICAgIC5zZXROb2RlU2VsZWN0aW9uKHBvcylcbiAgICAgICAgLnJ1bigpO1xuICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZEltYWdlKGF0dHJpYnV0ZXMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBSZXNpemUgaW1hZ2Ugd2l0aCBvcHRpb25hbCBhc3BlY3QgcmF0aW8gbWFpbnRlbmFuY2UgKi9cbiAgcmVzaXplSW1hZ2UoZWRpdG9yOiBFZGl0b3IsIG9wdGlvbnM6IEF0ZVJlc2l6ZU9wdGlvbnMpOiB2b2lkIHtcbiAgICBpZiAoIWVkaXRvci5pc0FjdGl2ZShcInJlc2l6YWJsZUltYWdlXCIpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudEF0dHJzID0gZWRpdG9yLmdldEF0dHJpYnV0ZXMoXCJyZXNpemFibGVJbWFnZVwiKTtcbiAgICBsZXQgbmV3V2lkdGggPSBvcHRpb25zLndpZHRoO1xuICAgIGxldCBuZXdIZWlnaHQgPSBvcHRpb25zLmhlaWdodDtcblxuICAgIC8vIE1haW50YWluIGFzcGVjdCByYXRpbyBpZiByZXF1ZXN0ZWRcbiAgICBpZiAob3B0aW9ucy5tYWludGFpbkFzcGVjdFJhdGlvICE9PSBmYWxzZSAmJiBjdXJyZW50QXR0cnNbXCJ3aWR0aFwiXSAmJiBjdXJyZW50QXR0cnNbXCJoZWlnaHRcIl0pIHtcbiAgICAgIGNvbnN0IGFzcGVjdFJhdGlvID0gY3VycmVudEF0dHJzW1wid2lkdGhcIl0gLyBjdXJyZW50QXR0cnNbXCJoZWlnaHRcIl07XG5cbiAgICAgIGlmIChuZXdXaWR0aCAmJiAhbmV3SGVpZ2h0KSB7XG4gICAgICAgIG5ld0hlaWdodCA9IE1hdGgucm91bmQobmV3V2lkdGggLyBhc3BlY3RSYXRpbyk7XG4gICAgICB9IGVsc2UgaWYgKG5ld0hlaWdodCAmJiAhbmV3V2lkdGgpIHtcbiAgICAgICAgbmV3V2lkdGggPSBNYXRoLnJvdW5kKG5ld0hlaWdodCAqIGFzcGVjdFJhdGlvKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBcHBseSBtaW5pbXVtIGxpbWl0c1xuICAgIGlmIChuZXdXaWR0aCkge1xuICAgICAgbmV3V2lkdGggPSBNYXRoLm1heCg1MCwgbmV3V2lkdGgpO1xuICAgIH1cbiAgICBpZiAobmV3SGVpZ2h0KSB7XG4gICAgICBuZXdIZWlnaHQgPSBNYXRoLm1heCg1MCwgbmV3SGVpZ2h0KTtcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZUltYWdlQXR0cmlidXRlcyhlZGl0b3IsIHtcbiAgICAgIHdpZHRoOiBuZXdXaWR0aCxcbiAgICAgIGhlaWdodDogbmV3SGVpZ2h0LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqIFByZWRldGVybWluZWQgcmVzaXplIGhlbHBlcnMgdXNlZCBieSBVSSAqL1xuICByZXNpemVJbWFnZVRvU21hbGwoZWRpdG9yOiBFZGl0b3IpOiB2b2lkIHtcbiAgICB0aGlzLnJlc2l6ZUltYWdlKGVkaXRvciwgeyB3aWR0aDogMzAwLCBoZWlnaHQ6IDIwMCwgbWFpbnRhaW5Bc3BlY3RSYXRpbzogdHJ1ZSB9KTtcbiAgfVxuXG4gIHJlc2l6ZUltYWdlVG9NZWRpdW0oZWRpdG9yOiBFZGl0b3IpOiB2b2lkIHtcbiAgICB0aGlzLnJlc2l6ZUltYWdlKGVkaXRvciwgeyB3aWR0aDogNTAwLCBoZWlnaHQ6IDM1MCwgbWFpbnRhaW5Bc3BlY3RSYXRpbzogdHJ1ZSB9KTtcbiAgfVxuXG4gIHJlc2l6ZUltYWdlVG9MYXJnZShlZGl0b3I6IEVkaXRvcik6IHZvaWQge1xuICAgIHRoaXMucmVzaXplSW1hZ2UoZWRpdG9yLCB7IHdpZHRoOiA4MDAsIGhlaWdodDogNjAwLCBtYWludGFpbkFzcGVjdFJhdGlvOiB0cnVlIH0pO1xuICB9XG5cbiAgcmVzaXplSW1hZ2VUb09yaWdpbmFsKGVkaXRvcjogRWRpdG9yKTogdm9pZCB7XG4gICAgaWYgKCFlZGl0b3IuaXNBY3RpdmUoXCJyZXNpemFibGVJbWFnZVwiKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpbWcgPSBuZXcgSW1hZ2UoKTtcbiAgICBpbWcub25sb2FkID0gKCkgPT4ge1xuICAgICAgdGhpcy5yZXNpemVJbWFnZShlZGl0b3IsIHsgd2lkdGg6IGltZy5uYXR1cmFsV2lkdGgsIGhlaWdodDogaW1nLm5hdHVyYWxIZWlnaHQgfSk7XG4gICAgfTtcbiAgICBpbWcuc3JjID0gZWRpdG9yLmdldEF0dHJpYnV0ZXMoXCJyZXNpemFibGVJbWFnZVwiKVtcInNyY1wiXTtcbiAgfVxuXG4gIC8qKiBHZXQgY3VycmVudCBpbWFnZSBkaW1lbnNpb25zICovXG4gIGdldEltYWdlRGltZW5zaW9ucyhlZGl0b3I6IEVkaXRvcik6IHsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfSB8IG51bGwge1xuICAgIGlmICghZWRpdG9yLmlzQWN0aXZlKFwicmVzaXphYmxlSW1hZ2VcIikpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBhdHRycyA9IGVkaXRvci5nZXRBdHRyaWJ1dGVzKFwicmVzaXphYmxlSW1hZ2VcIik7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdpZHRoOiBhdHRyc1tcIndpZHRoXCJdIHx8IDAsXG4gICAgICBoZWlnaHQ6IGF0dHJzW1wiaGVpZ2h0XCJdIHx8IDAsXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBSZW1vdmUgdGhlIHNlbGVjdGVkIGltYWdlICovXG4gIGRlbGV0ZUltYWdlKGVkaXRvcjogRWRpdG9yKTogdm9pZCB7XG4gICAgaWYgKGVkaXRvci5pc0FjdGl2ZShcInJlc2l6YWJsZUltYWdlXCIpKSB7XG4gICAgICBlZGl0b3IuY2hhaW4oKS5mb2N1cygpLmRlbGV0ZVNlbGVjdGlvbigpLnJ1bigpO1xuICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBEb3dubG9hZCB0aGUgY3VycmVudCBpbWFnZSAqL1xuICBkb3dubG9hZEltYWdlKGVkaXRvcjogRWRpdG9yKTogdm9pZCB7XG4gICAgY29uc3QgYXR0cnMgPSBlZGl0b3IuZ2V0QXR0cmlidXRlcyhcInJlc2l6YWJsZUltYWdlXCIpO1xuICAgIGlmICghYXR0cnMgfHwgIWF0dHJzW1wic3JjXCJdKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc3JjID0gYXR0cnNbXCJzcmNcIl07XG4gICAgY29uc3QgZmlsZU5hbWUgPSBhdHRyc1tcImFsdFwiXSB8fCBcImltYWdlXCI7XG5cbiAgICAvLyBEZXRlY3QgaWYgaXQncyBiYXNlNjQgb3IgcmVtb3RlIFVSTFxuICAgIGlmIChcbiAgICAgIHNyYy5zdGFydHNXaXRoKFwiZGF0YTpcIikgfHxcbiAgICAgIHNyYy5zdGFydHNXaXRoKFwiYmxvYjpcIikgfHxcbiAgICAgICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHNyYy5zdGFydHNXaXRoKHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4pKVxuICAgICkge1xuICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xuICAgICAgbGluay5ocmVmID0gc3JjO1xuICAgICAgbGluay5kb3dubG9hZCA9IGZpbGVOYW1lO1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTtcbiAgICAgIGxpbmsuY2xpY2soKTtcbiAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobGluayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEZvciByZW1vdGUgVVJMcywgd2UgdHJ5IHRvIGZldGNoIGl0IHRvIGJ5cGFzcyBjcm9zcy1vcmlnaW4gcmVzdHJpY3Rpb25zIG9uICdkb3dubG9hZCcgYXR0cmlidXRlXG4gICAgICBmZXRjaChzcmMpXG4gICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHJlc3BvbnNlLmJsb2IoKSlcbiAgICAgICAgLnRoZW4oYmxvYiA9PiB7XG4gICAgICAgICAgY29uc3QgdXJsID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gICAgICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xuICAgICAgICAgIGxpbmsuaHJlZiA9IHVybDtcbiAgICAgICAgICBsaW5rLmRvd25sb2FkID0gZmlsZU5hbWU7XG4gICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTtcbiAgICAgICAgICBsaW5rLmNsaWNrKCk7XG4gICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaW5rKTtcbiAgICAgICAgICB3aW5kb3cuVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgZG93bmxvYWRpbmcgaW1hZ2U6XCIsIGVycik7XG4gICAgICAgICAgLy8gRmFsbGJhY2sgdG8gb3BlbmluZyBpbiBuZXcgdGFiXG4gICAgICAgICAgd2luZG93Lm9wZW4oc3JjLCBcIl9ibGFua1wiKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTZWxlY3RlZEltYWdlKGF0dHJpYnV0ZXM6IFBhcnRpYWw8QXRlSW1hZ2VEYXRhPik6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLnNlbGVjdGVkSW1hZ2UoKTtcbiAgICBpZiAoY3VycmVudCkge1xuICAgICAgdGhpcy5zZWxlY3RlZEltYWdlLnNldCh7IC4uLmN1cnJlbnQsIC4uLmF0dHJpYnV0ZXMgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFZhbGlkYXRlIGZpbGUgdHlwZSBhbmQgc2l6ZSAqL1xuICB2YWxpZGF0ZUltYWdlKFxuICAgIGZpbGU6IEZpbGUsXG4gICAgb3B0aW9ucz86IHsgbWF4U2l6ZT86IG51bWJlcjsgYWxsb3dlZFR5cGVzPzogc3RyaW5nW10gfVxuICApOiB7IHZhbGlkOiBib29sZWFuOyBlcnJvcj86IHN0cmluZyB9IHtcbiAgICBjb25zdCBtYXhTaXplID0gb3B0aW9ucz8ubWF4U2l6ZSB8fCAxMCAqIDEwMjQgKiAxMDI0O1xuICAgIGNvbnN0IGFsbG93ZWRUeXBlcyA9IG9wdGlvbnM/LmFsbG93ZWRUeXBlcyB8fCBbXTtcblxuICAgIGlmIChhbGxvd2VkVHlwZXMubGVuZ3RoID4gMCAmJiAhYWxsb3dlZFR5cGVzLmluY2x1ZGVzKGZpbGUudHlwZSkpIHtcbiAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgZXJyb3I6IHRoaXMudCgpLmludmFsaWRGaWxlVHlwZSB9O1xuICAgIH1cblxuICAgIGlmIChmaWxlLnNpemUgPiBtYXhTaXplKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWxpZDogZmFsc2UsXG4gICAgICAgIGVycm9yOiBgJHt0aGlzLnQoKS5pbWFnZVRvb0xhcmdlfSAobWF4ICR7TWF0aC5yb3VuZChtYXhTaXplIC8gMTAyNCAvIDEwMjQpfU1CKWAsXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSB9O1xuICB9XG5cbiAgLyoqIENvbXByZXNzIGFuZCBwcm9jZXNzIGltYWdlIG9uIGNsaWVudCBzaWRlICovXG4gIGFzeW5jIGNvbXByZXNzSW1hZ2UoXG4gICAgZmlsZTogRmlsZSxcbiAgICBxdWFsaXR5ID0gMC44LFxuICAgIG1heFdpZHRoID0gMTkyMCxcbiAgICBtYXhIZWlnaHQgPSAxMjAwXG4gICk6IFByb21pc2U8QXRlSW1hZ2VVcGxvYWRSZXN1bHQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcbiAgICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XG4gICAgICBjb25zdCBpbWcgPSBuZXcgSW1hZ2UoKTtcblxuICAgICAgaW1nLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuaXNVcGxvYWRpbmcoKSkge1xuICAgICAgICAgIHRoaXMudXBsb2FkUHJvZ3Jlc3Muc2V0KDQwKTtcbiAgICAgICAgICB0aGlzLnVwbG9hZE1lc3NhZ2Uuc2V0KHRoaXMudCgpLnJlc2l6aW5nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCB7IHdpZHRoLCBoZWlnaHQgfSA9IGltZztcbiAgICAgICAgaWYgKHdpZHRoID4gbWF4V2lkdGggfHwgaGVpZ2h0ID4gbWF4SGVpZ2h0KSB7XG4gICAgICAgICAgY29uc3QgcmF0aW8gPSBNYXRoLm1pbihtYXhXaWR0aCAvIHdpZHRoLCBtYXhIZWlnaHQgLyBoZWlnaHQpO1xuICAgICAgICAgIHdpZHRoICo9IHJhdGlvO1xuICAgICAgICAgIGhlaWdodCAqPSByYXRpbztcbiAgICAgICAgfVxuXG4gICAgICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgICAgICBjdHg/LmRyYXdJbWFnZShpbWcsIDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgICAgIGlmICh0aGlzLmlzVXBsb2FkaW5nKCkpIHtcbiAgICAgICAgICB0aGlzLnVwbG9hZFByb2dyZXNzLnNldCg2MCk7XG4gICAgICAgICAgdGhpcy51cGxvYWRNZXNzYWdlLnNldCh0aGlzLnQoKS5jb21wcmVzc2luZyk7XG4gICAgICAgIH1cblxuICAgICAgICBjYW52YXMudG9CbG9iKFxuICAgICAgICAgIGJsb2IgPT4ge1xuICAgICAgICAgICAgaWYgKGJsb2IpIHtcbiAgICAgICAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGUgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJhc2U2NCA9IGUudGFyZ2V0Py5yZXN1bHQgYXMgc3RyaW5nO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgc3JjOiBiYXNlNjQsXG4gICAgICAgICAgICAgICAgICBuYW1lOiBmaWxlLm5hbWUsXG4gICAgICAgICAgICAgICAgICBzaXplOiBibG9iLnNpemUsXG4gICAgICAgICAgICAgICAgICB0eXBlOiBmaWxlLnR5cGUsXG4gICAgICAgICAgICAgICAgICB3aWR0aDogTWF0aC5yb3VuZCh3aWR0aCksXG4gICAgICAgICAgICAgICAgICBoZWlnaHQ6IE1hdGgucm91bmQoaGVpZ2h0KSxcbiAgICAgICAgICAgICAgICAgIG9yaWdpbmFsU2l6ZTogZmlsZS5zaXplLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChibG9iKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IodGhpcy50KCkuY29tcHJlc3Npb25FcnJvcikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgZmlsZS50eXBlLFxuICAgICAgICAgIHF1YWxpdHlcbiAgICAgICAgKTtcbiAgICAgIH07XG5cbiAgICAgIGltZy5vbmVycm9yID0gKCkgPT4gcmVqZWN0KG5ldyBFcnJvcih0aGlzLnQoKS5sb2FkRXJyb3IpKTtcbiAgICAgIGltZy5zcmMgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGZpbGUpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqIENvcmUgdXBsb2FkIGxvZ2ljIHdpdGggcHJvZ3Jlc3MgdHJhY2tpbmcgKi9cbiAgcHJpdmF0ZSBhc3luYyB1cGxvYWRJbWFnZVdpdGhQcm9ncmVzcyhcbiAgICBlZGl0b3I6IEVkaXRvcixcbiAgICBmaWxlOiBGaWxlLFxuICAgIGluc2VydGlvblN0cmF0ZWd5OiAoZWRpdG9yOiBFZGl0b3IsIHJlc3VsdDogQXRlSW1hZ2VVcGxvYWRSZXN1bHQpID0+IHZvaWQsXG4gICAgYWN0aW9uTWVzc2FnZTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBBdGVJbWFnZVVwbG9hZE9wdGlvbnNcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuY3VycmVudEVkaXRvciA9IGVkaXRvcjtcbiAgICAgIHRoaXMuaXNVcGxvYWRpbmcuc2V0KHRydWUpO1xuICAgICAgdGhpcy51cGxvYWRQcm9ncmVzcy5zZXQoMTApO1xuICAgICAgdGhpcy51cGxvYWRNZXNzYWdlLnNldCh0aGlzLnQoKS52YWxpZGF0aW5nKTtcbiAgICAgIHRoaXMuZm9yY2VFZGl0b3JVcGRhdGUoKTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5wcm9jZXNzSW1hZ2UoZmlsZSwgb3B0aW9ucywgKHByb2dyZXNzLCBtZXNzYWdlKSA9PiB7XG4gICAgICAgIGlmIChwcm9ncmVzcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy51cGxvYWRQcm9ncmVzcy5zZXQocHJvZ3Jlc3MpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXNzYWdlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLnVwbG9hZE1lc3NhZ2Uuc2V0KG1lc3NhZ2UpO1xuICAgICAgICAgIHRoaXMuZm9yY2VFZGl0b3JVcGRhdGUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMudXBsb2FkUHJvZ3Jlc3Muc2V0KDkwKTtcbiAgICAgIHRoaXMudXBsb2FkTWVzc2FnZS5zZXQoYWN0aW9uTWVzc2FnZSk7XG4gICAgICB0aGlzLmZvcmNlRWRpdG9yVXBkYXRlKCk7XG5cbiAgICAgIC8vIEZpbmFsIGluc2VydGlvblxuICAgICAgaW5zZXJ0aW9uU3RyYXRlZ3koZWRpdG9yLCByZXN1bHQpO1xuXG4gICAgICBpZiAodGhpcy5vbkltYWdlVXBsb2FkZWRDYWxsYmFjaykge1xuICAgICAgICB0aGlzLm9uSW1hZ2VVcGxvYWRlZENhbGxiYWNrKHJlc3VsdCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucmVzZXRVcGxvYWRTdGF0ZSgpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLnJlc2V0VXBsb2FkU3RhdGUoKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IodGhpcy50KCkudXBsb2FkRXJyb3IsIGVycm9yKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBWYWxpZGF0ZSwgY29tcHJlc3MgYW5kICh3aGVuIGNvbmZpZ3VyZWQpIHNlbmQgYW4gaW1hZ2UgdG8gdGhlIHVwbG9hZCBoYW5kbGVyICovXG4gIHByaXZhdGUgYXN5bmMgcHJvY2Vzc0ltYWdlKFxuICAgIGZpbGU6IEZpbGUsXG4gICAgb3B0aW9ucz86IEF0ZUltYWdlVXBsb2FkT3B0aW9ucyxcbiAgICBvblN0ZXA/OiAocHJvZ3Jlc3M/OiBudW1iZXIsIG1lc3NhZ2U/OiBzdHJpbmcpID0+IHZvaWRcbiAgKTogUHJvbWlzZTxBdGVJbWFnZVVwbG9hZFJlc3VsdD4ge1xuICAgIGNvbnN0IHZhbGlkYXRpb24gPSB0aGlzLnZhbGlkYXRlSW1hZ2UoZmlsZSwge1xuICAgICAgbWF4U2l6ZTogb3B0aW9ucz8ubWF4U2l6ZSxcbiAgICAgIGFsbG93ZWRUeXBlczogb3B0aW9ucz8uYWxsb3dlZFR5cGVzLFxuICAgIH0pO1xuICAgIGlmICghdmFsaWRhdGlvbi52YWxpZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHZhbGlkYXRpb24uZXJyb3IpO1xuICAgIH1cblxuICAgIG9uU3RlcD8uKDMwLCB0aGlzLnQoKS5jb21wcmVzc2luZyk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmNvbXByZXNzSW1hZ2UoXG4gICAgICBmaWxlLFxuICAgICAgb3B0aW9ucz8ucXVhbGl0eSB8fCAwLjgsXG4gICAgICBvcHRpb25zPy5tYXhXaWR0aCB8fCAxOTIwLFxuICAgICAgb3B0aW9ucz8ubWF4SGVpZ2h0IHx8IDEyMDBcbiAgICApO1xuXG4gICAgb25TdGVwPy4oNzApO1xuXG4gICAgLy8gSGFuZGxlIGN1c3RvbSB1cGxvYWQgaWYgaGFuZGxlciBpcyBwcm92aWRlZFxuICAgIGlmICh0aGlzLnVwbG9hZEhhbmRsZXIpIHtcbiAgICAgIG9uU3RlcD8uKHVuZGVmaW5lZCwgdGhpcy50KCkudXBsb2FkaW5nVG9TZXJ2ZXIpO1xuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBoYW5kbGVyUmVzcG9uc2UgPSB0aGlzLnVwbG9hZEhhbmRsZXIoe1xuICAgICAgICAgIGZpbGUsXG4gICAgICAgICAgd2lkdGg6IHJlc3VsdC53aWR0aCB8fCAwLFxuICAgICAgICAgIGhlaWdodDogcmVzdWx0LmhlaWdodCB8fCAwLFxuICAgICAgICAgIHR5cGU6IHJlc3VsdC50eXBlLFxuICAgICAgICAgIGJhc2U2NDogcmVzdWx0LnNyYyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgaGFuZGxlclJlc3VsdCA9IGlzT2JzZXJ2YWJsZShoYW5kbGVyUmVzcG9uc2UpXG4gICAgICAgICAgPyBhd2FpdCBmaXJzdFZhbHVlRnJvbShoYW5kbGVyUmVzcG9uc2UpXG4gICAgICAgICAgOiBhd2FpdCBoYW5kbGVyUmVzcG9uc2U7XG5cbiAgICAgICAgcmVzdWx0LnNyYyA9IGhhbmRsZXJSZXN1bHQuc3JjO1xuICAgICAgICBpZiAoaGFuZGxlclJlc3VsdC5hbHQpIHtcbiAgICAgICAgICByZXN1bHQubmFtZSA9IGhhbmRsZXJSZXN1bHQuYWx0O1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChoYW5kbGVyRXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcih0aGlzLnQoKS51cGxvYWRFcnJvciwgaGFuZGxlckVycm9yKTtcbiAgICAgICAgdGhyb3cgaGFuZGxlckVycm9yO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogUnVuIGFuIGltYWdlIHRoYXQgaXMgYWxyZWFkeSBpbiB0aGUgZG9jdW1lbnQgKGUuZy4gYmFzZTY0IGZyb20gcGFzdGVkIEhUTUwpXG4gICAqIHRocm91Z2ggdmFsaWRhdGlvbiwgY29tcHJlc3Npb24gYW5kIHRoZSB1cGxvYWQgaGFuZGxlciwgYW5kIHJlc29sdmUgdG8gaXRzIG5ldyBgc3JjYC5cbiAgICovXG4gIGFzeW5jIHJlaG9zdEltYWdlKGZpbGU6IEZpbGUsIG9wdGlvbnM/OiBBdGVJbWFnZVVwbG9hZE9wdGlvbnMpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnByb2Nlc3NJbWFnZShmaWxlLCBvcHRpb25zKTtcbiAgICAgIGlmICh0aGlzLm9uSW1hZ2VVcGxvYWRlZENhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMub25JbWFnZVVwbG9hZGVkQ2FsbGJhY2socmVzdWx0KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQuc3JjO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKHRoaXMudCgpLnVwbG9hZEVycm9yLCBlcnJvcik7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlc2V0VXBsb2FkU3RhdGUoKSB7XG4gICAgdGhpcy5pc1VwbG9hZGluZy5zZXQoZmFsc2UpO1xuICAgIHRoaXMudXBsb2FkUHJvZ3Jlc3Muc2V0KDApO1xuICAgIHRoaXMudXBsb2FkTWVzc2FnZS5zZXQoXCJcIik7XG4gICAgdGhpcy5mb3JjZUVkaXRvclVwZGF0ZSgpO1xuICAgIHRoaXMuY3VycmVudEVkaXRvciA9IG51bGw7XG4gIH1cblxuICAvKiogTWFpbiBlbnRyeSBwb2ludCBmb3IgZmlsZSB1cGxvYWQgYW5kIGluc2VydGlvbiAqL1xuICBhc3luYyB1cGxvYWRBbmRJbnNlcnRJbWFnZShcbiAgICBlZGl0b3I6IEVkaXRvcixcbiAgICBmaWxlOiBGaWxlLFxuICAgIG9wdGlvbnM/OiBBdGVJbWFnZVVwbG9hZE9wdGlvbnNcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMudXBsb2FkSW1hZ2VXaXRoUHJvZ3Jlc3MoXG4gICAgICBlZGl0b3IsXG4gICAgICBmaWxlLFxuICAgICAgKGVkLCByZXN1bHQpID0+IHtcbiAgICAgICAgdGhpcy5pbnNlcnRJbWFnZShlZCwge1xuICAgICAgICAgIHNyYzogcmVzdWx0LnNyYyxcbiAgICAgICAgICBhbHQ6IHJlc3VsdC5uYW1lLFxuICAgICAgICAgIHRpdGxlOiBgJHtyZXN1bHQubmFtZX0gKCR7cmVzdWx0LndpZHRofcOXJHtyZXN1bHQuaGVpZ2h0fSlgLFxuICAgICAgICAgIHdpZHRoOiByZXN1bHQud2lkdGgsXG4gICAgICAgICAgaGVpZ2h0OiByZXN1bHQuaGVpZ2h0LFxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICB0aGlzLnQoKS5pbnNlcnRpbmdJbWFnZSxcbiAgICAgIG9wdGlvbnNcbiAgICApO1xuICB9XG5cbiAgLyoqIFRyaWdnZXIgYW4gZWRpdG9yIHRyYW5zYWN0aW9uIHRvIGZvcmNlIGRlY29yYXRpb24gdXBkYXRlICovXG4gIHByaXZhdGUgZm9yY2VFZGl0b3JVcGRhdGUoKSB7XG4gICAgaWYgKHRoaXMuY3VycmVudEVkaXRvcikge1xuICAgICAgY29uc3QgeyB0ciB9ID0gdGhpcy5jdXJyZW50RWRpdG9yLnN0YXRlO1xuICAgICAgdGhpcy5jdXJyZW50RWRpdG9yLnZpZXcuZGlzcGF0Y2godHIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBHZW5lcmljIGhlbHBlciB0byBvcGVuIGZpbGUgcGlja2VyIGFuZCBwcm9jZXNzIHNlbGVjdGlvbiAqL1xuICBwcml2YXRlIGFzeW5jIHNlbGVjdEZpbGVBbmRQcm9jZXNzKFxuICAgIGVkaXRvcjogRWRpdG9yLFxuICAgIHVwbG9hZE1ldGhvZDogKGVkaXRvcjogRWRpdG9yLCBmaWxlOiBGaWxlLCBvcHRpb25zPzogQXRlSW1hZ2VVcGxvYWRPcHRpb25zKSA9PiBQcm9taXNlPHZvaWQ+LFxuICAgIG9wdGlvbnM/OiBBdGVJbWFnZVVwbG9hZE9wdGlvbnNcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICAgICAgaW5wdXQudHlwZSA9IFwiZmlsZVwiO1xuXG4gICAgICAvLyBVc2UgYWxsb3dlZFR5cGVzIGlmIHByb3ZpZGVkLCBvdGhlcndpc2UgZGVmYXVsdCB0byBpbWFnZS8qXG4gICAgICBpZiAob3B0aW9ucz8uYWxsb3dlZFR5cGVzICYmIG9wdGlvbnMuYWxsb3dlZFR5cGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaW5wdXQuYWNjZXB0ID0gb3B0aW9ucy5hbGxvd2VkVHlwZXMuam9pbihcIixcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbnB1dC5hY2NlcHQgPSBcImltYWdlLypcIjtcbiAgICAgIH1cblxuICAgICAgaW5wdXQuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuXG4gICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsIGFzeW5jIGUgPT4ge1xuICAgICAgICBjb25zdCBmaWxlID0gKGUudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLmZpbGVzPy5bMF07XG4gICAgICAgIGlmIChmaWxlICYmIGZpbGUudHlwZS5zdGFydHNXaXRoKFwiaW1hZ2UvXCIpKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IHVwbG9hZE1ldGhvZChlZGl0b3IsIGZpbGUsIG9wdGlvbnMpO1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKHRoaXMudCgpLm5vRmlsZVNlbGVjdGVkKSk7XG4gICAgICAgIH1cbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChpbnB1dCk7XG4gICAgICB9KTtcblxuICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImNhbmNlbFwiLCAoKSA9PiB7XG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoaW5wdXQpO1xuICAgICAgICByZWplY3QobmV3IEVycm9yKHRoaXMudCgpLnNlbGVjdGlvbkNhbmNlbGxlZCkpO1xuICAgICAgfSk7XG5cbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaW5wdXQpO1xuICAgICAgaW5wdXQuY2xpY2soKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBTZWxlY3QgZmlsZSBhbmQgdXBsb2FkIGFzIG5ldyBpbWFnZSAqL1xuICBhc3luYyBzZWxlY3RBbmRVcGxvYWRJbWFnZShlZGl0b3I6IEVkaXRvciwgb3B0aW9ucz86IEF0ZUltYWdlVXBsb2FkT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdEZpbGVBbmRQcm9jZXNzKGVkaXRvciwgdGhpcy51cGxvYWRBbmRJbnNlcnRJbWFnZS5iaW5kKHRoaXMpLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKiBTZWxlY3QgZmlsZSBhbmQgcmVwbGFjZSBjdXJyZW50bHkgc2VsZWN0ZWQgaW1hZ2UgKi9cbiAgYXN5bmMgc2VsZWN0QW5kUmVwbGFjZUltYWdlKGVkaXRvcjogRWRpdG9yLCBvcHRpb25zPzogQXRlSW1hZ2VVcGxvYWRPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gTm8gbmVlZCBmb3IgY29tcGxpY2F0ZWQgYmFja3VwL3Jlc3RvcmUgbm93IHRoYXQgd2UgZG9uJ3QgZGVsZXRlIHByZW1hdHVyZWx5LlxuICAgIC8vIFRoZSB1cGxvYWRBbmRSZXBsYWNlSW1hZ2Ugd2lsbCBoYW5kbGUgdGhlIGF0b21pYyByZXBsYWNlbWVudC5cbiAgICByZXR1cm4gdGhpcy5zZWxlY3RGaWxlQW5kUHJvY2VzcyhlZGl0b3IsIHRoaXMudXBsb2FkQW5kUmVwbGFjZUltYWdlLmJpbmQodGhpcyksIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqIEludGVybmFsIGhlbHBlciB1c2VkIGJ5IHJlcGxhY2VtZW50IGxvZ2ljICovXG4gIGFzeW5jIHVwbG9hZEFuZFJlcGxhY2VJbWFnZShcbiAgICBlZGl0b3I6IEVkaXRvcixcbiAgICBmaWxlOiBGaWxlLFxuICAgIG9wdGlvbnM/OiBBdGVJbWFnZVVwbG9hZE9wdGlvbnNcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gU3RvcmUgY3VycmVudCBwb3NpdGlvbiB0byBlbnN1cmUgd2UgY2FuIHJlLXNlbGVjdCB0aGUgaW1hZ2UgZXZlbiBpZiBzZWxlY3Rpb24gYmx1cnMgZHVyaW5nIHVwbG9hZFxuICAgIGNvbnN0IHdhc0FjdGl2ZSA9IGVkaXRvci5pc0FjdGl2ZShcInJlc2l6YWJsZUltYWdlXCIpO1xuXG4gICAgYXdhaXQgdGhpcy51cGxvYWRJbWFnZVdpdGhQcm9ncmVzcyhcbiAgICAgIGVkaXRvcixcbiAgICAgIGZpbGUsXG4gICAgICAoZWQsIHJlc3VsdCkgPT4ge1xuICAgICAgICBjb25zdCBpbWFnZURhdGEgPSB7XG4gICAgICAgICAgc3JjOiByZXN1bHQuc3JjLFxuICAgICAgICAgIGFsdDogcmVzdWx0Lm5hbWUsXG4gICAgICAgICAgdGl0bGU6IGAke3Jlc3VsdC5uYW1lfSAoJHtyZXN1bHQud2lkdGh9w5cke3Jlc3VsdC5oZWlnaHR9KWAsXG4gICAgICAgICAgd2lkdGg6IHJlc3VsdC53aWR0aCxcbiAgICAgICAgICBoZWlnaHQ6IHJlc3VsdC5oZWlnaHQsXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gSWYgdGhlIGltYWdlIHdhcyBhY3RpdmUgb3IgaXMgc3RpbGwgYWN0aXZlLCB1cGRhdGUgaXQgYXRvbWljYWxseVxuICAgICAgICBpZiAod2FzQWN0aXZlIHx8IGVkLmlzQWN0aXZlKFwicmVzaXphYmxlSW1hZ2VcIikpIHtcbiAgICAgICAgICBlZC5jaGFpbigpXG4gICAgICAgICAgICAuZm9jdXMoKVxuICAgICAgICAgICAgLnVwZGF0ZUF0dHJpYnV0ZXMoXCJyZXNpemFibGVJbWFnZVwiLCBpbWFnZURhdGEpXG4gICAgICAgICAgICAuY29tbWFuZCgoeyB0ciwgY29tbWFuZHMgfSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCB7IGZyb20gfSA9IHRyLnNlbGVjdGlvbjtcbiAgICAgICAgICAgICAgLy8gUmUtc2VsZWN0IHRoZSBub2RlIGF0IGl0cyBtYXBwZWQgcG9zaXRpb24gb3IgY3VycmVudCBzZWxlY3Rpb25cbiAgICAgICAgICAgICAgcmV0dXJuIGNvbW1hbmRzLnNldE5vZGVTZWxlY3Rpb24oZnJvbSkgfHwgY29tbWFuZHMuc2V0Tm9kZVNlbGVjdGlvbihmcm9tIC0gMSkgfHwgdHJ1ZTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAucnVuKCk7XG4gICAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZEltYWdlKGltYWdlRGF0YSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gT3RoZXJ3aXNlIHJlcGxhY2Ugd2hhdGV2ZXIgaXMgc2VsZWN0ZWQgKG9yIGluc2VydCBhdCBjdXJzb3IpXG4gICAgICAgICAgdGhpcy5pbnNlcnRJbWFnZShlZCwgaW1hZ2VEYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFmdGVyIHJlcGxhY2VtZW50LCBlbnN1cmUgdGhlIGltYWdlIGlzIHRyYWNrZWQgaW4gb3VyIHNpZ25hbHNcbiAgICAgICAgdGhpcy5zZWxlY3RJbWFnZShlZCk7XG4gICAgICB9LFxuICAgICAgdGhpcy50KCkucmVwbGFjaW5nSW1hZ2UsXG4gICAgICBvcHRpb25zXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgaW1hZ2UgZHJvcCBldmVudC5cbiAgICogQ2FsY3VsYXRlcyB0aGUgcG9zaXRpb24gZnJvbSBjb29yZGluYXRlcyBhbmQgc2V0cyB0aGUgc2VsZWN0aW9uIGFjY29yZGluZ2x5LlxuICAgKi9cbiAgaGFuZGxlRHJvcChlZGl0b3I6IEVkaXRvciwgZXZlbnQ6IERyYWdFdmVudCwgb3B0aW9ucz86IEF0ZUltYWdlVXBsb2FkT3B0aW9ucyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGZpbGVzID0gZXZlbnQuZGF0YVRyYW5zZmVyPy5maWxlcztcbiAgICBpZiAoIWZpbGVzIHx8IGZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbGUgPSBBcnJheS5mcm9tKGZpbGVzKS5maW5kKGYgPT4gZi50eXBlLnN0YXJ0c1dpdGgoXCJpbWFnZS9cIikpO1xuICAgIGlmICghZmlsZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAvLyBUcnkgdG8gZmluZCB0aGUgZHJvcCBwb3NpdGlvbiBmcm9tIGNvb3JkaW5hdGVzXG4gICAgY29uc3QgcG9zID0gZWRpdG9yLnZpZXcucG9zQXRDb29yZHMoeyBsZWZ0OiBldmVudC5jbGllbnRYLCB0b3A6IGV2ZW50LmNsaWVudFkgfSk7XG4gICAgaWYgKHBvcykge1xuICAgICAgZWRpdG9yLmNvbW1hbmRzLnNldFRleHRTZWxlY3Rpb24ocG9zLnBvcyk7XG4gICAgfVxuXG4gICAgdm9pZCB0aGlzLnVwbG9hZEFuZEluc2VydEltYWdlKGVkaXRvciwgZmlsZSwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGltYWdlIHBhc3RlIGV2ZW50LlxuICAgKi9cbiAgaGFuZGxlUGFzdGUoZWRpdG9yOiBFZGl0b3IsIGV2ZW50OiBDbGlwYm9hcmRFdmVudCwgb3B0aW9ucz86IEF0ZUltYWdlVXBsb2FkT3B0aW9ucyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGNsaXBib2FyZEZpbGVzID0gZXZlbnQuY2xpcGJvYXJkRGF0YT8uZmlsZXM7XG4gICAgaWYgKCFjbGlwYm9hcmRGaWxlcyB8fCBjbGlwYm9hcmRGaWxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBpbWFnZUZpbGUgPSBBcnJheS5mcm9tKGNsaXBib2FyZEZpbGVzKS5maW5kKGZpbGUgPT4gZmlsZS50eXBlLnN0YXJ0c1dpdGgoXCJpbWFnZS9cIikpO1xuICAgIGlmICghaW1hZ2VGaWxlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB2b2lkIHRoaXMudXBsb2FkQW5kSW5zZXJ0SW1hZ2UoZWRpdG9yLCBpbWFnZUZpbGUsIG9wdGlvbnMpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG4iXX0=
496
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXRlLWltYWdlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXRpcHRhcC1lZGl0b3Ivc3JjL2xpYi9zZXJ2aWNlcy9hdGUtaW1hZ2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXJFLE9BQU8sRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNwRCxPQUFPLEVBUUwsdUJBQXVCLEdBRXhCLE1BQU0sMkJBQTJCLENBQUM7O0FBR25DLE1BQU0sT0FBTyxlQUFlO0lBRDVCO1FBS0UsOEJBQThCO1FBQzlCLGtCQUFhLEdBQUcsTUFBTSxDQUFzQixJQUFJLENBQUMsQ0FBQztRQUNsRCxvQkFBZSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLEtBQUssSUFBSSxDQUFDLENBQUM7UUFFaEUscUJBQXFCO1FBQ3JCLGVBQVUsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFbkIsU0FBSSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNyQixNQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7UUFFM0MsMkJBQTJCO1FBQzNCLGdCQUFXLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVCLG1CQUFjLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNCLGtCQUFhLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRTNCOzs7V0FHRztRQUNILGtCQUFhLEdBQWlDLElBQUksQ0FBQztRQUUzQyxrQkFBYSxHQUFrQixJQUFJLENB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SSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUMxRixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDZixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN0RixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7K0dBcm1CVSxlQUFlO21IQUFmLGVBQWU7OzRGQUFmLGVBQWU7a0JBRDNCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBzaWduYWwsIGNvbXB1dGVkLCBpbmplY3QgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgRWRpdG9yIH0gZnJvbSBcIkB0aXB0YXAvY29yZVwiO1xuaW1wb3J0IHsgaXNPYnNlcnZhYmxlLCBmaXJzdFZhbHVlRnJvbSB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBBdGVJMThuU2VydmljZSB9IGZyb20gXCIuL2F0ZS1pMThuLnNlcnZpY2VcIjtcbmltcG9ydCB7XG4gIEF0ZVJlc2l6ZU9wdGlvbnMsXG4gIEF0ZUltYWdlVXBsb2FkT3B0aW9ucyxcbiAgQXRlSW1hZ2VVcGxvYWRIYW5kbGVyLFxuICBBdGVJbWFnZVVwbG9hZFJlc3VsdCxcbiAgQXRlSW1hZ2VEYXRhLFxuICBBdGVJbWFnZVJlamVjdGlvbixcbiAgQXRlSW1hZ2VTb3VyY2UsXG4gIEF0ZUltYWdlVmFsaWRhdGlvbkVycm9yLFxuICBBdGVJbWFnZVZhbGlkYXRpb25SZWFzb24sXG59IGZyb20gXCIuLi9tb2RlbHMvYXRlLWltYWdlLm1vZGVsXCI7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBdGVJbWFnZVNlcnZpY2Uge1xuICBvbkltYWdlVXBsb2FkZWRDYWxsYmFjaz86IChyZXN1bHQ6IEF0ZUltYWdlVXBsb2FkUmVzdWx0KSA9PiB2b2lkO1xuICBvbkltYWdlUmVqZWN0ZWRDYWxsYmFjaz86IChyZWplY3Rpb246IEF0ZUltYWdlUmVqZWN0aW9uKSA9PiB2b2lkO1xuXG4gIC8qKiBTaWduYWxzIGZvciBpbWFnZSBzdGF0ZSAqL1xuICBzZWxlY3RlZEltYWdlID0gc2lnbmFsPEF0ZUltYWdlRGF0YSB8IG51bGw+KG51bGwpO1xuICBpc0ltYWdlU2VsZWN0ZWQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnNlbGVjdGVkSW1hZ2UoKSAhPT0gbnVsbCk7XG5cbiAgLyoqIFJlc2l6aW5nIHN0YXRlICovXG4gIGlzUmVzaXppbmcgPSBzaWduYWwoZmFsc2UpO1xuXG4gIHByaXZhdGUgaTE4biA9IGluamVjdChBdGVJMThuU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgdCA9IHRoaXMuaTE4bi5pbWFnZVVwbG9hZDtcblxuICAvKiogVXBsb2FkIHN0YXRlIHNpZ25hbHMgKi9cbiAgaXNVcGxvYWRpbmcgPSBzaWduYWwoZmFsc2UpO1xuICB1cGxvYWRQcm9ncmVzcyA9IHNpZ25hbCgwKTtcbiAgdXBsb2FkTWVzc2FnZSA9IHNpZ25hbChcIlwiKTtcblxuICAvKipcbiAgICogQ3VzdG9tIHVwbG9hZCBoYW5kbGVyLlxuICAgKiBJZiBzZXQsIHRoaXMgaGFuZGxlciByZXBsYWNlcyB0aGUgZGVmYXVsdCBiYXNlNjQgY29udmVyc2lvbi5cbiAgICovXG4gIHVwbG9hZEhhbmRsZXI6IEF0ZUltYWdlVXBsb2FkSGFuZGxlciB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgY3VycmVudEVkaXRvcjogRWRpdG9yIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqIFNlbGVjdCBhbmQgdHJhY2sgYW4gaW1hZ2UgZnJvbSB0aGUgZWRpdG9yICovXG4gIHNlbGVjdEltYWdlKGVkaXRvcjogRWRpdG9yKTogdm9pZCB7XG4gICAgaWYgKGVkaXRvci5pc0FjdGl2ZShcInJlc2l6YWJsZUltYWdlXCIpKSB7XG4gICAgICBjb25zdCBhdHRycyA9IGVkaXRvci5nZXRBdHRyaWJ1dGVzKFwicmVzaXphYmxlSW1hZ2VcIik7XG4gICAgICB0aGlzLnNlbGVjdGVkSW1hZ2Uuc2V0KHtcbiAgICAgICAgc3JjOiBhdHRyc1tcInNyY1wiXSxcbiAgICAgICAgYWx0OiBhdHRyc1tcImFsdFwiXSxcbiAgICAgICAgdGl0bGU6IGF0dHJzW1widGl0bGVcIl0sXG4gICAgICAgIHdpZHRoOiBhdHRyc1tcIndpZHRoXCJdLFxuICAgICAgICBoZWlnaHQ6IGF0dHJzW1wiaGVpZ2h0XCJdLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRJbWFnZS5zZXQobnVsbCk7XG4gICAgfVxuICB9XG5cbiAgY2xlYXJTZWxlY3Rpb24oKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZEltYWdlLnNldChudWxsKTtcbiAgfVxuXG4gIC8qKiBJbnNlcnQgYSBuZXcgaW1hZ2UgYW5kIGVuc3VyZSBpdCdzIHNlbGVjdGVkICovXG4gIGluc2VydEltYWdlKGVkaXRvcjogRWRpdG9yLCBpbWFnZURhdGE6IEF0ZUltYWdlRGF0YSk6IHZvaWQge1xuICAgIGVkaXRvclxuICAgICAgLmNoYWluKClcbiAgICAgIC5mb2N1cygpXG4gICAgICAuc2V0UmVzaXphYmxlSW1hZ2UoaW1hZ2VEYXRhKVxuICAgICAgLmNvbW1hbmQoKHsgdHIsIGNvbW1hbmRzIH0pID0+IHtcbiAgICAgICAgLy8gU2VsZWN0aW9uIGlzIHVzdWFsbHkgYWZ0ZXIgdGhlIG5vZGUuIE5vZGUgaXMgYXQgdHIuc2VsZWN0aW9uLmZyb20gLSAxLlxuICAgICAgICBjb25zdCB7IGZyb20gfSA9IHRyLnNlbGVjdGlvbjtcbiAgICAgICAgLy8gVHJ5IHRvIHNlbGVjdCBub2RlIGF0IGN1cnJlbnQgcG9zIChpZiBpdCB3YXMgYWxyZWFkeSBzZWxlY3RlZCkgb3IgcHJldmlvdXMgcG9zXG4gICAgICAgIHJldHVybiBjb21tYW5kcy5zZXROb2RlU2VsZWN0aW9uKGZyb20pIHx8IGNvbW1hbmRzLnNldE5vZGVTZWxlY3Rpb24oZnJvbSAtIDEpIHx8IHRydWU7XG4gICAgICB9KVxuICAgICAgLnJ1bigpO1xuICB9XG5cbiAgLyoqIFVwZGF0ZSBhdHRyaWJ1dGVzIG9mIHRoZSBjdXJyZW50bHkgYWN0aXZlIGltYWdlICovXG4gIHVwZGF0ZUltYWdlQXR0cmlidXRlcyhlZGl0b3I6IEVkaXRvciwgYXR0cmlidXRlczogUGFydGlhbDxBdGVJbWFnZURhdGE+KTogdm9pZCB7XG4gICAgaWYgKGVkaXRvci5pc0FjdGl2ZShcInJlc2l6YWJsZUltYWdlXCIpKSB7XG4gICAgICBjb25zdCBwb3MgPSBlZGl0b3Iuc3RhdGUuc2VsZWN0aW9uLmZyb207XG4gICAgICBlZGl0b3JcbiAgICAgICAgLmNoYWluKClcbiAgICAgICAgLmZvY3VzKClcbiAgICAgICAgLnVwZGF0ZUF0dHJpYnV0ZXMoXCJyZXNpemFibGVJbWFnZVwiLCBhdHRyaWJ1dGVzKVxuICAgICAgICAuc2V0Tm9kZVNlbGVjdGlvbihwb3MpXG4gICAgICAgIC5ydW4oKTtcbiAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRJbWFnZShhdHRyaWJ1dGVzKTtcbiAgICB9XG4gIH1cblxuICAvKiogUmVzaXplIGltYWdlIHdpdGggb3B0aW9uYWwgYXNwZWN0IHJhdGlvIG1haW50ZW5hbmNlICovXG4gIHJlc2l6ZUltYWdlKGVkaXRvcjogRWRpdG9yLCBvcHRpb25zOiBBdGVSZXNpemVPcHRpb25zKTogdm9pZCB7XG4gICAgaWYgKCFlZGl0b3IuaXNBY3RpdmUoXCJyZXNpemFibGVJbWFnZVwiKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRBdHRycyA9IGVkaXRvci5nZXRBdHRyaWJ1dGVzKFwicmVzaXphYmxlSW1hZ2VcIik7XG4gICAgbGV0IG5ld1dpZHRoID0gb3B0aW9ucy53aWR0aDtcbiAgICBsZXQgbmV3SGVpZ2h0ID0gb3B0aW9ucy5oZWlnaHQ7XG5cbiAgICAvLyBNYWludGFpbiBhc3BlY3QgcmF0aW8gaWYgcmVxdWVzdGVkXG4gICAgaWYgKG9wdGlvbnMubWFpbnRhaW5Bc3BlY3RSYXRpbyAhPT0gZmFsc2UgJiYgY3VycmVudEF0dHJzW1wid2lkdGhcIl0gJiYgY3VycmVudEF0dHJzW1wiaGVpZ2h0XCJdKSB7XG4gICAgICBjb25zdCBhc3BlY3RSYXRpbyA9IGN1cnJlbnRBdHRyc1tcIndpZHRoXCJdIC8gY3VycmVudEF0dHJzW1wiaGVpZ2h0XCJdO1xuXG4gICAgICBpZiAobmV3V2lkdGggJiYgIW5ld0hlaWdodCkge1xuICAgICAgICBuZXdIZWlnaHQgPSBNYXRoLnJvdW5kKG5ld1dpZHRoIC8gYXNwZWN0UmF0aW8pO1xuICAgICAgfSBlbHNlIGlmIChuZXdIZWlnaHQgJiYgIW5ld1dpZHRoKSB7XG4gICAgICAgIG5ld1dpZHRoID0gTWF0aC5yb3VuZChuZXdIZWlnaHQgKiBhc3BlY3RSYXRpbyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQXBwbHkgbWluaW11bSBsaW1pdHNcbiAgICBpZiAobmV3V2lkdGgpIHtcbiAgICAgIG5ld1dpZHRoID0gTWF0aC5tYXgoNTAsIG5ld1dpZHRoKTtcbiAgICB9XG4gICAgaWYgKG5ld0hlaWdodCkge1xuICAgICAgbmV3SGVpZ2h0ID0gTWF0aC5tYXgoNTAsIG5ld0hlaWdodCk7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVJbWFnZUF0dHJpYnV0ZXMoZWRpdG9yLCB7XG4gICAgICB3aWR0aDogbmV3V2lkdGgsXG4gICAgICBoZWlnaHQ6IG5ld0hlaWdodCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBQcmVkZXRlcm1pbmVkIHJlc2l6ZSBoZWxwZXJzIHVzZWQgYnkgVUkgKi9cbiAgcmVzaXplSW1hZ2VUb1NtYWxsKGVkaXRvcjogRWRpdG9yKTogdm9pZCB7XG4gICAgdGhpcy5yZXNpemVJbWFnZShlZGl0b3IsIHsgd2lkdGg6IDMwMCwgaGVpZ2h0OiAyMDAsIG1haW50YWluQXNwZWN0UmF0aW86IHRydWUgfSk7XG4gIH1cblxuICByZXNpemVJbWFnZVRvTWVkaXVtKGVkaXRvcjogRWRpdG9yKTogdm9pZCB7XG4gICAgdGhpcy5yZXNpemVJbWFnZShlZGl0b3IsIHsgd2lkdGg6IDUwMCwgaGVpZ2h0OiAzNTAsIG1haW50YWluQXNwZWN0UmF0aW86IHRydWUgfSk7XG4gIH1cblxuICByZXNpemVJbWFnZVRvTGFyZ2UoZWRpdG9yOiBFZGl0b3IpOiB2b2lkIHtcbiAgICB0aGlzLnJlc2l6ZUltYWdlKGVkaXRvciwgeyB3aWR0aDogODAwLCBoZWlnaHQ6IDYwMCwgbWFpbnRhaW5Bc3BlY3RSYXRpbzogdHJ1ZSB9KTtcbiAgfVxuXG4gIHJlc2l6ZUltYWdlVG9PcmlnaW5hbChlZGl0b3I6IEVkaXRvcik6IHZvaWQge1xuICAgIGlmICghZWRpdG9yLmlzQWN0aXZlKFwicmVzaXphYmxlSW1hZ2VcIikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaW1nID0gbmV3IEltYWdlKCk7XG4gICAgaW1nLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgIHRoaXMucmVzaXplSW1hZ2UoZWRpdG9yLCB7IHdpZHRoOiBpbWcubmF0dXJhbFdpZHRoLCBoZWlnaHQ6IGltZy5uYXR1cmFsSGVpZ2h0IH0pO1xuICAgIH07XG4gICAgaW1nLnNyYyA9IGVkaXRvci5nZXRBdHRyaWJ1dGVzKFwicmVzaXphYmxlSW1hZ2VcIilbXCJzcmNcIl07XG4gIH1cblxuICAvKiogR2V0IGN1cnJlbnQgaW1hZ2UgZGltZW5zaW9ucyAqL1xuICBnZXRJbWFnZURpbWVuc2lvbnMoZWRpdG9yOiBFZGl0b3IpOiB7IHdpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyIH0gfCBudWxsIHtcbiAgICBpZiAoIWVkaXRvci5pc0FjdGl2ZShcInJlc2l6YWJsZUltYWdlXCIpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgYXR0cnMgPSBlZGl0b3IuZ2V0QXR0cmlidXRlcyhcInJlc2l6YWJsZUltYWdlXCIpO1xuICAgIHJldHVybiB7XG4gICAgICB3aWR0aDogYXR0cnNbXCJ3aWR0aFwiXSB8fCAwLFxuICAgICAgaGVpZ2h0OiBhdHRyc1tcImhlaWdodFwiXSB8fCAwLFxuICAgIH07XG4gIH1cblxuICAvKiogUmVtb3ZlIHRoZSBzZWxlY3RlZCBpbWFnZSAqL1xuICBkZWxldGVJbWFnZShlZGl0b3I6IEVkaXRvcik6IHZvaWQge1xuICAgIGlmIChlZGl0b3IuaXNBY3RpdmUoXCJyZXNpemFibGVJbWFnZVwiKSkge1xuICAgICAgZWRpdG9yLmNoYWluKCkuZm9jdXMoKS5kZWxldGVTZWxlY3Rpb24oKS5ydW4oKTtcbiAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICB9XG4gIH1cblxuICAvKiogRG93bmxvYWQgdGhlIGN1cnJlbnQgaW1hZ2UgKi9cbiAgZG93bmxvYWRJbWFnZShlZGl0b3I6IEVkaXRvcik6IHZvaWQge1xuICAgIGNvbnN0IGF0dHJzID0gZWRpdG9yLmdldEF0dHJpYnV0ZXMoXCJyZXNpemFibGVJbWFnZVwiKTtcbiAgICBpZiAoIWF0dHJzIHx8ICFhdHRyc1tcInNyY1wiXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHNyYyA9IGF0dHJzW1wic3JjXCJdO1xuICAgIGNvbnN0IGZpbGVOYW1lID0gYXR0cnNbXCJhbHRcIl0gfHwgXCJpbWFnZVwiO1xuXG4gICAgLy8gRGV0ZWN0IGlmIGl0J3MgYmFzZTY0IG9yIHJlbW90ZSBVUkxcbiAgICBpZiAoXG4gICAgICBzcmMuc3RhcnRzV2l0aChcImRhdGE6XCIpIHx8XG4gICAgICBzcmMuc3RhcnRzV2l0aChcImJsb2I6XCIpIHx8XG4gICAgICAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiBzcmMuc3RhcnRzV2l0aCh3aW5kb3cubG9jYXRpb24ub3JpZ2luKSlcbiAgICApIHtcbiAgICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtcbiAgICAgIGxpbmsuaHJlZiA9IHNyYztcbiAgICAgIGxpbmsuZG93bmxvYWQgPSBmaWxlTmFtZTtcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluayk7XG4gICAgICBsaW5rLmNsaWNrKCk7XG4gICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGxpbmspO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBGb3IgcmVtb3RlIFVSTHMsIHdlIHRyeSB0byBmZXRjaCBpdCB0byBieXBhc3MgY3Jvc3Mtb3JpZ2luIHJlc3RyaWN0aW9ucyBvbiAnZG93bmxvYWQnIGF0dHJpYnV0ZVxuICAgICAgZmV0Y2goc3JjKVxuICAgICAgICAudGhlbihyZXNwb25zZSA9PiByZXNwb25zZS5ibG9iKCkpXG4gICAgICAgIC50aGVuKGJsb2IgPT4ge1xuICAgICAgICAgIGNvbnN0IHVybCA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICAgICAgICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtcbiAgICAgICAgICBsaW5rLmhyZWYgPSB1cmw7XG4gICAgICAgICAgbGluay5kb3dubG9hZCA9IGZpbGVOYW1lO1xuICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluayk7XG4gICAgICAgICAgbGluay5jbGljaygpO1xuICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobGluayk7XG4gICAgICAgICAgd2luZG93LlVSTC5yZXZva2VPYmplY3RVUkwodXJsKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGRvd25sb2FkaW5nIGltYWdlOlwiLCBlcnIpO1xuICAgICAgICAgIC8vIEZhbGxiYWNrIHRvIG9wZW5pbmcgaW4gbmV3IHRhYlxuICAgICAgICAgIHdpbmRvdy5vcGVuKHNyYywgXCJfYmxhbmtcIik7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2VsZWN0ZWRJbWFnZShhdHRyaWJ1dGVzOiBQYXJ0aWFsPEF0ZUltYWdlRGF0YT4pOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5zZWxlY3RlZEltYWdlKCk7XG4gICAgaWYgKGN1cnJlbnQpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRJbWFnZS5zZXQoeyAuLi5jdXJyZW50LCAuLi5hdHRyaWJ1dGVzIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBWYWxpZGF0ZSBmaWxlIHR5cGUgYW5kIHNpemUgKi9cbiAgdmFsaWRhdGVJbWFnZShcbiAgICBmaWxlOiBGaWxlLFxuICAgIG9wdGlvbnM/OiB7IG1heFNpemU/OiBudW1iZXI7IGFsbG93ZWRUeXBlcz86IHN0cmluZ1tdIH1cbiAgKTogeyB2YWxpZDogYm9vbGVhbjsgZXJyb3I/OiBzdHJpbmc7IHJlYXNvbj86IEF0ZUltYWdlVmFsaWRhdGlvblJlYXNvbiB9IHtcbiAgICBjb25zdCBtYXhTaXplID0gb3B0aW9ucz8ubWF4U2l6ZSB8fCAxMCAqIDEwMjQgKiAxMDI0O1xuICAgIGNvbnN0IGFsbG93ZWRUeXBlcyA9IG9wdGlvbnM/LmFsbG93ZWRUeXBlcyB8fCBbXTtcblxuICAgIGlmIChhbGxvd2VkVHlwZXMubGVuZ3RoID4gMCAmJiAhYWxsb3dlZFR5cGVzLmluY2x1ZGVzKGZpbGUudHlwZSkpIHtcbiAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgZXJyb3I6IHRoaXMudCgpLmludmFsaWRGaWxlVHlwZSwgcmVhc29uOiBcImludmFsaWQtdHlwZVwiIH07XG4gICAgfVxuXG4gICAgaWYgKGZpbGUuc2l6ZSA+IG1heFNpemUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbGlkOiBmYWxzZSxcbiAgICAgICAgZXJyb3I6IGAke3RoaXMudCgpLmltYWdlVG9vTGFyZ2V9IChtYXggJHtNYXRoLnJvdW5kKG1heFNpemUgLyAxMDI0IC8gMTAyNCl9TUIpYCxcbiAgICAgICAgcmVhc29uOiBcInRvby1sYXJnZVwiLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHsgdmFsaWQ6IHRydWUgfTtcbiAgfVxuXG4gIC8qKiBDb21wcmVzcyBhbmQgcHJvY2VzcyBpbWFnZSBvbiBjbGllbnQgc2lkZSAqL1xuICBhc3luYyBjb21wcmVzc0ltYWdlKFxuICAgIGZpbGU6IEZpbGUsXG4gICAgcXVhbGl0eSA9IDAuOCxcbiAgICBtYXhXaWR0aCA9IDE5MjAsXG4gICAgbWF4SGVpZ2h0ID0gMTIwMFxuICApOiBQcm9taXNlPEF0ZUltYWdlVXBsb2FkUmVzdWx0PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7XG4gICAgICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xuICAgICAgY29uc3QgaW1nID0gbmV3IEltYWdlKCk7XG5cbiAgICAgIGltZy5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmlzVXBsb2FkaW5nKCkpIHtcbiAgICAgICAgICB0aGlzLnVwbG9hZFByb2dyZXNzLnNldCg0MCk7XG4gICAgICAgICAgdGhpcy51cGxvYWRNZXNzYWdlLnNldCh0aGlzLnQoKS5yZXNpemluZyk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgeyB3aWR0aCwgaGVpZ2h0IH0gPSBpbWc7XG4gICAgICAgIGlmICh3aWR0aCA+IG1heFdpZHRoIHx8IGhlaWdodCA+IG1heEhlaWdodCkge1xuICAgICAgICAgIGNvbnN0IHJhdGlvID0gTWF0aC5taW4obWF4V2lkdGggLyB3aWR0aCwgbWF4SGVpZ2h0IC8gaGVpZ2h0KTtcbiAgICAgICAgICB3aWR0aCAqPSByYXRpbztcbiAgICAgICAgICBoZWlnaHQgKj0gcmF0aW87XG4gICAgICAgIH1cblxuICAgICAgICBjYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICAgICAgY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbiAgICAgICAgY3R4Py5kcmF3SW1hZ2UoaW1nLCAwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcblxuICAgICAgICBpZiAodGhpcy5pc1VwbG9hZGluZygpKSB7XG4gICAgICAgICAgdGhpcy51cGxvYWRQcm9ncmVzcy5zZXQoNjApO1xuICAgICAgICAgIHRoaXMudXBsb2FkTWVzc2FnZS5zZXQodGhpcy50KCkuY29tcHJlc3NpbmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FudmFzLnRvQmxvYihcbiAgICAgICAgICBibG9iID0+IHtcbiAgICAgICAgICAgIGlmIChibG9iKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICAgICAgICAgIHJlYWRlci5vbmxvYWQgPSBlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBiYXNlNjQgPSBlLnRhcmdldD8ucmVzdWx0IGFzIHN0cmluZztcbiAgICAgICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgIHNyYzogYmFzZTY0LFxuICAgICAgICAgICAgICAgICAgbmFtZTogZmlsZS5uYW1lLFxuICAgICAgICAgICAgICAgICAgc2l6ZTogYmxvYi5zaXplLFxuICAgICAgICAgICAgICAgICAgdHlwZTogZmlsZS50eXBlLFxuICAgICAgICAgICAgICAgICAgd2lkdGg6IE1hdGgucm91bmQod2lkdGgpLFxuICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBNYXRoLnJvdW5kKGhlaWdodCksXG4gICAgICAgICAgICAgICAgICBvcmlnaW5hbFNpemU6IGZpbGUuc2l6ZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoYmxvYik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKHRoaXMudCgpLmNvbXByZXNzaW9uRXJyb3IpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGZpbGUudHlwZSxcbiAgICAgICAgICBxdWFsaXR5XG4gICAgICAgICk7XG4gICAgICB9O1xuXG4gICAgICBpbWcub25lcnJvciA9ICgpID0+IHJlamVjdChuZXcgRXJyb3IodGhpcy50KCkubG9hZEVycm9yKSk7XG4gICAgICBpbWcuc3JjID0gVVJMLmNyZWF0ZU9iamVjdFVSTChmaWxlKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBDb3JlIHVwbG9hZCBsb2dpYyB3aXRoIHByb2dyZXNzIHRyYWNraW5nICovXG4gIHByaXZhdGUgYXN5bmMgdXBsb2FkSW1hZ2VXaXRoUHJvZ3Jlc3MoXG4gICAgZWRpdG9yOiBFZGl0b3IsXG4gICAgZmlsZTogRmlsZSxcbiAgICBpbnNlcnRpb25TdHJhdGVneTogKGVkaXRvcjogRWRpdG9yLCByZXN1bHQ6IEF0ZUltYWdlVXBsb2FkUmVzdWx0KSA9PiB2b2lkLFxuICAgIGFjdGlvbk1lc3NhZ2U6IHN0cmluZyxcbiAgICBvcHRpb25zOiBBdGVJbWFnZVVwbG9hZE9wdGlvbnMgfCB1bmRlZmluZWQsXG4gICAgc291cmNlOiBBdGVJbWFnZVNvdXJjZVxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5jdXJyZW50RWRpdG9yID0gZWRpdG9yO1xuICAgICAgdGhpcy5pc1VwbG9hZGluZy5zZXQodHJ1ZSk7XG4gICAgICB0aGlzLnVwbG9hZFByb2dyZXNzLnNldCgxMCk7XG4gICAgICB0aGlzLnVwbG9hZE1lc3NhZ2Uuc2V0KHRoaXMudCgpLnZhbGlkYXRpbmcpO1xuICAgICAgdGhpcy5mb3JjZUVkaXRvclVwZGF0ZSgpO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnByb2Nlc3NJbWFnZShmaWxlLCBvcHRpb25zLCAocHJvZ3Jlc3MsIG1lc3NhZ2UpID0+IHtcbiAgICAgICAgaWYgKHByb2dyZXNzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLnVwbG9hZFByb2dyZXNzLnNldChwcm9ncmVzcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1lc3NhZ2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMudXBsb2FkTWVzc2FnZS5zZXQobWVzc2FnZSk7XG4gICAgICAgICAgdGhpcy5mb3JjZUVkaXRvclVwZGF0ZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdGhpcy51cGxvYWRQcm9ncmVzcy5zZXQoOTApO1xuICAgICAgdGhpcy51cGxvYWRNZXNzYWdlLnNldChhY3Rpb25NZXNzYWdlKTtcbiAgICAgIHRoaXMuZm9yY2VFZGl0b3JVcGRhdGUoKTtcblxuICAgICAgLy8gRmluYWwgaW5zZXJ0aW9uXG4gICAgICBpbnNlcnRpb25TdHJhdGVneShlZGl0b3IsIHJlc3VsdCk7XG5cbiAgICAgIGlmICh0aGlzLm9uSW1hZ2VVcGxvYWRlZENhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMub25JbWFnZVVwbG9hZGVkQ2FsbGJhY2socmVzdWx0KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5yZXNldFVwbG9hZFN0YXRlKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMucmVzZXRVcGxvYWRTdGF0ZSgpO1xuICAgICAgY29uc29sZS5lcnJvcih0aGlzLnQoKS51cGxvYWRFcnJvciwgZXJyb3IpO1xuICAgICAgdGhpcy5vbkltYWdlUmVqZWN0ZWRDYWxsYmFjaz8uKHtcbiAgICAgICAgcmVhc29uOiBlcnJvciBpbnN0YW5jZW9mIEF0ZUltYWdlVmFsaWRhdGlvbkVycm9yID8gZXJyb3IucmVhc29uIDogXCJ1cGxvYWQtZmFpbGVkXCIsXG4gICAgICAgIGZpbGUsXG4gICAgICAgIHNvdXJjZSxcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgLyoqIFZhbGlkYXRlLCBjb21wcmVzcyBhbmQgKHdoZW4gY29uZmlndXJlZCkgc2VuZCBhbiBpbWFnZSB0byB0aGUgdXBsb2FkIGhhbmRsZXIgKi9cbiAgcHJpdmF0ZSBhc3luYyBwcm9jZXNzSW1hZ2UoXG4gICAgZmlsZTogRmlsZSxcbiAgICBvcHRpb25zPzogQXRlSW1hZ2VVcGxvYWRPcHRpb25zLFxuICAgIG9uU3RlcD86IChwcm9ncmVzcz86IG51bWJlciwgbWVzc2FnZT86IHN0cmluZykgPT4gdm9pZFxuICApOiBQcm9taXNlPEF0ZUltYWdlVXBsb2FkUmVzdWx0PiB7XG4gICAgY29uc3QgdmFsaWRhdGlvbiA9IHRoaXMudmFsaWRhdGVJbWFnZShmaWxlLCB7XG4gICAgICBtYXhTaXplOiBvcHRpb25zPy5tYXhTaXplLFxuICAgICAgYWxsb3dlZFR5cGVzOiBvcHRpb25zPy5hbGxvd2VkVHlwZXMsXG4gICAgfSk7XG4gICAgaWYgKCF2YWxpZGF0aW9uLnZhbGlkKSB7XG4gICAgICB0aHJvdyBuZXcgQXRlSW1hZ2VWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIHZhbGlkYXRpb24ucmVhc29uID8/IFwiaW52YWxpZC10eXBlXCIsXG4gICAgICAgIHZhbGlkYXRpb24uZXJyb3IgPz8gXCJcIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBvblN0ZXA/LigzMCwgdGhpcy50KCkuY29tcHJlc3NpbmcpO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5jb21wcmVzc0ltYWdlKFxuICAgICAgZmlsZSxcbiAgICAgIG9wdGlvbnM/LnF1YWxpdHkgfHwgMC44LFxuICAgICAgb3B0aW9ucz8ubWF4V2lkdGggfHwgMTkyMCxcbiAgICAgIG9wdGlvbnM/Lm1heEhlaWdodCB8fCAxMjAwXG4gICAgKTtcblxuICAgIG9uU3RlcD8uKDcwKTtcblxuICAgIC8vIEhhbmRsZSBjdXN0b20gdXBsb2FkIGlmIGhhbmRsZXIgaXMgcHJvdmlkZWRcbiAgICBpZiAodGhpcy51cGxvYWRIYW5kbGVyKSB7XG4gICAgICBvblN0ZXA/Lih1bmRlZmluZWQsIHRoaXMudCgpLnVwbG9hZGluZ1RvU2VydmVyKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgaGFuZGxlclJlc3BvbnNlID0gdGhpcy51cGxvYWRIYW5kbGVyKHtcbiAgICAgICAgICBmaWxlLFxuICAgICAgICAgIHdpZHRoOiByZXN1bHQud2lkdGggfHwgMCxcbiAgICAgICAgICBoZWlnaHQ6IHJlc3VsdC5oZWlnaHQgfHwgMCxcbiAgICAgICAgICB0eXBlOiByZXN1bHQudHlwZSxcbiAgICAgICAgICBiYXNlNjQ6IHJlc3VsdC5zcmMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGhhbmRsZXJSZXN1bHQgPSBpc09ic2VydmFibGUoaGFuZGxlclJlc3BvbnNlKVxuICAgICAgICAgID8gYXdhaXQgZmlyc3RWYWx1ZUZyb20oaGFuZGxlclJlc3BvbnNlKVxuICAgICAgICAgIDogYXdhaXQgaGFuZGxlclJlc3BvbnNlO1xuXG4gICAgICAgIHJlc3VsdC5zcmMgPSBoYW5kbGVyUmVzdWx0LnNyYztcbiAgICAgICAgaWYgKGhhbmRsZXJSZXN1bHQuYWx0KSB7XG4gICAgICAgICAgcmVzdWx0Lm5hbWUgPSBoYW5kbGVyUmVzdWx0LmFsdDtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoaGFuZGxlckVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IodGhpcy50KCkudXBsb2FkRXJyb3IsIGhhbmRsZXJFcnJvcik7XG4gICAgICAgIHRocm93IGhhbmRsZXJFcnJvcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1biBhbiBpbWFnZSB0aGF0IGlzIGFscmVhZHkgaW4gdGhlIGRvY3VtZW50IChlLmcuIGJhc2U2NCBmcm9tIHBhc3RlZCBIVE1MKVxuICAgKiB0aHJvdWdoIHZhbGlkYXRpb24sIGNvbXByZXNzaW9uIGFuZCB0aGUgdXBsb2FkIGhhbmRsZXIsIGFuZCByZXNvbHZlIHRvIGl0cyBuZXcgYHNyY2AuXG4gICAqL1xuICBhc3luYyByZWhvc3RJbWFnZShmaWxlOiBGaWxlLCBvcHRpb25zPzogQXRlSW1hZ2VVcGxvYWRPcHRpb25zKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5wcm9jZXNzSW1hZ2UoZmlsZSwgb3B0aW9ucyk7XG4gICAgICBpZiAodGhpcy5vbkltYWdlVXBsb2FkZWRDYWxsYmFjaykge1xuICAgICAgICB0aGlzLm9uSW1hZ2VVcGxvYWRlZENhbGxiYWNrKHJlc3VsdCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0LnNyYztcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcih0aGlzLnQoKS51cGxvYWRFcnJvciwgZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXNldFVwbG9hZFN0YXRlKCkge1xuICAgIHRoaXMuaXNVcGxvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICB0aGlzLnVwbG9hZFByb2dyZXNzLnNldCgwKTtcbiAgICB0aGlzLnVwbG9hZE1lc3NhZ2Uuc2V0KFwiXCIpO1xuICAgIHRoaXMuZm9yY2VFZGl0b3JVcGRhdGUoKTtcbiAgICB0aGlzLmN1cnJlbnRFZGl0b3IgPSBudWxsO1xuICB9XG5cbiAgLyoqIE1haW4gZW50cnkgcG9pbnQgZm9yIGZpbGUgdXBsb2FkIGFuZCBpbnNlcnRpb24gKi9cbiAgYXN5bmMgdXBsb2FkQW5kSW5zZXJ0SW1hZ2UoXG4gICAgZWRpdG9yOiBFZGl0b3IsXG4gICAgZmlsZTogRmlsZSxcbiAgICBvcHRpb25zPzogQXRlSW1hZ2VVcGxvYWRPcHRpb25zLFxuICAgIHNvdXJjZTogQXRlSW1hZ2VTb3VyY2UgPSBcImFwaVwiXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLnVwbG9hZEltYWdlV2l0aFByb2dyZXNzKFxuICAgICAgZWRpdG9yLFxuICAgICAgZmlsZSxcbiAgICAgIChlZCwgcmVzdWx0KSA9PiB7XG4gICAgICAgIHRoaXMuaW5zZXJ0SW1hZ2UoZWQsIHtcbiAgICAgICAgICBzcmM6IHJlc3VsdC5zcmMsXG4gICAgICAgICAgYWx0OiByZXN1bHQubmFtZSxcbiAgICAgICAgICB0aXRsZTogYCR7cmVzdWx0Lm5hbWV9ICgke3Jlc3VsdC53aWR0aH3DlyR7cmVzdWx0LmhlaWdodH0pYCxcbiAgICAgICAgICB3aWR0aDogcmVzdWx0LndpZHRoLFxuICAgICAgICAgIGhlaWdodDogcmVzdWx0LmhlaWdodCxcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgdGhpcy50KCkuaW5zZXJ0aW5nSW1hZ2UsXG4gICAgICBvcHRpb25zLFxuICAgICAgc291cmNlXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBUcmlnZ2VyIGFuIGVkaXRvciB0cmFuc2FjdGlvbiB0byBmb3JjZSBkZWNvcmF0aW9uIHVwZGF0ZSAqL1xuICBwcml2YXRlIGZvcmNlRWRpdG9yVXBkYXRlKCkge1xuICAgIGlmICh0aGlzLmN1cnJlbnRFZGl0b3IpIHtcbiAgICAgIGNvbnN0IHsgdHIgfSA9IHRoaXMuY3VycmVudEVkaXRvci5zdGF0ZTtcbiAgICAgIHRoaXMuY3VycmVudEVkaXRvci52aWV3LmRpc3BhdGNoKHRyKTtcbiAgICB9XG4gIH1cblxuICAvKiogR2VuZXJpYyBoZWxwZXIgdG8gb3BlbiBmaWxlIHBpY2tlciBhbmQgcHJvY2VzcyBzZWxlY3Rpb24gKi9cbiAgcHJpdmF0ZSBhc3luYyBzZWxlY3RGaWxlQW5kUHJvY2VzcyhcbiAgICBlZGl0b3I6IEVkaXRvcixcbiAgICB1cGxvYWRNZXRob2Q6IChcbiAgICAgIGVkaXRvcjogRWRpdG9yLFxuICAgICAgZmlsZTogRmlsZSxcbiAgICAgIG9wdGlvbnM6IEF0ZUltYWdlVXBsb2FkT3B0aW9ucyB8IHVuZGVmaW5lZCxcbiAgICAgIHNvdXJjZTogQXRlSW1hZ2VTb3VyY2VcbiAgICApID0+IFByb21pc2U8dm9pZD4sXG4gICAgb3B0aW9ucz86IEF0ZUltYWdlVXBsb2FkT3B0aW9uc1xuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gICAgICBpbnB1dC50eXBlID0gXCJmaWxlXCI7XG5cbiAgICAgIC8vIFVzZSBhbGxvd2VkVHlwZXMgaWYgcHJvdmlkZWQsIG90aGVyd2lzZSBkZWZhdWx0IHRvIGltYWdlLypcbiAgICAgIGlmIChvcHRpb25zPy5hbGxvd2VkVHlwZXMgJiYgb3B0aW9ucy5hbGxvd2VkVHlwZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBpbnB1dC5hY2NlcHQgPSBvcHRpb25zLmFsbG93ZWRUeXBlcy5qb2luKFwiLFwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlucHV0LmFjY2VwdCA9IFwiaW1hZ2UvKlwiO1xuICAgICAgfVxuXG4gICAgICBpbnB1dC5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG5cbiAgICAgIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIiwgYXN5bmMgZSA9PiB7XG4gICAgICAgIGNvbnN0IGZpbGUgPSAoZS50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkuZmlsZXM/LlswXTtcbiAgICAgICAgaWYgKGZpbGUgJiYgZmlsZS50eXBlLnN0YXJ0c1dpdGgoXCJpbWFnZS9cIikpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgdXBsb2FkTWV0aG9kKGVkaXRvciwgZmlsZSwgb3B0aW9ucywgXCJwaWNrZXJcIik7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IodGhpcy50KCkubm9GaWxlU2VsZWN0ZWQpKTtcbiAgICAgICAgfVxuICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGlucHV0KTtcbiAgICAgIH0pO1xuXG4gICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKFwiY2FuY2VsXCIsICgpID0+IHtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChpbnB1dCk7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IodGhpcy50KCkuc2VsZWN0aW9uQ2FuY2VsbGVkKSk7XG4gICAgICB9KTtcblxuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpbnB1dCk7XG4gICAgICBpbnB1dC5jbGljaygpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqIFNlbGVjdCBmaWxlIGFuZCB1cGxvYWQgYXMgbmV3IGltYWdlICovXG4gIGFzeW5jIHNlbGVjdEFuZFVwbG9hZEltYWdlKGVkaXRvcjogRWRpdG9yLCBvcHRpb25zPzogQXRlSW1hZ2VVcGxvYWRPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0RmlsZUFuZFByb2Nlc3MoZWRpdG9yLCB0aGlzLnVwbG9hZEFuZEluc2VydEltYWdlLmJpbmQodGhpcyksIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqIFNlbGVjdCBmaWxlIGFuZCByZXBsYWNlIGN1cnJlbnRseSBzZWxlY3RlZCBpbWFnZSAqL1xuICBhc3luYyBzZWxlY3RBbmRSZXBsYWNlSW1hZ2UoZWRpdG9yOiBFZGl0b3IsIG9wdGlvbnM/OiBBdGVJbWFnZVVwbG9hZE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBObyBuZWVkIGZvciBjb21wbGljYXRlZCBiYWNrdXAvcmVzdG9yZSBub3cgdGhhdCB3ZSBkb24ndCBkZWxldGUgcHJlbWF0dXJlbHkuXG4gICAgLy8gVGhlIHVwbG9hZEFuZFJlcGxhY2VJbWFnZSB3aWxsIGhhbmRsZSB0aGUgYXRvbWljIHJlcGxhY2VtZW50LlxuICAgIHJldHVybiB0aGlzLnNlbGVjdEZpbGVBbmRQcm9jZXNzKGVkaXRvciwgdGhpcy51cGxvYWRBbmRSZXBsYWNlSW1hZ2UuYmluZCh0aGlzKSwgb3B0aW9ucyk7XG4gIH1cblxuICAvKiogSW50ZXJuYWwgaGVscGVyIHVzZWQgYnkgcmVwbGFjZW1lbnQgbG9naWMgKi9cbiAgYXN5bmMgdXBsb2FkQW5kUmVwbGFjZUltYWdlKFxuICAgIGVkaXRvcjogRWRpdG9yLFxuICAgIGZpbGU6IEZpbGUsXG4gICAgb3B0aW9ucz86IEF0ZUltYWdlVXBsb2FkT3B0aW9ucyxcbiAgICBzb3VyY2U6IEF0ZUltYWdlU291cmNlID0gXCJhcGlcIlxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBTdG9yZSBjdXJyZW50IHBvc2l0aW9uIHRvIGVuc3VyZSB3ZSBjYW4gcmUtc2VsZWN0IHRoZSBpbWFnZSBldmVuIGlmIHNlbGVjdGlvbiBibHVycyBkdXJpbmcgdXBsb2FkXG4gICAgY29uc3Qgd2FzQWN0aXZlID0gZWRpdG9yLmlzQWN0aXZlKFwicmVzaXphYmxlSW1hZ2VcIik7XG5cbiAgICBhd2FpdCB0aGlzLnVwbG9hZEltYWdlV2l0aFByb2dyZXNzKFxuICAgICAgZWRpdG9yLFxuICAgICAgZmlsZSxcbiAgICAgIChlZCwgcmVzdWx0KSA9PiB7XG4gICAgICAgIGNvbnN0IGltYWdlRGF0YSA9IHtcbiAgICAgICAgICBzcmM6IHJlc3VsdC5zcmMsXG4gICAgICAgICAgYWx0OiByZXN1bHQubmFtZSxcbiAgICAgICAgICB0aXRsZTogYCR7cmVzdWx0Lm5hbWV9ICgke3Jlc3VsdC53aWR0aH3DlyR7cmVzdWx0LmhlaWdodH0pYCxcbiAgICAgICAgICB3aWR0aDogcmVzdWx0LndpZHRoLFxuICAgICAgICAgIGhlaWdodDogcmVzdWx0LmhlaWdodCxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBJZiB0aGUgaW1hZ2Ugd2FzIGFjdGl2ZSBvciBpcyBzdGlsbCBhY3RpdmUsIHVwZGF0ZSBpdCBhdG9taWNhbGx5XG4gICAgICAgIGlmICh3YXNBY3RpdmUgfHwgZWQuaXNBY3RpdmUoXCJyZXNpemFibGVJbWFnZVwiKSkge1xuICAgICAgICAgIGVkLmNoYWluKClcbiAgICAgICAgICAgIC5mb2N1cygpXG4gICAgICAgICAgICAudXBkYXRlQXR0cmlidXRlcyhcInJlc2l6YWJsZUltYWdlXCIsIGltYWdlRGF0YSlcbiAgICAgICAgICAgIC5jb21tYW5kKCh7IHRyLCBjb21tYW5kcyB9KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHsgZnJvbSB9ID0gdHIuc2VsZWN0aW9uO1xuICAgICAgICAgICAgICAvLyBSZS1zZWxlY3QgdGhlIG5vZGUgYXQgaXRzIG1hcHBlZCBwb3NpdGlvbiBvciBjdXJyZW50IHNlbGVjdGlvblxuICAgICAgICAgICAgICByZXR1cm4gY29tbWFuZHMuc2V0Tm9kZVNlbGVjdGlvbihmcm9tKSB8fCBjb21tYW5kcy5zZXROb2RlU2VsZWN0aW9uKGZyb20gLSAxKSB8fCB0cnVlO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5ydW4oKTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkSW1hZ2UoaW1hZ2VEYXRhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBPdGhlcndpc2UgcmVwbGFjZSB3aGF0ZXZlciBpcyBzZWxlY3RlZCAob3IgaW5zZXJ0IGF0IGN1cnNvcilcbiAgICAgICAgICB0aGlzLmluc2VydEltYWdlKGVkLCBpbWFnZURhdGEpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQWZ0ZXIgcmVwbGFjZW1lbnQsIGVuc3VyZSB0aGUgaW1hZ2UgaXMgdHJhY2tlZCBpbiBvdXIgc2lnbmFsc1xuICAgICAgICB0aGlzLnNlbGVjdEltYWdlKGVkKTtcbiAgICAgIH0sXG4gICAgICB0aGlzLnQoKS5yZXBsYWNpbmdJbWFnZSxcbiAgICAgIG9wdGlvbnMsXG4gICAgICBzb3VyY2VcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBpbWFnZSBkcm9wIGV2ZW50LlxuICAgKiBDYWxjdWxhdGVzIHRoZSBwb3NpdGlvbiBmcm9tIGNvb3JkaW5hdGVzIGFuZCBzZXRzIHRoZSBzZWxlY3Rpb24gYWNjb3JkaW5nbHkuXG4gICAqL1xuICBoYW5kbGVEcm9wKGVkaXRvcjogRWRpdG9yLCBldmVudDogRHJhZ0V2ZW50LCBvcHRpb25zPzogQXRlSW1hZ2VVcGxvYWRPcHRpb25zKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZmlsZXMgPSBldmVudC5kYXRhVHJhbnNmZXI/LmZpbGVzO1xuICAgIGlmICghZmlsZXMgfHwgZmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgZmlsZSA9IEFycmF5LmZyb20oZmlsZXMpLmZpbmQoZiA9PiBmLnR5cGUuc3RhcnRzV2l0aChcImltYWdlL1wiKSk7XG4gICAgaWYgKCFmaWxlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIC8vIFRyeSB0byBmaW5kIHRoZSBkcm9wIHBvc2l0aW9uIGZyb20gY29vcmRpbmF0ZXNcbiAgICBjb25zdCBwb3MgPSBlZGl0b3Iudmlldy5wb3NBdENvb3Jkcyh7IGxlZnQ6IGV2ZW50LmNsaWVudFgsIHRvcDogZXZlbnQuY2xpZW50WSB9KTtcbiAgICBpZiAocG9zKSB7XG4gICAgICBlZGl0b3IuY29tbWFuZHMuc2V0VGV4dFNlbGVjdGlvbihwb3MucG9zKTtcbiAgICB9XG5cbiAgICB0aGlzLnVwbG9hZEFuZEluc2VydEltYWdlKGVkaXRvciwgZmlsZSwgb3B0aW9ucywgXCJkcm9wXCIpLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGltYWdlIHBhc3RlIGV2ZW50LlxuICAgKi9cbiAgaGFuZGxlUGFzdGUoZWRpdG9yOiBFZGl0b3IsIGV2ZW50OiBDbGlwYm9hcmRFdmVudCwgb3B0aW9ucz86IEF0ZUltYWdlVXBsb2FkT3B0aW9ucyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGNsaXBib2FyZEZpbGVzID0gZXZlbnQuY2xpcGJvYXJkRGF0YT8uZmlsZXM7XG4gICAgaWYgKCFjbGlwYm9hcmRGaWxlcyB8fCBjbGlwYm9hcmRGaWxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBpbWFnZUZpbGUgPSBBcnJheS5mcm9tKGNsaXBib2FyZEZpbGVzKS5maW5kKGZpbGUgPT4gZmlsZS50eXBlLnN0YXJ0c1dpdGgoXCJpbWFnZS9cIikpO1xuICAgIGlmICghaW1hZ2VGaWxlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLnVwbG9hZEFuZEluc2VydEltYWdlKGVkaXRvciwgaW1hZ2VGaWxlLCBvcHRpb25zLCBcInBhc3RlXCIpLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Maps the runtime `.name` of each extension bundled in `@tiptap/starter-kit`
3
+ * to its corresponding option key in `StarterKitOptions`.
4
+ */
5
+ export const STARTER_KIT_NAME_TO_OPTION = {
6
+ blockquote: "blockquote",
7
+ bold: "bold",
8
+ bulletList: "bulletList",
9
+ code: "code",
10
+ codeBlock: "codeBlock",
11
+ doc: "document",
12
+ dropCursor: "dropcursor",
13
+ gapCursor: "gapcursor",
14
+ hardBreak: "hardBreak",
15
+ heading: "heading",
16
+ undoRedo: "undoRedo",
17
+ horizontalRule: "horizontalRule",
18
+ italic: "italic",
19
+ listItem: "listItem",
20
+ listKeymap: "listKeymap",
21
+ link: "link",
22
+ orderedList: "orderedList",
23
+ paragraph: "paragraph",
24
+ strike: "strike",
25
+ text: "text",
26
+ underline: "underline",
27
+ trailingNode: "trailingNode",
28
+ };
29
+ /**
30
+ * Describes which parts of Angular Tiptap Editor's UI or state calculators
31
+ * depend on a given built-in or StarterKit extension name.
32
+ */
33
+ export const ATE_BUILTIN_UI_DEPENDENCIES = {
34
+ blockquote: "toolbar/slash menu blockquote buttons, AteStructureCalculator",
35
+ bold: "toolbar/bubble menu bold buttons, AteMarksCalculator",
36
+ bulletList: "toolbar/slash menu bullet list buttons, AteStructureCalculator",
37
+ code: "toolbar/bubble menu inline code buttons, AteMarksCalculator",
38
+ codeBlock: "toolbar/slash menu code block buttons, AteStructureCalculator",
39
+ doc: "top-level ProseMirror document schema",
40
+ dropCursor: "drag-and-drop cursor indicator",
41
+ gapCursor: "gap cursor navigation around leaf block nodes",
42
+ hardBreak: "Shift+Enter line break shortcut",
43
+ heading: "toolbar/bubble menu/slash menu heading controls, table of contents, AteStructureCalculator",
44
+ undoRedo: "toolbar undo/redo buttons, AteStructureCalculator",
45
+ horizontalRule: "toolbar/slash menu horizontal rule buttons",
46
+ italic: "toolbar/bubble menu italic buttons, AteMarksCalculator",
47
+ listItem: "bullet/ordered list items, block shortcuts",
48
+ listKeymap: "list backspace/delete keyboard navigation",
49
+ link: "toolbar/bubble menu link editor, Mod+K shortcut, AteMarksCalculator",
50
+ orderedList: "toolbar/slash menu ordered list buttons, AteStructureCalculator",
51
+ paragraph: "default text block node, AteStructureCalculator",
52
+ strike: "toolbar/bubble menu strikethrough buttons, AteMarksCalculator",
53
+ text: "core inline text node",
54
+ underline: "toolbar/bubble menu underline buttons, AteMarksCalculator",
55
+ trailingNode: "automatic trailing paragraph after block nodes",
56
+ textStyle: "color picker, AteMarksCalculator",
57
+ color: "toolbar/bubble menu text color picker, AteMarksCalculator",
58
+ placeholder: "empty editor placeholder decoration",
59
+ superscript: "toolbar/bubble menu superscript buttons, AteMarksCalculator",
60
+ subscript: "toolbar/bubble menu subscript buttons, AteMarksCalculator",
61
+ textAlign: "toolbar/image bubble menu alignment buttons, AteStructureCalculator",
62
+ ateLinkClickBehavior: "read-only and Ctrl+click link navigation",
63
+ ateBlockShortcuts: "Mod+D and Mod+Shift+ArrowUp/Down block shortcuts",
64
+ ateLinkShortcut: "Mod+K link editor shortcut",
65
+ highlight: "toolbar/bubble menu highlight picker, AteMarksCalculator",
66
+ resizableImage: "image node view, image bubble menu, image upload/resize service, AteImageCalculator",
67
+ atePastedImage: "pasted HTML image sanitization and base64 re-hosting",
68
+ ateUploadProgress: "image upload progress overlay",
69
+ tableExtension: "toolbar/slash menu table insertion, table/cell bubble menus, AteTableCalculator",
70
+ tableOfContents: "slash menu table of contents node, AteTableOfContentsComponent",
71
+ tiptapState: "reactive editor state engine (toolbar, bubble menus, footer)",
72
+ blockControls: "block plus button and drag handle",
73
+ officePaste: "Word/Excel paste normalization",
74
+ characterCount: "footer character/word counters and maxCharacters limit",
75
+ };
76
+ export function getExtensionName(ext) {
77
+ return ext?.name;
78
+ }
79
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXRlLWV4dGVuc2lvbnMudXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXRpcHRhcC1lZGl0b3Ivc3JjL2xpYi91dGlscy9hdGUtZXh0ZW5zaW9ucy51dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQTs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBc0Q7SUFDM0YsVUFBVSxFQUFFLFlBQVk7SUFDeEIsSUFBSSxFQUFFLE1BQU07SUFDWixVQUFVLEVBQUUsWUFBWTtJQUN4QixJQUFJLEVBQUUsTUFBTTtJQUNaLFNBQVMsRUFBRSxXQUFXO0lBQ3RCLEdBQUcsRUFBRSxVQUFVO0lBQ2YsVUFBVSxFQUFFLFlBQVk7SUFDeEIsU0FBUyxFQUFFLFdBQVc7SUFDdEIsU0FBUyxFQUFFLFdBQVc7SUFDdEIsT0FBTyxFQUFFLFNBQVM7SUFDbEIsUUFBUSxFQUFFLFVBQVU7SUFDcEIsY0FBYyxFQUFFLGdCQUFnQjtJQUNoQyxNQUFNLEVBQUUsUUFBUTtJQUNoQixRQUFRLEVBQUUsVUFBVTtJQUNwQixVQUFVLEVBQUUsWUFBWTtJQUN4QixJQUFJLEVBQUUsTUFBTTtJQUNaLFdBQVcsRUFBRSxhQUFhO0lBQzFCLFNBQVMsRUFBRSxXQUFXO0lBQ3RCLE1BQU0sRUFBRSxRQUFRO0lBQ2hCLElBQUksRUFBRSxNQUFNO0lBQ1osU0FBUyxFQUFFLFdBQVc7SUFDdEIsWUFBWSxFQUFFLGNBQWM7Q0FDN0IsQ0FBQztBQUVGOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFxQztJQUMzRSxVQUFVLEVBQUUsK0RBQStEO0lBQzNFLElBQUksRUFBRSxzREFBc0Q7SUFDNUQsVUFBVSxFQUFFLGdFQUFnRTtJQUM1RSxJQUFJLEVBQUUsNkRBQTZEO0lBQ25FLFNBQVMsRUFBRSwrREFBK0Q7SUFDMUUsR0FBRyxFQUFFLHVDQUF1QztJQUM1QyxVQUFVLEVBQUUsZ0NBQWdDO0lBQzVDLFNBQVMsRUFBRSwrQ0FBK0M7SUFDMUQsU0FBUyxFQUFFLGlDQUFpQztJQUM1QyxPQUFPLEVBQ0wsNEZBQTRGO0lBQzlGLFFBQVEsRUFBRSxtREFBbUQ7SUFDN0QsY0FBYyxFQUFFLDRDQUE0QztJQUM1RCxNQUFNLEVBQUUsd0RBQXdEO0lBQ2hFLFFBQVEsRUFBRSw0Q0FBNEM7SUFDdEQsVUFBVSxFQUFFLDJDQUEyQztJQUN2RCxJQUFJLEVBQUUscUVBQXFFO0lBQzNFLFdBQVcsRUFBRSxpRUFBaUU7SUFDOUUsU0FBUyxFQUFFLGlEQUFpRDtJQUM1RCxNQUFNLEVBQUUsK0RBQStEO0lBQ3ZFLElBQUksRUFBRSx1QkFBdUI7SUFDN0IsU0FBUyxFQUFFLDJEQUEyRDtJQUN0RSxZQUFZLEVBQUUsZ0RBQWdEO0lBQzlELFNBQVMsRUFBRSxrQ0FBa0M7SUFDN0MsS0FBSyxFQUFFLDJEQUEyRDtJQUNsRSxXQUFXLEVBQUUscUNBQXFDO0lBQ2xELFdBQVcsRUFBRSw2REFBNkQ7SUFDMUUsU0FBUyxFQUFFLDJEQUEyRDtJQUN0RSxTQUFTLEVBQUUscUVBQXFFO0lBQ2hGLG9CQUFvQixFQUFFLDBDQUEwQztJQUNoRSxpQkFBaUIsRUFBRSxrREFBa0Q7SUFDckUsZUFBZSxFQUFFLDRCQUE0QjtJQUM3QyxTQUFTLEVBQUUsMERBQTBEO0lBQ3JFLGNBQWMsRUFDWixxRkFBcUY7SUFDdkYsY0FBYyxFQUFFLHNEQUFzRDtJQUN0RSxpQkFBaUIsRUFBRSwrQkFBK0I7SUFDbEQsY0FBYyxFQUFFLGlGQUFpRjtJQUNqRyxlQUFlLEVBQUUsZ0VBQWdFO0lBQ2pGLFdBQVcsRUFBRSw4REFBOEQ7SUFDM0UsYUFBYSxFQUFFLG1DQUFtQztJQUNsRCxXQUFXLEVBQUUsZ0NBQWdDO0lBQzdDLGNBQWMsRUFBRSx3REFBd0Q7Q0FDekUsQ0FBQztBQUVGLE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxHQUE0QjtJQUMzRCxPQUFRLEdBQXlCLEVBQUUsSUFBSSxDQUFDO0FBQzFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEV4dGVuc2lvbiwgTWFyaywgTm9kZSB9IGZyb20gXCJAdGlwdGFwL2NvcmVcIjtcbmltcG9ydCB0eXBlIHsgU3RhcnRlcktpdE9wdGlvbnMgfSBmcm9tIFwiQHRpcHRhcC9zdGFydGVyLWtpdFwiO1xuXG4vKipcbiAqIE1hcHMgdGhlIHJ1bnRpbWUgYC5uYW1lYCBvZiBlYWNoIGV4dGVuc2lvbiBidW5kbGVkIGluIGBAdGlwdGFwL3N0YXJ0ZXIta2l0YFxuICogdG8gaXRzIGNvcnJlc3BvbmRpbmcgb3B0aW9uIGtleSBpbiBgU3RhcnRlcktpdE9wdGlvbnNgLlxuICovXG5leHBvcnQgY29uc3QgU1RBUlRFUl9LSVRfTkFNRV9UT19PUFRJT046IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIGtleW9mIFN0YXJ0ZXJLaXRPcHRpb25zPj4gPSB7XG4gIGJsb2NrcXVvdGU6IFwiYmxvY2txdW90ZVwiLFxuICBib2xkOiBcImJvbGRcIixcbiAgYnVsbGV0TGlzdDogXCJidWxsZXRMaXN0XCIsXG4gIGNvZGU6IFwiY29kZVwiLFxuICBjb2RlQmxvY2s6IFwiY29kZUJsb2NrXCIsXG4gIGRvYzogXCJkb2N1bWVudFwiLFxuICBkcm9wQ3Vyc29yOiBcImRyb3BjdXJzb3JcIixcbiAgZ2FwQ3Vyc29yOiBcImdhcGN1cnNvclwiLFxuICBoYXJkQnJlYWs6IFwiaGFyZEJyZWFrXCIsXG4gIGhlYWRpbmc6IFwiaGVhZGluZ1wiLFxuICB1bmRvUmVkbzogXCJ1bmRvUmVkb1wiLFxuICBob3Jpem9udGFsUnVsZTogXCJob3Jpem9udGFsUnVsZVwiLFxuICBpdGFsaWM6IFwiaXRhbGljXCIsXG4gIGxpc3RJdGVtOiBcImxpc3RJdGVtXCIsXG4gIGxpc3RLZXltYXA6IFwibGlzdEtleW1hcFwiLFxuICBsaW5rOiBcImxpbmtcIixcbiAgb3JkZXJlZExpc3Q6IFwib3JkZXJlZExpc3RcIixcbiAgcGFyYWdyYXBoOiBcInBhcmFncmFwaFwiLFxuICBzdHJpa2U6IFwic3RyaWtlXCIsXG4gIHRleHQ6IFwidGV4dFwiLFxuICB1bmRlcmxpbmU6IFwidW5kZXJsaW5lXCIsXG4gIHRyYWlsaW5nTm9kZTogXCJ0cmFpbGluZ05vZGVcIixcbn07XG5cbi8qKlxuICogRGVzY3JpYmVzIHdoaWNoIHBhcnRzIG9mIEFuZ3VsYXIgVGlwdGFwIEVkaXRvcidzIFVJIG9yIHN0YXRlIGNhbGN1bGF0b3JzXG4gKiBkZXBlbmQgb24gYSBnaXZlbiBidWlsdC1pbiBvciBTdGFydGVyS2l0IGV4dGVuc2lvbiBuYW1lLlxuICovXG5leHBvcnQgY29uc3QgQVRFX0JVSUxUSU5fVUlfREVQRU5ERU5DSUVTOiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PiA9IHtcbiAgYmxvY2txdW90ZTogXCJ0b29sYmFyL3NsYXNoIG1lbnUgYmxvY2txdW90ZSBidXR0b25zLCBBdGVTdHJ1Y3R1cmVDYWxjdWxhdG9yXCIsXG4gIGJvbGQ6IFwidG9vbGJhci9idWJibGUgbWVudSBib2xkIGJ1dHRvbnMsIEF0ZU1hcmtzQ2FsY3VsYXRvclwiLFxuICBidWxsZXRMaXN0OiBcInRvb2xiYXIvc2xhc2ggbWVudSBidWxsZXQgbGlzdCBidXR0b25zLCBBdGVTdHJ1Y3R1cmVDYWxjdWxhdG9yXCIsXG4gIGNvZGU6IFwidG9vbGJhci9idWJibGUgbWVudSBpbmxpbmUgY29kZSBidXR0b25zLCBBdGVNYXJrc0NhbGN1bGF0b3JcIixcbiAgY29kZUJsb2NrOiBcInRvb2xiYXIvc2xhc2ggbWVudSBjb2RlIGJsb2NrIGJ1dHRvbnMsIEF0ZVN0cnVjdHVyZUNhbGN1bGF0b3JcIixcbiAgZG9jOiBcInRvcC1sZXZlbCBQcm9zZU1pcnJvciBkb2N1bWVudCBzY2hlbWFcIixcbiAgZHJvcEN1cnNvcjogXCJkcmFnLWFuZC1kcm9wIGN1cnNvciBpbmRpY2F0b3JcIixcbiAgZ2FwQ3Vyc29yOiBcImdhcCBjdXJzb3IgbmF2aWdhdGlvbiBhcm91bmQgbGVhZiBibG9jayBub2Rlc1wiLFxuICBoYXJkQnJlYWs6IFwiU2hpZnQrRW50ZXIgbGluZSBicmVhayBzaG9ydGN1dFwiLFxuICBoZWFkaW5nOlxuICAgIFwidG9vbGJhci9idWJibGUgbWVudS9zbGFzaCBtZW51IGhlYWRpbmcgY29udHJvbHMsIHRhYmxlIG9mIGNvbnRlbnRzLCBBdGVTdHJ1Y3R1cmVDYWxjdWxhdG9yXCIsXG4gIHVuZG9SZWRvOiBcInRvb2xiYXIgdW5kby9yZWRvIGJ1dHRvbnMsIEF0ZVN0cnVjdHVyZUNhbGN1bGF0b3JcIixcbiAgaG9yaXpvbnRhbFJ1bGU6IFwidG9vbGJhci9zbGFzaCBtZW51IGhvcml6b250YWwgcnVsZSBidXR0b25zXCIsXG4gIGl0YWxpYzogXCJ0b29sYmFyL2J1YmJsZSBtZW51IGl0YWxpYyBidXR0b25zLCBBdGVNYXJrc0NhbGN1bGF0b3JcIixcbiAgbGlzdEl0ZW06IFwiYnVsbGV0L29yZGVyZWQgbGlzdCBpdGVtcywgYmxvY2sgc2hvcnRjdXRzXCIsXG4gIGxpc3RLZXltYXA6IFwibGlzdCBiYWNrc3BhY2UvZGVsZXRlIGtleWJvYXJkIG5hdmlnYXRpb25cIixcbiAgbGluazogXCJ0b29sYmFyL2J1YmJsZSBtZW51IGxpbmsgZWRpdG9yLCBNb2QrSyBzaG9ydGN1dCwgQXRlTWFya3NDYWxjdWxhdG9yXCIsXG4gIG9yZGVyZWRMaXN0OiBcInRvb2xiYXIvc2xhc2ggbWVudSBvcmRlcmVkIGxpc3QgYnV0dG9ucywgQXRlU3RydWN0dXJlQ2FsY3VsYXRvclwiLFxuICBwYXJhZ3JhcGg6IFwiZGVmYXVsdCB0ZXh0IGJsb2NrIG5vZGUsIEF0ZVN0cnVjdHVyZUNhbGN1bGF0b3JcIixcbiAgc3RyaWtlOiBcInRvb2xiYXIvYnViYmxlIG1lbnUgc3RyaWtldGhyb3VnaCBidXR0b25zLCBBdGVNYXJrc0NhbGN1bGF0b3JcIixcbiAgdGV4dDogXCJjb3JlIGlubGluZSB0ZXh0IG5vZGVcIixcbiAgdW5kZXJsaW5lOiBcInRvb2xiYXIvYnViYmxlIG1lbnUgdW5kZXJsaW5lIGJ1dHRvbnMsIEF0ZU1hcmtzQ2FsY3VsYXRvclwiLFxuICB0cmFpbGluZ05vZGU6IFwiYXV0b21hdGljIHRyYWlsaW5nIHBhcmFncmFwaCBhZnRlciBibG9jayBub2Rlc1wiLFxuICB0ZXh0U3R5bGU6IFwiY29sb3IgcGlja2VyLCBBdGVNYXJrc0NhbGN1bGF0b3JcIixcbiAgY29sb3I6IFwidG9vbGJhci9idWJibGUgbWVudSB0ZXh0IGNvbG9yIHBpY2tlciwgQXRlTWFya3NDYWxjdWxhdG9yXCIsXG4gIHBsYWNlaG9sZGVyOiBcImVtcHR5IGVkaXRvciBwbGFjZWhvbGRlciBkZWNvcmF0aW9uXCIsXG4gIHN1cGVyc2NyaXB0OiBcInRvb2xiYXIvYnViYmxlIG1lbnUgc3VwZXJzY3JpcHQgYnV0dG9ucywgQXRlTWFya3NDYWxjdWxhdG9yXCIsXG4gIHN1YnNjcmlwdDogXCJ0b29sYmFyL2J1YmJsZSBtZW51IHN1YnNjcmlwdCBidXR0b25zLCBBdGVNYXJrc0NhbGN1bGF0b3JcIixcbiAgdGV4dEFsaWduOiBcInRvb2xiYXIvaW1hZ2UgYnViYmxlIG1lbnUgYWxpZ25tZW50IGJ1dHRvbnMsIEF0ZVN0cnVjdHVyZUNhbGN1bGF0b3JcIixcbiAgYXRlTGlua0NsaWNrQmVoYXZpb3I6IFwicmVhZC1vbmx5IGFuZCBDdHJsK2NsaWNrIGxpbmsgbmF2aWdhdGlvblwiLFxuICBhdGVCbG9ja1Nob3J0Y3V0czogXCJNb2QrRCBhbmQgTW9kK1NoaWZ0K0Fycm93VXAvRG93biBibG9jayBzaG9ydGN1dHNcIixcbiAgYXRlTGlua1Nob3J0Y3V0OiBcIk1vZCtLIGxpbmsgZWRpdG9yIHNob3J0Y3V0XCIsXG4gIGhpZ2hsaWdodDogXCJ0b29sYmFyL2J1YmJsZSBtZW51IGhpZ2hsaWdodCBwaWNrZXIsIEF0ZU1hcmtzQ2FsY3VsYXRvclwiLFxuICByZXNpemFibGVJbWFnZTpcbiAgICBcImltYWdlIG5vZGUgdmlldywgaW1hZ2UgYnViYmxlIG1lbnUsIGltYWdlIHVwbG9hZC9yZXNpemUgc2VydmljZSwgQXRlSW1hZ2VDYWxjdWxhdG9yXCIsXG4gIGF0ZVBhc3RlZEltYWdlOiBcInBhc3RlZCBIVE1MIGltYWdlIHNhbml0aXphdGlvbiBhbmQgYmFzZTY0IHJlLWhvc3RpbmdcIixcbiAgYXRlVXBsb2FkUHJvZ3Jlc3M6IFwiaW1hZ2UgdXBsb2FkIHByb2dyZXNzIG92ZXJsYXlcIixcbiAgdGFibGVFeHRlbnNpb246IFwidG9vbGJhci9zbGFzaCBtZW51IHRhYmxlIGluc2VydGlvbiwgdGFibGUvY2VsbCBidWJibGUgbWVudXMsIEF0ZVRhYmxlQ2FsY3VsYXRvclwiLFxuICB0YWJsZU9mQ29udGVudHM6IFwic2xhc2ggbWVudSB0YWJsZSBvZiBjb250ZW50cyBub2RlLCBBdGVUYWJsZU9mQ29udGVudHNDb21wb25lbnRcIixcbiAgdGlwdGFwU3RhdGU6IFwicmVhY3RpdmUgZWRpdG9yIHN0YXRlIGVuZ2luZSAodG9vbGJhciwgYnViYmxlIG1lbnVzLCBmb290ZXIpXCIsXG4gIGJsb2NrQ29udHJvbHM6IFwiYmxvY2sgcGx1cyBidXR0b24gYW5kIGRyYWcgaGFuZGxlXCIsXG4gIG9mZmljZVBhc3RlOiBcIldvcmQvRXhjZWwgcGFzdGUgbm9ybWFsaXphdGlvblwiLFxuICBjaGFyYWN0ZXJDb3VudDogXCJmb290ZXIgY2hhcmFjdGVyL3dvcmQgY291bnRlcnMgYW5kIG1heENoYXJhY3RlcnMgbGltaXRcIixcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRFeHRlbnNpb25OYW1lKGV4dDogRXh0ZW5zaW9uIHwgTm9kZSB8IE1hcmspOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gKGV4dCBhcyB7IG5hbWU/OiBzdHJpbmcgfSk/Lm5hbWU7XG59XG4iXX0=
@@ -34,6 +34,7 @@ export * from "./lib/extensions/calculators/ate-table.calculator";
34
34
  // Extensions
35
35
  export { AtePastedImage, classifyPastedImageSrc, dataUriToFile, sanitizePastedImages, } from "./lib/extensions/ate-pasted-image.extension";
36
36
  export { AteLinkShortcut, isLinkShortcut, } from "./lib/extensions/ate-link-shortcut.extension";
37
+ export { AteBlockShortcuts, } from "./lib/extensions/ate-block-shortcuts.extension";
37
38
  // Types and interfaces for configuration
38
39
  export * from "./lib/models/ate-toolbar.model";
39
40
  export * from "./lib/models/ate-image.model";
@@ -52,4 +53,4 @@ export { AteAngularNodeView } from "./lib/node-view/ate-angular-node-view";
52
53
  export { AteNodeViewRenderer } from "./lib/node-view/ate-node-view.renderer";
53
54
  export { createAngularComponentExtension } from "./lib/node-view/ate-node-view.factory";
54
55
  export { registerAngularComponent } from "./lib/node-view/ate-register-angular-component";
55
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdGlwdGFwLWVkaXRvci9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILDRCQUE0QjtBQUM1QixjQUFjLHlEQUF5RCxDQUFDO0FBQ3hFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLG9FQUFvRSxDQUFDO0FBQ2pILE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsaUJBQWlCLEVBQ2pCLHNCQUFzQixHQUN2QixNQUFNLDJEQUEyRCxDQUFDO0FBQ25FLGNBQWMsMkJBQTJCLENBQUM7QUFFMUMsUUFBUTtBQUNSLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzFFLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsNEJBQTRCLEdBRTdCLE1BQU0sK0JBQStCLENBQUM7QUFDdkMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFaEUsYUFBYTtBQUNiLGNBQWMsb0RBQW9ELENBQUM7QUFDbkUsY0FBYyx3Q0FBd0MsQ0FBQztBQUV2RCxXQUFXO0FBQ1gsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLDRDQUE0QyxDQUFDO0FBQzNELGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYyw0Q0FBNEMsQ0FBQztBQUMzRCxjQUFjLDBDQUEwQyxDQUFDO0FBQ3pELGNBQWMsNkJBQTZCLENBQUM7QUFFNUMscURBQXFEO0FBQ3JELGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYyx1REFBdUQsQ0FBQztBQUN0RSxjQUFjLG1EQUFtRCxDQUFDO0FBQ2xFLGNBQWMsbURBQW1ELENBQUM7QUFDbEUsY0FBYyx1REFBdUQsQ0FBQztBQUN0RSxjQUFjLHVEQUF1RCxDQUFDO0FBQ3RFLGNBQWMsbURBQW1ELENBQUM7QUFFbEUsYUFBYTtBQUNiLE9BQU8sRUFDTCxjQUFjLEVBQ2Qsc0JBQXNCLEVBQ3RCLGFBQWEsRUFDYixvQkFBb0IsR0FHckIsTUFBTSw2Q0FBNkMsQ0FBQztBQUNyRCxPQUFPLEVBQ0wsZUFBZSxFQUNmLGNBQWMsR0FFZixNQUFNLDhDQUE4QyxDQUFDO0FBRXRELHlDQUF5QztBQUN6QyxjQUFjLGdDQUFnQyxDQUFDO0FBQy9DLGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYyxvQ0FBb0MsQ0FBQztBQUNuRCxjQUFjLHNDQUFzQyxDQUFDO0FBQ3JELGNBQWMsc0NBQXNDLENBQUM7QUFDckQsY0FBYyw0QkFBNEIsQ0FBQztBQUUzQyx5QkFBeUI7QUFDekIsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxjQUFjLHNDQUFzQyxDQUFDO0FBQ3JELGNBQWMsNkJBQTZCLENBQUM7QUFFNUMsdUNBQXVDO0FBQ3ZDLGNBQWMsd0NBQXdDLENBQUM7QUFLdkQsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzdFLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3hGLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGdEQUFnRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiB0aXB0YXAtZWRpdG9yXG4gKi9cblxuLy8gTWFpbiBjb21wb25lbnQgJiBQcm92aWRlclxuZXhwb3J0ICogZnJvbSBcIi4vbGliL2NvbXBvbmVudHMvZWRpdG9yL2FuZ3VsYXItdGlwdGFwLWVkaXRvci5jb21wb25lbnRcIjtcbmV4cG9ydCB7IEF0ZVRhYmxlT2ZDb250ZW50c0NvbXBvbmVudCB9IGZyb20gXCIuL2xpYi9jb21wb25lbnRzL3RhYmxlLW9mLWNvbnRlbnRzL2F0ZS10YWJsZS1vZi1jb250ZW50cy5jb21wb25lbnRcIjtcbmV4cG9ydCB7XG4gIEF0ZVRvY05vZGVDb21wb25lbnQsXG4gIEF0ZVRvY05vZGVPcHRpb25zLFxuICBnZXRBdGVUb2NOb2RlRXh0ZW5zaW9uLFxufSBmcm9tIFwiLi9saWIvY29tcG9uZW50cy90YWJsZS1vZi1jb250ZW50cy9hdGUtdG9jLW5vZGUuY29tcG9uZW50XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9saWIvYXRlLWVkaXRvci5wcm92aWRlclwiO1xuXG4vLyBJY29uc1xuZXhwb3J0IHsgQXRlSWNvbkNvbXBvbmVudCB9IGZyb20gXCIuL2xpYi9jb21wb25lbnRzL3VpL2F0ZS1pY29uLmNvbXBvbmVudFwiO1xuZXhwb3J0IHtcbiAgQVRFX0RFRkFVTFRfSUNPTlMsXG4gIEFURV9NQVRFUklBTF9TWU1CT0xTX1ZJRVdCT1gsXG4gIHR5cGUgQXRlSWNvbk5hbWUsXG59IGZyb20gXCIuL2xpYi9pY29ucy9hdGUtZGVmYXVsdC1pY29uc1wiO1xuZXhwb3J0IHsgQVRFX1NUUk9LRV9JQ09OUyB9IGZyb20gXCIuL2xpYi9pY29ucy9hdGUtc3Ryb2tlLWljb25zXCI7XG5cbi8vIERpcmVjdGl2ZXNcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9kaXJlY3RpdmVzL2F0ZS1ub29wLXZhbHVlLWFjY2Vzc29yLmRpcmVjdGl2ZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbGliL2RpcmVjdGl2ZXMvYXRlLXRvb2x0aXAuZGlyZWN0aXZlXCI7XG5cbi8vIFNlcnZpY2VzXG5leHBvcnQgKiBmcm9tIFwiLi9saWIvc2VydmljZXMvYXRlLWkxOG4uc2VydmljZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbGliL3NlcnZpY2VzL2F0ZS1lZGl0b3ItY29tbWFuZHMuc2VydmljZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbGliL3NlcnZpY2VzL2F0ZS1pbWFnZS5zZXJ2aWNlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9saWIvc2VydmljZXMvYXRlLWNvbG9yLXBpY2tlci5zZXJ2aWNlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9saWIvc2VydmljZXMvYXRlLWxpbmsuc2VydmljZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbGliL3NlcnZpY2VzL2F0ZS1leHBvcnQuc2VydmljZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbGliL3NlcnZpY2VzL2F0ZS1lZGl0b3ItcmVnaXN0cnkuc2VydmljZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbGliL3NlcnZpY2VzL2F0ZS1pY29uLXJlZ2lzdHJ5LnNlcnZpY2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9tb2RlbHMvYXRlLWVkaXRvci1yZWZcIjtcblxuLy8gU3RhdGUgJiBDYWxjdWxhdG9ycyAoRXNzZW50aWFsIGZvciBjdXN0b20gcGx1Z2lucylcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9tb2RlbHMvYXRlLWVkaXRvci1zdGF0ZS5tb2RlbFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbGliL2V4dGVuc2lvbnMvY2FsY3VsYXRvcnMvYXRlLWRpc2NvdmVyeS5jYWxjdWxhdG9yXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9saWIvZXh0ZW5zaW9ucy9jYWxjdWxhdG9ycy9hdGUtaW1hZ2UuY2FsY3VsYXRvclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbGliL2V4dGVuc2lvbnMvY2FsY3VsYXRvcnMvYXRlLW1hcmtzLmNhbGN1bGF0b3JcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9leHRlbnNpb25zL2NhbGN1bGF0b3JzL2F0ZS1zZWxlY3Rpb24uY2FsY3VsYXRvclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbGliL2V4dGVuc2lvbnMvY2FsY3VsYXRvcnMvYXRlLXN0cnVjdHVyZS5jYWxjdWxhdG9yXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9saWIvZXh0ZW5zaW9ucy9jYWxjdWxhdG9ycy9hdGUtdGFibGUuY2FsY3VsYXRvclwiO1xuXG4vLyBFeHRlbnNpb25zXG5leHBvcnQge1xuICBBdGVQYXN0ZWRJbWFnZSxcbiAgY2xhc3NpZnlQYXN0ZWRJbWFnZVNyYyxcbiAgZGF0YVVyaVRvRmlsZSxcbiAgc2FuaXRpemVQYXN0ZWRJbWFnZXMsXG4gIHR5cGUgQXRlUGFzdGVkSW1hZ2VPcHRpb25zLFxuICB0eXBlIEF0ZVBhc3RlZEltYWdlU291cmNlLFxufSBmcm9tIFwiLi9saWIvZXh0ZW5zaW9ucy9hdGUtcGFzdGVkLWltYWdlLmV4dGVuc2lvblwiO1xuZXhwb3J0IHtcbiAgQXRlTGlua1Nob3J0Y3V0LFxuICBpc0xpbmtTaG9ydGN1dCxcbiAgdHlwZSBBdGVMaW5rU2hvcnRjdXRPcHRpb25zLFxufSBmcm9tIFwiLi9saWIvZXh0ZW5zaW9ucy9hdGUtbGluay1zaG9ydGN1dC5leHRlbnNpb25cIjtcblxuLy8gVHlwZXMgYW5kIGludGVyZmFjZXMgZm9yIGNvbmZpZ3VyYXRpb25cbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9tb2RlbHMvYXRlLXRvb2xiYXIubW9kZWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9tb2RlbHMvYXRlLWltYWdlLm1vZGVsXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9saWIvbW9kZWxzL2F0ZS1idWJibGUtbWVudS5tb2RlbFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbGliL21vZGVscy9hdGUtZWRpdG9yLWNvbmZpZy5tb2RlbFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbGliL21vZGVscy9hdGUtc2xhc2gtY29tbWFuZC5tb2RlbFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbGliL21vZGVscy9hdGUtdG9jLm1vZGVsXCI7XG5cbi8vIERlZmF1bHQgY29uZmlndXJhdGlvbnNcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9jb25maWcvYXRlLWVkaXRvci5jb25maWdcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9jb25maWcvYXRlLWdsb2JhbC1jb25maWcudG9rZW5cIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9jb25maWcvYXRlLXRvYy5jb25maWdcIjtcblxuLy8gVXRpbGl0eSBmdW5jdGlvbnMgZm9yIHNsYXNoIGNvbW1hbmRzXG5leHBvcnQgKiBmcm9tIFwiLi9saWIvY29uZmlnL2F0ZS1zbGFzaC1jb21tYW5kcy5jb25maWdcIjtcblxuLy8gVHJhbnNsYXRpb25zXG5leHBvcnQgdHlwZSB7IFN1cHBvcnRlZExvY2FsZSB9IGZyb20gXCIuL2xpYi9pMThuL2F0ZVRyYW5zbGF0aW9uc01vZGVsXCI7XG5cbi8vIEFuZ3VsYXIgTm9kZVZpZXcgSW50ZWdyYXRpb25cbmV4cG9ydCB7IEF0ZUFuZ3VsYXJOb2RlVmlldyB9IGZyb20gXCIuL2xpYi9ub2RlLXZpZXcvYXRlLWFuZ3VsYXItbm9kZS12aWV3XCI7XG5leHBvcnQgeyBBdGVOb2RlVmlld1JlbmRlcmVyIH0gZnJvbSBcIi4vbGliL25vZGUtdmlldy9hdGUtbm9kZS12aWV3LnJlbmRlcmVyXCI7XG5leHBvcnQgeyBjcmVhdGVBbmd1bGFyQ29tcG9uZW50RXh0ZW5zaW9uIH0gZnJvbSBcIi4vbGliL25vZGUtdmlldy9hdGUtbm9kZS12aWV3LmZhY3RvcnlcIjtcbmV4cG9ydCB7IHJlZ2lzdGVyQW5ndWxhckNvbXBvbmVudCB9IGZyb20gXCIuL2xpYi9ub2RlLXZpZXcvYXRlLXJlZ2lzdGVyLWFuZ3VsYXItY29tcG9uZW50XCI7XG5cbi8vIE5vZGUgVmlldyBUeXBlcyAtIEF0ZUFuZ3VsYXJOb2RlIGlzIHRoZSBwcmltYXJ5IHB1YmxpYyB0eXBlXG5leHBvcnQgdHlwZSB7IEF0ZUFuZ3VsYXJOb2RlIH0gZnJvbSBcIi4vbGliL21vZGVscy9hdGUtZWRpdG9yLWNvbmZpZy5tb2RlbFwiO1xuLy8gQWR2YW5jZWQ6IExvdy1sZXZlbCBvcHRpb25zIGZvciBmdWxsIGNvbnRyb2wgb3ZlciBub2RlIHJlZ2lzdHJhdGlvblxuZXhwb3J0IHR5cGUge1xuICBSZWdpc3RlckFuZ3VsYXJDb21wb25lbnRPcHRpb25zLFxuICBBdGVDb21wb25lbnRSZW5kZXJPcHRpb25zLFxufSBmcm9tIFwiLi9saWIvbm9kZS12aWV3L2F0ZS1ub2RlLXZpZXcubW9kZWxzXCI7XG4iXX0=
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdGlwdGFwLWVkaXRvci9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILDRCQUE0QjtBQUM1QixjQUFjLHlEQUF5RCxDQUFDO0FBQ3hFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLG9FQUFvRSxDQUFDO0FBQ2pILE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsaUJBQWlCLEVBQ2pCLHNCQUFzQixHQUN2QixNQUFNLDJEQUEyRCxDQUFDO0FBQ25FLGNBQWMsMkJBQTJCLENBQUM7QUFFMUMsUUFBUTtBQUNSLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzFFLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsNEJBQTRCLEdBRTdCLE1BQU0sK0JBQStCLENBQUM7QUFDdkMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFaEUsYUFBYTtBQUNiLGNBQWMsb0RBQW9ELENBQUM7QUFDbkUsY0FBYyx3Q0FBd0MsQ0FBQztBQUV2RCxXQUFXO0FBQ1gsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLDRDQUE0QyxDQUFDO0FBQzNELGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYyw0Q0FBNEMsQ0FBQztBQUMzRCxjQUFjLDBDQUEwQyxDQUFDO0FBQ3pELGNBQWMsNkJBQTZCLENBQUM7QUFFNUMscURBQXFEO0FBQ3JELGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYyx1REFBdUQsQ0FBQztBQUN0RSxjQUFjLG1EQUFtRCxDQUFDO0FBQ2xFLGNBQWMsbURBQW1ELENBQUM7QUFDbEUsY0FBYyx1REFBdUQsQ0FBQztBQUN0RSxjQUFjLHVEQUF1RCxDQUFDO0FBQ3RFLGNBQWMsbURBQW1ELENBQUM7QUFFbEUsYUFBYTtBQUNiLE9BQU8sRUFDTCxjQUFjLEVBQ2Qsc0JBQXNCLEVBQ3RCLGFBQWEsRUFDYixvQkFBb0IsR0FHckIsTUFBTSw2Q0FBNkMsQ0FBQztBQUNyRCxPQUFPLEVBQ0wsZUFBZSxFQUNmLGNBQWMsR0FFZixNQUFNLDhDQUE4QyxDQUFDO0FBQ3RELE9BQU8sRUFDTCxpQkFBaUIsR0FFbEIsTUFBTSxnREFBZ0QsQ0FBQztBQUV4RCx5Q0FBeUM7QUFDekMsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsb0NBQW9DLENBQUM7QUFDbkQsY0FBYyxzQ0FBc0MsQ0FBQztBQUNyRCxjQUFjLHNDQUFzQyxDQUFDO0FBQ3JELGNBQWMsNEJBQTRCLENBQUM7QUFFM0MseUJBQXlCO0FBQ3pCLGNBQWMsZ0NBQWdDLENBQUM7QUFDL0MsY0FBYyxzQ0FBc0MsQ0FBQztBQUNyRCxjQUFjLDZCQUE2QixDQUFDO0FBRTVDLHVDQUF1QztBQUN2QyxjQUFjLHdDQUF3QyxDQUFDO0FBS3ZELCtCQUErQjtBQUMvQixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM3RSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN4RixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2YgdGlwdGFwLWVkaXRvclxuICovXG5cbi8vIE1haW4gY29tcG9uZW50ICYgUHJvdmlkZXJcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9jb21wb25lbnRzL2VkaXRvci9hbmd1bGFyLXRpcHRhcC1lZGl0b3IuY29tcG9uZW50XCI7XG5leHBvcnQgeyBBdGVUYWJsZU9mQ29udGVudHNDb21wb25lbnQgfSBmcm9tIFwiLi9saWIvY29tcG9uZW50cy90YWJsZS1vZi1jb250ZW50cy9hdGUtdGFibGUtb2YtY29udGVudHMuY29tcG9uZW50XCI7XG5leHBvcnQge1xuICBBdGVUb2NOb2RlQ29tcG9uZW50LFxuICBBdGVUb2NOb2RlT3B0aW9ucyxcbiAgZ2V0QXRlVG9jTm9kZUV4dGVuc2lvbixcbn0gZnJvbSBcIi4vbGliL2NvbXBvbmVudHMvdGFibGUtb2YtY29udGVudHMvYXRlLXRvYy1ub2RlLmNvbXBvbmVudFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbGliL2F0ZS1lZGl0b3IucHJvdmlkZXJcIjtcblxuLy8gSWNvbnNcbmV4cG9ydCB7IEF0ZUljb25Db21wb25lbnQgfSBmcm9tIFwiLi9saWIvY29tcG9uZW50cy91aS9hdGUtaWNvbi5jb21wb25lbnRcIjtcbmV4cG9ydCB7XG4gIEFURV9ERUZBVUxUX0lDT05TLFxuICBBVEVfTUFURVJJQUxfU1lNQk9MU19WSUVXQk9YLFxuICB0eXBlIEF0ZUljb25OYW1lLFxufSBmcm9tIFwiLi9saWIvaWNvbnMvYXRlLWRlZmF1bHQtaWNvbnNcIjtcbmV4cG9ydCB7IEFURV9TVFJPS0VfSUNPTlMgfSBmcm9tIFwiLi9saWIvaWNvbnMvYXRlLXN0cm9rZS1pY29uc1wiO1xuXG4vLyBEaXJlY3RpdmVzXG5leHBvcnQgKiBmcm9tIFwiLi9saWIvZGlyZWN0aXZlcy9hdGUtbm9vcC12YWx1ZS1hY2Nlc3Nvci5kaXJlY3RpdmVcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9kaXJlY3RpdmVzL2F0ZS10b29sdGlwLmRpcmVjdGl2ZVwiO1xuXG4vLyBTZXJ2aWNlc1xuZXhwb3J0ICogZnJvbSBcIi4vbGliL3NlcnZpY2VzL2F0ZS1pMThuLnNlcnZpY2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9zZXJ2aWNlcy9hdGUtZWRpdG9yLWNvbW1hbmRzLnNlcnZpY2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9zZXJ2aWNlcy9hdGUtaW1hZ2Uuc2VydmljZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbGliL3NlcnZpY2VzL2F0ZS1jb2xvci1waWNrZXIuc2VydmljZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbGliL3NlcnZpY2VzL2F0ZS1saW5rLnNlcnZpY2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9zZXJ2aWNlcy9hdGUtZXhwb3J0LnNlcnZpY2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9zZXJ2aWNlcy9hdGUtZWRpdG9yLXJlZ2lzdHJ5LnNlcnZpY2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9zZXJ2aWNlcy9hdGUtaWNvbi1yZWdpc3RyeS5zZXJ2aWNlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9saWIvbW9kZWxzL2F0ZS1lZGl0b3ItcmVmXCI7XG5cbi8vIFN0YXRlICYgQ2FsY3VsYXRvcnMgKEVzc2VudGlhbCBmb3IgY3VzdG9tIHBsdWdpbnMpXG5leHBvcnQgKiBmcm9tIFwiLi9saWIvbW9kZWxzL2F0ZS1lZGl0b3Itc3RhdGUubW9kZWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9leHRlbnNpb25zL2NhbGN1bGF0b3JzL2F0ZS1kaXNjb3ZlcnkuY2FsY3VsYXRvclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbGliL2V4dGVuc2lvbnMvY2FsY3VsYXRvcnMvYXRlLWltYWdlLmNhbGN1bGF0b3JcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9leHRlbnNpb25zL2NhbGN1bGF0b3JzL2F0ZS1tYXJrcy5jYWxjdWxhdG9yXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9saWIvZXh0ZW5zaW9ucy9jYWxjdWxhdG9ycy9hdGUtc2VsZWN0aW9uLmNhbGN1bGF0b3JcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9leHRlbnNpb25zL2NhbGN1bGF0b3JzL2F0ZS1zdHJ1Y3R1cmUuY2FsY3VsYXRvclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbGliL2V4dGVuc2lvbnMvY2FsY3VsYXRvcnMvYXRlLXRhYmxlLmNhbGN1bGF0b3JcIjtcblxuLy8gRXh0ZW5zaW9uc1xuZXhwb3J0IHtcbiAgQXRlUGFzdGVkSW1hZ2UsXG4gIGNsYXNzaWZ5UGFzdGVkSW1hZ2VTcmMsXG4gIGRhdGFVcmlUb0ZpbGUsXG4gIHNhbml0aXplUGFzdGVkSW1hZ2VzLFxuICB0eXBlIEF0ZVBhc3RlZEltYWdlT3B0aW9ucyxcbiAgdHlwZSBBdGVQYXN0ZWRJbWFnZVNvdXJjZSxcbn0gZnJvbSBcIi4vbGliL2V4dGVuc2lvbnMvYXRlLXBhc3RlZC1pbWFnZS5leHRlbnNpb25cIjtcbmV4cG9ydCB7XG4gIEF0ZUxpbmtTaG9ydGN1dCxcbiAgaXNMaW5rU2hvcnRjdXQsXG4gIHR5cGUgQXRlTGlua1Nob3J0Y3V0T3B0aW9ucyxcbn0gZnJvbSBcIi4vbGliL2V4dGVuc2lvbnMvYXRlLWxpbmstc2hvcnRjdXQuZXh0ZW5zaW9uXCI7XG5leHBvcnQge1xuICBBdGVCbG9ja1Nob3J0Y3V0cyxcbiAgdHlwZSBBdGVCbG9ja1Nob3J0Y3V0c09wdGlvbnMsXG59IGZyb20gXCIuL2xpYi9leHRlbnNpb25zL2F0ZS1ibG9jay1zaG9ydGN1dHMuZXh0ZW5zaW9uXCI7XG5cbi8vIFR5cGVzIGFuZCBpbnRlcmZhY2VzIGZvciBjb25maWd1cmF0aW9uXG5leHBvcnQgKiBmcm9tIFwiLi9saWIvbW9kZWxzL2F0ZS10b29sYmFyLm1vZGVsXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9saWIvbW9kZWxzL2F0ZS1pbWFnZS5tb2RlbFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbGliL21vZGVscy9hdGUtYnViYmxlLW1lbnUubW9kZWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9tb2RlbHMvYXRlLWVkaXRvci1jb25maWcubW9kZWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9tb2RlbHMvYXRlLXNsYXNoLWNvbW1hbmQubW9kZWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9tb2RlbHMvYXRlLXRvYy5tb2RlbFwiO1xuXG4vLyBEZWZhdWx0IGNvbmZpZ3VyYXRpb25zXG5leHBvcnQgKiBmcm9tIFwiLi9saWIvY29uZmlnL2F0ZS1lZGl0b3IuY29uZmlnXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9saWIvY29uZmlnL2F0ZS1nbG9iYWwtY29uZmlnLnRva2VuXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9saWIvY29uZmlnL2F0ZS10b2MuY29uZmlnXCI7XG5cbi8vIFV0aWxpdHkgZnVuY3Rpb25zIGZvciBzbGFzaCBjb21tYW5kc1xuZXhwb3J0ICogZnJvbSBcIi4vbGliL2NvbmZpZy9hdGUtc2xhc2gtY29tbWFuZHMuY29uZmlnXCI7XG5cbi8vIFRyYW5zbGF0aW9uc1xuZXhwb3J0IHR5cGUgeyBTdXBwb3J0ZWRMb2NhbGUgfSBmcm9tIFwiLi9saWIvaTE4bi9hdGVUcmFuc2xhdGlvbnNNb2RlbFwiO1xuXG4vLyBBbmd1bGFyIE5vZGVWaWV3IEludGVncmF0aW9uXG5leHBvcnQgeyBBdGVBbmd1bGFyTm9kZVZpZXcgfSBmcm9tIFwiLi9saWIvbm9kZS12aWV3L2F0ZS1hbmd1bGFyLW5vZGUtdmlld1wiO1xuZXhwb3J0IHsgQXRlTm9kZVZpZXdSZW5kZXJlciB9IGZyb20gXCIuL2xpYi9ub2RlLXZpZXcvYXRlLW5vZGUtdmlldy5yZW5kZXJlclwiO1xuZXhwb3J0IHsgY3JlYXRlQW5ndWxhckNvbXBvbmVudEV4dGVuc2lvbiB9IGZyb20gXCIuL2xpYi9ub2RlLXZpZXcvYXRlLW5vZGUtdmlldy5mYWN0b3J5XCI7XG5leHBvcnQgeyByZWdpc3RlckFuZ3VsYXJDb21wb25lbnQgfSBmcm9tIFwiLi9saWIvbm9kZS12aWV3L2F0ZS1yZWdpc3Rlci1hbmd1bGFyLWNvbXBvbmVudFwiO1xuXG4vLyBOb2RlIFZpZXcgVHlwZXMgLSBBdGVBbmd1bGFyTm9kZSBpcyB0aGUgcHJpbWFyeSBwdWJsaWMgdHlwZVxuZXhwb3J0IHR5cGUgeyBBdGVBbmd1bGFyTm9kZSB9IGZyb20gXCIuL2xpYi9tb2RlbHMvYXRlLWVkaXRvci1jb25maWcubW9kZWxcIjtcbi8vIEFkdmFuY2VkOiBMb3ctbGV2ZWwgb3B0aW9ucyBmb3IgZnVsbCBjb250cm9sIG92ZXIgbm9kZSByZWdpc3RyYXRpb25cbmV4cG9ydCB0eXBlIHtcbiAgUmVnaXN0ZXJBbmd1bGFyQ29tcG9uZW50T3B0aW9ucyxcbiAgQXRlQ29tcG9uZW50UmVuZGVyT3B0aW9ucyxcbn0gZnJvbSBcIi4vbGliL25vZGUtdmlldy9hdGUtbm9kZS12aWV3Lm1vZGVsc1wiO1xuIl19