@mnaoumov/obsidian-lib 10.10.0 → 10.12.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 (133) hide show
  1. package/README.md +26 -0
  2. package/components/all-windows-status-bar-item-component/package.json +6 -0
  3. package/components/shared-component-pool-component/package.json +6 -0
  4. package/components/workspace-layout-state-component/package.json +6 -0
  5. package/dist/lib/cjs/__merged.cjs +90 -1
  6. package/dist/lib/cjs/__merged.d.cts +13 -4
  7. package/dist/lib/cjs/bug-report-diagnostics.cjs +222 -0
  8. package/dist/lib/cjs/bug-report-diagnostics.d.cts +186 -0
  9. package/dist/lib/cjs/bug-report.cjs +36 -10
  10. package/dist/lib/cjs/bug-report.d.cts +65 -0
  11. package/dist/lib/cjs/command-handlers/open-bug-report-command-handler.cjs +93 -2
  12. package/dist/lib/cjs/command-handlers/open-bug-report-command-handler.d.cts +34 -2
  13. package/dist/lib/cjs/components/all-windows-status-bar-item-component.cjs +245 -0
  14. package/dist/lib/cjs/components/all-windows-status-bar-item-component.d.cts +146 -0
  15. package/dist/lib/cjs/components/embed-extensions-component.cjs +20 -3
  16. package/dist/lib/cjs/components/embed-extensions-component.d.cts +8 -0
  17. package/dist/lib/cjs/components/embeddable-markdown-editor-component.cjs +16 -2
  18. package/dist/lib/cjs/components/embeddable-markdown-editor-component.d.cts +9 -0
  19. package/dist/lib/cjs/components/index.cjs +12 -3
  20. package/dist/lib/cjs/components/index.d.cts +3 -0
  21. package/dist/lib/cjs/components/plugin-gate-component.cjs +2 -9
  22. package/dist/lib/cjs/components/plugin-settings-component.cjs +7 -2
  23. package/dist/lib/cjs/components/shared-component-pool-component.cjs +368 -0
  24. package/dist/lib/cjs/components/shared-component-pool-component.d.cts +129 -0
  25. package/dist/lib/cjs/components/workspace-layout-state-component.cjs +495 -0
  26. package/dist/lib/cjs/components/workspace-layout-state-component.d.cts +239 -0
  27. package/dist/lib/cjs/css-class.cjs +5 -1
  28. package/dist/lib/cjs/css-class.d.cts +16 -0
  29. package/dist/lib/cjs/data-handler.cjs +156 -5
  30. package/dist/lib/cjs/data-handler.d.cts +128 -2
  31. package/dist/lib/cjs/desktop-git-runner.cjs +4 -14
  32. package/dist/lib/cjs/desktop-git-runner.d.cts +8 -2
  33. package/dist/lib/cjs/generated-during-build.cjs +2 -2
  34. package/dist/lib/cjs/git-rename-history.cjs +1 -1
  35. package/dist/lib/cjs/git-rename-history.d.cts +2 -2
  36. package/dist/lib/cjs/i18n/locales/en.cjs +29 -1
  37. package/dist/lib/cjs/i18n/locales/en.d.cts +28 -0
  38. package/dist/lib/cjs/i18n/locales/translations-map.d.cts +28 -0
  39. package/dist/lib/cjs/index.cjs +10 -1
  40. package/dist/lib/cjs/index.d.cts +3 -0
  41. package/dist/lib/cjs/link.cjs +40 -1
  42. package/dist/lib/cjs/link.d.cts +37 -1
  43. package/dist/lib/cjs/markdown-view.cjs +191 -3
  44. package/dist/lib/cjs/markdown-view.d.cts +48 -1
  45. package/dist/lib/cjs/modals/copy-text-manually.cjs +181 -0
  46. package/dist/lib/cjs/modals/copy-text-manually.d.cts +38 -0
  47. package/dist/lib/cjs/modals/index.cjs +7 -1
  48. package/dist/lib/cjs/modals/index.d.cts +2 -0
  49. package/dist/lib/cjs/modals/review-bug-report-diagnostics.cjs +202 -0
  50. package/dist/lib/cjs/modals/review-bug-report-diagnostics.d.cts +30 -0
  51. package/dist/lib/cjs/plugin/index.cjs +4 -1
  52. package/dist/lib/cjs/plugin/index.d.cts +1 -0
  53. package/dist/lib/cjs/plugin/plugin-api.cjs +13 -4
  54. package/dist/lib/cjs/plugin/plugin-api.d.cts +5 -1
  55. package/dist/lib/cjs/plugin/plugin-install-state.cjs +46 -1
  56. package/dist/lib/cjs/plugin/plugin-install-state.d.cts +30 -0
  57. package/dist/lib/cjs/plugin/plugin-instance.cjs +448 -0
  58. package/dist/lib/cjs/plugin/plugin-instance.d.cts +251 -0
  59. package/dist/lib/cjs/plugin/plugin.cjs +16 -1
  60. package/dist/lib/cjs/plugin/plugin.d.cts +7 -0
  61. package/dist/lib/cjs/reference-definition.cjs +234 -0
  62. package/dist/lib/cjs/reference-definition.d.cts +47 -0
  63. package/dist/lib/cjs/release-asset.cjs +279 -0
  64. package/dist/lib/cjs/release-asset.d.cts +190 -0
  65. package/dist/lib/cjs/workspace.cjs +3 -2
  66. package/dist/lib/cjs/workspace.d.cts +6 -0
  67. package/dist/lib/esm/__merged.d.mts +13 -4
  68. package/dist/lib/esm/__merged.mjs +97 -3
  69. package/dist/lib/esm/bug-report-diagnostics.d.mts +186 -0
  70. package/dist/lib/esm/bug-report-diagnostics.mjs +127 -0
  71. package/dist/lib/esm/bug-report.d.mts +65 -0
  72. package/dist/lib/esm/bug-report.mjs +33 -10
  73. package/dist/lib/esm/command-handlers/open-bug-report-command-handler.d.mts +34 -2
  74. package/dist/lib/esm/command-handlers/open-bug-report-command-handler.mjs +99 -3
  75. package/dist/lib/esm/components/all-windows-status-bar-item-component.d.mts +146 -0
  76. package/dist/lib/esm/components/all-windows-status-bar-item-component.mjs +154 -0
  77. package/dist/lib/esm/components/embed-extensions-component.d.mts +8 -0
  78. package/dist/lib/esm/components/embed-extensions-component.mjs +20 -3
  79. package/dist/lib/esm/components/embeddable-markdown-editor-component.d.mts +9 -0
  80. package/dist/lib/esm/components/embeddable-markdown-editor-component.mjs +16 -2
  81. package/dist/lib/esm/components/index.d.mts +3 -0
  82. package/dist/lib/esm/components/index.mjs +8 -2
  83. package/dist/lib/esm/components/plugin-gate-component.mjs +5 -13
  84. package/dist/lib/esm/components/plugin-settings-component.mjs +7 -2
  85. package/dist/lib/esm/components/shared-component-pool-component.d.mts +129 -0
  86. package/dist/lib/esm/components/shared-component-pool-component.mjs +280 -0
  87. package/dist/lib/esm/components/workspace-layout-state-component.d.mts +239 -0
  88. package/dist/lib/esm/components/workspace-layout-state-component.mjs +404 -0
  89. package/dist/lib/esm/css-class.d.mts +16 -0
  90. package/dist/lib/esm/css-class.mjs +5 -1
  91. package/dist/lib/esm/data-handler.d.mts +128 -2
  92. package/dist/lib/esm/data-handler.mjs +152 -4
  93. package/dist/lib/esm/desktop-git-runner.d.mts +8 -2
  94. package/dist/lib/esm/desktop-git-runner.mjs +3 -3
  95. package/dist/lib/esm/generated-during-build.mjs +2 -2
  96. package/dist/lib/esm/git-rename-history.d.mts +2 -2
  97. package/dist/lib/esm/git-rename-history.mjs +1 -1
  98. package/dist/lib/esm/i18n/locales/en.d.mts +28 -0
  99. package/dist/lib/esm/i18n/locales/en.mjs +29 -1
  100. package/dist/lib/esm/i18n/locales/translations-map.d.mts +28 -0
  101. package/dist/lib/esm/index.d.mts +3 -0
  102. package/dist/lib/esm/index.mjs +7 -1
  103. package/dist/lib/esm/link.d.mts +37 -1
  104. package/dist/lib/esm/link.mjs +40 -1
  105. package/dist/lib/esm/markdown-view.d.mts +48 -1
  106. package/dist/lib/esm/markdown-view.mjs +192 -2
  107. package/dist/lib/esm/modals/copy-text-manually.d.mts +38 -0
  108. package/dist/lib/esm/modals/copy-text-manually.mjs +99 -0
  109. package/dist/lib/esm/modals/index.d.mts +2 -0
  110. package/dist/lib/esm/modals/index.mjs +5 -1
  111. package/dist/lib/esm/modals/review-bug-report-diagnostics.d.mts +30 -0
  112. package/dist/lib/esm/modals/review-bug-report-diagnostics.mjs +120 -0
  113. package/dist/lib/esm/plugin/index.d.mts +1 -0
  114. package/dist/lib/esm/plugin/index.mjs +3 -1
  115. package/dist/lib/esm/plugin/plugin-api.d.mts +5 -1
  116. package/dist/lib/esm/plugin/plugin-api.mjs +13 -4
  117. package/dist/lib/esm/plugin/plugin-install-state.d.mts +30 -0
  118. package/dist/lib/esm/plugin/plugin-install-state.mjs +44 -1
  119. package/dist/lib/esm/plugin/plugin-instance.d.mts +251 -0
  120. package/dist/lib/esm/plugin/plugin-instance.mjs +366 -0
  121. package/dist/lib/esm/plugin/plugin.d.mts +7 -0
  122. package/dist/lib/esm/plugin/plugin.mjs +16 -1
  123. package/dist/lib/esm/reference-definition.d.mts +47 -0
  124. package/dist/lib/esm/reference-definition.mjs +146 -0
  125. package/dist/lib/esm/release-asset.d.mts +190 -0
  126. package/dist/lib/esm/release-asset.mjs +187 -0
  127. package/dist/lib/esm/workspace.d.mts +6 -0
  128. package/dist/lib/esm/workspace.mjs +3 -2
  129. package/dist/styles.css +16 -1
  130. package/modals/copy-text-manually/package.json +6 -0
  131. package/modals/review-bug-report-diagnostics/package.json +6 -0
  132. package/package.json +2 -1
  133. package/plugin/plugin-instance/package.json +6 -0
@@ -0,0 +1,239 @@
1
+ /// <reference path="../library-references.d.cts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * Keeps a plugin's layout-scoped state in the workspace layout itself, so each saved workspace remembers its own value
6
+ * and switching workspaces restores it, instead of one global value in `data.json`.
7
+ *
8
+ * Read from Obsidian `1.15.1`: `Workspace.getLayout()` builds a fresh object (`main`, `left`, `right`, `left-ribbon`,
9
+ * `floating`, `active`) and `Workspace.setLayout()` ignores every other top-level key. `deserializeLayout` keeps each
10
+ * item's `id`, popout leaves included. The Workspaces core plugin saves through `getLayout()` and loads through
11
+ * `changeLayout()`, which calls `setLayout()`. Startup goes through `loadLayout()`, `readWorkspaceFile()` and
12
+ * `setLayout()`, after the plugins enabled at startup have loaded. So two patches on the `app.workspace` instance carry
13
+ * the whole thing: `getLayout` writes the records under {@link WORKSPACE_LAYOUT_STATE_LAYOUT_KEY}, and `setLayout`
14
+ * replaces them from the layout it is handed before any view is restored. Per-leaf state is keyed by leaf id at the
15
+ * layout level, so no `WorkspaceItem.serialize` or `deserializeLayout` patch is needed.
16
+ *
17
+ * A view the plugin owns needs none of this: `View.getState` / `setState` already ride in each leaf's state. This
18
+ * component is for the scope those methods cannot represent: the whole layout, and leaves of views the plugin does not
19
+ * own.
20
+ *
21
+ * Every plugin bundles its own copy of this library, so the records, the subscriptions and ONE installation of the
22
+ * patches live in the shared-state bag under a versioned key, owned by one subscriber. When the owner unloads while
23
+ * others remain, the next subscriber installs again from its own copy. What crosses that boundary is a wire format
24
+ * between copies of different versions: plain objects and plain functions only, fields only ever added, and a change of
25
+ * meaning moves to a new key. The layout record is a wire format too, persisted in `workspace.json` and in every saved
26
+ * workspace.
27
+ */
28
+ import type { App, WorkspaceLeaf } from 'obsidian' with { 'resolution-mode': 'import' };
29
+ import type { JsonValue } from 'type-fest' with { 'resolution-mode': 'import' };
30
+ import { ComponentEx } from './component-ex.cjs';
31
+ /**
32
+ * The top-level key of a serialized layout that holds the records.
33
+ */
34
+ export declare const WORKSPACE_LAYOUT_STATE_LAYOUT_KEY = "obsidianLibLayoutStateV1";
35
+ /**
36
+ * A change of one key's value, in one scope.
37
+ *
38
+ * @typeParam T - The value type.
39
+ */
40
+ export interface WorkspaceLayoutStateChange<T> {
41
+ /**
42
+ * The leaf whose value changed, or `null` for the workspace scope or a leaf no longer in the layout.
43
+ */
44
+ readonly leaf: null | WorkspaceLeaf;
45
+ /**
46
+ * The id of the leaf whose value changed, or `null` for the workspace scope.
47
+ */
48
+ readonly leafId: null | string;
49
+ /**
50
+ * The value before the change, as {@link WorkspaceLayoutStateKey.get} read it.
51
+ */
52
+ readonly oldValue: T;
53
+ /**
54
+ * The value after the change, as {@link WorkspaceLayoutStateKey.get} reads it.
55
+ */
56
+ readonly value: T;
57
+ }
58
+ /**
59
+ * Parameters for {@link WorkspaceLayoutStateComponent}.
60
+ */
61
+ export interface WorkspaceLayoutStateComponentConstructorParams {
62
+ /**
63
+ * The Obsidian app instance.
64
+ */
65
+ readonly app: App;
66
+ /**
67
+ * The id of the plugin the values belong to. Every value is namespaced by it.
68
+ */
69
+ readonly pluginId: string;
70
+ }
71
+ /**
72
+ * A typed handle to one layout-scoped key.
73
+ *
74
+ * Every method takes an optional leaf. Without one, the value belongs to the whole layout (the workspace scope).
75
+ *
76
+ * @typeParam T - The value type.
77
+ */
78
+ export interface WorkspaceLayoutStateKey<T> {
79
+ /**
80
+ * Reads the value: a clone of the stored one, or of the default when nothing is stored or the stored value fails the
81
+ * key's guard.
82
+ *
83
+ * @param leaf - The leaf, or nothing for the workspace scope.
84
+ * @returns The value.
85
+ */
86
+ readonly get: (leaf?: WorkspaceLeaf) => T;
87
+ /**
88
+ * Checks whether a value is stored, valid or not.
89
+ *
90
+ * @param leaf - The leaf, or nothing for the workspace scope.
91
+ * @returns Whether a value is stored.
92
+ */
93
+ readonly has: (leaf?: WorkspaceLeaf) => boolean;
94
+ /**
95
+ * The key name, unique within the plugin.
96
+ */
97
+ readonly key: string;
98
+ /**
99
+ * Subscribes to changes of this key made through `set` or `unset`, in any scope and from any copy of the library. A
100
+ * layout load is reported through {@link WorkspaceLayoutStateComponent.onLayoutLoad} instead.
101
+ *
102
+ * @param callback - Called after each change.
103
+ * @returns A function that unsubscribes. Unloading the component unsubscribes too.
104
+ */
105
+ readonly onChange: (callback: (change: WorkspaceLayoutStateChange<T>) => void) => () => void;
106
+ /**
107
+ * Stores a clone of the value and requests a layout save. Storing a value equal to the stored one does nothing.
108
+ *
109
+ * @param value - The value. It must be JSON-safe; `null` is stored as `null`.
110
+ * @param leaf - The leaf, or nothing for the workspace scope.
111
+ * @throws A `TypeError` if the value is not JSON-safe.
112
+ */
113
+ readonly set: (value: T, leaf?: WorkspaceLeaf) => void;
114
+ /**
115
+ * Removes the stored value, so `get` reads the default again, and requests a layout save.
116
+ *
117
+ * @param leaf - The leaf, or nothing for the workspace scope.
118
+ */
119
+ readonly unset: (leaf?: WorkspaceLeaf) => void;
120
+ }
121
+ /**
122
+ * Defines a layout-scoped key.
123
+ *
124
+ * @typeParam T - The value type.
125
+ */
126
+ export interface WorkspaceLayoutStateKeyDefinition<T> {
127
+ /**
128
+ * The value read when nothing valid is stored.
129
+ */
130
+ readonly defaultValue: T;
131
+ /**
132
+ * Checks a stored value. A value that fails reads as the default and stays stored until it is replaced or unset.
133
+ *
134
+ * @default Accepts every JSON value.
135
+ */
136
+ readonly isValid?: (value: unknown) => value is T;
137
+ /**
138
+ * The key name, unique within the plugin.
139
+ */
140
+ readonly key: string;
141
+ }
142
+ /**
143
+ * One plugin's records. Fields a newer copy adds are preserved.
144
+ */
145
+ export interface WorkspaceLayoutStatePluginRecord {
146
+ /**
147
+ * The values by leaf id, then by key.
148
+ */
149
+ readonly leaves: Record<string, JsonRecord>;
150
+ /**
151
+ * Fields a newer copy of the library added.
152
+ */
153
+ readonly [field: string]: unknown;
154
+ /**
155
+ * The workspace-scope values by key.
156
+ */
157
+ readonly workspace: JsonRecord;
158
+ }
159
+ /**
160
+ * The record persisted under {@link WORKSPACE_LAYOUT_STATE_LAYOUT_KEY}. Fields a newer copy adds are preserved.
161
+ */
162
+ export interface WorkspaceLayoutStateRecord {
163
+ /**
164
+ * The records by plugin id.
165
+ */
166
+ readonly plugins: Record<string, WorkspaceLayoutStatePluginRecord>;
167
+ /**
168
+ * Fields a newer copy of the library added.
169
+ */
170
+ readonly [field: string]: unknown;
171
+ }
172
+ type JsonRecord = Record<string, JsonValue>;
173
+ /**
174
+ * Keeps a plugin's layout-scoped values in the workspace layout, so saved workspaces each restore their own.
175
+ *
176
+ * Any number of these, in any number of plugins, share one installation per {@link App}. Values are restored when a
177
+ * layout loads, which REPLACES every value: write them after {@link Workspace.onLayoutReady}, and re-read them in
178
+ * {@link onLayoutLoad}.
179
+ */
180
+ export declare class WorkspaceLayoutStateComponent extends ComponentEx {
181
+ /**
182
+ * The Obsidian app instance.
183
+ */
184
+ protected readonly app: App;
185
+ /**
186
+ * The id of the plugin the values belong to.
187
+ */
188
+ protected readonly pluginId: string;
189
+ private readonly layoutLoadListeners;
190
+ private readonly recordChangeListeners;
191
+ /**
192
+ * Creates a new workspace layout state component.
193
+ *
194
+ * @param params - The parameters.
195
+ * @throws A `TypeError` if the plugin id is empty.
196
+ */
197
+ constructor(params: WorkspaceLayoutStateComponentConstructorParams);
198
+ /**
199
+ * Defines a typed key.
200
+ *
201
+ * @typeParam T - The value type.
202
+ * @param definition - The key definition.
203
+ * @returns The key handle.
204
+ * @throws A `TypeError` if the key is empty or the default value is not JSON-safe.
205
+ */
206
+ defineKey<T>(definition: WorkspaceLayoutStateKeyDefinition<T>): WorkspaceLayoutStateKey<T>;
207
+ /**
208
+ * Subscribes to layout loads: a saved workspace loaded, the layout restored at startup, or the saved layout read when
209
+ * the component is first loaded after layout-ready. Every value may have changed.
210
+ *
211
+ * @param callback - Called after the layout is loaded, once its leaves exist.
212
+ * @returns A function that unsubscribes. Unloading the component unsubscribes too.
213
+ */
214
+ onLayoutLoad(callback: () => void): () => void;
215
+ /**
216
+ * Subscribes to the shared installation, installing it when nobody has yet.
217
+ */
218
+ onload(): void;
219
+ private subscribeToRecordChanges;
220
+ }
221
+ /**
222
+ * Parses a persisted record. A part that is malformed is dropped one level at a time: a malformed record reads as
223
+ * empty, a malformed plugin record drops only that plugin, and a malformed leaf bucket drops only that leaf. Fields this
224
+ * copy does not know are kept.
225
+ *
226
+ * @param value - The value found under {@link WORKSPACE_LAYOUT_STATE_LAYOUT_KEY}.
227
+ * @returns The parsed record, sharing nothing with the input.
228
+ */
229
+ export declare function parseWorkspaceLayoutStateRecord(value: unknown): WorkspaceLayoutStateRecord;
230
+ /**
231
+ * Builds the record to persist into a serialized layout: leaf buckets for leaves absent from the layout are left out,
232
+ * and so are plugins with nothing left.
233
+ *
234
+ * @param record - The current record.
235
+ * @param layout - The serialized layout.
236
+ * @returns The record to persist, or `null` when there is nothing to persist.
237
+ */
238
+ export declare function serializeWorkspaceLayoutStateRecord(record: WorkspaceLayoutStateRecord, layout: unknown): null | WorkspaceLayoutStateRecord;
239
+ export {};
@@ -92,6 +92,8 @@ __export(css_class_exports, {
92
92
  module.exports = __toCommonJS(css_class_exports);
93
93
  var CssClass = /* @__PURE__ */ ((CssClass2) => {
94
94
  CssClass2["AlertModal"] = "alert-modal";
95
+ CssClass2["BugReportPreview"] = "bug-report-preview";
96
+ CssClass2["BugReportReviewModal"] = "bug-report-review-modal";
95
97
  CssClass2["CancelButton"] = "cancel-button";
96
98
  CssClass2["CheckboxComponent"] = "checkbox-component";
97
99
  CssClass2["ClickableIcon"] = "clickable-icon";
@@ -103,6 +105,8 @@ var CssClass = /* @__PURE__ */ ((CssClass2) => {
103
105
  CssClass2["CodeBlockBuilderPreview"] = "code-block-builder-preview";
104
106
  CssClass2["CodeHighlighterComponent"] = "code-highlighter-component";
105
107
  CssClass2["ConfirmModal"] = "confirm-modal";
108
+ CssClass2["CopyTextManuallyModal"] = "copy-text-manually-modal";
109
+ CssClass2["CopyTextManuallyText"] = "copy-text-manually-text";
106
110
  CssClass2["DateComponent"] = "date-component";
107
111
  CssClass2["DateTimeComponent"] = "datetime-component";
108
112
  CssClass2["EmailComponent"] = "email-component";
@@ -174,4 +178,4 @@ var CssClass = /* @__PURE__ */ ((CssClass2) => {
174
178
  0 && (module.exports = {
175
179
  CssClass
176
180
  });
177
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jc3MtY2xhc3MudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIENTUyBjbGFzc2VzIHVzZWQgYnkgdGhlIGBAbW5hb3Vtb3Yvb2JzaWRpYW4tbGliYCBsaWJyYXJ5LlxuICovXG5cbi8qKlxuICogQ1NTIGNsYXNzZXMgdXNlZCBieSB0aGUgYEBtbmFvdW1vdi9vYnNpZGlhbi1saWJgIGxpYnJhcnkuXG4gKi9cbmV4cG9ydCBlbnVtIENzc0NsYXNzIHtcbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgYWxlcnQgbW9kYWwuXG4gICAqL1xuICBBbGVydE1vZGFsID0gJ2FsZXJ0LW1vZGFsJyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSBjYW5jZWwgYnV0dG9uLlxuICAgKi9cbiAgQ2FuY2VsQnV0dG9uID0gJ2NhbmNlbC1idXR0b24nLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIGNoZWNrYm94IGNvbXBvbmVudC5cbiAgICovXG4gIENoZWNrYm94Q29tcG9uZW50ID0gJ2NoZWNrYm94LWNvbXBvbmVudCcsXG5cbiAgLyoqXG4gICAqIE9ic2lkaWFuJ3MgY2xhc3MgZm9yIGEgY2xpY2thYmxlIGljb24gYnV0dG9uLCBnaXZpbmcgaXQgdGhlIGhvdmVyIGJhY2tncm91bmQgYW5kIGljb24tY29sb3IgdHJlYXRtZW50LlxuICAgKi9cbiAgQ2xpY2thYmxlSWNvbiA9ICdjbGlja2FibGUtaWNvbicsXG5cbiAgLyoqXG4gICAqIE9ic2lkaWFuJ3MgY2xhc3MgZm9yIGFuIGlubGluZSBjb2RlIGVsZW1lbnQgKHVzZWQgYnkgYGFwcGVuZENvZGVCbG9ja2ApLlxuICAgKi9cbiAgQ29kZSA9ICdjb2RlJyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIGEgY29sbGFwc2libGUgZmllbGQgZ3JvdXAgb2YgdGhlIGNvZGUgYmxvY2sgYnVpbGRlciBtb2RhbC5cbiAgICovXG4gIENvZGVCbG9ja0J1aWxkZXJHcm91cCA9ICdjb2RlLWJsb2NrLWJ1aWxkZXItZ3JvdXAnLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIGZpZWxkIGNvbnRhaW5lciBvZiBhIGNvbGxhcHNpYmxlIGdyb3VwIG9mIHRoZSBjb2RlIGJsb2NrIGJ1aWxkZXIgbW9kYWwuXG4gICAqL1xuICBDb2RlQmxvY2tCdWlsZGVyR3JvdXBCb2R5ID0gJ2NvZGUtYmxvY2stYnVpbGRlci1ncm91cC1ib2R5JyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSBjb2RlIGJsb2NrIGJ1aWxkZXIgbW9kYWwuXG4gICAqL1xuICBDb2RlQmxvY2tCdWlsZGVyTW9kYWwgPSAnY29kZS1ibG9jay1idWlsZGVyLW1vZGFsJyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSBvdXRwdXQgcm93IG9mIHRoZSBjb2RlIGJsb2NrIGJ1aWxkZXIgbW9kYWwuXG4gICAqL1xuICBDb2RlQmxvY2tCdWlsZGVyT3V0cHV0ID0gJ2NvZGUtYmxvY2stYnVpbGRlci1vdXRwdXQnLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIGxpdmUgcHJldmlldyBjb250YWluZXIgb2YgdGhlIGNvZGUgYmxvY2sgYnVpbGRlciBtb2RhbC5cbiAgICovXG4gIENvZGVCbG9ja0J1aWxkZXJQcmV2aWV3ID0gJ2NvZGUtYmxvY2stYnVpbGRlci1wcmV2aWV3JyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSBjb2RlIGhpZ2hsaWdodGVyIGNvbXBvbmVudC5cbiAgICovXG4gIENvZGVIaWdobGlnaHRlckNvbXBvbmVudCA9ICdjb2RlLWhpZ2hsaWdodGVyLWNvbXBvbmVudCcsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgY29uZmlybSBtb2RhbC5cbiAgICovXG4gIENvbmZpcm1Nb2RhbCA9ICdjb25maXJtLW1vZGFsJyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSBkYXRlIGNvbXBvbmVudC5cbiAgICovXG4gIERhdGVDb21wb25lbnQgPSAnZGF0ZS1jb21wb25lbnQnLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIGRhdGUgYW5kIHRpbWUgY29tcG9uZW50LlxuICAgKi9cbiAgRGF0ZVRpbWVDb21wb25lbnQgPSAnZGF0ZXRpbWUtY29tcG9uZW50JyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSBlbWFpbCBjb21wb25lbnQuXG4gICAqL1xuICBFbWFpbENvbXBvbmVudCA9ICdlbWFpbC1jb21wb25lbnQnLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIGZpbGUgY29tcG9uZW50LlxuICAgKi9cbiAgRmlsZUNvbXBvbmVudCA9ICdmaWxlLWNvbXBvbmVudCcsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciByZW5kZXJlZCBtYXJrZG93biB3aG9zZSBoZWFkaW5ncyBhbmQgbGlzdHMgYHJlZ2lzdGVyRm9sZEhhbmRsZXJzYCBtYWRlIGZvbGRhYmxlLlxuICAgKi9cbiAgRm9sZGFibGVNYXJrZG93biA9ICdmb2xkYWJsZS1tYXJrZG93bicsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgZm9sZGVyIGxpc3QgY29tcG9uZW50LlxuICAgKi9cbiAgRm9sZGVyTGlzdENvbXBvbmVudCA9ICdmb2xkZXItbGlzdC1jb21wb25lbnQnLFxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSBob3RrZXkgY29tcG9uZW50LlxuICAgKi9cbiAgSG90a2V5Q29tcG9uZW50ID0gJ2hvdGtleS1jb21wb25lbnQnLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIGVsZW1lbnQgYW4gaW5saW5lIHRva2VuIHJlbmRlcnMgaW50bywgaW4gUmVhZGluZyB2aWV3IGFuZCBpbiBMaXZlIFByZXZpZXcuXG4gICAqL1xuICBJbmxpbmVUb2tlbiA9ICdpbmxpbmUtdG9rZW4nLFxuXG4gIC8qKlxuICAgKiBPYnNpZGlhbidzIGNsYXNzIGZvciBhIGNvbnRyb2wgdGhhdCBpcyBjdXJyZW50bHkgT04sIHJldXNlZCBzbyBhIHByZXNzZWQgY29tbWFuZCBidXR0b24gbWF0Y2hlcyB0aGVcbiAgICogYXBwJ3Mgb3duIHRvZ2dsZWQgY29udHJvbHMuXG4gICAqL1xuICBJc0FjdGl2ZSA9ICdpcy1hY3RpdmUnLFxuXG4gIC8qKlxuICAgKiBPYnNpZGlhbidzIGNsYXNzIGZvciBhIGNvbGxhcHNlZCBlbGVtZW50LCByZXVzZWQgZm9yIGEgY29sbGFwc2VkIGdyb3VwIG9mIHRoZSBjb2RlIGJsb2NrIGJ1aWxkZXIgbW9kYWwuXG4gICAqL1xuICBJc0NvbGxhcHNlZCA9ICdpcy1jb2xsYXBzZWQnLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIHBsYWNlaG9sZGVyLlxuICAgKi9cbiAgSXNQbGFjZWhvbGRlciA9ICdpcy1wbGFjZWhvbGRlcicsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgbGlicmFyeSBuYW1lLCBzZXQgb24gZXZlcnkgZWxlbWVudCB0aGUgbGlicmFyeSBidWlsZHMuXG4gICAqL1xuICBMaWJyYXJ5TmFtZSA9ICdvYnNpZGlhbi1saWInLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIHJlb3JkZXJhYmxlIGxpc3QgY29tcG9uZW50LlxuICAgKi9cbiAgTGlzdENvbXBvbmVudCA9ICdsaXN0LWNvbXBvbmVudCcsXG4gIC8qKlxuICAgKiBPYnNpZGlhbidzIGNsYXNzIG1hcmtpbmcgcmVuZGVyZWQtbWFya2Rvd24gY29udGVudCAodXNlZCBieSBgYXBwZW5kQ29kZUJsb2NrYCkuXG4gICAqL1xuICBNYXJrZG93blJlbmRlcmVkID0gJ21hcmtkb3duLXJlbmRlcmVkJyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSBtaW5pbWl6YWJsZSBtb2RhbC5cbiAgICovXG4gIE1pbmltaXphYmxlTW9kYWwgPSAnbWluaW1pemFibGUtbW9kYWwnLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIG1pbmltaXplIGJ1dHRvbiBvZiB0aGUgbWluaW1pemFibGUgbW9kYWwuXG4gICAqL1xuICBNaW5pbWl6ZUJ1dHRvbiA9ICdtaW5pbWl6ZS1idXR0b24nLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIG1pbmltaXplZCBiYXIgb2YgdGhlIG1pbmltaXphYmxlIG1vZGFsLlxuICAgKi9cbiAgTWluaW1pemVkTW9kYWxCYXIgPSAnbWluaW1pemVkLW1vZGFsLWJhcicsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgb25lLXNob3QgYXR0ZW50aW9uIGZsYXNoIG9mIHRoZSBtaW5pbWl6ZWQgYmFyLCBwbGF5ZWQgd2hlbiB0aGUgdXNlciBhdHRlbXB0cyBhXG4gICAqIGJsb2NrZWQgYWN0aW9uIChhIGtleXN0cm9rZSwgcmlnaHQtY2xpY2ssIG9yIG9wZW5pbmcgYW5vdGhlciBtb2RhbCkgd2hpbGUgdGhlIG1vZGFsIGlzIG1pbmltaXplZC5cbiAgICovXG4gIE1pbmltaXplZE1vZGFsQmFyQXR0ZW50aW9uID0gJ21pbmltaXplZC1tb2RhbC1iYXItYXR0ZW50aW9uJyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSB0aXRsZSBvZiB0aGUgbWluaW1pemVkIGJhciBvZiB0aGUgbWluaW1pemFibGUgbW9kYWwuXG4gICAqL1xuICBNaW5pbWl6ZWRNb2RhbEJhclRpdGxlID0gJ21pbmltaXplZC1tb2RhbC1iYXItdGl0bGUnLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3Igb25lIGJ1dHRvbiBpbiBhIG1vZGFsJ3MgY29tbWFuZCBzdHJpcC5cbiAgICovXG4gIE1vZGFsQ29tbWFuZCA9ICdtb2RhbC1jb21tYW5kJyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIGEgY29udHJvbCBpbmplY3RlZCBpbnRvIGFuIGluc3RydWN0aW9uJ3MgcHVycG9zZSB0ZXh0IOKAlCBhIGNoZWNrYm94LCBhIGRyb3Bkb3duLlxuICAgKiBPYnNpZGlhbidzIG93biBpbnN0cnVjdGlvbiBiYXIgbmV2ZXIgY29udGFpbnMgb25lLCBzbyBub3RoaW5nIHVwc3RyZWFtIHNlcGFyYXRlcyBpdCBmcm9tIHRoZSBsYWJlbFxuICAgKiBpdCBiZWxvbmdzIHRvLlxuICAgKi9cbiAgTW9kYWxDb21tYW5kQ29udHJvbCA9ICdtb2RhbC1jb21tYW5kLWNvbnRyb2wnLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIGhvdGtleSBoaW50IGluc2lkZSBhIG1vZGFsIGNvbW1hbmQgYnV0dG9uLlxuICAgKi9cbiAgTW9kYWxDb21tYW5kSG90a2V5ID0gJ21vZGFsLWNvbW1hbmQtaG90a2V5JyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSBzdHJpcCBvZiBjb21tYW5kcyBhIG1vZGFsIHJlbmRlcnMgYWxvbmcgaXRzIGJvdHRvbSBlZGdlLlxuICAgKi9cbiAgTW9kYWxDb21tYW5kcyA9ICdtb2RhbC1jb21tYW5kcycsXG5cbiAgLyoqXG4gICAqIE9ic2lkaWFuJ3MgY2xhc3MgZm9yIGEgbW9kYWwgaGVhZGVyIGJ1dHRvbiAoZS5nLiB0aGUgbW9kYWwgY2xvc2UgYnV0dG9uKSwgcmV1c2VkIHRvIG1hdGNoIHRoZVxuICAgKiBuYXRpdmUgbW9kYWwgY2xvc2UgYnV0dG9uJ3MgYm94IGFuZCBob3Zlci5cbiAgICovXG4gIE1vZGFsSGVhZGVyQnV0dG9uID0gJ21vZGFsLWhlYWRlci1idXR0b24nLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIG1vbnRoIGNvbXBvbmVudC5cbiAgICovXG4gIE1vbnRoQ29tcG9uZW50ID0gJ21vbnRoLWNvbXBvbmVudCcsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgbXVsdGlwbGUgZHJvcGRvd24gY29tcG9uZW50LlxuICAgKi9cbiAgTXVsdGlwbGVEcm9wZG93bkNvbXBvbmVudCA9ICdtdWx0aXBsZS1kcm9wZG93bi1jb21wb25lbnQnLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIG11bHRpcGxlIGVtYWlsIGNvbXBvbmVudC5cbiAgICovXG4gIE11bHRpcGxlRW1haWxDb21wb25lbnQgPSAnbXVsdGlwbGUtZW1haWwtY29tcG9uZW50JyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSBtdWx0aXBsZSBmaWxlIGNvbXBvbmVudC5cbiAgICovXG4gIE11bHRpcGxlRmlsZUNvbXBvbmVudCA9ICdtdWx0aXBsZS1maWxlLWNvbXBvbmVudCcsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgbXVsdGlwbGUgdGV4dCBjb21wb25lbnQuXG4gICAqL1xuICBNdWx0aXBsZVRleHRDb21wb25lbnQgPSAnbXVsdGlwbGUtdGV4dC1jb21wb25lbnQnLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIG51bWJlciBjb21wb25lbnQuXG4gICAqL1xuICBOdW1iZXJDb21wb25lbnQgPSAnbnVtYmVyLWNvbXBvbmVudCcsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgb2sgYnV0dG9uLlxuICAgKi9cbiAgT2tCdXR0b24gPSAnb2stYnV0dG9uJyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSBvdmVybGF5IHZhbGlkYXRvci5cbiAgICovXG4gIE92ZXJsYXlWYWxpZGF0b3IgPSAnb3ZlcmxheS12YWxpZGF0b3InLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIHBhc3N3b3JkIGNvbXBvbmVudC5cbiAgICovXG4gIFBhc3N3b3JkQ29tcG9uZW50ID0gJ3Bhc3N3b3JkLWNvbXBvbmVudCcsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgYmFubmVyIG5hbWluZyBhIHBsdWdpbiB0aGlzIG9uZSByZWZ1c2VzLCBvciB3YXJucyBhYm91dCwgcnVubmluZyBiZXNpZGUuXG4gICAqL1xuICBQbHVnaW5Db25mbGljdEJhbm5lciA9ICdwbHVnaW4tY29uZmxpY3QtYmFubmVyJyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSBiYW5uZXIgYSBibG9ja2VkIHBsdWdpbiByZW5kZXJzIGluIHBsYWNlIG9mIGl0cyBzZXR0aW5ncywgbmFtaW5nIHRoZSBtYW5kYXRvcnlcbiAgICogZGVwZW5kZW5jeSBpdCBpcyB3YWl0aW5nIGZvci5cbiAgICovXG4gIFBsdWdpbkRlcGVuZGVuY3lCYW5uZXIgPSAncGx1Z2luLWRlcGVuZGVuY3ktYmFubmVyJyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSBjbG9zZSBidXR0b24gb2YgYSBub3RpY2UgdGhhdCByZXF1aXJlcyBjbG9zZSBjb25maXJtYXRpb24uXG4gICAqL1xuICBQbHVnaW5Ob3RpY2VDbG9zZUJ1dHRvbiA9ICdwbHVnaW4tbm90aWNlLWNsb3NlLWJ1dHRvbicsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgY29udGFpbmVyIHdyYXBwaW5nIGEgbm90aWNlJ3MgY29udGVudCwgdXNlZCB0byBrZWVwIHRoZSBub3RpY2Ugb3BlbiB3aGVuIGFuXG4gICAqIGludGVyYWN0aXZlIGVsZW1lbnQgaW5zaWRlIGl0IGlzIGNsaWNrZWQuXG4gICAqL1xuICBQbHVnaW5Ob3RpY2VDb250ZW50ID0gJ3BsdWdpbi1ub3RpY2UtY29udGVudCcsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgcGx1Z2luIG5hbWUgc2hvd24gYXMgdGhlIHByZWZpeCBvZiBhIG5vdGljZS5cbiAgICovXG4gIFBsdWdpbk5vdGljZU5hbWUgPSAncGx1Z2luLW5vdGljZS1uYW1lJyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgYXBwbGllZCB0byB0aGUgbm90aWNlIGVsZW1lbnQgb2YgYSBub3RpY2UgdGhhdCByZXF1aXJlcyBhbiBleHBsaWNpdCBjbG9zZSwgdXNlZCB0byBtYWtlXG4gICAqIGl0cyB3aG9sZSBhcmVhIG5vbi1kaXNtaXNzaWJsZS5cbiAgICovXG4gIFBsdWdpbk5vdGljZVJlcXVpcmVzRXhwbGljaXRDbG9zZSA9ICdwbHVnaW4tbm90aWNlLXJlcXVpcmVzLWV4cGxpY2l0LWNsb3NlJyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSBwbHVnaW4gc2V0dGluZ3MgdGFiLlxuICAgKi9cbiAgUGx1Z2luU2V0dGluZ3NUYWIgPSAncGx1Z2luLXNldHRpbmdzLXRhYicsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgYmFubmVyIGEgcGx1Z2luLXN1Z2dlc3Rpb24gcmVuZGVycyBpbnRvIGEgc2V0dGluZ3MgdGFiLlxuICAgKi9cbiAgUGx1Z2luU3VnZ2VzdGlvbkJhbm5lciA9ICdwbHVnaW4tc3VnZ2VzdGlvbi1iYW5uZXInLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIHJvdyBvZiBidXR0b25zIGluIGEgcGx1Z2luLXN1Z2dlc3Rpb24gbm90aWNlLCB3aGljaCBzcGFjZXMgdGhlIGFjdGlvbiBidXR0b24gYXBhcnQgZnJvbVxuICAgKiB0aGUgZGVjbGluZSBidXR0b24uXG4gICAqL1xuICBQbHVnaW5TdWdnZXN0aW9uTm90aWNlQnV0dG9ucyA9ICdwbHVnaW4tc3VnZ2VzdGlvbi1ub3RpY2UtYnV0dG9ucycsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgcG9wb3Zlci5cbiAgICovXG4gIFBvcG92ZXIgPSAncG9wb3ZlcicsXG5cbiAgLyoqXG4gICAqIE9ic2lkaWFuJ3MgY2xhc3MgZm9yIG9uZSByb3cgb2YgaXRzIG1vZGFsIGluc3RydWN0aW9uIGJhciwgcmV1c2VkIHNvIGEgc2VsZi1jcmVhdGVkIGJhciBpbmhlcml0cyB0aGVcbiAgICogYXBwJ3Mgb3duIGluc3RydWN0aW9uIHN0eWxpbmcuXG4gICAqL1xuICBQcm9tcHRJbnN0cnVjdGlvbiA9ICdwcm9tcHQtaW5zdHJ1Y3Rpb24nLFxuXG4gIC8qKlxuICAgKiBPYnNpZGlhbidzIGNsYXNzIGZvciB0aGUga2V5LWhpbnQgaGFsZiBvZiBvbmUgaW5zdHJ1Y3Rpb24gcm93LiBJdCBpcyB0aGUgb25seSB0aGluZyBjYXJyeWluZyB0aGF0XG4gICAqIGhpbnQncyBib2xkIHdlaWdodCBhbmQgdGhlIGBtYXJnaW4taW5saW5lLWVuZGAgdGhhdCBzZXBhcmF0ZXMgaXQgZnJvbSB0aGUgcHVycG9zZSB0ZXh0LCBzbyBhXG4gICAqIHNlbGYtY3JlYXRlZCBiYXIgdGhhdCBvbWl0cyBpdCByZW5kZXJzIGBhbHQgMUtlZXAgdGhlIG9sZCB0aXRsZWAgd2VsZGVkIHRvZ2V0aGVyLiBSZXVzZWQgcmF0aGVyXG4gICAqIHRoYW4gcmUtaW1wbGVtZW50ZWQ6IHRoZSBhcHAncyBydWxlIGZvciBpdCBpcyB1bnNjb3BlZCwgc28gaXQgcmVhY2hlcyBhIHBsYWluIGBNb2RhbGAgdG9vLCBhbmRcbiAgICogc2hhcmluZyB0aGUgY2xhc3Mga2VlcHMgdGhlIHNlbGYtY3JlYXRlZCBiYXIgYW5kIGBzZXRJbnN0cnVjdGlvbnNgIGZyb20gZXZlciBkcmlmdGluZyBhcGFydC5cbiAgICovXG4gIFByb21wdEluc3RydWN0aW9uQ29tbWFuZCA9ICdwcm9tcHQtaW5zdHJ1Y3Rpb24tY29tbWFuZCcsXG5cbiAgLyoqXG4gICAqIE9ic2lkaWFuJ3MgY2xhc3MgZm9yIGl0cyBtb2RhbCBpbnN0cnVjdGlvbiBiYXIsIHJldXNlZCBzbyBhIHNlbGYtY3JlYXRlZCBiYXIgaW5oZXJpdHMgdGhlIGFwcCdzIG93blxuICAgKiBpbnN0cnVjdGlvbiBzdHlsaW5nLlxuICAgKi9cbiAgUHJvbXB0SW5zdHJ1Y3Rpb25zID0gJ3Byb21wdC1pbnN0cnVjdGlvbnMnLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIHByb21wdCBtb2RhbC5cbiAgICovXG4gIFByb21wdE1vZGFsID0gJ3Byb21wdC1tb2RhbCcsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgcmVzdG9yZSBidXR0b24gb2YgdGhlIG1pbmltaXplZCBtb2RhbCBiYXIuXG4gICAqL1xuICBSZXN0b3JlQnV0dG9uID0gJ3Jlc3RvcmUtYnV0dG9uJyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSBzZWxlY3QgaXRlbSBtb2RhbC5cbiAgICovXG4gIFNlbGVjdEl0ZW1Nb2RhbCA9ICdzZWxlY3QtaXRlbS1tb2RhbCcsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgc2VsZWN0IG9wdGlvbiBtb2RhbC5cbiAgICovXG4gIFNlbGVjdE9wdGlvbk1vZGFsID0gJ3NlbGVjdC1vcHRpb24tbW9kYWwnLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIHNldHRpbmcgY29tcG9uZW50IHdyYXBwZXIuXG4gICAqL1xuICBTZXR0aW5nQ29tcG9uZW50V3JhcHBlciA9ICdzZXR0aW5nLWNvbXBvbmVudC13cmFwcGVyJyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSBzZXR0aW5ncyB0YWJzLlxuICAgKi9cbiAgU2V0dGluZ3NUYWJzID0gJ3NldHRpbmdzLXRhYnMnLFxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSB0YWcgbGlzdCBjb21wb25lbnQuXG4gICAqL1xuICBUYWdMaXN0Q29tcG9uZW50ID0gJ3RhZy1saXN0LWNvbXBvbmVudCcsXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIHRlbGVwaG9uZSBjb21wb25lbnQuXG4gICAqL1xuICBUZWxlcGhvbmVDb21wb25lbnQgPSAndGVsZXBob25lLWNvbXBvbmVudCcsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgdGV4dCBib3guXG4gICAqL1xuICBUZXh0Qm94ID0gJ3RleHQtYm94JyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSB0aW1lIGNvbXBvbmVudC5cbiAgICovXG4gIFRpbWVDb21wb25lbnQgPSAndGltZS1jb21wb25lbnQnLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIHRvb2x0aXAuXG4gICAqL1xuICBUb29sdGlwID0gJ3Rvb2x0aXAnLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIHRvb2x0aXAgYXJyb3cuXG4gICAqL1xuICBUb29sdGlwQXJyb3cgPSAndG9vbHRpcC1hcnJvdycsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgdG9vbHRpcCB2YWxpZGF0b3IuXG4gICAqL1xuICBUb29sdGlwVmFsaWRhdG9yID0gJ3Rvb2x0aXAtdmFsaWRhdG9yJyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSB0cmktc3RhdGUgY2hlY2tib3ggY29tcG9uZW50LlxuICAgKi9cbiAgVHJpU3RhdGVDaGVja2JveENvbXBvbmVudCA9ICd0cmktc3RhdGUtY2hlY2tib3gtY29tcG9uZW50JyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSB0eXBlZCBkcm9wZG93biBjb21wb25lbnQuXG4gICAqL1xuICBUeXBlZERyb3Bkb3duQ29tcG9uZW50ID0gJ3R5cGVkLWRyb3Bkb3duLWNvbXBvbmVudCcsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgdHlwZWQgbXVsdGlwbGUgZHJvcGRvd24gY29tcG9uZW50LlxuICAgKi9cbiAgVHlwZWRNdWx0aXBsZURyb3Bkb3duQ29tcG9uZW50ID0gJ3R5cGVkLW11bHRpcGxlLWRyb3Bkb3duLWNvbXBvbmVudCcsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciBhbiBpbnB1dCB0aGUgdXNlciBoYXMgbm90IGludGVyYWN0ZWQgd2l0aCB5ZXQsIHVzZWQgdG8gZGVmZXIgdGhlIGludmFsaWQgc3R5bGluZyB1bnRpbFxuICAgKiB0aGUgaW5wdXQgaXMgdG91Y2hlZC5cbiAgICovXG4gIFVudG91Y2hlZCA9ICd1bnRvdWNoZWQnLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIHVybCBjb21wb25lbnQuXG4gICAqL1xuICBVcmxDb21wb25lbnQgPSAndXJsLWNvbXBvbmVudCcsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgd2VlayBjb21wb25lbnQuXG4gICAqL1xuICBXZWVrQ29tcG9uZW50ID0gJ3dlZWstY29tcG9uZW50J1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBU08sSUFBSyxXQUFMLGtCQUFLQSxjQUFMO0FBSUwsRUFBQUEsVUFBQSxnQkFBYTtBQUtiLEVBQUFBLFVBQUEsa0JBQWU7QUFLZixFQUFBQSxVQUFBLHVCQUFvQjtBQUtwQixFQUFBQSxVQUFBLG1CQUFnQjtBQUtoQixFQUFBQSxVQUFBLFVBQU87QUFLUCxFQUFBQSxVQUFBLDJCQUF3QjtBQUt4QixFQUFBQSxVQUFBLCtCQUE0QjtBQUs1QixFQUFBQSxVQUFBLDJCQUF3QjtBQUt4QixFQUFBQSxVQUFBLDRCQUF5QjtBQUt6QixFQUFBQSxVQUFBLDZCQUEwQjtBQUsxQixFQUFBQSxVQUFBLDhCQUEyQjtBQUszQixFQUFBQSxVQUFBLGtCQUFlO0FBS2YsRUFBQUEsVUFBQSxtQkFBZ0I7QUFLaEIsRUFBQUEsVUFBQSx1QkFBb0I7QUFLcEIsRUFBQUEsVUFBQSxvQkFBaUI7QUFLakIsRUFBQUEsVUFBQSxtQkFBZ0I7QUFLaEIsRUFBQUEsVUFBQSxzQkFBbUI7QUFLbkIsRUFBQUEsVUFBQSx5QkFBc0I7QUFJdEIsRUFBQUEsVUFBQSxxQkFBa0I7QUFLbEIsRUFBQUEsVUFBQSxpQkFBYztBQU1kLEVBQUFBLFVBQUEsY0FBVztBQUtYLEVBQUFBLFVBQUEsaUJBQWM7QUFLZCxFQUFBQSxVQUFBLG1CQUFnQjtBQUtoQixFQUFBQSxVQUFBLGlCQUFjO0FBS2QsRUFBQUEsVUFBQSxtQkFBZ0I7QUFJaEIsRUFBQUEsVUFBQSxzQkFBbUI7QUFLbkIsRUFBQUEsVUFBQSxzQkFBbUI7QUFLbkIsRUFBQUEsVUFBQSxvQkFBaUI7QUFLakIsRUFBQUEsVUFBQSx1QkFBb0I7QUFNcEIsRUFBQUEsVUFBQSxnQ0FBNkI7QUFLN0IsRUFBQUEsVUFBQSw0QkFBeUI7QUFLekIsRUFBQUEsVUFBQSxrQkFBZTtBQU9mLEVBQUFBLFVBQUEseUJBQXNCO0FBS3RCLEVBQUFBLFVBQUEsd0JBQXFCO0FBS3JCLEVBQUFBLFVBQUEsbUJBQWdCO0FBTWhCLEVBQUFBLFVBQUEsdUJBQW9CO0FBS3BCLEVBQUFBLFVBQUEsb0JBQWlCO0FBS2pCLEVBQUFBLFVBQUEsK0JBQTRCO0FBSzVCLEVBQUFBLFVBQUEsNEJBQXlCO0FBS3pCLEVBQUFBLFVBQUEsMkJBQXdCO0FBS3hCLEVBQUFBLFVBQUEsMkJBQXdCO0FBS3hCLEVBQUFBLFVBQUEscUJBQWtCO0FBS2xCLEVBQUFBLFVBQUEsY0FBVztBQUtYLEVBQUFBLFVBQUEsc0JBQW1CO0FBS25CLEVBQUFBLFVBQUEsdUJBQW9CO0FBS3BCLEVBQUFBLFVBQUEsMEJBQXVCO0FBTXZCLEVBQUFBLFVBQUEsNEJBQXlCO0FBS3pCLEVBQUFBLFVBQUEsNkJBQTBCO0FBTTFCLEVBQUFBLFVBQUEseUJBQXNCO0FBS3RCLEVBQUFBLFVBQUEsc0JBQW1CO0FBTW5CLEVBQUFBLFVBQUEsdUNBQW9DO0FBS3BDLEVBQUFBLFVBQUEsdUJBQW9CO0FBS3BCLEVBQUFBLFVBQUEsNEJBQXlCO0FBTXpCLEVBQUFBLFVBQUEsbUNBQWdDO0FBS2hDLEVBQUFBLFVBQUEsYUFBVTtBQU1WLEVBQUFBLFVBQUEsdUJBQW9CO0FBU3BCLEVBQUFBLFVBQUEsOEJBQTJCO0FBTTNCLEVBQUFBLFVBQUEsd0JBQXFCO0FBS3JCLEVBQUFBLFVBQUEsaUJBQWM7QUFLZCxFQUFBQSxVQUFBLG1CQUFnQjtBQUtoQixFQUFBQSxVQUFBLHFCQUFrQjtBQUtsQixFQUFBQSxVQUFBLHVCQUFvQjtBQUtwQixFQUFBQSxVQUFBLDZCQUEwQjtBQUsxQixFQUFBQSxVQUFBLGtCQUFlO0FBSWYsRUFBQUEsVUFBQSxzQkFBbUI7QUFJbkIsRUFBQUEsVUFBQSx3QkFBcUI7QUFLckIsRUFBQUEsVUFBQSxhQUFVO0FBS1YsRUFBQUEsVUFBQSxtQkFBZ0I7QUFLaEIsRUFBQUEsVUFBQSxhQUFVO0FBS1YsRUFBQUEsVUFBQSxrQkFBZTtBQUtmLEVBQUFBLFVBQUEsc0JBQW1CO0FBS25CLEVBQUFBLFVBQUEsK0JBQTRCO0FBSzVCLEVBQUFBLFVBQUEsNEJBQXlCO0FBS3pCLEVBQUFBLFVBQUEsb0NBQWlDO0FBTWpDLEVBQUFBLFVBQUEsZUFBWTtBQUtaLEVBQUFBLFVBQUEsa0JBQWU7QUFLZixFQUFBQSxVQUFBLG1CQUFnQjtBQTVZTixTQUFBQTtBQUFBLEdBQUE7IiwibmFtZXMiOlsiQ3NzQ2xhc3MiXX0=
181
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jc3MtY2xhc3MudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIENTUyBjbGFzc2VzIHVzZWQgYnkgdGhlIGBAbW5hb3Vtb3Yvb2JzaWRpYW4tbGliYCBsaWJyYXJ5LlxuICovXG5cbi8qKlxuICogQ1NTIGNsYXNzZXMgdXNlZCBieSB0aGUgYEBtbmFvdW1vdi9vYnNpZGlhbi1saWJgIGxpYnJhcnkuXG4gKi9cbmV4cG9ydCBlbnVtIENzc0NsYXNzIHtcbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgYWxlcnQgbW9kYWwuXG4gICAqL1xuICBBbGVydE1vZGFsID0gJ2FsZXJ0LW1vZGFsJyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSBwcmV2aWV3IG9mIHRoZSBidWctcmVwb3J0IGRpYWdub3N0aWNzIHJldmlldyBtb2RhbC5cbiAgICovXG4gIEJ1Z1JlcG9ydFByZXZpZXcgPSAnYnVnLXJlcG9ydC1wcmV2aWV3JyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSBidWctcmVwb3J0IGRpYWdub3N0aWNzIHJldmlldyBtb2RhbC5cbiAgICovXG4gIEJ1Z1JlcG9ydFJldmlld01vZGFsID0gJ2J1Zy1yZXBvcnQtcmV2aWV3LW1vZGFsJyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSBjYW5jZWwgYnV0dG9uLlxuICAgKi9cbiAgQ2FuY2VsQnV0dG9uID0gJ2NhbmNlbC1idXR0b24nLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIGNoZWNrYm94IGNvbXBvbmVudC5cbiAgICovXG4gIENoZWNrYm94Q29tcG9uZW50ID0gJ2NoZWNrYm94LWNvbXBvbmVudCcsXG5cbiAgLyoqXG4gICAqIE9ic2lkaWFuJ3MgY2xhc3MgZm9yIGEgY2xpY2thYmxlIGljb24gYnV0dG9uLCBnaXZpbmcgaXQgdGhlIGhvdmVyIGJhY2tncm91bmQgYW5kIGljb24tY29sb3IgdHJlYXRtZW50LlxuICAgKi9cbiAgQ2xpY2thYmxlSWNvbiA9ICdjbGlja2FibGUtaWNvbicsXG5cbiAgLyoqXG4gICAqIE9ic2lkaWFuJ3MgY2xhc3MgZm9yIGFuIGlubGluZSBjb2RlIGVsZW1lbnQgKHVzZWQgYnkgYGFwcGVuZENvZGVCbG9ja2ApLlxuICAgKi9cbiAgQ29kZSA9ICdjb2RlJyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIGEgY29sbGFwc2libGUgZmllbGQgZ3JvdXAgb2YgdGhlIGNvZGUgYmxvY2sgYnVpbGRlciBtb2RhbC5cbiAgICovXG4gIENvZGVCbG9ja0J1aWxkZXJHcm91cCA9ICdjb2RlLWJsb2NrLWJ1aWxkZXItZ3JvdXAnLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIGZpZWxkIGNvbnRhaW5lciBvZiBhIGNvbGxhcHNpYmxlIGdyb3VwIG9mIHRoZSBjb2RlIGJsb2NrIGJ1aWxkZXIgbW9kYWwuXG4gICAqL1xuICBDb2RlQmxvY2tCdWlsZGVyR3JvdXBCb2R5ID0gJ2NvZGUtYmxvY2stYnVpbGRlci1ncm91cC1ib2R5JyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSBjb2RlIGJsb2NrIGJ1aWxkZXIgbW9kYWwuXG4gICAqL1xuICBDb2RlQmxvY2tCdWlsZGVyTW9kYWwgPSAnY29kZS1ibG9jay1idWlsZGVyLW1vZGFsJyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSBvdXRwdXQgcm93IG9mIHRoZSBjb2RlIGJsb2NrIGJ1aWxkZXIgbW9kYWwuXG4gICAqL1xuICBDb2RlQmxvY2tCdWlsZGVyT3V0cHV0ID0gJ2NvZGUtYmxvY2stYnVpbGRlci1vdXRwdXQnLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIGxpdmUgcHJldmlldyBjb250YWluZXIgb2YgdGhlIGNvZGUgYmxvY2sgYnVpbGRlciBtb2RhbC5cbiAgICovXG4gIENvZGVCbG9ja0J1aWxkZXJQcmV2aWV3ID0gJ2NvZGUtYmxvY2stYnVpbGRlci1wcmV2aWV3JyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSBjb2RlIGhpZ2hsaWdodGVyIGNvbXBvbmVudC5cbiAgICovXG4gIENvZGVIaWdobGlnaHRlckNvbXBvbmVudCA9ICdjb2RlLWhpZ2hsaWdodGVyLWNvbXBvbmVudCcsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgY29uZmlybSBtb2RhbC5cbiAgICovXG4gIENvbmZpcm1Nb2RhbCA9ICdjb25maXJtLW1vZGFsJyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSBjb3B5LXRleHQtbWFudWFsbHkgbW9kYWwuXG4gICAqL1xuICBDb3B5VGV4dE1hbnVhbGx5TW9kYWwgPSAnY29weS10ZXh0LW1hbnVhbGx5LW1vZGFsJyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSB0ZXh0IGFyZWEgb2YgdGhlIGNvcHktdGV4dC1tYW51YWxseSBtb2RhbC5cbiAgICovXG4gIENvcHlUZXh0TWFudWFsbHlUZXh0ID0gJ2NvcHktdGV4dC1tYW51YWxseS10ZXh0JyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSBkYXRlIGNvbXBvbmVudC5cbiAgICovXG4gIERhdGVDb21wb25lbnQgPSAnZGF0ZS1jb21wb25lbnQnLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIGRhdGUgYW5kIHRpbWUgY29tcG9uZW50LlxuICAgKi9cbiAgRGF0ZVRpbWVDb21wb25lbnQgPSAnZGF0ZXRpbWUtY29tcG9uZW50JyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSBlbWFpbCBjb21wb25lbnQuXG4gICAqL1xuICBFbWFpbENvbXBvbmVudCA9ICdlbWFpbC1jb21wb25lbnQnLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIGZpbGUgY29tcG9uZW50LlxuICAgKi9cbiAgRmlsZUNvbXBvbmVudCA9ICdmaWxlLWNvbXBvbmVudCcsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciByZW5kZXJlZCBtYXJrZG93biB3aG9zZSBoZWFkaW5ncyBhbmQgbGlzdHMgYHJlZ2lzdGVyRm9sZEhhbmRsZXJzYCBtYWRlIGZvbGRhYmxlLlxuICAgKi9cbiAgRm9sZGFibGVNYXJrZG93biA9ICdmb2xkYWJsZS1tYXJrZG93bicsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgZm9sZGVyIGxpc3QgY29tcG9uZW50LlxuICAgKi9cbiAgRm9sZGVyTGlzdENvbXBvbmVudCA9ICdmb2xkZXItbGlzdC1jb21wb25lbnQnLFxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSBob3RrZXkgY29tcG9uZW50LlxuICAgKi9cbiAgSG90a2V5Q29tcG9uZW50ID0gJ2hvdGtleS1jb21wb25lbnQnLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIGVsZW1lbnQgYW4gaW5saW5lIHRva2VuIHJlbmRlcnMgaW50bywgaW4gUmVhZGluZyB2aWV3IGFuZCBpbiBMaXZlIFByZXZpZXcuXG4gICAqL1xuICBJbmxpbmVUb2tlbiA9ICdpbmxpbmUtdG9rZW4nLFxuXG4gIC8qKlxuICAgKiBPYnNpZGlhbidzIGNsYXNzIGZvciBhIGNvbnRyb2wgdGhhdCBpcyBjdXJyZW50bHkgT04sIHJldXNlZCBzbyBhIHByZXNzZWQgY29tbWFuZCBidXR0b24gbWF0Y2hlcyB0aGVcbiAgICogYXBwJ3Mgb3duIHRvZ2dsZWQgY29udHJvbHMuXG4gICAqL1xuICBJc0FjdGl2ZSA9ICdpcy1hY3RpdmUnLFxuXG4gIC8qKlxuICAgKiBPYnNpZGlhbidzIGNsYXNzIGZvciBhIGNvbGxhcHNlZCBlbGVtZW50LCByZXVzZWQgZm9yIGEgY29sbGFwc2VkIGdyb3VwIG9mIHRoZSBjb2RlIGJsb2NrIGJ1aWxkZXIgbW9kYWwuXG4gICAqL1xuICBJc0NvbGxhcHNlZCA9ICdpcy1jb2xsYXBzZWQnLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIHBsYWNlaG9sZGVyLlxuICAgKi9cbiAgSXNQbGFjZWhvbGRlciA9ICdpcy1wbGFjZWhvbGRlcicsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgbGlicmFyeSBuYW1lLCBzZXQgb24gZXZlcnkgZWxlbWVudCB0aGUgbGlicmFyeSBidWlsZHMuXG4gICAqL1xuICBMaWJyYXJ5TmFtZSA9ICdvYnNpZGlhbi1saWInLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIHJlb3JkZXJhYmxlIGxpc3QgY29tcG9uZW50LlxuICAgKi9cbiAgTGlzdENvbXBvbmVudCA9ICdsaXN0LWNvbXBvbmVudCcsXG4gIC8qKlxuICAgKiBPYnNpZGlhbidzIGNsYXNzIG1hcmtpbmcgcmVuZGVyZWQtbWFya2Rvd24gY29udGVudCAodXNlZCBieSBgYXBwZW5kQ29kZUJsb2NrYCkuXG4gICAqL1xuICBNYXJrZG93blJlbmRlcmVkID0gJ21hcmtkb3duLXJlbmRlcmVkJyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSBtaW5pbWl6YWJsZSBtb2RhbC5cbiAgICovXG4gIE1pbmltaXphYmxlTW9kYWwgPSAnbWluaW1pemFibGUtbW9kYWwnLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIG1pbmltaXplIGJ1dHRvbiBvZiB0aGUgbWluaW1pemFibGUgbW9kYWwuXG4gICAqL1xuICBNaW5pbWl6ZUJ1dHRvbiA9ICdtaW5pbWl6ZS1idXR0b24nLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIG1pbmltaXplZCBiYXIgb2YgdGhlIG1pbmltaXphYmxlIG1vZGFsLlxuICAgKi9cbiAgTWluaW1pemVkTW9kYWxCYXIgPSAnbWluaW1pemVkLW1vZGFsLWJhcicsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgb25lLXNob3QgYXR0ZW50aW9uIGZsYXNoIG9mIHRoZSBtaW5pbWl6ZWQgYmFyLCBwbGF5ZWQgd2hlbiB0aGUgdXNlciBhdHRlbXB0cyBhXG4gICAqIGJsb2NrZWQgYWN0aW9uIChhIGtleXN0cm9rZSwgcmlnaHQtY2xpY2ssIG9yIG9wZW5pbmcgYW5vdGhlciBtb2RhbCkgd2hpbGUgdGhlIG1vZGFsIGlzIG1pbmltaXplZC5cbiAgICovXG4gIE1pbmltaXplZE1vZGFsQmFyQXR0ZW50aW9uID0gJ21pbmltaXplZC1tb2RhbC1iYXItYXR0ZW50aW9uJyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSB0aXRsZSBvZiB0aGUgbWluaW1pemVkIGJhciBvZiB0aGUgbWluaW1pemFibGUgbW9kYWwuXG4gICAqL1xuICBNaW5pbWl6ZWRNb2RhbEJhclRpdGxlID0gJ21pbmltaXplZC1tb2RhbC1iYXItdGl0bGUnLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3Igb25lIGJ1dHRvbiBpbiBhIG1vZGFsJ3MgY29tbWFuZCBzdHJpcC5cbiAgICovXG4gIE1vZGFsQ29tbWFuZCA9ICdtb2RhbC1jb21tYW5kJyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIGEgY29udHJvbCBpbmplY3RlZCBpbnRvIGFuIGluc3RydWN0aW9uJ3MgcHVycG9zZSB0ZXh0IOKAlCBhIGNoZWNrYm94LCBhIGRyb3Bkb3duLlxuICAgKiBPYnNpZGlhbidzIG93biBpbnN0cnVjdGlvbiBiYXIgbmV2ZXIgY29udGFpbnMgb25lLCBzbyBub3RoaW5nIHVwc3RyZWFtIHNlcGFyYXRlcyBpdCBmcm9tIHRoZSBsYWJlbFxuICAgKiBpdCBiZWxvbmdzIHRvLlxuICAgKi9cbiAgTW9kYWxDb21tYW5kQ29udHJvbCA9ICdtb2RhbC1jb21tYW5kLWNvbnRyb2wnLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIGhvdGtleSBoaW50IGluc2lkZSBhIG1vZGFsIGNvbW1hbmQgYnV0dG9uLlxuICAgKi9cbiAgTW9kYWxDb21tYW5kSG90a2V5ID0gJ21vZGFsLWNvbW1hbmQtaG90a2V5JyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSBzdHJpcCBvZiBjb21tYW5kcyBhIG1vZGFsIHJlbmRlcnMgYWxvbmcgaXRzIGJvdHRvbSBlZGdlLlxuICAgKi9cbiAgTW9kYWxDb21tYW5kcyA9ICdtb2RhbC1jb21tYW5kcycsXG5cbiAgLyoqXG4gICAqIE9ic2lkaWFuJ3MgY2xhc3MgZm9yIGEgbW9kYWwgaGVhZGVyIGJ1dHRvbiAoZS5nLiB0aGUgbW9kYWwgY2xvc2UgYnV0dG9uKSwgcmV1c2VkIHRvIG1hdGNoIHRoZVxuICAgKiBuYXRpdmUgbW9kYWwgY2xvc2UgYnV0dG9uJ3MgYm94IGFuZCBob3Zlci5cbiAgICovXG4gIE1vZGFsSGVhZGVyQnV0dG9uID0gJ21vZGFsLWhlYWRlci1idXR0b24nLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIG1vbnRoIGNvbXBvbmVudC5cbiAgICovXG4gIE1vbnRoQ29tcG9uZW50ID0gJ21vbnRoLWNvbXBvbmVudCcsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgbXVsdGlwbGUgZHJvcGRvd24gY29tcG9uZW50LlxuICAgKi9cbiAgTXVsdGlwbGVEcm9wZG93bkNvbXBvbmVudCA9ICdtdWx0aXBsZS1kcm9wZG93bi1jb21wb25lbnQnLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIG11bHRpcGxlIGVtYWlsIGNvbXBvbmVudC5cbiAgICovXG4gIE11bHRpcGxlRW1haWxDb21wb25lbnQgPSAnbXVsdGlwbGUtZW1haWwtY29tcG9uZW50JyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSBtdWx0aXBsZSBmaWxlIGNvbXBvbmVudC5cbiAgICovXG4gIE11bHRpcGxlRmlsZUNvbXBvbmVudCA9ICdtdWx0aXBsZS1maWxlLWNvbXBvbmVudCcsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgbXVsdGlwbGUgdGV4dCBjb21wb25lbnQuXG4gICAqL1xuICBNdWx0aXBsZVRleHRDb21wb25lbnQgPSAnbXVsdGlwbGUtdGV4dC1jb21wb25lbnQnLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIG51bWJlciBjb21wb25lbnQuXG4gICAqL1xuICBOdW1iZXJDb21wb25lbnQgPSAnbnVtYmVyLWNvbXBvbmVudCcsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgb2sgYnV0dG9uLlxuICAgKi9cbiAgT2tCdXR0b24gPSAnb2stYnV0dG9uJyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSBvdmVybGF5IHZhbGlkYXRvci5cbiAgICovXG4gIE92ZXJsYXlWYWxpZGF0b3IgPSAnb3ZlcmxheS12YWxpZGF0b3InLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIHBhc3N3b3JkIGNvbXBvbmVudC5cbiAgICovXG4gIFBhc3N3b3JkQ29tcG9uZW50ID0gJ3Bhc3N3b3JkLWNvbXBvbmVudCcsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgYmFubmVyIG5hbWluZyBhIHBsdWdpbiB0aGlzIG9uZSByZWZ1c2VzLCBvciB3YXJucyBhYm91dCwgcnVubmluZyBiZXNpZGUuXG4gICAqL1xuICBQbHVnaW5Db25mbGljdEJhbm5lciA9ICdwbHVnaW4tY29uZmxpY3QtYmFubmVyJyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSBiYW5uZXIgYSBibG9ja2VkIHBsdWdpbiByZW5kZXJzIGluIHBsYWNlIG9mIGl0cyBzZXR0aW5ncywgbmFtaW5nIHRoZSBtYW5kYXRvcnlcbiAgICogZGVwZW5kZW5jeSBpdCBpcyB3YWl0aW5nIGZvci5cbiAgICovXG4gIFBsdWdpbkRlcGVuZGVuY3lCYW5uZXIgPSAncGx1Z2luLWRlcGVuZGVuY3ktYmFubmVyJyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSBjbG9zZSBidXR0b24gb2YgYSBub3RpY2UgdGhhdCByZXF1aXJlcyBjbG9zZSBjb25maXJtYXRpb24uXG4gICAqL1xuICBQbHVnaW5Ob3RpY2VDbG9zZUJ1dHRvbiA9ICdwbHVnaW4tbm90aWNlLWNsb3NlLWJ1dHRvbicsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgY29udGFpbmVyIHdyYXBwaW5nIGEgbm90aWNlJ3MgY29udGVudCwgdXNlZCB0byBrZWVwIHRoZSBub3RpY2Ugb3BlbiB3aGVuIGFuXG4gICAqIGludGVyYWN0aXZlIGVsZW1lbnQgaW5zaWRlIGl0IGlzIGNsaWNrZWQuXG4gICAqL1xuICBQbHVnaW5Ob3RpY2VDb250ZW50ID0gJ3BsdWdpbi1ub3RpY2UtY29udGVudCcsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgcGx1Z2luIG5hbWUgc2hvd24gYXMgdGhlIHByZWZpeCBvZiBhIG5vdGljZS5cbiAgICovXG4gIFBsdWdpbk5vdGljZU5hbWUgPSAncGx1Z2luLW5vdGljZS1uYW1lJyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgYXBwbGllZCB0byB0aGUgbm90aWNlIGVsZW1lbnQgb2YgYSBub3RpY2UgdGhhdCByZXF1aXJlcyBhbiBleHBsaWNpdCBjbG9zZSwgdXNlZCB0byBtYWtlXG4gICAqIGl0cyB3aG9sZSBhcmVhIG5vbi1kaXNtaXNzaWJsZS5cbiAgICovXG4gIFBsdWdpbk5vdGljZVJlcXVpcmVzRXhwbGljaXRDbG9zZSA9ICdwbHVnaW4tbm90aWNlLXJlcXVpcmVzLWV4cGxpY2l0LWNsb3NlJyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSBwbHVnaW4gc2V0dGluZ3MgdGFiLlxuICAgKi9cbiAgUGx1Z2luU2V0dGluZ3NUYWIgPSAncGx1Z2luLXNldHRpbmdzLXRhYicsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgYmFubmVyIGEgcGx1Z2luLXN1Z2dlc3Rpb24gcmVuZGVycyBpbnRvIGEgc2V0dGluZ3MgdGFiLlxuICAgKi9cbiAgUGx1Z2luU3VnZ2VzdGlvbkJhbm5lciA9ICdwbHVnaW4tc3VnZ2VzdGlvbi1iYW5uZXInLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIHJvdyBvZiBidXR0b25zIGluIGEgcGx1Z2luLXN1Z2dlc3Rpb24gbm90aWNlLCB3aGljaCBzcGFjZXMgdGhlIGFjdGlvbiBidXR0b24gYXBhcnQgZnJvbVxuICAgKiB0aGUgZGVjbGluZSBidXR0b24uXG4gICAqL1xuICBQbHVnaW5TdWdnZXN0aW9uTm90aWNlQnV0dG9ucyA9ICdwbHVnaW4tc3VnZ2VzdGlvbi1ub3RpY2UtYnV0dG9ucycsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgcG9wb3Zlci5cbiAgICovXG4gIFBvcG92ZXIgPSAncG9wb3ZlcicsXG5cbiAgLyoqXG4gICAqIE9ic2lkaWFuJ3MgY2xhc3MgZm9yIG9uZSByb3cgb2YgaXRzIG1vZGFsIGluc3RydWN0aW9uIGJhciwgcmV1c2VkIHNvIGEgc2VsZi1jcmVhdGVkIGJhciBpbmhlcml0cyB0aGVcbiAgICogYXBwJ3Mgb3duIGluc3RydWN0aW9uIHN0eWxpbmcuXG4gICAqL1xuICBQcm9tcHRJbnN0cnVjdGlvbiA9ICdwcm9tcHQtaW5zdHJ1Y3Rpb24nLFxuXG4gIC8qKlxuICAgKiBPYnNpZGlhbidzIGNsYXNzIGZvciB0aGUga2V5LWhpbnQgaGFsZiBvZiBvbmUgaW5zdHJ1Y3Rpb24gcm93LiBJdCBpcyB0aGUgb25seSB0aGluZyBjYXJyeWluZyB0aGF0XG4gICAqIGhpbnQncyBib2xkIHdlaWdodCBhbmQgdGhlIGBtYXJnaW4taW5saW5lLWVuZGAgdGhhdCBzZXBhcmF0ZXMgaXQgZnJvbSB0aGUgcHVycG9zZSB0ZXh0LCBzbyBhXG4gICAqIHNlbGYtY3JlYXRlZCBiYXIgdGhhdCBvbWl0cyBpdCByZW5kZXJzIGBhbHQgMUtlZXAgdGhlIG9sZCB0aXRsZWAgd2VsZGVkIHRvZ2V0aGVyLiBSZXVzZWQgcmF0aGVyXG4gICAqIHRoYW4gcmUtaW1wbGVtZW50ZWQ6IHRoZSBhcHAncyBydWxlIGZvciBpdCBpcyB1bnNjb3BlZCwgc28gaXQgcmVhY2hlcyBhIHBsYWluIGBNb2RhbGAgdG9vLCBhbmRcbiAgICogc2hhcmluZyB0aGUgY2xhc3Mga2VlcHMgdGhlIHNlbGYtY3JlYXRlZCBiYXIgYW5kIGBzZXRJbnN0cnVjdGlvbnNgIGZyb20gZXZlciBkcmlmdGluZyBhcGFydC5cbiAgICovXG4gIFByb21wdEluc3RydWN0aW9uQ29tbWFuZCA9ICdwcm9tcHQtaW5zdHJ1Y3Rpb24tY29tbWFuZCcsXG5cbiAgLyoqXG4gICAqIE9ic2lkaWFuJ3MgY2xhc3MgZm9yIGl0cyBtb2RhbCBpbnN0cnVjdGlvbiBiYXIsIHJldXNlZCBzbyBhIHNlbGYtY3JlYXRlZCBiYXIgaW5oZXJpdHMgdGhlIGFwcCdzIG93blxuICAgKiBpbnN0cnVjdGlvbiBzdHlsaW5nLlxuICAgKi9cbiAgUHJvbXB0SW5zdHJ1Y3Rpb25zID0gJ3Byb21wdC1pbnN0cnVjdGlvbnMnLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIHByb21wdCBtb2RhbC5cbiAgICovXG4gIFByb21wdE1vZGFsID0gJ3Byb21wdC1tb2RhbCcsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgcmVzdG9yZSBidXR0b24gb2YgdGhlIG1pbmltaXplZCBtb2RhbCBiYXIuXG4gICAqL1xuICBSZXN0b3JlQnV0dG9uID0gJ3Jlc3RvcmUtYnV0dG9uJyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSBzZWxlY3QgaXRlbSBtb2RhbC5cbiAgICovXG4gIFNlbGVjdEl0ZW1Nb2RhbCA9ICdzZWxlY3QtaXRlbS1tb2RhbCcsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgc2VsZWN0IG9wdGlvbiBtb2RhbC5cbiAgICovXG4gIFNlbGVjdE9wdGlvbk1vZGFsID0gJ3NlbGVjdC1vcHRpb24tbW9kYWwnLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIHNldHRpbmcgY29tcG9uZW50IHdyYXBwZXIuXG4gICAqL1xuICBTZXR0aW5nQ29tcG9uZW50V3JhcHBlciA9ICdzZXR0aW5nLWNvbXBvbmVudC13cmFwcGVyJyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSBzZXR0aW5ncyB0YWJzLlxuICAgKi9cbiAgU2V0dGluZ3NUYWJzID0gJ3NldHRpbmdzLXRhYnMnLFxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSB0YWcgbGlzdCBjb21wb25lbnQuXG4gICAqL1xuICBUYWdMaXN0Q29tcG9uZW50ID0gJ3RhZy1saXN0LWNvbXBvbmVudCcsXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIHRlbGVwaG9uZSBjb21wb25lbnQuXG4gICAqL1xuICBUZWxlcGhvbmVDb21wb25lbnQgPSAndGVsZXBob25lLWNvbXBvbmVudCcsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgdGV4dCBib3guXG4gICAqL1xuICBUZXh0Qm94ID0gJ3RleHQtYm94JyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSB0aW1lIGNvbXBvbmVudC5cbiAgICovXG4gIFRpbWVDb21wb25lbnQgPSAndGltZS1jb21wb25lbnQnLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIHRvb2x0aXAuXG4gICAqL1xuICBUb29sdGlwID0gJ3Rvb2x0aXAnLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIHRvb2x0aXAgYXJyb3cuXG4gICAqL1xuICBUb29sdGlwQXJyb3cgPSAndG9vbHRpcC1hcnJvdycsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgdG9vbHRpcCB2YWxpZGF0b3IuXG4gICAqL1xuICBUb29sdGlwVmFsaWRhdG9yID0gJ3Rvb2x0aXAtdmFsaWRhdG9yJyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSB0cmktc3RhdGUgY2hlY2tib3ggY29tcG9uZW50LlxuICAgKi9cbiAgVHJpU3RhdGVDaGVja2JveENvbXBvbmVudCA9ICd0cmktc3RhdGUtY2hlY2tib3gtY29tcG9uZW50JyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSB0eXBlZCBkcm9wZG93biBjb21wb25lbnQuXG4gICAqL1xuICBUeXBlZERyb3Bkb3duQ29tcG9uZW50ID0gJ3R5cGVkLWRyb3Bkb3duLWNvbXBvbmVudCcsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgdHlwZWQgbXVsdGlwbGUgZHJvcGRvd24gY29tcG9uZW50LlxuICAgKi9cbiAgVHlwZWRNdWx0aXBsZURyb3Bkb3duQ29tcG9uZW50ID0gJ3R5cGVkLW11bHRpcGxlLWRyb3Bkb3duLWNvbXBvbmVudCcsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciBhbiBpbnB1dCB0aGUgdXNlciBoYXMgbm90IGludGVyYWN0ZWQgd2l0aCB5ZXQsIHVzZWQgdG8gZGVmZXIgdGhlIGludmFsaWQgc3R5bGluZyB1bnRpbFxuICAgKiB0aGUgaW5wdXQgaXMgdG91Y2hlZC5cbiAgICovXG4gIFVudG91Y2hlZCA9ICd1bnRvdWNoZWQnLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIHVybCBjb21wb25lbnQuXG4gICAqL1xuICBVcmxDb21wb25lbnQgPSAndXJsLWNvbXBvbmVudCcsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgd2VlayBjb21wb25lbnQuXG4gICAqL1xuICBXZWVrQ29tcG9uZW50ID0gJ3dlZWstY29tcG9uZW50J1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBU08sSUFBSyxXQUFMLGtCQUFLQSxjQUFMO0FBSUwsRUFBQUEsVUFBQSxnQkFBYTtBQUtiLEVBQUFBLFVBQUEsc0JBQW1CO0FBS25CLEVBQUFBLFVBQUEsMEJBQXVCO0FBS3ZCLEVBQUFBLFVBQUEsa0JBQWU7QUFLZixFQUFBQSxVQUFBLHVCQUFvQjtBQUtwQixFQUFBQSxVQUFBLG1CQUFnQjtBQUtoQixFQUFBQSxVQUFBLFVBQU87QUFLUCxFQUFBQSxVQUFBLDJCQUF3QjtBQUt4QixFQUFBQSxVQUFBLCtCQUE0QjtBQUs1QixFQUFBQSxVQUFBLDJCQUF3QjtBQUt4QixFQUFBQSxVQUFBLDRCQUF5QjtBQUt6QixFQUFBQSxVQUFBLDZCQUEwQjtBQUsxQixFQUFBQSxVQUFBLDhCQUEyQjtBQUszQixFQUFBQSxVQUFBLGtCQUFlO0FBS2YsRUFBQUEsVUFBQSwyQkFBd0I7QUFLeEIsRUFBQUEsVUFBQSwwQkFBdUI7QUFLdkIsRUFBQUEsVUFBQSxtQkFBZ0I7QUFLaEIsRUFBQUEsVUFBQSx1QkFBb0I7QUFLcEIsRUFBQUEsVUFBQSxvQkFBaUI7QUFLakIsRUFBQUEsVUFBQSxtQkFBZ0I7QUFLaEIsRUFBQUEsVUFBQSxzQkFBbUI7QUFLbkIsRUFBQUEsVUFBQSx5QkFBc0I7QUFJdEIsRUFBQUEsVUFBQSxxQkFBa0I7QUFLbEIsRUFBQUEsVUFBQSxpQkFBYztBQU1kLEVBQUFBLFVBQUEsY0FBVztBQUtYLEVBQUFBLFVBQUEsaUJBQWM7QUFLZCxFQUFBQSxVQUFBLG1CQUFnQjtBQUtoQixFQUFBQSxVQUFBLGlCQUFjO0FBS2QsRUFBQUEsVUFBQSxtQkFBZ0I7QUFJaEIsRUFBQUEsVUFBQSxzQkFBbUI7QUFLbkIsRUFBQUEsVUFBQSxzQkFBbUI7QUFLbkIsRUFBQUEsVUFBQSxvQkFBaUI7QUFLakIsRUFBQUEsVUFBQSx1QkFBb0I7QUFNcEIsRUFBQUEsVUFBQSxnQ0FBNkI7QUFLN0IsRUFBQUEsVUFBQSw0QkFBeUI7QUFLekIsRUFBQUEsVUFBQSxrQkFBZTtBQU9mLEVBQUFBLFVBQUEseUJBQXNCO0FBS3RCLEVBQUFBLFVBQUEsd0JBQXFCO0FBS3JCLEVBQUFBLFVBQUEsbUJBQWdCO0FBTWhCLEVBQUFBLFVBQUEsdUJBQW9CO0FBS3BCLEVBQUFBLFVBQUEsb0JBQWlCO0FBS2pCLEVBQUFBLFVBQUEsK0JBQTRCO0FBSzVCLEVBQUFBLFVBQUEsNEJBQXlCO0FBS3pCLEVBQUFBLFVBQUEsMkJBQXdCO0FBS3hCLEVBQUFBLFVBQUEsMkJBQXdCO0FBS3hCLEVBQUFBLFVBQUEscUJBQWtCO0FBS2xCLEVBQUFBLFVBQUEsY0FBVztBQUtYLEVBQUFBLFVBQUEsc0JBQW1CO0FBS25CLEVBQUFBLFVBQUEsdUJBQW9CO0FBS3BCLEVBQUFBLFVBQUEsMEJBQXVCO0FBTXZCLEVBQUFBLFVBQUEsNEJBQXlCO0FBS3pCLEVBQUFBLFVBQUEsNkJBQTBCO0FBTTFCLEVBQUFBLFVBQUEseUJBQXNCO0FBS3RCLEVBQUFBLFVBQUEsc0JBQW1CO0FBTW5CLEVBQUFBLFVBQUEsdUNBQW9DO0FBS3BDLEVBQUFBLFVBQUEsdUJBQW9CO0FBS3BCLEVBQUFBLFVBQUEsNEJBQXlCO0FBTXpCLEVBQUFBLFVBQUEsbUNBQWdDO0FBS2hDLEVBQUFBLFVBQUEsYUFBVTtBQU1WLEVBQUFBLFVBQUEsdUJBQW9CO0FBU3BCLEVBQUFBLFVBQUEsOEJBQTJCO0FBTTNCLEVBQUFBLFVBQUEsd0JBQXFCO0FBS3JCLEVBQUFBLFVBQUEsaUJBQWM7QUFLZCxFQUFBQSxVQUFBLG1CQUFnQjtBQUtoQixFQUFBQSxVQUFBLHFCQUFrQjtBQUtsQixFQUFBQSxVQUFBLHVCQUFvQjtBQUtwQixFQUFBQSxVQUFBLDZCQUEwQjtBQUsxQixFQUFBQSxVQUFBLGtCQUFlO0FBSWYsRUFBQUEsVUFBQSxzQkFBbUI7QUFJbkIsRUFBQUEsVUFBQSx3QkFBcUI7QUFLckIsRUFBQUEsVUFBQSxhQUFVO0FBS1YsRUFBQUEsVUFBQSxtQkFBZ0I7QUFLaEIsRUFBQUEsVUFBQSxhQUFVO0FBS1YsRUFBQUEsVUFBQSxrQkFBZTtBQUtmLEVBQUFBLFVBQUEsc0JBQW1CO0FBS25CLEVBQUFBLFVBQUEsK0JBQTRCO0FBSzVCLEVBQUFBLFVBQUEsNEJBQXlCO0FBS3pCLEVBQUFBLFVBQUEsb0NBQWlDO0FBTWpDLEVBQUFBLFVBQUEsZUFBWTtBQUtaLEVBQUFBLFVBQUEsa0JBQWU7QUFLZixFQUFBQSxVQUFBLG1CQUFnQjtBQWhhTixTQUFBQTtBQUFBLEdBQUE7IiwibmFtZXMiOlsiQ3NzQ2xhc3MiXX0=
@@ -12,6 +12,14 @@ export declare enum CssClass {
12
12
  * A CSS class for the alert modal.
13
13
  */
14
14
  AlertModal = "alert-modal",
15
+ /**
16
+ * A CSS class for the preview of the bug-report diagnostics review modal.
17
+ */
18
+ BugReportPreview = "bug-report-preview",
19
+ /**
20
+ * A CSS class for the bug-report diagnostics review modal.
21
+ */
22
+ BugReportReviewModal = "bug-report-review-modal",
15
23
  /**
16
24
  * A CSS class for the cancel button.
17
25
  */
@@ -56,6 +64,14 @@ export declare enum CssClass {
56
64
  * A CSS class for the confirm modal.
57
65
  */
58
66
  ConfirmModal = "confirm-modal",
67
+ /**
68
+ * A CSS class for the copy-text-manually modal.
69
+ */
70
+ CopyTextManuallyModal = "copy-text-manually-modal",
71
+ /**
72
+ * A CSS class for the text area of the copy-text-manually modal.
73
+ */
74
+ CopyTextManuallyText = "copy-text-manually-text",
59
75
  /**
60
76
  * A CSS class for the date component.
61
77
  */
@@ -2,6 +2,33 @@
2
2
  THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
3
  if you want to view the source, please visit the github repository of this plugin
4
4
  */
5
+ (function () {
6
+ function ensureBrowserProcess() {
7
+ const browserProcess = {
8
+ browser: true,
9
+ cwd() {
10
+ return "/";
11
+ },
12
+ env: {},
13
+ platform: "android"
14
+ };
15
+ const existingProcess = globalThis.process;
16
+ if (!existingProcess) {
17
+ globalThis.process = browserProcess;
18
+ return;
19
+ }
20
+ if (existingProcess.versions?.node) {
21
+ return;
22
+ }
23
+ const existingProcessRecord = existingProcess;
24
+ for (const [key, value] of Object.entries(browserProcess)) {
25
+ existingProcessRecord[key] ??= value;
26
+ }
27
+ existingProcessRecord["browser"] = true;
28
+ }
29
+
30
+ ensureBrowserProcess();
31
+ })();
5
32
  (function patchObsidianRequire() {
6
33
  const originalRequire = require;
7
34
  if (!originalRequire || originalRequire.__isPatched) {
@@ -87,39 +114,163 @@ var __copyProps = (to, from, except, desc) => {
87
114
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
88
115
  var data_handler_exports = {};
89
116
  __export(data_handler_exports, {
90
- PluginDataHandler: () => PluginDataHandler
117
+ DEFAULT_PLUGIN_DATA_MAX_SIZE_IN_BYTES: () => DEFAULT_PLUGIN_DATA_MAX_SIZE_IN_BYTES,
118
+ PluginDataHandler: () => PluginDataHandler,
119
+ PluginDataOperation: () => PluginDataOperation,
120
+ PluginDataSizeLimitExceededError: () => PluginDataSizeLimitExceededError
91
121
  });
92
122
  module.exports = __toCommonJS(data_handler_exports);
123
+ var import_obsidian = require('obsidian');
124
+ const OBSIDIAN_JSON_INDENT = 2;
125
+ const DEFAULT_PLUGIN_DATA_MAX_SIZE_IN_BYTES = 16777216;
126
+ var PluginDataOperation = /* @__PURE__ */ ((PluginDataOperation2) => {
127
+ PluginDataOperation2["Load"] = "load";
128
+ PluginDataOperation2["Save"] = "save";
129
+ return PluginDataOperation2;
130
+ })(PluginDataOperation || {});
93
131
  class PluginDataHandler {
94
132
  /**
95
133
  * Creates a new plugin data handler.
96
134
  *
97
135
  * @param plugin - The plugin instance.
136
+ * @param options - The options.
98
137
  */
99
- constructor(plugin) {
138
+ constructor(plugin, options = {}) {
100
139
  this.plugin = plugin;
140
+ const maxSizeInBytes = options.maxSizeInBytes ?? DEFAULT_PLUGIN_DATA_MAX_SIZE_IN_BYTES;
141
+ if (Number.isNaN(maxSizeInBytes) || maxSizeInBytes < 0) {
142
+ throw new RangeError(`maxSizeInBytes must be a non-negative number, got ${String(maxSizeInBytes)}.`);
143
+ }
144
+ this.maxSizeInBytes = maxSizeInBytes;
101
145
  }
102
146
  plugin;
147
+ /**
148
+ * The maximum size of `data.json`, in bytes.
149
+ */
150
+ maxSizeInBytes;
103
151
  /**
104
152
  * Loads data from the plugin's data file.
105
153
  *
154
+ * The file's size is read through the adapter BEFORE Obsidian reads and parses it, so an oversized file is never
155
+ * loaded into memory.
156
+ *
106
157
  * @returns The loaded data.
158
+ * @throws {@link PluginDataSizeLimitExceededError} If the existing file is larger than the limit.
107
159
  */
108
160
  async loadData() {
161
+ const sizeInBytes = await this.getExistingFileSize();
162
+ if (sizeInBytes !== null && sizeInBytes > this.maxSizeInBytes) {
163
+ throw this.createError("load" /* Load */, sizeInBytes);
164
+ }
109
165
  return this.plugin.loadData();
110
166
  }
111
167
  /**
112
168
  * Saves data to the plugin's data file.
113
169
  *
170
+ * The data is serialized exactly as Obsidian writes it, and its UTF-8 byte length is checked before anything is
171
+ * written.
172
+ *
114
173
  * @param data - The data to save.
115
174
  * @returns A promise that resolves when the data is saved.
175
+ * @throws {@link PluginDataSizeLimitExceededError} If the serialized data is larger than the limit.
116
176
  */
117
177
  async saveData(data) {
118
- return this.plugin.saveData(data);
178
+ if (this.maxSizeInBytes !== Infinity) {
179
+ const serialized = JSON.stringify(data, void 0, OBSIDIAN_JSON_INDENT);
180
+ if (serialized !== void 0) {
181
+ const sizeInBytes = new TextEncoder().encode(serialized).byteLength;
182
+ if (sizeInBytes > this.maxSizeInBytes) {
183
+ throw this.createError("save" /* Save */, sizeInBytes);
184
+ }
185
+ }
186
+ }
187
+ await this.plugin.saveData(data);
188
+ }
189
+ /**
190
+ * Gets the path of the plugin's `data.json`, as Obsidian's `Plugin.loadData` reads it.
191
+ *
192
+ * @returns The path, or `null` when the manifest has no folder.
193
+ */
194
+ getDataFilePath() {
195
+ const directory = this.plugin.manifest.dir;
196
+ return directory ? (0, import_obsidian.normalizePath)(`${directory}/data.json`) : null;
197
+ }
198
+ createError(operation, sizeInBytes) {
199
+ return new PluginDataSizeLimitExceededError({
200
+ maxSizeInBytes: this.maxSizeInBytes,
201
+ operation,
202
+ path: this.getDataFilePath() ?? "data.json",
203
+ pluginId: this.plugin.manifest.id,
204
+ pluginName: this.plugin.manifest.name,
205
+ sizeInBytes
206
+ });
207
+ }
208
+ async getExistingFileSize() {
209
+ if (this.maxSizeInBytes === Infinity) {
210
+ return null;
211
+ }
212
+ const path = this.getDataFilePath();
213
+ if (path === null) {
214
+ return null;
215
+ }
216
+ try {
217
+ const stat = await this.plugin.app.vault.adapter.stat(path);
218
+ return stat?.size ?? null;
219
+ } catch {
220
+ return null;
221
+ }
222
+ }
223
+ }
224
+ class PluginDataSizeLimitExceededError extends Error {
225
+ /**
226
+ * The size limit, in bytes.
227
+ */
228
+ maxSizeInBytes;
229
+ /**
230
+ * The refused operation.
231
+ */
232
+ operation;
233
+ /**
234
+ * The path of the plugin's `data.json`.
235
+ */
236
+ path;
237
+ /**
238
+ * The `manifest.id` of the plugin.
239
+ */
240
+ pluginId;
241
+ /**
242
+ * The `manifest.name` of the plugin.
243
+ */
244
+ pluginName;
245
+ /**
246
+ * The size of the existing file (load) or of the serialized data (save), in bytes.
247
+ */
248
+ sizeInBytes;
249
+ /**
250
+ * Creates a {@link PluginDataSizeLimitExceededError}.
251
+ *
252
+ * @param params - The parameters for the error.
253
+ */
254
+ constructor(params) {
255
+ const what = params.operation === "load" /* Load */ ? `Refusing to load "${params.path}": the file is ${String(params.sizeInBytes)} bytes` : `Refusing to save "${params.path}": the data would be ${String(params.sizeInBytes)} bytes`;
256
+ const consequence = params.operation === "load" /* Load */ ? "The file was left untouched." : "Nothing was written, so the last saved file remains.";
257
+ super(
258
+ `Plugin "${params.pluginName}" (${params.pluginId}): ${what}, over the ${String(params.maxSizeInBytes)}-byte limit. ${consequence} Keep data.json for small settings, and move large or growing state to LocalDataStore or SharedDataStore.`
259
+ );
260
+ this.name = "PluginDataSizeLimitExceededError";
261
+ this.maxSizeInBytes = params.maxSizeInBytes;
262
+ this.operation = params.operation;
263
+ this.path = params.path;
264
+ this.pluginId = params.pluginId;
265
+ this.pluginName = params.pluginName;
266
+ this.sizeInBytes = params.sizeInBytes;
119
267
  }
120
268
  }
121
269
  // Annotate the CommonJS export names for ESM import in node:
122
270
  0 && (module.exports = {
123
- PluginDataHandler
271
+ DEFAULT_PLUGIN_DATA_MAX_SIZE_IN_BYTES,
272
+ PluginDataHandler,
273
+ PluginDataOperation,
274
+ PluginDataSizeLimitExceededError
124
275
  });
125
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kYXRhLWhhbmRsZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEEgbW9kdWxlIGZvciBoYW5kbGluZyBkYXRhIGxvYWRpbmcgYW5kIHNhdmluZyB0byB0aGUgcGx1Z2luJ3MgZGF0YSBmaWxlLlxuICovXG5cbmltcG9ydCB0eXBlIHsgUGx1Z2luIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG4vKipcbiAqIEEgaGFuZGxlciBmb3IgbG9hZGluZyBhbmQgc2F2aW5nIGRhdGEgdG8gdGhlIHBsdWdpbidzIGRhdGEgZmlsZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhSGFuZGxlciB7XG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIHRvIGxvYWQgZGF0YSBmcm9tIHRoZSBwbHVnaW4ncyBkYXRhIGZpbGUuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBsb2FkZWQgZGF0YS5cbiAgICovXG4gIHJlYWRvbmx5IGxvYWREYXRhOiAoKSA9PiBQcm9taXNlPHVua25vd24+O1xuXG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIHRvIHNhdmUgZGF0YSB0byB0aGUgcGx1Z2luJ3MgZGF0YSBmaWxlLlxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSAtIFRoZSBkYXRhIHRvIHNhdmUuXG4gICAqL1xuICByZWFkb25seSBzYXZlRGF0YTogKGRhdGE6IHVua25vd24pID0+IFByb21pc2U8dm9pZD47XG59XG5cbi8qKlxuICogQSBoYW5kbGVyIGZvciBsb2FkaW5nIGFuZCBzYXZpbmcgZGF0YSB0byB0aGUgcGx1Z2luJ3MgZGF0YSBmaWxlLlxuICovXG5leHBvcnQgY2xhc3MgUGx1Z2luRGF0YUhhbmRsZXIgaW1wbGVtZW50cyBEYXRhSGFuZGxlciB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IHBsdWdpbiBkYXRhIGhhbmRsZXIuXG4gICAqXG4gICAqIEBwYXJhbSBwbHVnaW4gLSBUaGUgcGx1Z2luIGluc3RhbmNlLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHByb3RlY3RlZCByZWFkb25seSBwbHVnaW46IFBsdWdpbikge31cblxuICAvKipcbiAgICogTG9hZHMgZGF0YSBmcm9tIHRoZSBwbHVnaW4ncyBkYXRhIGZpbGUuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBsb2FkZWQgZGF0YS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBsb2FkRGF0YSgpOiBQcm9taXNlPHVua25vd24+IHtcbiAgICByZXR1cm4gdGhpcy5wbHVnaW4ubG9hZERhdGEoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlcyBkYXRhIHRvIHRoZSBwbHVnaW4ncyBkYXRhIGZpbGUuXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIC0gVGhlIGRhdGEgdG8gc2F2ZS5cbiAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgZGF0YSBpcyBzYXZlZC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzYXZlRGF0YShkYXRhOiB1bmtub3duKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMucGx1Z2luLnNhdmVEYXRhKGRhdGEpO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUE4Qk8sTUFBTSxrQkFBeUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNN0MsWUFBK0IsUUFBZ0I7QUFBaEI7QUFBQSxFQUFpQjtBQUFBLEVBQWpCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT3RDLE1BQWEsV0FBNkI7QUFDeEMsV0FBTyxLQUFLLE9BQU8sU0FBUztBQUFBLEVBQzlCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFRQSxNQUFhLFNBQVMsTUFBOEI7QUFDbEQsV0FBTyxLQUFLLE9BQU8sU0FBUyxJQUFJO0FBQUEsRUFDbEM7QUFDRjsiLCJuYW1lcyI6W119
276
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kYXRhLWhhbmRsZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEEgbW9kdWxlIGZvciBoYW5kbGluZyBkYXRhIGxvYWRpbmcgYW5kIHNhdmluZyB0byB0aGUgcGx1Z2luJ3MgZGF0YSBmaWxlLlxuICpcbiAqIHtAbGluayBQbHVnaW5EYXRhSGFuZGxlcn0gYm91bmRzIHRoZSBwbHVnaW4ncyBgZGF0YS5qc29uYCBpbiBieXRlcywgaW4gYm90aCBkaXJlY3Rpb25zLCBiZWNhdXNlIE9ic2lkaWFuIGRvZXNcbiAqIG5vdC4gUmVhZCBmcm9tIE9ic2lkaWFuIGAxLjE1LjFgOiBgUGx1Z2luLmxvYWREYXRhYCByZWFkcyB0aGUgd2hvbGUgZmlsZSBhbmQgYEpTT04ucGFyc2VgcyBpdCB3aXRoIG5vIGxpbWl0LCBzbyBhblxuICogb3ZlcnNpemVkIGZpbGUgaXMgZnVsbHkgcmVhZCBhbmQgcGFyc2VkIGludG8gbWVtb3J5IG9uIGV2ZXJ5IHN0YXJ0dXAsIGFuZCBgUGx1Z2luLnNhdmVEYXRhYCB3cml0ZXNcbiAqIGBKU09OLnN0cmluZ2lmeShkYXRhLCB1bmRlZmluZWQsIDIpYCB3aXRoIG5vIGxpbWl0IGVpdGhlci4gT2JzaWRpYW4gYWxzbyBzd2FsbG93cyBhIGZhaWxlZCByZWFkIG9yIHdyaXRlOiBpdHNcbiAqIGByZWFkSnNvbmAgbG9ncyBhIHBhcnNlIGZhaWx1cmUgYW5kIHJlc29sdmVzIGB1bmRlZmluZWRgLCBhbmQgaXRzIGB3cml0ZUpzb25gIGNhdGNoZXMgZXZlcnkgZXJyb3IuIFNvIHRoZSBndWFyZFxuICogaGFzIHRvIGRlY2lkZSBCRUZPUkUgaGFuZGluZyB0aGUgY2FsbCB0byBPYnNpZGlhbiwgd2hpY2ggaXMgdGhlIG9ubHkgcG9pbnQgd2hlcmUgcmVmdXNpbmcgc3RpbGwgY2hhbmdlcyB0aGVcbiAqIG91dGNvbWUuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBQbHVnaW4gfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IG5vcm1hbGl6ZVBhdGggfSBmcm9tICdvYnNpZGlhbic7XG5cbi8qKlxuICogVGhlIGluZGVudGF0aW9uIE9ic2lkaWFuJ3MgYFZhdWx0LndyaXRlSnNvbmAgcGFzc2VzIHRvIGBKU09OLnN0cmluZ2lmeWAgZm9yIGBkYXRhLmpzb25gIChyZWFkIGZyb20gYDEuMTUuMWApLlxuICovXG5jb25zdCBPQlNJRElBTl9KU09OX0lOREVOVCA9IDI7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgbWF4aW11bSBzaXplIG9mIGEgcGx1Z2luJ3MgYGRhdGEuanNvbmAsIGluIGJ5dGVzOiAxNiBNaUIuXG4gKlxuICogVGhpcyBpcyBhIHByb3RlY3RpdmUgYnVkZ2V0IGFnYWluc3Qgc3RhcnR1cCBleGhhdXN0aW9uLCBub3QgYSBzeW5jIHF1b3RhLiBPYnNpZGlhbiBTeW5jJ3Mgb3duIHBlci1maWxlIGxpbWl0XG4gKiBkZXBlbmRzIG9uIHRoZSBwbGFuIGFuZCBpcyBhIHNlcGFyYXRlIGNvbnN0cmFpbnQgYSBwbHVnaW4gbWF5IHdhbnQgdG8gc3RheSB3ZWxsIHVuZGVyLlxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9QTFVHSU5fREFUQV9NQVhfU0laRV9JTl9CWVRFUyA9IDE2Xzc3N18yMTY7XG5cbi8qKlxuICogVGhlIG9wZXJhdGlvbiBhIHtAbGluayBQbHVnaW5EYXRhU2l6ZUxpbWl0RXhjZWVkZWRFcnJvcn0gcmVmdXNlZC5cbiAqL1xuZXhwb3J0IGVudW0gUGx1Z2luRGF0YU9wZXJhdGlvbiB7XG4gIC8qKlxuICAgKiBMb2FkaW5nIHRoZSBleGlzdGluZyBgZGF0YS5qc29uYC5cbiAgICovXG4gIExvYWQgPSAnbG9hZCcsXG5cbiAgLyoqXG4gICAqIFNhdmluZyBhIG5ldyBgZGF0YS5qc29uYC5cbiAgICovXG4gIFNhdmUgPSAnc2F2ZSdcbn1cblxuLyoqXG4gKiBBIGhhbmRsZXIgZm9yIGxvYWRpbmcgYW5kIHNhdmluZyBkYXRhIHRvIHRoZSBwbHVnaW4ncyBkYXRhIGZpbGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YUhhbmRsZXIge1xuICAvKipcbiAgICogQSBmdW5jdGlvbiB0byBsb2FkIGRhdGEgZnJvbSB0aGUgcGx1Z2luJ3MgZGF0YSBmaWxlLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgbG9hZGVkIGRhdGEuXG4gICAqL1xuICByZWFkb25seSBsb2FkRGF0YTogKCkgPT4gUHJvbWlzZTx1bmtub3duPjtcblxuICAvKipcbiAgICogQSBmdW5jdGlvbiB0byBzYXZlIGRhdGEgdG8gdGhlIHBsdWdpbidzIGRhdGEgZmlsZS5cbiAgICpcbiAgICogQHBhcmFtIGRhdGEgLSBUaGUgZGF0YSB0byBzYXZlLlxuICAgKi9cbiAgcmVhZG9ubHkgc2F2ZURhdGE6IChkYXRhOiB1bmtub3duKSA9PiBQcm9taXNlPHZvaWQ+O1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBQbHVnaW5EYXRhSGFuZGxlcn0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGx1Z2luRGF0YUhhbmRsZXJDb25zdHJ1Y3Rvck9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIG1heGltdW0gc2l6ZSBvZiBgZGF0YS5qc29uYCwgaW4gVVRGLTggYnl0ZXMgYXMgd3JpdHRlbiB0byBkaXNrLiBEZWZhdWx0cyB0b1xuICAgKiB7QGxpbmsgREVGQVVMVF9QTFVHSU5fREFUQV9NQVhfU0laRV9JTl9CWVRFU30uIFBhc3MgYEluZmluaXR5YCB0byBkaXNhYmxlIHRoZSBndWFyZC5cbiAgICovXG4gIHJlYWRvbmx5IG1heFNpemVJbkJ5dGVzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBQbHVnaW5EYXRhU2l6ZUxpbWl0RXhjZWVkZWRFcnJvcn0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGx1Z2luRGF0YVNpemVMaW1pdEV4Y2VlZGVkRXJyb3JDb25zdHJ1Y3RvclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgc2l6ZSBsaW1pdCwgaW4gYnl0ZXMuXG4gICAqL1xuICByZWFkb25seSBtYXhTaXplSW5CeXRlczogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVmdXNlZCBvcGVyYXRpb24uXG4gICAqL1xuICByZWFkb25seSBvcGVyYXRpb246IFBsdWdpbkRhdGFPcGVyYXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIG9mIHRoZSBwbHVnaW4ncyBgZGF0YS5qc29uYC5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGBtYW5pZmVzdC5pZGAgb2YgdGhlIHBsdWdpbi5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbklkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBgbWFuaWZlc3QubmFtZWAgb2YgdGhlIHBsdWdpbi5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbk5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHNpemUgb2YgdGhlIGV4aXN0aW5nIGZpbGUgKGxvYWQpIG9yIG9mIHRoZSBzZXJpYWxpemVkIGRhdGEgKHNhdmUpLCBpbiBieXRlcy5cbiAgICovXG4gIHJlYWRvbmx5IHNpemVJbkJ5dGVzOiBudW1iZXI7XG59XG5cbi8qKlxuICogQSBoYW5kbGVyIGZvciBsb2FkaW5nIGFuZCBzYXZpbmcgZGF0YSB0byB0aGUgcGx1Z2luJ3MgZGF0YSBmaWxlLCByZWZ1c2luZyBhIGBkYXRhLmpzb25gIGxhcmdlciB0aGFuIGEgYnl0ZSBsaW1pdC5cbiAqL1xuZXhwb3J0IGNsYXNzIFBsdWdpbkRhdGFIYW5kbGVyIGltcGxlbWVudHMgRGF0YUhhbmRsZXIge1xuICAvKipcbiAgICogVGhlIG1heGltdW0gc2l6ZSBvZiBgZGF0YS5qc29uYCwgaW4gYnl0ZXMuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgbWF4U2l6ZUluQnl0ZXM6IG51bWJlcjtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBwbHVnaW4gZGF0YSBoYW5kbGVyLlxuICAgKlxuICAgKiBAcGFyYW0gcGx1Z2luIC0gVGhlIHBsdWdpbiBpbnN0YW5jZS5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucy5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgcmVhZG9ubHkgcGx1Z2luOiBQbHVnaW4sIG9wdGlvbnM6IFBsdWdpbkRhdGFIYW5kbGVyQ29uc3RydWN0b3JPcHRpb25zID0ge30pIHtcbiAgICBjb25zdCBtYXhTaXplSW5CeXRlcyA9IG9wdGlvbnMubWF4U2l6ZUluQnl0ZXMgPz8gREVGQVVMVF9QTFVHSU5fREFUQV9NQVhfU0laRV9JTl9CWVRFUztcbiAgICBpZiAoTnVtYmVyLmlzTmFOKG1heFNpemVJbkJ5dGVzKSB8fCBtYXhTaXplSW5CeXRlcyA8IDApIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBtYXhTaXplSW5CeXRlcyBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlciwgZ290ICR7U3RyaW5nKG1heFNpemVJbkJ5dGVzKX0uYCk7XG4gICAgfVxuICAgIHRoaXMubWF4U2l6ZUluQnl0ZXMgPSBtYXhTaXplSW5CeXRlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyBkYXRhIGZyb20gdGhlIHBsdWdpbidzIGRhdGEgZmlsZS5cbiAgICpcbiAgICogVGhlIGZpbGUncyBzaXplIGlzIHJlYWQgdGhyb3VnaCB0aGUgYWRhcHRlciBCRUZPUkUgT2JzaWRpYW4gcmVhZHMgYW5kIHBhcnNlcyBpdCwgc28gYW4gb3ZlcnNpemVkIGZpbGUgaXMgbmV2ZXJcbiAgICogbG9hZGVkIGludG8gbWVtb3J5LlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgbG9hZGVkIGRhdGEuXG4gICAqIEB0aHJvd3Mge0BsaW5rIFBsdWdpbkRhdGFTaXplTGltaXRFeGNlZWRlZEVycm9yfSBJZiB0aGUgZXhpc3RpbmcgZmlsZSBpcyBsYXJnZXIgdGhhbiB0aGUgbGltaXQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgbG9hZERhdGEoKTogUHJvbWlzZTx1bmtub3duPiB7XG4gICAgY29uc3Qgc2l6ZUluQnl0ZXMgPSBhd2FpdCB0aGlzLmdldEV4aXN0aW5nRmlsZVNpemUoKTtcbiAgICBpZiAoc2l6ZUluQnl0ZXMgIT09IG51bGwgJiYgc2l6ZUluQnl0ZXMgPiB0aGlzLm1heFNpemVJbkJ5dGVzKSB7XG4gICAgICB0aHJvdyB0aGlzLmNyZWF0ZUVycm9yKFBsdWdpbkRhdGFPcGVyYXRpb24uTG9hZCwgc2l6ZUluQnl0ZXMpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5wbHVnaW4ubG9hZERhdGEoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlcyBkYXRhIHRvIHRoZSBwbHVnaW4ncyBkYXRhIGZpbGUuXG4gICAqXG4gICAqIFRoZSBkYXRhIGlzIHNlcmlhbGl6ZWQgZXhhY3RseSBhcyBPYnNpZGlhbiB3cml0ZXMgaXQsIGFuZCBpdHMgVVRGLTggYnl0ZSBsZW5ndGggaXMgY2hlY2tlZCBiZWZvcmUgYW55dGhpbmcgaXNcbiAgICogd3JpdHRlbi5cbiAgICpcbiAgICogQHBhcmFtIGRhdGEgLSBUaGUgZGF0YSB0byBzYXZlLlxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBkYXRhIGlzIHNhdmVkLlxuICAgKiBAdGhyb3dzIHtAbGluayBQbHVnaW5EYXRhU2l6ZUxpbWl0RXhjZWVkZWRFcnJvcn0gSWYgdGhlIHNlcmlhbGl6ZWQgZGF0YSBpcyBsYXJnZXIgdGhhbiB0aGUgbGltaXQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2F2ZURhdGEoZGF0YTogdW5rbm93bik6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLm1heFNpemVJbkJ5dGVzICE9PSBJbmZpbml0eSkge1xuICAgICAgLy8gT2JzaWRpYW4ncyBgd3JpdGVKc29uYCB3b3VsZCBzd2FsbG93IGEgc2VyaWFsaXphdGlvbiBmYWlsdXJlIGFuZCB3cml0ZSBub3RoaW5nOyB0aHJvd2luZyBoZXJlIGluc3RlYWQga2VlcHNcbiAgICAgIC8vIHRoZSBkaXNrIHVuY2hhbmdlZCB0b28sIGFuZCB0ZWxscyB0aGUgY2FsbGVyLlxuICAgICAgY29uc3Qgc2VyaWFsaXplZCA9IEpTT04uc3RyaW5naWZ5KGRhdGEsIHVuZGVmaW5lZCwgT0JTSURJQU5fSlNPTl9JTkRFTlQpO1xuICAgICAgaWYgKHNlcmlhbGl6ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBzaXplSW5CeXRlcyA9IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShzZXJpYWxpemVkKS5ieXRlTGVuZ3RoO1xuICAgICAgICBpZiAoc2l6ZUluQnl0ZXMgPiB0aGlzLm1heFNpemVJbkJ5dGVzKSB7XG4gICAgICAgICAgdGhyb3cgdGhpcy5jcmVhdGVFcnJvcihQbHVnaW5EYXRhT3BlcmF0aW9uLlNhdmUsIHNpemVJbkJ5dGVzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlRGF0YShkYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBwYXRoIG9mIHRoZSBwbHVnaW4ncyBgZGF0YS5qc29uYCwgYXMgT2JzaWRpYW4ncyBgUGx1Z2luLmxvYWREYXRhYCByZWFkcyBpdC5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIHBhdGgsIG9yIGBudWxsYCB3aGVuIHRoZSBtYW5pZmVzdCBoYXMgbm8gZm9sZGVyLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldERhdGFGaWxlUGF0aCgpOiBudWxsIHwgc3RyaW5nIHtcbiAgICBjb25zdCBkaXJlY3RvcnkgPSB0aGlzLnBsdWdpbi5tYW5pZmVzdC5kaXI7XG4gICAgcmV0dXJuIGRpcmVjdG9yeSA/IG5vcm1hbGl6ZVBhdGgoYCR7ZGlyZWN0b3J5fS9kYXRhLmpzb25gKSA6IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUVycm9yKG9wZXJhdGlvbjogUGx1Z2luRGF0YU9wZXJhdGlvbiwgc2l6ZUluQnl0ZXM6IG51bWJlcik6IFBsdWdpbkRhdGFTaXplTGltaXRFeGNlZWRlZEVycm9yIHtcbiAgICByZXR1cm4gbmV3IFBsdWdpbkRhdGFTaXplTGltaXRFeGNlZWRlZEVycm9yKHtcbiAgICAgIG1heFNpemVJbkJ5dGVzOiB0aGlzLm1heFNpemVJbkJ5dGVzLFxuICAgICAgb3BlcmF0aW9uLFxuICAgICAgcGF0aDogdGhpcy5nZXREYXRhRmlsZVBhdGgoKSA/PyAnZGF0YS5qc29uJyxcbiAgICAgIHBsdWdpbklkOiB0aGlzLnBsdWdpbi5tYW5pZmVzdC5pZCxcbiAgICAgIHBsdWdpbk5hbWU6IHRoaXMucGx1Z2luLm1hbmlmZXN0Lm5hbWUsXG4gICAgICBzaXplSW5CeXRlc1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRFeGlzdGluZ0ZpbGVTaXplKCk6IFByb21pc2U8bnVsbCB8IG51bWJlcj4ge1xuICAgIGlmICh0aGlzLm1heFNpemVJbkJ5dGVzID09PSBJbmZpbml0eSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHBhdGggPSB0aGlzLmdldERhdGFGaWxlUGF0aCgpO1xuICAgIGlmIChwYXRoID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0YXQgPSBhd2FpdCB0aGlzLnBsdWdpbi5hcHAudmF1bHQuYWRhcHRlci5zdGF0KHBhdGgpO1xuICAgICAgcmV0dXJuIHN0YXQ/LnNpemUgPz8gbnVsbDtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIFRoZSBzaXplIGlzIHVua25vd24sIG5vdCBvdmVyc2l6ZWQ6IE9ic2lkaWFuJ3Mgb3duIHJlYWQgZGVjaWRlcyB3aGF0IGhhcHBlbnMgbmV4dCwgYXMgYmVmb3JlIHRoaXMgZ3VhcmQuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBUaHJvd24gd2hlbiBhIHBsdWdpbidzIGBkYXRhLmpzb25gIGlzLCBvciB3b3VsZCBiZWNvbWUsIGxhcmdlciB0aGFuIHRoZSBjb25maWd1cmVkIGxpbWl0LlxuICpcbiAqIFRoZSBmaWxlIG9uIGRpc2sgaXMgbmV2ZXIgdG91Y2hlZCB3aGVuIHRoaXMgaXMgdGhyb3duOiBhbiBvdmVyc2l6ZWQgZXhpc3RpbmcgZmlsZSBpcyBsZWZ0IGludGFjdCBmb3IgdGhlIHVzZXIgdG9cbiAqIGluc3BlY3Qgb3IgdHJpbSwgYW5kIGFuIG92ZXJzaXplZCBzYXZlIGlzIHJlZnVzZWQgYmVmb3JlIGFueXRoaW5nIGlzIHdyaXR0ZW4sIHNvIHRoZSBsYXN0IGdvb2QgZmlsZSByZW1haW5zLlxuICovXG5leHBvcnQgY2xhc3MgUGx1Z2luRGF0YVNpemVMaW1pdEV4Y2VlZGVkRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIC8qKlxuICAgKiBUaGUgc2l6ZSBsaW1pdCwgaW4gYnl0ZXMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbWF4U2l6ZUluQnl0ZXM6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHJlZnVzZWQgb3BlcmF0aW9uLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG9wZXJhdGlvbjogUGx1Z2luRGF0YU9wZXJhdGlvbjtcblxuICAvKipcbiAgICogVGhlIHBhdGggb2YgdGhlIHBsdWdpbidzIGBkYXRhLmpzb25gLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGBtYW5pZmVzdC5pZGAgb2YgdGhlIHBsdWdpbi5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwbHVnaW5JZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgYG1hbmlmZXN0Lm5hbWVgIG9mIHRoZSBwbHVnaW4uXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcGx1Z2luTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc2l6ZSBvZiB0aGUgZXhpc3RpbmcgZmlsZSAobG9hZCkgb3Igb2YgdGhlIHNlcmlhbGl6ZWQgZGF0YSAoc2F2ZSksIGluIGJ5dGVzLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHNpemVJbkJ5dGVzOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB7QGxpbmsgUGx1Z2luRGF0YVNpemVMaW1pdEV4Y2VlZGVkRXJyb3J9LlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlcnJvci5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJhbXM6IFBsdWdpbkRhdGFTaXplTGltaXRFeGNlZWRlZEVycm9yQ29uc3RydWN0b3JQYXJhbXMpIHtcbiAgICBjb25zdCB3aGF0ID0gcGFyYW1zLm9wZXJhdGlvbiA9PT0gUGx1Z2luRGF0YU9wZXJhdGlvbi5Mb2FkXG4gICAgICA/IGBSZWZ1c2luZyB0byBsb2FkIFwiJHtwYXJhbXMucGF0aH1cIjogdGhlIGZpbGUgaXMgJHtTdHJpbmcocGFyYW1zLnNpemVJbkJ5dGVzKX0gYnl0ZXNgXG4gICAgICA6IGBSZWZ1c2luZyB0byBzYXZlIFwiJHtwYXJhbXMucGF0aH1cIjogdGhlIGRhdGEgd291bGQgYmUgJHtTdHJpbmcocGFyYW1zLnNpemVJbkJ5dGVzKX0gYnl0ZXNgO1xuICAgIGNvbnN0IGNvbnNlcXVlbmNlID0gcGFyYW1zLm9wZXJhdGlvbiA9PT0gUGx1Z2luRGF0YU9wZXJhdGlvbi5Mb2FkXG4gICAgICA/ICdUaGUgZmlsZSB3YXMgbGVmdCB1bnRvdWNoZWQuJ1xuICAgICAgOiAnTm90aGluZyB3YXMgd3JpdHRlbiwgc28gdGhlIGxhc3Qgc2F2ZWQgZmlsZSByZW1haW5zLic7XG4gICAgc3VwZXIoXG4gICAgICBgUGx1Z2luIFwiJHtwYXJhbXMucGx1Z2luTmFtZX1cIiAoJHtwYXJhbXMucGx1Z2luSWR9KTogJHt3aGF0fSwgb3ZlciB0aGUgJHtTdHJpbmcocGFyYW1zLm1heFNpemVJbkJ5dGVzKX0tYnl0ZSBsaW1pdC4gJHtjb25zZXF1ZW5jZX0gYFxuICAgICAgICArICdLZWVwIGRhdGEuanNvbiBmb3Igc21hbGwgc2V0dGluZ3MsIGFuZCBtb3ZlIGxhcmdlIG9yIGdyb3dpbmcgc3RhdGUgdG8gTG9jYWxEYXRhU3RvcmUgb3IgU2hhcmVkRGF0YVN0b3JlLidcbiAgICApO1xuICAgIHRoaXMubmFtZSA9ICdQbHVnaW5EYXRhU2l6ZUxpbWl0RXhjZWVkZWRFcnJvcic7XG4gICAgdGhpcy5tYXhTaXplSW5CeXRlcyA9IHBhcmFtcy5tYXhTaXplSW5CeXRlcztcbiAgICB0aGlzLm9wZXJhdGlvbiA9IHBhcmFtcy5vcGVyYXRpb247XG4gICAgdGhpcy5wYXRoID0gcGFyYW1zLnBhdGg7XG4gICAgdGhpcy5wbHVnaW5JZCA9IHBhcmFtcy5wbHVnaW5JZDtcbiAgICB0aGlzLnBsdWdpbk5hbWUgPSBwYXJhbXMucGx1Z2luTmFtZTtcbiAgICB0aGlzLnNpemVJbkJ5dGVzID0gcGFyYW1zLnNpemVJbkJ5dGVzO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFnQkEsc0JBQThCO0FBSzlCLE1BQU0sdUJBQXVCO0FBUXRCLE1BQU0sd0NBQXdDO0FBSzlDLElBQUssc0JBQUwsa0JBQUtBLHlCQUFMO0FBSUwsRUFBQUEscUJBQUEsVUFBTztBQUtQLEVBQUFBLHFCQUFBLFVBQU87QUFURyxTQUFBQTtBQUFBLEdBQUE7QUFnRkwsTUFBTSxrQkFBeUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVk3QyxZQUErQixRQUFnQixVQUErQyxDQUFDLEdBQUc7QUFBbkU7QUFDcEMsVUFBTSxpQkFBaUIsUUFBUSxrQkFBa0I7QUFDakQsUUFBSSxPQUFPLE1BQU0sY0FBYyxLQUFLLGlCQUFpQixHQUFHO0FBQ3RELFlBQU0sSUFBSSxXQUFXLHFEQUFxRCxPQUFPLGNBQWMsQ0FBQyxHQUFHO0FBQUEsSUFDckc7QUFDQSxTQUFLLGlCQUFpQjtB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