@dbx-tools/appkit-mastra 0.9.153 → 0.9.157
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/README.md +4 -3
- package/index.ts +32 -24
- package/lib/index.d.ts +32 -24
- package/lib/index.js +32 -23
- package/lib/src/agents.d.ts +5 -6
- package/lib/src/agents.js +12 -15
- package/lib/src/chart.js +33 -33
- package/lib/src/chat.js +10 -13
- package/lib/src/config.d.ts +12 -13
- package/lib/src/config.js +4 -4
- package/lib/src/evaluation.js +7 -9
- package/lib/src/feedback-mode.d.ts +1 -1
- package/lib/src/feedback-mode.js +1 -1
- package/lib/src/filesystems.js +6 -6
- package/lib/src/follow-up-suggestions.js +10 -10
- package/lib/src/genie-chat.js +27 -29
- package/lib/src/genie.d.ts +2 -2
- package/lib/src/genie.js +29 -29
- package/lib/src/identity.d.ts +3 -30
- package/lib/src/identity.js +2 -27
- package/lib/src/memory.d.ts +1 -1
- package/lib/src/memory.js +24 -6
- package/lib/src/mlflow.d.ts +4 -4
- package/lib/src/mlflow.js +15 -18
- package/lib/src/model.d.ts +3 -3
- package/lib/src/model.js +6 -6
- package/lib/src/monty-sandbox.js +8 -8
- package/lib/src/observability.d.ts +6 -5
- package/lib/src/observability.js +8 -6
- package/lib/src/plugin.d.ts +1 -1
- package/lib/src/plugin.js +49 -51
- package/lib/src/remote-skills.d.ts +3 -4
- package/lib/src/remote-skills.js +46 -46
- package/lib/src/rest.d.ts +2 -2
- package/lib/src/rest.js +3 -3
- package/lib/src/server.js +17 -20
- package/lib/src/serving.js +10 -11
- package/lib/src/statement.js +7 -7
- package/lib/src/storage-schema.js +4 -4
- package/lib/src/summarize.js +5 -5
- package/lib/src/telemetry.d.ts +0 -6
- package/lib/src/telemetry.js +34 -41
- package/lib/src/validation.js +3 -4
- package/lib/src/workspaces.d.ts +2 -2
- package/lib/src/workspaces.js +34 -36
- package/lib/src/writer.d.ts +2 -2
- package/lib/src/writer.js +3 -3
- package/package.json +17 -305
- package/src/agents.ts +27 -21
- package/src/chart.ts +43 -37
- package/src/chat.ts +10 -12
- package/src/config.ts +14 -15
- package/src/evaluation.ts +6 -8
- package/src/feedback-mode.ts +1 -1
- package/src/filesystems.ts +5 -5
- package/src/follow-up-suggestions.ts +9 -9
- package/src/genie-chat.ts +32 -31
- package/src/genie.ts +29 -29
- package/src/identity.ts +3 -38
- package/src/memory.ts +24 -6
- package/src/mlflow.ts +21 -21
- package/src/model.ts +7 -7
- package/src/monty-sandbox.ts +7 -7
- package/src/observability.ts +8 -6
- package/src/plugin.ts +78 -65
- package/src/remote-skills.ts +63 -55
- package/src/rest.ts +4 -4
- package/src/server.ts +32 -20
- package/src/serving.ts +14 -11
- package/src/statement.ts +10 -6
- package/src/storage-schema.ts +3 -3
- package/src/summarize.ts +4 -4
- package/src/telemetry.ts +49 -55
- package/src/validation.ts +2 -3
- package/src/workspaces.ts +52 -42
- package/src/writer.ts +3 -3
package/lib/src/feedback-mode.js
CHANGED
|
@@ -20,4 +20,4 @@ export function resolveFeedbackMode(configured, availability) {
|
|
|
20
20
|
return mode;
|
|
21
21
|
throw new ConfigurationError(`mastra: feedbackMode "${mode}" is unavailable in this configuration`, { context: { feedbackMode: mode } });
|
|
22
22
|
}
|
|
23
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVlZGJhY2stbW9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9mZWVkYmFjay1tb2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFFSCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQVd4RCwyRUFBMkU7QUFDM0UsTUFBTSxVQUFVLG1CQUFtQixDQUNqQyxVQUEwQyxFQUMxQyxZQUFrQztJQUVsQyxNQUFNLElBQUksR0FBRyxVQUFVLElBQUksTUFBTSxDQUFDO0lBQ2xDLElBQUksSUFBSSxLQUFLLE1BQU07UUFBRSxPQUFPLE1BQU0sQ0FBQztJQUNuQyxJQUFJLElBQUksS0FBSyxNQUFNLEVBQUUsQ0FBQztRQUNwQixJQUFJLFlBQVksQ0FBQyxLQUFLO1lBQUUsT0FBTyxPQUFPLENBQUM7UUFDdkMsSUFBSSxZQUFZLENBQUMsTUFBTTtZQUFFLE9BQU8sUUFBUSxDQUFDO1FBQ3pDLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFDRCxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUM7UUFBRSxPQUFPLElBQUksQ0FBQztJQUNwQyxNQUFNLElBQUksa0JBQWtCLENBQzFCLHlCQUF5QixJQUFJLHdDQUF3QyxFQUNyRSxFQUFFLE9BQU8sRUFBRSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUNwQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRmVlZGJhY2sgZGVzdGluYXRpb24gcmVzb2x1dGlvbi5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgQ29uZmlndXJhdGlvbkVycm9yIH0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBGZWVkYmFja01vZGUsIEZlZWRiYWNrTW9kZU9wdGlvbiB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1tYXN0cmFcIjtcblxuLyoqIFJ1bnRpbWUgYXZhaWxhYmlsaXR5IHVzZWQgYnkgYXV0b21hdGljIGZlZWRiYWNrIHNlbGVjdGlvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmVlZGJhY2tBdmFpbGFiaWxpdHkge1xuICAvKiogR2VuaWUgQWdlbnQgTW9kZSBoYXMgYXQgbGVhc3Qgb25lIGNvbmZpZ3VyZWQgc3BhY2UuICovXG4gIGdlbmllOiBib29sZWFuO1xuICAvKiogTUxmbG93IHRyYWNpbmcgaGFzIGEgY29uZmlndXJlZCBleHBlcmltZW50IGFuZCBleHBvcnRlci4gKi9cbiAgbWxmbG93OiBib29sZWFuO1xufVxuXG4vKiogUmVzb2x2ZSBhdXRvIGZlZWRiYWNrIG9yIGZhaWwgYW4gZXhwbGljaXRseSB1bmF2YWlsYWJsZSBkZXN0aW5hdGlvbi4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlRmVlZGJhY2tNb2RlKFxuICBjb25maWd1cmVkOiBGZWVkYmFja01vZGVPcHRpb24gfCB1bmRlZmluZWQsXG4gIGF2YWlsYWJpbGl0eTogRmVlZGJhY2tBdmFpbGFiaWxpdHksXG4pOiBGZWVkYmFja01vZGUge1xuICBjb25zdCBtb2RlID0gY29uZmlndXJlZCA/PyBcImF1dG9cIjtcbiAgaWYgKG1vZGUgPT09IFwibm9uZVwiKSByZXR1cm4gXCJub25lXCI7XG4gIGlmIChtb2RlID09PSBcImF1dG9cIikge1xuICAgIGlmIChhdmFpbGFiaWxpdHkuZ2VuaWUpIHJldHVybiBcImdlbmllXCI7XG4gICAgaWYgKGF2YWlsYWJpbGl0eS5tbGZsb3cpIHJldHVybiBcIm1sZmxvd1wiO1xuICAgIHJldHVybiBcIm5vbmVcIjtcbiAgfVxuICBpZiAoYXZhaWxhYmlsaXR5W21vZGVdKSByZXR1cm4gbW9kZTtcbiAgdGhyb3cgbmV3IENvbmZpZ3VyYXRpb25FcnJvcihcbiAgICBgbWFzdHJhOiBmZWVkYmFja01vZGUgXCIke21vZGV9XCIgaXMgdW5hdmFpbGFibGUgaW4gdGhpcyBjb25maWd1cmF0aW9uYCxcbiAgICB7IGNvbnRleHQ6IHsgZmVlZGJhY2tNb2RlOiBtb2RlIH0gfSxcbiAgKTtcbn1cbiJdfQ==
|
package/lib/src/filesystems.js
CHANGED
|
@@ -8,8 +8,8 @@
|
|
|
8
8
|
*
|
|
9
9
|
* @module
|
|
10
10
|
*/
|
|
11
|
-
import {
|
|
12
|
-
import { FileSystemError,
|
|
11
|
+
import { scratchFS } from "@dbx-tools/fs";
|
|
12
|
+
import { FileSystemError, dirname, normalize } from "@dbx-tools/shared-fs";
|
|
13
13
|
import { DirectoryNotEmptyError, DirectoryNotFoundError, FileExistsError, FileNotFoundError, IsDirectoryError, CompositeFilesystem, MastraFilesystem, NotDirectoryError, PermissionError, WorkspaceReadOnlyError, } from "@mastra/core/workspace";
|
|
14
14
|
/**
|
|
15
15
|
* Wrap a portable {@link FileSystem} as a Mastra {@link MastraFilesystem}.
|
|
@@ -167,7 +167,7 @@ export class MastraFileSystemAdapter extends MastraFilesystem {
|
|
|
167
167
|
}
|
|
168
168
|
/** When Mastra asks for non-recursive writes, require the parent directory. */
|
|
169
169
|
async assertParentExists(inputPath) {
|
|
170
|
-
const parent =
|
|
170
|
+
const parent = dirname(normalizeWorkspacePath(inputPath));
|
|
171
171
|
if (parent === "/" || (await this.fs.exists(parent)))
|
|
172
172
|
return;
|
|
173
173
|
throw new DirectoryNotFoundError(parent);
|
|
@@ -209,7 +209,7 @@ export class MountedCompositeFilesystem extends CompositeFilesystem {
|
|
|
209
209
|
}
|
|
210
210
|
/** Fresh writable local temp mount on a root unique to this call. */
|
|
211
211
|
export function scratchFilesystem() {
|
|
212
|
-
return filesystems(
|
|
212
|
+
return filesystems(scratchFS("mastra"));
|
|
213
213
|
}
|
|
214
214
|
/** Map a shared-fs error code onto the matching Mastra filesystem error. */
|
|
215
215
|
function mapSharedError(err, inputPath, preferDirectory) {
|
|
@@ -259,7 +259,7 @@ function toMastraStat(stat, inputPath) {
|
|
|
259
259
|
* and a mount should not fail a listing over a stray segment.
|
|
260
260
|
*/
|
|
261
261
|
function normalizeWorkspacePath(inputPath) {
|
|
262
|
-
const result =
|
|
262
|
+
const result = normalize(inputPath);
|
|
263
263
|
return result.ok ? result.path : "/";
|
|
264
264
|
}
|
|
265
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZXN5c3RlbXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZmlsZXN5c3RlbXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7OztHQVNHO0FBRUgsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4QyxPQUFPLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBTWxFLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsc0JBQXNCLEVBQ3RCLGVBQWUsRUFDZixpQkFBaUIsRUFDakIsZ0JBQWdCLEVBQ2hCLG1CQUFtQixFQUNuQixnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ2pCLGVBQWUsRUFDZixzQkFBc0IsR0FDdkIsTUFBTSx3QkFBd0IsQ0FBQztBQThDaEM7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUN6QixFQUFjLEVBQ2QsVUFBMEMsRUFBRTtJQUU1QyxPQUFPLElBQUksdUJBQXVCLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ2xELENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxPQUFPLHVCQUF3QixTQUFRLGdCQUFnQjtJQUMzRCxNQUFNLEdBQW1CLFNBQVMsQ0FBQztJQUVsQixFQUFFLENBQWE7SUFDZixPQUFPLENBQWlDO0lBRXpELFlBQVksRUFBYyxFQUFFLFVBQTBDLEVBQUU7UUFDdEUsS0FBSyxDQUFDO1lBQ0osSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLElBQUkseUJBQXlCO1lBQy9DLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtZQUN0QixTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVM7U0FDN0IsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDYixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBSSxFQUFFO1FBQ0osT0FBTyxJ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QUFDSixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsc0JBQXNCLENBQUMsU0FBaUI7SUFDL0MsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM5QyxPQUFPLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUN2QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBNYXN0cmEgd29ya3NwYWNlIGZpbGVzeXN0ZW0gYWRhcHRlcnMuXG4gKlxuICoge0BsaW5rIGZpbGVzeXN0ZW1zfSB3cmFwcyBhbnkgcG9ydGFibGUgYEBkYngtdG9vbHMvc2hhcmVkLWZzYCB7QGxpbmsgRmlsZVN5c3RlbX1cbiAqIChsb2NhbCBkaXNrLCBEYXRhYnJpY2tzLCBtZW1vcnksIOKApikgYXMgYSBNYXN0cmEge0BsaW5rIE1hc3RyYUZpbGVzeXN0ZW19LlxuICoge0BsaW5rIHNjcmF0Y2hGaWxlc3lzdGVtfSBhbHdheXMgcmV0dXJucyBhIGZyZXNoIHtAbGluayBsb2NhbEZTLnRtcEZTfSBtb3VudFxuICogKHJhbmRvbSBpZCByb290KSB3aGVuIE1hc3RyYSBuZWVkcyBhIGZpbGVzeXN0ZW0gYW5kIG5vIG90aGVyIG1vdW50IHJlc29sdmVkLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBsb2NhbEZTIH0gZnJvbSBcIkBkYngtdG9vbHMvZnNcIjtcbmltcG9ydCB7IEZpbGVTeXN0ZW1FcnJvciwgcG9zaXhQYXRoIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWZzXCI7XG5pbXBvcnQgdHlwZSB7XG4gIEZpbGVFbnRyeSBhcyBTaGFyZWRGaWxlRW50cnksXG4gIEZpbGVTdGF0IGFzIFNoYXJlZEZpbGVTdGF0LFxuICBGaWxlU3lzdGVtLFxufSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtZnNcIjtcbmltcG9ydCB7XG4gIERpcmVjdG9yeU5vdEVtcHR5RXJyb3IsXG4gIERpcmVjdG9yeU5vdEZvdW5kRXJyb3IsXG4gIEZpbGVFeGlzdHNFcnJvcixcbiAgRmlsZU5vdEZvdW5kRXJyb3IsXG4gIElzRGlyZWN0b3J5RXJyb3IsXG4gIENvbXBvc2l0ZUZpbGVzeXN0ZW0sXG4gIE1hc3RyYUZpbGVzeXN0ZW0sXG4gIE5vdERpcmVjdG9yeUVycm9yLFxuICBQZXJtaXNzaW9uRXJyb3IsXG4gIFdvcmtzcGFjZVJlYWRPbmx5RXJyb3IsXG59IGZyb20gXCJAbWFzdHJhL2NvcmUvd29ya3NwYWNlXCI7XG5pbXBvcnQgdHlwZSB7XG4gIENvbXBvc2l0ZUZpbGVzeXN0ZW1Db25maWcsXG4gIENvcHlPcHRpb25zLFxuICBGaWxlQ29udGVudCxcbiAgRmlsZUVudHJ5LFxuICBGaWxlU3RhdCxcbiAgRmlsZXN5c3RlbUluZm8sXG4gIExpc3RPcHRpb25zLFxuICBNYXN0cmFGaWxlc3lzdGVtT3B0aW9ucyxcbiAgUHJvdmlkZXJTdGF0dXMsXG4gIFJlYWRPcHRpb25zLFxuICBSZW1vdmVPcHRpb25zLFxuICBXcml0ZU9wdGlvbnMsXG59IGZyb20gXCJAbWFzdHJhL2NvcmUvd29ya3NwYWNlXCI7XG5cbi8qKiBPcHRpb25zIGZvciB7QGxpbmsgZmlsZXN5c3RlbXN9IC8ge0BsaW5rIE1hc3RyYUZpbGVTeXN0ZW1BZGFwdGVyfS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWFzdHJhRmlsZVN5c3RlbUFkYXB0ZXJPcHRpb25zIGV4dGVuZHMgTWFzdHJhRmlsZXN5c3RlbU9wdGlvbnMge1xuICAvKiogT3ZlcnJpZGUgdGhlIE1hc3RyYSBmaWxlc3lzdGVtIGlkLiBEZWZhdWx0cyB0byB0aGUgc291cmNlIHtAbGluayBGaWxlU3lzdGVtLmlkfS4gKi9cbiAgaWQ/OiBzdHJpbmc7XG5cbiAgLyoqIE92ZXJyaWRlIHRoZSBNYXN0cmEgZGlzcGxheSBuYW1lLiBEZWZhdWx0cyB0byBgTWFzdHJhRmlsZVN5c3RlbUFkYXB0ZXJgLiAqL1xuICBuYW1lPzogc3RyaW5nO1xuXG4gIC8qKiBIdW1hbi1mcmllbmRseSBtb3VudCBuYW1lIHN1cmZhY2VkIGJ5IGNvbXBvc2l0ZSBmaWxlc3lzdGVtIGxpc3RpbmdzLiAqL1xuICBkaXNwbGF5TmFtZT86IHN0cmluZztcblxuICAvKiogTW91bnQgZGVzY3JpcHRpb24gc3VyZmFjZWQgYnkgY29tcG9zaXRlIGZpbGVzeXN0ZW0gbGlzdGluZ3MgYW5kIGhlbHAuICovXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKiBSZXBsYWNlIHRoZSBnZW5lcmF0ZWQgZmlsZXN5c3RlbSB1c2FnZSBpbnN0cnVjdGlvbnMuICovXG4gIGluc3RydWN0aW9ucz86IHN0cmluZztcblxuICAvKipcbiAgICogT3ZlcnJpZGUgdGhlIE1hc3RyYSBwcm92aWRlciBpZC4gRGVmYXVsdHMgdG8gdGhlIHNvdXJjZVxuICAgKiB7QGxpbmsgRmlsZVN5c3RlbS5iYWNrZW5kfS5cbiAgICovXG4gIHByb3ZpZGVyPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBGb3JjZSByZWFkLW9ubHkgbW91bnRzIGV2ZW4gd2hlbiB0aGUgc291cmNlIGZpbGVzeXN0ZW0gYWxsb3dzIHdyaXRlcy5cbiAgICogVGhlIHNvdXJjZSB7QGxpbmsgRmlsZVN5c3RlbS5yZWFkT25seX0gZmxhZyBzdGlsbCBhcHBsaWVzIGVpdGhlciB3YXkuXG4gICAqL1xuICByZWFkT25seT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogV3JhcCBhIHBvcnRhYmxlIHtAbGluayBGaWxlU3lzdGVtfSBhcyBhIE1hc3RyYSB7QGxpbmsgTWFzdHJhRmlsZXN5c3RlbX0uXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBmaWxlc3lzdGVtcyB9IGZyb20gXCJAZGJ4LXRvb2xzL2FwcGtpdC1tYXN0cmFcIjtcbiAqIGltcG9ydCB7IERhdGFicmlja3NGaWxlU3lzdGVtIH0gZnJvbSBcIkBkYngtdG9vbHMvZGF0YWJyaWNrc1wiO1xuICogaW1wb3J0IHsgbG9jYWxGUyB9IGZyb20gXCJAZGJ4LXRvb2xzL2ZzXCI7XG4gKlxuICogY29uc3Qgdm9sdW1lID0gZmlsZXN5c3RlbXMuZmlsZXN5c3RlbXMoXG4gKiAgIG5ldyBEYXRhYnJpY2tzRmlsZVN5c3RlbSh7IHJvb3Q6IFwiL1ZvbHVtZXMvbWFpbi9kZWZhdWx0L2Fzc2V0c1wiIH0pLFxuICogKTtcbiAqIGNvbnN0IHNjcmF0Y2ggPSBmaWxlc3lzdGVtcy5maWxlc3lzdGVtcyhsb2NhbEZTLnRtcEZTKFwiYWdlbnQtam9iXCIpKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gZmlsZXN5c3RlbXMoXG4gIGZzOiBGaWxlU3lzdGVtLFxuICBvcHRpb25zOiBNYXN0cmFGaWxlU3lzdGVtQWRhcHRlck9wdGlvbnMgPSB7fSxcbik6IE1hc3RyYUZpbGVTeXN0ZW1BZGFwdGVyIHtcbiAgcmV0dXJuIG5ldyBNYXN0cmFGaWxlU3lzdGVtQWRhcHRlcihmcywgb3B0aW9ucyk7XG59XG5cbi8qKlxuICogVGhpbiBNYXN0cmEge0BsaW5rIE1hc3RyYUZpbGVzeXN0ZW19IGFkYXB0ZXIgb3ZlciBhIGBAZGJ4LXRvb2xzL3NoYXJlZC1mc2BcbiAqIHtAbGluayBGaWxlU3lzdGVtfS4gSWRlbnRpdHkgZmllbGRzIGFyZSBnZXR0ZXJzIHRoYXQgcmVhZCB0aGUgc291cmNlIG9uXG4gKiBhY2Nlc3M7IGNvbnN0cnVjdGlvbiBkb2VzIG5vdCBzbmFwc2hvdCB0aGVtLlxuICovXG5leHBvcnQgY2xhc3MgTWFzdHJhRmlsZVN5c3RlbUFkYXB0ZXIgZXh0ZW5kcyBNYXN0cmFGaWxlc3lzdGVtIHtcbiAgc3RhdHVzOiBQcm92aWRlclN0YXR1cyA9IFwicGVuZGluZ1wiO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZnM6IEZpbGVTeXN0ZW07XG4gIHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczogTWFzdHJhRmlsZVN5c3RlbUFkYXB0ZXJPcHRpb25zO1xuXG4gIGNvbnN0cnVjdG9yKGZzOiBGaWxlU3lzdGVtLCBvcHRpb25zOiBNYXN0cmFGaWxlU3lzdGVtQWRhcHRlck9wdGlvbnMgPSB7fSkge1xuICAgIHN1cGVyKHtcbiAgICAgIG5hbWU6IG9wdGlvbnMubmFtZSA/PyBcIk1hc3RyYUZpbGVTeXN0ZW1BZGFwdGVyXCIsXG4gICAgICBvbkluaXQ6IG9wdGlvbnMub25Jbml0LFxuICAgICAgb25EZXN0cm95OiBvcHRpb25zLm9uRGVzdHJveSxcbiAgICB9KTtcbiAgICB0aGlzLmZzID0gZnM7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgfVxuXG4gIGdldCBpZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuaWQgPz8gdGhpcy5mcy5pZDtcbiAgfVxuXG4gIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5uYW1lID8/IFwiTWFzdHJhRmlsZVN5c3RlbUFkYXB0ZXJcIjtcbiAgfVxuXG4gIGdldCBwcm92aWRlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMucHJvdmlkZXIgPz8gdGhpcy5mcy5iYWNrZW5kO1xuICB9XG5cbiAgZ2V0IGRpc3BsYXlOYW1lKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5kaXNwbGF5TmFtZTtcbiAgfVxuXG4gIGdldCBkZXNjcmlwdGlvbigpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZGVzY3JpcHRpb247XG4gIH1cblxuICBnZXQgcmVhZE9ubHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5yZWFkT25seSA9PT0gdHJ1ZSB8fCB0aGlzLmZzLnJlYWRPbmx5O1xuICB9XG5cbiAgZ2V0IGJhc2VQYXRoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZnMucm9vdDtcbiAgfVxuXG4gIG92ZXJyaWRlIGFzeW5jIGluaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5mcy5pbml0KCk7XG4gIH1cblxuICBvdmVycmlkZSBhc3luYyBkZXN0cm95KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuZnMuY2xvc2UoKTtcbiAgfVxuXG4gIGdldEluZm8oKTogRmlsZXN5c3RlbUluZm88eyByb290OiBzdHJpbmc7IGJhY2tlbmQ6IHN0cmluZyB9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgcHJvdmlkZXI6IHRoaXMucHJvdmlkZXIsXG4gICAgICBzdGF0dXM6IHRoaXMuc3RhdHVzLFxuICAgICAgcmVhZE9ubHk6IHRoaXMucmVhZE9ubHksXG4gICAgICBtZXRhZGF0YTogeyByb290OiB0aGlzLmZzLnJvb3QsIGJhY2tlbmQ6IHRoaXMuZnMuYmFja2VuZCB9LFxuICAgIH07XG4gIH1cblxuICBnZXRJbnN0cnVjdGlvbnMoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLmluc3RydWN0aW9ucyAhPT0gdW5kZWZpbmVkKSByZXR1cm4gdGhpcy5vcHRpb25zLmluc3RydWN0aW9ucztcbiAgICByZXR1cm4gW1xuICAgICAgLi4uKHRoaXMuZGVzY3JpcHRpb24gPyBbdGhpcy5kZXNjcmlwdGlvbl0gOiBbXSksXG4gICAgICBgRmlsZXMgYXJlIHNlcnZlZCBieSBhICR7dGhpcy5mcy5iYWNrZW5kfSBmaWxlc3lzdGVtIHJvb3RlZCBhdCAke3RoaXMuZnMucm9vdH0uYCxcbiAgICAgIFwiV29ya3NwYWNlIHBhdGhzIGFyZSBhYnNvbHV0ZSB3aXRoaW4gdGhpcyBtb3VudCAoZm9yIGV4YW1wbGUgYC9ub3Rlcy9yZXBvcnQubWRgKS5cIixcbiAgICBdLmpvaW4oXCIgXCIpO1xuICB9XG5cbiAgYXN5bmMgcmVhZEZpbGUoaW5wdXRQYXRoOiBzdHJpbmcsIG9wdGlvbnM/OiBSZWFkT3B0aW9ucyk6IFByb21pc2U8c3RyaW5nIHwgQnVmZmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUoaW5wdXRQYXRoLCBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAob3B0aW9ucz8uZW5jb2RpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZnMucmVhZEZpbGUoaW5wdXRQYXRoLCB7IGVuY29kaW5nOiBvcHRpb25zLmVuY29kaW5nIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGF3YWl0IHRoaXMuZnMucmVhZEZpbGUoaW5wdXRQYXRoKSk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyB3cml0ZUZpbGUoaW5wdXRQYXRoOiBzdHJpbmcsIGNvbnRlbnQ6IEZpbGVDb250ZW50LCBvcHRpb25zPzogV3JpdGVPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVXcml0ZShcIndyaXRlRmlsZVwiLCBpbnB1dFBhdGgsIGFzeW5jICgpID0+IHtcbiAgICAgIGlmIChvcHRpb25zPy5yZWN1cnNpdmUgPT09IGZhbHNlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYXNzZXJ0UGFyZW50RXhpc3RzKGlucHV0UGF0aCk7XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLmZzLndyaXRlRmlsZShpbnB1dFBhdGgsIGNvbnRlbnQsIHtcbiAgICAgICAgb3ZlcndyaXRlOiBvcHRpb25zPy5vdmVyd3JpdGUgPz8gdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgYXBwZW5kRmlsZShpbnB1dFBhdGg6IHN0cmluZywgY29udGVudDogRmlsZUNvbnRlbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZVdyaXRlKFwiYXBwZW5kRmlsZVwiLCBpbnB1dFBhdGgsICgpID0+XG4gICAgICB0aGlzLmZzLmFwcGVuZEZpbGUoaW5wdXRQYXRoLCBjb250ZW50KSxcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlRmlsZShpbnB1dFBhdGg6IHN0cmluZywgb3B0aW9ucz86IFJlbW92ZU9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZVdyaXRlKFwiZGVsZXRlRmlsZVwiLCBpbnB1dFBhdGgsICgpID0+XG4gICAgICB0aGlzLmZzLmRlbGV0ZUZpbGUoaW5wdXRQYXRoLCB7XG4gICAgICAgIGZvcmNlOiBvcHRpb25zPy5mb3JjZSxcbiAgICAgICAgcmVjdXJzaXZlOiBvcHRpb25zPy5yZWN1cnNpdmUsXG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgY29weUZpbGUoc3JjOiBzdHJpbmcsIGRlc3Q6IHN0cmluZywgb3B0aW9ucz86IENvcHlPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVXcml0ZShcImNvcHlGaWxlXCIsIGRlc3QsICgpID0+XG4gICAgICB0aGlzLmZzLmNvcHlGaWxlKHNyYywgZGVzdCwgeyBvdmVyd3JpdGU6IG9wdGlvbnM/Lm92ZXJ3cml0ZSA/PyB0cnVlIH0pLFxuICAgICk7XG4gIH1cblxuICBhc3luYyBtb3ZlRmlsZShzcmM6IHN0cmluZywgZGVzdDogc3RyaW5nLCBvcHRpb25zPzogQ29weU9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZVdyaXRlKFwibW92ZUZpbGVcIiwgZGVzdCwgKCkgPT5cbiAgICAgIHRoaXMuZnMubW92ZUZpbGUoc3JjLCBkZXN0LCB7IG92ZXJ3cml0ZTogb3B0aW9ucz8ub3ZlcndyaXRlID8/IHRydWUgfSksXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIG1rZGlyKGlucHV0UGF0aDogc3RyaW5nLCBvcHRpb25zPzogeyByZWN1cnNpdmU/OiBib29sZWFuIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZVdyaXRlKFwibWtkaXJcIiwgaW5wdXRQYXRoLCAoKSA9PlxuICAgICAgdGhpcy5mcy5ta2RpcihpbnB1dFBhdGgsIHsgcmVjdXJzaXZlOiBvcHRpb25zPy5yZWN1cnNpdmUgfSksXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIHJtZGlyKGlucHV0UGF0aDogc3RyaW5nLCBvcHRpb25zPzogUmVtb3ZlT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlV3JpdGUoXG4gICAgICBcInJtZGlyXCIsXG4gICAgICBpbnB1dFBhdGgsXG4gICAgICAoKSA9PlxuICAgICAgICB0aGlzLmZzLnJtZGlyKGlucHV0UGF0aCwge1xuICAgICAgICAgIGZvcmNlOiBvcHRpb25zPy5mb3JjZSxcbiAgICAgICAgICByZWN1cnNpdmU6IG9wdGlvbnM/LnJlY3Vyc2l2ZSxcbiAgICAgICAgfSksXG4gICAgICB7IHByZWZlckRpcmVjdG9yeTogdHJ1ZSB9LFxuICAgICk7XG4gIH1cblxuICBhc3luYyByZWFkZGlyKGlucHV0UGF0aDogc3RyaW5nLCBvcHRpb25zPzogTGlzdE9wdGlvbnMpOiBQcm9taXNlPEZpbGVFbnRyeVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUoXG4gICAgICBpbnB1dFBhdGgsXG4gICAgICBhc3luYyAoKSA9PlxuICAgICAgICAoXG4gICAgICAgICAgYXdhaXQgdGhpcy5mcy5yZWFkZGlyKGlucHV0UGF0aCwge1xuICAgICAgICAgICAgcmVjdXJzaXZlOiBvcHRpb25zPy5yZWN1cnNpdmUsXG4gICAgICAgICAgICBtYXhEZXB0aDogb3B0aW9ucz8ubWF4RGVwdGgsXG4gICAgICAgICAgICBleHRlbnNpb246IG9wdGlvbnM/LmV4dGVuc2lvbixcbiAgICAgICAgICB9KVxuICAgICAgICApLm1hcCh0b01hc3RyYUVudHJ5KSxcbiAgICAgIHsgcHJlZmVyRGlyZWN0b3J5OiB0cnVlIH0sXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGV4aXN0cyhpbnB1dFBhdGg6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlUmVhZHkoKTtcbiAgICByZXR1cm4gdGhpcy5mcy5leGlzdHMoaW5wdXRQYXRoKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXQoaW5wdXRQYXRoOiBzdHJpbmcpOiBQcm9taXNlPEZpbGVTdGF0PiB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUoaW5wdXRQYXRoLCBhc3luYyAoKSA9PlxuICAgICAgdG9NYXN0cmFTdGF0KGF3YWl0IHRoaXMuZnMuc3RhdChpbnB1dFBhdGgpLCBpbnB1dFBhdGgpLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGRlbGVnYXRlPFQ+KFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBvcDogKCkgPT4gUHJvbWlzZTxUPixcbiAgICBvcHRpb25zPzogeyBwcmVmZXJEaXJlY3Rvcnk/OiBib29sZWFuIH0sXG4gICk6IFByb21pc2U8VD4ge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlUmVhZHkoKTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IG9wKCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLnJldGhyb3coZXJyLCBwYXRoLCBvcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICAvKioge0BsaW5rIGRlbGVnYXRlfSBmb3IgYSBtdXRhdGlvbjogcmVmdXNlIGEgcmVhZC1vbmx5IG1vdW50IGJlZm9yZSBkb2luZyBhbnkgd29yay4gKi9cbiAgcHJpdmF0ZSBkZWxlZ2F0ZVdyaXRlKFxuICAgIG9wZXJhdGlvbjogc3RyaW5nLFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBvcDogKCkgPT4gUHJvbWlzZTx2b2lkPixcbiAgICBvcHRpb25zPzogeyBwcmVmZXJEaXJlY3Rvcnk/OiBib29sZWFuIH0sXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLnJlYWRPbmx5KSB7XG4gICAgICB0aHJvdyBuZXcgV29ya3NwYWNlUmVhZE9ubHlFcnJvcihvcGVyYXRpb24pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZShwYXRoLCBvcCwgb3B0aW9ucyk7XG4gIH1cblxuICAvKiogV2hlbiBNYXN0cmEgYXNrcyBmb3Igbm9uLXJlY3Vyc2l2ZSB3cml0ZXMsIHJlcXVpcmUgdGhlIHBhcmVudCBkaXJlY3RvcnkuICovXG4gIHByaXZhdGUgYXN5bmMgYXNzZXJ0UGFyZW50RXhpc3RzKGlucHV0UGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcGFyZW50ID0gcG9zaXhQYXRoLmRpcm5hbWUobm9ybWFsaXplV29ya3NwYWNlUGF0aChpbnB1dFBhdGgpKTtcbiAgICBpZiAocGFyZW50ID09PSBcIi9cIiB8fCAoYXdhaXQgdGhpcy5mcy5leGlzdHMocGFyZW50KSkpIHJldHVybjtcbiAgICB0aHJvdyBuZXcgRGlyZWN0b3J5Tm90Rm91bmRFcnJvcihwYXJlbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXRocm93KGVycjogdW5rbm93biwgaW5wdXRQYXRoOiBzdHJpbmcsIG9wdGlvbnM/OiB7IHByZWZlckRpcmVjdG9yeT86IGJvb2xlYW4gfSk6IG5ldmVyIHtcbiAgICBpZiAoXG4gICAgICBlcnIgaW5zdGFuY2VvZiBGaWxlTm90Rm91bmRFcnJvciB8fFxuICAgICAgZXJyIGluc3RhbmNlb2YgRGlyZWN0b3J5Tm90Rm91bmRFcnJvciB8fFxuICAgICAgZXJyIGluc3RhbmNlb2YgRmlsZUV4aXN0c0Vycm9yIHx8XG4gICAgICBlcnIgaW5zdGFuY2VvZiBJc0RpcmVjdG9yeUVycm9yIHx8XG4gICAgICBlcnIgaW5zdGFuY2VvZiBOb3REaXJlY3RvcnlFcnJvciB8fFxuICAgICAgZXJyIGluc3RhbmNlb2YgRGlyZWN0b3J5Tm90RW1wdHlFcnJvciB8fFxuICAgICAgZXJyIGluc3RhbmNlb2YgUGVybWlzc2lvbkVycm9yIHx8XG4gICAgICBlcnIgaW5zdGFuY2VvZiBXb3Jrc3BhY2VSZWFkT25seUVycm9yXG4gICAgKSB7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuXG4gICAgaWYgKGVyciBpbnN0YW5jZW9mIEZpbGVTeXN0ZW1FcnJvcikge1xuICAgICAgdGhyb3cgbWFwU2hhcmVkRXJyb3IoZXJyLCBpbnB1dFBhdGgsIG9wdGlvbnM/LnByZWZlckRpcmVjdG9yeSA9PT0gdHJ1ZSk7XG4gICAgfVxuXG4gICAgdGhyb3cgZXJyO1xuICB9XG59XG5cbi8qKlxuICogQ29tcG9zaXRlIG1vdW50IG5hbWVzcGFjZSB3aG9zZSB2aXJ0dWFsIHJvb3QgaGFzIG5vIHJlcG9zaXRvcnktbGV2ZWxcbiAqIGAuZ2l0aWdub3JlYC4gTWFzdHJhJ3MgbGlzdCB0b29sIHByb2JlcyB0aGF0IHJlbGF0aXZlIGZpbGUgYmVmb3JlIHdhbGtpbmc7XG4gKiBhbiBlbXB0eSByZXN1bHQga2VlcHMgbmF0aXZlIGlnbm9yZSBoYW5kbGluZyBlbmFibGVkIHdpdGhvdXQgcm91dGluZyB0aGVcbiAqIHZpcnR1YWwtcm9vdCBsb29rdXAgaW50byBhbiB1bnJlbGF0ZWQgbW91bnQuXG4gKi9cbmV4cG9ydCBjbGFzcyBNb3VudGVkQ29tcG9zaXRlRmlsZXN5c3RlbSBleHRlbmRzIENvbXBvc2l0ZUZpbGVzeXN0ZW0ge1xuICBjb25zdHJ1Y3Rvcihjb25maWc6IENvbXBvc2l0ZUZpbGVzeXN0ZW1Db25maWcpIHtcbiAgICBzdXBlcihjb25maWcpO1xuICB9XG5cbiAgb3ZlcnJpZGUgYXN5bmMgcmVhZEZpbGUoaW5wdXRQYXRoOiBzdHJpbmcsIG9wdGlvbnM/OiBSZWFkT3B0aW9ucyk6IFByb21pc2U8c3RyaW5nIHwgQnVmZmVyPiB7XG4gICAgaWYgKFxuICAgICAgKGlucHV0UGF0aCA9PT0gXCIuZ2l0aWdub3JlXCIgfHwgaW5wdXRQYXRoID09PSBcIi8uZ2l0aWdub3JlXCIpICYmXG4gICAgICAhdGhpcy5nZXRGaWxlc3lzdGVtRm9yUGF0aChpbnB1dFBhdGgpXG4gICAgKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucz8uZW5jb2RpbmcgPyBcIlwiIDogQnVmZmVyLmFsbG9jKDApO1xuICAgIH1cbiAgICByZXR1cm4gc3VwZXIucmVhZEZpbGUoaW5wdXRQYXRoLCBvcHRpb25zKTtcbiAgfVxufVxuXG4vKiogRnJlc2ggd3JpdGFibGUgbG9jYWwgdGVtcCBtb3VudCBvbiBhIHJvb3QgdW5pcXVlIHRvIHRoaXMgY2FsbC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzY3JhdGNoRmlsZXN5c3RlbSgpOiBNYXN0cmFGaWxlU3lzdGVtQWRhcHRlciB7XG4gIHJldHVybiBmaWxlc3lzdGVtcyhsb2NhbEZTLnNjcmF0Y2hGUyhcIm1hc3RyYVwiKSk7XG59XG5cbi8qKiBNYXAgYSBzaGFyZWQtZnMgZXJyb3IgY29kZSBvbnRvIHRoZSBtYXRjaGluZyBNYXN0cmEgZmlsZXN5c3RlbSBlcnJvci4gKi9cbmZ1bmN0aW9uIG1hcFNoYXJlZEVycm9yKGVycjogRmlsZVN5c3RlbUVycm9yLCBpbnB1dFBhdGg6IHN0cmluZywgcHJlZmVyRGlyZWN0b3J5OiBib29sZWFuKTogRXJyb3Ige1xuICBjb25zdCBwYXRoID0gZXJyLnBhdGggPz8gaW5wdXRQYXRoO1xuICBzd2l0Y2ggKGVyci5jb2RlKSB7XG4gICAgY2FzZSBcIk5PVF9GT1VORFwiOlxuICAgICAgcmV0dXJuIHByZWZlckRpcmVjdG9yeSA/IG5ldyBEaXJlY3RvcnlOb3RGb3VuZEVycm9yKHBhdGgpIDogbmV3IEZpbGVOb3RGb3VuZEVycm9yKHBhdGgpO1xuICAgIGNhc2UgXCJBTFJFQURZX0VYSVNUU1wiOlxuICAgICAgcmV0dXJuIG5ldyBGaWxlRXhpc3RzRXJyb3IocGF0aCk7XG4gICAgY2FzZSBcIk5PVF9ESVJFQ1RPUllcIjpcbiAgICAgIHJldHVybiBuZXcgTm90RGlyZWN0b3J5RXJyb3IocGF0aCk7XG4gICAgY2FzZSBcIklTX0RJUkVDVE9SWVwiOlxuICAgICAgcmV0dXJuIG5ldyBJc0RpcmVjdG9yeUVycm9yKHBhdGgpO1xuICAgIGNhc2UgXCJESVJFQ1RPUllfTk9UX0VNUFRZXCI6XG4gICAgICByZXR1cm4gbmV3IERpcmVjdG9yeU5vdEVtcHR5RXJyb3IocGF0aCk7XG4gICAgY2FzZSBcIlBFUk1JU1NJT05fREVOSUVEXCI6XG4gICAgICByZXR1cm4gbmV3IFBlcm1pc3Npb25FcnJvcihwYXRoLCBlcnIubWVzc2FnZSk7XG4gICAgY2FzZSBcIlJFQURfT05MWVwiOlxuICAgICAgcmV0dXJuIG5ldyBXb3Jrc3BhY2VSZWFkT25seUVycm9yKGVyci5tZXNzYWdlKTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGVycjtcbiAgfVxufVxuXG5mdW5jdGlvbiB0b01hc3RyYUVudHJ5KGVudHJ5OiBTaGFyZWRGaWxlRW50cnkpOiBGaWxlRW50cnkge1xuICByZXR1cm4ge1xuICAgIG5hbWU6IGVudHJ5Lm5hbWUsXG4gICAgdHlwZTogZW50cnkudHlwZSA9PT0gXCJkaXJlY3RvcnlcIiA/IFwiZGlyZWN0b3J5XCIgOiBcImZpbGVcIixcbiAgICBzaXplOiBlbnRyeS5zaXplLFxuICAgIGlzU3ltbGluazogZW50cnkudHlwZSA9PT0gXCJzeW1ib2xpYy1saW5rXCIsXG4gIH07XG59XG5cbmZ1bmN0aW9uIHRvTWFzdHJhU3RhdChzdGF0OiBTaGFyZWRGaWxlU3RhdCwgaW5wdXRQYXRoOiBzdHJpbmcpOiBGaWxlU3RhdCB7XG4gIGNvbnN0IGVwb2NoID0gbmV3IERhdGUoMCk7XG4gIHJldHVybiB7XG4gICAgbmFtZTogc3RhdC5uYW1lLFxuICAgIHBhdGg6IG5vcm1hbGl6ZVdvcmtzcGFjZVBhdGgoc3RhdC5wYXRoIHx8IGlucHV0UGF0aCksXG4gICAgdHlwZTogc3RhdC50eXBlID09PSBcImRpcmVjdG9yeVwiID8gXCJkaXJlY3RvcnlcIiA6IFwiZmlsZVwiLFxuICAgIHNpemU6IHN0YXQuc2l6ZSA/PyAwLFxuICAgIGNyZWF0ZWRBdDogc3RhdC5jcmVhdGVkQXQgPz8gZXBvY2gsXG4gICAgbW9kaWZpZWRBdDogc3RhdC5tb2RpZmllZEF0ID8/IGVwb2NoLFxuICAgIG1pbWVUeXBlOiBzdGF0Lm1pbWVUeXBlLFxuICB9O1xufVxuXG4vKipcbiAqIE1hc3RyYSBuYW1lc3BhY2UgcGF0aCAoYC9hL2JgKS4gQSBgLi5gIHRoYXQgd291bGQgZXNjYXBlIGNsYW1wcyB0byB0aGUgcm9vdFxuICogcmF0aGVyIHRoYW4gdGhyb3dpbmcgLSB0aGUgd3JhcHBlZCBmaWxlc3lzdGVtIGVuZm9yY2VzIGNvbnRhaW5tZW50IGl0c2VsZixcbiAqIGFuZCBhIG1vdW50IHNob3VsZCBub3QgZmFpbCBhIGxpc3Rpbmcgb3ZlciBhIHN0cmF5IHNlZ21lbnQuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVdvcmtzcGFjZVBhdGgoaW5wdXRQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCByZXN1bHQgPSBwb3NpeFBhdGgubm9ybWFsaXplKGlucHV0UGF0aCk7XG4gIHJldHVybiByZXN1bHQub2sgPyByZXN1bHQucGF0aCA6IFwiL1wiO1xufVxuIl19
|
|
265
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZXN5c3RlbXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZmlsZXN5c3RlbXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7OztHQVNHO0FBRUgsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQU0zRSxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLHNCQUFzQixFQUN0QixlQUFlLEVBQ2YsaUJBQWlCLEVBQ2pCLGdCQUFnQixFQUNoQixtQkFBbUIsRUFDbkIsZ0JBQWdCLEVBQ2hCLGlCQUFpQixFQUNqQixlQUFlLEVBQ2Ysc0JBQXNCLEdBQ3ZCLE1BQU0sd0JBQXdCLENBQUM7QUE4Q2hDOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FDekIsRUFBYyxFQUNkLFVBQTBDLEVBQUU7SUFFNUMsT0FBTyxJQUFJLHVCQUF1QixDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNsRCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sT0FBTyx1QkFBd0IsU0FBUSxnQkFBZ0I7SUFDM0QsTUFBTSxHQUFtQixTQUFTLENBQUM7SUFFbEIsRUFBRSxDQUFhO0lBQ2YsT0FBTyxDQUFpQztJQUV6RCxZQUFZLEVBQWMsRUFBRSxVQUEwQyxFQUFFO1FBQ3RFLEtBQUssQ0FBQztZQUNKLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxJQUFJLHlCQUF5QjtZQUMvQyxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07WUFDdEIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTO1NBQzdCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ2IsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7SUFDekIsQ0FBQztJQUVELElBQUksRUFBRTtR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QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxzQkFBc0IsQ0FBQyxTQUFpQjtJQUMvQyxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDcEMsT0FBTyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDdkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTWFzdHJhIHdvcmtzcGFjZSBmaWxlc3lzdGVtIGFkYXB0ZXJzLlxuICpcbiAqIHtAbGluayBmaWxlc3lzdGVtc30gd3JhcHMgYW55IHBvcnRhYmxlIGBAZGJ4LXRvb2xzL3NoYXJlZC1mc2Age0BsaW5rIEZpbGVTeXN0ZW19XG4gKiAobG9jYWwgZGlzaywgRGF0YWJyaWNrcywgbWVtb3J5LCDigKYpIGFzIGEgTWFzdHJhIHtAbGluayBNYXN0cmFGaWxlc3lzdGVtfS5cbiAqIHtAbGluayBzY3JhdGNoRmlsZXN5c3RlbX0gYWx3YXlzIHJldHVybnMgYSBmcmVzaCB7QGxpbmsgbG9jYWxGUy50bXBGU30gbW91bnRcbiAqIChyYW5kb20gaWQgcm9vdCkgd2hlbiBNYXN0cmEgbmVlZHMgYSBmaWxlc3lzdGVtIGFuZCBubyBvdGhlciBtb3VudCByZXNvbHZlZC5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgc2NyYXRjaEZTIH0gZnJvbSBcIkBkYngtdG9vbHMvZnNcIjtcbmltcG9ydCB7IEZpbGVTeXN0ZW1FcnJvciwgZGlybmFtZSwgbm9ybWFsaXplIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWZzXCI7XG5pbXBvcnQgdHlwZSB7XG4gIEZpbGVFbnRyeSBhcyBTaGFyZWRGaWxlRW50cnksXG4gIEZpbGVTdGF0IGFzIFNoYXJlZEZpbGVTdGF0LFxuICBGaWxlU3lzdGVtLFxufSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtZnNcIjtcbmltcG9ydCB7XG4gIERpcmVjdG9yeU5vdEVtcHR5RXJyb3IsXG4gIERpcmVjdG9yeU5vdEZvdW5kRXJyb3IsXG4gIEZpbGVFeGlzdHNFcnJvcixcbiAgRmlsZU5vdEZvdW5kRXJyb3IsXG4gIElzRGlyZWN0b3J5RXJyb3IsXG4gIENvbXBvc2l0ZUZpbGVzeXN0ZW0sXG4gIE1hc3RyYUZpbGVzeXN0ZW0sXG4gIE5vdERpcmVjdG9yeUVycm9yLFxuICBQZXJtaXNzaW9uRXJyb3IsXG4gIFdvcmtzcGFjZVJlYWRPbmx5RXJyb3IsXG59IGZyb20gXCJAbWFzdHJhL2NvcmUvd29ya3NwYWNlXCI7XG5pbXBvcnQgdHlwZSB7XG4gIENvbXBvc2l0ZUZpbGVzeXN0ZW1Db25maWcsXG4gIENvcHlPcHRpb25zLFxuICBGaWxlQ29udGVudCxcbiAgRmlsZUVudHJ5LFxuICBGaWxlU3RhdCxcbiAgRmlsZXN5c3RlbUluZm8sXG4gIExpc3RPcHRpb25zLFxuICBNYXN0cmFGaWxlc3lzdGVtT3B0aW9ucyxcbiAgUHJvdmlkZXJTdGF0dXMsXG4gIFJlYWRPcHRpb25zLFxuICBSZW1vdmVPcHRpb25zLFxuICBXcml0ZU9wdGlvbnMsXG59IGZyb20gXCJAbWFzdHJhL2NvcmUvd29ya3NwYWNlXCI7XG5cbi8qKiBPcHRpb25zIGZvciB7QGxpbmsgZmlsZXN5c3RlbXN9IC8ge0BsaW5rIE1hc3RyYUZpbGVTeXN0ZW1BZGFwdGVyfS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWFzdHJhRmlsZVN5c3RlbUFkYXB0ZXJPcHRpb25zIGV4dGVuZHMgTWFzdHJhRmlsZXN5c3RlbU9wdGlvbnMge1xuICAvKiogT3ZlcnJpZGUgdGhlIE1hc3RyYSBmaWxlc3lzdGVtIGlkLiBEZWZhdWx0cyB0byB0aGUgc291cmNlIHtAbGluayBGaWxlU3lzdGVtLmlkfS4gKi9cbiAgaWQ/OiBzdHJpbmc7XG5cbiAgLyoqIE92ZXJyaWRlIHRoZSBNYXN0cmEgZGlzcGxheSBuYW1lLiBEZWZhdWx0cyB0byBgTWFzdHJhRmlsZVN5c3RlbUFkYXB0ZXJgLiAqL1xuICBuYW1lPzogc3RyaW5nO1xuXG4gIC8qKiBIdW1hbi1mcmllbmRseSBtb3VudCBuYW1lIHN1cmZhY2VkIGJ5IGNvbXBvc2l0ZSBmaWxlc3lzdGVtIGxpc3RpbmdzLiAqL1xuICBkaXNwbGF5TmFtZT86IHN0cmluZztcblxuICAvKiogTW91bnQgZGVzY3JpcHRpb24gc3VyZmFjZWQgYnkgY29tcG9zaXRlIGZpbGVzeXN0ZW0gbGlzdGluZ3MgYW5kIGhlbHAuICovXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKiBSZXBsYWNlIHRoZSBnZW5lcmF0ZWQgZmlsZXN5c3RlbSB1c2FnZSBpbnN0cnVjdGlvbnMuICovXG4gIGluc3RydWN0aW9ucz86IHN0cmluZztcblxuICAvKipcbiAgICogT3ZlcnJpZGUgdGhlIE1hc3RyYSBwcm92aWRlciBpZC4gRGVmYXVsdHMgdG8gdGhlIHNvdXJjZVxuICAgKiB7QGxpbmsgRmlsZVN5c3RlbS5iYWNrZW5kfS5cbiAgICovXG4gIHByb3ZpZGVyPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBGb3JjZSByZWFkLW9ubHkgbW91bnRzIGV2ZW4gd2hlbiB0aGUgc291cmNlIGZpbGVzeXN0ZW0gYWxsb3dzIHdyaXRlcy5cbiAgICogVGhlIHNvdXJjZSB7QGxpbmsgRmlsZVN5c3RlbS5yZWFkT25seX0gZmxhZyBzdGlsbCBhcHBsaWVzIGVpdGhlciB3YXkuXG4gICAqL1xuICByZWFkT25seT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogV3JhcCBhIHBvcnRhYmxlIHtAbGluayBGaWxlU3lzdGVtfSBhcyBhIE1hc3RyYSB7QGxpbmsgTWFzdHJhRmlsZXN5c3RlbX0uXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBmaWxlc3lzdGVtcyB9IGZyb20gXCJAZGJ4LXRvb2xzL2FwcGtpdC1tYXN0cmFcIjtcbiAqIGltcG9ydCB7IERhdGFicmlja3NGaWxlU3lzdGVtIH0gZnJvbSBcIkBkYngtdG9vbHMvZGF0YWJyaWNrc1wiO1xuICogaW1wb3J0IHsgbG9jYWxGUyB9IGZyb20gXCJAZGJ4LXRvb2xzL2ZzXCI7XG4gKlxuICogY29uc3Qgdm9sdW1lID0gZmlsZXN5c3RlbXMuZmlsZXN5c3RlbXMoXG4gKiAgIG5ldyBEYXRhYnJpY2tzRmlsZVN5c3RlbSh7IHJvb3Q6IFwiL1ZvbHVtZXMvbWFpbi9kZWZhdWx0L2Fzc2V0c1wiIH0pLFxuICogKTtcbiAqIGNvbnN0IHNjcmF0Y2ggPSBmaWxlc3lzdGVtcy5maWxlc3lzdGVtcyhsb2NhbEZTLnRtcEZTKFwiYWdlbnQtam9iXCIpKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gZmlsZXN5c3RlbXMoXG4gIGZzOiBGaWxlU3lzdGVtLFxuICBvcHRpb25zOiBNYXN0cmFGaWxlU3lzdGVtQWRhcHRlck9wdGlvbnMgPSB7fSxcbik6IE1hc3RyYUZpbGVTeXN0ZW1BZGFwdGVyIHtcbiAgcmV0dXJuIG5ldyBNYXN0cmFGaWxlU3lzdGVtQWRhcHRlcihmcywgb3B0aW9ucyk7XG59XG5cbi8qKlxuICogVGhpbiBNYXN0cmEge0BsaW5rIE1hc3RyYUZpbGVzeXN0ZW19IGFkYXB0ZXIgb3ZlciBhIGBAZGJ4LXRvb2xzL3NoYXJlZC1mc2BcbiAqIHtAbGluayBGaWxlU3lzdGVtfS4gSWRlbnRpdHkgZmllbGRzIGFyZSBnZXR0ZXJzIHRoYXQgcmVhZCB0aGUgc291cmNlIG9uXG4gKiBhY2Nlc3M7IGNvbnN0cnVjdGlvbiBkb2VzIG5vdCBzbmFwc2hvdCB0aGVtLlxuICovXG5leHBvcnQgY2xhc3MgTWFzdHJhRmlsZVN5c3RlbUFkYXB0ZXIgZXh0ZW5kcyBNYXN0cmFGaWxlc3lzdGVtIHtcbiAgc3RhdHVzOiBQcm92aWRlclN0YXR1cyA9IFwicGVuZGluZ1wiO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZnM6IEZpbGVTeXN0ZW07XG4gIHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczogTWFzdHJhRmlsZVN5c3RlbUFkYXB0ZXJPcHRpb25zO1xuXG4gIGNvbnN0cnVjdG9yKGZzOiBGaWxlU3lzdGVtLCBvcHRpb25zOiBNYXN0cmFGaWxlU3lzdGVtQWRhcHRlck9wdGlvbnMgPSB7fSkge1xuICAgIHN1cGVyKHtcbiAgICAgIG5hbWU6IG9wdGlvbnMubmFtZSA/PyBcIk1hc3RyYUZpbGVTeXN0ZW1BZGFwdGVyXCIsXG4gICAgICBvbkluaXQ6IG9wdGlvbnMub25Jbml0LFxuICAgICAgb25EZXN0cm95OiBvcHRpb25zLm9uRGVzdHJveSxcbiAgICB9KTtcbiAgICB0aGlzLmZzID0gZnM7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgfVxuXG4gIGdldCBpZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuaWQgPz8gdGhpcy5mcy5pZDtcbiAgfVxuXG4gIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5uYW1lID8/IFwiTWFzdHJhRmlsZVN5c3RlbUFkYXB0ZXJcIjtcbiAgfVxuXG4gIGdldCBwcm92aWRlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMucHJvdmlkZXIgPz8gdGhpcy5mcy5iYWNrZW5kO1xuICB9XG5cbiAgZ2V0IGRpc3BsYXlOYW1lKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5kaXNwbGF5TmFtZTtcbiAgfVxuXG4gIGdldCBkZXNjcmlwdGlvbigpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZGVzY3JpcHRpb247XG4gIH1cblxuICBnZXQgcmVhZE9ubHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5yZWFkT25seSA9PT0gdHJ1ZSB8fCB0aGlzLmZzLnJlYWRPbmx5O1xuICB9XG5cbiAgZ2V0IGJhc2VQYXRoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZnMucm9vdDtcbiAgfVxuXG4gIG92ZXJyaWRlIGFzeW5jIGluaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5mcy5pbml0KCk7XG4gIH1cblxuICBvdmVycmlkZSBhc3luYyBkZXN0cm95KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuZnMuY2xvc2UoKTtcbiAgfVxuXG4gIGdldEluZm8oKTogRmlsZXN5c3RlbUluZm88eyByb290OiBzdHJpbmc7IGJhY2tlbmQ6IHN0cmluZyB9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgcHJvdmlkZXI6IHRoaXMucHJvdmlkZXIsXG4gICAgICBzdGF0dXM6IHRoaXMuc3RhdHVzLFxuICAgICAgcmVhZE9ubHk6IHRoaXMucmVhZE9ubHksXG4gICAgICBtZXRhZGF0YTogeyByb290OiB0aGlzLmZzLnJvb3QsIGJhY2tlbmQ6IHRoaXMuZnMuYmFja2VuZCB9LFxuICAgIH07XG4gIH1cblxuICBnZXRJbnN0cnVjdGlvbnMoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLmluc3RydWN0aW9ucyAhPT0gdW5kZWZpbmVkKSByZXR1cm4gdGhpcy5vcHRpb25zLmluc3RydWN0aW9ucztcbiAgICByZXR1cm4gW1xuICAgICAgLi4uKHRoaXMuZGVzY3JpcHRpb24gPyBbdGhpcy5kZXNjcmlwdGlvbl0gOiBbXSksXG4gICAgICBgRmlsZXMgYXJlIHNlcnZlZCBieSBhICR7dGhpcy5mcy5iYWNrZW5kfSBmaWxlc3lzdGVtIHJvb3RlZCBhdCAke3RoaXMuZnMucm9vdH0uYCxcbiAgICAgIFwiV29ya3NwYWNlIHBhdGhzIGFyZSBhYnNvbHV0ZSB3aXRoaW4gdGhpcyBtb3VudCAoZm9yIGV4YW1wbGUgYC9ub3Rlcy9yZXBvcnQubWRgKS5cIixcbiAgICBdLmpvaW4oXCIgXCIpO1xuICB9XG5cbiAgYXN5bmMgcmVhZEZpbGUoaW5wdXRQYXRoOiBzdHJpbmcsIG9wdGlvbnM/OiBSZWFkT3B0aW9ucyk6IFByb21pc2U8c3RyaW5nIHwgQnVmZmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUoaW5wdXRQYXRoLCBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAob3B0aW9ucz8uZW5jb2RpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZnMucmVhZEZpbGUoaW5wdXRQYXRoLCB7IGVuY29kaW5nOiBvcHRpb25zLmVuY29kaW5nIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGF3YWl0IHRoaXMuZnMucmVhZEZpbGUoaW5wdXRQYXRoKSk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyB3cml0ZUZpbGUoaW5wdXRQYXRoOiBzdHJpbmcsIGNvbnRlbnQ6IEZpbGVDb250ZW50LCBvcHRpb25zPzogV3JpdGVPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVXcml0ZShcIndyaXRlRmlsZVwiLCBpbnB1dFBhdGgsIGFzeW5jICgpID0+IHtcbiAgICAgIGlmIChvcHRpb25zPy5yZWN1cnNpdmUgPT09IGZhbHNlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYXNzZXJ0UGFyZW50RXhpc3RzKGlucHV0UGF0aCk7XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLmZzLndyaXRlRmlsZShpbnB1dFBhdGgsIGNvbnRlbnQsIHtcbiAgICAgICAgb3ZlcndyaXRlOiBvcHRpb25zPy5vdmVyd3JpdGUgPz8gdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgYXBwZW5kRmlsZShpbnB1dFBhdGg6IHN0cmluZywgY29udGVudDogRmlsZUNvbnRlbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZVdyaXRlKFwiYXBwZW5kRmlsZVwiLCBpbnB1dFBhdGgsICgpID0+XG4gICAgICB0aGlzLmZzLmFwcGVuZEZpbGUoaW5wdXRQYXRoLCBjb250ZW50KSxcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlRmlsZShpbnB1dFBhdGg6IHN0cmluZywgb3B0aW9ucz86IFJlbW92ZU9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZVdyaXRlKFwiZGVsZXRlRmlsZVwiLCBpbnB1dFBhdGgsICgpID0+XG4gICAgICB0aGlzLmZzLmRlbGV0ZUZpbGUoaW5wdXRQYXRoLCB7XG4gICAgICAgIGZvcmNlOiBvcHRpb25zPy5mb3JjZSxcbiAgICAgICAgcmVjdXJzaXZlOiBvcHRpb25zPy5yZWN1cnNpdmUsXG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgY29weUZpbGUoc3JjOiBzdHJpbmcsIGRlc3Q6IHN0cmluZywgb3B0aW9ucz86IENvcHlPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVXcml0ZShcImNvcHlGaWxlXCIsIGRlc3QsICgpID0+XG4gICAgICB0aGlzLmZzLmNvcHlGaWxlKHNyYywgZGVzdCwgeyBvdmVyd3JpdGU6IG9wdGlvbnM/Lm92ZXJ3cml0ZSA/PyB0cnVlIH0pLFxuICAgICk7XG4gIH1cblxuICBhc3luYyBtb3ZlRmlsZShzcmM6IHN0cmluZywgZGVzdDogc3RyaW5nLCBvcHRpb25zPzogQ29weU9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZVdyaXRlKFwibW92ZUZpbGVcIiwgZGVzdCwgKCkgPT5cbiAgICAgIHRoaXMuZnMubW92ZUZpbGUoc3JjLCBkZXN0LCB7IG92ZXJ3cml0ZTogb3B0aW9ucz8ub3ZlcndyaXRlID8/IHRydWUgfSksXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIG1rZGlyKGlucHV0UGF0aDogc3RyaW5nLCBvcHRpb25zPzogeyByZWN1cnNpdmU/OiBib29sZWFuIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZVdyaXRlKFwibWtkaXJcIiwgaW5wdXRQYXRoLCAoKSA9PlxuICAgICAgdGhpcy5mcy5ta2RpcihpbnB1dFBhdGgsIHsgcmVjdXJzaXZlOiBvcHRpb25zPy5yZWN1cnNpdmUgfSksXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIHJtZGlyKGlucHV0UGF0aDogc3RyaW5nLCBvcHRpb25zPzogUmVtb3ZlT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlV3JpdGUoXG4gICAgICBcInJtZGlyXCIsXG4gICAgICBpbnB1dFBhdGgsXG4gICAgICAoKSA9PlxuICAgICAgICB0aGlzLmZzLnJtZGlyKGlucHV0UGF0aCwge1xuICAgICAgICAgIGZvcmNlOiBvcHRpb25zPy5mb3JjZSxcbiAgICAgICAgICByZWN1cnNpdmU6IG9wdGlvbnM/LnJlY3Vyc2l2ZSxcbiAgICAgICAgfSksXG4gICAgICB7IHByZWZlckRpcmVjdG9yeTogdHJ1ZSB9LFxuICAgICk7XG4gIH1cblxuICBhc3luYyByZWFkZGlyKGlucHV0UGF0aDogc3RyaW5nLCBvcHRpb25zPzogTGlzdE9wdGlvbnMpOiBQcm9taXNlPEZpbGVFbnRyeVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUoXG4gICAgICBpbnB1dFBhdGgsXG4gICAgICBhc3luYyAoKSA9PlxuICAgICAgICAoXG4gICAgICAgICAgYXdhaXQgdGhpcy5mcy5yZWFkZGlyKGlucHV0UGF0aCwge1xuICAgICAgICAgICAgcmVjdXJzaXZlOiBvcHRpb25zPy5yZWN1cnNpdmUsXG4gICAgICAgICAgICBtYXhEZXB0aDogb3B0aW9ucz8ubWF4RGVwdGgsXG4gICAgICAgICAgICBleHRlbnNpb246IG9wdGlvbnM/LmV4dGVuc2lvbixcbiAgICAgICAgICB9KVxuICAgICAgICApLm1hcCh0b01hc3RyYUVudHJ5KSxcbiAgICAgIHsgcHJlZmVyRGlyZWN0b3J5OiB0cnVlIH0sXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGV4aXN0cyhpbnB1dFBhdGg6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlUmVhZHkoKTtcbiAgICByZXR1cm4gdGhpcy5mcy5leGlzdHMoaW5wdXRQYXRoKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXQoaW5wdXRQYXRoOiBzdHJpbmcpOiBQcm9taXNlPEZpbGVTdGF0PiB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUoaW5wdXRQYXRoLCBhc3luYyAoKSA9PlxuICAgICAgdG9NYXN0cmFTdGF0KGF3YWl0IHRoaXMuZnMuc3RhdChpbnB1dFBhdGgpLCBpbnB1dFBhdGgpLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGRlbGVnYXRlPFQ+KFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBvcDogKCkgPT4gUHJvbWlzZTxUPixcbiAgICBvcHRpb25zPzogeyBwcmVmZXJEaXJlY3Rvcnk/OiBib29sZWFuIH0sXG4gICk6IFByb21pc2U8VD4ge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlUmVhZHkoKTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IG9wKCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLnJldGhyb3coZXJyLCBwYXRoLCBvcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICAvKioge0BsaW5rIGRlbGVnYXRlfSBmb3IgYSBtdXRhdGlvbjogcmVmdXNlIGEgcmVhZC1vbmx5IG1vdW50IGJlZm9yZSBkb2luZyBhbnkgd29yay4gKi9cbiAgcHJpdmF0ZSBkZWxlZ2F0ZVdyaXRlKFxuICAgIG9wZXJhdGlvbjogc3RyaW5nLFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBvcDogKCkgPT4gUHJvbWlzZTx2b2lkPixcbiAgICBvcHRpb25zPzogeyBwcmVmZXJEaXJlY3Rvcnk/OiBib29sZWFuIH0sXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLnJlYWRPbmx5KSB7XG4gICAgICB0aHJvdyBuZXcgV29ya3NwYWNlUmVhZE9ubHlFcnJvcihvcGVyYXRpb24pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZShwYXRoLCBvcCwgb3B0aW9ucyk7XG4gIH1cblxuICAvKiogV2hlbiBNYXN0cmEgYXNrcyBmb3Igbm9uLXJlY3Vyc2l2ZSB3cml0ZXMsIHJlcXVpcmUgdGhlIHBhcmVudCBkaXJlY3RvcnkuICovXG4gIHByaXZhdGUgYXN5bmMgYXNzZXJ0UGFyZW50RXhpc3RzKGlucHV0UGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcGFyZW50ID0gZGlybmFtZShub3JtYWxpemVXb3Jrc3BhY2VQYXRoKGlucHV0UGF0aCkpO1xuICAgIGlmIChwYXJlbnQgPT09IFwiL1wiIHx8IChhd2FpdCB0aGlzLmZzLmV4aXN0cyhwYXJlbnQpKSkgcmV0dXJuO1xuICAgIHRocm93IG5ldyBEaXJlY3RvcnlOb3RGb3VuZEVycm9yKHBhcmVudCk7XG4gIH1cblxuICBwcml2YXRlIHJldGhyb3coZXJyOiB1bmtub3duLCBpbnB1dFBhdGg6IHN0cmluZywgb3B0aW9ucz86IHsgcHJlZmVyRGlyZWN0b3J5PzogYm9vbGVhbiB9KTogbmV2ZXIge1xuICAgIGlmIChcbiAgICAgIGVyciBpbnN0YW5jZW9mIEZpbGVOb3RGb3VuZEVycm9yIHx8XG4gICAgICBlcnIgaW5zdGFuY2VvZiBEaXJlY3RvcnlOb3RGb3VuZEVycm9yIHx8XG4gICAgICBlcnIgaW5zdGFuY2VvZiBGaWxlRXhpc3RzRXJyb3IgfHxcbiAgICAgIGVyciBpbnN0YW5jZW9mIElzRGlyZWN0b3J5RXJyb3IgfHxcbiAgICAgIGVyciBpbnN0YW5jZW9mIE5vdERpcmVjdG9yeUVycm9yIHx8XG4gICAgICBlcnIgaW5zdGFuY2VvZiBEaXJlY3RvcnlOb3RFbXB0eUVycm9yIHx8XG4gICAgICBlcnIgaW5zdGFuY2VvZiBQZXJtaXNzaW9uRXJyb3IgfHxcbiAgICAgIGVyciBpbnN0YW5jZW9mIFdvcmtzcGFjZVJlYWRPbmx5RXJyb3JcbiAgICApIHtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG5cbiAgICBpZiAoZXJyIGluc3RhbmNlb2YgRmlsZVN5c3RlbUVycm9yKSB7XG4gICAgICB0aHJvdyBtYXBTaGFyZWRFcnJvcihlcnIsIGlucHV0UGF0aCwgb3B0aW9ucz8ucHJlZmVyRGlyZWN0b3J5ID09PSB0cnVlKTtcbiAgICB9XG5cbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cblxuLyoqXG4gKiBDb21wb3NpdGUgbW91bnQgbmFtZXNwYWNlIHdob3NlIHZpcnR1YWwgcm9vdCBoYXMgbm8gcmVwb3NpdG9yeS1sZXZlbFxuICogYC5naXRpZ25vcmVgLiBNYXN0cmEncyBsaXN0IHRvb2wgcHJvYmVzIHRoYXQgcmVsYXRpdmUgZmlsZSBiZWZvcmUgd2Fsa2luZztcbiAqIGFuIGVtcHR5IHJlc3VsdCBrZWVwcyBuYXRpdmUgaWdub3JlIGhhbmRsaW5nIGVuYWJsZWQgd2l0aG91dCByb3V0aW5nIHRoZVxuICogdmlydHVhbC1yb290IGxvb2t1cCBpbnRvIGFuIHVucmVsYXRlZCBtb3VudC5cbiAqL1xuZXhwb3J0IGNsYXNzIE1vdW50ZWRDb21wb3NpdGVGaWxlc3lzdGVtIGV4dGVuZHMgQ29tcG9zaXRlRmlsZXN5c3RlbSB7XG4gIGNvbnN0cnVjdG9yKGNvbmZpZzogQ29tcG9zaXRlRmlsZXN5c3RlbUNvbmZpZykge1xuICAgIHN1cGVyKGNvbmZpZyk7XG4gIH1cblxuICBvdmVycmlkZSBhc3luYyByZWFkRmlsZShpbnB1dFBhdGg6IHN0cmluZywgb3B0aW9ucz86IFJlYWRPcHRpb25zKTogUHJvbWlzZTxzdHJpbmcgfCBCdWZmZXI+IHtcbiAgICBpZiAoXG4gICAgICAoaW5wdXRQYXRoID09PSBcIi5naXRpZ25vcmVcIiB8fCBpbnB1dFBhdGggPT09IFwiLy5naXRpZ25vcmVcIikgJiZcbiAgICAgICF0aGlzLmdldEZpbGVzeXN0ZW1Gb3JQYXRoKGlucHV0UGF0aClcbiAgICApIHtcbiAgICAgIHJldHVybiBvcHRpb25zPy5lbmNvZGluZyA/IFwiXCIgOiBCdWZmZXIuYWxsb2MoMCk7XG4gICAgfVxuICAgIHJldHVybiBzdXBlci5yZWFkRmlsZShpbnB1dFBhdGgsIG9wdGlvbnMpO1xuICB9XG59XG5cbi8qKiBGcmVzaCB3cml0YWJsZSBsb2NhbCB0ZW1wIG1vdW50IG9uIGEgcm9vdCB1bmlxdWUgdG8gdGhpcyBjYWxsLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNjcmF0Y2hGaWxlc3lzdGVtKCk6IE1hc3RyYUZpbGVTeXN0ZW1BZGFwdGVyIHtcbiAgcmV0dXJuIGZpbGVzeXN0ZW1zKHNjcmF0Y2hGUyhcIm1hc3RyYVwiKSk7XG59XG5cbi8qKiBNYXAgYSBzaGFyZWQtZnMgZXJyb3IgY29kZSBvbnRvIHRoZSBtYXRjaGluZyBNYXN0cmEgZmlsZXN5c3RlbSBlcnJvci4gKi9cbmZ1bmN0aW9uIG1hcFNoYXJlZEVycm9yKGVycjogRmlsZVN5c3RlbUVycm9yLCBpbnB1dFBhdGg6IHN0cmluZywgcHJlZmVyRGlyZWN0b3J5OiBib29sZWFuKTogRXJyb3Ige1xuICBjb25zdCBwYXRoID0gZXJyLnBhdGggPz8gaW5wdXRQYXRoO1xuICBzd2l0Y2ggKGVyci5jb2RlKSB7XG4gICAgY2FzZSBcIk5PVF9GT1VORFwiOlxuICAgICAgcmV0dXJuIHByZWZlckRpcmVjdG9yeSA/IG5ldyBEaXJlY3RvcnlOb3RGb3VuZEVycm9yKHBhdGgpIDogbmV3IEZpbGVOb3RGb3VuZEVycm9yKHBhdGgpO1xuICAgIGNhc2UgXCJBTFJFQURZX0VYSVNUU1wiOlxuICAgICAgcmV0dXJuIG5ldyBGaWxlRXhpc3RzRXJyb3IocGF0aCk7XG4gICAgY2FzZSBcIk5PVF9ESVJFQ1RPUllcIjpcbiAgICAgIHJldHVybiBuZXcgTm90RGlyZWN0b3J5RXJyb3IocGF0aCk7XG4gICAgY2FzZSBcIklTX0RJUkVDVE9SWVwiOlxuICAgICAgcmV0dXJuIG5ldyBJc0RpcmVjdG9yeUVycm9yKHBhdGgpO1xuICAgIGNhc2UgXCJESVJFQ1RPUllfTk9UX0VNUFRZXCI6XG4gICAgICByZXR1cm4gbmV3IERpcmVjdG9yeU5vdEVtcHR5RXJyb3IocGF0aCk7XG4gICAgY2FzZSBcIlBFUk1JU1NJT05fREVOSUVEXCI6XG4gICAgICByZXR1cm4gbmV3IFBlcm1pc3Npb25FcnJvcihwYXRoLCBlcnIubWVzc2FnZSk7XG4gICAgY2FzZSBcIlJFQURfT05MWVwiOlxuICAgICAgcmV0dXJuIG5ldyBXb3Jrc3BhY2VSZWFkT25seUVycm9yKGVyci5tZXNzYWdlKTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGVycjtcbiAgfVxufVxuXG5mdW5jdGlvbiB0b01hc3RyYUVudHJ5KGVudHJ5OiBTaGFyZWRGaWxlRW50cnkpOiBGaWxlRW50cnkge1xuICByZXR1cm4ge1xuICAgIG5hbWU6IGVudHJ5Lm5hbWUsXG4gICAgdHlwZTogZW50cnkudHlwZSA9PT0gXCJkaXJlY3RvcnlcIiA/IFwiZGlyZWN0b3J5XCIgOiBcImZpbGVcIixcbiAgICBzaXplOiBlbnRyeS5zaXplLFxuICAgIGlzU3ltbGluazogZW50cnkudHlwZSA9PT0gXCJzeW1ib2xpYy1saW5rXCIsXG4gIH07XG59XG5cbmZ1bmN0aW9uIHRvTWFzdHJhU3RhdChzdGF0OiBTaGFyZWRGaWxlU3RhdCwgaW5wdXRQYXRoOiBzdHJpbmcpOiBGaWxlU3RhdCB7XG4gIGNvbnN0IGVwb2NoID0gbmV3IERhdGUoMCk7XG4gIHJldHVybiB7XG4gICAgbmFtZTogc3RhdC5uYW1lLFxuICAgIHBhdGg6IG5vcm1hbGl6ZVdvcmtzcGFjZVBhdGgoc3RhdC5wYXRoIHx8IGlucHV0UGF0aCksXG4gICAgdHlwZTogc3RhdC50eXBlID09PSBcImRpcmVjdG9yeVwiID8gXCJkaXJlY3RvcnlcIiA6IFwiZmlsZVwiLFxuICAgIHNpemU6IHN0YXQuc2l6ZSA/PyAwLFxuICAgIGNyZWF0ZWRBdDogc3RhdC5jcmVhdGVkQXQgPz8gZXBvY2gsXG4gICAgbW9kaWZpZWRBdDogc3RhdC5tb2RpZmllZEF0ID8/IGVwb2NoLFxuICAgIG1pbWVUeXBlOiBzdGF0Lm1pbWVUeXBlLFxuICB9O1xufVxuXG4vKipcbiAqIE1hc3RyYSBuYW1lc3BhY2UgcGF0aCAoYC9hL2JgKS4gQSBgLi5gIHRoYXQgd291bGQgZXNjYXBlIGNsYW1wcyB0byB0aGUgcm9vdFxuICogcmF0aGVyIHRoYW4gdGhyb3dpbmcgLSB0aGUgd3JhcHBlZCBmaWxlc3lzdGVtIGVuZm9yY2VzIGNvbnRhaW5tZW50IGl0c2VsZixcbiAqIGFuZCBhIG1vdW50IHNob3VsZCBub3QgZmFpbCBhIGxpc3Rpbmcgb3ZlciBhIHN0cmF5IHNlZ21lbnQuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVdvcmtzcGFjZVBhdGgoaW5wdXRQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCByZXN1bHQgPSBub3JtYWxpemUoaW5wdXRQYXRoKTtcbiAgcmV0dXJuIHJlc3VsdC5vayA/IHJlc3VsdC5wYXRoIDogXCIvXCI7XG59XG4iXX0=
|
|
@@ -3,16 +3,16 @@
|
|
|
3
3
|
*
|
|
4
4
|
* @module
|
|
5
5
|
*/
|
|
6
|
-
import {
|
|
7
|
-
import { FOLLOW_UP_SUGGESTIONS_PART_TYPE, FollowUpSuggestionsPartDataSchema, } from "@dbx-tools/shared-mastra
|
|
8
|
-
import {
|
|
6
|
+
import { log, combineAbortSignals, isRecord, toError, toDescription } from "@dbx-tools/shared-core";
|
|
7
|
+
import { FOLLOW_UP_SUGGESTIONS_PART_TYPE, FollowUpSuggestionsPartDataSchema, } from "@dbx-tools/shared-mastra";
|
|
8
|
+
import { ModelClass } from "@dbx-tools/shared-model";
|
|
9
9
|
import { Agent } from "@mastra/core/agent";
|
|
10
10
|
import { createTool } from "@mastra/core/tools";
|
|
11
11
|
import { z } from "zod";
|
|
12
12
|
import { buildModel } from "./model.js";
|
|
13
13
|
import { TYPOGRAPHY_RULE } from "./style.js";
|
|
14
14
|
const logger = log.logger("mastra/follow-up-suggestions");
|
|
15
|
-
const FOLLOW_UP_MODEL_CLASS =
|
|
15
|
+
const FOLLOW_UP_MODEL_CLASS = ModelClass.ChatFast;
|
|
16
16
|
const DEFAULT_QUESTION_LIMIT = 3;
|
|
17
17
|
const MAX_QUESTION_LIMIT = 10;
|
|
18
18
|
const DEFAULT_TIMEOUT_MS = 10_000;
|
|
@@ -137,9 +137,9 @@ function acceptedQuestions(questions, options, maxQuestions) {
|
|
|
137
137
|
return accepted;
|
|
138
138
|
}
|
|
139
139
|
function toolActivityValue(value) {
|
|
140
|
-
if (!
|
|
140
|
+
if (!isRecord(value))
|
|
141
141
|
return undefined;
|
|
142
|
-
return
|
|
142
|
+
return isRecord(value.payload) ? value.payload : value;
|
|
143
143
|
}
|
|
144
144
|
function toolActivityName(value) {
|
|
145
145
|
if (typeof value.toolName === "string")
|
|
@@ -187,8 +187,8 @@ export async function suggestFollowUps(config, options) {
|
|
|
187
187
|
if (!settings || settings.mode === "genie")
|
|
188
188
|
return [];
|
|
189
189
|
const timeout = AbortSignal.timeout(settings.timeoutMs);
|
|
190
|
-
const abortSignal =
|
|
191
|
-
const prompt =
|
|
190
|
+
const abortSignal = combineAbortSignals(options.abortSignal, timeout);
|
|
191
|
+
const prompt = toDescription({
|
|
192
192
|
"User message": options.userText,
|
|
193
193
|
"Assistant answer": options.answer,
|
|
194
194
|
...(options.turnContext ? { "Turn tool data": options.turnContext } : {}),
|
|
@@ -208,7 +208,7 @@ export async function suggestFollowUps(config, options) {
|
|
|
208
208
|
}
|
|
209
209
|
catch (error) {
|
|
210
210
|
if (!options.abortSignal?.aborted) {
|
|
211
|
-
logger.warn("generation-failed", { error:
|
|
211
|
+
logger.warn("generation-failed", { error: toError(error) });
|
|
212
212
|
}
|
|
213
213
|
return [];
|
|
214
214
|
}
|
|
@@ -340,4 +340,4 @@ export function buildSuggestFollowUpsTool(config) {
|
|
|
340
340
|
},
|
|
341
341
|
});
|
|
342
342
|
}
|
|
343
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9sbG93LXVwLXN1Z2dlc3Rpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ZvbGxvdy11cC1zdWdnZXN0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBRUgsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRixPQUFPLEVBQ0wsK0JBQStCLEVBRS9CLGlDQUFpQyxHQUNsQyxNQUFNLCtCQUErQixDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFNM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFHeEIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN4QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRTdDLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsOEJBQThCLENBQUMsQ0FBQztBQUMxRCxNQUFNLHFCQUFxQixHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDO0FBQ3hELE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxDQUFDO0FBQ2pDLE1BQU0sa0JBQWtCLEdBQUcsRUFBRSxDQUFDO0FBQzlCLE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxDQUFDO0FBQ2xDLE1BQU0sc0JBQXNCLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDaEMsZUFBZTtJQUNmLHNCQUFzQjtJQUN0QixjQUFjO0lBQ2QsV0FBVztJQUNYLDZCQUE2QjtDQUM5QixDQUFDLENBQUM7QUFDSCxN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QUFDLEVBQUUsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNsRSxHQUFHLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFBRSxlQUFlLEVBQUUsTUFBTSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQzlFLEdBQUcsQ0FBQyxPQUFPLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFLGNBQWMsRUFBRSxPQUFPLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDOUUsR0FBRyxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2FBQ3RFLENBQUMsQ0FBQztZQUNILE9BQU8sRUFBRSxTQUFTLEVBQUUsQ0FBQztRQUN2QixDQUFDO0tBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ2hhdEZhc3QgcG9zdC10dXJuIGZvbGxvdy11cCBzdWdnZXN0aW9uIGdlbmVyYXRpb24uXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IGFzeW5jVXRpbHMsIGVycm9yVXRpbHMsIGxvZywgb2JqZWN0LCBzdHJpbmdVdGlscyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQge1xuICBGT0xMT1dfVVBfU1VHR0VTVElPTlNfUEFSVF9UWVBFLFxuICB0eXBlIEZvbGxvd1VwU3VnZ2VzdGlvbnNQYXJ0RGF0YSxcbiAgRm9sbG93VXBTdWdnZXN0aW9uc1BhcnREYXRhU2NoZW1hLFxufSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtbWFzdHJhL3dpcmVcIjtcbmltcG9ydCB7IG1vZGVsIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLW1vZGVsXCI7XG5pbXBvcnQgeyBBZ2VudCB9IGZyb20gXCJAbWFzdHJhL2NvcmUvYWdlbnRcIjtcbmltcG9ydCB0eXBlIHsgTWVzc2FnZUxpc3QgfSBmcm9tIFwiQG1hc3RyYS9jb3JlL2FnZW50L21lc3NhZ2UtbGlzdFwiO1xuaW1wb3J0IHR5cGUgeyBNYXN0cmFNb2RlbENvbmZpZyB9IGZyb20gXCJAbWFzdHJhL2NvcmUvbGxtXCI7XG5pbXBvcnQgdHlwZSB7IE91dHB1dFByb2Nlc3NvciB9IGZyb20gXCJAbWFzdHJhL2NvcmUvcHJvY2Vzc29yc1wiO1xuaW1wb3J0IHR5cGUgeyBSZXF1ZXN0Q29udGV4dCB9IGZyb20gXCJAbWFzdHJhL2NvcmUvcmVxdWVzdC1jb250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IERhdGFDaHVua1R5cGUsIExMTVN0ZXBSZXN1bHQsIE1hc3RyYVN0cmVhbVRyYW5zZm9ybSB9IGZyb20gXCJAbWFzdHJhL2NvcmUvc3RyZWFtXCI7XG5pbXBvcnQgeyBjcmVhdGVUb29sIH0gZnJvbSBcIkBtYXN0cmEvY29yZS90b29sc1wiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcblxuaW1wb3J0IHR5cGUgeyBGb2xsb3dVcFN1Z2dlc3Rpb25zQ29uZmlnLCBNYXN0cmFQbHVnaW5Db25maWcgfSBmcm9tIFwiLi9jb25maWcudHNcIjtcbmltcG9ydCB7IGJ1aWxkTW9kZWwgfSBmcm9tIFwiLi9tb2RlbC50c1wiO1xuaW1wb3J0IHsgVFlQT0dSQVBIWV9SVUxFIH0gZnJvbSBcIi4vc3R5bGUudHNcIjtcblxuY29uc3QgbG9nZ2VyID0gbG9nLmxvZ2dlcihcIm1hc3RyYS9mb2xsb3ctdXAtc3VnZ2VzdGlvbnNcIik7XG5jb25zdCBGT0xMT1dfVVBfTU9ERUxfQ0xBU1MgPSBtb2RlbC5Nb2RlbENsYXNzLkNoYXRGYXN0O1xuY29uc3QgREVGQVVMVF9RVUVTVElPTl9MSU1JVCA9IDM7XG5jb25zdCBNQVhfUVVFU1RJT05fTElNSVQgPSAxMDtcbmNvbnN0IERFRkFVTFRfVElNRU9VVF9NUyA9IDEwXzAwMDtcbmNvbnN0IE1BWF9UVVJOX0NPTlRFWFRfQ0hBUlMgPSAxNl8wMDA7XG5jb25zdCBHRU5FUklDX1FVRVNUSU9OUyA9IG5ldyBTZXQoW1xuICBcImFueXRoaW5nIGVsc2VcIixcbiAgXCJjYW4geW91IHRlbGwgbWUgbW9yZVwiLFxuICBcInRlbGwgbWUgbW9yZVwiLFxuICBcIndoYXQgZWxzZVwiLFxuICBcIndoYXQgd291bGQgeW91IGxpa2UgdG8ga25vd1wiLFxuXSk7XG5jb25zdCBBU1NJU1RBTlRfRElSRUNURURfUVVFU1RJT05TID0gW1xuICAvXig/OndvdWxkfGRvKSB5b3UgKD86bGlrZXx3YW50fHByZWZlcilcXGIvLFxuICAvXig/OnNob3VsZHxzaGFsbHxjYW58bWF5KSAoPzppfHdlKVxcYi8sXG4gIC9eYXJlIHlvdSBpbnRlcmVzdGVkXFxiLyxcbiAgL15zaG91bGQgKD86dGhlIHx0aGlzICk/KD86Y2hhcnR8Z3JhcGh8dGFibGV8dmlzdWFsaXphdGlvbnxyZXNwb25zZXxvdXRwdXR8cmVzdWx0cz98ZGF0YSlcXGIvLFxuXSBhcyBjb25zdDtcblxuLyoqIFRydXN0ZWQgcmVxdWVzdC1jb250ZXh0IGtleSBjYXJyeWluZyB0aGUgY3VycmVudCB1c2VyIG1lc3NhZ2UuICovXG5leHBvcnQgY29uc3QgRk9MTE9XX1VQX1VTRVJfVEVYVF9LRVkgPSBcIm1hc3RyYV9fZm9sbG93X3VwX3VzZXJfdGV4dFwiO1xuLyoqIFRydXN0ZWQgcmVxdWVzdC1jb250ZXh0IGtleSBjYXJyeWluZyBuYXRpdmUgR2VuaWUgZm9sbG93LXVwIHF1ZXN0aW9ucy4gKi9cbmV4cG9ydCBjb25zdCBGT0xMT1dfVVBfTkFUSVZFX1FVRVNUSU9OU19LRVkgPSBcIm1hc3RyYV9fZm9sbG93X3VwX25hdGl2ZV9xdWVzdGlvbnNcIjtcbi8qKiBUcnVzdGVkIHJlcXVlc3QtY29udGV4dCBrZXkgY29vcmRpbmF0aW5nIG9uZSBwb3N0LXR1cm4gc3RyZWFtIHdpdGggaXRzIHByb2Nlc3Nvci4gKi9cbmV4cG9ydCBjb25zdCBGT0xMT1dfVVBfUlVOX0lEX0tFWSA9IFwibWFzdHJhX19mb2xsb3dfdXBfcnVuX2lkXCI7XG5cbi8qKiBGdWxseSByZXNvbHZlZCBmb2xsb3ctdXAgc3VnZ2VzdGlvbiBzZXR0aW5ncy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZWRGb2xsb3dVcFN1Z2dlc3Rpb25zQ29uZmlnIHtcbiAgbW9kZTogXCJhdXRvXCIgfCBcImdlbmVyYXRlZFwiIHwgXCJnZW5pZVwiO1xuICBsaW1pdDogbnVtYmVyO1xuICB0aW1lb3V0TXM6IG51bWJlcjtcbiAgZXhwb3NlVG9vbDogYm9vbGVhbjtcbn1cblxuLyoqIElucHV0cyBmb3Igb25lIGZvbGxvdy11cCBnZW5lcmF0aW9uIHBhc3MuICovXG5leHBvcnQgaW50ZXJmYWNlIFN1Z2dlc3RGb2xsb3dVcHNPcHRpb25zIHtcbiAgdXNlclRleHQ6IHN0cmluZztcbiAgYW5zd2VyOiBzdHJpbmc7XG4gIC8qKiBCb3VuZGVkIHNlcmlhbGl6ZWQgdG9vbCBpbnB1dHMgYW5kIG91dHB1dHMgdGhhdCBncm91bmQgdGhlIG5leHQgcXVlc3Rpb25zLiAqL1xuICB0dXJuQ29udGV4dD86IHN0cmluZztcbiAgbmF0aXZlUXVlc3Rpb25zPzogcmVhZG9ubHkgc3RyaW5nW107XG4gIHJlcXVlc3RDb250ZXh0PzogUmVxdWVzdENvbnRleHQ7XG4gIGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWw7XG59XG5cbi8qKiBSZXBsYWNlYWJsZSBzdWdnZXN0aW9uIGJvdW5kYXJ5IHVzZWQgYnkgdGhlIGZpbmlzaCBjYWxsYmFjayBhbmQgdGVzdHMuICovXG5leHBvcnQgdHlwZSBGb2xsb3dVcFN1Z2dlc3RlciA9IChcbiAgY29uZmlnOiBNYXN0cmFQbHVnaW5Db25maWcsXG4gIG9wdGlvbnM6IFN1Z2dlc3RGb2xsb3dVcHNPcHRpb25zLFxuKSA9PiBQcm9taXNlPHN0cmluZ1tdPjtcblxuY29uc3QgRm9sbG93VXBPdXRwdXRTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIHF1ZXN0aW9uczogelxuICAgICAgLmFycmF5KHouc3RyaW5nKCkudHJpbSgpLm1pbigxKSlcbiAgICAgIC5tYXgoTUFYX1FVRVNUSU9OX0xJTUlUKVxuICAgICAgLmRlc2NyaWJlKFwiU3BlY2lmaWMgbmV4dCBxdWVzdGlvbnMgZ3JvdW5kZWQgaW4gdGhlIGNvbXBsZXRlZCB0dXJuLlwiKSxcbiAgfSlcbiAgLnN0cmljdCgpO1xuXG5jb25zdCBGb2xsb3dVcFRvb2xJbnB1dFNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgdXNlclRleHQ6IHouc3RyaW5nKCkudHJpbSgpLm1pbigxKS5kZXNjcmliZShcIlVzZXIgbWVzc2FnZSB0aGF0IHN0YXJ0ZWQgdGhlIGNvbXBsZXRlZCB0dXJuLlwiKSxcbiAgICBhbnN3ZXI6IHouc3RyaW5nKCkudHJpbSgpLm1pbigxKS5kZXNjcmliZShcIkFzc2lzdGFudCBhbnN3ZXIgZnJvbSB0aGUgY29tcGxldGVkIHR1cm4uXCIpLFxuICAgIHR1cm5Db250ZXh0OiB6XG4gICAgICAuc3RyaW5nKClcbiAgICAgIC50cmltKClcbiAgICAgIC5tYXgoTUFYX1RVUk5fQ09OVEVYVF9DSEFSUylcbiAgICAgIC5vcHRpb25hbCgpXG4gICAgICAuZGVzY3JpYmUoXCJSZWxldmFudCB0b29sIGlucHV0cyBhbmQgb3V0cHV0cyBmcm9tIHRoZSBjb21wbGV0ZWQgdHVybi5cIiksXG4gICAgbmF0aXZlUXVlc3Rpb25zOiB6XG4gICAgICAuYXJyYXkoei5zdHJpbmcoKS50cmltKCkubWluKDEpKVxuICAgICAgLm9wdGlvbmFsKClcbiAgICAgIC5kZXNjcmliZShcIkV4aXN0aW5nIGZvbGxvdy11cCBxdWVzdGlvbnMgdG8gYXZvaWQgcmVwZWF0aW5nLlwiKSxcbiAgfSlcbiAgLnN0cmljdCgpO1xuXG5jb25zdCBGT0xMT1dfVVBfSU5TVFJVQ1RJT05TID0gW1xuICBcIkdlbmVyYXRlIGNvbmNpc2UgcXVlc3Rpb25zIHRoYXQgYSB1c2VyIGNhbiBzZW5kIHRvIGRpZyBmdXJ0aGVyIGludG8gYSBjb21wbGV0ZWQgYXNzaXN0YW50IHR1cm4uXCIsXG4gIFwiV3JpdGUgZXZlcnkgaXRlbSBpbiB0aGUgdXNlcidzIHZvaWNlIGFzIGEgbWVzc2FnZSBmb3IgdGhlIGFzc2lzdGFudCB0byBhbnN3ZXIgd2hlbiBjbGlja2VkLlwiLFxuICBcIk5ldmVyIGFkZHJlc3MgdGhlIHVzZXIgb3IgYXNrIHdoYXQgdGhleSB3b3VsZCBsaWtlLCB3YW50LCBwcmVmZXIsIG9yIGhvdyB0aGUgcmVzcG9uc2Ugc2hvdWxkIGJlIGN1c3RvbWl6ZWQuXCIsXG4gIFwiRXZlcnkgcXVlc3Rpb24gbXVzdCBiZSBhbnN3ZXJhYmxlIGZyb20gdGhlIHNhbWUgdG9vbHMgYW5kIGRhdGEgZG9tYWluIGFzIHRoZSBjb21wbGV0ZWQgdHVybi5cIixcbiAgXCJHcm91bmQgcXVlc3Rpb25zIGluIHRoZSBhbnN3ZXIgYW5kIHR1cm4gdG9vbCBkYXRhLCBpbmNsdWRpbmcgZGlzcGxheWVkIGNoYXJ0IG9yIHRhYmxlIHZhbHVlcy5cIixcbiAgXCJQcmVmZXIgY29uY3JldGUgYW5hbHlzZXMsIGNvbXBhcmlzb25zLCByYW5raW5ncywgY2FsY3VsYXRpb25zLCBmaWx0ZXJzLCBvciBleHBsYW5hdGlvbnMgb2YgdGhlIHJlc3VsdC5cIixcbiAgXCJGb3IgYSBjaGFydCBvciB0YWJsZSwgYXNrIGFib3V0IHRoZSB2YWx1ZXMgYW5kIHBhdHRlcm5zIGJlZm9yZSBzdWdnZXN0aW5nIHByZXNlbnRhdGlvbiBjaGFuZ2VzLlwiLFxuICBcIkdvb2QgZXhhbXBsZXMgaW5jbHVkZSAnV2hpY2ggY2F0ZWdvcnkgaGFzIHRoZSBoaWdoZXN0IHZhbHVlPycsICdIb3cgbGFyZ2UgaXMgdGhlIGdhcCBiZXR3ZWVuIHRoZSBoaWdoZXN0IGFuZCBsb3dlc3QgY2F0ZWdvcmllcz8nLCBhbmQgJ1doYXQgcGF0dGVybiBzdGFuZHMgb3V0IGluIHRoZXNlIHZhbHVlcz8nLlwiLFxuICBcIkRvIG5vdCByZXBlYXQgdGhlIHVzZXIncyBxdWVzdGlvbiwgdGhlIGFuc3dlciwgb3IgYW4gZXhpc3Rpbmcgc3VnZ2VzdGlvbi5cIixcbiAgXCJEbyBub3QgYXNrIGdlbmVyaWMgZmlsbGVyIHN1Y2ggYXMgJ0FueXRoaW5nIGVsc2U/JyBvciByZXF1ZXN0IHVuc3VwcG9ydGVkIGRhdGEuXCIsXG4gIFwiUmV0dXJuIHplcm8gcXVlc3Rpb25zIHdoZW4gbm8gdXNlZnVsIGdyb3VuZGVkIGZvbGxvdy11cCBleGlzdHMuXCIsXG4gIFRZUE9HUkFQSFlfUlVMRSxcbl0uam9pbihcIiBcIik7XG5cbmNvbnN0IHN1Z2dlc3Rpb25BZ2VudHMgPSBuZXcgV2Vha01hcDxNYXN0cmFQbHVnaW5Db25maWcsIEFnZW50PigpO1xuY29uc3QgZ2VuZXJhdGVkUnVuUGFydHMgPSBuZXcgTWFwPHN0cmluZywgRm9sbG93VXBTdWdnZXN0aW9uc1BhcnREYXRhPigpO1xuY29uc3QgR0VORVJBVEVEX1JVTl9QQVJUX1RUTF9NUyA9IDUgKiA2MF8wMDA7XG5cbi8qKiBSZXNvbHZlIGRpc2FibGVkLCBzaG9ydGhhbmQsIGFuZCBjb25maWd1cmVkIHN1Z2dlc3Rpb24gcG9saWN5IGZvcm1zLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVGb2xsb3dVcFN1Z2dlc3Rpb25zQ29uZmlnKFxuICB2YWx1ZTogTWFzdHJhUGx1Z2luQ29uZmlnW1wiZm9sbG93VXBTdWdnZXN0aW9uc1wiXSxcbik6IFJlc29sdmVkRm9sbG93VXBTdWdnZXN0aW9uc0NvbmZpZyB8IHVuZGVmaW5lZCB7XG4gIGlmICghdmFsdWUpIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IGNvbmZpZ3VyZWQ6IEZvbGxvd1VwU3VnZ2VzdGlvbnNDb25maWcgPSB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgPyB2YWx1ZSA6IHsgbW9kZTogdmFsdWUgfTtcbiAgcmV0dXJuIHtcbiAgICBtb2RlOiBjb25maWd1cmVkLm1vZGUgPT09IHRydWUgPyBcImF1dG9cIiA6IGNvbmZpZ3VyZWQubW9kZSxcbiAgICBsaW1pdDogTWF0aC5taW4oTUFYX1FVRVNUSU9OX0xJTUlULCBNYXRoLm1heCgxLCBjb25maWd1cmVkLmxpbWl0ID8/IERFRkFVTFRfUVVFU1RJT05fTElNSVQpKSxcbiAgICB0aW1lb3V0TXM6IE1hdGgubWluKDMwXzAwMCwgTWF0aC5tYXgoMV8wMDAsIGNvbmZpZ3VyZWQudGltZW91dE1zID8/IERFRkFVTFRfVElNRU9VVF9NUykpLFxuICAgIGV4cG9zZVRvb2w6IGNvbmZpZ3VyZWQuZXhwb3NlVG9vbCA/PyBmYWxzZSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZm9sbG93VXBNb2RlbChcbiAgY29uZmlnOiBNYXN0cmFQbHVnaW5Db25maWcsXG4pOiAoYXJnczogeyByZXF1ZXN0Q29udGV4dDogUmVxdWVzdENvbnRleHQgfSkgPT4gUHJvbWlzZTxNYXN0cmFNb2RlbENvbmZpZz4ge1xuICByZXR1cm4gKHsgcmVxdWVzdENvbnRleHQgfSkgPT5cbiAgICBidWlsZE1vZGVsKGNvbmZpZywgcmVxdWVzdENvbnRleHQsIHsgbW9kZWxDbGFzczogRk9MTE9XX1VQX01PREVMX0NMQVNTIH0pO1xufVxuXG5mdW5jdGlvbiBzdWdnZXN0aW9uQWdlbnQoY29uZmlnOiBNYXN0cmFQbHVnaW5Db25maWcpOiBBZ2VudCB7XG4gIGxldCBhZ2VudCA9IHN1Z2dlc3Rpb25BZ2VudHMuZ2V0KGNvbmZpZyk7XG4gIGlmICghYWdlbnQpIHtcbiAgICBhZ2VudCA9IG5ldyBBZ2VudCh7XG4gICAgICBpZDogXCJmb2xsb3ctdXAtc3VnZ2VzdGlvbnNcIixcbiAgICAgIG5hbWU6IFwiRm9sbG93LXVwIHN1Z2dlc3Rpb25zXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJHZW5lcmF0ZXMgZ3JvdW5kZWQgbmV4dCBxdWVzdGlvbnMgdXNpbmcgdGhlIGZhc3QgY2hhdCBtb2RlbC5cIixcbiAgICAgIGluc3RydWN0aW9uczogRk9MTE9XX1VQX0lOU1RSVUNUSU9OUyxcbiAgICAgIG1vZGVsOiBmb2xsb3dVcE1vZGVsKGNvbmZpZyksXG4gICAgfSk7XG4gICAgc3VnZ2VzdGlvbkFnZW50cy5zZXQoY29uZmlnLCBhZ2VudCk7XG4gIH1cbiAgcmV0dXJuIGFnZW50O1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVkUXVlc3Rpb24odmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB2YWx1ZVxuICAgIC50cmltKClcbiAgICAudG9Mb3dlckNhc2UoKVxuICAgIC5yZXBsYWNlKC9bXlxccHtMfVxccHtOfVxcc10vZ3UsIFwiIFwiKVxuICAgIC5yZXBsYWNlKC9cXHMrL2csIFwiIFwiKTtcbn1cblxuZnVuY3Rpb24gYWNjZXB0ZWRRdWVzdGlvbnMoXG4gIHF1ZXN0aW9uczogcmVhZG9ubHkgc3RyaW5nW10sXG4gIG9wdGlvbnM6IFN1Z2dlc3RGb2xsb3dVcHNPcHRpb25zLFxuICBtYXhRdWVzdGlvbnM6IG51bWJlcixcbik6IHN0cmluZ1tdIHtcbiAgY29uc3QgZXhjbHVkZWQgPSBuZXcgU2V0KFtcbiAgICBub3JtYWxpemVkUXVlc3Rpb24ob3B0aW9ucy51c2VyVGV4dCksXG4gICAgLi4uKG9wdGlvbnMubmF0aXZlUXVlc3Rpb25zID8/IFtdKS5tYXAobm9ybWFsaXplZFF1ZXN0aW9uKSxcbiAgXSk7XG4gIGNvbnN0IGFjY2VwdGVkOiBzdHJpbmdbXSA9IFtdO1xuICBmb3IgKGNvbnN0IHF1ZXN0aW9uIG9mIHF1ZXN0aW9ucykge1xuICAgIGNvbnN0IHRyaW1tZWQgPSBxdWVzdGlvbi50cmltKCk7XG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZWRRdWVzdGlvbih0cmltbWVkKTtcbiAgICBpZiAoXG4gICAgICAhbm9ybWFsaXplZCB8fFxuICAgICAgbm9ybWFsaXplZC5sZW5ndGggPCA4IHx8XG4gICAgICBleGNsdWRlZC5oYXMobm9ybWFsaXplZCkgfHxcbiAgICAgIEdFTkVSSUNfUVVFU1RJT05TLmhhcyhub3JtYWxpemVkKSB8fFxuICAgICAgQVNTSVNUQU5UX0RJUkVDVEVEX1FVRVNUSU9OUy5zb21lKChwYXR0ZXJuKSA9PiBwYXR0ZXJuLnRlc3Qobm9ybWFsaXplZCkpXG4gICAgKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZXhjbHVkZWQuYWRkKG5vcm1hbGl6ZWQpO1xuICAgIGFjY2VwdGVkLnB1c2godHJpbW1lZCk7XG4gICAgaWYgKGFjY2VwdGVkLmxlbmd0aCA+PSBtYXhRdWVzdGlvbnMpIGJyZWFrO1xuICB9XG4gIHJldHVybiBhY2NlcHRlZDtcbn1cblxuZnVuY3Rpb24gdG9vbEFjdGl2aXR5VmFsdWUodmFsdWU6IHVua25vd24pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCB7XG4gIGlmICghb2JqZWN0LmlzUmVjb3JkKHZhbHVlKSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIG9iamVjdC5pc1JlY29yZCh2YWx1ZS5wYXlsb2FkKSA/IHZhbHVlLnBheWxvYWQgOiB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gdG9vbEFjdGl2aXR5TmFtZSh2YWx1ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAodHlwZW9mIHZhbHVlLnRvb2xOYW1lID09PSBcInN0cmluZ1wiKSByZXR1cm4gdmFsdWUudG9vbE5hbWU7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUubmFtZSA9PT0gXCJzdHJpbmdcIiA/IHZhbHVlLm5hbWUgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIHNlcmlhbGl6ZWRUdXJuQ29udGV4dChzdGVwczogcmVhZG9ubHkgTExNU3RlcFJlc3VsdFtdKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgYWN0aXZpdHkgPSBzdGVwcy5mbGF0TWFwKChzdGVwKSA9PiBbXG4gICAgLi4uKHN0ZXAudG9vbENhbGxzID8/IFtdKS5mbGF0TWFwKChjYWxsKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRvb2xBY3Rpdml0eVZhbHVlKGNhbGwpO1xuICAgICAgY29uc3QgdG9vbCA9IHZhbHVlID8gdG9vbEFjdGl2aXR5TmFtZSh2YWx1ZSkgOiB1bmRlZmluZWQ7XG4gICAgICBpZiAoIXZhbHVlIHx8ICF0b29sKSByZXR1cm4gW107XG4gICAgICByZXR1cm4gW3sgdG9vbCwgaW5wdXQ6IHZhbHVlLmFyZ3MgPz8gdmFsdWUuaW5wdXQgfV07XG4gICAgfSksXG4gICAgLi4uKHN0ZXAudG9vbFJlc3VsdHMgPz8gW10pLmZsYXRNYXAoKHJlc3VsdCkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSB0b29sQWN0aXZpdHlWYWx1ZShyZXN1bHQpO1xuICAgICAgY29uc3QgdG9vbCA9IHZhbHVlID8gdG9vbEFjdGl2aXR5TmFtZSh2YWx1ZSkgOiB1bmRlZmluZWQ7XG4gICAgICBpZiAoIXZhbHVlIHx8ICF0b29sKSByZXR1cm4gW107XG4gICAgICByZXR1cm4gW1xuICAgICAgICB7XG4gICAgICAgICAgdG9vbCxcbiAgICAgICAgICBvdXRwdXQ6IHZhbHVlLnJlc3VsdCA/PyB2YWx1ZS5vdXRwdXQsXG4gICAgICAgICAgLi4uKHZhbHVlLmlzRXJyb3IgfHwgdmFsdWUuZXJyb3IgPyB7IGlzRXJyb3I6IHRydWUgfSA6IHt9KSxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgfSksXG4gIF0pO1xuICBpZiAoYWN0aXZpdHkubGVuZ3RoID09PSAwKSByZXR1cm4gdW5kZWZpbmVkO1xuICB0cnkge1xuICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSBKU09OLnN0cmluZ2lmeShhY3Rpdml0eS5zbGljZSgtMTIpKTtcbiAgICByZXR1cm4gc2VyaWFsaXplZC5sZW5ndGggPiBNQVhfVFVSTl9DT05URVhUX0NIQVJTXG4gICAgICA/IHNlcmlhbGl6ZWQuc2xpY2UoMCwgTUFYX1RVUk5fQ09OVEVYVF9DSEFSUylcbiAgICAgIDogc2VyaWFsaXplZDtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKiogR2VuZXJhdGUgZ3JvdW5kZWQgZm9sbG93LXVwcyB0aHJvdWdoIENoYXRGYXN0LCBmYWlsaW5nIG9wZW4gdG8gYW4gZW1wdHkgbGlzdC4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzdWdnZXN0Rm9sbG93VXBzKFxuICBjb25maWc6IE1hc3RyYVBsdWdpbkNvbmZpZyxcbiAgb3B0aW9uczogU3VnZ2VzdEZvbGxvd1Vwc09wdGlvbnMsXG4pOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIGNvbnN0IHNldHRpbmdzID0gcmVzb2x2ZUZvbGxvd1VwU3VnZ2VzdGlvbnNDb25maWcoY29uZmlnLmZvbGxvd1VwU3VnZ2VzdGlvbnMpO1xuICBpZiAoIXNldHRpbmdzIHx8IHNldHRpbmdzLm1vZGUgPT09IFwiZ2VuaWVcIikgcmV0dXJuIFtdO1xuICBjb25zdCB0aW1lb3V0ID0gQWJvcnRTaWduYWwudGltZW91dChzZXR0aW5ncy50aW1lb3V0TXMpO1xuICBjb25zdCBhYm9ydFNpZ25hbCA9IGFzeW5jVXRpbHMuY29tYmluZUFib3J0U2lnbmFscyhvcHRpb25zLmFib3J0U2lnbmFsLCB0aW1lb3V0KTtcbiAgY29uc3QgcHJvbXB0ID0gc3RyaW5nVXRpbHMudG9EZXNjcmlwdGlvbih7XG4gICAgXCJVc2VyIG1lc3NhZ2VcIjogb3B0aW9ucy51c2VyVGV4dCxcbiAgICBcIkFzc2lzdGFudCBhbnN3ZXJcIjogb3B0aW9ucy5hbnN3ZXIsXG4gICAgLi4uKG9wdGlvbnMudHVybkNvbnRleHQgPyB7IFwiVHVybiB0b29sIGRhdGFcIjogb3B0aW9ucy50dXJuQ29udGV4dCB9IDoge30pLFxuICAgIC4uLihvcHRpb25zLm5hdGl2ZVF1ZXN0aW9ucz8ubGVuZ3RoXG4gICAgICA/IHsgXCJFeGlzdGluZyBzdWdnZXN0aW9uc1wiOiBKU09OLnN0cmluZ2lmeShvcHRpb25zLm5hdGl2ZVF1ZXN0aW9ucykgfVxuICAgICAgOiB7fSksXG4gICAgXCJNYXhpbXVtIHF1ZXN0aW9uc1wiOiBTdHJpbmcoc2V0dGluZ3MubGltaXQpLFxuICB9KTtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzdWdnZXN0aW9uQWdlbnQoY29uZmlnKS5nZW5lcmF0ZShwcm9tcHQsIHtcbiAgICAgIHN0cnVjdHVyZWRPdXRwdXQ6IHsgc2NoZW1hOiBGb2xsb3dVcE91dHB1dFNjaGVtYSB9LFxuICAgICAgLi4uKG9wdGlvbnMucmVxdWVzdENvbnRleHQgPyB7IHJlcXVlc3RDb250ZXh0OiBvcHRpb25zLnJlcXVlc3RDb250ZXh0IH0gOiB7fSksXG4gICAgICBhYm9ydFNpZ25hbCxcbiAgICB9KTtcbiAgICBjb25zdCBwYXJzZWQgPSBGb2xsb3dVcE91dHB1dFNjaGVtYS5wYXJzZShyZXN1bHQub2JqZWN0KTtcbiAgICByZXR1cm4gYWNjZXB0ZWRRdWVzdGlvbnMocGFyc2VkLnF1ZXN0aW9ucywgb3B0aW9ucywgc2V0dGluZ3MubGltaXQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmICghb3B0aW9ucy5hYm9ydFNpZ25hbD8uYWJvcnRlZCkge1xuICAgICAgbG9nZ2VyLndhcm4oXCJnZW5lcmF0aW9uLWZhaWxlZFwiLCB7IGVycm9yOiBlcnJvclV0aWxzLmVycm9yTWVzc2FnZShlcnJvcikgfSk7XG4gICAgfVxuICAgIHJldHVybiBbXTtcbiAgfVxufVxuXG5mdW5jdGlvbiBsYXN0QXNzaXN0YW50UmVzcG9uc2UobWVzc2FnZUxpc3Q6IE1lc3NhZ2VMaXN0KSB7XG4gIGNvbnN0IG1lc3NhZ2VzID0gbWVzc2FnZUxpc3QuZ2V0LnJlc3BvbnNlLmRiKCk7XG4gIGZvciAobGV0IGluZGV4ID0gbWVzc2FnZXMubGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXggLT0gMSkge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBtZXNzYWdlc1tpbmRleF07XG4gICAgaWYgKG1lc3NhZ2U/LnJvbGUgPT09IFwiYXNzaXN0YW50XCIpIHJldHVybiBtZXNzYWdlO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIHBlcnNpc3RlZEZvbGxvd1VwRGF0YShtZXNzYWdlTGlzdDogTWVzc2FnZUxpc3QpOiBGb2xsb3dVcFN1Z2dlc3Rpb25zUGFydERhdGEgfCB1bmRlZmluZWQge1xuICBjb25zdCBtZXNzYWdlID0gbGFzdEFzc2lzdGFudFJlc3BvbnNlKG1lc3NhZ2VMaXN0KTtcbiAgaWYgKCFtZXNzYWdlKSByZXR1cm4gdW5kZWZpbmVkO1xuICBmb3IgKGNvbnN0IHBhcnQgb2YgbWVzc2FnZS5jb250ZW50LnBhcnRzKSB7XG4gICAgaWYgKHBhcnQudHlwZSAhPT0gRk9MTE9XX1VQX1NVR0dFU1RJT05TX1BBUlRfVFlQRSB8fCAhKFwiZGF0YVwiIGluIHBhcnQpKSBjb250aW51ZTtcbiAgICBjb25zdCBwYXJzZWQgPSBGb2xsb3dVcFN1Z2dlc3Rpb25zUGFydERhdGFTY2hlbWEuc2FmZVBhcnNlKHBhcnQuZGF0YSk7XG4gICAgaWYgKHBhcnNlZC5zdWNjZXNzKSByZXR1cm4gcGFyc2VkLmRhdGE7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gcGVyc2lzdEZvbGxvd1VwRGF0YShtZXNzYWdlTGlzdDogTWVzc2FnZUxpc3QsIGRhdGE6IEZvbGxvd1VwU3VnZ2VzdGlvbnNQYXJ0RGF0YSk6IHZvaWQge1xuICBjb25zdCBtZXNzYWdlID0gbGFzdEFzc2lzdGFudFJlc3BvbnNlKG1lc3NhZ2VMaXN0KTtcbiAgaWYgKCFtZXNzYWdlKSByZXR1cm47XG4gIG1lc3NhZ2VMaXN0LmFkZChcbiAgICB7XG4gICAgICBpZDogbWVzc2FnZS5pZCxcbiAgICAgIHJvbGU6IFwiYXNzaXN0YW50XCIsXG4gICAgICBwYXJ0czogW3sgdHlwZTogRk9MTE9XX1VQX1NVR0dFU1RJT05TX1BBUlRfVFlQRSwgZGF0YSB9XSxcbiAgICB9LFxuICAgIFwicmVzcG9uc2VcIixcbiAgICB7IG1lcmdlOiB0cnVlIH0sXG4gICk7XG59XG5cbmZ1bmN0aW9uIHJlbWVtYmVyR2VuZXJhdGVkUnVuUGFydChydW5JZDogc3RyaW5nIHwgdW5kZWZpbmVkLCBkYXRhOiBGb2xsb3dVcFN1Z2dlc3Rpb25zUGFydERhdGEpIHtcbiAgaWYgKCFydW5JZCkgcmV0dXJuO1xuICBnZW5lcmF0ZWRSdW5QYXJ0cy5zZXQocnVuSWQsIGRhdGEpO1xuICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4gZ2VuZXJhdGVkUnVuUGFydHMuZGVsZXRlKHJ1bklkKSwgR0VORVJBVEVEX1JVTl9QQVJUX1RUTF9NUyk7XG4gIHRpbWVyLnVucmVmKCk7XG59XG5cbi8qKiBCdWlsZCBNYXN0cmEncyBmaW5hbCBvdXRwdXQgcHJvY2Vzc29yIGZvciBjb25maWd1cmVkIGdlbmVyYXRlZCBmb2xsb3ctdXBzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkRm9sbG93VXBTdWdnZXN0aW9uc1Byb2Nlc3NvcihcbiAgY29uZmlnOiBNYXN0cmFQbHVnaW5Db25maWcsXG4gIHN1Z2dlc3RlcjogRm9sbG93VXBTdWdnZXN0ZXIgPSBzdWdnZXN0Rm9sbG93VXBzLFxuKTogT3V0cHV0UHJvY2Vzc29yIHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qgc2V0dGluZ3MgPSByZXNvbHZlRm9sbG93VXBTdWdnZXN0aW9uc0NvbmZpZyhjb25maWcuZm9sbG93VXBTdWdnZXN0aW9ucyk7XG4gIGlmICghc2V0dGluZ3MgfHwgc2V0dGluZ3MubW9kZSA9PT0gXCJnZW5pZVwiKSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4ge1xuICAgIGlkOiBcImZvbGxvdy11cC1zdWdnZXN0aW9uc1wiLFxuICAgIGFzeW5jIHByb2Nlc3NPdXRwdXRSZXN1bHQoe1xuICAgICAgcmVzdWx0LFxuICAgICAgbWVzc2FnZUxpc3QsXG4gICAgICByZXF1ZXN0Q29udGV4dCxcbiAgICAgIGFib3J0U2lnbmFsLFxuICAgIH0pOiBQcm9taXNlPE1lc3NhZ2VMaXN0PiB7XG4gICAgICBpZiAoIXJlcXVlc3RDb250ZXh0IHx8IHJlc3VsdC5maW5pc2hSZWFzb24gPT09IFwiYWJvcnRcIiB8fCByZXN1bHQuZmluaXNoUmVhc29uID09PSBcImVycm9yXCIpIHtcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2VMaXN0O1xuICAgICAgfVxuICAgICAgY29uc3QgcnVuSWRWYWx1ZSA9IHJlcXVlc3RDb250ZXh0LmdldFJhdyhGT0xMT1dfVVBfUlVOX0lEX0tFWSk7XG4gICAgICBjb25zdCBydW5JZCA9IHR5cGVvZiBydW5JZFZhbHVlID09PSBcInN0cmluZ1wiID8gcnVuSWRWYWx1ZSA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IHBlcnNpc3RlZCA9IHBlcnNpc3RlZEZvbGxvd1VwRGF0YShtZXNzYWdlTGlzdCk7XG4gICAgICBpZiAocGVyc2lzdGVkKSB7XG4gICAgICAgIHJlbWVtYmVyR2VuZXJhdGVkUnVuUGFydChydW5JZCwgcGVyc2lzdGVkKTtcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2VMaXN0O1xuICAgICAgfVxuICAgICAgY29uc3QgYW5zd2VyID0gcmVzdWx0LnRleHQudHJpbSgpO1xuICAgICAgY29uc3QgdXNlclRleHQgPSByZXF1ZXN0Q29udGV4dC5nZXRSYXcoRk9MTE9XX1VQX1VTRVJfVEVYVF9LRVkpO1xuICAgICAgaWYgKCFhbnN3ZXIgfHwgdHlwZW9mIHVzZXJUZXh0ICE9PSBcInN0cmluZ1wiKSByZXR1cm4gbWVzc2FnZUxpc3Q7XG4gICAgICBjb25zdCBuYXRpdmVWYWx1ZSA9IHJlcXVlc3RDb250ZXh0LmdldFJhdyhGT0xMT1dfVVBfTkFUSVZFX1FVRVNUSU9OU19LRVkpO1xuICAgICAgY29uc3QgbmF0aXZlUXVlc3Rpb25zID1cbiAgICAgICAgc2V0dGluZ3MubW9kZSA9PT0gXCJhdXRvXCIgJiYgQXJyYXkuaXNBcnJheShuYXRpdmVWYWx1ZSlcbiAgICAgICAgICA/IG5hdGl2ZVZhbHVlLmZpbHRlcigodmFsdWUpOiB2YWx1ZSBpcyBzdHJpbmcgPT4gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKVxuICAgICAgICAgIDogW107XG4gICAgICBjb25zdCB0dXJuQ29udGV4dCA9IHNlcmlhbGl6ZWRUdXJuQ29udGV4dChyZXN1bHQuc3RlcHMpO1xuICAgICAgY29uc3Qgc3VnZ2VzdGlvbk9wdGlvbnM6IFN1Z2dlc3RGb2xsb3dVcHNPcHRpb25zID0ge1xuICAgICAgICB1c2VyVGV4dCxcbiAgICAgICAgYW5zd2VyLFxuICAgICAgICAuLi4odHVybkNvbnRleHQgPyB7IHR1cm5Db250ZXh0IH0gOiB7fSksXG4gICAgICAgIC4uLihuYXRpdmVRdWVzdGlvbnMubGVuZ3RoID4gMCA/IHsgbmF0aXZlUXVlc3Rpb25zIH0gOiB7fSksXG4gICAgICAgIHJlcXVlc3RDb250ZXh0LFxuICAgICAgICAuLi4oYWJvcnRTaWduYWwgPyB7IGFib3J0U2lnbmFsIH0gOiB7fSksXG4gICAgICB9O1xuICAgICAgY29uc3Qgc3VnZ2VzdGVkID0gYXdhaXQgc3VnZ2VzdGVyKGNvbmZpZywgc3VnZ2VzdGlvbk9wdGlvbnMpO1xuICAgICAgY29uc3QgcXVlc3Rpb25zID0gYWNjZXB0ZWRRdWVzdGlvbnMoc3VnZ2VzdGVkLCBzdWdnZXN0aW9uT3B0aW9ucywgc2V0dGluZ3MubGltaXQpO1xuICAgICAgaWYgKHF1ZXN0aW9ucy5sZW5ndGggPT09IDApIHJldHVybiBtZXNzYWdlTGlzdDtcbiAgICAgIGNvbnN0IGRhdGEgPSBGb2xsb3dVcFN1Z2dlc3Rpb25zUGFydERhdGFTY2hlbWEucGFyc2Uoe1xuICAgICAgICBxdWVzdGlvbnMsXG4gICAgICAgIHNvdXJjZTogXCJtb2RlbFwiLFxuICAgICAgfSk7XG4gICAgICBwZXJzaXN0Rm9sbG93VXBEYXRhKG1lc3NhZ2VMaXN0LCBkYXRhKTtcbiAgICAgIHJlbWVtYmVyR2VuZXJhdGVkUnVuUGFydChydW5JZCwgZGF0YSk7XG4gICAgICByZXR1cm4gbWVzc2FnZUxpc3Q7XG4gICAgfSxcbiAgfTtcbn1cblxuLyoqIEluamVjdCB0aGUgcHJvY2Vzc29yJ3MgcGVyc2lzdGVkIGRhdGEgcGFydCBiZWZvcmUgTWFzdHJhJ3MgZmluaXNoIGNodW5rLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkRm9sbG93VXBTdWdnZXN0aW9uc1RyYW5zZm9ybShydW5JZDogc3RyaW5nKTogTWFzdHJhU3RyZWFtVHJhbnNmb3JtIHtcbiAgcmV0dXJuICgpID0+XG4gICAgbmV3IFRyYW5zZm9ybVN0cmVhbSh7XG4gICAgICB0cmFuc2Zvcm0oY2h1bmssIGNvbnRyb2xsZXIpIHtcbiAgICAgICAgaWYgKGNodW5rLnR5cGUgPT09IFwiZmluaXNoXCIpIHtcbiAgICAgICAgICBjb25zdCBkYXRhID0gZ2VuZXJhdGVkUnVuUGFydHMuZ2V0KHJ1bklkKTtcbiAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgY29uc3QgcGFydDogRGF0YUNodW5rVHlwZSA9IHtcbiAgICAgICAgICAgICAgdHlwZTogRk9MTE9XX1VQX1NVR0dFU1RJT05TX1BBUlRfVFlQRSxcbiAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb250cm9sbGVyLmVucXVldWUocGFydCBhcyBuZXZlcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShjaHVuayk7XG4gICAgICB9LFxuICAgIH0pO1xufVxuXG4vKiogQnVpbGQgdGhlIG9wdGlvbmFsIGV4cGxpY2l0bHkgY2FsbGFibGUgZm9sbG93LXVwIHN1Z2dlc3Rpb24gdG9vbC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFN1Z2dlc3RGb2xsb3dVcHNUb29sKGNvbmZpZzogTWFzdHJhUGx1Z2luQ29uZmlnKSB7XG4gIHJldHVybiBjcmVhdGVUb29sKHtcbiAgICBpZDogXCJzdWdnZXN0X2ZvbGxvd191cHNcIixcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgIFwiR2VuZXJhdGUgYSBzaG9ydCBsaXN0IG9mIGdyb3VuZGVkIGZvbGxvdy11cCBxdWVzdGlvbnMgZm9yIGEgY29tcGxldGVkIHVzZXIgbWVzc2FnZSBhbmQgYW5zd2VyLlwiLFxuICAgIGlucHV0U2NoZW1hOiBGb2xsb3dVcFRvb2xJbnB1dFNjaGVtYSxcbiAgICBvdXRwdXRTY2hlbWE6IEZvbGxvd1VwT3V0cHV0U2NoZW1hLFxuICAgIGV4ZWN1dGU6IGFzeW5jIChpbnB1dCwgY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgdmFsdWVzID0gRm9sbG93VXBUb29sSW5wdXRTY2hlbWEucGFyc2UoaW5wdXQpO1xuICAgICAgY29uc3QgcXVlc3Rpb25zID0gYXdhaXQgc3VnZ2VzdEZvbGxvd1Vwcyhjb25maWcsIHtcbiAgICAgICAgdXNlclRleHQ6IHZhbHVlcy51c2VyVGV4dCxcbiAgICAgICAgYW5zd2VyOiB2YWx1ZXMuYW5zd2VyLFxuICAgICAgICAuLi4odmFsdWVzLnR1cm5Db250ZXh0ID8geyB0dXJuQ29udGV4dDogdmFsdWVzLnR1cm5Db250ZXh0IH0gOiB7fSksXG4gICAgICAgIC4uLih2YWx1ZXMubmF0aXZlUXVlc3Rpb25zID8geyBuYXRpdmVRdWVzdGlvbnM6IHZhbHVlcy5uYXRpdmVRdWVzdGlvbnMgfSA6IHt9KSxcbiAgICAgICAgLi4uKGNvbnRleHQ/LnJlcXVlc3RDb250ZXh0ID8geyByZXF1ZXN0Q29udGV4dDogY29udGV4dC5yZXF1ZXN0Q29udGV4dCB9IDoge30pLFxuICAgICAgICAuLi4oY29udGV4dD8uYWJvcnRTaWduYWwgPyB7IGFib3J0U2lnbmFsOiBjb250ZXh0LmFib3J0U2lnbmFsIH0gOiB7fSksXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7IHF1ZXN0aW9ucyB9O1xuICAgIH0sXG4gIH0pO1xufVxuIl19
|
|
343
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9sbG93LXVwLXN1Z2dlc3Rpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ZvbGxvdy11cC1zdWdnZXN0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBRUgsT0FBTyxFQUFFLEdBQUcsRUFBRSxtQkFBbUIsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3BHLE9BQU8sRUFDTCwrQkFBK0IsRUFFL0IsaUNBQWlDLEdBQ2xDLE1BQU0sMEJBQTBCLENBQUM7QUFDbEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQU0zQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDaEQsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUd4QixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFN0MsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO0FBQzFELE1BQU0scUJBQXFCLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQztBQUNsRCxNQUFNLHNCQUFzQixHQUFHLENBQUMsQ0FBQztBQUNqQyxNQUFNLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztBQUM5QixNQUFNLGtCQUFrQixHQUFHLE1BQU0sQ0FBQztBQUNsQyxNQUFNLHNCQUFzQixHQUFHLE1BQU0sQ0FBQztBQUN0QyxNQUFNLGlCQUFpQixHQUFHLElBQUksR0FBRyxDQUFDO0lBQ2hDLGVBQWU7SUFDZixzQkFBc0I7SUFDdEIsY0FBYztJQUNkLFdBQVc7SUFDWCw2QkFBNkI7Q0FDOUIsQ0FBQyxDQUFDO0FBQ0gsTUFBTSw0QkFB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LENBQUM7Z0JBQ2xFLEdBQUcsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxFQUFFLGVBQWUsRUFBRSxNQUFNLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDOUUsR0FBRyxDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUUsY0FBYyxFQUFFLE9BQU8sQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUM5RSxHQUFHLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7YUFDdEUsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxFQUFFLFNBQVMsRUFBRSxDQUFDO1FBQ3ZCLENBQUM7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDaGF0RmFzdCBwb3N0LXR1cm4gZm9sbG93LXVwIHN1Z2dlc3Rpb24gZ2VuZXJhdGlvbi5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgbG9nLCBjb21iaW5lQWJvcnRTaWduYWxzLCBpc1JlY29yZCwgdG9FcnJvciwgdG9EZXNjcmlwdGlvbiB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQge1xuICBGT0xMT1dfVVBfU1VHR0VTVElPTlNfUEFSVF9UWVBFLFxuICB0eXBlIEZvbGxvd1VwU3VnZ2VzdGlvbnNQYXJ0RGF0YSxcbiAgRm9sbG93VXBTdWdnZXN0aW9uc1BhcnREYXRhU2NoZW1hLFxufSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtbWFzdHJhXCI7XG5pbXBvcnQgeyBNb2RlbENsYXNzIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLW1vZGVsXCI7XG5pbXBvcnQgeyBBZ2VudCB9IGZyb20gXCJAbWFzdHJhL2NvcmUvYWdlbnRcIjtcbmltcG9ydCB0eXBlIHsgTWVzc2FnZUxpc3QgfSBmcm9tIFwiQG1hc3RyYS9jb3JlL2FnZW50L21lc3NhZ2UtbGlzdFwiO1xuaW1wb3J0IHR5cGUgeyBNYXN0cmFNb2RlbENvbmZpZyB9IGZyb20gXCJAbWFzdHJhL2NvcmUvbGxtXCI7XG5pbXBvcnQgdHlwZSB7IE91dHB1dFByb2Nlc3NvciB9IGZyb20gXCJAbWFzdHJhL2NvcmUvcHJvY2Vzc29yc1wiO1xuaW1wb3J0IHR5cGUgeyBSZXF1ZXN0Q29udGV4dCB9IGZyb20gXCJAbWFzdHJhL2NvcmUvcmVxdWVzdC1jb250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IERhdGFDaHVua1R5cGUsIExMTVN0ZXBSZXN1bHQsIE1hc3RyYVN0cmVhbVRyYW5zZm9ybSB9IGZyb20gXCJAbWFzdHJhL2NvcmUvc3RyZWFtXCI7XG5pbXBvcnQgeyBjcmVhdGVUb29sIH0gZnJvbSBcIkBtYXN0cmEvY29yZS90b29sc1wiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcblxuaW1wb3J0IHR5cGUgeyBGb2xsb3dVcFN1Z2dlc3Rpb25zQ29uZmlnLCBNYXN0cmFQbHVnaW5Db25maWcgfSBmcm9tIFwiLi9jb25maWcudHNcIjtcbmltcG9ydCB7IGJ1aWxkTW9kZWwgfSBmcm9tIFwiLi9tb2RlbC50c1wiO1xuaW1wb3J0IHsgVFlQT0dSQVBIWV9SVUxFIH0gZnJvbSBcIi4vc3R5bGUudHNcIjtcblxuY29uc3QgbG9nZ2VyID0gbG9nLmxvZ2dlcihcIm1hc3RyYS9mb2xsb3ctdXAtc3VnZ2VzdGlvbnNcIik7XG5jb25zdCBGT0xMT1dfVVBfTU9ERUxfQ0xBU1MgPSBNb2RlbENsYXNzLkNoYXRGYXN0O1xuY29uc3QgREVGQVVMVF9RVUVTVElPTl9MSU1JVCA9IDM7XG5jb25zdCBNQVhfUVVFU1RJT05fTElNSVQgPSAxMDtcbmNvbnN0IERFRkFVTFRfVElNRU9VVF9NUyA9IDEwXzAwMDtcbmNvbnN0IE1BWF9UVVJOX0NPTlRFWFRfQ0hBUlMgPSAxNl8wMDA7XG5jb25zdCBHRU5FUklDX1FVRVNUSU9OUyA9IG5ldyBTZXQoW1xuICBcImFueXRoaW5nIGVsc2VcIixcbiAgXCJjYW4geW91IHRlbGwgbWUgbW9yZVwiLFxuICBcInRlbGwgbWUgbW9yZVwiLFxuICBcIndoYXQgZWxzZVwiLFxuICBcIndoYXQgd291bGQgeW91IGxpa2UgdG8ga25vd1wiLFxuXSk7XG5jb25zdCBBU1NJU1RBTlRfRElSRUNURURfUVVFU1RJT05TID0gW1xuICAvXig/OndvdWxkfGRvKSB5b3UgKD86bGlrZXx3YW50fHByZWZlcilcXGIvLFxuICAvXig/OnNob3VsZHxzaGFsbHxjYW58bWF5KSAoPzppfHdlKVxcYi8sXG4gIC9eYXJlIHlvdSBpbnRlcmVzdGVkXFxiLyxcbiAgL15zaG91bGQgKD86dGhlIHx0aGlzICk/KD86Y2hhcnR8Z3JhcGh8dGFibGV8dmlzdWFsaXphdGlvbnxyZXNwb25zZXxvdXRwdXR8cmVzdWx0cz98ZGF0YSlcXGIvLFxuXSBhcyBjb25zdDtcblxuLyoqIFRydXN0ZWQgcmVxdWVzdC1jb250ZXh0IGtleSBjYXJyeWluZyB0aGUgY3VycmVudCB1c2VyIG1lc3NhZ2UuICovXG5leHBvcnQgY29uc3QgRk9MTE9XX1VQX1VTRVJfVEVYVF9LRVkgPSBcIm1hc3RyYV9fZm9sbG93X3VwX3VzZXJfdGV4dFwiO1xuLyoqIFRydXN0ZWQgcmVxdWVzdC1jb250ZXh0IGtleSBjYXJyeWluZyBuYXRpdmUgR2VuaWUgZm9sbG93LXVwIHF1ZXN0aW9ucy4gKi9cbmV4cG9ydCBjb25zdCBGT0xMT1dfVVBfTkFUSVZFX1FVRVNUSU9OU19LRVkgPSBcIm1hc3RyYV9fZm9sbG93X3VwX25hdGl2ZV9xdWVzdGlvbnNcIjtcbi8qKiBUcnVzdGVkIHJlcXVlc3QtY29udGV4dCBrZXkgY29vcmRpbmF0aW5nIG9uZSBwb3N0LXR1cm4gc3RyZWFtIHdpdGggaXRzIHByb2Nlc3Nvci4gKi9cbmV4cG9ydCBjb25zdCBGT0xMT1dfVVBfUlVOX0lEX0tFWSA9IFwibWFzdHJhX19mb2xsb3dfdXBfcnVuX2lkXCI7XG5cbi8qKiBGdWxseSByZXNvbHZlZCBmb2xsb3ctdXAgc3VnZ2VzdGlvbiBzZXR0aW5ncy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZWRGb2xsb3dVcFN1Z2dlc3Rpb25zQ29uZmlnIHtcbiAgbW9kZTogXCJhdXRvXCIgfCBcImdlbmVyYXRlZFwiIHwgXCJnZW5pZVwiO1xuICBsaW1pdDogbnVtYmVyO1xuICB0aW1lb3V0TXM6IG51bWJlcjtcbiAgZXhwb3NlVG9vbDogYm9vbGVhbjtcbn1cblxuLyoqIElucHV0cyBmb3Igb25lIGZvbGxvdy11cCBnZW5lcmF0aW9uIHBhc3MuICovXG5leHBvcnQgaW50ZXJmYWNlIFN1Z2dlc3RGb2xsb3dVcHNPcHRpb25zIHtcbiAgdXNlclRleHQ6IHN0cmluZztcbiAgYW5zd2VyOiBzdHJpbmc7XG4gIC8qKiBCb3VuZGVkIHNlcmlhbGl6ZWQgdG9vbCBpbnB1dHMgYW5kIG91dHB1dHMgdGhhdCBncm91bmQgdGhlIG5leHQgcXVlc3Rpb25zLiAqL1xuICB0dXJuQ29udGV4dD86IHN0cmluZztcbiAgbmF0aXZlUXVlc3Rpb25zPzogcmVhZG9ubHkgc3RyaW5nW107XG4gIHJlcXVlc3RDb250ZXh0PzogUmVxdWVzdENvbnRleHQ7XG4gIGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWw7XG59XG5cbi8qKiBSZXBsYWNlYWJsZSBzdWdnZXN0aW9uIGJvdW5kYXJ5IHVzZWQgYnkgdGhlIGZpbmlzaCBjYWxsYmFjayBhbmQgdGVzdHMuICovXG5leHBvcnQgdHlwZSBGb2xsb3dVcFN1Z2dlc3RlciA9IChcbiAgY29uZmlnOiBNYXN0cmFQbHVnaW5Db25maWcsXG4gIG9wdGlvbnM6IFN1Z2dlc3RGb2xsb3dVcHNPcHRpb25zLFxuKSA9PiBQcm9taXNlPHN0cmluZ1tdPjtcblxuY29uc3QgRm9sbG93VXBPdXRwdXRTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIHF1ZXN0aW9uczogelxuICAgICAgLmFycmF5KHouc3RyaW5nKCkudHJpbSgpLm1pbigxKSlcbiAgICAgIC5tYXgoTUFYX1FVRVNUSU9OX0xJTUlUKVxuICAgICAgLmRlc2NyaWJlKFwiU3BlY2lmaWMgbmV4dCBxdWVzdGlvbnMgZ3JvdW5kZWQgaW4gdGhlIGNvbXBsZXRlZCB0dXJuLlwiKSxcbiAgfSlcbiAgLnN0cmljdCgpO1xuXG5jb25zdCBGb2xsb3dVcFRvb2xJbnB1dFNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgdXNlclRleHQ6IHouc3RyaW5nKCkudHJpbSgpLm1pbigxKS5kZXNjcmliZShcIlVzZXIgbWVzc2FnZSB0aGF0IHN0YXJ0ZWQgdGhlIGNvbXBsZXRlZCB0dXJuLlwiKSxcbiAgICBhbnN3ZXI6IHouc3RyaW5nKCkudHJpbSgpLm1pbigxKS5kZXNjcmliZShcIkFzc2lzdGFudCBhbnN3ZXIgZnJvbSB0aGUgY29tcGxldGVkIHR1cm4uXCIpLFxuICAgIHR1cm5Db250ZXh0OiB6XG4gICAgICAuc3RyaW5nKClcbiAgICAgIC50cmltKClcbiAgICAgIC5tYXgoTUFYX1RVUk5fQ09OVEVYVF9DSEFSUylcbiAgICAgIC5vcHRpb25hbCgpXG4gICAgICAuZGVzY3JpYmUoXCJSZWxldmFudCB0b29sIGlucHV0cyBhbmQgb3V0cHV0cyBmcm9tIHRoZSBjb21wbGV0ZWQgdHVybi5cIiksXG4gICAgbmF0aXZlUXVlc3Rpb25zOiB6XG4gICAgICAuYXJyYXkoei5zdHJpbmcoKS50cmltKCkubWluKDEpKVxuICAgICAgLm9wdGlvbmFsKClcbiAgICAgIC5kZXNjcmliZShcIkV4aXN0aW5nIGZvbGxvdy11cCBxdWVzdGlvbnMgdG8gYXZvaWQgcmVwZWF0aW5nLlwiKSxcbiAgfSlcbiAgLnN0cmljdCgpO1xuXG5jb25zdCBGT0xMT1dfVVBfSU5TVFJVQ1RJT05TID0gW1xuICBcIkdlbmVyYXRlIGNvbmNpc2UgcXVlc3Rpb25zIHRoYXQgYSB1c2VyIGNhbiBzZW5kIHRvIGRpZyBmdXJ0aGVyIGludG8gYSBjb21wbGV0ZWQgYXNzaXN0YW50IHR1cm4uXCIsXG4gIFwiV3JpdGUgZXZlcnkgaXRlbSBpbiB0aGUgdXNlcidzIHZvaWNlIGFzIGEgbWVzc2FnZSBmb3IgdGhlIGFzc2lzdGFudCB0byBhbnN3ZXIgd2hlbiBjbGlja2VkLlwiLFxuICBcIk5ldmVyIGFkZHJlc3MgdGhlIHVzZXIgb3IgYXNrIHdoYXQgdGhleSB3b3VsZCBsaWtlLCB3YW50LCBwcmVmZXIsIG9yIGhvdyB0aGUgcmVzcG9uc2Ugc2hvdWxkIGJlIGN1c3RvbWl6ZWQuXCIsXG4gIFwiRXZlcnkgcXVlc3Rpb24gbXVzdCBiZSBhbnN3ZXJhYmxlIGZyb20gdGhlIHNhbWUgdG9vbHMgYW5kIGRhdGEgZG9tYWluIGFzIHRoZSBjb21wbGV0ZWQgdHVybi5cIixcbiAgXCJHcm91bmQgcXVlc3Rpb25zIGluIHRoZSBhbnN3ZXIgYW5kIHR1cm4gdG9vbCBkYXRhLCBpbmNsdWRpbmcgZGlzcGxheWVkIGNoYXJ0IG9yIHRhYmxlIHZhbHVlcy5cIixcbiAgXCJQcmVmZXIgY29uY3JldGUgYW5hbHlzZXMsIGNvbXBhcmlzb25zLCByYW5raW5ncywgY2FsY3VsYXRpb25zLCBmaWx0ZXJzLCBvciBleHBsYW5hdGlvbnMgb2YgdGhlIHJlc3VsdC5cIixcbiAgXCJGb3IgYSBjaGFydCBvciB0YWJsZSwgYXNrIGFib3V0IHRoZSB2YWx1ZXMgYW5kIHBhdHRlcm5zIGJlZm9yZSBzdWdnZXN0aW5nIHByZXNlbnRhdGlvbiBjaGFuZ2VzLlwiLFxuICBcIkdvb2QgZXhhbXBsZXMgaW5jbHVkZSAnV2hpY2ggY2F0ZWdvcnkgaGFzIHRoZSBoaWdoZXN0IHZhbHVlPycsICdIb3cgbGFyZ2UgaXMgdGhlIGdhcCBiZXR3ZWVuIHRoZSBoaWdoZXN0IGFuZCBsb3dlc3QgY2F0ZWdvcmllcz8nLCBhbmQgJ1doYXQgcGF0dGVybiBzdGFuZHMgb3V0IGluIHRoZXNlIHZhbHVlcz8nLlwiLFxuICBcIkRvIG5vdCByZXBlYXQgdGhlIHVzZXIncyBxdWVzdGlvbiwgdGhlIGFuc3dlciwgb3IgYW4gZXhpc3Rpbmcgc3VnZ2VzdGlvbi5cIixcbiAgXCJEbyBub3QgYXNrIGdlbmVyaWMgZmlsbGVyIHN1Y2ggYXMgJ0FueXRoaW5nIGVsc2U/JyBvciByZXF1ZXN0IHVuc3VwcG9ydGVkIGRhdGEuXCIsXG4gIFwiUmV0dXJuIHplcm8gcXVlc3Rpb25zIHdoZW4gbm8gdXNlZnVsIGdyb3VuZGVkIGZvbGxvdy11cCBleGlzdHMuXCIsXG4gIFRZUE9HUkFQSFlfUlVMRSxcbl0uam9pbihcIiBcIik7XG5cbmNvbnN0IHN1Z2dlc3Rpb25BZ2VudHMgPSBuZXcgV2Vha01hcDxNYXN0cmFQbHVnaW5Db25maWcsIEFnZW50PigpO1xuY29uc3QgZ2VuZXJhdGVkUnVuUGFydHMgPSBuZXcgTWFwPHN0cmluZywgRm9sbG93VXBTdWdnZXN0aW9uc1BhcnREYXRhPigpO1xuY29uc3QgR0VORVJBVEVEX1JVTl9QQVJUX1RUTF9NUyA9IDUgKiA2MF8wMDA7XG5cbi8qKiBSZXNvbHZlIGRpc2FibGVkLCBzaG9ydGhhbmQsIGFuZCBjb25maWd1cmVkIHN1Z2dlc3Rpb24gcG9saWN5IGZvcm1zLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVGb2xsb3dVcFN1Z2dlc3Rpb25zQ29uZmlnKFxuICB2YWx1ZTogTWFzdHJhUGx1Z2luQ29uZmlnW1wiZm9sbG93VXBTdWdnZXN0aW9uc1wiXSxcbik6IFJlc29sdmVkRm9sbG93VXBTdWdnZXN0aW9uc0NvbmZpZyB8IHVuZGVmaW5lZCB7XG4gIGlmICghdmFsdWUpIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IGNvbmZpZ3VyZWQ6IEZvbGxvd1VwU3VnZ2VzdGlvbnNDb25maWcgPSB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgPyB2YWx1ZSA6IHsgbW9kZTogdmFsdWUgfTtcbiAgcmV0dXJuIHtcbiAgICBtb2RlOiBjb25maWd1cmVkLm1vZGUgPT09IHRydWUgPyBcImF1dG9cIiA6IGNvbmZpZ3VyZWQubW9kZSxcbiAgICBsaW1pdDogTWF0aC5taW4oTUFYX1FVRVNUSU9OX0xJTUlULCBNYXRoLm1heCgxLCBjb25maWd1cmVkLmxpbWl0ID8/IERFRkFVTFRfUVVFU1RJT05fTElNSVQpKSxcbiAgICB0aW1lb3V0TXM6IE1hdGgubWluKDMwXzAwMCwgTWF0aC5tYXgoMV8wMDAsIGNvbmZpZ3VyZWQudGltZW91dE1zID8/IERFRkFVTFRfVElNRU9VVF9NUykpLFxuICAgIGV4cG9zZVRvb2w6IGNvbmZpZ3VyZWQuZXhwb3NlVG9vbCA/PyBmYWxzZSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZm9sbG93VXBNb2RlbChcbiAgY29uZmlnOiBNYXN0cmFQbHVnaW5Db25maWcsXG4pOiAoYXJnczogeyByZXF1ZXN0Q29udGV4dDogUmVxdWVzdENvbnRleHQgfSkgPT4gUHJvbWlzZTxNYXN0cmFNb2RlbENvbmZpZz4ge1xuICByZXR1cm4gKHsgcmVxdWVzdENvbnRleHQgfSkgPT5cbiAgICBidWlsZE1vZGVsKGNvbmZpZywgcmVxdWVzdENvbnRleHQsIHsgbW9kZWxDbGFzczogRk9MTE9XX1VQX01PREVMX0NMQVNTIH0pO1xufVxuXG5mdW5jdGlvbiBzdWdnZXN0aW9uQWdlbnQoY29uZmlnOiBNYXN0cmFQbHVnaW5Db25maWcpOiBBZ2VudCB7XG4gIGxldCBhZ2VudCA9IHN1Z2dlc3Rpb25BZ2VudHMuZ2V0KGNvbmZpZyk7XG4gIGlmICghYWdlbnQpIHtcbiAgICBhZ2VudCA9IG5ldyBBZ2VudCh7XG4gICAgICBpZDogXCJmb2xsb3ctdXAtc3VnZ2VzdGlvbnNcIixcbiAgICAgIG5hbWU6IFwiRm9sbG93LXVwIHN1Z2dlc3Rpb25zXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJHZW5lcmF0ZXMgZ3JvdW5kZWQgbmV4dCBxdWVzdGlvbnMgdXNpbmcgdGhlIGZhc3QgY2hhdCBtb2RlbC5cIixcbiAgICAgIGluc3RydWN0aW9uczogRk9MTE9XX1VQX0lOU1RSVUNUSU9OUyxcbiAgICAgIG1vZGVsOiBmb2xsb3dVcE1vZGVsKGNvbmZpZyksXG4gICAgfSk7XG4gICAgc3VnZ2VzdGlvbkFnZW50cy5zZXQoY29uZmlnLCBhZ2VudCk7XG4gIH1cbiAgcmV0dXJuIGFnZW50O1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVkUXVlc3Rpb24odmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB2YWx1ZVxuICAgIC50cmltKClcbiAgICAudG9Mb3dlckNhc2UoKVxuICAgIC5yZXBsYWNlKC9bXlxccHtMfVxccHtOfVxcc10vZ3UsIFwiIFwiKVxuICAgIC5yZXBsYWNlKC9cXHMrL2csIFwiIFwiKTtcbn1cblxuZnVuY3Rpb24gYWNjZXB0ZWRRdWVzdGlvbnMoXG4gIHF1ZXN0aW9uczogcmVhZG9ubHkgc3RyaW5nW10sXG4gIG9wdGlvbnM6IFN1Z2dlc3RGb2xsb3dVcHNPcHRpb25zLFxuICBtYXhRdWVzdGlvbnM6IG51bWJlcixcbik6IHN0cmluZ1tdIHtcbiAgY29uc3QgZXhjbHVkZWQgPSBuZXcgU2V0KFtcbiAgICBub3JtYWxpemVkUXVlc3Rpb24ob3B0aW9ucy51c2VyVGV4dCksXG4gICAgLi4uKG9wdGlvbnMubmF0aXZlUXVlc3Rpb25zID8/IFtdKS5tYXAobm9ybWFsaXplZFF1ZXN0aW9uKSxcbiAgXSk7XG4gIGNvbnN0IGFjY2VwdGVkOiBzdHJpbmdbXSA9IFtdO1xuICBmb3IgKGNvbnN0IHF1ZXN0aW9uIG9mIHF1ZXN0aW9ucykge1xuICAgIGNvbnN0IHRyaW1tZWQgPSBxdWVzdGlvbi50cmltKCk7XG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZWRRdWVzdGlvbih0cmltbWVkKTtcbiAgICBpZiAoXG4gICAgICAhbm9ybWFsaXplZCB8fFxuICAgICAgbm9ybWFsaXplZC5sZW5ndGggPCA4IHx8XG4gICAgICBleGNsdWRlZC5oYXMobm9ybWFsaXplZCkgfHxcbiAgICAgIEdFTkVSSUNfUVVFU1RJT05TLmhhcyhub3JtYWxpemVkKSB8fFxuICAgICAgQVNTSVNUQU5UX0RJUkVDVEVEX1FVRVNUSU9OUy5zb21lKChwYXR0ZXJuKSA9PiBwYXR0ZXJuLnRlc3Qobm9ybWFsaXplZCkpXG4gICAgKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZXhjbHVkZWQuYWRkKG5vcm1hbGl6ZWQpO1xuICAgIGFjY2VwdGVkLnB1c2godHJpbW1lZCk7XG4gICAgaWYgKGFjY2VwdGVkLmxlbmd0aCA+PSBtYXhRdWVzdGlvbnMpIGJyZWFrO1xuICB9XG4gIHJldHVybiBhY2NlcHRlZDtcbn1cblxuZnVuY3Rpb24gdG9vbEFjdGl2aXR5VmFsdWUodmFsdWU6IHVua25vd24pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCB7XG4gIGlmICghaXNSZWNvcmQodmFsdWUpKSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4gaXNSZWNvcmQodmFsdWUucGF5bG9hZCkgPyB2YWx1ZS5wYXlsb2FkIDogdmFsdWU7XG59XG5cbmZ1bmN0aW9uIHRvb2xBY3Rpdml0eU5hbWUodmFsdWU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZS50b29sTmFtZSA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIHZhbHVlLnRvb2xOYW1lO1xuICByZXR1cm4gdHlwZW9mIHZhbHVlLm5hbWUgPT09IFwic3RyaW5nXCIgPyB2YWx1ZS5uYW1lIDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBzZXJpYWxpemVkVHVybkNvbnRleHQoc3RlcHM6IHJlYWRvbmx5IExMTVN0ZXBSZXN1bHRbXSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGFjdGl2aXR5ID0gc3RlcHMuZmxhdE1hcCgoc3RlcCkgPT4gW1xuICAgIC4uLihzdGVwLnRvb2xDYWxscyA/PyBbXSkuZmxhdE1hcCgoY2FsbCkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSB0b29sQWN0aXZpdHlWYWx1ZShjYWxsKTtcbiAgICAgIGNvbnN0IHRvb2wgPSB2YWx1ZSA/IHRvb2xBY3Rpdml0eU5hbWUodmFsdWUpIDogdW5kZWZpbmVkO1xuICAgICAgaWYgKCF2YWx1ZSB8fCAhdG9vbCkgcmV0dXJuIFtdO1xuICAgICAgcmV0dXJuIFt7IHRvb2wsIGlucHV0OiB2YWx1ZS5hcmdzID8/IHZhbHVlLmlucHV0IH1dO1xuICAgIH0pLFxuICAgIC4uLihzdGVwLnRvb2xSZXN1bHRzID8/IFtdKS5mbGF0TWFwKChyZXN1bHQpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdG9vbEFjdGl2aXR5VmFsdWUocmVzdWx0KTtcbiAgICAgIGNvbnN0IHRvb2wgPSB2YWx1ZSA/IHRvb2xBY3Rpdml0eU5hbWUodmFsdWUpIDogdW5kZWZpbmVkO1xuICAgICAgaWYgKCF2YWx1ZSB8fCAhdG9vbCkgcmV0dXJuIFtdO1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAge1xuICAgICAgICAgIHRvb2wsXG4gICAgICAgICAgb3V0cHV0OiB2YWx1ZS5yZXN1bHQgPz8gdmFsdWUub3V0cHV0LFxuICAgICAgICAgIC4uLih2YWx1ZS5pc0Vycm9yIHx8IHZhbHVlLmVycm9yID8geyBpc0Vycm9yOiB0cnVlIH0gOiB7fSksXG4gICAgICAgIH0sXG4gICAgICBdO1xuICAgIH0pLFxuICBdKTtcbiAgaWYgKGFjdGl2aXR5Lmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgdHJ5IHtcbiAgICBjb25zdCBzZXJpYWxpemVkID0gSlNPTi5zdHJpbmdpZnkoYWN0aXZpdHkuc2xpY2UoLTEyKSk7XG4gICAgcmV0dXJuIHNlcmlhbGl6ZWQubGVuZ3RoID4gTUFYX1RVUk5fQ09OVEVYVF9DSEFSU1xuICAgICAgPyBzZXJpYWxpemVkLnNsaWNlKDAsIE1BWF9UVVJOX0NPTlRFWFRfQ0hBUlMpXG4gICAgICA6IHNlcmlhbGl6ZWQ7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqIEdlbmVyYXRlIGdyb3VuZGVkIGZvbGxvdy11cHMgdGhyb3VnaCBDaGF0RmFzdCwgZmFpbGluZyBvcGVuIHRvIGFuIGVtcHR5IGxpc3QuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3VnZ2VzdEZvbGxvd1VwcyhcbiAgY29uZmlnOiBNYXN0cmFQbHVnaW5Db25maWcsXG4gIG9wdGlvbnM6IFN1Z2dlc3RGb2xsb3dVcHNPcHRpb25zLFxuKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCBzZXR0aW5ncyA9IHJlc29sdmVGb2xsb3dVcFN1Z2dlc3Rpb25zQ29uZmlnKGNvbmZpZy5mb2xsb3dVcFN1Z2dlc3Rpb25zKTtcbiAgaWYgKCFzZXR0aW5ncyB8fCBzZXR0aW5ncy5tb2RlID09PSBcImdlbmllXCIpIHJldHVybiBbXTtcbiAgY29uc3QgdGltZW91dCA9IEFib3J0U2lnbmFsLnRpbWVvdXQoc2V0dGluZ3MudGltZW91dE1zKTtcbiAgY29uc3QgYWJvcnRTaWduYWwgPSBjb21iaW5lQWJvcnRTaWduYWxzKG9wdGlvbnMuYWJvcnRTaWduYWwsIHRpbWVvdXQpO1xuICBjb25zdCBwcm9tcHQgPSB0b0Rlc2NyaXB0aW9uKHtcbiAgICBcIlVzZXIgbWVzc2FnZVwiOiBvcHRpb25zLnVzZXJUZXh0LFxuICAgIFwiQXNzaXN0YW50IGFuc3dlclwiOiBvcHRpb25zLmFuc3dlcixcbiAgICAuLi4ob3B0aW9ucy50dXJuQ29udGV4dCA/IHsgXCJUdXJuIHRvb2wgZGF0YVwiOiBvcHRpb25zLnR1cm5Db250ZXh0IH0gOiB7fSksXG4gICAgLi4uKG9wdGlvbnMubmF0aXZlUXVlc3Rpb25zPy5sZW5ndGhcbiAgICAgID8geyBcIkV4aXN0aW5nIHN1Z2dlc3Rpb25zXCI6IEpTT04uc3RyaW5naWZ5KG9wdGlvbnMubmF0aXZlUXVlc3Rpb25zKSB9XG4gICAgICA6IHt9KSxcbiAgICBcIk1heGltdW0gcXVlc3Rpb25zXCI6IFN0cmluZyhzZXR0aW5ncy5saW1pdCksXG4gIH0pO1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHN1Z2dlc3Rpb25BZ2VudChjb25maWcpLmdlbmVyYXRlKHByb21wdCwge1xuICAgICAgc3RydWN0dXJlZE91dHB1dDogeyBzY2hlbWE6IEZvbGxvd1VwT3V0cHV0U2NoZW1hIH0sXG4gICAgICAuLi4ob3B0aW9ucy5yZXF1ZXN0Q29udGV4dCA/IHsgcmVxdWVzdENvbnRleHQ6IG9wdGlvbnMucmVxdWVzdENvbnRleHQgfSA6IHt9KSxcbiAgICAgIGFib3J0U2lnbmFsLFxuICAgIH0pO1xuICAgIGNvbnN0IHBhcnNlZCA9IEZvbGxvd1VwT3V0cHV0U2NoZW1hLnBhcnNlKHJlc3VsdC5vYmplY3QpO1xuICAgIHJldHVybiBhY2NlcHRlZFF1ZXN0aW9ucyhwYXJzZWQucXVlc3Rpb25zLCBvcHRpb25zLCBzZXR0aW5ncy5saW1pdCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKCFvcHRpb25zLmFib3J0U2lnbmFsPy5hYm9ydGVkKSB7XG4gICAgICBsb2dnZXIud2FybihcImdlbmVyYXRpb24tZmFpbGVkXCIsIHsgZXJyb3I6IHRvRXJyb3IoZXJyb3IpIH0pO1xuICAgIH1cbiAgICByZXR1cm4gW107XG4gIH1cbn1cblxuZnVuY3Rpb24gbGFzdEFzc2lzdGFudFJlc3BvbnNlKG1lc3NhZ2VMaXN0OiBNZXNzYWdlTGlzdCkge1xuICBjb25zdCBtZXNzYWdlcyA9IG1lc3NhZ2VMaXN0LmdldC5yZXNwb25zZS5kYigpO1xuICBmb3IgKGxldCBpbmRleCA9IG1lc3NhZ2VzLmxlbmd0aCAtIDE7IGluZGV4ID49IDA7IGluZGV4IC09IDEpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gbWVzc2FnZXNbaW5kZXhdO1xuICAgIGlmIChtZXNzYWdlPy5yb2xlID09PSBcImFzc2lzdGFudFwiKSByZXR1cm4gbWVzc2FnZTtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBwZXJzaXN0ZWRGb2xsb3dVcERhdGEobWVzc2FnZUxpc3Q6IE1lc3NhZ2VMaXN0KTogRm9sbG93VXBTdWdnZXN0aW9uc1BhcnREYXRhIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgbWVzc2FnZSA9IGxhc3RBc3Npc3RhbnRSZXNwb25zZShtZXNzYWdlTGlzdCk7XG4gIGlmICghbWVzc2FnZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgZm9yIChjb25zdCBwYXJ0IG9mIG1lc3NhZ2UuY29udGVudC5wYXJ0cykge1xuICAgIGlmIChwYXJ0LnR5cGUgIT09IEZPTExPV19VUF9TVUdHRVNUSU9OU19QQVJUX1RZUEUgfHwgIShcImRhdGFcIiBpbiBwYXJ0KSkgY29udGludWU7XG4gICAgY29uc3QgcGFyc2VkID0gRm9sbG93VXBTdWdnZXN0aW9uc1BhcnREYXRhU2NoZW1hLnNhZmVQYXJzZShwYXJ0LmRhdGEpO1xuICAgIGlmIChwYXJzZWQuc3VjY2VzcykgcmV0dXJuIHBhcnNlZC5kYXRhO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIHBlcnNpc3RGb2xsb3dVcERhdGEobWVzc2FnZUxpc3Q6IE1lc3NhZ2VMaXN0LCBkYXRhOiBGb2xsb3dVcFN1Z2dlc3Rpb25zUGFydERhdGEpOiB2b2lkIHtcbiAgY29uc3QgbWVzc2FnZSA9IGxhc3RBc3Npc3RhbnRSZXNwb25zZShtZXNzYWdlTGlzdCk7XG4gIGlmICghbWVzc2FnZSkgcmV0dXJuO1xuICBtZXNzYWdlTGlzdC5hZGQoXG4gICAge1xuICAgICAgaWQ6IG1lc3NhZ2UuaWQsXG4gICAgICByb2xlOiBcImFzc2lzdGFudFwiLFxuICAgICAgcGFydHM6IFt7IHR5cGU6IEZPTExPV19VUF9TVUdHRVNUSU9OU19QQVJUX1RZUEUsIGRhdGEgfV0sXG4gICAgfSxcbiAgICBcInJlc3BvbnNlXCIsXG4gICAgeyBtZXJnZTogdHJ1ZSB9LFxuICApO1xufVxuXG5mdW5jdGlvbiByZW1lbWJlckdlbmVyYXRlZFJ1blBhcnQocnVuSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCwgZGF0YTogRm9sbG93VXBTdWdnZXN0aW9uc1BhcnREYXRhKSB7XG4gIGlmICghcnVuSWQpIHJldHVybjtcbiAgZ2VuZXJhdGVkUnVuUGFydHMuc2V0KHJ1bklkLCBkYXRhKTtcbiAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IGdlbmVyYXRlZFJ1blBhcnRzLmRlbGV0ZShydW5JZCksIEdFTkVSQVRFRF9SVU5fUEFSVF9UVExfTVMpO1xuICB0aW1lci51bnJlZigpO1xufVxuXG4vKiogQnVpbGQgTWFzdHJhJ3MgZmluYWwgb3V0cHV0IHByb2Nlc3NvciBmb3IgY29uZmlndXJlZCBnZW5lcmF0ZWQgZm9sbG93LXVwcy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEZvbGxvd1VwU3VnZ2VzdGlvbnNQcm9jZXNzb3IoXG4gIGNvbmZpZzogTWFzdHJhUGx1Z2luQ29uZmlnLFxuICBzdWdnZXN0ZXI6IEZvbGxvd1VwU3VnZ2VzdGVyID0gc3VnZ2VzdEZvbGxvd1Vwcyxcbik6IE91dHB1dFByb2Nlc3NvciB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHNldHRpbmdzID0gcmVzb2x2ZUZvbGxvd1VwU3VnZ2VzdGlvbnNDb25maWcoY29uZmlnLmZvbGxvd1VwU3VnZ2VzdGlvbnMpO1xuICBpZiAoIXNldHRpbmdzIHx8IHNldHRpbmdzLm1vZGUgPT09IFwiZ2VuaWVcIikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIHtcbiAgICBpZDogXCJmb2xsb3ctdXAtc3VnZ2VzdGlvbnNcIixcbiAgICBhc3luYyBwcm9jZXNzT3V0cHV0UmVzdWx0KHtcbiAgICAgIHJlc3VsdCxcbiAgICAgIG1lc3NhZ2VMaXN0LFxuICAgICAgcmVxdWVzdENvbnRleHQsXG4gICAgICBhYm9ydFNpZ25hbCxcbiAgICB9KTogUHJvbWlzZTxNZXNzYWdlTGlzdD4ge1xuICAgICAgaWYgKCFyZXF1ZXN0Q29udGV4dCB8fCByZXN1bHQuZmluaXNoUmVhc29uID09PSBcImFib3J0XCIgfHwgcmVzdWx0LmZpbmlzaFJlYXNvbiA9PT0gXCJlcnJvclwiKSB7XG4gICAgICAgIHJldHVybiBtZXNzYWdlTGlzdDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJ1bklkVmFsdWUgPSByZXF1ZXN0Q29udGV4dC5nZXRSYXcoRk9MTE9XX1VQX1JVTl9JRF9LRVkpO1xuICAgICAgY29uc3QgcnVuSWQgPSB0eXBlb2YgcnVuSWRWYWx1ZSA9PT0gXCJzdHJpbmdcIiA/IHJ1bklkVmFsdWUgOiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBwZXJzaXN0ZWQgPSBwZXJzaXN0ZWRGb2xsb3dVcERhdGEobWVzc2FnZUxpc3QpO1xuICAgICAgaWYgKHBlcnNpc3RlZCkge1xuICAgICAgICByZW1lbWJlckdlbmVyYXRlZFJ1blBhcnQocnVuSWQsIHBlcnNpc3RlZCk7XG4gICAgICAgIHJldHVybiBtZXNzYWdlTGlzdDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFuc3dlciA9IHJlc3VsdC50ZXh0LnRyaW0oKTtcbiAgICAgIGNvbnN0IHVzZXJUZXh0ID0gcmVxdWVzdENvbnRleHQuZ2V0UmF3KEZPTExPV19VUF9VU0VSX1RFWFRfS0VZKTtcbiAgICAgIGlmICghYW5zd2VyIHx8IHR5cGVvZiB1c2VyVGV4dCAhPT0gXCJzdHJpbmdcIikgcmV0dXJuIG1lc3NhZ2VMaXN0O1xuICAgICAgY29uc3QgbmF0aXZlVmFsdWUgPSByZXF1ZXN0Q29udGV4dC5nZXRSYXcoRk9MTE9XX1VQX05BVElWRV9RVUVTVElPTlNfS0VZKTtcbiAgICAgIGNvbnN0IG5hdGl2ZVF1ZXN0aW9ucyA9XG4gICAgICAgIHNldHRpbmdzLm1vZGUgPT09IFwiYXV0b1wiICYmIEFycmF5LmlzQXJyYXkobmF0aXZlVmFsdWUpXG4gICAgICAgICAgPyBuYXRpdmVWYWx1ZS5maWx0ZXIoKHZhbHVlKTogdmFsdWUgaXMgc3RyaW5nID0+IHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIilcbiAgICAgICAgICA6IFtdO1xuICAgICAgY29uc3QgdHVybkNvbnRleHQgPSBzZXJpYWxpemVkVHVybkNvbnRleHQocmVzdWx0LnN0ZXBzKTtcbiAgICAgIGNvbnN0IHN1Z2dlc3Rpb25PcHRpb25zOiBTdWdnZXN0Rm9sbG93VXBzT3B0aW9ucyA9IHtcbiAgICAgICAgdXNlclRleHQsXG4gICAgICAgIGFuc3dlcixcbiAgICAgICAgLi4uKHR1cm5Db250ZXh0ID8geyB0dXJuQ29udGV4dCB9IDoge30pLFxuICAgICAgICAuLi4obmF0aXZlUXVlc3Rpb25zLmxlbmd0aCA+IDAgPyB7IG5hdGl2ZVF1ZXN0aW9ucyB9IDoge30pLFxuICAgICAgICByZXF1ZXN0Q29udGV4dCxcbiAgICAgICAgLi4uKGFib3J0U2lnbmFsID8geyBhYm9ydFNpZ25hbCB9IDoge30pLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHN1Z2dlc3RlZCA9IGF3YWl0IHN1Z2dlc3Rlcihjb25maWcsIHN1Z2dlc3Rpb25PcHRpb25zKTtcbiAgICAgIGNvbnN0IHF1ZXN0aW9ucyA9IGFjY2VwdGVkUXVlc3Rpb25zKHN1Z2dlc3RlZCwgc3VnZ2VzdGlvbk9wdGlvbnMsIHNldHRpbmdzLmxpbWl0KTtcbiAgICAgIGlmIChxdWVzdGlvbnMubGVuZ3RoID09PSAwKSByZXR1cm4gbWVzc2FnZUxpc3Q7XG4gICAgICBjb25zdCBkYXRhID0gRm9sbG93VXBTdWdnZXN0aW9uc1BhcnREYXRhU2NoZW1hLnBhcnNlKHtcbiAgICAgICAgcXVlc3Rpb25zLFxuICAgICAgICBzb3VyY2U6IFwibW9kZWxcIixcbiAgICAgIH0pO1xuICAgICAgcGVyc2lzdEZvbGxvd1VwRGF0YShtZXNzYWdlTGlzdCwgZGF0YSk7XG4gICAgICByZW1lbWJlckdlbmVyYXRlZFJ1blBhcnQocnVuSWQsIGRhdGEpO1xuICAgICAgcmV0dXJuIG1lc3NhZ2VMaXN0O1xuICAgIH0sXG4gIH07XG59XG5cbi8qKiBJbmplY3QgdGhlIHByb2Nlc3NvcidzIHBlcnNpc3RlZCBkYXRhIHBhcnQgYmVmb3JlIE1hc3RyYSdzIGZpbmlzaCBjaHVuay4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEZvbGxvd1VwU3VnZ2VzdGlvbnNUcmFuc2Zvcm0ocnVuSWQ6IHN0cmluZyk6IE1hc3RyYVN0cmVhbVRyYW5zZm9ybSB7XG4gIHJldHVybiAoKSA9PlxuICAgIG5ldyBUcmFuc2Zvcm1TdHJlYW0oe1xuICAgICAgdHJhbnNmb3JtKGNodW5rLCBjb250cm9sbGVyKSB7XG4gICAgICAgIGlmIChjaHVuay50eXBlID09PSBcImZpbmlzaFwiKSB7XG4gICAgICAgICAgY29uc3QgZGF0YSA9IGdlbmVyYXRlZFJ1blBhcnRzLmdldChydW5JZCk7XG4gICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnQ6IERhdGFDaHVua1R5cGUgPSB7XG4gICAgICAgICAgICAgIHR5cGU6IEZPTExPV19VUF9TVUdHRVNUSU9OU19QQVJUX1RZUEUsXG4gICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKHBhcnQgYXMgbmV2ZXIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb250cm9sbGVyLmVucXVldWUoY2h1bmspO1xuICAgICAgfSxcbiAgICB9KTtcbn1cblxuLyoqIEJ1aWxkIHRoZSBvcHRpb25hbCBleHBsaWNpdGx5IGNhbGxhYmxlIGZvbGxvdy11cCBzdWdnZXN0aW9uIHRvb2wuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRTdWdnZXN0Rm9sbG93VXBzVG9vbChjb25maWc6IE1hc3RyYVBsdWdpbkNvbmZpZykge1xuICByZXR1cm4gY3JlYXRlVG9vbCh7XG4gICAgaWQ6IFwic3VnZ2VzdF9mb2xsb3dfdXBzXCIsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICBcIkdlbmVyYXRlIGEgc2hvcnQgbGlzdCBvZiBncm91bmRlZCBmb2xsb3ctdXAgcXVlc3Rpb25zIGZvciBhIGNvbXBsZXRlZCB1c2VyIG1lc3NhZ2UgYW5kIGFuc3dlci5cIixcbiAgICBpbnB1dFNjaGVtYTogRm9sbG93VXBUb29sSW5wdXRTY2hlbWEsXG4gICAgb3V0cHV0U2NoZW1hOiBGb2xsb3dVcE91dHB1dFNjaGVtYSxcbiAgICBleGVjdXRlOiBhc3luYyAoaW5wdXQsIGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IEZvbGxvd1VwVG9vbElucHV0U2NoZW1hLnBhcnNlKGlucHV0KTtcbiAgICAgIGNvbnN0IHF1ZXN0aW9ucyA9IGF3YWl0IHN1Z2dlc3RGb2xsb3dVcHMoY29uZmlnLCB7XG4gICAgICAgIHVzZXJUZXh0OiB2YWx1ZXMudXNlclRleHQsXG4gICAgICAgIGFuc3dlcjogdmFsdWVzLmFuc3dlcixcbiAgICAgICAgLi4uKHZhbHVlcy50dXJuQ29udGV4dCA/IHsgdHVybkNvbnRleHQ6IHZhbHVlcy50dXJuQ29udGV4dCB9IDoge30pLFxuICAgICAgICAuLi4odmFsdWVzLm5hdGl2ZVF1ZXN0aW9ucyA/IHsgbmF0aXZlUXVlc3Rpb25zOiB2YWx1ZXMubmF0aXZlUXVlc3Rpb25zIH0gOiB7fSksXG4gICAgICAgIC4uLihjb250ZXh0Py5yZXF1ZXN0Q29udGV4dCA/IHsgcmVxdWVzdENvbnRleHQ6IGNvbnRleHQucmVxdWVzdENvbnRleHQgfSA6IHt9KSxcbiAgICAgICAgLi4uKGNvbnRleHQ/LmFib3J0U2lnbmFsID8geyBhYm9ydFNpZ25hbDogY29udGV4dC5hYm9ydFNpZ25hbCB9IDoge30pLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4geyBxdWVzdGlvbnMgfTtcbiAgICB9LFxuICB9KTtcbn1cbiJdfQ==
|