obsidian-dev-utils 86.1.2 → 86.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/dist/dev/main.js +37333 -0
  3. package/dist/dev/manifest.json +9 -0
  4. package/dist/lib/cjs/__merged.cjs +34 -3
  5. package/dist/lib/cjs/__merged.d.cts +5 -4
  6. package/dist/lib/cjs/async-events.cjs +32 -3
  7. package/dist/lib/cjs/async-events.d.cts +63 -0
  8. package/dist/lib/cjs/disposable.cjs +103 -115
  9. package/dist/lib/cjs/disposable.d.cts +81 -57
  10. package/dist/lib/cjs/generated-during-build.cjs +1 -1
  11. package/dist/lib/cjs/obsidian/command-handlers/command-handler-component.cjs +48 -21
  12. package/dist/lib/cjs/obsidian/command-handlers/command-handler-component.d.cts +11 -8
  13. package/dist/lib/cjs/obsidian/command-handlers/open-demo-vault-command-handler.cjs +1 -1
  14. package/dist/lib/cjs/obsidian/community-plugins.cjs +109 -9
  15. package/dist/lib/cjs/obsidian/community-plugins.d.cts +175 -3
  16. package/dist/lib/cjs/obsidian/components/component-ex.cjs +18 -1
  17. package/dist/lib/cjs/obsidian/components/component-ex.d.cts +12 -0
  18. package/dist/lib/cjs/obsidian/components/menu-event-registrar-component.cjs +8 -4
  19. package/dist/lib/cjs/obsidian/components/menu-event-registrar-component.d.cts +7 -3
  20. package/dist/lib/cjs/obsidian/components/plugin-notice-component.cjs +5 -4
  21. package/dist/lib/cjs/obsidian/components/plugin-notice-component.d.cts +3 -2
  22. package/dist/lib/cjs/obsidian/desktop-demo-vault-opener.cjs +2 -7
  23. package/dist/lib/cjs/obsidian/events.cjs +165 -0
  24. package/dist/lib/cjs/obsidian/events.d.cts +98 -0
  25. package/dist/lib/cjs/obsidian/index.cjs +4 -1
  26. package/dist/lib/cjs/obsidian/index.d.cts +1 -0
  27. package/dist/lib/cjs/obsidian/menu-event-registrar.cjs +1 -1
  28. package/dist/lib/cjs/obsidian/menu-event-registrar.d.cts +7 -3
  29. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/change-extension-plugin.cjs +31 -33
  30. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/change-extension-plugin.d.cts +11 -0
  31. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.cjs +39 -52
  32. package/dist/lib/cjs/script-utils/linters/eslint-no-restricted-syntax.cjs +1 -5
  33. package/dist/lib/cjs/type.cjs +31 -12
  34. package/dist/lib/cjs/type.d.cts +56 -36
  35. package/dist/lib/esm/__merged.d.mts +5 -4
  36. package/dist/lib/esm/__merged.mjs +39 -5
  37. package/dist/lib/esm/async-events.d.mts +63 -0
  38. package/dist/lib/esm/async-events.mjs +29 -2
  39. package/dist/lib/esm/disposable.d.mts +81 -57
  40. package/dist/lib/esm/disposable.mjs +101 -115
  41. package/dist/lib/esm/generated-during-build.mjs +1 -1
  42. package/dist/lib/esm/obsidian/command-handlers/command-handler-component.d.mts +11 -8
  43. package/dist/lib/esm/obsidian/command-handlers/command-handler-component.mjs +49 -22
  44. package/dist/lib/esm/obsidian/command-handlers/open-demo-vault-command-handler.mjs +1 -1
  45. package/dist/lib/esm/obsidian/community-plugins.d.mts +175 -3
  46. package/dist/lib/esm/obsidian/community-plugins.mjs +100 -8
  47. package/dist/lib/esm/obsidian/components/component-ex.d.mts +12 -0
  48. package/dist/lib/esm/obsidian/components/component-ex.mjs +18 -1
  49. package/dist/lib/esm/obsidian/components/menu-event-registrar-component.d.mts +7 -3
  50. package/dist/lib/esm/obsidian/components/menu-event-registrar-component.mjs +8 -4
  51. package/dist/lib/esm/obsidian/components/plugin-notice-component.d.mts +3 -2
  52. package/dist/lib/esm/obsidian/components/plugin-notice-component.mjs +5 -4
  53. package/dist/lib/esm/obsidian/desktop-demo-vault-opener.mjs +5 -7
  54. package/dist/lib/esm/obsidian/events.d.mts +98 -0
  55. package/dist/lib/esm/obsidian/events.mjs +55 -0
  56. package/dist/lib/esm/obsidian/index.d.mts +1 -0
  57. package/dist/lib/esm/obsidian/index.mjs +3 -1
  58. package/dist/lib/esm/obsidian/menu-event-registrar.d.mts +7 -3
  59. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/change-extension-plugin.d.mts +11 -0
  60. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/change-extension-plugin.mjs +29 -32
  61. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.mjs +40 -55
  62. package/dist/lib/esm/script-utils/linters/eslint-no-restricted-syntax.mjs +1 -5
  63. package/dist/lib/esm/type.d.mts +56 -36
  64. package/dist/lib/esm/type.mjs +30 -11
  65. package/obsidian/events/package.json +6 -0
  66. package/package.json +18 -15
@@ -5,6 +5,7 @@
5
5
  * Registers menu event handlers with Obsidian's workspace, supporting editor, file, and multi-file context menus.
6
6
  */
7
7
  import type { App } from 'obsidian';
8
+ import type { DisposableEx } from '../../disposable.mjs';
8
9
  import type { EditorMenuEventHandler, FileMenuEventHandler, FilesMenuEventHandler, MenuEventRegistrar } from '../menu-event-registrar.mjs';
9
10
  import { ComponentEx } from './component-ex.mjs';
10
11
  /**
@@ -24,18 +25,21 @@ export declare class MenuEventRegistrarComponent extends ComponentEx implements
24
25
  * Registers a handler for the editor context menu event.
25
26
  *
26
27
  * @param handler - The handler to register.
28
+ * @returns A {@link DisposableEx} that unregisters the handler when disposed (or on component unload).
27
29
  */
28
- registerEditorMenuEventHandler(handler: EditorMenuEventHandler): void;
30
+ registerEditorMenuEventHandler(handler: EditorMenuEventHandler): DisposableEx;
29
31
  /**
30
32
  * Registers a handler for the single-file context menu event.
31
33
  *
32
34
  * @param handler - The handler to register.
35
+ * @returns A {@link DisposableEx} that unregisters the handler when disposed (or on component unload).
33
36
  */
34
- registerFileMenuEventHandler(handler: FileMenuEventHandler): void;
37
+ registerFileMenuEventHandler(handler: FileMenuEventHandler): DisposableEx;
35
38
  /**
36
39
  * Registers a handler for the multi-file context menu event.
37
40
  *
38
41
  * @param handler - The handler to register.
42
+ * @returns A {@link DisposableEx} that unregisters the handler when disposed (or on component unload).
39
43
  */
40
- registerFilesMenuEventHandler(handler: FilesMenuEventHandler): void;
44
+ registerFilesMenuEventHandler(handler: FilesMenuEventHandler): DisposableEx;
41
45
  }
@@ -21,6 +21,7 @@ if you want to view the source, please visit the github repository of this plugi
21
21
  globalThis.process = browserProcess;
22
22
  })();
23
23
 
24
+ import { EventRefDisposable } from "../events.mjs";
24
25
  import { ComponentEx } from "./component-ex.mjs";
25
26
  class MenuEventRegistrarComponent extends ComponentEx {
26
27
  /**
@@ -37,31 +38,34 @@ class MenuEventRegistrarComponent extends ComponentEx {
37
38
  * Registers a handler for the editor context menu event.
38
39
  *
39
40
  * @param handler - The handler to register.
41
+ * @returns A {@link DisposableEx} that unregisters the handler when disposed (or on component unload).
40
42
  */
41
43
  registerEditorMenuEventHandler(handler) {
42
44
  this.ensureLoaded();
43
- this.registerEvent(this.app.workspace.on("editor-menu", handler));
45
+ return this.registerDisposable(new EventRefDisposable(this.app.workspace.on("editor-menu", handler)));
44
46
  }
45
47
  /**
46
48
  * Registers a handler for the single-file context menu event.
47
49
  *
48
50
  * @param handler - The handler to register.
51
+ * @returns A {@link DisposableEx} that unregisters the handler when disposed (or on component unload).
49
52
  */
50
53
  registerFileMenuEventHandler(handler) {
51
54
  this.ensureLoaded();
52
- this.registerEvent(this.app.workspace.on("file-menu", handler));
55
+ return this.registerDisposable(new EventRefDisposable(this.app.workspace.on("file-menu", handler)));
53
56
  }
54
57
  /**
55
58
  * Registers a handler for the multi-file context menu event.
56
59
  *
57
60
  * @param handler - The handler to register.
61
+ * @returns A {@link DisposableEx} that unregisters the handler when disposed (or on component unload).
58
62
  */
59
63
  registerFilesMenuEventHandler(handler) {
60
64
  this.ensureLoaded();
61
- this.registerEvent(this.app.workspace.on("files-menu", handler));
65
+ return this.registerDisposable(new EventRefDisposable(this.app.workspace.on("files-menu", handler)));
62
66
  }
63
67
  }
64
68
  export {
65
69
  MenuEventRegistrarComponent
66
70
  };
67
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbXBvbmVudHMvbWVudS1ldmVudC1yZWdpc3RyYXItY29tcG9uZW50LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogUmVnaXN0ZXJzIG1lbnUgZXZlbnQgaGFuZGxlcnMgd2l0aCBPYnNpZGlhbidzIHdvcmtzcGFjZSwgc3VwcG9ydGluZyBlZGl0b3IsIGZpbGUsIGFuZCBtdWx0aS1maWxlIGNvbnRleHQgbWVudXMuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHtcbiAgRWRpdG9yTWVudUV2ZW50SGFuZGxlcixcbiAgRmlsZU1lbnVFdmVudEhhbmRsZXIsXG4gIEZpbGVzTWVudUV2ZW50SGFuZGxlcixcbiAgTWVudUV2ZW50UmVnaXN0cmFyXG59IGZyb20gJy4uL21lbnUtZXZlbnQtcmVnaXN0cmFyLnRzJztcblxuaW1wb3J0IHsgQ29tcG9uZW50RXggfSBmcm9tICcuL2NvbXBvbmVudC1leC50cyc7XG5cbi8qKlxuICoge0BsaW5rIE1lbnVFdmVudFJlZ2lzdHJhcn0gYmFja2VkIGJ5IE9ic2lkaWFuJ3Mge0BsaW5rIEFwcH0gd29ya3NwYWNlIGV2ZW50cy5cbiAqXG4gKiBFdmVudCBoYW5kbGVycyBhcmUgcmVnaXN0ZXJlZCB3aXRoIHRoZSBwcm92aWRlZCB7QGxpbmsgQ29tcG9uZW50fSBmb3IgbGlmZWN5Y2xlIG1hbmFnZW1lbnQuXG4gKi9cbmV4cG9ydCBjbGFzcyBNZW51RXZlbnRSZWdpc3RyYXJDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRFeCBpbXBsZW1lbnRzIE1lbnVFdmVudFJlZ2lzdHJhciB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGFwcC1iYWNrZWQgbWVudSBldmVudCByZWdpc3RyYXIuXG4gICAqXG4gICAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHByb3RlY3RlZCByZWFkb25seSBhcHA6IEFwcCkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGEgaGFuZGxlciBmb3IgdGhlIGVkaXRvciBjb250ZXh0IG1lbnUgZXZlbnQuXG4gICAqXG4gICAqIEBwYXJhbSBoYW5kbGVyIC0gVGhlIGhhbmRsZXIgdG8gcmVnaXN0ZXIuXG4gICAqL1xuICBwdWJsaWMgcmVnaXN0ZXJFZGl0b3JNZW51RXZlbnRIYW5kbGVyKGhhbmRsZXI6IEVkaXRvck1lbnVFdmVudEhhbmRsZXIpOiB2b2lkIHtcbiAgICB0aGlzLmVuc3VyZUxvYWRlZCgpO1xuICAgIHRoaXMucmVnaXN0ZXJFdmVudCh0aGlzLmFwcC53b3Jrc3BhY2Uub24oJ2VkaXRvci1tZW51JywgaGFuZGxlcikpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIGhhbmRsZXIgZm9yIHRoZSBzaW5nbGUtZmlsZSBjb250ZXh0IG1lbnUgZXZlbnQuXG4gICAqXG4gICAqIEBwYXJhbSBoYW5kbGVyIC0gVGhlIGhhbmRsZXIgdG8gcmVnaXN0ZXIuXG4gICAqL1xuICBwdWJsaWMgcmVnaXN0ZXJGaWxlTWVudUV2ZW50SGFuZGxlcihoYW5kbGVyOiBGaWxlTWVudUV2ZW50SGFuZGxlcik6IHZvaWQge1xuICAgIHRoaXMuZW5zdXJlTG9hZGVkKCk7XG4gICAgdGhpcy5yZWdpc3RlckV2ZW50KHRoaXMuYXBwLndvcmtzcGFjZS5vbignZmlsZS1tZW51JywgaGFuZGxlcikpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIGhhbmRsZXIgZm9yIHRoZSBtdWx0aS1maWxlIGNvbnRleHQgbWVudSBldmVudC5cbiAgICpcbiAgICogQHBhcmFtIGhhbmRsZXIgLSBUaGUgaGFuZGxlciB0byByZWdpc3Rlci5cbiAgICovXG4gIHB1YmxpYyByZWdpc3RlckZpbGVzTWVudUV2ZW50SGFuZGxlcihoYW5kbGVyOiBGaWxlc01lbnVFdmVudEhhbmRsZXIpOiB2b2lkIHtcbiAgICB0aGlzLmVuc3VyZUxvYWRlZCgpO1xuICAgIHRoaXMucmVnaXN0ZXJFdmVudCh0aGlzLmFwcC53b3Jrc3BhY2Uub24oJ2ZpbGVzLW1lbnUnLCBoYW5kbGVyKSk7XG4gIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBZUEsU0FBUyxtQkFBbUI7QUFPckIsTUFBTSxvQ0FBb0MsWUFBMEM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNbEYsWUFBK0IsS0FBVTtBQUM5QyxVQUFNO0FBRDhCO0FBQUEsRUFFdEM7QUFBQSxFQUZzQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVMvQiwrQkFBK0IsU0FBdUM7QUFDM0UsU0FBSyxhQUFhO0FBQ2xCLFNBQUssY0FBYyxLQUFLLElBQUksVUFBVSxHQUFHLGVBQWUsT0FBTyxDQUFDO0FBQUEsRUFDbEU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPTyw2QkFBNkIsU0FBcUM7QUFDdkUsU0FBSyxhQUFhO0FBQ2xCLFNBQUssY0FBYyxLQUFLLElBQUksVUFBVSxHQUFHLGFBQWEsT0FBTyxDQUFDO0FBQUEsRUFDaEU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPTyw4QkFBOEIsU0FBc0M7QUFDekUsU0FBSyxhQUFhO0FBQ2xCLFNBQUssY0FBYyxLQUFLLElBQUksVUFBVSxHQUFHLGNBQWMsT0FBTyxDQUFDO0FBQUEsRUFDakU7QUFDRjsiLAogICJuYW1lcyI6IFtdCn0K
71
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbXBvbmVudHMvbWVudS1ldmVudC1yZWdpc3RyYXItY29tcG9uZW50LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogUmVnaXN0ZXJzIG1lbnUgZXZlbnQgaGFuZGxlcnMgd2l0aCBPYnNpZGlhbidzIHdvcmtzcGFjZSwgc3VwcG9ydGluZyBlZGl0b3IsIGZpbGUsIGFuZCBtdWx0aS1maWxlIGNvbnRleHQgbWVudXMuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRGlzcG9zYWJsZUV4IH0gZnJvbSAnLi4vLi4vZGlzcG9zYWJsZS50cyc7XG5pbXBvcnQgdHlwZSB7XG4gIEVkaXRvck1lbnVFdmVudEhhbmRsZXIsXG4gIEZpbGVNZW51RXZlbnRIYW5kbGVyLFxuICBGaWxlc01lbnVFdmVudEhhbmRsZXIsXG4gIE1lbnVFdmVudFJlZ2lzdHJhclxufSBmcm9tICcuLi9tZW51LWV2ZW50LXJlZ2lzdHJhci50cyc7XG5cbmltcG9ydCB7IEV2ZW50UmVmRGlzcG9zYWJsZSB9IGZyb20gJy4uL2V2ZW50cy50cyc7XG5pbXBvcnQgeyBDb21wb25lbnRFeCB9IGZyb20gJy4vY29tcG9uZW50LWV4LnRzJztcblxuLyoqXG4gKiB7QGxpbmsgTWVudUV2ZW50UmVnaXN0cmFyfSBiYWNrZWQgYnkgT2JzaWRpYW4ncyB7QGxpbmsgQXBwfSB3b3Jrc3BhY2UgZXZlbnRzLlxuICpcbiAqIEV2ZW50IGhhbmRsZXJzIGFyZSByZWdpc3RlcmVkIHdpdGggdGhlIHByb3ZpZGVkIHtAbGluayBDb21wb25lbnR9IGZvciBsaWZlY3ljbGUgbWFuYWdlbWVudC5cbiAqL1xuZXhwb3J0IGNsYXNzIE1lbnVFdmVudFJlZ2lzdHJhckNvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEV4IGltcGxlbWVudHMgTWVudUV2ZW50UmVnaXN0cmFyIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgYXBwLWJhY2tlZCBtZW51IGV2ZW50IHJlZ2lzdHJhci5cbiAgICpcbiAgICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJvdGVjdGVkIHJlYWRvbmx5IGFwcDogQXBwKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYSBoYW5kbGVyIGZvciB0aGUgZWRpdG9yIGNvbnRleHQgbWVudSBldmVudC5cbiAgICpcbiAgICogQHBhcmFtIGhhbmRsZXIgLSBUaGUgaGFuZGxlciB0byByZWdpc3Rlci5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgRGlzcG9zYWJsZUV4fSB0aGF0IHVucmVnaXN0ZXJzIHRoZSBoYW5kbGVyIHdoZW4gZGlzcG9zZWQgKG9yIG9uIGNvbXBvbmVudCB1bmxvYWQpLlxuICAgKi9cbiAgcHVibGljIHJlZ2lzdGVyRWRpdG9yTWVudUV2ZW50SGFuZGxlcihoYW5kbGVyOiBFZGl0b3JNZW51RXZlbnRIYW5kbGVyKTogRGlzcG9zYWJsZUV4IHtcbiAgICB0aGlzLmVuc3VyZUxvYWRlZCgpO1xuICAgIHJldHVybiB0aGlzLnJlZ2lzdGVyRGlzcG9zYWJsZShuZXcgRXZlbnRSZWZEaXNwb3NhYmxlKHRoaXMuYXBwLndvcmtzcGFjZS5vbignZWRpdG9yLW1lbnUnLCBoYW5kbGVyKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIGhhbmRsZXIgZm9yIHRoZSBzaW5nbGUtZmlsZSBjb250ZXh0IG1lbnUgZXZlbnQuXG4gICAqXG4gICAqIEBwYXJhbSBoYW5kbGVyIC0gVGhlIGhhbmRsZXIgdG8gcmVnaXN0ZXIuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIERpc3Bvc2FibGVFeH0gdGhhdCB1bnJlZ2lzdGVycyB0aGUgaGFuZGxlciB3aGVuIGRpc3Bvc2VkIChvciBvbiBjb21wb25lbnQgdW5sb2FkKS5cbiAgICovXG4gIHB1YmxpYyByZWdpc3RlckZpbGVNZW51RXZlbnRIYW5kbGVyKGhhbmRsZXI6IEZpbGVNZW51RXZlbnRIYW5kbGVyKTogRGlzcG9zYWJsZUV4IHtcbiAgICB0aGlzLmVuc3VyZUxvYWRlZCgpO1xuICAgIHJldHVybiB0aGlzLnJlZ2lzdGVyRGlzcG9zYWJsZShuZXcgRXZlbnRSZWZEaXNwb3NhYmxlKHRoaXMuYXBwLndvcmtzcGFjZS5vbignZmlsZS1tZW51JywgaGFuZGxlcikpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYSBoYW5kbGVyIGZvciB0aGUgbXVsdGktZmlsZSBjb250ZXh0IG1lbnUgZXZlbnQuXG4gICAqXG4gICAqIEBwYXJhbSBoYW5kbGVyIC0gVGhlIGhhbmRsZXIgdG8gcmVnaXN0ZXIuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIERpc3Bvc2FibGVFeH0gdGhhdCB1bnJlZ2lzdGVycyB0aGUgaGFuZGxlciB3aGVuIGRpc3Bvc2VkIChvciBvbiBjb21wb25lbnQgdW5sb2FkKS5cbiAgICovXG4gIHB1YmxpYyByZWdpc3RlckZpbGVzTWVudUV2ZW50SGFuZGxlcihoYW5kbGVyOiBGaWxlc01lbnVFdmVudEhhbmRsZXIpOiBEaXNwb3NhYmxlRXgge1xuICAgIHRoaXMuZW5zdXJlTG9hZGVkKCk7XG4gICAgcmV0dXJuIHRoaXMucmVnaXN0ZXJEaXNwb3NhYmxlKG5ldyBFdmVudFJlZkRpc3Bvc2FibGUodGhpcy5hcHAud29ya3NwYWNlLm9uKCdmaWxlcy1tZW51JywgaGFuZGxlcikpKTtcbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFnQkEsU0FBUywwQkFBMEI7QUFDbkMsU0FBUyxtQkFBbUI7QUFPckIsTUFBTSxvQ0FBb0MsWUFBMEM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNbEYsWUFBK0IsS0FBVTtBQUM5QyxVQUFNO0FBRDhCO0FBQUEsRUFFdEM7QUFBQSxFQUZzQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBVS9CLCtCQUErQixTQUErQztBQUNuRixTQUFLLGFBQWE7QUFDbEIsV0FBTyxLQUFLLG1CQUFtQixJQUFJLG1CQUFtQixLQUFLLElBQUksVUFBVSxHQUFHLGVBQWUsT0FBTyxDQUFDLENBQUM7QUFBQSxFQUN0RztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBUU8sNkJBQTZCLFNBQTZDO0FBQy9FLFNBQUssYUFBYTtBQUNsQixXQUFPLEtBQUssbUJBQW1CLElBQUksbUJBQW1CLEtBQUssSUFBSSxVQUFVLEdBQUcsYUFBYSxPQUFPLENBQUMsQ0FBQztBQUFBLEVBQ3BHO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFRTyw4QkFBOEIsU0FBOEM7QUFDakYsU0FBSyxhQUFhO0FBQ2xCLFdBQU8sS0FBSyxtQkFBbUIsSUFBSSxtQkFBbUIsS0FBSyxJQUFJLFVBQVUsR0FBRyxjQUFjLE9BQU8sQ0FBQyxDQUFDO0FBQUEsRUFDckc7QUFDRjsiLAogICJuYW1lcyI6IFtdCn0K
@@ -200,8 +200,9 @@ export declare class PluginNoticeComponent extends ComponentEx {
200
200
  private getPermanentNotices;
201
201
  /**
202
202
  * Makes a notice hard to close: marks its outer element (so the CSS neutralizes its padding) and
203
- * installs a capture-phase click guard that stops every click except on the close button from
204
- * reaching Obsidian's own dismiss handler.
203
+ * installs a capture-phase click guard that stops every click except on an interactive element (a
204
+ * button, link, the close button, etc.) from reaching Obsidian's own dismiss handler — so an
205
+ * interactive child's own handler still runs while a stray click cannot dismiss the notice.
205
206
  *
206
207
  * @param notice - The notice to guard.
207
208
  * @param requiresCloseConfirmation - Whether the notice requires close confirmation; when `false`,
@@ -297,8 +297,9 @@ class PluginNoticeComponent extends ComponentEx {
297
297
  }
298
298
  /**
299
299
  * Makes a notice hard to close: marks its outer element (so the CSS neutralizes its padding) and
300
- * installs a capture-phase click guard that stops every click except on the close button from
301
- * reaching Obsidian's own dismiss handler.
300
+ * installs a capture-phase click guard that stops every click except on an interactive element (a
301
+ * button, link, the close button, etc.) from reaching Obsidian's own dismiss handler — so an
302
+ * interactive child's own handler still runs while a stray click cannot dismiss the notice.
302
303
  *
303
304
  * @param notice - The notice to guard.
304
305
  * @param requiresCloseConfirmation - Whether the notice requires close confirmation; when `false`,
@@ -310,7 +311,7 @@ class PluginNoticeComponent extends ComponentEx {
310
311
  }
311
312
  addPluginCssClasses(notice.containerEl, CssClass.PluginNoticeRequiresConfirmation);
312
313
  notice.containerEl.addEventListener("click", (evt) => {
313
- if (evt.target instanceof Element && evt.target.closest(`.${CssClass.PluginNoticeCloseButton}`)) {
314
+ if (evt.target instanceof Element && evt.target.closest(INTERACTIVE_ELEMENT_SELECTOR)) {
314
315
  return;
315
316
  }
316
317
  evt.stopPropagation();
@@ -390,4 +391,4 @@ class PluginNoticeComponent extends ComponentEx {
390
391
  export {
391
392
  PluginNoticeComponent
392
393
  };
393
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbXBvbmVudHMvcGx1Z2luLW5vdGljZS1jb21wb25lbnQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBDb21wb25lbnQgdGhhdCBtYW5hZ2VzIGRpc3BsYXlpbmcgbm90aWNlcyB0byB0aGUgdXNlci5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgUHJvbWlzYWJsZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB7XG4gIEJ1dHRvbkNvbXBvbmVudCxcbiAgTm90aWNlLFxuICBzZXRJY29uXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBWYWx1ZVByb3ZpZGVyIH0gZnJvbSAnLi4vLi4vdmFsdWUtcHJvdmlkZXIudHMnO1xuXG5pbXBvcnQgeyBpbnZva2VBc3luY1NhZmVseSB9IGZyb20gJy4uLy4uL2FzeW5jLnRzJztcbmltcG9ydCB7IG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllcyB9IGZyb20gJy4uLy4uL29iamVjdC11dGlscy50cyc7XG5pbXBvcnQgeyBnZXRPYnNpZGlhbkRldlV0aWxzU3RhdGUgfSBmcm9tICcuLi8uLi9vYnNpZGlhbi1kZXYtdXRpbHMtc3RhdGUudHMnO1xuaW1wb3J0IHsgZW5zdXJlTm9uTnVsbGFibGUgfSBmcm9tICcuLi8uLi90eXBlLWd1YXJkcy50cyc7XG5pbXBvcnQgeyByZXNvbHZlVmFsdWUgfSBmcm9tICcuLi8uLi92YWx1ZS1wcm92aWRlci50cyc7XG5pbXBvcnQgeyBDc3NDbGFzcyB9IGZyb20gJy4uL2Nzcy1jbGFzcy50cyc7XG5pbXBvcnQgeyB0IH0gZnJvbSAnLi4vaTE4bi9pMThuLnRzJztcbmltcG9ydCB7IGNvbmZpcm0gfSBmcm9tICcuLi9tb2RhbHMvY29uZmlybS50cyc7XG5pbXBvcnQgeyBhZGRQbHVnaW5Dc3NDbGFzc2VzIH0gZnJvbSAnLi4vcGx1Z2luL3BsdWdpbi1jb250ZXh0LnRzJztcbmltcG9ydCB7IENvbXBvbmVudEV4IH0gZnJvbSAnLi9jb21wb25lbnQtZXgudHMnO1xuaW1wb3J0IHsgTW9ua2V5QXJvdW5kQ29tcG9uZW50IH0gZnJvbSAnLi9tb25rZXktYXJvdW5kLWNvbXBvbmVudC50cyc7XG5cbmNvbnN0IFBFUk1BTkVOVF9OT1RJQ0VTX1NUQVRFX0tFWSA9ICdwbHVnaW4tbm90aWNlLWNvbXBvbmVudDpwZXJtYW5lbnQtbm90aWNlcyc7XG5jb25zdCBQRVJNQU5FTlRfTk9USUNFX0RVUkFUSU9OX0lOX01JTExJU0VDT05EUyA9IDA7XG5jb25zdCBERUZBVUxUX0RFTEFZX0JFRk9SRV9TSE9XX0lOX01JTExJU0VDT05EUyA9IDUwMDtcblxuLy8gRWxlbWVudHMgYSB1c2VyIGNsaWNrcyB0byBhY3Qgb24gdGhlbSByYXRoZXIgdGhhbiB0byBkaXNtaXNzIHRoZSBub3RpY2UuIEEgY2xpY2sgbGFuZGluZyBvbiAob3Jcbi8vIEluc2lkZSkgb25lIG9mIHRoZXNlIGlzIGtlcHQgZnJvbSBidWJibGluZyB0byB0aGUgbm90aWNlLCBzbyB0aGUgbm90aWNlIHN0YXlzIG9wZW4uXG5jb25zdCBJTlRFUkFDVElWRV9FTEVNRU5UX1NFTEVDVE9SID0gJ2EsIGJ1dHRvbiwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIGxhYmVsLCBbY29udGVudGVkaXRhYmxlPVwidHJ1ZVwiXSwgW3JvbGU9XCJidXR0b25cIl0sIFtyb2xlPVwibGlua1wiXSwgW3JvbGU9XCJjaGVja2JveFwiXSwgW3JvbGU9XCJ0YWJcIl0sIFtyb2xlPVwibWVudWl0ZW1cIl0nO1xuXG4vKipcbiAqIEEgaGFuZGxlIHRvIGEgZGVsYXllZCBub3RpY2UgY3JlYXRlZCBieSB7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50LnNob3dOb3RpY2VBZnRlckRlbGF5fS4gSXQgaXMgYVxuICoge0BsaW5rIERpc3Bvc2FibGV9IChzbyBpdCBjYW4gYmUgdXNlZCB3aXRoIGB1c2luZ2ApIHRoYXQgYWxzbyBsZXRzIHRoZSBjb250ZW50IGJlIHVwZGF0ZWQgd2hpbGUgdGhlXG4gKiBub3RpY2UgaXMgc2hvd24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGx1Z2luTm90aWNlQ29tcG9uZW50RGVsYXllZE5vdGljZSBleHRlbmRzIERpc3Bvc2FibGUge1xuICAvKipcbiAgICogUmVwbGFjZXMgdGhlIG5vdGljZSBjb250ZW50LCByZS1hcHBseWluZyB0aGUgcGx1Z2luLW5hbWUgcHJlZml4LCB0aGUgaW50ZXJhY3RpdmUtY2xpY2sgZ3VhcmQsIGFuZFxuICAgKiB0aGUgQ2FuY2VsIGJ1dHRvbi4gVXNlZnVsIGZvciByZXBvcnRpbmcgcHJvZ3Jlc3MuIElmIHRoZSBkZWxheSBoYXMgbm90IGVsYXBzZWQgeWV0LCB0aGUgbmV3IGNvbnRlbnRcbiAgICogYmVjb21lcyB3aGF0IGlzIHNob3duIG9uY2UgaXQgZG9lcy5cbiAgICpcbiAgICogQHBhcmFtIGNvbnRlbnQgLSBUaGUgbmV3IG5vdGljZSBjb250ZW50LlxuICAgKi9cbiAgc2V0Q29udGVudChjb250ZW50OiBEb2N1bWVudEZyYWdtZW50IHwgc3RyaW5nKTogdm9pZDtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50LnNob3dOb3RpY2VBZnRlckRlbGF5fS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5Ob3RpY2VDb21wb25lbnRTaG93Tm90aWNlQWZ0ZXJEZWxheVBhcmFtcyB7XG4gIC8qKlxuICAgKiBXaGVuIHByb3ZpZGVkLCBhIENhbmNlbCBidXR0b24gaXMgYXBwZW5kZWQgdG8gdGhlIG5vdGljZTsgY2xpY2tpbmcgaXQgYWJvcnRzIHRoaXMgY29udHJvbGxlci4gV2hlblxuICAgKiBvbWl0dGVkLCBubyBDYW5jZWwgYnV0dG9uIGlzIHNob3duLlxuICAgKi9cbiAgcmVhZG9ubHkgYWJvcnRDb250cm9sbGVyPzogQWJvcnRDb250cm9sbGVyO1xuXG4gIC8qKlxuICAgKiBUaGUgdGV4dCBvZiB0aGUgQ2FuY2VsIGJ1dHRvbiBzaG93biB3aGVuIHtAbGluayBQbHVnaW5Ob3RpY2VDb21wb25lbnRTaG93Tm90aWNlQWZ0ZXJEZWxheVBhcmFtcy5hYm9ydENvbnRyb2xsZXJ9XG4gICAqIGlzIHByb3ZpZGVkLiBXaGVuIG9taXR0ZWQsIHRoZSBsb2NhbGl6ZWQgYENhbmNlbGAgbGFiZWwgaXMgdXNlZC5cbiAgICovXG4gIHJlYWRvbmx5IGNhbmNlbEJ1dHRvblRleHQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBub3RpY2UgY29udGVudCwgcmVzb2x2ZWQgbGF6aWx5IG9ubHkgaWYgdGhlIGRlbGF5IGVsYXBzZXMgXHUyMDE0IHNvIGFuIG9wZXJhdGlvbiB0aGF0IGZpbmlzaGVzXG4gICAqIHNvb25lciBuZXZlciBidWlsZHMgaXQuXG4gICAqL1xuICByZWFkb25seSBjb250ZW50OiBWYWx1ZVByb3ZpZGVyPERvY3VtZW50RnJhZ21lbnQgfCBzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBIb3cgbG9uZyB0aGUgb3BlcmF0aW9uIG11c3QgcnVuIGJlZm9yZSB0aGUgbm90aWNlIGlzIHNob3duLiBPcGVyYXRpb25zIHRoYXQgZmluaXNoIHNvb25lciBuZXZlclxuICAgKiBzaG93IGEgbm90aWNlLCBhdm9pZGluZyBhIGRpc3RyYWN0aW5nIGZsYXNoLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgNTAwYFxuICAgKi9cbiAgcmVhZG9ubHkgZGVsYXlJbk1pbGxpc2Vjb25kcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50LnNob3dOb3RpY2V9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpbk5vdGljZUNvbXBvbmVudFNob3dOb3RpY2VPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIG5vdGljZSBzaG91bGQgc3RheSB1bnRpbCBpdCBpcyByZXBsYWNlZCwgdGhlIHBsdWdpbiBpcyByZWxvYWRlZCwgb3IgdGhlIHVzZXIgZGlzbWlzc2VzIGl0LlxuICAgKlxuICAgKiBBIHBlcm1hbmVudCBub3RpY2UgaXMgc2hvd24gd2l0aCBhbiBpbmZpbml0ZSBkdXJhdGlvbiBhbmQgaXMgbm90IGhpZGRlbiB3aGVuIHRoZSBjb21wb25lbnQgdW5sb2Fkcywgc28gaXQgY2FuXG4gICAqIGNvbW11bmljYXRlIHN0YXRlIHRoYXQgb3V0bGl2ZXMgdGhlIHBsdWdpbiAoZS5nLiBhIGNsZWFudXAgdGhhdCByZXF1aXJlcyBhIHJlbG9hZCkuIFRoZXJlIGlzIGF0IG1vc3Qgb25lIHBlcm1hbmVudFxuICAgKiBub3RpY2UgcGVyIHBsdWdpbjogaXQgaXMgaGlkZGVuIGJ5IHRoZSBuZXh0IHtAbGluayBQbHVnaW5Ob3RpY2VDb21wb25lbnQuc2hvd05vdGljZX0gY2FsbCBhbmQgZGlzbWlzc2VkXG4gICAqIGF1dG9tYXRpY2FsbHkgdGhlIG5leHQgdGltZSB0aGUgY29tcG9uZW50IGxvYWRzIChpLmUuIHdoZW4gdGhlIHBsdWdpbiBpcyByZS1lbmFibGVkKS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgaXNQZXJtYW5lbnQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBub3RpY2Ugb2NjdXBpZXMgdGhlIHNpbmdsZSBwZXItcGx1Z2luIHJldXNhYmxlIHNsb3QuXG4gICAqXG4gICAqIEEgcmV1c2FibGUgbm90aWNlIHRha2VzIHRoZSBzaGFyZWQgc2xvdDogdGhlIG5leHQgcmV1c2FibGUgbm90aWNlIGhpZGVzIGl0LCBhbmQgaXQgaXMgaGlkZGVuIG9uIHVubG9hZC5cbiAgICogQSBub24tcmV1c2FibGUgKHN0YW5kYWxvbmUpIG5vdGljZSBpcyBub3QgcGxhY2VkIGluIHRoZSBzbG90IFx1MjAxNCBpdCBuZXZlciBoaWRlcywgYW5kIGlzIG5ldmVyIGhpZGRlbiBieSwgYVxuICAgKiByZXVzYWJsZSBub3RpY2U7IG11bHRpcGxlIHN0YW5kYWxvbmUgbm90aWNlcyBjb2V4aXN0LiBTdGFuZGFsb25lIG5vdGljZXMgYXJlIHN0aWxsIGhpZGRlbiB0b2dldGhlciBvbiB1bmxvYWQuXG4gICAqXG4gICAqIEEgcGVybWFuZW50IG5vdGljZSBtdXN0IGJlIHJldXNhYmxlICh7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50U2hvd05vdGljZU9wdGlvbnMuaXNQZXJtYW5lbnR9IGltcGxpZXNcbiAgICogYGlzUmV1c2FibGVgKTsgcGFzc2luZyBgaXNSZXVzYWJsZTogZmFsc2VgIHRvZ2V0aGVyIHdpdGggYGlzUGVybWFuZW50OiB0cnVlYCB0aHJvd3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB0cnVlYFxuICAgKi9cbiAgcmVhZG9ubHkgaXNSZXVzYWJsZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEEgY2FsbGJhY2sgaW52b2tlZCB3aGVuIHRoZSBub3RpY2UgaXMgaGlkZGVuIFx1MjAxNCB3aGV0aGVyIGJ5IHRoZSB1c2VyIGNsb3NpbmcgaXQsIGJ5IGEgbGF0ZXIgcmV1c2FibGVcbiAgICogbm90aWNlIHJlcGxhY2luZyBpdCwgYnkgaXRzIGR1cmF0aW9uIGVsYXBzaW5nLCBvciBvbiBjb21wb25lbnQgdW5sb2FkLiBJdCBydW5zIGF0IG1vc3Qgb25jZSBwZXJcbiAgICogbm90aWNlLiBBbiBhc3luYyBjYWxsYmFjayBpcyBydW4gZmlyZS1hbmQtZm9yZ2V0IChpdHMgcmVqZWN0aW9uIHN1cmZhY2VzIHRocm91Z2ggdGhlIGFzeW5jLWVycm9yXG4gICAqIHBpcGVsaW5lKS5cbiAgICovXG4gIG9uSGlkZT8odGhpczogdm9pZCk6IFByb21pc2FibGU8dm9pZD47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIG5vdGljZSBpcyBoYXJkIHRvIGNsb3NlOiBpdCBkb2VzIG5vdCBkaXNtaXNzIG9uIGFueSBzdHJheSBjbGljaywgYW5kIGluc3RlYWQgc2hvd3MgYVxuICAgKiBjbG9zZSAoWCkgYnV0dG9uIHdob3NlIGNsaWNrIG9wZW5zIGEgY29uZmlybWF0aW9uIG1vZGFsLCBkaXNtaXNzaW5nIHRoZSBub3RpY2Ugb25seSBpZiBjb25maXJtZWQuXG4gICAqXG4gICAqIEEgaGFyZC10by1jbG9zZSBub3RpY2UgaXMgc2hvd24gd2l0aCBhbiBpbmZpbml0ZSBkdXJhdGlvbiBhbmQgaXMgc3RhbmRhbG9uZSAoaW1wbGllc1xuICAgKiB7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50U2hvd05vdGljZU9wdGlvbnMuaXNSZXVzYWJsZX0gYD0gZmFsc2VgKSwgc28gYSBsYXRlciBub3RpY2UgbmV2ZXJcbiAgICogc2lsZW50bHkgcmVwbGFjZXMgaXQ7IHBhc3NpbmcgYGlzUmV1c2FibGU6IHRydWVgIHRvZ2V0aGVyIHdpdGggYHJlcXVpcmVzQ2xvc2VDb25maXJtYXRpb246IHRydWVgXG4gICAqIHRocm93cy5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgcmVxdWlyZXNDbG9zZUNvbmZpcm1hdGlvbj86IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBQbHVnaW5Ob3RpY2VDb21wb25lbnRCdWlsZERlbGF5ZWROb3RpY2VNZXNzYWdlUGFyYW1zIHtcbiAgcmVhZG9ubHkgYWJvcnRDb250cm9sbGVyPzogQWJvcnRDb250cm9sbGVyO1xuICByZWFkb25seSBjYW5jZWxCdXR0b25UZXh0Pzogc3RyaW5nO1xuICByZWFkb25seSBjb250ZW50OiBEb2N1bWVudEZyYWdtZW50IHwgc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgUGx1Z2luTm90aWNlQ29tcG9uZW50QnVpbGROb3RpY2VDb250ZW50UGFyYW1zIHtcbiAgLyoqXG4gICAqIFJlc29sdmVzIHRoZSBub3RpY2UgdGhpcyBjb250ZW50IGJlbG9uZ3MgdG8sIHVzZWQgYnkgdGhlIGNsb3NlIGJ1dHRvbidzIGhhbmRsZXIuIFRoZSBub3RpY2UgZG9lc1xuICAgKiBub3QgZXhpc3QgeWV0IHdoZW4gdGhlIGNvbnRlbnQgaXMgYnVpbHQsIHNvIGl0IGlzIHJlc29sdmVkIGxhemlseSBhdCBjbGljayB0aW1lLiBSZXF1aXJlZCB3aGVuXG4gICAqIHtAbGluayBQbHVnaW5Ob3RpY2VDb21wb25lbnRCdWlsZE5vdGljZUNvbnRlbnRQYXJhbXMucmVxdWlyZXNDbG9zZUNvbmZpcm1hdGlvbn0gaXMgYHRydWVgLlxuICAgKi9cbiAgZ2V0Tm90aWNlPyh0aGlzOiB2b2lkKTogTm90aWNlIHwgbnVsbDtcblxuICAvKipcbiAgICogVGhlIG1lc3NhZ2UgdG8gZGlzcGxheSBhZnRlciB0aGUgcGx1Z2luIG5hbWUgcHJlZml4LlxuICAgKi9cbiAgcmVhZG9ubHkgbWVzc2FnZTogRG9jdW1lbnRGcmFnbWVudCB8IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgbm90aWNlIGlzIGhhcmQgdG8gY2xvc2U6IHN0b3BzIGV2ZXJ5IGNsaWNrIGZyb20gZGlzbWlzc2luZyBpdCBhbmQgYWRkcyBhIGNsb3NlIGJ1dHRvblxuICAgKiBndWFyZGVkIGJ5IGEgY29uZmlybWF0aW9uIG1vZGFsLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSByZXF1aXJlc0Nsb3NlQ29uZmlybWF0aW9uPzogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIFBsdWdpbk5vdGljZUNvbXBvbmVudENvbnN0cnVjdG9yUGFyYW1zIHtcbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG4gIHJlYWRvbmx5IHBsdWdpbk5hbWU6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFBsdWdpbk5vdGljZUNvbXBvbmVudFNob3dOb3RpY2VXaXRoRHVyYXRpb25QYXJhbXMge1xuICByZWFkb25seSBkdXJhdGlvbkluTWlsbGlzZWNvbmRzOiBudWxsIHwgbnVtYmVyO1xuICByZWFkb25seSBpc1JldXNhYmxlOiBib29sZWFuO1xuICByZWFkb25seSBtZXNzYWdlOiBEb2N1bWVudEZyYWdtZW50IHwgc3RyaW5nO1xuICByZWFkb25seSBvbkhpZGU6ICgoKSA9PiBQcm9taXNhYmxlPHZvaWQ+KSB8IHVuZGVmaW5lZDtcbiAgcmVhZG9ubHkgcmVxdWlyZXNDbG9zZUNvbmZpcm1hdGlvbjogYm9vbGVhbjtcbiAgcmVhZG9ubHkgc2hvdWxkUmVnaXN0ZXJBc1Blcm1hbmVudDogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBNYW5hZ2VzIHNob3dpbmcgcGx1Z2luIG5vdGljZXMuIEF1dG9tYXRpY2FsbHkgaGlkZXMgdGhlIHByZXZpb3VzIG5vdGljZSB3aGVuIGEgbmV3IG9uZSBpcyBzaG93bi5cbiAqL1xuZXhwb3J0IGNsYXNzIFBsdWdpbk5vdGljZUNvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEV4IHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4gbmFtZSAoc2hvd24gYXMgcHJlZml4IGluIG5vdGljZXMpLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHBsdWdpbk5hbWU6IHN0cmluZztcblxuICBwcml2YXRlIG5vdGljZTogTm90aWNlIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGVuZGluZ1RpbWVyQ2FuY2VsbGF0aW9ucyA9IG5ldyBTZXQ8KCkgPT4gdm9pZD4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBzdGFuZGFsb25lTm90aWNlcyA9IG5ldyBTZXQ8Tm90aWNlPigpO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IHBsdWdpbiBub3RpY2UgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGNvbnN0cnVjdG9yIHBhcmFtZXRlcnMuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBQbHVnaW5Ob3RpY2VDb21wb25lbnRDb25zdHJ1Y3RvclBhcmFtcykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5hcHAgPSBwYXJhbXMuYXBwO1xuICAgIHRoaXMucGx1Z2luTmFtZSA9IHBhcmFtcy5wbHVnaW5OYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc21pc3NlcyB0aGUgcGVybWFuZW50IG5vdGljZSBsZWZ0IG92ZXIgZnJvbSBhIHByZXZpb3VzIGxvYWQgKGUuZy4gYSBwcmV2aW91cyBwbHVnaW4gc2Vzc2lvbikgb24gbG9hZC5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBvbmxvYWQoKTogdm9pZCB7XG4gICAgc3VwZXIub25sb2FkKCk7XG4gICAgY29uc3QgcGVybWFuZW50Tm90aWNlID0gdGhpcy5nZXRQZXJtYW5lbnROb3RpY2UoKTtcbiAgICBwZXJtYW5lbnROb3RpY2U/LmhpZGUoKTtcbiAgICB0aGlzLnNldFBlcm1hbmVudE5vdGljZShudWxsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIaWRlcyB0aGUgY3VycmVudCBub3RpY2Ugb24gdW5sb2FkLCB1bmxlc3MgaXQgaXMgdGhlIHBlcm1hbmVudCBub3RpY2UgKHdoaWNoIGlzIG1lYW50IHRvIG91dGxpdmUgdGhlIHBsdWdpbikuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgb251bmxvYWQoKTogdm9pZCB7XG4gICAgLy8gQ2FuY2VsIGFueSBkZWxheWVkIG5vdGljZSB3aG9zZSB0aW1lciBoYXMgbm90IGZpcmVkIHlldCwgc28gaXQgbmV2ZXIgYXBwZWFycyBhZnRlciB1bmxvYWQuXG4gICAgZm9yIChjb25zdCBjYW5jZWxQZW5kaW5nVGltZXIgb2YgWy4uLnRoaXMucGVuZGluZ1RpbWVyQ2FuY2VsbGF0aW9uc10pIHtcbiAgICAgIGNhbmNlbFBlbmRpbmdUaW1lcigpO1xuICAgIH1cbiAgICBpZiAodGhpcy5nZXRQZXJtYW5lbnROb3RpY2UoKSAhPT0gdGhpcy5ub3RpY2UpIHtcbiAgICAgIHRoaXMubm90aWNlPy5oaWRlKCk7XG4gICAgfVxuICAgIGZvciAoY29uc3Qgc3RhbmRhbG9uZU5vdGljZSBvZiB0aGlzLnN0YW5kYWxvbmVOb3RpY2VzKSB7XG4gICAgICBzdGFuZGFsb25lTm90aWNlLmhpZGUoKTtcbiAgICB9XG4gICAgdGhpcy5zdGFuZGFsb25lTm90aWNlcy5jbGVhcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3BsYXlzIGEgbm90aWNlIG1lc3NhZ2UgdG8gdGhlIHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2UgdG8gZGlzcGxheS5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgZGlzcGxheWluZyB0aGUgbm90aWNlLlxuICAgKiBAcmV0dXJucyBUaGUgbm90aWNlIG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyBzaG93Tm90aWNlKG1lc3NhZ2U6IERvY3VtZW50RnJhZ21lbnQgfCBzdHJpbmcsIG9wdGlvbnM/OiBQbHVnaW5Ob3RpY2VDb21wb25lbnRTaG93Tm90aWNlT3B0aW9ucyk6IE5vdGljZSB7XG4gICAgY29uc3QgaXNQZXJtYW5lbnQgPSBvcHRpb25zPy5pc1Blcm1hbmVudCA/PyBmYWxzZTtcbiAgICBjb25zdCByZXF1aXJlc0Nsb3NlQ29uZmlybWF0aW9uID0gb3B0aW9ucz8ucmVxdWlyZXNDbG9zZUNvbmZpcm1hdGlvbiA/PyBmYWxzZTtcbiAgICBjb25zdCBpc1JldXNhYmxlID0gb3B0aW9ucz8uaXNSZXVzYWJsZSA/PyAhcmVxdWlyZXNDbG9zZUNvbmZpcm1hdGlvbjtcblxuICAgIGlmIChvcHRpb25zPy5pc1JldXNhYmxlID09PSB0cnVlICYmIHJlcXVpcmVzQ2xvc2VDb25maXJtYXRpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQSBub3RpY2UgdGhhdCByZXF1aXJlcyBjbG9zZSBjb25maXJtYXRpb24gY2Fubm90IGJlIHJldXNhYmxlLicpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucz8uaXNSZXVzYWJsZSA9PT0gZmFsc2UgJiYgaXNQZXJtYW5lbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQSBwZXJtYW5lbnQgbm90aWNlIG11c3QgYmUgcmV1c2FibGUuJyk7XG4gICAgfVxuXG4gICAgY29uc3QgZHVyYXRpb25Jbk1pbGxpc2Vjb25kcyA9IGlzUGVybWFuZW50IHx8IHJlcXVpcmVzQ2xvc2VDb25maXJtYXRpb24gPyBQRVJNQU5FTlRfTk9USUNFX0RVUkFUSU9OX0lOX01JTExJU0VDT05EUyA6IG51bGw7XG4gICAgcmV0dXJuIHRoaXMuc2hvd05vdGljZVdpdGhEdXJhdGlvbih7XG4gICAgICBkdXJhdGlvbkluTWlsbGlzZWNvbmRzLFxuICAgICAgaXNSZXVzYWJsZSxcbiAgICAgIG1lc3NhZ2UsXG4gICAgICBvbkhpZGU6IG9wdGlvbnM/Lm9uSGlkZSxcbiAgICAgIHJlcXVpcmVzQ2xvc2VDb25maXJtYXRpb24sXG4gICAgICBzaG91bGRSZWdpc3RlckFzUGVybWFuZW50OiBpc1Blcm1hbmVudFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNob3dzIGEgbm90aWNlIGRlc2NyaWJpbmcgYSBsb25nLXJ1bm5pbmcgb3BlcmF0aW9uLCBidXQgb25seSBvbmNlIHRoZSBvcGVyYXRpb24gaGFzIHJ1biBmb3IgbG9uZ2VyXG4gICAqIHRoYW4ge0BsaW5rIFBsdWdpbk5vdGljZUNvbXBvbmVudFNob3dOb3RpY2VBZnRlckRlbGF5UGFyYW1zLmRlbGF5SW5NaWxsaXNlY29uZHN9IFx1MjAxNCBzbyBvcGVyYXRpb25zXG4gICAqIHRoYXQgZmluaXNoIHNvb25lciBuZXZlciBmbGFzaCBhIG5vdGljZS4gVGhlIG5vdGljZSBzdGF5cyB1bnRpbCB0aGUgcmV0dXJuZWQge0BsaW5rIERpc3Bvc2FibGV9IGlzXG4gICAqIGRpc3Bvc2VkICh3aGljaCBhbHNvIGNhbmNlbHMgdGhlIHBlbmRpbmcgdGltZXIgaWYgaXQgaGFzIG5vdCBmaXJlZCB5ZXQpLCBzbyBpdCBjYW4gYmUgdXNlZCB3aXRoXG4gICAqIGB1c2luZ2AuIFdoZW4gYW4ge0BsaW5rIFBsdWdpbk5vdGljZUNvbXBvbmVudFNob3dOb3RpY2VBZnRlckRlbGF5UGFyYW1zLmFib3J0Q29udHJvbGxlcn0gaXMgZ2l2ZW4sIGFcbiAgICogQ2FuY2VsIGJ1dHRvbiB0aGF0IGFib3J0cyBpdCBpcyBhcHBlbmRlZCAoYW5kLCBiZWluZyBpbnRlcmFjdGl2ZSwgZG9lcyBub3QgZGlzbWlzcyB0aGUgbm90aWNlKS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHNcbiAgICogdXNpbmcgX25vdGljZSA9IHBsdWdpbk5vdGljZUNvbXBvbmVudC5zaG93Tm90aWNlQWZ0ZXJEZWxheSh7XG4gICAqICAgYWJvcnRDb250cm9sbGVyLFxuICAgKiAgIGNvbnRlbnQ6ICgpID0+IGJ1aWxkUHJvZ3Jlc3NGcmFnbWVudCgpXG4gICAqIH0pO1xuICAgKiBhd2FpdCBydW5PcGVyYXRpb24oYWJvcnRDb250cm9sbGVyLnNpZ25hbCk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFBsdWdpbk5vdGljZUNvbXBvbmVudERlbGF5ZWROb3RpY2V9IHRoYXQgaGlkZXMgdGhlIG5vdGljZSAob3IgY2FuY2VscyB0aGUgcGVuZGluZ1xuICAgKiB0aW1lcikgd2hlbiBkaXNwb3NlZCBhbmQgbGV0cyB0aGUgY29udGVudCBiZSB1cGRhdGVkIHdoaWxlIGl0IGlzIHNob3duLlxuICAgKi9cbiAgcHVibGljIHNob3dOb3RpY2VBZnRlckRlbGF5KHBhcmFtczogUGx1Z2luTm90aWNlQ29tcG9uZW50U2hvd05vdGljZUFmdGVyRGVsYXlQYXJhbXMpOiBQbHVnaW5Ob3RpY2VDb21wb25lbnREZWxheWVkTm90aWNlIHtcbiAgICBsZXQgc2hvd25Ob3RpY2U6IE5vdGljZSB8IG51bGwgPSBudWxsO1xuICAgIGxldCBpc0Rpc3Bvc2VkID0gZmFsc2U7XG4gICAgbGV0IHRpbWVySWQgPSAwO1xuICAgIGxldCBjdXJyZW50Q29udGVudDogVmFsdWVQcm92aWRlcjxEb2N1bWVudEZyYWdtZW50IHwgc3RyaW5nPiA9IHBhcmFtcy5jb250ZW50O1xuXG4gICAgY29uc3QgY2FuY2VsUGVuZGluZ1RpbWVyID0gKCk6IHZvaWQgPT4ge1xuICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aW1lcklkKTtcbiAgICAgIHRoaXMucGVuZGluZ1RpbWVyQ2FuY2VsbGF0aW9ucy5kZWxldGUoY2FuY2VsUGVuZGluZ1RpbWVyKTtcbiAgICB9O1xuXG4gICAgY29uc3QgYnVpbGREZWxheWVkTWVzc2FnZSA9IChjb250ZW50OiBEb2N1bWVudEZyYWdtZW50IHwgc3RyaW5nKTogRG9jdW1lbnRGcmFnbWVudCA9PlxuICAgICAgdGhpcy5idWlsZERlbGF5ZWROb3RpY2VNZXNzYWdlKG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllczxQbHVnaW5Ob3RpY2VDb21wb25lbnRCdWlsZERlbGF5ZWROb3RpY2VNZXNzYWdlUGFyYW1zPih7XG4gICAgICAgIGFib3J0Q29udHJvbGxlcjogcGFyYW1zLmFib3J0Q29udHJvbGxlcixcbiAgICAgICAgY2FuY2VsQnV0dG9uVGV4dDogcGFyYW1zLmNhbmNlbEJ1dHRvblRleHQsXG4gICAgICAgIGNvbnRlbnRcbiAgICAgIH0pKTtcblxuICAgIHRpbWVySWQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjYW5jZWxQZW5kaW5nVGltZXIoKTtcbiAgICAgIGludm9rZUFzeW5jU2FmZWx5KGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzb2x2ZWRDb250ZW50ID0gYXdhaXQgcmVzb2x2ZVZhbHVlKGN1cnJlbnRDb250ZW50LCB7fSk7XG4gICAgICAgIC8vIFRoZSBoYW5kbGUgbWF5IGhhdmUgYmVlbiBkaXNwb3NlZCB3aGlsZSB0aGUgY29udGVudCB3YXMgYmVpbmcgcmVzb2x2ZWQ7IGRvbid0IHNob3cgYSBzdGFsZSBub3RpY2UuXG4gICAgICAgIGlmIChpc0Rpc3Bvc2VkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHNob3duTm90aWNlID0gdGhpcy5zaG93Tm90aWNlV2l0aER1cmF0aW9uKHtcbiAgICAgICAgICBkdXJhdGlvbkluTWlsbGlzZWNvbmRzOiBQRVJNQU5FTlRfTk9USUNFX0RVUkFUSU9OX0lOX01JTExJU0VDT05EUyxcbiAgICAgICAgICBpc1JldXNhYmxlOiB0cnVlLFxuICAgICAgICAgIG1lc3NhZ2U6IGJ1aWxkRGVsYXllZE1lc3NhZ2UocmVzb2x2ZWRDb250ZW50KSxcbiAgICAgICAgICBvbkhpZGU6IHVuZGVmaW5lZCxcbiAgICAgICAgICByZXF1aXJlc0Nsb3NlQ29uZmlybWF0aW9uOiBmYWxzZSxcbiAgICAgICAgICBzaG91bGRSZWdpc3RlckFzUGVybWFuZW50OiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0sIHBhcmFtcy5kZWxheUluTWlsbGlzZWNvbmRzID8/IERFRkFVTFRfREVMQVlfQkVGT1JFX1NIT1dfSU5fTUlMTElTRUNPTkRTKTtcblxuICAgIHRoaXMucGVuZGluZ1RpbWVyQ2FuY2VsbGF0aW9ucy5hZGQoY2FuY2VsUGVuZGluZ1RpbWVyKTtcblxuICAgIHJldHVybiB7XG4gICAgICBzZXRDb250ZW50OiAoY29udGVudDogRG9jdW1lbnRGcmFnbWVudCB8IHN0cmluZyk6IHZvaWQgPT4ge1xuICAgICAgICBjdXJyZW50Q29udGVudCA9IGNvbnRlbnQ7XG4gICAgICAgIC8vIFJlLXdyYXAgc28gdGhlIHByZWZpeCwgaW50ZXJhY3RpdmUgZ3VhcmQsIGFuZCBDYW5jZWwgYnV0dG9uIHN1cnZpdmUgdGhlIGNvbnRlbnQgc3dhcC5cbiAgICAgICAgc2hvd25Ob3RpY2U/LnNldE1lc3NhZ2UodGhpcy5idWlsZE5vdGljZUNvbnRlbnQoeyBtZXNzYWdlOiBidWlsZERlbGF5ZWRNZXNzYWdlKGNvbnRlbnQpIH0pKTtcbiAgICAgIH0sXG4gICAgICBbU3ltYm9sLmRpc3Bvc2VdOiAoKTogdm9pZCA9PiB7XG4gICAgICAgIGlzRGlzcG9zZWQgPSB0cnVlO1xuICAgICAgICBjYW5jZWxQZW5kaW5nVGltZXIoKTtcbiAgICAgICAgc2hvd25Ob3RpY2U/LmhpZGUoKTtcbiAgICAgICAgaWYgKHRoaXMubm90aWNlID09PSBzaG93bk5vdGljZSkge1xuICAgICAgICAgIHRoaXMubm90aWNlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQXBwZW5kcyBhIGNsb3NlIChYKSBidXR0b24gdG8gdGhlIG5vdGljZSBjb250ZW50LiBDbGlja2luZyBpdCBvcGVucyBhIGNvbmZpcm1hdGlvbiBtb2RhbCBhbmQsIG9ubHlcbiAgICogaWYgY29uZmlybWVkLCBoaWRlcyB0aGUgbm90aWNlIGFuZCBkcm9wcyBpdCBmcm9tIHRoZSBzdGFuZGFsb25lLW5vdGljZSB0cmFja2luZyBzZXQuXG4gICAqXG4gICAqIEBwYXJhbSBjb250ZW50RWwgLSBUaGUgbm90aWNlIGNvbnRlbnQgd3JhcHBlciB0byBhcHBlbmQgdGhlIGJ1dHRvbiB0by5cbiAgICogQHBhcmFtIGdldE5vdGljZSAtIFJlc29sdmVzIHRoZSBub3RpY2UgdG8gaGlkZSB3aGVuIHRoZSBjbG9zZSBpcyBjb25maXJtZWQuXG4gICAqL1xuICBwcml2YXRlIGFwcGVuZENsb3NlQnV0dG9uKGNvbnRlbnRFbDogSFRNTEVsZW1lbnQsIGdldE5vdGljZTogKCkgPT4gTm90aWNlIHwgbnVsbCk6IHZvaWQge1xuICAgIGNvbnN0IGNsb3NlQnV0dG9uRWwgPSBjb250ZW50RWwuY3JlYXRlRWwoJ2J1dHRvbicsIHtcbiAgICAgIGF0dHI6IHsgJ2FyaWEtbGFiZWwnOiB0KCgkKSA9PiAkLm9ic2lkaWFuRGV2VXRpbHMubm90aWNlcy5jbG9zZUFyaWFMYWJlbCkgfVxuICAgIH0pO1xuICAgIGFkZFBsdWdpbkNzc0NsYXNzZXMoY2xvc2VCdXR0b25FbCwgQ3NzQ2xhc3MuUGx1Z2luTm90aWNlQ2xvc2VCdXR0b24pO1xuICAgIHNldEljb24oY2xvc2VCdXR0b25FbCwgJ3gnKTtcbiAgICBjbG9zZUJ1dHRvbkVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGV2dCkgPT4ge1xuICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgaW52b2tlQXN5bmNTYWZlbHkoYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBpc0NvbmZpcm1lZCA9IGF3YWl0IGNvbmZpcm0oe1xuICAgICAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICAgICAgbWVzc2FnZTogdCgoJCkgPT4gJC5vYnNpZGlhbkRldlV0aWxzLm5vdGljZXMuY2xvc2VDb25maXJtTWVzc2FnZSlcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghaXNDb25maXJtZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgbm90aWNlID0gZW5zdXJlTm9uTnVsbGFibGUoZ2V0Tm90aWNlKCkpO1xuICAgICAgICBub3RpY2UuaGlkZSgpO1xuICAgICAgICB0aGlzLnN0YW5kYWxvbmVOb3RpY2VzLmRlbGV0ZShub3RpY2UpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIHRoZSBtZXNzYWdlIGZvciBhIGRlbGF5ZWQgbm90aWNlOiB0aGUgcmVzb2x2ZWQgY29udGVudCwgb3B0aW9uYWxseSBmb2xsb3dlZCBieSBhIENhbmNlbFxuICAgKiBidXR0b24gdGhhdCBhYm9ydHMgdGhlIHByb3ZpZGVkIGNvbnRyb2xsZXIgd2hlbiBjbGlja2VkLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIERvY3VtZW50RnJhZ21lbnR9IGhvbGRpbmcgdGhlIGNvbnRlbnQgYW5kLCBpZiByZXF1ZXN0ZWQsIGEgQ2FuY2VsIGJ1dHRvbi5cbiAgICovXG4gIHByaXZhdGUgYnVpbGREZWxheWVkTm90aWNlTWVzc2FnZShwYXJhbXM6IFBsdWdpbk5vdGljZUNvbXBvbmVudEJ1aWxkRGVsYXllZE5vdGljZU1lc3NhZ2VQYXJhbXMpOiBEb2N1bWVudEZyYWdtZW50IHtcbiAgICBjb25zdCB7IGFib3J0Q29udHJvbGxlciwgY2FuY2VsQnV0dG9uVGV4dCwgY29udGVudCB9ID0gcGFyYW1zO1xuICAgIGNvbnN0IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnQoKTtcbiAgICBpZiAodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBmcmFnbWVudC5hcHBlbmRUZXh0KGNvbnRlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChjb250ZW50KTtcbiAgICB9XG5cbiAgICBpZiAoYWJvcnRDb250cm9sbGVyKSB7XG4gICAgICAvLyBgQnV0dG9uQ29tcG9uZW50YCByZXF1aXJlcyBhbiBgSFRNTEVsZW1lbnRgIHBhcmVudCwgc28gYnVpbGQgaXQgb24gYSB0aHJvd2F3YXlcbiAgICAgIC8vIERldGFjaGVkIGVsZW1lbnQgYW5kIG1vdmUgaXRzIGBidXR0b25FbGAgaW50byB0aGUgZnJhZ21lbnQuXG4gICAgICBjb25zdCBjYW5jZWxCdXR0b24gPSBuZXcgQnV0dG9uQ29tcG9uZW50KGNyZWF0ZURpdigpKTtcbiAgICAgIGNhbmNlbEJ1dHRvbi5zZXRCdXR0b25UZXh0KGNhbmNlbEJ1dHRvblRleHQgPz8gdCgoJCkgPT4gJC5vYnNpZGlhbkRldlV0aWxzLmJ1dHRvbnMuY2FuY2VsKSk7XG4gICAgICBhZGRQbHVnaW5Dc3NDbGFzc2VzKGNhbmNlbEJ1dHRvbi5idXR0b25FbCwgQ3NzQ2xhc3MuQ2FuY2VsQnV0dG9uKTtcbiAgICAgIC8vIFRoZSBjbGljayBpcyB3aXJlZCB2aWEgYGFkZEV2ZW50TGlzdGVuZXJgIHJhdGhlciB0aGFuIGBCdXR0b25Db21wb25lbnQub25DbGlja2Agc28gaXRcbiAgICAgIC8vIEJ1YmJsZXMgdGhyb3VnaCB0aGUgaW50ZXJhY3RpdmUtZWxlbWVudCBndWFyZCAoa2VlcGluZyB0aGUgbm90aWNlIG9wZW4pIGFuZCBzdGF5c1xuICAgICAgLy8gRGlyZWN0bHkgZXhlcmNpc2FibGUgdmlhIGEgZGlzcGF0Y2hlZCBET00gZXZlbnQgaW4gdW5pdCB0ZXN0cy5cbiAgICAgIGNhbmNlbEJ1dHRvbi5idXR0b25FbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgICAgYWJvcnRDb250cm9sbGVyLmFib3J0KCk7XG4gICAgICB9KTtcbiAgICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKGNhbmNlbEJ1dHRvbi5idXR0b25FbCk7XG4gICAgfVxuICAgIHJldHVybiBmcmFnbWVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgdGhlIG5vdGljZSBjb250ZW50IHdyYXBwZWQgaW4gYSBjb250YWluZXIgdGhhdCBrZWVwcyB0aGUgbm90aWNlIG9wZW4gd2hlbiBhbiBpbnRlcmFjdGl2ZVxuICAgKiBlbGVtZW50IGluc2lkZSBpdCBpcyBjbGlja2VkLiBPYnNpZGlhbiBkaXNtaXNzZXMgYSBub3RpY2Ugb24gYW55IGNsaWNrIHRoYXQgYnViYmxlcyB1cCB0byBpdHNcbiAgICogZWxlbWVudDsgdGhlIGNvbnRhaW5lciBpbnRlcmNlcHRzIGNsaWNrcyBvcmlnaW5hdGluZyBvbiBhbiBpbnRlcmFjdGl2ZSBlbGVtZW50IChhIGxpbmssIGJ1dHRvbixcbiAgICogaW5wdXQsIGV0Yy4pIGFuZCBzdG9wcyB0aGVtIHRoZXJlLCBzbyB0aGUgZWxlbWVudCdzIG93biBoYW5kbGVyIHN0aWxsIHJ1bnMgYnV0IHRoZSBub3RpY2Ugc3RheXMuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycy5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgRG9jdW1lbnRGcmFnbWVudH0gaG9sZGluZyB0aGUgd3JhcHBlZCwgcHJlZml4ZWQgbm90aWNlIGNvbnRlbnQuXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkTm90aWNlQ29udGVudChwYXJhbXM6IFBsdWdpbk5vdGljZUNvbXBvbmVudEJ1aWxkTm90aWNlQ29udGVudFBhcmFtcyk6IERvY3VtZW50RnJhZ21lbnQge1xuICAgIGNvbnN0IHsgZ2V0Tm90aWNlLCBtZXNzYWdlLCByZXF1aXJlc0Nsb3NlQ29uZmlybWF0aW9uID0gZmFsc2UgfSA9IHBhcmFtcztcbiAgICBjb25zdCBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50KCk7XG4gICAgY29uc3QgY29udGVudEVsID0gZnJhZ21lbnQuY3JlYXRlRGl2KCk7XG4gICAgYWRkUGx1Z2luQ3NzQ2xhc3Nlcyhjb250ZW50RWwsIENzc0NsYXNzLlBsdWdpbk5vdGljZUNvbnRlbnQpO1xuICAgIGNvbnRlbnRFbC5hcHBlbmRDaGlsZCh0aGlzLmJ1aWxkUHJlZml4ZWRNZXNzYWdlKG1lc3NhZ2UpKTtcbiAgICBjb250ZW50RWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZXZ0KSA9PiB7XG4gICAgICAvLyBBIGhhcmQtdG8tY2xvc2Ugbm90aWNlIG11c3Qgbm90IGRpc21pc3Mgb24gYW55IHN0cmF5IGNsaWNrOyBvbmx5IGl0cyBjbG9zZSBidXR0b24gKHZpYSB0aGVcbiAgICAgIC8vIENvbmZpcm1hdGlvbiBtb2RhbCkgbWF5IGRpc21pc3MgaXQuXG4gICAgICBpZiAocmVxdWlyZXNDbG9zZUNvbmZpcm1hdGlvbikge1xuICAgICAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChldnQudGFyZ2V0IGluc3RhbmNlb2YgRWxlbWVudCAmJiBldnQudGFyZ2V0LmNsb3Nlc3QoSU5URVJBQ1RJVkVfRUxFTUVOVF9TRUxFQ1RPUikpIHtcbiAgICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHJlcXVpcmVzQ2xvc2VDb25maXJtYXRpb24pIHtcbiAgICAgIHRoaXMuYXBwZW5kQ2xvc2VCdXR0b24oY29udGVudEVsLCBlbnN1cmVOb25OdWxsYWJsZShnZXROb3RpY2UpKTtcbiAgICB9XG4gICAgcmV0dXJuIGZyYWdtZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyB0aGUgbm90aWNlIGNvbnRlbnQsIHByZWZpeGluZyB0aGUgbWVzc2FnZSB3aXRoIHRoZSBwbHVnaW4gbmFtZSBpbiBhIHN0eWxlZCBlbGVtZW50IHNvIGl0IGlzXG4gICAqIHZpc3VhbGx5IGRpc3Rpbmd1aXNoZWQgZnJvbSB0aGUgbWVzc2FnZSBib2R5LlxuICAgKlxuICAgKiBAcGFyYW0gbWVzc2FnZSAtIFRoZSBtZXNzYWdlIHRvIGRpc3BsYXkgYWZ0ZXIgdGhlIHBsdWdpbiBuYW1lIHByZWZpeC5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgRG9jdW1lbnRGcmFnbWVudH0gd2l0aCB0aGUgc3R5bGVkIHBsdWdpbiBuYW1lIHByZWZpeCBmb2xsb3dlZCBieSB0aGUgbWVzc2FnZS5cbiAgICovXG4gIHByaXZhdGUgYnVpbGRQcmVmaXhlZE1lc3NhZ2UobWVzc2FnZTogRG9jdW1lbnRGcmFnbWVudCB8IHN0cmluZyk6IERvY3VtZW50RnJhZ21lbnQge1xuICAgIGNvbnN0IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnQoKTtcbiAgICBjb25zdCBuYW1lRWwgPSBjcmVhdGVTcGFuKHsgdGV4dDogdGhpcy5wbHVnaW5OYW1lIH0pO1xuICAgIGFkZFBsdWdpbkNzc0NsYXNzZXMobmFtZUVsLCBDc3NDbGFzcy5QbHVnaW5Ob3RpY2VOYW1lKTtcbiAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChuYW1lRWwpO1xuICAgIGlmICghdGhpcy5fbG9hZGVkKSB7XG4gICAgICBmcmFnbWVudC5hcHBlbmRUZXh0KCcgKHVubG9hZGVkKScpO1xuICAgIH1cbiAgICBmcmFnbWVudC5hcHBlbmRUZXh0KCdcXG4nKTtcbiAgICBpZiAodHlwZW9mIG1lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICBmcmFnbWVudC5hcHBlbmRUZXh0KG1lc3NhZ2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChtZXNzYWdlKTtcbiAgICB9XG4gICAgcmV0dXJuIGZyYWdtZW50O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQZXJtYW5lbnROb3RpY2UoKTogTm90aWNlIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UGVybWFuZW50Tm90aWNlcygpLmdldCh0aGlzLnBsdWdpbk5hbWUpID8/IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGdldFBlcm1hbmVudE5vdGljZXMoKTogTWFwPHN0cmluZywgTm90aWNlPiB7XG4gICAgcmV0dXJuIGdldE9ic2lkaWFuRGV2VXRpbHNTdGF0ZTxNYXA8c3RyaW5nLCBOb3RpY2U+PihQRVJNQU5FTlRfTk9USUNFU19TVEFURV9LRVksIG5ldyBNYXA8c3RyaW5nLCBOb3RpY2U+KCkpLnZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ha2VzIGEgbm90aWNlIGhhcmQgdG8gY2xvc2U6IG1hcmtzIGl0cyBvdXRlciBlbGVtZW50IChzbyB0aGUgQ1NTIG5ldXRyYWxpemVzIGl0cyBwYWRkaW5nKSBhbmRcbiAgICogaW5zdGFsbHMgYSBjYXB0dXJlLXBoYXNlIGNsaWNrIGd1YXJkIHRoYXQgc3RvcHMgZXZlcnkgY2xpY2sgZXhjZXB0IG9uIHRoZSBjbG9zZSBidXR0b24gZnJvbVxuICAgKiByZWFjaGluZyBPYnNpZGlhbidzIG93biBkaXNtaXNzIGhhbmRsZXIuXG4gICAqXG4gICAqIEBwYXJhbSBub3RpY2UgLSBUaGUgbm90aWNlIHRvIGd1YXJkLlxuICAgKiBAcGFyYW0gcmVxdWlyZXNDbG9zZUNvbmZpcm1hdGlvbiAtIFdoZXRoZXIgdGhlIG5vdGljZSByZXF1aXJlcyBjbG9zZSBjb25maXJtYXRpb247IHdoZW4gYGZhbHNlYCxcbiAgICogbm90aGluZyBpcyBpbnN0YWxsZWQuXG4gICAqL1xuICBwcml2YXRlIGluc3RhbGxDbG9zZUNvbmZpcm1hdGlvbkd1YXJkcyhub3RpY2U6IE5vdGljZSwgcmVxdWlyZXNDbG9zZUNvbmZpcm1hdGlvbjogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICghcmVxdWlyZXNDbG9zZUNvbmZpcm1hdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBUaGUgb3V0ZXIgYC5ub3RpY2VgIGVsZW1lbnQgKGBjb250YWluZXJFbGApIGNhcnJpZXMgT2JzaWRpYW4ncyBkaXNtaXNzLW9uLWNsaWNrIGhhbmRsZXIgYW5kIHRoZVxuICAgIC8vIFBhZGRpbmcgYSBzdHJheSBjbGljayBjb3VsZCBsYW5kIG9uOyBtYXJrIGl0IHNvIHRoZSBzdHlsZXNoZWV0IGRyb3BzIHRoYXQgcGFkZGluZy5cbiAgICBhZGRQbHVnaW5Dc3NDbGFzc2VzKG5vdGljZS5jb250YWluZXJFbCwgQ3NzQ2xhc3MuUGx1Z2luTm90aWNlUmVxdWlyZXNDb25maXJtYXRpb24pO1xuICAgIC8vIFN0b3AgZXZlcnkgY2xpY2sgb24gdGhlIG5vdGljZSBcdTIwMTQgZXhjZXB0IG9uIHRoZSBjbG9zZSBidXR0b24gXHUyMDE0IGZyb20gcmVhY2hpbmcgT2JzaWRpYW4ncyBkaXNtaXNzXG4gICAgLy8gSGFuZGxlci4gUmVnaXN0ZXJlZCBpbiB0aGUgY2FwdHVyZSBwaGFzZSBvbiB0aGUgb3V0ZXJtb3N0IGVsZW1lbnQgc28gaXQgYWx3YXlzIHJ1bnMgZmlyc3QuXG4gICAgbm90aWNlLmNvbnRhaW5lckVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGV2dCkgPT4ge1xuICAgICAgaWYgKGV2dC50YXJnZXQgaW5zdGFuY2VvZiBFbGVtZW50ICYmIGV2dC50YXJnZXQuY2xvc2VzdChgLiR7Q3NzQ2xhc3MuUGx1Z2luTm90aWNlQ2xvc2VCdXR0b259YCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH0sIHsgY2FwdHVyZTogdHJ1ZSB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0UGVybWFuZW50Tm90aWNlKG5vdGljZTogTm90aWNlIHwgbnVsbCk6IHZvaWQge1xuICAgIGNvbnN0IG1hcCA9IHRoaXMuZ2V0UGVybWFuZW50Tm90aWNlcygpO1xuICAgIGlmIChub3RpY2UpIHtcbiAgICAgIG1hcC5zZXQodGhpcy5wbHVnaW5OYW1lLCBub3RpY2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBtYXAuZGVsZXRlKHRoaXMucGx1Z2luTmFtZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNob3dzIGEgbm90aWNlIHdpdGggdGhlIGdpdmVuIGR1cmF0aW9uLiBBIHJldXNhYmxlIG5vdGljZSByZXBsYWNlcyB0aGUgY3VycmVudCByZXVzYWJsZSBub3RpY2UgKGFuZFxuICAgKiBpcyBvcHRpb25hbGx5IHJlZ2lzdGVyZWQgYXMgdGhpcyBwbHVnaW4ncyBwZXJtYW5lbnQgbm90aWNlKTsgYSBzdGFuZGFsb25lIG5vdGljZSBpcyB0cmFja2VkXG4gICAqIHNlcGFyYXRlbHksIGxlYXZpbmcgdGhlIHJldXNhYmxlIHNsb3QgdW50b3VjaGVkLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMuXG4gICAqIEByZXR1cm5zIFRoZSBjcmVhdGVkIG5vdGljZS5cbiAgICovXG4gIHByaXZhdGUgc2hvd05vdGljZVdpdGhEdXJhdGlvbihwYXJhbXM6IFBsdWdpbk5vdGljZUNvbXBvbmVudFNob3dOb3RpY2VXaXRoRHVyYXRpb25QYXJhbXMpOiBOb3RpY2Uge1xuICAgIGNvbnN0IHsgZHVyYXRpb25Jbk1pbGxpc2Vjb25kcywgaXNSZXVzYWJsZSwgbWVzc2FnZSwgb25IaWRlLCByZXF1aXJlc0Nsb3NlQ29uZmlybWF0aW9uLCBzaG91bGRSZWdpc3RlckFzUGVybWFuZW50IH0gPSBwYXJhbXM7XG4gICAgLy8gT2JzaWRpYW4ncyBgTm90aWNlYCB0cmVhdHMgYW4gb21pdHRlZCBkdXJhdGlvbiBhcyBpdHMgZGVmYXVsdCwgc28gbWFwIHRoZSBgbnVsbGAgXCJubyBleHBsaWNpdFxuICAgIC8vIER1cmF0aW9uXCIgdmFsdWUgdG8gYHVuZGVmaW5lZGAuXG4gICAgY29uc3Qgbm90aWNlRHVyYXRpb25Jbk1pbGxpc2Vjb25kcyA9IGR1cmF0aW9uSW5NaWxsaXNlY29uZHMgPz8gdW5kZWZpbmVkO1xuXG4gICAgLy8gVGhlIGNsb3NlIGJ1dHRvbidzIGNvbmZpcm0gaGFuZGxlciBuZWVkcyB0aGUgYE5vdGljZWAsIHdoaWNoIGRvZXMgbm90IGV4aXN0IHVudGlsIGl0IGlzIGJ1aWx0IGZyb21cbiAgICAvLyBUaGlzIGNvbnRlbnQ7IGNhcHR1cmUgaXQgbGF6aWx5IHZpYSBhIGhvbGRlciByZXNvbHZlZCBhdCBjbGljayB0aW1lLiBUaGUgZ2V0dGVyIGlzIGNyZWF0ZWQgb25seVxuICAgIC8vIEZvciBhIGhhcmQtdG8tY2xvc2Ugbm90aWNlIFx1MjAxNCB0aGUgb25seSBraW5kIHRoYXQgaGFzIGEgY2xvc2UgYnV0dG9uLlxuICAgIGxldCBidWlsdE5vdGljZTogTm90aWNlIHwgbnVsbCA9IG51bGw7XG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuYnVpbGROb3RpY2VDb250ZW50KG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllczxQbHVnaW5Ob3RpY2VDb21wb25lbnRCdWlsZE5vdGljZUNvbnRlbnRQYXJhbXM+KHtcbiAgICAgIGdldE5vdGljZTogcmVxdWlyZXNDbG9zZUNvbmZpcm1hdGlvbiA/ICgpOiBOb3RpY2UgfCBudWxsID0+IGJ1aWx0Tm90aWNlIDogdW5kZWZpbmVkLFxuICAgICAgbWVzc2FnZSxcbiAgICAgIHJlcXVpcmVzQ2xvc2VDb25maXJtYXRpb25cbiAgICB9KSk7XG5cbiAgICBpZiAoIWlzUmV1c2FibGUpIHtcbiAgICAgIGJ1aWx0Tm90aWNlID0gbmV3IE5vdGljZShjb250ZW50LCBub3RpY2VEdXJhdGlvbkluTWlsbGlzZWNvbmRzKTtcbiAgICAgIHRoaXMuaW5zdGFsbENsb3NlQ29uZmlybWF0aW9uR3VhcmRzKGJ1aWx0Tm90aWNlLCByZXF1aXJlc0Nsb3NlQ29uZmlybWF0aW9uKTtcbiAgICAgIHRoaXMud2lyZU9uSGlkZShidWlsdE5vdGljZSwgb25IaWRlKTtcbiAgICAgIHRoaXMuc3RhbmRhbG9uZU5vdGljZXMuYWRkKGJ1aWx0Tm90aWNlKTtcbiAgICAgIHJldHVybiBidWlsdE5vdGljZTtcbiAgICB9XG5cbiAgICB0aGlzLm5vdGljZT8uaGlkZSgpO1xuICAgIGJ1aWx0Tm90aWNlID0gbmV3IE5vdGljZShjb250ZW50LCBub3RpY2VEdXJhdGlvbkluTWlsbGlzZWNvbmRzKTtcbiAgICB0aGlzLm5vdGljZSA9IGJ1aWx0Tm90aWNlO1xuICAgIHRoaXMuaW5zdGFsbENsb3NlQ29uZmlybWF0aW9uR3VhcmRzKGJ1aWx0Tm90aWNlLCByZXF1aXJlc0Nsb3NlQ29uZmlybWF0aW9uKTtcbiAgICB0aGlzLndpcmVPbkhpZGUoYnVpbHROb3RpY2UsIG9uSGlkZSk7XG5cbiAgICBpZiAoc2hvdWxkUmVnaXN0ZXJBc1Blcm1hbmVudCkge1xuICAgICAgdGhpcy5zZXRQZXJtYW5lbnROb3RpY2UoYnVpbHROb3RpY2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldFBlcm1hbmVudE5vdGljZShudWxsKTtcbiAgICB9XG4gICAgcmV0dXJuIGJ1aWx0Tm90aWNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFdyYXBzIGEgbm90aWNlJ3MgYGhpZGVgIHNvIHRoZSBnaXZlbiBjYWxsYmFjayBydW5zIHRoZSBmaXJzdCB0aW1lIHRoZSBub3RpY2UgaXMgaGlkZGVuIFx1MjAxNCBieSB0aGVcbiAgICogdXNlciwgYnkgYSByZXBsYWNpbmcgbm90aWNlLCBieSBpdHMgZHVyYXRpb24gZWxhcHNpbmcsIG9yIG9uIHVubG9hZC4gRG9lcyBub3RoaW5nIHdoZW4gbm8gY2FsbGJhY2tcbiAgICogaXMgZ2l2ZW4uXG4gICAqXG4gICAqIEBwYXJhbSBub3RpY2UgLSBUaGUgbm90aWNlIHdob3NlIGBoaWRlYCB0byB3cmFwLlxuICAgKiBAcGFyYW0gb25IaWRlIC0gVGhlIGNhbGxiYWNrIHRvIGludm9rZSBvbiB0aGUgZmlyc3QgaGlkZSwgb3IgYHVuZGVmaW5lZGAgdG8gc2tpcCB3cmFwcGluZy5cbiAgICovXG4gIHByaXZhdGUgd2lyZU9uSGlkZShub3RpY2U6IE5vdGljZSwgb25IaWRlOiAoKCkgPT4gUHJvbWlzYWJsZTx2b2lkPikgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICBpZiAoIW9uSGlkZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBSdW4gYG9uSGlkZWAgdGhlIGZpcnN0IHRpbWUgdGhlIG5vdGljZSBpcyBoaWRkZW4uIEEgYG9uY2VgIHBhdGNoIG9uIGBoaWRlYCBpbnRlcmNlcHRzIGV4YWN0bHkgb25lXG4gICAgLy8gQ2FsbCB0aGVuIHVuaW5zdGFsbHMgaXRzZWxmICh1bmxvYWRpbmcgdGhpcyBkZWRpY2F0ZWQgY29tcG9uZW50KSwgc28gdGhlcmUgaXMgbm8gbWFudWFsXG4gICAgLy8gU2luZ2xlLWZpcmUgYm9va2tlZXBpbmcgYW5kIG5vIGxpbmdlcmluZyBwYXRjaCBvbiB0aGUgdHJhbnNpZW50IG5vdGljZS5cbiAgICBjb25zdCBwYXRjaENvbXBvbmVudCA9IG5ldyBNb25rZXlBcm91bmRDb21wb25lbnQoKTtcbiAgICBwYXRjaENvbXBvbmVudC5sb2FkKCk7XG4gICAgcGF0Y2hDb21wb25lbnQucmVnaXN0ZXJNZXRob2RQYXRjaCh7XG4gICAgICBtZXRob2ROYW1lOiAnaGlkZScsXG4gICAgICBvYmo6IG5vdGljZSxcbiAgICAgIG9uY2U6IHRydWUsXG4gICAgICBwYXRjaEhhbmRsZXI6ICh7IGZhbGxiYWNrIH0pID0+IHtcbiAgICAgICAgZmFsbGJhY2soKTtcbiAgICAgICAgaW52b2tlQXN5bmNTYWZlbHkoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGF3YWl0IG9uSGlkZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFTQTtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFJUCxTQUFTLHlCQUF5QjtBQUNsQyxTQUFTLG1DQUFtQztBQUM1QyxTQUFTLGdDQUFnQztBQUN6QyxTQUFTLHlCQUF5QjtBQUNsQyxTQUFTLG9CQUFvQjtBQUM3QixTQUFTLGdCQUFn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
394
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbXBvbmVudHMvcGx1Z2luLW5vdGljZS1jb21wb25lbnQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBDb21wb25lbnQgdGhhdCBtYW5hZ2VzIGRpc3BsYXlpbmcgbm90aWNlcyB0byB0aGUgdXNlci5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgUHJvbWlzYWJsZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB7XG4gIEJ1dHRvbkNvbXBvbmVudCxcbiAgTm90aWNlLFxuICBzZXRJY29uXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBWYWx1ZVByb3ZpZGVyIH0gZnJvbSAnLi4vLi4vdmFsdWUtcHJvdmlkZXIudHMnO1xuXG5pbXBvcnQgeyBpbnZva2VBc3luY1NhZmVseSB9IGZyb20gJy4uLy4uL2FzeW5jLnRzJztcbmltcG9ydCB7IG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllcyB9IGZyb20gJy4uLy4uL29iamVjdC11dGlscy50cyc7XG5pbXBvcnQgeyBnZXRPYnNpZGlhbkRldlV0aWxzU3RhdGUgfSBmcm9tICcuLi8uLi9vYnNpZGlhbi1kZXYtdXRpbHMtc3RhdGUudHMnO1xuaW1wb3J0IHsgZW5zdXJlTm9uTnVsbGFibGUgfSBmcm9tICcuLi8uLi90eXBlLWd1YXJkcy50cyc7XG5pbXBvcnQgeyByZXNvbHZlVmFsdWUgfSBmcm9tICcuLi8uLi92YWx1ZS1wcm92aWRlci50cyc7XG5pbXBvcnQgeyBDc3NDbGFzcyB9IGZyb20gJy4uL2Nzcy1jbGFzcy50cyc7XG5pbXBvcnQgeyB0IH0gZnJvbSAnLi4vaTE4bi9pMThuLnRzJztcbmltcG9ydCB7IGNvbmZpcm0gfSBmcm9tICcuLi9tb2RhbHMvY29uZmlybS50cyc7XG5pbXBvcnQgeyBhZGRQbHVnaW5Dc3NDbGFzc2VzIH0gZnJvbSAnLi4vcGx1Z2luL3BsdWdpbi1jb250ZXh0LnRzJztcbmltcG9ydCB7IENvbXBvbmVudEV4IH0gZnJvbSAnLi9jb21wb25lbnQtZXgudHMnO1xuaW1wb3J0IHsgTW9ua2V5QXJvdW5kQ29tcG9uZW50IH0gZnJvbSAnLi9tb25rZXktYXJvdW5kLWNvbXBvbmVudC50cyc7XG5cbmNvbnN0IFBFUk1BTkVOVF9OT1RJQ0VTX1NUQVRFX0tFWSA9ICdwbHVnaW4tbm90aWNlLWNvbXBvbmVudDpwZXJtYW5lbnQtbm90aWNlcyc7XG5jb25zdCBQRVJNQU5FTlRfTk9USUNFX0RVUkFUSU9OX0lOX01JTExJU0VDT05EUyA9IDA7XG5jb25zdCBERUZBVUxUX0RFTEFZX0JFRk9SRV9TSE9XX0lOX01JTExJU0VDT05EUyA9IDUwMDtcblxuLy8gRWxlbWVudHMgYSB1c2VyIGNsaWNrcyB0byBhY3Qgb24gdGhlbSByYXRoZXIgdGhhbiB0byBkaXNtaXNzIHRoZSBub3RpY2UuIEEgY2xpY2sgbGFuZGluZyBvbiAob3Jcbi8vIEluc2lkZSkgb25lIG9mIHRoZXNlIGlzIGtlcHQgZnJvbSBidWJibGluZyB0byB0aGUgbm90aWNlLCBzbyB0aGUgbm90aWNlIHN0YXlzIG9wZW4uXG5jb25zdCBJTlRFUkFDVElWRV9FTEVNRU5UX1NFTEVDVE9SID0gJ2EsIGJ1dHRvbiwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIGxhYmVsLCBbY29udGVudGVkaXRhYmxlPVwidHJ1ZVwiXSwgW3JvbGU9XCJidXR0b25cIl0sIFtyb2xlPVwibGlua1wiXSwgW3JvbGU9XCJjaGVja2JveFwiXSwgW3JvbGU9XCJ0YWJcIl0sIFtyb2xlPVwibWVudWl0ZW1cIl0nO1xuXG4vKipcbiAqIEEgaGFuZGxlIHRvIGEgZGVsYXllZCBub3RpY2UgY3JlYXRlZCBieSB7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50LnNob3dOb3RpY2VBZnRlckRlbGF5fS4gSXQgaXMgYVxuICoge0BsaW5rIERpc3Bvc2FibGV9IChzbyBpdCBjYW4gYmUgdXNlZCB3aXRoIGB1c2luZ2ApIHRoYXQgYWxzbyBsZXRzIHRoZSBjb250ZW50IGJlIHVwZGF0ZWQgd2hpbGUgdGhlXG4gKiBub3RpY2UgaXMgc2hvd24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGx1Z2luTm90aWNlQ29tcG9uZW50RGVsYXllZE5vdGljZSBleHRlbmRzIERpc3Bvc2FibGUge1xuICAvKipcbiAgICogUmVwbGFjZXMgdGhlIG5vdGljZSBjb250ZW50LCByZS1hcHBseWluZyB0aGUgcGx1Z2luLW5hbWUgcHJlZml4LCB0aGUgaW50ZXJhY3RpdmUtY2xpY2sgZ3VhcmQsIGFuZFxuICAgKiB0aGUgQ2FuY2VsIGJ1dHRvbi4gVXNlZnVsIGZvciByZXBvcnRpbmcgcHJvZ3Jlc3MuIElmIHRoZSBkZWxheSBoYXMgbm90IGVsYXBzZWQgeWV0LCB0aGUgbmV3IGNvbnRlbnRcbiAgICogYmVjb21lcyB3aGF0IGlzIHNob3duIG9uY2UgaXQgZG9lcy5cbiAgICpcbiAgICogQHBhcmFtIGNvbnRlbnQgLSBUaGUgbmV3IG5vdGljZSBjb250ZW50LlxuICAgKi9cbiAgc2V0Q29udGVudChjb250ZW50OiBEb2N1bWVudEZyYWdtZW50IHwgc3RyaW5nKTogdm9pZDtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50LnNob3dOb3RpY2VBZnRlckRlbGF5fS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5Ob3RpY2VDb21wb25lbnRTaG93Tm90aWNlQWZ0ZXJEZWxheVBhcmFtcyB7XG4gIC8qKlxuICAgKiBXaGVuIHByb3ZpZGVkLCBhIENhbmNlbCBidXR0b24gaXMgYXBwZW5kZWQgdG8gdGhlIG5vdGljZTsgY2xpY2tpbmcgaXQgYWJvcnRzIHRoaXMgY29udHJvbGxlci4gV2hlblxuICAgKiBvbWl0dGVkLCBubyBDYW5jZWwgYnV0dG9uIGlzIHNob3duLlxuICAgKi9cbiAgcmVhZG9ubHkgYWJvcnRDb250cm9sbGVyPzogQWJvcnRDb250cm9sbGVyO1xuXG4gIC8qKlxuICAgKiBUaGUgdGV4dCBvZiB0aGUgQ2FuY2VsIGJ1dHRvbiBzaG93biB3aGVuIHtAbGluayBQbHVnaW5Ob3RpY2VDb21wb25lbnRTaG93Tm90aWNlQWZ0ZXJEZWxheVBhcmFtcy5hYm9ydENvbnRyb2xsZXJ9XG4gICAqIGlzIHByb3ZpZGVkLiBXaGVuIG9taXR0ZWQsIHRoZSBsb2NhbGl6ZWQgYENhbmNlbGAgbGFiZWwgaXMgdXNlZC5cbiAgICovXG4gIHJlYWRvbmx5IGNhbmNlbEJ1dHRvblRleHQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBub3RpY2UgY29udGVudCwgcmVzb2x2ZWQgbGF6aWx5IG9ubHkgaWYgdGhlIGRlbGF5IGVsYXBzZXMgXHUyMDE0IHNvIGFuIG9wZXJhdGlvbiB0aGF0IGZpbmlzaGVzXG4gICAqIHNvb25lciBuZXZlciBidWlsZHMgaXQuXG4gICAqL1xuICByZWFkb25seSBjb250ZW50OiBWYWx1ZVByb3ZpZGVyPERvY3VtZW50RnJhZ21lbnQgfCBzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBIb3cgbG9uZyB0aGUgb3BlcmF0aW9uIG11c3QgcnVuIGJlZm9yZSB0aGUgbm90aWNlIGlzIHNob3duLiBPcGVyYXRpb25zIHRoYXQgZmluaXNoIHNvb25lciBuZXZlclxuICAgKiBzaG93IGEgbm90aWNlLCBhdm9pZGluZyBhIGRpc3RyYWN0aW5nIGZsYXNoLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgNTAwYFxuICAgKi9cbiAgcmVhZG9ubHkgZGVsYXlJbk1pbGxpc2Vjb25kcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50LnNob3dOb3RpY2V9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpbk5vdGljZUNvbXBvbmVudFNob3dOb3RpY2VPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIG5vdGljZSBzaG91bGQgc3RheSB1bnRpbCBpdCBpcyByZXBsYWNlZCwgdGhlIHBsdWdpbiBpcyByZWxvYWRlZCwgb3IgdGhlIHVzZXIgZGlzbWlzc2VzIGl0LlxuICAgKlxuICAgKiBBIHBlcm1hbmVudCBub3RpY2UgaXMgc2hvd24gd2l0aCBhbiBpbmZpbml0ZSBkdXJhdGlvbiBhbmQgaXMgbm90IGhpZGRlbiB3aGVuIHRoZSBjb21wb25lbnQgdW5sb2Fkcywgc28gaXQgY2FuXG4gICAqIGNvbW11bmljYXRlIHN0YXRlIHRoYXQgb3V0bGl2ZXMgdGhlIHBsdWdpbiAoZS5nLiBhIGNsZWFudXAgdGhhdCByZXF1aXJlcyBhIHJlbG9hZCkuIFRoZXJlIGlzIGF0IG1vc3Qgb25lIHBlcm1hbmVudFxuICAgKiBub3RpY2UgcGVyIHBsdWdpbjogaXQgaXMgaGlkZGVuIGJ5IHRoZSBuZXh0IHtAbGluayBQbHVnaW5Ob3RpY2VDb21wb25lbnQuc2hvd05vdGljZX0gY2FsbCBhbmQgZGlzbWlzc2VkXG4gICAqIGF1dG9tYXRpY2FsbHkgdGhlIG5leHQgdGltZSB0aGUgY29tcG9uZW50IGxvYWRzIChpLmUuIHdoZW4gdGhlIHBsdWdpbiBpcyByZS1lbmFibGVkKS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgaXNQZXJtYW5lbnQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBub3RpY2Ugb2NjdXBpZXMgdGhlIHNpbmdsZSBwZXItcGx1Z2luIHJldXNhYmxlIHNsb3QuXG4gICAqXG4gICAqIEEgcmV1c2FibGUgbm90aWNlIHRha2VzIHRoZSBzaGFyZWQgc2xvdDogdGhlIG5leHQgcmV1c2FibGUgbm90aWNlIGhpZGVzIGl0LCBhbmQgaXQgaXMgaGlkZGVuIG9uIHVubG9hZC5cbiAgICogQSBub24tcmV1c2FibGUgKHN0YW5kYWxvbmUpIG5vdGljZSBpcyBub3QgcGxhY2VkIGluIHRoZSBzbG90IFx1MjAxNCBpdCBuZXZlciBoaWRlcywgYW5kIGlzIG5ldmVyIGhpZGRlbiBieSwgYVxuICAgKiByZXVzYWJsZSBub3RpY2U7IG11bHRpcGxlIHN0YW5kYWxvbmUgbm90aWNlcyBjb2V4aXN0LiBTdGFuZGFsb25lIG5vdGljZXMgYXJlIHN0aWxsIGhpZGRlbiB0b2dldGhlciBvbiB1bmxvYWQuXG4gICAqXG4gICAqIEEgcGVybWFuZW50IG5vdGljZSBtdXN0IGJlIHJldXNhYmxlICh7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50U2hvd05vdGljZU9wdGlvbnMuaXNQZXJtYW5lbnR9IGltcGxpZXNcbiAgICogYGlzUmV1c2FibGVgKTsgcGFzc2luZyBgaXNSZXVzYWJsZTogZmFsc2VgIHRvZ2V0aGVyIHdpdGggYGlzUGVybWFuZW50OiB0cnVlYCB0aHJvd3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB0cnVlYFxuICAgKi9cbiAgcmVhZG9ubHkgaXNSZXVzYWJsZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEEgY2FsbGJhY2sgaW52b2tlZCB3aGVuIHRoZSBub3RpY2UgaXMgaGlkZGVuIFx1MjAxNCB3aGV0aGVyIGJ5IHRoZSB1c2VyIGNsb3NpbmcgaXQsIGJ5IGEgbGF0ZXIgcmV1c2FibGVcbiAgICogbm90aWNlIHJlcGxhY2luZyBpdCwgYnkgaXRzIGR1cmF0aW9uIGVsYXBzaW5nLCBvciBvbiBjb21wb25lbnQgdW5sb2FkLiBJdCBydW5zIGF0IG1vc3Qgb25jZSBwZXJcbiAgICogbm90aWNlLiBBbiBhc3luYyBjYWxsYmFjayBpcyBydW4gZmlyZS1hbmQtZm9yZ2V0IChpdHMgcmVqZWN0aW9uIHN1cmZhY2VzIHRocm91Z2ggdGhlIGFzeW5jLWVycm9yXG4gICAqIHBpcGVsaW5lKS5cbiAgICovXG4gIG9uSGlkZT8odGhpczogdm9pZCk6IFByb21pc2FibGU8dm9pZD47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIG5vdGljZSBpcyBoYXJkIHRvIGNsb3NlOiBpdCBkb2VzIG5vdCBkaXNtaXNzIG9uIGFueSBzdHJheSBjbGljaywgYW5kIGluc3RlYWQgc2hvd3MgYVxuICAgKiBjbG9zZSAoWCkgYnV0dG9uIHdob3NlIGNsaWNrIG9wZW5zIGEgY29uZmlybWF0aW9uIG1vZGFsLCBkaXNtaXNzaW5nIHRoZSBub3RpY2Ugb25seSBpZiBjb25maXJtZWQuXG4gICAqXG4gICAqIEEgaGFyZC10by1jbG9zZSBub3RpY2UgaXMgc2hvd24gd2l0aCBhbiBpbmZpbml0ZSBkdXJhdGlvbiBhbmQgaXMgc3RhbmRhbG9uZSAoaW1wbGllc1xuICAgKiB7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50U2hvd05vdGljZU9wdGlvbnMuaXNSZXVzYWJsZX0gYD0gZmFsc2VgKSwgc28gYSBsYXRlciBub3RpY2UgbmV2ZXJcbiAgICogc2lsZW50bHkgcmVwbGFjZXMgaXQ7IHBhc3NpbmcgYGlzUmV1c2FibGU6IHRydWVgIHRvZ2V0aGVyIHdpdGggYHJlcXVpcmVzQ2xvc2VDb25maXJtYXRpb246IHRydWVgXG4gICAqIHRocm93cy5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgcmVxdWlyZXNDbG9zZUNvbmZpcm1hdGlvbj86IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBQbHVnaW5Ob3RpY2VDb21wb25lbnRCdWlsZERlbGF5ZWROb3RpY2VNZXNzYWdlUGFyYW1zIHtcbiAgcmVhZG9ubHkgYWJvcnRDb250cm9sbGVyPzogQWJvcnRDb250cm9sbGVyO1xuICByZWFkb25seSBjYW5jZWxCdXR0b25UZXh0Pzogc3RyaW5nO1xuICByZWFkb25seSBjb250ZW50OiBEb2N1bWVudEZyYWdtZW50IHwgc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgUGx1Z2luTm90aWNlQ29tcG9uZW50QnVpbGROb3RpY2VDb250ZW50UGFyYW1zIHtcbiAgLyoqXG4gICAqIFJlc29sdmVzIHRoZSBub3RpY2UgdGhpcyBjb250ZW50IGJlbG9uZ3MgdG8sIHVzZWQgYnkgdGhlIGNsb3NlIGJ1dHRvbidzIGhhbmRsZXIuIFRoZSBub3RpY2UgZG9lc1xuICAgKiBub3QgZXhpc3QgeWV0IHdoZW4gdGhlIGNvbnRlbnQgaXMgYnVpbHQsIHNvIGl0IGlzIHJlc29sdmVkIGxhemlseSBhdCBjbGljayB0aW1lLiBSZXF1aXJlZCB3aGVuXG4gICAqIHtAbGluayBQbHVnaW5Ob3RpY2VDb21wb25lbnRCdWlsZE5vdGljZUNvbnRlbnRQYXJhbXMucmVxdWlyZXNDbG9zZUNvbmZpcm1hdGlvbn0gaXMgYHRydWVgLlxuICAgKi9cbiAgZ2V0Tm90aWNlPyh0aGlzOiB2b2lkKTogTm90aWNlIHwgbnVsbDtcblxuICAvKipcbiAgICogVGhlIG1lc3NhZ2UgdG8gZGlzcGxheSBhZnRlciB0aGUgcGx1Z2luIG5hbWUgcHJlZml4LlxuICAgKi9cbiAgcmVhZG9ubHkgbWVzc2FnZTogRG9jdW1lbnRGcmFnbWVudCB8IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgbm90aWNlIGlzIGhhcmQgdG8gY2xvc2U6IHN0b3BzIGV2ZXJ5IGNsaWNrIGZyb20gZGlzbWlzc2luZyBpdCBhbmQgYWRkcyBhIGNsb3NlIGJ1dHRvblxuICAgKiBndWFyZGVkIGJ5IGEgY29uZmlybWF0aW9uIG1vZGFsLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSByZXF1aXJlc0Nsb3NlQ29uZmlybWF0aW9uPzogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIFBsdWdpbk5vdGljZUNvbXBvbmVudENvbnN0cnVjdG9yUGFyYW1zIHtcbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG4gIHJlYWRvbmx5IHBsdWdpbk5hbWU6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFBsdWdpbk5vdGljZUNvbXBvbmVudFNob3dOb3RpY2VXaXRoRHVyYXRpb25QYXJhbXMge1xuICByZWFkb25seSBkdXJhdGlvbkluTWlsbGlzZWNvbmRzOiBudWxsIHwgbnVtYmVyO1xuICByZWFkb25seSBpc1JldXNhYmxlOiBib29sZWFuO1xuICByZWFkb25seSBtZXNzYWdlOiBEb2N1bWVudEZyYWdtZW50IHwgc3RyaW5nO1xuICByZWFkb25seSBvbkhpZGU6ICgoKSA9PiBQcm9taXNhYmxlPHZvaWQ+KSB8IHVuZGVmaW5lZDtcbiAgcmVhZG9ubHkgcmVxdWlyZXNDbG9zZUNvbmZpcm1hdGlvbjogYm9vbGVhbjtcbiAgcmVhZG9ubHkgc2hvdWxkUmVnaXN0ZXJBc1Blcm1hbmVudDogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBNYW5hZ2VzIHNob3dpbmcgcGx1Z2luIG5vdGljZXMuIEF1dG9tYXRpY2FsbHkgaGlkZXMgdGhlIHByZXZpb3VzIG5vdGljZSB3aGVuIGEgbmV3IG9uZSBpcyBzaG93bi5cbiAqL1xuZXhwb3J0IGNsYXNzIFBsdWdpbk5vdGljZUNvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEV4IHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4gbmFtZSAoc2hvd24gYXMgcHJlZml4IGluIG5vdGljZXMpLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHBsdWdpbk5hbWU6IHN0cmluZztcblxuICBwcml2YXRlIG5vdGljZTogTm90aWNlIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGVuZGluZ1RpbWVyQ2FuY2VsbGF0aW9ucyA9IG5ldyBTZXQ8KCkgPT4gdm9pZD4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBzdGFuZGFsb25lTm90aWNlcyA9IG5ldyBTZXQ8Tm90aWNlPigpO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IHBsdWdpbiBub3RpY2UgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGNvbnN0cnVjdG9yIHBhcmFtZXRlcnMuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBQbHVnaW5Ob3RpY2VDb21wb25lbnRDb25zdHJ1Y3RvclBhcmFtcykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5hcHAgPSBwYXJhbXMuYXBwO1xuICAgIHRoaXMucGx1Z2luTmFtZSA9IHBhcmFtcy5wbHVnaW5OYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc21pc3NlcyB0aGUgcGVybWFuZW50IG5vdGljZSBsZWZ0IG92ZXIgZnJvbSBhIHByZXZpb3VzIGxvYWQgKGUuZy4gYSBwcmV2aW91cyBwbHVnaW4gc2Vzc2lvbikgb24gbG9hZC5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBvbmxvYWQoKTogdm9pZCB7XG4gICAgc3VwZXIub25sb2FkKCk7XG4gICAgY29uc3QgcGVybWFuZW50Tm90aWNlID0gdGhpcy5nZXRQZXJtYW5lbnROb3RpY2UoKTtcbiAgICBwZXJtYW5lbnROb3RpY2U/LmhpZGUoKTtcbiAgICB0aGlzLnNldFBlcm1hbmVudE5vdGljZShudWxsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIaWRlcyB0aGUgY3VycmVudCBub3RpY2Ugb24gdW5sb2FkLCB1bmxlc3MgaXQgaXMgdGhlIHBlcm1hbmVudCBub3RpY2UgKHdoaWNoIGlzIG1lYW50IHRvIG91dGxpdmUgdGhlIHBsdWdpbikuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgb251bmxvYWQoKTogdm9pZCB7XG4gICAgLy8gQ2FuY2VsIGFueSBkZWxheWVkIG5vdGljZSB3aG9zZSB0aW1lciBoYXMgbm90IGZpcmVkIHlldCwgc28gaXQgbmV2ZXIgYXBwZWFycyBhZnRlciB1bmxvYWQuXG4gICAgZm9yIChjb25zdCBjYW5jZWxQZW5kaW5nVGltZXIgb2YgWy4uLnRoaXMucGVuZGluZ1RpbWVyQ2FuY2VsbGF0aW9uc10pIHtcbiAgICAgIGNhbmNlbFBlbmRpbmdUaW1lcigpO1xuICAgIH1cbiAgICBpZiAodGhpcy5nZXRQZXJtYW5lbnROb3RpY2UoKSAhPT0gdGhpcy5ub3RpY2UpIHtcbiAgICAgIHRoaXMubm90aWNlPy5oaWRlKCk7XG4gICAgfVxuICAgIGZvciAoY29uc3Qgc3RhbmRhbG9uZU5vdGljZSBvZiB0aGlzLnN0YW5kYWxvbmVOb3RpY2VzKSB7XG4gICAgICBzdGFuZGFsb25lTm90aWNlLmhpZGUoKTtcbiAgICB9XG4gICAgdGhpcy5zdGFuZGFsb25lTm90aWNlcy5jbGVhcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3BsYXlzIGEgbm90aWNlIG1lc3NhZ2UgdG8gdGhlIHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2UgdG8gZGlzcGxheS5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgZGlzcGxheWluZyB0aGUgbm90aWNlLlxuICAgKiBAcmV0dXJucyBUaGUgbm90aWNlIG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyBzaG93Tm90aWNlKG1lc3NhZ2U6IERvY3VtZW50RnJhZ21lbnQgfCBzdHJpbmcsIG9wdGlvbnM/OiBQbHVnaW5Ob3RpY2VDb21wb25lbnRTaG93Tm90aWNlT3B0aW9ucyk6IE5vdGljZSB7XG4gICAgY29uc3QgaXNQZXJtYW5lbnQgPSBvcHRpb25zPy5pc1Blcm1hbmVudCA/PyBmYWxzZTtcbiAgICBjb25zdCByZXF1aXJlc0Nsb3NlQ29uZmlybWF0aW9uID0gb3B0aW9ucz8ucmVxdWlyZXNDbG9zZUNvbmZpcm1hdGlvbiA/PyBmYWxzZTtcbiAgICBjb25zdCBpc1JldXNhYmxlID0gb3B0aW9ucz8uaXNSZXVzYWJsZSA/PyAhcmVxdWlyZXNDbG9zZUNvbmZpcm1hdGlvbjtcblxuICAgIGlmIChvcHRpb25zPy5pc1JldXNhYmxlID09PSB0cnVlICYmIHJlcXVpcmVzQ2xvc2VDb25maXJtYXRpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQSBub3RpY2UgdGhhdCByZXF1aXJlcyBjbG9zZSBjb25maXJtYXRpb24gY2Fubm90IGJlIHJldXNhYmxlLicpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucz8uaXNSZXVzYWJsZSA9PT0gZmFsc2UgJiYgaXNQZXJtYW5lbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQSBwZXJtYW5lbnQgbm90aWNlIG11c3QgYmUgcmV1c2FibGUuJyk7XG4gICAgfVxuXG4gICAgY29uc3QgZHVyYXRpb25Jbk1pbGxpc2Vjb25kcyA9IGlzUGVybWFuZW50IHx8IHJlcXVpcmVzQ2xvc2VDb25maXJtYXRpb24gPyBQRVJNQU5FTlRfTk9USUNFX0RVUkFUSU9OX0lOX01JTExJU0VDT05EUyA6IG51bGw7XG4gICAgcmV0dXJuIHRoaXMuc2hvd05vdGljZVdpdGhEdXJhdGlvbih7XG4gICAgICBkdXJhdGlvbkluTWlsbGlzZWNvbmRzLFxuICAgICAgaXNSZXVzYWJsZSxcbiAgICAgIG1lc3NhZ2UsXG4gICAgICBvbkhpZGU6IG9wdGlvbnM/Lm9uSGlkZSxcbiAgICAgIHJlcXVpcmVzQ2xvc2VDb25maXJtYXRpb24sXG4gICAgICBzaG91bGRSZWdpc3RlckFzUGVybWFuZW50OiBpc1Blcm1hbmVudFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNob3dzIGEgbm90aWNlIGRlc2NyaWJpbmcgYSBsb25nLXJ1bm5pbmcgb3BlcmF0aW9uLCBidXQgb25seSBvbmNlIHRoZSBvcGVyYXRpb24gaGFzIHJ1biBmb3IgbG9uZ2VyXG4gICAqIHRoYW4ge0BsaW5rIFBsdWdpbk5vdGljZUNvbXBvbmVudFNob3dOb3RpY2VBZnRlckRlbGF5UGFyYW1zLmRlbGF5SW5NaWxsaXNlY29uZHN9IFx1MjAxNCBzbyBvcGVyYXRpb25zXG4gICAqIHRoYXQgZmluaXNoIHNvb25lciBuZXZlciBmbGFzaCBhIG5vdGljZS4gVGhlIG5vdGljZSBzdGF5cyB1bnRpbCB0aGUgcmV0dXJuZWQge0BsaW5rIERpc3Bvc2FibGV9IGlzXG4gICAqIGRpc3Bvc2VkICh3aGljaCBhbHNvIGNhbmNlbHMgdGhlIHBlbmRpbmcgdGltZXIgaWYgaXQgaGFzIG5vdCBmaXJlZCB5ZXQpLCBzbyBpdCBjYW4gYmUgdXNlZCB3aXRoXG4gICAqIGB1c2luZ2AuIFdoZW4gYW4ge0BsaW5rIFBsdWdpbk5vdGljZUNvbXBvbmVudFNob3dOb3RpY2VBZnRlckRlbGF5UGFyYW1zLmFib3J0Q29udHJvbGxlcn0gaXMgZ2l2ZW4sIGFcbiAgICogQ2FuY2VsIGJ1dHRvbiB0aGF0IGFib3J0cyBpdCBpcyBhcHBlbmRlZCAoYW5kLCBiZWluZyBpbnRlcmFjdGl2ZSwgZG9lcyBub3QgZGlzbWlzcyB0aGUgbm90aWNlKS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHNcbiAgICogdXNpbmcgX25vdGljZSA9IHBsdWdpbk5vdGljZUNvbXBvbmVudC5zaG93Tm90aWNlQWZ0ZXJEZWxheSh7XG4gICAqICAgYWJvcnRDb250cm9sbGVyLFxuICAgKiAgIGNvbnRlbnQ6ICgpID0+IGJ1aWxkUHJvZ3Jlc3NGcmFnbWVudCgpXG4gICAqIH0pO1xuICAgKiBhd2FpdCBydW5PcGVyYXRpb24oYWJvcnRDb250cm9sbGVyLnNpZ25hbCk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFBsdWdpbk5vdGljZUNvbXBvbmVudERlbGF5ZWROb3RpY2V9IHRoYXQgaGlkZXMgdGhlIG5vdGljZSAob3IgY2FuY2VscyB0aGUgcGVuZGluZ1xuICAgKiB0aW1lcikgd2hlbiBkaXNwb3NlZCBhbmQgbGV0cyB0aGUgY29udGVudCBiZSB1cGRhdGVkIHdoaWxlIGl0IGlzIHNob3duLlxuICAgKi9cbiAgcHVibGljIHNob3dOb3RpY2VBZnRlckRlbGF5KHBhcmFtczogUGx1Z2luTm90aWNlQ29tcG9uZW50U2hvd05vdGljZUFmdGVyRGVsYXlQYXJhbXMpOiBQbHVnaW5Ob3RpY2VDb21wb25lbnREZWxheWVkTm90aWNlIHtcbiAgICBsZXQgc2hvd25Ob3RpY2U6IE5vdGljZSB8IG51bGwgPSBudWxsO1xuICAgIGxldCBpc0Rpc3Bvc2VkID0gZmFsc2U7XG4gICAgbGV0IHRpbWVySWQgPSAwO1xuICAgIGxldCBjdXJyZW50Q29udGVudDogVmFsdWVQcm92aWRlcjxEb2N1bWVudEZyYWdtZW50IHwgc3RyaW5nPiA9IHBhcmFtcy5jb250ZW50O1xuXG4gICAgY29uc3QgY2FuY2VsUGVuZGluZ1RpbWVyID0gKCk6IHZvaWQgPT4ge1xuICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aW1lcklkKTtcbiAgICAgIHRoaXMucGVuZGluZ1RpbWVyQ2FuY2VsbGF0aW9ucy5kZWxldGUoY2FuY2VsUGVuZGluZ1RpbWVyKTtcbiAgICB9O1xuXG4gICAgY29uc3QgYnVpbGREZWxheWVkTWVzc2FnZSA9IChjb250ZW50OiBEb2N1bWVudEZyYWdtZW50IHwgc3RyaW5nKTogRG9jdW1lbnRGcmFnbWVudCA9PlxuICAgICAgdGhpcy5idWlsZERlbGF5ZWROb3RpY2VNZXNzYWdlKG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllczxQbHVnaW5Ob3RpY2VDb21wb25lbnRCdWlsZERlbGF5ZWROb3RpY2VNZXNzYWdlUGFyYW1zPih7XG4gICAgICAgIGFib3J0Q29udHJvbGxlcjogcGFyYW1zLmFib3J0Q29udHJvbGxlcixcbiAgICAgICAgY2FuY2VsQnV0dG9uVGV4dDogcGFyYW1zLmNhbmNlbEJ1dHRvblRleHQsXG4gICAgICAgIGNvbnRlbnRcbiAgICAgIH0pKTtcblxuICAgIHRpbWVySWQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjYW5jZWxQZW5kaW5nVGltZXIoKTtcbiAgICAgIGludm9rZUFzeW5jU2FmZWx5KGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzb2x2ZWRDb250ZW50ID0gYXdhaXQgcmVzb2x2ZVZhbHVlKGN1cnJlbnRDb250ZW50LCB7fSk7XG4gICAgICAgIC8vIFRoZSBoYW5kbGUgbWF5IGhhdmUgYmVlbiBkaXNwb3NlZCB3aGlsZSB0aGUgY29udGVudCB3YXMgYmVpbmcgcmVzb2x2ZWQ7IGRvbid0IHNob3cgYSBzdGFsZSBub3RpY2UuXG4gICAgICAgIGlmIChpc0Rpc3Bvc2VkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHNob3duTm90aWNlID0gdGhpcy5zaG93Tm90aWNlV2l0aER1cmF0aW9uKHtcbiAgICAgICAgICBkdXJhdGlvbkluTWlsbGlzZWNvbmRzOiBQRVJNQU5FTlRfTk9USUNFX0RVUkFUSU9OX0lOX01JTExJU0VDT05EUyxcbiAgICAgICAgICBpc1JldXNhYmxlOiB0cnVlLFxuICAgICAgICAgIG1lc3NhZ2U6IGJ1aWxkRGVsYXllZE1lc3NhZ2UocmVzb2x2ZWRDb250ZW50KSxcbiAgICAgICAgICBvbkhpZGU6IHVuZGVmaW5lZCxcbiAgICAgICAgICByZXF1aXJlc0Nsb3NlQ29uZmlybWF0aW9uOiBmYWxzZSxcbiAgICAgICAgICBzaG91bGRSZWdpc3RlckFzUGVybWFuZW50OiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0sIHBhcmFtcy5kZWxheUluTWlsbGlzZWNvbmRzID8/IERFRkFVTFRfREVMQVlfQkVGT1JFX1NIT1dfSU5fTUlMTElTRUNPTkRTKTtcblxuICAgIHRoaXMucGVuZGluZ1RpbWVyQ2FuY2VsbGF0aW9ucy5hZGQoY2FuY2VsUGVuZGluZ1RpbWVyKTtcblxuICAgIHJldHVybiB7XG4gICAgICBzZXRDb250ZW50OiAoY29udGVudDogRG9jdW1lbnRGcmFnbWVudCB8IHN0cmluZyk6IHZvaWQgPT4ge1xuICAgICAgICBjdXJyZW50Q29udGVudCA9IGNvbnRlbnQ7XG4gICAgICAgIC8vIFJlLXdyYXAgc28gdGhlIHByZWZpeCwgaW50ZXJhY3RpdmUgZ3VhcmQsIGFuZCBDYW5jZWwgYnV0dG9uIHN1cnZpdmUgdGhlIGNvbnRlbnQgc3dhcC5cbiAgICAgICAgc2hvd25Ob3RpY2U/LnNldE1lc3NhZ2UodGhpcy5idWlsZE5vdGljZUNvbnRlbnQoeyBtZXNzYWdlOiBidWlsZERlbGF5ZWRNZXNzYWdlKGNvbnRlbnQpIH0pKTtcbiAgICAgIH0sXG4gICAgICBbU3ltYm9sLmRpc3Bvc2VdOiAoKTogdm9pZCA9PiB7XG4gICAgICAgIGlzRGlzcG9zZWQgPSB0cnVlO1xuICAgICAgICBjYW5jZWxQZW5kaW5nVGltZXIoKTtcbiAgICAgICAgc2hvd25Ob3RpY2U/LmhpZGUoKTtcbiAgICAgICAgaWYgKHRoaXMubm90aWNlID09PSBzaG93bk5vdGljZSkge1xuICAgICAgICAgIHRoaXMubm90aWNlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQXBwZW5kcyBhIGNsb3NlIChYKSBidXR0b24gdG8gdGhlIG5vdGljZSBjb250ZW50LiBDbGlja2luZyBpdCBvcGVucyBhIGNvbmZpcm1hdGlvbiBtb2RhbCBhbmQsIG9ubHlcbiAgICogaWYgY29uZmlybWVkLCBoaWRlcyB0aGUgbm90aWNlIGFuZCBkcm9wcyBpdCBmcm9tIHRoZSBzdGFuZGFsb25lLW5vdGljZSB0cmFja2luZyBzZXQuXG4gICAqXG4gICAqIEBwYXJhbSBjb250ZW50RWwgLSBUaGUgbm90aWNlIGNvbnRlbnQgd3JhcHBlciB0byBhcHBlbmQgdGhlIGJ1dHRvbiB0by5cbiAgICogQHBhcmFtIGdldE5vdGljZSAtIFJlc29sdmVzIHRoZSBub3RpY2UgdG8gaGlkZSB3aGVuIHRoZSBjbG9zZSBpcyBjb25maXJtZWQuXG4gICAqL1xuICBwcml2YXRlIGFwcGVuZENsb3NlQnV0dG9uKGNvbnRlbnRFbDogSFRNTEVsZW1lbnQsIGdldE5vdGljZTogKCkgPT4gTm90aWNlIHwgbnVsbCk6IHZvaWQge1xuICAgIGNvbnN0IGNsb3NlQnV0dG9uRWwgPSBjb250ZW50RWwuY3JlYXRlRWwoJ2J1dHRvbicsIHtcbiAgICAgIGF0dHI6IHsgJ2FyaWEtbGFiZWwnOiB0KCgkKSA9PiAkLm9ic2lkaWFuRGV2VXRpbHMubm90aWNlcy5jbG9zZUFyaWFMYWJlbCkgfVxuICAgIH0pO1xuICAgIGFkZFBsdWdpbkNzc0NsYXNzZXMoY2xvc2VCdXR0b25FbCwgQ3NzQ2xhc3MuUGx1Z2luTm90aWNlQ2xvc2VCdXR0b24pO1xuICAgIHNldEljb24oY2xvc2VCdXR0b25FbCwgJ3gnKTtcbiAgICBjbG9zZUJ1dHRvbkVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGV2dCkgPT4ge1xuICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgaW52b2tlQXN5bmNTYWZlbHkoYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBpc0NvbmZpcm1lZCA9IGF3YWl0IGNvbmZpcm0oe1xuICAgICAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICAgICAgbWVzc2FnZTogdCgoJCkgPT4gJC5vYnNpZGlhbkRldlV0aWxzLm5vdGljZXMuY2xvc2VDb25maXJtTWVzc2FnZSlcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghaXNDb25maXJtZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgbm90aWNlID0gZW5zdXJlTm9uTnVsbGFibGUoZ2V0Tm90aWNlKCkpO1xuICAgICAgICBub3RpY2UuaGlkZSgpO1xuICAgICAgICB0aGlzLnN0YW5kYWxvbmVOb3RpY2VzLmRlbGV0ZShub3RpY2UpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIHRoZSBtZXNzYWdlIGZvciBhIGRlbGF5ZWQgbm90aWNlOiB0aGUgcmVzb2x2ZWQgY29udGVudCwgb3B0aW9uYWxseSBmb2xsb3dlZCBieSBhIENhbmNlbFxuICAgKiBidXR0b24gdGhhdCBhYm9ydHMgdGhlIHByb3ZpZGVkIGNvbnRyb2xsZXIgd2hlbiBjbGlja2VkLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIERvY3VtZW50RnJhZ21lbnR9IGhvbGRpbmcgdGhlIGNvbnRlbnQgYW5kLCBpZiByZXF1ZXN0ZWQsIGEgQ2FuY2VsIGJ1dHRvbi5cbiAgICovXG4gIHByaXZhdGUgYnVpbGREZWxheWVkTm90aWNlTWVzc2FnZShwYXJhbXM6IFBsdWdpbk5vdGljZUNvbXBvbmVudEJ1aWxkRGVsYXllZE5vdGljZU1lc3NhZ2VQYXJhbXMpOiBEb2N1bWVudEZyYWdtZW50IHtcbiAgICBjb25zdCB7IGFib3J0Q29udHJvbGxlciwgY2FuY2VsQnV0dG9uVGV4dCwgY29udGVudCB9ID0gcGFyYW1zO1xuICAgIGNvbnN0IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnQoKTtcbiAgICBpZiAodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBmcmFnbWVudC5hcHBlbmRUZXh0KGNvbnRlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChjb250ZW50KTtcbiAgICB9XG5cbiAgICBpZiAoYWJvcnRDb250cm9sbGVyKSB7XG4gICAgICAvLyBgQnV0dG9uQ29tcG9uZW50YCByZXF1aXJlcyBhbiBgSFRNTEVsZW1lbnRgIHBhcmVudCwgc28gYnVpbGQgaXQgb24gYSB0aHJvd2F3YXlcbiAgICAgIC8vIERldGFjaGVkIGVsZW1lbnQgYW5kIG1vdmUgaXRzIGBidXR0b25FbGAgaW50byB0aGUgZnJhZ21lbnQuXG4gICAgICBjb25zdCBjYW5jZWxCdXR0b24gPSBuZXcgQnV0dG9uQ29tcG9uZW50KGNyZWF0ZURpdigpKTtcbiAgICAgIGNhbmNlbEJ1dHRvbi5zZXRCdXR0b25UZXh0KGNhbmNlbEJ1dHRvblRleHQgPz8gdCgoJCkgPT4gJC5vYnNpZGlhbkRldlV0aWxzLmJ1dHRvbnMuY2FuY2VsKSk7XG4gICAgICBhZGRQbHVnaW5Dc3NDbGFzc2VzKGNhbmNlbEJ1dHRvbi5idXR0b25FbCwgQ3NzQ2xhc3MuQ2FuY2VsQnV0dG9uKTtcbiAgICAgIC8vIFRoZSBjbGljayBpcyB3aXJlZCB2aWEgYGFkZEV2ZW50TGlzdGVuZXJgIHJhdGhlciB0aGFuIGBCdXR0b25Db21wb25lbnQub25DbGlja2Agc28gaXRcbiAgICAgIC8vIEJ1YmJsZXMgdGhyb3VnaCB0aGUgaW50ZXJhY3RpdmUtZWxlbWVudCBndWFyZCAoa2VlcGluZyB0aGUgbm90aWNlIG9wZW4pIGFuZCBzdGF5c1xuICAgICAgLy8gRGlyZWN0bHkgZXhlcmNpc2FibGUgdmlhIGEgZGlzcGF0Y2hlZCBET00gZXZlbnQgaW4gdW5pdCB0ZXN0cy5cbiAgICAgIGNhbmNlbEJ1dHRvbi5idXR0b25FbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgICAgYWJvcnRDb250cm9sbGVyLmFib3J0KCk7XG4gICAgICB9KTtcbiAgICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKGNhbmNlbEJ1dHRvbi5idXR0b25FbCk7XG4gICAgfVxuICAgIHJldHVybiBmcmFnbWVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgdGhlIG5vdGljZSBjb250ZW50IHdyYXBwZWQgaW4gYSBjb250YWluZXIgdGhhdCBrZWVwcyB0aGUgbm90aWNlIG9wZW4gd2hlbiBhbiBpbnRlcmFjdGl2ZVxuICAgKiBlbGVtZW50IGluc2lkZSBpdCBpcyBjbGlja2VkLiBPYnNpZGlhbiBkaXNtaXNzZXMgYSBub3RpY2Ugb24gYW55IGNsaWNrIHRoYXQgYnViYmxlcyB1cCB0byBpdHNcbiAgICogZWxlbWVudDsgdGhlIGNvbnRhaW5lciBpbnRlcmNlcHRzIGNsaWNrcyBvcmlnaW5hdGluZyBvbiBhbiBpbnRlcmFjdGl2ZSBlbGVtZW50IChhIGxpbmssIGJ1dHRvbixcbiAgICogaW5wdXQsIGV0Yy4pIGFuZCBzdG9wcyB0aGVtIHRoZXJlLCBzbyB0aGUgZWxlbWVudCdzIG93biBoYW5kbGVyIHN0aWxsIHJ1bnMgYnV0IHRoZSBub3RpY2Ugc3RheXMuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycy5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgRG9jdW1lbnRGcmFnbWVudH0gaG9sZGluZyB0aGUgd3JhcHBlZCwgcHJlZml4ZWQgbm90aWNlIGNvbnRlbnQuXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkTm90aWNlQ29udGVudChwYXJhbXM6IFBsdWdpbk5vdGljZUNvbXBvbmVudEJ1aWxkTm90aWNlQ29udGVudFBhcmFtcyk6IERvY3VtZW50RnJhZ21lbnQge1xuICAgIGNvbnN0IHsgZ2V0Tm90aWNlLCBtZXNzYWdlLCByZXF1aXJlc0Nsb3NlQ29uZmlybWF0aW9uID0gZmFsc2UgfSA9IHBhcmFtcztcbiAgICBjb25zdCBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50KCk7XG4gICAgY29uc3QgY29udGVudEVsID0gZnJhZ21lbnQuY3JlYXRlRGl2KCk7XG4gICAgYWRkUGx1Z2luQ3NzQ2xhc3Nlcyhjb250ZW50RWwsIENzc0NsYXNzLlBsdWdpbk5vdGljZUNvbnRlbnQpO1xuICAgIGNvbnRlbnRFbC5hcHBlbmRDaGlsZCh0aGlzLmJ1aWxkUHJlZml4ZWRNZXNzYWdlKG1lc3NhZ2UpKTtcbiAgICBjb250ZW50RWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZXZ0KSA9PiB7XG4gICAgICAvLyBBIGhhcmQtdG8tY2xvc2Ugbm90aWNlIG11c3Qgbm90IGRpc21pc3Mgb24gYW55IHN0cmF5IGNsaWNrOyBvbmx5IGl0cyBjbG9zZSBidXR0b24gKHZpYSB0aGVcbiAgICAgIC8vIENvbmZpcm1hdGlvbiBtb2RhbCkgbWF5IGRpc21pc3MgaXQuXG4gICAgICBpZiAocmVxdWlyZXNDbG9zZUNvbmZpcm1hdGlvbikge1xuICAgICAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChldnQudGFyZ2V0IGluc3RhbmNlb2YgRWxlbWVudCAmJiBldnQudGFyZ2V0LmNsb3Nlc3QoSU5URVJBQ1RJVkVfRUxFTUVOVF9TRUxFQ1RPUikpIHtcbiAgICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHJlcXVpcmVzQ2xvc2VDb25maXJtYXRpb24pIHtcbiAgICAgIHRoaXMuYXBwZW5kQ2xvc2VCdXR0b24oY29udGVudEVsLCBlbnN1cmVOb25OdWxsYWJsZShnZXROb3RpY2UpKTtcbiAgICB9XG4gICAgcmV0dXJuIGZyYWdtZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyB0aGUgbm90aWNlIGNvbnRlbnQsIHByZWZpeGluZyB0aGUgbWVzc2FnZSB3aXRoIHRoZSBwbHVnaW4gbmFtZSBpbiBhIHN0eWxlZCBlbGVtZW50IHNvIGl0IGlzXG4gICAqIHZpc3VhbGx5IGRpc3Rpbmd1aXNoZWQgZnJvbSB0aGUgbWVzc2FnZSBib2R5LlxuICAgKlxuICAgKiBAcGFyYW0gbWVzc2FnZSAtIFRoZSBtZXNzYWdlIHRvIGRpc3BsYXkgYWZ0ZXIgdGhlIHBsdWdpbiBuYW1lIHByZWZpeC5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgRG9jdW1lbnRGcmFnbWVudH0gd2l0aCB0aGUgc3R5bGVkIHBsdWdpbiBuYW1lIHByZWZpeCBmb2xsb3dlZCBieSB0aGUgbWVzc2FnZS5cbiAgICovXG4gIHByaXZhdGUgYnVpbGRQcmVmaXhlZE1lc3NhZ2UobWVzc2FnZTogRG9jdW1lbnRGcmFnbWVudCB8IHN0cmluZyk6IERvY3VtZW50RnJhZ21lbnQge1xuICAgIGNvbnN0IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnQoKTtcbiAgICBjb25zdCBuYW1lRWwgPSBjcmVhdGVTcGFuKHsgdGV4dDogdGhpcy5wbHVnaW5OYW1lIH0pO1xuICAgIGFkZFBsdWdpbkNzc0NsYXNzZXMobmFtZUVsLCBDc3NDbGFzcy5QbHVnaW5Ob3RpY2VOYW1lKTtcbiAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChuYW1lRWwpO1xuICAgIGlmICghdGhpcy5fbG9hZGVkKSB7XG4gICAgICBmcmFnbWVudC5hcHBlbmRUZXh0KCcgKHVubG9hZGVkKScpO1xuICAgIH1cbiAgICBmcmFnbWVudC5hcHBlbmRUZXh0KCdcXG4nKTtcbiAgICBpZiAodHlwZW9mIG1lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICBmcmFnbWVudC5hcHBlbmRUZXh0KG1lc3NhZ2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChtZXNzYWdlKTtcbiAgICB9XG4gICAgcmV0dXJuIGZyYWdtZW50O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQZXJtYW5lbnROb3RpY2UoKTogTm90aWNlIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UGVybWFuZW50Tm90aWNlcygpLmdldCh0aGlzLnBsdWdpbk5hbWUpID8/IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGdldFBlcm1hbmVudE5vdGljZXMoKTogTWFwPHN0cmluZywgTm90aWNlPiB7XG4gICAgcmV0dXJuIGdldE9ic2lkaWFuRGV2VXRpbHNTdGF0ZTxNYXA8c3RyaW5nLCBOb3RpY2U+PihQRVJNQU5FTlRfTk9USUNFU19TVEFURV9LRVksIG5ldyBNYXA8c3RyaW5nLCBOb3RpY2U+KCkpLnZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ha2VzIGEgbm90aWNlIGhhcmQgdG8gY2xvc2U6IG1hcmtzIGl0cyBvdXRlciBlbGVtZW50IChzbyB0aGUgQ1NTIG5ldXRyYWxpemVzIGl0cyBwYWRkaW5nKSBhbmRcbiAgICogaW5zdGFsbHMgYSBjYXB0dXJlLXBoYXNlIGNsaWNrIGd1YXJkIHRoYXQgc3RvcHMgZXZlcnkgY2xpY2sgZXhjZXB0IG9uIGFuIGludGVyYWN0aXZlIGVsZW1lbnQgKGFcbiAgICogYnV0dG9uLCBsaW5rLCB0aGUgY2xvc2UgYnV0dG9uLCBldGMuKSBmcm9tIHJlYWNoaW5nIE9ic2lkaWFuJ3Mgb3duIGRpc21pc3MgaGFuZGxlciBcdTIwMTQgc28gYW5cbiAgICogaW50ZXJhY3RpdmUgY2hpbGQncyBvd24gaGFuZGxlciBzdGlsbCBydW5zIHdoaWxlIGEgc3RyYXkgY2xpY2sgY2Fubm90IGRpc21pc3MgdGhlIG5vdGljZS5cbiAgICpcbiAgICogQHBhcmFtIG5vdGljZSAtIFRoZSBub3RpY2UgdG8gZ3VhcmQuXG4gICAqIEBwYXJhbSByZXF1aXJlc0Nsb3NlQ29uZmlybWF0aW9uIC0gV2hldGhlciB0aGUgbm90aWNlIHJlcXVpcmVzIGNsb3NlIGNvbmZpcm1hdGlvbjsgd2hlbiBgZmFsc2VgLFxuICAgKiBub3RoaW5nIGlzIGluc3RhbGxlZC5cbiAgICovXG4gIHByaXZhdGUgaW5zdGFsbENsb3NlQ29uZmlybWF0aW9uR3VhcmRzKG5vdGljZTogTm90aWNlLCByZXF1aXJlc0Nsb3NlQ29uZmlybWF0aW9uOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKCFyZXF1aXJlc0Nsb3NlQ29uZmlybWF0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIFRoZSBvdXRlciBgLm5vdGljZWAgZWxlbWVudCAoYGNvbnRhaW5lckVsYCkgY2FycmllcyBPYnNpZGlhbidzIGRpc21pc3Mtb24tY2xpY2sgaGFuZGxlciBhbmQgdGhlXG4gICAgLy8gUGFkZGluZyBhIHN0cmF5IGNsaWNrIGNvdWxkIGxhbmQgb247IG1hcmsgaXQgc28gdGhlIHN0eWxlc2hlZXQgZHJvcHMgdGhhdCBwYWRkaW5nLlxuICAgIGFkZFBsdWdpbkNzc0NsYXNzZXMobm90aWNlLmNvbnRhaW5lckVsLCBDc3NDbGFzcy5QbHVnaW5Ob3RpY2VSZXF1aXJlc0NvbmZpcm1hdGlvbik7XG4gICAgLy8gU3RvcCBldmVyeSBjbGljayBvbiB0aGUgbm90aWNlIFx1MjAxNCBleGNlcHQgb24gYW4gaW50ZXJhY3RpdmUgZWxlbWVudCBcdTIwMTQgZnJvbSByZWFjaGluZyBPYnNpZGlhbidzXG4gICAgLy8gRGlzbWlzcyBoYW5kbGVyLiBSZWdpc3RlcmVkIGluIHRoZSBjYXB0dXJlIHBoYXNlIG9uIHRoZSBvdXRlcm1vc3QgZWxlbWVudCBzbyBpdCBhbHdheXMgcnVucyBmaXJzdC5cbiAgICAvLyBMZXR0aW5nIGEgY2xpY2sgcmVhY2ggYW4gaW50ZXJhY3RpdmUgY2hpbGQgKGEgYnV0dG9uLCBsaW5rLCB0aGUgY2xvc2UgYnV0dG9uLCBldGMuKSBpcyB3aGF0IGtlZXBzXG4gICAgLy8gSXRzIG93biBoYW5kbGVyIHdvcmtpbmc7IHRoZSBidWJibGUtcGhhc2UgZ3VhcmQgb24gdGhlIGNvbnRlbnQgd3JhcHBlciB0aGVuIHN0b3BzIHRoYXQgY2xpY2sgZnJvbVxuICAgIC8vIEJ1YmJsaW5nIHVwIHRvIE9ic2lkaWFuJ3MgZGlzbWlzcyBoYW5kbGVyLCBzbyB0aGUgbm90aWNlIHN0aWxsIHN0YXlzIG9wZW4uXG4gICAgbm90aWNlLmNvbnRhaW5lckVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGV2dCkgPT4ge1xuICAgICAgaWYgKGV2dC50YXJnZXQgaW5zdGFuY2VvZiBFbGVtZW50ICYmIGV2dC50YXJnZXQuY2xvc2VzdChJTlRFUkFDVElWRV9FTEVNRU5UX1NFTEVDVE9SKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfSwgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRQZXJtYW5lbnROb3RpY2Uobm90aWNlOiBOb3RpY2UgfCBudWxsKTogdm9pZCB7XG4gICAgY29uc3QgbWFwID0gdGhpcy5nZXRQZXJtYW5lbnROb3RpY2VzKCk7XG4gICAgaWYgKG5vdGljZSkge1xuICAgICAgbWFwLnNldCh0aGlzLnBsdWdpbk5hbWUsIG5vdGljZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1hcC5kZWxldGUodGhpcy5wbHVnaW5OYW1lKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2hvd3MgYSBub3RpY2Ugd2l0aCB0aGUgZ2l2ZW4gZHVyYXRpb24uIEEgcmV1c2FibGUgbm90aWNlIHJlcGxhY2VzIHRoZSBjdXJyZW50IHJldXNhYmxlIG5vdGljZSAoYW5kXG4gICAqIGlzIG9wdGlvbmFsbHkgcmVnaXN0ZXJlZCBhcyB0aGlzIHBsdWdpbidzIHBlcm1hbmVudCBub3RpY2UpOyBhIHN0YW5kYWxvbmUgbm90aWNlIGlzIHRyYWNrZWRcbiAgICogc2VwYXJhdGVseSwgbGVhdmluZyB0aGUgcmV1c2FibGUgc2xvdCB1bnRvdWNoZWQuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycy5cbiAgICogQHJldHVybnMgVGhlIGNyZWF0ZWQgbm90aWNlLlxuICAgKi9cbiAgcHJpdmF0ZSBzaG93Tm90aWNlV2l0aER1cmF0aW9uKHBhcmFtczogUGx1Z2luTm90aWNlQ29tcG9uZW50U2hvd05vdGljZVdpdGhEdXJhdGlvblBhcmFtcyk6IE5vdGljZSB7XG4gICAgY29uc3QgeyBkdXJhdGlvbkluTWlsbGlzZWNvbmRzLCBpc1JldXNhYmxlLCBtZXNzYWdlLCBvbkhpZGUsIHJlcXVpcmVzQ2xvc2VDb25maXJtYXRpb24sIHNob3VsZFJlZ2lzdGVyQXNQZXJtYW5lbnQgfSA9IHBhcmFtcztcbiAgICAvLyBPYnNpZGlhbidzIGBOb3RpY2VgIHRyZWF0cyBhbiBvbWl0dGVkIGR1cmF0aW9uIGFzIGl0cyBkZWZhdWx0LCBzbyBtYXAgdGhlIGBudWxsYCBcIm5vIGV4cGxpY2l0XG4gICAgLy8gRHVyYXRpb25cIiB2YWx1ZSB0byBgdW5kZWZpbmVkYC5cbiAgICBjb25zdCBub3RpY2VEdXJhdGlvbkluTWlsbGlzZWNvbmRzID0gZHVyYXRpb25Jbk1pbGxpc2Vjb25kcyA/PyB1bmRlZmluZWQ7XG5cbiAgICAvLyBUaGUgY2xvc2UgYnV0dG9uJ3MgY29uZmlybSBoYW5kbGVyIG5lZWRzIHRoZSBgTm90aWNlYCwgd2hpY2ggZG9lcyBub3QgZXhpc3QgdW50aWwgaXQgaXMgYnVpbHQgZnJvbVxuICAgIC8vIFRoaXMgY29udGVudDsgY2FwdHVyZSBpdCBsYXppbHkgdmlhIGEgaG9sZGVyIHJlc29sdmVkIGF0IGNsaWNrIHRpbWUuIFRoZSBnZXR0ZXIgaXMgY3JlYXRlZCBvbmx5XG4gICAgLy8gRm9yIGEgaGFyZC10by1jbG9zZSBub3RpY2UgXHUyMDE0IHRoZSBvbmx5IGtpbmQgdGhhdCBoYXMgYSBjbG9zZSBidXR0b24uXG4gICAgbGV0IGJ1aWx0Tm90aWNlOiBOb3RpY2UgfCBudWxsID0gbnVsbDtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5idWlsZE5vdGljZUNvbnRlbnQobm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzPFBsdWdpbk5vdGljZUNvbXBvbmVudEJ1aWxkTm90aWNlQ29udGVudFBhcmFtcz4oe1xuICAgICAgZ2V0Tm90aWNlOiByZXF1aXJlc0Nsb3NlQ29uZmlybWF0aW9uID8gKCk6IE5vdGljZSB8IG51bGwgPT4gYnVpbHROb3RpY2UgOiB1bmRlZmluZWQsXG4gICAgICBtZXNzYWdlLFxuICAgICAgcmVxdWlyZXNDbG9zZUNvbmZpcm1hdGlvblxuICAgIH0pKTtcblxuICAgIGlmICghaXNSZXVzYWJsZSkge1xuICAgICAgYnVpbHROb3RpY2UgPSBuZXcgTm90aWNlKGNvbnRlbnQsIG5vdGljZUR1cmF0aW9uSW5NaWxsaXNlY29uZHMpO1xuICAgICAgdGhpcy5pbnN0YWxsQ2xvc2VDb25maXJtYXRpb25HdWFyZHMoYnVpbHROb3RpY2UsIHJlcXVpcmVzQ2xvc2VDb25maXJtYXRpb24pO1xuICAgICAgdGhpcy53aXJlT25IaWRlKGJ1aWx0Tm90aWNlLCBvbkhpZGUpO1xuICAgICAgdGhpcy5zdGFuZGFsb25lTm90aWNlcy5hZGQoYnVpbHROb3RpY2UpO1xuICAgICAgcmV0dXJuIGJ1aWx0Tm90aWNlO1xuICAgIH1cblxuICAgIHRoaXMubm90aWNlPy5oaWRlKCk7XG4gICAgYnVpbHROb3RpY2UgPSBuZXcgTm90aWNlKGNvbnRlbnQsIG5vdGljZUR1cmF0aW9uSW5NaWxsaXNlY29uZHMpO1xuICAgIHRoaXMubm90aWNlID0gYnVpbHROb3RpY2U7XG4gICAgdGhpcy5pbnN0YWxsQ2xvc2VDb25maXJtYXRpb25HdWFyZHMoYnVpbHROb3RpY2UsIHJlcXVpcmVzQ2xvc2VDb25maXJtYXRpb24pO1xuICAgIHRoaXMud2lyZU9uSGlkZShidWlsdE5vdGljZSwgb25IaWRlKTtcblxuICAgIGlmIChzaG91bGRSZWdpc3RlckFzUGVybWFuZW50KSB7XG4gICAgICB0aGlzLnNldFBlcm1hbmVudE5vdGljZShidWlsdE5vdGljZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0UGVybWFuZW50Tm90aWNlKG51bGwpO1xuICAgIH1cbiAgICByZXR1cm4gYnVpbHROb3RpY2U7XG4gIH1cblxuICAvKipcbiAgICogV3JhcHMgYSBub3RpY2UncyBgaGlkZWAgc28gdGhlIGdpdmVuIGNhbGxiYWNrIHJ1bnMgdGhlIGZpcnN0IHRpbWUgdGhlIG5vdGljZSBpcyBoaWRkZW4gXHUyMDE0IGJ5IHRoZVxuICAgKiB1c2VyLCBieSBhIHJlcGxhY2luZyBub3RpY2UsIGJ5IGl0cyBkdXJhdGlvbiBlbGFwc2luZywgb3Igb24gdW5sb2FkLiBEb2VzIG5vdGhpbmcgd2hlbiBubyBjYWxsYmFja1xuICAgKiBpcyBnaXZlbi5cbiAgICpcbiAgICogQHBhcmFtIG5vdGljZSAtIFRoZSBub3RpY2Ugd2hvc2UgYGhpZGVgIHRvIHdyYXAuXG4gICAqIEBwYXJhbSBvbkhpZGUgLSBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIG9uIHRoZSBmaXJzdCBoaWRlLCBvciBgdW5kZWZpbmVkYCB0byBza2lwIHdyYXBwaW5nLlxuICAgKi9cbiAgcHJpdmF0ZSB3aXJlT25IaWRlKG5vdGljZTogTm90aWNlLCBvbkhpZGU6ICgoKSA9PiBQcm9taXNhYmxlPHZvaWQ+KSB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIGlmICghb25IaWRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIFJ1biBgb25IaWRlYCB0aGUgZmlyc3QgdGltZSB0aGUgbm90aWNlIGlzIGhpZGRlbi4gQSBgb25jZWAgcGF0Y2ggb24gYGhpZGVgIGludGVyY2VwdHMgZXhhY3RseSBvbmVcbiAgICAvLyBDYWxsIHRoZW4gdW5pbnN0YWxscyBpdHNlbGYgKHVubG9hZGluZyB0aGlzIGRlZGljYXRlZCBjb21wb25lbnQpLCBzbyB0aGVyZSBpcyBubyBtYW51YWxcbiAgICAvLyBTaW5nbGUtZmlyZSBib29ra2VlcGluZyBhbmQgbm8gbGluZ2VyaW5nIHBhdGNoIG9uIHRoZSB0cmFuc2llbnQgbm90aWNlLlxuICAgIGNvbnN0IHBhdGNoQ29tcG9uZW50ID0gbmV3IE1vbmtleUFyb3VuZENvbXBvbmVudCgpO1xuICAgIHBhdGNoQ29tcG9uZW50LmxvYWQoKTtcbiAgICBwYXRjaENvbXBvbmVudC5yZWdpc3Rlck1ldGhvZFBhdGNoKHtcbiAgICAgIG1ldGhvZE5hbWU6ICdoaWRlJyxcbiAgICAgIG9iajogbm90aWNlLFxuICAgICAgb25jZTogdHJ1ZSxcbiAgICAgIHBhdGNoSGFuZGxlcjogKHsgZmFsbGJhY2sgfSkgPT4ge1xuICAgICAgICBmYWxsYmFjaygpO1xuICAgICAgICBpbnZva2VBc3luY1NhZmVseShhc3luYyAoKSA9PiB7XG4gICAgICAgICAgYXdhaXQgb25IaWRlKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVNBO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUlQLFNBQVMseUJBQXlCO0FBQ2xDLFNBQVMsbUNBQW1DO0FBQzVDLFNBQVMsZ0NBQWdDO0FBQ3pDLFNBQVMseUJBQXlCO0FBQ2xDLFNBQVMsb0JBQW9CO0FBQzdCLFNBQVMsZ0JBQWdCO0FBQ3pCLFNBQVMsU0FBUztBQUNsQixTQUFTLGVBQWU7QUFDeEIsU0FBUywyQkFBMkI7QUFDcEMsU0FBUyxtQkFBbUI7QUFDNUIsU0FBUyw2QkFBNkI7QUFFdEMsTUFBTSw4QkFBOEI7QUFDcEMsTUFBTSw0Q0FBNEM7QUFDbEQsTUFBTSw0Q0FBNEM7QUFJbEQsTUFBTSwrQkFBK0I7QUFrSjlCLE1BQU0sOEJBQThCLFlBQVk7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUlsQztBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS0E7QUFBQSxFQUVYLFNBQXdCO0FBQUEsRUFDZiw0QkFBNEIsb0JBQUksSUFBZ0I7QUFBQSxFQUNoRCxvQkFBb0Isb0JBQUksSUFBWTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU85QyxZQUFZLFFBQWdEO0FBQ2pFLFVBQU07QUFDTixTQUFLLE1BQU0sT0FBTztBQUNsQixTQUFLLGFBQWEsT0FBTztBQUFBLEVBQzNCO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLZ0IsU0FBZTtBQUM3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
@@ -28,7 +28,10 @@ import { existsSync } from "node:fs";
28
28
  import { tmpdir } from "node:os";
29
29
  import { requestUrl } from "obsidian";
30
30
  import { join } from "../path.mjs";
31
- import { getCommunityPluginRepo } from "./community-plugins.mjs";
31
+ import {
32
+ getCommunityPluginRepo,
33
+ getLatestReleaseVersion
34
+ } from "./community-plugins.mjs";
32
35
  import { selectOption } from "./modals/select-option.mjs";
33
36
  const DEMO_VAULTS_CACHE_FOLDER = "obsidian-demo-vaults";
34
37
  const HTTP_STATUS_OK = 200;
@@ -110,12 +113,7 @@ async function downloadAndExtractDemoVault(params) {
110
113
  zip.extractAllTo(cacheDir, true);
111
114
  return true;
112
115
  }
113
- async function getLatestReleaseVersion(repo) {
114
- const response = await requestUrl(`https://api.github.com/repos/${repo}/releases/latest`);
115
- const release = response.json;
116
- return release.tag_name;
117
- }
118
116
  export {
119
117
  openDemoVault
120
118
  };
121
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2Rlc2t0b3AtZGVtby12YXVsdC1vcGVuZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBEb3dubG9hZHMgYW5kIG9wZW5zIGEgcGx1Z2luJ3Mgc2hpcHBlZCBkZW1vIHZhdWx0IGluIGEgbmV3IE9ic2lkaWFuIHdpbmRvdyAoZGVza3RvcCBvbmx5KS5cbiAqXG4gKiBBIHBsdWdpbiBjYW4gYXR0YWNoIGEgYGRlbW8tdmF1bHQtPHZlcnNpb24+LnppcGAgYXJjaGl2ZSB0byBlYWNoIEdpdEh1YiByZWxlYXNlIChzZWVcbiAqIGBhcmNoaXZlUGx1Z2luRGVtb1ZhdWx0YCBpbiBgc2NyaXB0LXV0aWxzL2RlbW8tdmF1bHQudHNgKS4gVGhpcyByZXNvbHZlcyB0aGUgcGx1Z2luJ3MgcmVwb3NpdG9yeVxuICogZnJvbSBPYnNpZGlhbidzIGNvbW11bml0eSByZWdpc3RyeSwgZG93bmxvYWRzIHRoZSBhcmNoaXZlIGZvciB0aGUgY2hvc2VuIHZlcnNpb24sIGV4dHJhY3RzIGl0IHRvIGFcbiAqIHBlci12ZXJzaW9uIGNhY2hlIGZvbGRlciB1bmRlciB0aGUgT1MgdGVtcCBkaXJlY3RvcnksIGFuZCBvcGVucyB0aGF0IGZvbGRlciBhcyBhIHZhdWx0IGluIGEgbmV3XG4gKiB3aW5kb3cuIFdoZW4gdGhlIGluc3RhbGxlZCBwbHVnaW4gdmVyc2lvbiBpcyBiZWhpbmQgdGhlIGxhdGVzdCByZWxlYXNlLCB0aGUgdXNlciBpcyBvZmZlcmVkIGEgY2hvaWNlXG4gKiBiZXR3ZWVuIHRoZSB0d28gdmVyc2lvbnMuXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBBcHAsXG4gIFBsdWdpbk1hbmlmZXN0XG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IEFkbVppcCBmcm9tICdhZG0temlwJztcbmltcG9ydCB7IGNvbXBhcmVWZXJzaW9ucyB9IGZyb20gJ2NvbXBhcmUtdmVyc2lvbnMnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC14L25vLW5vZGVqcy1tb2R1bGVzIC0tIERlc2t0b3Atb25seSBmZWF0dXJlIGdhdGVkIGJ5IGBQbGF0Zm9ybS5pc0Rlc2t0b3BBcHBgOyB0aGUgY29tbWFuZCBpcyBoaWRkZW4gb24gbW9iaWxlIHNvIHRoaXMgTm9kZSBBUEkgaXMgbmV2ZXIgcmVhY2hlZCB0aGVyZS5cbmltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJ25vZGU6YnVmZmVyJztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQteC9uby1ub2RlanMtbW9kdWxlcyAtLSBEZXNrdG9wLW9ubHkgZmVhdHVyZSBnYXRlZCBieSBgUGxhdGZvcm0uaXNEZXNrdG9wQXBwYDsgdGhlIGNvbW1hbmQgaXMgaGlkZGVuIG9uIG1vYmlsZSBzbyB0aGlzIE5vZGUgQVBJIGlzIG5ldmVyIHJlYWNoZWQgdGhlcmUuXG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0LXgvbm8tbm9kZWpzLW1vZHVsZXMgLS0gRGVza3RvcC1vbmx5IGZlYXR1cmUgZ2F0ZWQgYnkgYFBsYXRmb3JtLmlzRGVza3RvcEFwcGA7IHRoZSBjb21tYW5kIGlzIGhpZGRlbiBvbiBtb2JpbGUgc28gdGhpcyBOb2RlIEFQSSBpcyBuZXZlciByZWFjaGVkIHRoZXJlLlxuaW1wb3J0IHsgdG1wZGlyIH0gZnJvbSAnbm9kZTpvcyc7XG5pbXBvcnQgeyByZXF1ZXN0VXJsIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IFBsdWdpbk5vdGljZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9wbHVnaW4tbm90aWNlLWNvbXBvbmVudC50cyc7XG5cbmltcG9ydCB7IGpvaW4gfSBmcm9tICcuLi9wYXRoLnRzJztcbmltcG9ydCB7IGdldENvbW11bml0eVBsdWdpblJlcG8gfSBmcm9tICcuL2NvbW11bml0eS1wbHVnaW5zLnRzJztcbmltcG9ydCB7IHNlbGVjdE9wdGlvbiB9IGZyb20gJy4vbW9kYWxzL3NlbGVjdC1vcHRpb24udHMnO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBvcGVuRGVtb1ZhdWx0fS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPcGVuRGVtb1ZhdWx0UGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIG1hbmlmZXN0IG9mIHRoZSBwbHVnaW4gd2hvc2UgZGVtbyB2YXVsdCBpcyBvcGVuZWQuIEl0cyBgaWRgIGxvY2F0ZXMgdGhlIEdpdEh1YiByZXBvc2l0b3J5LCBpdHNcbiAgICogYHZlcnNpb25gIHNlbGVjdHMgdGhlIGFyY2hpdmUsIGFuZCBpdHMgYG5hbWVgIGxhYmVscyB0aGUgbm90aWNlcyBhbmQgdGhlIHZlcnNpb24tY2hvaWNlIGRpYWxvZy5cbiAgICovXG4gIHJlYWRvbmx5IG1hbmlmZXN0OiBQbHVnaW5NYW5pZmVzdDtcblxuICAvKipcbiAgICogVGhlIG5vdGljZSBjb21wb25lbnQgdXNlZCB0byByZXBvcnQgcHJvYmxlbXMgKHBsdWdpbiBub3QgaW4gdGhlIHJlZ2lzdHJ5LCBtaXNzaW5nIGFyY2hpdmUpLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luTm90aWNlQ29tcG9uZW50OiBQbHVnaW5Ob3RpY2VDb21wb25lbnQ7XG59XG5cbmludGVyZmFjZSBEb3dubG9hZEFuZEV4dHJhY3REZW1vVmF1bHRQYXJhbXMge1xuICByZWFkb25seSBjYWNoZURpcjogc3RyaW5nO1xuICByZWFkb25seSBtYW5pZmVzdDogUGx1Z2luTWFuaWZlc3Q7XG4gIHJlYWRvbmx5IHBsdWdpbk5vdGljZUNvbXBvbmVudDogUGx1Z2luTm90aWNlQ29tcG9uZW50O1xuICByZWFkb25seSByZXBvOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHZlcnNpb246IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEdpdEh1YlJlbGVhc2Uge1xuICAvKipcbiAgICogVGhlIHJlbGVhc2UgdGFnLCBhIGJhcmUgdmVyc2lvbiBzdWNoIGFzIGAxLjIuM2AuXG4gICAqL1xuICByZWFkb25seSB0YWdfbmFtZTogc3RyaW5nO1xufVxuXG5jb25zdCBERU1PX1ZBVUxUU19DQUNIRV9GT0xERVIgPSAnb2JzaWRpYW4tZGVtby12YXVsdHMnO1xuY29uc3QgSFRUUF9TVEFUVVNfT0sgPSAyMDA7XG5cbi8qKlxuICogRG93bmxvYWRzIGFuZCBvcGVucyB0aGUgcGx1Z2luJ3MgZGVtbyB2YXVsdCBpbiBhIG5ldyBPYnNpZGlhbiB3aW5kb3cuIERlc2t0b3Agb25seS5cbiAqXG4gKiBJZiB0aGUgaW5zdGFsbGVkIHBsdWdpbiB2ZXJzaW9uIGlzIHRoZSBsYXRlc3QgKG9yIG5ld2VyKSwgaXRzIGRlbW8gdmF1bHQgb3BlbnMgZGlyZWN0bHk7IG90aGVyd2lzZVxuICogdGhlIHVzZXIgY2hvb3NlcyBiZXR3ZWVuIHRoZSBsYXRlc3QgYW5kIHRoZSBjdXJyZW50bHktaW5zdGFsbGVkIHZlcnNpb24uIFRoZSBjaG9zZW4gdmVyc2lvbidzXG4gKiBhcmNoaXZlIGlzIGRvd25sb2FkZWQgYW5kIGV4dHJhY3RlZCBvbmNlLCB0aGVuIHJldXNlZCBmcm9tIGEgcGVyLXZlcnNpb24gY2FjaGUgZm9sZGVyLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIE9wZW5EZW1vVmF1bHRQYXJhbXN9LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSB2YXVsdCBoYXMgYmVlbiBvcGVuZWQsIG9yIG9uY2UgdGhlIG9wZXJhdGlvbiBoYXNcbiAqIGJlZW4gcmVwb3J0ZWQgYXMgbm90IHBvc3NpYmxlIChub3RpY2Ugc2hvd24pIG9yIGNhbmNlbGxlZCBieSB0aGUgdXNlci5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9wZW5EZW1vVmF1bHQocGFyYW1zOiBPcGVuRGVtb1ZhdWx0UGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgbWFuaWZlc3QsXG4gICAgcGx1Z2luTm90aWNlQ29tcG9uZW50XG4gIH0gPSBwYXJhbXM7XG5cbiAgY29uc3QgcmVwbyA9IGF3YWl0IGdldENvbW11bml0eVBsdWdpblJlcG8obWFuaWZlc3QuaWQpO1xuICBpZiAoIXJlcG8pIHtcbiAgICBwbHVnaW5Ob3RpY2VDb21wb25lbnQuc2hvd05vdGljZShgQ291bGQgbm90IGZpbmQgcGx1Z2luICR7bWFuaWZlc3QubmFtZX0gaW4gdGhlIGNvbW11bml0eSBwbHVnaW5zIHJlZ2lzdHJ5LmApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGN1cnJlbnRWZXJzaW9uID0gbWFuaWZlc3QudmVyc2lvbjtcbiAgY29uc3QgbGF0ZXN0VmVyc2lvbiA9IGF3YWl0IGdldExhdGVzdFJlbGVhc2VWZXJzaW9uKHJlcG8pO1xuXG4gIGxldCB2ZXJzaW9uVG9PcGVuOiBzdHJpbmc7XG4gIGlmIChjb21wYXJlVmVyc2lvbnMoY3VycmVudFZlcnNpb24sIGxhdGVzdFZlcnNpb24pID49IDApIHtcbiAgICB2ZXJzaW9uVG9PcGVuID0gY3VycmVudFZlcnNpb247XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgY2hvc2VuVmVyc2lvbiA9IGF3YWl0IHNlbGVjdE9wdGlvbjxudWxsIHwgc3RyaW5nPih7XG4gICAgICBhcHAsXG4gICAgICBtZXNzYWdlOiBgQ3VycmVudCB2ZXJzaW9uIG9mIHBsdWdpbiAke21hbmlmZXN0Lm5hbWV9IHYke2N1cnJlbnRWZXJzaW9ufSBpcyBub3QgdGhlIGxhdGVzdCAodiR7bGF0ZXN0VmVyc2lvbn0pYCxcbiAgICAgIG9wdGlvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGlzQ3RhOiB0cnVlLFxuICAgICAgICAgIHRleHQ6IGBPcGVuIGRlbW8gdmF1bHQgZm9yIGxhdGVzdCB2ZXJzaW9uICh2JHtsYXRlc3RWZXJzaW9ufSlgLFxuICAgICAgICAgIHZhbHVlOiBsYXRlc3RWZXJzaW9uXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXh0OiBgT3BlbiBkZW1vIHZhdWx0IGZvciBjdXJyZW50IHZlcnNpb24gKHYke2N1cnJlbnRWZXJzaW9ufSlgLFxuICAgICAgICAgIHZhbHVlOiBjdXJyZW50VmVyc2lvblxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgdGV4dDogJ0NhbmNlbCcsXG4gICAgICAgICAgdmFsdWU6IG51bGxcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIHRpdGxlOiBtYW5pZmVzdC5uYW1lXG4gICAgfSk7XG4gICAgaWYgKGNob3NlblZlcnNpb24gPT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmVyc2lvblRvT3BlbiA9IGNob3NlblZlcnNpb247XG4gIH1cblxuICBjb25zdCBjYWNoZURpciA9IGpvaW4odG1wZGlyKCksIERFTU9fVkFVTFRTX0NBQ0hFX0ZPTERFUiwgbWFuaWZlc3QuaWQsIHZlcnNpb25Ub09wZW4pO1xuICBpZiAoIWV4aXN0c1N5bmMoY2FjaGVEaXIpKSB7XG4gICAgY29uc3QgaXNFeHRyYWN0ZWQgPSBhd2FpdCBkb3dubG9hZEFuZEV4dHJhY3REZW1vVmF1bHQoe1xuICAgICAgY2FjaGVEaXIsXG4gICAgICBtYW5pZmVzdCxcbiAgICAgIHBsdWdpbk5vdGljZUNvbXBvbmVudCxcbiAgICAgIHJlcG8sXG4gICAgICB2ZXJzaW9uOiB2ZXJzaW9uVG9PcGVuXG4gICAgfSk7XG4gICAgaWYgKCFpc0V4dHJhY3RlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIHdpbmRvdy5lbGVjdHJvbi5pcGNSZW5kZXJlci5zZW5kU3luYygndmF1bHQtb3BlbicsIGNhY2hlRGlyLCBmYWxzZSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGRvd25sb2FkQW5kRXh0cmFjdERlbW9WYXVsdChwYXJhbXM6IERvd25sb2FkQW5kRXh0cmFjdERlbW9WYXVsdFBhcmFtcyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCB7XG4gICAgY2FjaGVEaXIsXG4gICAgbWFuaWZlc3QsXG4gICAgcGx1Z2luTm90aWNlQ29tcG9uZW50LFxuICAgIHJlcG8sXG4gICAgdmVyc2lvblxuICB9ID0gcGFyYW1zO1xuXG4gIGNvbnN0IGFzc2V0VXJsID0gYGh0dHBzOi8vZ2l0aHViLmNvbS8ke3JlcG99L3JlbGVhc2VzL2Rvd25sb2FkLyR7dmVyc2lvbn0vZGVtby12YXVsdC0ke3ZlcnNpb259LnppcGA7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxdWVzdFVybCh7XG4gICAgdGhyb3c6IGZhbHNlLFxuICAgIHVybDogYXNzZXRVcmxcbiAgfSk7XG4gIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IEhUVFBfU1RBVFVTX09LKSB7XG4gICAgcGx1Z2luTm90aWNlQ29tcG9uZW50LnNob3dOb3RpY2UoYE5vIGRlbW8gdmF1bHQgaXMgYXZhaWxhYmxlIGZvciBwbHVnaW4gJHttYW5pZmVzdC5uYW1lfSB2JHt2ZXJzaW9ufS5gKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCB6aXAgPSBuZXcgQWRtWmlwKEJ1ZmZlci5mcm9tKHJlc3BvbnNlLmFycmF5QnVmZmVyKSk7XG4gIHppcC5leHRyYWN0QWxsVG8oY2FjaGVEaXIsIHRydWUpO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0TGF0ZXN0UmVsZWFzZVZlcnNpb24ocmVwbzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0VXJsKGBodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zLyR7cmVwb30vcmVsZWFzZXMvbGF0ZXN0YCk7XG4gIGNvbnN0IHJlbGVhc2UgPSByZXNwb25zZS5qc29uIGFzIEdpdEh1YlJlbGVhc2U7XG4gIHJldHVybiByZWxlYXNlLnRhZ19uYW1lO1xufVxuIl0sCiAgIm1hcHBp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
119
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2Rlc2t0b3AtZGVtby12YXVsdC1vcGVuZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBEb3dubG9hZHMgYW5kIG9wZW5zIGEgcGx1Z2luJ3Mgc2hpcHBlZCBkZW1vIHZhdWx0IGluIGEgbmV3IE9ic2lkaWFuIHdpbmRvdyAoZGVza3RvcCBvbmx5KS5cbiAqXG4gKiBBIHBsdWdpbiBjYW4gYXR0YWNoIGEgYGRlbW8tdmF1bHQtPHZlcnNpb24+LnppcGAgYXJjaGl2ZSB0byBlYWNoIEdpdEh1YiByZWxlYXNlIChzZWVcbiAqIGBhcmNoaXZlUGx1Z2luRGVtb1ZhdWx0YCBpbiBgc2NyaXB0LXV0aWxzL2RlbW8tdmF1bHQudHNgKS4gVGhpcyByZXNvbHZlcyB0aGUgcGx1Z2luJ3MgcmVwb3NpdG9yeVxuICogZnJvbSBPYnNpZGlhbidzIGNvbW11bml0eSByZWdpc3RyeSwgZG93bmxvYWRzIHRoZSBhcmNoaXZlIGZvciB0aGUgY2hvc2VuIHZlcnNpb24sIGV4dHJhY3RzIGl0IHRvIGFcbiAqIHBlci12ZXJzaW9uIGNhY2hlIGZvbGRlciB1bmRlciB0aGUgT1MgdGVtcCBkaXJlY3RvcnksIGFuZCBvcGVucyB0aGF0IGZvbGRlciBhcyBhIHZhdWx0IGluIGEgbmV3XG4gKiB3aW5kb3cuIFdoZW4gdGhlIGluc3RhbGxlZCBwbHVnaW4gdmVyc2lvbiBpcyBiZWhpbmQgdGhlIGxhdGVzdCByZWxlYXNlLCB0aGUgdXNlciBpcyBvZmZlcmVkIGEgY2hvaWNlXG4gKiBiZXR3ZWVuIHRoZSB0d28gdmVyc2lvbnMuXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBBcHAsXG4gIFBsdWdpbk1hbmlmZXN0XG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IEFkbVppcCBmcm9tICdhZG0temlwJztcbmltcG9ydCB7IGNvbXBhcmVWZXJzaW9ucyB9IGZyb20gJ2NvbXBhcmUtdmVyc2lvbnMnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC14L25vLW5vZGVqcy1tb2R1bGVzIC0tIERlc2t0b3Atb25seSBmZWF0dXJlIGdhdGVkIGJ5IGBQbGF0Zm9ybS5pc0Rlc2t0b3BBcHBgOyB0aGUgY29tbWFuZCBpcyBoaWRkZW4gb24gbW9iaWxlIHNvIHRoaXMgTm9kZSBBUEkgaXMgbmV2ZXIgcmVhY2hlZCB0aGVyZS5cbmltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJ25vZGU6YnVmZmVyJztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQteC9uby1ub2RlanMtbW9kdWxlcyAtLSBEZXNrdG9wLW9ubHkgZmVhdHVyZSBnYXRlZCBieSBgUGxhdGZvcm0uaXNEZXNrdG9wQXBwYDsgdGhlIGNvbW1hbmQgaXMgaGlkZGVuIG9uIG1vYmlsZSBzbyB0aGlzIE5vZGUgQVBJIGlzIG5ldmVyIHJlYWNoZWQgdGhlcmUuXG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0LXgvbm8tbm9kZWpzLW1vZHVsZXMgLS0gRGVza3RvcC1vbmx5IGZlYXR1cmUgZ2F0ZWQgYnkgYFBsYXRmb3JtLmlzRGVza3RvcEFwcGA7IHRoZSBjb21tYW5kIGlzIGhpZGRlbiBvbiBtb2JpbGUgc28gdGhpcyBOb2RlIEFQSSBpcyBuZXZlciByZWFjaGVkIHRoZXJlLlxuaW1wb3J0IHsgdG1wZGlyIH0gZnJvbSAnbm9kZTpvcyc7XG5pbXBvcnQgeyByZXF1ZXN0VXJsIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IFBsdWdpbk5vdGljZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9wbHVnaW4tbm90aWNlLWNvbXBvbmVudC50cyc7XG5cbmltcG9ydCB7IGpvaW4gfSBmcm9tICcuLi9wYXRoLnRzJztcbmltcG9ydCB7XG4gIGdldENvbW11bml0eVBsdWdpblJlcG8sXG4gIGdldExhdGVzdFJlbGVhc2VWZXJzaW9uXG59IGZyb20gJy4vY29tbXVuaXR5LXBsdWdpbnMudHMnO1xuaW1wb3J0IHsgc2VsZWN0T3B0aW9uIH0gZnJvbSAnLi9tb2RhbHMvc2VsZWN0LW9wdGlvbi50cyc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIG9wZW5EZW1vVmF1bHR9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9wZW5EZW1vVmF1bHRQYXJhbXMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgbWFuaWZlc3Qgb2YgdGhlIHBsdWdpbiB3aG9zZSBkZW1vIHZhdWx0IGlzIG9wZW5lZC4gSXRzIGBpZGAgbG9jYXRlcyB0aGUgR2l0SHViIHJlcG9zaXRvcnksIGl0c1xuICAgKiBgdmVyc2lvbmAgc2VsZWN0cyB0aGUgYXJjaGl2ZSwgYW5kIGl0cyBgbmFtZWAgbGFiZWxzIHRoZSBub3RpY2VzIGFuZCB0aGUgdmVyc2lvbi1jaG9pY2UgZGlhbG9nLlxuICAgKi9cbiAgcmVhZG9ubHkgbWFuaWZlc3Q6IFBsdWdpbk1hbmlmZXN0O1xuXG4gIC8qKlxuICAgKiBUaGUgbm90aWNlIGNvbXBvbmVudCB1c2VkIHRvIHJlcG9ydCBwcm9ibGVtcyAocGx1Z2luIG5vdCBpbiB0aGUgcmVnaXN0cnksIG1pc3NpbmcgYXJjaGl2ZSkuXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5Ob3RpY2VDb21wb25lbnQ6IFBsdWdpbk5vdGljZUNvbXBvbmVudDtcbn1cblxuaW50ZXJmYWNlIERvd25sb2FkQW5kRXh0cmFjdERlbW9WYXVsdFBhcmFtcyB7XG4gIHJlYWRvbmx5IGNhY2hlRGlyOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG1hbmlmZXN0OiBQbHVnaW5NYW5pZmVzdDtcbiAgcmVhZG9ubHkgcGx1Z2luTm90aWNlQ29tcG9uZW50OiBQbHVnaW5Ob3RpY2VDb21wb25lbnQ7XG4gIHJlYWRvbmx5IHJlcG86IHN0cmluZztcbiAgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nO1xufVxuXG5jb25zdCBERU1PX1ZBVUxUU19DQUNIRV9GT0xERVIgPSAnb2JzaWRpYW4tZGVtby12YXVsdHMnO1xuY29uc3QgSFRUUF9TVEFUVVNfT0sgPSAyMDA7XG5cbi8qKlxuICogRG93bmxvYWRzIGFuZCBvcGVucyB0aGUgcGx1Z2luJ3MgZGVtbyB2YXVsdCBpbiBhIG5ldyBPYnNpZGlhbiB3aW5kb3cuIERlc2t0b3Agb25seS5cbiAqXG4gKiBJZiB0aGUgaW5zdGFsbGVkIHBsdWdpbiB2ZXJzaW9uIGlzIHRoZSBsYXRlc3QgKG9yIG5ld2VyKSwgaXRzIGRlbW8gdmF1bHQgb3BlbnMgZGlyZWN0bHk7IG90aGVyd2lzZVxuICogdGhlIHVzZXIgY2hvb3NlcyBiZXR3ZWVuIHRoZSBsYXRlc3QgYW5kIHRoZSBjdXJyZW50bHktaW5zdGFsbGVkIHZlcnNpb24uIFRoZSBjaG9zZW4gdmVyc2lvbidzXG4gKiBhcmNoaXZlIGlzIGRvd25sb2FkZWQgYW5kIGV4dHJhY3RlZCBvbmNlLCB0aGVuIHJldXNlZCBmcm9tIGEgcGVyLXZlcnNpb24gY2FjaGUgZm9sZGVyLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIE9wZW5EZW1vVmF1bHRQYXJhbXN9LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSB2YXVsdCBoYXMgYmVlbiBvcGVuZWQsIG9yIG9uY2UgdGhlIG9wZXJhdGlvbiBoYXNcbiAqIGJlZW4gcmVwb3J0ZWQgYXMgbm90IHBvc3NpYmxlIChub3RpY2Ugc2hvd24pIG9yIGNhbmNlbGxlZCBieSB0aGUgdXNlci5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9wZW5EZW1vVmF1bHQocGFyYW1zOiBPcGVuRGVtb1ZhdWx0UGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgbWFuaWZlc3QsXG4gICAgcGx1Z2luTm90aWNlQ29tcG9uZW50XG4gIH0gPSBwYXJhbXM7XG5cbiAgY29uc3QgcmVwbyA9IGF3YWl0IGdldENvbW11bml0eVBsdWdpblJlcG8obWFuaWZlc3QuaWQpO1xuICBpZiAoIXJlcG8pIHtcbiAgICBwbHVnaW5Ob3RpY2VDb21wb25lbnQuc2hvd05vdGljZShgQ291bGQgbm90IGZpbmQgcGx1Z2luICR7bWFuaWZlc3QubmFtZX0gaW4gdGhlIGNvbW11bml0eSBwbHVnaW5zIHJlZ2lzdHJ5LmApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGN1cnJlbnRWZXJzaW9uID0gbWFuaWZlc3QudmVyc2lvbjtcbiAgY29uc3QgbGF0ZXN0VmVyc2lvbiA9IGF3YWl0IGdldExhdGVzdFJlbGVhc2VWZXJzaW9uKHJlcG8pO1xuXG4gIGxldCB2ZXJzaW9uVG9PcGVuOiBzdHJpbmc7XG4gIGlmIChjb21wYXJlVmVyc2lvbnMoY3VycmVudFZlcnNpb24sIGxhdGVzdFZlcnNpb24pID49IDApIHtcbiAgICB2ZXJzaW9uVG9PcGVuID0gY3VycmVudFZlcnNpb247XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgY2hvc2VuVmVyc2lvbiA9IGF3YWl0IHNlbGVjdE9wdGlvbjxudWxsIHwgc3RyaW5nPih7XG4gICAgICBhcHAsXG4gICAgICBtZXNzYWdlOiBgQ3VycmVudCB2ZXJzaW9uIG9mIHBsdWdpbiAke21hbmlmZXN0Lm5hbWV9IHYke2N1cnJlbnRWZXJzaW9ufSBpcyBub3QgdGhlIGxhdGVzdCAodiR7bGF0ZXN0VmVyc2lvbn0pYCxcbiAgICAgIG9wdGlvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGlzQ3RhOiB0cnVlLFxuICAgICAgICAgIHRleHQ6IGBPcGVuIGRlbW8gdmF1bHQgZm9yIGxhdGVzdCB2ZXJzaW9uICh2JHtsYXRlc3RWZXJzaW9ufSlgLFxuICAgICAgICAgIHZhbHVlOiBsYXRlc3RWZXJzaW9uXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXh0OiBgT3BlbiBkZW1vIHZhdWx0IGZvciBjdXJyZW50IHZlcnNpb24gKHYke2N1cnJlbnRWZXJzaW9ufSlgLFxuICAgICAgICAgIHZhbHVlOiBjdXJyZW50VmVyc2lvblxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgdGV4dDogJ0NhbmNlbCcsXG4gICAgICAgICAgdmFsdWU6IG51bGxcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIHRpdGxlOiBtYW5pZmVzdC5uYW1lXG4gICAgfSk7XG4gICAgaWYgKGNob3NlblZlcnNpb24gPT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmVyc2lvblRvT3BlbiA9IGNob3NlblZlcnNpb247XG4gIH1cblxuICBjb25zdCBjYWNoZURpciA9IGpvaW4odG1wZGlyKCksIERFTU9fVkFVTFRTX0NBQ0hFX0ZPTERFUiwgbWFuaWZlc3QuaWQsIHZlcnNpb25Ub09wZW4pO1xuICBpZiAoIWV4aXN0c1N5bmMoY2FjaGVEaXIpKSB7XG4gICAgY29uc3QgaXNFeHRyYWN0ZWQgPSBhd2FpdCBkb3dubG9hZEFuZEV4dHJhY3REZW1vVmF1bHQoe1xuICAgICAgY2FjaGVEaXIsXG4gICAgICBtYW5pZmVzdCxcbiAgICAgIHBsdWdpbk5vdGljZUNvbXBvbmVudCxcbiAgICAgIHJlcG8sXG4gICAgICB2ZXJzaW9uOiB2ZXJzaW9uVG9PcGVuXG4gICAgfSk7XG4gICAgaWYgKCFpc0V4dHJhY3RlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIHdpbmRvdy5lbGVjdHJvbi5pcGNSZW5kZXJlci5zZW5kU3luYygndmF1bHQtb3BlbicsIGNhY2hlRGlyLCBmYWxzZSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGRvd25sb2FkQW5kRXh0cmFjdERlbW9WYXVsdChwYXJhbXM6IERvd25sb2FkQW5kRXh0cmFjdERlbW9WYXVsdFBhcmFtcyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCB7XG4gICAgY2FjaGVEaXIsXG4gICAgbWFuaWZlc3QsXG4gICAgcGx1Z2luTm90aWNlQ29tcG9uZW50LFxuICAgIHJlcG8sXG4gICAgdmVyc2lvblxuICB9ID0gcGFyYW1zO1xuXG4gIGNvbnN0IGFzc2V0VXJsID0gYGh0dHBzOi8vZ2l0aHViLmNvbS8ke3JlcG99L3JlbGVhc2VzL2Rvd25sb2FkLyR7dmVyc2lvbn0vZGVtby12YXVsdC0ke3ZlcnNpb259LnppcGA7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxdWVzdFVybCh7XG4gICAgdGhyb3c6IGZhbHNlLFxuICAgIHVybDogYXNzZXRVcmxcbiAgfSk7XG4gIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IEhUVFBfU1RBVFVTX09LKSB7XG4gICAgcGx1Z2luTm90aWNlQ29tcG9uZW50LnNob3dOb3RpY2UoYE5vIGRlbW8gdmF1bHQgaXMgYXZhaWxhYmxlIGZvciBwbHVnaW4gJHttYW5pZmVzdC5uYW1lfSB2JHt2ZXJzaW9ufS5gKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCB6aXAgPSBuZXcgQWRtWmlwKEJ1ZmZlci5mcm9tKHJlc3BvbnNlLmFycmF5QnVmZmVyKSk7XG4gIHppcC5leHRyYWN0QWxsVG8oY2FjaGVEaXIsIHRydWUpO1xuICByZXR1cm4gdHJ1ZTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBa0JBLE9BQU8sWUFBWTtBQUNuQixTQUFTLHVCQUF1QjtBQUVoQyxTQUFTLGNBQWM7QUFFdkIsU0FBUyxrQkFBa0I7QUFFM0IsU0FBUyxjQUFjO0FBQ3ZCLFNBQVMsa0JBQWtCO0FBSTNCLFNBQVMsWUFBWTtBQUNyQjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMsb0JBQW9CO0FBK0I3QixNQUFNLDJCQUEyQjtBQUNqQyxNQUFNLGlCQUFpQjtBQWF2QixlQUFzQixjQUFjLFFBQTRDO0FBQzlFLFFBQU07QUFBQSxJQUNKO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNGLElBQUk7QUFFSixRQUFNLE9BQU8sTUFBTSx1QkFBdUIsU0FBUyxFQUFFO0FBQ3JELE1BQUksQ0FBQyxNQUFNO0FBQ1QsMEJBQXNCLFdBQVcseUJBQXlCLFNBQVMsSUFBSSxxQ0FBcUM7QUFDNUc7QUFBQSxFQUNGO0FBRUEsUUFBTSxpQkFBaUIsU0FBUztBQUNoQyxRQUFNLGdCQUFnQixNQUFNLHdCQUF3QixJQUFJO0FBRXhELE1BQUk7QUFDSixNQUFJLGdCQUFnQixnQkFBZ0IsYUFBYSxLQUFLLEdBQUc7QUFDdkQsb0JBQWdCO0FBQUEsRUFDbEIsT0FBTztBQUNMLFVBQU0sZ0JBQWdCLE1BQU0sYUFBNEI7QUFBQSxNQUN0RDtBQUFBLE1BQ0EsU0FBUyw2QkFBNkIsU0FBUyxJQUFJLEtBQUssY0FBYyx3QkFBd0IsYUFBYTtBQUFBLE1BQzNHLFNBQVM7QUFBQSxRQUNQO0FBQUEsVUFDRSxPQUFPO0FBQUEsVUFDUCxNQUFNLHdDQUF3QyxhQUFhO0FBQUEsVUFDM0QsT0FBTztBQUFBLFFBQ1Q7QUFBQSxRQUNBO0FBQUEsVUFDRSxNQUFNLHlDQUF5QyxjQUFjO0FBQUEsVUFDN0QsT0FBTztBQUFBLFFBQ1Q7QUFBQSxRQUNBO0FBQUEsVUFDRSxNQUFNO0FBQUEsVUFDTixPQUFPO0FBQUEsUUFDVDtBQUFBLE1BQ0Y7QUFBQSxNQUNBLE9BQU8sU0FBUztBQUFBLElBQ2xCLENBQUM7QUFDRCxRQUFJLGtCQUFrQixNQUFNO0FBQzFCO0FBQUEsSUFDRjtBQUNBLG9CQUFnQjtBQUFBLEVBQ2xCO0FBRUEsUUFBTSxXQUFXLEtBQUssT0FBTyxHQUFHLDBCQUEwQixTQUFTLElBQUksYUFBYTtBQUNwRixNQUFJLENBQUMsV0FBVyxRQUFRLEdBQUc7QUFDekIsVUFBTSxjQUFjLE1BQU0sNEJBQTRCO0FBQUEsTUFDcEQ7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBLFNBQVM7QUFBQSxJQUNYLENBQUM7QUFDRCxRQUFJLENBQUMsYUFBYTtBQUNoQjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBRUEsU0FBTyxTQUFTLFlBQVksU0FBUyxjQUFjLFVBQVUsS0FBSztBQUNwRTtBQUVBLGVBQWUsNEJBQTRCLFFBQTZEO0FBQ3RHLFFBQU07QUFBQSxJQUNKO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0YsSUFBSTtBQUVKLFFBQU0sV0FBVyxzQkFBc0IsSUFBSSxzQkFBc0IsT0FBTyxlQUFlLE9BQU87QUFDOUYsUUFBTSxXQUFXLE1BQU0sV0FBVztBQUFBLElBQ2hDLE9BQU87QUFBQSxJQUNQLEtBQUs7QUFBQSxFQUNQLENBQUM7QUFDRCxNQUFJLFNBQVMsV0FBVyxnQkFBZ0I7QUFDdEMsMEJBQXNCLFdBQVcseUNBQXlDLFNBQVMsSUFBSSxLQUFLLE9BQU8sR0FBRztBQUN0RyxXQUFPO0FBQUEsRUFDVDtBQUVBLFFBQU0sTUFBTSxJQUFJLE9BQU8sT0FBTyxLQUFLLFNBQVMsV0FBVyxDQUFDO0FBQ3hELE1BQUksYUFBYSxVQUFVLElBQUk7QUFDL0IsU0FBTztBQUNUOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -0,0 +1,98 @@
1
+ /// <reference path="../library.d.mts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * Typed helpers for subscribing to an Obsidian {@link Events} source. Both derive the valid event names and their
6
+ * callback argument types from the source's overloaded `on` method (via {@link ExtractEventMap}), so the event
7
+ * name and handler are fully autocompleted. {@link subscribeEvent} returns the raw {@link EventRef} (parity with
8
+ * {@link Events.on}); {@link subscribeDisposableEvent} returns a {@link DisposableEx} that unregisters it.
9
+ */
10
+ import type { EventRef, Events } from 'obsidian';
11
+ import type { DisposableEx } from '../disposable.mjs';
12
+ import type { ExtractEventMap } from '../type.mjs';
13
+ import { DisposableBase } from '../disposable.mjs';
14
+ /**
15
+ * Parameters for {@link subscribeDisposableEvent}. Same shape as {@link SubscribeEventParams}.
16
+ *
17
+ * @typeParam Source - The {@link Events} source type.
18
+ * @typeParam EventName - The event name, constrained to the source's known events.
19
+ */
20
+ export type SubscribeDisposableEventParams<Source extends Events, EventName extends EventNameOf<Source>> = SubscribeEventParams<Source, EventName>;
21
+ /**
22
+ * Parameters for {@link subscribeEvent}.
23
+ *
24
+ * @typeParam Source - The {@link Events} source type.
25
+ * @typeParam EventName - The event name, constrained to the source's known events.
26
+ */
27
+ export interface SubscribeEventParams<Source extends Events, EventName extends EventNameOf<Source>> {
28
+ /**
29
+ * The event callback. Its argument types are inferred from {@link SubscribeEventParams.name}.
30
+ */
31
+ readonly callback: EventCallbackOf<Source, EventName>;
32
+ /**
33
+ * The event source to subscribe on.
34
+ */
35
+ readonly events: Source;
36
+ /**
37
+ * The event name to subscribe to.
38
+ */
39
+ readonly name: EventName;
40
+ /**
41
+ * The context passed as `this` to the callback.
42
+ */
43
+ readonly thisArg?: unknown;
44
+ }
45
+ /**
46
+ * The callback type for a given event on a {@link Events} source, with its argument tuple inferred from
47
+ * {@link ExtractEventMap}.
48
+ *
49
+ * @typeParam Source - The {@link Events} source type.
50
+ * @typeParam EventName - The event name.
51
+ */
52
+ type EventCallbackOf<Source extends Events, EventName extends EventNameOf<Source>> = ExtractEventMap<Source>[EventName] extends infer Args extends unknown[] ? (...args: Args) => unknown : never;
53
+ /**
54
+ * The union of known event names for a {@link Events} source, derived from its `on` overloads.
55
+ *
56
+ * @typeParam Source - The {@link Events} source type.
57
+ */
58
+ type EventNameOf<Source extends Events> = keyof ExtractEventMap<Source> & string;
59
+ /**
60
+ * A {@link DisposableEx} that unregisters an Obsidian {@link EventRef} on dispose, via the event source exposed on
61
+ * the ref itself (`eventRef.e`).
62
+ */
63
+ export declare class EventRefDisposable extends DisposableBase {
64
+ private readonly eventRef;
65
+ /**
66
+ * Creates a disposable wrapping an existing {@link EventRef}.
67
+ *
68
+ * @param eventRef - The event reference to unregister on dispose.
69
+ */
70
+ constructor(eventRef: EventRef);
71
+ /**
72
+ * Unregisters the event via the source stored on the ref (`eventRef.e.offref`).
73
+ */
74
+ protected performDispose(): void;
75
+ }
76
+ /**
77
+ * Subscribes to an event on an {@link Events} source and returns a {@link DisposableEx} that unregisters it on
78
+ * dispose. Typed wrapper over {@link Events.on}: the event name and callback arguments are autocompleted from the
79
+ * source's overloads.
80
+ *
81
+ * @typeParam Source - The {@link Events} source type.
82
+ * @typeParam EventName - The event name.
83
+ * @param params - The subscription parameters.
84
+ * @returns A {@link DisposableEx} that unregisters the handler when disposed.
85
+ */
86
+ export declare function subscribeDisposableEvent<Source extends Events, EventName extends EventNameOf<Source>>(params: SubscribeDisposableEventParams<Source, EventName>): DisposableEx;
87
+ /**
88
+ * Subscribes to an event on an {@link Events} source and returns the raw {@link EventRef} (parity with
89
+ * {@link Events.on}). Typed wrapper: the event name and callback arguments are autocompleted from the source's
90
+ * overloads.
91
+ *
92
+ * @typeParam Source - The {@link Events} source type.
93
+ * @typeParam EventName - The event name.
94
+ * @param params - The subscription parameters.
95
+ * @returns The {@link EventRef} for the registered handler.
96
+ */
97
+ export declare function subscribeEvent<Source extends Events, EventName extends EventNameOf<Source>>(params: SubscribeEventParams<Source, EventName>): EventRef;
98
+ export {};
@@ -0,0 +1,55 @@
1
+ /*
2
+ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
+ if you want to view the source, please visit the github repository of this plugin
4
+ */
5
+
6
+ (function initEsm() {
7
+ // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
8
+ if (globalThis.process) {
9
+ return;
10
+ }
11
+
12
+ const browserProcess = {
13
+ browser: true,
14
+ cwd() {
15
+ return '/';
16
+ },
17
+ env: {},
18
+ platform: 'android'
19
+ };
20
+ // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
21
+ globalThis.process = browserProcess;
22
+ })();
23
+
24
+ import { DisposableBase } from "../disposable.mjs";
25
+ import { castTo } from "../object-utils.mjs";
26
+ class EventRefDisposable extends DisposableBase {
27
+ /**
28
+ * Creates a disposable wrapping an existing {@link EventRef}.
29
+ *
30
+ * @param eventRef - The event reference to unregister on dispose.
31
+ */
32
+ constructor(eventRef) {
33
+ super();
34
+ this.eventRef = eventRef;
35
+ }
36
+ eventRef;
37
+ /**
38
+ * Unregisters the event via the source stored on the ref (`eventRef.e.offref`).
39
+ */
40
+ performDispose() {
41
+ this.eventRef.e.offref(this.eventRef);
42
+ }
43
+ }
44
+ function subscribeDisposableEvent(params) {
45
+ return new EventRefDisposable(subscribeEvent(params));
46
+ }
47
+ function subscribeEvent(params) {
48
+ return params.events.on(params.name, castTo(params.callback), params.thisArg);
49
+ }
50
+ export {
51
+ EventRefDisposable,
52
+ subscribeDisposableEvent,
53
+ subscribeEvent
54
+ };
55
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2V2ZW50cy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFR5cGVkIGhlbHBlcnMgZm9yIHN1YnNjcmliaW5nIHRvIGFuIE9ic2lkaWFuIHtAbGluayBFdmVudHN9IHNvdXJjZS4gQm90aCBkZXJpdmUgdGhlIHZhbGlkIGV2ZW50IG5hbWVzIGFuZCB0aGVpclxuICogY2FsbGJhY2sgYXJndW1lbnQgdHlwZXMgZnJvbSB0aGUgc291cmNlJ3Mgb3ZlcmxvYWRlZCBgb25gIG1ldGhvZCAodmlhIHtAbGluayBFeHRyYWN0RXZlbnRNYXB9KSwgc28gdGhlIGV2ZW50XG4gKiBuYW1lIGFuZCBoYW5kbGVyIGFyZSBmdWxseSBhdXRvY29tcGxldGVkLiB7QGxpbmsgc3Vic2NyaWJlRXZlbnR9IHJldHVybnMgdGhlIHJhdyB7QGxpbmsgRXZlbnRSZWZ9IChwYXJpdHkgd2l0aFxuICoge0BsaW5rIEV2ZW50cy5vbn0pOyB7QGxpbmsgc3Vic2NyaWJlRGlzcG9zYWJsZUV2ZW50fSByZXR1cm5zIGEge0BsaW5rIERpc3Bvc2FibGVFeH0gdGhhdCB1bnJlZ2lzdGVycyBpdC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEV2ZW50UmVmLFxuICBFdmVudHNcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IERpc3Bvc2FibGVFeCB9IGZyb20gJy4uL2Rpc3Bvc2FibGUudHMnO1xuaW1wb3J0IHR5cGUgeyBHZW5lcmljRnVuY3Rpb24gfSBmcm9tICcuLi9mdW5jdGlvbi50cyc7XG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RFdmVudE1hcCB9IGZyb20gJy4uL3R5cGUudHMnO1xuXG5pbXBvcnQgeyBEaXNwb3NhYmxlQmFzZSB9IGZyb20gJy4uL2Rpc3Bvc2FibGUudHMnO1xuaW1wb3J0IHsgY2FzdFRvIH0gZnJvbSAnLi4vb2JqZWN0LXV0aWxzLnRzJztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgc3Vic2NyaWJlRGlzcG9zYWJsZUV2ZW50fS4gU2FtZSBzaGFwZSBhcyB7QGxpbmsgU3Vic2NyaWJlRXZlbnRQYXJhbXN9LlxuICpcbiAqIEB0eXBlUGFyYW0gU291cmNlIC0gVGhlIHtAbGluayBFdmVudHN9IHNvdXJjZSB0eXBlLlxuICogQHR5cGVQYXJhbSBFdmVudE5hbWUgLSBUaGUgZXZlbnQgbmFtZSwgY29uc3RyYWluZWQgdG8gdGhlIHNvdXJjZSdzIGtub3duIGV2ZW50cy5cbiAqL1xuZXhwb3J0IHR5cGUgU3Vic2NyaWJlRGlzcG9zYWJsZUV2ZW50UGFyYW1zPFNvdXJjZSBleHRlbmRzIEV2ZW50cywgRXZlbnROYW1lIGV4dGVuZHMgRXZlbnROYW1lT2Y8U291cmNlPj4gPSBTdWJzY3JpYmVFdmVudFBhcmFtczxcbiAgU291cmNlLFxuICBFdmVudE5hbWVcbj47XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHN1YnNjcmliZUV2ZW50fS5cbiAqXG4gKiBAdHlwZVBhcmFtIFNvdXJjZSAtIFRoZSB7QGxpbmsgRXZlbnRzfSBzb3VyY2UgdHlwZS5cbiAqIEB0eXBlUGFyYW0gRXZlbnROYW1lIC0gVGhlIGV2ZW50IG5hbWUsIGNvbnN0cmFpbmVkIHRvIHRoZSBzb3VyY2UncyBrbm93biBldmVudHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3Vic2NyaWJlRXZlbnRQYXJhbXM8U291cmNlIGV4dGVuZHMgRXZlbnRzLCBFdmVudE5hbWUgZXh0ZW5kcyBFdmVudE5hbWVPZjxTb3VyY2U+PiB7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgY2FsbGJhY2suIEl0cyBhcmd1bWVudCB0eXBlcyBhcmUgaW5mZXJyZWQgZnJvbSB7QGxpbmsgU3Vic2NyaWJlRXZlbnRQYXJhbXMubmFtZX0uXG4gICAqL1xuICByZWFkb25seSBjYWxsYmFjazogRXZlbnRDYWxsYmFja09mPFNvdXJjZSwgRXZlbnROYW1lPjtcblxuICAvKipcbiAgICogVGhlIGV2ZW50IHNvdXJjZSB0byBzdWJzY3JpYmUgb24uXG4gICAqL1xuICByZWFkb25seSBldmVudHM6IFNvdXJjZTtcblxuICAvKipcbiAgICogVGhlIGV2ZW50IG5hbWUgdG8gc3Vic2NyaWJlIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogRXZlbnROYW1lO1xuXG4gIC8qKlxuICAgKiBUaGUgY29udGV4dCBwYXNzZWQgYXMgYHRoaXNgIHRvIHRoZSBjYWxsYmFjay5cbiAgICovXG4gIHJlYWRvbmx5IHRoaXNBcmc/OiB1bmtub3duO1xufVxuXG4vKipcbiAqIFRoZSBjYWxsYmFjayB0eXBlIGZvciBhIGdpdmVuIGV2ZW50IG9uIGEge0BsaW5rIEV2ZW50c30gc291cmNlLCB3aXRoIGl0cyBhcmd1bWVudCB0dXBsZSBpbmZlcnJlZCBmcm9tXG4gKiB7QGxpbmsgRXh0cmFjdEV2ZW50TWFwfS5cbiAqXG4gKiBAdHlwZVBhcmFtIFNvdXJjZSAtIFRoZSB7QGxpbmsgRXZlbnRzfSBzb3VyY2UgdHlwZS5cbiAqIEB0eXBlUGFyYW0gRXZlbnROYW1lIC0gVGhlIGV2ZW50IG5hbWUuXG4gKi9cbnR5cGUgRXZlbnRDYWxsYmFja09mPFNvdXJjZSBleHRlbmRzIEV2ZW50cywgRXZlbnROYW1lIGV4dGVuZHMgRXZlbnROYW1lT2Y8U291cmNlPj4gPSBFeHRyYWN0RXZlbnRNYXA8U291cmNlPltFdmVudE5hbWVdIGV4dGVuZHMgaW5mZXIgQXJncyBleHRlbmRzIHVua25vd25bXSA/ICguLi5hcmdzOiBBcmdzKSA9PiB1bmtub3duXG4gIDogbmV2ZXI7XG5cbi8qKlxuICogVGhlIHVuaW9uIG9mIGtub3duIGV2ZW50IG5hbWVzIGZvciBhIHtAbGluayBFdmVudHN9IHNvdXJjZSwgZGVyaXZlZCBmcm9tIGl0cyBgb25gIG92ZXJsb2Fkcy5cbiAqXG4gKiBAdHlwZVBhcmFtIFNvdXJjZSAtIFRoZSB7QGxpbmsgRXZlbnRzfSBzb3VyY2UgdHlwZS5cbiAqL1xudHlwZSBFdmVudE5hbWVPZjxTb3VyY2UgZXh0ZW5kcyBFdmVudHM+ID0ga2V5b2YgRXh0cmFjdEV2ZW50TWFwPFNvdXJjZT4gJiBzdHJpbmc7XG5cbi8qKlxuICogQSB7QGxpbmsgRGlzcG9zYWJsZUV4fSB0aGF0IHVucmVnaXN0ZXJzIGFuIE9ic2lkaWFuIHtAbGluayBFdmVudFJlZn0gb24gZGlzcG9zZSwgdmlhIHRoZSBldmVudCBzb3VyY2UgZXhwb3NlZCBvblxuICogdGhlIHJlZiBpdHNlbGYgKGBldmVudFJlZi5lYCkuXG4gKi9cbmV4cG9ydCBjbGFzcyBFdmVudFJlZkRpc3Bvc2FibGUgZXh0ZW5kcyBEaXNwb3NhYmxlQmFzZSB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgZGlzcG9zYWJsZSB3cmFwcGluZyBhbiBleGlzdGluZyB7QGxpbmsgRXZlbnRSZWZ9LlxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnRSZWYgLSBUaGUgZXZlbnQgcmVmZXJlbmNlIHRvIHVucmVnaXN0ZXIgb24gZGlzcG9zZS5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGV2ZW50UmVmOiBFdmVudFJlZikge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICAvKipcbiAgICogVW5yZWdpc3RlcnMgdGhlIGV2ZW50IHZpYSB0aGUgc291cmNlIHN0b3JlZCBvbiB0aGUgcmVmIChgZXZlbnRSZWYuZS5vZmZyZWZgKS5cbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBwZXJmb3JtRGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLmV2ZW50UmVmLmUub2ZmcmVmKHRoaXMuZXZlbnRSZWYpO1xuICB9XG59XG5cbi8qKlxuICogU3Vic2NyaWJlcyB0byBhbiBldmVudCBvbiBhbiB7QGxpbmsgRXZlbnRzfSBzb3VyY2UgYW5kIHJldHVybnMgYSB7QGxpbmsgRGlzcG9zYWJsZUV4fSB0aGF0IHVucmVnaXN0ZXJzIGl0IG9uXG4gKiBkaXNwb3NlLiBUeXBlZCB3cmFwcGVyIG92ZXIge0BsaW5rIEV2ZW50cy5vbn06IHRoZSBldmVudCBuYW1lIGFuZCBjYWxsYmFjayBhcmd1bWVudHMgYXJlIGF1dG9jb21wbGV0ZWQgZnJvbSB0aGVcbiAqIHNvdXJjZSdzIG92ZXJsb2Fkcy5cbiAqXG4gKiBAdHlwZVBhcmFtIFNvdXJjZSAtIFRoZSB7QGxpbmsgRXZlbnRzfSBzb3VyY2UgdHlwZS5cbiAqIEB0eXBlUGFyYW0gRXZlbnROYW1lIC0gVGhlIGV2ZW50IG5hbWUuXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHN1YnNjcmlwdGlvbiBwYXJhbWV0ZXJzLlxuICogQHJldHVybnMgQSB7QGxpbmsgRGlzcG9zYWJsZUV4fSB0aGF0IHVucmVnaXN0ZXJzIHRoZSBoYW5kbGVyIHdoZW4gZGlzcG9zZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdWJzY3JpYmVEaXNwb3NhYmxlRXZlbnQ8U291cmNlIGV4dGVuZHMgRXZlbnRzLCBFdmVudE5hbWUgZXh0ZW5kcyBFdmVudE5hbWVPZjxTb3VyY2U+PihcbiAgcGFyYW1zOiBTdWJzY3JpYmVEaXNwb3NhYmxlRXZlbnRQYXJhbXM8U291cmNlLCBFdmVudE5hbWU+XG4pOiBEaXNwb3NhYmxlRXgge1xuICByZXR1cm4gbmV3IEV2ZW50UmVmRGlzcG9zYWJsZShzdWJzY3JpYmVFdmVudChwYXJhbXMpKTtcbn1cblxuLyoqXG4gKiBTdWJzY3JpYmVzIHRvIGFuIGV2ZW50IG9uIGFuIHtAbGluayBFdmVudHN9IHNvdXJjZSBhbmQgcmV0dXJucyB0aGUgcmF3IHtAbGluayBFdmVudFJlZn0gKHBhcml0eSB3aXRoXG4gKiB7QGxpbmsgRXZlbnRzLm9ufSkuIFR5cGVkIHdyYXBwZXI6IHRoZSBldmVudCBuYW1lIGFuZCBjYWxsYmFjayBhcmd1bWVudHMgYXJlIGF1dG9jb21wbGV0ZWQgZnJvbSB0aGUgc291cmNlJ3NcbiAqIG92ZXJsb2Fkcy5cbiAqXG4gKiBAdHlwZVBhcmFtIFNvdXJjZSAtIFRoZSB7QGxpbmsgRXZlbnRzfSBzb3VyY2UgdHlwZS5cbiAqIEB0eXBlUGFyYW0gRXZlbnROYW1lIC0gVGhlIGV2ZW50IG5hbWUuXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHN1YnNjcmlwdGlvbiBwYXJhbWV0ZXJzLlxuICogQHJldHVybnMgVGhlIHtAbGluayBFdmVudFJlZn0gZm9yIHRoZSByZWdpc3RlcmVkIGhhbmRsZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdWJzY3JpYmVFdmVudDxTb3VyY2UgZXh0ZW5kcyBFdmVudHMsIEV2ZW50TmFtZSBleHRlbmRzIEV2ZW50TmFtZU9mPFNvdXJjZT4+KFxuICBwYXJhbXM6IFN1YnNjcmliZUV2ZW50UGFyYW1zPFNvdXJjZSwgRXZlbnROYW1lPlxuKTogRXZlbnRSZWYge1xuICAvLyBBIGdlbmVyaWMgYG5hbWVgIGNhbm5vdCBzZWxlY3Qgb25lIG9mIGBvbmAncyBzcGVjaWZpYyBvdmVybG9hZHMsIHNvIHRoZSBjYWxsIHJlc29sdmVzIGFnYWluc3QgdGhlIGJhc2VcbiAgLy8gYG9uKG5hbWU6IHN0cmluZywgY2FsbGJhY2ssIGN0eD8pYCBzaWduYXR1cmUgXHUyMDE0IHRoZSBjYWxsYmFjayBpcyBjYXN0IHRvIHRoYXQgc2lnbmF0dXJlJ3MgcGFyYW1ldGVyIHR5cGUuXG4gIHJldHVybiBwYXJhbXMuZXZlbnRzLm9uKHBhcmFtcy5uYW1lLCBjYXN0VG88R2VuZXJpY0Z1bmN0aW9uPHVua25vd25bXT4+KHBhcmFtcy5jYWxsYmFjayksIHBhcmFtcy50aGlzQXJnKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBa0JBLFNBQVMsc0JBQXNCO0FBQy9CLFNBQVMsY0FBYztBQThEaEIsTUFBTSwyQkFBMkIsZUFBZTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU05QyxZQUE2QixVQUFvQjtBQUN0RCxVQUFNO0FBRDRCO0FBQUEsRUFFcEM7QUFBQSxFQUZvQztBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT2pCLGlCQUF1QjtBQUN4QyxTQUFLLFNBQVMsRUFBRSxPQUFPLEtBQUssUUFBUTtBQUFBLEVBQ3RDO0FBQ0Y7QUFZTyxTQUFTLHlCQUNkLFFBQ2M7QUFDZCxTQUFPLElBQUksbUJBQW1CLGVBQWUsTUFBTSxDQUFDO0FBQ3REO0FBWU8sU0FBUyxlQUNkLFFBQ1U7QUFHVixTQUFPLE9BQU8sT0FBTyxHQUFHLE9BQU8sTUFBTSxPQUFtQyxPQUFPLFFBQVEsR0FBRyxPQUFPLE9BQU87QUFDMUc7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -22,6 +22,7 @@ export * as 'desktop-trusted-input' from './desktop-trusted-input.mjs';
22
22
  export * as 'editor-extension-registrar' from './editor-extension-registrar.mjs';
23
23
  export * as 'editor-suggest-registrar' from './editor-suggest-registrar.mjs';
24
24
  export * as 'editor' from './editor.mjs';
25
+ export * as 'events' from './events.mjs';
25
26
  export * as 'extensions-registrar' from './extensions-registrar.mjs';
26
27
  export * as 'file-change' from './file-change.mjs';
27
28
  export * as 'file-manager' from './file-manager.mjs';