obsidian-dev-utils 80.1.0 → 81.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.
- package/CHANGELOG.md +11 -0
- package/dist/dev/main.js +30208 -0
- package/dist/dev/manifest.json +9 -0
- package/dist/lib/cjs/async-events.cjs +9 -1
- package/dist/lib/cjs/async-events.d.cts +8 -0
- package/dist/lib/cjs/async.cjs +89 -34
- package/dist/lib/cjs/async.d.cts +67 -15
- package/dist/lib/cjs/debug.cjs +26 -9
- package/dist/lib/cjs/debug.d.cts +23 -5
- package/dist/lib/cjs/error.cjs +4 -5
- package/dist/lib/cjs/error.d.cts +19 -4
- package/dist/lib/cjs/html-element.cjs +1 -1
- package/dist/lib/cjs/html-element.d.cts +2 -0
- package/dist/lib/cjs/library.cjs +2 -2
- package/dist/lib/cjs/object-utils.cjs +233 -128
- package/dist/lib/cjs/object-utils.d.cts +19 -4
- package/dist/lib/cjs/obsidian/async-with-notice.cjs +9 -6
- package/dist/lib/cjs/obsidian/async-with-notice.d.cts +9 -0
- package/dist/lib/cjs/obsidian/attachment-path.cjs +45 -13
- package/dist/lib/cjs/obsidian/attachment-path.d.cts +38 -8
- package/dist/lib/cjs/obsidian/backlink.cjs +6 -6
- package/dist/lib/cjs/obsidian/command-handlers/abstract-file-command-handler.cjs +53 -16
- package/dist/lib/cjs/obsidian/command-handlers/abstract-file-command-handler.d.cts +81 -9
- package/dist/lib/cjs/obsidian/command-handlers/editor-command-handler.cjs +25 -5
- package/dist/lib/cjs/obsidian/command-handlers/editor-command-handler.d.cts +35 -1
- package/dist/lib/cjs/obsidian/command-handlers/file-command-handler.cjs +33 -19
- package/dist/lib/cjs/obsidian/command-handlers/file-command-handler.d.cts +43 -17
- package/dist/lib/cjs/obsidian/command-handlers/folder-command-handler.cjs +33 -19
- package/dist/lib/cjs/obsidian/command-handlers/folder-command-handler.d.cts +43 -17
- package/dist/lib/cjs/obsidian/components/all-windows-event-component.cjs +17 -9
- package/dist/lib/cjs/obsidian/components/all-windows-event-component.d.cts +48 -8
- package/dist/lib/cjs/obsidian/components/plugin-settings-component.cjs +24 -8
- package/dist/lib/cjs/obsidian/components/plugin-settings-component.d.cts +25 -4
- package/dist/lib/cjs/obsidian/components/rename-delete-handler-component.cjs +144 -65
- package/dist/lib/cjs/obsidian/components/rename-delete-handler-component.d.cts +3 -0
- package/dist/lib/cjs/obsidian/dataview-link.cjs +7 -2
- package/dist/lib/cjs/obsidian/dataview-link.d.cts +20 -5
- package/dist/lib/cjs/obsidian/dataview.cjs +27 -10
- package/dist/lib/cjs/obsidian/dataview.d.cts +19 -4
- package/dist/lib/cjs/obsidian/file-change.cjs +103 -27
- package/dist/lib/cjs/obsidian/file-change.d.cts +50 -13
- package/dist/lib/cjs/obsidian/file-manager.cjs +61 -32
- package/dist/lib/cjs/obsidian/file-manager.d.cts +63 -13
- package/dist/lib/cjs/obsidian/file-system.cjs +122 -23
- package/dist/lib/cjs/obsidian/file-system.d.cts +168 -39
- package/dist/lib/cjs/obsidian/frontmatter.cjs +7 -2
- package/dist/lib/cjs/obsidian/link.cjs +266 -122
- package/dist/lib/cjs/obsidian/link.d.cts +84 -20
- package/dist/lib/cjs/obsidian/logger.cjs +48 -22
- package/dist/lib/cjs/obsidian/logger.d.cts +26 -5
- package/dist/lib/cjs/obsidian/loop.cjs +14 -4
- package/dist/lib/cjs/obsidian/loop.d.cts +5 -0
- package/dist/lib/cjs/obsidian/markdown-code-block-processor.cjs +155 -107
- package/dist/lib/cjs/obsidian/markdown.cjs +40 -11
- package/dist/lib/cjs/obsidian/markdown.d.cts +76 -16
- package/dist/lib/cjs/obsidian/metadata-cache.cjs +28 -14
- package/dist/lib/cjs/obsidian/metadata-cache.d.cts +76 -16
- package/dist/lib/cjs/obsidian/path-settings.cjs +5 -2
- package/dist/lib/cjs/obsidian/plugin/plugin-event-source.cjs +5 -1
- package/dist/lib/cjs/obsidian/plugin/plugin-event-source.d.cts +4 -0
- package/dist/lib/cjs/obsidian/plugin/plugin-settings-tab.cjs +15 -7
- package/dist/lib/cjs/obsidian/plugin/plugin-settings-tab.d.cts +39 -8
- package/dist/lib/cjs/obsidian/plugin/plugin.cjs +3 -2
- package/dist/lib/cjs/obsidian/plugin/plugin.d.cts +4 -4
- package/dist/lib/cjs/obsidian/queue.cjs +9 -7
- package/dist/lib/cjs/obsidian/resource-url.cjs +7 -2
- package/dist/lib/cjs/obsidian/resource-url.d.cts +19 -4
- package/dist/lib/cjs/obsidian/status-bar-item-registrar.cjs +4 -2
- package/dist/lib/cjs/obsidian/status-bar-item-registrar.d.cts +6 -2
- package/dist/lib/cjs/obsidian/vault-delete.cjs +19 -15
- package/dist/lib/cjs/obsidian/vault-delete.d.cts +11 -6
- package/dist/lib/cjs/obsidian/vault.cjs +116 -59
- package/dist/lib/cjs/obsidian/vault.d.cts +178 -41
- package/dist/lib/cjs/path.cjs +12 -5
- package/dist/lib/cjs/path.d.cts +15 -3
- package/dist/lib/cjs/reg-exp.cjs +101 -78
- package/dist/lib/cjs/script-utils/build.cjs +9 -5
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/change-extension-plugin.cjs +34 -14
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.cjs +20 -5
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.d.cts +23 -5
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/dependency.cjs +11 -4
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/fix-esm-plugin.cjs +6 -2
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/fix-source-maps-plugin.cjs +31 -12
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/fix-source-maps-plugin.d.cts +19 -4
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/obsidian-plugin-builder.cjs +7 -7
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/preprocess-plugin.cjs +12 -3
- package/dist/lib/cjs/script-utils/cli-utils.cjs +6 -2
- package/dist/lib/cjs/script-utils/exec.cjs +47 -12
- package/dist/lib/cjs/script-utils/formatters/dprint.cjs +3 -3
- package/dist/lib/cjs/script-utils/json.cjs +9 -5
- package/dist/lib/cjs/script-utils/json.d.cts +38 -8
- package/dist/lib/cjs/script-utils/linters/eslint-rules/no-unused-params-members.cjs +8 -3
- package/dist/lib/cjs/script-utils/linters/eslint-rules/require-component-suffix.cjs +27 -7
- package/dist/lib/cjs/script-utils/linters/eslint-rules/require-method-template.cjs +7 -3
- package/dist/lib/cjs/script-utils/linters/eslint-rules/require-super-call.cjs +8 -3
- package/dist/lib/cjs/script-utils/linters/eslint.cjs +3 -3
- package/dist/lib/cjs/script-utils/linters/markdownlint.cjs +3 -3
- package/dist/lib/cjs/script-utils/linters/over-exposure.cjs +72 -30
- package/dist/lib/cjs/script-utils/npm-publish.cjs +2 -2
- package/dist/lib/cjs/script-utils/npm.cjs +18 -9
- package/dist/lib/cjs/script-utils/root.cjs +20 -5
- package/dist/lib/cjs/script-utils/root.d.cts +45 -9
- package/dist/lib/cjs/script-utils/validate-declarations.cjs +4 -3
- package/dist/lib/cjs/script-utils/version.cjs +36 -19
- package/dist/lib/cjs/strict-proxy.cjs +10 -1
- package/dist/lib/cjs/string.cjs +63 -22
- package/dist/lib/cjs/string.d.cts +188 -40
- package/dist/lib/esm/async-events.d.mts +8 -0
- package/dist/lib/esm/async-events.mjs +9 -1
- package/dist/lib/esm/async.d.mts +67 -15
- package/dist/lib/esm/async.mjs +89 -34
- package/dist/lib/esm/debug.d.mts +23 -5
- package/dist/lib/esm/debug.mjs +26 -9
- package/dist/lib/esm/error.d.mts +19 -4
- package/dist/lib/esm/error.mjs +4 -5
- package/dist/lib/esm/html-element.d.mts +2 -0
- package/dist/lib/esm/html-element.mjs +1 -1
- package/dist/lib/esm/library.mjs +2 -2
- package/dist/lib/esm/object-utils.d.mts +19 -4
- package/dist/lib/esm/object-utils.mjs +233 -128
- package/dist/lib/esm/obsidian/async-with-notice.d.mts +9 -0
- package/dist/lib/esm/obsidian/async-with-notice.mjs +9 -6
- package/dist/lib/esm/obsidian/attachment-path.d.mts +38 -8
- package/dist/lib/esm/obsidian/attachment-path.mjs +45 -13
- package/dist/lib/esm/obsidian/backlink.mjs +6 -6
- package/dist/lib/esm/obsidian/command-handlers/abstract-file-command-handler.d.mts +81 -9
- package/dist/lib/esm/obsidian/command-handlers/abstract-file-command-handler.mjs +53 -16
- package/dist/lib/esm/obsidian/command-handlers/editor-command-handler.d.mts +35 -1
- package/dist/lib/esm/obsidian/command-handlers/editor-command-handler.mjs +25 -5
- package/dist/lib/esm/obsidian/command-handlers/file-command-handler.d.mts +43 -17
- package/dist/lib/esm/obsidian/command-handlers/file-command-handler.mjs +33 -19
- package/dist/lib/esm/obsidian/command-handlers/folder-command-handler.d.mts +43 -17
- package/dist/lib/esm/obsidian/command-handlers/folder-command-handler.mjs +33 -19
- package/dist/lib/esm/obsidian/components/all-windows-event-component.d.mts +48 -8
- package/dist/lib/esm/obsidian/components/all-windows-event-component.mjs +17 -9
- package/dist/lib/esm/obsidian/components/plugin-settings-component.d.mts +25 -4
- package/dist/lib/esm/obsidian/components/plugin-settings-component.mjs +24 -8
- package/dist/lib/esm/obsidian/components/rename-delete-handler-component.d.mts +3 -0
- package/dist/lib/esm/obsidian/components/rename-delete-handler-component.mjs +145 -69
- package/dist/lib/esm/obsidian/dataview-link.d.mts +20 -5
- package/dist/lib/esm/obsidian/dataview-link.mjs +7 -2
- package/dist/lib/esm/obsidian/dataview.d.mts +19 -4
- package/dist/lib/esm/obsidian/dataview.mjs +27 -10
- package/dist/lib/esm/obsidian/file-change.d.mts +50 -13
- package/dist/lib/esm/obsidian/file-change.mjs +104 -27
- package/dist/lib/esm/obsidian/file-manager.d.mts +63 -13
- package/dist/lib/esm/obsidian/file-manager.mjs +65 -33
- package/dist/lib/esm/obsidian/file-system.d.mts +168 -39
- package/dist/lib/esm/obsidian/file-system.mjs +122 -23
- package/dist/lib/esm/obsidian/frontmatter.mjs +7 -2
- package/dist/lib/esm/obsidian/link.d.mts +84 -20
- package/dist/lib/esm/obsidian/link.mjs +266 -122
- package/dist/lib/esm/obsidian/logger.d.mts +26 -5
- package/dist/lib/esm/obsidian/logger.mjs +48 -22
- package/dist/lib/esm/obsidian/loop.d.mts +5 -0
- package/dist/lib/esm/obsidian/loop.mjs +14 -4
- package/dist/lib/esm/obsidian/markdown-code-block-processor.mjs +155 -107
- package/dist/lib/esm/obsidian/markdown.d.mts +76 -16
- package/dist/lib/esm/obsidian/markdown.mjs +40 -11
- package/dist/lib/esm/obsidian/metadata-cache.d.mts +76 -16
- package/dist/lib/esm/obsidian/metadata-cache.mjs +28 -14
- package/dist/lib/esm/obsidian/path-settings.mjs +5 -2
- package/dist/lib/esm/obsidian/plugin/plugin-event-source.d.mts +4 -0
- package/dist/lib/esm/obsidian/plugin/plugin-event-source.mjs +5 -1
- package/dist/lib/esm/obsidian/plugin/plugin-settings-tab.d.mts +39 -8
- package/dist/lib/esm/obsidian/plugin/plugin-settings-tab.mjs +15 -7
- package/dist/lib/esm/obsidian/plugin/plugin.d.mts +4 -4
- package/dist/lib/esm/obsidian/plugin/plugin.mjs +5 -7
- package/dist/lib/esm/obsidian/queue.mjs +9 -7
- package/dist/lib/esm/obsidian/resource-url.d.mts +19 -4
- package/dist/lib/esm/obsidian/resource-url.mjs +7 -2
- package/dist/lib/esm/obsidian/status-bar-item-registrar.d.mts +6 -2
- package/dist/lib/esm/obsidian/status-bar-item-registrar.mjs +4 -2
- package/dist/lib/esm/obsidian/vault-delete.d.mts +11 -6
- package/dist/lib/esm/obsidian/vault-delete.mjs +19 -15
- package/dist/lib/esm/obsidian/vault.d.mts +178 -41
- package/dist/lib/esm/obsidian/vault.mjs +116 -59
- package/dist/lib/esm/path.d.mts +15 -3
- package/dist/lib/esm/path.mjs +12 -5
- package/dist/lib/esm/reg-exp.mjs +101 -78
- package/dist/lib/esm/script-utils/build.mjs +9 -5
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/change-extension-plugin.mjs +34 -14
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.d.mts +23 -5
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.mjs +20 -5
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/dependency.mjs +11 -4
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/fix-esm-plugin.mjs +6 -2
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/fix-source-maps-plugin.d.mts +19 -4
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/fix-source-maps-plugin.mjs +31 -12
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/obsidian-plugin-builder.mjs +7 -7
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/preprocess-plugin.mjs +12 -3
- package/dist/lib/esm/script-utils/cli-utils.mjs +6 -2
- package/dist/lib/esm/script-utils/exec.mjs +47 -12
- package/dist/lib/esm/script-utils/formatters/dprint.mjs +3 -3
- package/dist/lib/esm/script-utils/json.d.mts +38 -8
- package/dist/lib/esm/script-utils/json.mjs +9 -5
- package/dist/lib/esm/script-utils/linters/eslint-rules/no-unused-params-members.mjs +8 -3
- package/dist/lib/esm/script-utils/linters/eslint-rules/require-component-suffix.mjs +27 -7
- package/dist/lib/esm/script-utils/linters/eslint-rules/require-method-template.mjs +7 -3
- package/dist/lib/esm/script-utils/linters/eslint-rules/require-super-call.mjs +8 -3
- package/dist/lib/esm/script-utils/linters/eslint.mjs +3 -3
- package/dist/lib/esm/script-utils/linters/markdownlint.mjs +3 -3
- package/dist/lib/esm/script-utils/linters/over-exposure.mjs +72 -30
- package/dist/lib/esm/script-utils/npm-publish.mjs +2 -2
- package/dist/lib/esm/script-utils/npm.mjs +18 -9
- package/dist/lib/esm/script-utils/root.d.mts +45 -9
- package/dist/lib/esm/script-utils/root.mjs +20 -5
- package/dist/lib/esm/script-utils/validate-declarations.mjs +4 -3
- package/dist/lib/esm/script-utils/version.mjs +36 -19
- package/dist/lib/esm/strict-proxy.mjs +10 -1
- package/dist/lib/esm/string.d.mts +188 -40
- package/dist/lib/esm/string.mjs +63 -22
- package/dist/styles.css +5 -1
- package/package.json +9 -9
package/dist/lib/esm/async.mjs
CHANGED
|
@@ -53,7 +53,11 @@ async function addErrorHandler(asyncFn, stackTrace) {
|
|
|
53
53
|
try {
|
|
54
54
|
await asyncFn();
|
|
55
55
|
} catch (asyncError) {
|
|
56
|
-
const wrappedError = new CustomStackTraceError(
|
|
56
|
+
const wrappedError = new CustomStackTraceError({
|
|
57
|
+
cause: asyncError,
|
|
58
|
+
message: ASYNC_WRAPPER_ERROR_MESSAGE,
|
|
59
|
+
stackTrace
|
|
60
|
+
});
|
|
57
61
|
if (handleSilentError(wrappedError)) {
|
|
58
62
|
return;
|
|
59
63
|
}
|
|
@@ -128,7 +132,14 @@ async function ignoreError(promise, fallbackValue) {
|
|
|
128
132
|
try {
|
|
129
133
|
return await promise;
|
|
130
134
|
} catch (e) {
|
|
131
|
-
ignoreErrorDebugger(
|
|
135
|
+
ignoreErrorDebugger(
|
|
136
|
+
"Ignored error",
|
|
137
|
+
new CustomStackTraceError({
|
|
138
|
+
cause: e,
|
|
139
|
+
message: "Ignored error",
|
|
140
|
+
stackTrace
|
|
141
|
+
})
|
|
142
|
+
);
|
|
132
143
|
return fallbackValue;
|
|
133
144
|
}
|
|
134
145
|
}
|
|
@@ -153,12 +164,16 @@ function invokeAsyncSafely(asyncFn, stackTrace) {
|
|
|
153
164
|
trackAsyncOperation(addErrorHandler(() => result, stackTrace));
|
|
154
165
|
}
|
|
155
166
|
}
|
|
156
|
-
function invokeAsyncSafelyAfterDelay(
|
|
157
|
-
|
|
167
|
+
function invokeAsyncSafelyAfterDelay(params) {
|
|
168
|
+
const {
|
|
169
|
+
asyncFn,
|
|
170
|
+
delayInMilliseconds = 0
|
|
171
|
+
} = params;
|
|
172
|
+
const abortSignal = params.abortSignal ?? abortSignalNever();
|
|
158
173
|
abortSignal.throwIfAborted();
|
|
159
|
-
stackTrace
|
|
174
|
+
const stackTrace = params.stackTrace ?? getStackTrace(1);
|
|
160
175
|
invokeAsyncSafely(async () => {
|
|
161
|
-
await sleep(
|
|
176
|
+
await sleep({ abortSignal, milliseconds: delayInMilliseconds, shouldThrowOnAbort: true });
|
|
162
177
|
await asyncFn(abortSignal);
|
|
163
178
|
}, stackTrace);
|
|
164
179
|
}
|
|
@@ -238,12 +253,15 @@ async function queueMicrotaskAsync() {
|
|
|
238
253
|
});
|
|
239
254
|
});
|
|
240
255
|
}
|
|
241
|
-
async function requestAnimationFrameAsync() {
|
|
242
|
-
|
|
256
|
+
async function requestAnimationFrameAsync(fallbackTimeoutInMilliseconds) {
|
|
257
|
+
const requestAnimationFrameAsyncPromise = new Promise((resolve) => {
|
|
243
258
|
window.requestAnimationFrame(() => {
|
|
244
259
|
resolve();
|
|
245
260
|
});
|
|
246
261
|
});
|
|
262
|
+
const DEFAULT_FALLBACK_TIMEOUT_IN_MILLISECONDS = 100;
|
|
263
|
+
fallbackTimeoutInMilliseconds ??= DEFAULT_FALLBACK_TIMEOUT_IN_MILLISECONDS;
|
|
264
|
+
return Promise.race([requestAnimationFrameAsyncPromise, fallbackTimeoutInMilliseconds > 0 ? sleep({ milliseconds: fallbackTimeoutInMilliseconds }) : neverEnds()]);
|
|
247
265
|
}
|
|
248
266
|
async function retryWithTimeout(params) {
|
|
249
267
|
const retryWithTimeoutDebugger = getLibDebugger("Async:retryWithTimeout");
|
|
@@ -271,28 +289,37 @@ async function retryWithTimeout(params) {
|
|
|
271
289
|
isSuccess = await params.operationFn(combinedAbortSignal);
|
|
272
290
|
} catch (error) {
|
|
273
291
|
if (combinedAbortSignal.aborted || !fullOptions.shouldRetryOnError || terminateRetryErrors.has(error)) {
|
|
274
|
-
throw new CustomStackTraceError(
|
|
292
|
+
throw new CustomStackTraceError({
|
|
293
|
+
cause: error,
|
|
294
|
+
message: "retryWithTimeout failed",
|
|
295
|
+
stackTrace
|
|
296
|
+
});
|
|
275
297
|
}
|
|
276
298
|
printError(error);
|
|
277
299
|
isSuccess = false;
|
|
278
300
|
}
|
|
279
301
|
if (isSuccess) {
|
|
280
|
-
printWithStackTrace(
|
|
281
|
-
|
|
282
|
-
|
|
302
|
+
printWithStackTrace({
|
|
303
|
+
args: [{
|
|
304
|
+
operationFn: params.operationFn,
|
|
305
|
+
operationName: params.operationName ?? ""
|
|
306
|
+
}],
|
|
307
|
+
debuggerInstance: retryWithTimeoutDebugger,
|
|
308
|
+
message: `Retry completed successfully after ${String(attempt)} attempts`,
|
|
309
|
+
stackTrace
|
|
283
310
|
});
|
|
284
311
|
return;
|
|
285
312
|
}
|
|
286
|
-
printWithStackTrace(
|
|
287
|
-
|
|
288
|
-
stackTrace,
|
|
289
|
-
`Retry attempt ${String(attempt)} completed unsuccessfully. Trying again in ${String(fullOptions.retryDelayInMilliseconds)} milliseconds`,
|
|
290
|
-
{
|
|
313
|
+
printWithStackTrace({
|
|
314
|
+
args: [{
|
|
291
315
|
operationFn: params.operationFn,
|
|
292
316
|
operationName: params.operationName ?? ""
|
|
293
|
-
}
|
|
294
|
-
|
|
295
|
-
|
|
317
|
+
}],
|
|
318
|
+
debuggerInstance: retryWithTimeoutDebugger,
|
|
319
|
+
message: `Retry attempt ${String(attempt)} completed unsuccessfully. Trying again in ${String(fullOptions.retryDelayInMilliseconds)} milliseconds`,
|
|
320
|
+
stackTrace
|
|
321
|
+
});
|
|
322
|
+
await sleep({ abortSignal, milliseconds: fullOptions.retryDelayInMilliseconds });
|
|
296
323
|
}
|
|
297
324
|
},
|
|
298
325
|
operationName: params.operationName ?? "",
|
|
@@ -314,15 +341,24 @@ async function runWithTimeout(params) {
|
|
|
314
341
|
if (hasResult) {
|
|
315
342
|
return result;
|
|
316
343
|
}
|
|
317
|
-
throw new CustomStackTraceError(
|
|
344
|
+
throw new CustomStackTraceError({
|
|
345
|
+
cause: runAbortController.signal.reason,
|
|
346
|
+
message: "Run with timeout failed",
|
|
347
|
+
stackTrace
|
|
348
|
+
});
|
|
318
349
|
async function run() {
|
|
319
350
|
try {
|
|
320
351
|
result = await params.operationFn(runAbortController.signal);
|
|
321
352
|
const duration = Math.trunc(performance.now() - startTime);
|
|
322
|
-
printWithStackTrace(
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
353
|
+
printWithStackTrace({
|
|
354
|
+
args: [{
|
|
355
|
+
context: params.context,
|
|
356
|
+
operationFn: params.operationFn,
|
|
357
|
+
operationName: params.operationName ?? ""
|
|
358
|
+
}],
|
|
359
|
+
debuggerInstance: runWithTimeoutDebugger,
|
|
360
|
+
message: `Execution time: ${String(duration)} milliseconds`,
|
|
361
|
+
stackTrace
|
|
326
362
|
});
|
|
327
363
|
hasResult = true;
|
|
328
364
|
} catch (e) {
|
|
@@ -333,15 +369,20 @@ async function runWithTimeout(params) {
|
|
|
333
369
|
}
|
|
334
370
|
}
|
|
335
371
|
async function innerTimeout() {
|
|
336
|
-
await sleep(params.timeoutInMilliseconds
|
|
372
|
+
await sleep({ abortSignal: timeoutAbortController.signal, milliseconds: params.timeoutInMilliseconds });
|
|
337
373
|
if (isCompleted) {
|
|
338
374
|
return;
|
|
339
375
|
}
|
|
340
376
|
const duration = Math.trunc(performance.now() - startTime);
|
|
341
|
-
printWithStackTrace(
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
377
|
+
printWithStackTrace({
|
|
378
|
+
args: [{
|
|
379
|
+
context: params.context,
|
|
380
|
+
operationFn: params.operationFn,
|
|
381
|
+
operationName: params.operationName ?? ""
|
|
382
|
+
}],
|
|
383
|
+
debuggerInstance: runWithTimeoutDebugger,
|
|
384
|
+
message: `Timed out after ${String(duration)} milliseconds`,
|
|
385
|
+
stackTrace
|
|
345
386
|
});
|
|
346
387
|
const timeoutContext = normalizeOptionalProperties({
|
|
347
388
|
duration,
|
|
@@ -374,14 +415,28 @@ async function setTimeoutAsync(delay) {
|
|
|
374
415
|
window.setTimeout(resolve, delay);
|
|
375
416
|
});
|
|
376
417
|
}
|
|
377
|
-
async function sleep(
|
|
418
|
+
async function sleep(params) {
|
|
419
|
+
const {
|
|
420
|
+
abortSignal,
|
|
421
|
+
milliseconds,
|
|
422
|
+
shouldThrowOnAbort
|
|
423
|
+
} = params;
|
|
378
424
|
await waitForAbort(abortSignalAny(abortSignal, abortSignalTimeout(milliseconds)));
|
|
379
425
|
if (shouldThrowOnAbort) {
|
|
380
426
|
abortSignal?.throwIfAborted();
|
|
381
427
|
}
|
|
382
428
|
}
|
|
383
|
-
async function timeout(
|
|
384
|
-
|
|
429
|
+
async function timeout(params) {
|
|
430
|
+
const {
|
|
431
|
+
abortSignal,
|
|
432
|
+
shouldThrowOnAbort,
|
|
433
|
+
timeoutInMilliseconds
|
|
434
|
+
} = params;
|
|
435
|
+
await sleep(normalizeOptionalProperties({
|
|
436
|
+
abortSignal,
|
|
437
|
+
milliseconds: timeoutInMilliseconds,
|
|
438
|
+
shouldThrowOnAbort
|
|
439
|
+
}));
|
|
385
440
|
throw new Error(`Timed out in ${String(timeoutInMilliseconds)} milliseconds`);
|
|
386
441
|
}
|
|
387
442
|
async function toArray(iter) {
|
|
@@ -423,4 +478,4 @@ export {
|
|
|
423
478
|
toArray,
|
|
424
479
|
waitForAllAsyncOperations
|
|
425
480
|
};
|
|
426
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2FzeW5jLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIGFzeW5jaHJvbm91cyBvcGVyYXRpb25zLlxuICovXG5cbmltcG9ydCB0eXBlIHsgUHJvbWlzYWJsZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB0eXBlIHtcbiAgR2VuZXJpY0FzeW5jRnVuY3Rpb24sXG4gIEdlbmVyaWNGdW5jdGlvbixcbiAgR2VuZXJpY1ZvaWRGdW5jdGlvblxufSBmcm9tICcuL2Z1bmN0aW9uLnRzJztcblxuaW1wb3J0IHtcbiAgYWJvcnRTaWduYWxBbnksXG4gIGFib3J0U2lnbmFsTmV2ZXIsXG4gIGFib3J0U2lnbmFsVGltZW91dCxcbiAgd2FpdEZvckFib3J0XG59IGZyb20gJy4vYWJvcnQtY29udHJvbGxlci50cyc7XG5pbXBvcnQge1xuICBnZXRMaWJEZWJ1Z2dlcixcbiAgcHJpbnRXaXRoU3RhY2tUcmFjZVxufSBmcm9tICcuL2RlYnVnLnRzJztcbmltcG9ydCB7XG4gIEFTWU5DX1dSQVBQRVJfRVJST1JfTUVTU0FHRSxcbiAgQ3VzdG9tU3RhY2tUcmFjZUVycm9yLFxuICBlbWl0QXN5bmNFcnJvckV2ZW50LFxuICBnZXRTdGFja1RyYWNlLFxuICBwcmludEVycm9yLFxuICBTaWxlbnRFcnJvclxufSBmcm9tICcuL2Vycm9yLnRzJztcbmltcG9ydCB7XG4gIG5vb3AsXG4gIG5vb3BBc3luY1xufSBmcm9tICcuL2Z1bmN0aW9uLnRzJztcbmltcG9ydCB7IG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllcyB9IGZyb20gJy4vb2JqZWN0LXV0aWxzLnRzJztcbmltcG9ydCB7XG4gIGFzc2VydCxcbiAgYXNzZXJ0Tm9uTnVsbGFibGVcbn0gZnJvbSAnLi90eXBlLWd1YXJkcy50cyc7XG5cbi8qKlxuICogQSB0eXBlIHJlcHJlc2VudGluZyBhIGZ1bmN0aW9uIHRoYXQgcmVzb2x2ZXMgYSB7QGxpbmsgUHJvbWlzZX0uXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgdGhlIHZhbHVlLlxuICovXG5leHBvcnQgdHlwZSBQcm9taXNlUmVzb2x2ZTxUPiA9IHVuZGVmaW5lZCBleHRlbmRzIFQgPyAodmFsdWU/OiBQcm9taXNlTGlrZTxUPiB8IFQpID0+IHZvaWRcbiAgOiAodmFsdWU6IFByb21pc2VMaWtlPFQ+IHwgVCkgPT4gdm9pZDtcblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgcmV0cnlXaXRoVGltZW91dH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmV0cnlPcHRpb25zIHtcbiAgLyoqXG4gICAqIEEgYWJvcnQgc2lnbmFsIHRvIGNhbmNlbCB0aGUgcmV0cnkgb3BlcmF0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbDtcblxuICAvKipcbiAgICogQSBkZWxheSBpbiBtaWxsaXNlY29uZHMgYmV0d2VlbiByZXRyeSBhdHRlbXB0cy5cbiAgICovXG4gIHJlYWRvbmx5IHJldHJ5RGVsYXlJbk1pbGxpc2Vjb25kcz86IG51bWJlcjtcblxuICAvKipcbiAgICogV2hldGhlciB0byByZXRyeSB0aGUgZnVuY3Rpb24gb24gZXJyb3IuXG4gICAqL1xuICByZWFkb25seSBzaG91bGRSZXRyeU9uRXJyb3I/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBIG1heGltdW0gdGltZSBpbiBtaWxsaXNlY29uZHMgdG8gd2FpdCBiZWZvcmUgZ2l2aW5nIHVwIG9uIHJldHJ5aW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgdGltZW91dEluTWlsbGlzZWNvbmRzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEFkZHMgYW4gZXJyb3IgaGFuZGxlciB0byBhIHtAbGluayBQcm9taXNlfSB0aGF0IGNhdGNoZXMgYW55IGVycm9ycyBhbmQgZW1pdHMgYW4gYXN5bmMgZXJyb3IgZXZlbnQuXG4gKlxuICogQHBhcmFtIGFzeW5jRm4gLSBUaGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRvIGFkZCBhbiBlcnJvciBoYW5kbGVyIHRvLlxuICogQHBhcmFtIHN0YWNrVHJhY2UgLSBUaGUgc3RhY2sgdHJhY2Ugb2YgdGhlIHNvdXJjZSBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIGNvbXBsZXRlcyBvciBlbWl0cyBhc3luYyBlcnJvciBldmVudC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFkZEVycm9ySGFuZGxlcihhc3luY0ZuOiAoKSA9PiBQcm9taXNlPHVua25vd24+LCBzdGFja1RyYWNlPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIHN0YWNrVHJhY2UgPz89IGdldFN0YWNrVHJhY2UoMSk7XG4gIHRyeSB7XG4gICAgYXdhaXQgYXN5bmNGbigpO1xuICB9IGNhdGNoIChhc3luY0Vycm9yKSB7XG4gICAgY29uc3Qgd3JhcHBlZEVycm9yID0gbmV3IEN1c3RvbVN0YWNrVHJhY2VFcnJvcihBU1lOQ19XUkFQUEVSX0VSUk9SX01FU1NBR0UsIHN0YWNrVHJhY2UsIGFzeW5jRXJyb3IpO1xuICAgIGlmIChoYW5kbGVTaWxlbnRFcnJvcih3cmFwcGVkRXJyb3IpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVtaXRBc3luY0Vycm9yRXZlbnQod3JhcHBlZEVycm9yKTtcbiAgfVxufVxuXG4vKipcbiAqIEZpbHRlcnMgYW4gYXJyYXkgYXN5bmNocm9ub3VzbHksIGtlZXBpbmcgb25seSB0aGUgZWxlbWVudHMgdGhhdCBzYXRpc2Z5IHRoZSBwcm92aWRlZCBwcmVkaWNhdGUgZnVuY3Rpb24uXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgZWxlbWVudHMgaW4gdGhlIGlucHV0IGFycmF5LlxuICogQHBhcmFtIGFyciAtIFRoZSBhcnJheSB0byBmaWx0ZXIuXG4gKiBAcGFyYW0gcHJlZGljYXRlIC0gVGhlIHByZWRpY2F0ZSBmdW5jdGlvbiB0byB0ZXN0IGVhY2ggZWxlbWVudC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCBhbiBhcnJheSBvZiBlbGVtZW50cyB0aGF0IHNhdGlzZnkgdGhlIHByZWRpY2F0ZSBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFzeW5jRmlsdGVyPFQ+KGFycjogVFtdLCBwcmVkaWNhdGU6ICh2YWx1ZTogVCwgaW5kZXg6IG51bWJlciwgYXJyYXk6IFRbXSkgPT4gUHJvbWlzYWJsZTxib29sZWFuPik6IFByb21pc2U8VFtdPiB7XG4gIGNvbnN0IGFuczogVFtdID0gW107XG5cbiAgY29uc3QgbGVuZ3RoID0gYXJyLmxlbmd0aDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIGlmICghT2JqZWN0Lmhhc093bihhcnIsIGkpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBpdGVtID0gYXJyW2ldIGFzIFQ7XG4gICAgaWYgKGF3YWl0IHByZWRpY2F0ZShpdGVtLCBpLCBhcnIpKSB7XG4gICAgICBhbnMucHVzaChpdGVtKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYW5zO1xufVxuXG4vKipcbiAqIEZpbHRlcnMgYW4gYXJyYXkgYXN5bmNocm9ub3VzbHkgaW4gcGxhY2UsIGtlZXBpbmcgb25seSB0aGUgZWxlbWVudHMgdGhhdCBzYXRpc2Z5IHRoZSBwcm92aWRlZCBwcmVkaWNhdGUgZnVuY3Rpb24uXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgZWxlbWVudHMgaW4gdGhlIGlucHV0IGFycmF5LlxuICogQHBhcmFtIGFyciAtIFRoZSBhcnJheSB0byBmaWx0ZXIuXG4gKiBAcGFyYW0gcHJlZGljYXRlIC0gVGhlIHByZWRpY2F0ZSBmdW5jdGlvbiB0byB0ZXN0IGVhY2ggZWxlbWVudC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgYXJyYXkgaXMgZmlsdGVyZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhc3luY0ZpbHRlckluUGxhY2U8VD4oYXJyOiBUW10sIHByZWRpY2F0ZTogKHZhbHVlOiBULCBpbmRleDogbnVtYmVyLCBhcnJheTogVFtdKSA9PiBQcm9taXNhYmxlPGJvb2xlYW4+KTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGxlbmd0aCA9IGFyci5sZW5ndGg7XG4gIGxldCB3cml0ZUluZGV4ID0gMDtcbiAgZm9yIChsZXQgcmVhZEluZGV4ID0gMDsgcmVhZEluZGV4IDwgbGVuZ3RoOyByZWFkSW5kZXgrKykge1xuICAgIGlmICghT2JqZWN0Lmhhc093bihhcnIsIHJlYWRJbmRleCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnQgPSBhcnJbcmVhZEluZGV4XSBhcyBUO1xuICAgIGlmIChhd2FpdCBwcmVkaWNhdGUoY3VycmVudCwgcmVhZEluZGV4LCBhcnIpKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVxdWlyZS1hdG9taWMtdXBkYXRlcyAtLSBZZXMsIGl0IGlzIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uLCBidXQgSSBkb24ndCBhbiBlbGVnYW50IHdheSB0byBmaXggaXQuXG4gICAgICBhcnJbd3JpdGVJbmRleCsrXSA9IGN1cnJlbnQ7XG4gICAgfVxuICB9XG4gIGFyci5sZW5ndGggPSB3cml0ZUluZGV4O1xufVxuXG4vKipcbiAqIE1hcHMgb3ZlciBhbiBhcnJheSBhc3luY2hyb25vdXNseSwgYXBwbHlpbmcgdGhlIHByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGVhY2ggZWxlbWVudCwgYW5kIHRoZW4gZmxhdHRlbnMgdGhlIHJlc3VsdHMgaW50byBhIHNpbmdsZSBhcnJheS5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiBlbGVtZW50cyBpbiB0aGUgaW5wdXQgYXJyYXkuXG4gKiBAdHlwZVBhcmFtIFUgLSBUaGUgdHlwZSBvZiBlbGVtZW50cyBpbiB0aGUgb3V0cHV0IGFycmF5LlxuICogQHBhcmFtIGFyciAtIFRoZSBhcnJheSB0byBtYXAgb3ZlciBhbmQgZmxhdHRlbi5cbiAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayBmdW5jdGlvbiB0byBhcHBseSB0byBlYWNoIGVsZW1lbnQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggYSBmbGF0dGVuZWQgYXJyYXkgb2YgdGhlIHJlc3VsdHMgb2YgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXN5bmNGbGF0TWFwPFQsIFU+KGFycjogVFtdLCBjYWxsYmFjazogKHZhbHVlOiBULCBpbmRleDogbnVtYmVyLCBhcnJheTogVFtdKSA9PiBQcm9taXNhYmxlPFVbXT4pOiBQcm9taXNlPFVbXT4ge1xuICByZXR1cm4gKGF3YWl0IGFzeW5jTWFwKGFyciwgY2FsbGJhY2spKS5mbGF0KCk7XG59XG5cbi8qKlxuICogTWFwcyBvdmVyIGFuIGFycmF5IGFzeW5jaHJvbm91c2x5LCBhcHBseWluZyB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24gdG8gZWFjaCBlbGVtZW50LlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIGVsZW1lbnRzIGluIHRoZSBpbnB1dCBhcnJheS5cbiAqIEB0eXBlUGFyYW0gVSAtIFRoZSB0eXBlIG9mIGVsZW1lbnRzIGluIHRoZSBvdXRwdXQgYXJyYXkuXG4gKiBAcGFyYW0gYXJyIC0gVGhlIGFycmF5IHRvIG1hcCBvdmVyLlxuICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIGVhY2ggZWxlbWVudC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCBhbiBhcnJheSBvZiB0aGUgcmVzdWx0cyBvZiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhc3luY01hcDxULCBVPihhcnI6IFRbXSwgY2FsbGJhY2s6ICh2YWx1ZTogVCwgaW5kZXg6IG51bWJlciwgYXJyYXk6IFRbXSkgPT4gUHJvbWlzYWJsZTxVPik6IFByb21pc2U8VVtdPiB7XG4gIHJldHVybiBhd2FpdCBwcm9taXNlQWxsU2VxdWVudGlhbGx5KGFyci5tYXAoY2FsbGJhY2spKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBhc3luY2hyb25vdXMgZnVuY3Rpb24gdG8gYSBzeW5jaHJvbm91cyBvbmUgYnkgYXV0b21hdGljYWxseSBoYW5kbGluZyB0aGUgUHJvbWlzZSByZWplY3Rpb24uXG4gKlxuICogQHR5cGVQYXJhbSBBcmdzIC0gVGhlIHR5cGVzIG9mIHRoZSBhcmd1bWVudHMgdGhlIGZ1bmN0aW9uIGFjY2VwdHMuXG4gKiBAcGFyYW0gYXN5bmNGdW5jIC0gVGhlIGFzeW5jaHJvbm91cyBmdW5jdGlvbiB0byBjb252ZXJ0LlxuICogQHBhcmFtIHN0YWNrVHJhY2UgLSBUaGUgc3RhY2sgdHJhY2Ugb2YgdGhlIHNvdXJjZSBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIEEgZnVuY3Rpb24gdGhhdCB3cmFwcyB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIGluIGEgc3luY2hyb25vdXMgaW50ZXJmYWNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydEFzeW5jVG9TeW5jPEFyZ3MgZXh0ZW5kcyB1bmtub3duW10+KGFzeW5jRnVuYzogR2VuZXJpY0FzeW5jRnVuY3Rpb248QXJncz4sIHN0YWNrVHJhY2U/OiBzdHJpbmcpOiBHZW5lcmljVm9pZEZ1bmN0aW9uPEFyZ3M+IHtcbiAgc3RhY2tUcmFjZSA/Pz0gZ2V0U3RhY2tUcmFjZSgxKTtcbiAgcmV0dXJuICguLi5hcmdzOiBBcmdzKTogdm9pZCA9PiB7XG4gICAgYXNzZXJ0Tm9uTnVsbGFibGUoc3RhY2tUcmFjZSk7XG4gICAgY29uc3QgaW5uZXJTdGFja1RyYWNlID0gZ2V0U3RhY2tUcmFjZSgxKTtcbiAgICBzdGFja1RyYWNlID0gYCR7c3RhY2tUcmFjZX1cXG4gICAgYXQgLS0tIGNvbnZlcnRBc3luY1RvU3luYyAtLS0gKDApXFxuJHtpbm5lclN0YWNrVHJhY2V9YDtcbiAgICBpbnZva2VBc3luY1NhZmVseSgoKSA9PiBhc3luY0Z1bmMoLi4uYXJncyksIHN0YWNrVHJhY2UpO1xuICB9O1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgc3luY2hyb25vdXMgZnVuY3Rpb24gdG8gYW4gYXN5bmNocm9ub3VzIG9uZSBieSB3cmFwcGluZyBpdCBpbiBhIHtAbGluayBQcm9taXNlfS5cbiAqXG4gKiBAdHlwZVBhcmFtIEFyZ3MgLSBUaGUgdHlwZXMgb2YgdGhlIGFyZ3VtZW50cyB0aGUgZnVuY3Rpb24gYWNjZXB0cy5cbiAqIEB0eXBlUGFyYW0gUmVzdWx0IC0gVGhlIHR5cGUgb2YgdGhlIGZ1bmN0aW9uJ3MgcmV0dXJuIHZhbHVlLlxuICogQHBhcmFtIHN5bmNGbiAtIFRoZSBzeW5jaHJvbm91cyBmdW5jdGlvbiB0byBjb252ZXJ0LlxuICogQHJldHVybnMgQSBmdW5jdGlvbiB0aGF0IHdyYXBzIHRoZSBzeW5jaHJvbm91cyBmdW5jdGlvbiBpbiBhbiBhc3luY2hyb25vdXMgaW50ZXJmYWNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFN5bmNUb0FzeW5jPEFyZ3MgZXh0ZW5kcyB1bmtub3duW10sIFJlc3VsdD4oc3luY0ZuOiBHZW5lcmljRnVuY3Rpb248QXJncywgUmVzdWx0Pik6IEdlbmVyaWNBc3luY0Z1bmN0aW9uPEFyZ3MsIFJlc3VsdD4ge1xuICByZXR1cm4gYXN5bmMgKC4uLmFyZ3M6IEFyZ3MpOiBQcm9taXNlPFJlc3VsdD4gPT4ge1xuICAgIGF3YWl0IG5vb3BBc3luYygpO1xuICAgIHJldHVybiBzeW5jRm4oLi4uYXJncyk7XG4gIH07XG59XG5cbi8qKlxuICogSGFuZGxlcyBhIHNpbGVudCBlcnJvci5cbiAqXG4gKiBAcGFyYW0gZXJyb3IgLSBUaGUgZXJyb3IgdG8gaGFuZGxlLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgZXJyb3IgaXMgYSBzaWxlbnQgZXJyb3IuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYW5kbGVTaWxlbnRFcnJvcihlcnJvcjogdW5rbm93bik6IGJvb2xlYW4ge1xuICBsZXQgY2F1c2UgPSBlcnJvcjtcbiAgd2hpbGUgKCEoY2F1c2UgaW5zdGFuY2VvZiBTaWxlbnRFcnJvcikpIHtcbiAgICBpZiAoIShjYXVzZSBpbnN0YW5jZW9mIEVycm9yKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNhdXNlID0gY2F1c2UuY2F1c2U7XG4gIH1cblxuICBnZXRMaWJEZWJ1Z2dlcignQXN5bmM6aGFuZGxlU2lsZW50RXJyb3InKShlcnJvcik7XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIElnbm9yZXMgYW4gZXJyb3IgdGhhdCBpcyB0aHJvd24gYnkgYW4gYXN5bmNocm9ub3VzIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSBwcm9taXNlIC0gVGhlIHByb21pc2UgdG8gaWdub3JlIHRoZSBlcnJvciBvZi5cbiAqIEBwYXJhbSBmYWxsYmFja1ZhbHVlIC0gQWx3YXlzIGB1bmRlZmluZWRgLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBhc3luY2hyb25vdXMgZnVuY3Rpb24gY29tcGxldGVzIG9yIGZhaWxzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaWdub3JlRXJyb3IocHJvbWlzZTogUHJvbWlzZTx1bmtub3duPiwgZmFsbGJhY2tWYWx1ZT86IHVuZGVmaW5lZCk6IFByb21pc2U8dm9pZD47XG4vKipcbiAqIEludm9rZXMgYW4gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIGFuZCByZXR1cm5zIGEgZmFsbGJhY2sgdmFsdWUgaWYgYW4gZXJyb3IgaXMgdGhyb3duLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSB2YWx1ZSByZXR1cm5lZCBieSB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uLlxuICogQHBhcmFtIHByb21pc2UgLSBUaGUgcHJvbWlzZSB0byBpZ25vcmUgdGhlIGVycm9yIG9mLlxuICogQHBhcmFtIGZhbGxiYWNrVmFsdWUgLSBUaGUgdmFsdWUgdG8gcmV0dXJuIGlmIGFuIGVycm9yIGlzIHRocm93bi5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgdGhlIGFzeW5jaHJvbm91cyBmdW5jdGlvbiBvciB0aGUgZmFsbGJhY2sgdmFsdWUgaWYgYW4gZXJyb3IgaXMgdGhyb3duLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaWdub3JlRXJyb3I8VD4ocHJvbWlzZTogUHJvbWlzZTxUPiwgZmFsbGJhY2tWYWx1ZTogVCk6IFByb21pc2U8VD47XG4vKipcbiAqIElnbm9yZXMgYW4gZXJyb3IgdGhhdCBpcyB0aHJvd24gYnkgYW4gYXN5bmNocm9ub3VzIGZ1bmN0aW9uLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSB2YWx1ZSByZXR1cm5lZCBieSB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uLlxuICogQHBhcmFtIHByb21pc2UgLSBUaGUgcHJvbWlzZSB0byBpZ25vcmUgdGhlIGVycm9yIG9mLlxuICogQHBhcmFtIGZhbGxiYWNrVmFsdWUgLSBUaGUgdmFsdWUgdG8gcmV0dXJuIGlmIGFuIGVycm9yIGlzIHRocm93bi5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgdGhlIGFzeW5jaHJvbm91cyBmdW5jdGlvbiBvciB0aGUgZmFsbGJhY2sgdmFsdWUgaWYgYW4gZXJyb3IgaXMgdGhyb3duLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaWdub3JlRXJyb3I8VD4ocHJvbWlzZTogUHJvbWlzZTxUPiwgZmFsbGJhY2tWYWx1ZT86IFQpOiBQcm9taXNlPFQgfCB2b2lkPiB7XG4gIGNvbnN0IGlnbm9yZUVycm9yRGVidWdnZXIgPSBnZXRMaWJEZWJ1Z2dlcignQXN5bmM6aWdub3JlRXJyb3InKTtcbiAgY29uc3Qgc3RhY2tUcmFjZSA9IGdldFN0YWNrVHJhY2UoMSk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IHByb21pc2U7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZ25vcmVFcnJvckRlYnVnZ2VyKCdJZ25vcmVkIGVycm9yJywgbmV3IEN1c3RvbVN0YWNrVHJhY2VFcnJvcignSWdub3JlZCBlcnJvcicsIHN0YWNrVHJhY2UsIGUpKTtcbiAgICByZXR1cm4gZmFsbGJhY2tWYWx1ZTtcbiAgfVxufVxuXG5jb25zdCBwZW5kaW5nQXN5bmNPcGVyYXRpb25zID0gbmV3IFNldDxQcm9taXNlPHZvaWQ+PigpO1xubGV0IGlzQXN5bmNPcGVyYXRpb25UcmFja2luZ0VuYWJsZWQgPSBmYWxzZTtcblxuLyoqXG4gKiBEaXNhYmxlcyB0cmFja2luZyBwcmV2aW91c2x5IGVuYWJsZWQgdmlhIHtAbGluayBlbmFibGVBc3luY09wZXJhdGlvblRyYWNraW5nfSBhbmQgZm9yZ2V0cyBhbnkgY3VycmVudGx5LXRyYWNrZWQgb3BlcmF0aW9ucy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpc2FibGVBc3luY09wZXJhdGlvblRyYWNraW5nKCk6IHZvaWQge1xuICBpc0FzeW5jT3BlcmF0aW9uVHJhY2tpbmdFbmFibGVkID0gZmFsc2U7XG4gIHBlbmRpbmdBc3luY09wZXJhdGlvbnMuY2xlYXIoKTtcbn1cblxuLyoqXG4gKiBFbmFibGVzIHRyYWNraW5nIG9mIGZpcmUtYW5kLWZvcmdldCBvcGVyYXRpb25zIHNjaGVkdWxlZCB2aWEge0BsaW5rIGludm9rZUFzeW5jU2FmZWx5fSAoYW5kIHRoZXJlZm9yZSB7QGxpbmsgY29udmVydEFzeW5jVG9TeW5jfSkuXG4gKlxuICogV2hpbGUgZW5hYmxlZCwgZWFjaCBzY2hlZHVsZWQgb3BlcmF0aW9uIGlzIHJlY29yZGVkIHVudGlsIGl0IHNldHRsZXMgc28gdGhhdCB0ZXN0cyBjYW4gYXdhaXQgdGhlbSBhbGwgdmlhIHtAbGluayB3YWl0Rm9yQWxsQXN5bmNPcGVyYXRpb25zfSwgcmVtb3ZpbmcgdGhlIG5lZWQgdG8gb3ZlcnJpZGUge0BsaW5rIGludm9rZUFzeW5jU2FmZWx5fSAvIHtAbGluayBjb252ZXJ0QXN5bmNUb1N5bmN9IGluIHRlc3RzLlxuICpcbiAqIFRyYWNraW5nIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQsIHNvIHByb2R1Y3Rpb24gY29kZSBjYXJyaWVzIG5vIGJvb2trZWVwaW5nIG92ZXJoZWFkLiBJbnRlbmRlZCB0byBiZSBlbmFibGVkIGluIHRlc3QgZW52aXJvbm1lbnRzIG9ubHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmFibGVBc3luY09wZXJhdGlvblRyYWNraW5nKCk6IHZvaWQge1xuICBpc0FzeW5jT3BlcmF0aW9uVHJhY2tpbmdFbmFibGVkID0gdHJ1ZTtcbn1cblxuLyoqXG4gKiBJbnZva2VzIGEge0BsaW5rIFByb21pc2V9IGFuZCBzYWZlbHkgaGFuZGxlcyBhbnkgZXJyb3JzIGJ5IGNhdGNoaW5nIHRoZW0gYW5kIGVtaXR0aW5nIGFuIGFzeW5jIGVycm9yIGV2ZW50LlxuICpcbiAqIEBwYXJhbSBhc3luY0ZuIC0gVGhlIGFzeW5jaHJvbm91cyBmdW5jdGlvbiB0byBpbnZva2Ugc2FmZWx5LlxuICogQHBhcmFtIHN0YWNrVHJhY2UgLSBUaGUgc3RhY2sgdHJhY2Ugb2YgdGhlIHNvdXJjZSBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGludm9rZUFzeW5jU2FmZWx5KGFzeW5jRm46ICgpID0+IFByb21pc2FibGU8dW5rbm93bj4sIHN0YWNrVHJhY2U/OiBzdHJpbmcpOiB2b2lkIHtcbiAgc3RhY2tUcmFjZSA/Pz0gZ2V0U3RhY2tUcmFjZSgxKTtcblxuICBsZXQgcmVzdWx0OiB1bmtub3duO1xuICB0cnkge1xuICAgIHJlc3VsdCA9IGFzeW5jRm4oKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3ByZWZlci1wcm9taXNlLXJlamVjdC1lcnJvcnMgLS0gUmUtcmVqZWN0aW5nIHRoZSBvcmlnaW5hbCBjYXVnaHQgZXJyb3IgYXMtaXMuXG4gICAgdHJhY2tBc3luY09wZXJhdGlvbihhZGRFcnJvckhhbmRsZXIoKCkgPT4gUHJvbWlzZS5yZWplY3QoZXJyb3IpLCBzdGFja1RyYWNlKSk7XG4gIH1cbiAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICB0cmFja0FzeW5jT3BlcmF0aW9uKGFkZEVycm9ySGFuZGxlcigoKSA9PiByZXN1bHQsIHN0YWNrVHJhY2UpKTtcbiAgfVxufVxuXG4vKipcbiAqIEludm9rZXMgYW4gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIGFmdGVyIGEgZGVsYXkuXG4gKlxuICogQHBhcmFtIGFzeW5jRm4gLSBUaGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRvIGludm9rZS5cbiAqIEBwYXJhbSBkZWxheUluTWlsbGlzZWNvbmRzIC0gVGhlIGRlbGF5IGluIG1pbGxpc2Vjb25kcy5cbiAqIEBwYXJhbSBzdGFja1RyYWNlIC0gVGhlIHN0YWNrIHRyYWNlIG9mIHRoZSBzb3VyY2UgZnVuY3Rpb24uXG4gKiBAcGFyYW0gYWJvcnRTaWduYWwgLSBUaGUgYWJvcnQgc2lnbmFsIHRvIGxpc3RlbiB0by5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGludm9rZUFzeW5jU2FmZWx5QWZ0ZXJEZWxheShcbiAgYXN5bmNGbjogKGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbCkgPT4gUHJvbWlzYWJsZTx2b2lkPixcbiAgZGVsYXlJbk1pbGxpc2Vjb25kcyA9IDAsXG4gIHN0YWNrVHJhY2U/OiBzdHJpbmcsXG4gIGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWxcbik6IHZvaWQge1xuICBhYm9ydFNpZ25hbCA/Pz0gYWJvcnRTaWduYWxOZXZlcigpO1xuICBhYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuICBzdGFja1RyYWNlID8/PSBnZXRTdGFja1RyYWNlKDEpO1xuICBpbnZva2VBc3luY1NhZmVseShhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgc2xlZXAoZGVsYXlJbk1pbGxpc2Vjb25kcywgYWJvcnRTaWduYWwsIHRydWUpO1xuICAgIGF3YWl0IGFzeW5jRm4oYWJvcnRTaWduYWwpO1xuICB9LCBzdGFja1RyYWNlKTtcbn1cblxuLyoqXG4gKiBFeGVjdXRlcyBhc3luYyBmdW5jdGlvbnMgc2VxdWVudGlhbGx5LlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSB2YWx1ZS5cbiAqIEBwYXJhbSBhc3luY0ZucyAtIFRoZSBhc3luYyBmdW5jdGlvbnMgdG8gZXhlY3V0ZSBzZXF1ZW50aWFsbHkuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggYW4gYXJyYXkgb2YgdGhlIHJlc3VsdHMgb2YgdGhlIGFzeW5jIGZ1bmN0aW9ucy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb21pc2VBbGxBc3luY0Zuc1NlcXVlbnRpYWxseTxUPihhc3luY0ZuczogKCgpID0+IFByb21pc2FibGU8VD4pW10pOiBQcm9taXNlPFRbXT4ge1xuICBjb25zdCByZXN1bHRzOiBUW10gPSBbXTtcbiAgZm9yIChjb25zdCBhc3luY0ZuIG9mIGFzeW5jRm5zKSB7XG4gICAgcmVzdWx0cy5wdXNoKGF3YWl0IGFzeW5jRm4oKSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdHM7XG59XG5cbi8qKlxuICogRXhlY3V0ZXMgcHJvbWlzZXMgc2VxdWVudGlhbGx5LlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSB2YWx1ZS5cbiAqIEBwYXJhbSBwcm9taXNlcyAtIFRoZSBwcm9taXNlcyB0byBleGVjdXRlIHNlcXVlbnRpYWxseS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCBhbiBhcnJheSBvZiB0aGUgcmVzdWx0cyBvZiB0aGUgcHJvbWlzZXMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9taXNlQWxsU2VxdWVudGlhbGx5PFQ+KHByb21pc2VzOiBQcm9taXNhYmxlPFQ+W10pOiBQcm9taXNlPFRbXT4ge1xuICByZXR1cm4gYXdhaXQgcHJvbWlzZUFsbEFzeW5jRm5zU2VxdWVudGlhbGx5KHByb21pc2VzLm1hcCgocHJvbWlzZSkgPT4gKCkgPT4gcHJvbWlzZSkpO1xufVxuXG4vKipcbiAqIFdhaXRzIGZvciBhbGwgZmlyZS1hbmQtZm9yZ2V0IG9wZXJhdGlvbnMgdHJhY2tlZCBzaW5jZSB7QGxpbmsgZW5hYmxlQXN5bmNPcGVyYXRpb25UcmFja2luZ30gd2FzIGNhbGxlZCB0byBzZXR0bGUuXG4gKlxuICogT3BlcmF0aW9ucyBzY2hlZHVsZWQgd2hpbGUgYXdhaXRpbmcgYXJlIGFsc28gYXdhaXRlZCwgc28gY2FzY2FkaW5nIGZpcmUtYW5kLWZvcmdldCBjaGFpbnMgYXJlIGZ1bGx5IGRyYWluZWQuXG4gKlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIG5vIHRyYWNrZWQgb3BlcmF0aW9ucyByZW1haW4gcGVuZGluZy5cbiAqIEB0aHJvd3MgSWYgdHJhY2tpbmcgaXMgbm90IGVuYWJsZWQuIE90aGVyd2lzZSB0aGlzIHdvdWxkIHNpbGVudGx5IHJlc29sdmUgYXMgaWYgYWxsIG9wZXJhdGlvbnMgd2VyZSBmaW5pc2hlZCwgbWFza2luZyBhIG1pc3Npbmcge0BsaW5rIGVuYWJsZUFzeW5jT3BlcmF0aW9uVHJhY2tpbmd9IGNhbGwuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3YWl0Rm9yQWxsQXN5bmNPcGVyYXRpb25zKCk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoIWlzQXN5bmNPcGVyYXRpb25UcmFja2luZ0VuYWJsZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0FzeW5jIG9wZXJhdGlvbiB0cmFja2luZyBpcyBub3QgZW5hYmxlZC4gQ2FsbCBlbmFibGVBc3luY09wZXJhdGlvblRyYWNraW5nKCkgYmVmb3JlIHdhaXRGb3JBbGxBc3luY09wZXJhdGlvbnMoKS4nKTtcbiAgfVxuXG4gIHdoaWxlIChwZW5kaW5nQXN5bmNPcGVyYXRpb25zLnNpemUgPiAwKSB7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFsuLi5wZW5kaW5nQXN5bmNPcGVyYXRpb25zXSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdHJhY2tBc3luY09wZXJhdGlvbihvcGVyYXRpb246IFByb21pc2U8dm9pZD4pOiB2b2lkIHtcbiAgaWYgKCFpc0FzeW5jT3BlcmF0aW9uVHJhY2tpbmdFbmFibGVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcGVuZGluZ0FzeW5jT3BlcmF0aW9ucy5hZGQob3BlcmF0aW9uKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXZvaWQgLS0gRmlyZS1hbmQtZm9yZ2V0IGNsZWFudXAgb2YgdGhlIHNldHRsZWQgb3BlcmF0aW9uLlxuICB2b2lkIG9wZXJhdGlvbi5maW5hbGx5KCgpID0+IHtcbiAgICBwZW5kaW5nQXN5bmNPcGVyYXRpb25zLmRlbGV0ZShvcGVyYXRpb24pO1xuICB9KTtcbn1cblxuY29uc3QgdGVybWluYXRlUmV0cnlFcnJvcnMgPSBuZXcgV2Vha1NldDxFcnJvcj4oKTtcblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgcmV0cnlXaXRoVGltZW91dH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmV0cnlXaXRoVGltZW91dFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgZnVuY3Rpb24gdG8gaGFuZGxlIHRoZSB0aW1lb3V0LlxuICAgKlxuICAgKiBAcGFyYW0gY29udGV4dCAtIFRoZSB0aW1lb3V0IGNvbnRleHQuXG4gICAqL1xuICBvblRpbWVvdXQ/KHRoaXM6IHZvaWQsIGNvbnRleHQ6IFRpbWVvdXRDb250ZXh0KTogdm9pZDtcblxuICAvKipcbiAgICogVGhlIGZ1bmN0aW9uIHRvIGV4ZWN1dGUuXG4gICAqXG4gICAqIEBwYXJhbSBhYm9ydFNpZ25hbCAtIFRoZSBhYm9ydCBzaWduYWwgdG8gbGlzdGVuIHRvLlxuICAgKiBAcmV0dXJucyBUaGUgcmVzdWx0IG9mIHRoZSBmdW5jdGlvbi5cbiAgICovXG4gIG9wZXJhdGlvbkZuKHRoaXM6IHZvaWQsIGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbCk6IFByb21pc2FibGU8Ym9vbGVhbj47XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBvcGVyYXRpb24uXG4gICAqL1xuICByZWFkb25seSBvcGVyYXRpb25OYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcmV0cnkgb3B0aW9ucy5cbiAgICovXG4gIHJlYWRvbmx5IHJldHJ5T3B0aW9ucz86IFJldHJ5T3B0aW9ucztcblxuICAvKipcbiAgICogVGhlIHN0YWNrIHRyYWNlIG9mIHRoZSBzb3VyY2UgZnVuY3Rpb24uXG4gICAqL1xuICByZWFkb25seSBzdGFja1RyYWNlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBydW5XaXRoVGltZW91dH0uXG4gKlxuICogQHR5cGVQYXJhbSBSZXN1bHQgLSBUaGUgdHlwZSBvZiB0aGUgcmVzdWx0IHJldHVybmVkIGJ5IHRoZSBvcGVyYXRpb24gZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUnVuV2l0aFRpbWVvdXRQYXJhbXM8UmVzdWx0PiB7XG4gIC8qKlxuICAgKiBUaGUgY29udGV4dCBvZiB0aGUgZnVuY3Rpb24uXG4gICAqL1xuICByZWFkb25seSBjb250ZXh0PzogdW5rbm93bjtcblxuICAvKipcbiAgICogVGhlIGZ1bmN0aW9uIHRvIGhhbmRsZSB0aGUgdGltZW91dC5cbiAgICpcbiAgICogQHBhcmFtIGNvbnRleHQgLSBUaGUgdGltZW91dCBjb250ZXh0LlxuICAgKi9cbiAgb25UaW1lb3V0Pyh0aGlzOiB2b2lkLCBjb250ZXh0OiBUaW1lb3V0Q29udGV4dCk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBvcGVyYXRpb24gZnVuY3Rpb24gdG8gZXhlY3V0ZS5cbiAgICpcbiAgICogQHBhcmFtIGFib3J0U2lnbmFsIC0gVGhlIGFib3J0IHNpZ25hbCB0byBsaXN0ZW4gdG8uXG4gICAqIEByZXR1cm5zIFRoZSByZXN1bHQgb2YgdGhlIGZ1bmN0aW9uLlxuICAgKi9cbiAgb3BlcmF0aW9uRm4odGhpczogdm9pZCwgYWJvcnRTaWduYWw6IEFib3J0U2lnbmFsKTogUHJvbWlzYWJsZTxSZXN1bHQ+O1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgb3BlcmF0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgb3BlcmF0aW9uTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHN0YWNrIHRyYWNlIG9mIHRoZSBzb3VyY2UgZnVuY3Rpb24uXG4gICAqL1xuICByZWFkb25seSBzdGFja1RyYWNlPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSB0aW1lIHRvIHdhaXQgaW4gbWlsbGlzZWNvbmRzLlxuICAgKi9cbiAgcmVhZG9ubHkgdGltZW91dEluTWlsbGlzZWNvbmRzOiBudW1iZXI7XG59XG5cbi8qKlxuICogQ29udGV4dCBwcm92aWRlZCB0byB0aGUgdGltZW91dCBoYW5kbGVyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRpbWVvdXRDb250ZXh0IHtcbiAgLyoqXG4gICAqIFRoZSBkdXJhdGlvbiBpbiBtaWxsaXNlY29uZHMgc2luY2UgdGhlIG9wZXJhdGlvbiBzdGFydGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZHVyYXRpb246IG51bWJlcjtcbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIGNhbGxiYWNrIHRvIGJlIGludm9rZWQgd2hlbiB0aGUgb3BlcmF0aW9uIGNvbXBsZXRlcy5cbiAgICpcbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgb3BlcmF0aW9uIGNvbXBsZXRlcy5cbiAgICovXG4gIG9uT3BlcmF0aW9uQ29tcGxldGVkKGNhbGxiYWNrOiAoKSA9PiB2b2lkKTogdm9pZDtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBvcGVyYXRpb24uXG4gICAqL1xuICByZWFkb25seSBvcGVyYXRpb25OYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUZXJtaW5hdGVzIHRoZSBvcGVyYXRpb24gdGhhdCB0aW1lZCBvdXQuXG4gICAqL1xuICB0ZXJtaW5hdGVPcGVyYXRpb24oKTogdm9pZDtcbn1cblxuLyoqXG4gKiBDaGFpbnMgYSBwcm9taXNlIHdpdGggYW5vdGhlciBwcm9taXNlLlxuICpcbiAqIEBwYXJhbSBjaGFpblByb21pc2UgLSBSZXByZXNlbnRzIHRoZSBjaGFpbmVkIHByb21pc2UuXG4gKiBAcGFyYW0gcHJvbWlzYWJsZUZuIC0gVGhlIGZ1bmN0aW9uIHRvIGNoYWluLlxuICogQHJldHVybnMgQ2hhaW5lZCBwcm9taXNlIG9yIGBudWxsYCBpZiBubyBhc3luYyBsb2dpYyBpcyBjaGFpbmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hhaW4oY2hhaW5Qcm9taXNlOiBudWxsIHwgUHJvbWlzZTx2b2lkPiwgcHJvbWlzYWJsZUZuOiAoKSA9PiBudWxsIHwgUHJvbWlzYWJsZTx2b2lkPik6IG51bGwgfCBQcm9taXNlPHZvaWQ+IHtcbiAgbGV0IG5leHRDaGFpblByb21pc2UgPSBjaGFpblByb21pc2U7XG4gIGlmIChjaGFpblByb21pc2UpIHtcbiAgICBuZXh0Q2hhaW5Qcm9taXNlID0gY2hhaW5Qcm9taXNlLnRoZW4oKCkgPT4gcHJvbWlzYWJsZUZuKCkgPz8gdW5kZWZpbmVkKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBwcm9taXNhYmxlID0gcHJvbWlzYWJsZUZuKCk7XG4gICAgaWYgKHByb21pc2FibGUpIHtcbiAgICAgIG5leHRDaGFpblByb21pc2UgPSBwcm9taXNhYmxlIGluc3RhbmNlb2YgUHJvbWlzZSA/IHByb21pc2FibGUgYXMgUHJvbWlzZTx2b2lkPiA6IFByb21pc2UucmVzb2x2ZShwcm9taXNhYmxlKTtcbiAgICB9XG4gIH1cblxuICBuZXh0Q2hhaW5Qcm9taXNlPy5jYXRjaChub29wKTtcbiAgcmV0dXJuIG5leHRDaGFpblByb21pc2U7XG59XG5cbi8qKlxuICogTWFya3MgYW4gZXJyb3IgdG8gdGVybWluYXRlIHJldHJ5IGxvZ2ljLlxuICpcbiAqIEBwYXJhbSBlcnJvciAtIFRoZSBlcnJvciB0byBtYXJrIHRvIHRlcm1pbmF0ZSByZXRyeSBsb2dpYy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hcmtzQXNUZXJtaW5hdGVSZXRyeShlcnJvcjogRXJyb3IpOiB2b2lkIHtcbiAgdGVybWluYXRlUmV0cnlFcnJvcnMuYWRkKGVycm9yKTtcbn1cblxuLyoqXG4gKiBBbiBhc3luYyBmdW5jdGlvbiB0aGF0IG5ldmVyIGVuZHMuXG4gKlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCBuZXZlciByZXNvbHZlcy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG5ldmVyRW5kcygpOiBQcm9taXNlPG5ldmVyPiB7XG4gIGF3YWl0IG5ldyBQcm9taXNlKCgpID0+IHtcbiAgICBub29wKCk7XG4gIH0pO1xuICAvKiB2OCBpZ25vcmUgc3RhcnQgLS0gRXhoYXVzdGl2ZSBzd2l0Y2ggZ3VhcmQ7IHRoZSBhd2FpdCBhYm92ZSBuZXZlciByZXNvbHZlcy4gKi9cbiAgYXNzZXJ0KGZhbHNlLCAnU2hvdWxkIG5ldmVyIGhhcHBlbicpO1xuICAvKiB2OCBpZ25vcmUgc3RvcCAqL1xufVxuXG4vKipcbiAqIEdldHMgdGhlIG5leHQgdGljay5cbiAqXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBuZXh0IHRpY2sgaXMgYXZhaWxhYmxlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbmV4dFRpY2tBc3luYygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XG4gICAgICByZXNvbHZlKCk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIHRvIG5hdGl2ZSBwcm9taXNhYmxlLCBjb252ZXJ0aW5nIHtAbGluayBQcm9taXNlTGlrZX0gKGFrYSBUaGVuYWJsZSkgdG8gYSBuYXRpdmUge0BsaW5rIFByb21pc2V9LlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSB2YWx1ZS5cbiAqIEBwYXJhbSBwcm9taXNhYmxlIC0gVGhlIHByb21pc2FibGUgdG8gbm9ybWFsaXplLlxuICogQHJldHVybnMgVGhlIHZhbHVlIGl0c2VsZiBvciBhIG5hdGl2ZSB7QGxpbmsgUHJvbWlzZX0gaWYgdGhlIHZhbHVlIGlzIGEge0BsaW5rIFByb21pc2VMaWtlfS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVByb21pc2FibGU8VD4ocHJvbWlzYWJsZTogUHJvbWlzYWJsZTxUPik6IFByb21pc2U8VD4gfCBUIHtcbiAgaWYgKCFwcm9taXNhYmxlKSB7XG4gICAgcmV0dXJuIHByb21pc2FibGU7XG4gIH1cblxuICBpZiAocHJvbWlzYWJsZSBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICByZXR1cm4gcHJvbWlzYWJsZSBhcyBQcm9taXNlPFQ+O1xuICB9XG5cbiAgaWYgKChwcm9taXNhYmxlIGFzIFBhcnRpYWw8UHJvbWlzZUxpa2U8VD4+KS50aGVuKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShwcm9taXNhYmxlKTtcbiAgfVxuXG4gIHJldHVybiBwcm9taXNhYmxlIGFzIFQ7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgbmV4dCBxdWV1ZSBtaWNyb3Rhc2suXG4gKlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgbmV4dCBxdWV1ZSBtaWNyb3Rhc2sgaXMgYXZhaWxhYmxlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcXVldWVNaWNyb3Rhc2tBc3luYygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgcmVzb2x2ZSgpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBuZXh0IHJlcXVlc3QgYW5pbWF0aW9uIGZyYW1lLlxuICpcbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIG5leHQgcmVxdWVzdCBhbmltYXRpb24gZnJhbWUgaXMgYXZhaWxhYmxlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVxdWVzdEFuaW1hdGlvbkZyYW1lQXN5bmMoKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgcmVzb2x2ZSgpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBSZXRyaWVzIHRoZSBwcm92aWRlZCBmdW5jdGlvbiB1bnRpbCBpdCByZXR1cm5zIGB0cnVlYCBvciB0aGUgdGltZW91dCBpcyByZWFjaGVkLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGZ1bmN0aW9uLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBmdW5jdGlvbiByZXR1cm5zIGB0cnVlYCBvciByZWplY3RzIHdoZW4gdGhlIHRpbWVvdXQgaXMgcmVhY2hlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJldHJ5V2l0aFRpbWVvdXQocGFyYW1zOiBSZXRyeVdpdGhUaW1lb3V0UGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHJldHJ5V2l0aFRpbWVvdXREZWJ1Z2dlciA9IGdldExpYkRlYnVnZ2VyKCdBc3luYzpyZXRyeVdpdGhUaW1lb3V0Jyk7XG4gIGNvbnN0IHN0YWNrVHJhY2UgPSBwYXJhbXMuc3RhY2tUcmFjZSA/PyBnZXRTdGFja1RyYWNlKDEpO1xuICBjb25zdCBERUZBVUxUX1JFVFJZX09QVElPTlMgPSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW1hZ2ljLW51bWJlcnMgLS0gRXh0cmFjdGluZyBtYWdpYyBudW1iZXIgYXMgYSBjb25zdGFudCB3b3VsZCBiZSByZXBldGl0aXZlLCBhcyB0aGUgdmFsdWUgaXMgdXNlZCBvbmx5IG9uY2UgYW5kIGl0cyBuYW1lIHdvdWxkIGJlIHRoZSBzYW1lIGFzIHRoZSBwcm9wZXJ0eS5cbiAgICByZXRyeURlbGF5SW5NaWxsaXNlY29uZHM6IDEwMCxcbiAgICBzaG91bGRSZXRyeU9uRXJyb3I6IGZhbHNlLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1tYWdpYy1udW1iZXJzIC0tIEV4dHJhY3RpbmcgbWFnaWMgbnVtYmVyIGFzIGEgY29uc3RhbnQgd291bGQgYmUgcmVwZXRpdGl2ZSwgYXMgdGhlIHZhbHVlIGlzIHVzZWQgb25seSBvbmNlIGFuZCBpdHMgbmFtZSB3b3VsZCBiZSB0aGUgc2FtZSBhcyB0aGUgcHJvcGVydHkuXG4gICAgdGltZW91dEluTWlsbGlzZWNvbmRzOiA1MDAwXG4gIH07XG4gIGNvbnN0IGZ1bGxPcHRpb25zID0geyAuLi5ERUZBVUxUX1JFVFJZX09QVElPTlMsIC4uLnBhcmFtcy5yZXRyeU9wdGlvbnMgfTtcbiAgZnVsbE9wdGlvbnMuYWJvcnRTaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG5cbiAgYXdhaXQgcnVuV2l0aFRpbWVvdXQobm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzPFJ1bldpdGhUaW1lb3V0UGFyYW1zPHZvaWQ+Pih7XG4gICAgY29udGV4dDogeyBvcGVyYXRpb25OYW1lOiBwYXJhbXMub3BlcmF0aW9uTmFtZSA/PyAnJywgcmV0cnlGbjogcGFyYW1zLm9wZXJhdGlvbkZuIH0sXG4gICAgb25UaW1lb3V0OiBwYXJhbXMub25UaW1lb3V0LFxuICAgIGFzeW5jIG9wZXJhdGlvbkZuKGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgY29uc3QgY29tYmluZWRBYm9ydFNpZ25hbCA9IGFib3J0U2lnbmFsQW55KGZ1bGxPcHRpb25zLmFib3J0U2lnbmFsLCBhYm9ydFNpZ25hbCk7XG4gICAgICBjb21iaW5lZEFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gICAgICBsZXQgYXR0ZW1wdCA9IDA7XG4gICAgICB3aGlsZSAoIWNvbWJpbmVkQWJvcnRTaWduYWwuYWJvcnRlZCkge1xuICAgICAgICBhdHRlbXB0Kys7XG4gICAgICAgIGxldCBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaXNTdWNjZXNzID0gYXdhaXQgcGFyYW1zLm9wZXJhdGlvbkZuKGNvbWJpbmVkQWJvcnRTaWduYWwpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktY29uZGl0aW9uIC0tIEl0IG1pZ2h0IGNoYW5nZWQgaW5zaWRlIGBmbigpYC4gRVNMaW50IG1pc3Rha2VubHkgZG9lcyBub3QgcmVjb2duaXplIGl0LlxuICAgICAgICAgIGlmIChjb21iaW5lZEFib3J0U2lnbmFsLmFib3J0ZWQgfHwgIWZ1bGxPcHRpb25zLnNob3VsZFJldHJ5T25FcnJvciB8fCB0ZXJtaW5hdGVSZXRyeUVycm9ycy5oYXMoZXJyb3IgYXMgRXJyb3IpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQ3VzdG9tU3RhY2tUcmFjZUVycm9yKCdyZXRyeVdpdGhUaW1lb3V0IGZhaWxlZCcsIHN0YWNrVHJhY2UsIGVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcHJpbnRFcnJvcihlcnJvcik7XG4gICAgICAgICAgaXNTdWNjZXNzID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzU3VjY2Vzcykge1xuICAgICAgICAgIHByaW50V2l0aFN0YWNrVHJhY2UocmV0cnlXaXRoVGltZW91dERlYnVnZ2VyLCBzdGFja1RyYWNlLCBgUmV0cnkgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBhZnRlciAke1N0cmluZyhhdHRlbXB0KX0gYXR0ZW1wdHNgLCB7XG4gICAgICAgICAgICBvcGVyYXRpb25GbjogcGFyYW1zLm9wZXJhdGlvbkZuLFxuICAgICAgICAgICAgb3BlcmF0aW9uTmFtZTogcGFyYW1zLm9wZXJhdGlvbk5hbWUgPz8gJydcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBwcmludFdpdGhTdGFja1RyYWNlKFxuICAgICAgICAgIHJldHJ5V2l0aFRpbWVvdXREZWJ1Z2dlcixcbiAgICAgICAgICBzdGFja1RyYWNlLFxuICAgICAgICAgIGBSZXRyeSBhdHRlbXB0ICR7U3RyaW5nKGF0dGVtcHQpfSBjb21wbGV0ZWQgdW5zdWNjZXNzZnVsbHkuIFRyeWluZyBhZ2FpbiBpbiAke1N0cmluZyhmdWxsT3B0aW9ucy5yZXRyeURlbGF5SW5NaWxsaXNlY29uZHMpfSBtaWxsaXNlY29uZHNgLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG9wZXJhdGlvbkZuOiBwYXJhbXMub3BlcmF0aW9uRm4sXG4gICAgICAgICAgICBvcGVyYXRpb25OYW1lOiBwYXJhbXMub3BlcmF0aW9uTmFtZSA/PyAnJ1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcblxuICAgICAgICBhd2FpdCBzbGVlcChmdWxsT3B0aW9ucy5yZXRyeURlbGF5SW5NaWxsaXNlY29uZHMsIGFib3J0U2lnbmFsKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIG9wZXJhdGlvbk5hbWU6IHBhcmFtcy5vcGVyYXRpb25OYW1lID8/ICcnLFxuICAgIHN0YWNrVHJhY2UsXG4gICAgdGltZW91dEluTWlsbGlzZWNvbmRzOiBmdWxsT3B0aW9ucy50aW1lb3V0SW5NaWxsaXNlY29uZHNcbiAgfSkpO1xufVxuXG4vKipcbiAqIEV4ZWN1dGVzIGEgZnVuY3Rpb24gd2l0aCBhIHRpbWVvdXQuIElmIHRoZSBmdW5jdGlvbiBkb2VzIG5vdCBjb21wbGV0ZSB3aXRoaW4gdGhlIHNwZWNpZmllZCB0aW1lLCBpdCBpcyBjb25zaWRlcmVkIHRvIGhhdmUgdGltZWQgb3V0LlxuICpcbiAqIElmIGBERUJVRz1vYnNpZGlhbi1kZXYtdXRpbHM6QXN5bmM6cnVuV2l0aFRpbWVvdXRgIGlzIHNldCwgdGhlIGV4ZWN1dGlvbiBpcyBub3QgdGVybWluYXRlZCBhZnRlciB0aGUgdGltZW91dCBhbmQgdGhlIGZ1bmN0aW9uIGlzIGFsbG93ZWQgdG8gcnVuIGluZGVmaW5pdGVseS5cbiAqXG4gKiBAdHlwZVBhcmFtIFJlc3VsdCAtIFRoZSB0eXBlIG9mIHRoZSByZXN1bHQgZnJvbSB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uLlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHJlc3VsdCBvZiB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIG9yIHJlamVjdHMgaWYgaXQgdGltZXMgb3V0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuV2l0aFRpbWVvdXQ8UmVzdWx0PihwYXJhbXM6IFJ1bldpdGhUaW1lb3V0UGFyYW1zPFJlc3VsdD4pOiBQcm9taXNlPFJlc3VsdD4ge1xuICBjb25zdCBzdGFja1RyYWNlID0gcGFyYW1zLnN0YWNrVHJhY2UgPz8gZ2V0U3RhY2tUcmFjZSgxKTtcbiAgY29uc3Qgc3RhcnRUaW1lID0gcGVyZm9ybWFuY2Uubm93KCk7XG5cbiAgY29uc3QgcnVuQWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICBjb25zdCB0aW1lb3V0QWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gIGxldCByZXN1bHQ6IG51bGwgfCBSZXN1bHQgPSBudWxsO1xuICBsZXQgaGFzUmVzdWx0ID0gZmFsc2U7XG4gIGxldCBpc0NvbXBsZXRlZCA9IGZhbHNlO1xuICBjb25zdCBydW5XaXRoVGltZW91dERlYnVnZ2VyID0gZ2V0TGliRGVidWdnZXIoJ0FzeW5jOnJ1bldpdGhUaW1lb3V0Jyk7XG4gIGNvbnN0IG9uVGltZW91dCA9IHBhcmFtcy5vblRpbWVvdXQgPz8gZGVmYXVsdE9uVGltZW91dDtcblxuICBhd2FpdCBQcm9taXNlLnJhY2UoW3J1bigpLCBpbm5lclRpbWVvdXQoKV0pO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVubmVjZXNzYXJ5LWNvbmRpdGlvbiAtLSBJdCBtaWdodCBjaGFuZ2VkIGluc2lkZSBgcnVuKClgLiBFU0xpbnQgbWlzdGFrZW5seSBkb2VzIG5vdCByZWNvZ25pemUgaXQuXG4gIGlmIChoYXNSZXN1bHQpIHtcbiAgICByZXR1cm4gcmVzdWx0IGFzIFJlc3VsdDtcbiAgfVxuXG4gIHRocm93IG5ldyBDdXN0b21TdGFja1RyYWNlRXJyb3IoJ1J1biB3aXRoIHRpbWVvdXQgZmFpbGVkJywgc3RhY2tUcmFjZSwgcnVuQWJvcnRDb250cm9sbGVyLnNpZ25hbC5yZWFzb24pO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIHJ1bigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgcmVzdWx0ID0gYXdhaXQgcGFyYW1zLm9wZXJhdGlvbkZuKHJ1bkFib3J0Q29udHJvbGxlci5zaWduYWwpO1xuICAgICAgY29uc3QgZHVyYXRpb24gPSBNYXRoLnRydW5jKHBlcmZvcm1hbmNlLm5vdygpIC0gc3RhcnRUaW1lKTtcbiAgICAgIHByaW50V2l0aFN0YWNrVHJhY2UocnVuV2l0aFRpbWVvdXREZWJ1Z2dlciwgc3RhY2tUcmFjZSwgYEV4ZWN1dGlvbiB0aW1lOiAke1N0cmluZyhkdXJhdGlvbil9IG1pbGxpc2Vjb25kc2AsIHtcbiAgICAgICAgY29udGV4dDogcGFyYW1zLmNvbnRleHQsXG4gICAgICAgIG9wZXJhdGlvbkZuOiBwYXJhbXMub3BlcmF0aW9uRm4sXG4gICAgICAgIG9wZXJhdGlvbk5hbWU6IHBhcmFtcy5vcGVyYXRpb25OYW1lID8/ICcnXG4gICAgICB9KTtcbiAgICAgIGhhc1Jlc3VsdCA9IHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcnVuQWJvcnRDb250cm9sbGVyLmFib3J0KGUpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpc0NvbXBsZXRlZCA9IHRydWU7XG4gICAgICB0aW1lb3V0QWJvcnRDb250cm9sbGVyLmFib3J0KG5ldyBFcnJvcignQ29tcGxldGVkJykpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGlubmVyVGltZW91dCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCBzbGVlcChwYXJhbXMudGltZW91dEluTWlsbGlzZWNvbmRzLCB0aW1lb3V0QWJvcnRDb250cm9sbGVyLnNpZ25hbCk7XG5cbiAgICBpZiAoaXNDb21wbGV0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZHVyYXRpb24gPSBNYXRoLnRydW5jKHBlcmZvcm1hbmNlLm5vdygpIC0gc3RhcnRUaW1lKTtcbiAgICBwcmludFdpdGhTdGFja1RyYWNlKHJ1bldpdGhUaW1lb3V0RGVidWdnZXIsIHN0YWNrVHJhY2UsIGBUaW1lZCBvdXQgYWZ0ZXIgJHtTdHJpbmcoZHVyYXRpb24pfSBtaWxsaXNlY29uZHNgLCB7XG4gICAgICBjb250ZXh0OiBwYXJhbXMuY29udGV4dCxcbiAgICAgIG9wZXJhdGlvbkZuOiBwYXJhbXMub3BlcmF0aW9uRm4sXG4gICAgICBvcGVyYXRpb25OYW1lOiBwYXJhbXMub3BlcmF0aW9uTmFtZSA/PyAnJ1xuICAgIH0pO1xuXG4gICAgY29uc3QgdGltZW91dENvbnRleHQ6IFRpbWVvdXRDb250ZXh0ID0gbm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzPFRpbWVvdXRDb250ZXh0Pih7XG4gICAgICBkdXJhdGlvbixcbiAgICAgIG9uT3BlcmF0aW9uQ29tcGxldGVkKGNhbGxiYWNrKSB7XG4gICAgICAgIHRpbWVvdXRBYm9ydENvbnRyb2xsZXIuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgY2FsbGJhY2spO1xuICAgICAgfSxcbiAgICAgIG9wZXJhdGlvbk5hbWU6IHBhcmFtcy5vcGVyYXRpb25OYW1lID8/ICcnLFxuICAgICAgdGVybWluYXRlT3BlcmF0aW9uKCkge1xuICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihgVGltZWQgb3V0IGFmdGVyICR7U3RyaW5nKGR1cmF0aW9uKX0gbWlsbGlzZWNvbmRzYCk7XG4gICAgICAgIHJ1bkFib3J0Q29udHJvbGxlci5hYm9ydChlcnJvcik7XG4gICAgICAgIHRpbWVvdXRBYm9ydENvbnRyb2xsZXIuYWJvcnQoZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgb25UaW1lb3V0KHRpbWVvdXRDb250ZXh0KTtcbiAgICBhd2FpdCB3YWl0Rm9yQWJvcnQodGltZW91dEFib3J0Q29udHJvbGxlci5zaWduYWwpO1xuICB9XG5cbiAgZnVuY3Rpb24gZGVmYXVsdE9uVGltZW91dChjdHg6IFRpbWVvdXRDb250ZXh0KTogdm9pZCB7XG4gICAgY3R4LnRlcm1pbmF0ZU9wZXJhdGlvbigpO1xuICB9XG59XG5cbi8qKlxuICogR2V0cyB0aGUgbmV4dCBzZXQgaW1tZWRpYXRlLlxuICpcbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIG5leHQgc2V0IGltbWVkaWF0ZSBpcyBhdmFpbGFibGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZXRJbW1lZGlhdGVBc3luYygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgc2V0SW1tZWRpYXRlKCgpID0+IHtcbiAgICAgIHJlc29sdmUoKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbi8qKlxuICogRGVsYXlzIGV4ZWN1dGlvbiBmb3IgYSBzcGVjaWZpZWQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcy5cbiAqXG4gKiBAcGFyYW0gZGVsYXkgLSBUaGUgdGltZSB0byB3YWl0IGluIG1pbGxpc2Vjb25kcy5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgYWZ0ZXIgdGhlIHNwZWNpZmllZCBkZWxheS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNldFRpbWVvdXRBc3luYyhkZWxheT86IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIHdpbmRvdy5zZXRUaW1lb3V0KHJlc29sdmUsIGRlbGF5KTtcbiAgfSk7XG59XG5cbi8qKlxuICogRGVsYXlzIGV4ZWN1dGlvbiBmb3IgYSBzcGVjaWZpZWQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcy5cbiAqXG4gKiBAcGFyYW0gbWlsbGlzZWNvbmRzIC0gVGhlIHRpbWUgdG8gd2FpdCBpbiBtaWxsaXNlY29uZHMuXG4gKiBAcGFyYW0gYWJvcnRTaWduYWwgLSBUaGUgYWJvcnQgc2lnbmFsIHRvIGxpc3RlbiB0by5cbiAqIEBwYXJhbSBzaG91bGRUaHJvd09uQWJvcnQgLSBXaGV0aGVyIHRvIHRocm93IGFuIGVycm9yIGlmIHRoZSBhYm9ydCBzaWduYWwgaXMgYWJvcnRlZC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgYWZ0ZXIgdGhlIHNwZWNpZmllZCBkZWxheS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNsZWVwKG1pbGxpc2Vjb25kczogbnVtYmVyLCBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsLCBzaG91bGRUaHJvd09uQWJvcnQ/OiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IHdhaXRGb3JBYm9ydChhYm9ydFNpZ25hbEFueShhYm9ydFNpZ25hbCwgYWJvcnRTaWduYWxUaW1lb3V0KG1pbGxpc2Vjb25kcykpKTtcbiAgaWYgKHNob3VsZFRocm93T25BYm9ydCkge1xuICAgIGFib3J0U2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyBhIHtAbGluayBQcm9taXNlfSB0aGF0IHJlamVjdHMgYWZ0ZXIgdGhlIHNwZWNpZmllZCB0aW1lb3V0IHBlcmlvZC5cbiAqXG4gKiBAcGFyYW0gdGltZW91dEluTWlsbGlzZWNvbmRzIC0gVGhlIHRpbWVvdXQgcGVyaW9kIGluIG1pbGxpc2Vjb25kcy5cbiAqIEBwYXJhbSBhYm9ydFNpZ25hbCAtIFRoZSBhYm9ydCBzaWduYWwgdG8gbGlzdGVuIHRvLlxuICogQHBhcmFtIHNob3VsZFRocm93T25BYm9ydCAtIFdoZXRoZXIgdG8gdGhyb3cgYW4gZXJyb3IgaWYgdGhlIGFib3J0IHNpZ25hbCBpcyBhYm9ydGVkLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCBhbHdheXMgcmVqZWN0cyB3aXRoIGEgdGltZW91dCBlcnJvci5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRpbWVvdXQodGltZW91dEluTWlsbGlzZWNvbmRzOiBudW1iZXIsIGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWwsIHNob3VsZFRocm93T25BYm9ydD86IGJvb2xlYW4pOiBQcm9taXNlPG5ldmVyPiB7XG4gIGF3YWl0IHNsZWVwKHRpbWVvdXRJbk1pbGxpc2Vjb25kcywgYWJvcnRTaWduYWwsIHNob3VsZFRocm93T25BYm9ydCk7XG4gIHRocm93IG5ldyBFcnJvcihgVGltZWQgb3V0IGluICR7U3RyaW5nKHRpbWVvdXRJbk1pbGxpc2Vjb25kcyl9IG1pbGxpc2Vjb25kc2ApO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIEFzeW5jSXRlcmFibGVJdGVyYXRvciB0byBhbiBhcnJheSBieSBjb25zdW1pbmcgYWxsIGl0cyBlbGVtZW50cy5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiBlbGVtZW50cyBwcm9kdWNlZCBieSB0aGUgQXN5bmNJdGVyYWJsZUl0ZXJhdG9yLlxuICogQHBhcmFtIGl0ZXIgLSBUaGUgQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggYW4gYXJyYXkgb2YgYWxsIHRoZSBlbGVtZW50cyBpbiB0aGUgQXN5bmNJdGVyYWJsZUl0ZXJhdG9yLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdG9BcnJheTxUPihpdGVyOiBBc3luY0l0ZXJhYmxlSXRlcmF0b3I8VD4pOiBQcm9taXNlPFRbXT4ge1xuICBjb25zdCBhcnI6IFRbXSA9IFtdO1xuICBmb3IgYXdhaXQgKGNvbnN0IGl0ZW0gb2YgaXRlcikge1xuICAgIGFyci5wdXNoKGl0ZW0pO1xuICB9XG4gIHJldHVybiBhcnI7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWNBO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUDtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxtQ0FBbUM7QUFDNUM7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUEwQ1AsZUFBc0IsZ0JBQWdCLFNBQWlDLFlBQW9DO0FBQ3pHLGlCQUFlLGNBQWMsQ0FBQztBQUM5QixNQUFJO0FBQ0YsVUFBTSxRQUFRO0FBQUEsRUFDaEIsU0FBUyxZQUFZO0FBQ25CLFVBQU0sZUFBZSxJQUFJLHNCQUFzQiw2QkFBNkIsWUFBWSxVQUFVO0FBQ2xHLFFBQUksa0JBQWtCLFlBQVksR0FBRztBQUNuQztBQUFBLElBQ0Y7QUFDQSx3QkFBb0IsWUFBWTtBQUFBLEVBQ2xDO0FBQ0Y7QUFVQSxlQUFzQixZQUFlLEtBQVUsV0FBdUY7QUFDcEksUUFBTSxNQUFXLENBQUM7QUFFbEIsUUFBTSxTQUFTLElBQUk7QUFDbkIsV0FBUyxJQUFJLEdBQUcsSUFBSSxRQUFRLEtBQUs7QUFDL0IsUUFBSSxDQUFDLE9BQU8sT0FBTyxLQUFLLENBQUMsR0FBRztBQUMxQjtBQUFBLElBQ0Y7QUFFQSxVQUFNLE9BQU8sSUFBSSxDQUFDO0FBQ2xCLFFBQUksTUFBTSxVQUFVLE1BQU0sR0FBRyxHQUFHLEdBQUc7QUFDakMsVUFBSSxLQUFLLElBQUk7QUFBQSxJQUNmO0FBQUEsRUFDRjtBQUVBLFNBQU87QUFDVDtBQVVBLGVBQXNCLG1CQUFzQixLQUFVLFdBQXdGO0FBQzVJLFFBQU0sU0FBUyxJQUFJO0FBQ25CLE1BQUksYUFBYTtBQUNqQixXQUFTLFlBQVksR0FBRyxZQUFZLFFBQVEsYUFBYTtBQUN2RCxRQUFJLENBQUMsT0FBTyxPQUFPLEtBQUssU0FBUyxHQUFHO0FBQ2xDO0FBQUEsSUFDRjtBQUVBLFVBQU0sVUFBVSxJQUFJLFNBQVM7QUFDN0IsUUFBSSxNQUFNLFVBQVUsU0FBUyxXQUFXLEdBQUcsR0FBRztBQUU1QyxVQUFJLFlBQVksSUFBSTtBQUFBLElBQ3RCO0FBQUEsRUFDRjtBQUNBLE1BQUksU0FBUztBQUNmO0FBV0EsZUFBc0IsYUFBbUIsS0FBVSxVQUFrRjtBQUNuSSxVQUFRLE1BQU0sU0FBUyxLQUFLLFFBQVEsR0FBRyxLQUFLO0FBQzlDO0FBV0EsZUFBc0IsU0FBZSxLQUFVLFVBQWdGO0FBQzdILFNBQU8sTUFBTSx1QkFBdUIsSUFBSSxJQUFJLFFBQVEsQ0FBQztBQUN2RDtBQVVPLFNBQVMsbUJBQTJDLFdBQXVDLFlBQWdEO0FBQ2hKLGlCQUFlLGNBQWMsQ0FBQztBQUM5QixTQUFPLElBQUksU0FBcUI7QUFDOUIsc0JBQWtCLFVBQVU7QUFDNUIsVUFBTSxrQkFBa0IsY0FBYyxDQUFDO0FBQ3ZDLGlCQUFhLEdBQUcsVUFBVTtBQUFBO0FBQUEsRUFBNEMsZUFBZTtBQUNyRixzQkFBa0IsTUFBTSxVQUFVLEdBQUcsSUFBSSxHQUFHLFVBQVU7QUFBQSxFQUN4RDtBQUNGO0FBVU8sU0FBUyxtQkFBbUQsUUFBMkU7QUFDNUksU0FBTyxVQUFVLFNBQWdDO0FBQy9DLFVBQU0sVUFBVTtBQUNoQixXQUFPLE9BQU8sR0FBRyxJQUFJO0FBQUEsRUFDdkI7QUFDRjtBQVFPLFNBQVMsa0JBQWtCLE9BQXlCO0FBQ3pELE1BQUksUUFBUTtBQUNaLFNBQU8sRUFBRSxpQkFBaUIsY0FBYztBQUN0QyxRQUFJLEVBQUUsaUJBQWlCLFFBQVE7QUFDN0IsYUFBTztBQUFBLElBQ1Q7QUFFQSxZQUFRLE1BQU07QUFBQSxFQUNoQjtBQUVBLGlCQUFlLHlCQUF5QixFQUFFLEtBQUs7QUFDL0MsU0FBTztBQUNUO0FBMkJBLGVBQXNCLFlBQWUsU0FBcUIsZUFBc0M7QUFDOUYsUUFBTSxzQkFBc0IsZUFBZSxtQkFBbUI7QUFDOUQsUUFBTSxhQUFhLGNBQWMsQ0FBQztBQUNsQyxNQUFJO0FBQ0YsV0FBTyxNQUFNO0FBQUEsRUFDZixTQUFTLEdBQUc7QUFDVix3QkFBb0IsaUJBQWlCLElBQUksc0JBQXNCLGlCQUFpQixZQUFZLENBQUMsQ0FBQztBQUM5RixXQUFPO0FBQUEsRUFDVDtBQUNGO0FBRUEsTUFBTSx5QkFBeUIsb0JBQUksSUFBbUI7QUFDdEQsSUFBSSxrQ0FBa0M7QUFLL0IsU0FBUyxnQ0FBc0M7QUFDcEQsb0NBQWtDO0FBQ2xDLHlCQUF1QixNQUFNO0FBQy9CO0FBU08sU0FBUywrQkFBcUM7QUFDbkQsb0NBQWtDO0FBQ3BDO0FBUU8sU0FBUyxrQkFBa0IsU0FBb0MsWUFBMkI7QUFDL0YsaUJBQWUsY0FBYyxDQUFDO0FBRTlCLE1BQUk7QUFDSixNQUFJO0FBQ0YsYUFBUyxRQUFRO0FBQUEsRUFDbkIsU0FBUyxPQUFPO0FBRWQsd0JBQW9CLGdCQUFnQixNQUFNLFFBQVEsT0FBTyxLQUFLLEdBQUcsVUFBVSxDQUFDO0FBQUEsRUFDOUU7QUFDQSxNQUFJLGtCQUFrQixTQUFTO0FBQzdCLHdCQUFvQixnQkFBZ0IsTUFBTSxRQUFRLFVBQVUsQ0FBQztBQUFBLEVBQy9EO0FBQ0Y7QUFVTyxTQUFTLDRCQUNkLFNBQ0Esc0JBQXNCLEdBQ3RCLFlBQ0EsYUFDTTtBQUNOLGtCQUFnQixpQkFBaUI7QUFDakMsY0FBWSxlQUFlO0FBQzNCLGlCQUFlLGNBQWMsQ0FBQztBQUM5QixvQkFBa0IsWUFBWTtBQUM1QixVQUFNLE1BQU0scUJBQXFCLGFBQWEsSUFBSTtBQUNsRCxVQUFNLFFBQVEsV0FBVztBQUFBLEVBQzNCLEdBQUcsVUFBVTtBQUNmO0FBU0EsZUFBc0IsK0JBQWtDLFVBQWlEO0FBQ3ZHLFFBQU0sVUFBZSxDQUFDO0FBQ3RCLGFBQVcsV0FBVyxVQUFVO0FBQzlCLFlBQVEsS0FBSyxNQUFNLFFBQVEsQ0FBQztBQUFBLEVBQzlCO0FBQ0EsU0FBTztBQUNUO0FBU0EsZUFBc0IsdUJBQTBCLFVBQXlDO0FBQ3ZGLFNBQU8sTUFBTSwrQkFBK0IsU0FBUyxJQUFJLENBQUMsWUFBWSxNQUFNLE9BQU8sQ0FBQztBQUN0RjtBQVVBLGVBQXNCLDRCQUEyQztBQUMvRCxNQUFJLENBQUMsaUNBQWlDO0FBQ3BDLFVBQU0sSUFBSSxNQUFNLGtIQUFrSDtBQUFBLEVBQ3BJO0FBRUEsU0FBTyx1QkFBdUIsT0FBTyxHQUFHO0FBQ3RDLFVBQU0sUUFBUSxXQUFXLENBQUMsR0FBRyxzQkFBc0IsQ0FBQztBQUFBLEVBQ3REO0FBQ0Y7QUFFQSxTQUFTLG9CQUFvQixXQUFnQztBQUMzRCxNQUFJLENBQUMsaUNBQWlDO0FBQ3BDO0FBQUEsRUFDRjtBQUVBLHlCQUF1QixJQUFJLFNBQVM7QUFFcEMsT0FBSyxVQUFVLFFBQVEsTUFBTTtBQUMzQiwyQkFBdUIsT0FBTyxTQUFTO0FBQUEsRUFDekMsQ0FBQztBQUNIO0FBRUEsTUFBTSx1QkFBdUIsb0JBQUksUUFBZTtBQThHekMsU0FBUyxNQUFNLGNBQW9DLGNBQW1FO0FBQzNILE1BQUksbUJBQW1CO0FBQ3ZCLE1BQUksY0FBYztBQUNoQix1QkFBbUIsYUFBYSxLQUFLLE1BQU0sYUFBYSxLQUFLLE1BQVM7QUFBQSxFQUN4RSxPQUFPO0FBQ0wsVUFBTSxhQUFhLGFBQWE7QUFDaEMsUUFBSSxZQUFZO0FBQ2QseUJBQW1CLHNCQUFzQixVQUFVLGFBQThCLFFBQVEsUUFBUSxVQUFVO0FBQUEsSUFDN0c7QUFBQSxFQUNGO0FBRUEsb0JBQWtCLE1BQU0sSUFBSTtBQUM1QixTQUFPO0FBQ1Q7QUFPTyxTQUFTLHNCQUFzQixPQUFvQjtBQUN4RCx1QkFBcUIsSUFBSSxLQUFLO0FBQ2hDO0FBT0EsZUFBc0IsWUFBNEI7QUFDaEQsUUFBTSxJQUFJLFFBQVEsTUFBTTtBQUN0QixTQUFLO0FBQUEsRUFDUCxDQUFDO0FBRUQsU0FBTyxPQUFPLHFCQUFxQjtBQUVyQztBQU9BLGVBQXNCLGdCQUErQjtBQUNuRCxTQUFPLElBQUksUUFBUSxDQUFDLFlBQVk7QUFDOUIsWUFBUSxTQUFTLE1BQU07QUFDckIsY0FBUTtBQUFBLElBQ1YsQ0FBQztBQUFBLEVBQ0gsQ0FBQztBQUNIO0FBU08sU0FBUyxvQkFBdUIsWUFBMkM7QUFDaEYsTUFBSSxDQUFDLFlBQVk7QUFDZixXQUFPO0FBQUEsRUFDVDtBQUVBLE1BQUksc0JBQXNCLFNBQVM7QUFDakMsV0FBTztBQUFBLEVBQ1Q7QUFFQSxNQUFLLFdBQXVDLE1BQU07QUFDaEQsV0FBTyxRQUFRLFFBQVEsVUFBVTtBQUFBLEVBQ25DO0FBRUEsU0FBTztBQUNUO0FBT0EsZUFBc0Isc0JBQXFDO0FBQ3pELFNBQU8sSUFBSSxRQUFRLENBQUMsWUFBWTtBQUM5QixtQkFBZSxNQUFNO0FBQ25CLGNBQVE7QUFBQSxJQUNWLENBQUM7QUFBQSxFQUNILENBQUM7QUFDSDtBQU9BLGVBQXNCLDZCQUE0QztBQUNoRSxTQUFPLElBQUksUUFBUSxDQUFDLFlBQVk7QUFDOUIsV0FBTyxzQkFBc0IsTUFBTTtBQUNqQyxjQUFRO0FBQUEsSUFDVixDQUFDO0FBQUEsRUFDSCxDQUFDO0FBQ0g7QUFRQSxlQUFzQixpQkFBaUIsUUFBK0M7QUFDcEYsUUFBTSwyQkFBMkIsZUFBZSx3QkFBd0I7QUFDeEUsUUFBTSxhQUFhLE9BQU8sY0FBYyxjQUFjLENBQUM7QUFDdkQsUUFBTSx3QkFBd0I7QUFBQTtBQUFBLElBRTVCLDBCQUEwQjtBQUFBLElBQzFCLG9CQUFvQjtBQUFBO0FBQUEsSUFFcEIsdUJBQXVCO0FBQUEsRUFDekI7QUFDQSxRQUFNLGNBQWMsRUFBRSxHQUFHLHVCQUF1QixHQUFHLE9BQU8sYUFBYTtBQUN2RSxjQUFZLGFBQWEsZUFBZTtBQUV4QyxRQUFNLGVBQWUsNEJBQXdEO0FBQUEsSUFDM0UsU0FBUyxFQUFFLGVBQWUsT0FBTyxpQkFBaUIsSUFBSSxTQUFTLE9BQU8sWUFBWTtBQUFBLElBQ2xGLFdBQVcsT0FBTztBQUFBLElBQ2xCLE1BQU0sWUFBWSxhQUF5QztBQUN6RCxZQUFNLHNCQUFzQixlQUFlLFlBQVksYUFBYSxXQUFXO0FBQy9FLDBCQUFvQixlQUFlO0FBQ25DLFVBQUksVUFBVTtBQUNkLGFBQU8sQ0FBQyxvQkFBb0IsU0FBUztBQUNuQztBQUNBLFlBQUk7QUFDSixZQUFJO0FBQ0Ysc0JBQVksTUFBTSxPQUFPLFlBQVksbUJBQW1CO0FBQUEsUUFDMUQsU0FBUyxPQUFPO0FBRWQsY0FBSSxvQkFBb0IsV0FBVyxDQUFDLFlBQVksc0JBQXNCLHFCQUFxQixJQUFJLEtBQWMsR0FBRztBQUM5RyxrQkFBTSxJQUFJLHNCQUFzQiwyQkFBMkIsWUFBWSxLQUFLO0FBQUEsVUFDOUU7QUFDQSxxQkFBVyxLQUFLO0FBQ2hCLHNCQUFZO0FBQUEsUUFDZDtBQUNBLFlBQUksV0FBVztBQUNiLDhCQUFvQiwwQkFBMEIsWUFBWSxzQ0FBc0MsT0FBTyxPQUFPLENBQUMsYUFBYTtBQUFBLFlBQzFILGFBQWEsT0FBTztBQUFBLFlBQ3BCLGVBQWUsT0FBTyxpQkFBaUI7QUFBQSxVQUN6QyxDQUFDO0FBQ0Q7QUFBQSxRQUNGO0FBRUE7QUFBQSxVQUNFO0FBQUEsVUFDQTtBQUFBLFVBQ0EsaUJBQWlCLE9BQU8sT0FBTyxDQUFDLDhDQUE4QyxPQUFPLFlBQVksd0JBQXdCLENBQUM7QUFBQSxVQUMxSDtBQUFBLFlBQ0UsYUFBYSxPQUFPO0FBQUEsWUFDcEIsZUFBZSxPQUFPLGlCQUFpQjtBQUFBLFVBQ3pDO0FBQUEsUUFDRjtBQUVBLGNBQU0sTUFBTSxZQUFZLDBCQUEwQixXQUFXO0FBQUEsTUFDL0Q7QUFBQSxJQUNGO0FBQUEsSUFDQSxlQUFlLE9BQU8saUJBQWlCO0FBQUEsSUFDdkM7QUFBQSxJQUNBLHVCQUF1QixZQUFZO0FBQUEsRUFDckMsQ0FBQyxDQUFDO0FBQ0o7QUFXQSxlQUFzQixlQUF1QixRQUF1RDtBQUNsRyxRQUFNLGFBQWEsT0FBTyxjQUFjLGNBQWMsQ0FBQztBQUN2RCxRQUFNLFlBQVksWUFBWSxJQUFJO0FBRWxDLFFBQU0scUJBQXFCLElBQUksZ0JBQWdCO0FBQy9DLFFBQU0seUJBQXlCLElBQUksZ0JBQWdCO0FBRW5ELE1BQUksU0FBd0I7QUFDNUIsTUFBSSxZQUFZO0FBQ2hCLE1BQUksY0FBYztBQUNsQixRQUFNLHlCQUF5QixlQUFlLHNCQUFzQjtBQUNwRSxRQUFNLFlBQVksT0FBTyxhQUFhO0FBRXRDLFFBQU0sUUFBUSxLQUFLLENBQUMsSUFBSSxHQUFHLGFBQWEsQ0FBQyxDQUFDO0FBRTFDLE1BQUksV0FBVztBQUNiLFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSxJQUFJLHNCQUFzQiwyQkFBMkIsWUFBWSxtQkFBbUIsT0FBTyxNQUFNO0FBRXZHLGlCQUFlLE1BQXFCO0FBQ2xDLFFBQUk7QUFDRixlQUFTLE1BQU0sT0FBTyxZQUFZLG1CQUFtQixNQUFNO0FBQzNELFlBQU0sV0FBVyxLQUFLLE1BQU0sWUFBWSxJQUFJLElBQUksU0FBUztBQUN6RCwwQkFBb0Isd0JBQXdCLFlBQVksbUJBQW1CLE9BQU8sUUFBUSxDQUFDLGlCQUFpQjtBQUFBLFFBQzFHLFNBQVMsT0FBTztBQUFBLFFBQ2hCLGFBQWEsT0FBTztBQUFBLFFBQ3BCLGVBQWUsT0FBTyxpQkFBaUI7QUFBQSxNQUN6QyxDQUFDO0FBQ0Qsa0JBQVk7QUFBQSxJQUNkLFNBQVMsR0FBRztBQUNWLHlCQUFtQixNQUFNLENBQUM7QUFBQSxJQUM1QixVQUFFO0FBQ0Esb0JBQWM7QUFDZCw2QkFBdUIsTUFBTSxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQUEsSUFDckQ7QUFBQSxFQUNGO0FBRUEsaUJBQWUsZUFBOEI7QUFDM0MsVUFBTSxNQUFNLE9BQU8sdUJBQXVCLHVCQUF1QixNQUFNO0FBRXZFLFFBQUksYUFBYTtBQUNmO0FBQUEsSUFDRjtBQUNBLFVBQU0sV0FBVyxLQUFLLE1BQU0sWUFBWSxJQUFJLElBQUksU0FBUztBQUN6RCx3QkFBb0Isd0JBQXdCLFlBQVksbUJBQW1CLE9BQU8sUUFBUSxDQUFDLGlCQUFpQjtBQUFBLE1BQzFHLFNBQVMsT0FBTztBQUFBLE1BQ2hCLGFBQWEsT0FBTztBQUFBLE1BQ3BCLGVBQWUsT0FBTyxpQkFBaUI7QUFBQSxJQUN6QyxDQUFDO0FBRUQsVUFBTSxpQkFBaUMsNEJBQTRDO0FBQUEsTUFDakY7QUFBQSxNQUNBLHFCQUFxQixVQUFVO0FBQzdCLCtCQUF1QixPQUFPLGlCQUFpQixTQUFTLFFBQVE7QUFBQSxNQUNsRTtBQUFBLE1BQ0EsZUFBZSxPQUFPLGlCQUFpQjtBQUFBLE1BQ3ZDLHFCQUFxQjtBQUNuQixjQUFNLFFBQVEsSUFBSSxNQUFNLG1CQUFtQixPQUFPLFFBQVEsQ0FBQyxlQUFlO0FBQzFFLDJCQUFtQixNQUFNLEtBQUs7QUFDOUIsK0JBQXVCLE1BQU0sS0FBSztBQUFBLE1BQ3BDO0FBQUEsSUFDRixDQUFDO0FBRUQsY0FBVSxjQUFjO0FBQ3hCLFVBQU0sYUFBYSx1QkFBdUIsTUFBTTtBQUFBLEVBQ2xEO0FBRUEsV0FBUyxpQkFBaUIsS0FBMkI7QUFDbkQsUUFBSSxtQkFBbUI7QUFBQSxFQUN6QjtBQUNGO0FBT0EsZUFBc0Isb0JBQW1DO0FBQ3ZELFNBQU8sSUFBSSxRQUFRLENBQUMsWUFBWTtBQUM5QixpQkFBYSxNQUFNO0FBQ2pCLGNBQVE7QUFBQSxJQUNWLENBQUM7QUFBQSxFQUNILENBQUM7QUFDSDtBQVFBLGVBQXNCLGdCQUFnQixPQUErQjtBQUNuRSxRQUFNLElBQUksUUFBUSxDQUFDLFlBQVk7QUFDN0IsV0FBTyxXQUFXLFNBQVMsS0FBSztBQUFBLEVBQ2xDLENBQUM7QUFDSDtBQVVBLGVBQXNCLE1BQU0sY0FBc0IsYUFBMkIsb0JBQTZDO0FBQ3hILFFBQU0sYUFBYSxlQUFlLGFBQWEsbUJBQW1CLFlBQVksQ0FBQyxDQUFDO0FBQ2hGLE1BQUksb0JBQW9CO0FBQ3RCLGlCQUFhLGVBQWU7QUFBQSxFQUM5QjtBQUNGO0FBVUEsZUFBc0IsUUFBUSx1QkFBK0IsYUFBMkIsb0JBQThDO0FBQ3BJLFFBQU0sTUFBTSx1QkFBdUIsYUFBYSxrQkFBa0I7QUFDbEUsUUFBTSxJQUFJLE1BQU0sZ0JBQWdCLE9BQU8scUJBQXFCLENBQUMsZUFBZTtBQUM5RTtBQVNBLGVBQXNCLFFBQVcsTUFBOEM7QUFDN0UsUUFBTSxNQUFXLENBQUM7QUFDbEIsbUJBQWlCLFFBQVEsTUFBTTtBQUM3QixRQUFJLEtBQUssSUFBSTtBQUFBLEVBQ2Y7QUFDQSxTQUFPO0FBQ1Q7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
|
481
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2FzeW5jLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIGFzeW5jaHJvbm91cyBvcGVyYXRpb25zLlxuICovXG5cbmltcG9ydCB0eXBlIHsgUHJvbWlzYWJsZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB0eXBlIHtcbiAgR2VuZXJpY0FzeW5jRnVuY3Rpb24sXG4gIEdlbmVyaWNGdW5jdGlvbixcbiAgR2VuZXJpY1ZvaWRGdW5jdGlvblxufSBmcm9tICcuL2Z1bmN0aW9uLnRzJztcblxuaW1wb3J0IHtcbiAgYWJvcnRTaWduYWxBbnksXG4gIGFib3J0U2lnbmFsTmV2ZXIsXG4gIGFib3J0U2lnbmFsVGltZW91dCxcbiAgd2FpdEZvckFib3J0XG59IGZyb20gJy4vYWJvcnQtY29udHJvbGxlci50cyc7XG5pbXBvcnQge1xuICBnZXRMaWJEZWJ1Z2dlcixcbiAgcHJpbnRXaXRoU3RhY2tUcmFjZVxufSBmcm9tICcuL2RlYnVnLnRzJztcbmltcG9ydCB7XG4gIEFTWU5DX1dSQVBQRVJfRVJST1JfTUVTU0FHRSxcbiAgQ3VzdG9tU3RhY2tUcmFjZUVycm9yLFxuICBlbWl0QXN5bmNFcnJvckV2ZW50LFxuICBnZXRTdGFja1RyYWNlLFxuICBwcmludEVycm9yLFxuICBTaWxlbnRFcnJvclxufSBmcm9tICcuL2Vycm9yLnRzJztcbmltcG9ydCB7XG4gIG5vb3AsXG4gIG5vb3BBc3luY1xufSBmcm9tICcuL2Z1bmN0aW9uLnRzJztcbmltcG9ydCB7IG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllcyB9IGZyb20gJy4vb2JqZWN0LXV0aWxzLnRzJztcbmltcG9ydCB7XG4gIGFzc2VydCxcbiAgYXNzZXJ0Tm9uTnVsbGFibGVcbn0gZnJvbSAnLi90eXBlLWd1YXJkcy50cyc7XG5cbi8qKlxuICogQSB0eXBlIHJlcHJlc2VudGluZyBhIGZ1bmN0aW9uIHRoYXQgcmVzb2x2ZXMgYSB7QGxpbmsgUHJvbWlzZX0uXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgdGhlIHZhbHVlLlxuICovXG5leHBvcnQgdHlwZSBQcm9taXNlUmVzb2x2ZTxUPiA9IHVuZGVmaW5lZCBleHRlbmRzIFQgPyAodmFsdWU/OiBQcm9taXNlTGlrZTxUPiB8IFQpID0+IHZvaWRcbiAgOiAodmFsdWU6IFByb21pc2VMaWtlPFQ+IHwgVCkgPT4gdm9pZDtcblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgcmV0cnlXaXRoVGltZW91dH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmV0cnlPcHRpb25zIHtcbiAgLyoqXG4gICAqIEEgYWJvcnQgc2lnbmFsIHRvIGNhbmNlbCB0aGUgcmV0cnkgb3BlcmF0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbDtcblxuICAvKipcbiAgICogQSBkZWxheSBpbiBtaWxsaXNlY29uZHMgYmV0d2VlbiByZXRyeSBhdHRlbXB0cy5cbiAgICovXG4gIHJlYWRvbmx5IHJldHJ5RGVsYXlJbk1pbGxpc2Vjb25kcz86IG51bWJlcjtcblxuICAvKipcbiAgICogV2hldGhlciB0byByZXRyeSB0aGUgZnVuY3Rpb24gb24gZXJyb3IuXG4gICAqL1xuICByZWFkb25seSBzaG91bGRSZXRyeU9uRXJyb3I/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBIG1heGltdW0gdGltZSBpbiBtaWxsaXNlY29uZHMgdG8gd2FpdCBiZWZvcmUgZ2l2aW5nIHVwIG9uIHJldHJ5aW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgdGltZW91dEluTWlsbGlzZWNvbmRzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEFkZHMgYW4gZXJyb3IgaGFuZGxlciB0byBhIHtAbGluayBQcm9taXNlfSB0aGF0IGNhdGNoZXMgYW55IGVycm9ycyBhbmQgZW1pdHMgYW4gYXN5bmMgZXJyb3IgZXZlbnQuXG4gKlxuICogQHBhcmFtIGFzeW5jRm4gLSBUaGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRvIGFkZCBhbiBlcnJvciBoYW5kbGVyIHRvLlxuICogQHBhcmFtIHN0YWNrVHJhY2UgLSBUaGUgc3RhY2sgdHJhY2Ugb2YgdGhlIHNvdXJjZSBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIGNvbXBsZXRlcyBvciBlbWl0cyBhc3luYyBlcnJvciBldmVudC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFkZEVycm9ySGFuZGxlcihhc3luY0ZuOiAoKSA9PiBQcm9taXNlPHVua25vd24+LCBzdGFja1RyYWNlPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIHN0YWNrVHJhY2UgPz89IGdldFN0YWNrVHJhY2UoMSk7XG4gIHRyeSB7XG4gICAgYXdhaXQgYXN5bmNGbigpO1xuICB9IGNhdGNoIChhc3luY0Vycm9yKSB7XG4gICAgY29uc3Qgd3JhcHBlZEVycm9yID0gbmV3IEN1c3RvbVN0YWNrVHJhY2VFcnJvcih7XG4gICAgICBjYXVzZTogYXN5bmNFcnJvcixcbiAgICAgIG1lc3NhZ2U6IEFTWU5DX1dSQVBQRVJfRVJST1JfTUVTU0FHRSxcbiAgICAgIHN0YWNrVHJhY2VcbiAgICB9KTtcbiAgICBpZiAoaGFuZGxlU2lsZW50RXJyb3Iod3JhcHBlZEVycm9yKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlbWl0QXN5bmNFcnJvckV2ZW50KHdyYXBwZWRFcnJvcik7XG4gIH1cbn1cblxuLyoqXG4gKiBGaWx0ZXJzIGFuIGFycmF5IGFzeW5jaHJvbm91c2x5LCBrZWVwaW5nIG9ubHkgdGhlIGVsZW1lbnRzIHRoYXQgc2F0aXNmeSB0aGUgcHJvdmlkZWQgcHJlZGljYXRlIGZ1bmN0aW9uLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIGVsZW1lbnRzIGluIHRoZSBpbnB1dCBhcnJheS5cbiAqIEBwYXJhbSBhcnIgLSBUaGUgYXJyYXkgdG8gZmlsdGVyLlxuICogQHBhcmFtIHByZWRpY2F0ZSAtIFRoZSBwcmVkaWNhdGUgZnVuY3Rpb24gdG8gdGVzdCBlYWNoIGVsZW1lbnQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggYW4gYXJyYXkgb2YgZWxlbWVudHMgdGhhdCBzYXRpc2Z5IHRoZSBwcmVkaWNhdGUgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhc3luY0ZpbHRlcjxUPihhcnI6IFRbXSwgcHJlZGljYXRlOiAodmFsdWU6IFQsIGluZGV4OiBudW1iZXIsIGFycmF5OiBUW10pID0+IFByb21pc2FibGU8Ym9vbGVhbj4pOiBQcm9taXNlPFRbXT4ge1xuICBjb25zdCBhbnM6IFRbXSA9IFtdO1xuXG4gIGNvbnN0IGxlbmd0aCA9IGFyci5sZW5ndGg7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoIU9iamVjdC5oYXNPd24oYXJyLCBpKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgaXRlbSA9IGFycltpXSBhcyBUO1xuICAgIGlmIChhd2FpdCBwcmVkaWNhdGUoaXRlbSwgaSwgYXJyKSkge1xuICAgICAgYW5zLnB1c2goaXRlbSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGFucztcbn1cblxuLyoqXG4gKiBGaWx0ZXJzIGFuIGFycmF5IGFzeW5jaHJvbm91c2x5IGluIHBsYWNlLCBrZWVwaW5nIG9ubHkgdGhlIGVsZW1lbnRzIHRoYXQgc2F0aXNmeSB0aGUgcHJvdmlkZWQgcHJlZGljYXRlIGZ1bmN0aW9uLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIGVsZW1lbnRzIGluIHRoZSBpbnB1dCBhcnJheS5cbiAqIEBwYXJhbSBhcnIgLSBUaGUgYXJyYXkgdG8gZmlsdGVyLlxuICogQHBhcmFtIHByZWRpY2F0ZSAtIFRoZSBwcmVkaWNhdGUgZnVuY3Rpb24gdG8gdGVzdCBlYWNoIGVsZW1lbnQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGFycmF5IGlzIGZpbHRlcmVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXN5bmNGaWx0ZXJJblBsYWNlPFQ+KGFycjogVFtdLCBwcmVkaWNhdGU6ICh2YWx1ZTogVCwgaW5kZXg6IG51bWJlciwgYXJyYXk6IFRbXSkgPT4gUHJvbWlzYWJsZTxib29sZWFuPik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBsZW5ndGggPSBhcnIubGVuZ3RoO1xuICBsZXQgd3JpdGVJbmRleCA9IDA7XG4gIGZvciAobGV0IHJlYWRJbmRleCA9IDA7IHJlYWRJbmRleCA8IGxlbmd0aDsgcmVhZEluZGV4KyspIHtcbiAgICBpZiAoIU9iamVjdC5oYXNPd24oYXJyLCByZWFkSW5kZXgpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50ID0gYXJyW3JlYWRJbmRleF0gYXMgVDtcbiAgICBpZiAoYXdhaXQgcHJlZGljYXRlKGN1cnJlbnQsIHJlYWRJbmRleCwgYXJyKSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlcXVpcmUtYXRvbWljLXVwZGF0ZXMgLS0gWWVzLCBpdCBpcyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiwgYnV0IEkgZG9uJ3QgYW4gZWxlZ2FudCB3YXkgdG8gZml4IGl0LlxuICAgICAgYXJyW3dyaXRlSW5kZXgrK10gPSBjdXJyZW50O1xuICAgIH1cbiAgfVxuICBhcnIubGVuZ3RoID0gd3JpdGVJbmRleDtcbn1cblxuLyoqXG4gKiBNYXBzIG92ZXIgYW4gYXJyYXkgYXN5bmNocm9ub3VzbHksIGFwcGx5aW5nIHRoZSBwcm92aWRlZCBjYWxsYmFjayBmdW5jdGlvbiB0byBlYWNoIGVsZW1lbnQsIGFuZCB0aGVuIGZsYXR0ZW5zIHRoZSByZXN1bHRzIGludG8gYSBzaW5nbGUgYXJyYXkuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgZWxlbWVudHMgaW4gdGhlIGlucHV0IGFycmF5LlxuICogQHR5cGVQYXJhbSBVIC0gVGhlIHR5cGUgb2YgZWxlbWVudHMgaW4gdGhlIG91dHB1dCBhcnJheS5cbiAqIEBwYXJhbSBhcnIgLSBUaGUgYXJyYXkgdG8gbWFwIG92ZXIgYW5kIGZsYXR0ZW4uXG4gKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gdG8gYXBwbHkgdG8gZWFjaCBlbGVtZW50LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aXRoIGEgZmxhdHRlbmVkIGFycmF5IG9mIHRoZSByZXN1bHRzIG9mIHRoZSBjYWxsYmFjayBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFzeW5jRmxhdE1hcDxULCBVPihhcnI6IFRbXSwgY2FsbGJhY2s6ICh2YWx1ZTogVCwgaW5kZXg6IG51bWJlciwgYXJyYXk6IFRbXSkgPT4gUHJvbWlzYWJsZTxVW10+KTogUHJvbWlzZTxVW10+IHtcbiAgcmV0dXJuIChhd2FpdCBhc3luY01hcChhcnIsIGNhbGxiYWNrKSkuZmxhdCgpO1xufVxuXG4vKipcbiAqIE1hcHMgb3ZlciBhbiBhcnJheSBhc3luY2hyb25vdXNseSwgYXBwbHlpbmcgdGhlIHByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGVhY2ggZWxlbWVudC5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiBlbGVtZW50cyBpbiB0aGUgaW5wdXQgYXJyYXkuXG4gKiBAdHlwZVBhcmFtIFUgLSBUaGUgdHlwZSBvZiBlbGVtZW50cyBpbiB0aGUgb3V0cHV0IGFycmF5LlxuICogQHBhcmFtIGFyciAtIFRoZSBhcnJheSB0byBtYXAgb3Zlci5cbiAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayBmdW5jdGlvbiB0byBhcHBseSB0byBlYWNoIGVsZW1lbnQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggYW4gYXJyYXkgb2YgdGhlIHJlc3VsdHMgb2YgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXN5bmNNYXA8VCwgVT4oYXJyOiBUW10sIGNhbGxiYWNrOiAodmFsdWU6IFQsIGluZGV4OiBudW1iZXIsIGFycmF5OiBUW10pID0+IFByb21pc2FibGU8VT4pOiBQcm9taXNlPFVbXT4ge1xuICByZXR1cm4gYXdhaXQgcHJvbWlzZUFsbFNlcXVlbnRpYWxseShhcnIubWFwKGNhbGxiYWNrKSk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRvIGEgc3luY2hyb25vdXMgb25lIGJ5IGF1dG9tYXRpY2FsbHkgaGFuZGxpbmcgdGhlIFByb21pc2UgcmVqZWN0aW9uLlxuICpcbiAqIEB0eXBlUGFyYW0gQXJncyAtIFRoZSB0eXBlcyBvZiB0aGUgYXJndW1lbnRzIHRoZSBmdW5jdGlvbiBhY2NlcHRzLlxuICogQHBhcmFtIGFzeW5jRnVuYyAtIFRoZSBhc3luY2hyb25vdXMgZnVuY3Rpb24gdG8gY29udmVydC5cbiAqIEBwYXJhbSBzdGFja1RyYWNlIC0gVGhlIHN0YWNrIHRyYWNlIG9mIHRoZSBzb3VyY2UgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyBBIGZ1bmN0aW9uIHRoYXQgd3JhcHMgdGhlIGFzeW5jaHJvbm91cyBmdW5jdGlvbiBpbiBhIHN5bmNocm9ub3VzIGludGVyZmFjZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRBc3luY1RvU3luYzxBcmdzIGV4dGVuZHMgdW5rbm93bltdPihhc3luY0Z1bmM6IEdlbmVyaWNBc3luY0Z1bmN0aW9uPEFyZ3M+LCBzdGFja1RyYWNlPzogc3RyaW5nKTogR2VuZXJpY1ZvaWRGdW5jdGlvbjxBcmdzPiB7XG4gIHN0YWNrVHJhY2UgPz89IGdldFN0YWNrVHJhY2UoMSk7XG4gIHJldHVybiAoLi4uYXJnczogQXJncyk6IHZvaWQgPT4ge1xuICAgIGFzc2VydE5vbk51bGxhYmxlKHN0YWNrVHJhY2UpO1xuICAgIGNvbnN0IGlubmVyU3RhY2tUcmFjZSA9IGdldFN0YWNrVHJhY2UoMSk7XG4gICAgc3RhY2tUcmFjZSA9IGAke3N0YWNrVHJhY2V9XFxuICAgIGF0IC0tLSBjb252ZXJ0QXN5bmNUb1N5bmMgLS0tICgwKVxcbiR7aW5uZXJTdGFja1RyYWNlfWA7XG4gICAgaW52b2tlQXN5bmNTYWZlbHkoKCkgPT4gYXN5bmNGdW5jKC4uLmFyZ3MpLCBzdGFja1RyYWNlKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIHN5bmNocm9ub3VzIGZ1bmN0aW9uIHRvIGFuIGFzeW5jaHJvbm91cyBvbmUgYnkgd3JhcHBpbmcgaXQgaW4gYSB7QGxpbmsgUHJvbWlzZX0uXG4gKlxuICogQHR5cGVQYXJhbSBBcmdzIC0gVGhlIHR5cGVzIG9mIHRoZSBhcmd1bWVudHMgdGhlIGZ1bmN0aW9uIGFjY2VwdHMuXG4gKiBAdHlwZVBhcmFtIFJlc3VsdCAtIFRoZSB0eXBlIG9mIHRoZSBmdW5jdGlvbidzIHJldHVybiB2YWx1ZS5cbiAqIEBwYXJhbSBzeW5jRm4gLSBUaGUgc3luY2hyb25vdXMgZnVuY3Rpb24gdG8gY29udmVydC5cbiAqIEByZXR1cm5zIEEgZnVuY3Rpb24gdGhhdCB3cmFwcyB0aGUgc3luY2hyb25vdXMgZnVuY3Rpb24gaW4gYW4gYXN5bmNocm9ub3VzIGludGVyZmFjZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRTeW5jVG9Bc3luYzxBcmdzIGV4dGVuZHMgdW5rbm93bltdLCBSZXN1bHQ+KHN5bmNGbjogR2VuZXJpY0Z1bmN0aW9uPEFyZ3MsIFJlc3VsdD4pOiBHZW5lcmljQXN5bmNGdW5jdGlvbjxBcmdzLCBSZXN1bHQ+IHtcbiAgcmV0dXJuIGFzeW5jICguLi5hcmdzOiBBcmdzKTogUHJvbWlzZTxSZXN1bHQ+ID0+IHtcbiAgICBhd2FpdCBub29wQXN5bmMoKTtcbiAgICByZXR1cm4gc3luY0ZuKC4uLmFyZ3MpO1xuICB9O1xufVxuXG4vKipcbiAqIEhhbmRsZXMgYSBzaWxlbnQgZXJyb3IuXG4gKlxuICogQHBhcmFtIGVycm9yIC0gVGhlIGVycm9yIHRvIGhhbmRsZS5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGVycm9yIGlzIGEgc2lsZW50IGVycm9yLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlU2lsZW50RXJyb3IoZXJyb3I6IHVua25vd24pOiBib29sZWFuIHtcbiAgbGV0IGNhdXNlID0gZXJyb3I7XG4gIHdoaWxlICghKGNhdXNlIGluc3RhbmNlb2YgU2lsZW50RXJyb3IpKSB7XG4gICAgaWYgKCEoY2F1c2UgaW5zdGFuY2VvZiBFcnJvcikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjYXVzZSA9IGNhdXNlLmNhdXNlO1xuICB9XG5cbiAgZ2V0TGliRGVidWdnZXIoJ0FzeW5jOmhhbmRsZVNpbGVudEVycm9yJykoZXJyb3IpO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBJZ25vcmVzIGFuIGVycm9yIHRoYXQgaXMgdGhyb3duIGJ5IGFuIGFzeW5jaHJvbm91cyBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0gcHJvbWlzZSAtIFRoZSBwcm9taXNlIHRvIGlnbm9yZSB0aGUgZXJyb3Igb2YuXG4gKiBAcGFyYW0gZmFsbGJhY2tWYWx1ZSAtIEFsd2F5cyBgdW5kZWZpbmVkYC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIGNvbXBsZXRlcyBvciBmYWlscy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGlnbm9yZUVycm9yKHByb21pc2U6IFByb21pc2U8dW5rbm93bj4sIGZhbGxiYWNrVmFsdWU/OiB1bmRlZmluZWQpOiBQcm9taXNlPHZvaWQ+O1xuLyoqXG4gKiBJbnZva2VzIGFuIGFzeW5jaHJvbm91cyBmdW5jdGlvbiBhbmQgcmV0dXJucyBhIGZhbGxiYWNrIHZhbHVlIGlmIGFuIGVycm9yIGlzIHRocm93bi5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgdGhlIGFzeW5jaHJvbm91cyBmdW5jdGlvbi5cbiAqIEBwYXJhbSBwcm9taXNlIC0gVGhlIHByb21pc2UgdG8gaWdub3JlIHRoZSBlcnJvciBvZi5cbiAqIEBwYXJhbSBmYWxsYmFja1ZhbHVlIC0gVGhlIHZhbHVlIHRvIHJldHVybiBpZiBhbiBlcnJvciBpcyB0aHJvd24uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHZhbHVlIHJldHVybmVkIGJ5IHRoZSBhc3luY2hyb25vdXMgZnVuY3Rpb24gb3IgdGhlIGZhbGxiYWNrIHZhbHVlIGlmIGFuIGVycm9yIGlzIHRocm93bi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGlnbm9yZUVycm9yPFQ+KHByb21pc2U6IFByb21pc2U8VD4sIGZhbGxiYWNrVmFsdWU6IFQpOiBQcm9taXNlPFQ+O1xuLyoqXG4gKiBJZ25vcmVzIGFuIGVycm9yIHRoYXQgaXMgdGhyb3duIGJ5IGFuIGFzeW5jaHJvbm91cyBmdW5jdGlvbi5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgdGhlIGFzeW5jaHJvbm91cyBmdW5jdGlvbi5cbiAqIEBwYXJhbSBwcm9taXNlIC0gVGhlIHByb21pc2UgdG8gaWdub3JlIHRoZSBlcnJvciBvZi5cbiAqIEBwYXJhbSBmYWxsYmFja1ZhbHVlIC0gVGhlIHZhbHVlIHRvIHJldHVybiBpZiBhbiBlcnJvciBpcyB0aHJvd24uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHZhbHVlIHJldHVybmVkIGJ5IHRoZSBhc3luY2hyb25vdXMgZnVuY3Rpb24gb3IgdGhlIGZhbGxiYWNrIHZhbHVlIGlmIGFuIGVycm9yIGlzIHRocm93bi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGlnbm9yZUVycm9yPFQ+KHByb21pc2U6IFByb21pc2U8VD4sIGZhbGxiYWNrVmFsdWU/OiBUKTogUHJvbWlzZTxUIHwgdm9pZD4ge1xuICBjb25zdCBpZ25vcmVFcnJvckRlYnVnZ2VyID0gZ2V0TGliRGVidWdnZXIoJ0FzeW5jOmlnbm9yZUVycm9yJyk7XG4gIGNvbnN0IHN0YWNrVHJhY2UgPSBnZXRTdGFja1RyYWNlKDEpO1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBwcm9taXNlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgaWdub3JlRXJyb3JEZWJ1Z2dlcihcbiAgICAgICdJZ25vcmVkIGVycm9yJyxcbiAgICAgIG5ldyBDdXN0b21TdGFja1RyYWNlRXJyb3Ioe1xuICAgICAgICBjYXVzZTogZSxcbiAgICAgICAgbWVzc2FnZTogJ0lnbm9yZWQgZXJyb3InLFxuICAgICAgICBzdGFja1RyYWNlXG4gICAgICB9KVxuICAgICk7XG4gICAgcmV0dXJuIGZhbGxiYWNrVmFsdWU7XG4gIH1cbn1cblxuY29uc3QgcGVuZGluZ0FzeW5jT3BlcmF0aW9ucyA9IG5ldyBTZXQ8UHJvbWlzZTx2b2lkPj4oKTtcbmxldCBpc0FzeW5jT3BlcmF0aW9uVHJhY2tpbmdFbmFibGVkID0gZmFsc2U7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGludm9rZUFzeW5jU2FmZWx5QWZ0ZXJEZWxheX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW52b2tlQXN5bmNTYWZlbHlBZnRlckRlbGF5UGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBhYm9ydCBzaWduYWwgdG8gbGlzdGVuIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbDtcblxuICAvKipcbiAgICogVGhlIGFzeW5jaHJvbm91cyBmdW5jdGlvbiB0byBpbnZva2UuXG4gICAqXG4gICAqIEBwYXJhbSBhYm9ydFNpZ25hbCAtIFRoZSBhYm9ydCBzaWduYWwgdG8gbGlzdGVuIHRvLlxuICAgKi9cbiAgYXN5bmNGbih0aGlzOiB2b2lkLCBhYm9ydFNpZ25hbDogQWJvcnRTaWduYWwpOiBQcm9taXNhYmxlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBUaGUgZGVsYXkgaW4gbWlsbGlzZWNvbmRzLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVsYXlJbk1pbGxpc2Vjb25kcz86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHN0YWNrIHRyYWNlIG9mIHRoZSBzb3VyY2UgZnVuY3Rpb24uXG4gICAqL1xuICByZWFkb25seSBzdGFja1RyYWNlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIERpc2FibGVzIHRyYWNraW5nIHByZXZpb3VzbHkgZW5hYmxlZCB2aWEge0BsaW5rIGVuYWJsZUFzeW5jT3BlcmF0aW9uVHJhY2tpbmd9IGFuZCBmb3JnZXRzIGFueSBjdXJyZW50bHktdHJhY2tlZCBvcGVyYXRpb25zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGlzYWJsZUFzeW5jT3BlcmF0aW9uVHJhY2tpbmcoKTogdm9pZCB7XG4gIGlzQXN5bmNPcGVyYXRpb25UcmFja2luZ0VuYWJsZWQgPSBmYWxzZTtcbiAgcGVuZGluZ0FzeW5jT3BlcmF0aW9ucy5jbGVhcigpO1xufVxuXG4vKipcbiAqIEVuYWJsZXMgdHJhY2tpbmcgb2YgZmlyZS1hbmQtZm9yZ2V0IG9wZXJhdGlvbnMgc2NoZWR1bGVkIHZpYSB7QGxpbmsgaW52b2tlQXN5bmNTYWZlbHl9IChhbmQgdGhlcmVmb3JlIHtAbGluayBjb252ZXJ0QXN5bmNUb1N5bmN9KS5cbiAqXG4gKiBXaGlsZSBlbmFibGVkLCBlYWNoIHNjaGVkdWxlZCBvcGVyYXRpb24gaXMgcmVjb3JkZWQgdW50aWwgaXQgc2V0dGxlcyBzbyB0aGF0IHRlc3RzIGNhbiBhd2FpdCB0aGVtIGFsbCB2aWEge0BsaW5rIHdhaXRGb3JBbGxBc3luY09wZXJhdGlvbnN9LCByZW1vdmluZyB0aGUgbmVlZCB0byBvdmVycmlkZSB7QGxpbmsgaW52b2tlQXN5bmNTYWZlbHl9IC8ge0BsaW5rIGNvbnZlcnRBc3luY1RvU3luY30gaW4gdGVzdHMuXG4gKlxuICogVHJhY2tpbmcgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCwgc28gcHJvZHVjdGlvbiBjb2RlIGNhcnJpZXMgbm8gYm9va2tlZXBpbmcgb3ZlcmhlYWQuIEludGVuZGVkIHRvIGJlIGVuYWJsZWQgaW4gdGVzdCBlbnZpcm9ubWVudHMgb25seS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuYWJsZUFzeW5jT3BlcmF0aW9uVHJhY2tpbmcoKTogdm9pZCB7XG4gIGlzQXN5bmNPcGVyYXRpb25UcmFja2luZ0VuYWJsZWQgPSB0cnVlO1xufVxuXG4vKipcbiAqIEludm9rZXMgYSB7QGxpbmsgUHJvbWlzZX0gYW5kIHNhZmVseSBoYW5kbGVzIGFueSBlcnJvcnMgYnkgY2F0Y2hpbmcgdGhlbSBhbmQgZW1pdHRpbmcgYW4gYXN5bmMgZXJyb3IgZXZlbnQuXG4gKlxuICogQHBhcmFtIGFzeW5jRm4gLSBUaGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRvIGludm9rZSBzYWZlbHkuXG4gKiBAcGFyYW0gc3RhY2tUcmFjZSAtIFRoZSBzdGFjayB0cmFjZSBvZiB0aGUgc291cmNlIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaW52b2tlQXN5bmNTYWZlbHkoYXN5bmNGbjogKCkgPT4gUHJvbWlzYWJsZTx1bmtub3duPiwgc3RhY2tUcmFjZT86IHN0cmluZyk6IHZvaWQge1xuICBzdGFja1RyYWNlID8/PSBnZXRTdGFja1RyYWNlKDEpO1xuXG4gIGxldCByZXN1bHQ6IHVua25vd247XG4gIHRyeSB7XG4gICAgcmVzdWx0ID0gYXN5bmNGbigpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcHJlZmVyLXByb21pc2UtcmVqZWN0LWVycm9ycyAtLSBSZS1yZWplY3RpbmcgdGhlIG9yaWdpbmFsIGNhdWdodCBlcnJvciBhcy1pcy5cbiAgICB0cmFja0FzeW5jT3BlcmF0aW9uKGFkZEVycm9ySGFuZGxlcigoKSA9PiBQcm9taXNlLnJlamVjdChlcnJvciksIHN0YWNrVHJhY2UpKTtcbiAgfVxuICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgIHRyYWNrQXN5bmNPcGVyYXRpb24oYWRkRXJyb3JIYW5kbGVyKCgpID0+IHJlc3VsdCwgc3RhY2tUcmFjZSkpO1xuICB9XG59XG5cbi8qKlxuICogSW52b2tlcyBhbiBhc3luY2hyb25vdXMgZnVuY3Rpb24gYWZ0ZXIgYSBkZWxheS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGludm9rZUFzeW5jU2FmZWx5QWZ0ZXJEZWxheShwYXJhbXM6IEludm9rZUFzeW5jU2FmZWx5QWZ0ZXJEZWxheVBhcmFtcyk6IHZvaWQge1xuICBjb25zdCB7XG4gICAgYXN5bmNGbixcbiAgICBkZWxheUluTWlsbGlzZWNvbmRzID0gMFxuICB9ID0gcGFyYW1zO1xuICBjb25zdCBhYm9ydFNpZ25hbCA9IHBhcmFtcy5hYm9ydFNpZ25hbCA/PyBhYm9ydFNpZ25hbE5ldmVyKCk7XG4gIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gIGNvbnN0IHN0YWNrVHJhY2UgPSBwYXJhbXMuc3RhY2tUcmFjZSA/PyBnZXRTdGFja1RyYWNlKDEpO1xuICBpbnZva2VBc3luY1NhZmVseShhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgc2xlZXAoeyBhYm9ydFNpZ25hbCwgbWlsbGlzZWNvbmRzOiBkZWxheUluTWlsbGlzZWNvbmRzLCBzaG91bGRUaHJvd09uQWJvcnQ6IHRydWUgfSk7XG4gICAgYXdhaXQgYXN5bmNGbihhYm9ydFNpZ25hbCk7XG4gIH0sIHN0YWNrVHJhY2UpO1xufVxuXG4vKipcbiAqIEV4ZWN1dGVzIGFzeW5jIGZ1bmN0aW9ucyBzZXF1ZW50aWFsbHkuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgdGhlIHZhbHVlLlxuICogQHBhcmFtIGFzeW5jRm5zIC0gVGhlIGFzeW5jIGZ1bmN0aW9ucyB0byBleGVjdXRlIHNlcXVlbnRpYWxseS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCBhbiBhcnJheSBvZiB0aGUgcmVzdWx0cyBvZiB0aGUgYXN5bmMgZnVuY3Rpb25zLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvbWlzZUFsbEFzeW5jRm5zU2VxdWVudGlhbGx5PFQ+KGFzeW5jRm5zOiAoKCkgPT4gUHJvbWlzYWJsZTxUPilbXSk6IFByb21pc2U8VFtdPiB7XG4gIGNvbnN0IHJlc3VsdHM6IFRbXSA9IFtdO1xuICBmb3IgKGNvbnN0IGFzeW5jRm4gb2YgYXN5bmNGbnMpIHtcbiAgICByZXN1bHRzLnB1c2goYXdhaXQgYXN5bmNGbigpKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0cztcbn1cblxuLyoqXG4gKiBFeGVjdXRlcyBwcm9taXNlcyBzZXF1ZW50aWFsbHkuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgdGhlIHZhbHVlLlxuICogQHBhcmFtIHByb21pc2VzIC0gVGhlIHByb21pc2VzIHRvIGV4ZWN1dGUgc2VxdWVudGlhbGx5LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aXRoIGFuIGFycmF5IG9mIHRoZSByZXN1bHRzIG9mIHRoZSBwcm9taXNlcy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb21pc2VBbGxTZXF1ZW50aWFsbHk8VD4ocHJvbWlzZXM6IFByb21pc2FibGU8VD5bXSk6IFByb21pc2U8VFtdPiB7XG4gIHJldHVybiBhd2FpdCBwcm9taXNlQWxsQXN5bmNGbnNTZXF1ZW50aWFsbHkocHJvbWlzZXMubWFwKChwcm9taXNlKSA9PiAoKSA9PiBwcm9taXNlKSk7XG59XG5cbi8qKlxuICogV2FpdHMgZm9yIGFsbCBmaXJlLWFuZC1mb3JnZXQgb3BlcmF0aW9ucyB0cmFja2VkIHNpbmNlIHtAbGluayBlbmFibGVBc3luY09wZXJhdGlvblRyYWNraW5nfSB3YXMgY2FsbGVkIHRvIHNldHRsZS5cbiAqXG4gKiBPcGVyYXRpb25zIHNjaGVkdWxlZCB3aGlsZSBhd2FpdGluZyBhcmUgYWxzbyBhd2FpdGVkLCBzbyBjYXNjYWRpbmcgZmlyZS1hbmQtZm9yZ2V0IGNoYWlucyBhcmUgZnVsbHkgZHJhaW5lZC5cbiAqXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2Ugbm8gdHJhY2tlZCBvcGVyYXRpb25zIHJlbWFpbiBwZW5kaW5nLlxuICogQHRocm93cyBJZiB0cmFja2luZyBpcyBub3QgZW5hYmxlZC4gT3RoZXJ3aXNlIHRoaXMgd291bGQgc2lsZW50bHkgcmVzb2x2ZSBhcyBpZiBhbGwgb3BlcmF0aW9ucyB3ZXJlIGZpbmlzaGVkLCBtYXNraW5nIGEgbWlzc2luZyB7QGxpbmsgZW5hYmxlQXN5bmNPcGVyYXRpb25UcmFja2luZ30gY2FsbC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdhaXRGb3JBbGxBc3luY09wZXJhdGlvbnMoKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmICghaXNBc3luY09wZXJhdGlvblRyYWNraW5nRW5hYmxlZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQXN5bmMgb3BlcmF0aW9uIHRyYWNraW5nIGlzIG5vdCBlbmFibGVkLiBDYWxsIGVuYWJsZUFzeW5jT3BlcmF0aW9uVHJhY2tpbmcoKSBiZWZvcmUgd2FpdEZvckFsbEFzeW5jT3BlcmF0aW9ucygpLicpO1xuICB9XG5cbiAgd2hpbGUgKHBlbmRpbmdBc3luY09wZXJhdGlvbnMuc2l6ZSA+IDApIHtcbiAgICBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoWy4uLnBlbmRpbmdBc3luY09wZXJhdGlvbnNdKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0cmFja0FzeW5jT3BlcmF0aW9uKG9wZXJhdGlvbjogUHJvbWlzZTx2b2lkPik6IHZvaWQge1xuICBpZiAoIWlzQXN5bmNPcGVyYXRpb25UcmFja2luZ0VuYWJsZWQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBwZW5kaW5nQXN5bmNPcGVyYXRpb25zLmFkZChvcGVyYXRpb24pO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdm9pZCAtLSBGaXJlLWFuZC1mb3JnZXQgY2xlYW51cCBvZiB0aGUgc2V0dGxlZCBvcGVyYXRpb24uXG4gIHZvaWQgb3BlcmF0aW9uLmZpbmFsbHkoKCkgPT4ge1xuICAgIHBlbmRpbmdBc3luY09wZXJhdGlvbnMuZGVsZXRlKG9wZXJhdGlvbik7XG4gIH0pO1xufVxuXG5jb25zdCB0ZXJtaW5hdGVSZXRyeUVycm9ycyA9IG5ldyBXZWFrU2V0PEVycm9yPigpO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayByZXRyeVdpdGhUaW1lb3V0fS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXRyeVdpdGhUaW1lb3V0UGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgdGhlIHRpbWVvdXQuXG4gICAqXG4gICAqIEBwYXJhbSBjb250ZXh0IC0gVGhlIHRpbWVvdXQgY29udGV4dC5cbiAgICovXG4gIG9uVGltZW91dD8odGhpczogdm9pZCwgY29udGV4dDogVGltZW91dENvbnRleHQpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBUaGUgZnVuY3Rpb24gdG8gZXhlY3V0ZS5cbiAgICpcbiAgICogQHBhcmFtIGFib3J0U2lnbmFsIC0gVGhlIGFib3J0IHNpZ25hbCB0byBsaXN0ZW4gdG8uXG4gICAqIEByZXR1cm5zIFRoZSByZXN1bHQgb2YgdGhlIGZ1bmN0aW9uLlxuICAgKi9cbiAgb3BlcmF0aW9uRm4odGhpczogdm9pZCwgYWJvcnRTaWduYWw6IEFib3J0U2lnbmFsKTogUHJvbWlzYWJsZTxib29sZWFuPjtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIG9wZXJhdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IG9wZXJhdGlvbk5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSByZXRyeSBvcHRpb25zLlxuICAgKi9cbiAgcmVhZG9ubHkgcmV0cnlPcHRpb25zPzogUmV0cnlPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RhY2sgdHJhY2Ugb2YgdGhlIHNvdXJjZSBmdW5jdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IHN0YWNrVHJhY2U/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIHJ1bldpdGhUaW1lb3V0fS5cbiAqXG4gKiBAdHlwZVBhcmFtIFJlc3VsdCAtIFRoZSB0eXBlIG9mIHRoZSByZXN1bHQgcmV0dXJuZWQgYnkgdGhlIG9wZXJhdGlvbiBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSdW5XaXRoVGltZW91dFBhcmFtczxSZXN1bHQ+IHtcbiAgLyoqXG4gICAqIFRoZSBjb250ZXh0IG9mIHRoZSBmdW5jdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRleHQ/OiB1bmtub3duO1xuXG4gIC8qKlxuICAgKiBUaGUgZnVuY3Rpb24gdG8gaGFuZGxlIHRoZSB0aW1lb3V0LlxuICAgKlxuICAgKiBAcGFyYW0gY29udGV4dCAtIFRoZSB0aW1lb3V0IGNvbnRleHQuXG4gICAqL1xuICBvblRpbWVvdXQ/KHRoaXM6IHZvaWQsIGNvbnRleHQ6IFRpbWVvdXRDb250ZXh0KTogdm9pZDtcblxuICAvKipcbiAgICogVGhlIG9wZXJhdGlvbiBmdW5jdGlvbiB0byBleGVjdXRlLlxuICAgKlxuICAgKiBAcGFyYW0gYWJvcnRTaWduYWwgLSBUaGUgYWJvcnQgc2lnbmFsIHRvIGxpc3RlbiB0by5cbiAgICogQHJldHVybnMgVGhlIHJlc3VsdCBvZiB0aGUgZnVuY3Rpb24uXG4gICAqL1xuICBvcGVyYXRpb25Gbih0aGlzOiB2b2lkLCBhYm9ydFNpZ25hbDogQWJvcnRTaWduYWwpOiBQcm9taXNhYmxlPFJlc3VsdD47XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBvcGVyYXRpb24uXG4gICAqL1xuICByZWFkb25seSBvcGVyYXRpb25OYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RhY2sgdHJhY2Ugb2YgdGhlIHNvdXJjZSBmdW5jdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IHN0YWNrVHJhY2U/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIHRpbWUgdG8gd2FpdCBpbiBtaWxsaXNlY29uZHMuXG4gICAqL1xuICByZWFkb25seSB0aW1lb3V0SW5NaWxsaXNlY29uZHM6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgc2xlZXB9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNsZWVwUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBhYm9ydCBzaWduYWwgdG8gbGlzdGVuIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbDtcblxuICAvKipcbiAgICogVGhlIHRpbWUgdG8gd2FpdCBpbiBtaWxsaXNlY29uZHMuXG4gICAqL1xuICByZWFkb25seSBtaWxsaXNlY29uZHM6IG51bWJlcjtcblxuICAvKipcbiAgICogV2hldGhlciB0byB0aHJvdyBhbiBlcnJvciBpZiB0aGUgYWJvcnQgc2lnbmFsIGlzIGFib3J0ZWQuXG4gICAqL1xuICByZWFkb25seSBzaG91bGRUaHJvd09uQWJvcnQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbnRleHQgcHJvdmlkZWQgdG8gdGhlIHRpbWVvdXQgaGFuZGxlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUaW1lb3V0Q29udGV4dCB7XG4gIC8qKlxuICAgKiBUaGUgZHVyYXRpb24gaW4gbWlsbGlzZWNvbmRzIHNpbmNlIHRoZSBvcGVyYXRpb24gc3RhcnRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGR1cmF0aW9uOiBudW1iZXI7XG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYSBjYWxsYmFjayB0byBiZSBpbnZva2VkIHdoZW4gdGhlIG9wZXJhdGlvbiBjb21wbGV0ZXMuXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIG9wZXJhdGlvbiBjb21wbGV0ZXMuXG4gICAqL1xuICBvbk9wZXJhdGlvbkNvbXBsZXRlZChjYWxsYmFjazogKCkgPT4gdm9pZCk6IHZvaWQ7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgb3BlcmF0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgb3BlcmF0aW9uTmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogVGVybWluYXRlcyB0aGUgb3BlcmF0aW9uIHRoYXQgdGltZWQgb3V0LlxuICAgKi9cbiAgdGVybWluYXRlT3BlcmF0aW9uKCk6IHZvaWQ7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHRpbWVvdXR9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRpbWVvdXRQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGFib3J0IHNpZ25hbCB0byBsaXN0ZW4gdG8uXG4gICAqL1xuICByZWFkb25seSBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHRocm93IGFuIGVycm9yIGlmIHRoZSBhYm9ydCBzaWduYWwgaXMgYWJvcnRlZC5cbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFRocm93T25BYm9ydD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSB0aW1lb3V0IHBlcmlvZCBpbiBtaWxsaXNlY29uZHMuXG4gICAqL1xuICByZWFkb25seSB0aW1lb3V0SW5NaWxsaXNlY29uZHM6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBDaGFpbnMgYSBwcm9taXNlIHdpdGggYW5vdGhlciBwcm9taXNlLlxuICpcbiAqIEBwYXJhbSBjaGFpblByb21pc2UgLSBSZXByZXNlbnRzIHRoZSBjaGFpbmVkIHByb21pc2UuXG4gKiBAcGFyYW0gcHJvbWlzYWJsZUZuIC0gVGhlIGZ1bmN0aW9uIHRvIGNoYWluLlxuICogQHJldHVybnMgQ2hhaW5lZCBwcm9taXNlIG9yIGBudWxsYCBpZiBubyBhc3luYyBsb2dpYyBpcyBjaGFpbmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hhaW4oY2hhaW5Qcm9taXNlOiBudWxsIHwgUHJvbWlzZTx2b2lkPiwgcHJvbWlzYWJsZUZuOiAoKSA9PiBudWxsIHwgUHJvbWlzYWJsZTx2b2lkPik6IG51bGwgfCBQcm9taXNlPHZvaWQ+IHtcbiAgbGV0IG5leHRDaGFpblByb21pc2UgPSBjaGFpblByb21pc2U7XG4gIGlmIChjaGFpblByb21pc2UpIHtcbiAgICBuZXh0Q2hhaW5Qcm9taXNlID0gY2hhaW5Qcm9taXNlLnRoZW4oKCkgPT4gcHJvbWlzYWJsZUZuKCkgPz8gdW5kZWZpbmVkKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBwcm9taXNhYmxlID0gcHJvbWlzYWJsZUZuKCk7XG4gICAgaWYgKHByb21pc2FibGUpIHtcbiAgICAgIG5leHRDaGFpblByb21pc2UgPSBwcm9taXNhYmxlIGluc3RhbmNlb2YgUHJvbWlzZSA/IHByb21pc2FibGUgYXMgUHJvbWlzZTx2b2lkPiA6IFByb21pc2UucmVzb2x2ZShwcm9taXNhYmxlKTtcbiAgICB9XG4gIH1cblxuICBuZXh0Q2hhaW5Qcm9taXNlPy5jYXRjaChub29wKTtcbiAgcmV0dXJuIG5leHRDaGFpblByb21pc2U7XG59XG5cbi8qKlxuICogTWFya3MgYW4gZXJyb3IgdG8gdGVybWluYXRlIHJldHJ5IGxvZ2ljLlxuICpcbiAqIEBwYXJhbSBlcnJvciAtIFRoZSBlcnJvciB0byBtYXJrIHRvIHRlcm1pbmF0ZSByZXRyeSBsb2dpYy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hcmtzQXNUZXJtaW5hdGVSZXRyeShlcnJvcjogRXJyb3IpOiB2b2lkIHtcbiAgdGVybWluYXRlUmV0cnlFcnJvcnMuYWRkKGVycm9yKTtcbn1cblxuLyoqXG4gKiBBbiBhc3luYyBmdW5jdGlvbiB0aGF0IG5ldmVyIGVuZHMuXG4gKlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCBuZXZlciByZXNvbHZlcy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG5ldmVyRW5kcygpOiBQcm9taXNlPG5ldmVyPiB7XG4gIGF3YWl0IG5ldyBQcm9taXNlKCgpID0+IHtcbiAgICBub29wKCk7XG4gIH0pO1xuICAvKiB2OCBpZ25vcmUgc3RhcnQgLS0gRXhoYXVzdGl2ZSBzd2l0Y2ggZ3VhcmQ7IHRoZSBhd2FpdCBhYm92ZSBuZXZlciByZXNvbHZlcy4gKi9cbiAgYXNzZXJ0KGZhbHNlLCAnU2hvdWxkIG5ldmVyIGhhcHBlbicpO1xuICAvKiB2OCBpZ25vcmUgc3RvcCAqL1xufVxuXG4vKipcbiAqIEdldHMgdGhlIG5leHQgdGljay5cbiAqXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBuZXh0IHRpY2sgaXMgYXZhaWxhYmxlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbmV4dFRpY2tBc3luYygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XG4gICAgICByZXNvbHZlKCk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIHRvIG5hdGl2ZSBwcm9taXNhYmxlLCBjb252ZXJ0aW5nIHtAbGluayBQcm9taXNlTGlrZX0gKGFrYSBUaGVuYWJsZSkgdG8gYSBuYXRpdmUge0BsaW5rIFByb21pc2V9LlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSB2YWx1ZS5cbiAqIEBwYXJhbSBwcm9taXNhYmxlIC0gVGhlIHByb21pc2FibGUgdG8gbm9ybWFsaXplLlxuICogQHJldHVybnMgVGhlIHZhbHVlIGl0c2VsZiBvciBhIG5hdGl2ZSB7QGxpbmsgUHJvbWlzZX0gaWYgdGhlIHZhbHVlIGlzIGEge0BsaW5rIFByb21pc2VMaWtlfS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVByb21pc2FibGU8VD4ocHJvbWlzYWJsZTogUHJvbWlzYWJsZTxUPik6IFByb21pc2U8VD4gfCBUIHtcbiAgaWYgKCFwcm9taXNhYmxlKSB7XG4gICAgcmV0dXJuIHByb21pc2FibGU7XG4gIH1cblxuICBpZiAocHJvbWlzYWJsZSBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICByZXR1cm4gcHJvbWlzYWJsZSBhcyBQcm9taXNlPFQ+O1xuICB9XG5cbiAgaWYgKChwcm9taXNhYmxlIGFzIFBhcnRpYWw8UHJvbWlzZUxpa2U8VD4+KS50aGVuKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShwcm9taXNhYmxlKTtcbiAgfVxuXG4gIHJldHVybiBwcm9taXNhYmxlIGFzIFQ7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgbmV4dCBxdWV1ZSBtaWNyb3Rhc2suXG4gKlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgbmV4dCBxdWV1ZSBtaWNyb3Rhc2sgaXMgYXZhaWxhYmxlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcXVldWVNaWNyb3Rhc2tBc3luYygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgcmVzb2x2ZSgpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBuZXh0IHJlcXVlc3QgYW5pbWF0aW9uIGZyYW1lLlxuICpcbiAqIEBwYXJhbSBmYWxsYmFja1RpbWVvdXRJbk1pbGxpc2Vjb25kcyAtIFRoZSBmYWxsYmFjayB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyB0byByZXNvbHZlIHRoZSBwcm9taXNlIGlmIGByZXF1ZXN0QW5pbWF0aW9uRnJhbWVgIGRvZXMgbm90IGZpcmUgKGUuZy4gdGhlIHdpbmRvdyBpcyBub3QgYWN0aXZlKS5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHRzIHRvIGAxMDBgIG1pbGxpc2Vjb25kcy4gVXNlIGAwYCB0byBkaXNhYmxlIHRoZSBmYWxsYmFjay5cbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIG5leHQgcmVxdWVzdCBhbmltYXRpb24gZnJhbWUgaXMgYXZhaWxhYmxlIChvciB3aGVuIHRoZSBmYWxsYmFjayB0aW1lIGlzIHJlYWNoZWQpLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVxdWVzdEFuaW1hdGlvbkZyYW1lQXN5bmMoZmFsbGJhY2tUaW1lb3V0SW5NaWxsaXNlY29uZHM/OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcmVxdWVzdEFuaW1hdGlvbkZyYW1lQXN5bmNQcm9taXNlID0gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgIHJlc29sdmUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgY29uc3QgREVGQVVMVF9GQUxMQkFDS19USU1FT1VUX0lOX01JTExJU0VDT05EUyA9IDEwMDtcbiAgZmFsbGJhY2tUaW1lb3V0SW5NaWxsaXNlY29uZHMgPz89IERFRkFVTFRfRkFMTEJBQ0tfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFM7XG5cbiAgcmV0dXJuIFByb21pc2UucmFjZShbcmVxdWVzdEFuaW1hdGlvbkZyYW1lQXN5bmNQcm9taXNlLCBmYWxsYmFja1RpbWVvdXRJbk1pbGxpc2Vjb25kcyA+IDAgPyBzbGVlcCh7IG1pbGxpc2Vjb25kczogZmFsbGJhY2tUaW1lb3V0SW5NaWxsaXNlY29uZHMgfSkgOiBuZXZlckVuZHMoKV0pO1xufVxuXG4vKipcbiAqIFJldHJpZXMgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIHVudGlsIGl0IHJldHVybnMgYHRydWVgIG9yIHRoZSB0aW1lb3V0IGlzIHJlYWNoZWQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGZ1bmN0aW9uIHJldHVybnMgYHRydWVgIG9yIHJlamVjdHMgd2hlbiB0aGUgdGltZW91dCBpcyByZWFjaGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmV0cnlXaXRoVGltZW91dChwYXJhbXM6IFJldHJ5V2l0aFRpbWVvdXRQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcmV0cnlXaXRoVGltZW91dERlYnVnZ2VyID0gZ2V0TGliRGVidWdnZXIoJ0FzeW5jOnJldHJ5V2l0aFRpbWVvdXQnKTtcbiAgY29uc3Qgc3RhY2tUcmFjZSA9IHBhcmFtcy5zdGFja1RyYWNlID8/IGdldFN0YWNrVHJhY2UoMSk7XG4gIGNvbnN0IERFRkFVTFRfUkVUUllfT1BUSU9OUyA9IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbWFnaWMtbnVtYmVycyAtLSBFeHRyYWN0aW5nIG1hZ2ljIG51bWJlciBhcyBhIGNvbnN0YW50IHdvdWxkIGJlIHJlcGV0aXRpdmUsIGFzIHRoZSB2YWx1ZSBpcyB1c2VkIG9ubHkgb25jZSBhbmQgaXRzIG5hbWUgd291bGQgYmUgdGhlIHNhbWUgYXMgdGhlIHByb3BlcnR5LlxuICAgIHJldHJ5RGVsYXlJbk1pbGxpc2Vjb25kczogMTAwLFxuICAgIHNob3VsZFJldHJ5T25FcnJvcjogZmFsc2UsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW1hZ2ljLW51bWJlcnMgLS0gRXh0cmFjdGluZyBtYWdpYyBudW1iZXIgYXMgYSBjb25zdGFudCB3b3VsZCBiZSByZXBldGl0aXZlLCBhcyB0aGUgdmFsdWUgaXMgdXNlZCBvbmx5IG9uY2UgYW5kIGl0cyBuYW1lIHdvdWxkIGJlIHRoZSBzYW1lIGFzIHRoZSBwcm9wZXJ0eS5cbiAgICB0aW1lb3V0SW5NaWxsaXNlY29uZHM6IDUwMDBcbiAgfTtcbiAgY29uc3QgZnVsbE9wdGlvbnMgPSB7IC4uLkRFRkFVTFRfUkVUUllfT1BUSU9OUywgLi4ucGFyYW1zLnJldHJ5T3B0aW9ucyB9O1xuICBmdWxsT3B0aW9ucy5hYm9ydFNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcblxuICBhd2FpdCBydW5XaXRoVGltZW91dChub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXM8UnVuV2l0aFRpbWVvdXRQYXJhbXM8dm9pZD4+KHtcbiAgICBjb250ZXh0OiB7IG9wZXJhdGlvbk5hbWU6IHBhcmFtcy5vcGVyYXRpb25OYW1lID8/ICcnLCByZXRyeUZuOiBwYXJhbXMub3BlcmF0aW9uRm4gfSxcbiAgICBvblRpbWVvdXQ6IHBhcmFtcy5vblRpbWVvdXQsXG4gICAgYXN5bmMgb3BlcmF0aW9uRm4oYWJvcnRTaWduYWw6IEFib3J0U2lnbmFsKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICBjb25zdCBjb21iaW5lZEFib3J0U2lnbmFsID0gYWJvcnRTaWduYWxBbnkoZnVsbE9wdGlvbnMuYWJvcnRTaWduYWwsIGFib3J0U2lnbmFsKTtcbiAgICAgIGNvbWJpbmVkQWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcbiAgICAgIGxldCBhdHRlbXB0ID0gMDtcbiAgICAgIHdoaWxlICghY29tYmluZWRBYm9ydFNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgIGF0dGVtcHQrKztcbiAgICAgICAgbGV0IGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpc1N1Y2Nlc3MgPSBhd2FpdCBwYXJhbXMub3BlcmF0aW9uRm4oY29tYmluZWRBYm9ydFNpZ25hbCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS1jb25kaXRpb24gLS0gSXQgbWlnaHQgY2hhbmdlZCBpbnNpZGUgYGZuKClgLiBFU0xpbnQgbWlzdGFrZW5seSBkb2VzIG5vdCByZWNvZ25pemUgaXQuXG4gICAgICAgICAgaWYgKGNvbWJpbmVkQWJvcnRTaWduYWwuYWJvcnRlZCB8fCAhZnVsbE9wdGlvbnMuc2hvdWxkUmV0cnlPbkVycm9yIHx8IHRlcm1pbmF0ZVJldHJ5RXJyb3JzLmhhcyhlcnJvciBhcyBFcnJvcikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBDdXN0b21TdGFja1RyYWNlRXJyb3Ioe1xuICAgICAgICAgICAgICBjYXVzZTogZXJyb3IsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdyZXRyeVdpdGhUaW1lb3V0IGZhaWxlZCcsXG4gICAgICAgICAgICAgIHN0YWNrVHJhY2VcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwcmludEVycm9yKGVycm9yKTtcbiAgICAgICAgICBpc1N1Y2Nlc3MgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNTdWNjZXNzKSB7XG4gICAgICAgICAgcHJpbnRXaXRoU3RhY2tUcmFjZSh7XG4gICAgICAgICAgICBhcmdzOiBbe1xuICAgICAgICAgICAgICBvcGVyYXRpb25GbjogcGFyYW1zLm9wZXJhdGlvbkZuLFxuICAgICAgICAgICAgICBvcGVyYXRpb25OYW1lOiBwYXJhbXMub3BlcmF0aW9uTmFtZSA/PyAnJ1xuICAgICAgICAgICAgfV0sXG4gICAgICAgICAgICBkZWJ1Z2dlckluc3RhbmNlOiByZXRyeVdpdGhUaW1lb3V0RGVidWdnZXIsXG4gICAgICAgICAgICBtZXNzYWdlOiBgUmV0cnkgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBhZnRlciAke1N0cmluZyhhdHRlbXB0KX0gYXR0ZW1wdHNgLFxuICAgICAgICAgICAgc3RhY2tUcmFjZVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHByaW50V2l0aFN0YWNrVHJhY2Uoe1xuICAgICAgICAgIGFyZ3M6IFt7XG4gICAgICAgICAgICBvcGVyYXRpb25GbjogcGFyYW1zLm9wZXJhdGlvbkZuLFxuICAgICAgICAgICAgb3BlcmF0aW9uTmFtZTogcGFyYW1zLm9wZXJhdGlvbk5hbWUgPz8gJydcbiAgICAgICAgICB9XSxcbiAgICAgICAgICBkZWJ1Z2dlckluc3RhbmNlOiByZXRyeVdpdGhUaW1lb3V0RGVidWdnZXIsXG4gICAgICAgICAgbWVzc2FnZTogYFJldHJ5IGF0dGVtcHQgJHtTdHJpbmcoYXR0ZW1wdCl9IGNvbXBsZXRlZCB1bnN1Y2Nlc3NmdWxseS4gVHJ5aW5nIGFnYWluIGluICR7U3RyaW5nKGZ1bGxPcHRpb25zLnJldHJ5RGVsYXlJbk1pbGxpc2Vjb25kcyl9IG1pbGxpc2Vjb25kc2AsXG4gICAgICAgICAgc3RhY2tUcmFjZVxuICAgICAgICB9KTtcblxuICAgICAgICBhd2FpdCBzbGVlcCh7IGFib3J0U2lnbmFsLCBtaWxsaXNlY29uZHM6IGZ1bGxPcHRpb25zLnJldHJ5RGVsYXlJbk1pbGxpc2Vjb25kcyB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIG9wZXJhdGlvbk5hbWU6IHBhcmFtcy5vcGVyYXRpb25OYW1lID8/ICcnLFxuICAgIHN0YWNrVHJhY2UsXG4gICAgdGltZW91dEluTWlsbGlzZWNvbmRzOiBmdWxsT3B0aW9ucy50aW1lb3V0SW5NaWxsaXNlY29uZHNcbiAgfSkpO1xufVxuXG4vKipcbiAqIEV4ZWN1dGVzIGEgZnVuY3Rpb24gd2l0aCBhIHRpbWVvdXQuIElmIHRoZSBmdW5jdGlvbiBkb2VzIG5vdCBjb21wbGV0ZSB3aXRoaW4gdGhlIHNwZWNpZmllZCB0aW1lLCBpdCBpcyBjb25zaWRlcmVkIHRvIGhhdmUgdGltZWQgb3V0LlxuICpcbiAqIElmIGBERUJVRz1vYnNpZGlhbi1kZXYtdXRpbHM6QXN5bmM6cnVuV2l0aFRpbWVvdXRgIGlzIHNldCwgdGhlIGV4ZWN1dGlvbiBpcyBub3QgdGVybWluYXRlZCBhZnRlciB0aGUgdGltZW91dCBhbmQgdGhlIGZ1bmN0aW9uIGlzIGFsbG93ZWQgdG8gcnVuIGluZGVmaW5pdGVseS5cbiAqXG4gKiBAdHlwZVBhcmFtIFJlc3VsdCAtIFRoZSB0eXBlIG9mIHRoZSByZXN1bHQgZnJvbSB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uLlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHJlc3VsdCBvZiB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIG9yIHJlamVjdHMgaWYgaXQgdGltZXMgb3V0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuV2l0aFRpbWVvdXQ8UmVzdWx0PihwYXJhbXM6IFJ1bldpdGhUaW1lb3V0UGFyYW1zPFJlc3VsdD4pOiBQcm9taXNlPFJlc3VsdD4ge1xuICBjb25zdCBzdGFja1RyYWNlID0gcGFyYW1zLnN0YWNrVHJhY2UgPz8gZ2V0U3RhY2tUcmFjZSgxKTtcbiAgY29uc3Qgc3RhcnRUaW1lID0gcGVyZm9ybWFuY2Uubm93KCk7XG5cbiAgY29uc3QgcnVuQWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICBjb25zdCB0aW1lb3V0QWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gIGxldCByZXN1bHQ6IG51bGwgfCBSZXN1bHQgPSBudWxsO1xuICBsZXQgaGFzUmVzdWx0ID0gZmFsc2U7XG4gIGxldCBpc0NvbXBsZXRlZCA9IGZhbHNlO1xuICBjb25zdCBydW5XaXRoVGltZW91dERlYnVnZ2VyID0gZ2V0TGliRGVidWdnZXIoJ0FzeW5jOnJ1bldpdGhUaW1lb3V0Jyk7XG4gIGNvbnN0IG9uVGltZW91dCA9IHBhcmFtcy5vblRpbWVvdXQgPz8gZGVmYXVsdE9uVGltZW91dDtcblxuICBhd2FpdCBQcm9taXNlLnJhY2UoW3J1bigpLCBpbm5lclRpbWVvdXQoKV0pO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVubmVjZXNzYXJ5LWNvbmRpdGlvbiAtLSBJdCBtaWdodCBjaGFuZ2VkIGluc2lkZSBgcnVuKClgLiBFU0xpbnQgbWlzdGFrZW5seSBkb2VzIG5vdCByZWNvZ25pemUgaXQuXG4gIGlmIChoYXNSZXN1bHQpIHtcbiAgICByZXR1cm4gcmVzdWx0IGFzIFJlc3VsdDtcbiAgfVxuXG4gIHRocm93IG5ldyBDdXN0b21TdGFja1RyYWNlRXJyb3Ioe1xuICAgIGNhdXNlOiBydW5BYm9ydENvbnRyb2xsZXIuc2lnbmFsLnJlYXNvbixcbiAgICBtZXNzYWdlOiAnUnVuIHdpdGggdGltZW91dCBmYWlsZWQnLFxuICAgIHN0YWNrVHJhY2VcbiAgfSk7XG5cbiAgYXN5bmMgZnVuY3Rpb24gcnVuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICByZXN1bHQgPSBhd2FpdCBwYXJhbXMub3BlcmF0aW9uRm4ocnVuQWJvcnRDb250cm9sbGVyLnNpZ25hbCk7XG4gICAgICBjb25zdCBkdXJhdGlvbiA9IE1hdGgudHJ1bmMocGVyZm9ybWFuY2Uubm93KCkgLSBzdGFydFRpbWUpO1xuICAgICAgcHJpbnRXaXRoU3RhY2tUcmFjZSh7XG4gICAgICAgIGFyZ3M6IFt7XG4gICAgICAgICAgY29udGV4dDogcGFyYW1zLmNvbnRleHQsXG4gICAgICAgICAgb3BlcmF0aW9uRm46IHBhcmFtcy5vcGVyYXRpb25GbixcbiAgICAgICAgICBvcGVyYXRpb25OYW1lOiBwYXJhbXMub3BlcmF0aW9uTmFtZSA/PyAnJ1xuICAgICAgICB9XSxcbiAgICAgICAgZGVidWdnZXJJbnN0YW5jZTogcnVuV2l0aFRpbWVvdXREZWJ1Z2dlcixcbiAgICAgICAgbWVzc2FnZTogYEV4ZWN1dGlvbiB0aW1lOiAke1N0cmluZyhkdXJhdGlvbil9IG1pbGxpc2Vjb25kc2AsXG4gICAgICAgIHN0YWNrVHJhY2VcbiAgICAgIH0pO1xuICAgICAgaGFzUmVzdWx0ID0gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBydW5BYm9ydENvbnRyb2xsZXIuYWJvcnQoZSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlzQ29tcGxldGVkID0gdHJ1ZTtcbiAgICAgIHRpbWVvdXRBYm9ydENvbnRyb2xsZXIuYWJvcnQobmV3IEVycm9yKCdDb21wbGV0ZWQnKSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gaW5uZXJUaW1lb3V0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHNsZWVwKHsgYWJvcnRTaWduYWw6IHRpbWVvdXRBYm9ydENvbnRyb2xsZXIuc2lnbmFsLCBtaWxsaXNlY29uZHM6IHBhcmFtcy50aW1lb3V0SW5NaWxsaXNlY29uZHMgfSk7XG5cbiAgICBpZiAoaXNDb21wbGV0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZHVyYXRpb24gPSBNYXRoLnRydW5jKHBlcmZvcm1hbmNlLm5vdygpIC0gc3RhcnRUaW1lKTtcbiAgICBwcmludFdpdGhTdGFja1RyYWNlKHtcbiAgICAgIGFyZ3M6IFt7XG4gICAgICAgIGNvbnRleHQ6IHBhcmFtcy5jb250ZXh0LFxuICAgICAgICBvcGVyYXRpb25GbjogcGFyYW1zLm9wZXJhdGlvbkZuLFxuICAgICAgICBvcGVyYXRpb25OYW1lOiBwYXJhbXMub3BlcmF0aW9uTmFtZSA/PyAnJ1xuICAgICAgfV0sXG4gICAgICBkZWJ1Z2dlckluc3RhbmNlOiBydW5XaXRoVGltZW91dERlYnVnZ2VyLFxuICAgICAgbWVzc2FnZTogYFRpbWVkIG91dCBhZnRlciAke1N0cmluZyhkdXJhdGlvbil9IG1pbGxpc2Vjb25kc2AsXG4gICAgICBzdGFja1RyYWNlXG4gICAgfSk7XG5cbiAgICBjb25zdCB0aW1lb3V0Q29udGV4dDogVGltZW91dENvbnRleHQgPSBub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXM8VGltZW91dENvbnRleHQ+KHtcbiAgICAgIGR1cmF0aW9uLFxuICAgICAgb25PcGVyYXRpb25Db21wbGV0ZWQoY2FsbGJhY2spIHtcbiAgICAgICAgdGltZW91dEFib3J0Q29udHJvbGxlci5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBjYWxsYmFjayk7XG4gICAgICB9LFxuICAgICAgb3BlcmF0aW9uTmFtZTogcGFyYW1zLm9wZXJhdGlvbk5hbWUgPz8gJycsXG4gICAgICB0ZXJtaW5hdGVPcGVyYXRpb24oKSB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKGBUaW1lZCBvdXQgYWZ0ZXIgJHtTdHJpbmcoZHVyYXRpb24pfSBtaWxsaXNlY29uZHNgKTtcbiAgICAgICAgcnVuQWJvcnRDb250cm9sbGVyLmFib3J0KGVycm9yKTtcbiAgICAgICAgdGltZW91dEFib3J0Q29udHJvbGxlci5hYm9ydChlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBvblRpbWVvdXQodGltZW91dENvbnRleHQpO1xuICAgIGF3YWl0IHdhaXRGb3JBYm9ydCh0aW1lb3V0QWJvcnRDb250cm9sbGVyLnNpZ25hbCk7XG4gIH1cblxuICBmdW5jdGlvbiBkZWZhdWx0T25UaW1lb3V0KGN0eDogVGltZW91dENvbnRleHQpOiB2b2lkIHtcbiAgICBjdHgudGVybWluYXRlT3BlcmF0aW9uKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBuZXh0IHNldCBpbW1lZGlhdGUuXG4gKlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgbmV4dCBzZXQgaW1tZWRpYXRlIGlzIGF2YWlsYWJsZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNldEltbWVkaWF0ZUFzeW5jKCk6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBzZXRJbW1lZGlhdGUoKCkgPT4ge1xuICAgICAgcmVzb2x2ZSgpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBEZWxheXMgZXhlY3V0aW9uIGZvciBhIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzLlxuICpcbiAqIEBwYXJhbSBkZWxheSAtIFRoZSB0aW1lIHRvIHdhaXQgaW4gbWlsbGlzZWNvbmRzLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBhZnRlciB0aGUgc3BlY2lmaWVkIGRlbGF5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2V0VGltZW91dEFzeW5jKGRlbGF5PzogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgd2luZG93LnNldFRpbWVvdXQocmVzb2x2ZSwgZGVsYXkpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBEZWxheXMgZXhlY3V0aW9uIGZvciBhIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGZ1bmN0aW9uLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBhZnRlciB0aGUgc3BlY2lmaWVkIGRlbGF5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2xlZXAocGFyYW1zOiBTbGVlcFBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7XG4gICAgYWJvcnRTaWduYWwsXG4gICAgbWlsbGlzZWNvbmRzLFxuICAgIHNob3VsZFRocm93T25BYm9ydFxuICB9ID0gcGFyYW1zO1xuICBhd2FpdCB3YWl0Rm9yQWJvcnQoYWJvcnRTaWduYWxBbnkoYWJvcnRTaWduYWwsIGFib3J0U2lnbmFsVGltZW91dChtaWxsaXNlY29uZHMpKSk7XG4gIGlmIChzaG91bGRUaHJvd09uQWJvcnQpIHtcbiAgICBhYm9ydFNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgYSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZWplY3RzIGFmdGVyIHRoZSBzcGVjaWZpZWQgdGltZW91dCBwZXJpb2QuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IGFsd2F5cyByZWplY3RzIHdpdGggYSB0aW1lb3V0IGVycm9yLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdGltZW91dChwYXJhbXM6IFRpbWVvdXRQYXJhbXMpOiBQcm9taXNlPG5ldmVyPiB7XG4gIGNvbnN0IHtcbiAgICBhYm9ydFNpZ25hbCxcbiAgICBzaG91bGRUaHJvd09uQWJvcnQsXG4gICAgdGltZW91dEluTWlsbGlzZWNvbmRzXG4gIH0gPSBwYXJhbXM7XG4gIGF3YWl0IHNsZWVwKG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllczxTbGVlcFBhcmFtcz4oe1xuICAgIGFib3J0U2lnbmFsLFxuICAgIG1pbGxpc2Vjb25kczogdGltZW91dEluTWlsbGlzZWNvbmRzLFxuICAgIHNob3VsZFRocm93T25BYm9ydFxuICB9KSk7XG4gIHRocm93IG5ldyBFcnJvcihgVGltZWQgb3V0IGluICR7U3RyaW5nKHRpbWVvdXRJbk1pbGxpc2Vjb25kcyl9IG1pbGxpc2Vjb25kc2ApO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIEFzeW5jSXRlcmFibGVJdGVyYXRvciB0byBhbiBhcnJheSBieSBjb25zdW1pbmcgYWxsIGl0cyBlbGVtZW50cy5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiBlbGVtZW50cyBwcm9kdWNlZCBieSB0aGUgQXN5bmNJdGVyYWJsZUl0ZXJhdG9yLlxuICogQHBhcmFtIGl0ZXIgLSBUaGUgQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggYW4gYXJyYXkgb2YgYWxsIHRoZSBlbGVtZW50cyBpbiB0aGUgQXN5bmNJdGVyYWJsZUl0ZXJhdG9yLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdG9BcnJheTxUPihpdGVyOiBBc3luY0l0ZXJhYmxlSXRlcmF0b3I8VD4pOiBQcm9taXNlPFRbXT4ge1xuICBjb25zdCBhcnI6IFRbXSA9IFtdO1xuICBmb3IgYXdhaXQgKGNvbnN0IGl0ZW0gb2YgaXRlcikge1xuICAgIGFyci5wdXNoKGl0ZW0pO1xuICB9XG4gIHJldHVybiBhcnI7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWNBO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUDtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxtQ0FBbUM7QUFDNUM7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUEwQ1AsZUFBc0IsZ0JBQWdCLFNBQWlDLFlBQW9DO0FBQ3pHLGlCQUFlLGNBQWMsQ0FBQztBQUM5QixNQUFJO0FBQ0YsVUFBTSxRQUFRO0FBQUEsRUFDaEIsU0FBUyxZQUFZO0FBQ25CLFVBQU0sZUFBZSxJQUFJLHNCQUFzQjtBQUFBLE1BQzdDLE9BQU87QUFBQSxNQUNQLFNBQVM7QUFBQSxNQUNUO0FBQUEsSUFDRixDQUFDO0FBQ0QsUUFBSSxrQkFBa0IsWUFBWSxHQUFHO0FBQ25DO0FBQUEsSUFDRjtBQUNBLHdCQUFvQixZQUFZO0FBQUEsRUFDbEM7QUFDRjtBQVVBLGVBQXNCLFlBQWUsS0FBVSxXQUF1RjtBQUNwSSxRQUFNLE1BQVcsQ0FBQztBQUVsQixRQUFNLFNBQVMsSUFBSTtBQUNuQixXQUFTLElBQUksR0FBRyxJQUFJLFFBQVEsS0FBSztBQUMvQixRQUFJLENBQUMsT0FBTyxPQUFPLEtBQUssQ0FBQyxHQUFH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
|
package/dist/lib/esm/debug.d.mts
CHANGED
|
@@ -6,6 +6,27 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import type { Debugger } from 'debug';
|
|
8
8
|
import type { DebugController } from './debug-controller.mjs';
|
|
9
|
+
/**
|
|
10
|
+
* Parameters for {@link printWithStackTrace}.
|
|
11
|
+
*/
|
|
12
|
+
export interface PrintWithStackTraceParams {
|
|
13
|
+
/**
|
|
14
|
+
* The arguments to print.
|
|
15
|
+
*/
|
|
16
|
+
readonly args: unknown[];
|
|
17
|
+
/**
|
|
18
|
+
* The debugger instance.
|
|
19
|
+
*/
|
|
20
|
+
readonly debuggerInstance: Debugger;
|
|
21
|
+
/**
|
|
22
|
+
* The message to print.
|
|
23
|
+
*/
|
|
24
|
+
readonly message: string;
|
|
25
|
+
/**
|
|
26
|
+
* The stack trace to print.
|
|
27
|
+
*/
|
|
28
|
+
readonly stackTrace: string;
|
|
29
|
+
}
|
|
9
30
|
/**
|
|
10
31
|
* Enables the debuggers for the `obsidian-dev-utils` library.
|
|
11
32
|
*/
|
|
@@ -34,12 +55,9 @@ export declare function getLibDebugger(namespace: string): Debugger;
|
|
|
34
55
|
/**
|
|
35
56
|
* Prints a message with a stack trace.
|
|
36
57
|
*
|
|
37
|
-
* @param
|
|
38
|
-
* @param stackTrace - The stack trace to print.
|
|
39
|
-
* @param message - The message to print.
|
|
40
|
-
* @param args - The arguments to print.
|
|
58
|
+
* @param params - The parameters for printing the message.
|
|
41
59
|
*/
|
|
42
|
-
export declare function printWithStackTrace(
|
|
60
|
+
export declare function printWithStackTrace(params: PrintWithStackTraceParams): void;
|
|
43
61
|
/**
|
|
44
62
|
* Shows an initial debug message.
|
|
45
63
|
*
|
package/dist/lib/esm/debug.mjs
CHANGED
|
@@ -51,7 +51,12 @@ function getDebugger(namespace, framesToSkip = 0) {
|
|
|
51
51
|
if (!debuggerEx) {
|
|
52
52
|
debuggerEx = getSharedDebugLibInstance()(namespace);
|
|
53
53
|
debuggerEx.log = (message, ...args) => {
|
|
54
|
-
logWithCaller(
|
|
54
|
+
logWithCaller({
|
|
55
|
+
args,
|
|
56
|
+
framesToSkip,
|
|
57
|
+
message,
|
|
58
|
+
namespace
|
|
59
|
+
});
|
|
55
60
|
};
|
|
56
61
|
debuggersMap.set(key, debuggerEx);
|
|
57
62
|
}
|
|
@@ -62,7 +67,13 @@ function getLibDebugger(namespace) {
|
|
|
62
67
|
const prefix = pluginId === NO_PLUGIN_ID_INITIALIZED ? "" : `${pluginId}:`;
|
|
63
68
|
return getDebugger(`${prefix}${LIBRARY_NAME}:${namespace}`);
|
|
64
69
|
}
|
|
65
|
-
function printWithStackTrace(
|
|
70
|
+
function printWithStackTrace(params) {
|
|
71
|
+
const {
|
|
72
|
+
args,
|
|
73
|
+
debuggerInstance,
|
|
74
|
+
message,
|
|
75
|
+
stackTrace
|
|
76
|
+
} = params;
|
|
66
77
|
if (!isInObsidian()) {
|
|
67
78
|
debuggerInstance(message, ...args);
|
|
68
79
|
return;
|
|
@@ -116,7 +127,13 @@ function getSharedDebugLibInstance() {
|
|
|
116
127
|
}
|
|
117
128
|
return getObsidianDevUtilsState("debug", debug).value;
|
|
118
129
|
}
|
|
119
|
-
function logWithCaller(
|
|
130
|
+
function logWithCaller(params) {
|
|
131
|
+
const {
|
|
132
|
+
args,
|
|
133
|
+
framesToSkip,
|
|
134
|
+
message,
|
|
135
|
+
namespace
|
|
136
|
+
} = params;
|
|
120
137
|
if (!getSharedDebugLibInstance().enabled(namespace)) {
|
|
121
138
|
return;
|
|
122
139
|
}
|
|
@@ -130,11 +147,11 @@ function logWithCaller(namespace, framesToSkip, message, ...args) {
|
|
|
130
147
|
console.debug(message, ...args, "\n\n---\nLogger stack trace:\n", makeStackTraceError(stackLines.join("\n")));
|
|
131
148
|
}
|
|
132
149
|
function makeStackTraceError(stackTrace) {
|
|
133
|
-
return new CustomStackTraceError(
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
);
|
|
150
|
+
return new CustomStackTraceError({
|
|
151
|
+
cause: void 0,
|
|
152
|
+
message: "Debug mode: intentional placeholder error. See https://github.com/mnaoumov/obsidian-dev-utils/blob/main/docs/debugging.md.",
|
|
153
|
+
stackTrace
|
|
154
|
+
});
|
|
138
155
|
}
|
|
139
156
|
function setNamespaces(namespaces) {
|
|
140
157
|
getSharedDebugLibInstance().enable(toArray(namespaces).join(NAMESPACE_SEPARATOR));
|
|
@@ -150,4 +167,4 @@ export {
|
|
|
150
167
|
printWithStackTrace,
|
|
151
168
|
showInitialDebugMessage
|
|
152
169
|
};
|
|
153
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2RlYnVnLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIGRlYnVnZ2luZy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IERlYnVnZ2VyIH0gZnJvbSAnZGVidWcnO1xuXG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuXG5pbXBvcnQgdHlwZSB7IERlYnVnQ29udHJvbGxlciB9IGZyb20gJy4vZGVidWctY29udHJvbGxlci50cyc7XG5cbmltcG9ydCB7IEN1c3RvbVN0YWNrVHJhY2VFcnJvciB9IGZyb20gJy4vZXJyb3IudHMnO1xuaW1wb3J0IHsgTElCUkFSWV9OQU1FIH0gZnJvbSAnLi9saWJyYXJ5LnRzJztcbmltcG9ydCB7IGdldE9ic2lkaWFuRGV2VXRpbHNTdGF0ZSB9IGZyb20gJy4vb2JzaWRpYW4tZGV2LXV0aWxzLXN0YXRlLnRzJztcbmltcG9ydCB7IGlzSW5PYnNpZGlhbiB9IGZyb20gJy4vb2JzaWRpYW4vaXMtaW4tb2JzaWRpYW4udHMnO1xuaW1wb3J0IHtcbiAgZ2V0UGx1Z2luSWQsXG4gIE5PX1BMVUdJTl9JRF9JTklUSUFMSVpFRFxufSBmcm9tICcuL29ic2lkaWFuL3BsdWdpbi9wbHVnaW4taWQudHMnO1xuaW1wb3J0IHsgZW5zdXJlTm9uTnVsbGFibGUgfSBmcm9tICcuL3R5cGUtZ3VhcmRzLnRzJztcblxuY29uc3QgTkFNRVNQQUNFX1NFUEFSQVRPUiA9ICcsJztcbmNvbnN0IE5FR0FURURfTkFNRVNQQUNFX1BSRUZJWCA9ICctJztcblxuLyoqXG4gKiBFbmFibGVzIHRoZSBkZWJ1Z2dlcnMgZm9yIHRoZSBgb2JzaWRpYW4tZGV2LXV0aWxzYCBsaWJyYXJ5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5hYmxlTGlicmFyeURlYnVnZ2VycygpOiB2b2lkIHtcbiAgZW5hYmxlTmFtZXNwYWNlcyhbTElCUkFSWV9OQU1FLCBgJHtMSUJSQVJZX05BTUV9OipgXSk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGRlYnVnIGNvbnRyb2xsZXIuXG4gKlxuICogQHJldHVybnMgQSBkZWJ1ZyBjb250cm9sbGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVidWdDb250cm9sbGVyKCk6IERlYnVnQ29udHJvbGxlciB7XG4gIHJldHVybiB7XG4gICAgZGlzYWJsZTogZGlzYWJsZU5hbWVzcGFjZXMsXG4gICAgZW5hYmxlOiBlbmFibGVOYW1lc3BhY2VzLFxuICAgIGdldDogZ2V0TmFtZXNwYWNlcyxcbiAgICBzZXQ6IHNldE5hbWVzcGFjZXNcbiAgfTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZGVidWdnZXIgaW5zdGFuY2Ugd2l0aCBhIGxvZyBmdW5jdGlvbiB0aGF0IGluY2x1ZGVzIHRoZSBjYWxsZXIncyBmaWxlIG5hbWUgYW5kIGxpbmUgbnVtYmVyLlxuICpcbiAqIEBwYXJhbSBuYW1lc3BhY2UgLSBUaGUgbmFtZXNwYWNlIGZvciB0aGUgZGVidWdnZXIgaW5zdGFuY2UuXG4gKiBAcGFyYW0gZnJhbWVzVG9Ta2lwIC0gVGhlIG51bWJlciBvZiBmcmFtZXMgdG8gc2tpcCBpbiB0aGUgc3RhY2sgdHJhY2UuXG4gKiBAcmV0dXJucyBBIGRlYnVnZ2VyIGluc3RhbmNlIHdpdGggYSBsb2cgZnVuY3Rpb24gdGhhdCBpbmNsdWRlcyB0aGUgY2FsbGVyJ3MgZmlsZSBuYW1lIGFuZCBsaW5lIG51bWJlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERlYnVnZ2VyKG5hbWVzcGFjZTogc3RyaW5nLCBmcmFtZXNUb1NraXAgPSAwKTogRGVidWdnZXIge1xuICBjb25zdCBrZXkgPSBgJHtuYW1lc3BhY2V9OiR7U3RyaW5nKGZyYW1lc1RvU2tpcCl9YDtcbiAgY29uc3QgZGVidWdnZXJzTWFwID0gZ2V0T2JzaWRpYW5EZXZVdGlsc1N0YXRlKCdkZWJ1Z2dlcnMnLCBuZXcgTWFwPHN0cmluZywgRGVidWdnZXI+KCkpLnZhbHVlO1xuICBsZXQgZGVidWdnZXJFeCA9IGRlYnVnZ2Vyc01hcC5nZXQoa2V5KTtcbiAgaWYgKCFkZWJ1Z2dlckV4KSB7XG4gICAgZGVidWdnZXJFeCA9IGdldFNoYXJlZERlYnVnTGliSW5zdGFuY2UoKShuYW1lc3BhY2UpO1xuICAgIGRlYnVnZ2VyRXgubG9nID0gKG1lc3NhZ2U6IHN0cmluZywgLi4uYXJnczogdW5rbm93bltdKTogdm9pZCA9PiB7XG4gICAgICBsb2dXaXRoQ2FsbGVyKG5hbWVzcGFjZSwgZnJhbWVzVG9Ta2lwLCBtZXNzYWdlLCAuLi5hcmdzKTtcbiAgICB9O1xuXG4gICAgZGVidWdnZXJzTWFwLnNldChrZXksIGRlYnVnZ2VyRXgpO1xuICB9XG5cbiAgcmV0dXJuIGRlYnVnZ2VyRXg7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGRlYnVnZ2VyIGluc3RhbmNlIGZvciB0aGUgYG9ic2lkaWFuLWRldi11dGlsc2AgbGlicmFyeS5cbiAqXG4gKiBAcGFyYW0gbmFtZXNwYWNlIC0gVGhlIG5hbWVzcGFjZSBmb3IgdGhlIGRlYnVnZ2VyIGluc3RhbmNlLlxuICogQHJldHVybnMgQSBkZWJ1Z2dlciBpbnN0YW5jZSBmb3IgdGhlIGBvYnNpZGlhbi1kZXYtdXRpbHNgIGxpYnJhcnkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRMaWJEZWJ1Z2dlcihuYW1lc3BhY2U6IHN0cmluZyk6IERlYnVnZ2VyIHtcbiAgY29uc3QgcGx1Z2luSWQgPSBnZXRQbHVnaW5JZCgpO1xuICBjb25zdCBwcmVmaXggPSBwbHVnaW5JZCA9PT0gTk9fUExVR0lOX0lEX0lOSVRJQUxJWkVEID8gJycgOiBgJHtwbHVnaW5JZH06YDtcbiAgcmV0dXJuIGdldERlYnVnZ2VyKGAke3ByZWZpeH0ke0xJQlJBUllfTkFNRX06JHtuYW1lc3BhY2V9YCk7XG59XG5cbi8qKlxuICogUHJpbnRzIGEgbWVzc2FnZSB3aXRoIGEgc3RhY2sgdHJhY2UuXG4gKlxuICogQHBhcmFtIGRlYnVnZ2VySW5zdGFuY2UgLSBUaGUgZGVidWdnZXIgaW5zdGFuY2UuXG4gKiBAcGFyYW0gc3RhY2tUcmFjZSAtIFRoZSBzdGFjayB0cmFjZSB0byBwcmludC5cbiAqIEBwYXJhbSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2UgdG8gcHJpbnQuXG4gKiBAcGFyYW0gYXJncyAtIFRoZSBhcmd1bWVudHMgdG8gcHJpbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmludFdpdGhTdGFja1RyYWNlKGRlYnVnZ2VySW5zdGFuY2U6IERlYnVnZ2VyLCBzdGFja1RyYWNlOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZywgLi4uYXJnczogdW5rbm93bltdKTogdm9pZCB7XG4gIGlmICghaXNJbk9ic2lkaWFuKCkpIHtcbiAgICBkZWJ1Z2dlckluc3RhbmNlKG1lc3NhZ2UsIC4uLmFyZ3MpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGRlYnVnZ2VySW5zdGFuY2UobWVzc2FnZSwgLi4uYXJncywgJ1xcblxcbi0tLVxcbkNvbnRleHQgc3RhY2sgdHJhY2U6XFxuJywgbWFrZVN0YWNrVHJhY2VFcnJvcihzdGFja1RyYWNlKSk7XG59XG5cbi8qKlxuICogU2hvd3MgYW4gaW5pdGlhbCBkZWJ1ZyBtZXNzYWdlLlxuICpcbiAqIEBwYXJhbSBwbHVnaW5JZCAtIFRoZSBwbHVnaW4gSUQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaG93SW5pdGlhbERlYnVnTWVzc2FnZShwbHVnaW5JZDogc3RyaW5nKTogdm9pZCB7XG4gIGNvbnN0IGlzRW5hYmxlZCA9IGdldFNoYXJlZERlYnVnTGliSW5zdGFuY2UoKS5lbmFibGVkKHBsdWdpbklkKTtcbiAgY29uc3Qgc3RhdGUgPSBpc0VuYWJsZWQgPyAnZW5hYmxlZCcgOiAnZGlzYWJsZWQnO1xuICBjb25zdCBjaGFuZ2VBY3Rpb24gPSBpc0VuYWJsZWQgPyAnZGlzYWJsZScgOiAnZW5hYmxlJztcbiAgY29uc3QgbmFtZXNwYWNlcyA9IGdldE5hbWVzcGFjZXMoKTtcbiAgc2V0TmFtZXNwYWNlcyhwbHVnaW5JZCk7XG4gIGdldERlYnVnZ2VyKHBsdWdpbklkKShcbiAgICBgRGVidWcgbWVzc2FnZXMgZm9yIHBsdWdpbiAke3BsdWdpbklkfSBhcmUgJHtzdGF0ZX0uIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbW5hb3Vtb3Yvb2JzaWRpYW4tZGV2LXV0aWxzL2Jsb2IvbWFpbi9kb2NzL2RlYnVnZ2luZy5tZCBob3cgdG8gJHtjaGFuZ2VBY3Rpb259IHRoZW0uYFxuICApO1xuICBzZXROYW1lc3BhY2VzKG5hbWVzcGFjZXMpO1xufVxuXG5mdW5jdGlvbiBkaXNhYmxlTmFtZXNwYWNlcyhuYW1lc3BhY2VzOiBzdHJpbmcgfCBzdHJpbmdbXSk6IHZvaWQge1xuICBjb25zdCBzZXQgPSBuZXcgU2V0KGdldE5hbWVzcGFjZXMoKSk7XG4gIGZvciAoY29uc3QgbmFtZXNwYWNlIG9mIHRvQXJyYXkobmFtZXNwYWNlcykpIHtcbiAgICBpZiAobmFtZXNwYWNlLnN0YXJ0c1dpdGgoTkVHQVRFRF9OQU1FU1BBQ0VfUFJFRklYKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IG5lZ2F0ZWROYW1lc3BhY2UgPSBORUdBVEVEX05BTUVTUEFDRV9QUkVGSVggKyBuYW1lc3BhY2U7XG4gICAgaWYgKHNldC5oYXMobmFtZXNwYWNlKSkge1xuICAgICAgc2V0LmRlbGV0ZShuYW1lc3BhY2UpO1xuICAgIH1cbiAgICBzZXQuYWRkKG5lZ2F0ZWROYW1lc3BhY2UpO1xuICB9XG4gIHNldE5hbWVzcGFjZXMoQXJyYXkuZnJvbShzZXQpKTtcbn1cblxuZnVuY3Rpb24gZW5hYmxlTmFtZXNwYWNlcyhuYW1lc3BhY2VzOiBzdHJpbmcgfCBzdHJpbmdbXSk6IHZvaWQge1xuICBjb25zdCBzZXQgPSBuZXcgU2V0KGdldE5hbWVzcGFjZXMoKSk7XG4gIGZvciAoY29uc3QgbmFtZXNwYWNlIG9mIHRvQXJyYXkobmFtZXNwYWNlcykpIHtcbiAgICBpZiAoIW5hbWVzcGFjZS5zdGFydHNXaXRoKE5FR0FURURfTkFNRVNQQUNFX1BSRUZJWCkpIHtcbiAgICAgIGNvbnN0IG5lZ2F0ZWROYW1lc3BhY2UgPSBORUdBVEVEX05BTUVTUEFDRV9QUkVGSVggKyBuYW1lc3BhY2U7XG4gICAgICBpZiAoc2V0LmhhcyhuZWdhdGVkTmFtZXNwYWNlKSkge1xuICAgICAgICBzZXQuZGVsZXRlKG5lZ2F0ZWROYW1lc3BhY2UpO1xuICAgICAgfVxuICAgIH1cbiAgICBzZXQuYWRkKG5hbWVzcGFjZSk7XG4gIH1cbiAgc2V0TmFtZXNwYWNlcyhBcnJheS5mcm9tKHNldCkpO1xufVxuXG5mdW5jdGlvbiBnZXROYW1lc3BhY2VzKCk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIHRvQXJyYXkoZ2V0U2hhcmVkRGVidWdMaWJJbnN0YW5jZSgpLmxvYWQoKSA/PyAnJyk7XG59XG5cbmZ1bmN0aW9uIGdldFNoYXJlZERlYnVnTGliSW5zdGFuY2UoKTogdHlwZW9mIGRlYnVnIHtcbiAgaWYgKCFpc0luT2JzaWRpYW4oKSkge1xuICAgIHJldHVybiBkZWJ1ZztcbiAgfVxuICByZXR1cm4gZ2V0T2JzaWRpYW5EZXZVdGlsc1N0YXRlKCdkZWJ1ZycsIGRlYnVnKS52YWx1ZTtcbn1cblxuZnVuY3Rpb24gbG9nV2l0aENhbGxlcihuYW1lc3BhY2U6IHN0cmluZywgZnJhbWVzVG9Ta2lwOiBudW1iZXIsIG1lc3NhZ2U6IHN0cmluZywgLi4uYXJnczogdW5rbm93bltdKTogdm9pZCB7XG4gIGlmICghZ2V0U2hhcmVkRGVidWdMaWJJbnN0YW5jZSgpLmVuYWJsZWQobmFtZXNwYWNlKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICghaXNJbk9ic2lkaWFuKCkpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZSAtLSBWYWxpZCB1c2FnZS5cbiAgICBjb25zb2xlLmRlYnVnKG1lc3NhZ2UsIC4uLmFyZ3MpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIGNhbGxlciBsaW5lIGluZGV4IGlzIDQgYmVjYXVzZSB0aGUgY2FsbCBzdGFjayBpcyBhcyBmb2xsb3dzOlxuICAgKlxuICAgKiAwOiBFcnJvclxuICAgKiAxOiAgICAgYXQgbG9nV2l0aENhbGxlciAoPzo/Oj8pXG4gICAqIDI6ICAgICBhdCBkZWJ1Z0luc3RhbmNlLmxvZyAoPzo/Oj8pXG4gICAqIDM6ICAgICBhdCBkZWJ1ZyAoPzo/Oj8pXG4gICAqIDQ6ICAgICBhdCBmdW5jdGlvbk5hbWUgKHBhdGgvdG8vY2FsbGVyLmpzOj86PylcbiAgICovXG4gIGNvbnN0IENBTExFUl9MSU5FX0lOREVYID0gNDtcblxuICBjb25zdCBzdGFja0xpbmVzID0gZW5zdXJlTm9uTnVsbGFibGUobmV3IEVycm9yKCkuc3RhY2spLnNwbGl0KCdcXG4nKTtcbiAgc3RhY2tMaW5lcy5zcGxpY2UoMCwgQ0FMTEVSX0xJTkVfSU5ERVggKyBmcmFtZXNUb1NraXApO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlIC0tIFZhbGlkIHVzYWdlLlxuICBjb25zb2xlLmRlYnVnKG1lc3NhZ2UsIC4uLmFyZ3MsICdcXG5cXG4tLS1cXG5Mb2dnZXIgc3RhY2sgdHJhY2U6XFxuJywgbWFrZVN0YWNrVHJhY2VFcnJvcihzdGFja0xpbmVzLmpvaW4oJ1xcbicpKSk7XG59XG5cbmZ1bmN0aW9uIG1ha2VTdGFja1RyYWNlRXJyb3Ioc3RhY2tUcmFjZTogc3RyaW5nKTogQ3VzdG9tU3RhY2tUcmFjZUVycm9yIHtcbiAgcmV0dXJuIG5ldyBDdXN0b21TdGFja1RyYWNlRXJyb3IoXG4gICAgJ0RlYnVnIG1vZGU6IGludGVudGlvbmFsIHBsYWNlaG9sZGVyIGVycm9yLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL21uYW91bW92L29ic2lkaWFuLWRldi11dGlscy9ibG9iL21haW4vZG9jcy9kZWJ1Z2dpbmcubWQuJyxcbiAgICBzdGFja1RyYWNlLFxuICAgIHVuZGVmaW5lZFxuICApO1xufVxuXG4vKipcbiAqIFNldHMgdGhlIG5hbWVzcGFjZXMgdG8gZW5hYmxlLlxuICpcbiAqIEBwYXJhbSBuYW1lc3BhY2VzIC0gVGhlIG5hbWVzcGFjZXMgdG8gZW5hYmxlLlxuICovXG5mdW5jdGlvbiBzZXROYW1lc3BhY2VzKG5hbWVzcGFjZXM6IHN0cmluZyB8IHN0cmluZ1tdKTogdm9pZCB7XG4gIGdldFNoYXJlZERlYnVnTGliSW5zdGFuY2UoKS5lbmFibGUodG9BcnJheShuYW1lc3BhY2VzKS5qb2luKE5BTUVTUEFDRV9TRVBBUkFUT1IpKTtcbn1cblxuZnVuY3Rpb24gdG9BcnJheShuYW1lc3BhY2VzOiBzdHJpbmcgfCBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIHR5cGVvZiBuYW1lc3BhY2VzID09PSAnc3RyaW5nJyA/IG5hbWVzcGFjZXMuc3BsaXQoTkFNRVNQQUNFX1NFUEFSQVRPUikuZmlsdGVyKEJvb2xlYW4pIDogbmFtZXNwYWNlcy5mbGF0TWFwKHRvQXJyYXkpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRQSxPQUFPLFdBQVc7QUFJbEIsU0FBUyw2QkFBNkI7QUFDdEMsU0FBUyxvQkFBb0I7QUFDN0IsU0FBUyxnQ0FBZ0M7QUFDekMsU0FBUyxvQkFBb0I7QUFDN0I7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLHlCQUF5QjtBQUVsQyxNQUFNLHNCQUFzQjtBQUM1QixNQUFNLDJCQUEyQjtBQUsxQixTQUFTLHlCQUErQjtBQUM3QyxtQkFBaUIsQ0FBQyxjQUFjLEdBQUcsWUFBWSxJQUFJLENBQUM7QUFDdEQ7QUFPTyxTQUFTLHFCQUFzQztBQUNwRCxTQUFPO0FBQUEsSUFDTCxTQUFTO0FBQUEsSUFDVCxRQUFRO0FBQUEsSUFDUixLQUFLO0FBQUEsSUFDTCxLQUFLO0FBQUEsRUFDUDtBQUNGO0FBU08sU0FBUyxZQUFZLFdBQW1CLGVBQWUsR0FBYTtBQUN6RSxRQUFNLE1BQU0sR0FBRyxTQUFTLElBQUksT0FBTyxZQUFZLENBQUM7QUFDaEQsUUFBTSxlQUFlLHlCQUF5QixhQUFhLG9CQUFJLElBQXNCLENBQUMsRUFBRTtB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
|
|
170
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2RlYnVnLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIGRlYnVnZ2luZy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IERlYnVnZ2VyIH0gZnJvbSAnZGVidWcnO1xuXG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuXG5pbXBvcnQgdHlwZSB7IERlYnVnQ29udHJvbGxlciB9IGZyb20gJy4vZGVidWctY29udHJvbGxlci50cyc7XG5cbmltcG9ydCB7IEN1c3RvbVN0YWNrVHJhY2VFcnJvciB9IGZyb20gJy4vZXJyb3IudHMnO1xuaW1wb3J0IHsgTElCUkFSWV9OQU1FIH0gZnJvbSAnLi9saWJyYXJ5LnRzJztcbmltcG9ydCB7IGdldE9ic2lkaWFuRGV2VXRpbHNTdGF0ZSB9IGZyb20gJy4vb2JzaWRpYW4tZGV2LXV0aWxzLXN0YXRlLnRzJztcbmltcG9ydCB7IGlzSW5PYnNpZGlhbiB9IGZyb20gJy4vb2JzaWRpYW4vaXMtaW4tb2JzaWRpYW4udHMnO1xuaW1wb3J0IHtcbiAgZ2V0UGx1Z2luSWQsXG4gIE5PX1BMVUdJTl9JRF9JTklUSUFMSVpFRFxufSBmcm9tICcuL29ic2lkaWFuL3BsdWdpbi9wbHVnaW4taWQudHMnO1xuaW1wb3J0IHsgZW5zdXJlTm9uTnVsbGFibGUgfSBmcm9tICcuL3R5cGUtZ3VhcmRzLnRzJztcblxuY29uc3QgTkFNRVNQQUNFX1NFUEFSQVRPUiA9ICcsJztcbmNvbnN0IE5FR0FURURfTkFNRVNQQUNFX1BSRUZJWCA9ICctJztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgcHJpbnRXaXRoU3RhY2tUcmFjZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJpbnRXaXRoU3RhY2tUcmFjZVBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgYXJndW1lbnRzIHRvIHByaW50LlxuICAgKi9cbiAgcmVhZG9ubHkgYXJnczogdW5rbm93bltdO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVidWdnZXIgaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBkZWJ1Z2dlckluc3RhbmNlOiBEZWJ1Z2dlcjtcblxuICAvKipcbiAgICogVGhlIG1lc3NhZ2UgdG8gcHJpbnQuXG4gICAqL1xuICByZWFkb25seSBtZXNzYWdlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzdGFjayB0cmFjZSB0byBwcmludC5cbiAgICovXG4gIHJlYWRvbmx5IHN0YWNrVHJhY2U6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgbG9nV2l0aENhbGxlcn0uXG4gKi9cbmludGVyZmFjZSBMb2dXaXRoQ2FsbGVyUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBhcmd1bWVudHMgdG8gcHJpbnQuXG4gICAqL1xuICByZWFkb25seSBhcmdzOiB1bmtub3duW107XG5cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgZnJhbWVzIHRvIHNraXAgaW4gdGhlIHN0YWNrIHRyYWNlLlxuICAgKi9cbiAgcmVhZG9ubHkgZnJhbWVzVG9Ta2lwOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBtZXNzYWdlIHRvIHByaW50LlxuICAgKi9cbiAgcmVhZG9ubHkgbWVzc2FnZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZXNwYWNlIGZvciB0aGUgZGVidWdnZXIgaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBuYW1lc3BhY2U6IHN0cmluZztcbn1cblxuLyoqXG4gKiBFbmFibGVzIHRoZSBkZWJ1Z2dlcnMgZm9yIHRoZSBgb2JzaWRpYW4tZGV2LXV0aWxzYCBsaWJyYXJ5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5hYmxlTGlicmFyeURlYnVnZ2VycygpOiB2b2lkIHtcbiAgZW5hYmxlTmFtZXNwYWNlcyhbTElCUkFSWV9OQU1FLCBgJHtMSUJSQVJZX05BTUV9OipgXSk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGRlYnVnIGNvbnRyb2xsZXIuXG4gKlxuICogQHJldHVybnMgQSBkZWJ1ZyBjb250cm9sbGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVidWdDb250cm9sbGVyKCk6IERlYnVnQ29udHJvbGxlciB7XG4gIHJldHVybiB7XG4gICAgZGlzYWJsZTogZGlzYWJsZU5hbWVzcGFjZXMsXG4gICAgZW5hYmxlOiBlbmFibGVOYW1lc3BhY2VzLFxuICAgIGdldDogZ2V0TmFtZXNwYWNlcyxcbiAgICBzZXQ6IHNldE5hbWVzcGFjZXNcbiAgfTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZGVidWdnZXIgaW5zdGFuY2Ugd2l0aCBhIGxvZyBmdW5jdGlvbiB0aGF0IGluY2x1ZGVzIHRoZSBjYWxsZXIncyBmaWxlIG5hbWUgYW5kIGxpbmUgbnVtYmVyLlxuICpcbiAqIEBwYXJhbSBuYW1lc3BhY2UgLSBUaGUgbmFtZXNwYWNlIGZvciB0aGUgZGVidWdnZXIgaW5zdGFuY2UuXG4gKiBAcGFyYW0gZnJhbWVzVG9Ta2lwIC0gVGhlIG51bWJlciBvZiBmcmFtZXMgdG8gc2tpcCBpbiB0aGUgc3RhY2sgdHJhY2UuXG4gKiBAcmV0dXJucyBBIGRlYnVnZ2VyIGluc3RhbmNlIHdpdGggYSBsb2cgZnVuY3Rpb24gdGhhdCBpbmNsdWRlcyB0aGUgY2FsbGVyJ3MgZmlsZSBuYW1lIGFuZCBsaW5lIG51bWJlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERlYnVnZ2VyKG5hbWVzcGFjZTogc3RyaW5nLCBmcmFtZXNUb1NraXAgPSAwKTogRGVidWdnZXIge1xuICBjb25zdCBrZXkgPSBgJHtuYW1lc3BhY2V9OiR7U3RyaW5nKGZyYW1lc1RvU2tpcCl9YDtcbiAgY29uc3QgZGVidWdnZXJzTWFwID0gZ2V0T2JzaWRpYW5EZXZVdGlsc1N0YXRlKCdkZWJ1Z2dlcnMnLCBuZXcgTWFwPHN0cmluZywgRGVidWdnZXI+KCkpLnZhbHVlO1xuICBsZXQgZGVidWdnZXJFeCA9IGRlYnVnZ2Vyc01hcC5nZXQoa2V5KTtcbiAgaWYgKCFkZWJ1Z2dlckV4KSB7XG4gICAgZGVidWdnZXJFeCA9IGdldFNoYXJlZERlYnVnTGliSW5zdGFuY2UoKShuYW1lc3BhY2UpO1xuICAgIGRlYnVnZ2VyRXgubG9nID0gKG1lc3NhZ2U6IHN0cmluZywgLi4uYXJnczogdW5rbm93bltdKTogdm9pZCA9PiB7XG4gICAgICBsb2dXaXRoQ2FsbGVyKHtcbiAgICAgICAgYXJncyxcbiAgICAgICAgZnJhbWVzVG9Ta2lwLFxuICAgICAgICBtZXNzYWdlLFxuICAgICAgICBuYW1lc3BhY2VcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBkZWJ1Z2dlcnNNYXAuc2V0KGtleSwgZGVidWdnZXJFeCk7XG4gIH1cblxuICByZXR1cm4gZGVidWdnZXJFeDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZGVidWdnZXIgaW5zdGFuY2UgZm9yIHRoZSBgb2JzaWRpYW4tZGV2LXV0aWxzYCBsaWJyYXJ5LlxuICpcbiAqIEBwYXJhbSBuYW1lc3BhY2UgLSBUaGUgbmFtZXNwYWNlIGZvciB0aGUgZGVidWdnZXIgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBBIGRlYnVnZ2VyIGluc3RhbmNlIGZvciB0aGUgYG9ic2lkaWFuLWRldi11dGlsc2AgbGlicmFyeS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldExpYkRlYnVnZ2VyKG5hbWVzcGFjZTogc3RyaW5nKTogRGVidWdnZXIge1xuICBjb25zdCBwbHVnaW5JZCA9IGdldFBsdWdpbklkKCk7XG4gIGNvbnN0IHByZWZpeCA9IHBsdWdpbklkID09PSBOT19QTFVHSU5fSURfSU5JVElBTElaRUQgPyAnJyA6IGAke3BsdWdpbklkfTpgO1xuICByZXR1cm4gZ2V0RGVidWdnZXIoYCR7cHJlZml4fSR7TElCUkFSWV9OQU1FfToke25hbWVzcGFjZX1gKTtcbn1cblxuLyoqXG4gKiBQcmludHMgYSBtZXNzYWdlIHdpdGggYSBzdGFjayB0cmFjZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHByaW50aW5nIHRoZSBtZXNzYWdlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJpbnRXaXRoU3RhY2tUcmFjZShwYXJhbXM6IFByaW50V2l0aFN0YWNrVHJhY2VQYXJhbXMpOiB2b2lkIHtcbiAgY29uc3Qge1xuICAgIGFyZ3MsXG4gICAgZGVidWdnZXJJbnN0YW5jZSxcbiAgICBtZXNzYWdlLFxuICAgIHN0YWNrVHJhY2VcbiAgfSA9IHBhcmFtcztcbiAgaWYgKCFpc0luT2JzaWRpYW4oKSkge1xuICAgIGRlYnVnZ2VySW5zdGFuY2UobWVzc2FnZSwgLi4uYXJncyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZGVidWdnZXJJbnN0YW5jZShtZXNzYWdlLCAuLi5hcmdzLCAnXFxuXFxuLS0tXFxuQ29udGV4dCBzdGFjayB0cmFjZTpcXG4nLCBtYWtlU3RhY2tUcmFjZUVycm9yKHN0YWNrVHJhY2UpKTtcbn1cblxuLyoqXG4gKiBTaG93cyBhbiBpbml0aWFsIGRlYnVnIG1lc3NhZ2UuXG4gKlxuICogQHBhcmFtIHBsdWdpbklkIC0gVGhlIHBsdWdpbiBJRC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNob3dJbml0aWFsRGVidWdNZXNzYWdlKHBsdWdpbklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgY29uc3QgaXNFbmFibGVkID0gZ2V0U2hhcmVkRGVidWdMaWJJbnN0YW5jZSgpLmVuYWJsZWQocGx1Z2luSWQpO1xuICBjb25zdCBzdGF0ZSA9IGlzRW5hYmxlZCA/ICdlbmFibGVkJyA6ICdkaXNhYmxlZCc7XG4gIGNvbnN0IGNoYW5nZUFjdGlvbiA9IGlzRW5hYmxlZCA/ICdkaXNhYmxlJyA6ICdlbmFibGUnO1xuICBjb25zdCBuYW1lc3BhY2VzID0gZ2V0TmFtZXNwYWNlcygpO1xuICBzZXROYW1lc3BhY2VzKHBsdWdpbklkKTtcbiAgZ2V0RGVidWdnZXIocGx1Z2luSWQpKFxuICAgIGBEZWJ1ZyBtZXNzYWdlcyBmb3IgcGx1Z2luICR7cGx1Z2luSWR9IGFyZSAke3N0YXRlfS4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tbmFvdW1vdi9vYnNpZGlhbi1kZXYtdXRpbHMvYmxvYi9tYWluL2RvY3MvZGVidWdnaW5nLm1kIGhvdyB0byAke2NoYW5nZUFjdGlvbn0gdGhlbS5gXG4gICk7XG4gIHNldE5hbWVzcGFjZXMobmFtZXNwYWNlcyk7XG59XG5cbmZ1bmN0aW9uIGRpc2FibGVOYW1lc3BhY2VzKG5hbWVzcGFjZXM6IHN0cmluZyB8IHN0cmluZ1tdKTogdm9pZCB7XG4gIGNvbnN0IHNldCA9IG5ldyBTZXQoZ2V0TmFtZXNwYWNlcygpKTtcbiAgZm9yIChjb25zdCBuYW1lc3BhY2Ugb2YgdG9BcnJheShuYW1lc3BhY2VzKSkge1xuICAgIGlmIChuYW1lc3BhY2Uuc3RhcnRzV2l0aChORUdBVEVEX05BTUVTUEFDRV9QUkVGSVgpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgbmVnYXRlZE5hbWVzcGFjZSA9IE5FR0FURURfTkFNRVNQQUNFX1BSRUZJWCArIG5hbWVzcGFjZTtcbiAgICBpZiAoc2V0LmhhcyhuYW1lc3BhY2UpKSB7XG4gICAgICBzZXQuZGVsZXRlKG5hbWVzcGFjZSk7XG4gICAgfVxuICAgIHNldC5hZGQobmVnYXRlZE5hbWVzcGFjZSk7XG4gIH1cbiAgc2V0TmFtZXNwYWNlcyhBcnJheS5mcm9tKHNldCkpO1xufVxuXG5mdW5jdGlvbiBlbmFibGVOYW1lc3BhY2VzKG5hbWVzcGFjZXM6IHN0cmluZyB8IHN0cmluZ1tdKTogdm9pZCB7XG4gIGNvbnN0IHNldCA9IG5ldyBTZXQoZ2V0TmFtZXNwYWNlcygpKTtcbiAgZm9yIChjb25zdCBuYW1lc3BhY2Ugb2YgdG9BcnJheShuYW1lc3BhY2VzKSkge1xuICAgIGlmICghbmFtZXNwYWNlLnN0YXJ0c1dpdGgoTkVHQVRFRF9OQU1FU1BBQ0VfUFJFRklYKSkge1xuICAgICAgY29uc3QgbmVnYXRlZE5hbWVzcGFjZSA9IE5FR0FURURfTkFNRVNQQUNFX1BSRUZJWCArIG5hbWVzcGFjZTtcbiAgICAgIGlmIChzZXQuaGFzKG5lZ2F0ZWROYW1lc3BhY2UpKSB7XG4gICAgICAgIHNldC5kZWxldGUobmVnYXRlZE5hbWVzcGFjZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHNldC5hZGQobmFtZXNwYWNlKTtcbiAgfVxuICBzZXROYW1lc3BhY2VzKEFycmF5LmZyb20oc2V0KSk7XG59XG5cbmZ1bmN0aW9uIGdldE5hbWVzcGFjZXMoKTogc3RyaW5nW10ge1xuICByZXR1cm4gdG9BcnJheShnZXRTaGFyZWREZWJ1Z0xpYkluc3RhbmNlKCkubG9hZCgpID8/ICcnKTtcbn1cblxuZnVuY3Rpb24gZ2V0U2hhcmVkRGVidWdMaWJJbnN0YW5jZSgpOiB0eXBlb2YgZGVidWcge1xuICBpZiAoIWlzSW5PYnNpZGlhbigpKSB7XG4gICAgcmV0dXJuIGRlYnVnO1xuICB9XG4gIHJldHVybiBnZXRPYnNpZGlhbkRldlV0aWxzU3RhdGUoJ2RlYnVnJywgZGVidWcpLnZhbHVlO1xufVxuXG5mdW5jdGlvbiBsb2dXaXRoQ2FsbGVyKHBhcmFtczogTG9nV2l0aENhbGxlclBhcmFtcyk6IHZvaWQge1xuICBjb25zdCB7XG4gICAgYXJncyxcbiAgICBmcmFtZXNUb1NraXAsXG4gICAgbWVzc2FnZSxcbiAgICBuYW1lc3BhY2VcbiAgfSA9IHBhcmFtcztcbiAgaWYgKCFnZXRTaGFyZWREZWJ1Z0xpYkluc3RhbmNlKCkuZW5hYmxlZChuYW1lc3BhY2UpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKCFpc0luT2JzaWRpYW4oKSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlIC0tIFZhbGlkIHVzYWdlLlxuICAgIGNvbnNvbGUuZGVidWcobWVzc2FnZSwgLi4uYXJncyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgY2FsbGVyIGxpbmUgaW5kZXggaXMgNCBiZWNhdXNlIHRoZSBjYWxsIHN0YWNrIGlzIGFzIGZvbGxvd3M6XG4gICAqXG4gICAqIDA6IEVycm9yXG4gICAqIDE6ICAgICBhdCBsb2dXaXRoQ2FsbGVyICg/Oj86PylcbiAgICogMjogICAgIGF0IGRlYnVnSW5zdGFuY2UubG9nICg/Oj86PylcbiAgICogMzogICAgIGF0IGRlYnVnICg/Oj86PylcbiAgICogNDogICAgIGF0IGZ1bmN0aW9uTmFtZSAocGF0aC90by9jYWxsZXIuanM6Pzo/KVxuICAgKi9cbiAgY29uc3QgQ0FMTEVSX0xJTkVfSU5ERVggPSA0O1xuXG4gIGNvbnN0IHN0YWNrTGluZXMgPSBlbnN1cmVOb25OdWxsYWJsZShuZXcgRXJyb3IoKS5zdGFjaykuc3BsaXQoJ1xcbicpO1xuICBzdGFja0xpbmVzLnNwbGljZSgwLCBDQUxMRVJfTElORV9JTkRFWCArIGZyYW1lc1RvU2tpcCk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGUgLS0gVmFsaWQgdXNhZ2UuXG4gIGNvbnNvbGUuZGVidWcobWVzc2FnZSwgLi4uYXJncywgJ1xcblxcbi0tLVxcbkxvZ2dlciBzdGFjayB0cmFjZTpcXG4nLCBtYWtlU3RhY2tUcmFjZUVycm9yKHN0YWNrTGluZXMuam9pbignXFxuJykpKTtcbn1cblxuZnVuY3Rpb24gbWFrZVN0YWNrVHJhY2VFcnJvcihzdGFja1RyYWNlOiBzdHJpbmcpOiBDdXN0b21TdGFja1RyYWNlRXJyb3Ige1xuICByZXR1cm4gbmV3IEN1c3RvbVN0YWNrVHJhY2VFcnJvcih7XG4gICAgY2F1c2U6IHVuZGVmaW5lZCxcbiAgICBtZXNzYWdlOiAnRGVidWcgbW9kZTogaW50ZW50aW9uYWwgcGxhY2Vob2xkZXIgZXJyb3IuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbW5hb3Vtb3Yvb2JzaWRpYW4tZGV2LXV0aWxzL2Jsb2IvbWFpbi9kb2NzL2RlYnVnZ2luZy5tZC4nLFxuICAgIHN0YWNrVHJhY2VcbiAgfSk7XG59XG5cbi8qKlxuICogU2V0cyB0aGUgbmFtZXNwYWNlcyB0byBlbmFibGUuXG4gKlxuICogQHBhcmFtIG5hbWVzcGFjZXMgLSBUaGUgbmFtZXNwYWNlcyB0byBlbmFibGUuXG4gKi9cbmZ1bmN0aW9uIHNldE5hbWVzcGFjZXMobmFtZXNwYWNlczogc3RyaW5nIHwgc3RyaW5nW10pOiB2b2lkIHtcbiAgZ2V0U2hhcmVkRGVidWdMaWJJbnN0YW5jZSgpLmVuYWJsZSh0b0FycmF5KG5hbWVzcGFjZXMpLmpvaW4oTkFNRVNQQUNFX1NFUEFSQVRPUikpO1xufVxuXG5mdW5jdGlvbiB0b0FycmF5KG5hbWVzcGFjZXM6IHN0cmluZyB8IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICByZXR1cm4gdHlwZW9mIG5hbWVzcGFjZXMgPT09ICdzdHJpbmcnID8gbmFtZXNwYWNlcy5zcGxpdChOQU1FU1BBQ0VfU0VQQVJBVE9SKS5maWx0ZXIoQm9vbGVhbikgOiBuYW1lc3BhY2VzLmZsYXRNYXAodG9BcnJheSk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVFBLE9BQU8sV0FBVztBQUlsQixTQUFTLDZCQUE2QjtBQUN0QyxTQUFTLG9CQUFvQjtBQUM3QixTQUFTLGdDQUFnQztBQUN6QyxTQUFTLG9CQUFvQjtBQUM3QjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMseUJBQXlCO0FBRWxDLE1BQU0sc0JBQXNCO0FBQzVCLE1BQU0sMkJBQTJCO0FBdUQxQixTQUFTLHlCQUErQjtBQUM3QyxtQkFBaUIsQ0FBQyxjQUFjLEdBQUcsWUFBWSxJQUFJLENBQUM7QUFDdEQ7QUFPTyxTQUFTLHFCQUFzQztBQUNwRCxTQUFPO0FBQUEsSUFDTCxTQUFTO0FBQUEsSUFDVCxRQUFRO0FBQUEsSUFDUixLQUFLO0FBQUEsSUFDTCxLQUFLO0FBQUEsRUFDUDtBQUNGO0FBU08sU0FBUyxZQUFZLFdBQW1CLGVBQWUsR0FBYTtBQUN6RSxRQUFNLE1BQU0sR0FBRyxTQUFTLElBQUksT0FBTyxZQUFZLENBQUM7QUFDaEQsUUFBTSxlQUFlLHlCQUF5QixhQUFhLG9CQUFJLElBQXNCLENBQUMsRUFBRTtBQUN4RixNQUFJLGFBQWEsYUFBYSxJQUFJLEdBQUc7QUFDckMsTUFBSSxDQUFDLFlBQVk7QUFDZixpQkFBYSwwQkFBMEIsRUFBRSxTQUFTO0FBQ2xELGVBQVcsTUFBTSxDQUFDLFlBQW9CLFNBQTBCO0FBQzlELG9CQUFjO0FBQUEsUUFDWjtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLE1BQ0YsQ0FBQztBQUFBLElBQ0g7QUFFQSxpQkFBYSxJQUFJLEtBQUssVUFBVTtBQUFBLEVBQ2xDO0FBRUEsU0FBTztBQUNUO0FBUU8sU0FBUyxlQUFlLFdBQTZCO0FBQzFELFFBQU0sV0FBVyxZQUFZO0FBQzdCLFFBQU0sU0FBUyxhQUFhLDJCQUEyQixLQUFLLEdBQUcsUUFBUTtBQUN2RSxTQUFPLFlBQVksR0FBRyxNQUFNLEdBQUcsWUFBWSxJQUFJLFNBQVMsRUFBRTtBQUM1RDtBQU9PLFNBQVMsb0JBQW9CLFFBQXlDO0FBQzNFLFFBQU07QUFBQSxJQUNKO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDRixJQUFJO0FBQ0osTUFBSSxDQUFDLGFBQWEsR0FBRztBQUNuQixxQkFBaUIsU0FBUyxHQUFHLElBQUk7QUFDakM7QUFBQSxFQUNGO0FBRUEsbUJBQWlCLFNBQVMsR0FBRyxNQUFNLG1DQUFtQyxvQkFBb0IsVUFBVSxDQUFDO0FBQ3ZHO0FBT08sU0FBUyx3QkFBd0IsVUFBd0I7QUFDOUQsUUFBTSxZQUFZLDBCQUEwQixFQUFFLFFBQVEsUUFBUTtBQUM5RCxRQUFNLFFBQVEsWUFBWSxZQUFZO0FBQ3RDLFFBQU0sZUFBZSxZQUFZLFlBQVk7QUFDN0MsUUFBTSxhQUFhLGNBQWM7QUFDakMsZ0JBQWMsUUFBUTtBQUN0QixjQUFZLFFBQVE7QUFBQSxJQUNsQiw2QkFBNkIsUUFBUSxRQUFRLEtBQUssMkZBQTJGLFlBQVk7QUFBQSxFQUMzSjtBQUNBLGdCQUFjLFVBQVU7QUFDMUI7QUFFQSxTQUFTLGtCQUFrQixZQUFxQztBQUM5RCxRQUFNLE1BQU0sSUFBSSxJQUFJLGNBQWMsQ0FBQztBQUNuQyxhQUFXLGFBQWEsUUFBUSxVQUFVLEdBQUc7QUFDM0MsUUFBSSxVQUFVLFdBQVcsd0JBQXdCLEdBQUc7QUFDbEQ7QUFBQSxJQUNGO0FBQ0EsVUFBTSxtQkFBbUIsMkJBQTJCO0FBQ3BELFFBQUksSUFBSSxJQUFJLFNBQVMsR0FBRztBQUN0QixVQUFJLE9BQU8sU0FBUztBQUFBLElBQ3RCO0FBQ0EsUUFBSSxJQUFJLGdCQUFnQjtBQUFBLEVBQzFCO0FBQ0EsZ0JBQWMsTUFBTSxLQUFLLEdBQUcsQ0FBQztBQUMvQjtBQUVBLFNBQVMsaUJBQWlCLFlBQXFDO0FBQzdELFFBQU0sTUFBTSxJQUFJLElBQUksY0FBYyxDQUFDO0FBQ25DLGFBQVcsYUFBYSxRQUFRLFVBQVUsR0FBRztBQUMzQyxRQUFJLENBQUMsVUFBVSxXQUFXLHdCQUF3QixHQUFHO0FBQ25ELFlBQU0sbUJBQW1CLDJCQUEyQjtBQUNwRCxVQUFJLElBQUksSUFBSSxnQkFBZ0IsR0FBRztBQUM3QixZQUFJLE9BQU8sZ0JBQWdCO0FBQUEsTUFDN0I7QUFBQSxJQUNGO0FBQ0EsUUFBSSxJQUFJLFNBQVM7QUFBQSxFQUNuQjtBQUNBLGdCQUFjLE1BQU0sS0FBSyxHQUFHLENBQUM7QUFDL0I7QUFFQSxTQUFTLGdCQUEwQjtBQUNqQyxTQUFPLFFBQVEsMEJBQTBCLEVBQUUsS0FBSyxLQUFLLEVBQUU7QUFDekQ7QUFFQSxTQUFTLDRCQUEwQztBQUNqRCxNQUFJLENBQUMsYUFBYSxHQUFHO0FBQ25CLFdBQU87QUFBQSxFQUNUO0FBQ0EsU0FBTyx5QkFBeUIsU0FBUyxLQUFLLEVBQUU7QUFDbEQ7QUFFQSxTQUFTLGNBQWMsUUFBbUM7QUFDeEQsUUFBTTtBQUFBLElBQ0o7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNGLElBQUk7QUFDSixNQUFJLENBQUMsMEJBQTBCLEVBQUUsUUFBUSxTQUFTLEdBQUc7QUFDbkQ7QUFBQSxFQUNGO0FBRUEsTUFBSSxDQUFDLGFBQWEsR0FBRztBQUVuQixZQUFRLE1BQU0sU0FBUyxHQUFHLElBQUk7QUFDOUI7QUFBQSxFQUNGO0FBV0EsUUFBTSxvQkFBb0I7QUFFMUIsUUFBTSxhQUFhLGtCQUFrQixJQUFJLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxJQUFJO0FBQ2xFLGFBQVcsT0FBTyxHQUFHLG9CQUFvQixZQUFZO0FBR3JELFVBQVEsTUFBTSxTQUFTLEdBQUcsTUFBTSxrQ0FBa0Msb0JBQW9CLFdBQVcsS0FBSyxJQUFJLENBQUMsQ0FBQztBQUM5RztBQUVBLFNBQVMsb0JBQW9CLFlBQTJDO0FBQ3RFLFNBQU8sSUFBSSxzQkFBc0I7QUFBQSxJQUMvQixPQUFPO0FBQUEsSUFDUCxTQUFTO0FBQUEsSUFDVDtBQUFBLEVBQ0YsQ0FBQztBQUNIO0FBT0EsU0FBUyxjQUFjLFlBQXFDO0FBQzFELDRCQUEwQixFQUFFLE9BQU8sUUFBUSxVQUFVLEVBQUUsS0FBSyxtQkFBbUIsQ0FBQztBQUNsRjtBQUVBLFNBQVMsUUFBUSxZQUF5QztBQUN4RCxTQUFPLE9BQU8sZUFBZSxXQUFXLFdBQVcsTUFBTSxtQkFBbUIsRUFBRSxPQUFPLE9BQU8sSUFBSSxXQUFXLFFBQVEsT0FBTztBQUM1SDsiLAogICJuYW1lcyI6IFtdCn0K
|
package/dist/lib/esm/error.d.mts
CHANGED
|
@@ -8,6 +8,23 @@
|
|
|
8
8
|
* A message of the AsyncWrapperError.
|
|
9
9
|
*/
|
|
10
10
|
export declare const ASYNC_WRAPPER_ERROR_MESSAGE = "An unhandled error occurred executing async operation";
|
|
11
|
+
/**
|
|
12
|
+
* Parameters for the {@link CustomStackTraceError} constructor.
|
|
13
|
+
*/
|
|
14
|
+
export interface CustomStackTraceErrorConstructorParams {
|
|
15
|
+
/**
|
|
16
|
+
* The cause of the error.
|
|
17
|
+
*/
|
|
18
|
+
readonly cause: unknown;
|
|
19
|
+
/**
|
|
20
|
+
* The message of the error.
|
|
21
|
+
*/
|
|
22
|
+
readonly message: string;
|
|
23
|
+
/**
|
|
24
|
+
* The stack trace of the error.
|
|
25
|
+
*/
|
|
26
|
+
readonly stackTrace: string;
|
|
27
|
+
}
|
|
11
28
|
/**
|
|
12
29
|
* An error that wraps an error with a custom stack trace.
|
|
13
30
|
*/
|
|
@@ -15,11 +32,9 @@ export declare class CustomStackTraceError extends Error {
|
|
|
15
32
|
/**
|
|
16
33
|
* Creates a new CustomStackTraceError.
|
|
17
34
|
*
|
|
18
|
-
* @param
|
|
19
|
-
* @param stackTrace - The stack trace of the error.
|
|
20
|
-
* @param cause - The cause of the error.
|
|
35
|
+
* @param params - The parameters for the error.
|
|
21
36
|
*/
|
|
22
|
-
constructor(
|
|
37
|
+
constructor(params: CustomStackTraceErrorConstructorParams);
|
|
23
38
|
}
|
|
24
39
|
/**
|
|
25
40
|
* An error that wraps a non-`Error` value that was thrown, preserving the original value in `cause`.
|