@mnaoumov/typescript-lib 0.0.0 → 1.0.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 (180) hide show
  1. package/@types/debug/package.json +4 -0
  2. package/LICENSE +21 -0
  3. package/README.md +7 -1
  4. package/dist/lib/cjs/@types/debug.d.cts +21 -0
  5. package/dist/lib/cjs/abort-controller.cjs +202 -0
  6. package/dist/lib/cjs/abort-controller.d.cts +135 -0
  7. package/dist/lib/cjs/aggregate-error.cjs +98 -0
  8. package/dist/lib/cjs/aggregate-error.d.cts +24 -0
  9. package/dist/lib/cjs/array-buffer.cjs +96 -0
  10. package/dist/lib/cjs/array-buffer.d.cts +16 -0
  11. package/dist/lib/cjs/array.cjs +134 -0
  12. package/dist/lib/cjs/array.d.cts +46 -0
  13. package/dist/lib/cjs/async-events.cjs +466 -0
  14. package/dist/lib/cjs/async-events.d.cts +456 -0
  15. package/dist/lib/cjs/async-operation-hook.cjs +113 -0
  16. package/dist/lib/cjs/async-operation-hook.d.cts +59 -0
  17. package/dist/lib/cjs/async.cjs +521 -0
  18. package/dist/lib/cjs/async.d.cts +414 -0
  19. package/dist/lib/cjs/beeper.cjs +126 -0
  20. package/dist/lib/cjs/beeper.d.cts +21 -0
  21. package/dist/lib/cjs/blob.cjs +160 -0
  22. package/dist/lib/cjs/blob.d.cts +59 -0
  23. package/dist/lib/cjs/bytes.cjs +114 -0
  24. package/dist/lib/cjs/bytes.d.cts +17 -0
  25. package/dist/lib/cjs/debug-controller.cjs +80 -0
  26. package/dist/lib/cjs/debug-controller.d.cts +87 -0
  27. package/dist/lib/cjs/debug.cjs +235 -0
  28. package/dist/lib/cjs/debug.d.cts +66 -0
  29. package/dist/lib/cjs/desktop-zip-extractor.cjs +215 -0
  30. package/dist/lib/cjs/desktop-zip-extractor.d.cts +95 -0
  31. package/dist/lib/cjs/disposable.cjs +414 -0
  32. package/dist/lib/cjs/disposable.d.cts +387 -0
  33. package/dist/lib/cjs/enum.cjs +100 -0
  34. package/dist/lib/cjs/enum.d.cts +24 -0
  35. package/dist/lib/cjs/error.cjs +297 -0
  36. package/dist/lib/cjs/error.d.cts +181 -0
  37. package/dist/lib/cjs/function.cjs +141 -0
  38. package/dist/lib/cjs/function.d.cts +128 -0
  39. package/dist/lib/cjs/html-element.cjs +341 -0
  40. package/dist/lib/cjs/html-element.d.cts +199 -0
  41. package/dist/lib/cjs/index.cjs +195 -0
  42. package/dist/lib/cjs/index.d.cts +33 -0
  43. package/dist/lib/cjs/jpeg-metadata.cjs +228 -0
  44. package/dist/lib/cjs/jpeg-metadata.d.cts +42 -0
  45. package/dist/lib/cjs/library.cjs +158 -0
  46. package/dist/lib/cjs/library.d.cts +96 -0
  47. package/dist/lib/cjs/object-utils.cjs +617 -0
  48. package/dist/lib/cjs/object-utils.d.cts +298 -0
  49. package/dist/lib/cjs/path.cjs +202 -0
  50. package/dist/lib/cjs/path.d.cts +154 -0
  51. package/dist/lib/cjs/reg-exp.cjs +254 -0
  52. package/dist/lib/cjs/reg-exp.d.cts +87 -0
  53. package/dist/lib/cjs/string.cjs +326 -0
  54. package/dist/lib/cjs/string.d.cts +361 -0
  55. package/dist/lib/cjs/transformers/date-transformer.cjs +129 -0
  56. package/dist/lib/cjs/transformers/date-transformer.d.cts +39 -0
  57. package/dist/lib/cjs/transformers/group-transformer.cjs +173 -0
  58. package/dist/lib/cjs/transformers/group-transformer.d.cts +70 -0
  59. package/dist/lib/cjs/transformers/index.cjs +123 -0
  60. package/dist/lib/cjs/transformers/index.d.cts +9 -0
  61. package/dist/lib/cjs/transformers/map-transformer.cjs +129 -0
  62. package/dist/lib/cjs/transformers/map-transformer.d.cts +41 -0
  63. package/dist/lib/cjs/transformers/set-transformer.cjs +129 -0
  64. package/dist/lib/cjs/transformers/set-transformer.d.cts +39 -0
  65. package/dist/lib/cjs/transformers/skip-private-property-transformer.cjs +127 -0
  66. package/dist/lib/cjs/transformers/skip-private-property-transformer.d.cts +36 -0
  67. package/dist/lib/cjs/transformers/transformer.cjs +170 -0
  68. package/dist/lib/cjs/transformers/transformer.d.cts +70 -0
  69. package/dist/lib/cjs/transformers/two-way-map-transformer.cjs +130 -0
  70. package/dist/lib/cjs/transformers/two-way-map-transformer.d.cts +42 -0
  71. package/dist/lib/cjs/transformers/typed-transformer.cjs +94 -0
  72. package/dist/lib/cjs/transformers/typed-transformer.d.cts +39 -0
  73. package/dist/lib/cjs/two-way-map.cjs +208 -0
  74. package/dist/lib/cjs/two-way-map.d.cts +101 -0
  75. package/dist/lib/cjs/type-guards.cjs +128 -0
  76. package/dist/lib/cjs/type-guards.d.cts +84 -0
  77. package/dist/lib/cjs/type.cjs +121 -0
  78. package/dist/lib/cjs/type.d.cts +122 -0
  79. package/dist/lib/cjs/typescript-lib-state.cjs +126 -0
  80. package/dist/lib/cjs/typescript-lib-state.d.cts +56 -0
  81. package/dist/lib/cjs/url.cjs +136 -0
  82. package/dist/lib/cjs/url.d.cts +74 -0
  83. package/dist/lib/cjs/value-provider.cjs +100 -0
  84. package/dist/lib/cjs/value-provider.d.cts +28 -0
  85. package/dist/lib/cjs/value-wrapper.cjs +144 -0
  86. package/dist/lib/cjs/value-wrapper.d.cts +47 -0
  87. package/dist/lib/esm/@types/debug.d.mts +21 -0
  88. package/dist/lib/esm/abort-controller.d.mts +135 -0
  89. package/dist/lib/esm/abort-controller.mjs +159 -0
  90. package/dist/lib/esm/aggregate-error.d.mts +24 -0
  91. package/dist/lib/esm/aggregate-error.mjs +60 -0
  92. package/dist/lib/esm/array-buffer.d.mts +16 -0
  93. package/dist/lib/esm/array-buffer.mjs +58 -0
  94. package/dist/lib/esm/array.d.mts +46 -0
  95. package/dist/lib/esm/array.mjs +93 -0
  96. package/dist/lib/esm/async-events.d.mts +456 -0
  97. package/dist/lib/esm/async-events.mjs +427 -0
  98. package/dist/lib/esm/async-operation-hook.d.mts +59 -0
  99. package/dist/lib/esm/async-operation-hook.mjs +71 -0
  100. package/dist/lib/esm/async.d.mts +414 -0
  101. package/dist/lib/esm/async.mjs +479 -0
  102. package/dist/lib/esm/beeper.d.mts +21 -0
  103. package/dist/lib/esm/beeper.mjs +88 -0
  104. package/dist/lib/esm/blob.d.mts +59 -0
  105. package/dist/lib/esm/blob.mjs +121 -0
  106. package/dist/lib/esm/bytes.d.mts +17 -0
  107. package/dist/lib/esm/bytes.mjs +76 -0
  108. package/dist/lib/esm/debug-controller.d.mts +87 -0
  109. package/dist/lib/esm/debug-controller.mjs +50 -0
  110. package/dist/lib/esm/debug.d.mts +66 -0
  111. package/dist/lib/esm/debug.mjs +185 -0
  112. package/dist/lib/esm/desktop-zip-extractor.d.mts +95 -0
  113. package/dist/lib/esm/desktop-zip-extractor.mjs +180 -0
  114. package/dist/lib/esm/disposable.d.mts +387 -0
  115. package/dist/lib/esm/disposable.mjs +360 -0
  116. package/dist/lib/esm/enum.d.mts +24 -0
  117. package/dist/lib/esm/enum.mjs +61 -0
  118. package/dist/lib/esm/error.d.mts +181 -0
  119. package/dist/lib/esm/error.mjs +248 -0
  120. package/dist/lib/esm/function.d.mts +128 -0
  121. package/dist/lib/esm/function.mjs +96 -0
  122. package/dist/lib/esm/html-element.d.mts +199 -0
  123. package/dist/lib/esm/html-element.mjs +291 -0
  124. package/dist/lib/esm/index.d.mts +33 -0
  125. package/dist/lib/esm/index.mjs +116 -0
  126. package/dist/lib/esm/jpeg-metadata.d.mts +42 -0
  127. package/dist/lib/esm/jpeg-metadata.mjs +189 -0
  128. package/dist/lib/esm/library.d.mts +96 -0
  129. package/dist/lib/esm/library.mjs +118 -0
  130. package/dist/lib/esm/object-utils.d.mts +298 -0
  131. package/dist/lib/esm/object-utils.mjs +567 -0
  132. package/dist/lib/esm/path.d.mts +154 -0
  133. package/dist/lib/esm/path.mjs +139 -0
  134. package/dist/lib/esm/reg-exp.d.mts +87 -0
  135. package/dist/lib/esm/reg-exp.mjs +213 -0
  136. package/dist/lib/esm/string.d.mts +361 -0
  137. package/dist/lib/esm/string.mjs +274 -0
  138. package/dist/lib/esm/transformers/date-transformer.d.mts +39 -0
  139. package/dist/lib/esm/transformers/date-transformer.mjs +91 -0
  140. package/dist/lib/esm/transformers/group-transformer.d.mts +70 -0
  141. package/dist/lib/esm/transformers/group-transformer.mjs +138 -0
  142. package/dist/lib/esm/transformers/index.d.mts +9 -0
  143. package/dist/lib/esm/transformers/index.mjs +68 -0
  144. package/dist/lib/esm/transformers/map-transformer.d.mts +41 -0
  145. package/dist/lib/esm/transformers/map-transformer.mjs +91 -0
  146. package/dist/lib/esm/transformers/set-transformer.d.mts +39 -0
  147. package/dist/lib/esm/transformers/set-transformer.mjs +91 -0
  148. package/dist/lib/esm/transformers/skip-private-property-transformer.d.mts +36 -0
  149. package/dist/lib/esm/transformers/skip-private-property-transformer.mjs +89 -0
  150. package/dist/lib/esm/transformers/transformer.d.mts +70 -0
  151. package/dist/lib/esm/transformers/transformer.mjs +132 -0
  152. package/dist/lib/esm/transformers/two-way-map-transformer.d.mts +42 -0
  153. package/dist/lib/esm/transformers/two-way-map-transformer.mjs +92 -0
  154. package/dist/lib/esm/transformers/typed-transformer.d.mts +39 -0
  155. package/dist/lib/esm/transformers/typed-transformer.mjs +56 -0
  156. package/dist/lib/esm/two-way-map.d.mts +101 -0
  157. package/dist/lib/esm/two-way-map.mjs +170 -0
  158. package/dist/lib/esm/type-guards.d.mts +84 -0
  159. package/dist/lib/esm/type-guards.mjs +85 -0
  160. package/dist/lib/esm/type.d.mts +122 -0
  161. package/dist/lib/esm/type.mjs +83 -0
  162. package/dist/lib/esm/typescript-lib-state.d.mts +56 -0
  163. package/dist/lib/esm/typescript-lib-state.mjs +84 -0
  164. package/dist/lib/esm/url.d.mts +74 -0
  165. package/dist/lib/esm/url.mjs +94 -0
  166. package/dist/lib/esm/value-provider.d.mts +28 -0
  167. package/dist/lib/esm/value-provider.mjs +62 -0
  168. package/dist/lib/esm/value-wrapper.d.mts +47 -0
  169. package/dist/lib/esm/value-wrapper.mjs +106 -0
  170. package/package.json +111 -13
  171. package/transformers/date-transformer/package.json +6 -0
  172. package/transformers/group-transformer/package.json +6 -0
  173. package/transformers/index/package.json +6 -0
  174. package/transformers/map-transformer/package.json +6 -0
  175. package/transformers/package.json +6 -0
  176. package/transformers/set-transformer/package.json +6 -0
  177. package/transformers/skip-private-property-transformer/package.json +6 -0
  178. package/transformers/transformer/package.json +6 -0
  179. package/transformers/two-way-map-transformer/package.json +6 -0
  180. package/transformers/typed-transformer/package.json +6 -0
@@ -0,0 +1,360 @@
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 () {
7
+ function ensureDisposeSymbols(symbolConstructor = Symbol) {
8
+ symbolConstructor.asyncDispose ??= symbolConstructor.for('Symbol.asyncDispose');
9
+ symbolConstructor.dispose ??= symbolConstructor.for('Symbol.dispose');
10
+ }
11
+
12
+ function ensureBrowserProcess() {
13
+ const browserProcess = {
14
+ browser: true,
15
+ cwd() {
16
+ return '/';
17
+ },
18
+ env: {},
19
+ platform: 'android'
20
+ };
21
+
22
+ // eslint-disable-next-line obsidianmd/no-global-this, unicorn/no-unnecessary-global-this -- Must stay `globalThis`-qualified: in the emitted banner a bare `process` is a free identifier, so reading it where the host has none throws a ReferenceError instead of yielding `undefined`. That is the very case this function exists to handle.
23
+ const existingProcess = globalThis.process;
24
+
25
+ if (!existingProcess) {
26
+ // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
27
+ globalThis.process = browserProcess;
28
+ return;
29
+ }
30
+
31
+ if (existingProcess.versions?.node) {
32
+ return;
33
+ }
34
+
35
+ const existingProcessRecord = existingProcess;
36
+
37
+ for (const [key, value] of Object.entries(browserProcess)) {
38
+ existingProcessRecord[key] ??= value;
39
+ }
40
+
41
+ existingProcessRecord['browser'] = true;
42
+ }
43
+
44
+ (function initEsm() {
45
+ ensureDisposeSymbols();
46
+ ensureBrowserProcess();
47
+ })();
48
+ })();
49
+
50
+ import { createAggregateError } from "./aggregate-error.mjs";
51
+ import { assertNever } from "./type-guards.mjs";
52
+ var DisposeErrorBehavior = /* @__PURE__ */ ((DisposeErrorBehavior2) => {
53
+ DisposeErrorBehavior2[DisposeErrorBehavior2["Aggregate"] = 0] = "Aggregate";
54
+ DisposeErrorBehavior2[DisposeErrorBehavior2["FailFast"] = 1] = "FailFast";
55
+ return DisposeErrorBehavior2;
56
+ })(DisposeErrorBehavior || {});
57
+ var DisposeOrder = /* @__PURE__ */ ((DisposeOrder2) => {
58
+ DisposeOrder2[DisposeOrder2["Lifo"] = 0] = "Lifo";
59
+ DisposeOrder2[DisposeOrder2["Fifo"] = 1] = "Fifo";
60
+ return DisposeOrder2;
61
+ })(DisposeOrder || {});
62
+ var MultipleDisposeBehavior = /* @__PURE__ */ ((MultipleDisposeBehavior2) => {
63
+ MultipleDisposeBehavior2[MultipleDisposeBehavior2["Invoke"] = 0] = "Invoke";
64
+ MultipleDisposeBehavior2[MultipleDisposeBehavior2["Ignore"] = 1] = "Ignore";
65
+ MultipleDisposeBehavior2[MultipleDisposeBehavior2["Throw"] = 2] = "Throw";
66
+ return MultipleDisposeBehavior2;
67
+ })(MultipleDisposeBehavior || {});
68
+ class AsyncDisposableBase {
69
+ /**
70
+ * How the disposable behaves when disposed more than once.
71
+ *
72
+ * @default {@link MultipleDisposeBehavior.Ignore}
73
+ */
74
+ multipleDisposeBehavior = 1 /* Ignore */;
75
+ /**
76
+ * Whether this disposable has been disposed (its teardown has run at least once).
77
+ *
78
+ * @returns `true` once disposal has started.
79
+ */
80
+ get isDisposed() {
81
+ return this._isDisposed;
82
+ }
83
+ _isDisposed = false;
84
+ /**
85
+ * Disposes the object. Convenience alias that delegates to `this[Symbol.asyncDispose]()`.
86
+ *
87
+ * @returns A {@link Promise} that resolves once teardown completes.
88
+ */
89
+ asyncDispose() {
90
+ return this[Symbol.asyncDispose]();
91
+ }
92
+ /**
93
+ * Disposes the object by running {@link AsyncDisposableBase.performDisposeAsync}, honoring the configured
94
+ * {@link MultipleDisposeBehavior} on a repeat dispose.
95
+ *
96
+ * @returns A {@link Promise} that resolves once teardown completes.
97
+ */
98
+ async [Symbol.asyncDispose]() {
99
+ if (!shouldPerformDispose(this._isDisposed, this.multipleDisposeBehavior)) {
100
+ return;
101
+ }
102
+ this._isDisposed = true;
103
+ await this.performDisposeAsync();
104
+ }
105
+ }
106
+ class AsyncCallbackDisposable extends AsyncDisposableBase {
107
+ callback;
108
+ /**
109
+ * Creates a new instance of {@link AsyncCallbackDisposable}.
110
+ *
111
+ * @param params - The parameters.
112
+ */
113
+ constructor(params) {
114
+ super();
115
+ this.callback = params.callback;
116
+ this.multipleDisposeBehavior = params.multipleDisposeBehavior ?? 1 /* Ignore */;
117
+ }
118
+ /**
119
+ * Runs the dispose callback.
120
+ *
121
+ * @returns A {@link Promise} that resolves once the callback completes.
122
+ */
123
+ async performDisposeAsync() {
124
+ await this.callback();
125
+ }
126
+ }
127
+ function dispose(disposable) {
128
+ disposable[Symbol.dispose]();
129
+ }
130
+ class DisposableBase {
131
+ /**
132
+ * How the disposable behaves when disposed more than once.
133
+ *
134
+ * @default {@link MultipleDisposeBehavior.Ignore}
135
+ */
136
+ multipleDisposeBehavior = 1 /* Ignore */;
137
+ /**
138
+ * Whether this disposable has been disposed (its teardown has run at least once).
139
+ *
140
+ * @returns `true` once disposal has started.
141
+ */
142
+ get isDisposed() {
143
+ return this._isDisposed;
144
+ }
145
+ _isDisposed = false;
146
+ /**
147
+ * Disposes the object. Convenience alias that delegates to `this[Symbol.dispose]()`.
148
+ */
149
+ dispose() {
150
+ this[Symbol.dispose]();
151
+ }
152
+ /**
153
+ * Disposes the object by running {@link DisposableBase.performDispose}, honoring the configured
154
+ * {@link MultipleDisposeBehavior} on a repeat dispose.
155
+ */
156
+ [Symbol.dispose]() {
157
+ if (!shouldPerformDispose(this._isDisposed, this.multipleDisposeBehavior)) {
158
+ return;
159
+ }
160
+ this._isDisposed = true;
161
+ this.performDispose();
162
+ }
163
+ }
164
+ class CallbackDisposable extends DisposableBase {
165
+ callback;
166
+ /**
167
+ * Creates a new instance of {@link CallbackDisposable}.
168
+ *
169
+ * @param params - The parameters.
170
+ */
171
+ constructor(params) {
172
+ super();
173
+ this.callback = params.callback;
174
+ this.multipleDisposeBehavior = params.multipleDisposeBehavior ?? 1 /* Ignore */;
175
+ }
176
+ /**
177
+ * Runs the dispose callback.
178
+ */
179
+ performDispose() {
180
+ this.callback();
181
+ }
182
+ }
183
+ class CombineAsyncDisposable extends AsyncDisposableBase {
184
+ children;
185
+ disposeOrder;
186
+ errorBehavior;
187
+ /**
188
+ * Creates a new instance of {@link CombineAsyncDisposable}.
189
+ *
190
+ * @param params - The parameters.
191
+ */
192
+ constructor(params) {
193
+ super();
194
+ this.children = [...params.asyncDisposables];
195
+ this.disposeOrder = params.disposeOrder ?? 0 /* Lifo */;
196
+ this.errorBehavior = params.errorBehavior ?? 0 /* Aggregate */;
197
+ this.multipleDisposeBehavior = params.multipleDisposeBehavior ?? 1 /* Ignore */;
198
+ }
199
+ /**
200
+ * Disposes all combined children in the configured {@link DisposeOrder}, applying the configured
201
+ * {@link DisposeErrorBehavior} when a child throws.
202
+ *
203
+ * @returns A {@link Promise} that resolves once all children have been disposed.
204
+ */
205
+ async performDisposeAsync() {
206
+ const errors = [];
207
+ for (const child of this.getOrderedChildren()) {
208
+ try {
209
+ await child[Symbol.asyncDispose]();
210
+ } catch (error) {
211
+ if (this.errorBehavior === 1 /* FailFast */) {
212
+ throw error;
213
+ }
214
+ errors.push(error);
215
+ }
216
+ }
217
+ if (errors.length > 0) {
218
+ throw createAggregateError(errors);
219
+ }
220
+ }
221
+ getOrderedChildren() {
222
+ switch (this.disposeOrder) {
223
+ case 1 /* Fifo */: {
224
+ return this.children;
225
+ }
226
+ case 0 /* Lifo */: {
227
+ return [...this.children].reverse();
228
+ }
229
+ default: {
230
+ assertNever(this.disposeOrder);
231
+ }
232
+ }
233
+ }
234
+ }
235
+ class CombineDisposable extends DisposableBase {
236
+ children;
237
+ disposeOrder;
238
+ errorBehavior;
239
+ /**
240
+ * Creates a new instance of {@link CombineDisposable}.
241
+ *
242
+ * @param params - The parameters.
243
+ */
244
+ constructor(params) {
245
+ super();
246
+ this.children = [...params.disposables];
247
+ this.disposeOrder = params.disposeOrder ?? 0 /* Lifo */;
248
+ this.errorBehavior = params.errorBehavior ?? 0 /* Aggregate */;
249
+ this.multipleDisposeBehavior = params.multipleDisposeBehavior ?? 1 /* Ignore */;
250
+ }
251
+ /**
252
+ * Disposes all combined children in the configured {@link DisposeOrder}, applying the configured
253
+ * {@link DisposeErrorBehavior} when a child throws.
254
+ */
255
+ performDispose() {
256
+ const errors = [];
257
+ for (const child of this.getOrderedChildren()) {
258
+ try {
259
+ child[Symbol.dispose]();
260
+ } catch (error) {
261
+ if (this.errorBehavior === 1 /* FailFast */) {
262
+ throw error;
263
+ }
264
+ errors.push(error);
265
+ }
266
+ }
267
+ if (errors.length > 0) {
268
+ throw createAggregateError(errors);
269
+ }
270
+ }
271
+ getOrderedChildren() {
272
+ switch (this.disposeOrder) {
273
+ case 1 /* Fifo */: {
274
+ return this.children;
275
+ }
276
+ case 0 /* Lifo */: {
277
+ return [...this.children].reverse();
278
+ }
279
+ default: {
280
+ assertNever(this.disposeOrder);
281
+ }
282
+ }
283
+ }
284
+ }
285
+ async function disposeAsync(asyncDisposable) {
286
+ await asyncDisposable[Symbol.asyncDispose]();
287
+ }
288
+ function isAsyncDisposable($unknown) {
289
+ const asyncDisposable = $unknown;
290
+ return !!asyncDisposable[Symbol.asyncDispose];
291
+ }
292
+ function isAsyncDisposableEx($unknown) {
293
+ const asyncDisposableEx = $unknown;
294
+ return isAsyncDisposable($unknown) && typeof asyncDisposableEx.asyncDispose === "function";
295
+ }
296
+ function isDisposable($unknown) {
297
+ const disposable = $unknown;
298
+ return !!disposable[Symbol.dispose];
299
+ }
300
+ function isDisposableEx($unknown) {
301
+ const disposableEx = $unknown;
302
+ return isDisposable($unknown) && typeof disposableEx.dispose === "function";
303
+ }
304
+ function toAsyncDisposableEx(asyncDisposable) {
305
+ return isAsyncDisposableEx(asyncDisposable) ? asyncDisposable : {
306
+ asyncDispose: asyncDisposeAdapted,
307
+ [Symbol.asyncDispose]: asyncDisposeAdapted
308
+ };
309
+ function asyncDisposeAdapted() {
310
+ return disposeAsync(asyncDisposable);
311
+ }
312
+ }
313
+ function toDisposableEx(disposable) {
314
+ return isDisposableEx(disposable) ? disposable : {
315
+ dispose: disposeAdapted,
316
+ [Symbol.dispose]: disposeAdapted
317
+ };
318
+ function disposeAdapted() {
319
+ dispose(disposable);
320
+ }
321
+ }
322
+ function shouldPerformDispose(isDisposed, multipleDisposeBehavior) {
323
+ if (!isDisposed) {
324
+ return true;
325
+ }
326
+ switch (multipleDisposeBehavior) {
327
+ case 1 /* Ignore */: {
328
+ return false;
329
+ }
330
+ case 0 /* Invoke */: {
331
+ return true;
332
+ }
333
+ case 2 /* Throw */: {
334
+ throw new Error("This disposable has already been disposed.");
335
+ }
336
+ default: {
337
+ assertNever(multipleDisposeBehavior);
338
+ }
339
+ }
340
+ }
341
+ export {
342
+ AsyncCallbackDisposable,
343
+ AsyncDisposableBase,
344
+ CallbackDisposable,
345
+ CombineAsyncDisposable,
346
+ CombineDisposable,
347
+ DisposableBase,
348
+ DisposeErrorBehavior,
349
+ DisposeOrder,
350
+ MultipleDisposeBehavior,
351
+ dispose,
352
+ disposeAsync,
353
+ isAsyncDisposable,
354
+ isAsyncDisposableEx,
355
+ isDisposable,
356
+ isDisposableEx,
357
+ toAsyncDisposableEx,
358
+ toDisposableEx
359
+ };
360
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2Rpc3Bvc2FibGUudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBEaXNwb3NhYmxlIHV0aWxpdGllcyBmb3IgYHVzaW5nYCAvIGBhd2FpdCB1c2luZ2AgZGVjbGFyYXRpb25zLlxuICovXG5cbmltcG9ydCB0eXBlIHsgUHJvbWlzYWJsZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB7IGNyZWF0ZUFnZ3JlZ2F0ZUVycm9yIH0gZnJvbSAnLi9hZ2dyZWdhdGUtZXJyb3IudHMnO1xuaW1wb3J0IHsgYXNzZXJ0TmV2ZXIgfSBmcm9tICcuL3R5cGUtZ3VhcmRzLnRzJztcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHRoZSBlcnJvciBzZW1hbnRpY3Mgb2YgYSB7QGxpbmsgQ29tYmluZURpc3Bvc2FibGV9IG9yIHtAbGluayBDb21iaW5lQXN5bmNEaXNwb3NhYmxlfSB3aGVuXG4gKiBvbmUgb2YgaXRzIGNoaWxkcmVuIHRocm93cyB3aGlsZSBiZWluZyBkaXNwb3NlZC5cbiAqL1xuZXhwb3J0IGVudW0gRGlzcG9zZUVycm9yQmVoYXZpb3Ige1xuICAvKipcbiAgICogRGlzcG9zZSBldmVyeSBjaGlsZCBldmVuIGlmIHNvbWUgb2YgdGhlbSB0aHJvdywgY29sbGVjdGluZyB0aGUgdGhyb3duIGVycm9ycyBhbmQgcmUtdGhyb3dpbmcgdGhlbVxuICAgKiBhcyBhIHNpbmdsZSB7QGxpbmsgQWdncmVnYXRlRXJyb3J9IG9uY2UgYWxsIGNoaWxkcmVuIGhhdmUgYmVlbiBkaXNwb3NlZC5cbiAgICovXG4gIEFnZ3JlZ2F0ZSxcblxuICAvKipcbiAgICogUmUtdGhyb3cgdGhlIGZpcnN0IGVycm9yIGEgY2hpbGQgdGhyb3dzIGltbWVkaWF0ZWx5LCBsZWF2aW5nIHRoZSByZW1haW5pbmcgY2hpbGRyZW4gdW5kaXNwb3NlZC5cbiAgICovXG4gIEZhaWxGYXN0XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB0aGUgb3JkZXIgaW4gd2hpY2ggYSB7QGxpbmsgQ29tYmluZURpc3Bvc2FibGV9IG9yIHtAbGluayBDb21iaW5lQXN5bmNEaXNwb3NhYmxlfSBkaXNwb3Nlc1xuICogaXRzIGNoaWxkcmVuLlxuICovXG5leHBvcnQgZW51bSBEaXNwb3NlT3JkZXIge1xuICAvKipcbiAgICogRGlzcG9zZSB0aGUgbGFzdC1yZWdpc3RlcmVkIGNoaWxkIGZpcnN0IChsYXN0LWluLCBmaXJzdC1vdXQpLCBsaWtlIG5lc3RlZCBgdXNpbmdgIGRlY2xhcmF0aW9uc1xuICAgKiB1bndpbmRpbmcgaW4gcmV2ZXJzZS5cbiAgICovXG4gIExpZm8sXG5cbiAgLyoqXG4gICAqIERpc3Bvc2UgdGhlIGZpcnN0LXJlZ2lzdGVyZWQgY2hpbGQgZmlyc3QgKGZpcnN0LWluLCBmaXJzdC1vdXQpLlxuICAgKi9cbiAgRmlmb1xufVxuXG4vKipcbiAqIERldGVybWluZXMgaG93IGEge0BsaW5rIENhbGxiYWNrRGlzcG9zYWJsZX0gb3Ige0BsaW5rIEFzeW5jQ2FsbGJhY2tEaXNwb3NhYmxlfSBiZWhhdmVzIHdoZW4gaXQgaXNcbiAqIGRpc3Bvc2VkIG1vcmUgdGhhbiBvbmNlLlxuICovXG5leHBvcnQgZW51bSBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvciB7XG4gIC8qKlxuICAgKiBJbnZva2UgdGhlIGNhbGxiYWNrIG9uIGV2ZXJ5IGRpc3Bvc2UuXG4gICAqL1xuICBJbnZva2UsXG5cbiAgLyoqXG4gICAqIEludm9rZSB0aGUgY2FsbGJhY2sgb24gdGhlIGZpcnN0IGRpc3Bvc2Ugb25seTsgc3Vic2VxdWVudCBkaXNwb3NlcyBhcmUgbm8tb3BzLlxuICAgKi9cbiAgSWdub3JlLFxuXG4gIC8qKlxuICAgKiBJbnZva2UgdGhlIGNhbGxiYWNrIG9uIHRoZSBmaXJzdCBkaXNwb3NlIG9ubHk7IHN1YnNlcXVlbnQgZGlzcG9zZXMgdGhyb3cuXG4gICAqL1xuICBUaHJvd1xufVxuXG4vKipcbiAqIFRoZSBwYXJhbWV0ZXJzIGZvciBjb25zdHJ1Y3RpbmcgYW4ge0BsaW5rIEFzeW5jQ2FsbGJhY2tEaXNwb3NhYmxlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBc3luY0NhbGxiYWNrRGlzcG9zYWJsZUNvbnN0cnVjdG9yUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBjYWxsYmFjayB0byBleGVjdXRlIHdoZW4gZGlzcG9zZWQuXG4gICAqL1xuICByZWFkb25seSBjYWxsYmFjazogQXN5bmNEaXNwb3NlQ2FsbGJhY2s7XG5cbiAgLyoqXG4gICAqIEhvdyB0aGUgZGlzcG9zYWJsZSBiZWhhdmVzIHdoZW4gZGlzcG9zZWQgbW9yZSB0aGFuIG9uY2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IHtAbGluayBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvci5JZ25vcmV9XG4gICAqL1xuICByZWFkb25seSBtdWx0aXBsZURpc3Bvc2VCZWhhdmlvcj86IE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yO1xufVxuXG4vKipcbiAqIEFuIHtAbGluayBBc3luY0Rpc3Bvc2FibGV9IHRoYXQgYWRkaXRpb25hbGx5IGV4cG9zZXMgYSBjb252ZW5pZW5jZSB7QGxpbmsgQXN5bmNEaXNwb3NhYmxlRXguYXN5bmNEaXNwb3NlfVxuICogbWV0aG9kLCBzbyBhIHN0b3JlZCBoYW5kbGUgY2FuIGJlIGRpc3Bvc2VkIGFzIGBoYW5kbGUuYXN5bmNEaXNwb3NlKClgIGluc3RlYWQgb2YgdGhlIGNsdW5raWVyXG4gKiBgaGFuZGxlW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKClgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFzeW5jRGlzcG9zYWJsZUV4IGV4dGVuZHMgQXN5bmNEaXNwb3NhYmxlIHtcbiAgLyoqXG4gICAqIERpc3Bvc2VzIHRoZSBvYmplY3QuIERlbGVnYXRlcyB0byBgdGhpc1tTeW1ib2wuYXN5bmNEaXNwb3NlXSgpYC5cbiAgICpcbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIGRpc3Bvc2FsIGNvbXBsZXRlcy5cbiAgICovXG4gIGFzeW5jRGlzcG9zZTogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbn1cblxuLyoqXG4gKiBBIGNhbGxiYWNrIGludm9rZWQgd2hlbiBhbiB7QGxpbmsgQXN5bmNDYWxsYmFja0Rpc3Bvc2FibGV9IGlzIGRpc3Bvc2VkLlxuICovXG5leHBvcnQgdHlwZSBBc3luY0Rpc3Bvc2VDYWxsYmFjayA9ICgpID0+IFByb21pc2FibGU8dm9pZD47XG5cbi8qKlxuICogVGhlIHBhcmFtZXRlcnMgZm9yIGNvbnN0cnVjdGluZyBhIHtAbGluayBDYWxsYmFja0Rpc3Bvc2FibGV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENhbGxiYWNrRGlzcG9zYWJsZUNvbnN0cnVjdG9yUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBjYWxsYmFjayB0byBleGVjdXRlIHdoZW4gZGlzcG9zZWQuXG4gICAqL1xuICByZWFkb25seSBjYWxsYmFjazogRGlzcG9zZUNhbGxiYWNrO1xuXG4gIC8qKlxuICAgKiBIb3cgdGhlIGRpc3Bvc2FibGUgYmVoYXZlcyB3aGVuIGRpc3Bvc2VkIG1vcmUgdGhhbiBvbmNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7QGxpbmsgTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IuSWdub3JlfVxuICAgKi9cbiAgcmVhZG9ubHkgbXVsdGlwbGVEaXNwb3NlQmVoYXZpb3I/OiBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvcjtcbn1cblxuLyoqXG4gKiBUaGUgcGFyYW1ldGVycyBmb3IgY29uc3RydWN0aW5nIGEge0BsaW5rIENvbWJpbmVBc3luY0Rpc3Bvc2FibGV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbWJpbmVBc3luY0Rpc3Bvc2FibGVDb25zdHJ1Y3RvclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgYXN5bmMgZGlzcG9zYWJsZXMgdG8gZGlzcG9zZSB3aGVuIHRoZSBjb21iaW5lciBpcyBkaXNwb3NlZC5cbiAgICovXG4gIHJlYWRvbmx5IGFzeW5jRGlzcG9zYWJsZXM6IEl0ZXJhYmxlPEFzeW5jRGlzcG9zYWJsZT47XG5cbiAgLyoqXG4gICAqIFRoZSBvcmRlciBpbiB3aGljaCB0aGUgY2hpbGRyZW4gYXJlIGRpc3Bvc2VkLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7QGxpbmsgRGlzcG9zZU9yZGVyLkxpZm99XG4gICAqL1xuICByZWFkb25seSBkaXNwb3NlT3JkZXI/OiBEaXNwb3NlT3JkZXI7XG5cbiAgLyoqXG4gICAqIEhvdyB0aGUgY29tYmluZXIgYmVoYXZlcyB3aGVuIG9uZSBvZiBpdHMgY2hpbGRyZW4gdGhyb3dzIHdoaWxlIGJlaW5nIGRpc3Bvc2VkLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7QGxpbmsgRGlzcG9zZUVycm9yQmVoYXZpb3IuQWdncmVnYXRlfVxuICAgKi9cbiAgcmVhZG9ubHkgZXJyb3JCZWhhdmlvcj86IERpc3Bvc2VFcnJvckJlaGF2aW9yO1xuXG4gIC8qKlxuICAgKiBIb3cgdGhlIGNvbWJpbmVyIGJlaGF2ZXMgd2hlbiBpdCBpcyBkaXNwb3NlZCBtb3JlIHRoYW4gb25jZS5cbiAgICpcbiAgICogQGRlZmF1bHQge0BsaW5rIE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yLklnbm9yZX1cbiAgICovXG4gIHJlYWRvbmx5IG11bHRpcGxlRGlzcG9zZUJlaGF2aW9yPzogTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3I7XG59XG5cbi8qKlxuICogVGhlIHBhcmFtZXRlcnMgZm9yIGNvbnN0cnVjdGluZyBhIHtAbGluayBDb21iaW5lRGlzcG9zYWJsZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tYmluZURpc3Bvc2FibGVDb25zdHJ1Y3RvclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgZGlzcG9zYWJsZXMgdG8gZGlzcG9zZSB3aGVuIHRoZSBjb21iaW5lciBpcyBkaXNwb3NlZC5cbiAgICovXG4gIHJlYWRvbmx5IGRpc3Bvc2FibGVzOiBJdGVyYWJsZTxEaXNwb3NhYmxlPjtcblxuICAvKipcbiAgICogVGhlIG9yZGVyIGluIHdoaWNoIHRoZSBjaGlsZHJlbiBhcmUgZGlzcG9zZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHtAbGluayBEaXNwb3NlT3JkZXIuTGlmb31cbiAgICovXG4gIHJlYWRvbmx5IGRpc3Bvc2VPcmRlcj86IERpc3Bvc2VPcmRlcjtcblxuICAvKipcbiAgICogSG93IHRoZSBjb21iaW5lciBiZWhhdmVzIHdoZW4gb25lIG9mIGl0cyBjaGlsZHJlbiB0aHJvd3Mgd2hpbGUgYmVpbmcgZGlzcG9zZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHtAbGluayBEaXNwb3NlRXJyb3JCZWhhdmlvci5BZ2dyZWdhdGV9XG4gICAqL1xuICByZWFkb25seSBlcnJvckJlaGF2aW9yPzogRGlzcG9zZUVycm9yQmVoYXZpb3I7XG5cbiAgLyoqXG4gICAqIEhvdyB0aGUgY29tYmluZXIgYmVoYXZlcyB3aGVuIGl0IGlzIGRpc3Bvc2VkIG1vcmUgdGhhbiBvbmNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7QGxpbmsgTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IuSWdub3JlfVxuICAgKi9cbiAgcmVhZG9ubHkgbXVsdGlwbGVEaXNwb3NlQmVoYXZpb3I/OiBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvcjtcbn1cblxuLyoqXG4gKiBBIHtAbGluayBEaXNwb3NhYmxlfSB0aGF0IGFkZGl0aW9uYWxseSBleHBvc2VzIGEgY29udmVuaWVuY2Uge0BsaW5rIERpc3Bvc2FibGVFeC5kaXNwb3NlfSBtZXRob2QsIHNvIGFcbiAqIHN0b3JlZCBoYW5kbGUgY2FuIGJlIGRpc3Bvc2VkIGFzIGBoYW5kbGUuZGlzcG9zZSgpYCBpbnN0ZWFkIG9mIHRoZSBjbHVua2llciBgaGFuZGxlW1N5bWJvbC5kaXNwb3NlXSgpYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEaXNwb3NhYmxlRXggZXh0ZW5kcyBEaXNwb3NhYmxlIHtcbiAgLyoqXG4gICAqIERpc3Bvc2VzIHRoZSBvYmplY3QuIERlbGVnYXRlcyB0byBgdGhpc1tTeW1ib2wuZGlzcG9zZV0oKWAuXG4gICAqL1xuICBkaXNwb3NlOiAoKSA9PiB2b2lkO1xufVxuXG4vKipcbiAqIEEgY2FsbGJhY2sgaW52b2tlZCB3aGVuIGEge0BsaW5rIENhbGxiYWNrRGlzcG9zYWJsZX0gaXMgZGlzcG9zZWQuXG4gKi9cbmV4cG9ydCB0eXBlIERpc3Bvc2VDYWxsYmFjayA9ICgpID0+IHZvaWQ7XG5cbi8qKlxuICogQWJzdHJhY3QgYmFzZSBmb3IgYW4ge0BsaW5rIEFzeW5jRGlzcG9zYWJsZUV4fTogaXQgY2FycmllcyB0aGUgcmUtZGlzcG9zZSBndWFyZCAodmlhXG4gKiB7QGxpbmsgTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3J9KSBhbmQgdGhlIHtAbGluayBBc3luY0Rpc3Bvc2FibGVFeC5hc3luY0Rpc3Bvc2V9IGFsaWFzOyBhIHN1YmNsYXNzIG9ubHlcbiAqIGltcGxlbWVudHMge0BsaW5rIEFzeW5jRGlzcG9zYWJsZUJhc2UucGVyZm9ybURpc3Bvc2VBc3luY30uXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBc3luY0Rpc3Bvc2FibGVCYXNlIGltcGxlbWVudHMgQXN5bmNEaXNwb3NhYmxlRXgge1xuICAvKipcbiAgICogSG93IHRoZSBkaXNwb3NhYmxlIGJlaGF2ZXMgd2hlbiBkaXNwb3NlZCBtb3JlIHRoYW4gb25jZS5cbiAgICpcbiAgICogQGRlZmF1bHQge0BsaW5rIE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yLklnbm9yZX1cbiAgICovXG4gIHByb3RlY3RlZCBtdWx0aXBsZURpc3Bvc2VCZWhhdmlvcjogTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IgPSBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvci5JZ25vcmU7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyBkaXNwb3NhYmxlIGhhcyBiZWVuIGRpc3Bvc2VkIChpdHMgdGVhcmRvd24gaGFzIHJ1biBhdCBsZWFzdCBvbmNlKS5cbiAgICpcbiAgICogQHJldHVybnMgYHRydWVgIG9uY2UgZGlzcG9zYWwgaGFzIHN0YXJ0ZWQuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IGlzRGlzcG9zZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzRGlzcG9zZWQ7XG4gIH1cblxuICBwcml2YXRlIF9pc0Rpc3Bvc2VkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIERpc3Bvc2VzIHRoZSBvYmplY3QuIENvbnZlbmllbmNlIGFsaWFzIHRoYXQgZGVsZWdhdGVzIHRvIGB0aGlzW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKClgLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGVhcmRvd24gY29tcGxldGVzLlxuICAgKi9cbiAgcHVibGljIGFzeW5jRGlzcG9zZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpc1tTeW1ib2wuYXN5bmNEaXNwb3NlXSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3Bvc2VzIHRoZSBvYmplY3QgYnkgcnVubmluZyB7QGxpbmsgQXN5bmNEaXNwb3NhYmxlQmFzZS5wZXJmb3JtRGlzcG9zZUFzeW5jfSwgaG9ub3JpbmcgdGhlIGNvbmZpZ3VyZWRcbiAgICoge0BsaW5rIE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yfSBvbiBhIHJlcGVhdCBkaXNwb3NlLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGVhcmRvd24gY29tcGxldGVzLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXNob3VsZFBlcmZvcm1EaXNwb3NlKHRoaXMuX2lzRGlzcG9zZWQsIHRoaXMubXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faXNEaXNwb3NlZCA9IHRydWU7XG4gICAgYXdhaXQgdGhpcy5wZXJmb3JtRGlzcG9zZUFzeW5jKCk7XG4gIH1cblxuICAvKipcbiAgICogUGVyZm9ybXMgdGhlIGFjdHVhbCB0ZWFyZG93bi4gQ2FsbGVkIGF0IG1vc3Qgb25jZSB1bmxlc3Mge0BsaW5rIE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yLkludm9rZX0gaXMgc2V0LlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNhYmxlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGVhcmRvd24gY29tcGxldGVzLlxuICAgKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IHBlcmZvcm1EaXNwb3NlQXN5bmMoKTogUHJvbWlzYWJsZTx2b2lkPjtcbn1cblxuLyoqXG4gKiBBbiBhc3luYyBkaXNwb3NhYmxlIHRoYXQgZXhlY3V0ZXMgYSBjYWxsYmFjayB3aGVuIGRpc3Bvc2VkIHZpYSBgYXdhaXQgdXNpbmdgIChvciBhIG1hbnVhbFxuICogYGF3YWl0IGRpc3Bvc2FibGVbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKWApLlxuICovXG5leHBvcnQgY2xhc3MgQXN5bmNDYWxsYmFja0Rpc3Bvc2FibGUgZXh0ZW5kcyBBc3luY0Rpc3Bvc2FibGVCYXNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBjYWxsYmFjazogQXN5bmNEaXNwb3NlQ2FsbGJhY2s7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2Yge0BsaW5rIEFzeW5jQ2FsbGJhY2tEaXNwb3NhYmxlfS5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmFtczogQXN5bmNDYWxsYmFja0Rpc3Bvc2FibGVDb25zdHJ1Y3RvclBhcmFtcykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5jYWxsYmFjayA9IHBhcmFtcy5jYWxsYmFjaztcbiAgICB0aGlzLm11bHRpcGxlRGlzcG9zZUJlaGF2aW9yID0gcGFyYW1zLm11bHRpcGxlRGlzcG9zZUJlaGF2aW9yID8/IE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yLklnbm9yZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHRoZSBkaXNwb3NlIGNhbGxiYWNrLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIGNhbGxiYWNrIGNvbXBsZXRlcy5cbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyBwZXJmb3JtRGlzcG9zZUFzeW5jKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuY2FsbGJhY2soKTtcbiAgfVxufVxuXG4vKipcbiAqIERpc3Bvc2VzIGEge0BsaW5rIERpc3Bvc2FibGV9LlxuICpcbiAqIFByZWZlciB0aGlzIG92ZXIgY2FsbGluZyBgZGlzcG9zYWJsZVtTeW1ib2wuZGlzcG9zZV0oKWAgYXQgdGhlIGNhbGwgc2l0ZTogaXQgcmVhZHMgYmV0dGVyIGFuZCBrZWVwcyB0aGVcbiAqIHdlbGwta25vd24gc3ltYm9sIHJlZmVyZW5jZWQgaW4gYSBzaW5nbGUgcGxhY2UuXG4gKlxuICogQHBhcmFtIGRpc3Bvc2FibGUgLSB0aGUgZGlzcG9zYWJsZSB0byBkaXNwb3NlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaXNwb3NlKGRpc3Bvc2FibGU6IERpc3Bvc2FibGUpOiB2b2lkIHtcbiAgZGlzcG9zYWJsZVtTeW1ib2wuZGlzcG9zZV0oKTtcbn1cblxuLyoqXG4gKiBBYnN0cmFjdCBiYXNlIGZvciBhIHtAbGluayBEaXNwb3NhYmxlRXh9OiBpdCBjYXJyaWVzIHRoZSByZS1kaXNwb3NlIGd1YXJkICh2aWEge0BsaW5rIE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yfSlcbiAqIGFuZCB0aGUge0BsaW5rIERpc3Bvc2FibGVFeC5kaXNwb3NlfSBhbGlhczsgYSBzdWJjbGFzcyBvbmx5IGltcGxlbWVudHMge0BsaW5rIERpc3Bvc2FibGVCYXNlLnBlcmZvcm1EaXNwb3NlfS5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIERpc3Bvc2FibGVCYXNlIGltcGxlbWVudHMgRGlzcG9zYWJsZUV4IHtcbiAgLyoqXG4gICAqIEhvdyB0aGUgZGlzcG9zYWJsZSBiZWhhdmVzIHdoZW4gZGlzcG9zZWQgbW9yZSB0aGFuIG9uY2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IHtAbGluayBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvci5JZ25vcmV9XG4gICAqL1xuICBwcm90ZWN0ZWQgbXVsdGlwbGVEaXNwb3NlQmVoYXZpb3I6IE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yID0gTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IuSWdub3JlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgZGlzcG9zYWJsZSBoYXMgYmVlbiBkaXNwb3NlZCAoaXRzIHRlYXJkb3duIGhhcyBydW4gYXQgbGVhc3Qgb25jZSkuXG4gICAqXG4gICAqIEByZXR1cm5zIGB0cnVlYCBvbmNlIGRpc3Bvc2FsIGhhcyBzdGFydGVkLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBpc0Rpc3Bvc2VkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc0Rpc3Bvc2VkO1xuICB9XG5cbiAgcHJpdmF0ZSBfaXNEaXNwb3NlZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBEaXNwb3NlcyB0aGUgb2JqZWN0LiBDb252ZW5pZW5jZSBhbGlhcyB0aGF0IGRlbGVnYXRlcyB0byBgdGhpc1tTeW1ib2wuZGlzcG9zZV0oKWAuXG4gICAqL1xuICBwdWJsaWMgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzW1N5bWJvbC5kaXNwb3NlXSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3Bvc2VzIHRoZSBvYmplY3QgYnkgcnVubmluZyB7QGxpbmsgRGlzcG9zYWJsZUJhc2UucGVyZm9ybURpc3Bvc2V9LCBob25vcmluZyB0aGUgY29uZmlndXJlZFxuICAgKiB7QGxpbmsgTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3J9IG9uIGEgcmVwZWF0IGRpc3Bvc2UuXG4gICAqL1xuICBwdWJsaWMgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICBpZiAoIXNob3VsZFBlcmZvcm1EaXNwb3NlKHRoaXMuX2lzRGlzcG9zZWQsIHRoaXMubXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faXNEaXNwb3NlZCA9IHRydWU7XG4gICAgdGhpcy5wZXJmb3JtRGlzcG9zZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcmZvcm1zIHRoZSBhY3R1YWwgdGVhcmRvd24uIENhbGxlZCBhdCBtb3N0IG9uY2UgdW5sZXNzIHtAbGluayBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvci5JbnZva2V9IGlzIHNldC5cbiAgICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBwZXJmb3JtRGlzcG9zZSgpOiB2b2lkO1xufVxuXG4vKipcbiAqIEEgZGlzcG9zYWJsZSB0aGF0IGV4ZWN1dGVzIGEgY2FsbGJhY2sgd2hlbiBkaXNwb3NlZC5cbiAqL1xuZXhwb3J0IGNsYXNzIENhbGxiYWNrRGlzcG9zYWJsZSBleHRlbmRzIERpc3Bvc2FibGVCYXNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBjYWxsYmFjazogRGlzcG9zZUNhbGxiYWNrO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIHtAbGluayBDYWxsYmFja0Rpc3Bvc2FibGV9LlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBDYWxsYmFja0Rpc3Bvc2FibGVDb25zdHJ1Y3RvclBhcmFtcykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5jYWxsYmFjayA9IHBhcmFtcy5jYWxsYmFjaztcbiAgICB0aGlzLm11bHRpcGxlRGlzcG9zZUJlaGF2aW9yID0gcGFyYW1zLm11bHRpcGxlRGlzcG9zZUJlaGF2aW9yID8/IE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yLklnbm9yZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHRoZSBkaXNwb3NlIGNhbGxiYWNrLlxuICAgKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHBlcmZvcm1EaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuY2FsbGJhY2soKTtcbiAgfVxufVxuXG4vKipcbiAqIEFuIHtAbGluayBBc3luY0Rpc3Bvc2FibGVFeH0gdGhhdCBjb21iaW5lcyBtdWx0aXBsZSBhc3luYyBkaXNwb3NhYmxlcyBhbmQgZGlzcG9zZXMgYWxsIG9mIHRoZW0gd2hlbiBpdFxuICogaXMgZGlzcG9zZWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBDb21iaW5lQXN5bmNEaXNwb3NhYmxlIGV4dGVuZHMgQXN5bmNEaXNwb3NhYmxlQmFzZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2hpbGRyZW46IHJlYWRvbmx5IEFzeW5jRGlzcG9zYWJsZVtdO1xuICBwcml2YXRlIHJlYWRvbmx5IGRpc3Bvc2VPcmRlcjogRGlzcG9zZU9yZGVyO1xuICBwcml2YXRlIHJlYWRvbmx5IGVycm9yQmVoYXZpb3I6IERpc3Bvc2VFcnJvckJlaGF2aW9yO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIHtAbGluayBDb21iaW5lQXN5bmNEaXNwb3NhYmxlfS5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmFtczogQ29tYmluZUFzeW5jRGlzcG9zYWJsZUNvbnN0cnVjdG9yUGFyYW1zKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmNoaWxkcmVuID0gWy4uLnBhcmFtcy5hc3luY0Rpc3Bvc2FibGVzXTtcbiAgICB0aGlzLmRpc3Bvc2VPcmRlciA9IHBhcmFtcy5kaXNwb3NlT3JkZXIgPz8gRGlzcG9zZU9yZGVyLkxpZm87XG4gICAgdGhpcy5lcnJvckJlaGF2aW9yID0gcGFyYW1zLmVycm9yQmVoYXZpb3IgPz8gRGlzcG9zZUVycm9yQmVoYXZpb3IuQWdncmVnYXRlO1xuICAgIHRoaXMubXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IgPSBwYXJhbXMubXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IgPz8gTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IuSWdub3JlO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3Bvc2VzIGFsbCBjb21iaW5lZCBjaGlsZHJlbiBpbiB0aGUgY29uZmlndXJlZCB7QGxpbmsgRGlzcG9zZU9yZGVyfSwgYXBwbHlpbmcgdGhlIGNvbmZpZ3VyZWRcbiAgICoge0BsaW5rIERpc3Bvc2VFcnJvckJlaGF2aW9yfSB3aGVuIGEgY2hpbGQgdGhyb3dzLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgYWxsIGNoaWxkcmVuIGhhdmUgYmVlbiBkaXNwb3NlZC5cbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyBwZXJmb3JtRGlzcG9zZUFzeW5jKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGVycm9yczogdW5rbm93bltdID0gW107XG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiB0aGlzLmdldE9yZGVyZWRDaGlsZHJlbigpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBjaGlsZFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKHRoaXMuZXJyb3JCZWhhdmlvciA9PT0gRGlzcG9zZUVycm9yQmVoYXZpb3IuRmFpbEZhc3QpIHtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGVycm9ycy5wdXNoKGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IGNyZWF0ZUFnZ3JlZ2F0ZUVycm9yKGVycm9ycyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRPcmRlcmVkQ2hpbGRyZW4oKTogcmVhZG9ubHkgQXN5bmNEaXNwb3NhYmxlW10ge1xuICAgIHN3aXRjaCAodGhpcy5kaXNwb3NlT3JkZXIpIHtcbiAgICAgIGNhc2UgRGlzcG9zZU9yZGVyLkZpZm86IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW47XG4gICAgICB9XG4gICAgICBjYXNlIERpc3Bvc2VPcmRlci5MaWZvOiB7XG4gICAgICAgIHJldHVybiBbLi4udGhpcy5jaGlsZHJlbl0ucmV2ZXJzZSgpO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICBhc3NlcnROZXZlcih0aGlzLmRpc3Bvc2VPcmRlcik7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQSB7QGxpbmsgRGlzcG9zYWJsZUV4fSB0aGF0IGNvbWJpbmVzIG11bHRpcGxlIGRpc3Bvc2FibGVzIGFuZCBkaXNwb3NlcyBhbGwgb2YgdGhlbSB3aGVuIGl0IGlzXG4gKiBkaXNwb3NlZC5cbiAqL1xuZXhwb3J0IGNsYXNzIENvbWJpbmVEaXNwb3NhYmxlIGV4dGVuZHMgRGlzcG9zYWJsZUJhc2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IGNoaWxkcmVuOiByZWFkb25seSBEaXNwb3NhYmxlW107XG4gIHByaXZhdGUgcmVhZG9ubHkgZGlzcG9zZU9yZGVyOiBEaXNwb3NlT3JkZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgZXJyb3JCZWhhdmlvcjogRGlzcG9zZUVycm9yQmVoYXZpb3I7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2Yge0BsaW5rIENvbWJpbmVEaXNwb3NhYmxlfS5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmFtczogQ29tYmluZURpc3Bvc2FibGVDb25zdHJ1Y3RvclBhcmFtcykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5jaGlsZHJlbiA9IFsuLi5wYXJhbXMuZGlzcG9zYWJsZXNdO1xuICAgIHRoaXMuZGlzcG9zZU9yZGVyID0gcGFyYW1zLmRpc3Bvc2VPcmRlciA/PyBEaXNwb3NlT3JkZXIuTGlmbztcbiAgICB0aGlzLmVycm9yQmVoYXZpb3IgPSBwYXJhbXMuZXJyb3JCZWhhdmlvciA/PyBEaXNwb3NlRXJyb3JCZWhhdmlvci5BZ2dyZWdhdGU7XG4gICAgdGhpcy5tdWx0aXBsZURpc3Bvc2VCZWhhdmlvciA9IHBhcmFtcy5tdWx0aXBsZURpc3Bvc2VCZWhhdmlvciA/PyBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvci5JZ25vcmU7XG4gIH1cblxuICAvKipcbiAgICogRGlzcG9zZXMgYWxsIGNvbWJpbmVkIGNoaWxkcmVuIGluIHRoZSBjb25maWd1cmVkIHtAbGluayBEaXNwb3NlT3JkZXJ9LCBhcHBseWluZyB0aGUgY29uZmlndXJlZFxuICAgKiB7QGxpbmsgRGlzcG9zZUVycm9yQmVoYXZpb3J9IHdoZW4gYSBjaGlsZCB0aHJvd3MuXG4gICAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcGVyZm9ybURpc3Bvc2UoKTogdm9pZCB7XG4gICAgY29uc3QgZXJyb3JzOiB1bmtub3duW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIHRoaXMuZ2V0T3JkZXJlZENoaWxkcmVuKCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNoaWxkW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKHRoaXMuZXJyb3JCZWhhdmlvciA9PT0gRGlzcG9zZUVycm9yQmVoYXZpb3IuRmFpbEZhc3QpIHtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGVycm9ycy5wdXNoKGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IGNyZWF0ZUFnZ3JlZ2F0ZUVycm9yKGVycm9ycyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRPcmRlcmVkQ2hpbGRyZW4oKTogcmVhZG9ubHkgRGlzcG9zYWJsZVtdIHtcbiAgICBzd2l0Y2ggKHRoaXMuZGlzcG9zZU9yZGVyKSB7XG4gICAgICBjYXNlIERpc3Bvc2VPcmRlci5GaWZvOiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuO1xuICAgICAgfVxuICAgICAgY2FzZSBEaXNwb3NlT3JkZXIuTGlmbzoge1xuICAgICAgICByZXR1cm4gWy4uLnRoaXMuY2hpbGRyZW5dLnJldmVyc2UoKTtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgYXNzZXJ0TmV2ZXIodGhpcy5kaXNwb3NlT3JkZXIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIERpc3Bvc2VzIGFuIHtAbGluayBBc3luY0Rpc3Bvc2FibGV9LlxuICpcbiAqIFByZWZlciB0aGlzIG92ZXIgY2FsbGluZyBgYXN5bmNEaXNwb3NhYmxlW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKClgIGF0IHRoZSBjYWxsIHNpdGU6IGl0IHJlYWRzIGJldHRlciBhbmRcbiAqIGtlZXBzIHRoZSB3ZWxsLWtub3duIHN5bWJvbCByZWZlcmVuY2VkIGluIGEgc2luZ2xlIHBsYWNlLlxuICpcbiAqIEBwYXJhbSBhc3luY0Rpc3Bvc2FibGUgLSB0aGUgYXN5bmMgZGlzcG9zYWJsZSB0byBkaXNwb3NlXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIGRpc3Bvc2FsIGNvbXBsZXRlcy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRpc3Bvc2VBc3luYyhhc3luY0Rpc3Bvc2FibGU6IEFzeW5jRGlzcG9zYWJsZSk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBhc3luY0Rpc3Bvc2FibGVbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTtcbn1cblxuLyoqXG4gKiBUeXBlIGd1YXJkIHRvIGNoZWNrIGlmIGFuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSB7QGxpbmsgQXN5bmNEaXNwb3NhYmxlfSBpbnRlcmZhY2UuXG4gKlxuICogQHBhcmFtICR1bmtub3duIC0gdGhlIG9iamVjdCB0byBjaGVjayBmb3IgdGhlIHtAbGluayBBc3luY0Rpc3Bvc2FibGV9IGludGVyZmFjZVxuICogQHJldHVybnMgV2hldGhlciB0aGUgb2JqZWN0IGltcGxlbWVudHMgdGhlIHtAbGluayBBc3luY0Rpc3Bvc2FibGV9IGludGVyZmFjZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNBc3luY0Rpc3Bvc2FibGUoJHVua25vd246IHVua25vd24pOiAkdW5rbm93biBpcyBBc3luY0Rpc3Bvc2FibGUge1xuICBjb25zdCBhc3luY0Rpc3Bvc2FibGUgPSAkdW5rbm93biBhcyBQYXJ0aWFsPEFzeW5jRGlzcG9zYWJsZT47XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25vLWNvbXB1dGVkLXByb3BlcnR5LWV4aXN0ZW5jZS1jaGVjayAtLSBgT2JqZWN0Lmhhc093bmAgaXMgb3duLXByb3BlcnR5LW9ubHksIGFuZCBgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdYCBpcyBhIHByb3RvdHlwZSBtZXRob2Qgb24gZXZlcnkgY2xhc3MtYmFzZWQgZGlzcG9zYWJsZSBoZXJlLlxuICByZXR1cm4gISFhc3luY0Rpc3Bvc2FibGVbU3ltYm9sLmFzeW5jRGlzcG9zZV07XG59XG5cbi8qKlxuICogVHlwZSBndWFyZCB0byBjaGVjayBpZiBhbiBvYmplY3QgaW1wbGVtZW50cyB0aGUge0BsaW5rIEFzeW5jRGlzcG9zYWJsZUV4fSBpbnRlcmZhY2UuXG4gKlxuICogQHBhcmFtICR1bmtub3duIC0gdGhlIG9iamVjdCB0byBjaGVjayBmb3IgdGhlIHtAbGluayBBc3luY0Rpc3Bvc2FibGVFeH0gaW50ZXJmYWNlXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBvYmplY3QgaW1wbGVtZW50cyB0aGUge0BsaW5rIEFzeW5jRGlzcG9zYWJsZUV4fSBpbnRlcmZhY2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQXN5bmNEaXNwb3NhYmxlRXgoJHVua25vd246IHVua25vd24pOiAkdW5rbm93biBpcyBBc3luY0Rpc3Bvc2FibGVFeCB7XG4gIGNvbnN0IGFzeW5jRGlzcG9zYWJsZUV4ID0gJHVua25vd24gYXMgUGFydGlhbDxBc3luY0Rpc3Bvc2FibGVFeD47XG4gIHJldHVybiBpc0FzeW5jRGlzcG9zYWJsZSgkdW5rbm93bikgJiYgdHlwZW9mIGFzeW5jRGlzcG9zYWJsZUV4LmFzeW5jRGlzcG9zZSA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuLyoqXG4gKiBUeXBlIGd1YXJkIHRvIGNoZWNrIGlmIGFuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSB7QGxpbmsgRGlzcG9zYWJsZX0gaW50ZXJmYWNlLlxuICpcbiAqIEBwYXJhbSAkdW5rbm93biAtIHRoZSBvYmplY3QgdG8gY2hlY2sgZm9yIHRoZSB7QGxpbmsgRGlzcG9zYWJsZX0gaW50ZXJmYWNlXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBvYmplY3QgaW1wbGVtZW50cyB0aGUge0BsaW5rIERpc3Bvc2FibGV9IGludGVyZmFjZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNEaXNwb3NhYmxlKCR1bmtub3duOiB1bmtub3duKTogJHVua25vd24gaXMgRGlzcG9zYWJsZSB7XG4gIGNvbnN0IGRpc3Bvc2FibGUgPSAkdW5rbm93biBhcyBQYXJ0aWFsPERpc3Bvc2FibGU+O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby1jb21wdXRlZC1wcm9wZXJ0eS1leGlzdGVuY2UtY2hlY2sgLS0gYE9iamVjdC5oYXNPd25gIGlzIG93bi1wcm9wZXJ0eS1vbmx5LCBhbmQgYFtTeW1ib2wuZGlzcG9zZV1gIGlzIGEgcHJvdG90eXBlIG1ldGhvZCBvbiBldmVyeSBjbGFzcy1iYXNlZCBkaXNwb3NhYmxlIGhlcmUuXG4gIHJldHVybiAhIWRpc3Bvc2FibGVbU3ltYm9sLmRpc3Bvc2VdO1xufVxuXG4vKipcbiAqIFR5cGUgZ3VhcmQgdG8gY2hlY2sgaWYgYW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIHtAbGluayBEaXNwb3NhYmxlRXh9IGludGVyZmFjZS5cbiAqXG4gKiBAcGFyYW0gJHVua25vd24gLSB0aGUgb2JqZWN0IHRvIGNoZWNrIGZvciB0aGUge0BsaW5rIERpc3Bvc2FibGVFeH0gaW50ZXJmYWNlXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBvYmplY3QgaW1wbGVtZW50cyB0aGUge0BsaW5rIERpc3Bvc2FibGVFeH0gaW50ZXJmYWNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Rpc3Bvc2FibGVFeCgkdW5rbm93bjogdW5rbm93bik6ICR1bmtub3duIGlzIERpc3Bvc2FibGVFeCB7XG4gIGNvbnN0IGRpc3Bvc2FibGVFeCA9ICR1bmtub3duIGFzIFBhcnRpYWw8RGlzcG9zYWJsZUV4PjtcbiAgcmV0dXJuIGlzRGlzcG9zYWJsZSgkdW5rbm93bikgJiYgdHlwZW9mIGRpc3Bvc2FibGVFeC5kaXNwb3NlID09PSAnZnVuY3Rpb24nO1xufVxuXG4vKipcbiAqIEFkYXB0cyBhIHBsYWluIHtAbGluayBBc3luY0Rpc3Bvc2FibGV9IGludG8gYW4ge0BsaW5rIEFzeW5jRGlzcG9zYWJsZUV4fSBieSBhZGRpbmcgYSBjb252ZW5pZW5jZVxuICoge0BsaW5rIEFzeW5jRGlzcG9zYWJsZUV4LmFzeW5jRGlzcG9zZX0gbWV0aG9kIHRoYXQgZGVsZWdhdGVzIHRvIGBTeW1ib2wuYXN5bmNEaXNwb3NlYC5cbiAqXG4gKiBJZiB0aGUgb2JqZWN0IGFscmVhZHkgaW1wbGVtZW50cyB7QGxpbmsgQXN5bmNEaXNwb3NhYmxlRXh9LCBpdCBpcyByZXR1cm5lZCB1bmNoYW5nZWQuXG4gKlxuICogQHBhcmFtIGFzeW5jRGlzcG9zYWJsZSAtIHRoZSBhc3luYyBkaXNwb3NhYmxlIHRvIGFkYXB0XG4gKiBAcmV0dXJucyBBbiB7QGxpbmsgQXN5bmNEaXNwb3NhYmxlRXh9IHdyYXBwaW5nIHRoZSBhc3luYyBkaXNwb3NhYmxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9Bc3luY0Rpc3Bvc2FibGVFeChhc3luY0Rpc3Bvc2FibGU6IEFzeW5jRGlzcG9zYWJsZSk6IEFzeW5jRGlzcG9zYWJsZUV4IHtcbiAgcmV0dXJuIGlzQXN5bmNEaXNwb3NhYmxlRXgoYXN5bmNEaXNwb3NhYmxlKVxuICAgID8gYXN5bmNEaXNwb3NhYmxlXG4gICAgOiB7XG4gICAgICBhc3luY0Rpc3Bvc2U6IGFzeW5jRGlzcG9zZUFkYXB0ZWQsXG4gICAgICBbU3ltYm9sLmFzeW5jRGlzcG9zZV06IGFzeW5jRGlzcG9zZUFkYXB0ZWRcbiAgICB9O1xuXG4gIGZ1bmN0aW9uIGFzeW5jRGlzcG9zZUFkYXB0ZWQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGRpc3Bvc2VBc3luYyhhc3luY0Rpc3Bvc2FibGUpO1xuICB9XG59XG5cbi8qKlxuICogQWRhcHRzIGEgcGxhaW4ge0BsaW5rIERpc3Bvc2FibGV9IGludG8gYSB7QGxpbmsgRGlzcG9zYWJsZUV4fSBieSBhZGRpbmcgYSBjb252ZW5pZW5jZVxuICoge0BsaW5rIERpc3Bvc2FibGVFeC5kaXNwb3NlfSBtZXRob2QgdGhhdCBkZWxlZ2F0ZXMgdG8gYFN5bWJvbC5kaXNwb3NlYC5cbiAqXG4gKiBJZiB0aGUgb2JqZWN0IGFscmVhZHkgaW1wbGVtZW50cyB7QGxpbmsgRGlzcG9zYWJsZUV4fSwgaXQgaXMgcmV0dXJuZWQgdW5jaGFuZ2VkLlxuICpcbiAqIEBwYXJhbSBkaXNwb3NhYmxlIC0gdGhlIGRpc3Bvc2FibGUgdG8gYWRhcHRcbiAqIEByZXR1cm5zIEEge0BsaW5rIERpc3Bvc2FibGVFeH0gd3JhcHBpbmcgdGhlIGRpc3Bvc2FibGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0Rpc3Bvc2FibGVFeChkaXNwb3NhYmxlOiBEaXNwb3NhYmxlKTogRGlzcG9zYWJsZUV4IHtcbiAgcmV0dXJuIGlzRGlzcG9zYWJsZUV4KGRpc3Bvc2FibGUpXG4gICAgPyBkaXNwb3NhYmxlXG4gICAgOiB7XG4gICAgICBkaXNwb3NlOiBkaXNwb3NlQWRhcHRlZCxcbiAgICAgIFtTeW1ib2wuZGlzcG9zZV06IGRpc3Bvc2VBZGFwdGVkXG4gICAgfTtcblxuICBmdW5jdGlvbiBkaXNwb3NlQWRhcHRlZCgpOiB2b2lkIHtcbiAgICBkaXNwb3NlKGRpc3Bvc2FibGUpO1xuICB9XG59XG5cbi8qKlxuICogRGVjaWRlcyB3aGV0aGVyIGEgZGlzcG9zYWJsZSdzIHRlYXJkb3duIHNob3VsZCBydW4gb24gdGhlIGN1cnJlbnQgZGlzcG9zZSBjYWxsLCBhcHBseWluZyB0aGVcbiAqIHtAbGluayBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvcn0gcmUtZGlzcG9zZSBwb2xpY3kuIFNpbmdsZSBzb3VyY2Ugb2YgdGhlIGd1YXJkIHNoYXJlZCBieVxuICoge0BsaW5rIERpc3Bvc2FibGVCYXNlfSBhbmQge0BsaW5rIEFzeW5jRGlzcG9zYWJsZUJhc2V9LlxuICpcbiAqIEBwYXJhbSBpc0Rpc3Bvc2VkIC0gV2hldGhlciB0aGUgZGlzcG9zYWJsZSBoYXMgYWxyZWFkeSBiZWVuIGRpc3Bvc2VkIG9uY2UuXG4gKiBAcGFyYW0gbXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IgLSBUaGUgcmUtZGlzcG9zZSBiZWhhdmlvci5cbiAqIEByZXR1cm5zIGB0cnVlYCB3aGVuIHRoZSB0ZWFyZG93biBzaG91bGQgcnVuLCBgZmFsc2VgIHdoZW4gaXQgc2hvdWxkIGJlIHNraXBwZWQuXG4gKi9cbmZ1bmN0aW9uIHNob3VsZFBlcmZvcm1EaXNwb3NlKGlzRGlzcG9zZWQ6IGJvb2xlYW4sIG11bHRpcGxlRGlzcG9zZUJlaGF2aW9yOiBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvcik6IGJvb2xlYW4ge1xuICBpZiAoIWlzRGlzcG9zZWQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHN3aXRjaCAobXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IpIHtcbiAgICBjYXNlIE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yLklnbm9yZToge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjYXNlIE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yLkludm9rZToge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNhc2UgTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IuVGhyb3c6IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhpcyBkaXNwb3NhYmxlIGhhcyBhbHJlYWR5IGJlZW4gZGlzcG9zZWQuJyk7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIGFzc2VydE5ldmVyKG11bHRpcGxlRGlzcG9zZUJlaGF2aW9yKTtcbiAgICB9XG4gIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRQSxTQUFTLDRCQUE0QjtBQUNyQyxTQUFTLG1CQUFtQjtBQU1yQixJQUFLLHVCQUFMLGtCQUFLQSwwQkFBTDtBQUtMLEVBQUFBLDRDQUFBO0FBS0EsRUFBQUEsNENBQUE7QUFWVSxTQUFBQTtBQUFBLEdBQUE7QUFpQkwsSUFBSyxlQUFMLGtCQUFLQyxrQkFBTDtBQUtMLEVBQUFBLDRCQUFBO0FBS0EsRUFBQUEsNEJBQUE7QUFWVSxTQUFBQTtBQUFBLEdBQUE7QUFpQkwsSUFBSywwQkFBTCxrQkFBS0MsNkJBQUw7QUFJTCxFQUFBQSxrREFBQTtBQUtBLEVBQUFBLGtEQUFBO0FBS0EsRUFBQUEsa0RBQUE7QUFkVSxTQUFBQTtBQUFBLEdBQUE7QUF5SkwsTUFBZSxvQkFBaUQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNM0QsMEJBQW1EO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBTzdELElBQWMsYUFBc0I7QUFDbEMsV0FBTyxLQUFLO0FBQUEsRUFDZDtBQUFBLEVBRVEsY0FBYztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9mLGVBQThCO0FBQ25DLFdBQU8sS0FBSyxPQUFPLFlBQVksRUFBRTtBQUFBLEVBQ25DO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFRQSxPQUFjLE9BQU8sWUFBWSxJQUFtQjtBQUNsRCxRQUFJLENBQUMscUJBQXFCLEtBQUssYUFBYSxLQUFLLHVCQUF1QixHQUFHO0FBQ3pFO0FBQUEsSUFDRjtBQUVBLFNBQUssY0FBYztBQUNuQixVQUFNLEtBQUssb0JBQW9CO0FBQUEsRUFDakM7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SyxPQUFPLGtCQUFrQixpQkFBaUI7QUFDbEY7QUFRTyxTQUFTLGFBQWEsVUFBMkM7QUFDdEUsUUFBTSxhQUFhO0FBRW5CLFNBQU8sQ0FBQyxDQUFDLFdBQVcsT0FBTyxPQUFPO0FBQ3BDO0FBUU8sU0FBUyxlQUFlLFVBQTZDO0FBQzFFLFFBQU0sZUFBZTtBQUNyQixTQUFPLGFBQWEsUUFBUSxLQUFLLE9BQU8sYUFBYSxZQUFZO0FBQ25FO0FBV08sU0FBUyxvQkFBb0IsaUJBQXFEO0FBQ3ZGLFNBQU8sb0JBQW9CLGVBQWUsSUFDdEMsa0JBQ0E7QUFBQSxJQUNBLGNBQWM7QUFBQSxJQUNkLENBQUMsT0FBTyxZQUFZLEdBQUc7QUFBQSxFQUN6QjtBQUVGLFdBQVMsc0JBQXFDO0FBQzVDLFdBQU8sYUFBYSxlQUFlO0FBQUEsRUFDckM7QUFDRjtBQVdPLFNBQVMsZUFBZSxZQUFzQztBQUNuRSxTQUFPLGVBQWUsVUFBVSxJQUM1QixhQUNBO0FBQUEsSUFDQSxTQUFTO0FBQUEsSUFDVCxDQUFDLE9BQU8sT0FBTyxHQUFHO0FBQUEsRUFDcEI7QUFFRixXQUFTLGlCQUF1QjtBQUM5QixZQUFRLFVBQVU7QUFBQSxFQUNwQjtBQUNGO0FBV0EsU0FBUyxxQkFBcUIsWUFBcUIseUJBQTJEO0FBQzVHLE1BQUksQ0FBQyxZQUFZO0FBQ2YsV0FBTztBQUFBLEVBQ1Q7QUFFQSxVQUFRLHlCQUF5QjtBQUFBLElBQy9CLEtBQUssZ0JBQWdDO0FBQ25DLGFBQU87QUFBQSxJQUNUO0FBQUEsSUFDQSxLQUFLLGdCQUFnQztBQUNuQyxhQUFPO0FBQUEsSUFDVDtBQUFBLElBQ0EsS0FBSyxlQUErQjtBQUNsQyxZQUFNLElBQUksTUFBTSw0Q0FBNEM7QUFBQSxJQUM5RDtBQUFBLElBQ0EsU0FBUztBQUNQLGtCQUFZLHVCQUF1QjtBQUFBLElBQ3JDO0FBQUEsRUFDRjtBQUNGOyIsCiAgIm5hbWVzIjogWyJEaXNwb3NlRXJyb3JCZWhhdmlvciIsICJEaXNwb3NlT3JkZXIiLCAiTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IiXQp9Cg==
@@ -0,0 +1,24 @@
1
+ /// <reference path="./library.d.mts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * Contains utility functions for enums.
6
+ */
7
+ /**
8
+ * Get the key of an enum value.
9
+ *
10
+ * @typeParam T - The enum type.
11
+ * @param enumType - The enum type.
12
+ * @param value - The value to get the key of.
13
+ * @returns The key of the enum value.
14
+ */
15
+ export declare function getEnumKey<T extends Record<string, string>>(enumType: T, value: T[keyof T]): keyof T;
16
+ /**
17
+ * Get the value of an enum key.
18
+ *
19
+ * @typeParam T - The enum type.
20
+ * @param enumType - The enum type.
21
+ * @param key - The key to get the value of.
22
+ * @returns The value of the enum key.
23
+ */
24
+ export declare function getEnumValue<T extends Record<string, string>>(enumType: T, key: string): T[keyof T];
@@ -0,0 +1,61 @@
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 () {
7
+ function ensureDisposeSymbols(symbolConstructor = Symbol) {
8
+ symbolConstructor.asyncDispose ??= symbolConstructor.for('Symbol.asyncDispose');
9
+ symbolConstructor.dispose ??= symbolConstructor.for('Symbol.dispose');
10
+ }
11
+
12
+ function ensureBrowserProcess() {
13
+ const browserProcess = {
14
+ browser: true,
15
+ cwd() {
16
+ return '/';
17
+ },
18
+ env: {},
19
+ platform: 'android'
20
+ };
21
+
22
+ // eslint-disable-next-line obsidianmd/no-global-this, unicorn/no-unnecessary-global-this -- Must stay `globalThis`-qualified: in the emitted banner a bare `process` is a free identifier, so reading it where the host has none throws a ReferenceError instead of yielding `undefined`. That is the very case this function exists to handle.
23
+ const existingProcess = globalThis.process;
24
+
25
+ if (!existingProcess) {
26
+ // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
27
+ globalThis.process = browserProcess;
28
+ return;
29
+ }
30
+
31
+ if (existingProcess.versions?.node) {
32
+ return;
33
+ }
34
+
35
+ const existingProcessRecord = existingProcess;
36
+
37
+ for (const [key, value] of Object.entries(browserProcess)) {
38
+ existingProcessRecord[key] ??= value;
39
+ }
40
+
41
+ existingProcessRecord['browser'] = true;
42
+ }
43
+
44
+ (function initEsm() {
45
+ ensureDisposeSymbols();
46
+ ensureBrowserProcess();
47
+ })();
48
+ })();
49
+
50
+ import { ensureNonNullable } from "./type-guards.mjs";
51
+ function getEnumKey(enumType, value) {
52
+ return ensureNonNullable(Object.keys(enumType).find((k) => enumType[k] === value), `Invalid enum value: ${value}`);
53
+ }
54
+ function getEnumValue(enumType, key) {
55
+ return ensureNonNullable(enumType[key], `Invalid enum key: ${key}`);
56
+ }
57
+ export {
58
+ getEnumKey,
59
+ getEnumValue
60
+ };
61
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2VudW0udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBDb250YWlucyB1dGlsaXR5IGZ1bmN0aW9ucyBmb3IgZW51bXMuXG4gKi9cblxuaW1wb3J0IHsgZW5zdXJlTm9uTnVsbGFibGUgfSBmcm9tICcuL3R5cGUtZ3VhcmRzLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIGtleSBvZiBhbiBlbnVtIHZhbHVlLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSBlbnVtIHR5cGUuXG4gKiBAcGFyYW0gZW51bVR5cGUgLSBUaGUgZW51bSB0eXBlLlxuICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIGdldCB0aGUga2V5IG9mLlxuICogQHJldHVybnMgVGhlIGtleSBvZiB0aGUgZW51bSB2YWx1ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVudW1LZXk8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KGVudW1UeXBlOiBULCB2YWx1ZTogVFtrZXlvZiBUXSk6IGtleW9mIFQge1xuICByZXR1cm4gZW5zdXJlTm9uTnVsbGFibGUoT2JqZWN0LmtleXMoZW51bVR5cGUpLmZpbmQoKGspID0+IGVudW1UeXBlW2tdID09PSB2YWx1ZSksIGBJbnZhbGlkIGVudW0gdmFsdWU6ICR7dmFsdWV9YCk7XG59XG5cbi8qKlxuICogR2V0IHRoZSB2YWx1ZSBvZiBhbiBlbnVtIGtleS5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgZW51bSB0eXBlLlxuICogQHBhcmFtIGVudW1UeXBlIC0gVGhlIGVudW0gdHlwZS5cbiAqIEBwYXJhbSBrZXkgLSBUaGUga2V5IHRvIGdldCB0aGUgdmFsdWUgb2YuXG4gKiBAcmV0dXJucyBUaGUgdmFsdWUgb2YgdGhlIGVudW0ga2V5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW51bVZhbHVlPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PihlbnVtVHlwZTogVCwga2V5OiBzdHJpbmcpOiBUW2tleW9mIFRdIHtcbiAgcmV0dXJuIGVuc3VyZU5vbk51bGxhYmxlKGVudW1UeXBlW2tleV0sIGBJbnZhbGlkIGVudW0ga2V5OiAke2tleX1gKSBhcyBUW2tleW9mIFRdO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU1BLFNBQVMseUJBQXlCO0FBVTNCLFNBQVMsV0FBNkMsVUFBYSxPQUE0QjtBQUNwRyxTQUFPLGtCQUFrQixPQUFPLEtBQUssUUFBUSxFQUFFLEtBQUssQ0FBQyxNQUFNLFNBQVMsQ0FBQyxNQUFNLEtBQUssR0FBRyx1QkFBdUIsS0FBSyxFQUFFO0FBQ25IO0FBVU8sU0FBUyxhQUErQyxVQUFhLEtBQXlCO0FBQ25HLFNBQU8sa0JBQWtCLFNBQVMsR0FBRyxHQUFHLHFCQUFxQixHQUFHLEVBQUU7QUFDcEU7IiwKICAibmFtZXMiOiBbXQp9Cg==