@payloadcms/richtext-lexical 0.1.0-beta.0 → 0.1.0-beta.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.
Files changed (71) hide show
  1. package/dist/field/features/Blocks/afterReadPromise.d.ts +5 -0
  2. package/dist/field/features/Blocks/afterReadPromise.d.ts.map +1 -0
  3. package/dist/field/features/Blocks/afterReadPromise.js +52 -0
  4. package/dist/field/features/Blocks/component/BlockContent.d.ts +14 -0
  5. package/dist/field/features/Blocks/component/BlockContent.d.ts.map +1 -0
  6. package/dist/field/features/Blocks/component/BlockContent.js +163 -0
  7. package/dist/field/features/Blocks/component/index.d.ts.map +1 -1
  8. package/dist/field/features/Blocks/component/index.js +21 -104
  9. package/dist/field/features/Blocks/component/index.scss +148 -0
  10. package/dist/field/features/Blocks/drawer/index.d.ts.map +1 -1
  11. package/dist/field/features/Blocks/drawer/index.js +9 -7
  12. package/dist/field/features/Blocks/drawer/index.scss +1 -0
  13. package/dist/field/features/Blocks/index.d.ts.map +1 -1
  14. package/dist/field/features/Blocks/index.js +36 -18
  15. package/dist/field/features/Blocks/index.scss +1 -0
  16. package/dist/field/features/Blocks/nodes/BlocksNode.d.ts +5 -4
  17. package/dist/field/features/Blocks/nodes/BlocksNode.d.ts.map +1 -1
  18. package/dist/field/features/Blocks/nodes/BlocksNode.js +1 -1
  19. package/dist/field/features/Blocks/plugin/index.js +3 -3
  20. package/dist/field/features/Link/drawer/index.scss +50 -0
  21. package/dist/field/features/Link/index.scss +1 -0
  22. package/dist/field/features/Link/plugins/floatingLinkEditor/LinkEditor/index.d.ts.map +1 -1
  23. package/dist/field/features/Link/plugins/floatingLinkEditor/LinkEditor/index.js +9 -4
  24. package/dist/field/features/Link/plugins/floatingLinkEditor/index.scss +79 -0
  25. package/dist/field/features/Relationship/drawer/index.scss +1 -0
  26. package/dist/field/features/Relationship/index.scss +1 -0
  27. package/dist/field/features/Relationship/nodes/components/RelationshipComponent.d.ts.map +1 -1
  28. package/dist/field/features/Relationship/nodes/components/RelationshipComponent.js +2 -1
  29. package/dist/field/features/Relationship/nodes/components/index.scss +97 -0
  30. package/dist/field/features/Upload/component/index.scss +152 -0
  31. package/dist/field/features/Upload/drawer/index.scss +1 -0
  32. package/dist/field/features/Upload/index.scss +1 -0
  33. package/dist/field/features/Upload/nodes/UploadNode.d.ts.map +1 -1
  34. package/dist/field/features/Upload/nodes/UploadNode.js +1 -1
  35. package/dist/field/features/align/index.scss +4 -0
  36. package/dist/field/features/common/floatingSelectToolbarFeaturesButtonsSection/index.scss +4 -0
  37. package/dist/field/features/common/floatingSelectToolbarTextDropdownSection/index.scss +4 -0
  38. package/dist/field/features/debug/TreeView/index.scss +78 -0
  39. package/dist/field/features/format/common/index.scss +4 -0
  40. package/dist/field/features/indent/index.scss +4 -0
  41. package/dist/field/index.scss +1 -0
  42. package/dist/field/lexical/LexicalEditor.scss +34 -0
  43. package/dist/field/lexical/plugins/FloatingSelectToolbar/ToolbarButton/index.scss +39 -0
  44. package/dist/field/lexical/plugins/FloatingSelectToolbar/ToolbarDropdown/index.scss +100 -0
  45. package/dist/field/lexical/plugins/FloatingSelectToolbar/index.scss +57 -0
  46. package/dist/field/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.d.ts +7 -0
  47. package/dist/field/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.d.ts.map +1 -1
  48. package/dist/field/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.js +8 -3
  49. package/dist/field/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.d.ts +2 -2
  50. package/dist/field/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.d.ts.map +1 -1
  51. package/dist/field/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.js +19 -11
  52. package/dist/field/lexical/plugins/SlashMenu/index.d.ts.map +1 -1
  53. package/dist/field/lexical/plugins/SlashMenu/index.js +14 -2
  54. package/dist/field/lexical/plugins/SlashMenu/index.scss +56 -0
  55. package/dist/field/lexical/plugins/handles/AddBlockHandlePlugin/index.js +4 -3
  56. package/dist/field/lexical/plugins/handles/AddBlockHandlePlugin/index.scss +35 -0
  57. package/dist/field/lexical/plugins/handles/DraggableBlockPlugin/index.scss +50 -0
  58. package/dist/field/lexical/theme/EditorTheme.scss +509 -0
  59. package/dist/field/lexical/ui/ContentEditable.scss +21 -0
  60. package/dist/field/lexical/ui/icons/Add/index.svg +4 -0
  61. package/dist/field/lexical/ui/icons/Caret/index.svg +3 -0
  62. package/dist/field/lexical/ui/icons/DraggableBlock/index.svg +9 -0
  63. package/dist/field/lexical/ui/icons/Edit/index.svg +10 -0
  64. package/dist/field/lexical/ui/icons/Remove/index.svg +4 -0
  65. package/dist/index.d.ts +19 -5
  66. package/dist/index.d.ts.map +1 -1
  67. package/dist/index.js +38 -23
  68. package/dist/populate/recurseNestedFields.d.ts.map +1 -1
  69. package/dist/populate/recurseNestedFields.js +3 -1
  70. package/package.json +6 -4
  71. package/src/index.ts +21 -5
@@ -0,0 +1,57 @@
1
+ @import 'payload/scss';
2
+
3
+ html[data-theme='light'] {
4
+ .floating-select-toolbar-popup {
5
+ @include shadow-m;
6
+ }
7
+ }
8
+
9
+ .floating-select-toolbar-popup {
10
+ display: flex;
11
+ align-items: center;
12
+ background: var(--color-base-0);
13
+ padding: 0px 3.72px 0px 6.25px;
14
+ vertical-align: middle;
15
+ position: absolute;
16
+ top: 0;
17
+ left: 0;
18
+ z-index: 10;
19
+ opacity: 0;
20
+ border-radius: 6.25px;
21
+ transition: opacity 0.2s;
22
+ height: 37.5px;
23
+ will-change: transform;
24
+
25
+ .caret {
26
+ z-index: 93;
27
+ position: absolute;
28
+ top: calc(100% - 16px);
29
+ border: 12px solid transparent;
30
+ pointer-events: none;
31
+ border-top-color: var(--color-base-0);
32
+ }
33
+
34
+ &__section {
35
+ display: flex;
36
+ align-items: center;
37
+
38
+ .icon {
39
+ min-width: 20px;
40
+ height: 20px;
41
+ color: var(--color-base-600);
42
+ }
43
+
44
+ .divider {
45
+ width: 1px;
46
+ height: 15px;
47
+ background-color: var(--color-base-100);
48
+ margin: 0 6.25px;
49
+ }
50
+ }
51
+
52
+ @media (max-width: 1024px) {
53
+ button.insert-comment {
54
+ display: none;
55
+ }
56
+ }
57
+ }
@@ -1,3 +1,4 @@
1
+ import type { i18n } from 'i18next';
1
2
  import type { LexicalCommand, LexicalEditor, TextNode } from 'lexical';
2
3
  import type { MutableRefObject, ReactPortal } from 'react';
3
4
  export type MenuTextMatch = {
@@ -16,6 +17,9 @@ export declare class SlashMenuGroup {
16
17
  }
17
18
  export declare class SlashMenuOption {
18
19
  Icon: React.FC;
20
+ displayName?: ({ i18n }: {
21
+ i18n: i18n;
22
+ }) => string;
19
23
  key: string;
20
24
  keyboardShortcut?: string;
21
25
  keywords: Array<string>;
@@ -27,6 +31,9 @@ export declare class SlashMenuOption {
27
31
  title: string;
28
32
  constructor(title: string, options: {
29
33
  Icon: React.FC;
34
+ displayName?: ({ i18n }: {
35
+ i18n: i18n;
36
+ }) => string;
30
37
  keyboardShortcut?: string;
31
38
  keywords?: Array<string>;
32
39
  onSelect: ({ editor, queryString }: {
@@ -1 +1 @@
1
- {"version":3,"file":"LexicalMenu.d.ts","sourceRoot":"","sources":["../../../../../../src/field/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"LexicalMenu.d.ts","sourceRoot":"","sources":["../../../../../../src/field/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.tsx"],"names":[],"mappings":"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"}
@@ -45,6 +45,7 @@ class SlashMenuGroup {
45
45
  }
46
46
  class SlashMenuOption {
47
47
  Icon;
48
+ displayName;
48
49
  // Icon for display
49
50
  key;
50
51
  // TBD
@@ -63,6 +64,7 @@ class SlashMenuOption {
63
64
  };
64
65
  this.setRefElement = this.setRefElement.bind(this);
65
66
  this.title = title;
67
+ this.displayName = options.displayName;
66
68
  this.keywords = options.keywords || [];
67
69
  this.Icon = options.Icon;
68
70
  this.keyboardShortcut = options.keyboardShortcut;
@@ -397,8 +399,11 @@ function useMenuAnchorRef(resolution, setResolution, className) {
397
399
  if (left + menuWidth > rootElementRect.right) {
398
400
  containerDiv.style.left = `${rootElementRect.right - menuWidth + window.scrollX}px`;
399
401
  }
400
- const margin = 10;
401
- if ((top + menuHeight > window.innerHeight || top + menuHeight > rootElementRect.bottom) && top - rootElementRect.top > menuHeight) {
402
+ const wouldGoOffTopOfScreen = top < menuHeight;
403
+ const wouldGoOffBottomOfContainer = top + menuHeight > rootElementRect.bottom;
404
+ // Position slash menu above the cursor instead of below (default) if it would otherwise go off the bottom of the screen.
405
+ if ((top + menuHeight > window.innerHeight || wouldGoOffBottomOfContainer && !wouldGoOffTopOfScreen) && top - rootElementRect.top > menuHeight) {
406
+ const margin = 24;
402
407
  containerDiv.style.top = `${top + VERTICAL_OFFSET - menuHeight + window.scrollY - (height + margin)}px`;
403
408
  }
404
409
  }
@@ -454,4 +459,4 @@ function useMenuAnchorRef(resolution, setResolution, className) {
454
459
  return anchorElementRef;
455
460
  }
456
461
 
457
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9maWVsZC9sZXhpY2FsL3BsdWdpbnMvU2xhc2hNZW51L0xleGljYWxUeXBlYWhlYWRNZW51UGx1Z2luL0xleGljYWxNZW51LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IExleGljYWxDb21tYW5kLCBMZXhpY2FsRWRpdG9yLCBUZXh0Tm9kZSB9IGZyb20gJ2xleGljYWwnXG5pbXBvcnQgdHlwZSB7IE11dGFibGVSZWZPYmplY3QsIFJlYWN0UG9ydGFsIH0gZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IHVzZUxleGljYWxDb21wb3NlckNvbnRleHQgfSBmcm9tICdAbGV4aWNhbC9yZWFjdC9MZXhpY2FsQ29tcG9zZXJDb250ZXh0J1xuaW1wb3J0IHsgbWVyZ2VSZWdpc3RlciB9IGZyb20gJ0BsZXhpY2FsL3V0aWxzJ1xuaW1wb3J0IHtcbiAgJGdldFNlbGVjdGlvbixcbiAgJGlzUmFuZ2VTZWxlY3Rpb24sXG4gIENPTU1BTkRfUFJJT1JJVFlfTE9XLFxuICBLRVlfQVJST1dfRE9XTl9DT01NQU5ELFxuICBLRVlfQVJST1dfVVBfQ09NTUFORCxcbiAgS0VZX0VOVEVSX0NPTU1BTkQsXG4gIEtFWV9FU0NBUEVfQ09NTUFORCxcbiAgS0VZX1RBQl9DT01NQU5ELFxuICBjcmVhdGVDb21tYW5kLFxufSBmcm9tICdsZXhpY2FsJ1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTGF5b3V0RWZmZWN0LCB1c2VNZW1vLCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5cbmV4cG9ydCB0eXBlIE1lbnVUZXh0TWF0Y2ggPSB7XG4gIGxlYWRPZmZzZXQ6IG51bWJlclxuICBtYXRjaGluZ1N0cmluZzogc3RyaW5nXG4gIHJlcGxhY2VhYmxlU3RyaW5nOiBzdHJpbmdcbn1cblxuZXhwb3J0IHR5cGUgTWVudVJlc29sdXRpb24gPSB7XG4gIGdldFJlY3Q6ICgpID0+IERPTVJlY3RcbiAgbWF0Y2g/OiBNZW51VGV4dE1hdGNoXG59XG5cbmV4cG9ydCBjb25zdCBQVU5DVFVBVElPTiA9ICdcXFxcLixcXFxcK1xcXFwqXFxcXD9cXFxcJFxcXFxAXFxcXHwje31cXFxcKFxcXFwpXFxcXF5cXFxcLVxcXFxbXFxcXF1cXFxcXFxcXC8hJVxcJ1wifj08Pl86OydcblxuZXhwb3J0IGNsYXNzIFNsYXNoTWVudUdyb3VwIHtcbiAgb3B0aW9uczogQXJyYXk8U2xhc2hNZW51T3B0aW9uPlxuICB0aXRsZTogc3RyaW5nXG59XG5cbmV4cG9ydCBjbGFzcyBTbGFzaE1lbnVPcHRpb24ge1xuICBJY29uOiBSZWFjdC5GQ1xuXG4gIC8vIEljb24gZm9yIGRpc3BsYXlcbiAga2V5OiBzdHJpbmdcbiAgLy8gVEJEXG4gIGtleWJvYXJkU2hvcnRjdXQ/OiBzdHJpbmdcbiAgLy8gRm9yIGV4dHJhIHNlYXJjaGluZy5cbiAga2V5d29yZHM6IEFycmF5PHN0cmluZz5cbiAgLy8gV2hhdCBoYXBwZW5zIHdoZW4geW91IHNlbGVjdCB0aGlzIG9wdGlvbj9cbiAgb25TZWxlY3Q6ICh7IGVkaXRvciwgcXVlcnlTdHJpbmcgfTogeyBlZGl0b3I6IExleGljYWxFZGl0b3I7IHF1ZXJ5U3RyaW5nOiBzdHJpbmcgfSkgPT4gdm9pZFxuICByZWY/OiBNdXRhYmxlUmVmT2JqZWN0PEhUTUxFbGVtZW50IHwgbnVsbD5cblxuICAvLyBXaGF0IHNob3dzIHVwIGluIHRoZSBlZGl0b3JcbiAgdGl0bGU6IHN0cmluZ1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHRpdGxlOiBzdHJpbmcsXG4gICAgb3B0aW9uczoge1xuICAgICAgSWNvbjogUmVhY3QuRkNcbiAgICAgIGtleWJvYXJkU2hvcnRjdXQ/OiBzdHJpbmdcbiAgICAgIGtleXdvcmRzPzogQXJyYXk8c3RyaW5nPlxuICAgICAgb25TZWxlY3Q6ICh7IGVkaXRvciwgcXVlcnlTdHJpbmcgfTogeyBlZGl0b3I6IExleGljYWxFZGl0b3I7IHF1ZXJ5U3RyaW5nOiBzdHJpbmcgfSkgPT4gdm9pZFxuICAgIH0sXG4gICkge1xuICAgIHRoaXMua2V5ID0gdGl0bGVcbiAgICB0aGlzLnJlZiA9IHsgY3VycmVudDogbnVsbCB9XG4gICAgdGhpcy5zZXRSZWZFbGVtZW50ID0gdGhpcy5zZXRSZWZFbGVtZW50LmJpbmQodGhpcylcblxuICAgIHRoaXMudGl0bGUgPSB0aXRsZVxuICAgIHRoaXMua2V5d29yZHMgPSBvcHRpb25zLmtleXdvcmRzIHx8IFtdXG4gICAgdGhpcy5JY29uID0gb3B0aW9ucy5JY29uXG4gICAgdGhpcy5rZXlib2FyZFNob3J0Y3V0ID0gb3B0aW9ucy5rZXlib2FyZFNob3J0Y3V0XG4gICAgdGhpcy5vblNlbGVjdCA9IG9wdGlvbnMub25TZWxlY3QuYmluZCh0aGlzKVxuICB9XG5cbiAgc2V0UmVmRWxlbWVudChlbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGwpIHtcbiAgICB0aGlzLnJlZiA9IHsgY3VycmVudDogZWxlbWVudCB9XG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgTWVudVJlbmRlckZuID0gKFxuICBhbmNob3JFbGVtZW50UmVmOiBNdXRhYmxlUmVmT2JqZWN0PEhUTUxFbGVtZW50IHwgbnVsbD4sXG4gIGl0ZW1Qcm9wczoge1xuICAgIGdyb3Vwc1dpdGhPcHRpb25zOiBBcnJheTxTbGFzaE1lbnVHcm91cD5cbiAgICBzZWxlY3RPcHRpb25BbmRDbGVhblVwOiAoc2VsZWN0ZWRPcHRpb246IFNsYXNoTWVudU9wdGlvbikgPT4gdm9pZFxuICAgIHNlbGVjdGVkT3B0aW9uS2V5OiBudWxsIHwgc3RyaW5nXG4gICAgc2V0U2VsZWN0ZWRPcHRpb25LZXk6IChvcHRpb25LZXk6IHN0cmluZykgPT4gdm9pZFxuICB9LFxuICBtYXRjaGluZ1N0cmluZzogbnVsbCB8IHN0cmluZyxcbikgPT4gSlNYLkVsZW1lbnQgfCBSZWFjdFBvcnRhbCB8IG51bGxcblxuY29uc3Qgc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCA9ICh0YXJnZXQ6IEhUTUxFbGVtZW50KSA9PiB7XG4gIGNvbnN0IHR5cGVhaGVhZENvbnRhaW5lck5vZGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndHlwZWFoZWFkLW1lbnUnKVxuICBpZiAoIXR5cGVhaGVhZENvbnRhaW5lck5vZGUpIHJldHVyblxuXG4gIGNvbnN0IHR5cGVhaGVhZFJlY3QgPSB0eXBlYWhlYWRDb250YWluZXJOb2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG5cbiAgaWYgKHR5cGVhaGVhZFJlY3QudG9wICsgdHlwZWFoZWFkUmVjdC5oZWlnaHQgPiB3aW5kb3cuaW5uZXJIZWlnaHQpIHtcbiAgICB0eXBlYWhlYWRDb250YWluZXJOb2RlLnNjcm9sbEludG9WaWV3KHtcbiAgICAgIGJsb2NrOiAnY2VudGVyJyxcbiAgICB9KVxuICB9XG5cbiAgaWYgKHR5cGVhaGVhZFJlY3QudG9wIDwgMCkge1xuICAgIHR5cGVhaGVhZENvbnRhaW5lck5vZGUuc2Nyb2xsSW50b1ZpZXcoe1xuICAgICAgYmxvY2s6ICdjZW50ZXInLFxuICAgIH0pXG4gIH1cblxuICB0YXJnZXQuc2Nyb2xsSW50b1ZpZXcoeyBibG9jazogJ25lYXJlc3QnIH0pXG59XG5cbi8qKlxuICogV2FsayBiYWNrd2FyZHMgYWxvbmcgdXNlciBpbnB1dCBhbmQgZm9yd2FyZCB0aHJvdWdoIGVudGl0eSB0aXRsZSB0byB0cnlcbiAqIGFuZCByZXBsYWNlIG1vcmUgb2YgdGhlIHVzZXIncyB0ZXh0IHdpdGggZW50aXR5LlxuICovXG5mdW5jdGlvbiBnZXRGdWxsTWF0Y2hPZmZzZXQoZG9jdW1lbnRUZXh0OiBzdHJpbmcsIGVudHJ5VGV4dDogc3RyaW5nLCBvZmZzZXQ6IG51bWJlcik6IG51bWJlciB7XG4gIGxldCB0cmlnZ2VyT2Zmc2V0ID0gb2Zmc2V0XG4gIGZvciAobGV0IGkgPSB0cmlnZ2VyT2Zmc2V0OyBpIDw9IGVudHJ5VGV4dC5sZW5ndGg7IGkrKykge1xuICAgIGlmIChkb2N1bWVudFRleHQuc3Vic3RyKC1pKSA9PT0gZW50cnlUZXh0LnN1YnN0cigwLCBpKSkge1xuICAgICAgdHJpZ2dlck9mZnNldCA9IGlcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRyaWdnZXJPZmZzZXRcbn1cblxuLyoqXG4gKiBTcGxpdCBMZXhpY2FsIFRleHROb2RlIGFuZCByZXR1cm4gYSBuZXcgVGV4dE5vZGUgb25seSBjb250YWluaW5nIG1hdGNoZWQgdGV4dC5cbiAqIENvbW1vbiB1c2UgY2FzZXMgaW5jbHVkZTogcmVtb3ZpbmcgdGhlIG5vZGUsIHJlcGxhY2luZyB3aXRoIGEgbmV3IG5vZGUuXG4gKi9cbmZ1bmN0aW9uICRzcGxpdE5vZGVDb250YWluaW5nUXVlcnkobWF0Y2g6IE1lbnVUZXh0TWF0Y2gpOiBUZXh0Tm9kZSB8IG51bGwge1xuICBjb25zdCBzZWxlY3Rpb24gPSAkZ2V0U2VsZWN0aW9uKClcbiAgaWYgKCEkaXNSYW5nZVNlbGVjdGlvbihzZWxlY3Rpb24pIHx8ICFzZWxlY3Rpb24uaXNDb2xsYXBzZWQoKSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgY29uc3QgYW5jaG9yID0gc2VsZWN0aW9uLmFuY2hvclxuICBpZiAoYW5jaG9yLnR5cGUgIT09ICd0ZXh0Jykge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgY29uc3QgYW5jaG9yTm9kZSA9IGFuY2hvci5nZXROb2RlKClcbiAgaWYgKCFhbmNob3JOb2RlLmlzU2ltcGxlVGV4dCgpKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuICBjb25zdCBzZWxlY3Rpb25PZmZzZXQgPSBhbmNob3Iub2Zmc2V0XG4gIGNvbnN0IHRleHRDb250ZW50ID0gYW5jaG9yTm9kZS5nZXRUZXh0Q29udGVudCgpLnNsaWNlKDAsIHNlbGVjdGlvbk9mZnNldClcbiAgY29uc3QgY2hhcmFjdGVyT2Zmc2V0ID0gbWF0Y2gucmVwbGFjZWFibGVTdHJpbmcubGVuZ3RoXG4gIGNvbnN0IHF1ZXJ5T2Zmc2V0ID0gZ2V0RnVsbE1hdGNoT2Zmc2V0KHRleHRDb250ZW50LCBtYXRjaC5tYXRjaGluZ1N0cmluZywgY2hhcmFjdGVyT2Zmc2V0KVxuICBjb25zdCBzdGFydE9mZnNldCA9IHNlbGVjdGlvbk9mZnNldCAtIHF1ZXJ5T2Zmc2V0XG4gIGlmIChzdGFydE9mZnNldCA8IDApIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG4gIGxldCBuZXdOb2RlXG4gIGlmIChzdGFydE9mZnNldCA9PT0gMCkge1xuICAgIDtbbmV3Tm9kZV0gPSBhbmNob3JOb2RlLnNwbGl0VGV4dChzZWxlY3Rpb25PZmZzZXQpXG4gIH0gZWxzZSB7XG4gICAgO1ssIG5ld05vZGVdID0gYW5jaG9yTm9kZS5zcGxpdFRleHQoc3RhcnRPZmZzZXQsIHNlbGVjdGlvbk9mZnNldClcbiAgfVxuXG4gIHJldHVybiBuZXdOb2RlXG59XG5cbi8vIEdvdCBmcm9tIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS80MjU0MzkwOC8yMDEzNTgwXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2Nyb2xsUGFyZW50KFxuICBlbGVtZW50OiBIVE1MRWxlbWVudCxcbiAgaW5jbHVkZUhpZGRlbjogYm9vbGVhbixcbik6IEhUTUxCb2R5RWxlbWVudCB8IEhUTUxFbGVtZW50IHtcbiAgbGV0IHN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KVxuICBjb25zdCBleGNsdWRlU3RhdGljUGFyZW50ID0gc3R5bGUucG9zaXRpb24gPT09ICdhYnNvbHV0ZSdcbiAgY29uc3Qgb3ZlcmZsb3dSZWdleCA9IGluY2x1ZGVIaWRkZW4gPyAvKGF1dG98c2Nyb2xsfGhpZGRlbikvIDogLyhhdXRvfHNjcm9sbCkvXG4gIGlmIChzdHlsZS5wb3NpdGlvbiA9PT0gJ2ZpeGVkJykge1xuICAgIHJldHVybiBkb2N1bWVudC5ib2R5XG4gIH1cbiAgZm9yIChsZXQgcGFyZW50OiBIVE1MRWxlbWVudCB8IG51bGwgPSBlbGVtZW50OyAocGFyZW50ID0gcGFyZW50LnBhcmVudEVsZW1lbnQpOyApIHtcbiAgICBzdHlsZSA9IGdldENvbXB1dGVkU3R5bGUocGFyZW50KVxuICAgIGlmIChleGNsdWRlU3RhdGljUGFyZW50ICYmIHN0eWxlLnBvc2l0aW9uID09PSAnc3RhdGljJykge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgaWYgKG92ZXJmbG93UmVnZXgudGVzdChzdHlsZS5vdmVyZmxvdyArIHN0eWxlLm92ZXJmbG93WSArIHN0eWxlLm92ZXJmbG93WCkpIHtcbiAgICAgIHJldHVybiBwYXJlbnRcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRvY3VtZW50LmJvZHlcbn1cblxuZnVuY3Rpb24gaXNUcmlnZ2VyVmlzaWJsZUluTmVhcmVzdFNjcm9sbENvbnRhaW5lcihcbiAgdGFyZ2V0RWxlbWVudDogSFRNTEVsZW1lbnQsXG4gIGNvbnRhaW5lckVsZW1lbnQ6IEhUTUxFbGVtZW50LFxuKTogYm9vbGVhbiB7XG4gIGNvbnN0IHRSZWN0ID0gdGFyZ2V0RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICBjb25zdCBjUmVjdCA9IGNvbnRhaW5lckVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgcmV0dXJuIHRSZWN0LnRvcCA+IGNSZWN0LnRvcCAmJiB0UmVjdC50b3AgPCBjUmVjdC5ib3R0b21cbn1cblxuLy8gUmVwb3NpdGlvbiB0aGUgbWVudSBvbiBzY3JvbGwsIHdpbmRvdyByZXNpemUsIGFuZCBlbGVtZW50IHJlc2l6ZS5cbmV4cG9ydCBmdW5jdGlvbiB1c2VEeW5hbWljUG9zaXRpb25pbmcoXG4gIHJlc29sdXRpb246IE1lbnVSZXNvbHV0aW9uIHwgbnVsbCxcbiAgdGFyZ2V0RWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsLFxuICBvblJlcG9zaXRpb246ICgpID0+IHZvaWQsXG4gIG9uVmlzaWJpbGl0eUNoYW5nZT86IChpc0luVmlldzogYm9vbGVhbikgPT4gdm9pZCxcbikge1xuICBjb25zdCBbZWRpdG9yXSA9IHVzZUxleGljYWxDb21wb3NlckNvbnRleHQoKVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh0YXJnZXRFbGVtZW50ICE9IG51bGwgJiYgcmVzb2x1dGlvbiAhPSBudWxsKSB7XG4gICAgICBjb25zdCByb290RWxlbWVudCA9IGVkaXRvci5nZXRSb290RWxlbWVudCgpXG4gICAgICBjb25zdCByb290U2Nyb2xsUGFyZW50ID1cbiAgICAgICAgcm9vdEVsZW1lbnQgIT0gbnVsbCA/IGdldFNjcm9sbFBhcmVudChyb290RWxlbWVudCwgZmFsc2UpIDogZG9jdW1lbnQuYm9keVxuICAgICAgbGV0IHRpY2tpbmcgPSBmYWxzZVxuICAgICAgbGV0IHByZXZpb3VzSXNJblZpZXcgPSBpc1RyaWdnZXJWaXNpYmxlSW5OZWFyZXN0U2Nyb2xsQ29udGFpbmVyKFxuICAgICAgICB0YXJnZXRFbGVtZW50LFxuICAgICAgICByb290U2Nyb2xsUGFyZW50LFxuICAgICAgKVxuICAgICAgY29uc3QgaGFuZGxlU2Nyb2xsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRpY2tpbmcpIHtcbiAgICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIG9uUmVwb3NpdGlvbigpXG4gICAgICAgICAgICB0aWNraW5nID0gZmFsc2VcbiAgICAgICAgICB9KVxuICAgICAgICAgIHRpY2tpbmcgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXNJblZpZXcgPSBpc1RyaWdnZXJWaXNpYmxlSW5OZWFyZXN0U2Nyb2xsQ29udGFpbmVyKHRhcmdldEVsZW1lbnQsIHJvb3RTY3JvbGxQYXJlbnQpXG4gICAgICAgIGlmIChpc0luVmlldyAhPT0gcHJldmlvdXNJc0luVmlldykge1xuICAgICAgICAgIHByZXZpb3VzSXNJblZpZXcgPSBpc0luVmlld1xuICAgICAgICAgIGlmIChvblZpc2liaWxpdHlDaGFuZ2UgIT0gbnVsbCkge1xuICAgICAgICAgICAgb25WaXNpYmlsaXR5Q2hhbmdlKGlzSW5WaWV3KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgcmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIob25SZXBvc2l0aW9uKVxuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIG9uUmVwb3NpdGlvbilcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGhhbmRsZVNjcm9sbCwge1xuICAgICAgICBjYXB0dXJlOiB0cnVlLFxuICAgICAgICBwYXNzaXZlOiB0cnVlLFxuICAgICAgfSlcbiAgICAgIHJlc2l6ZU9ic2VydmVyLm9ic2VydmUodGFyZ2V0RWxlbWVudClcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIHJlc2l6ZU9ic2VydmVyLnVub2JzZXJ2ZSh0YXJnZXRFbGVtZW50KVxuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgb25SZXBvc2l0aW9uKVxuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBoYW5kbGVTY3JvbGwsIHRydWUpXG4gICAgICB9XG4gICAgfVxuICB9LCBbdGFyZ2V0RWxlbWVudCwgZWRpdG9yLCBvblZpc2liaWxpdHlDaGFuZ2UsIG9uUmVwb3NpdGlvbiwgcmVzb2x1dGlvbl0pXG59XG5cbmV4cG9ydCBjb25zdCBTQ1JPTExfVFlQRUFIRUFEX09QVElPTl9JTlRPX1ZJRVdfQ09NTUFORDogTGV4aWNhbENvbW1hbmQ8e1xuICBpbmRleDogbnVtYmVyXG4gIG9wdGlvbjogU2xhc2hNZW51T3B0aW9uXG59PiA9IGNyZWF0ZUNvbW1hbmQoJ1NDUk9MTF9UWVBFQUhFQURfT1BUSU9OX0lOVE9fVklFV19DT01NQU5EJylcblxuZXhwb3J0IGZ1bmN0aW9uIExleGljYWxNZW51KHtcbiAgYW5jaG9yRWxlbWVudFJlZixcbiAgY2xvc2UsXG4gIGVkaXRvcixcbiAgLy8gZ3JvdXBzV2l0aE9wdGlvbnMgZmlsdGVyaW5nIGlzIGFscmVhZHkgaGFuZGxlZCBpbiBTbGFzaE1lbnUvaW5kZXgudHN4LiBUaHVzLCBncm91cHNXaXRoT3B0aW9ucyBhbHdheXMgY29udGFpbnMgdGhlIG1hdGNoaW5nIG9wdGlvbnMuXG4gIGdyb3Vwc1dpdGhPcHRpb25zLFxuICBtZW51UmVuZGVyRm4sXG4gIG9uU2VsZWN0T3B0aW9uLFxuICByZXNvbHV0aW9uLFxuICBzaG91bGRTcGxpdE5vZGVXaXRoUXVlcnkgPSBmYWxzZSxcbn06IHtcbiAgYW5jaG9yRWxlbWVudFJlZjogTXV0YWJsZVJlZk9iamVjdDxIVE1MRWxlbWVudD5cbiAgY2xvc2U6ICgpID0+IHZvaWRcbiAgZWRpdG9yOiBMZXhpY2FsRWRpdG9yXG4gIGdyb3Vwc1dpdGhPcHRpb25zOiBBcnJheTxTbGFzaE1lbnVHcm91cD5cbiAgbWVudVJlbmRlckZuOiBNZW51UmVuZGVyRm5cbiAgb25TZWxlY3RPcHRpb246IChcbiAgICBvcHRpb246IFNsYXNoTWVudU9wdGlvbixcbiAgICB0ZXh0Tm9kZUNvbnRhaW5pbmdRdWVyeTogVGV4dE5vZGUgfCBudWxsLFxuICAgIGNsb3NlTWVudTogKCkgPT4gdm9pZCxcbiAgICBtYXRjaGluZ1N0cmluZzogc3RyaW5nLFxuICApID0+IHZvaWRcbiAgcmVzb2x1dGlvbjogTWVudVJlc29sdXRpb25cbiAgc2hvdWxkU3BsaXROb2RlV2l0aFF1ZXJ5PzogYm9vbGVhblxufSk6IEpTWC5FbGVtZW50IHwgbnVsbCB7XG4gIGNvbnN0IFtzZWxlY3RlZE9wdGlvbktleSwgc2V0U2VsZWN0ZWRPcHRpb25LZXldID0gdXNlU3RhdGU8bnVsbCB8IHN0cmluZz4obnVsbClcblxuICBjb25zdCBtYXRjaGluZ1N0cmluZyA9IChyZXNvbHV0aW9uLm1hdGNoICYmIHJlc29sdXRpb24ubWF0Y2gubWF0Y2hpbmdTdHJpbmcpIHx8ICcnXG5cbiAgY29uc3QgdXBkYXRlU2VsZWN0ZWRPcHRpb24gPSB1c2VDYWxsYmFjayhcbiAgICAob3B0aW9uOiBTbGFzaE1lbnVPcHRpb24pID0+IHtcbiAgICAgIGNvbnN0IHJvb3RFbGVtID0gZWRpdG9yLmdldFJvb3RFbGVtZW50KClcbiAgICAgIGlmIChyb290RWxlbSAhPT0gbnVsbCkge1xuICAgICAgICByb290RWxlbS5zZXRBdHRyaWJ1dGUoJ2FyaWEtYWN0aXZlZGVzY2VuZGFudCcsICd0eXBlYWhlYWQtaXRlbS0nICsgb3B0aW9uLmtleSlcbiAgICAgICAgc2V0U2VsZWN0ZWRPcHRpb25LZXkob3B0aW9uLmtleSlcbiAgICAgIH1cbiAgICB9LFxuICAgIFtlZGl0b3JdLFxuICApXG5cbiAgY29uc3Qgc2V0U2VsZWN0ZWRPcHRpb25LZXlUb0ZpcnN0TWF0Y2hpbmdPcHRpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgLy8gc2V0IHNlbGVjdGVkIG9wdGlvbiB0byB0aGUgZmlyc3Qgb2YgdGhlIG1hdGNoaW5nIG9uZXNcbiAgICBpZiAoZ3JvdXBzV2l0aE9wdGlvbnMgIT09IG51bGwgJiYgbWF0Y2hpbmdTdHJpbmcgIT0gbnVsbCkge1xuICAgICAgLy8gZ3JvdXBzV2l0aE9wdGlvbnMgZmlsdGVyaW5nIGlzIGFscmVhZHkgaGFuZGxlZCBpbiBTbGFzaE1lbnUvaW5kZXgudHN4LiBUaHVzLCBncm91cHNXaXRoT3B0aW9ucyBhbHdheXMgY29udGFpbnMgdGhlIG1hdGNoaW5nIG9wdGlvbnMuXG4gICAgICBjb25zdCBhbGxPcHRpb25zID0gZ3JvdXBzV2l0aE9wdGlvbnMuZmxhdE1hcCgoZ3JvdXApID0+IGdyb3VwLm9wdGlvbnMpXG5cbiAgICAgIGlmIChhbGxPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBmaXJzdE1hdGNoaW5nT3B0aW9uID0gYWxsT3B0aW9uc1swXVxuICAgICAgICB1cGRhdGVTZWxlY3RlZE9wdGlvbihmaXJzdE1hdGNoaW5nT3B0aW9uKVxuICAgICAgfVxuICAgIH1cbiAgfSwgW2dyb3Vwc1dpdGhPcHRpb25zLCB1cGRhdGVTZWxlY3RlZE9wdGlvbiwgbWF0Y2hpbmdTdHJpbmddKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0U2VsZWN0ZWRPcHRpb25LZXlUb0ZpcnN0TWF0Y2hpbmdPcHRpb24oKVxuICB9LCBbbWF0Y2hpbmdTdHJpbmcsIHNldFNlbGVjdGVkT3B0aW9uS2V5VG9GaXJzdE1hdGNoaW5nT3B0aW9uXSlcblxuICBjb25zdCBzZWxlY3RPcHRpb25BbmRDbGVhblVwID0gdXNlQ2FsbGJhY2soXG4gICAgKHNlbGVjdGVkT3B0aW9uOiBTbGFzaE1lbnVPcHRpb24pID0+IHtcbiAgICAgIGVkaXRvci51cGRhdGUoKCkgPT4ge1xuICAgICAgICBjb25zdCB0ZXh0Tm9kZUNvbnRhaW5pbmdRdWVyeSA9XG4gICAgICAgICAgcmVzb2x1dGlvbi5tYXRjaCAhPSBudWxsICYmIHNob3VsZFNwbGl0Tm9kZVdpdGhRdWVyeVxuICAgICAgICAgICAgPyAkc3BsaXROb2RlQ29udGFpbmluZ1F1ZXJ5KHJlc29sdXRpb24ubWF0Y2gpXG4gICAgICAgICAgICA6IG51bGxcblxuICAgICAgICBvblNlbGVjdE9wdGlvbihcbiAgICAgICAgICBzZWxlY3RlZE9wdGlvbixcbiAgICAgICAgICB0ZXh0Tm9kZUNvbnRhaW5pbmdRdWVyeSxcbiAgICAgICAgICBjbG9zZSxcbiAgICAgICAgICByZXNvbHV0aW9uLm1hdGNoID8gcmVzb2x1dGlvbi5tYXRjaC5tYXRjaGluZ1N0cmluZyA6ICcnLFxuICAgICAgICApXG4gICAgICB9KVxuICAgIH0sXG4gICAgW2VkaXRvciwgc2hvdWxkU3BsaXROb2RlV2l0aFF1ZXJ5LCByZXNvbHV0aW9uLm1hdGNoLCBvblNlbGVjdE9wdGlvbiwgY2xvc2VdLFxuICApXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY29uc3Qgcm9vdEVsZW0gPSBlZGl0b3IuZ2V0Um9vdEVsZW1lbnQoKVxuICAgICAgaWYgKHJvb3RFbGVtICE9PSBudWxsKSB7XG4gICAgICAgIHJvb3RFbGVtLnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1hY3RpdmVkZXNjZW5kYW50JylcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtlZGl0b3JdKVxuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGdyb3Vwc1dpdGhPcHRpb25zID09PSBudWxsKSB7XG4gICAgICBzZXRTZWxlY3RlZE9wdGlvbktleShudWxsKVxuICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWRPcHRpb25LZXkgPT09IG51bGwpIHtcbiAgICAgIHNldFNlbGVjdGVkT3B0aW9uS2V5VG9GaXJzdE1hdGNoaW5nT3B0aW9uKClcbiAgICB9XG4gIH0sIFtcbiAgICBncm91cHNXaXRoT3B0aW9ucyxcbiAgICBzZWxlY3RlZE9wdGlvbktleSxcbiAgICB1cGRhdGVTZWxlY3RlZE9wdGlvbixcbiAgICBzZXRTZWxlY3RlZE9wdGlvbktleVRvRmlyc3RNYXRjaGluZ09wdGlvbixcbiAgXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJldHVybiBtZXJnZVJlZ2lzdGVyKFxuICAgICAgZWRpdG9yLnJlZ2lzdGVyQ29tbWFuZChcbiAgICAgICAgU0NST0xMX1RZUEVBSEVBRF9PUFRJT05fSU5UT19WSUVXX0NPTU1BTkQsXG4gICAgICAgICh7IG9wdGlvbiB9KSA9PiB7XG4gICAgICAgICAgaWYgKG9wdGlvbi5yZWYgJiYgb3B0aW9uLnJlZi5jdXJyZW50ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHNjcm9sbEludG9WaWV3SWZOZWVkZWQob3B0aW9uLnJlZi5jdXJyZW50KVxuICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAgQ09NTUFORF9QUklPUklUWV9MT1csXG4gICAgICApLFxuICAgIClcbiAgfSwgW2VkaXRvciwgdXBkYXRlU2VsZWN0ZWRPcHRpb25dKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgcmV0dXJuIG1lcmdlUmVnaXN0ZXIoXG4gICAgICBlZGl0b3IucmVnaXN0ZXJDb21tYW5kPEtleWJvYXJkRXZlbnQ+KFxuICAgICAgICBLRVlfQVJST1dfRE9XTl9DT01NQU5ELFxuICAgICAgICAocGF5bG9hZCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGV2ZW50ID0gcGF5bG9hZFxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGdyb3Vwc1dpdGhPcHRpb25zICE9PSBudWxsICYmXG4gICAgICAgICAgICBncm91cHNXaXRoT3B0aW9ucy5sZW5ndGggJiZcbiAgICAgICAgICAgIHNlbGVjdGVkT3B0aW9uS2V5ICE9PSBudWxsXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCBhbGxPcHRpb25zID0gZ3JvdXBzV2l0aE9wdGlvbnMuZmxhdE1hcCgoZ3JvdXApID0+IGdyb3VwLm9wdGlvbnMpXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZEluZGV4ID0gYWxsT3B0aW9ucy5maW5kSW5kZXgoKG9wdGlvbikgPT4gb3B0aW9uLmtleSA9PT0gc2VsZWN0ZWRPcHRpb25LZXkpXG5cbiAgICAgICAgICAgIGNvbnN0IG5ld1NlbGVjdGVkSW5kZXggPSBzZWxlY3RlZEluZGV4ICE9PSBhbGxPcHRpb25zLmxlbmd0aCAtIDEgPyBzZWxlY3RlZEluZGV4ICsgMSA6IDBcblxuICAgICAgICAgICAgY29uc3QgbmV3U2VsZWN0ZWRPcHRpb24gPSBhbGxPcHRpb25zW25ld1NlbGVjdGVkSW5kZXhdXG5cbiAgICAgICAgICAgIHVwZGF0ZVNlbGVjdGVkT3B0aW9uKG5ld1NlbGVjdGVkT3B0aW9uKVxuICAgICAgICAgICAgaWYgKG5ld1NlbGVjdGVkT3B0aW9uLnJlZiAhPSBudWxsICYmIG5ld1NlbGVjdGVkT3B0aW9uLnJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgICAgIGVkaXRvci5kaXNwYXRjaENvbW1hbmQoU0NST0xMX1RZUEVBSEVBRF9PUFRJT05fSU5UT19WSUVXX0NPTU1BTkQsIHtcbiAgICAgICAgICAgICAgICBpbmRleDogbmV3U2VsZWN0ZWRJbmRleCxcbiAgICAgICAgICAgICAgICBvcHRpb246IG5ld1NlbGVjdGVkT3B0aW9uLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKClcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgQ09NTUFORF9QUklPUklUWV9MT1csXG4gICAgICApLFxuICAgICAgZWRpdG9yLnJlZ2lzdGVyQ29tbWFuZDxLZXlib2FyZEV2ZW50PihcbiAgICAgICAgS0VZX0FSUk9XX1VQX0NPTU1BTkQsXG4gICAgICAgIChwYXlsb2FkKSA9PiB7XG4gICAgICAgICAgY29uc3QgZXZlbnQgPSBwYXlsb2FkXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgZ3JvdXBzV2l0aE9wdGlvbnMgIT09IG51bGwgJiZcbiAgICAgICAgICAgIGdyb3Vwc1dpdGhPcHRpb25zLmxlbmd0aCAmJlxuICAgICAgICAgICAgc2VsZWN0ZWRPcHRpb25LZXkgIT09IG51bGxcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IGFsbE9wdGlvbnMgPSBncm91cHNXaXRoT3B0aW9ucy5mbGF0TWFwKChncm91cCkgPT4gZ3JvdXAub3B0aW9ucylcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkSW5kZXggPSBhbGxPcHRpb25zLmZpbmRJbmRleCgob3B0aW9uKSA9PiBvcHRpb24ua2V5ID09PSBzZWxlY3RlZE9wdGlvbktleSlcblxuICAgICAgICAgICAgY29uc3QgbmV3U2VsZWN0ZWRJbmRleCA9IHNlbGVjdGVkSW5kZXggIT09IDAgPyBzZWxlY3RlZEluZGV4IC0gMSA6IGFsbE9wdGlvbnMubGVuZ3RoIC0gMVxuXG4gICAgICAgICAgICBjb25zdCBuZXdTZWxlY3RlZE9wdGlvbiA9IGFsbE9wdGlvbnNbbmV3U2VsZWN0ZWRJbmRleF1cblxuICAgICAgICAgICAgdXBkYXRlU2VsZWN0ZWRPcHRpb24obmV3U2VsZWN0ZWRPcHRpb24pXG4gICAgICAgICAgICBpZiAobmV3U2VsZWN0ZWRPcHRpb24ucmVmICE9IG51bGwgJiYgbmV3U2VsZWN0ZWRPcHRpb24ucmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZChuZXdTZWxlY3RlZE9wdGlvbi5yZWYuY3VycmVudClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIENPTU1BTkRfUFJJT1JJVFlfTE9XLFxuICAgICAgKSxcbiAgICAgIGVkaXRvci5yZWdpc3RlckNvbW1hbmQ8S2V5Ym9hcmRFdmVudD4oXG4gICAgICAgIEtFWV9FU0NBUEVfQ09NTUFORCxcbiAgICAgICAgKHBheWxvYWQpID0+IHtcbiAgICAgICAgICBjb25zdCBldmVudCA9IHBheWxvYWRcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKClcbiAgICAgICAgICBjbG9zZSgpXG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgQ09NTUFORF9QUklPUklUWV9MT1csXG4gICAgICApLFxuICAgICAgZWRpdG9yLnJlZ2lzdGVyQ29tbWFuZDxLZXlib2FyZEV2ZW50PihcbiAgICAgICAgS0VZX1RBQl9DT01NQU5ELFxuICAgICAgICAocGF5bG9hZCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGV2ZW50ID0gcGF5bG9hZFxuXG4gICAgICAgICAgaWYgKGdyb3Vwc1dpdGhPcHRpb25zID09PSBudWxsIHx8IHNlbGVjdGVkT3B0aW9uS2V5ID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgYWxsT3B0aW9ucyA9IGdyb3Vwc1dpdGhPcHRpb25zLmZsYXRNYXAoKGdyb3VwKSA9PiBncm91cC5vcHRpb25zKVxuICAgICAgICAgIGNvbnN0IHNlbGVjdGVkT3B0aW9uID0gYWxsT3B0aW9ucy5maW5kKChvcHRpb24pID0+IG9wdGlvbi5rZXkgPT09IHNlbGVjdGVkT3B0aW9uS2V5KVxuICAgICAgICAgIGlmICghc2VsZWN0ZWRPcHRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKVxuICAgICAgICAgIHNlbGVjdE9wdGlvbkFuZENsZWFuVXAoc2VsZWN0ZWRPcHRpb24pXG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgQ09NTUFORF9QUklPUklUWV9MT1csXG4gICAgICApLFxuICAgICAgZWRpdG9yLnJlZ2lzdGVyQ29tbWFuZChcbiAgICAgICAgS0VZX0VOVEVSX0NPTU1BTkQsXG4gICAgICAgIChldmVudDogS2V5Ym9hcmRFdmVudCB8IG51bGwpID0+IHtcbiAgICAgICAgICBpZiAoZ3JvdXBzV2l0aE9wdGlvbnMgPT09IG51bGwgfHwgc2VsZWN0ZWRPcHRpb25LZXkgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBhbGxPcHRpb25zID0gZ3JvdXBzV2l0aE9wdGlvbnMuZmxhdE1hcCgoZ3JvdXApID0+IGdyb3VwLm9wdGlvbnMpXG4gICAgICAgICAgY29uc3Qgc2VsZWN0ZWRPcHRpb24gPSBhbGxPcHRpb25zLmZpbmQoKG9wdGlvbikgPT4gb3B0aW9uLmtleSA9PT0gc2VsZWN0ZWRPcHRpb25LZXkpXG4gICAgICAgICAgaWYgKCFzZWxlY3RlZE9wdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGV2ZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKVxuICAgICAgICAgIH1cbiAgICAgICAgICBzZWxlY3RPcHRpb25BbmRDbGVhblVwKHNlbGVjdGVkT3B0aW9uKVxuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIENPTU1BTkRfUFJJT1JJVFlfTE9XLFxuICAgICAgKSxcbiAgICApXG4gIH0sIFtcbiAgICBzZWxlY3RPcHRpb25BbmRDbGVhblVwLFxuICAgIGNsb3NlLFxuICAgIGVkaXRvcixcbiAgICBncm91cHNXaXRoT3B0aW9ucyxcbiAgICBzZWxlY3RlZE9wdGlvbktleSxcbiAgICB1cGRhdGVTZWxlY3RlZE9wdGlvbixcbiAgXSlcblxuICBjb25zdCBsaXN0SXRlbVByb3BzID0gdXNlTWVtbyhcbiAgICAoKSA9PiAoe1xuICAgICAgZ3JvdXBzV2l0aE9wdGlvbnMsXG4gICAgICBzZWxlY3RPcHRpb25BbmRDbGVhblVwLFxuICAgICAgc2VsZWN0ZWRPcHRpb25LZXksXG4gICAgICBzZXRTZWxlY3RlZE9wdGlvbktleSxcbiAgICB9KSxcbiAgICBbc2VsZWN0T3B0aW9uQW5kQ2xlYW5VcCwgc2VsZWN0ZWRPcHRpb25LZXksIGdyb3Vwc1dpdGhPcHRpb25zXSxcbiAgKVxuXG4gIHJldHVybiBtZW51UmVuZGVyRm4oXG4gICAgYW5jaG9yRWxlbWVudFJlZixcbiAgICBsaXN0SXRlbVByb3BzLFxuICAgIHJlc29sdXRpb24ubWF0Y2ggPyByZXNvbHV0aW9uLm1hdGNoLm1hdGNoaW5nU3RyaW5nIDogJycsXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZU1lbnVBbmNob3JSZWYoXG4gIHJlc29sdXRpb246IE1lbnVSZXNvbHV0aW9uIHwgbnVsbCxcbiAgc2V0UmVzb2x1dGlvbjogKHI6IE1lbnVSZXNvbHV0aW9uIHwgbnVsbCkgPT4gdm9pZCxcbiAgY2xhc3NOYW1lPzogc3RyaW5nLFxuKTogTXV0YWJsZVJlZk9iamVjdDxIVE1MRWxlbWVudD4ge1xuICBjb25zdCBbZWRpdG9yXSA9IHVzZUxleGljYWxDb21wb3NlckNvbnRleHQoKVxuICBjb25zdCBhbmNob3JFbGVtZW50UmVmID0gdXNlUmVmPEhUTUxFbGVtZW50Pihkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSlcbiAgY29uc3QgcG9zaXRpb25NZW51ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IHJvb3RFbGVtZW50ID0gZWRpdG9yLmdldFJvb3RFbGVtZW50KClcbiAgICBjb25zdCBjb250YWluZXJEaXYgPSBhbmNob3JFbGVtZW50UmVmLmN1cnJlbnRcblxuICAgIGNvbnN0IFZFUlRJQ0FMX09GRlNFVCA9IDMyIGFzIGNvbnN0XG5cbiAgICBjb25zdCBtZW51RWxlID0gY29udGFpbmVyRGl2LmZpcnN0Q2hpbGQgYXMgRWxlbWVudFxuICAgIGlmIChyb290RWxlbWVudCAhPT0gbnVsbCAmJiByZXNvbHV0aW9uICE9PSBudWxsKSB7XG4gICAgICBjb25zdCB7IGhlaWdodCwgbGVmdCwgdG9wLCB3aWR0aCB9ID0gcmVzb2x1dGlvbi5nZXRSZWN0KClcbiAgICAgIGNvbnRhaW5lckRpdi5zdHlsZS50b3AgPSBgJHt0b3AgKyB3aW5kb3cuc2Nyb2xsWSArIFZFUlRJQ0FMX09GRlNFVH1weGBcbiAgICAgIGNvbnRhaW5lckRpdi5zdHlsZS5sZWZ0ID0gYCR7bGVmdCArIHdpbmRvdy5zY3JvbGxYfXB4YFxuICAgICAgY29udGFpbmVyRGl2LnN0eWxlLmhlaWdodCA9IGAke2hlaWdodH1weGBcbiAgICAgIGNvbnRhaW5lckRpdi5zdHlsZS53aWR0aCA9IGAke3dpZHRofXB4YFxuICAgICAgaWYgKG1lbnVFbGUgIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgbWVudVJlY3QgPSBtZW51RWxlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgICAgIGNvbnN0IG1lbnVIZWlnaHQgPSBtZW51UmVjdC5oZWlnaHRcbiAgICAgICAgY29uc3QgbWVudVdpZHRoID0gbWVudVJlY3Qud2lkdGhcblxuICAgICAgICBjb25zdCByb290RWxlbWVudFJlY3QgPSByb290RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuXG4gICAgICAgIGlmIChsZWZ0ICsgbWVudVdpZHRoID4gcm9vdEVsZW1lbnRSZWN0LnJpZ2h0KSB7XG4gICAgICAgICAgY29udGFpbmVyRGl2LnN0eWxlLmxlZnQgPSBgJHtyb290RWxlbWVudFJlY3QucmlnaHQgLSBtZW51V2lkdGggKyB3aW5kb3cuc2Nyb2xsWH1weGBcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtYXJnaW4gPSAxMFxuICAgICAgICBpZiAoXG4gICAgICAgICAgKHRvcCArIG1lbnVIZWlnaHQgPiB3aW5kb3cuaW5uZXJIZWlnaHQgfHwgdG9wICsgbWVudUhlaWdodCA+IHJvb3RFbGVtZW50UmVjdC5ib3R0b20pICYmXG4gICAgICAgICAgdG9wIC0gcm9vdEVsZW1lbnRSZWN0LnRvcCA+IG1lbnVIZWlnaHRcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29udGFpbmVyRGl2LnN0eWxlLnRvcCA9IGAke1xuICAgICAgICAgICAgdG9wICsgVkVSVElDQUxfT0ZGU0VUIC0gbWVudUhlaWdodCArIHdpbmRvdy5zY3JvbGxZIC0gKGhlaWdodCArIG1hcmdpbilcbiAgICAgICAgICB9cHhgXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCFjb250YWluZXJEaXYuaXNDb25uZWN0ZWQpIHtcbiAgICAgICAgaWYgKGNsYXNzTmFtZSAhPSBudWxsKSB7XG4gICAgICAgICAgY29udGFpbmVyRGl2LmNsYXNzTmFtZSA9IGNsYXNzTmFtZVxuICAgICAgICB9XG4gICAgICAgIGNvbnRhaW5lckRpdi5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCAnVHlwZWFoZWFkIG1lbnUnKVxuICAgICAgICBjb250YWluZXJEaXYuc2V0QXR0cmlidXRlKCdpZCcsICd0eXBlYWhlYWQtbWVudScpXG4gICAgICAgIGNvbnRhaW5lckRpdi5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAnbGlzdGJveCcpXG4gICAgICAgIGNvbnRhaW5lckRpdi5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xuICAgICAgICBjb250YWluZXJEaXYuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kKGNvbnRhaW5lckRpdilcbiAgICAgIH1cbiAgICAgIGFuY2hvckVsZW1lbnRSZWYuY3VycmVudCA9IGNvbnRhaW5lckRpdlxuICAgICAgcm9vdEVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWNvbnRyb2xzJywgJ3R5cGVhaGVhZC1tZW51JylcbiAgICB9XG4gIH0sIFtlZGl0b3IsIHJlc29sdXRpb24sIGNsYXNzTmFtZV0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCByb290RWxlbWVudCA9IGVkaXRvci5nZXRSb290RWxlbWVudCgpXG4gICAgaWYgKHJlc29sdXRpb24gIT09IG51bGwpIHtcbiAgICAgIHBvc2l0aW9uTWVudSgpXG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBpZiAocm9vdEVsZW1lbnQgIT09IG51bGwpIHtcbiAgICAgICAgICByb290RWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtY29udHJvbHMnKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29udGFpbmVyRGl2ID0gYW5jaG9yRWxlbWVudFJlZi5jdXJyZW50XG4gICAgICAgIGlmIChjb250YWluZXJEaXYgIT09IG51bGwgJiYgY29udGFpbmVyRGl2LmlzQ29ubmVjdGVkKSB7XG4gICAgICAgICAgY29udGFpbmVyRGl2LnJlbW92ZSgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sIFtlZGl0b3IsIHBvc2l0aW9uTWVudSwgcmVzb2x1dGlvbl0pXG5cbiAgY29uc3Qgb25WaXNpYmlsaXR5Q2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgKGlzSW5WaWV3OiBib29sZWFuKSA9PiB7XG4gICAgICBpZiAocmVzb2x1dGlvbiAhPT0gbnVsbCkge1xuICAgICAgICBpZiAoIWlzSW5WaWV3KSB7XG4gICAgICAgICAgc2V0UmVzb2x1dGlvbihudWxsKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBbcmVzb2x1dGlvbiwgc2V0UmVzb2x1dGlvbl0sXG4gIClcblxuICB1c2VEeW5hbWljUG9zaXRpb25pbmcocmVzb2x1dGlvbiwgYW5jaG9yRWxlbWVudFJlZi5jdXJyZW50LCBwb3NpdGlvbk1lbnUsIG9uVmlzaWJpbGl0eUNoYW5nZSlcblxuICByZXR1cm4gYW5jaG9yRWxlbWVudFJlZlxufVxuXG5leHBvcnQgdHlwZSBUcmlnZ2VyRm4gPSAodGV4dDogc3RyaW5nLCBlZGl0b3I6IExleGljYWxFZGl0b3IpID0+IE1lbnVUZXh0TWF0Y2ggfCBudWxsXG4iXSwibmFtZXMiOlsiUFVOQ1RVQVRJT04iLCJTbGFzaE1lbnVHcm91cCIsIlNsYXNoTWVudU9wdGlvbiIsImdldFNjcm9sbFBhcmVudCIsInVzZUR5bmFtaWNQb3NpdGlvbmluZyIsIlNDUk9MTF9UWVBFQUhFQURfT1BUSU9OX0lOVE9fVklFV19DT01NQU5EIiwiTGV4aWNhbE1lbnUiLCJ1c2VNZW51QW5jaG9yUmVmIiwib3B0aW9ucyIsInRpdGxlIiwiSWNvbiIsImtleSIsImtleWJvYXJkU2hvcnRjdXQiLCJrZXl3b3JkcyIsIm9uU2VsZWN0IiwicmVmIiwiY29uc3RydWN0b3IiLCJjdXJyZW50Iiwic2V0UmVmRWxlbWVudCIsImJpbmQiLCJlbGVtZW50Iiwic2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCIsInRhcmdldCIsInR5cGVhaGVhZENvbnRhaW5lck5vZGUiLCJkb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIiwidHlwZWFoZWFkUmVjdCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsInRvcCIsImhlaWdodCIsIndpbmRvdyIsImlubmVySGVpZ2h0Iiwic2Nyb2xsSW50b1ZpZXciLCJibG9jayIsImdldEZ1bGxNYXRjaE9mZnNldCIsImRvY3VtZW50VGV4dCIsImVudHJ5VGV4dCIsIm9mZnNldCIsInRyaWdnZXJPZmZzZXQiLCJpIiwibGVuZ3RoIiwic3Vic3RyIiwiJHNwbGl0Tm9kZUNvbnRhaW5pbmdRdWVyeSIsIm1hdGNoIiwic2VsZWN0aW9uIiwiJGdldFNlbGVjdGlvbiIsIiRpc1JhbmdlU2VsZWN0aW9uIiwiaXNDb2xsYXBzZWQiLCJhbmNob3IiLCJ0eXBlIiwiYW5jaG9yTm9kZSIsImdldE5vZGUiLCJpc1NpbXBsZVRleHQiLCJzZWxlY3Rpb25PZmZzZXQiLCJ0ZXh0Q29udGVudCIsImdldFRleHRDb250ZW50Iiwic2xpY2UiLCJjaGFyYWN0ZXJPZmZzZXQiLCJyZXBsYWNlYWJsZVN0cmluZyIsInF1ZXJ5T2Zmc2V0IiwibWF0Y2hpbmdTdHJpbmciLCJzdGFydE9mZnNldCIsIm5ld05vZGUiLCJzcGxpdFRleHQiLCJpbmNsdWRlSGlkZGVuIiwic3R5bGUiLCJnZXRDb21wdXRlZFN0eWxlIiwiZXhjbHVkZVN0YXRpY1BhcmVudCIsInBvc2l0aW9uIiwib3ZlcmZsb3dSZWdleCIsImJvZHkiLCJwYXJlbnQiLCJwYXJlbnRFbGVtZW50IiwidGVzdCIsIm92ZXJmbG93Iiwib3ZlcmZsb3dZIiwib3ZlcmZsb3dYIiwiaXNUcmlnZ2VyVmlzaWJsZUluTmVhcmVzdFNjcm9sbENvbnRhaW5lciIsInRhcmdldEVsZW1lbnQiLCJjb250YWluZXJFbGVtZW50IiwidFJlY3QiLCJjUmVjdCIsImJvdHRvbSIsInJlc29sdXRpb24iLCJvblJlcG9zaXRpb24iLCJvblZpc2liaWxpdHlDaGFuZ2UiLCJlZGl0b3IiLCJ1c2VMZXhpY2FsQ29tcG9zZXJDb250ZXh0IiwidXNlRWZmZWN0Iiwicm9vdEVsZW1lbnQiLCJnZXRSb290RWxlbWVudCIsInJvb3RTY3JvbGxQYXJlbnQiLCJ0aWNraW5nIiwicHJldmlvdXNJc0luVmlldyIsImhhbmRsZVNjcm9sbCIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsImlzSW5WaWV3IiwicmVzaXplT2JzZXJ2ZXIiLCJSZXNpemVPYnNlcnZlciIsImFkZEV2ZW50TGlzdGVuZXIiLCJjYXB0dXJlIiwicGFzc2l2ZSIsIm9ic2VydmUiLCJ1bm9ic2VydmUiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiY3JlYXRlQ29tbWFuZCIsImFuY2hvckVsZW1lbnRSZWYiLCJjbG9zZSIsImdyb3Vwc1dpdGhPcHRpb25zIiwibWVudVJlbmRlckZuIiwib25TZWxlY3RPcHRpb24iLCJzaG91bGRTcGxpdE5vZGVXaXRoUXVlcnkiLCJzZWxlY3RlZE9wdGlvbktleSIsInNldFNlbGVjdGVkT3B0aW9uS2V5IiwidXNlU3RhdGUiLCJ1cGRhdGVTZWxlY3RlZE9wdGlvbiIsInVzZUNhbGxiYWNrIiwib3B0aW9uIiwicm9vdEVsZW0iLCJzZXRBdHRyaWJ1dGUiLCJzZXRTZWxlY3RlZE9wdGlvbktleVRvRmlyc3RNYXRjaGluZ09wdGlvbiIsImFsbE9wdGlvbnMiLCJmbGF0TWFwIiwiZ3JvdXAiLCJmaXJzdE1hdGNoaW5nT3B0aW9uIiwic2VsZWN0T3B0aW9uQW5kQ2xlYW5VcCIsInNlbGVjdGVkT3B0aW9uIiwidXBkYXRlIiwidGV4dE5vZGVDb250YWluaW5nUXVlcnkiLCJyZW1vdmVBdHRyaWJ1dGUiLCJ1c2VMYXlvdXRFZmZlY3QiLCJtZXJnZVJlZ2lzdGVyIiwicmVnaXN0ZXJDb21tYW5kIiwiQ09NTUFORF9QUklPUklUWV9MT1ciLCJLRVlfQVJST1dfRE9XTl9DT01NQU5EIiwicGF5bG9hZCIsImV2ZW50Iiwic2VsZWN0ZWRJbmRleCIsImZpbmRJbmRleCIsIm5ld1NlbGVjdGVkSW5kZXgiLCJuZXdTZWxlY3RlZE9wdGlvbiIsImRpc3BhdGNoQ29tbWFuZCIsImluZGV4IiwicHJldmVudERlZmF1bHQiLCJzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24iLCJLRVlfQVJST1dfVVBfQ09NTUFORCIsIktFWV9FU0NBUEVfQ09NTUFORCIsIktFWV9UQUJfQ09NTUFORCIsImZpbmQiLCJLRVlfRU5URVJfQ09NTUFORCIsImxpc3RJdGVtUHJvcHMiLCJ1c2VNZW1vIiwic2V0UmVzb2x1dGlvbiIsImNsYXNzTmFtZSIsInVzZVJlZiIsImNyZWF0ZUVsZW1lbnQiLCJwb3NpdGlvbk1lbnUiLCJjb250YWluZXJEaXYiLCJWRVJUSUNBTF9PRkZTRVQiLCJtZW51RWxlIiwiZmlyc3RDaGlsZCIsImxlZnQiLCJ3aWR0aCIsImdldFJlY3QiLCJzY3JvbGxZIiwic2Nyb2xsWCIsIm1lbnVSZWN0IiwibWVudUhlaWdodCIsIm1lbnVXaWR0aCIsInJvb3RFbGVtZW50UmVjdCIsInJpZ2h0IiwibWFyZ2luIiwiaXNDb25uZWN0ZWQiLCJkaXNwbGF5IiwiYXBwZW5kIiwicmVtb3ZlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztJQTZCYUEsV0FBVztlQUFYQTs7SUFFQUMsY0FBYztlQUFkQTs7SUFLQUMsZUFBZTtlQUFmQTs7SUEySEdDLGVBQWU7ZUFBZkE7O0lBZ0NBQyxxQkFBcUI7ZUFBckJBOztJQWlESEMseUNBQXlDO2VBQXpDQTs7SUFLR0MsV0FBVztlQUFYQTs7SUE4UEFDLGdCQUFnQjtlQUFoQkE7Ozt3Q0FoZjBCO3VCQUNaO3lCQVd2Qjt1QkFDNEU7QUFhNUUsTUFBTVAsY0FBYztBQUVwQixNQUFNQztJQUNYTyxRQUErQjtJQUMvQkMsTUFBYTtBQUNmO0FBRU8sTUFBTVA7SUFDWFEsS0FBYztJQUVkLG1CQUFtQjtJQUNuQkMsSUFBVztJQUNYLE1BQU07SUFDTkMsaUJBQXlCO0lBQ3pCLHVCQUF1QjtJQUN2QkMsU0FBdUI7SUFDdkIsNENBQTRDO0lBQzVDQyxTQUEyRjtJQUMzRkMsSUFBMEM7SUFFMUMsOEJBQThCO0lBQzlCTixNQUFhO0lBRWJPLFlBQ0VQLEtBQWEsRUFDYkQsT0FLQyxDQUNEO1FBQ0EsSUFBSSxDQUFDRyxHQUFHLEdBQUdGO1FBQ1gsSUFBSSxDQUFDTSxHQUFHLEdBQUc7WUFBRUUsU0FBUztRQUFLO1FBQzNCLElBQUksQ0FBQ0MsYUFBYSxHQUFHLElB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
462
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9maWVsZC9sZXhpY2FsL3BsdWdpbnMvU2xhc2hNZW51L0xleGljYWxUeXBlYWhlYWRNZW51UGx1Z2luL0xleGljYWxNZW51LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IGkxOG4gfSBmcm9tICdpMThuZXh0J1xuaW1wb3J0IHR5cGUgeyBMZXhpY2FsQ29tbWFuZCwgTGV4aWNhbEVkaXRvciwgVGV4dE5vZGUgfSBmcm9tICdsZXhpY2FsJ1xuaW1wb3J0IHR5cGUgeyBNdXRhYmxlUmVmT2JqZWN0LCBSZWFjdFBvcnRhbCB9IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyB1c2VMZXhpY2FsQ29tcG9zZXJDb250ZXh0IH0gZnJvbSAnQGxleGljYWwvcmVhY3QvTGV4aWNhbENvbXBvc2VyQ29udGV4dCdcbmltcG9ydCB7IG1lcmdlUmVnaXN0ZXIgfSBmcm9tICdAbGV4aWNhbC91dGlscydcbmltcG9ydCB7XG4gICRnZXRTZWxlY3Rpb24sXG4gICRpc1JhbmdlU2VsZWN0aW9uLFxuICBDT01NQU5EX1BSSU9SSVRZX0xPVyxcbiAgS0VZX0FSUk9XX0RPV05fQ09NTUFORCxcbiAgS0VZX0FSUk9XX1VQX0NPTU1BTkQsXG4gIEtFWV9FTlRFUl9DT01NQU5ELFxuICBLRVlfRVNDQVBFX0NPTU1BTkQsXG4gIEtFWV9UQUJfQ09NTUFORCxcbiAgY3JlYXRlQ29tbWFuZCxcbn0gZnJvbSAnbGV4aWNhbCdcbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZUxheW91dEVmZmVjdCwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuXG5leHBvcnQgdHlwZSBNZW51VGV4dE1hdGNoID0ge1xuICBsZWFkT2Zmc2V0OiBudW1iZXJcbiAgbWF0Y2hpbmdTdHJpbmc6IHN0cmluZ1xuICByZXBsYWNlYWJsZVN0cmluZzogc3RyaW5nXG59XG5cbmV4cG9ydCB0eXBlIE1lbnVSZXNvbHV0aW9uID0ge1xuICBnZXRSZWN0OiAoKSA9PiBET01SZWN0XG4gIG1hdGNoPzogTWVudVRleHRNYXRjaFxufVxuXG5leHBvcnQgY29uc3QgUFVOQ1RVQVRJT04gPSAnXFxcXC4sXFxcXCtcXFxcKlxcXFw/XFxcXCRcXFxcQFxcXFx8I3t9XFxcXChcXFxcKVxcXFxeXFxcXC1cXFxcW1xcXFxdXFxcXFxcXFwvISVcXCdcIn49PD5fOjsnXG5cbmV4cG9ydCBjbGFzcyBTbGFzaE1lbnVHcm91cCB7XG4gIG9wdGlvbnM6IEFycmF5PFNsYXNoTWVudU9wdGlvbj5cbiAgdGl0bGU6IHN0cmluZ1xufVxuXG5leHBvcnQgY2xhc3MgU2xhc2hNZW51T3B0aW9uIHtcbiAgSWNvbjogUmVhY3QuRkNcblxuICBkaXNwbGF5TmFtZT86ICh7IGkxOG4gfTogeyBpMThuOiBpMThuIH0pID0+IHN0cmluZ1xuICAvLyBJY29uIGZvciBkaXNwbGF5XG4gIGtleTogc3RyaW5nXG4gIC8vIFRCRFxuICBrZXlib2FyZFNob3J0Y3V0Pzogc3RyaW5nXG4gIC8vIEZvciBleHRyYSBzZWFyY2hpbmcuXG4gIGtleXdvcmRzOiBBcnJheTxzdHJpbmc+XG4gIC8vIFdoYXQgaGFwcGVucyB3aGVuIHlvdSBzZWxlY3QgdGhpcyBvcHRpb24/XG4gIG9uU2VsZWN0OiAoeyBlZGl0b3IsIHF1ZXJ5U3RyaW5nIH06IHsgZWRpdG9yOiBMZXhpY2FsRWRpdG9yOyBxdWVyeVN0cmluZzogc3RyaW5nIH0pID0+IHZvaWRcblxuICByZWY/OiBNdXRhYmxlUmVmT2JqZWN0PEhUTUxFbGVtZW50IHwgbnVsbD5cblxuICAvLyBXaGF0IHNob3dzIHVwIGluIHRoZSBlZGl0b3JcbiAgdGl0bGU6IHN0cmluZ1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHRpdGxlOiBzdHJpbmcsXG4gICAgb3B0aW9uczoge1xuICAgICAgSWNvbjogUmVhY3QuRkNcbiAgICAgIGRpc3BsYXlOYW1lPzogKHsgaTE4biB9OiB7IGkxOG46IGkxOG4gfSkgPT4gc3RyaW5nXG4gICAgICBrZXlib2FyZFNob3J0Y3V0Pzogc3RyaW5nXG4gICAgICBrZXl3b3Jkcz86IEFycmF5PHN0cmluZz5cbiAgICAgIG9uU2VsZWN0OiAoeyBlZGl0b3IsIHF1ZXJ5U3RyaW5nIH06IHsgZWRpdG9yOiBMZXhpY2FsRWRpdG9yOyBxdWVyeVN0cmluZzogc3RyaW5nIH0pID0+IHZvaWRcbiAgICB9LFxuICApIHtcbiAgICB0aGlzLmtleSA9IHRpdGxlXG4gICAgdGhpcy5yZWYgPSB7IGN1cnJlbnQ6IG51bGwgfVxuICAgIHRoaXMuc2V0UmVmRWxlbWVudCA9IHRoaXMuc2V0UmVmRWxlbWVudC5iaW5kKHRoaXMpXG5cbiAgICB0aGlzLnRpdGxlID0gdGl0bGVcbiAgICB0aGlzLmRpc3BsYXlOYW1lID0gb3B0aW9ucy5kaXNwbGF5TmFtZVxuICAgIHRoaXMua2V5d29yZHMgPSBvcHRpb25zLmtleXdvcmRzIHx8IFtdXG4gICAgdGhpcy5JY29uID0gb3B0aW9ucy5JY29uXG4gICAgdGhpcy5rZXlib2FyZFNob3J0Y3V0ID0gb3B0aW9ucy5rZXlib2FyZFNob3J0Y3V0XG4gICAgdGhpcy5vblNlbGVjdCA9IG9wdGlvbnMub25TZWxlY3QuYmluZCh0aGlzKVxuICB9XG5cbiAgc2V0UmVmRWxlbWVudChlbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGwpIHtcbiAgICB0aGlzLnJlZiA9IHsgY3VycmVudDogZWxlbWVudCB9XG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgTWVudVJlbmRlckZuID0gKFxuICBhbmNob3JFbGVtZW50UmVmOiBNdXRhYmxlUmVmT2JqZWN0PEhUTUxFbGVtZW50IHwgbnVsbD4sXG4gIGl0ZW1Qcm9wczoge1xuICAgIGdyb3Vwc1dpdGhPcHRpb25zOiBBcnJheTxTbGFzaE1lbnVHcm91cD5cbiAgICBzZWxlY3RPcHRpb25BbmRDbGVhblVwOiAoc2VsZWN0ZWRPcHRpb246IFNsYXNoTWVudU9wdGlvbikgPT4gdm9pZFxuICAgIHNlbGVjdGVkT3B0aW9uS2V5OiBudWxsIHwgc3RyaW5nXG4gICAgc2V0U2VsZWN0ZWRPcHRpb25LZXk6IChvcHRpb25LZXk6IHN0cmluZykgPT4gdm9pZFxuICB9LFxuICBtYXRjaGluZ1N0cmluZzogbnVsbCB8IHN0cmluZyxcbikgPT4gSlNYLkVsZW1lbnQgfCBSZWFjdFBvcnRhbCB8IG51bGxcblxuY29uc3Qgc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCA9ICh0YXJnZXQ6IEhUTUxFbGVtZW50KSA9PiB7XG4gIGNvbnN0IHR5cGVhaGVhZENvbnRhaW5lck5vZGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndHlwZWFoZWFkLW1lbnUnKVxuICBpZiAoIXR5cGVhaGVhZENvbnRhaW5lck5vZGUpIHJldHVyblxuXG4gIGNvbnN0IHR5cGVhaGVhZFJlY3QgPSB0eXBlYWhlYWRDb250YWluZXJOb2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG5cbiAgaWYgKHR5cGVhaGVhZFJlY3QudG9wICsgdHlwZWFoZWFkUmVjdC5oZWlnaHQgPiB3aW5kb3cuaW5uZXJIZWlnaHQpIHtcbiAgICB0eXBlYWhlYWRDb250YWluZXJOb2RlLnNjcm9sbEludG9WaWV3KHtcbiAgICAgIGJsb2NrOiAnY2VudGVyJyxcbiAgICB9KVxuICB9XG5cbiAgaWYgKHR5cGVhaGVhZFJlY3QudG9wIDwgMCkge1xuICAgIHR5cGVhaGVhZENvbnRhaW5lck5vZGUuc2Nyb2xsSW50b1ZpZXcoe1xuICAgICAgYmxvY2s6ICdjZW50ZXInLFxuICAgIH0pXG4gIH1cblxuICB0YXJnZXQuc2Nyb2xsSW50b1ZpZXcoeyBibG9jazogJ25lYXJlc3QnIH0pXG59XG5cbi8qKlxuICogV2FsayBiYWNrd2FyZHMgYWxvbmcgdXNlciBpbnB1dCBhbmQgZm9yd2FyZCB0aHJvdWdoIGVudGl0eSB0aXRsZSB0byB0cnlcbiAqIGFuZCByZXBsYWNlIG1vcmUgb2YgdGhlIHVzZXIncyB0ZXh0IHdpdGggZW50aXR5LlxuICovXG5mdW5jdGlvbiBnZXRGdWxsTWF0Y2hPZmZzZXQoZG9jdW1lbnRUZXh0OiBzdHJpbmcsIGVudHJ5VGV4dDogc3RyaW5nLCBvZmZzZXQ6IG51bWJlcik6IG51bWJlciB7XG4gIGxldCB0cmlnZ2VyT2Zmc2V0ID0gb2Zmc2V0XG4gIGZvciAobGV0IGkgPSB0cmlnZ2VyT2Zmc2V0OyBpIDw9IGVudHJ5VGV4dC5sZW5ndGg7IGkrKykge1xuICAgIGlmIChkb2N1bWVudFRleHQuc3Vic3RyKC1pKSA9PT0gZW50cnlUZXh0LnN1YnN0cigwLCBpKSkge1xuICAgICAgdHJpZ2dlck9mZnNldCA9IGlcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRyaWdnZXJPZmZzZXRcbn1cblxuLyoqXG4gKiBTcGxpdCBMZXhpY2FsIFRleHROb2RlIGFuZCByZXR1cm4gYSBuZXcgVGV4dE5vZGUgb25seSBjb250YWluaW5nIG1hdGNoZWQgdGV4dC5cbiAqIENvbW1vbiB1c2UgY2FzZXMgaW5jbHVkZTogcmVtb3ZpbmcgdGhlIG5vZGUsIHJlcGxhY2luZyB3aXRoIGEgbmV3IG5vZGUuXG4gKi9cbmZ1bmN0aW9uICRzcGxpdE5vZGVDb250YWluaW5nUXVlcnkobWF0Y2g6IE1lbnVUZXh0TWF0Y2gpOiBUZXh0Tm9kZSB8IG51bGwge1xuICBjb25zdCBzZWxlY3Rpb24gPSAkZ2V0U2VsZWN0aW9uKClcbiAgaWYgKCEkaXNSYW5nZVNlbGVjdGlvbihzZWxlY3Rpb24pIHx8ICFzZWxlY3Rpb24uaXNDb2xsYXBzZWQoKSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgY29uc3QgYW5jaG9yID0gc2VsZWN0aW9uLmFuY2hvclxuICBpZiAoYW5jaG9yLnR5cGUgIT09ICd0ZXh0Jykge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgY29uc3QgYW5jaG9yTm9kZSA9IGFuY2hvci5nZXROb2RlKClcbiAgaWYgKCFhbmNob3JOb2RlLmlzU2ltcGxlVGV4dCgpKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuICBjb25zdCBzZWxlY3Rpb25PZmZzZXQgPSBhbmNob3Iub2Zmc2V0XG4gIGNvbnN0IHRleHRDb250ZW50ID0gYW5jaG9yTm9kZS5nZXRUZXh0Q29udGVudCgpLnNsaWNlKDAsIHNlbGVjdGlvbk9mZnNldClcbiAgY29uc3QgY2hhcmFjdGVyT2Zmc2V0ID0gbWF0Y2gucmVwbGFjZWFibGVTdHJpbmcubGVuZ3RoXG4gIGNvbnN0IHF1ZXJ5T2Zmc2V0ID0gZ2V0RnVsbE1hdGNoT2Zmc2V0KHRleHRDb250ZW50LCBtYXRjaC5tYXRjaGluZ1N0cmluZywgY2hhcmFjdGVyT2Zmc2V0KVxuICBjb25zdCBzdGFydE9mZnNldCA9IHNlbGVjdGlvbk9mZnNldCAtIHF1ZXJ5T2Zmc2V0XG4gIGlmIChzdGFydE9mZnNldCA8IDApIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG4gIGxldCBuZXdOb2RlXG4gIGlmIChzdGFydE9mZnNldCA9PT0gMCkge1xuICAgIDtbbmV3Tm9kZV0gPSBhbmNob3JOb2RlLnNwbGl0VGV4dChzZWxlY3Rpb25PZmZzZXQpXG4gIH0gZWxzZSB7XG4gICAgO1ssIG5ld05vZGVdID0gYW5jaG9yTm9kZS5zcGxpdFRleHQoc3RhcnRPZmZzZXQsIHNlbGVjdGlvbk9mZnNldClcbiAgfVxuXG4gIHJldHVybiBuZXdOb2RlXG59XG5cbi8vIEdvdCBmcm9tIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS80MjU0MzkwOC8yMDEzNTgwXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2Nyb2xsUGFyZW50KFxuICBlbGVtZW50OiBIVE1MRWxlbWVudCxcbiAgaW5jbHVkZUhpZGRlbjogYm9vbGVhbixcbik6IEhUTUxCb2R5RWxlbWVudCB8IEhUTUxFbGVtZW50IHtcbiAgbGV0IHN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KVxuICBjb25zdCBleGNsdWRlU3RhdGljUGFyZW50ID0gc3R5bGUucG9zaXRpb24gPT09ICdhYnNvbHV0ZSdcbiAgY29uc3Qgb3ZlcmZsb3dSZWdleCA9IGluY2x1ZGVIaWRkZW4gPyAvKGF1dG98c2Nyb2xsfGhpZGRlbikvIDogLyhhdXRvfHNjcm9sbCkvXG4gIGlmIChzdHlsZS5wb3NpdGlvbiA9PT0gJ2ZpeGVkJykge1xuICAgIHJldHVybiBkb2N1bWVudC5ib2R5XG4gIH1cbiAgZm9yIChsZXQgcGFyZW50OiBIVE1MRWxlbWVudCB8IG51bGwgPSBlbGVtZW50OyAocGFyZW50ID0gcGFyZW50LnBhcmVudEVsZW1lbnQpOyApIHtcbiAgICBzdHlsZSA9IGdldENvbXB1dGVkU3R5bGUocGFyZW50KVxuICAgIGlmIChleGNsdWRlU3RhdGljUGFyZW50ICYmIHN0eWxlLnBvc2l0aW9uID09PSAnc3RhdGljJykge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgaWYgKG92ZXJmbG93UmVnZXgudGVzdChzdHlsZS5vdmVyZmxvdyArIHN0eWxlLm92ZXJmbG93WSArIHN0eWxlLm92ZXJmbG93WCkpIHtcbiAgICAgIHJldHVybiBwYXJlbnRcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRvY3VtZW50LmJvZHlcbn1cblxuZnVuY3Rpb24gaXNUcmlnZ2VyVmlzaWJsZUluTmVhcmVzdFNjcm9sbENvbnRhaW5lcihcbiAgdGFyZ2V0RWxlbWVudDogSFRNTEVsZW1lbnQsXG4gIGNvbnRhaW5lckVsZW1lbnQ6IEhUTUxFbGVtZW50LFxuKTogYm9vbGVhbiB7XG4gIGNvbnN0IHRSZWN0ID0gdGFyZ2V0RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICBjb25zdCBjUmVjdCA9IGNvbnRhaW5lckVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgcmV0dXJuIHRSZWN0LnRvcCA+IGNSZWN0LnRvcCAmJiB0UmVjdC50b3AgPCBjUmVjdC5ib3R0b21cbn1cblxuLy8gUmVwb3NpdGlvbiB0aGUgbWVudSBvbiBzY3JvbGwsIHdpbmRvdyByZXNpemUsIGFuZCBlbGVtZW50IHJlc2l6ZS5cbmV4cG9ydCBmdW5jdGlvbiB1c2VEeW5hbWljUG9zaXRpb25pbmcoXG4gIHJlc29sdXRpb246IE1lbnVSZXNvbHV0aW9uIHwgbnVsbCxcbiAgdGFyZ2V0RWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsLFxuICBvblJlcG9zaXRpb246ICgpID0+IHZvaWQsXG4gIG9uVmlzaWJpbGl0eUNoYW5nZT86IChpc0luVmlldzogYm9vbGVhbikgPT4gdm9pZCxcbikge1xuICBjb25zdCBbZWRpdG9yXSA9IHVzZUxleGljYWxDb21wb3NlckNvbnRleHQoKVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh0YXJnZXRFbGVtZW50ICE9IG51bGwgJiYgcmVzb2x1dGlvbiAhPSBudWxsKSB7XG4gICAgICBjb25zdCByb290RWxlbWVudCA9IGVkaXRvci5nZXRSb290RWxlbWVudCgpXG4gICAgICBjb25zdCByb290U2Nyb2xsUGFyZW50ID1cbiAgICAgICAgcm9vdEVsZW1lbnQgIT0gbnVsbCA/IGdldFNjcm9sbFBhcmVudChyb290RWxlbWVudCwgZmFsc2UpIDogZG9jdW1lbnQuYm9keVxuICAgICAgbGV0IHRpY2tpbmcgPSBmYWxzZVxuICAgICAgbGV0IHByZXZpb3VzSXNJblZpZXcgPSBpc1RyaWdnZXJWaXNpYmxlSW5OZWFyZXN0U2Nyb2xsQ29udGFpbmVyKFxuICAgICAgICB0YXJnZXRFbGVtZW50LFxuICAgICAgICByb290U2Nyb2xsUGFyZW50LFxuICAgICAgKVxuICAgICAgY29uc3QgaGFuZGxlU2Nyb2xsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRpY2tpbmcpIHtcbiAgICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIG9uUmVwb3NpdGlvbigpXG4gICAgICAgICAgICB0aWNraW5nID0gZmFsc2VcbiAgICAgICAgICB9KVxuICAgICAgICAgIHRpY2tpbmcgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXNJblZpZXcgPSBpc1RyaWdnZXJWaXNpYmxlSW5OZWFyZXN0U2Nyb2xsQ29udGFpbmVyKHRhcmdldEVsZW1lbnQsIHJvb3RTY3JvbGxQYXJlbnQpXG4gICAgICAgIGlmIChpc0luVmlldyAhPT0gcHJldmlvdXNJc0luVmlldykge1xuICAgICAgICAgIHByZXZpb3VzSXNJblZpZXcgPSBpc0luVmlld1xuICAgICAgICAgIGlmIChvblZpc2liaWxpdHlDaGFuZ2UgIT0gbnVsbCkge1xuICAgICAgICAgICAgb25WaXNpYmlsaXR5Q2hhbmdlKGlzSW5WaWV3KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgcmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIob25SZXBvc2l0aW9uKVxuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIG9uUmVwb3NpdGlvbilcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGhhbmRsZVNjcm9sbCwge1xuICAgICAgICBjYXB0dXJlOiB0cnVlLFxuICAgICAgICBwYXNzaXZlOiB0cnVlLFxuICAgICAgfSlcbiAgICAgIHJlc2l6ZU9ic2VydmVyLm9ic2VydmUodGFyZ2V0RWxlbWVudClcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIHJlc2l6ZU9ic2VydmVyLnVub2JzZXJ2ZSh0YXJnZXRFbGVtZW50KVxuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgb25SZXBvc2l0aW9uKVxuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBoYW5kbGVTY3JvbGwsIHRydWUpXG4gICAgICB9XG4gICAgfVxuICB9LCBbdGFyZ2V0RWxlbWVudCwgZWRpdG9yLCBvblZpc2liaWxpdHlDaGFuZ2UsIG9uUmVwb3NpdGlvbiwgcmVzb2x1dGlvbl0pXG59XG5cbmV4cG9ydCBjb25zdCBTQ1JPTExfVFlQRUFIRUFEX09QVElPTl9JTlRPX1ZJRVdfQ09NTUFORDogTGV4aWNhbENvbW1hbmQ8e1xuICBpbmRleDogbnVtYmVyXG4gIG9wdGlvbjogU2xhc2hNZW51T3B0aW9uXG59PiA9IGNyZWF0ZUNvbW1hbmQoJ1NDUk9MTF9UWVBFQUhFQURfT1BUSU9OX0lOVE9fVklFV19DT01NQU5EJylcblxuZXhwb3J0IGZ1bmN0aW9uIExleGljYWxNZW51KHtcbiAgYW5jaG9yRWxlbWVudFJlZixcbiAgY2xvc2UsXG4gIGVkaXRvcixcbiAgLy8gZ3JvdXBzV2l0aE9wdGlvbnMgZmlsdGVyaW5nIGlzIGFscmVhZHkgaGFuZGxlZCBpbiBTbGFzaE1lbnUvaW5kZXgudHN4LiBUaHVzLCBncm91cHNXaXRoT3B0aW9ucyBhbHdheXMgY29udGFpbnMgdGhlIG1hdGNoaW5nIG9wdGlvbnMuXG4gIGdyb3Vwc1dpdGhPcHRpb25zLFxuICBtZW51UmVuZGVyRm4sXG4gIG9uU2VsZWN0T3B0aW9uLFxuICByZXNvbHV0aW9uLFxuICBzaG91bGRTcGxpdE5vZGVXaXRoUXVlcnkgPSBmYWxzZSxcbn06IHtcbiAgYW5jaG9yRWxlbWVudFJlZjogTXV0YWJsZVJlZk9iamVjdDxIVE1MRWxlbWVudD5cbiAgY2xvc2U6ICgpID0+IHZvaWRcbiAgZWRpdG9yOiBMZXhpY2FsRWRpdG9yXG4gIGdyb3Vwc1dpdGhPcHRpb25zOiBBcnJheTxTbGFzaE1lbnVHcm91cD5cbiAgbWVudVJlbmRlckZuOiBNZW51UmVuZGVyRm5cbiAgb25TZWxlY3RPcHRpb246IChcbiAgICBvcHRpb246IFNsYXNoTWVudU9wdGlvbixcbiAgICB0ZXh0Tm9kZUNvbnRhaW5pbmdRdWVyeTogVGV4dE5vZGUgfCBudWxsLFxuICAgIGNsb3NlTWVudTogKCkgPT4gdm9pZCxcbiAgICBtYXRjaGluZ1N0cmluZzogc3RyaW5nLFxuICApID0+IHZvaWRcbiAgcmVzb2x1dGlvbjogTWVudVJlc29sdXRpb25cbiAgc2hvdWxkU3BsaXROb2RlV2l0aFF1ZXJ5PzogYm9vbGVhblxufSk6IEpTWC5FbGVtZW50IHwgbnVsbCB7XG4gIGNvbnN0IFtzZWxlY3RlZE9wdGlvbktleSwgc2V0U2VsZWN0ZWRPcHRpb25LZXldID0gdXNlU3RhdGU8bnVsbCB8IHN0cmluZz4obnVsbClcblxuICBjb25zdCBtYXRjaGluZ1N0cmluZyA9IChyZXNvbHV0aW9uLm1hdGNoICYmIHJlc29sdXRpb24ubWF0Y2gubWF0Y2hpbmdTdHJpbmcpIHx8ICcnXG5cbiAgY29uc3QgdXBkYXRlU2VsZWN0ZWRPcHRpb24gPSB1c2VDYWxsYmFjayhcbiAgICAob3B0aW9uOiBTbGFzaE1lbnVPcHRpb24pID0+IHtcbiAgICAgIGNvbnN0IHJvb3RFbGVtID0gZWRpdG9yLmdldFJvb3RFbGVtZW50KClcbiAgICAgIGlmIChyb290RWxlbSAhPT0gbnVsbCkge1xuICAgICAgICByb290RWxlbS5zZXRBdHRyaWJ1dGUoJ2FyaWEtYWN0aXZlZGVzY2VuZGFudCcsICd0eXBlYWhlYWQtaXRlbS0nICsgb3B0aW9uLmtleSlcbiAgICAgICAgc2V0U2VsZWN0ZWRPcHRpb25LZXkob3B0aW9uLmtleSlcbiAgICAgIH1cbiAgICB9LFxuICAgIFtlZGl0b3JdLFxuICApXG5cbiAgY29uc3Qgc2V0U2VsZWN0ZWRPcHRpb25LZXlUb0ZpcnN0TWF0Y2hpbmdPcHRpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgLy8gc2V0IHNlbGVjdGVkIG9wdGlvbiB0byB0aGUgZmlyc3Qgb2YgdGhlIG1hdGNoaW5nIG9uZXNcbiAgICBpZiAoZ3JvdXBzV2l0aE9wdGlvbnMgIT09IG51bGwgJiYgbWF0Y2hpbmdTdHJpbmcgIT0gbnVsbCkge1xuICAgICAgLy8gZ3JvdXBzV2l0aE9wdGlvbnMgZmlsdGVyaW5nIGlzIGFscmVhZHkgaGFuZGxlZCBpbiBTbGFzaE1lbnUvaW5kZXgudHN4LiBUaHVzLCBncm91cHNXaXRoT3B0aW9ucyBhbHdheXMgY29udGFpbnMgdGhlIG1hdGNoaW5nIG9wdGlvbnMuXG4gICAgICBjb25zdCBhbGxPcHRpb25zID0gZ3JvdXBzV2l0aE9wdGlvbnMuZmxhdE1hcCgoZ3JvdXApID0+IGdyb3VwLm9wdGlvbnMpXG5cbiAgICAgIGlmIChhbGxPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBmaXJzdE1hdGNoaW5nT3B0aW9uID0gYWxsT3B0aW9uc1swXVxuICAgICAgICB1cGRhdGVTZWxlY3RlZE9wdGlvbihmaXJzdE1hdGNoaW5nT3B0aW9uKVxuICAgICAgfVxuICAgIH1cbiAgfSwgW2dyb3Vwc1dpdGhPcHRpb25zLCB1cGRhdGVTZWxlY3RlZE9wdGlvbiwgbWF0Y2hpbmdTdHJpbmddKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0U2VsZWN0ZWRPcHRpb25LZXlUb0ZpcnN0TWF0Y2hpbmdPcHRpb24oKVxuICB9LCBbbWF0Y2hpbmdTdHJpbmcsIHNldFNlbGVjdGVkT3B0aW9uS2V5VG9GaXJzdE1hdGNoaW5nT3B0aW9uXSlcblxuICBjb25zdCBzZWxlY3RPcHRpb25BbmRDbGVhblVwID0gdXNlQ2FsbGJhY2soXG4gICAgKHNlbGVjdGVkT3B0aW9uOiBTbGFzaE1lbnVPcHRpb24pID0+IHtcbiAgICAgIGVkaXRvci51cGRhdGUoKCkgPT4ge1xuICAgICAgICBjb25zdCB0ZXh0Tm9kZUNvbnRhaW5pbmdRdWVyeSA9XG4gICAgICAgICAgcmVzb2x1dGlvbi5tYXRjaCAhPSBudWxsICYmIHNob3VsZFNwbGl0Tm9kZVdpdGhRdWVyeVxuICAgICAgICAgICAgPyAkc3BsaXROb2RlQ29udGFpbmluZ1F1ZXJ5KHJlc29sdXRpb24ubWF0Y2gpXG4gICAgICAgICAgICA6IG51bGxcblxuICAgICAgICBvblNlbGVjdE9wdGlvbihcbiAgICAgICAgICBzZWxlY3RlZE9wdGlvbixcbiAgICAgICAgICB0ZXh0Tm9kZUNvbnRhaW5pbmdRdWVyeSxcbiAgICAgICAgICBjbG9zZSxcbiAgICAgICAgICByZXNvbHV0aW9uLm1hdGNoID8gcmVzb2x1dGlvbi5tYXRjaC5tYXRjaGluZ1N0cmluZyA6ICcnLFxuICAgICAgICApXG4gICAgICB9KVxuICAgIH0sXG4gICAgW2VkaXRvciwgc2hvdWxkU3BsaXROb2RlV2l0aFF1ZXJ5LCByZXNvbHV0aW9uLm1hdGNoLCBvblNlbGVjdE9wdGlvbiwgY2xvc2VdLFxuICApXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY29uc3Qgcm9vdEVsZW0gPSBlZGl0b3IuZ2V0Um9vdEVsZW1lbnQoKVxuICAgICAgaWYgKHJvb3RFbGVtICE9PSBudWxsKSB7XG4gICAgICAgIHJvb3RFbGVtLnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1hY3RpdmVkZXNjZW5kYW50JylcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtlZGl0b3JdKVxuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGdyb3Vwc1dpdGhPcHRpb25zID09PSBudWxsKSB7XG4gICAgICBzZXRTZWxlY3RlZE9wdGlvbktleShudWxsKVxuICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWRPcHRpb25LZXkgPT09IG51bGwpIHtcbiAgICAgIHNldFNlbGVjdGVkT3B0aW9uS2V5VG9GaXJzdE1hdGNoaW5nT3B0aW9uKClcbiAgICB9XG4gIH0sIFtcbiAgICBncm91cHNXaXRoT3B0aW9ucyxcbiAgICBzZWxlY3RlZE9wdGlvbktleSxcbiAgICB1cGRhdGVTZWxlY3RlZE9wdGlvbixcbiAgICBzZXRTZWxlY3RlZE9wdGlvbktleVRvRmlyc3RNYXRjaGluZ09wdGlvbixcbiAgXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJldHVybiBtZXJnZVJlZ2lzdGVyKFxuICAgICAgZWRpdG9yLnJlZ2lzdGVyQ29tbWFuZChcbiAgICAgICAgU0NST0xMX1RZUEVBSEVBRF9PUFRJT05fSU5UT19WSUVXX0NPTU1BTkQsXG4gICAgICAgICh7IG9wdGlvbiB9KSA9PiB7XG4gICAgICAgICAgaWYgKG9wdGlvbi5yZWYgJiYgb3B0aW9uLnJlZi5jdXJyZW50ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHNjcm9sbEludG9WaWV3SWZOZWVkZWQob3B0aW9uLnJlZi5jdXJyZW50KVxuICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAgQ09NTUFORF9QUklPUklUWV9MT1csXG4gICAgICApLFxuICAgIClcbiAgfSwgW2VkaXRvciwgdXBkYXRlU2VsZWN0ZWRPcHRpb25dKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgcmV0dXJuIG1lcmdlUmVnaXN0ZXIoXG4gICAgICBlZGl0b3IucmVnaXN0ZXJDb21tYW5kPEtleWJvYXJkRXZlbnQ+KFxuICAgICAgICBLRVlfQVJST1dfRE9XTl9DT01NQU5ELFxuICAgICAgICAocGF5bG9hZCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGV2ZW50ID0gcGF5bG9hZFxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGdyb3Vwc1dpdGhPcHRpb25zICE9PSBudWxsICYmXG4gICAgICAgICAgICBncm91cHNXaXRoT3B0aW9ucy5sZW5ndGggJiZcbiAgICAgICAgICAgIHNlbGVjdGVkT3B0aW9uS2V5ICE9PSBudWxsXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCBhbGxPcHRpb25zID0gZ3JvdXBzV2l0aE9wdGlvbnMuZmxhdE1hcCgoZ3JvdXApID0+IGdyb3VwLm9wdGlvbnMpXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZEluZGV4ID0gYWxsT3B0aW9ucy5maW5kSW5kZXgoKG9wdGlvbikgPT4gb3B0aW9uLmtleSA9PT0gc2VsZWN0ZWRPcHRpb25LZXkpXG5cbiAgICAgICAgICAgIGNvbnN0IG5ld1NlbGVjdGVkSW5kZXggPSBzZWxlY3RlZEluZGV4ICE9PSBhbGxPcHRpb25zLmxlbmd0aCAtIDEgPyBzZWxlY3RlZEluZGV4ICsgMSA6IDBcblxuICAgICAgICAgICAgY29uc3QgbmV3U2VsZWN0ZWRPcHRpb24gPSBhbGxPcHRpb25zW25ld1NlbGVjdGVkSW5kZXhdXG5cbiAgICAgICAgICAgIHVwZGF0ZVNlbGVjdGVkT3B0aW9uKG5ld1NlbGVjdGVkT3B0aW9uKVxuICAgICAgICAgICAgaWYgKG5ld1NlbGVjdGVkT3B0aW9uLnJlZiAhPSBudWxsICYmIG5ld1NlbGVjdGVkT3B0aW9uLnJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgICAgIGVkaXRvci5kaXNwYXRjaENvbW1hbmQoU0NST0xMX1RZUEVBSEVBRF9PUFRJT05fSU5UT19WSUVXX0NPTU1BTkQsIHtcbiAgICAgICAgICAgICAgICBpbmRleDogbmV3U2VsZWN0ZWRJbmRleCxcbiAgICAgICAgICAgICAgICBvcHRpb246IG5ld1NlbGVjdGVkT3B0aW9uLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKClcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgQ09NTUFORF9QUklPUklUWV9MT1csXG4gICAgICApLFxuICAgICAgZWRpdG9yLnJlZ2lzdGVyQ29tbWFuZDxLZXlib2FyZEV2ZW50PihcbiAgICAgICAgS0VZX0FSUk9XX1VQX0NPTU1BTkQsXG4gICAgICAgIChwYXlsb2FkKSA9PiB7XG4gICAgICAgICAgY29uc3QgZXZlbnQgPSBwYXlsb2FkXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgZ3JvdXBzV2l0aE9wdGlvbnMgIT09IG51bGwgJiZcbiAgICAgICAgICAgIGdyb3Vwc1dpdGhPcHRpb25zLmxlbmd0aCAmJlxuICAgICAgICAgICAgc2VsZWN0ZWRPcHRpb25LZXkgIT09IG51bGxcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IGFsbE9wdGlvbnMgPSBncm91cHNXaXRoT3B0aW9ucy5mbGF0TWFwKChncm91cCkgPT4gZ3JvdXAub3B0aW9ucylcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkSW5kZXggPSBhbGxPcHRpb25zLmZpbmRJbmRleCgob3B0aW9uKSA9PiBvcHRpb24ua2V5ID09PSBzZWxlY3RlZE9wdGlvbktleSlcblxuICAgICAgICAgICAgY29uc3QgbmV3U2VsZWN0ZWRJbmRleCA9IHNlbGVjdGVkSW5kZXggIT09IDAgPyBzZWxlY3RlZEluZGV4IC0gMSA6IGFsbE9wdGlvbnMubGVuZ3RoIC0gMVxuXG4gICAgICAgICAgICBjb25zdCBuZXdTZWxlY3RlZE9wdGlvbiA9IGFsbE9wdGlvbnNbbmV3U2VsZWN0ZWRJbmRleF1cblxuICAgICAgICAgICAgdXBkYXRlU2VsZWN0ZWRPcHRpb24obmV3U2VsZWN0ZWRPcHRpb24pXG4gICAgICAgICAgICBpZiAobmV3U2VsZWN0ZWRPcHRpb24ucmVmICE9IG51bGwgJiYgbmV3U2VsZWN0ZWRPcHRpb24ucmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZChuZXdTZWxlY3RlZE9wdGlvbi5yZWYuY3VycmVudClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIENPTU1BTkRfUFJJT1JJVFlfTE9XLFxuICAgICAgKSxcbiAgICAgIGVkaXRvci5yZWdpc3RlckNvbW1hbmQ8S2V5Ym9hcmRFdmVudD4oXG4gICAgICAgIEtFWV9FU0NBUEVfQ09NTUFORCxcbiAgICAgICAgKHBheWxvYWQpID0+IHtcbiAgICAgICAgICBjb25zdCBldmVudCA9IHBheWxvYWRcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKClcbiAgICAgICAgICBjbG9zZSgpXG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgQ09NTUFORF9QUklPUklUWV9MT1csXG4gICAgICApLFxuICAgICAgZWRpdG9yLnJlZ2lzdGVyQ29tbWFuZDxLZXlib2FyZEV2ZW50PihcbiAgICAgICAgS0VZX1RBQl9DT01NQU5ELFxuICAgICAgICAocGF5bG9hZCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGV2ZW50ID0gcGF5bG9hZFxuXG4gICAgICAgICAgaWYgKGdyb3Vwc1dpdGhPcHRpb25zID09PSBudWxsIHx8IHNlbGVjdGVkT3B0aW9uS2V5ID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgYWxsT3B0aW9ucyA9IGdyb3Vwc1dpdGhPcHRpb25zLmZsYXRNYXAoKGdyb3VwKSA9PiBncm91cC5vcHRpb25zKVxuICAgICAgICAgIGNvbnN0IHNlbGVjdGVkT3B0aW9uID0gYWxsT3B0aW9ucy5maW5kKChvcHRpb24pID0+IG9wdGlvbi5rZXkgPT09IHNlbGVjdGVkT3B0aW9uS2V5KVxuICAgICAgICAgIGlmICghc2VsZWN0ZWRPcHRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKVxuICAgICAgICAgIHNlbGVjdE9wdGlvbkFuZENsZWFuVXAoc2VsZWN0ZWRPcHRpb24pXG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgQ09NTUFORF9QUklPUklUWV9MT1csXG4gICAgICApLFxuICAgICAgZWRpdG9yLnJlZ2lzdGVyQ29tbWFuZChcbiAgICAgICAgS0VZX0VOVEVSX0NPTU1BTkQsXG4gICAgICAgIChldmVudDogS2V5Ym9hcmRFdmVudCB8IG51bGwpID0+IHtcbiAgICAgICAgICBpZiAoZ3JvdXBzV2l0aE9wdGlvbnMgPT09IG51bGwgfHwgc2VsZWN0ZWRPcHRpb25LZXkgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBhbGxPcHRpb25zID0gZ3JvdXBzV2l0aE9wdGlvbnMuZmxhdE1hcCgoZ3JvdXApID0+IGdyb3VwLm9wdGlvbnMpXG4gICAgICAgICAgY29uc3Qgc2VsZWN0ZWRPcHRpb24gPSBhbGxPcHRpb25zLmZpbmQoKG9wdGlvbikgPT4gb3B0aW9uLmtleSA9PT0gc2VsZWN0ZWRPcHRpb25LZXkpXG4gICAgICAgICAgaWYgKCFzZWxlY3RlZE9wdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGV2ZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKVxuICAgICAgICAgIH1cbiAgICAgICAgICBzZWxlY3RPcHRpb25BbmRDbGVhblVwKHNlbGVjdGVkT3B0aW9uKVxuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIENPTU1BTkRfUFJJT1JJVFlfTE9XLFxuICAgICAgKSxcbiAgICApXG4gIH0sIFtcbiAgICBzZWxlY3RPcHRpb25BbmRDbGVhblVwLFxuICAgIGNsb3NlLFxuICAgIGVkaXRvcixcbiAgICBncm91cHNXaXRoT3B0aW9ucyxcbiAgICBzZWxlY3RlZE9wdGlvbktleSxcbiAgICB1cGRhdGVTZWxlY3RlZE9wdGlvbixcbiAgXSlcblxuICBjb25zdCBsaXN0SXRlbVByb3BzID0gdXNlTWVtbyhcbiAgICAoKSA9PiAoe1xuICAgICAgZ3JvdXBzV2l0aE9wdGlvbnMsXG4gICAgICBzZWxlY3RPcHRpb25BbmRDbGVhblVwLFxuICAgICAgc2VsZWN0ZWRPcHRpb25LZXksXG4gICAgICBzZXRTZWxlY3RlZE9wdGlvbktleSxcbiAgICB9KSxcbiAgICBbc2VsZWN0T3B0aW9uQW5kQ2xlYW5VcCwgc2VsZWN0ZWRPcHRpb25LZXksIGdyb3Vwc1dpdGhPcHRpb25zXSxcbiAgKVxuXG4gIHJldHVybiBtZW51UmVuZGVyRm4oXG4gICAgYW5jaG9yRWxlbWVudFJlZixcbiAgICBsaXN0SXRlbVByb3BzLFxuICAgIHJlc29sdXRpb24ubWF0Y2ggPyByZXNvbHV0aW9uLm1hdGNoLm1hdGNoaW5nU3RyaW5nIDogJycsXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZU1lbnVBbmNob3JSZWYoXG4gIHJlc29sdXRpb246IE1lbnVSZXNvbHV0aW9uIHwgbnVsbCxcbiAgc2V0UmVzb2x1dGlvbjogKHI6IE1lbnVSZXNvbHV0aW9uIHwgbnVsbCkgPT4gdm9pZCxcbiAgY2xhc3NOYW1lPzogc3RyaW5nLFxuKTogTXV0YWJsZVJlZk9iamVjdDxIVE1MRWxlbWVudD4ge1xuICBjb25zdCBbZWRpdG9yXSA9IHVzZUxleGljYWxDb21wb3NlckNvbnRleHQoKVxuICBjb25zdCBhbmNob3JFbGVtZW50UmVmID0gdXNlUmVmPEhUTUxFbGVtZW50Pihkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSlcbiAgY29uc3QgcG9zaXRpb25NZW51ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IHJvb3RFbGVtZW50ID0gZWRpdG9yLmdldFJvb3RFbGVtZW50KClcbiAgICBjb25zdCBjb250YWluZXJEaXYgPSBhbmNob3JFbGVtZW50UmVmLmN1cnJlbnRcblxuICAgIGNvbnN0IFZFUlRJQ0FMX09GRlNFVCA9IDMyIGFzIGNvbnN0XG5cbiAgICBjb25zdCBtZW51RWxlID0gY29udGFpbmVyRGl2LmZpcnN0Q2hpbGQgYXMgRWxlbWVudFxuICAgIGlmIChyb290RWxlbWVudCAhPT0gbnVsbCAmJiByZXNvbHV0aW9uICE9PSBudWxsKSB7XG4gICAgICBjb25zdCB7IGhlaWdodCwgbGVmdCwgdG9wLCB3aWR0aCB9ID0gcmVzb2x1dGlvbi5nZXRSZWN0KClcbiAgICAgIGNvbnRhaW5lckRpdi5zdHlsZS50b3AgPSBgJHt0b3AgKyB3aW5kb3cuc2Nyb2xsWSArIFZFUlRJQ0FMX09GRlNFVH1weGBcbiAgICAgIGNvbnRhaW5lckRpdi5zdHlsZS5sZWZ0ID0gYCR7bGVmdCArIHdpbmRvdy5zY3JvbGxYfXB4YFxuICAgICAgY29udGFpbmVyRGl2LnN0eWxlLmhlaWdodCA9IGAke2hlaWdodH1weGBcbiAgICAgIGNvbnRhaW5lckRpdi5zdHlsZS53aWR0aCA9IGAke3dpZHRofXB4YFxuICAgICAgaWYgKG1lbnVFbGUgIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgbWVudVJlY3QgPSBtZW51RWxlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgICAgIGNvbnN0IG1lbnVIZWlnaHQgPSBtZW51UmVjdC5oZWlnaHRcbiAgICAgICAgY29uc3QgbWVudVdpZHRoID0gbWVudVJlY3Qud2lkdGhcblxuICAgICAgICBjb25zdCByb290RWxlbWVudFJlY3QgPSByb290RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuXG4gICAgICAgIGlmIChsZWZ0ICsgbWVudVdpZHRoID4gcm9vdEVsZW1lbnRSZWN0LnJpZ2h0KSB7XG4gICAgICAgICAgY29udGFpbmVyRGl2LnN0eWxlLmxlZnQgPSBgJHtyb290RWxlbWVudFJlY3QucmlnaHQgLSBtZW51V2lkdGggKyB3aW5kb3cuc2Nyb2xsWH1weGBcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHdvdWxkR29PZmZUb3BPZlNjcmVlbiA9IHRvcCA8IG1lbnVIZWlnaHRcbiAgICAgICAgY29uc3Qgd291bGRHb09mZkJvdHRvbU9mQ29udGFpbmVyID0gdG9wICsgbWVudUhlaWdodCA+IHJvb3RFbGVtZW50UmVjdC5ib3R0b21cblxuICAgICAgICAvLyBQb3NpdGlvbiBzbGFzaCBtZW51IGFib3ZlIHRoZSBjdXJzb3IgaW5zdGVhZCBvZiBiZWxvdyAoZGVmYXVsdCkgaWYgaXQgd291bGQgb3RoZXJ3aXNlIGdvIG9mZiB0aGUgYm90dG9tIG9mIHRoZSBzY3JlZW4uXG4gICAgICAgIGlmIChcbiAgICAgICAgICAodG9wICsgbWVudUhlaWdodCA+IHdpbmRvdy5pbm5lckhlaWdodCB8fFxuICAgICAgICAgICAgKHdvdWxkR29PZmZCb3R0b21PZkNvbnRhaW5lciAmJiAhd291bGRHb09mZlRvcE9mU2NyZWVuKSkgJiZcbiAgICAgICAgICB0b3AgLSByb290RWxlbWVudFJlY3QudG9wID4gbWVudUhlaWdodFxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBtYXJnaW4gPSAyNFxuICAgICAgICAgIGNvbnRhaW5lckRpdi5zdHlsZS50b3AgPSBgJHtcbiAgICAgICAgICAgIHRvcCArIFZFUlRJQ0FMX09GRlNFVCAtIG1lbnVIZWlnaHQgKyB3aW5kb3cuc2Nyb2xsWSAtIChoZWlnaHQgKyBtYXJnaW4pXG4gICAgICAgICAgfXB4YFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghY29udGFpbmVyRGl2LmlzQ29ubmVjdGVkKSB7XG4gICAgICAgIGlmIChjbGFzc05hbWUgIT0gbnVsbCkge1xuICAgICAgICAgIGNvbnRhaW5lckRpdi5jbGFzc05hbWUgPSBjbGFzc05hbWVcbiAgICAgICAgfVxuICAgICAgICBjb250YWluZXJEaXYuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgJ1R5cGVhaGVhZCBtZW51JylcbiAgICAgICAgY29udGFpbmVyRGl2LnNldEF0dHJpYnV0ZSgnaWQnLCAndHlwZWFoZWFkLW1lbnUnKVxuICAgICAgICBjb250YWluZXJEaXYuc2V0QXR0cmlidXRlKCdyb2xlJywgJ2xpc3Rib3gnKVxuICAgICAgICBjb250YWluZXJEaXYuc3R5bGUuZGlzcGxheSA9ICdibG9jaydcbiAgICAgICAgY29udGFpbmVyRGl2LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJ1xuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZChjb250YWluZXJEaXYpXG4gICAgICB9XG4gICAgICBhbmNob3JFbGVtZW50UmVmLmN1cnJlbnQgPSBjb250YWluZXJEaXZcbiAgICAgIHJvb3RFbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1jb250cm9scycsICd0eXBlYWhlYWQtbWVudScpXG4gICAgfVxuICB9LCBbZWRpdG9yLCByZXNvbHV0aW9uLCBjbGFzc05hbWVdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgcm9vdEVsZW1lbnQgPSBlZGl0b3IuZ2V0Um9vdEVsZW1lbnQoKVxuICAgIGlmIChyZXNvbHV0aW9uICE9PSBudWxsKSB7XG4gICAgICBwb3NpdGlvbk1lbnUoKVxuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgaWYgKHJvb3RFbGVtZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgcm9vdEVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWNvbnRyb2xzJylcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbnRhaW5lckRpdiA9IGFuY2hvckVsZW1lbnRSZWYuY3VycmVudFxuICAgICAgICBpZiAoY29udGFpbmVyRGl2ICE9PSBudWxsICYmIGNvbnRhaW5lckRpdi5pc0Nvbm5lY3RlZCkge1xuICAgICAgICAgIGNvbnRhaW5lckRpdi5yZW1vdmUoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LCBbZWRpdG9yLCBwb3NpdGlvbk1lbnUsIHJlc29sdXRpb25dKVxuXG4gIGNvbnN0IG9uVmlzaWJpbGl0eUNoYW5nZSA9IHVzZUNhbGxiYWNrKFxuICAgIChpc0luVmlldzogYm9vbGVhbikgPT4ge1xuICAgICAgaWYgKHJlc29sdXRpb24gIT09IG51bGwpIHtcbiAgICAgICAgaWYgKCFpc0luVmlldykge1xuICAgICAgICAgIHNldFJlc29sdXRpb24obnVsbClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgW3Jlc29sdXRpb24sIHNldFJlc29sdXRpb25dLFxuICApXG5cbiAgdXNlRHluYW1pY1Bvc2l0aW9uaW5nKHJlc29sdXRpb24sIGFuY2hvckVsZW1lbnRSZWYuY3VycmVudCwgcG9zaXRpb25NZW51LCBvblZpc2liaWxpdHlDaGFuZ2UpXG5cbiAgcmV0dXJuIGFuY2hvckVsZW1lbnRSZWZcbn1cblxuZXhwb3J0IHR5cGUgVHJpZ2dlckZuID0gKHRleHQ6IHN0cmluZywgZWRpdG9yOiBMZXhpY2FsRWRpdG9yKSA9PiBNZW51VGV4dE1hdGNoIHwgbnVsbFxuIl0sIm5hbWVzIjpbIlBVTkNUVUFUSU9OIiwiU2xhc2hNZW51R3JvdXAiLCJTbGFzaE1lbnVPcHRpb24iLCJnZXRTY3JvbGxQYXJlbnQiLCJ1c2VEeW5hbWljUG9zaXRpb25pbmciLCJTQ1JPTExfVFlQRUFIRUFEX09QVElPTl9JTlRPX1ZJRVdfQ09NTUFORCIsIkxleGljYWxNZW51IiwidXNlTWVudUFuY2hvclJlZiIsIm9wdGlvbnMiLCJ0aXRsZSIsIkljb24iLCJkaXNwbGF5TmFtZSIsImtleSIsImtleWJvYXJkU2hvcnRjdXQiLCJrZXl3b3JkcyIsIm9uU2VsZWN0IiwicmVmIiwiY29uc3RydWN0b3IiLCJjdXJyZW50Iiwic2V0UmVmRWxlbWVudCIsImJpbmQiLCJlbGVtZW50Iiwic2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCIsInRhcmdldCIsInR5cGVhaGVhZENvbnRhaW5lck5vZGUiLCJkb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIiwidHlwZWFoZWFkUmVjdCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsInRvcCIsImhlaWdodCIsIndpbmRvdyIsImlubmVySGVpZ2h0Iiwic2Nyb2xsSW50b1ZpZXciLCJibG9jayIsImdldEZ1bGxNYXRjaE9mZnNldCIsImRvY3VtZW50VGV4dCIsImVudHJ5VGV4dCIsIm9mZnNldCIsInRyaWdnZXJPZmZzZXQiLCJpIiwibGVuZ3RoIiwic3Vic3RyIiwiJHNwbGl0Tm9kZUNvbnRhaW5pbmdRdWVyeSIsIm1hdGNoIiwic2VsZWN0aW9uIiwiJGdldFNlbGVjdGlvbiIsIiRpc1JhbmdlU2VsZWN0aW9uIiwiaXNDb2xsYXBzZWQiLCJhbmNob3IiLCJ0eXBlIiwiYW5jaG9yTm9kZSIsImdldE5vZGUiLCJpc1NpbXBsZVRleHQiLCJzZWxlY3Rpb25PZmZzZXQiLCJ0ZXh0Q29udGVudCIsImdldFRleHRDb250ZW50Iiwic2xpY2UiLCJjaGFyYWN0ZXJPZmZzZXQiLCJyZXBsYWNlYWJsZVN0cmluZyIsInF1ZXJ5T2Zmc2V0IiwibWF0Y2hpbmdTdHJpbmciLCJzdGFydE9mZnNldCIsIm5ld05vZGUiLCJzcGxpdFRleHQiLCJpbmNsdWRlSGlkZGVuIiwic3R5bGUiLCJnZXRDb21wdXRlZFN0eWxlIiwiZXhjbHVkZVN0YXRpY1BhcmVudCIsInBvc2l0aW9uIiwib3ZlcmZsb3dSZWdleCIsImJvZHkiLCJwYXJlbnQiLCJwYXJlbnRFbGVtZW50IiwidGVzdCIsIm92ZXJmbG93Iiwib3ZlcmZsb3dZIiwib3ZlcmZsb3dYIiwiaXNUcmlnZ2VyVmlzaWJsZUluTmVhcmVzdFNjcm9sbENvbnRhaW5lciIsInRhcmdldEVsZW1lbnQiLCJjb250YWluZXJFbGVtZW50IiwidFJlY3QiLCJjUmVjdCIsImJvdHRvbSIsInJlc29sdXRpb24iLCJvblJlcG9zaXRpb24iLCJvblZpc2liaWxpdHlDaGFuZ2UiLCJlZGl0b3IiLCJ1c2VMZXhpY2FsQ29tcG9zZXJDb250ZXh0IiwidXNlRWZmZWN0Iiwicm9vdEVsZW1lbnQiLCJnZXRSb290RWxlbWVudCIsInJvb3RTY3JvbGxQYXJlbnQiLCJ0aWNraW5nIiwicHJldmlvdXNJc0luVmlldyIsImhhbmRsZVNjcm9sbCIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsImlzSW5WaWV3IiwicmVzaXplT2JzZXJ2ZXIiLCJSZXNpemVPYnNlcnZlciIsImFkZEV2ZW50TGlzdGVuZXIiLCJjYXB0dXJlIiwicGFzc2l2ZSIsIm9ic2VydmUiLCJ1bm9ic2VydmUiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiY3JlYXRlQ29tbWFuZCIsImFuY2hvckVsZW1lbnRSZWYiLCJjbG9zZSIsImdyb3Vwc1dpdGhPcHRpb25zIiwibWVudVJlbmRlckZuIiwib25TZWxlY3RPcHRpb24iLCJzaG91bGRTcGxpdE5vZGVXaXRoUXVlcnkiLCJzZWxlY3RlZE9wdGlvbktleSIsInNldFNlbGVjdGVkT3B0aW9uS2V5IiwidXNlU3RhdGUiLCJ1cGRhdGVTZWxlY3RlZE9wdGlvbiIsInVzZUNhbGxiYWNrIiwib3B0aW9uIiwicm9vdEVsZW0iLCJzZXRBdHRyaWJ1dGUiLCJzZXRTZWxlY3RlZE9wdGlvbktleVRvRmlyc3RNYXRjaGluZ09wdGlvbiIsImFsbE9wdGlvbnMiLCJmbGF0TWFwIiwiZ3JvdXAiLCJmaXJzdE1hdGNoaW5nT3B0aW9uIiwic2VsZWN0T3B0aW9uQW5kQ2xlYW5VcCIsInNlbGVjdGVkT3B0aW9uIiwidXBkYXRlIiwidGV4dE5vZGVDb250YWluaW5nUXVlcnkiLCJyZW1vdmVBdHRyaWJ1dGUiLCJ1c2VMYXlvdXRFZmZlY3QiLCJtZXJnZVJlZ2lzdGVyIiwicmVnaXN0ZXJDb21tYW5kIiwiQ09NTUFORF9QUklPUklUWV9MT1ciLCJLRVlfQVJST1dfRE9XTl9DT01NQU5EIiwicGF5bG9hZCIsImV2ZW50Iiwic2VsZWN0ZWRJbmRleCIsImZpbmRJbmRleCIsIm5ld1NlbGVjdGVkSW5kZXgiLCJuZXdTZWxlY3RlZE9wdGlvbiIsImRpc3BhdGNoQ29tbWFuZCIsImluZGV4IiwicHJldmVudERlZmF1bHQiLCJzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24iLCJLRVlfQVJST1dfVVBfQ09NTUFORCIsIktFWV9FU0NBUEVfQ09NTUFORCIsIktFWV9UQUJfQ09NTUFORCIsImZpbmQiLCJLRVlfRU5URVJfQ09NTUFORCIsImxpc3RJdGVtUHJvcHMiLCJ1c2VNZW1vIiwic2V0UmVzb2x1dGlvbiIsImNsYXNzTmFtZSIsInVzZVJlZiIsImNyZWF0ZUVsZW1lbnQiLCJwb3NpdGlvbk1lbnUiLCJjb250YWluZXJEaXYiLCJWRVJUSUNBTF9PRkZTRVQiLCJtZW51RWxlIiwiZmlyc3RDaGlsZCIsImxlZnQiLCJ3aWR0aCIsImdldFJlY3QiLCJzY3JvbGxZIiwic2Nyb2xsWCIsIm1lbnVSZWN0IiwibWVudUhlaWdodCIsIm1lbnVXaWR0aCIsInJvb3RFbGVtZW50UmVjdCIsInJpZ2h0Iiwid291bGRHb09mZlRvcE9mU2NyZWVuIiwid291bGRHb09mZkJvdHRvbU9mQ29udGFpbmVyIiwibWFyZ2luIiwiaXNDb25uZWN0ZWQiLCJkaXNwbGF5IiwiYXBwZW5k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
@@ -1,5 +1,5 @@
1
1
  /// <reference types="react" />
2
- import type { LexicalCommand, TextNode } from 'lexical';
2
+ import type { LexicalCommand, ParagraphNode, TextNode } from 'lexical';
3
3
  import type { MenuRenderFn, MenuResolution, MenuTextMatch, SlashMenuGroup, SlashMenuOption, TriggerFn } from './LexicalMenu';
4
4
  export declare const PUNCTUATION = "\\.,\\+\\*\\?\\$\\@\\|#{}\\(\\)\\^\\-\\[\\]\\\\/!%'\"~=<>_:;";
5
5
  export declare function getScrollParent(element: HTMLElement, includeHidden: boolean): HTMLBodyElement | HTMLElement;
@@ -19,7 +19,7 @@ export type TypeaheadMenuPluginProps = {
19
19
  triggerFn: TriggerFn;
20
20
  };
21
21
  export declare const ENABLE_SLASH_MENU_COMMAND: LexicalCommand<{
22
- rect: DOMRect;
22
+ node: ParagraphNode;
23
23
  }>;
24
24
  export declare function LexicalTypeaheadMenuPlugin({ anchorClassName, groupsWithOptions, menuRenderFn, onClose, onOpen, onQueryChange, onSelectOption, triggerFn, }: TypeaheadMenuPluginProps): JSX.Element | null;
25
25
  export { MenuRenderFn, MenuResolution, MenuTextMatch, TriggerFn };
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/field/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,cAAc,EAAiC,QAAQ,EAAE,MAAM,SAAS,CAAA;AActF,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EACd,aAAa,EACb,cAAc,EACd,eAAe,EACf,SAAS,EACV,MAAM,eAAe,CAAA;AAItB,eAAO,MAAM,WAAW,iEAAiE,CAAA;AA2EzF,wBAAgB,eAAe,CAC7B,OAAO,EAAE,WAAW,EACpB,aAAa,EAAE,OAAO,GACrB,eAAe,GAAG,WAAW,CAiB/B;AAED,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAErD,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,MAAM,EACf,EAAE,SAAc,EAAE,SAAa,EAAE,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5E,SAAS,CAgCX;AAED,MAAM,MAAM,wBAAwB,GAAG;IACrC,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,iBAAiB,EAAE,KAAK,CAAC,cAAc,CAAC,CAAA;IACxC,YAAY,EAAE,YAAY,CAAA;IAC1B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,cAAc,KAAK,IAAI,CAAA;IAC7C,aAAa,EAAE,CAAC,cAAc,EAAE,IAAI,GAAG,MAAM,KAAK,IAAI,CAAA;IACtD,cAAc,EAAE,CACd,MAAM,EAAE,eAAe,EACvB,uBAAuB,EAAE,QAAQ,GAAG,IAAI,EACxC,SAAS,EAAE,MAAM,IAAI,EACrB,cAAc,EAAE,MAAM,KACnB,IAAI,CAAA;IACT,SAAS,EAAE,SAAS,CAAA;CACrB,CAAA;AAED,eAAO,MAAM,yBAAyB,EAAE,cAAc,CAAC;IACrD,IAAI,EAAE,OAAO,CAAA;CACd,CAA8C,CAAA;AAE/C,wBAAgB,0BAA0B,CAAC,EACzC,eAAe,EACf,iBAAiB,EACjB,YAAY,EACZ,OAAO,EACP,MAAM,EACN,aAAa,EACb,cAAc,EACd,SAAS,GACV,EAAE,wBAAwB,GAAG,GAAG,CAAC,OAAO,GAAG,IAAI,CAgH/C;AAED,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,SAAS,EAAE,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/field/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,EACV,cAAc,EAEd,aAAa,EAEb,QAAQ,EACT,MAAM,SAAS,CAAA;AAchB,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EACd,aAAa,EACb,cAAc,EACd,eAAe,EACf,SAAS,EACV,MAAM,eAAe,CAAA;AAItB,eAAO,MAAM,WAAW,iEAAiE,CAAA;AA4EzF,wBAAgB,eAAe,CAC7B,OAAO,EAAE,WAAW,EACpB,aAAa,EAAE,OAAO,GACrB,eAAe,GAAG,WAAW,CAiB/B;AAED,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAErD,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,MAAM,EACf,EAAE,SAAc,EAAE,SAAa,EAAE,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5E,SAAS,CAgCX;AAED,MAAM,MAAM,wBAAwB,GAAG;IACrC,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,iBAAiB,EAAE,KAAK,CAAC,cAAc,CAAC,CAAA;IACxC,YAAY,EAAE,YAAY,CAAA;IAC1B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,cAAc,KAAK,IAAI,CAAA;IAC7C,aAAa,EAAE,CAAC,cAAc,EAAE,IAAI,GAAG,MAAM,KAAK,IAAI,CAAA;IACtD,cAAc,EAAE,CACd,MAAM,EAAE,eAAe,EACvB,uBAAuB,EAAE,QAAQ,GAAG,IAAI,EACxC,SAAS,EAAE,MAAM,IAAI,EACrB,cAAc,EAAE,MAAM,KACnB,IAAI,CAAA;IACT,SAAS,EAAE,SAAS,CAAA;CACrB,CAAA;AAED,eAAO,MAAM,yBAAyB,EAAE,cAAc,CAAC;IACrD,IAAI,EAAE,aAAa,CAAA;CACpB,CAA8C,CAAA;AAE/C,wBAAgB,0BAA0B,CAAC,EACzC,eAAe,EACf,iBAAiB,EACjB,YAAY,EACZ,OAAO,EACP,MAAM,EACN,aAAa,EACb,cAAc,EACd,SAAS,GACV,EAAE,wBAAwB,GAAG,GAAG,CAAC,OAAO,GAAG,IAAI,CAyH/C;AAED,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,SAAS,EAAE,CAAA"}
@@ -98,7 +98,8 @@ function tryToPositionRange(leadOffset, range, editorWindow) {
98
98
  }
99
99
  try {
100
100
  range.setStart(anchorNode, startOffset);
101
- range.setEnd(anchorNode, endOffset);
101
+ // if endOffset is 0, positioning the range for when you click the plus button to open the slash menu will fial
102
+ range.setEnd(anchorNode, endOffset > 1 ? endOffset : 1);
102
103
  } catch (error) {
103
104
  return false;
104
105
  }
@@ -203,7 +204,7 @@ function LexicalTypeaheadMenuPlugin({ anchorClassName, groupsWithOptions, menuRe
203
204
  ]);
204
205
  // This is mainly used for the AddBlockHandlePlugin, so that the slash menu can be opened from there
205
206
  (0, _react.useEffect)(()=>{
206
- return (0, _utils.mergeRegister)(editor.registerCommand(ENABLE_SLASH_MENU_COMMAND, ({ rect })=>{
207
+ return (0, _utils.mergeRegister)(editor.registerCommand(ENABLE_SLASH_MENU_COMMAND, ({ node })=>{
207
208
  editor.getEditorState().read(()=>{
208
209
  const match = {
209
210
  leadOffset: 0,
@@ -211,13 +212,18 @@ function LexicalTypeaheadMenuPlugin({ anchorClassName, groupsWithOptions, menuRe
211
212
  replaceableString: ''
212
213
  };
213
214
  if (match !== null && !isSelectionOnEntityBoundary(editor, match.leadOffset)) {
214
- if (rect !== null) {
215
- startTransition(()=>openTypeahead({
216
- getRect: ()=>{
217
- return rect;
218
- },
219
- match
220
- }));
215
+ if (node !== null) {
216
+ const editorWindow = editor._window ?? window;
217
+ const range = editorWindow.document.createRange();
218
+ const isRangePositioned = tryToPositionRange(match.leadOffset, range, editorWindow);
219
+ if (isRangePositioned !== null) {
220
+ startTransition(()=>openTypeahead({
221
+ getRect: ()=>{
222
+ return range.getBoundingClientRect();
223
+ },
224
+ match
225
+ }));
226
+ }
221
227
  return;
222
228
  }
223
229
  }
@@ -245,7 +251,9 @@ function LexicalTypeaheadMenuPlugin({ anchorClassName, groupsWithOptions, menuRe
245
251
  const isRangePositioned = tryToPositionRange(match.leadOffset, range, editorWindow);
246
252
  if (isRangePositioned !== null) {
247
253
  startTransition(()=>openTypeahead({
248
- getRect: ()=>range.getBoundingClientRect(),
254
+ getRect: ()=>{
255
+ return range.getBoundingClientRect();
256
+ },
249
257
  match
250
258
  }));
251
259
  return;
@@ -278,4 +286,4 @@ function LexicalTypeaheadMenuPlugin({ anchorClassName, groupsWithOptions, menuRe
278
286
  });
279
287
  }
280
288
 
281
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9maWVsZC9sZXhpY2FsL3BsdWdpbnMvU2xhc2hNZW51L0xleGljYWxUeXBlYWhlYWRNZW51UGx1Z2luL2luZGV4LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IExleGljYWxDb21tYW5kLCBMZXhpY2FsRWRpdG9yLCBSYW5nZVNlbGVjdGlvbiwgVGV4dE5vZGUgfSBmcm9tICdsZXhpY2FsJ1xuXG5pbXBvcnQgeyB1c2VMZXhpY2FsQ29tcG9zZXJDb250ZXh0IH0gZnJvbSAnQGxleGljYWwvcmVhY3QvTGV4aWNhbENvbXBvc2VyQ29udGV4dCdcbmltcG9ydCB7IG1lcmdlUmVnaXN0ZXIgfSBmcm9tICdAbGV4aWNhbC91dGlscydcbmltcG9ydCB7XG4gICRnZXRTZWxlY3Rpb24sXG4gICRpc1JhbmdlU2VsZWN0aW9uLFxuICAkaXNUZXh0Tm9kZSxcbiAgQ09NTUFORF9QUklPUklUWV9MT1csXG4gIGNyZWF0ZUNvbW1hbmQsXG59IGZyb20gJ2xleGljYWwnXG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB0eXBlIHtcbiAgTWVudVJlbmRlckZuLFxuICBNZW51UmVzb2x1dGlvbixcbiAgTWVudVRleHRNYXRjaCxcbiAgU2xhc2hNZW51R3JvdXAsXG4gIFNsYXNoTWVudU9wdGlvbixcbiAgVHJpZ2dlckZuLFxufSBmcm9tICcuL0xleGljYWxNZW51J1xuXG5pbXBvcnQgeyBMZXhpY2FsTWVudSwgdXNlTWVudUFuY2hvclJlZiB9IGZyb20gJy4vTGV4aWNhbE1lbnUnXG5cbmV4cG9ydCBjb25zdCBQVU5DVFVBVElPTiA9ICdcXFxcLixcXFxcK1xcXFwqXFxcXD9cXFxcJFxcXFxAXFxcXHwje31cXFxcKFxcXFwpXFxcXF5cXFxcLVxcXFxbXFxcXF1cXFxcXFxcXC8hJVxcJ1wifj08Pl86OydcblxuZnVuY3Rpb24gZ2V0VGV4dFVwVG9BbmNob3Ioc2VsZWN0aW9uOiBSYW5nZVNlbGVjdGlvbik6IG51bGwgfCBzdHJpbmcge1xuICBjb25zdCBhbmNob3IgPSBzZWxlY3Rpb24uYW5jaG9yXG4gIGlmIChhbmNob3IudHlwZSAhPT0gJ3RleHQnKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuICBjb25zdCBhbmNob3JOb2RlID0gYW5jaG9yLmdldE5vZGUoKVxuICBpZiAoIWFuY2hvck5vZGUuaXNTaW1wbGVUZXh0KCkpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG4gIGNvbnN0IGFuY2hvck9mZnNldCA9IGFuY2hvci5vZmZzZXRcbiAgcmV0dXJuIGFuY2hvck5vZGUuZ2V0VGV4dENvbnRlbnQoKS5zbGljZSgwLCBhbmNob3JPZmZzZXQpXG59XG5cbmZ1bmN0aW9uIHRyeVRvUG9zaXRpb25SYW5nZShsZWFkT2Zmc2V0OiBudW1iZXIsIHJhbmdlOiBSYW5nZSwgZWRpdG9yV2luZG93OiBXaW5kb3cpOiBib29sZWFuIHtcbiAgY29uc3QgZG9tU2VsZWN0aW9uID0gZWRpdG9yV2luZG93LmdldFNlbGVjdGlvbigpXG4gIGlmIChkb21TZWxlY3Rpb24gPT09IG51bGwgfHwgIWRvbVNlbGVjdGlvbi5pc0NvbGxhcHNlZCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIGNvbnN0IGFuY2hvck5vZGUgPSBkb21TZWxlY3Rpb24uYW5jaG9yTm9kZVxuICBjb25zdCBzdGFydE9mZnNldCA9IGxlYWRPZmZzZXRcbiAgY29uc3QgZW5kT2Zmc2V0ID0gZG9tU2VsZWN0aW9uLmFuY2hvck9mZnNldFxuXG4gIGlmIChhbmNob3JOb2RlID09IG51bGwgfHwgZW5kT2Zmc2V0ID09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmFuZ2Uuc2V0U3RhcnQoYW5jaG9yTm9kZSwgc3RhcnRPZmZzZXQpXG4gICAgcmFuZ2Uuc2V0RW5kKGFuY2hvck5vZGUsIGVuZE9mZnNldClcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHJldHVybiB0cnVlXG59XG5cbmZ1bmN0aW9uIGdldFF1ZXJ5VGV4dEZvclNlYXJjaChlZGl0b3I6IExleGljYWxFZGl0b3IpOiBudWxsIHwgc3RyaW5nIHtcbiAgbGV0IHRleHQgPSBudWxsXG4gIGVkaXRvci5nZXRFZGl0b3JTdGF0ZSgpLnJlYWQoKCkgPT4ge1xuICAgIGNvbnN0IHNlbGVjdGlvbiA9ICRnZXRTZWxlY3Rpb24oKVxuICAgIGlmICghJGlzUmFuZ2VTZWxlY3Rpb24oc2VsZWN0aW9uKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHRleHQgPSBnZXRUZXh0VXBUb0FuY2hvcihzZWxlY3Rpb24pXG4gIH0pXG4gIHJldHVybiB0ZXh0XG59XG5cbmZ1bmN0aW9uIGlzU2VsZWN0aW9uT25FbnRpdHlCb3VuZGFyeShlZGl0b3I6IExleGljYWxFZGl0b3IsIG9mZnNldDogbnVtYmVyKTogYm9vbGVhbiB7XG4gIGlmIChvZmZzZXQgIT09IDApIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICByZXR1cm4gZWRpdG9yLmdldEVkaXRvclN0YXRlKCkucmVhZCgoKSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0aW9uID0gJGdldFNlbGVjdGlvbigpXG4gICAgaWYgKCRpc1JhbmdlU2VsZWN0aW9uKHNlbGVjdGlvbikpIHtcbiAgICAgIGNvbnN0IGFuY2hvciA9IHNlbGVjdGlvbi5hbmNob3JcbiAgICAgIGNvbnN0IGFuY2hvck5vZGUgPSBhbmNob3IuZ2V0Tm9kZSgpXG4gICAgICBjb25zdCBwcmV2U2libGluZyA9IGFuY2hvck5vZGUuZ2V0UHJldmlvdXNTaWJsaW5nKClcbiAgICAgIHJldHVybiAkaXNUZXh0Tm9kZShwcmV2U2libGluZykgJiYgcHJldlNpYmxpbmcuaXNUZXh0RW50aXR5KClcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH0pXG59XG5cbmZ1bmN0aW9uIHN0YXJ0VHJhbnNpdGlvbihjYWxsYmFjazogKCkgPT4gdm9pZCkge1xuICBpZiAoUmVhY3Quc3RhcnRUcmFuc2l0aW9uKSB7XG4gICAgUmVhY3Quc3RhcnRUcmFuc2l0aW9uKGNhbGxiYWNrKVxuICB9IGVsc2Uge1xuICAgIGNhbGxiYWNrKClcbiAgfVxufVxuXG4vLyBHb3QgZnJvbSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNDI1NDM5MDgvMjAxMzU4MFxuZXhwb3J0IGZ1bmN0aW9uIGdldFNjcm9sbFBhcmVudChcbiAgZWxlbWVudDogSFRNTEVsZW1lbnQsXG4gIGluY2x1ZGVIaWRkZW46IGJvb2xlYW4sXG4pOiBIVE1MQm9keUVsZW1lbnQgfCBIVE1MRWxlbWVudCB7XG4gIGxldCBzdHlsZSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudClcbiAgY29uc3QgZXhjbHVkZVN0YXRpY1BhcmVudCA9IHN0eWxlLnBvc2l0aW9uID09PSAnYWJzb2x1dGUnXG4gIGNvbnN0IG92ZXJmbG93UmVnZXggPSBpbmNsdWRlSGlkZGVuID8gLyhhdXRvfHNjcm9sbHxoaWRkZW4pLyA6IC8oYXV0b3xzY3JvbGwpL1xuICBpZiAoc3R5bGUucG9zaXRpb24gPT09ICdmaXhlZCcpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuYm9keVxuICB9XG4gIGZvciAobGV0IHBhcmVudDogSFRNTEVsZW1lbnQgfCBudWxsID0gZWxlbWVudDsgKHBhcmVudCA9IHBhcmVudC5wYXJlbnRFbGVtZW50KTsgKSB7XG4gICAgc3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKHBhcmVudClcbiAgICBpZiAoZXhjbHVkZVN0YXRpY1BhcmVudCAmJiBzdHlsZS5wb3NpdGlvbiA9PT0gJ3N0YXRpYycpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGlmIChvdmVyZmxvd1JlZ2V4LnRlc3Qoc3R5bGUub3ZlcmZsb3cgKyBzdHlsZS5vdmVyZmxvd1kgKyBzdHlsZS5vdmVyZmxvd1gpKSB7XG4gICAgICByZXR1cm4gcGFyZW50XG4gICAgfVxuICB9XG4gIHJldHVybiBkb2N1bWVudC5ib2R5XG59XG5cbmV4cG9ydCB7IHVzZUR5bmFtaWNQb3NpdGlvbmluZyB9IGZyb20gJy4vTGV4aWNhbE1lbnUnXG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VCYXNpY1R5cGVhaGVhZFRyaWdnZXJNYXRjaChcbiAgdHJpZ2dlcjogc3RyaW5nLFxuICB7IG1heExlbmd0aCA9IDc1LCBtaW5MZW5ndGggPSAxIH06IHsgbWF4TGVuZ3RoPzogbnVtYmVyOyBtaW5MZW5ndGg/OiBudW1iZXIgfSxcbik6IFRyaWdnZXJGbiB7XG4gIHJldHVybiB1c2VDYWxsYmFjayhcbiAgICAodGV4dDogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCB2YWxpZENoYXJzID0gJ1teJyArIHRyaWdnZXIgKyBQVU5DVFVBVElPTiArICdcXFxcc10nXG4gICAgICBjb25zdCBUeXBlYWhlYWRUcmlnZ2VyUmVnZXggPSBuZXcgUmVnRXhwKFxuICAgICAgICAnKF58XFxcXHN8XFxcXCgpKCcgK1xuICAgICAgICAgICdbJyArXG4gICAgICAgICAgdHJpZ2dlciArXG4gICAgICAgICAgJ10nICtcbiAgICAgICAgICAnKCg/OicgK1xuICAgICAgICAgIHZhbGlkQ2hhcnMgK1xuICAgICAgICAgICcpezAsJyArXG4gICAgICAgICAgbWF4TGVuZ3RoICtcbiAgICAgICAgICAnfSknICtcbiAgICAgICAgICAnKSQnLFxuICAgICAgKVxuICAgICAgY29uc3QgbWF0Y2ggPSBUeXBlYWhlYWRUcmlnZ2VyUmVnZXguZXhlYyh0ZXh0KVxuICAgICAgaWYgKG1hdGNoICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IG1heWJlTGVhZGluZ1doaXRlc3BhY2UgPSBtYXRjaFsxXVxuICAgICAgICBjb25zdCBtYXRjaGluZ1N0cmluZyA9IG1hdGNoWzNdXG4gICAgICAgIGlmIChtYXRjaGluZ1N0cmluZy5sZW5ndGggPj0gbWluTGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxlYWRPZmZzZXQ6IG1hdGNoLmluZGV4ICsgbWF5YmVMZWFkaW5nV2hpdGVzcGFjZS5sZW5ndGgsXG4gICAgICAgICAgICBtYXRjaGluZ1N0cmluZyxcbiAgICAgICAgICAgIHJlcGxhY2VhYmxlU3RyaW5nOiBtYXRjaFsyXSxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsXG4gICAgfSxcbiAgICBbbWF4TGVuZ3RoLCBtaW5MZW5ndGgsIHRyaWdnZXJdLFxuICApXG59XG5cbmV4cG9ydCB0eXBlIFR5cGVhaGVhZE1lbnVQbHVnaW5Qcm9wcyA9IHtcbiAgYW5jaG9yQ2xhc3NOYW1lPzogc3RyaW5nXG4gIGdyb3Vwc1dpdGhPcHRpb25zOiBBcnJheTxTbGFzaE1lbnVHcm91cD5cbiAgbWVudVJlbmRlckZuOiBNZW51UmVuZGVyRm5cbiAgb25DbG9zZT86ICgpID0+IHZvaWRcbiAgb25PcGVuPzogKHJlc29sdXRpb246IE1lbnVSZXNvbHV0aW9uKSA9PiB2b2lkXG4gIG9uUXVlcnlDaGFuZ2U6IChtYXRjaGluZ1N0cmluZzogbnVsbCB8IHN0cmluZykgPT4gdm9pZFxuICBvblNlbGVjdE9wdGlvbjogKFxuICAgIG9wdGlvbjogU2xhc2hNZW51T3B0aW9uLFxuICAgIHRleHROb2RlQ29udGFpbmluZ1F1ZXJ5OiBUZXh0Tm9kZSB8IG51bGwsXG4gICAgY2xvc2VNZW51OiAoKSA9PiB2b2lkLFxuICAgIG1hdGNoaW5nU3RyaW5nOiBzdHJpbmcsXG4gICkgPT4gdm9pZFxuICB0cmlnZ2VyRm46IFRyaWdnZXJGblxufVxuXG5leHBvcnQgY29uc3QgRU5BQkxFX1NMQVNIX01FTlVfQ09NTUFORDogTGV4aWNhbENvbW1hbmQ8e1xuICByZWN0OiBET01SZWN0XG59PiA9IGNyZWF0ZUNvbW1hbmQoJ0VOQUJMRV9TTEFTSF9NRU5VX0NPTU1BTkQnKVxuXG5leHBvcnQgZnVuY3Rpb24gTGV4aWNhbFR5cGVhaGVhZE1lbnVQbHVnaW4oe1xuICBhbmNob3JDbGFzc05hbWUsXG4gIGdyb3Vwc1dpdGhPcHRpb25zLFxuICBtZW51UmVuZGVyRm4sXG4gIG9uQ2xvc2UsXG4gIG9uT3BlbixcbiAgb25RdWVyeUNoYW5nZSxcbiAgb25TZWxlY3RPcHRpb24sXG4gIHRyaWdnZXJGbixcbn06IFR5cGVhaGVhZE1lbnVQbHVnaW5Qcm9wcyk6IEpTWC5FbGVtZW50IHwgbnVsbCB7XG4gIGNvbnN0IFtlZGl0b3JdID0gdXNlTGV4aWNhbENvbXBvc2VyQ29udGV4dCgpXG4gIGNvbnN0IFtyZXNvbHV0aW9uLCBzZXRSZXNvbHV0aW9uXSA9IHVzZVN0YXRlPE1lbnVSZXNvbHV0aW9uIHwgbnVsbD4obnVsbClcbiAgY29uc3QgYW5jaG9yRWxlbWVudFJlZiA9IHVzZU1lbnVBbmNob3JSZWYocmVzb2x1dGlvbiwgc2V0UmVzb2x1dGlvbiwgYW5jaG9yQ2xhc3NOYW1lKVxuXG4gIGNvbnN0IGNsb3NlVHlwZWFoZWFkID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldFJlc29sdXRpb24obnVsbClcbiAgICBpZiAob25DbG9zZSAhPSBudWxsICYmIHJlc29sdXRpb24gIT09IG51bGwpIHtcbiAgICAgIG9uQ2xvc2UoKVxuICAgIH1cbiAgfSwgW29uQ2xvc2UsIHJlc29sdXRpb25dKVxuXG4gIGNvbnN0IG9wZW5UeXBlYWhlYWQgPSB1c2VDYWxsYmFjayhcbiAgICAocmVzOiBNZW51UmVzb2x1dGlvbikgPT4ge1xuICAgICAgc2V0UmVzb2x1dGlvbihyZXMpXG4gICAgICBpZiAob25PcGVuICE9IG51bGwgJiYgcmVzb2x1dGlvbiA9PT0gbnVsbCkge1xuICAgICAgICBvbk9wZW4ocmVzKVxuICAgICAgfVxuICAgIH0sXG4gICAgW29uT3BlbiwgcmVzb2x1dGlvbl0sXG4gIClcblxuICAvLyBUaGlzIGlzIG1haW5seSB1c2VkIGZvciB0aGUgQWRkQmxvY2tIYW5kbGVQbHVnaW4sIHNvIHRoYXQgdGhlIHNsYXNoIG1lbnUgY2FuIGJlIG9wZW5lZCBmcm9tIHRoZXJlXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgcmV0dXJuIG1lcmdlUmVnaXN0ZXIoXG4gICAgICBlZGl0b3IucmVnaXN0ZXJDb21tYW5kKFxuICAgICAgICBFTkFCTEVfU0xBU0hfTUVOVV9DT01NQU5ELFxuICAgICAgICAoeyByZWN0IH0pID0+IHtcbiAgICAgICAgICBlZGl0b3IuZ2V0RWRpdG9yU3RhdGUoKS5yZWFkKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoOiBNZW51VGV4dE1hdGNoID0ge1xuICAgICAgICAgICAgICBsZWFkT2Zmc2V0OiAwLFxuICAgICAgICAgICAgICBtYXRjaGluZ1N0cmluZzogJycsXG4gICAgICAgICAgICAgIHJlcGxhY2VhYmxlU3RyaW5nOiAnJyxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaCAhPT0gbnVsbCAmJiAhaXNTZWxlY3Rpb25PbkVudGl0eUJvdW5kYXJ5KGVkaXRvciwgbWF0Y2gubGVhZE9mZnNldCkpIHtcbiAgICAgICAgICAgICAgaWYgKHJlY3QgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBzdGFydFRyYW5zaXRpb24oKCkgPT5cbiAgICAgICAgICAgICAgICAgIG9wZW5UeXBlYWhlYWQoe1xuICAgICAgICAgICAgICAgICAgICBnZXRSZWN0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlY3RcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2gsXG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgQ09NTUFORF9QUklPUklUWV9MT1csXG4gICAgICApLFxuICAgIClcbiAgfSwgW2VkaXRvciwgb3BlblR5cGVhaGVhZF0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCB1cGRhdGVMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAgIGVkaXRvci5nZXRFZGl0b3JTdGF0ZSgpLnJlYWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBlZGl0b3JXaW5kb3cgPSBlZGl0b3IuX3dpbmRvdyA/PyB3aW5kb3dcbiAgICAgICAgY29uc3QgcmFuZ2UgPSBlZGl0b3JXaW5kb3cuZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKVxuICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSAkZ2V0U2VsZWN0aW9uKClcbiAgICAgICAgY29uc3QgdGV4dCA9IGdldFF1ZXJ5VGV4dEZvclNlYXJjaChlZGl0b3IpXG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICEkaXNSYW5nZVNlbGVjdGlvbihzZWxlY3Rpb24pIHx8XG4gICAgICAgICAgIXNlbGVjdGlvbi5pc0NvbGxhcHNlZCgpIHx8XG4gICAgICAgICAgdGV4dCA9PT0gbnVsbCB8fFxuICAgICAgICAgIHJhbmdlID09PSBudWxsXG4gICAgICAgICkge1xuICAgICAgICAgIGNsb3NlVHlwZWFoZWFkKClcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1hdGNoID0gdHJpZ2dlckZuKHRleHQsIGVkaXRvcilcbiAgICAgICAgb25RdWVyeUNoYW5nZShtYXRjaCA/IG1hdGNoLm1hdGNoaW5nU3RyaW5nIDogbnVsbClcblxuICAgICAgICBpZiAobWF0Y2ggIT09IG51bGwgJiYgIWlzU2VsZWN0aW9uT25FbnRpdHlCb3VuZGFyeShlZGl0b3IsIG1hdGNoLmxlYWRPZmZzZXQpKSB7XG4gICAgICAgICAgY29uc3QgaXNSYW5nZVBvc2l0aW9uZWQgPSB0cnlUb1Bvc2l0aW9uUmFuZ2UobWF0Y2gubGVhZE9mZnNldCwgcmFuZ2UsIGVkaXRvcldpbmRvdylcbiAgICAgICAgICBpZiAoaXNSYW5nZVBvc2l0aW9uZWQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHN0YXJ0VHJhbnNpdGlvbigoKSA9PlxuICAgICAgICAgICAgICBvcGVuVHlwZWFoZWFkKHtcbiAgICAgICAgICAgICAgICBnZXRSZWN0OiAoKSA9PiByYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcbiAgICAgICAgICAgICAgICBtYXRjaCxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2xvc2VUeXBlYWhlYWQoKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBjb25zdCByZW1vdmVVcGRhdGVMaXN0ZW5lciA9IGVkaXRvci5yZWdpc3RlclVwZGF0ZUxpc3RlbmVyKHVwZGF0ZUxpc3RlbmVyKVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHJlbW92ZVVwZGF0ZUxpc3RlbmVyKClcbiAgICB9XG4gIH0sIFtlZGl0b3IsIHRyaWdnZXJGbiwgb25RdWVyeUNoYW5nZSwgcmVzb2x1dGlvbiwgY2xvc2VUeXBlYWhlYWQsIG9wZW5UeXBlYWhlYWRdKVxuXG4gIHJldHVybiByZXNvbHV0aW9uID09PSBudWxsIHx8IGVkaXRvciA9PT0gbnVsbCA/IG51bGwgOiAoXG4gICAgPExleGljYWxNZW51XG4gICAgICBhbmNob3JFbGVtZW50UmVmPXthbmNob3JFbGVtZW50UmVmfVxuICAgICAgY2xvc2U9e2Nsb3NlVHlwZWFoZWFkfVxuICAgICAgZWRpdG9yPXtlZGl0b3J9XG4gICAgICBncm91cHNXaXRoT3B0aW9ucz17Z3JvdXBzV2l0aE9wdGlvbnN9XG4gICAgICBtZW51UmVuZGVyRm49e21lbnVSZW5kZXJGbn1cbiAgICAgIG9uU2VsZWN0T3B0aW9uPXtvblNlbGVjdE9wdGlvbn1cbiAgICAgIHJlc29sdXRpb249e3Jlc29sdXRpb259XG4gICAgICBzaG91bGRTcGxpdE5vZGVXaXRoUXVlcnlcbiAgICAvPlxuICApXG59XG5cbmV4cG9ydCB7IE1lbnVSZW5kZXJGbiwgTWVudVJlc29sdXRpb24sIE1lbnVUZXh0TWF0Y2gsIFRyaWdnZXJGbiB9XG4iXSwibmFtZXMiOlsiUFVOQ1RVQVRJT04iLCJnZXRTY3JvbGxQYXJlbnQiLCJ1c2VEeW5hbWljUG9zaXRpb25pbmciLCJ1c2VCYXNpY1R5cGVhaGVhZFRyaWdnZXJNYXRjaCIsIkVOQUJMRV9TTEFTSF9NRU5VX0NPTU1BTkQiLCJMZXhpY2FsVHlwZWFoZWFkTWVudVBsdWdpbiIsImdldFRleHRVcFRvQW5jaG9yIiwic2VsZWN0aW9uIiwiYW5jaG9yIiwidHlwZSIsImFuY2hvck5vZGUiLCJnZXROb2RlIiwiaXNTaW1wbGVUZXh0IiwiYW5jaG9yT2Zmc2V0Iiwib2Zmc2V0IiwiZ2V0VGV4dENvbnRlbnQiLCJzbGljZSIsInRyeVRvUG9zaXRpb25SYW5nZSIsImxlYWRPZmZzZXQiLCJyYW5nZSIsImVkaXRvcldpbmRvdyIsImRvbVNlbGVjdGlvbiIsImdldFNlbGVjdGlvbiIsImlzQ29sbGFwc2VkIiwic3RhcnRPZmZzZXQiLCJlbmRPZmZzZXQiLCJzZXRTdGFydCIsInNldEVuZCIsImVycm9yIiwiZ2V0UXVlcnlUZXh0Rm9yU2VhcmNoIiwiZWRpdG9yIiwidGV4dCIsImdldEVkaXRvclN0YXRlIiwicmVhZCIsIiRnZXRTZWxlY3Rpb24iLCIkaXNSYW5nZVNlbGVjdGlvbiIsImlzU2VsZWN0aW9uT25FbnRpdHlCb3VuZGFyeSIsInByZXZTaWJsaW5nIiwiZ2V0UHJldmlvdXNTaWJsaW5nIiwiJGlzVGV4dE5vZGUiLCJpc1RleHRFbnRpdHkiLCJzdGFydFRyYW5zaXRpb24iLCJjYWxsYmFjayIsIlJlYWN0IiwiZWxlbWVudCIsImluY2x1ZGVIaWRkZW4iLCJzdHlsZSIsImdldENvbXB1dGVkU3R5bGUiLCJleGNsdWRlU3RhdGljUGFyZW50IiwicG9zaXRpb24iLCJvdmVyZmxvd1JlZ2V4IiwiZG9jdW1lbnQiLCJib2R5IiwicGFyZW50IiwicGFyZW50RWxlbWVudCIsInRlc3QiLCJvdmVyZmxvdyIsIm92ZXJmbG93WSIsIm92ZXJmbG93WCIsInRyaWdnZXIiLCJtYXhMZW5ndGgiLCJtaW5MZW5ndGgiLCJ1c2VDYWxsYmFjayIsInZhbGlkQ2hhcnMiLCJUeXBlYWhlYWRUcmlnZ2VyUmVnZXgiLCJSZWdFeHAiLCJtYXRjaCIsImV4ZWMiLCJtYXliZUxlYWRpbmdXaGl0ZXNwYWNlIiwibWF0Y2hpbmdTdHJpbmciLCJsZW5ndGgiLCJpbmRleCIsInJlcGxhY2VhYmxlU3RyaW5nIiwiY3JlYXRlQ29tbWFuZCIsImFuY2hvckNsYXNzTmFtZSIsImdyb3Vwc1dpdGhPcHRpb25zIiwibWVudVJlbmRlckZuIiwib25DbG9zZSIsIm9uT3BlbiIsIm9uUXVlcnlDaGFuZ2UiLCJvblNlbGVjdE9wdGlvbiIsInRyaWdnZXJGbiIsInVzZUxleGljYWxDb21wb3NlckNvbnRleHQiLCJyZXNvbHV0aW9uIiwic2V0UmVzb2x1dGlvbiIsInVzZVN0YXRlIiwiYW5jaG9yRWxlbWVudFJlZiIsInVzZU1lbnVBbmNob3JSZWYiLCJjbG9zZVR5cGVhaGVhZCIsIm9wZW5UeXBlYWhlYWQiLCJyZXMiLCJ1c2VFZmZlY3QiLCJtZXJnZVJlZ2lzdGVyIiwicmVnaXN0ZXJDb21tYW5kIiwicmVjdCIsImdldFJlY3QiLCJDT01NQU5EX1BSSU9SSVRZX0xPVyIsInVwZGF0ZUxpc3RlbmVyIiwiX3dpbmRvdyIsIndpbmRvdyIsImNyZWF0ZVJhbmdlIiwiaXNSYW5nZVBvc2l0aW9uZWQiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJyZW1vdmVVcGRhdGVMaXN0ZW5lciIsInJlZ2lzdGVyVXBkYXRlTGlzdGVuZXIiLCJMZXhpY2FsTWVudSIsImNsb3NlIiwic2hvdWxkU3BsaXROb2RlV2l0aFF1ZXJ5Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztJQXlCYUEsV0FBVztlQUFYQTs7SUEyRUdDLGVBQWU7ZUFBZkE7O0lBc0JQQyxxQkFBcUI7ZUFBckJBLGtDQUFxQjs7SUFFZEMsNkJBQTZCO2VBQTdCQTs7SUFxREhDLHlCQUF5QjtlQUF6QkE7O0lBSUdDLDBCQUEwQjtlQUExQkE7Ozt3Q0FuTDBCO3VCQUNaO3lCQU92QjsrREFDMEM7NkJBWUg7Ozs7Ozs7Ozs7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
289
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9maWVsZC9sZXhpY2FsL3BsdWdpbnMvU2xhc2hNZW51L0xleGljYWxUeXBlYWhlYWRNZW51UGx1Z2luL2luZGV4LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG4gIExleGljYWxDb21tYW5kLFxuICBMZXhpY2FsRWRpdG9yLFxuICBQYXJhZ3JhcGhOb2RlLFxuICBSYW5nZVNlbGVjdGlvbixcbiAgVGV4dE5vZGUsXG59IGZyb20gJ2xleGljYWwnXG5cbmltcG9ydCB7IHVzZUxleGljYWxDb21wb3NlckNvbnRleHQgfSBmcm9tICdAbGV4aWNhbC9yZWFjdC9MZXhpY2FsQ29tcG9zZXJDb250ZXh0J1xuaW1wb3J0IHsgbWVyZ2VSZWdpc3RlciB9IGZyb20gJ0BsZXhpY2FsL3V0aWxzJ1xuaW1wb3J0IHtcbiAgJGdldFNlbGVjdGlvbixcbiAgJGlzUmFuZ2VTZWxlY3Rpb24sXG4gICRpc1RleHROb2RlLFxuICBDT01NQU5EX1BSSU9SSVRZX0xPVyxcbiAgY3JlYXRlQ29tbWFuZCxcbn0gZnJvbSAnbGV4aWNhbCdcbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHR5cGUge1xuICBNZW51UmVuZGVyRm4sXG4gIE1lbnVSZXNvbHV0aW9uLFxuICBNZW51VGV4dE1hdGNoLFxuICBTbGFzaE1lbnVHcm91cCxcbiAgU2xhc2hNZW51T3B0aW9uLFxuICBUcmlnZ2VyRm4sXG59IGZyb20gJy4vTGV4aWNhbE1lbnUnXG5cbmltcG9ydCB7IExleGljYWxNZW51LCB1c2VNZW51QW5jaG9yUmVmIH0gZnJvbSAnLi9MZXhpY2FsTWVudSdcblxuZXhwb3J0IGNvbnN0IFBVTkNUVUFUSU9OID0gJ1xcXFwuLFxcXFwrXFxcXCpcXFxcP1xcXFwkXFxcXEBcXFxcfCN7fVxcXFwoXFxcXClcXFxcXlxcXFwtXFxcXFtcXFxcXVxcXFxcXFxcLyElXFwnXCJ+PTw+Xzo7J1xuXG5mdW5jdGlvbiBnZXRUZXh0VXBUb0FuY2hvcihzZWxlY3Rpb246IFJhbmdlU2VsZWN0aW9uKTogbnVsbCB8IHN0cmluZyB7XG4gIGNvbnN0IGFuY2hvciA9IHNlbGVjdGlvbi5hbmNob3JcbiAgaWYgKGFuY2hvci50eXBlICE9PSAndGV4dCcpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG4gIGNvbnN0IGFuY2hvck5vZGUgPSBhbmNob3IuZ2V0Tm9kZSgpXG4gIGlmICghYW5jaG9yTm9kZS5pc1NpbXBsZVRleHQoKSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgY29uc3QgYW5jaG9yT2Zmc2V0ID0gYW5jaG9yLm9mZnNldFxuICByZXR1cm4gYW5jaG9yTm9kZS5nZXRUZXh0Q29udGVudCgpLnNsaWNlKDAsIGFuY2hvck9mZnNldClcbn1cblxuZnVuY3Rpb24gdHJ5VG9Qb3NpdGlvblJhbmdlKGxlYWRPZmZzZXQ6IG51bWJlciwgcmFuZ2U6IFJhbmdlLCBlZGl0b3JXaW5kb3c6IFdpbmRvdyk6IGJvb2xlYW4ge1xuICBjb25zdCBkb21TZWxlY3Rpb24gPSBlZGl0b3JXaW5kb3cuZ2V0U2VsZWN0aW9uKClcbiAgaWYgKGRvbVNlbGVjdGlvbiA9PT0gbnVsbCB8fCAhZG9tU2VsZWN0aW9uLmlzQ29sbGFwc2VkKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgY29uc3QgYW5jaG9yTm9kZSA9IGRvbVNlbGVjdGlvbi5hbmNob3JOb2RlXG4gIGNvbnN0IHN0YXJ0T2Zmc2V0ID0gbGVhZE9mZnNldFxuICBjb25zdCBlbmRPZmZzZXQgPSBkb21TZWxlY3Rpb24uYW5jaG9yT2Zmc2V0XG5cbiAgaWYgKGFuY2hvck5vZGUgPT0gbnVsbCB8fCBlbmRPZmZzZXQgPT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgdHJ5IHtcbiAgICByYW5nZS5zZXRTdGFydChhbmNob3JOb2RlLCBzdGFydE9mZnNldClcbiAgICAvLyBpZiBlbmRPZmZzZXQgaXMgMCwgcG9zaXRpb25pbmcgdGhlIHJhbmdlIGZvciB3aGVuIHlvdSBjbGljayB0aGUgcGx1cyBidXR0b24gdG8gb3BlbiB0aGUgc2xhc2ggbWVudSB3aWxsIGZpYWxcbiAgICByYW5nZS5zZXRFbmQoYW5jaG9yTm9kZSwgZW5kT2Zmc2V0ID4gMSA/IGVuZE9mZnNldCA6IDEpXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiBnZXRRdWVyeVRleHRGb3JTZWFyY2goZWRpdG9yOiBMZXhpY2FsRWRpdG9yKTogbnVsbCB8IHN0cmluZyB7XG4gIGxldCB0ZXh0ID0gbnVsbFxuICBlZGl0b3IuZ2V0RWRpdG9yU3RhdGUoKS5yZWFkKCgpID0+IHtcbiAgICBjb25zdCBzZWxlY3Rpb24gPSAkZ2V0U2VsZWN0aW9uKClcbiAgICBpZiAoISRpc1JhbmdlU2VsZWN0aW9uKHNlbGVjdGlvbikpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICB0ZXh0ID0gZ2V0VGV4dFVwVG9BbmNob3Ioc2VsZWN0aW9uKVxuICB9KVxuICByZXR1cm4gdGV4dFxufVxuXG5mdW5jdGlvbiBpc1NlbGVjdGlvbk9uRW50aXR5Qm91bmRhcnkoZWRpdG9yOiBMZXhpY2FsRWRpdG9yLCBvZmZzZXQ6IG51bWJlcik6IGJvb2xlYW4ge1xuICBpZiAob2Zmc2V0ICE9PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgcmV0dXJuIGVkaXRvci5nZXRFZGl0b3JTdGF0ZSgpLnJlYWQoKCkgPT4ge1xuICAgIGNvbnN0IHNlbGVjdGlvbiA9ICRnZXRTZWxlY3Rpb24oKVxuICAgIGlmICgkaXNSYW5nZVNlbGVjdGlvbihzZWxlY3Rpb24pKSB7XG4gICAgICBjb25zdCBhbmNob3IgPSBzZWxlY3Rpb24uYW5jaG9yXG4gICAgICBjb25zdCBhbmNob3JOb2RlID0gYW5jaG9yLmdldE5vZGUoKVxuICAgICAgY29uc3QgcHJldlNpYmxpbmcgPSBhbmNob3JOb2RlLmdldFByZXZpb3VzU2libGluZygpXG4gICAgICByZXR1cm4gJGlzVGV4dE5vZGUocHJldlNpYmxpbmcpICYmIHByZXZTaWJsaW5nLmlzVGV4dEVudGl0eSgpXG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9KVxufVxuXG5mdW5jdGlvbiBzdGFydFRyYW5zaXRpb24oY2FsbGJhY2s6ICgpID0+IHZvaWQpIHtcbiAgaWYgKFJlYWN0LnN0YXJ0VHJhbnNpdGlvbikge1xuICAgIFJlYWN0LnN0YXJ0VHJhbnNpdGlvbihjYWxsYmFjaylcbiAgfSBlbHNlIHtcbiAgICBjYWxsYmFjaygpXG4gIH1cbn1cblxuLy8gR290IGZyb20gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzQyNTQzOTA4LzIwMTM1ODBcbmV4cG9ydCBmdW5jdGlvbiBnZXRTY3JvbGxQYXJlbnQoXG4gIGVsZW1lbnQ6IEhUTUxFbGVtZW50LFxuICBpbmNsdWRlSGlkZGVuOiBib29sZWFuLFxuKTogSFRNTEJvZHlFbGVtZW50IHwgSFRNTEVsZW1lbnQge1xuICBsZXQgc3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpXG4gIGNvbnN0IGV4Y2x1ZGVTdGF0aWNQYXJlbnQgPSBzdHlsZS5wb3NpdGlvbiA9PT0gJ2Fic29sdXRlJ1xuICBjb25zdCBvdmVyZmxvd1JlZ2V4ID0gaW5jbHVkZUhpZGRlbiA/IC8oYXV0b3xzY3JvbGx8aGlkZGVuKS8gOiAvKGF1dG98c2Nyb2xsKS9cbiAgaWYgKHN0eWxlLnBvc2l0aW9uID09PSAnZml4ZWQnKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmJvZHlcbiAgfVxuICBmb3IgKGxldCBwYXJlbnQ6IEhUTUxFbGVtZW50IHwgbnVsbCA9IGVsZW1lbnQ7IChwYXJlbnQgPSBwYXJlbnQucGFyZW50RWxlbWVudCk7ICkge1xuICAgIHN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShwYXJlbnQpXG4gICAgaWYgKGV4Y2x1ZGVTdGF0aWNQYXJlbnQgJiYgc3R5bGUucG9zaXRpb24gPT09ICdzdGF0aWMnKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBpZiAob3ZlcmZsb3dSZWdleC50ZXN0KHN0eWxlLm92ZXJmbG93ICsgc3R5bGUub3ZlcmZsb3dZICsgc3R5bGUub3ZlcmZsb3dYKSkge1xuICAgICAgcmV0dXJuIHBhcmVudFxuICAgIH1cbiAgfVxuICByZXR1cm4gZG9jdW1lbnQuYm9keVxufVxuXG5leHBvcnQgeyB1c2VEeW5hbWljUG9zaXRpb25pbmcgfSBmcm9tICcuL0xleGljYWxNZW51J1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlQmFzaWNUeXBlYWhlYWRUcmlnZ2VyTWF0Y2goXG4gIHRyaWdnZXI6IHN0cmluZyxcbiAgeyBtYXhMZW5ndGggPSA3NSwgbWluTGVuZ3RoID0gMSB9OiB7IG1heExlbmd0aD86IG51bWJlcjsgbWluTGVuZ3RoPzogbnVtYmVyIH0sXG4pOiBUcmlnZ2VyRm4ge1xuICByZXR1cm4gdXNlQ2FsbGJhY2soXG4gICAgKHRleHQ6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgdmFsaWRDaGFycyA9ICdbXicgKyB0cmlnZ2VyICsgUFVOQ1RVQVRJT04gKyAnXFxcXHNdJ1xuICAgICAgY29uc3QgVHlwZWFoZWFkVHJpZ2dlclJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgJyhefFxcXFxzfFxcXFwoKSgnICtcbiAgICAgICAgICAnWycgK1xuICAgICAgICAgIHRyaWdnZXIgK1xuICAgICAgICAgICddJyArXG4gICAgICAgICAgJygoPzonICtcbiAgICAgICAgICB2YWxpZENoYXJzICtcbiAgICAgICAgICAnKXswLCcgK1xuICAgICAgICAgIG1heExlbmd0aCArXG4gICAgICAgICAgJ30pJyArXG4gICAgICAgICAgJykkJyxcbiAgICAgIClcbiAgICAgIGNvbnN0IG1hdGNoID0gVHlwZWFoZWFkVHJpZ2dlclJlZ2V4LmV4ZWModGV4dClcbiAgICAgIGlmIChtYXRjaCAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBtYXliZUxlYWRpbmdXaGl0ZXNwYWNlID0gbWF0Y2hbMV1cbiAgICAgICAgY29uc3QgbWF0Y2hpbmdTdHJpbmcgPSBtYXRjaFszXVxuICAgICAgICBpZiAobWF0Y2hpbmdTdHJpbmcubGVuZ3RoID49IG1pbkxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsZWFkT2Zmc2V0OiBtYXRjaC5pbmRleCArIG1heWJlTGVhZGluZ1doaXRlc3BhY2UubGVuZ3RoLFxuICAgICAgICAgICAgbWF0Y2hpbmdTdHJpbmcsXG4gICAgICAgICAgICByZXBsYWNlYWJsZVN0cmluZzogbWF0Y2hbMl0sXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH0sXG4gICAgW21heExlbmd0aCwgbWluTGVuZ3RoLCB0cmlnZ2VyXSxcbiAgKVxufVxuXG5leHBvcnQgdHlwZSBUeXBlYWhlYWRNZW51UGx1Z2luUHJvcHMgPSB7XG4gIGFuY2hvckNsYXNzTmFtZT86IHN0cmluZ1xuICBncm91cHNXaXRoT3B0aW9uczogQXJyYXk8U2xhc2hNZW51R3JvdXA+XG4gIG1lbnVSZW5kZXJGbjogTWVudVJlbmRlckZuXG4gIG9uQ2xvc2U/OiAoKSA9PiB2b2lkXG4gIG9uT3Blbj86IChyZXNvbHV0aW9uOiBNZW51UmVzb2x1dGlvbikgPT4gdm9pZFxuICBvblF1ZXJ5Q2hhbmdlOiAobWF0Y2hpbmdTdHJpbmc6IG51bGwgfCBzdHJpbmcpID0+IHZvaWRcbiAgb25TZWxlY3RPcHRpb246IChcbiAgICBvcHRpb246IFNsYXNoTWVudU9wdGlvbixcbiAgICB0ZXh0Tm9kZUNvbnRhaW5pbmdRdWVyeTogVGV4dE5vZGUgfCBudWxsLFxuICAgIGNsb3NlTWVudTogKCkgPT4gdm9pZCxcbiAgICBtYXRjaGluZ1N0cmluZzogc3RyaW5nLFxuICApID0+IHZvaWRcbiAgdHJpZ2dlckZuOiBUcmlnZ2VyRm5cbn1cblxuZXhwb3J0IGNvbnN0IEVOQUJMRV9TTEFTSF9NRU5VX0NPTU1BTkQ6IExleGljYWxDb21tYW5kPHtcbiAgbm9kZTogUGFyYWdyYXBoTm9kZVxufT4gPSBjcmVhdGVDb21tYW5kKCdFTkFCTEVfU0xBU0hfTUVOVV9DT01NQU5EJylcblxuZXhwb3J0IGZ1bmN0aW9uIExleGljYWxUeXBlYWhlYWRNZW51UGx1Z2luKHtcbiAgYW5jaG9yQ2xhc3NOYW1lLFxuICBncm91cHNXaXRoT3B0aW9ucyxcbiAgbWVudVJlbmRlckZuLFxuICBvbkNsb3NlLFxuICBvbk9wZW4sXG4gIG9uUXVlcnlDaGFuZ2UsXG4gIG9uU2VsZWN0T3B0aW9uLFxuICB0cmlnZ2VyRm4sXG59OiBUeXBlYWhlYWRNZW51UGx1Z2luUHJvcHMpOiBKU1guRWxlbWVudCB8IG51bGwge1xuICBjb25zdCBbZWRpdG9yXSA9IHVzZUxleGljYWxDb21wb3NlckNvbnRleHQoKVxuICBjb25zdCBbcmVzb2x1dGlvbiwgc2V0UmVzb2x1dGlvbl0gPSB1c2VTdGF0ZTxNZW51UmVzb2x1dGlvbiB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGFuY2hvckVsZW1lbnRSZWYgPSB1c2VNZW51QW5jaG9yUmVmKHJlc29sdXRpb24sIHNldFJlc29sdXRpb24sIGFuY2hvckNsYXNzTmFtZSlcblxuICBjb25zdCBjbG9zZVR5cGVhaGVhZCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRSZXNvbHV0aW9uKG51bGwpXG4gICAgaWYgKG9uQ2xvc2UgIT0gbnVsbCAmJiByZXNvbHV0aW9uICE9PSBudWxsKSB7XG4gICAgICBvbkNsb3NlKClcbiAgICB9XG4gIH0sIFtvbkNsb3NlLCByZXNvbHV0aW9uXSlcblxuICBjb25zdCBvcGVuVHlwZWFoZWFkID0gdXNlQ2FsbGJhY2soXG4gICAgKHJlczogTWVudVJlc29sdXRpb24pID0+IHtcbiAgICAgIHNldFJlc29sdXRpb24ocmVzKVxuICAgICAgaWYgKG9uT3BlbiAhPSBudWxsICYmIHJlc29sdXRpb24gPT09IG51bGwpIHtcbiAgICAgICAgb25PcGVuKHJlcylcbiAgICAgIH1cbiAgICB9LFxuICAgIFtvbk9wZW4sIHJlc29sdXRpb25dLFxuICApXG5cbiAgLy8gVGhpcyBpcyBtYWlubHkgdXNlZCBmb3IgdGhlIEFkZEJsb2NrSGFuZGxlUGx1Z2luLCBzbyB0aGF0IHRoZSBzbGFzaCBtZW51IGNhbiBiZSBvcGVuZWQgZnJvbSB0aGVyZVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJldHVybiBtZXJnZVJlZ2lzdGVyKFxuICAgICAgZWRpdG9yLnJlZ2lzdGVyQ29tbWFuZChcbiAgICAgICAgRU5BQkxFX1NMQVNIX01FTlVfQ09NTUFORCxcbiAgICAgICAgKHsgbm9kZSB9KSA9PiB7XG4gICAgICAgICAgZWRpdG9yLmdldEVkaXRvclN0YXRlKCkucmVhZCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtYXRjaDogTWVudVRleHRNYXRjaCA9IHtcbiAgICAgICAgICAgICAgbGVhZE9mZnNldDogMCxcbiAgICAgICAgICAgICAgbWF0Y2hpbmdTdHJpbmc6ICcnLFxuICAgICAgICAgICAgICByZXBsYWNlYWJsZVN0cmluZzogJycsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWF0Y2ggIT09IG51bGwgJiYgIWlzU2VsZWN0aW9uT25FbnRpdHlCb3VuZGFyeShlZGl0b3IsIG1hdGNoLmxlYWRPZmZzZXQpKSB7XG4gICAgICAgICAgICAgIGlmIChub2RlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZWRpdG9yV2luZG93ID0gZWRpdG9yLl93aW5kb3cgPz8gd2luZG93XG4gICAgICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSBlZGl0b3JXaW5kb3cuZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKVxuXG4gICAgICAgICAgICAgICAgY29uc3QgaXNSYW5nZVBvc2l0aW9uZWQgPSB0cnlUb1Bvc2l0aW9uUmFuZ2UobWF0Y2gubGVhZE9mZnNldCwgcmFuZ2UsIGVkaXRvcldpbmRvdylcbiAgICAgICAgICAgICAgICBpZiAoaXNSYW5nZVBvc2l0aW9uZWQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgIHN0YXJ0VHJhbnNpdGlvbigoKSA9PlxuICAgICAgICAgICAgICAgICAgICBvcGVuVHlwZWFoZWFkKHtcbiAgICAgICAgICAgICAgICAgICAgICBnZXRSZWN0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIG1hdGNoLFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBDT01NQU5EX1BSSU9SSVRZX0xPVyxcbiAgICAgICksXG4gICAgKVxuICB9LCBbZWRpdG9yLCBvcGVuVHlwZWFoZWFkXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHVwZGF0ZUxpc3RlbmVyID0gKCkgPT4ge1xuICAgICAgZWRpdG9yLmdldEVkaXRvclN0YXRlKCkucmVhZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGVkaXRvcldpbmRvdyA9IGVkaXRvci5fd2luZG93ID8/IHdpbmRvd1xuICAgICAgICBjb25zdCByYW5nZSA9IGVkaXRvcldpbmRvdy5kb2N1bWVudC5jcmVhdGVSYW5nZSgpXG4gICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9ICRnZXRTZWxlY3Rpb24oKVxuICAgICAgICBjb25zdCB0ZXh0ID0gZ2V0UXVlcnlUZXh0Rm9yU2VhcmNoKGVkaXRvcilcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgISRpc1JhbmdlU2VsZWN0aW9uKHNlbGVjdGlvbikgfHxcbiAgICAgICAgICAhc2VsZWN0aW9uLmlzQ29sbGFwc2VkKCkgfHxcbiAgICAgICAgICB0ZXh0ID09PSBudWxsIHx8XG4gICAgICAgICAgcmFuZ2UgPT09IG51bGxcbiAgICAgICAgKSB7XG4gICAgICAgICAgY2xvc2VUeXBlYWhlYWQoKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbWF0Y2ggPSB0cmlnZ2VyRm4odGV4dCwgZWRpdG9yKVxuICAgICAgICBvblF1ZXJ5Q2hhbmdlKG1hdGNoID8gbWF0Y2gubWF0Y2hpbmdTdHJpbmcgOiBudWxsKVxuXG4gICAgICAgIGlmIChtYXRjaCAhPT0gbnVsbCAmJiAhaXNTZWxlY3Rpb25PbkVudGl0eUJvdW5kYXJ5KGVkaXRvciwgbWF0Y2gubGVhZE9mZnNldCkpIHtcbiAgICAgICAgICBjb25zdCBpc1JhbmdlUG9zaXRpb25lZCA9IHRyeVRvUG9zaXRpb25SYW5nZShtYXRjaC5sZWFkT2Zmc2V0LCByYW5nZSwgZWRpdG9yV2luZG93KVxuICAgICAgICAgIGlmIChpc1JhbmdlUG9zaXRpb25lZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgc3RhcnRUcmFuc2l0aW9uKCgpID0+XG4gICAgICAgICAgICAgIG9wZW5UeXBlYWhlYWQoe1xuICAgICAgICAgICAgICAgIGdldFJlY3Q6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiByYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbWF0Y2gsXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNsb3NlVHlwZWFoZWFkKClcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgY29uc3QgcmVtb3ZlVXBkYXRlTGlzdGVuZXIgPSBlZGl0b3IucmVnaXN0ZXJVcGRhdGVMaXN0ZW5lcih1cGRhdGVMaXN0ZW5lcilcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICByZW1vdmVVcGRhdGVMaXN0ZW5lcigpXG4gICAgfVxuICB9LCBbZWRpdG9yLCB0cmlnZ2VyRm4sIG9uUXVlcnlDaGFuZ2UsIHJlc29sdXRpb24sIGNsb3NlVHlwZWFoZWFkLCBvcGVuVHlwZWFoZWFkXSlcblxuICByZXR1cm4gcmVzb2x1dGlvbiA9PT0gbnVsbCB8fCBlZGl0b3IgPT09IG51bGwgPyBudWxsIDogKFxuICAgIDxMZXhpY2FsTWVudVxuICAgICAgYW5jaG9yRWxlbWVudFJlZj17YW5jaG9yRWxlbWVudFJlZn1cbiAgICAgIGNsb3NlPXtjbG9zZVR5cGVhaGVhZH1cbiAgICAgIGVkaXRvcj17ZWRpdG9yfVxuICAgICAgZ3JvdXBzV2l0aE9wdGlvbnM9e2dyb3Vwc1dpdGhPcHRpb25zfVxuICAgICAgbWVudVJlbmRlckZuPXttZW51UmVuZGVyRm59XG4gICAgICBvblNlbGVjdE9wdGlvbj17b25TZWxlY3RPcHRpb259XG4gICAgICByZXNvbHV0aW9uPXtyZXNvbHV0aW9ufVxuICAgICAgc2hvdWxkU3BsaXROb2RlV2l0aFF1ZXJ5XG4gICAgLz5cbiAgKVxufVxuXG5leHBvcnQgeyBNZW51UmVuZGVyRm4sIE1lbnVSZXNvbHV0aW9uLCBNZW51VGV4dE1hdGNoLCBUcmlnZ2VyRm4gfVxuIl0sIm5hbWVzIjpbIlBVTkNUVUFUSU9OIiwiZ2V0U2Nyb2xsUGFyZW50IiwidXNlRHluYW1pY1Bvc2l0aW9uaW5nIiwidXNlQmFzaWNUeXBlYWhlYWRUcmlnZ2VyTWF0Y2giLCJFTkFCTEVfU0xBU0hfTUVOVV9DT01NQU5EIiwiTGV4aWNhbFR5cGVhaGVhZE1lbnVQbHVnaW4iLCJnZXRUZXh0VXBUb0FuY2hvciIsInNlbGVjdGlvbiIsImFuY2hvciIsInR5cGUiLCJhbmNob3JOb2RlIiwiZ2V0Tm9kZSIsImlzU2ltcGxlVGV4dCIsImFuY2hvck9mZnNldCIsIm9mZnNldCIsImdldFRleHRDb250ZW50Iiwic2xpY2UiLCJ0cnlUb1Bvc2l0aW9uUmFuZ2UiLCJsZWFkT2Zmc2V0IiwicmFuZ2UiLCJlZGl0b3JXaW5kb3ciLCJkb21TZWxlY3Rpb24iLCJnZXRTZWxlY3Rpb24iLCJpc0NvbGxhcHNlZCIsInN0YXJ0T2Zmc2V0IiwiZW5kT2Zmc2V0Iiwic2V0U3RhcnQiLCJzZXRFbmQiLCJlcnJvciIsImdldFF1ZXJ5VGV4dEZvclNlYXJjaCIsImVkaXRvciIsInRleHQiLCJnZXRFZGl0b3JTdGF0ZSIsInJlYWQiLCIkZ2V0U2VsZWN0aW9uIiwiJGlzUmFuZ2VTZWxlY3Rpb24iLCJpc1NlbGVjdGlvbk9uRW50aXR5Qm91bmRhcnkiLCJwcmV2U2libGluZyIsImdldFByZXZpb3VzU2libGluZyIsIiRpc1RleHROb2RlIiwiaXNUZXh0RW50aXR5Iiwic3RhcnRUcmFuc2l0aW9uIiwiY2FsbGJhY2siLCJSZWFjdCIsImVsZW1lbnQiLCJpbmNsdWRlSGlkZGVuIiwic3R5bGUiLCJnZXRDb21wdXRlZFN0eWxlIiwiZXhjbHVkZVN0YXRpY1BhcmVudCIsInBvc2l0aW9uIiwib3ZlcmZsb3dSZWdleCIsImRvY3VtZW50IiwiYm9keSIsInBhcmVudCIsInBhcmVudEVsZW1lbnQiLCJ0ZXN0Iiwib3ZlcmZsb3ciLCJvdmVyZmxvd1kiLCJvdmVyZmxvd1giLCJ0cmlnZ2VyIiwibWF4TGVuZ3RoIiwibWluTGVuZ3RoIiwidXNlQ2FsbGJhY2siLCJ2YWxpZENoYXJzIiwiVHlwZWFoZWFkVHJpZ2dlclJlZ2V4IiwiUmVnRXhwIiwibWF0Y2giLCJleGVjIiwibWF5YmVMZWFkaW5nV2hpdGVzcGFjZSIsIm1hdGNoaW5nU3RyaW5nIiwibGVuZ3RoIiwiaW5kZXgiLCJyZXBsYWNlYWJsZVN0cmluZyIsImNyZWF0ZUNvbW1hbmQiLCJhbmNob3JDbGFzc05hbWUiLCJncm91cHNXaXRoT3B0aW9ucyIsIm1lbnVSZW5kZXJGbiIsIm9uQ2xvc2UiLCJvbk9wZW4iLCJvblF1ZXJ5Q2hhbmdlIiwib25TZWxlY3RPcHRpb24iLCJ0cmlnZ2VyRm4iLCJ1c2VMZXhpY2FsQ29tcG9zZXJDb250ZXh0IiwicmVzb2x1dGlvbiIsInNldFJlc29sdXRpb24iLCJ1c2VTdGF0ZSIsImFuY2hvckVsZW1lbnRSZWYiLCJ1c2VNZW51QW5jaG9yUmVmIiwiY2xvc2VUeXBlYWhlYWQiLCJvcGVuVHlwZWFoZWFkIiwicmVzIiwidXNlRWZmZWN0IiwibWVyZ2VSZWdpc3RlciIsInJlZ2lzdGVyQ29tbWFuZCIsIm5vZGUiLCJfd2luZG93Iiwid2luZG93IiwiY3JlYXRlUmFuZ2UiLCJpc1JhbmdlUG9zaXRpb25lZCIsImdldFJlY3QiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJDT01NQU5EX1BSSU9SSVRZX0xPVyIsInVwZGF0ZUxpc3RlbmVyIiwicmVtb3ZlVXBkYXRlTGlzdGVuZXIiLCJyZWdpc3RlclVwZGF0ZUxpc3RlbmVyIiwiTGV4aWNhbE1lbnUiLCJjbG9zZSIsInNob3VsZFNwbGl0Tm9kZVdpdGhRdWVyeSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7SUErQmFBLFdBQVc7ZUFBWEE7O0lBNEVHQyxlQUFlO2VBQWZBOztJQXNCUEMscUJBQXFCO2VBQXJCQSxrQ0FBcUI7O0lBRWRDLDZCQUE2QjtlQUE3QkE7O0lBcURIQyx5QkFBeUI7ZUFBekJBOztJQUlHQywwQkFBMEI7ZUFBMUJBOzs7d0NBcEwwQjt1QkFDWjt5QkFPdkI7K0RBQzBDOzZCQVlIOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRXZDLE1BQU1MLGNBQWM7QUFFM0IsU0FBU00sa0JBQWtCQyxTQUF5QjtJQUNsRCxNQUFNQyxTQUFTRCxVQUFVQyxNQUFNO0lBQy9CLElBQUlBLE9BQU9DLElBQUksS0FBSyxRQUFRO1FBQzFCLE9BQU87SUFDVDtJQUNBLE1BQU1DLGFBQWFGLE9BQU9HLE9BQU87SUFDakMsSUFBSSxDQUFDRCxXQUFXRSxZQUFZLElBQUk7UUFDOUIsT0FBTztJQUNUO0lBQ0EsTUFBTUMsZUFBZUwsT0FBT00sTUFBTTtJQUNsQyxPQUFPSixXQUFXSyxjQUFjLEdBQUdDLEtBQUssQ0FBQyxHQUFHSDtBQUM5QztBQUVBLFNBQVNJLG1CQUFtQkMsVUFBa0Is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
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/field/lexical/plugins/SlashMenu/index.tsx"],"names":[],"mappings":";AAeA,OAAO,cAAc,CAAA;AAsCrB,wBAAgB,eAAe,IAAI,GAAG,CAAC,OAAO,CAyI7C"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/field/lexical/plugins/SlashMenu/index.tsx"],"names":[],"mappings":";AAgBA,OAAO,cAAc,CAAA;AAkDrB,wBAAgB,eAAe,IAAI,GAAG,CAAC,OAAO,CAyI7C"}