@cartanova/qgrid-cli 2.0.3 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundle/dist/application/qgrid/qgrid.frame.js +33 -24
- package/bundle/dist/application/request-log/request-log.model.js +1 -1
- package/bundle/dist/utils/providers/common/model-cost.js +6 -1
- package/bundle/dist/utils/providers/openai/codex-worker.js +25 -3
- package/bundle/src/application/qgrid/qgrid.frame.ts +42 -26
- package/bundle/src/application/request-log/request-log.model.ts +1 -3
- package/bundle/src/utils/providers/common/model-cost.ts +1 -0
- package/bundle/src/utils/providers/openai/codex-worker.ts +35 -2
- package/package.json +1 -1
|
@@ -62,30 +62,37 @@ var QgridFrameClass = class extends BaseFrameClass {
|
|
|
62
62
|
}
|
|
63
63
|
}
|
|
64
64
|
const result = await QgridDispatcher.query(args, args.timeout);
|
|
65
|
-
if (effectiveLogMode === "auto")
|
|
66
|
-
const toolCallCount = result.content.filter((item) => item.type === "tool-call").length;
|
|
67
|
-
const responseText = result.content.filter((item) => item.type === "text").map((item) => item.text).join("\n");
|
|
68
|
-
RequestLogModel.save([{
|
|
69
|
-
token_name: result.tokenName,
|
|
70
|
-
project_name: args.projectName?.length ? args.projectName : null,
|
|
71
|
-
model_name: result.model ?? null,
|
|
72
|
-
user_prompt: args.prompt,
|
|
73
|
-
system_prompt: args.system ?? null,
|
|
74
|
-
response: responseText,
|
|
75
|
-
input_tokens: result.usage.input_tokens,
|
|
76
|
-
output_tokens: result.usage.output_tokens,
|
|
77
|
-
cache_read_tokens: result.usage.cache_read_input_tokens,
|
|
78
|
-
cache_creation_tokens: result.usage.cache_creation_input_tokens,
|
|
79
|
-
duration_ms: result.durationMs,
|
|
80
|
-
cost_usd: result.costUsd !== null ? Math.round(result.costUsd * MICRO_USD) : null,
|
|
81
|
-
effort: args.effort ?? null,
|
|
82
|
-
history: args.history ? JSON.parse(args.history) : null,
|
|
83
|
-
status: "succeeded",
|
|
84
|
-
tool_call_count: toolCallCount
|
|
85
|
-
}]).catch((e) => logger.error(`requestLog save failed: ${e.message}`));
|
|
86
|
-
}
|
|
65
|
+
if (effectiveLogMode === "auto") this.saveAutoRequestLog(args, result);
|
|
87
66
|
return result;
|
|
88
67
|
}
|
|
68
|
+
saveAutoRequestLog(args, result) {
|
|
69
|
+
const toolCallCount = result.content.filter((item) => item.type === "tool-call").length;
|
|
70
|
+
const responseText = result.content.filter((item) => item.type === "text").map((item) => item.text).join("\n");
|
|
71
|
+
RequestLogModel.save([{
|
|
72
|
+
token_name: result.tokenName,
|
|
73
|
+
project_name: args.projectName?.length ? args.projectName : null,
|
|
74
|
+
model_name: result.model ?? null,
|
|
75
|
+
user_prompt: args.prompt,
|
|
76
|
+
system_prompt: args.system ?? null,
|
|
77
|
+
response: responseText,
|
|
78
|
+
input_tokens: result.usage.input_tokens,
|
|
79
|
+
output_tokens: result.usage.output_tokens,
|
|
80
|
+
cache_read_tokens: result.usage.cache_read_input_tokens,
|
|
81
|
+
cache_creation_tokens: result.usage.cache_creation_input_tokens,
|
|
82
|
+
duration_ms: result.durationMs,
|
|
83
|
+
cost_usd: result.costUsd !== null ? Math.round(result.costUsd * MICRO_USD) : null,
|
|
84
|
+
effort: args.effort ?? null,
|
|
85
|
+
history: (() => {
|
|
86
|
+
try {
|
|
87
|
+
return args.history ? JSON.parse(args.history) : null;
|
|
88
|
+
} catch {
|
|
89
|
+
return null;
|
|
90
|
+
}
|
|
91
|
+
})(),
|
|
92
|
+
status: "succeeded",
|
|
93
|
+
tool_call_count: toolCallCount
|
|
94
|
+
}]).catch((e) => logger.error(`requestLog save failed: ${e.message}`));
|
|
95
|
+
}
|
|
89
96
|
async prepareStream(args) {
|
|
90
97
|
const streamId = crypto.randomUUID();
|
|
91
98
|
pendingStreams.set(streamId, args);
|
|
@@ -96,7 +103,8 @@ var QgridFrameClass = class extends BaseFrameClass {
|
|
|
96
103
|
const args = pendingStreams.get(streamId);
|
|
97
104
|
pendingStreams.delete(streamId);
|
|
98
105
|
if (!args) throw new Error("invalid or expired streamId");
|
|
99
|
-
const
|
|
106
|
+
const effectiveLogMode = args.logMode ?? (args.isStep ? "run" : "auto");
|
|
107
|
+
const shouldLog = effectiveLogMode === "run";
|
|
100
108
|
let runInfo;
|
|
101
109
|
if (shouldLog) try {
|
|
102
110
|
runInfo = await beforeQuery(args);
|
|
@@ -141,6 +149,7 @@ var QgridFrameClass = class extends BaseFrameClass {
|
|
|
141
149
|
} catch (e) {
|
|
142
150
|
logger.error(`stream afterQuery failed: ${e.message}`);
|
|
143
151
|
}
|
|
152
|
+
else if (effectiveLogMode === "auto") this.saveAutoRequestLog(args, streamResult);
|
|
144
153
|
if (!sse.closed) sse.publish("done", {
|
|
145
154
|
...streamResult,
|
|
146
155
|
runContext
|
|
@@ -553,4 +562,4 @@ function convertAnthropicUsage(raw) {
|
|
|
553
562
|
//#endregion
|
|
554
563
|
export { QgridFrame };
|
|
555
564
|
|
|
556
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicWdyaWQuZnJhbWUuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL3FncmlkL3FncmlkLmZyYW1lLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjcnlwdG8gZnJvbSBcIm5vZGU6Y3J5cHRvXCI7XG5cbmltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gXCJAbG9ndGFwZS9sb2d0YXBlXCI7XG5pbXBvcnQgeyB0eXBlIEZhc3RpZnlSZXBseSB9IGZyb20gXCJmYXN0aWZ5XCI7XG5pbXBvcnQgeyBhcGksIEJhc2VGcmFtZUNsYXNzLCBTb25hbXUsIHN0cmVhbSB9IGZyb20gXCJzb25hbXVcIjtcbmltcG9ydCB7IGdldENhY2hlTWFuYWdlclJlZiB9IGZyb20gXCJzb25hbXUvY2FjaGVcIjtcblxuaW1wb3J0IHtcbiAgZ2V0QWNjZXNzVG9rZW4sXG4gIGdldEV4cGlyZXNBdCxcbiAgZ2V0UmVmcmVzaFRva2VuLFxufSBmcm9tIFwiLi4vLi4vdXRpbHMvcHJvdmlkZXJzL2NvbW1vbi9jcmVkZW50aWFsc1wiO1xuaW1wb3J0IHsgTUlDUk9fVVNELCBSZXF1ZXN0TG9nTW9kZWwgfSBmcm9tIFwiLi4vcmVxdWVzdC1sb2cvcmVxdWVzdC1sb2cubW9kZWxcIjtcbmltcG9ydCB7IHR5cGUgVG9rZW5TdWJzZXRBIH0gZnJvbSBcIi4uL3NvbmFtdS5nZW5lcmF0ZWRcIjtcbmltcG9ydCB7IFRva2VuTW9kZWwgfSBmcm9tIFwiLi4vdG9rZW4vdG9rZW4ubW9kZWxcIjtcbmltcG9ydCB7IFRva2VuQ3JlZGVudGlhbHMgfSBmcm9tIFwiLi4vdG9rZW4vdG9rZW4udHlwZXNcIjtcbmltcG9ydCB7XG4gIHR5cGUgQW50aHJvcGljVXNhZ2VSYXcsXG4gIGJ1aWxkQXV0aFVybCxcbiAgZXhjaGFuZ2VDb2RlRm9yVG9rZW5zLFxuICBmZXRjaFVzYWdlLFxuICBnZW5lcmF0ZVBLQ0UsXG4gIHJlZnJlc2hBY2Nlc3NUb2tlbixcbn0gZnJvbSBcIi4vb2F1dGhcIjtcbmltcG9ydCB7XG4gIGFmdGVyUXVlcnksXG4gIGJlZm9yZVF1ZXJ5LFxuICBmaW5pc2hSdW5BYm9ydGVkLFxuICBmaW5pc2hSdW5XaXRoRXJyb3IsXG59IGZyb20gXCIuL3FncmlkLXJ1bi1saWZlY3ljbGVcIjtcbmltcG9ydCB7IFFncmlkRGlzcGF0Y2hlciB9IGZyb20gXCIuL3FncmlkLmRpc3BhdGNoZXJcIjtcbmltcG9ydCB7XG4gIHR5cGUgUXVlcnlJbnB1dCxcbiAgdHlwZSBBcHBlbmRTdGVwSW5wdXQsXG4gIHR5cGUgQ3JlYXRlUnVuSW5wdXQsXG4gIHR5cGUgRmluaXNoUnVuSW5wdXQsXG4gIHR5cGUgSGVhbHRoUmVzcG9uc2UsXG4gIHR5cGUgT0F1dGhTdGFydFJlc3VsdCxcbiAgdHlwZSBRdWVyeU91dHB1dCxcbiAgU3RyZWFtRXZlbnRzLFxuICB0eXBlIFRva2VuU3RhdHMsXG4gIHR5cGUgVXNhZ2VSZXNwb25zZSxcbn0gZnJvbSBcIi4vcWdyaWQudHlwZXNcIjtcblxuY29uc3QgcGVuZGluZ1N0cmVhbXMgPSBuZXcgTWFwPHN0cmluZywgUXVlcnlJbnB1dD4oKTtcblxudHlwZSBQZW5kaW5nT0F1dGggPSB7IGNvZGVWZXJpZmllcjogc3RyaW5nOyBuYW1lOiBzdHJpbmc7IHJlZGlyZWN0VXJpOiBzdHJpbmcgfTtcbmNvbnN0IE9BVVRIX1NUQVRFX1BSRUZJWCA9IFwib2F1dGg6c3RhdGU6XCI7XG5jb25zdCBPQVVUSF9TVEFURV9UVEwgPSBcIjVtXCI7XG5cbmFzeW5jIGZ1bmN0aW9uIHNldE9BdXRoU3RhdGUoc3RhdGU6IHN0cmluZywgZGF0YTogUGVuZGluZ09BdXRoKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGNhY2hlID0gZ2V0Q2FjaGVNYW5hZ2VyUmVmKCk7XG4gIGlmICghY2FjaGUpIHRocm93IG5ldyBFcnJvcihcIkNhY2hlTWFuYWdlciBub3QgaW5pdGlhbGl6ZWRcIik7XG4gIGF3YWl0IGNhY2hlLnNldCh7XG4gICAga2V5OiBgJHtPQVVUSF9TVEFURV9QUkVGSVh9JHtzdGF0ZX1gLFxuICAgIHZhbHVlOiBKU09OLnN0cmluZ2lmeShkYXRhKSxcbiAgICB0dGw6IE9BVVRIX1NUQVRFX1RUTCxcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldE9BdXRoU3RhdGUoc3RhdGU6IHN0cmluZyk6IFByb21pc2U8UGVuZGluZ09BdXRoIHwgdW5kZWZpbmVkPiB7XG4gIGNvbnN0IGNhY2hlID0gZ2V0Q2FjaGVNYW5hZ2VyUmVmKCk7XG4gIGlmICghY2FjaGUpIHRocm93IG5ldyBFcnJvcihcIkNhY2hlTWFuYWdlciBub3QgaW5pdGlhbGl6ZWRcIik7XG4gIGNvbnN0IHJhdyA9IGF3YWl0IGNhY2hlLmdldDxzdHJpbmc+KHsga2V5OiBgJHtPQVVUSF9TVEFURV9QUkVGSVh9JHtzdGF0ZX1gIH0pO1xuICBpZiAoIXJhdykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIEpTT04ucGFyc2UocmF3KSBhcyBQZW5kaW5nT0F1dGg7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGRlbGV0ZU9BdXRoU3RhdGUoc3RhdGU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBjYWNoZSA9IGdldENhY2hlTWFuYWdlclJlZigpO1xuICBpZiAoIWNhY2hlKSByZXR1cm47XG4gIGF3YWl0IGNhY2hlLmRlbGV0ZSh7IGtleTogYCR7T0FVVEhfU1RBVEVfUFJFRklYfSR7c3RhdGV9YCB9KTtcbn1cblxuY29uc3QgbG9nZ2VyID0gZ2V0TG9nZ2VyKFtcInFncmlkXCJdKTtcbmNvbnN0IG9hdXRoTG9nZ2VyID0gZ2V0TG9nZ2VyKFtcInFncmlkXCIsIFwib2F1dGhcIl0pO1xuXG5jbGFzcyBRZ3JpZEZyYW1lQ2xhc3MgZXh0ZW5kcyBCYXNlRnJhbWVDbGFzcyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwiUWdyaWRcIik7XG4gIH1cblxuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJQT1NUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stbXV0YXRpb25cIl0gfSlcbiAgYXN5bmMgcXVlcnkoYXJnczogUXVlcnlJbnB1dCk6IFByb21pc2U8UXVlcnlPdXRwdXQ+IHtcbiAgICBjb25zdCBlZmZlY3RpdmVMb2dNb2RlID0gYXJncy5sb2dNb2RlID8/IChhcmdzLmlzU3RlcCA/IFwicnVuXCIgOiBcImF1dG9cIik7XG5cbiAgICAvLyBsb2dNb2RlOiBcInJ1blwiIOKGkiDshJzrsoTqsIAgbGlmZWN5Y2xlIOq0gOumrFxuICAgIGlmIChlZmZlY3RpdmVMb2dNb2RlID09PSBcInJ1blwiKSB7XG4gICAgICBjb25zdCB7IHJlcXVlc3RMb2dJZCwgc3RlcEluZGV4IH0gPSBhd2FpdCBiZWZvcmVRdWVyeShhcmdzKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFFncmlkRGlzcGF0Y2hlci5xdWVyeShhcmdzLCBhcmdzLnRpbWVvdXQpO1xuICAgICAgICBjb25zdCBsaWZlY3ljbGUgPSBhd2FpdCBhZnRlclF1ZXJ5KHJlcXVlc3RMb2dJZCwgc3RlcEluZGV4LCBhcmdzLCByZXN1bHQpO1xuICAgICAgICByZXR1cm4geyAuLi5yZXN1bHQsIHJ1bkNvbnRleHQ6IGxpZmVjeWNsZS5ydW5Db250ZXh0IH07XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGF3YWl0IGZpbmlzaFJ1bldpdGhFcnJvcihyZXF1ZXN0TG9nSWQsIChlIGFzIEVycm9yKS5tZXNzYWdlLCBhcmdzKTtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBsb2dNb2RlOiBcImF1dG9cIiAo6riw7KG0IG5vbi1zdGVwIOqyveuhnCkg65iQ64qUIFwibm9uZVwiXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgUWdyaWREaXNwYXRjaGVyLnF1ZXJ5KGFyZ3MsIGFyZ3MudGltZW91dCk7XG5cbiAgICBpZiAoZWZmZWN0aXZlTG9nTW9kZSA9PT0gXCJhdXRvXCIpIHtcbiAgICAgIGNvbnN0IHRvb2xDYWxsQ291bnQgPSByZXN1bHQuY29udGVudC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0udHlwZSA9PT0gXCJ0b29sLWNhbGxcIikubGVuZ3RoO1xuICAgICAgY29uc3QgcmVzcG9uc2VUZXh0ID0gcmVzdWx0LmNvbnRlbnRcbiAgICAgICAgLmZpbHRlcigoaXRlbSkgPT4gaXRlbS50eXBlID09PSBcInRleHRcIilcbiAgICAgICAgLm1hcCgoaXRlbSkgPT4gaXRlbS50ZXh0KVxuICAgICAgICAuam9pbihcIlxcblwiKTtcblxuICAgICAgUmVxdWVzdExvZ01vZGVsLnNhdmUoW1xuICAgICAgICB7XG4gICAgICAgICAgdG9rZW5fbmFtZTogcmVzdWx0LnRva2VuTmFtZSxcbiAgICAgICAgICBwcm9qZWN0X25hbWU6IGFyZ3MucHJvamVjdE5hbWU/Lmxlbmd0aCA/IGFyZ3MucHJvamVjdE5hbWUgOiBudWxsLFxuICAgICAgICAgIG1vZGVsX25hbWU6IHJlc3VsdC5tb2RlbCA/PyBudWxsLFxuICAgICAgICAgIHVzZXJfcHJvbXB0OiBhcmdzLnByb21wdCxcbiAgICAgICAgICBzeXN0ZW1fcHJvbXB0OiBhcmdzLnN5c3RlbSA/PyBudWxsLFxuICAgICAgICAgIHJlc3BvbnNlOiByZXNwb25zZVRleHQsXG4gICAgICAgICAgaW5wdXRfdG9rZW5zOiByZXN1bHQudXNhZ2UuaW5wdXRfdG9rZW5zLFxuICAgICAgICAgIG91dHB1dF90b2tlbnM6IHJlc3VsdC51c2FnZS5vdXRwdXRfdG9rZW5zLFxuICAgICAgICAgIGNhY2hlX3JlYWRfdG9rZW5zOiByZXN1bHQudXNhZ2UuY2FjaGVfcmVhZF9pbnB1dF90b2tlbnMsXG4gICAgICAgICAgY2FjaGVfY3JlYXRpb25fdG9rZW5zOiByZXN1bHQudXNhZ2UuY2FjaGVfY3JlYXRpb25faW5wdXRfdG9rZW5zLFxuICAgICAgICAgIGR1cmF0aW9uX21zOiByZXN1bHQuZHVyYXRpb25NcyxcbiAgICAgICAgICBjb3N0X3VzZDogcmVzdWx0LmNvc3RVc2QgIT09IG51bGwgPyBNYXRoLnJvdW5kKHJlc3VsdC5jb3N0VXNkICogTUlDUk9fVVNEKSA6IG51bGwsXG4gICAgICAgICAgZWZmb3J0OiBhcmdzLmVmZm9ydCA/PyBudWxsLFxuICAgICAgICAgIGhpc3Rvcnk6IGFyZ3MuaGlzdG9yeSA/IEpTT04ucGFyc2UoYXJncy5oaXN0b3J5KSA6IG51bGwsXG4gICAgICAgICAgc3RhdHVzOiBcInN1Y2NlZWRlZFwiLFxuICAgICAgICAgIHRvb2xfY2FsbF9jb3VudDogdG9vbENhbGxDb3VudCxcbiAgICAgICAgfSxcbiAgICAgIF0pLmNhdGNoKChlKSA9PiBsb2dnZXIuZXJyb3IoYHJlcXVlc3RMb2cgc2F2ZSBmYWlsZWQ6ICR7KGUgYXMgRXJyb3IpLm1lc3NhZ2V9YCkpO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJQT1NUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stbXV0YXRpb25cIl0gfSlcbiAgYXN5bmMgcHJlcGFyZVN0cmVhbShhcmdzOiBRdWVyeUlucHV0KTogUHJvbWlzZTx7IHN0cmVhbUlkOiBzdHJpbmcgfT4ge1xuICAgIGNvbnN0IHN0cmVhbUlkID0gY3J5cHRvLnJhbmRvbVVVSUQoKTtcbiAgICBwZW5kaW5nU3RyZWFtcy5zZXQoc3RyZWFtSWQsIGFyZ3MpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4gcGVuZGluZ1N0cmVhbXMuZGVsZXRlKHN0cmVhbUlkKSwgMzBfMDAwKTtcbiAgICByZXR1cm4geyBzdHJlYW1JZCB9O1xuICB9XG5cbiAgQHN0cmVhbSh7IHR5cGU6IFwic3NlXCIsIGV2ZW50czogU3RyZWFtRXZlbnRzIH0pXG4gIGFzeW5jIHF1ZXJ5U3RyZWFtKHN0cmVhbUlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBhcmdzID0gcGVuZGluZ1N0cmVhbXMuZ2V0KHN0cmVhbUlkKTtcbiAgICBwZW5kaW5nU3RyZWFtcy5kZWxldGUoc3RyZWFtSWQpO1xuICAgIGlmICghYXJncykgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBvciBleHBpcmVkIHN0cmVhbUlkXCIpO1xuXG4gICAgY29uc3QgZWZmZWN0aXZlTG9nTW9kZSA9IGFyZ3MubG9nTW9kZSA/PyAoYXJncy5pc1N0ZXAgPyBcInJ1blwiIDogXCJhdXRvXCIpO1xuICAgIGNvbnN0IHNob3VsZExvZyA9IGVmZmVjdGl2ZUxvZ01vZGUgPT09IFwicnVuXCI7XG5cbiAgICBsZXQgcnVuSW5mbzogeyByZXF1ZXN0TG9nSWQ6IG51bWJlcjsgc3RlcEluZGV4OiBudW1iZXIgfSB8IHVuZGVmaW5lZDtcbiAgICBpZiAoc2hvdWxkTG9nKSB7XG4gICAgICB0cnkge1xuICAgICAgICBydW5JbmZvID0gYXdhaXQgYmVmb3JlUXVlcnkoYXJncyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcihgc3RyZWFtIGJlZm9yZVF1ZXJ5IGZhaWxlZDogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjdHggPSBTb25hbXUuZ2V0Q29udGV4dCgpO1xuICAgIGNvbnN0IHNzZSA9IGN0eC5jcmVhdGVTU0UoU3RyZWFtRXZlbnRzKTtcbiAgICBsZXQgdGhyZWFkSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBsZXQgdHVybklkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgbGV0IHN0cmVhbVJlc3VsdDogUXVlcnlPdXRwdXQgfCB1bmRlZmluZWQ7XG4gICAgbGV0IHN0cmVhbUVycm9yOiBFcnJvciB8IHVuZGVmaW5lZDtcblxuICAgIHNzZS5vbkNsb3NlKCgpID0+IHtcbiAgICAgIGlmICh0aHJlYWRJZCAmJiB0dXJuSWQpIHtcbiAgICAgICAgUWdyaWREaXNwYXRjaGVyLm9wZW5haURpc3BhdGNoZXI/LmludGVycnVwdFdvcmtlclR1cm4odGhyZWFkSWQsIHR1cm5JZCkuY2F0Y2goKCkgPT4ge30pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IFFncmlkRGlzcGF0Y2hlci5xdWVyeVN0cmVhbShhcmdzLCB7XG4gICAgICAgIG9uRGVsdGE6ICh0ZXh0KSA9PiB7XG4gICAgICAgICAgaWYgKCFzc2UuY2xvc2VkKSBzc2UucHVibGlzaChcImRlbHRhXCIsIHsgdGV4dCB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgb25UaHJlYWRJZDogKGlkKSA9PiB7XG4gICAgICAgICAgdGhyZWFkSWQgPSBpZDtcbiAgICAgICAgICBpZiAoc3NlLmNsb3NlZCAmJiB0dXJuSWQpIHtcbiAgICAgICAgICAgIFFncmlkRGlzcGF0Y2hlci5vcGVuYWlEaXNwYXRjaGVyPy5pbnRlcnJ1cHRXb3JrZXJUdXJuKHRocmVhZElkLCB0dXJuSWQpLmNhdGNoKCgpID0+IHt9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG9uVHVybklkOiAoaWQpID0+IHtcbiAgICAgICAgICB0dXJuSWQgPSBpZDtcbiAgICAgICAgICBpZiAoc3NlLmNsb3NlZCAmJiB0aHJlYWRJZCkge1xuICAgICAgICAgICAgUWdyaWREaXNwYXRjaGVyLm9wZW5haURpc3BhdGNoZXI/LmludGVycnVwdFdvcmtlclR1cm4odGhyZWFkSWQsIHR1cm5JZCkuY2F0Y2goKCkgPT4ge30pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgb25Db21wbGV0ZTogKHJlc3VsdCkgPT4ge1xuICAgICAgICAgIHN0cmVhbVJlc3VsdCA9IHJlc3VsdDtcbiAgICAgICAgfSxcbiAgICAgICAgb25FcnJvcjogKGVycikgPT4ge1xuICAgICAgICAgIHN0cmVhbUVycm9yID0gZXJyO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgc3RyZWFtRXJyb3IgPSBlIGFzIEVycm9yO1xuICAgIH1cblxuICAgIC8vIGRpc3BhdGNoZXIg7JmE66OMIO2bhCBsaWZlY3ljbGUg7LKY66asIChhd2FpdCDslYjsoIQpXG4gICAgaWYgKHN0cmVhbVJlc3VsdCkge1xuICAgICAgbGV0IHJ1bkNvbnRleHQ6IHsgcmVxdWVzdExvZ0lkOiBudW1iZXIgfSB8IHVuZGVmaW5lZDtcbiAgICAgIGlmIChydW5JbmZvKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgbGlmZWN5Y2xlID0gYXdhaXQgYWZ0ZXJRdWVyeShcbiAgICAgICAgICAgIHJ1bkluZm8ucmVxdWVzdExvZ0lkLFxuICAgICAgICAgICAgcnVuSW5mby5zdGVwSW5kZXgsXG4gICAgICAgICAgICBhcmdzLFxuICAgICAgICAgICAgc3RyZWFtUmVzdWx0LFxuICAgICAgICAgICk7XG4gICAgICAgICAgcnVuQ29udGV4dCA9IGxpZmVjeWNsZS5ydW5Db250ZXh0O1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgbG9nZ2VyLmVycm9yKGBzdHJlYW0gYWZ0ZXJRdWVyeSBmYWlsZWQ6ICR7KGUgYXMgRXJyb3IpLm1lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghc3NlLmNsb3NlZCkgc3NlLnB1Ymxpc2goXCJkb25lXCIsIHsgLi4uc3RyZWFtUmVzdWx0LCBydW5Db250ZXh0IH0pO1xuICAgIH0gZWxzZSBpZiAoc3RyZWFtRXJyb3IpIHtcbiAgICAgIGlmIChydW5JbmZvKSBhd2FpdCBmaW5pc2hSdW5XaXRoRXJyb3IocnVuSW5mby5yZXF1ZXN0TG9nSWQsIHN0cmVhbUVycm9yLm1lc3NhZ2UsIGFyZ3MpO1xuICAgICAgaWYgKCFzc2UuY2xvc2VkKSBzc2UucHVibGlzaChcImVycm9yXCIsIHsgbWVzc2FnZTogc3RyZWFtRXJyb3IubWVzc2FnZSB9KTtcbiAgICB9IGVsc2UgaWYgKHNzZS5jbG9zZWQgJiYgcnVuSW5mbykge1xuICAgICAgYXdhaXQgZmluaXNoUnVuQWJvcnRlZChydW5JbmZvLnJlcXVlc3RMb2dJZCwgYXJncyk7XG4gICAgfVxuXG4gICAgYXdhaXQgc3NlLmVuZCgpO1xuICB9XG5cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiUE9TVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLW11dGF0aW9uXCJdIH0pXG4gIGFzeW5jIGNyZWF0ZVJ1bihpbnB1dDogQ3JlYXRlUnVuSW5wdXQpOiBQcm9taXNlPHsgcmVxdWVzdExvZ0lkOiBudW1iZXIgfT4ge1xuICAgIGNvbnN0IHJlcXVlc3RMb2dJZCA9IGF3YWl0IFJlcXVlc3RMb2dNb2RlbC5jcmVhdGVSdW4oe1xuICAgICAgdXNlcl9wcm9tcHQ6IGlucHV0LnVzZXJQcm9tcHQsXG4gICAgICBtb2RlbF9uYW1lOiBpbnB1dC5tb2RlbE5hbWUsXG4gICAgICBlZmZvcnQ6IGlucHV0LmVmZm9ydCxcbiAgICAgIHByb2plY3RfbmFtZTogaW5wdXQucHJvamVjdE5hbWUsXG4gICAgICBzeXN0ZW1fcHJvbXB0OiBpbnB1dC5zeXN0ZW1Qcm9tcHQsXG4gICAgICBoaXN0b3J5OiBpbnB1dC5oaXN0b3J5ID8gSlNPTi5wYXJzZShpbnB1dC5oaXN0b3J5KSA6IHVuZGVmaW5lZCxcbiAgICB9KTtcbiAgICByZXR1cm4geyByZXF1ZXN0TG9nSWQgfTtcbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIlBPU1RcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1tdXRhdGlvblwiXSB9KVxuICBhc3luYyBhcHBlbmRTdGVwKGlucHV0OiBBcHBlbmRTdGVwSW5wdXQpOiBQcm9taXNlPHsgc3RlcElkOiBudW1iZXIgfT4ge1xuICAgIGNvbnN0IHN0ZXBJZCA9IGF3YWl0IFJlcXVlc3RMb2dNb2RlbC5hcHBlbmRTdGVwKGlucHV0LnJlcXVlc3RMb2dJZCwge1xuICAgICAgc3RlcF9pbmRleDogaW5wdXQuc3RlcEluZGV4LFxuICAgICAgdHlwZTogaW5wdXQudHlwZSxcbiAgICAgIGlucHV0X3Rva2VuczogaW5wdXQuaW5wdXRUb2tlbnMsXG4gICAgICBvdXRwdXRfdG9rZW5zOiBpbnB1dC5vdXRwdXRUb2tlbnMsXG4gICAgICBjYWNoZV9yZWFkX3Rva2VuczogaW5wdXQuY2FjaGVSZWFkVG9rZW5zLFxuICAgICAgY2FjaGVfY3JlYXRpb25fdG9rZW5zOiBpbnB1dC5jYWNoZUNyZWF0aW9uVG9rZW5zLFxuICAgICAgZHVyYXRpb25fbXM6IGlucHV0LmR1cmF0aW9uTXMsXG4gICAgICBmaW5pc2hfcmVhc29uOiBpbnB1dC5maW5pc2hSZWFzb24sXG4gICAgICByZWFzb25pbmdfdGV4dDogaW5wdXQucmVhc29uaW5nVGV4dCxcbiAgICAgIHJlYXNvbmluZ190b2tlbnM6IGlucHV0LnJlYXNvbmluZ1Rva2VucyxcbiAgICAgIHRvb2xfY2FsbF9pbmRleDogaW5wdXQudG9vbENhbGxJbmRleCxcbiAgICAgIHRvb2xfY2FsbF9pZDogaW5wdXQudG9vbENhbGxJZCxcbiAgICAgIHRvb2xfbmFtZTogaW5wdXQudG9vbE5hbWUsXG4gICAgICB0b29sX2FyZ3M6IGlucHV0LnRvb2xBcmdzLFxuICAgICAgdG9vbF9yZXN1bHQ6IGlucHV0LnRvb2xSZXN1bHQsXG4gICAgICB0b29sX2R1cmF0aW9uX21zOiBpbnB1dC50b29sRHVyYXRpb25NcyxcbiAgICAgIGVycm9yOiBpbnB1dC5lcnJvcixcbiAgICB9KTtcbiAgICByZXR1cm4geyBzdGVwSWQgfTtcbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIlBPU1RcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1tdXRhdGlvblwiXSB9KVxuICBhc3luYyBmaW5pc2hSdW4oaW5wdXQ6IEZpbmlzaFJ1bklucHV0KTogUHJvbWlzZTx7IG9rOiBib29sZWFuIH0+IHtcbiAgICBhd2FpdCBSZXF1ZXN0TG9nTW9kZWwuZmluaXNoUnVuKGlucHV0LnJlcXVlc3RMb2dJZCwge1xuICAgICAgc3RhdHVzOiBpbnB1dC5zdGF0dXMsXG4gICAgICByZXNwb25zZTogaW5wdXQucmVzcG9uc2UsXG4gICAgICB0b2tlbl9uYW1lOiBpbnB1dC50b2tlbk5hbWUsXG4gICAgICBpbnB1dF90b2tlbnM6IGlucHV0LnRvdGFsSW5wdXRUb2tlbnMsXG4gICAgICBvdXRwdXRfdG9rZW5zOiBpbnB1dC50b3RhbE91dHB1dFRva2VucyxcbiAgICAgIGNhY2hlX3JlYWRfdG9rZW5zOiBpbnB1dC50b3RhbENhY2hlUmVhZFRva2VucyxcbiAgICAgIGNhY2hlX2NyZWF0aW9uX3Rva2VuczogaW5wdXQudG90YWxDYWNoZUNyZWF0aW9uVG9rZW5zLFxuICAgICAgZHVyYXRpb25fbXM6IGlucHV0LnRvdGFsRHVyYXRpb25NcyxcbiAgICAgIGhpc3Rvcnk6IGlucHV0Lmhpc3RvcnkgPyBKU09OLnBhcnNlKGlucHV0Lmhpc3RvcnkpIDogdW5kZWZpbmVkLFxuICAgICAgZXJyb3JfbWVzc2FnZTogaW5wdXQuZXJyb3JNZXNzYWdlLFxuICAgIH0pO1xuICAgIHJldHVybiB7IG9rOiB0cnVlIH07XG4gIH1cblxuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJHRVRcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1xdWVyeVwiXSB9KVxuICBhc3luYyBzdGF0cygpOiBQcm9taXNlPFRva2VuU3RhdHNbXT4ge1xuICAgIHJldHVybiBRZ3JpZERpc3BhdGNoZXIuZ2V0U3RhdHMoKTtcbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIkdFVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLXF1ZXJ5XCJdIH0pXG4gIGFzeW5jIHRvdGFsQ29zdCh0b2tlbk5hbWU/OiBzdHJpbmcpOiBQcm9taXNlPHsgdXNkOiBudW1iZXIgfT4ge1xuICAgIHJldHVybiB7IHVzZDogYXdhaXQgUmVxdWVzdExvZ01vZGVsLnRvdGFsQ29zdCh7IHRva2VuX25hbWU6IHRva2VuTmFtZSB9KSB9O1xuICB9XG5cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiR0VUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stcXVlcnlcIl0gfSlcbiAgYXN5bmMgcHJvamVjdE5hbWVzKCk6IFByb21pc2U8eyBuYW1lczogc3RyaW5nW10gfT4ge1xuICAgIHJldHVybiB7IG5hbWVzOiBhd2FpdCBSZXF1ZXN0TG9nTW9kZWwuZGlzdGluY3RQcm9qZWN0TmFtZXMoKSB9O1xuICB9XG5cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiUE9TVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLW11dGF0aW9uXCJdIH0pXG4gIGFzeW5jIGFkZFRva2VuKFxuICAgIHByb3ZpZGVyOiBzdHJpbmcsXG4gICAgY3JlZGVudGlhbHM6IFRva2VuQ3JlZGVudGlhbHMsXG4gICAgbmFtZTogc3RyaW5nLFxuICApOiBQcm9taXNlPHsgYWRkZWQ6IGJvb2xlYW4gfT4ge1xuICAgIGF3YWl0IFRva2VuTW9kZWwuc2F2ZShbXG4gICAgICB7XG4gICAgICAgIHByb3ZpZGVyLFxuICAgICAgICBjcmVkZW50aWFscyxcbiAgICAgICAgbmFtZSxcbiAgICAgIH0sXG4gICAgXSk7XG4gICAgcmV0dXJuIHsgYWRkZWQ6IHRydWUgfTtcbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIlBPU1RcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1tdXRhdGlvblwiXSB9KVxuICBhc3luYyB1cGRhdGVUb2tlbihpZDogbnVtYmVyLCBuYW1lPzogc3RyaW5nKTogUHJvbWlzZTx7IHVwZGF0ZWQ6IGJvb2xlYW4gfT4ge1xuICAgIGNvbnN0IGVudHJ5ID0gYXdhaXQgVG9rZW5Nb2RlbC5maW5kT25lKFwiQVwiLCB7IGlkIH0pO1xuICAgIGlmICghZW50cnkpIHJldHVybiB7IHVwZGF0ZWQ6IGZhbHNlIH07XG5cbiAgICBhd2FpdCBUb2tlbk1vZGVsLnNhdmUoW1xuICAgICAge1xuICAgICAgICBpZDogZW50cnkuaWQsXG4gICAgICAgIHByb3ZpZGVyOiBlbnRyeS5wcm92aWRlcixcbiAgICAgICAgY3JlZGVudGlhbHM6IGVudHJ5LmNyZWRlbnRpYWxzLFxuICAgICAgICBuYW1lOiBuYW1lICE9PSB1bmRlZmluZWQgPyBuYW1lIDogZW50cnkubmFtZSxcbiAgICAgIH0sXG4gICAgXSk7XG4gICAgcmV0dXJuIHsgdXBkYXRlZDogdHJ1ZSB9O1xuICB9XG5cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiUE9TVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLW11dGF0aW9uXCJdIH0pXG4gIGFzeW5jIHJlbW92ZVRva2VuKGlkOiBudW1iZXIpOiBQcm9taXNlPHsgcmVtb3ZlZDogYm9vbGVhbiB9PiB7XG4gICAgY29uc3QgZW50cnkgPSBhd2FpdCBUb2tlbk1vZGVsLmZpbmRPbmUoXCJBXCIsIHsgaWQgfSk7XG4gICAgaWYgKCFlbnRyeSkgcmV0dXJuIHsgcmVtb3ZlZDogZmFsc2UgfTtcbiAgICBhd2FpdCBUb2tlbk1vZGVsLmRlbChbZW50cnkuaWRdKTtcbiAgICByZXR1cm4geyByZW1vdmVkOiB0cnVlIH07XG4gIH1cblxuICAvKipcbiAgICog7Yag7YGwIO2ZnOyEse2ZlC/ruYTtmZzshLHtmZQg7Yag6riAIERC7J2YIGFjdGl2ZSDtlYTrk5wg7JeF642w7J207Yq4XG4gICAqL1xuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJQT1NUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stbXV0YXRpb25cIl0gfSlcbiAgYXN5bmMgdG9nZ2xlVG9rZW4oaWQ6IG51bWJlcik6IFByb21pc2U8eyBhY3RpdmU6IGJvb2xlYW4gfT4ge1xuICAgIGNvbnN0IGVudHJ5ID0gYXdhaXQgVG9rZW5Nb2RlbC5maW5kT25lKFwiQVwiLCB7IGlkIH0pO1xuICAgIGlmICghZW50cnkpIHJldHVybiB7IGFjdGl2ZTogZmFsc2UgfTtcblxuICAgIGNvbnN0IG5ld0FjdGl2ZSA9ICFlbnRyeS5hY3RpdmU7XG4gICAgYXdhaXQgVG9rZW5Nb2RlbC5zYXZlKFtcbiAgICAgIHtcbiAgICAgICAgaWQsXG4gICAgICAgIHByb3ZpZGVyOiBlbnRyeS5wcm92aWRlcixcbiAgICAgICAgY3JlZGVudGlhbHM6IGVudHJ5LmNyZWRlbnRpYWxzLFxuICAgICAgICBhY3RpdmU6IG5ld0FjdGl2ZSxcbiAgICAgICAgbmFtZTogZW50cnkubmFtZSxcbiAgICAgIH0sXG4gICAgXSk7XG4gICAgcmV0dXJuIHsgYWN0aXZlOiBuZXdBY3RpdmUgfTtcbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIlBPU1RcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1tdXRhdGlvblwiXSB9KVxuICBhc3luYyBvYXV0aFN0YXJ0KG5hbWU6IHN0cmluZyk6IFByb21pc2U8T0F1dGhTdGFydFJlc3VsdD4ge1xuICAgIGNvbnN0IHsgY29kZVZlcmlmaWVyLCBjb2RlQ2hhbGxlbmdlLCBzdGF0ZSB9ID0gZ2VuZXJhdGVQS0NFKCk7XG5cbiAgICBjb25zdCBzZXJ2ZXJQb3J0ID0gcHJvY2Vzcy5lbnYuUE9SVCA/PyBcIjQ0OTAwXCI7XG4gICAgY29uc3QgcmVkaXJlY3RVcmkgPSBgaHR0cDovL2xvY2FsaG9zdDoke3NlcnZlclBvcnR9L2NhbGxiYWNrYDtcbiAgICBjb25zdCBhdXRoVXJsID0gYnVpbGRBdXRoVXJsKGNvZGVDaGFsbGVuZ2UsIHN0YXRlLCByZWRpcmVjdFVyaSk7XG5cbiAgICBhd2FpdCBzZXRPQXV0aFN0YXRlKHN0YXRlLCB7IGNvZGVWZXJpZmllciwgbmFtZSwgcmVkaXJlY3RVcmkgfSk7XG5cbiAgICByZXR1cm4geyBhdXRoVXJsIH07XG4gIH1cblxuICBhc3luYyBoYW5kbGVPQXV0aENhbGxiYWNrKGNvZGU6IHN0cmluZywgc3RhdGU6IHN0cmluZywgcmVwbHk6IEZhc3RpZnlSZXBseSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHBlbmRpbmcgPSBhd2FpdCBnZXRPQXV0aFN0YXRlKHN0YXRlKTtcbiAgICBpZiAoIXBlbmRpbmcpIHtcbiAgICAgIGxvZ2dlci53YXJuKFwib2F1dGggY2FsbGJhY2s6IGludmFsaWRfc3RhdGVcIik7XG4gICAgICByZXR1cm4gcmVwbHkucmVkaXJlY3QoXCIvP29hdXRoPWVycm9yJnJlYXNvbj1pbnZhbGlkX3N0YXRlXCIpO1xuICAgIH1cbiAgICBhd2FpdCBkZWxldGVPQXV0aFN0YXRlKHN0YXRlKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCB0b2tlbnMgPSBhd2FpdCBleGNoYW5nZUNvZGVGb3JUb2tlbnMoXG4gICAgICAgIGNvZGUsXG4gICAgICAgIHBlbmRpbmcuY29kZVZlcmlmaWVyLFxuICAgICAgICBzdGF0ZSxcbiAgICAgICAgcGVuZGluZy5yZWRpcmVjdFVyaSxcbiAgICAgICk7XG5cbiAgICAgIGlmICh0b2tlbnMuYWNjb3VudFV1aWQpIHtcbiAgICAgICAgY29uc3Qgb2xkRW50cmllcyA9IGF3YWl0IFRva2VuTW9kZWwuZmluZEJ5QWNjb3VudElkZW50aWZpZXIoXG4gICAgICAgICAgXCJBXCIsXG4gICAgICAgICAgXCJhbnRocm9waWNcIixcbiAgICAgICAgICB0b2tlbnMuYWNjb3VudFV1aWQsXG4gICAgICAgICk7XG4gICAgICAgIGlmIChvbGRFbnRyaWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBhd2FpdCBUb2tlbk1vZGVsLmRlbChvbGRFbnRyaWVzLm1hcCgobykgPT4gby5pZCkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IFRva2VuTW9kZWwuc2F2ZShbXG4gICAgICAgIHtcbiAgICAgICAgICBwcm92aWRlcjogXCJhbnRocm9waWNcIixcbiAgICAgICAgICBjcmVkZW50aWFsczoge1xuICAgICAgICAgICAgYWNjZXNzVG9rZW46IHRva2Vucy5hY2Nlc3NUb2tlbixcbiAgICAgICAgICAgIHJlZnJlc2hUb2tlbjogdG9rZW5zLnJlZnJlc2hUb2tlbixcbiAgICAgICAgICAgIGV4cGlyZXNBdDogdG9rZW5zLmV4cGlyZXNBdCA/PyAwLFxuICAgICAgICAgICAgYWNjb3VudFV1aWQ6IHRva2Vucy5hY2NvdW50VXVpZCA/PyBcIlwiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbmFtZTogcGVuZGluZy5uYW1lLFxuICAgICAgICB9LFxuICAgICAgXSk7XG5cbiAgICAgIHJldHVybiByZXBseS5yZWRpcmVjdChgLz9vYXV0aD1zdWNjZXNzJm5hbWU9JHtlbmNvZGVVUklDb21wb25lbnQocGVuZGluZy5uYW1lKX1gKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gcmVwbHkucmVkaXJlY3QoYC8/b2F1dGg9ZXJyb3ImcmVhc29uPSR7ZW5jb2RlVVJJQ29tcG9uZW50KChlIGFzIEVycm9yKS5tZXNzYWdlKX1gKTtcbiAgICB9XG4gIH1cblxuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJQT1NUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stbXV0YXRpb25cIl0gfSlcbiAgYXN5bmMgb2F1dGhTdGFydE9wZW5BSShuYW1lOiBzdHJpbmcpOiBQcm9taXNlPE9BdXRoU3RhcnRSZXN1bHQ+IHtcbiAgICBpZiAoIVFncmlkRGlzcGF0Y2hlci5vcGVuYWlEaXNwYXRjaGVyKSB0aHJvdyBuZXcgRXJyb3IoXCJPcGVuQUkgZGlzcGF0Y2hlciBub3QgaW5pdGlhbGl6ZWRcIik7XG4gICAgY29uc3QgeyBhdXRoVXJsIH0gPSBhd2FpdCBRZ3JpZERpc3BhdGNoZXIub3BlbmFpRGlzcGF0Y2hlci5zdGFydEJyb3dzZXJMb2dpbihuYW1lKTtcblxuICAgIC8vIGZpcmUtYW5kLWZvcmdldDogY29kZXggbG9naW4g7JmE66OMIOuMgOq4sCDihpIg7Yag7YGwIOyggOyepVxuICAgIFFncmlkRGlzcGF0Y2hlci5vcGVuYWlEaXNwYXRjaGVyXG4gICAgICAuY29tcGxldGVCcm93c2VyTG9naW4oKVxuICAgICAgLnRoZW4oYXN5bmMgKGNyZWRzKSA9PiB7XG4gICAgICAgIGlmIChjcmVkcy5hY2NvdW50SWQpIHtcbiAgICAgICAgICBjb25zdCBvbGRFbnRyaWVzID0gYXdhaXQgVG9rZW5Nb2RlbC5maW5kQnlBY2NvdW50SWRlbnRpZmllcihcbiAgICAgICAgICAgIFwiQVwiLFxuICAgICAgICAgICAgXCJvcGVuYWlcIixcbiAgICAgICAgICAgIGNyZWRzLmFjY291bnRJZCxcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChvbGRFbnRyaWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGF3YWl0IFRva2VuTW9kZWwuZGVsKG9sZEVudHJpZXMubWFwKChvKSA9PiBvLmlkKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGF3YWl0IFRva2VuTW9kZWwuc2F2ZShbXG4gICAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZXI6IFwib3BlbmFpXCIsXG4gICAgICAgICAgICBjcmVkZW50aWFsczoge1xuICAgICAgICAgICAgICBhY2Nlc3NUb2tlbjogY3JlZHMuYWNjZXNzVG9rZW4sXG4gICAgICAgICAgICAgIHJlZnJlc2hUb2tlbjogY3JlZHMucmVmcmVzaFRva2VuLFxuICAgICAgICAgICAgICBpZFRva2VuOiBjcmVkcy5pZFRva2VuLFxuICAgICAgICAgICAgICBhY2Nlc3NUb2tlbkV4cGlyZXNBdDogRGF0ZS5ub3coKSArIDEwICogMjQgKiAzNjAwICogMTAwMCxcbiAgICAgICAgICAgICAgYWNjb3VudElkOiBjcmVkcy5hY2NvdW50SWQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICB9LFxuICAgICAgICBdKTtcbiAgICAgICAgbG9nZ2VyLmluZm8oYE9wZW5BSSB0b2tlbiBzYXZlZCBmb3IgJHtuYW1lfWApO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZSkgPT4ge1xuICAgICAgICBsb2dnZXIud2FybihgT3BlbkFJIGJyb3dzZXIgbG9naW4gZmFpbGVkOiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuICAgICAgfSk7XG5cbiAgICByZXR1cm4geyBhdXRoVXJsIH07XG4gIH1cblxuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJHRVRcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1xdWVyeVwiXSB9KVxuICBhc3luYyB1c2FnZSh0b2tlbklkPzogbnVtYmVyKTogUHJvbWlzZTxVc2FnZVJlc3BvbnNlPiB7XG4gICAgY29uc3QgeyByb3dzOiBhbGxUb2tlbnMgfSA9IGF3YWl0IFRva2VuTW9kZWwuZmluZE1hbnkoXCJBXCIpO1xuICAgIGNvbnN0IGVudHJ5ID0gdG9rZW5JZFxuICAgICAgPyBhbGxUb2tlbnMuZmluZCgoZSkgPT4gZS5pZCA9PT0gdG9rZW5JZClcbiAgICAgIDogYWxsVG9rZW5zLmZpbmRMYXN0KChlKSA9PiBlLmFjdGl2ZSAmJiBlLnByb3ZpZGVyID09PSBcImFudGhyb3BpY1wiKTtcblxuICAgIGlmICghZW50cnkpIHJldHVybiB7IGVycm9yOiBcIk5PVF9GT1VORFwiIH07XG5cbiAgICBpZiAoZW50cnkucHJvdmlkZXIgPT09IFwib3BlbmFpXCIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJhdyA9IChhd2FpdCBRZ3JpZERpc3BhdGNoZXIub3BlbmFpRGlzcGF0Y2hlcj8uZ2V0UmF0ZUxpbWl0cyhlbnRyeS5uYW1lKSkgYXMge1xuICAgICAgICAgIHJhdGVMaW1pdHM/OiB7XG4gICAgICAgICAgICBwcmltYXJ5PzogeyB1c2VkUGVyY2VudDogbnVtYmVyOyB3aW5kb3dEdXJhdGlvbk1pbnM6IG51bWJlcjsgcmVzZXRzQXQ6IG51bWJlciB9O1xuICAgICAgICAgICAgc2Vjb25kYXJ5PzogeyB1c2VkUGVyY2VudDogbnVtYmVyOyB3aW5kb3dEdXJhdGlvbk1pbnM6IG51bWJlcjsgcmVzZXRzQXQ6IG51bWJlciB9O1xuICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHJsID0gcmF3Py5yYXRlTGltaXRzO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHByb3ZpZGVyOiBcIm9wZW5haVwiLFxuICAgICAgICAgIGZpdmVIb3VyOiBybD8ucHJpbWFyeVxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgdXRpbGl6YXRpb246IHJsLnByaW1hcnkudXNlZFBlcmNlbnQsXG4gICAgICAgICAgICAgICAgcmVzZXRzQXQ6IG5ldyBEYXRlKHJsLnByaW1hcnkucmVzZXRzQXQgKiAxMDAwKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgc2V2ZW5EYXk6IHJsPy5zZWNvbmRhcnlcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIHV0aWxpemF0aW9uOiBybC5zZWNvbmRhcnkudXNlZFBlcmNlbnQsXG4gICAgICAgICAgICAgICAgcmVzZXRzQXQ6IG5ldyBEYXRlKHJsLnNlY29uZGFyeS5yZXNldHNBdCAqIDEwMDApLnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgfTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIHsgZXJyb3I6IGBPcGVuQUkgdXNhZ2UgZmFpbGVkOiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZW50cnkucHJvdmlkZXIgIT09IFwiYW50aHJvcGljXCIpIHtcbiAgICAgIHJldHVybiB7IGVycm9yOiBgdXNhZ2UgQVBJIG5vdCBzdXBwb3J0ZWQgZm9yIHByb3ZpZGVyOiAke2VudHJ5LnByb3ZpZGVyfWAgfTtcbiAgICB9XG5cbiAgICBsZXQgYWNjZXNzVG9rZW4gPSBnZXRBY2Nlc3NUb2tlbihlbnRyeS5jcmVkZW50aWFscyk7XG4gICAgY29uc3QgaXNFeHBpcmVkID0gZ2V0RXhwaXJlc0F0KGVudHJ5LmNyZWRlbnRpYWxzKSA8IERhdGUubm93KCk7XG5cbiAgICBpZiAoaXNFeHBpcmVkICYmIGdldFJlZnJlc2hUb2tlbihlbnRyeS5jcmVkZW50aWFscykpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGFjY2Vzc1Rva2VuID0gYXdhaXQgdGhpcy5yZWZyZXNoVG9rZW4oZW50cnkpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBvYXV0aExvZ2dlci53YXJuKGByZWZyZXNoIGZhaWxlZCBmb3IgJHtlbnRyeS5uYW1lfTogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKTtcbiAgICAgICAgcmV0dXJuIHsgZXJyb3I6IFwicmUtbG9naW4gcmVxdWlyZWRcIiB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHJhdyA9IGF3YWl0IGZldGNoVXNhZ2UoYWNjZXNzVG9rZW4pO1xuICAgIGlmIChyYXcuZXJyb3IgJiYgZ2V0UmVmcmVzaFRva2VuKGVudHJ5LmNyZWRlbnRpYWxzKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYWNjZXNzVG9rZW4gPSBhd2FpdCB0aGlzLnJlZnJlc2hUb2tlbihlbnRyeSk7XG4gICAgICAgIGNvbnN0IHJldHJpZWQgPSBhd2FpdCBmZXRjaFVzYWdlKGFjY2Vzc1Rva2VuKTtcbiAgICAgICAgaWYgKHJldHJpZWQuZXJyb3IpIHJldHVybiB7IGVycm9yOiByZXRyaWVkLmVycm9yIH07XG4gICAgICAgIHJldHVybiBjb252ZXJ0QW50aHJvcGljVXNhZ2UocmV0cmllZCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIG9hdXRoTG9nZ2VyLndhcm4oYHJlZnJlc2ggZmFpbGVkIGZvciAke2VudHJ5Lm5hbWV9OiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuICAgICAgICByZXR1cm4geyBlcnJvcjogXCJyZS1sb2dpbiByZXF1aXJlZFwiIH07XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChyYXcuZXJyb3IpIHJldHVybiB7IGVycm9yOiByYXcuZXJyb3IgfTtcbiAgICByZXR1cm4gY29udmVydEFudGhyb3BpY1VzYWdlKHJhdyk7XG4gIH1cblxuICBhc3luYyByZWZyZXNoVG9rZW4odG9rZW46IFRva2VuU3Vic2V0QSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgY3JlZHMgPSB0b2tlbi5jcmVkZW50aWFscztcbiAgICBjb25zdCBydCA9IGdldFJlZnJlc2hUb2tlbihjcmVkcyk7XG4gICAgaWYgKCFydCkgdGhyb3cgbmV3IEVycm9yKFwiTm8gcmVmcmVzaCB0b2tlblwiKTtcbiAgICBjb25zdCByZWZyZXNoZWQgPSBhd2FpdCByZWZyZXNoQWNjZXNzVG9rZW4ocnQpO1xuICAgIGNvbnN0IHVwZGF0ZWQgPSBUb2tlbkNyZWRlbnRpYWxzLnBhcnNlKHtcbiAgICAgIC4uLmNyZWRzLFxuICAgICAgYWNjZXNzVG9rZW46IHJlZnJlc2hlZC5hY2Nlc3NUb2tlbixcbiAgICAgIHJlZnJlc2hUb2tlbjogcmVmcmVzaGVkLnJlZnJlc2hUb2tlbixcbiAgICAgIGV4cGlyZXNBdDogcmVmcmVzaGVkLmV4cGlyZXNBdCxcbiAgICB9KTtcbiAgICBhd2FpdCBUb2tlbk1vZGVsLnNhdmUoW1xuICAgICAge1xuICAgICAgICBpZDogdG9rZW4uaWQsXG4gICAgICAgIHByb3ZpZGVyOiB0b2tlbi5wcm92aWRlcixcbiAgICAgICAgY3JlZGVudGlhbHM6IHVwZGF0ZWQsXG4gICAgICAgIG5hbWU6IHRva2VuLm5hbWUsXG4gICAgICB9LFxuICAgIF0pO1xuICAgIHJldHVybiByZWZyZXNoZWQuYWNjZXNzVG9rZW47XG4gIH1cblxuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJHRVRcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1xdWVyeVwiXSB9KVxuICBhc3luYyBoZWFsdGgoKTogUHJvbWlzZTxIZWFsdGhSZXNwb25zZT4ge1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IFwib2tcIixcbiAgICAgIGFjdGl2ZVRva2VuczogUWdyaWREaXNwYXRjaGVyLnRva2Vucy5zaXplLFxuICAgICAgc3Vic2NyaWJlcjogUWdyaWREaXNwYXRjaGVyLnN1YnNjcmliZXI/LnN0YXR1cygpID8/IG51bGwsXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgUWdyaWRGcmFtZSA9IG5ldyBRZ3JpZEZyYW1lQ2xhc3MoKTtcblxuZnVuY3Rpb24gY29udmVydEFudGhyb3BpY1VzYWdlKHJhdzogQW50aHJvcGljVXNhZ2VSYXcpOiBVc2FnZVJlc3BvbnNlIHtcbiAgcmV0dXJuIHtcbiAgICBwcm92aWRlcjogXCJhbnRocm9waWNcIixcbiAgICBmaXZlSG91cjogcmF3LmZpdmVfaG91clxuICAgICAgPyB7IHV0aWxpemF0aW9uOiByYXcuZml2ZV9ob3VyLnV0aWxpemF0aW9uLCByZXNldHNBdDogcmF3LmZpdmVfaG91ci5yZXNldHNfYXQgfVxuICAgICAgOiBudWxsLFxuICAgIHNldmVuRGF5OiByYXcuc2V2ZW5fZGF5XG4gICAgICA/IHsgdXRpbGl6YXRpb246IHJhdy5zZXZlbl9kYXkudXRpbGl6YXRpb24sIHJlc2V0c0F0OiByYXcuc2V2ZW5fZGF5LnJlc2V0c19hdCB9XG4gICAgICA6IG51bGwsXG4gIH07XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNENBLE1BQU0saUNBQWlCLElBQUksS0FBeUI7QUFHcEQsTUFBTSxxQkFBcUI7QUFDM0IsTUFBTSxrQkFBa0I7QUFFeEIsZUFBZSxjQUFjLE9BQWUsTUFBbUM7Q0FDN0UsTUFBTSxRQUFRLG9CQUFvQjtBQUNsQyxLQUFJLENBQUMsTUFBTyxPQUFNLElBQUksTUFBTSwrQkFBK0I7QUFDM0QsT0FBTSxNQUFNLElBQUk7RUFDZCxLQUFLLEdBQUcscUJBQXFCO0VBQzdCLE9BQU8sS0FBSyxVQUFVLEtBQUs7RUFDM0IsS0FBSztFQUNOLENBQUM7O0FBR0osZUFBZSxjQUFjLE9BQWtEO0NBQzdFLE1BQU0sUUFBUSxvQkFBb0I7QUFDbEMsS0FBSSxDQUFDLE1BQU8sT0FBTSxJQUFJLE1BQU0sK0JBQStCO0NBQzNELE1BQU0sTUFBTSxNQUFNLE1BQU0sSUFBWSxFQUFFLEtBQUssR0FBRyxxQkFBcUIsU0FBUyxDQUFDO0FBQzdFLEtBQUksQ0FBQyxJQUFLLFFBQU87QUFDakIsUUFBTyxLQUFLLE1BQU0sSUFBSTs7QUFHeEIsZUFBZSxpQkFBaUIsT0FBOEI7Q0FDNUQsTUFBTSxRQUFRLG9CQUFvQjtBQUNsQyxLQUFJLENBQUMsTUFBTztBQUNaLE9BQU0sTUFBTSxPQUFPLEVBQUUsS0FBSyxHQUFHLHFCQUFxQixTQUFTLENBQUM7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
|
|
565
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicWdyaWQuZnJhbWUuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL3FncmlkL3FncmlkLmZyYW1lLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjcnlwdG8gZnJvbSBcIm5vZGU6Y3J5cHRvXCI7XG5cbmltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gXCJAbG9ndGFwZS9sb2d0YXBlXCI7XG5pbXBvcnQgeyB0eXBlIEZhc3RpZnlSZXBseSB9IGZyb20gXCJmYXN0aWZ5XCI7XG5pbXBvcnQgeyBhcGksIEJhc2VGcmFtZUNsYXNzLCBTb25hbXUsIHN0cmVhbSB9IGZyb20gXCJzb25hbXVcIjtcbmltcG9ydCB7IGdldENhY2hlTWFuYWdlclJlZiB9IGZyb20gXCJzb25hbXUvY2FjaGVcIjtcblxuaW1wb3J0IHtcbiAgZ2V0QWNjZXNzVG9rZW4sXG4gIGdldEV4cGlyZXNBdCxcbiAgZ2V0UmVmcmVzaFRva2VuLFxufSBmcm9tIFwiLi4vLi4vdXRpbHMvcHJvdmlkZXJzL2NvbW1vbi9jcmVkZW50aWFsc1wiO1xuaW1wb3J0IHsgTUlDUk9fVVNELCBSZXF1ZXN0TG9nTW9kZWwgfSBmcm9tIFwiLi4vcmVxdWVzdC1sb2cvcmVxdWVzdC1sb2cubW9kZWxcIjtcbmltcG9ydCB7IHR5cGUgVG9rZW5TdWJzZXRBIH0gZnJvbSBcIi4uL3NvbmFtdS5nZW5lcmF0ZWRcIjtcbmltcG9ydCB7IFRva2VuTW9kZWwgfSBmcm9tIFwiLi4vdG9rZW4vdG9rZW4ubW9kZWxcIjtcbmltcG9ydCB7IFRva2VuQ3JlZGVudGlhbHMgfSBmcm9tIFwiLi4vdG9rZW4vdG9rZW4udHlwZXNcIjtcbmltcG9ydCB7XG4gIHR5cGUgQW50aHJvcGljVXNhZ2VSYXcsXG4gIGJ1aWxkQXV0aFVybCxcbiAgZXhjaGFuZ2VDb2RlRm9yVG9rZW5zLFxuICBmZXRjaFVzYWdlLFxuICBnZW5lcmF0ZVBLQ0UsXG4gIHJlZnJlc2hBY2Nlc3NUb2tlbixcbn0gZnJvbSBcIi4vb2F1dGhcIjtcbmltcG9ydCB7XG4gIGFmdGVyUXVlcnksXG4gIGJlZm9yZVF1ZXJ5LFxuICBmaW5pc2hSdW5BYm9ydGVkLFxuICBmaW5pc2hSdW5XaXRoRXJyb3IsXG59IGZyb20gXCIuL3FncmlkLXJ1bi1saWZlY3ljbGVcIjtcbmltcG9ydCB7IFFncmlkRGlzcGF0Y2hlciB9IGZyb20gXCIuL3FncmlkLmRpc3BhdGNoZXJcIjtcbmltcG9ydCB7XG4gIHR5cGUgUXVlcnlJbnB1dCxcbiAgdHlwZSBBcHBlbmRTdGVwSW5wdXQsXG4gIHR5cGUgQ3JlYXRlUnVuSW5wdXQsXG4gIHR5cGUgRmluaXNoUnVuSW5wdXQsXG4gIHR5cGUgSGVhbHRoUmVzcG9uc2UsXG4gIHR5cGUgT0F1dGhTdGFydFJlc3VsdCxcbiAgdHlwZSBRdWVyeU91dHB1dCxcbiAgU3RyZWFtRXZlbnRzLFxuICB0eXBlIFRva2VuU3RhdHMsXG4gIHR5cGUgVXNhZ2VSZXNwb25zZSxcbn0gZnJvbSBcIi4vcWdyaWQudHlwZXNcIjtcblxuY29uc3QgcGVuZGluZ1N0cmVhbXMgPSBuZXcgTWFwPHN0cmluZywgUXVlcnlJbnB1dD4oKTtcblxudHlwZSBQZW5kaW5nT0F1dGggPSB7IGNvZGVWZXJpZmllcjogc3RyaW5nOyBuYW1lOiBzdHJpbmc7IHJlZGlyZWN0VXJpOiBzdHJpbmcgfTtcbmNvbnN0IE9BVVRIX1NUQVRFX1BSRUZJWCA9IFwib2F1dGg6c3RhdGU6XCI7XG5jb25zdCBPQVVUSF9TVEFURV9UVEwgPSBcIjVtXCI7XG5cbmFzeW5jIGZ1bmN0aW9uIHNldE9BdXRoU3RhdGUoc3RhdGU6IHN0cmluZywgZGF0YTogUGVuZGluZ09BdXRoKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGNhY2hlID0gZ2V0Q2FjaGVNYW5hZ2VyUmVmKCk7XG4gIGlmICghY2FjaGUpIHRocm93IG5ldyBFcnJvcihcIkNhY2hlTWFuYWdlciBub3QgaW5pdGlhbGl6ZWRcIik7XG4gIGF3YWl0IGNhY2hlLnNldCh7XG4gICAga2V5OiBgJHtPQVVUSF9TVEFURV9QUkVGSVh9JHtzdGF0ZX1gLFxuICAgIHZhbHVlOiBKU09OLnN0cmluZ2lmeShkYXRhKSxcbiAgICB0dGw6IE9BVVRIX1NUQVRFX1RUTCxcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldE9BdXRoU3RhdGUoc3RhdGU6IHN0cmluZyk6IFByb21pc2U8UGVuZGluZ09BdXRoIHwgdW5kZWZpbmVkPiB7XG4gIGNvbnN0IGNhY2hlID0gZ2V0Q2FjaGVNYW5hZ2VyUmVmKCk7XG4gIGlmICghY2FjaGUpIHRocm93IG5ldyBFcnJvcihcIkNhY2hlTWFuYWdlciBub3QgaW5pdGlhbGl6ZWRcIik7XG4gIGNvbnN0IHJhdyA9IGF3YWl0IGNhY2hlLmdldDxzdHJpbmc+KHsga2V5OiBgJHtPQVVUSF9TVEFURV9QUkVGSVh9JHtzdGF0ZX1gIH0pO1xuICBpZiAoIXJhdykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIEpTT04ucGFyc2UocmF3KSBhcyBQZW5kaW5nT0F1dGg7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGRlbGV0ZU9BdXRoU3RhdGUoc3RhdGU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBjYWNoZSA9IGdldENhY2hlTWFuYWdlclJlZigpO1xuICBpZiAoIWNhY2hlKSByZXR1cm47XG4gIGF3YWl0IGNhY2hlLmRlbGV0ZSh7IGtleTogYCR7T0FVVEhfU1RBVEVfUFJFRklYfSR7c3RhdGV9YCB9KTtcbn1cblxuY29uc3QgbG9nZ2VyID0gZ2V0TG9nZ2VyKFtcInFncmlkXCJdKTtcbmNvbnN0IG9hdXRoTG9nZ2VyID0gZ2V0TG9nZ2VyKFtcInFncmlkXCIsIFwib2F1dGhcIl0pO1xuXG5jbGFzcyBRZ3JpZEZyYW1lQ2xhc3MgZXh0ZW5kcyBCYXNlRnJhbWVDbGFzcyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwiUWdyaWRcIik7XG4gIH1cblxuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJQT1NUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stbXV0YXRpb25cIl0gfSlcbiAgYXN5bmMgcXVlcnkoYXJnczogUXVlcnlJbnB1dCk6IFByb21pc2U8UXVlcnlPdXRwdXQ+IHtcbiAgICBjb25zdCBlZmZlY3RpdmVMb2dNb2RlID0gYXJncy5sb2dNb2RlID8/IChhcmdzLmlzU3RlcCA/IFwicnVuXCIgOiBcImF1dG9cIik7XG5cbiAgICAvLyBsb2dNb2RlOiBcInJ1blwiIOKGkiDshJzrsoTqsIAgbGlmZWN5Y2xlIOq0gOumrFxuICAgIGlmIChlZmZlY3RpdmVMb2dNb2RlID09PSBcInJ1blwiKSB7XG4gICAgICBjb25zdCB7IHJlcXVlc3RMb2dJZCwgc3RlcEluZGV4IH0gPSBhd2FpdCBiZWZvcmVRdWVyeShhcmdzKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFFncmlkRGlzcGF0Y2hlci5xdWVyeShhcmdzLCBhcmdzLnRpbWVvdXQpO1xuICAgICAgICBjb25zdCBsaWZlY3ljbGUgPSBhd2FpdCBhZnRlclF1ZXJ5KHJlcXVlc3RMb2dJZCwgc3RlcEluZGV4LCBhcmdzLCByZXN1bHQpO1xuICAgICAgICByZXR1cm4geyAuLi5yZXN1bHQsIHJ1bkNvbnRleHQ6IGxpZmVjeWNsZS5ydW5Db250ZXh0IH07XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGF3YWl0IGZpbmlzaFJ1bldpdGhFcnJvcihyZXF1ZXN0TG9nSWQsIChlIGFzIEVycm9yKS5tZXNzYWdlLCBhcmdzKTtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBsb2dNb2RlOiBcImF1dG9cIiAo6riw7KG0IG5vbi1zdGVwIOqyveuhnCkg65iQ64qUIFwibm9uZVwiXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgUWdyaWREaXNwYXRjaGVyLnF1ZXJ5KGFyZ3MsIGFyZ3MudGltZW91dCk7XG5cbiAgICBpZiAoZWZmZWN0aXZlTG9nTW9kZSA9PT0gXCJhdXRvXCIpIHtcbiAgICAgIHRoaXMuc2F2ZUF1dG9SZXF1ZXN0TG9nKGFyZ3MsIHJlc3VsdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIGxvZ01vZGUgXCJhdXRvXCIg64uo7J28IOyalOyyrSDroZzquYU6IHJ1biBsaWZlY3ljbGUoc3RlcCDrtoTtlbQpIOyXhuydtCByZXF1ZXN0X2xvZyAx6rG066eMIOuCqOq4tOuLpC5cbiAgLy8gcXVlcnnsmYAgcXVlcnlTdHJlYW0g7JaR7Kq97JeQ7IScIOyCrOyaqS5cbiAgcHJpdmF0ZSBzYXZlQXV0b1JlcXVlc3RMb2coYXJnczogUXVlcnlJbnB1dCwgcmVzdWx0OiBRdWVyeU91dHB1dCk6IHZvaWQge1xuICAgIGNvbnN0IHRvb2xDYWxsQ291bnQgPSByZXN1bHQuY29udGVudC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0udHlwZSA9PT0gXCJ0b29sLWNhbGxcIikubGVuZ3RoO1xuICAgIGNvbnN0IHJlc3BvbnNlVGV4dCA9IHJlc3VsdC5jb250ZW50XG4gICAgICAuZmlsdGVyKChpdGVtKSA9PiBpdGVtLnR5cGUgPT09IFwidGV4dFwiKVxuICAgICAgLm1hcCgoaXRlbSkgPT4gaXRlbS50ZXh0KVxuICAgICAgLmpvaW4oXCJcXG5cIik7XG5cbiAgICBSZXF1ZXN0TG9nTW9kZWwuc2F2ZShbXG4gICAgICB7XG4gICAgICAgIHRva2VuX25hbWU6IHJlc3VsdC50b2tlbk5hbWUsXG4gICAgICAgIHByb2plY3RfbmFtZTogYXJncy5wcm9qZWN0TmFtZT8ubGVuZ3RoID8gYXJncy5wcm9qZWN0TmFtZSA6IG51bGwsXG4gICAgICAgIG1vZGVsX25hbWU6IHJlc3VsdC5tb2RlbCA/PyBudWxsLFxuICAgICAgICB1c2VyX3Byb21wdDogYXJncy5wcm9tcHQsXG4gICAgICAgIHN5c3RlbV9wcm9tcHQ6IGFyZ3Muc3lzdGVtID8/IG51bGwsXG4gICAgICAgIHJlc3BvbnNlOiByZXNwb25zZVRleHQsXG4gICAgICAgIGlucHV0X3Rva2VuczogcmVzdWx0LnVzYWdlLmlucHV0X3Rva2VucyxcbiAgICAgICAgb3V0cHV0X3Rva2VuczogcmVzdWx0LnVzYWdlLm91dHB1dF90b2tlbnMsXG4gICAgICAgIGNhY2hlX3JlYWRfdG9rZW5zOiByZXN1bHQudXNhZ2UuY2FjaGVfcmVhZF9pbnB1dF90b2tlbnMsXG4gICAgICAgIGNhY2hlX2NyZWF0aW9uX3Rva2VuczogcmVzdWx0LnVzYWdlLmNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyxcbiAgICAgICAgZHVyYXRpb25fbXM6IHJlc3VsdC5kdXJhdGlvbk1zLFxuICAgICAgICBjb3N0X3VzZDogcmVzdWx0LmNvc3RVc2QgIT09IG51bGwgPyBNYXRoLnJvdW5kKHJlc3VsdC5jb3N0VXNkICogTUlDUk9fVVNEKSA6IG51bGwsXG4gICAgICAgIGVmZm9ydDogYXJncy5lZmZvcnQgPz8gbnVsbCxcbiAgICAgICAgLy8gbWFsZm9ybWVkIGhpc3RvcnnqsIAg7JmA64+EIOyEseqzte2VnCDthLQo7Yq57Z6IIHN0cmVhbSBzc2UuZW5kKCkp7J2EIOq5qOyngCDslYrrj4TroZ0g67Cp7Ja0LlxuICAgICAgICBoaXN0b3J5OiAoKCk6IHsgdHlwZTogc3RyaW5nIH1bXSB8IG51bGwgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gYXJncy5oaXN0b3J5ID8gSlNPTi5wYXJzZShhcmdzLmhpc3RvcnkpIDogbnVsbDtcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkoKSxcbiAgICAgICAgc3RhdHVzOiBcInN1Y2NlZWRlZFwiLFxuICAgICAgICB0b29sX2NhbGxfY291bnQ6IHRvb2xDYWxsQ291bnQsXG4gICAgICB9LFxuICAgIF0pLmNhdGNoKChlKSA9PiBsb2dnZXIuZXJyb3IoYHJlcXVlc3RMb2cgc2F2ZSBmYWlsZWQ6ICR7KGUgYXMgRXJyb3IpLm1lc3NhZ2V9YCkpO1xuICB9XG5cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiUE9TVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLW11dGF0aW9uXCJdIH0pXG4gIGFzeW5jIHByZXBhcmVTdHJlYW0oYXJnczogUXVlcnlJbnB1dCk6IFByb21pc2U8eyBzdHJlYW1JZDogc3RyaW5nIH0+IHtcbiAgICBjb25zdCBzdHJlYW1JZCA9IGNyeXB0by5yYW5kb21VVUlEKCk7XG4gICAgcGVuZGluZ1N0cmVhbXMuc2V0KHN0cmVhbUlkLCBhcmdzKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHBlbmRpbmdTdHJlYW1zLmRlbGV0ZShzdHJlYW1JZCksIDMwXzAwMCk7XG4gICAgcmV0dXJuIHsgc3RyZWFtSWQgfTtcbiAgfVxuXG4gIEBzdHJlYW0oeyB0eXBlOiBcInNzZVwiLCBldmVudHM6IFN0cmVhbUV2ZW50cyB9KVxuICBhc3luYyBxdWVyeVN0cmVhbShzdHJlYW1JZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgYXJncyA9IHBlbmRpbmdTdHJlYW1zLmdldChzdHJlYW1JZCk7XG4gICAgcGVuZGluZ1N0cmVhbXMuZGVsZXRlKHN0cmVhbUlkKTtcbiAgICBpZiAoIWFyZ3MpIHRocm93IG5ldyBFcnJvcihcImludmFsaWQgb3IgZXhwaXJlZCBzdHJlYW1JZFwiKTtcblxuICAgIGNvbnN0IGVmZmVjdGl2ZUxvZ01vZGUgPSBhcmdzLmxvZ01vZGUgPz8gKGFyZ3MuaXNTdGVwID8gXCJydW5cIiA6IFwiYXV0b1wiKTtcbiAgICBjb25zdCBzaG91bGRMb2cgPSBlZmZlY3RpdmVMb2dNb2RlID09PSBcInJ1blwiO1xuXG4gICAgbGV0IHJ1bkluZm86IHsgcmVxdWVzdExvZ0lkOiBudW1iZXI7IHN0ZXBJbmRleDogbnVtYmVyIH0gfCB1bmRlZmluZWQ7XG4gICAgaWYgKHNob3VsZExvZykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcnVuSW5mbyA9IGF3YWl0IGJlZm9yZVF1ZXJ5KGFyZ3MpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2dnZXIuZXJyb3IoYHN0cmVhbSBiZWZvcmVRdWVyeSBmYWlsZWQ6ICR7KGUgYXMgRXJyb3IpLm1lc3NhZ2V9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY3R4ID0gU29uYW11LmdldENvbnRleHQoKTtcbiAgICBjb25zdCBzc2UgPSBjdHguY3JlYXRlU1NFKFN0cmVhbUV2ZW50cyk7XG4gICAgbGV0IHRocmVhZElkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgbGV0IHR1cm5JZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGxldCBzdHJlYW1SZXN1bHQ6IFF1ZXJ5T3V0cHV0IHwgdW5kZWZpbmVkO1xuICAgIGxldCBzdHJlYW1FcnJvcjogRXJyb3IgfCB1bmRlZmluZWQ7XG5cbiAgICBzc2Uub25DbG9zZSgoKSA9PiB7XG4gICAgICBpZiAodGhyZWFkSWQgJiYgdHVybklkKSB7XG4gICAgICAgIFFncmlkRGlzcGF0Y2hlci5vcGVuYWlEaXNwYXRjaGVyPy5pbnRlcnJ1cHRXb3JrZXJUdXJuKHRocmVhZElkLCB0dXJuSWQpLmNhdGNoKCgpID0+IHt9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBRZ3JpZERpc3BhdGNoZXIucXVlcnlTdHJlYW0oYXJncywge1xuICAgICAgICBvbkRlbHRhOiAodGV4dCkgPT4ge1xuICAgICAgICAgIGlmICghc3NlLmNsb3NlZCkgc3NlLnB1Ymxpc2goXCJkZWx0YVwiLCB7IHRleHQgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uVGhyZWFkSWQ6IChpZCkgPT4ge1xuICAgICAgICAgIHRocmVhZElkID0gaWQ7XG4gICAgICAgICAgaWYgKHNzZS5jbG9zZWQgJiYgdHVybklkKSB7XG4gICAgICAgICAgICBRZ3JpZERpc3BhdGNoZXIub3BlbmFpRGlzcGF0Y2hlcj8uaW50ZXJydXB0V29ya2VyVHVybih0aHJlYWRJZCwgdHVybklkKS5jYXRjaCgoKSA9PiB7fSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBvblR1cm5JZDogKGlkKSA9PiB7XG4gICAgICAgICAgdHVybklkID0gaWQ7XG4gICAgICAgICAgaWYgKHNzZS5jbG9zZWQgJiYgdGhyZWFkSWQpIHtcbiAgICAgICAgICAgIFFncmlkRGlzcGF0Y2hlci5vcGVuYWlEaXNwYXRjaGVyPy5pbnRlcnJ1cHRXb3JrZXJUdXJuKHRocmVhZElkLCB0dXJuSWQpLmNhdGNoKCgpID0+IHt9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG9uQ29tcGxldGU6IChyZXN1bHQpID0+IHtcbiAgICAgICAgICBzdHJlYW1SZXN1bHQgPSByZXN1bHQ7XG4gICAgICAgIH0sXG4gICAgICAgIG9uRXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgICBzdHJlYW1FcnJvciA9IGVycjtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHN0cmVhbUVycm9yID0gZSBhcyBFcnJvcjtcbiAgICB9XG5cbiAgICAvLyBkaXNwYXRjaGVyIOyZhOujjCDtm4QgbGlmZWN5Y2xlIOyymOumrCAoYXdhaXQg7JWI7KCEKVxuICAgIGlmIChzdHJlYW1SZXN1bHQpIHtcbiAgICAgIGxldCBydW5Db250ZXh0OiB7IHJlcXVlc3RMb2dJZDogbnVtYmVyIH0gfCB1bmRlZmluZWQ7XG4gICAgICBpZiAocnVuSW5mbykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGxpZmVjeWNsZSA9IGF3YWl0IGFmdGVyUXVlcnkoXG4gICAgICAgICAgICBydW5JbmZvLnJlcXVlc3RMb2dJZCxcbiAgICAgICAgICAgIHJ1bkluZm8uc3RlcEluZGV4LFxuICAgICAgICAgICAgYXJncyxcbiAgICAgICAgICAgIHN0cmVhbVJlc3VsdCxcbiAgICAgICAgICApO1xuICAgICAgICAgIHJ1bkNvbnRleHQgPSBsaWZlY3ljbGUucnVuQ29udGV4dDtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGxvZ2dlci5lcnJvcihgc3RyZWFtIGFmdGVyUXVlcnkgZmFpbGVkOiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGVmZmVjdGl2ZUxvZ01vZGUgPT09IFwiYXV0b1wiKSB7XG4gICAgICAgIC8vIHJ1biBsaWZlY3ljbGXsnYQg7JWIIO2DgOuKlCDri6jsnbwgc3RyZWFtIOyalOyyreuPhCByZXF1ZXN0X2xvZyAx6rG07J2AIOuCqOq4tOuLpCAocXVlcnnsmYAg64yA7LmtKS5cbiAgICAgICAgdGhpcy5zYXZlQXV0b1JlcXVlc3RMb2coYXJncywgc3RyZWFtUmVzdWx0KTtcbiAgICAgIH1cbiAgICAgIGlmICghc3NlLmNsb3NlZCkgc3NlLnB1Ymxpc2goXCJkb25lXCIsIHsgLi4uc3RyZWFtUmVzdWx0LCBydW5Db250ZXh0IH0pO1xuICAgIH0gZWxzZSBpZiAoc3RyZWFtRXJyb3IpIHtcbiAgICAgIGlmIChydW5JbmZvKSBhd2FpdCBmaW5pc2hSdW5XaXRoRXJyb3IocnVuSW5mby5yZXF1ZXN0TG9nSWQsIHN0cmVhbUVycm9yLm1lc3NhZ2UsIGFyZ3MpO1xuICAgICAgaWYgKCFzc2UuY2xvc2VkKSBzc2UucHVibGlzaChcImVycm9yXCIsIHsgbWVzc2FnZTogc3RyZWFtRXJyb3IubWVzc2FnZSB9KTtcbiAgICB9IGVsc2UgaWYgKHNzZS5jbG9zZWQgJiYgcnVuSW5mbykge1xuICAgICAgYXdhaXQgZmluaXNoUnVuQWJvcnRlZChydW5JbmZvLnJlcXVlc3RMb2dJZCwgYXJncyk7XG4gICAgfVxuXG4gICAgYXdhaXQgc3NlLmVuZCgpO1xuICB9XG5cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiUE9TVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLW11dGF0aW9uXCJdIH0pXG4gIGFzeW5jIGNyZWF0ZVJ1bihpbnB1dDogQ3JlYXRlUnVuSW5wdXQpOiBQcm9taXNlPHsgcmVxdWVzdExvZ0lkOiBudW1iZXIgfT4ge1xuICAgIGNvbnN0IHJlcXVlc3RMb2dJZCA9IGF3YWl0IFJlcXVlc3RMb2dNb2RlbC5jcmVhdGVSdW4oe1xuICAgICAgdXNlcl9wcm9tcHQ6IGlucHV0LnVzZXJQcm9tcHQsXG4gICAgICBtb2RlbF9uYW1lOiBpbnB1dC5tb2RlbE5hbWUsXG4gICAgICBlZmZvcnQ6IGlucHV0LmVmZm9ydCxcbiAgICAgIHByb2plY3RfbmFtZTogaW5wdXQucHJvamVjdE5hbWUsXG4gICAgICBzeXN0ZW1fcHJvbXB0OiBpbnB1dC5zeXN0ZW1Qcm9tcHQsXG4gICAgICBoaXN0b3J5OiBpbnB1dC5oaXN0b3J5ID8gSlNPTi5wYXJzZShpbnB1dC5oaXN0b3J5KSA6IHVuZGVmaW5lZCxcbiAgICB9KTtcbiAgICByZXR1cm4geyByZXF1ZXN0TG9nSWQgfTtcbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIlBPU1RcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1tdXRhdGlvblwiXSB9KVxuICBhc3luYyBhcHBlbmRTdGVwKGlucHV0OiBBcHBlbmRTdGVwSW5wdXQpOiBQcm9taXNlPHsgc3RlcElkOiBudW1iZXIgfT4ge1xuICAgIGNvbnN0IHN0ZXBJZCA9IGF3YWl0IFJlcXVlc3RMb2dNb2RlbC5hcHBlbmRTdGVwKGlucHV0LnJlcXVlc3RMb2dJZCwge1xuICAgICAgc3RlcF9pbmRleDogaW5wdXQuc3RlcEluZGV4LFxuICAgICAgdHlwZTogaW5wdXQudHlwZSxcbiAgICAgIGlucHV0X3Rva2VuczogaW5wdXQuaW5wdXRUb2tlbnMsXG4gICAgICBvdXRwdXRfdG9rZW5zOiBpbnB1dC5vdXRwdXRUb2tlbnMsXG4gICAgICBjYWNoZV9yZWFkX3Rva2VuczogaW5wdXQuY2FjaGVSZWFkVG9rZW5zLFxuICAgICAgY2FjaGVfY3JlYXRpb25fdG9rZW5zOiBpbnB1dC5jYWNoZUNyZWF0aW9uVG9rZW5zLFxuICAgICAgZHVyYXRpb25fbXM6IGlucHV0LmR1cmF0aW9uTXMsXG4gICAgICBmaW5pc2hfcmVhc29uOiBpbnB1dC5maW5pc2hSZWFzb24sXG4gICAgICByZWFzb25pbmdfdGV4dDogaW5wdXQucmVhc29uaW5nVGV4dCxcbiAgICAgIHJlYXNvbmluZ190b2tlbnM6IGlucHV0LnJlYXNvbmluZ1Rva2VucyxcbiAgICAgIHRvb2xfY2FsbF9pbmRleDogaW5wdXQudG9vbENhbGxJbmRleCxcbiAgICAgIHRvb2xfY2FsbF9pZDogaW5wdXQudG9vbENhbGxJZCxcbiAgICAgIHRvb2xfbmFtZTogaW5wdXQudG9vbE5hbWUsXG4gICAgICB0b29sX2FyZ3M6IGlucHV0LnRvb2xBcmdzLFxuICAgICAgdG9vbF9yZXN1bHQ6IGlucHV0LnRvb2xSZXN1bHQsXG4gICAgICB0b29sX2R1cmF0aW9uX21zOiBpbnB1dC50b29sRHVyYXRpb25NcyxcbiAgICAgIGVycm9yOiBpbnB1dC5lcnJvcixcbiAgICB9KTtcbiAgICByZXR1cm4geyBzdGVwSWQgfTtcbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIlBPU1RcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1tdXRhdGlvblwiXSB9KVxuICBhc3luYyBmaW5pc2hSdW4oaW5wdXQ6IEZpbmlzaFJ1bklucHV0KTogUHJvbWlzZTx7IG9rOiBib29sZWFuIH0+IHtcbiAgICBhd2FpdCBSZXF1ZXN0TG9nTW9kZWwuZmluaXNoUnVuKGlucHV0LnJlcXVlc3RMb2dJZCwge1xuICAgICAgc3RhdHVzOiBpbnB1dC5zdGF0dXMsXG4gICAgICByZXNwb25zZTogaW5wdXQucmVzcG9uc2UsXG4gICAgICB0b2tlbl9uYW1lOiBpbnB1dC50b2tlbk5hbWUsXG4gICAgICBpbnB1dF90b2tlbnM6IGlucHV0LnRvdGFsSW5wdXRUb2tlbnMsXG4gICAgICBvdXRwdXRfdG9rZW5zOiBpbnB1dC50b3RhbE91dHB1dFRva2VucyxcbiAgICAgIGNhY2hlX3JlYWRfdG9rZW5zOiBpbnB1dC50b3RhbENhY2hlUmVhZFRva2VucyxcbiAgICAgIGNhY2hlX2NyZWF0aW9uX3Rva2VuczogaW5wdXQudG90YWxDYWNoZUNyZWF0aW9uVG9rZW5zLFxuICAgICAgZHVyYXRpb25fbXM6IGlucHV0LnRvdGFsRHVyYXRpb25NcyxcbiAgICAgIGhpc3Rvcnk6IGlucHV0Lmhpc3RvcnkgPyBKU09OLnBhcnNlKGlucHV0Lmhpc3RvcnkpIDogdW5kZWZpbmVkLFxuICAgICAgZXJyb3JfbWVzc2FnZTogaW5wdXQuZXJyb3JNZXNzYWdlLFxuICAgIH0pO1xuICAgIHJldHVybiB7IG9rOiB0cnVlIH07XG4gIH1cblxuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJHRVRcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1xdWVyeVwiXSB9KVxuICBhc3luYyBzdGF0cygpOiBQcm9taXNlPFRva2VuU3RhdHNbXT4ge1xuICAgIHJldHVybiBRZ3JpZERpc3BhdGNoZXIuZ2V0U3RhdHMoKTtcbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIkdFVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLXF1ZXJ5XCJdIH0pXG4gIGFzeW5jIHRvdGFsQ29zdCh0b2tlbk5hbWU/OiBzdHJpbmcpOiBQcm9taXNlPHsgdXNkOiBudW1iZXIgfT4ge1xuICAgIHJldHVybiB7IHVzZDogYXdhaXQgUmVxdWVzdExvZ01vZGVsLnRvdGFsQ29zdCh7IHRva2VuX25hbWU6IHRva2VuTmFtZSB9KSB9O1xuICB9XG5cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiR0VUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stcXVlcnlcIl0gfSlcbiAgYXN5bmMgcHJvamVjdE5hbWVzKCk6IFByb21pc2U8eyBuYW1lczogc3RyaW5nW10gfT4ge1xuICAgIHJldHVybiB7IG5hbWVzOiBhd2FpdCBSZXF1ZXN0TG9nTW9kZWwuZGlzdGluY3RQcm9qZWN0TmFtZXMoKSB9O1xuICB9XG5cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiUE9TVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLW11dGF0aW9uXCJdIH0pXG4gIGFzeW5jIGFkZFRva2VuKFxuICAgIHByb3ZpZGVyOiBzdHJpbmcsXG4gICAgY3JlZGVudGlhbHM6IFRva2VuQ3JlZGVudGlhbHMsXG4gICAgbmFtZTogc3RyaW5nLFxuICApOiBQcm9taXNlPHsgYWRkZWQ6IGJvb2xlYW4gfT4ge1xuICAgIGF3YWl0IFRva2VuTW9kZWwuc2F2ZShbXG4gICAgICB7XG4gICAgICAgIHByb3ZpZGVyLFxuICAgICAgICBjcmVkZW50aWFscyxcbiAgICAgICAgbmFtZSxcbiAgICAgIH0sXG4gICAgXSk7XG4gICAgcmV0dXJuIHsgYWRkZWQ6IHRydWUgfTtcbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIlBPU1RcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1tdXRhdGlvblwiXSB9KVxuICBhc3luYyB1cGRhdGVUb2tlbihpZDogbnVtYmVyLCBuYW1lPzogc3RyaW5nKTogUHJvbWlzZTx7IHVwZGF0ZWQ6IGJvb2xlYW4gfT4ge1xuICAgIGNvbnN0IGVudHJ5ID0gYXdhaXQgVG9rZW5Nb2RlbC5maW5kT25lKFwiQVwiLCB7IGlkIH0pO1xuICAgIGlmICghZW50cnkpIHJldHVybiB7IHVwZGF0ZWQ6IGZhbHNlIH07XG5cbiAgICBhd2FpdCBUb2tlbk1vZGVsLnNhdmUoW1xuICAgICAge1xuICAgICAgICBpZDogZW50cnkuaWQsXG4gICAgICAgIHByb3ZpZGVyOiBlbnRyeS5wcm92aWRlcixcbiAgICAgICAgY3JlZGVudGlhbHM6IGVudHJ5LmNyZWRlbnRpYWxzLFxuICAgICAgICBuYW1lOiBuYW1lICE9PSB1bmRlZmluZWQgPyBuYW1lIDogZW50cnkubmFtZSxcbiAgICAgIH0sXG4gICAgXSk7XG4gICAgcmV0dXJuIHsgdXBkYXRlZDogdHJ1ZSB9O1xuICB9XG5cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiUE9TVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLW11dGF0aW9uXCJdIH0pXG4gIGFzeW5jIHJlbW92ZVRva2VuKGlkOiBudW1iZXIpOiBQcm9taXNlPHsgcmVtb3ZlZDogYm9vbGVhbiB9PiB7XG4gICAgY29uc3QgZW50cnkgPSBhd2FpdCBUb2tlbk1vZGVsLmZpbmRPbmUoXCJBXCIsIHsgaWQgfSk7XG4gICAgaWYgKCFlbnRyeSkgcmV0dXJuIHsgcmVtb3ZlZDogZmFsc2UgfTtcbiAgICBhd2FpdCBUb2tlbk1vZGVsLmRlbChbZW50cnkuaWRdKTtcbiAgICByZXR1cm4geyByZW1vdmVkOiB0cnVlIH07XG4gIH1cblxuICAvKipcbiAgICog7Yag7YGwIO2ZnOyEse2ZlC/ruYTtmZzshLHtmZQg7Yag6riAIERC7J2YIGFjdGl2ZSDtlYTrk5wg7JeF642w7J207Yq4XG4gICAqL1xuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJQT1NUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stbXV0YXRpb25cIl0gfSlcbiAgYXN5bmMgdG9nZ2xlVG9rZW4oaWQ6IG51bWJlcik6IFByb21pc2U8eyBhY3RpdmU6IGJvb2xlYW4gfT4ge1xuICAgIGNvbnN0IGVudHJ5ID0gYXdhaXQgVG9rZW5Nb2RlbC5maW5kT25lKFwiQVwiLCB7IGlkIH0pO1xuICAgIGlmICghZW50cnkpIHJldHVybiB7IGFjdGl2ZTogZmFsc2UgfTtcblxuICAgIGNvbnN0IG5ld0FjdGl2ZSA9ICFlbnRyeS5hY3RpdmU7XG4gICAgYXdhaXQgVG9rZW5Nb2RlbC5zYXZlKFtcbiAgICAgIHtcbiAgICAgICAgaWQsXG4gICAgICAgIHByb3ZpZGVyOiBlbnRyeS5wcm92aWRlcixcbiAgICAgICAgY3JlZGVudGlhbHM6IGVudHJ5LmNyZWRlbnRpYWxzLFxuICAgICAgICBhY3RpdmU6IG5ld0FjdGl2ZSxcbiAgICAgICAgbmFtZTogZW50cnkubmFtZSxcbiAgICAgIH0sXG4gICAgXSk7XG4gICAgcmV0dXJuIHsgYWN0aXZlOiBuZXdBY3RpdmUgfTtcbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIlBPU1RcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1tdXRhdGlvblwiXSB9KVxuICBhc3luYyBvYXV0aFN0YXJ0KG5hbWU6IHN0cmluZyk6IFByb21pc2U8T0F1dGhTdGFydFJlc3VsdD4ge1xuICAgIGNvbnN0IHsgY29kZVZlcmlmaWVyLCBjb2RlQ2hhbGxlbmdlLCBzdGF0ZSB9ID0gZ2VuZXJhdGVQS0NFKCk7XG5cbiAgICBjb25zdCBzZXJ2ZXJQb3J0ID0gcHJvY2Vzcy5lbnYuUE9SVCA/PyBcIjQ0OTAwXCI7XG4gICAgY29uc3QgcmVkaXJlY3RVcmkgPSBgaHR0cDovL2xvY2FsaG9zdDoke3NlcnZlclBvcnR9L2NhbGxiYWNrYDtcbiAgICBjb25zdCBhdXRoVXJsID0gYnVpbGRBdXRoVXJsKGNvZGVDaGFsbGVuZ2UsIHN0YXRlLCByZWRpcmVjdFVyaSk7XG5cbiAgICBhd2FpdCBzZXRPQXV0aFN0YXRlKHN0YXRlLCB7IGNvZGVWZXJpZmllciwgbmFtZSwgcmVkaXJlY3RVcmkgfSk7XG5cbiAgICByZXR1cm4geyBhdXRoVXJsIH07XG4gIH1cblxuICBhc3luYyBoYW5kbGVPQXV0aENhbGxiYWNrKGNvZGU6IHN0cmluZywgc3RhdGU6IHN0cmluZywgcmVwbHk6IEZhc3RpZnlSZXBseSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHBlbmRpbmcgPSBhd2FpdCBnZXRPQXV0aFN0YXRlKHN0YXRlKTtcbiAgICBpZiAoIXBlbmRpbmcpIHtcbiAgICAgIGxvZ2dlci53YXJuKFwib2F1dGggY2FsbGJhY2s6IGludmFsaWRfc3RhdGVcIik7XG4gICAgICByZXR1cm4gcmVwbHkucmVkaXJlY3QoXCIvP29hdXRoPWVycm9yJnJlYXNvbj1pbnZhbGlkX3N0YXRlXCIpO1xuICAgIH1cbiAgICBhd2FpdCBkZWxldGVPQXV0aFN0YXRlKHN0YXRlKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCB0b2tlbnMgPSBhd2FpdCBleGNoYW5nZUNvZGVGb3JUb2tlbnMoXG4gICAgICAgIGNvZGUsXG4gICAgICAgIHBlbmRpbmcuY29kZVZlcmlmaWVyLFxuICAgICAgICBzdGF0ZSxcbiAgICAgICAgcGVuZGluZy5yZWRpcmVjdFVyaSxcbiAgICAgICk7XG5cbiAgICAgIGlmICh0b2tlbnMuYWNjb3VudFV1aWQpIHtcbiAgICAgICAgY29uc3Qgb2xkRW50cmllcyA9IGF3YWl0IFRva2VuTW9kZWwuZmluZEJ5QWNjb3VudElkZW50aWZpZXIoXG4gICAgICAgICAgXCJBXCIsXG4gICAgICAgICAgXCJhbnRocm9waWNcIixcbiAgICAgICAgICB0b2tlbnMuYWNjb3VudFV1aWQsXG4gICAgICAgICk7XG4gICAgICAgIGlmIChvbGRFbnRyaWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBhd2FpdCBUb2tlbk1vZGVsLmRlbChvbGRFbnRyaWVzLm1hcCgobykgPT4gby5pZCkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IFRva2VuTW9kZWwuc2F2ZShbXG4gICAgICAgIHtcbiAgICAgICAgICBwcm92aWRlcjogXCJhbnRocm9waWNcIixcbiAgICAgICAgICBjcmVkZW50aWFsczoge1xuICAgICAgICAgICAgYWNjZXNzVG9rZW46IHRva2Vucy5hY2Nlc3NUb2tlbixcbiAgICAgICAgICAgIHJlZnJlc2hUb2tlbjogdG9rZW5zLnJlZnJlc2hUb2tlbixcbiAgICAgICAgICAgIGV4cGlyZXNBdDogdG9rZW5zLmV4cGlyZXNBdCA/PyAwLFxuICAgICAgICAgICAgYWNjb3VudFV1aWQ6IHRva2Vucy5hY2NvdW50VXVpZCA/PyBcIlwiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbmFtZTogcGVuZGluZy5uYW1lLFxuICAgICAgICB9LFxuICAgICAgXSk7XG5cbiAgICAgIHJldHVybiByZXBseS5yZWRpcmVjdChgLz9vYXV0aD1zdWNjZXNzJm5hbWU9JHtlbmNvZGVVUklDb21wb25lbnQocGVuZGluZy5uYW1lKX1gKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gcmVwbHkucmVkaXJlY3QoYC8/b2F1dGg9ZXJyb3ImcmVhc29uPSR7ZW5jb2RlVVJJQ29tcG9uZW50KChlIGFzIEVycm9yKS5tZXNzYWdlKX1gKTtcbiAgICB9XG4gIH1cblxuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJQT1NUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stbXV0YXRpb25cIl0gfSlcbiAgYXN5bmMgb2F1dGhTdGFydE9wZW5BSShuYW1lOiBzdHJpbmcpOiBQcm9taXNlPE9BdXRoU3RhcnRSZXN1bHQ+IHtcbiAgICBpZiAoIVFncmlkRGlzcGF0Y2hlci5vcGVuYWlEaXNwYXRjaGVyKSB0aHJvdyBuZXcgRXJyb3IoXCJPcGVuQUkgZGlzcGF0Y2hlciBub3QgaW5pdGlhbGl6ZWRcIik7XG4gICAgY29uc3QgeyBhdXRoVXJsIH0gPSBhd2FpdCBRZ3JpZERpc3BhdGNoZXIub3BlbmFpRGlzcGF0Y2hlci5zdGFydEJyb3dzZXJMb2dpbihuYW1lKTtcblxuICAgIC8vIGZpcmUtYW5kLWZvcmdldDogY29kZXggbG9naW4g7JmE66OMIOuMgOq4sCDihpIg7Yag7YGwIOyggOyepVxuICAgIFFncmlkRGlzcGF0Y2hlci5vcGVuYWlEaXNwYXRjaGVyXG4gICAgICAuY29tcGxldGVCcm93c2VyTG9naW4oKVxuICAgICAgLnRoZW4oYXN5bmMgKGNyZWRzKSA9PiB7XG4gICAgICAgIGlmIChjcmVkcy5hY2NvdW50SWQpIHtcbiAgICAgICAgICBjb25zdCBvbGRFbnRyaWVzID0gYXdhaXQgVG9rZW5Nb2RlbC5maW5kQnlBY2NvdW50SWRlbnRpZmllcihcbiAgICAgICAgICAgIFwiQVwiLFxuICAgICAgICAgICAgXCJvcGVuYWlcIixcbiAgICAgICAgICAgIGNyZWRzLmFjY291bnRJZCxcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChvbGRFbnRyaWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGF3YWl0IFRva2VuTW9kZWwuZGVsKG9sZEVudHJpZXMubWFwKChvKSA9PiBvLmlkKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGF3YWl0IFRva2VuTW9kZWwuc2F2ZShbXG4gICAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZXI6IFwib3BlbmFpXCIsXG4gICAgICAgICAgICBjcmVkZW50aWFsczoge1xuICAgICAgICAgICAgICBhY2Nlc3NUb2tlbjogY3JlZHMuYWNjZXNzVG9rZW4sXG4gICAgICAgICAgICAgIHJlZnJlc2hUb2tlbjogY3JlZHMucmVmcmVzaFRva2VuLFxuICAgICAgICAgICAgICBpZFRva2VuOiBjcmVkcy5pZFRva2VuLFxuICAgICAgICAgICAgICBhY2Nlc3NUb2tlbkV4cGlyZXNBdDogRGF0ZS5ub3coKSArIDEwICogMjQgKiAzNjAwICogMTAwMCxcbiAgICAgICAgICAgICAgYWNjb3VudElkOiBjcmVkcy5hY2NvdW50SWQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICB9LFxuICAgICAgICBdKTtcbiAgICAgICAgbG9nZ2VyLmluZm8oYE9wZW5BSSB0b2tlbiBzYXZlZCBmb3IgJHtuYW1lfWApO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZSkgPT4ge1xuICAgICAgICBsb2dnZXIud2FybihgT3BlbkFJIGJyb3dzZXIgbG9naW4gZmFpbGVkOiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuICAgICAgfSk7XG5cbiAgICByZXR1cm4geyBhdXRoVXJsIH07XG4gIH1cblxuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJHRVRcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1xdWVyeVwiXSB9KVxuICBhc3luYyB1c2FnZSh0b2tlbklkPzogbnVtYmVyKTogUHJvbWlzZTxVc2FnZVJlc3BvbnNlPiB7XG4gICAgY29uc3QgeyByb3dzOiBhbGxUb2tlbnMgfSA9IGF3YWl0IFRva2VuTW9kZWwuZmluZE1hbnkoXCJBXCIpO1xuICAgIGNvbnN0IGVudHJ5ID0gdG9rZW5JZFxuICAgICAgPyBhbGxUb2tlbnMuZmluZCgoZSkgPT4gZS5pZCA9PT0gdG9rZW5JZClcbiAgICAgIDogYWxsVG9rZW5zLmZpbmRMYXN0KChlKSA9PiBlLmFjdGl2ZSAmJiBlLnByb3ZpZGVyID09PSBcImFudGhyb3BpY1wiKTtcblxuICAgIGlmICghZW50cnkpIHJldHVybiB7IGVycm9yOiBcIk5PVF9GT1VORFwiIH07XG5cbiAgICBpZiAoZW50cnkucHJvdmlkZXIgPT09IFwib3BlbmFpXCIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJhdyA9IChhd2FpdCBRZ3JpZERpc3BhdGNoZXIub3BlbmFpRGlzcGF0Y2hlcj8uZ2V0UmF0ZUxpbWl0cyhlbnRyeS5uYW1lKSkgYXMge1xuICAgICAgICAgIHJhdGVMaW1pdHM/OiB7XG4gICAgICAgICAgICBwcmltYXJ5PzogeyB1c2VkUGVyY2VudDogbnVtYmVyOyB3aW5kb3dEdXJhdGlvbk1pbnM6IG51bWJlcjsgcmVzZXRzQXQ6IG51bWJlciB9O1xuICAgICAgICAgICAgc2Vjb25kYXJ5PzogeyB1c2VkUGVyY2VudDogbnVtYmVyOyB3aW5kb3dEdXJhdGlvbk1pbnM6IG51bWJlcjsgcmVzZXRzQXQ6IG51bWJlciB9O1xuICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHJsID0gcmF3Py5yYXRlTGltaXRzO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHByb3ZpZGVyOiBcIm9wZW5haVwiLFxuICAgICAgICAgIGZpdmVIb3VyOiBybD8ucHJpbWFyeVxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgdXRpbGl6YXRpb246IHJsLnByaW1hcnkudXNlZFBlcmNlbnQsXG4gICAgICAgICAgICAgICAgcmVzZXRzQXQ6IG5ldyBEYXRlKHJsLnByaW1hcnkucmVzZXRzQXQgKiAxMDAwKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgc2V2ZW5EYXk6IHJsPy5zZWNvbmRhcnlcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIHV0aWxpemF0aW9uOiBybC5zZWNvbmRhcnkudXNlZFBlcmNlbnQsXG4gICAgICAgICAgICAgICAgcmVzZXRzQXQ6IG5ldyBEYXRlKHJsLnNlY29uZGFyeS5yZXNldHNBdCAqIDEwMDApLnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgfTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIHsgZXJyb3I6IGBPcGVuQUkgdXNhZ2UgZmFpbGVkOiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZW50cnkucHJvdmlkZXIgIT09IFwiYW50aHJvcGljXCIpIHtcbiAgICAgIHJldHVybiB7IGVycm9yOiBgdXNhZ2UgQVBJIG5vdCBzdXBwb3J0ZWQgZm9yIHByb3ZpZGVyOiAke2VudHJ5LnByb3ZpZGVyfWAgfTtcbiAgICB9XG5cbiAgICBsZXQgYWNjZXNzVG9rZW4gPSBnZXRBY2Nlc3NUb2tlbihlbnRyeS5jcmVkZW50aWFscyk7XG4gICAgY29uc3QgaXNFeHBpcmVkID0gZ2V0RXhwaXJlc0F0KGVudHJ5LmNyZWRlbnRpYWxzKSA8IERhdGUubm93KCk7XG5cbiAgICBpZiAoaXNFeHBpcmVkICYmIGdldFJlZnJlc2hUb2tlbihlbnRyeS5jcmVkZW50aWFscykpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGFjY2Vzc1Rva2VuID0gYXdhaXQgdGhpcy5yZWZyZXNoVG9rZW4oZW50cnkpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBvYXV0aExvZ2dlci53YXJuKGByZWZyZXNoIGZhaWxlZCBmb3IgJHtlbnRyeS5uYW1lfTogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKTtcbiAgICAgICAgcmV0dXJuIHsgZXJyb3I6IFwicmUtbG9naW4gcmVxdWlyZWRcIiB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHJhdyA9IGF3YWl0IGZldGNoVXNhZ2UoYWNjZXNzVG9rZW4pO1xuICAgIGlmIChyYXcuZXJyb3IgJiYgZ2V0UmVmcmVzaFRva2VuKGVudHJ5LmNyZWRlbnRpYWxzKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYWNjZXNzVG9rZW4gPSBhd2FpdCB0aGlzLnJlZnJlc2hUb2tlbihlbnRyeSk7XG4gICAgICAgIGNvbnN0IHJldHJpZWQgPSBhd2FpdCBmZXRjaFVzYWdlKGFjY2Vzc1Rva2VuKTtcbiAgICAgICAgaWYgKHJldHJpZWQuZXJyb3IpIHJldHVybiB7IGVycm9yOiByZXRyaWVkLmVycm9yIH07XG4gICAgICAgIHJldHVybiBjb252ZXJ0QW50aHJvcGljVXNhZ2UocmV0cmllZCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIG9hdXRoTG9nZ2VyLndhcm4oYHJlZnJlc2ggZmFpbGVkIGZvciAke2VudHJ5Lm5hbWV9OiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuICAgICAgICByZXR1cm4geyBlcnJvcjogXCJyZS1sb2dpbiByZXF1aXJlZFwiIH07XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChyYXcuZXJyb3IpIHJldHVybiB7IGVycm9yOiByYXcuZXJyb3IgfTtcbiAgICByZXR1cm4gY29udmVydEFudGhyb3BpY1VzYWdlKHJhdyk7XG4gIH1cblxuICBhc3luYyByZWZyZXNoVG9rZW4odG9rZW46IFRva2VuU3Vic2V0QSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgY3JlZHMgPSB0b2tlbi5jcmVkZW50aWFscztcbiAgICBjb25zdCBydCA9IGdldFJlZnJlc2hUb2tlbihjcmVkcyk7XG4gICAgaWYgKCFydCkgdGhyb3cgbmV3IEVycm9yKFwiTm8gcmVmcmVzaCB0b2tlblwiKTtcbiAgICBjb25zdCByZWZyZXNoZWQgPSBhd2FpdCByZWZyZXNoQWNjZXNzVG9rZW4ocnQpO1xuICAgIGNvbnN0IHVwZGF0ZWQgPSBUb2tlbkNyZWRlbnRpYWxzLnBhcnNlKHtcbiAgICAgIC4uLmNyZWRzLFxuICAgICAgYWNjZXNzVG9rZW46IHJlZnJlc2hlZC5hY2Nlc3NUb2tlbixcbiAgICAgIHJlZnJlc2hUb2tlbjogcmVmcmVzaGVkLnJlZnJlc2hUb2tlbixcbiAgICAgIGV4cGlyZXNBdDogcmVmcmVzaGVkLmV4cGlyZXNBdCxcbiAgICB9KTtcbiAgICBhd2FpdCBUb2tlbk1vZGVsLnNhdmUoW1xuICAgICAge1xuICAgICAgICBpZDogdG9rZW4uaWQsXG4gICAgICAgIHByb3ZpZGVyOiB0b2tlbi5wcm92aWRlcixcbiAgICAgICAgY3JlZGVudGlhbHM6IHVwZGF0ZWQsXG4gICAgICAgIG5hbWU6IHRva2VuLm5hbWUsXG4gICAgICB9LFxuICAgIF0pO1xuICAgIHJldHVybiByZWZyZXNoZWQuYWNjZXNzVG9rZW47XG4gIH1cblxuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJHRVRcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1xdWVyeVwiXSB9KVxuICBhc3luYyBoZWFsdGgoKTogUHJvbWlzZTxIZWFsdGhSZXNwb25zZT4ge1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IFwib2tcIixcbiAgICAgIGFjdGl2ZVRva2VuczogUWdyaWREaXNwYXRjaGVyLnRva2Vucy5zaXplLFxuICAgICAgc3Vic2NyaWJlcjogUWdyaWREaXNwYXRjaGVyLnN1YnNjcmliZXI/LnN0YXR1cygpID8/IG51bGwsXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgUWdyaWRGcmFtZSA9IG5ldyBRZ3JpZEZyYW1lQ2xhc3MoKTtcblxuZnVuY3Rpb24gY29udmVydEFudGhyb3BpY1VzYWdlKHJhdzogQW50aHJvcGljVXNhZ2VSYXcpOiBVc2FnZVJlc3BvbnNlIHtcbiAgcmV0dXJuIHtcbiAgICBwcm92aWRlcjogXCJhbnRocm9waWNcIixcbiAgICBmaXZlSG91cjogcmF3LmZpdmVfaG91clxuICAgICAgPyB7IHV0aWxpemF0aW9uOiByYXcuZml2ZV9ob3VyLnV0aWxpemF0aW9uLCByZXNldHNBdDogcmF3LmZpdmVfaG91ci5yZXNldHNfYXQgfVxuICAgICAgOiBudWxsLFxuICAgIHNldmVuRGF5OiByYXcuc2V2ZW5fZGF5XG4gICAgICA/IHsgdXRpbGl6YXRpb246IHJhdy5zZXZlbl9kYXkudXRpbGl6YXRpb24sIHJlc2V0c0F0OiByYXcuc2V2ZW5fZGF5LnJlc2V0c19hdCB9XG4gICAgICA6IG51bGwsXG4gIH07XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNENBLE1BQU0saUNBQWlCLElBQUksS0FBeUI7QUFHcEQsTUFBTSxxQkFBcUI7QUFDM0IsTUFBTSxrQkFBa0I7QUFFeEIsZUFBZSxjQUFjLE9BQWUsTUFBbUM7Q0FDN0UsTUFBTSxRQUFRLG9CQUFvQjtBQUNsQyxLQUFJLENBQUMsTUFBTyxPQUFNLElBQUksTUFBTSwrQkFBK0I7QUFDM0QsT0FBTSxNQUFNLElBQUk7RUFDZCxLQUFLLEdBQUcscUJBQXFCO0VBQzdCLE9BQU8sS0FBSyxVQUFVLEtBQUs7RUFDM0IsS0FBSztFQUNOLENBQUM7O0FBR0osZUFBZSxjQUFjLE9BQWtEO0NBQzdFLE1BQU0sUUFBUSxvQkFBb0I7QUFDbEMsS0FBSSxDQUFDLE1BQU8sT0FBTSxJQUFJLE1BQU0sK0JBQStCO0NBQzNELE1BQU0sTUFBTSxNQUFNLE1BQU0sSUFBWSxFQUFFLEtBQUssR0FBRyxxQkFBcUIsU0FBUyxDQUFDO0FBQzdFLEtBQUksQ0FBQyxJQUFLLFFBQU87QUFDakIsUUFBTyxLQUFLLE1BQU0sSUFBSTs7QUFHeEIsZUFBZSxpQkFBaUIsT0FBOEI7Q0FDNUQsTUFBTSxRQUFRLG9CQUFvQjtBQUNsQyxLQUFJLENBQUMsTUFBTztBQUNaLE9BQU0sTUFBTSxPQUFPLEVBQUUsS0FBSyxHQUFHLHFCQUFxQixTQUFTLENBQUM7O0FBRzlELE1BQU0sU0FBUyxVQUFVLENBQUMsUUFBUSxDQUFDO0FBQ25DLE1BQU0sY0FBYyxVQUFVLENBQUMsU0FBUyxRQUFRLENBQUM7QUFFakQsSUFBTSxrQkFBTixjQUE4QixlQUFlO0NBQzNDLGNBQWM7QUFDWixRQUFNLFFBQVE7O0NBR2hCLE1BQ00sTUFBTSxNQUF3QztFQUNsRCxNQUFNLG1CQUFtQixLQUFLLFlBQVksS0FBSyxT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
|
|
@@ -229,4 +229,4 @@ const RequestLogModel = new RequestLogModelClass();
|
|
|
229
229
|
//#endregion
|
|
230
230
|
export { MICRO_USD, RequestLogModel };
|
|
231
231
|
|
|
232
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC1sb2cubW9kZWwuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL3JlcXVlc3QtbG9nL3JlcXVlc3QtbG9nLm1vZGVsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGFwaSxcbiAgYXNBcnJheSxcbiAgQmFkUmVxdWVzdEV4Y2VwdGlvbixcbiAgQmFzZU1vZGVsQ2xhc3MsXG4gIGV4aGF1c3RpdmUsXG4gIHR5cGUgTGlzdFJlc3VsdCxcbiAgTm90Rm91bmRFeGNlcHRpb24sXG59IGZyb20gXCJzb25hbXVcIjtcblxuaW1wb3J0IHsgU0QgfSBmcm9tIFwiLi4vLi4vaTE4bi9zZC5nZW5lcmF0ZWRcIjtcbmltcG9ydCB7IGNhbGN1bGF0ZUNvc3RVc2QgfSBmcm9tIFwiLi4vLi4vdXRpbHMvcHJvdmlkZXJzL2NvbW1vbi9tb2RlbC1jb3N0XCI7XG5pbXBvcnQgeyB0eXBlIFJlcXVlc3RMb2dTdWJzZXRLZXksIHR5cGUgUmVxdWVzdExvZ1N1YnNldE1hcHBpbmcgfSBmcm9tIFwiLi4vc29uYW11LmdlbmVyYXRlZFwiO1xuaW1wb3J0IHsgcmVxdWVzdExvZ0xvYWRlclF1ZXJpZXMsIHJlcXVlc3RMb2dTdWJzZXRRdWVyaWVzIH0gZnJvbSBcIi4uL3NvbmFtdS5nZW5lcmF0ZWQuc3NvXCI7XG5pbXBvcnQgeyB0eXBlIFJlcXVlc3RMb2dMaXN0UGFyYW1zLCB0eXBlIFJlcXVlc3RMb2dTYXZlUGFyYW1zIH0gZnJvbSBcIi4vcmVxdWVzdC1sb2cudHlwZXNcIjtcblxuLy8gY29zdF91c2TripQg7KCV7IiYIG1pY3JvLVVTROuhnCDsoIDsnqUuIOyLpOygnCBVU0QgPSBjb3N0X3VzZCAvIE1JQ1JPX1VTRC5cbmV4cG9ydCBjb25zdCBNSUNST19VU0QgPSAxXzAwMF8wMDA7XG5cbi8qXG4gIFJlcXVlc3RMb2cgTW9kZWxcbiovXG5jbGFzcyBSZXF1ZXN0TG9nTW9kZWxDbGFzcyBleHRlbmRzIEJhc2VNb2RlbENsYXNzPFxuICBSZXF1ZXN0TG9nU3Vic2V0S2V5LFxuICBSZXF1ZXN0TG9nU3Vic2V0TWFwcGluZyxcbiAgdHlwZW9mIHJlcXVlc3RMb2dTdWJzZXRRdWVyaWVzLFxuICB0eXBlb2YgcmVxdWVzdExvZ0xvYWRlclF1ZXJpZXNcbj4ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcIlJlcXVlc3RMb2dcIiwgcmVxdWVzdExvZ1N1YnNldFF1ZXJpZXMsIHJlcXVlc3RMb2dMb2FkZXJRdWVyaWVzKTtcbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIkdFVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLXF1ZXJ5XCJdLCByZXNvdXJjZU5hbWU6IFwiUmVxdWVzdExvZ1wiIH0pXG4gIGFzeW5jIGZpbmRCeUlkPFQgZXh0ZW5kcyBSZXF1ZXN0TG9nU3Vic2V0S2V5PihcbiAgICBzdWJzZXQ6IFQsXG4gICAgaWQ6IG51bWJlcixcbiAgKTogUHJvbWlzZTxSZXF1ZXN0TG9nU3Vic2V0TWFwcGluZ1tUXT4ge1xuICAgIGNvbnN0IHsgcm93cyB9ID0gYXdhaXQgdGhpcy5maW5kTWFueShzdWJzZXQsIHtcbiAgICAgIGlkLFxuICAgICAgbnVtOiAxLFxuICAgICAgcGFnZTogMSxcbiAgICB9KTtcbiAgICBpZiAoIXJvd3NbMF0pIHtcbiAgICAgIHRocm93IG5ldyBOb3RGb3VuZEV4Y2VwdGlvbihTRChcImVycm9yLmVudGl0eU5vdEZvdW5kXCIpKFwiUmVxdWVzdExvZ1wiLCBpZCkpO1xuICAgIH1cblxuICAgIHJldHVybiByb3dzWzBdO1xuICB9XG5cbiAgYXN5bmMgZmluZE9uZTxUIGV4dGVuZHMgUmVxdWVzdExvZ1N1YnNldEtleT4oXG4gICAgc3Vic2V0OiBULFxuICAgIGxpc3RQYXJhbXM6IFJlcXVlc3RMb2dMaXN0UGFyYW1zLFxuICApOiBQcm9taXNlPFJlcXVlc3RMb2dTdWJzZXRNYXBwaW5nW1RdIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgcm93cyB9ID0gYXdhaXQgdGhpcy5maW5kTWFueShzdWJzZXQsIHtcbiAgICAgIC4uLmxpc3RQYXJhbXMsXG4gICAgICBudW06IDEsXG4gICAgICBwYWdlOiAxLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJvd3NbMF0gPz8gbnVsbDtcbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIkdFVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLXF1ZXJ5XCJdLCByZXNvdXJjZU5hbWU6IFwiUmVxdWVzdExvZ3NcIiB9KVxuICBhc3luYyBmaW5kTWFueTxUIGV4dGVuZHMgUmVxdWVzdExvZ1N1YnNldEtleSwgTFAgZXh0ZW5kcyBSZXF1ZXN0TG9nTGlzdFBhcmFtcz4oXG4gICAgc3Vic2V0OiBULFxuICAgIHJhd1BhcmFtcz86IExQLFxuICApOiBQcm9taXNlPExpc3RSZXN1bHQ8TFAsIFJlcXVlc3RMb2dTdWJzZXRNYXBwaW5nW1RdPj4ge1xuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIG51bTogMjQsXG4gICAgICBwYWdlOiAxLFxuICAgICAgc2VhcmNoOiBcImlkXCIgYXMgY29uc3QsXG4gICAgICBvcmRlckJ5OiBcImlkLWRlc2NcIiBhcyBjb25zdCxcbiAgICAgIC4uLnJhd1BhcmFtcyxcbiAgICB9IHNhdGlzZmllcyBSZXF1ZXN0TG9nTGlzdFBhcmFtcztcblxuICAgIGNvbnN0IHsgcWIsIG9uU3Vic2V0OiBfIH0gPSB0aGlzLmdldFN1YnNldFF1ZXJpZXMoc3Vic2V0KTtcblxuICAgIGlmIChwYXJhbXMuaWQpIHtcbiAgICAgIHFiLndoZXJlSW4oXCJyZXF1ZXN0X2xvZ3MuaWRcIiwgYXNBcnJheShwYXJhbXMuaWQpKTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLnRva2VuX25hbWUpIHtcbiAgICAgIHFiLndoZXJlKFwicmVxdWVzdF9sb2dzLnRva2VuX25hbWVcIiwgcGFyYW1zLnRva2VuX25hbWUpO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMucHJvamVjdF9uYW1lX2lzX251bGwpIHtcbiAgICAgIHFiLndoZXJlKFwicmVxdWVzdF9sb2dzLnByb2plY3RfbmFtZVwiLCBudWxsKTtcbiAgICB9IGVsc2UgaWYgKHBhcmFtcy5wcm9qZWN0X25hbWVfaXNfbm90X251bGwpIHtcbiAgICAgIHFiLndoZXJlKFwicmVxdWVzdF9sb2dzLnByb2plY3RfbmFtZVwiLCBcIiE9XCIsIG51bGwpO1xuICAgIH0gZWxzZSBpZiAocGFyYW1zLnByb2plY3RfbmFtZSkge1xuICAgICAgcWIud2hlcmUoXCJyZXF1ZXN0X2xvZ3MucHJvamVjdF9uYW1lXCIsIHBhcmFtcy5wcm9qZWN0X25hbWUpO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMubW9kZWxfbmFtZSkge1xuICAgICAgcWIud2hlcmUoXCJyZXF1ZXN0X2xvZ3MubW9kZWxfbmFtZVwiLCBwYXJhbXMubW9kZWxfbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy5zZWFyY2ggJiYgcGFyYW1zLmtleXdvcmQgJiYgcGFyYW1zLmtleXdvcmQubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKHBhcmFtcy5zZWFyY2ggPT09IFwiaWRcIikge1xuICAgICAgICBxYi53aGVyZShcInJlcXVlc3RfbG9ncy5pZFwiLCBOdW1iZXIocGFyYW1zLmtleXdvcmQpKTtcbiAgICAgIH0gZWxzZSBpZiAocGFyYW1zLnNlYXJjaCA9PT0gXCJ0b2tlbl9uYW1lXCIpIHtcbiAgICAgICAgcWIud2hlcmUoXCJyZXF1ZXN0X2xvZ3MudG9rZW5fbmFtZVwiLCBcImxpa2VcIiwgYCUke3BhcmFtcy5rZXl3b3JkfSVgKTtcbiAgICAgIH0gZWxzZSBpZiAocGFyYW1zLnNlYXJjaCA9PT0gXCJ1c2VyX3Byb21wdFwiKSB7XG4gICAgICAgIHFiLndoZXJlKFwicmVxdWVzdF9sb2dzLnVzZXJfcHJvbXB0XCIsIFwibGlrZVwiLCBgJSR7cGFyYW1zLmtleXdvcmR9JWApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEJhZFJlcXVlc3RFeGNlcHRpb24oU0QoXCJlcnJvci51bmtub3duU2VhcmNoRmllbGRcIikocGFyYW1zLnNlYXJjaCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIG9yZGVyQnlcbiAgICBpZiAocGFyYW1zLm9yZGVyQnkpIHtcbiAgICAgIC8vIGRlZmF1bHQgb3JkZXJCeVxuICAgICAgaWYgKHBhcmFtcy5vcmRlckJ5ID09PSBcImlkLWRlc2NcIikge1xuICAgICAgICBxYi5vcmRlckJ5KFwicmVxdWVzdF9sb2dzLmlkXCIsIFwiZGVzY1wiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV4aGF1c3RpdmUocGFyYW1zLm9yZGVyQnkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGVuaGFuY2VycyA9IHRoaXMuY3JlYXRlRW5oYW5jZXJzKHtcbiAgICAgIEE6IChyb3cpID0+ICh7XG4gICAgICAgIC4uLnJvdyxcbiAgICAgICAgLy8g7ISc67iM7IWL67OE66GcIHZpcnR1YWwg7ZWE65OcIOqzhOyCsOuhnOyngSDstpTqsIBcbiAgICAgIH0pLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZVN1YnNldFF1ZXJ5KHtcbiAgICAgIHN1YnNldCxcbiAgICAgIHFiLFxuICAgICAgcGFyYW1zLFxuICAgICAgZW5oYW5jZXJzLFxuICAgICAgZGVidWc6IGZhbHNlLFxuICAgIH0pO1xuICB9XG5cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiUE9TVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLW11dGF0aW9uXCJdIH0pXG4gIGFzeW5jIHNhdmUoc3BhOiBSZXF1ZXN0TG9nU2F2ZVBhcmFtc1tdKTogUHJvbWlzZTxudW1iZXJbXT4ge1xuICAgIGNvbnN0IHdkYiA9IHRoaXMuZ2V0UHVyaShcIndcIik7XG5cbiAgICAvLyByZWdpc3RlclxuICAgIHNwYS5mb3JFYWNoKChzcCkgPT4ge1xuICAgICAgd2RiLnViUmVnaXN0ZXIoXCJyZXF1ZXN0X2xvZ3NcIiwgc3ApO1xuICAgIH0pO1xuXG4gICAgLy8gdHJhbnNhY3Rpb25cbiAgICByZXR1cm4gd2RiLnRyYW5zYWN0aW9uKGFzeW5jICh0cngpID0+IHtcbiAgICAgIGNvbnN0IGlkcyA9IGF3YWl0IHRyeC51YlVwc2VydChcInJlcXVlc3RfbG9nc1wiKTtcblxuICAgICAgcmV0dXJuIGlkcztcbiAgICB9KTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBSdW4gTGlmZWN5Y2xlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIGFzeW5jIGNyZWF0ZVJ1bihwYXJhbXM6IHtcbiAgICB1c2VyX3Byb21wdDogc3RyaW5nO1xuICAgIHN5c3RlbV9wcm9tcHQ/OiBzdHJpbmcgfCBudWxsO1xuICAgIG1vZGVsX25hbWU/OiBzdHJpbmcgfCBudWxsO1xuICAgIGVmZm9ydD86IHN0cmluZyB8IG51bGw7XG4gICAgcHJvamVjdF9uYW1lPzogc3RyaW5nIHwgbnVsbDtcbiAgICBoaXN0b3J5PzogdW5rbm93bjtcbiAgfSk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3Qgd2RiID0gdGhpcy5nZXRQdXJpKFwid1wiKTtcbiAgICB3ZGIudWJSZWdpc3RlcihcInJlcXVlc3RfbG9nc1wiLCB7XG4gICAgICB1c2VyX3Byb21wdDogcGFyYW1zLnVzZXJfcHJvbXB0LFxuICAgICAgc3lzdGVtX3Byb21wdDogcGFyYW1zLnN5c3RlbV9wcm9tcHQgPz8gbnVsbCxcbiAgICAgIG1vZGVsX25hbWU6IHBhcmFtcy5tb2RlbF9uYW1lID8/IG51bGwsXG4gICAgICBlZmZvcnQ6IHBhcmFtcy5lZmZvcnQgPz8gbnVsbCxcbiAgICAgIHByb2plY3RfbmFtZTogcGFyYW1zLnByb2plY3RfbmFtZSA/PyBudWxsLFxuICAgICAgc3RhdHVzOiBcInJ1bm5pbmdcIixcbiAgICAgIHJlc3BvbnNlOiBcIlwiLFxuICAgICAgaW5wdXRfdG9rZW5zOiAwLFxuICAgICAgb3V0cHV0X3Rva2VuczogMCxcbiAgICAgIGNhY2hlX3JlYWRfdG9rZW5zOiAwLFxuICAgICAgY2FjaGVfY3JlYXRpb25fdG9rZW5zOiAwLFxuICAgICAgZHVyYXRpb25fbXM6IDAsXG4gICAgICB0b29sX2NhbGxfY291bnQ6IDAsXG4gICAgICAuLi4ocGFyYW1zLmhpc3RvcnkgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IHsgaGlzdG9yeTogcGFyYW1zLmhpc3RvcnkgYXMgeyB0eXBlOiBzdHJpbmcgfVtdIH1cbiAgICAgICAgOiB7fSksXG4gICAgfSk7XG4gICAgcmV0dXJuIHdkYi50cmFuc2FjdGlvbihhc3luYyAodHJ4KSA9PiB7XG4gICAgICBjb25zdCBpZHMgPSBhd2FpdCB0cngudWJVcHNlcnQoXCJyZXF1ZXN0X2xvZ3NcIik7XG4gICAgICByZXR1cm4gaWRzWzBdITtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGFwcGVuZFN0ZXAocmVxdWVzdExvZ0lkOiBudW1iZXIsIHN0ZXA6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCB3ZGIgPSB0aGlzLmdldFB1cmkoXCJ3XCIpO1xuICAgIHdkYi51YlJlZ2lzdGVyKFwicmVxdWVzdF9sb2dfc3RlcHNcIiwgeyByZXF1ZXN0X2xvZ19pZDogcmVxdWVzdExvZ0lkLCAuLi5zdGVwIH0pO1xuICAgIHJldHVybiB3ZGIudHJhbnNhY3Rpb24oYXN5bmMgKHRyeCkgPT4ge1xuICAgICAgY29uc3QgaWRzID0gYXdhaXQgdHJ4LnViVXBzZXJ0KFwicmVxdWVzdF9sb2dfc3RlcHNcIik7XG4gICAgICBpZiAoc3RlcC50eXBlID09PSBcInRvb2xfY2FsbFwiKSB7XG4gICAgICAgIGF3YWl0IHRyeC5mcm9tKFwicmVxdWVzdF9sb2dzXCIpLndoZXJlKFwiaWRcIiwgcmVxdWVzdExvZ0lkKS5pbmNyZW1lbnQoXCJ0b29sX2NhbGxfY291bnRcIiwgMSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gaWRzWzBdITtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGZpbmlzaFJ1bihcbiAgICByZXF1ZXN0TG9nSWQ6IG51bWJlcixcbiAgICBwYXJhbXM6IHtcbiAgICAgIHN0YXR1czogc3RyaW5nO1xuICAgICAgcmVzcG9uc2U/OiBzdHJpbmc7XG4gICAgICB0b2tlbl9uYW1lPzogc3RyaW5nO1xuICAgICAgaW5wdXRfdG9rZW5zPzogbnVtYmVyO1xuICAgICAgb3V0cHV0X3Rva2Vucz86IG51bWJlcjtcbiAgICAgIGNhY2hlX3JlYWRfdG9rZW5zPzogbnVtYmVyO1xuICAgICAgY2FjaGVfY3JlYXRpb25fdG9rZW5zPzogbnVtYmVyO1xuICAgICAgZHVyYXRpb25fbXM/OiBudW1iZXI7XG4gICAgICBoaXN0b3J5PzogdW5rbm93bjtcbiAgICAgIGVycm9yX21lc3NhZ2U/OiBzdHJpbmc7XG4gICAgICB0b29sX2NhbGxfY291bnQ/OiBudW1iZXI7XG4gICAgfSxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHBhcmFtcy5zdGF0dXMgPT09IFwic3VjY2VlZGVkXCIgJiYgIXBhcmFtcy50b2tlbl9uYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ0b2tlbk5hbWUgaXMgcmVxdWlyZWQgZm9yIHN1Y2NlZWRlZCBydW5zXCIpO1xuICAgIH1cbiAgICBjb25zdCB1cGRhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0geyBpZDogcmVxdWVzdExvZ0lkLCBzdGF0dXM6IHBhcmFtcy5zdGF0dXMgfTtcbiAgICBjb25zdCBmaWVsZHMgPSBbXG4gICAgICBcInJlc3BvbnNlXCIsXG4gICAgICBcInRva2VuX25hbWVcIixcbiAgICAgIFwiaW5wdXRfdG9rZW5zXCIsXG4gICAgICBcIm91dHB1dF90b2tlbnNcIixcbiAgICAgIFwiY2FjaGVfcmVhZF90b2tlbnNcIixcbiAgICAgIFwiY2FjaGVfY3JlYXRpb25fdG9rZW5zXCIsXG4gICAgICBcImR1cmF0aW9uX21zXCIsXG4gICAgICBcImVycm9yX21lc3NhZ2VcIixcbiAgICAgIFwidG9vbF9jYWxsX2NvdW50XCIsXG4gICAgXSBhcyBjb25zdDtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBmaWVsZHMpIHtcbiAgICAgIGlmIChwYXJhbXNba2V5XSAhPT0gdW5kZWZpbmVkKSB1cGRhdGVba2V5XSA9IHBhcmFtc1trZXldO1xuICAgIH1cbiAgICBpZiAocGFyYW1zLmhpc3RvcnkgIT09IHVuZGVmaW5lZCkgdXBkYXRlLmhpc3RvcnkgPSBwYXJhbXMuaGlzdG9yeTtcblxuICAgIGlmIChwYXJhbXMuaW5wdXRfdG9rZW5zICE9PSB1bmRlZmluZWQgJiYgcGFyYW1zLm91dHB1dF90b2tlbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgZGIgPSB0aGlzLmdldERCKFwiclwiKTtcbiAgICAgIGNvbnN0IFtyb3ddID0gYXdhaXQgZGIoXCJyZXF1ZXN0X2xvZ3NcIilcbiAgICAgICAgLnNlbGVjdChcIm1vZGVsX25hbWVcIilcbiAgICAgICAgLndoZXJlKFwiaWRcIiwgcmVxdWVzdExvZ0lkKVxuICAgICAgICAubGltaXQoMSk7XG4gICAgICBpZiAocm93Py5tb2RlbF9uYW1lKSB7XG4gICAgICAgIGNvbnN0IG1vZGVsID0gcm93Lm1vZGVsX25hbWUuaW5jbHVkZXMoXCIvXCIpXG4gICAgICAgICAgPyByb3cubW9kZWxfbmFtZS5zcGxpdChcIi9cIikucG9wKCkhXG4gICAgICAgICAgOiByb3cubW9kZWxfbmFtZTtcbiAgICAgICAgdXBkYXRlLmNvc3RfdXNkID0gTWF0aC5yb3VuZChcbiAgICAgICAgICBjYWxjdWxhdGVDb3N0VXNkKG1vZGVsLCB7XG4gICAgICAgICAgICBpbnB1dFRva2VuczogcGFyYW1zLmlucHV0X3Rva2VucyxcbiAgICAgICAgICAgIG91dHB1dFRva2VuczogcGFyYW1zLm91dHB1dF90b2tlbnMsXG4gICAgICAgICAgICBjYWNoZWRJbnB1dFRva2VuczogcGFyYW1zLmNhY2hlX3JlYWRfdG9rZW5zID8/IDAsXG4gICAgICAgICAgfSkgKiAxXzAwMF8wMDAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgd2RiID0gdGhpcy5nZXRQdXJpKFwid1wiKTtcbiAgICB3ZGIudWJSZWdpc3RlcihcInJlcXVlc3RfbG9nc1wiLCB1cGRhdGUpO1xuICAgIGF3YWl0IHdkYi50cmFuc2FjdGlvbihhc3luYyAodHJ4KSA9PiB7XG4gICAgICBhd2FpdCB0cngudWJVcHNlcnQoXCJyZXF1ZXN0X2xvZ3NcIik7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBhZ2dyZWdhdGVTdGVwVXNhZ2UocmVxdWVzdExvZ0lkOiBudW1iZXIpOiBQcm9taXNlPHtcbiAgICBpbnB1dF90b2tlbnM6IG51bWJlcjtcbiAgICBvdXRwdXRfdG9rZW5zOiBudW1iZXI7XG4gICAgY2FjaGVfcmVhZF90b2tlbnM6IG51bWJlcjtcbiAgICBjYWNoZV9jcmVhdGlvbl90b2tlbnM6IG51bWJlcjtcbiAgICBkdXJhdGlvbl9tczogbnVtYmVyO1xuICB9PiB7XG4gICAgY29uc3QgZGIgPSB0aGlzLmdldERCKFwiclwiKTtcbiAgICBjb25zdCBbcm93XSA9IGF3YWl0IGRiKFwicmVxdWVzdF9sb2dfc3RlcHNcIilcbiAgICAgIC53aGVyZShcInJlcXVlc3RfbG9nX2lkXCIsIHJlcXVlc3RMb2dJZClcbiAgICAgIC53aGVyZShcInR5cGVcIiwgXCJnZW5lcmF0ZVwiKVxuICAgICAgLnN1bSh7XG4gICAgICAgIGlucHV0X3Rva2VuczogXCJpbnB1dF90b2tlbnNcIixcbiAgICAgICAgb3V0cHV0X3Rva2VuczogXCJvdXRwdXRfdG9rZW5zXCIsXG4gICAgICAgIGNhY2hlX3JlYWRfdG9rZW5zOiBcImNhY2hlX3JlYWRfdG9rZW5zXCIsXG4gICAgICAgIGNhY2hlX2NyZWF0aW9uX3Rva2VuczogXCJjYWNoZV9jcmVhdGlvbl90b2tlbnNcIixcbiAgICAgICAgZHVyYXRpb25fbXM6IFwiZHVyYXRpb25fbXNcIixcbiAgICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICBpbnB1dF90b2tlbnM6IE51bWJlcihyb3c/LmlucHV0X3Rva2VucyA/PyAwKSxcbiAgICAgIG91dHB1dF90b2tlbnM6IE51bWJlcihyb3c/Lm91dHB1dF90b2tlbnMgPz8gMCksXG4gICAgICBjYWNoZV9yZWFkX3Rva2VuczogTnVtYmVyKHJvdz8uY2FjaGVfcmVhZF90b2tlbnMgPz8gMCksXG4gICAgICBjYWNoZV9jcmVhdGlvbl90b2tlbnM6IE51bWJlcihyb3c/LmNhY2hlX2NyZWF0aW9uX3Rva2VucyA/PyAwKSxcbiAgICAgIGR1cmF0aW9uX21zOiBOdW1iZXIocm93Py5kdXJhdGlvbl9tcyA/PyAwKSxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZmluZFN0YWxlUnVubmluZ0lkcyh0aHJlc2hvbGRNczogbnVtYmVyLCBsaW1pdDogbnVtYmVyID0gMTApOiBQcm9taXNlPG51bWJlcltdPiB7XG4gICAgY29uc3QgZGIgPSB0aGlzLmdldERCKFwiclwiKTtcbiAgICBjb25zdCB0aHJlc2hvbGQgPSBuZXcgRGF0ZShEYXRlLm5vdygpIC0gdGhyZXNob2xkTXMpO1xuICAgIGNvbnN0IHJvd3MgPSBhd2FpdCBkYihcInJlcXVlc3RfbG9nc1wiKVxuICAgICAgLnNlbGVjdChcImlkXCIpXG4gICAgICAud2hlcmUoXCJzdGF0dXNcIiwgXCJydW5uaW5nXCIpXG4gICAgICAud2hlcmUoXCJjcmVhdGVkX2F0XCIsIFwiPFwiLCB0aHJlc2hvbGQpXG4gICAgICAubGltaXQobGltaXQpO1xuICAgIHJldHVybiByb3dzLm1hcCgocjogeyBpZDogbnVtYmVyIH0pID0+IHIuaWQpO1xuICB9XG5cbiAgYXN5bmMgZ2V0TmV4dFN0ZXBJbmRleChyZXF1ZXN0TG9nSWQ6IG51bWJlcik6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgZGIgPSB0aGlzLmdldERCKFwiclwiKTtcbiAgICBjb25zdCBbcm93XSA9IGF3YWl0IGRiKFwicmVxdWVzdF9sb2dfc3RlcHNcIilcbiAgICAgIC53aGVyZShcInJlcXVlc3RfbG9nX2lkXCIsIHJlcXVlc3RMb2dJZClcbiAgICAgIC5tYXgoXCJzdGVwX2luZGV4IGFzIG1heFN0ZXBcIik7XG4gICAgcmV0dXJuICgocm93IGFzIHsgbWF4U3RlcDogbnVtYmVyIHwgbnVsbCB9KT8ubWF4U3RlcCA/PyAtMSkgKyAxO1xuICB9XG5cbiAgYXN5bmMgY29tcGxldGVUb29sQ2FsbChcbiAgICByZXF1ZXN0TG9nSWQ6IG51bWJlcixcbiAgICB0b29sQ2FsbElkOiBzdHJpbmcsXG4gICAgcGFyYW1zOiB7IHRvb2xfcmVzdWx0Pzogc3RyaW5nOyB0b29sX2R1cmF0aW9uX21zPzogbnVtYmVyOyBlcnJvcj86IHN0cmluZyB9LFxuICApOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IHdkYiA9IHRoaXMuZ2V0UHVyaShcIndcIik7XG4gICAgcmV0dXJuIHdkYi50cmFuc2FjdGlvbihhc3luYyAodHJ4KSA9PiB7XG4gICAgICBjb25zdCB1cGRhdGVkID0gYXdhaXQgdHJ4XG4gICAgICAgIC5mcm9tKFwicmVxdWVzdF9sb2dfc3RlcHNcIilcbiAgICAgICAgLndoZXJlKFwicmVxdWVzdF9sb2dfaWRcIiwgcmVxdWVzdExvZ0lkKVxuICAgICAgICAud2hlcmUoXCJ0b29sX2NhbGxfaWRcIiwgdG9vbENhbGxJZClcbiAgICAgICAgLndoZXJlKFwidHlwZVwiLCBcInRvb2xfY2FsbFwiKVxuICAgICAgICAudXBkYXRlKHtcbiAgICAgICAgICAuLi4ocGFyYW1zLnRvb2xfcmVzdWx0ICE9PSB1bmRlZmluZWQgPyB7IHRvb2xfcmVzdWx0OiBwYXJhbXMudG9vbF9yZXN1bHQgfSA6IHt9KSxcbiAgICAgICAgICAuLi4ocGFyYW1zLnRvb2xfZHVyYXRpb25fbXMgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyB7IHRvb2xfZHVyYXRpb25fbXM6IHBhcmFtcy50b29sX2R1cmF0aW9uX21zIH1cbiAgICAgICAgICAgIDoge30pLFxuICAgICAgICAgIC4uLihwYXJhbXMuZXJyb3IgIT09IHVuZGVmaW5lZCA/IHsgZXJyb3I6IHBhcmFtcy5lcnJvciB9IDoge30pLFxuICAgICAgICB9KTtcbiAgICAgIHJldHVybiB1cGRhdGVkO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gU29uYW11IGZpbmRNYW5564qUIHN1YnNldCDsoITssrQg7Lus65+8KHRleHQg7Y+s7ZWoKeydhCDtjpjsuZjtlbTshJwgYWdncmVnYXRl7JeUIOuEiOustCDrrLTqsbDsm4Ag4oaSIHJhdyBzdW0g7IKs7JqpLlxuICBhc3luYyB0b3RhbENvc3QocGFyYW1zOiB7IHRva2VuX25hbWU/OiBzdHJpbmcgfSA9IHt9KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCBxYiA9IHRoaXMuZ2V0REIoXCJyXCIpKFwicmVxdWVzdF9sb2dzXCIpO1xuICAgIGlmIChwYXJhbXMudG9rZW5fbmFtZSkge1xuICAgICAgcWIud2hlcmUoXCJ0b2tlbl9uYW1lXCIsIHBhcmFtcy50b2tlbl9uYW1lKTtcbiAgICB9XG4gICAgLy8ga25leOuKlCBwZ+yXkOyEnCBudW1lcmljIGFnZ3JlZ2F0ZeulvCBzdHJpbmfsnLzroZwg67CY7ZmYLlxuICAgIGNvbnN0IHJvdyA9IChhd2FpdCBxYi5zdW0oeyBzdW06IFwiY29zdF91c2RcIiB9KS5maXJzdCgpKSBhcyB7IHN1bTogc3RyaW5nIHwgbnVsbCB9IHwgdW5kZWZpbmVkO1xuICAgIHJldHVybiBOdW1iZXIocm93Py5zdW0gPz8gMCkgLyBNSUNST19VU0Q7XG4gIH1cblxuICBhc3luYyBkaXN0aW5jdFByb2plY3ROYW1lcygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgY29uc3Qgcm93cyA9IGF3YWl0IHRoaXMuZ2V0UHVyaShcInJcIilcbiAgICAgIC5mcm9tKFwicmVxdWVzdF9sb2dzXCIpXG4gICAgICAuZGlzdGluY3QoXCJwcm9qZWN0X25hbWVcIilcbiAgICAgIC53aGVyZShcInByb2plY3RfbmFtZVwiLCBcIiE9XCIsIG51bGwpXG4gICAgICAub3JkZXJCeShcInByb2plY3RfbmFtZVwiLCBcImFzY1wiKVxuICAgICAgLnNlbGVjdCh7XG4gICAgICAgIHByb2plY3RfbmFtZTogXCJwcm9qZWN0X25hbWVcIixcbiAgICAgIH0pO1xuICAgIHJldHVybiByb3dzLm1hcCgocikgPT4gci5wcm9qZWN0X25hbWUhKTtcbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIlBPU1RcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1tdXRhdGlvblwiXSB9KVxuICBhc3luYyBkZWwoaWRzOiBudW1iZXJbXSk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3Qgd2RiID0gdGhpcy5nZXRQdXJpKFwid1wiKTtcblxuICAgIC8vIHRyYW5zYWN0aW9uXG4gICAgYXdhaXQgd2RiLnRyYW5zYWN0aW9uKGFzeW5jICh0cngpID0+IHtcbiAgICAgIGF3YWl0IHRyeFxuICAgICAgICAudGFibGUoXCJyZXF1ZXN0X2xvZ19zdGVwc1wiKVxuICAgICAgICAud2hlcmVJbihcInJlcXVlc3RfbG9nX3N0ZXBzLnJlcXVlc3RfbG9nX2lkXCIsIGlkcylcbiAgICAgICAgLmRlbGV0ZSgpO1xuICAgICAgcmV0dXJuIHRyeC50YWJsZShcInJlcXVlc3RfbG9nc1wiKS53aGVyZUluKFwicmVxdWVzdF9sb2dzLmlkXCIsIGlkcykuZGVsZXRlKCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gaWRzLmxlbmd0aDtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgUmVxdWVzdExvZ01vZGVsID0gbmV3IFJlcXVlc3RMb2dNb2RlbENsYXNzKCk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBaUJBLE1BQWEsWUFBWTtBQUt6QixJQUFNLHVCQUFOLGNBQW1DLGVBS2pDO0NBQ0EsY0FBYztBQUNaLFFBQU0sY0FBYyx5QkFBeUIsd0JBQXdCOztDQUd2RSxNQUNNLFNBQ0osUUFDQSxJQUNxQztFQUNyQyxNQUFNLEVBQUUsU0FBUyxNQUFNLEtBQUssU0FBUyxRQUFRO0dBQzND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
|
|
232
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC1sb2cubW9kZWwuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL3JlcXVlc3QtbG9nL3JlcXVlc3QtbG9nLm1vZGVsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGFwaSxcbiAgYXNBcnJheSxcbiAgQmFkUmVxdWVzdEV4Y2VwdGlvbixcbiAgQmFzZU1vZGVsQ2xhc3MsXG4gIGV4aGF1c3RpdmUsXG4gIHR5cGUgTGlzdFJlc3VsdCxcbiAgTm90Rm91bmRFeGNlcHRpb24sXG59IGZyb20gXCJzb25hbXVcIjtcblxuaW1wb3J0IHsgU0QgfSBmcm9tIFwiLi4vLi4vaTE4bi9zZC5nZW5lcmF0ZWRcIjtcbmltcG9ydCB7IGNhbGN1bGF0ZUNvc3RVc2QgfSBmcm9tIFwiLi4vLi4vdXRpbHMvcHJvdmlkZXJzL2NvbW1vbi9tb2RlbC1jb3N0XCI7XG5pbXBvcnQgeyB0eXBlIFJlcXVlc3RMb2dTdWJzZXRLZXksIHR5cGUgUmVxdWVzdExvZ1N1YnNldE1hcHBpbmcgfSBmcm9tIFwiLi4vc29uYW11LmdlbmVyYXRlZFwiO1xuaW1wb3J0IHsgcmVxdWVzdExvZ0xvYWRlclF1ZXJpZXMsIHJlcXVlc3RMb2dTdWJzZXRRdWVyaWVzIH0gZnJvbSBcIi4uL3NvbmFtdS5nZW5lcmF0ZWQuc3NvXCI7XG5pbXBvcnQgeyB0eXBlIFJlcXVlc3RMb2dMaXN0UGFyYW1zLCB0eXBlIFJlcXVlc3RMb2dTYXZlUGFyYW1zIH0gZnJvbSBcIi4vcmVxdWVzdC1sb2cudHlwZXNcIjtcblxuLy8gY29zdF91c2TripQg7KCV7IiYIG1pY3JvLVVTROuhnCDsoIDsnqUuIOyLpOygnCBVU0QgPSBjb3N0X3VzZCAvIE1JQ1JPX1VTRC5cbmV4cG9ydCBjb25zdCBNSUNST19VU0QgPSAxXzAwMF8wMDA7XG5cbi8qXG4gIFJlcXVlc3RMb2cgTW9kZWxcbiovXG5jbGFzcyBSZXF1ZXN0TG9nTW9kZWxDbGFzcyBleHRlbmRzIEJhc2VNb2RlbENsYXNzPFxuICBSZXF1ZXN0TG9nU3Vic2V0S2V5LFxuICBSZXF1ZXN0TG9nU3Vic2V0TWFwcGluZyxcbiAgdHlwZW9mIHJlcXVlc3RMb2dTdWJzZXRRdWVyaWVzLFxuICB0eXBlb2YgcmVxdWVzdExvZ0xvYWRlclF1ZXJpZXNcbj4ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcIlJlcXVlc3RMb2dcIiwgcmVxdWVzdExvZ1N1YnNldFF1ZXJpZXMsIHJlcXVlc3RMb2dMb2FkZXJRdWVyaWVzKTtcbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIkdFVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLXF1ZXJ5XCJdLCByZXNvdXJjZU5hbWU6IFwiUmVxdWVzdExvZ1wiIH0pXG4gIGFzeW5jIGZpbmRCeUlkPFQgZXh0ZW5kcyBSZXF1ZXN0TG9nU3Vic2V0S2V5PihcbiAgICBzdWJzZXQ6IFQsXG4gICAgaWQ6IG51bWJlcixcbiAgKTogUHJvbWlzZTxSZXF1ZXN0TG9nU3Vic2V0TWFwcGluZ1tUXT4ge1xuICAgIGNvbnN0IHsgcm93cyB9ID0gYXdhaXQgdGhpcy5maW5kTWFueShzdWJzZXQsIHtcbiAgICAgIGlkLFxuICAgICAgbnVtOiAxLFxuICAgICAgcGFnZTogMSxcbiAgICB9KTtcbiAgICBpZiAoIXJvd3NbMF0pIHtcbiAgICAgIHRocm93IG5ldyBOb3RGb3VuZEV4Y2VwdGlvbihTRChcImVycm9yLmVudGl0eU5vdEZvdW5kXCIpKFwiUmVxdWVzdExvZ1wiLCBpZCkpO1xuICAgIH1cblxuICAgIHJldHVybiByb3dzWzBdO1xuICB9XG5cbiAgYXN5bmMgZmluZE9uZTxUIGV4dGVuZHMgUmVxdWVzdExvZ1N1YnNldEtleT4oXG4gICAgc3Vic2V0OiBULFxuICAgIGxpc3RQYXJhbXM6IFJlcXVlc3RMb2dMaXN0UGFyYW1zLFxuICApOiBQcm9taXNlPFJlcXVlc3RMb2dTdWJzZXRNYXBwaW5nW1RdIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgcm93cyB9ID0gYXdhaXQgdGhpcy5maW5kTWFueShzdWJzZXQsIHtcbiAgICAgIC4uLmxpc3RQYXJhbXMsXG4gICAgICBudW06IDEsXG4gICAgICBwYWdlOiAxLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJvd3NbMF0gPz8gbnVsbDtcbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIkdFVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLXF1ZXJ5XCJdLCByZXNvdXJjZU5hbWU6IFwiUmVxdWVzdExvZ3NcIiB9KVxuICBhc3luYyBmaW5kTWFueTxUIGV4dGVuZHMgUmVxdWVzdExvZ1N1YnNldEtleSwgTFAgZXh0ZW5kcyBSZXF1ZXN0TG9nTGlzdFBhcmFtcz4oXG4gICAgc3Vic2V0OiBULFxuICAgIHJhd1BhcmFtcz86IExQLFxuICApOiBQcm9taXNlPExpc3RSZXN1bHQ8TFAsIFJlcXVlc3RMb2dTdWJzZXRNYXBwaW5nW1RdPj4ge1xuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIG51bTogMjQsXG4gICAgICBwYWdlOiAxLFxuICAgICAgc2VhcmNoOiBcImlkXCIgYXMgY29uc3QsXG4gICAgICBvcmRlckJ5OiBcImlkLWRlc2NcIiBhcyBjb25zdCxcbiAgICAgIC4uLnJhd1BhcmFtcyxcbiAgICB9IHNhdGlzZmllcyBSZXF1ZXN0TG9nTGlzdFBhcmFtcztcblxuICAgIGNvbnN0IHsgcWIsIG9uU3Vic2V0OiBfIH0gPSB0aGlzLmdldFN1YnNldFF1ZXJpZXMoc3Vic2V0KTtcblxuICAgIGlmIChwYXJhbXMuaWQpIHtcbiAgICAgIHFiLndoZXJlSW4oXCJyZXF1ZXN0X2xvZ3MuaWRcIiwgYXNBcnJheShwYXJhbXMuaWQpKTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLnRva2VuX25hbWUpIHtcbiAgICAgIHFiLndoZXJlKFwicmVxdWVzdF9sb2dzLnRva2VuX25hbWVcIiwgcGFyYW1zLnRva2VuX25hbWUpO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMucHJvamVjdF9uYW1lX2lzX251bGwpIHtcbiAgICAgIHFiLndoZXJlKFwicmVxdWVzdF9sb2dzLnByb2plY3RfbmFtZVwiLCBudWxsKTtcbiAgICB9IGVsc2UgaWYgKHBhcmFtcy5wcm9qZWN0X25hbWVfaXNfbm90X251bGwpIHtcbiAgICAgIHFiLndoZXJlKFwicmVxdWVzdF9sb2dzLnByb2plY3RfbmFtZVwiLCBcIiE9XCIsIG51bGwpO1xuICAgIH0gZWxzZSBpZiAocGFyYW1zLnByb2plY3RfbmFtZSkge1xuICAgICAgcWIud2hlcmUoXCJyZXF1ZXN0X2xvZ3MucHJvamVjdF9uYW1lXCIsIHBhcmFtcy5wcm9qZWN0X25hbWUpO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMubW9kZWxfbmFtZSkge1xuICAgICAgcWIud2hlcmUoXCJyZXF1ZXN0X2xvZ3MubW9kZWxfbmFtZVwiLCBwYXJhbXMubW9kZWxfbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy5zZWFyY2ggJiYgcGFyYW1zLmtleXdvcmQgJiYgcGFyYW1zLmtleXdvcmQubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKHBhcmFtcy5zZWFyY2ggPT09IFwiaWRcIikge1xuICAgICAgICBxYi53aGVyZShcInJlcXVlc3RfbG9ncy5pZFwiLCBOdW1iZXIocGFyYW1zLmtleXdvcmQpKTtcbiAgICAgIH0gZWxzZSBpZiAocGFyYW1zLnNlYXJjaCA9PT0gXCJ0b2tlbl9uYW1lXCIpIHtcbiAgICAgICAgcWIud2hlcmUoXCJyZXF1ZXN0X2xvZ3MudG9rZW5fbmFtZVwiLCBcImxpa2VcIiwgYCUke3BhcmFtcy5rZXl3b3JkfSVgKTtcbiAgICAgIH0gZWxzZSBpZiAocGFyYW1zLnNlYXJjaCA9PT0gXCJ1c2VyX3Byb21wdFwiKSB7XG4gICAgICAgIHFiLndoZXJlKFwicmVxdWVzdF9sb2dzLnVzZXJfcHJvbXB0XCIsIFwibGlrZVwiLCBgJSR7cGFyYW1zLmtleXdvcmR9JWApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEJhZFJlcXVlc3RFeGNlcHRpb24oU0QoXCJlcnJvci51bmtub3duU2VhcmNoRmllbGRcIikocGFyYW1zLnNlYXJjaCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIG9yZGVyQnlcbiAgICBpZiAocGFyYW1zLm9yZGVyQnkpIHtcbiAgICAgIC8vIGRlZmF1bHQgb3JkZXJCeVxuICAgICAgaWYgKHBhcmFtcy5vcmRlckJ5ID09PSBcImlkLWRlc2NcIikge1xuICAgICAgICBxYi5vcmRlckJ5KFwicmVxdWVzdF9sb2dzLmlkXCIsIFwiZGVzY1wiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV4aGF1c3RpdmUocGFyYW1zLm9yZGVyQnkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGVuaGFuY2VycyA9IHRoaXMuY3JlYXRlRW5oYW5jZXJzKHtcbiAgICAgIEE6IChyb3cpID0+ICh7XG4gICAgICAgIC4uLnJvdyxcbiAgICAgICAgLy8g7ISc67iM7IWL67OE66GcIHZpcnR1YWwg7ZWE65OcIOqzhOyCsOuhnOyngSDstpTqsIBcbiAgICAgIH0pLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZVN1YnNldFF1ZXJ5KHtcbiAgICAgIHN1YnNldCxcbiAgICAgIHFiLFxuICAgICAgcGFyYW1zLFxuICAgICAgZW5oYW5jZXJzLFxuICAgICAgZGVidWc6IGZhbHNlLFxuICAgIH0pO1xuICB9XG5cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiUE9TVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLW11dGF0aW9uXCJdIH0pXG4gIGFzeW5jIHNhdmUoc3BhOiBSZXF1ZXN0TG9nU2F2ZVBhcmFtc1tdKTogUHJvbWlzZTxudW1iZXJbXT4ge1xuICAgIGNvbnN0IHdkYiA9IHRoaXMuZ2V0UHVyaShcIndcIik7XG5cbiAgICAvLyByZWdpc3RlclxuICAgIHNwYS5mb3JFYWNoKChzcCkgPT4ge1xuICAgICAgd2RiLnViUmVnaXN0ZXIoXCJyZXF1ZXN0X2xvZ3NcIiwgc3ApO1xuICAgIH0pO1xuXG4gICAgLy8gdHJhbnNhY3Rpb25cbiAgICByZXR1cm4gd2RiLnRyYW5zYWN0aW9uKGFzeW5jICh0cngpID0+IHtcbiAgICAgIGNvbnN0IGlkcyA9IGF3YWl0IHRyeC51YlVwc2VydChcInJlcXVlc3RfbG9nc1wiKTtcblxuICAgICAgcmV0dXJuIGlkcztcbiAgICB9KTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBSdW4gTGlmZWN5Y2xlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIGFzeW5jIGNyZWF0ZVJ1bihwYXJhbXM6IHtcbiAgICB1c2VyX3Byb21wdDogc3RyaW5nO1xuICAgIHN5c3RlbV9wcm9tcHQ/OiBzdHJpbmcgfCBudWxsO1xuICAgIG1vZGVsX25hbWU/OiBzdHJpbmcgfCBudWxsO1xuICAgIGVmZm9ydD86IHN0cmluZyB8IG51bGw7XG4gICAgcHJvamVjdF9uYW1lPzogc3RyaW5nIHwgbnVsbDtcbiAgICBoaXN0b3J5PzogdW5rbm93bjtcbiAgfSk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3Qgd2RiID0gdGhpcy5nZXRQdXJpKFwid1wiKTtcbiAgICB3ZGIudWJSZWdpc3RlcihcInJlcXVlc3RfbG9nc1wiLCB7XG4gICAgICB1c2VyX3Byb21wdDogcGFyYW1zLnVzZXJfcHJvbXB0LFxuICAgICAgc3lzdGVtX3Byb21wdDogcGFyYW1zLnN5c3RlbV9wcm9tcHQgPz8gbnVsbCxcbiAgICAgIG1vZGVsX25hbWU6IHBhcmFtcy5tb2RlbF9uYW1lID8/IG51bGwsXG4gICAgICBlZmZvcnQ6IHBhcmFtcy5lZmZvcnQgPz8gbnVsbCxcbiAgICAgIHByb2plY3RfbmFtZTogcGFyYW1zLnByb2plY3RfbmFtZSA/PyBudWxsLFxuICAgICAgc3RhdHVzOiBcInJ1bm5pbmdcIixcbiAgICAgIHJlc3BvbnNlOiBcIlwiLFxuICAgICAgaW5wdXRfdG9rZW5zOiAwLFxuICAgICAgb3V0cHV0X3Rva2VuczogMCxcbiAgICAgIGNhY2hlX3JlYWRfdG9rZW5zOiAwLFxuICAgICAgY2FjaGVfY3JlYXRpb25fdG9rZW5zOiAwLFxuICAgICAgZHVyYXRpb25fbXM6IDAsXG4gICAgICB0b29sX2NhbGxfY291bnQ6IDAsXG4gICAgICAuLi4ocGFyYW1zLmhpc3RvcnkgIT09IHVuZGVmaW5lZCA/IHsgaGlzdG9yeTogcGFyYW1zLmhpc3RvcnkgYXMgeyB0eXBlOiBzdHJpbmcgfVtdIH0gOiB7fSksXG4gICAgfSk7XG4gICAgcmV0dXJuIHdkYi50cmFuc2FjdGlvbihhc3luYyAodHJ4KSA9PiB7XG4gICAgICBjb25zdCBpZHMgPSBhd2FpdCB0cngudWJVcHNlcnQoXCJyZXF1ZXN0X2xvZ3NcIik7XG4gICAgICByZXR1cm4gaWRzWzBdITtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGFwcGVuZFN0ZXAocmVxdWVzdExvZ0lkOiBudW1iZXIsIHN0ZXA6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCB3ZGIgPSB0aGlzLmdldFB1cmkoXCJ3XCIpO1xuICAgIHdkYi51YlJlZ2lzdGVyKFwicmVxdWVzdF9sb2dfc3RlcHNcIiwgeyByZXF1ZXN0X2xvZ19pZDogcmVxdWVzdExvZ0lkLCAuLi5zdGVwIH0pO1xuICAgIHJldHVybiB3ZGIudHJhbnNhY3Rpb24oYXN5bmMgKHRyeCkgPT4ge1xuICAgICAgY29uc3QgaWRzID0gYXdhaXQgdHJ4LnViVXBzZXJ0KFwicmVxdWVzdF9sb2dfc3RlcHNcIik7XG4gICAgICBpZiAoc3RlcC50eXBlID09PSBcInRvb2xfY2FsbFwiKSB7XG4gICAgICAgIGF3YWl0IHRyeC5mcm9tKFwicmVxdWVzdF9sb2dzXCIpLndoZXJlKFwiaWRcIiwgcmVxdWVzdExvZ0lkKS5pbmNyZW1lbnQoXCJ0b29sX2NhbGxfY291bnRcIiwgMSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gaWRzWzBdITtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGZpbmlzaFJ1bihcbiAgICByZXF1ZXN0TG9nSWQ6IG51bWJlcixcbiAgICBwYXJhbXM6IHtcbiAgICAgIHN0YXR1czogc3RyaW5nO1xuICAgICAgcmVzcG9uc2U/OiBzdHJpbmc7XG4gICAgICB0b2tlbl9uYW1lPzogc3RyaW5nO1xuICAgICAgaW5wdXRfdG9rZW5zPzogbnVtYmVyO1xuICAgICAgb3V0cHV0X3Rva2Vucz86IG51bWJlcjtcbiAgICAgIGNhY2hlX3JlYWRfdG9rZW5zPzogbnVtYmVyO1xuICAgICAgY2FjaGVfY3JlYXRpb25fdG9rZW5zPzogbnVtYmVyO1xuICAgICAgZHVyYXRpb25fbXM/OiBudW1iZXI7XG4gICAgICBoaXN0b3J5PzogdW5rbm93bjtcbiAgICAgIGVycm9yX21lc3NhZ2U/OiBzdHJpbmc7XG4gICAgICB0b29sX2NhbGxfY291bnQ/OiBudW1iZXI7XG4gICAgfSxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHBhcmFtcy5zdGF0dXMgPT09IFwic3VjY2VlZGVkXCIgJiYgIXBhcmFtcy50b2tlbl9uYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ0b2tlbk5hbWUgaXMgcmVxdWlyZWQgZm9yIHN1Y2NlZWRlZCBydW5zXCIpO1xuICAgIH1cbiAgICBjb25zdCB1cGRhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0geyBpZDogcmVxdWVzdExvZ0lkLCBzdGF0dXM6IHBhcmFtcy5zdGF0dXMgfTtcbiAgICBjb25zdCBmaWVsZHMgPSBbXG4gICAgICBcInJlc3BvbnNlXCIsXG4gICAgICBcInRva2VuX25hbWVcIixcbiAgICAgIFwiaW5wdXRfdG9rZW5zXCIsXG4gICAgICBcIm91dHB1dF90b2tlbnNcIixcbiAgICAgIFwiY2FjaGVfcmVhZF90b2tlbnNcIixcbiAgICAgIFwiY2FjaGVfY3JlYXRpb25fdG9rZW5zXCIsXG4gICAgICBcImR1cmF0aW9uX21zXCIsXG4gICAgICBcImVycm9yX21lc3NhZ2VcIixcbiAgICAgIFwidG9vbF9jYWxsX2NvdW50XCIsXG4gICAgXSBhcyBjb25zdDtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBmaWVsZHMpIHtcbiAgICAgIGlmIChwYXJhbXNba2V5XSAhPT0gdW5kZWZpbmVkKSB1cGRhdGVba2V5XSA9IHBhcmFtc1trZXldO1xuICAgIH1cbiAgICBpZiAocGFyYW1zLmhpc3RvcnkgIT09IHVuZGVmaW5lZCkgdXBkYXRlLmhpc3RvcnkgPSBwYXJhbXMuaGlzdG9yeTtcblxuICAgIGlmIChwYXJhbXMuaW5wdXRfdG9rZW5zICE9PSB1bmRlZmluZWQgJiYgcGFyYW1zLm91dHB1dF90b2tlbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgZGIgPSB0aGlzLmdldERCKFwiclwiKTtcbiAgICAgIGNvbnN0IFtyb3ddID0gYXdhaXQgZGIoXCJyZXF1ZXN0X2xvZ3NcIilcbiAgICAgICAgLnNlbGVjdChcIm1vZGVsX25hbWVcIilcbiAgICAgICAgLndoZXJlKFwiaWRcIiwgcmVxdWVzdExvZ0lkKVxuICAgICAgICAubGltaXQoMSk7XG4gICAgICBpZiAocm93Py5tb2RlbF9uYW1lKSB7XG4gICAgICAgIGNvbnN0IG1vZGVsID0gcm93Lm1vZGVsX25hbWUuaW5jbHVkZXMoXCIvXCIpXG4gICAgICAgICAgPyByb3cubW9kZWxfbmFtZS5zcGxpdChcIi9cIikucG9wKCkhXG4gICAgICAgICAgOiByb3cubW9kZWxfbmFtZTtcbiAgICAgICAgdXBkYXRlLmNvc3RfdXNkID0gTWF0aC5yb3VuZChcbiAgICAgICAgICBjYWxjdWxhdGVDb3N0VXNkKG1vZGVsLCB7XG4gICAgICAgICAgICBpbnB1dFRva2VuczogcGFyYW1zLmlucHV0X3Rva2VucyxcbiAgICAgICAgICAgIG91dHB1dFRva2VuczogcGFyYW1zLm91dHB1dF90b2tlbnMsXG4gICAgICAgICAgICBjYWNoZWRJbnB1dFRva2VuczogcGFyYW1zLmNhY2hlX3JlYWRfdG9rZW5zID8/IDAsXG4gICAgICAgICAgfSkgKiAxXzAwMF8wMDAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgd2RiID0gdGhpcy5nZXRQdXJpKFwid1wiKTtcbiAgICB3ZGIudWJSZWdpc3RlcihcInJlcXVlc3RfbG9nc1wiLCB1cGRhdGUpO1xuICAgIGF3YWl0IHdkYi50cmFuc2FjdGlvbihhc3luYyAodHJ4KSA9PiB7XG4gICAgICBhd2FpdCB0cngudWJVcHNlcnQoXCJyZXF1ZXN0X2xvZ3NcIik7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBhZ2dyZWdhdGVTdGVwVXNhZ2UocmVxdWVzdExvZ0lkOiBudW1iZXIpOiBQcm9taXNlPHtcbiAgICBpbnB1dF90b2tlbnM6IG51bWJlcjtcbiAgICBvdXRwdXRfdG9rZW5zOiBudW1iZXI7XG4gICAgY2FjaGVfcmVhZF90b2tlbnM6IG51bWJlcjtcbiAgICBjYWNoZV9jcmVhdGlvbl90b2tlbnM6IG51bWJlcjtcbiAgICBkdXJhdGlvbl9tczogbnVtYmVyO1xuICB9PiB7XG4gICAgY29uc3QgZGIgPSB0aGlzLmdldERCKFwiclwiKTtcbiAgICBjb25zdCBbcm93XSA9IGF3YWl0IGRiKFwicmVxdWVzdF9sb2dfc3RlcHNcIilcbiAgICAgIC53aGVyZShcInJlcXVlc3RfbG9nX2lkXCIsIHJlcXVlc3RMb2dJZClcbiAgICAgIC53aGVyZShcInR5cGVcIiwgXCJnZW5lcmF0ZVwiKVxuICAgICAgLnN1bSh7XG4gICAgICAgIGlucHV0X3Rva2VuczogXCJpbnB1dF90b2tlbnNcIixcbiAgICAgICAgb3V0cHV0X3Rva2VuczogXCJvdXRwdXRfdG9rZW5zXCIsXG4gICAgICAgIGNhY2hlX3JlYWRfdG9rZW5zOiBcImNhY2hlX3JlYWRfdG9rZW5zXCIsXG4gICAgICAgIGNhY2hlX2NyZWF0aW9uX3Rva2VuczogXCJjYWNoZV9jcmVhdGlvbl90b2tlbnNcIixcbiAgICAgICAgZHVyYXRpb25fbXM6IFwiZHVyYXRpb25fbXNcIixcbiAgICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICBpbnB1dF90b2tlbnM6IE51bWJlcihyb3c/LmlucHV0X3Rva2VucyA/PyAwKSxcbiAgICAgIG91dHB1dF90b2tlbnM6IE51bWJlcihyb3c/Lm91dHB1dF90b2tlbnMgPz8gMCksXG4gICAgICBjYWNoZV9yZWFkX3Rva2VuczogTnVtYmVyKHJvdz8uY2FjaGVfcmVhZF90b2tlbnMgPz8gMCksXG4gICAgICBjYWNoZV9jcmVhdGlvbl90b2tlbnM6IE51bWJlcihyb3c/LmNhY2hlX2NyZWF0aW9uX3Rva2VucyA/PyAwKSxcbiAgICAgIGR1cmF0aW9uX21zOiBOdW1iZXIocm93Py5kdXJhdGlvbl9tcyA/PyAwKSxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZmluZFN0YWxlUnVubmluZ0lkcyh0aHJlc2hvbGRNczogbnVtYmVyLCBsaW1pdDogbnVtYmVyID0gMTApOiBQcm9taXNlPG51bWJlcltdPiB7XG4gICAgY29uc3QgZGIgPSB0aGlzLmdldERCKFwiclwiKTtcbiAgICBjb25zdCB0aHJlc2hvbGQgPSBuZXcgRGF0ZShEYXRlLm5vdygpIC0gdGhyZXNob2xkTXMpO1xuICAgIGNvbnN0IHJvd3MgPSBhd2FpdCBkYihcInJlcXVlc3RfbG9nc1wiKVxuICAgICAgLnNlbGVjdChcImlkXCIpXG4gICAgICAud2hlcmUoXCJzdGF0dXNcIiwgXCJydW5uaW5nXCIpXG4gICAgICAud2hlcmUoXCJjcmVhdGVkX2F0XCIsIFwiPFwiLCB0aHJlc2hvbGQpXG4gICAgICAubGltaXQobGltaXQpO1xuICAgIHJldHVybiByb3dzLm1hcCgocjogeyBpZDogbnVtYmVyIH0pID0+IHIuaWQpO1xuICB9XG5cbiAgYXN5bmMgZ2V0TmV4dFN0ZXBJbmRleChyZXF1ZXN0TG9nSWQ6IG51bWJlcik6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgZGIgPSB0aGlzLmdldERCKFwiclwiKTtcbiAgICBjb25zdCBbcm93XSA9IGF3YWl0IGRiKFwicmVxdWVzdF9sb2dfc3RlcHNcIilcbiAgICAgIC53aGVyZShcInJlcXVlc3RfbG9nX2lkXCIsIHJlcXVlc3RMb2dJZClcbiAgICAgIC5tYXgoXCJzdGVwX2luZGV4IGFzIG1heFN0ZXBcIik7XG4gICAgcmV0dXJuICgocm93IGFzIHsgbWF4U3RlcDogbnVtYmVyIHwgbnVsbCB9KT8ubWF4U3RlcCA/PyAtMSkgKyAxO1xuICB9XG5cbiAgYXN5bmMgY29tcGxldGVUb29sQ2FsbChcbiAgICByZXF1ZXN0TG9nSWQ6IG51bWJlcixcbiAgICB0b29sQ2FsbElkOiBzdHJpbmcsXG4gICAgcGFyYW1zOiB7IHRvb2xfcmVzdWx0Pzogc3RyaW5nOyB0b29sX2R1cmF0aW9uX21zPzogbnVtYmVyOyBlcnJvcj86IHN0cmluZyB9LFxuICApOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IHdkYiA9IHRoaXMuZ2V0UHVyaShcIndcIik7XG4gICAgcmV0dXJuIHdkYi50cmFuc2FjdGlvbihhc3luYyAodHJ4KSA9PiB7XG4gICAgICBjb25zdCB1cGRhdGVkID0gYXdhaXQgdHJ4XG4gICAgICAgIC5mcm9tKFwicmVxdWVzdF9sb2dfc3RlcHNcIilcbiAgICAgICAgLndoZXJlKFwicmVxdWVzdF9sb2dfaWRcIiwgcmVxdWVzdExvZ0lkKVxuICAgICAgICAud2hlcmUoXCJ0b29sX2NhbGxfaWRcIiwgdG9vbENhbGxJZClcbiAgICAgICAgLndoZXJlKFwidHlwZVwiLCBcInRvb2xfY2FsbFwiKVxuICAgICAgICAudXBkYXRlKHtcbiAgICAgICAgICAuLi4ocGFyYW1zLnRvb2xfcmVzdWx0ICE9PSB1bmRlZmluZWQgPyB7IHRvb2xfcmVzdWx0OiBwYXJhbXMudG9vbF9yZXN1bHQgfSA6IHt9KSxcbiAgICAgICAgICAuLi4ocGFyYW1zLnRvb2xfZHVyYXRpb25fbXMgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyB7IHRvb2xfZHVyYXRpb25fbXM6IHBhcmFtcy50b29sX2R1cmF0aW9uX21zIH1cbiAgICAgICAgICAgIDoge30pLFxuICAgICAgICAgIC4uLihwYXJhbXMuZXJyb3IgIT09IHVuZGVmaW5lZCA/IHsgZXJyb3I6IHBhcmFtcy5lcnJvciB9IDoge30pLFxuICAgICAgICB9KTtcbiAgICAgIHJldHVybiB1cGRhdGVkO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gU29uYW11IGZpbmRNYW5564qUIHN1YnNldCDsoITssrQg7Lus65+8KHRleHQg7Y+s7ZWoKeydhCDtjpjsuZjtlbTshJwgYWdncmVnYXRl7JeUIOuEiOustCDrrLTqsbDsm4Ag4oaSIHJhdyBzdW0g7IKs7JqpLlxuICBhc3luYyB0b3RhbENvc3QocGFyYW1zOiB7IHRva2VuX25hbWU/OiBzdHJpbmcgfSA9IHt9KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCBxYiA9IHRoaXMuZ2V0REIoXCJyXCIpKFwicmVxdWVzdF9sb2dzXCIpO1xuICAgIGlmIChwYXJhbXMudG9rZW5fbmFtZSkge1xuICAgICAgcWIud2hlcmUoXCJ0b2tlbl9uYW1lXCIsIHBhcmFtcy50b2tlbl9uYW1lKTtcbiAgICB9XG4gICAgLy8ga25leOuKlCBwZ+yXkOyEnCBudW1lcmljIGFnZ3JlZ2F0ZeulvCBzdHJpbmfsnLzroZwg67CY7ZmYLlxuICAgIGNvbnN0IHJvdyA9IChhd2FpdCBxYi5zdW0oeyBzdW06IFwiY29zdF91c2RcIiB9KS5maXJzdCgpKSBhcyB7IHN1bTogc3RyaW5nIHwgbnVsbCB9IHwgdW5kZWZpbmVkO1xuICAgIHJldHVybiBOdW1iZXIocm93Py5zdW0gPz8gMCkgLyBNSUNST19VU0Q7XG4gIH1cblxuICBhc3luYyBkaXN0aW5jdFByb2plY3ROYW1lcygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgY29uc3Qgcm93cyA9IGF3YWl0IHRoaXMuZ2V0UHVyaShcInJcIilcbiAgICAgIC5mcm9tKFwicmVxdWVzdF9sb2dzXCIpXG4gICAgICAuZGlzdGluY3QoXCJwcm9qZWN0X25hbWVcIilcbiAgICAgIC53aGVyZShcInByb2plY3RfbmFtZVwiLCBcIiE9XCIsIG51bGwpXG4gICAgICAub3JkZXJCeShcInByb2plY3RfbmFtZVwiLCBcImFzY1wiKVxuICAgICAgLnNlbGVjdCh7XG4gICAgICAgIHByb2plY3RfbmFtZTogXCJwcm9qZWN0X25hbWVcIixcbiAgICAgIH0pO1xuICAgIHJldHVybiByb3dzLm1hcCgocikgPT4gci5wcm9qZWN0X25hbWUhKTtcbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIlBPU1RcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1tdXRhdGlvblwiXSB9KVxuICBhc3luYyBkZWwoaWRzOiBudW1iZXJbXSk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3Qgd2RiID0gdGhpcy5nZXRQdXJpKFwid1wiKTtcblxuICAgIC8vIHRyYW5zYWN0aW9uXG4gICAgYXdhaXQgd2RiLnRyYW5zYWN0aW9uKGFzeW5jICh0cngpID0+IHtcbiAgICAgIGF3YWl0IHRyeFxuICAgICAgICAudGFibGUoXCJyZXF1ZXN0X2xvZ19zdGVwc1wiKVxuICAgICAgICAud2hlcmVJbihcInJlcXVlc3RfbG9nX3N0ZXBzLnJlcXVlc3RfbG9nX2lkXCIsIGlkcylcbiAgICAgICAgLmRlbGV0ZSgpO1xuICAgICAgcmV0dXJuIHRyeC50YWJsZShcInJlcXVlc3RfbG9nc1wiKS53aGVyZUluKFwicmVxdWVzdF9sb2dzLmlkXCIsIGlkcykuZGVsZXRlKCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gaWRzLmxlbmd0aDtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgUmVxdWVzdExvZ01vZGVsID0gbmV3IFJlcXVlc3RMb2dNb2RlbENsYXNzKCk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBaUJBLE1BQWEsWUFBWTtBQUt6QixJQUFNLHVCQUFOLGNBQW1DLGVBS2pDO0NBQ0EsY0FBYztBQUNaLFFBQU0sY0FBYyx5QkFBeUIsd0JBQXdCOztDQUd2RSxNQUNNLFNBQ0osUUFDQSxJQUNxQztFQUNyQyxNQUFNLEVBQUUsU0FBUyxNQUFNLEtBQUssU0FBUyxRQUFRO0dBQzNDO0dBQ0EsS0FBSztHQUNMLE1B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
|
|
@@ -97,6 +97,11 @@ const ANTHROPIC_COSTS = {
|
|
|
97
97
|
inputTokens: 5,
|
|
98
98
|
outputTokens: 25,
|
|
99
99
|
cachedInputTokens: .5
|
|
100
|
+
},
|
|
101
|
+
"claude-opus-4-8": {
|
|
102
|
+
inputTokens: 5,
|
|
103
|
+
outputTokens: 25,
|
|
104
|
+
cachedInputTokens: .5
|
|
100
105
|
}
|
|
101
106
|
};
|
|
102
107
|
const DEFAULT_COSTS = {
|
|
@@ -114,4 +119,4 @@ function calculateCostUsd(model, usage) {
|
|
|
114
119
|
//#endregion
|
|
115
120
|
export { calculateCostUsd, getModelCosts };
|
|
116
121
|
|
|
117
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtY29zdC5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdXRpbHMvcHJvdmlkZXJzL2NvbW1vbi9tb2RlbC1jb3N0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICog66qo642467OEIO2GoO2BsCDqsIDqsqkg7YWM7J2067iUICsgY29zdCDqs4TsgrAuXG4gKlxuICogY2xhdWRlIGNvZGUg7JmAIOuPmeydvCDtjKjthLQ6IO2BtOudvOydtOyWuO2KuOyXkOyEnCDqsIDqsqkg7YWM7J2067iU66GcIOyngeygkSDqs4TsgrAuXG4gKiDqsIDqsqkg64uo7JyEOiBVU0QgcGVyIDFNIHRva2Vucy5cbiAqXG4gKiBPcGVuQUkg66qo6424IOuqqeuhnTogY29kZXggYXBwLXNlcnZlciBtb2RlbC9saXN0IFJQQyDroZwg7Iuk7LihICgyMDI2LTA1LTE4KVxuICpcbiAqIEBzZWUgaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvcHJpY2luZ1xuICogQHNlZSBodHRwczovL3BsYXRmb3JtLmNsYXVkZS5jb20vZG9jcy9lbi9hYm91dC1jbGF1ZGUvcHJpY2luZ1xuICovXG5cbmV4cG9ydCBpbnRlcmZhY2UgTW9kZWxDb3N0cyB7XG4gIGlucHV0VG9rZW5zOiBudW1iZXI7XG4gIG91dHB1dFRva2VuczogbnVtYmVyO1xuICBjYWNoZWRJbnB1dFRva2VuczogbnVtYmVyO1xufVxuXG4vLyDilIDilIAgT3BlbkFJIOKAlCBjb2RleCBhcHAtc2VydmVyIOyXkOyEnCDsgqzsmqkg6rCA64ql7ZWcIOuqqOuNuCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuY29uc3QgT1BFTkFJX0NPU1RTOiBSZWNvcmQ8c3RyaW5nLCBNb2RlbENvc3RzPiA9IHtcbiAgXCJncHQtNS41XCI6IHsgaW5wdXRUb2tlbnM6IDIsIG91dHB1dFRva2VuczogOCwgY2FjaGVkSW5wdXRUb2tlbnM6IDAuNSB9LFxuICBcImdwdC01LjRcIjogeyBpbnB1dFRva2VuczogMiwgb3V0cHV0VG9rZW5zOiA4LCBjYWNoZWRJbnB1dFRva2VuczogMC41IH0sXG4gIFwiZ3B0LTUuNC1taW5pXCI6IHsgaW5wdXRUb2tlbnM6IDAuNCwgb3V0cHV0VG9rZW5zOiAxLjYsIGNhY2hlZElucHV0VG9rZW5zOiAwLjEgfSxcbiAgXCJncHQtNS4zLWNvZGV4XCI6IHsgaW5wdXRUb2tlbnM6IDIsIG91dHB1dFRva2VuczogOCwgY2FjaGVkSW5wdXRUb2tlbnM6IDAuNSB9LFxuICBcImdwdC01LjJcIjogeyBpbnB1dFRva2VuczogMiwgb3V0cHV0VG9rZW5zOiA4LCBjYWNoZWRJbnB1dFRva2VuczogMC41IH0sXG59O1xuXG4vLyDilIDilIAgQW50aHJvcGljIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5jb25zdCBBTlRIUk9QSUNfQ09TVFM6IFJlY29yZDxzdHJpbmcsIE1vZGVsQ29zdHM+
|
|
122
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtY29zdC5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdXRpbHMvcHJvdmlkZXJzL2NvbW1vbi9tb2RlbC1jb3N0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICog66qo642467OEIO2GoO2BsCDqsIDqsqkg7YWM7J2067iUICsgY29zdCDqs4TsgrAuXG4gKlxuICogY2xhdWRlIGNvZGUg7JmAIOuPmeydvCDtjKjthLQ6IO2BtOudvOydtOyWuO2KuOyXkOyEnCDqsIDqsqkg7YWM7J2067iU66GcIOyngeygkSDqs4TsgrAuXG4gKiDqsIDqsqkg64uo7JyEOiBVU0QgcGVyIDFNIHRva2Vucy5cbiAqXG4gKiBPcGVuQUkg66qo6424IOuqqeuhnTogY29kZXggYXBwLXNlcnZlciBtb2RlbC9saXN0IFJQQyDroZwg7Iuk7LihICgyMDI2LTA1LTE4KVxuICpcbiAqIEBzZWUgaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvcHJpY2luZ1xuICogQHNlZSBodHRwczovL3BsYXRmb3JtLmNsYXVkZS5jb20vZG9jcy9lbi9hYm91dC1jbGF1ZGUvcHJpY2luZ1xuICovXG5cbmV4cG9ydCBpbnRlcmZhY2UgTW9kZWxDb3N0cyB7XG4gIGlucHV0VG9rZW5zOiBudW1iZXI7XG4gIG91dHB1dFRva2VuczogbnVtYmVyO1xuICBjYWNoZWRJbnB1dFRva2VuczogbnVtYmVyO1xufVxuXG4vLyDilIDilIAgT3BlbkFJIOKAlCBjb2RleCBhcHAtc2VydmVyIOyXkOyEnCDsgqzsmqkg6rCA64ql7ZWcIOuqqOuNuCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuY29uc3QgT1BFTkFJX0NPU1RTOiBSZWNvcmQ8c3RyaW5nLCBNb2RlbENvc3RzPiA9IHtcbiAgXCJncHQtNS41XCI6IHsgaW5wdXRUb2tlbnM6IDIsIG91dHB1dFRva2VuczogOCwgY2FjaGVkSW5wdXRUb2tlbnM6IDAuNSB9LFxuICBcImdwdC01LjRcIjogeyBpbnB1dFRva2VuczogMiwgb3V0cHV0VG9rZW5zOiA4LCBjYWNoZWRJbnB1dFRva2VuczogMC41IH0sXG4gIFwiZ3B0LTUuNC1taW5pXCI6IHsgaW5wdXRUb2tlbnM6IDAuNCwgb3V0cHV0VG9rZW5zOiAxLjYsIGNhY2hlZElucHV0VG9rZW5zOiAwLjEgfSxcbiAgXCJncHQtNS4zLWNvZGV4XCI6IHsgaW5wdXRUb2tlbnM6IDIsIG91dHB1dFRva2VuczogOCwgY2FjaGVkSW5wdXRUb2tlbnM6IDAuNSB9LFxuICBcImdwdC01LjJcIjogeyBpbnB1dFRva2VuczogMiwgb3V0cHV0VG9rZW5zOiA4LCBjYWNoZWRJbnB1dFRva2VuczogMC41IH0sXG59O1xuXG4vLyDilIDilIAgQW50aHJvcGljIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5jb25zdCBBTlRIUk9QSUNfQ09TVFM6IFJlY29yZDxzdHJpbmcsIE1vZGVsQ29zdHM+ID0ge1xuICBzb25uZXQ6IHsgaW5wdXRUb2tlbnM6IDMsIG91dHB1dFRva2VuczogMTUsIGNhY2hlZElucHV0VG9rZW5zOiAwLjMgfSxcbiAgXCJjbGF1ZGUtMy01LWhhaWt1XCI6IHsgaW5wdXRUb2tlbnM6IDAuOCwgb3V0cHV0VG9rZW5zOiA0LCBjYWNoZWRJbnB1dFRva2VuczogMC4wOCB9LFxuICBcImNsYXVkZS1oYWlrdS00LTVcIjogeyBpbnB1dFRva2VuczogMSwgb3V0cHV0VG9rZW5zOiA1LCBjYWNoZWRJbnB1dFRva2VuczogMC4xIH0sXG4gIFwiY2xhdWRlLTMtNS1zb25uZXRcIjogeyBpbnB1dFRva2VuczogMywgb3V0cHV0VG9rZW5zOiAxNSwgY2FjaGVkSW5wdXRUb2tlbnM6IDAuMyB9LFxuICBcImNsYXVkZS0zLTctc29ubmV0XCI6IHsgaW5wdXRUb2tlbnM6IDMsIG91dHB1dFRva2VuczogMTUsIGNhY2hlZElucHV0VG9rZW5zOiAwLjMgfSxcbiAgXCJjbGF1ZGUtc29ubmV0LTRcIjogeyBpbnB1dFRva2VuczogMywgb3V0cHV0VG9rZW5zOiAxNSwgY2FjaGVkSW5wdXRUb2tlbnM6IDAuMyB9LFxuICBcImNsYXVkZS1zb25uZXQtNC01XCI6IHsgaW5wdXRUb2tlbnM6IDMsIG91dHB1dFRva2VuczogMTUsIGNhY2hlZElucHV0VG9rZW5zOiAwLjMgfSxcbiAgXCJjbGF1ZGUtc29ubmV0LTQtNlwiOiB7IGlucHV0VG9rZW5zOiAzLCBvdXRwdXRUb2tlbnM6IDE1LCBjYWNoZWRJbnB1dFRva2VuczogMC4zIH0sXG4gIFwiY2xhdWRlLXNvbm5ldC00LTdcIjogeyBpbnB1dFRva2VuczogMywgb3V0cHV0VG9rZW5zOiAxNSwgY2FjaGVkSW5wdXRUb2tlbnM6IDAuMyB9LFxuICBcImNsYXVkZS1vcHVzLTRcIjogeyBpbnB1dFRva2VuczogMTUsIG91dHB1dFRva2VuczogNzUsIGNhY2hlZElucHV0VG9rZW5zOiAxLjUgfSxcbiAgXCJjbGF1ZGUtb3B1cy00LTFcIjogeyBpbnB1dFRva2VuczogMTUsIG91dHB1dFRva2VuczogNzUsIGNhY2hlZElucHV0VG9rZW5zOiAxLjUgfSxcbiAgXCJjbGF1ZGUtb3B1cy00LTVcIjogeyBpbnB1dFRva2VuczogNSwgb3V0cHV0VG9rZW5zOiAyNSwgY2FjaGVkSW5wdXRUb2tlbnM6IDAuNSB9LFxuICBcImNsYXVkZS1vcHVzLTQtNlwiOiB7IGlucHV0VG9rZW5zOiA1LCBvdXRwdXRUb2tlbnM6IDI1LCBjYWNoZWRJbnB1dFRva2VuczogMC41IH0sXG4gIFwiY2xhdWRlLW9wdXMtNC03XCI6IHsgaW5wdXRUb2tlbnM6IDUsIG91dHB1dFRva2VuczogMjUsIGNhY2hlZElucHV0VG9rZW5zOiAwLjUgfSxcbiAgXCJjbGF1ZGUtb3B1cy00LThcIjogeyBpbnB1dFRva2VuczogNSwgb3V0cHV0VG9rZW5zOiAyNSwgY2FjaGVkSW5wdXRUb2tlbnM6IDAuNSB9LFxufTtcblxuY29uc3QgREVGQVVMVF9DT1NUUzogTW9kZWxDb3N0cyA9IHsgaW5wdXRUb2tlbnM6IDMsIG91dHB1dFRva2VuczogMTUsIGNhY2hlZElucHV0VG9rZW5zOiAwLjMgfTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1vZGVsQ29zdHMobW9kZWw6IHN0cmluZyk6IE1vZGVsQ29zdHMge1xuICByZXR1cm4gT1BFTkFJX0NPU1RTW21vZGVsXSA/PyBBTlRIUk9QSUNfQ09TVFNbbW9kZWxdID8/IERFRkFVTFRfQ09TVFM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhdGVDb3N0VXNkKFxuICBtb2RlbDogc3RyaW5nLFxuICB1c2FnZTogeyBpbnB1dFRva2VuczogbnVtYmVyOyBvdXRwdXRUb2tlbnM6IG51bWJlcjsgY2FjaGVkSW5wdXRUb2tlbnM/OiBudW1iZXIgfSxcbik6IG51bWJlciB7XG4gIGNvbnN0IGNvc3RzID0gZ2V0TW9kZWxDb3N0cyhtb2RlbCk7XG4gIGNvbnN0IG5vbkNhY2hlZElucHV0ID0gdXNhZ2UuaW5wdXRUb2tlbnMgLSAodXNhZ2UuY2FjaGVkSW5wdXRUb2tlbnMgPz8gMCk7XG4gIHJldHVybiAoXG4gICAgKG5vbkNhY2hlZElucHV0IC8gMV8wMDBfMDAwKSAqIGNvc3RzLmlucHV0VG9rZW5zICtcbiAgICAodXNhZ2Uub3V0cHV0VG9rZW5zIC8gMV8wMDBfMDAwKSAqIGNvc3RzLm91dHB1dFRva2VucyArXG4gICAgKCh1c2FnZS5jYWNoZWRJbnB1dFRva2VucyA/PyAwKSAvIDFfMDAwXzAwMCkgKiBjb3N0cy5jYWNoZWRJbnB1dFRva2Vuc1xuICApO1xufVxuIl0sIm1hcHBpbmdzIjoiOztBQW9CQSxNQUFNLGVBQTJDO0NBQy9DLFdBQVc7RUFBRSxhQUFhO0VBQUcsY0FBYztFQUFHLG1CQUFtQjtFQUFLO0NBQ3RFLFdBQVc7RUFBRSxhQUFhO0VBQUcsY0FBYztFQUFHLG1CQUFtQjtFQUFLO0NBQ3RFLGdCQUFnQjtFQUFFLGFBQWE7RUFBSyxjQUFjO0VBQUssbUJBQW1CO0VBQUs7Q0FDL0UsaUJBQWlCO0VBQUUsYUFBYTtFQUFHLGNBQWM7RUFBRyxtQkFBbUI7RUFBSztDQUM1RSxXQUFXO0VBQUUsYUFBYTtFQUFHLGNBQWM7RUFBRyxtQkFBbUI7RUFBSztDQUN2RTtBQUlELE1BQU0sa0JBQThDO0NBQ2xELFFBQVE7RUFBRSxhQUFhO0VBQUcsY0FBYztFQUFJLG1CQUFtQjtFQUFLO0NBQ3BFLG9CQUFvQjtFQUFFLGFBQWE7RUFBSyxjQUFjO0VBQUcsbUJBQW1CO0VBQU07Q0FDbEYsb0JBQW9CO0VBQUUsYUFBYTtFQUFHLGNBQWM7RUFBRyxtQkFBbUI7RUFBSztDQUMvRSxxQkFBcUI7RUFBRSxhQUFhO0VBQUcsY0FBYztFQUFJLG1CQUFtQjtFQUFLO0NBQ2pGLHFCQUFxQjtFQUFFLGFBQWE7RUFBRyxjQUFjO0VBQUksbUJBQW1CO0VBQUs7Q0FDakYsbUJBQW1CO0VBQUUsYUFBYTtFQUFHLGNBQWM7RUFBSSxtQkFBbUI7RUFBSztDQUMvRSxxQkFBcUI7RUFBRSxhQUFhO0VBQUcsY0FBYztFQUFJLG1CQUFtQjtFQUFLO0NBQ2pGLHFCQUFxQjtFQUFFLGFBQWE7RUFBRyxjQUFjO0VBQUksbUJBQW1CO0VBQUs7Q0FDakYscUJBQXFCO0VBQUUsYUFBYTtFQUFHLGNBQWM7RUFBSSxtQkFBbUI7RUFBSztDQUNqRixpQkFBaUI7RUFBRSxhQUFhO0VBQUksY0FBYztFQUFJLG1CQUFtQjtFQUFLO0NBQzlFLG1CQUFtQjtFQUFFLGFBQWE7RUFBSSxjQUFjO0VBQUksbUJBQW1CO0VBQUs7Q0FDaEYsbUJBQW1CO0VBQUUsYUFBYTtFQUFHLGNBQWM7RUFBSSxtQkFBbUI7RUFBSztDQUMvRSxtQkFBbUI7RUFBRSxhQUFhO0VBQUcsY0FBYztFQUFJLG1CQUFtQjtFQUFLO0NBQy9FLG1CQUFtQjtFQUFFLGFBQWE7RUFBRyxjQUFjO0VBQUksbUJBQW1CO0VBQUs7Q0FDL0UsbUJBQW1CO0VBQUUsYUFBYTtFQUFHLGNBQWM7RUFBSSxtQkFBbUI7RUFBSztDQUNoRjtBQUVELE1BQU0sZ0JBQTRCO0NBQUUsYUFBYTtDQUFHLGNBQWM7Q0FBSSxtQkFBbUI7Q0FBSztBQUU5RixTQUFnQixjQUFjLE9BQTJCO0FBQ3ZELFFBQU8sYUFBYSxVQUFVLGdCQUFnQixVQUFVOztBQUcxRCxTQUFnQixpQkFDZCxPQUNBLE9BQ1E7Q0FDUixNQUFNLFFBQVEsY0FBYyxNQUFNO0FBRWxDLFNBRHVCLE1BQU0sZUFBZSxNQUFNLHFCQUFxQixNQUVuRCxNQUFhLE1BQU0sY0FDcEMsTUFBTSxlQUFlLE1BQWEsTUFBTSxnQkFDdkMsTUFBTSxxQkFBcUIsS0FBSyxNQUFhLE1BQU0ifQ==
|
|
@@ -2,7 +2,7 @@ import "../../../_virtual/_rolldown/runtime.js";
|
|
|
2
2
|
import { CodexRpcClient } from "./codex-rpc.js";
|
|
3
3
|
import { getLogger } from "@logtape/logtape";
|
|
4
4
|
import { spawn } from "node:child_process";
|
|
5
|
-
import { mkdirSync, readFileSync, rmSync } from "node:fs";
|
|
5
|
+
import { mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
|
|
6
6
|
//#region src/utils/providers/openai/codex-worker.ts
|
|
7
7
|
const logger = getLogger(["qgrid", "codex-worker"]);
|
|
8
8
|
const MAX_RESTART_ATTEMPTS = 3;
|
|
@@ -20,6 +20,26 @@ const BASE_INSTRUCTIONS = {
|
|
|
20
20
|
text: "You are a helpful assistant. Do not use any tools such as shell, file operations, or web search. Respond with text only.",
|
|
21
21
|
withSchema: "You are a helpful assistant. Respond using the provided output schema."
|
|
22
22
|
};
|
|
23
|
+
const CODEX_CONFIG_TOML = `web_search = "disabled"
|
|
24
|
+
include_permissions_instructions = false
|
|
25
|
+
include_apps_instructions = false
|
|
26
|
+
include_environment_context = false
|
|
27
|
+
|
|
28
|
+
[features]
|
|
29
|
+
shell_tool = false
|
|
30
|
+
tool_search = false
|
|
31
|
+
tool_suggest = false
|
|
32
|
+
multi_agent = false
|
|
33
|
+
image_generation = false
|
|
34
|
+
apps = false
|
|
35
|
+
plugins = false
|
|
36
|
+
|
|
37
|
+
[tools]
|
|
38
|
+
view_image = false
|
|
39
|
+
|
|
40
|
+
[skills]
|
|
41
|
+
include_instructions = false
|
|
42
|
+
`;
|
|
23
43
|
var CodexAppServerWorker = class {
|
|
24
44
|
proc = null;
|
|
25
45
|
rpc = null;
|
|
@@ -38,6 +58,7 @@ var CodexAppServerWorker = class {
|
|
|
38
58
|
async spawnAndInit() {
|
|
39
59
|
const cwd = `${this.codexHome}/cwd`;
|
|
40
60
|
mkdirSync(cwd, { recursive: true });
|
|
61
|
+
writeFileSync(`${this.codexHome}/config.toml`, CODEX_CONFIG_TOML);
|
|
41
62
|
this.proc = spawn("codex", [
|
|
42
63
|
"app-server",
|
|
43
64
|
"--listen",
|
|
@@ -52,7 +73,8 @@ var CodexAppServerWorker = class {
|
|
|
52
73
|
env: {
|
|
53
74
|
PATH: process.env.PATH,
|
|
54
75
|
TMPDIR: process.env.TMPDIR,
|
|
55
|
-
CODEX_HOME: this.codexHome
|
|
76
|
+
CODEX_HOME: this.codexHome,
|
|
77
|
+
CODEX_EXEC_SERVER_URL: "none"
|
|
56
78
|
}
|
|
57
79
|
});
|
|
58
80
|
this.proc.on("exit", (code) => {
|
|
@@ -368,4 +390,4 @@ var CodexAppServerWorker = class {
|
|
|
368
390
|
//#endregion
|
|
369
391
|
export { CodexAppServerWorker };
|
|
370
392
|
|
|
371
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZXgtd29ya2VyLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy91dGlscy9wcm92aWRlcnMvb3BlbmFpL2NvZGV4LXdvcmtlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzcGF3biwgdHlwZSBDaGlsZFByb2Nlc3MgfSBmcm9tIFwibm9kZTpjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBta2RpclN5bmMsIHJlYWRGaWxlU3luYywgcm1TeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcblxuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSBcIkBsb2d0YXBlL2xvZ3RhcGVcIjtcblxuaW1wb3J0IHsgdHlwZSBUaHJlYWRJbmplY3RJdGVtc1BhcmFtcyB9IGZyb20gXCIuLi8uLi8uLi9jb2RleC1wcm90b2NvbC92Mi9UaHJlYWRJbmplY3RJdGVtc1BhcmFtc1wiO1xuaW1wb3J0IHsgdHlwZSBUaHJlYWRTdGFydFBhcmFtcyB9IGZyb20gXCIuLi8uLi8uLi9jb2RleC1wcm90b2NvbC92Mi9UaHJlYWRTdGFydFBhcmFtc1wiO1xuaW1wb3J0IHsgdHlwZSBUaHJlYWRTdGFydFJlc3BvbnNlIH0gZnJvbSBcIi4uLy4uLy4uL2NvZGV4LXByb3RvY29sL3YyL1RocmVhZFN0YXJ0UmVzcG9uc2VcIjtcbmltcG9ydCB7IHR5cGUgVG9rZW5Vc2FnZUJyZWFrZG93biB9IGZyb20gXCIuLi8uLi8uLi9jb2RleC1wcm90b2NvbC92Mi9Ub2tlblVzYWdlQnJlYWtkb3duXCI7XG5pbXBvcnQgeyB0eXBlIFR1cm5TdGFydFBhcmFtcyB9IGZyb20gXCIuLi8uLi8uLi9jb2RleC1wcm90b2NvbC92Mi9UdXJuU3RhcnRQYXJhbXNcIjtcbmltcG9ydCB7IHR5cGUgVHVyblN0YXJ0UmVzcG9uc2UgfSBmcm9tIFwiLi4vLi4vLi4vY29kZXgtcHJvdG9jb2wvdjIvVHVyblN0YXJ0UmVzcG9uc2VcIjtcbmltcG9ydCB7IENvZGV4UnBjQ2xpZW50IH0gZnJvbSBcIi4vY29kZXgtcnBjXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGdldExvZ2dlcihbXCJxZ3JpZFwiLCBcImNvZGV4LXdvcmtlclwiXSk7XG5cbmNvbnN0IE1BWF9SRVNUQVJUX0FUVEVNUFRTID0gMztcbmNvbnN0IFJFU1RBUlRfQkFDS09GRl9CQVNFX01TID0gMV8wMDA7XG5cbi8vIOKUgOKUgCBUeXBlcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IGludGVyZmFjZSBXb3JrZXJDb25maWcge1xuICB0b2tlbklkOiBudW1iZXI7XG4gIHRva2VuTmFtZTogc3RyaW5nO1xuICBhY2Nlc3NUb2tlbjogc3RyaW5nO1xuICBhY2NvdW50SWQ6IHN0cmluZztcbiAgcGxhblR5cGU/OiBzdHJpbmc7XG4gIHdvcmtlckluZGV4PzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFR1cm5SZXF1ZXN0IHtcbiAgaW5wdXQ6IFR1cm5TdGFydFBhcmFtc1tcImlucHV0XCJdO1xuICBvdXRwdXRTY2hlbWE/OiBUdXJuU3RhcnRQYXJhbXNbXCJvdXRwdXRTY2hlbWFcIl07XG4gIGVmZm9ydD86IHN0cmluZztcbiAgbW9kZWw/OiBzdHJpbmc7XG4gIGRldmVsb3Blckluc3RydWN0aW9ucz86IHN0cmluZztcbiAgaGlzdG9yeT86IFRocmVhZEluamVjdEl0ZW1zUGFyYW1zW1wiaXRlbXNcIl07XG4gIHZlcmJvc2l0eT86IHN0cmluZztcbiAgcmVhc29uaW5nU3VtbWFyeT86IHN0cmluZztcbiAgc2VydmljZVRpZXI/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHVyblJlc3VsdCB7XG4gIHRleHQ6IHN0cmluZztcbiAgdXNhZ2U6IFRva2VuVXNhZ2VCcmVha2Rvd247XG4gIGR1cmF0aW9uTXM6IG51bWJlcjtcbiAgbW9kZWw6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdHJlYW1DYWxsYmFja3Mge1xuICBvbkRlbHRhOiAodGV4dDogc3RyaW5nKSA9PiB2b2lkO1xuICBvbkNvbXBsZXRlOiAocmVzdWx0OiBUdXJuUmVzdWx0KSA9PiB2b2lkO1xuICBvbkVycm9yOiAoZXJyb3I6IEVycm9yKSA9PiB2b2lkO1xuICBvblRocmVhZElkPzogKHRocmVhZElkOiBzdHJpbmcpID0+IHZvaWQ7XG4gIG9uVHVybklkPzogKHR1cm5JZDogc3RyaW5nKSA9PiB2b2lkO1xufVxuXG4vLyB0aHJlYWQvc3RhcnQg6rO17Ya1IOyYteyFmFxuY29uc3QgVEhSRUFEX0RFRkFVTFRTID0ge1xuICBzYW5kYm94OiBcInJlYWQtb25seVwiLFxuICBhcHByb3ZhbFBvbGljeTogXCJuZXZlclwiLFxuICBjb25maWc6IHtcbiAgICBhcHBzOiB7IF9kZWZhdWx0OiB7IGVuYWJsZWQ6IGZhbHNlLCBkZXN0cnVjdGl2ZV9lbmFibGVkOiBmYWxzZSwgb3Blbl93b3JsZF9lbmFibGVkOiBmYWxzZSB9IH0sXG4gIH0sXG59IHNhdGlzZmllcyBQYXJ0aWFsPFRocmVhZFN0YXJ0UGFyYW1zPjtcblxuY29uc3QgQkFTRV9JTlNUUlVDVElPTlMgPSB7XG4gIHRleHQ6IFwiWW91IGFyZSBhIGhlbHBmdWwgYXNzaXN0YW50LiBEbyBub3QgdXNlIGFueSB0b29scyBzdWNoIGFzIHNoZWxsLCBmaWxlIG9wZXJhdGlvbnMsIG9yIHdlYiBzZWFyY2guIFJlc3BvbmQgd2l0aCB0ZXh0IG9ubHkuXCIsXG4gIHdpdGhTY2hlbWE6IFwiWW91IGFyZSBhIGhlbHBmdWwgYXNzaXN0YW50LiBSZXNwb25kIHVzaW5nIHRoZSBwcm92aWRlZCBvdXRwdXQgc2NoZW1hLlwiLFxufSBhcyBjb25zdDtcblxuLy8g4pSA4pSAIFdvcmtlciDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IGNsYXNzIENvZGV4QXBwU2VydmVyV29ya2VyIHtcbiAgcHJpdmF0ZSBwcm9jOiBDaGlsZFByb2Nlc3MgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBycGM6IENvZGV4UnBjQ2xpZW50IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgY29kZXhIb21lOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVzdGFydEF0dGVtcHRzID0gMDtcbiAgcHJpdmF0ZSByZWFkeSA9IGZhbHNlO1xuICBwcml2YXRlIGRlc3Ryb3llZCA9IGZhbHNlO1xuICBwcml2YXRlIGJ1c3kgPSBmYWxzZTtcbiAgYWN0aXZlID0gdHJ1ZTtcbiAgb25SZWFkeT86ICgpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjb25maWc6IFdvcmtlckNvbmZpZykge1xuICAgIGNvbnN0IHN1ZmZpeCA9IGNvbmZpZy53b3JrZXJJbmRleCAhPT0gdW5kZWZpbmVkID8gYC0ke2NvbmZpZy53b3JrZXJJbmRleH1gIDogXCJcIjtcbiAgICB0aGlzLmNvZGV4SG9tZSA9IGAvdG1wL3FncmlkLWNvZGV4LyR7Y29uZmlnLnRva2VuSWR9JHtzdWZmaXh9YDtcbiAgfVxuXG4gIC8vIOKUgOKUgCBMaWZlY3ljbGUg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgcHJpdmF0ZSBhc3luYyBzcGF3bkFuZEluaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY3dkID0gYCR7dGhpcy5jb2RleEhvbWV9L2N3ZGA7XG4gICAgbWtkaXJTeW5jKGN3ZCwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgICB0aGlzLnByb2MgPSBzcGF3bihcImNvZGV4XCIsIFtcImFwcC1zZXJ2ZXJcIiwgXCItLWxpc3RlblwiLCBcInN0ZGlvOi8vXCJdLCB7XG4gICAgICBzdGRpbzogW1wicGlwZVwiLCBcInBpcGVcIiwgXCJwaXBlXCJdLFxuICAgICAgY3dkLFxuICAgICAgZW52OiB7IFBBVEg6IHByb2Nlc3MuZW52LlBBVEgsIFRNUERJUjogcHJvY2Vzcy5lbnYuVE1QRElSLCBDT0RFWF9IT01FOiB0aGlzLmNvZGV4SG9tZSB9LFxuICAgIH0pO1xuXG4gICAgdGhpcy5wcm9jLm9uKFwiZXhpdFwiLCAoY29kZSkgPT4ge1xuICAgICAgbG9nZ2VyLmluZm8oYHdvcmtlciAke3RoaXMuY29uZmlnLnRva2VuTmFtZX0gZXhpdGVkIChjb2RlPSR7Y29kZX0pYCk7XG4gICAgICB0aGlzLnJlYWR5ID0gZmFsc2U7XG4gICAgICB0aGlzLnJwYyA9IG51bGw7XG4gICAgICB0aGlzLnByb2MgPSBudWxsO1xuICAgICAgaWYgKCF0aGlzLmRlc3Ryb3llZCkgdGhpcy5zY2hlZHVsZVJlc3RhcnQoKTtcbiAgICB9KTtcblxuICAgIHRoaXMucnBjID0gbmV3IENvZGV4UnBjQ2xpZW50KHRoaXMucHJvYyk7XG5cbiAgICBhd2FpdCB0aGlzLnJwYy5yZXF1ZXN0KFwiaW5pdGlhbGl6ZVwiLCB7XG4gICAgICBjbGllbnRJbmZvOiB7IG5hbWU6IFwicWdyaWRcIiwgdmVyc2lvbjogXCIxLjAuMFwiIH0sXG4gICAgICBjYXBhYmlsaXRpZXM6IHsgZXhwZXJpbWVudGFsQXBpOiB0cnVlIH0sXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHdhaXRGb3JMb2dpbkNvbXBsZXRlZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihcImxvZ2luIHRpbWVvdXRcIikpLCAxMjBfMDAwKTtcbiAgICAgIHRoaXMucnBjIS5vbk5vdGlmaWNhdGlvbihcImFjY291bnQvbG9naW4vY29tcGxldGVkXCIsIChwKSA9PiB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgaWYgKHAuc3VjY2VzcykgcmVzb2x2ZSgpO1xuICAgICAgICBlbHNlIHJlamVjdChuZXcgRXJyb3IoYGxvZ2luIGZhaWxlZDogJHtwLmVycm9yID8/IFwidW5rbm93blwifWApKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgaW5pdGlhbGl6ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnNwYXduQW5kSW5pdCgpO1xuXG4gICAgYXdhaXQgdGhpcy5ycGMhLnJlcXVlc3QoXCJhY2NvdW50L2xvZ2luL3N0YXJ0XCIsIHtcbiAgICAgIHR5cGU6IFwiY2hhdGdwdEF1dGhUb2tlbnNcIixcbiAgICAgIGFjY2Vzc1Rva2VuOiB0aGlzLmNvbmZpZy5hY2Nlc3NUb2tlbixcbiAgICAgIGNoYXRncHRBY2NvdW50SWQ6IHRoaXMuY29uZmlnLmFjY291bnRJZCxcbiAgICAgIC4uLih0aGlzLmNvbmZpZy5wbGFuVHlwZSA/IHsgY2hhdGdwdFBsYW5UeXBlOiB0aGlzLmNvbmZpZy5wbGFuVHlwZSB9IDoge30pLFxuICAgIH0pO1xuXG4gICAgYXdhaXQgdGhpcy53YWl0Rm9yTG9naW5Db21wbGV0ZWQoKTtcbiAgICB0aGlzLnJlYWR5ID0gdHJ1ZTtcbiAgICB0aGlzLnJlc3RhcnRBdHRlbXB0cyA9IDA7XG4gICAgbG9nZ2VyLmluZm8oYHdvcmtlciAke3RoaXMuY29uZmlnLnRva2VuTmFtZX0gcmVhZHlgKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0QnJvd3NlckxvZ2luKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgYXdhaXQgdGhpcy5zcGF3bkFuZEluaXQoKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJwYyEucmVxdWVzdDx7IGF1dGhVcmw6IHN0cmluZyB9PihcImFjY291bnQvbG9naW4vc3RhcnRcIiwge1xuICAgICAgdHlwZTogXCJjaGF0Z3B0XCIsXG4gICAgfSk7XG4gICAgbG9nZ2VyLmluZm8oYHdvcmtlciAke3RoaXMuY29uZmlnLnRva2VuTmFtZX0gYnJvd3NlciBsb2dpbiBzdGFydGVkYCk7XG4gICAgcmV0dXJuIHJlc3VsdC5hdXRoVXJsO1xuICB9XG5cbiAgYXN5bmMgd2FpdEZvckJyb3dzZXJMb2dpbkNvbXBsZXRlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMud2FpdEZvckxvZ2luQ29tcGxldGVkKCk7XG4gICAgdGhpcy5yZWFkeSA9IHRydWU7XG4gICAgdGhpcy5yZXN0YXJ0QXR0ZW1wdHMgPSAwO1xuICAgIGxvZ2dlci5pbmZvKGB3b3JrZXIgJHt0aGlzLmNvbmZpZy50b2tlbk5hbWV9IGJyb3dzZXIgbG9naW4gY29tcGxldGVkYCk7XG4gIH1cblxuICBhc3luYyByZWFkTWFuYWdlZENyZWRlbnRpYWxzKCk6IFByb21pc2U8e1xuICAgIGFjY2Vzc1Rva2VuOiBzdHJpbmc7XG4gICAgcmVmcmVzaFRva2VuOiBzdHJpbmc7XG4gICAgaWRUb2tlbj86IHN0cmluZztcbiAgICBhY2NvdW50SWQ6IHN0cmluZztcbiAgfSB8IG51bGw+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmF3ID0gSlNPTi5wYXJzZShyZWFkRmlsZVN5bmMoYCR7dGhpcy5jb2RleEhvbWV9L2F1dGguanNvbmAsIFwidXRmLThcIikpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYWNjZXNzVG9rZW46IHJhdy50b2tlbnM/LmFjY2Vzc190b2tlbiA/PyBcIlwiLFxuICAgICAgICByZWZyZXNoVG9rZW46IHJhdy50b2tlbnM/LnJlZnJlc2hfdG9rZW4gPz8gXCJcIixcbiAgICAgICAgaWRUb2tlbjogcmF3LnRva2Vucz8uaWRfdG9rZW4sXG4gICAgICAgIGFjY291bnRJZDogcmF3LnRva2Vucz8uYWNjb3VudF9pZCA/PyBcIlwiLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGtpbGwoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5kZXN0cm95ZWQgPSB0cnVlO1xuICAgIHRoaXMucmVhZHkgPSBmYWxzZTtcbiAgICB0aGlzLnJwYz8uZGVzdHJveSgpO1xuXG4gICAgaWYgKHRoaXMucHJvYykge1xuICAgICAgdGhpcy5wcm9jLmtpbGwoXCJTSUdURVJNXCIpO1xuICAgICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICAgICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLnByb2M/LmtpbGwoXCJTSUdLSUxMXCIpO1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSwgM18wMDApO1xuICAgICAgICB0aGlzLnByb2MhLm9uKFwiZXhpdFwiLCAoKSA9PiB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHJtU3luYyh0aGlzLmNvZGV4SG9tZSwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pO1xuICAgIH0gY2F0Y2gge31cbiAgfVxuXG4gIGdldCBpc1JlYWR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnJlYWR5ICYmICF0aGlzLmRlc3Ryb3llZDtcbiAgfVxuICBnZXQgaXNEZXN0cm95ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGVzdHJveWVkO1xuICB9XG4gIGdldCB0b2tlbklkKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnRva2VuSWQ7XG4gIH1cbiAgZ2V0IHRva2VuTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy50b2tlbk5hbWU7XG4gIH1cblxuICAvLyDilIDilIAgUmF0ZSBsaW1pdHMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgYXN5bmMgZ2V0UmF0ZUxpbWl0cygpOiBQcm9taXNlPHVua25vd24+IHtcbiAgICBpZiAoIXRoaXMucnBjIHx8ICF0aGlzLnJlYWR5KSB0aHJvdyBuZXcgRXJyb3IoXCJ3b3JrZXIgbm90IHJlYWR5XCIpO1xuICAgIHJldHVybiB0aGlzLnJwYy5yZXF1ZXN0KFwiYWNjb3VudC9yYXRlTGltaXRzL3JlYWRcIiwge30pO1xuICB9XG5cbiAgLy8g4pSA4pSAIFNlcnZlci1yZXF1ZXN0IGRlbGVnYXRpb24g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgc2V0U2VydmVyUmVxdWVzdEhhbmRsZXIoaGFuZGxlcjogKG1ldGhvZDogc3RyaW5nLCBwYXJhbXM6IHVua25vd24pID0+IFByb21pc2U8dW5rbm93bj4pOiB2b2lkIHtcbiAgICB0aGlzLnJwYz8ub25TZXJ2ZXJSZXF1ZXN0KFwiYWNjb3VudC9jaGF0Z3B0QXV0aFRva2Vucy9yZWZyZXNoXCIsIChwYXJhbXMpID0+XG4gICAgICBoYW5kbGVyKFwiYWNjb3VudC9jaGF0Z3B0QXV0aFRva2Vucy9yZWZyZXNoXCIsIHBhcmFtcyksXG4gICAgKTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBUdXJuIGV4ZWN1dGlvbiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICB0cnlBY3F1aXJlVHVybigpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5idXN5KSByZXR1cm4gZmFsc2U7XG4gICAgdGhpcy5idXN5ID0gdHJ1ZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZWxlYXNlVHVybigpOiB2b2lkIHtcbiAgICB0aGlzLmJ1c3kgPSBmYWxzZTtcbiAgfVxuICBnZXQgaGFzQ2FwYWNpdHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmJ1c3k7XG4gIH1cblxuICBhc3luYyBzdGFydFRocmVhZChcbiAgICByZXE6IFR1cm5SZXF1ZXN0LFxuICApOiBQcm9taXNlPHsgdGhyZWFkSWQ6IHN0cmluZzsgdHVybklkOiBzdHJpbmc7IG1vZGVsOiBzdHJpbmcgfT4ge1xuICAgIGlmICghdGhpcy5ycGMgfHwgIXRoaXMucmVhZHkpIHRocm93IG5ldyBFcnJvcihcIndvcmtlciBub3QgcmVhZHlcIik7XG5cbiAgICBjb25zdCB0aHJlYWRDb25maWc6IFRocmVhZFN0YXJ0UGFyYW1zW1wiY29uZmlnXCJdID0ge1xuICAgICAgLi4uVEhSRUFEX0RFRkFVTFRTLmNvbmZpZyxcbiAgICAgIC4uLihyZXEudmVyYm9zaXR5ID8geyBtb2RlbF92ZXJib3NpdHk6IHJlcS52ZXJib3NpdHkgfSA6IHt9KSxcbiAgICB9O1xuICAgIGNvbnN0IHsgdGhyZWFkLCBtb2RlbDogdGhyZWFkTW9kZWwgfSA9IGF3YWl0IHRoaXMucnBjLnJlcXVlc3Q8VGhyZWFkU3RhcnRSZXNwb25zZT4oXG4gICAgICBcInRocmVhZC9zdGFydFwiLFxuICAgICAge1xuICAgICAgICBlcGhlbWVyYWw6IHRydWUsXG4gICAgICAgIGN3ZDogYCR7dGhpcy5jb2RleEhvbWV9L2N3ZGAsXG4gICAgICAgIGJhc2VJbnN0cnVjdGlvbnM6IHJlcS5vdXRwdXRTY2hlbWEgPyBCQVNFX0lOU1RSVUNUSU9OUy53aXRoU2NoZW1hIDogQkFTRV9JTlNUUlVDVElPTlMudGV4dCxcbiAgICAgICAgZGV2ZWxvcGVySW5zdHJ1Y3Rpb25zOiByZXEuZGV2ZWxvcGVySW5zdHJ1Y3Rpb25zID8/IFwiXCIsXG4gICAgICAgIHNhbmRib3g6IFRIUkVBRF9ERUZBVUxUUy5zYW5kYm94LFxuICAgICAgICBhcHByb3ZhbFBvbGljeTogVEhSRUFEX0RFRkFVTFRTLmFwcHJvdmFsUG9saWN5LFxuICAgICAgICBjb25maWc6IHRocmVhZENvbmZpZyxcbiAgICAgIH0gc2F0aXNmaWVzIFBhcnRpYWw8VGhyZWFkU3RhcnRQYXJhbXM+LFxuICAgICk7XG5cbiAgICBjb25zdCB0aHJlYWRJZCA9IHRocmVhZC5pZDtcbiAgICBjb25zdCBtb2RlbCA9IHJlcS5tb2RlbCA/PyB0aHJlYWRNb2RlbDtcbiAgICBpZiAocmVxLmhpc3Rvcnk/Lmxlbmd0aCkge1xuICAgICAgYXdhaXQgdGhpcy5ycGMucmVxdWVzdChcInRocmVhZC9pbmplY3RfaXRlbXNcIiwge1xuICAgICAgICB0aHJlYWRJZCxcbiAgICAgICAgaXRlbXM6IHJlcS5oaXN0b3J5LFxuICAgICAgfSBzYXRpc2ZpZXMgVGhyZWFkSW5qZWN0SXRlbXNQYXJhbXMpO1xuICAgIH1cblxuICAgIGNvbnN0IHsgdHVybiB9ID0gYXdhaXQgdGhpcy5ycGMucmVxdWVzdDxUdXJuU3RhcnRSZXNwb25zZT4oXCJ0dXJuL3N0YXJ0XCIsIHtcbiAgICAgIHRocmVhZElkLFxuICAgICAgaW5wdXQ6IHJlcS5pbnB1dCxcbiAgICAgIC4uLihyZXEub3V0cHV0U2NoZW1hID8geyBvdXRwdXRTY2hlbWE6IHJlcS5vdXRwdXRTY2hlbWEgfSA6IHt9KSxcbiAgICAgIC4uLihyZXEuZWZmb3J0ID8geyBlZmZvcnQ6IHJlcS5lZmZvcnQgfSA6IHt9KSxcbiAgICAgIC4uLihyZXEubW9kZWwgPyB7IG1vZGVsOiByZXEubW9kZWwgfSA6IHt9KSxcbiAgICAgIC4uLihyZXEucmVhc29uaW5nU3VtbWFyeSA/IHsgc3VtbWFyeTogcmVxLnJlYXNvbmluZ1N1bW1hcnkgfSA6IHt9KSxcbiAgICAgIC4uLihyZXEuc2VydmljZVRpZXIgPyB7IHNlcnZpY2VUaWVyOiByZXEuc2VydmljZVRpZXIgfSA6IHt9KSxcbiAgICB9KTtcblxuICAgIHJldHVybiB7IHRocmVhZElkLCB0dXJuSWQ6IHR1cm4uaWQsIG1vZGVsIH07XG4gIH1cblxuICBhc3luYyBleGVjdXRlVHVybihyZXE6IFR1cm5SZXF1ZXN0KTogUHJvbWlzZTxUdXJuUmVzdWx0PiB7XG4gICAgY29uc3QgeyB0aHJlYWRJZCwgbW9kZWwgfSA9IGF3YWl0IHRoaXMuc3RhcnRUaHJlYWQocmVxKTtcbiAgICByZXR1cm4gdGhpcy5jb25zdW1lVHVybk5vdGlmaWNhdGlvbnModGhyZWFkSWQsIG1vZGVsKTtcbiAgfVxuXG4gIGFzeW5jIGV4ZWN1dGVUdXJuU3RyZWFtKHJlcTogVHVyblJlcXVlc3QsIGNiOiBTdHJlYW1DYWxsYmFja3MpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IHRocmVhZElkLCB0dXJuSWQsIG1vZGVsIH0gPSBhd2FpdCB0aGlzLnN0YXJ0VGhyZWFkKHJlcSk7XG4gICAgY2Iub25UaHJlYWRJZD8uKHRocmVhZElkKTtcbiAgICBjYi5vblR1cm5JZD8uKHR1cm5JZCk7XG4gICAgcmV0dXJuIHRoaXMuY29uc3VtZVN0cmVhbU5vdGlmaWNhdGlvbnModGhyZWFkSWQsIG1vZGVsLCBjYik7XG4gIH1cblxuICBhc3luYyBpbnRlcnJ1cHRUdXJuKHRocmVhZElkOiBzdHJpbmcsIHR1cm5JZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLnJwYyB8fCAhdGhpcy5yZWFkeSkgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnJwYy5yZXF1ZXN0KFwidHVybi9pbnRlcnJ1cHRcIiwgeyB0aHJlYWRJZCwgdHVybklkIH0pO1xuICAgIH0gY2F0Y2gge31cbiAgfVxuXG4gIHByaXZhdGUgY29uc3VtZVR1cm5Ob3RpZmljYXRpb25zKHRocmVhZElkOiBzdHJpbmcsIG1vZGVsOiBzdHJpbmcpOiBQcm9taXNlPFR1cm5SZXN1bHQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8VHVyblJlc3VsdD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBjbGVhbnVwKCk7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoXCJ0dXJuIHRpbWVvdXQgKDYwMHMpXCIpKTtcbiAgICAgIH0sIDYwMF8wMDApO1xuXG4gICAgICBsZXQgdGV4dCA9IFwiXCI7XG4gICAgICBsZXQgdXNhZ2U6IFRva2VuVXNhZ2VCcmVha2Rvd24gPSB7XG4gICAgICAgIHRvdGFsVG9rZW5zOiAwLFxuICAgICAgICBpbnB1dFRva2VuczogMCxcbiAgICAgICAgb3V0cHV0VG9rZW5zOiAwLFxuICAgICAgICBjYWNoZWRJbnB1dFRva2VuczogMCxcbiAgICAgICAgcmVhc29uaW5nT3V0cHV0VG9rZW5zOiAwLFxuICAgICAgfTtcbiAgICAgIGxldCBkdXJhdGlvbk1zID0gMDtcblxuICAgICAgY29uc3QgY2xlYW51cCA9ICgpID0+IHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICBmb3IgKGNvbnN0IG4gb2YgW1xuICAgICAgICAgIFwiaXRlbS9jb21wbGV0ZWRcIixcbiAgICAgICAgICBcIml0ZW0vYWdlbnRNZXNzYWdlL2RlbHRhXCIsXG4gICAgICAgICAgXCJ0dXJuL2NvbXBsZXRlZFwiLFxuICAgICAgICAgIFwidGhyZWFkL3Rva2VuVXNhZ2UvdXBkYXRlZFwiLFxuICAgICAgICAgIFwiZXJyb3JcIixcbiAgICAgICAgXSBhcyBjb25zdCkge1xuICAgICAgICAgIHRoaXMucnBjPy5vbk5vdGlmaWNhdGlvbihuLCAoKSA9PiB7fSk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHRoaXMucnBjIS5vbk5vdGlmaWNhdGlvbihcIml0ZW0vY29tcGxldGVkXCIsIChwKSA9PiB7XG4gICAgICAgIGlmIChwLnRocmVhZElkICE9PSB0aHJlYWRJZCkgcmV0dXJuO1xuICAgICAgICBpZiAocC5pdGVtLnR5cGUgPT09IFwiYWdlbnRNZXNzYWdlXCIpIHRleHQgPSBwLml0ZW0udGV4dDtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnJwYyEub25Ob3RpZmljYXRpb24oXCJ0aHJlYWQvdG9rZW5Vc2FnZS91cGRhdGVkXCIsIChwKSA9PiB7XG4gICAgICAgIGlmIChwLnRocmVhZElkICE9PSB0aHJlYWRJZCkgcmV0dXJuO1xuICAgICAgICB1c2FnZSA9IHAudG9rZW5Vc2FnZS50b3RhbDtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnJwYyEub25Ob3RpZmljYXRpb24oXCJ0dXJuL2NvbXBsZXRlZFwiLCAocCkgPT4ge1xuICAgICAgICBpZiAocC50aHJlYWRJZCAhPT0gdGhyZWFkSWQpIHJldHVybjtcbiAgICAgICAgZHVyYXRpb25NcyA9IHAudHVybi5kdXJhdGlvbk1zID8/IDA7XG4gICAgICAgIGNsZWFudXAoKTtcbiAgICAgICAgaWYgKHAudHVybi5zdGF0dXMgPT09IFwiY29tcGxldGVkXCIpIHJlc29sdmUoeyB0ZXh0LCB1c2FnZSwgZHVyYXRpb25NcywgbW9kZWwgfSk7XG4gICAgICAgIGVsc2UgcmVqZWN0KG5ldyBFcnJvcihgdHVybiBmYWlsZWQ6ICR7SlNPTi5zdHJpbmdpZnkocC50dXJuLmVycm9yKX1gKSk7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5ycGMhLm9uTm90aWZpY2F0aW9uKFwiZXJyb3JcIiwgKHApID0+IHtcbiAgICAgICAgaWYgKHAudGhyZWFkSWQgIT09IHRocmVhZElkKSByZXR1cm47XG4gICAgICAgIGlmICghcC53aWxsUmV0cnkpIHtcbiAgICAgICAgICBjbGVhbnVwKCk7XG4gICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgY29kZXggZXJyb3I6ICR7cC5lcnJvci5tZXNzYWdlfWApKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN1bWVTdHJlYW1Ob3RpZmljYXRpb25zKFxuICAgIHRocmVhZElkOiBzdHJpbmcsXG4gICAgbW9kZWw6IHN0cmluZyxcbiAgICBjYjogU3RyZWFtQ2FsbGJhY2tzLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBjbGVhbnVwKCk7XG4gICAgICAgIGNiLm9uRXJyb3IobmV3IEVycm9yKFwidHVybiB0aW1lb3V0ICg2MDBzKVwiKSk7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoXCJ0dXJuIHRpbWVvdXQgKDYwMHMpXCIpKTtcbiAgICAgIH0sIDYwMF8wMDApO1xuXG4gICAgICBsZXQgdGV4dCA9IFwiXCI7XG4gICAgICBsZXQgdXNhZ2U6IFRva2VuVXNhZ2VCcmVha2Rvd24gPSB7XG4gICAgICAgIHRvdGFsVG9rZW5zOiAwLFxuICAgICAgICBpbnB1dFRva2VuczogMCxcbiAgICAgICAgb3V0cHV0VG9rZW5zOiAwLFxuICAgICAgICBjYWNoZWRJbnB1dFRva2VuczogMCxcbiAgICAgICAgcmVhc29uaW5nT3V0cHV0VG9rZW5zOiAwLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgY2xlYW51cCA9ICgpID0+IHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICBmb3IgKGNvbnN0IG4gb2YgW1xuICAgICAgICAgIFwiaXRlbS9jb21wbGV0ZWRcIixcbiAgICAgICAgICBcIml0ZW0vYWdlbnRNZXNzYWdlL2RlbHRhXCIsXG4gICAgICAgICAgXCJ0dXJuL2NvbXBsZXRlZFwiLFxuICAgICAgICAgIFwidGhyZWFkL3Rva2VuVXNhZ2UvdXBkYXRlZFwiLFxuICAgICAgICAgIFwiZXJyb3JcIixcbiAgICAgICAgXSBhcyBjb25zdCkge1xuICAgICAgICAgIHRoaXMucnBjPy5vbk5vdGlmaWNhdGlvbihuLCAoKSA9PiB7fSk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHRoaXMucnBjIS5vbk5vdGlmaWNhdGlvbihcIml0ZW0vYWdlbnRNZXNzYWdlL2RlbHRhXCIsIChwKSA9PiB7XG4gICAgICAgIGlmIChwLnRocmVhZElkICE9PSB0aHJlYWRJZCkgcmV0dXJuO1xuICAgICAgICB0ZXh0ICs9IHAuZGVsdGE7XG4gICAgICAgIGNiLm9uRGVsdGEocC5kZWx0YSk7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5ycGMhLm9uTm90aWZpY2F0aW9uKFwiaXRlbS9jb21wbGV0ZWRcIiwgKHApID0+IHtcbiAgICAgICAgaWYgKHAudGhyZWFkSWQgIT09IHRocmVhZElkKSByZXR1cm47XG4gICAgICAgIGlmIChwLml0ZW0udHlwZSA9PT0gXCJhZ2VudE1lc3NhZ2VcIikgdGV4dCA9IHAuaXRlbS50ZXh0O1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMucnBjIS5vbk5vdGlmaWNhdGlvbihcInRocmVhZC90b2tlblVzYWdlL3VwZGF0ZWRcIiwgKHApID0+IHtcbiAgICAgICAgaWYgKHAudGhyZWFkSWQgIT09IHRocmVhZElkKSByZXR1cm47XG4gICAgICAgIHVzYWdlID0gcC50b2tlblVzYWdlLnRvdGFsO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMucnBjIS5vbk5vdGlmaWNhdGlvbihcInR1cm4vY29tcGxldGVkXCIsIChwKSA9PiB7XG4gICAgICAgIGlmIChwLnRocmVhZElkICE9PSB0aHJlYWRJZCkgcmV0dXJuO1xuICAgICAgICBjbGVhbnVwKCk7XG4gICAgICAgIGlmIChwLnR1cm4uc3RhdHVzID09PSBcImNvbXBsZXRlZFwiKSB7XG4gICAgICAgICAgY2Iub25Db21wbGV0ZSh7IHRleHQsIHVzYWdlLCBkdXJhdGlvbk1zOiBwLnR1cm4uZHVyYXRpb25NcyA/PyAwLCBtb2RlbCB9KTtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgZXJyID0gbmV3IEVycm9yKGB0dXJuICR7cC50dXJuLnN0YXR1c306ICR7SlNPTi5zdHJpbmdpZnkocC50dXJuLmVycm9yKX1gKTtcbiAgICAgICAgICBjYi5vbkVycm9yKGVycik7XG4gICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnJwYyEub25Ob3RpZmljYXRpb24oXCJlcnJvclwiLCAocCkgPT4ge1xuICAgICAgICBpZiAocC50aHJlYWRJZCAhPT0gdGhyZWFkSWQpIHJldHVybjtcbiAgICAgICAgaWYgKCFwLndpbGxSZXRyeSkge1xuICAgICAgICAgIGNsZWFudXAoKTtcbiAgICAgICAgICBjb25zdCBlcnIgPSBuZXcgRXJyb3IoYGNvZGV4IGVycm9yOiAke3AuZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgICAgICBjYi5vbkVycm9yKGVycik7XG4gICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLy8g4pSA4pSAIFJlc3RhcnQg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgcHJpdmF0ZSBzY2hlZHVsZVJlc3RhcnQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGVzdHJveWVkIHx8IHRoaXMucmVzdGFydEF0dGVtcHRzID49IE1BWF9SRVNUQVJUX0FUVEVNUFRTKSB7XG4gICAgICBpZiAodGhpcy5yZXN0YXJ0QXR0ZW1wdHMgPj0gTUFYX1JFU1RBUlRfQVRURU1QVFMpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oYHdvcmtlciAke3RoaXMuY29uZmlnLnRva2VuTmFtZX0gbWF4IHJlc3RhcnQgYXR0ZW1wdHMgcmVhY2hlZGApO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucmVzdGFydEF0dGVtcHRzKys7XG4gICAgY29uc3QgYmFzZURlbGF5ID0gUkVTVEFSVF9CQUNLT0ZGX0JBU0VfTVMgKiAyICoqICh0aGlzLnJlc3RhcnRBdHRlbXB0cyAtIDEpO1xuICAgIGNvbnN0IHN0YWdnZXIgPSAodGhpcy5jb25maWcud29ya2VySW5kZXggPz8gMCkgKiAyXzAwMDtcbiAgICBjb25zdCBkZWxheSA9IGJhc2VEZWxheSArIHN0YWdnZXI7XG4gICAgbG9nZ2VyLmluZm8oXG4gICAgICBgd29ya2VyICR7dGhpcy5jb25maWcudG9rZW5OYW1lfVske3RoaXMuY29uZmlnLndvcmtlckluZGV4ID8/IDB9XSByZXN0YXJ0aW5nIGluICR7ZGVsYXl9bXMgKGF0dGVtcHQgJHt0aGlzLnJlc3RhcnRBdHRlbXB0c30pYCxcbiAgICApO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHJldHVybjtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZSgpXG4gICAgICAgIC50aGVuKCgpID0+IHRoaXMub25SZWFkeT8uKCkpXG4gICAgICAgIC5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgIGxvZ2dlci53YXJuKGB3b3JrZXIgJHt0aGlzLmNvbmZpZy50b2tlbk5hbWV9IHJlc3RhcnQgZmFpbGVkOiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuICAgICAgICAgIHRoaXMuc2NoZWR1bGVSZXN0YXJ0KCk7XG4gICAgICAgIH0pO1xuICAgIH0sIGRlbGF5KTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFhQSxNQUFNLFNBQVMsVUFBVSxDQUFD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
|
|
393
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZXgtd29ya2VyLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy91dGlscy9wcm92aWRlcnMvb3BlbmFpL2NvZGV4LXdvcmtlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzcGF3biwgdHlwZSBDaGlsZFByb2Nlc3MgfSBmcm9tIFwibm9kZTpjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBta2RpclN5bmMsIHJlYWRGaWxlU3luYywgcm1TeW5jLCB3cml0ZUZpbGVTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcblxuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSBcIkBsb2d0YXBlL2xvZ3RhcGVcIjtcblxuaW1wb3J0IHsgdHlwZSBUaHJlYWRJbmplY3RJdGVtc1BhcmFtcyB9IGZyb20gXCIuLi8uLi8uLi9jb2RleC1wcm90b2NvbC92Mi9UaHJlYWRJbmplY3RJdGVtc1BhcmFtc1wiO1xuaW1wb3J0IHsgdHlwZSBUaHJlYWRTdGFydFBhcmFtcyB9IGZyb20gXCIuLi8uLi8uLi9jb2RleC1wcm90b2NvbC92Mi9UaHJlYWRTdGFydFBhcmFtc1wiO1xuaW1wb3J0IHsgdHlwZSBUaHJlYWRTdGFydFJlc3BvbnNlIH0gZnJvbSBcIi4uLy4uLy4uL2NvZGV4LXByb3RvY29sL3YyL1RocmVhZFN0YXJ0UmVzcG9uc2VcIjtcbmltcG9ydCB7IHR5cGUgVG9rZW5Vc2FnZUJyZWFrZG93biB9IGZyb20gXCIuLi8uLi8uLi9jb2RleC1wcm90b2NvbC92Mi9Ub2tlblVzYWdlQnJlYWtkb3duXCI7XG5pbXBvcnQgeyB0eXBlIFR1cm5TdGFydFBhcmFtcyB9IGZyb20gXCIuLi8uLi8uLi9jb2RleC1wcm90b2NvbC92Mi9UdXJuU3RhcnRQYXJhbXNcIjtcbmltcG9ydCB7IHR5cGUgVHVyblN0YXJ0UmVzcG9uc2UgfSBmcm9tIFwiLi4vLi4vLi4vY29kZXgtcHJvdG9jb2wvdjIvVHVyblN0YXJ0UmVzcG9uc2VcIjtcbmltcG9ydCB7IENvZGV4UnBjQ2xpZW50IH0gZnJvbSBcIi4vY29kZXgtcnBjXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGdldExvZ2dlcihbXCJxZ3JpZFwiLCBcImNvZGV4LXdvcmtlclwiXSk7XG5cbmNvbnN0IE1BWF9SRVNUQVJUX0FUVEVNUFRTID0gMztcbmNvbnN0IFJFU1RBUlRfQkFDS09GRl9CQVNFX01TID0gMV8wMDA7XG5cbi8vIOKUgOKUgCBUeXBlcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IGludGVyZmFjZSBXb3JrZXJDb25maWcge1xuICB0b2tlbklkOiBudW1iZXI7XG4gIHRva2VuTmFtZTogc3RyaW5nO1xuICBhY2Nlc3NUb2tlbjogc3RyaW5nO1xuICBhY2NvdW50SWQ6IHN0cmluZztcbiAgcGxhblR5cGU/OiBzdHJpbmc7XG4gIHdvcmtlckluZGV4PzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFR1cm5SZXF1ZXN0IHtcbiAgaW5wdXQ6IFR1cm5TdGFydFBhcmFtc1tcImlucHV0XCJdO1xuICBvdXRwdXRTY2hlbWE/OiBUdXJuU3RhcnRQYXJhbXNbXCJvdXRwdXRTY2hlbWFcIl07XG4gIGVmZm9ydD86IHN0cmluZztcbiAgbW9kZWw/OiBzdHJpbmc7XG4gIGRldmVsb3Blckluc3RydWN0aW9ucz86IHN0cmluZztcbiAgaGlzdG9yeT86IFRocmVhZEluamVjdEl0ZW1zUGFyYW1zW1wiaXRlbXNcIl07XG4gIHZlcmJvc2l0eT86IHN0cmluZztcbiAgcmVhc29uaW5nU3VtbWFyeT86IHN0cmluZztcbiAgc2VydmljZVRpZXI/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHVyblJlc3VsdCB7XG4gIHRleHQ6IHN0cmluZztcbiAgdXNhZ2U6IFRva2VuVXNhZ2VCcmVha2Rvd247XG4gIGR1cmF0aW9uTXM6IG51bWJlcjtcbiAgbW9kZWw6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdHJlYW1DYWxsYmFja3Mge1xuICBvbkRlbHRhOiAodGV4dDogc3RyaW5nKSA9PiB2b2lkO1xuICBvbkNvbXBsZXRlOiAocmVzdWx0OiBUdXJuUmVzdWx0KSA9PiB2b2lkO1xuICBvbkVycm9yOiAoZXJyb3I6IEVycm9yKSA9PiB2b2lkO1xuICBvblRocmVhZElkPzogKHRocmVhZElkOiBzdHJpbmcpID0+IHZvaWQ7XG4gIG9uVHVybklkPzogKHR1cm5JZDogc3RyaW5nKSA9PiB2b2lkO1xufVxuXG4vLyB0aHJlYWQvc3RhcnQg6rO17Ya1IOyYteyFmFxuY29uc3QgVEhSRUFEX0RFRkFVTFRTID0ge1xuICBzYW5kYm94OiBcInJlYWQtb25seVwiLFxuICBhcHByb3ZhbFBvbGljeTogXCJuZXZlclwiLFxuICBjb25maWc6IHtcbiAgICBhcHBzOiB7IF9kZWZhdWx0OiB7IGVuYWJsZWQ6IGZhbHNlLCBkZXN0cnVjdGl2ZV9lbmFibGVkOiBmYWxzZSwgb3Blbl93b3JsZF9lbmFibGVkOiBmYWxzZSB9IH0sXG4gIH0sXG59IHNhdGlzZmllcyBQYXJ0aWFsPFRocmVhZFN0YXJ0UGFyYW1zPjtcblxuY29uc3QgQkFTRV9JTlNUUlVDVElPTlMgPSB7XG4gIHRleHQ6IFwiWW91IGFyZSBhIGhlbHBmdWwgYXNzaXN0YW50LiBEbyBub3QgdXNlIGFueSB0b29scyBzdWNoIGFzIHNoZWxsLCBmaWxlIG9wZXJhdGlvbnMsIG9yIHdlYiBzZWFyY2guIFJlc3BvbmQgd2l0aCB0ZXh0IG9ubHkuXCIsXG4gIHdpdGhTY2hlbWE6IFwiWW91IGFyZSBhIGhlbHBmdWwgYXNzaXN0YW50LiBSZXNwb25kIHVzaW5nIHRoZSBwcm92aWRlZCBvdXRwdXQgc2NoZW1hLlwiLFxufSBhcyBjb25zdDtcblxuLy8gY29kZXjqsIAg66ekIOyalOyyreyXkCDsnpDrj5kg7KO87J6F7ZWY64qUIOuCtOyepSB0b29sKHNoZWxsL3dlYl9zZWFyY2gvc3Bhd25fYWdlbnQg65OxIDE06rCcKeqzvFxuLy8gaW5zdHJ1Y3Rpb24g67iU66GdKHBlcm1pc3Npb25zL2Vudmlyb25tZW50X2NvbnRleHQvc2tpbGxzLCB+MTBLQinsnYQg67mE7Zmc7ISx7ZmUXG4vLyAkQ09ERVhfSE9NRS9jb25maWcudG9tbCDroZwg7I2o64Sj7Jy866m0IGNvZGV4IOu2gO2MhSDsi5wgc2NhblxuLy8g7Ya17KCc67aI6rCAOiB1cGRhdGVfcGxhbi9yZXF1ZXN0X3VzZXJfaW5wdXRcbmNvbnN0IENPREVYX0NPTkZJR19UT01MID0gYHdlYl9zZWFyY2ggPSBcImRpc2FibGVkXCJcbmluY2x1ZGVfcGVybWlzc2lvbnNfaW5zdHJ1Y3Rpb25zID0gZmFsc2VcbmluY2x1ZGVfYXBwc19pbnN0cnVjdGlvbnMgPSBmYWxzZVxuaW5jbHVkZV9lbnZpcm9ubWVudF9jb250ZXh0ID0gZmFsc2VcblxuW2ZlYXR1cmVzXVxuc2hlbGxfdG9vbCA9IGZhbHNlXG50b29sX3NlYXJjaCA9IGZhbHNlXG50b29sX3N1Z2dlc3QgPSBmYWxzZVxubXVsdGlfYWdlbnQgPSBmYWxzZVxuaW1hZ2VfZ2VuZXJhdGlvbiA9IGZhbHNlXG5hcHBzID0gZmFsc2VcbnBsdWdpbnMgPSBmYWxzZVxuXG5bdG9vbHNdXG52aWV3X2ltYWdlID0gZmFsc2VcblxuW3NraWxsc11cbmluY2x1ZGVfaW5zdHJ1Y3Rpb25zID0gZmFsc2VcbmA7XG5cbi8vIOKUgOKUgCBXb3JrZXIg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCBjbGFzcyBDb2RleEFwcFNlcnZlcldvcmtlciB7XG4gIHByaXZhdGUgcHJvYzogQ2hpbGRQcm9jZXNzIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgcnBjOiBDb2RleFJwY0NsaWVudCB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGNvZGV4SG9tZTogc3RyaW5nO1xuICBwcml2YXRlIHJlc3RhcnRBdHRlbXB0cyA9IDA7XG4gIHByaXZhdGUgcmVhZHkgPSBmYWxzZTtcbiAgcHJpdmF0ZSBkZXN0cm95ZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBidXN5ID0gZmFsc2U7XG4gIGFjdGl2ZSA9IHRydWU7XG4gIG9uUmVhZHk/OiAoKSA9PiB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY29uZmlnOiBXb3JrZXJDb25maWcpIHtcbiAgICBjb25zdCBzdWZmaXggPSBjb25maWcud29ya2VySW5kZXggIT09IHVuZGVmaW5lZCA/IGAtJHtjb25maWcud29ya2VySW5kZXh9YCA6IFwiXCI7XG4gICAgdGhpcy5jb2RleEhvbWUgPSBgL3RtcC9xZ3JpZC1jb2RleC8ke2NvbmZpZy50b2tlbklkfSR7c3VmZml4fWA7XG4gIH1cblxuICAvLyDilIDilIAgTGlmZWN5Y2xlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIHByaXZhdGUgYXN5bmMgc3Bhd25BbmRJbml0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGN3ZCA9IGAke3RoaXMuY29kZXhIb21lfS9jd2RgO1xuICAgIG1rZGlyU3luYyhjd2QsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIC8vIGNvZGV4IOuCtOyepSB0b29sL3dlYl9zZWFyY2gvaW5zdHJ1Y3Rpb24g67iU66GdIOu5hO2ZnOyEse2ZlFxuICAgIHdyaXRlRmlsZVN5bmMoYCR7dGhpcy5jb2RleEhvbWV9L2NvbmZpZy50b21sYCwgQ09ERVhfQ09ORklHX1RPTUwpO1xuXG4gICAgdGhpcy5wcm9jID0gc3Bhd24oXCJjb2RleFwiLCBbXCJhcHAtc2VydmVyXCIsIFwiLS1saXN0ZW5cIiwgXCJzdGRpbzovL1wiXSwge1xuICAgICAgc3RkaW86IFtcInBpcGVcIiwgXCJwaXBlXCIsIFwicGlwZVwiXSxcbiAgICAgIGN3ZCxcbiAgICAgIGVudjoge1xuICAgICAgICBQQVRIOiBwcm9jZXNzLmVudi5QQVRILFxuICAgICAgICBUTVBESVI6IHByb2Nlc3MuZW52LlRNUERJUixcbiAgICAgICAgQ09ERVhfSE9NRTogdGhpcy5jb2RleEhvbWUsXG4gICAgICAgIC8vIGVudmlyb25tZW50IOu5hO2ZnOyEse2ZlCDihpIgaGFzX2Vudmlyb25tZW50PWZhbHNlIOKGkiBzaGVsbC9hcHBseV9wYXRjaC92aWV3X2ltYWdlIOygnOqxsFxuICAgICAgICBDT0RFWF9FWEVDX1NFUlZFUl9VUkw6IFwibm9uZVwiLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHRoaXMucHJvYy5vbihcImV4aXRcIiwgKGNvZGUpID0+IHtcbiAgICAgIGxvZ2dlci5pbmZvKGB3b3JrZXIgJHt0aGlzLmNvbmZpZy50b2tlbk5hbWV9IGV4aXRlZCAoY29kZT0ke2NvZGV9KWApO1xuICAgICAgdGhpcy5yZWFkeSA9IGZhbHNlO1xuICAgICAgdGhpcy5ycGMgPSBudWxsO1xuICAgICAgdGhpcy5wcm9jID0gbnVsbDtcbiAgICAgIGlmICghdGhpcy5kZXN0cm95ZWQpIHRoaXMuc2NoZWR1bGVSZXN0YXJ0KCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnJwYyA9IG5ldyBDb2RleFJwY0NsaWVudCh0aGlzLnByb2MpO1xuXG4gICAgYXdhaXQgdGhpcy5ycGMucmVxdWVzdChcImluaXRpYWxpemVcIiwge1xuICAgICAgY2xpZW50SW5mbzogeyBuYW1lOiBcInFncmlkXCIsIHZlcnNpb246IFwiMS4wLjBcIiB9LFxuICAgICAgY2FwYWJpbGl0aWVzOiB7IGV4cGVyaW1lbnRhbEFwaTogdHJ1ZSB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB3YWl0Rm9yTG9naW5Db21wbGV0ZWQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoXCJsb2dpbiB0aW1lb3V0XCIpKSwgMTIwXzAwMCk7XG4gICAgICB0aGlzLnJwYyEub25Ob3RpZmljYXRpb24oXCJhY2NvdW50L2xvZ2luL2NvbXBsZXRlZFwiLCAocCkgPT4ge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgIGlmIChwLnN1Y2Nlc3MpIHJlc29sdmUoKTtcbiAgICAgICAgZWxzZSByZWplY3QobmV3IEVycm9yKGBsb2dpbiBmYWlsZWQ6ICR7cC5lcnJvciA/PyBcInVua25vd25cIn1gKSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGluaXRpYWxpemUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5zcGF3bkFuZEluaXQoKTtcblxuICAgIGF3YWl0IHRoaXMucnBjIS5yZXF1ZXN0KFwiYWNjb3VudC9sb2dpbi9zdGFydFwiLCB7XG4gICAgICB0eXBlOiBcImNoYXRncHRBdXRoVG9rZW5zXCIsXG4gICAgICBhY2Nlc3NUb2tlbjogdGhpcy5jb25maWcuYWNjZXNzVG9rZW4sXG4gICAgICBjaGF0Z3B0QWNjb3VudElkOiB0aGlzLmNvbmZpZy5hY2NvdW50SWQsXG4gICAgICAuLi4odGhpcy5jb25maWcucGxhblR5cGUgPyB7IGNoYXRncHRQbGFuVHlwZTogdGhpcy5jb25maWcucGxhblR5cGUgfSA6IHt9KSxcbiAgICB9KTtcblxuICAgIGF3YWl0IHRoaXMud2FpdEZvckxvZ2luQ29tcGxldGVkKCk7XG4gICAgdGhpcy5yZWFkeSA9IHRydWU7XG4gICAgdGhpcy5yZXN0YXJ0QXR0ZW1wdHMgPSAwO1xuICAgIGxvZ2dlci5pbmZvKGB3b3JrZXIgJHt0aGlzLmNvbmZpZy50b2tlbk5hbWV9IHJlYWR5YCk7XG4gIH1cblxuICBhc3luYyBzdGFydEJyb3dzZXJMb2dpbigpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGF3YWl0IHRoaXMuc3Bhd25BbmRJbml0KCk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5ycGMhLnJlcXVlc3Q8eyBhdXRoVXJsOiBzdHJpbmcgfT4oXCJhY2NvdW50L2xvZ2luL3N0YXJ0XCIsIHtcbiAgICAgIHR5cGU6IFwiY2hhdGdwdFwiLFxuICAgIH0pO1xuICAgIGxvZ2dlci5pbmZvKGB3b3JrZXIgJHt0aGlzLmNvbmZpZy50b2tlbk5hbWV9IGJyb3dzZXIgbG9naW4gc3RhcnRlZGApO1xuICAgIHJldHVybiByZXN1bHQuYXV0aFVybDtcbiAgfVxuXG4gIGFzeW5jIHdhaXRGb3JCcm93c2VyTG9naW5Db21wbGV0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLndhaXRGb3JMb2dpbkNvbXBsZXRlZCgpO1xuICAgIHRoaXMucmVhZHkgPSB0cnVlO1xuICAgIHRoaXMucmVzdGFydEF0dGVtcHRzID0gMDtcbiAgICBsb2dnZXIuaW5mbyhgd29ya2VyICR7dGhpcy5jb25maWcudG9rZW5OYW1lfSBicm93c2VyIGxvZ2luIGNvbXBsZXRlZGApO1xuICB9XG5cbiAgYXN5bmMgcmVhZE1hbmFnZWRDcmVkZW50aWFscygpOiBQcm9taXNlPHtcbiAgICBhY2Nlc3NUb2tlbjogc3RyaW5nO1xuICAgIHJlZnJlc2hUb2tlbjogc3RyaW5nO1xuICAgIGlkVG9rZW4/OiBzdHJpbmc7XG4gICAgYWNjb3VudElkOiBzdHJpbmc7XG4gIH0gfCBudWxsPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJhdyA9IEpTT04ucGFyc2UocmVhZEZpbGVTeW5jKGAke3RoaXMuY29kZXhIb21lfS9hdXRoLmpzb25gLCBcInV0Zi04XCIpKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFjY2Vzc1Rva2VuOiByYXcudG9rZW5zPy5hY2Nlc3NfdG9rZW4gPz8gXCJcIixcbiAgICAgICAgcmVmcmVzaFRva2VuOiByYXcudG9rZW5zPy5yZWZyZXNoX3Rva2VuID8/IFwiXCIsXG4gICAgICAgIGlkVG9rZW46IHJhdy50b2tlbnM/LmlkX3Rva2VuLFxuICAgICAgICBhY2NvdW50SWQ6IHJhdy50b2tlbnM/LmFjY291bnRfaWQgPz8gXCJcIixcbiAgICAgIH07XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBhc3luYyBraWxsKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZTtcbiAgICB0aGlzLnJlYWR5ID0gZmFsc2U7XG4gICAgdGhpcy5ycGM/LmRlc3Ryb3koKTtcblxuICAgIGlmICh0aGlzLnByb2MpIHtcbiAgICAgIHRoaXMucHJvYy5raWxsKFwiU0lHVEVSTVwiKTtcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5wcm9jPy5raWxsKFwiU0lHS0lMTFwiKTtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0sIDNfMDAwKTtcbiAgICAgICAgdGhpcy5wcm9jIS5vbihcImV4aXRcIiwgKCkgPT4ge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBybVN5bmModGhpcy5jb2RleEhvbWUsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcbiAgICB9IGNhdGNoIHt9XG4gIH1cblxuICBnZXQgaXNSZWFkeSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSAmJiAhdGhpcy5kZXN0cm95ZWQ7XG4gIH1cbiAgZ2V0IGlzRGVzdHJveWVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRlc3Ryb3llZDtcbiAgfVxuICBnZXQgdG9rZW5JZCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy50b2tlbklkO1xuICB9XG4gIGdldCB0b2tlbk5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcudG9rZW5OYW1lO1xuICB9XG5cbiAgLy8g4pSA4pSAIFJhdGUgbGltaXRzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIGFzeW5jIGdldFJhdGVMaW1pdHMoKTogUHJvbWlzZTx1bmtub3duPiB7XG4gICAgaWYgKCF0aGlzLnJwYyB8fCAhdGhpcy5yZWFkeSkgdGhyb3cgbmV3IEVycm9yKFwid29ya2VyIG5vdCByZWFkeVwiKTtcbiAgICByZXR1cm4gdGhpcy5ycGMucmVxdWVzdChcImFjY291bnQvcmF0ZUxpbWl0cy9yZWFkXCIsIHt9KTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBTZXJ2ZXItcmVxdWVzdCBkZWxlZ2F0aW9uIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIHNldFNlcnZlclJlcXVlc3RIYW5kbGVyKGhhbmRsZXI6IChtZXRob2Q6IHN0cmluZywgcGFyYW1zOiB1bmtub3duKSA9PiBQcm9taXNlPHVua25vd24+KTogdm9pZCB7XG4gICAgdGhpcy5ycGM/Lm9uU2VydmVyUmVxdWVzdChcImFjY291bnQvY2hhdGdwdEF1dGhUb2tlbnMvcmVmcmVzaFwiLCAocGFyYW1zKSA9PlxuICAgICAgaGFuZGxlcihcImFjY291bnQvY2hhdGdwdEF1dGhUb2tlbnMvcmVmcmVzaFwiLCBwYXJhbXMpLFxuICAgICk7XG4gIH1cblxuICAvLyDilIDilIAgVHVybiBleGVjdXRpb24g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgdHJ5QWNxdWlyZVR1cm4oKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuYnVzeSkgcmV0dXJuIGZhbHNlO1xuICAgIHRoaXMuYnVzeSA9IHRydWU7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmVsZWFzZVR1cm4oKTogdm9pZCB7XG4gICAgdGhpcy5idXN5ID0gZmFsc2U7XG4gIH1cbiAgZ2V0IGhhc0NhcGFjaXR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5idXN5O1xuICB9XG5cbiAgYXN5bmMgc3RhcnRUaHJlYWQoXG4gICAgcmVxOiBUdXJuUmVxdWVzdCxcbiAgKTogUHJvbWlzZTx7IHRocmVhZElkOiBzdHJpbmc7IHR1cm5JZDogc3RyaW5nOyBtb2RlbDogc3RyaW5nIH0+IHtcbiAgICBpZiAoIXRoaXMucnBjIHx8ICF0aGlzLnJlYWR5KSB0aHJvdyBuZXcgRXJyb3IoXCJ3b3JrZXIgbm90IHJlYWR5XCIpO1xuXG4gICAgY29uc3QgdGhyZWFkQ29uZmlnOiBUaHJlYWRTdGFydFBhcmFtc1tcImNvbmZpZ1wiXSA9IHtcbiAgICAgIC4uLlRIUkVBRF9ERUZBVUxUUy5jb25maWcsXG4gICAgICAuLi4ocmVxLnZlcmJvc2l0eSA/IHsgbW9kZWxfdmVyYm9zaXR5OiByZXEudmVyYm9zaXR5IH0gOiB7fSksXG4gICAgfTtcbiAgICBjb25zdCB7IHRocmVhZCwgbW9kZWw6IHRocmVhZE1vZGVsIH0gPSBhd2FpdCB0aGlzLnJwYy5yZXF1ZXN0PFRocmVhZFN0YXJ0UmVzcG9uc2U+KFxuICAgICAgXCJ0aHJlYWQvc3RhcnRcIixcbiAgICAgIHtcbiAgICAgICAgZXBoZW1lcmFsOiB0cnVlLFxuICAgICAgICBjd2Q6IGAke3RoaXMuY29kZXhIb21lfS9jd2RgLFxuICAgICAgICBiYXNlSW5zdHJ1Y3Rpb25zOiByZXEub3V0cHV0U2NoZW1hID8gQkFTRV9JTlNUUlVDVElPTlMud2l0aFNjaGVtYSA6IEJBU0VfSU5TVFJVQ1RJT05TLnRleHQsXG4gICAgICAgIGRldmVsb3Blckluc3RydWN0aW9uczogcmVxLmRldmVsb3Blckluc3RydWN0aW9ucyA/PyBcIlwiLFxuICAgICAgICBzYW5kYm94OiBUSFJFQURfREVGQVVMVFMuc2FuZGJveCxcbiAgICAgICAgYXBwcm92YWxQb2xpY3k6IFRIUkVBRF9ERUZBVUxUUy5hcHByb3ZhbFBvbGljeSxcbiAgICAgICAgY29uZmlnOiB0aHJlYWRDb25maWcsXG4gICAgICB9IHNhdGlzZmllcyBQYXJ0aWFsPFRocmVhZFN0YXJ0UGFyYW1zPixcbiAgICApO1xuXG4gICAgY29uc3QgdGhyZWFkSWQgPSB0aHJlYWQuaWQ7XG4gICAgY29uc3QgbW9kZWwgPSByZXEubW9kZWwgPz8gdGhyZWFkTW9kZWw7XG4gICAgaWYgKHJlcS5oaXN0b3J5Py5sZW5ndGgpIHtcbiAgICAgIGF3YWl0IHRoaXMucnBjLnJlcXVlc3QoXCJ0aHJlYWQvaW5qZWN0X2l0ZW1zXCIsIHtcbiAgICAgICAgdGhyZWFkSWQsXG4gICAgICAgIGl0ZW1zOiByZXEuaGlzdG9yeSxcbiAgICAgIH0gc2F0aXNmaWVzIFRocmVhZEluamVjdEl0ZW1zUGFyYW1zKTtcbiAgICB9XG5cbiAgICBjb25zdCB7IHR1cm4gfSA9IGF3YWl0IHRoaXMucnBjLnJlcXVlc3Q8VHVyblN0YXJ0UmVzcG9uc2U+KFwidHVybi9zdGFydFwiLCB7XG4gICAgICB0aHJlYWRJZCxcbiAgICAgIGlucHV0OiByZXEuaW5wdXQsXG4gICAgICAuLi4ocmVxLm91dHB1dFNjaGVtYSA/IHsgb3V0cHV0U2NoZW1hOiByZXEub3V0cHV0U2NoZW1hIH0gOiB7fSksXG4gICAgICAuLi4ocmVxLmVmZm9ydCA/IHsgZWZmb3J0OiByZXEuZWZmb3J0IH0gOiB7fSksXG4gICAgICAuLi4ocmVxLm1vZGVsID8geyBtb2RlbDogcmVxLm1vZGVsIH0gOiB7fSksXG4gICAgICAuLi4ocmVxLnJlYXNvbmluZ1N1bW1hcnkgPyB7IHN1bW1hcnk6IHJlcS5yZWFzb25pbmdTdW1tYXJ5IH0gOiB7fSksXG4gICAgICAuLi4ocmVxLnNlcnZpY2VUaWVyID8geyBzZXJ2aWNlVGllcjogcmVxLnNlcnZpY2VUaWVyIH0gOiB7fSksXG4gICAgfSk7XG5cbiAgICByZXR1cm4geyB0aHJlYWRJZCwgdHVybklkOiB0dXJuLmlkLCBtb2RlbCB9O1xuICB9XG5cbiAgYXN5bmMgZXhlY3V0ZVR1cm4ocmVxOiBUdXJuUmVxdWVzdCk6IFByb21pc2U8VHVyblJlc3VsdD4ge1xuICAgIGNvbnN0IHsgdGhyZWFkSWQsIG1vZGVsIH0gPSBhd2FpdCB0aGlzLnN0YXJ0VGhyZWFkKHJlcSk7XG4gICAgcmV0dXJuIHRoaXMuY29uc3VtZVR1cm5Ob3RpZmljYXRpb25zKHRocmVhZElkLCBtb2RlbCk7XG4gIH1cblxuICBhc3luYyBleGVjdXRlVHVyblN0cmVhbShyZXE6IFR1cm5SZXF1ZXN0LCBjYjogU3RyZWFtQ2FsbGJhY2tzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyB0aHJlYWRJZCwgdHVybklkLCBtb2RlbCB9ID0gYXdhaXQgdGhpcy5zdGFydFRocmVhZChyZXEpO1xuICAgIGNiLm9uVGhyZWFkSWQ/Lih0aHJlYWRJZCk7XG4gICAgY2Iub25UdXJuSWQ/Lih0dXJuSWQpO1xuICAgIHJldHVybiB0aGlzLmNvbnN1bWVTdHJlYW1Ob3RpZmljYXRpb25zKHRocmVhZElkLCBtb2RlbCwgY2IpO1xuICB9XG5cbiAgYXN5bmMgaW50ZXJydXB0VHVybih0aHJlYWRJZDogc3RyaW5nLCB0dXJuSWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5ycGMgfHwgIXRoaXMucmVhZHkpIHJldHVybjtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5ycGMucmVxdWVzdChcInR1cm4vaW50ZXJydXB0XCIsIHsgdGhyZWFkSWQsIHR1cm5JZCB9KTtcbiAgICB9IGNhdGNoIHt9XG4gIH1cblxuICBwcml2YXRlIGNvbnN1bWVUdXJuTm90aWZpY2F0aW9ucyh0aHJlYWRJZDogc3RyaW5nLCBtb2RlbDogc3RyaW5nKTogUHJvbWlzZTxUdXJuUmVzdWx0PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPFR1cm5SZXN1bHQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgY2xlYW51cCgpO1xuICAgICAgICByZWplY3QobmV3IEVycm9yKFwidHVybiB0aW1lb3V0ICg2MDBzKVwiKSk7XG4gICAgICB9LCA2MDBfMDAwKTtcblxuICAgICAgbGV0IHRleHQgPSBcIlwiO1xuICAgICAgbGV0IHVzYWdlOiBUb2tlblVzYWdlQnJlYWtkb3duID0ge1xuICAgICAgICB0b3RhbFRva2VuczogMCxcbiAgICAgICAgaW5wdXRUb2tlbnM6IDAsXG4gICAgICAgIG91dHB1dFRva2VuczogMCxcbiAgICAgICAgY2FjaGVkSW5wdXRUb2tlbnM6IDAsXG4gICAgICAgIHJlYXNvbmluZ091dHB1dFRva2VuczogMCxcbiAgICAgIH07XG4gICAgICBsZXQgZHVyYXRpb25NcyA9IDA7XG5cbiAgICAgIGNvbnN0IGNsZWFudXAgPSAoKSA9PiB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgZm9yIChjb25zdCBuIG9mIFtcbiAgICAgICAgICBcIml0ZW0vY29tcGxldGVkXCIsXG4gICAgICAgICAgXCJpdGVtL2FnZW50TWVzc2FnZS9kZWx0YVwiLFxuICAgICAgICAgIFwidHVybi9jb21wbGV0ZWRcIixcbiAgICAgICAgICBcInRocmVhZC90b2tlblVzYWdlL3VwZGF0ZWRcIixcbiAgICAgICAgICBcImVycm9yXCIsXG4gICAgICAgIF0gYXMgY29uc3QpIHtcbiAgICAgICAgICB0aGlzLnJwYz8ub25Ob3RpZmljYXRpb24obiwgKCkgPT4ge30pO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICB0aGlzLnJwYyEub25Ob3RpZmljYXRpb24oXCJpdGVtL2NvbXBsZXRlZFwiLCAocCkgPT4ge1xuICAgICAgICBpZiAocC50aHJlYWRJZCAhPT0gdGhyZWFkSWQpIHJldHVybjtcbiAgICAgICAgaWYgKHAuaXRlbS50eXBlID09PSBcImFnZW50TWVzc2FnZVwiKSB0ZXh0ID0gcC5pdGVtLnRleHQ7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5ycGMhLm9uTm90aWZpY2F0aW9uKFwidGhyZWFkL3Rva2VuVXNhZ2UvdXBkYXRlZFwiLCAocCkgPT4ge1xuICAgICAgICBpZiAocC50aHJlYWRJZCAhPT0gdGhyZWFkSWQpIHJldHVybjtcbiAgICAgICAgdXNhZ2UgPSBwLnRva2VuVXNhZ2UudG90YWw7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5ycGMhLm9uTm90aWZpY2F0aW9uKFwidHVybi9jb21wbGV0ZWRcIiwgKHApID0+IHtcbiAgICAgICAgaWYgKHAudGhyZWFkSWQgIT09IHRocmVhZElkKSByZXR1cm47XG4gICAgICAgIGR1cmF0aW9uTXMgPSBwLnR1cm4uZHVyYXRpb25NcyA/PyAwO1xuICAgICAgICBjbGVhbnVwKCk7XG4gICAgICAgIGlmIChwLnR1cm4uc3RhdHVzID09PSBcImNvbXBsZXRlZFwiKSByZXNvbHZlKHsgdGV4dCwgdXNhZ2UsIGR1cmF0aW9uTXMsIG1vZGVsIH0pO1xuICAgICAgICBlbHNlIHJlamVjdChuZXcgRXJyb3IoYHR1cm4gZmFpbGVkOiAke0pTT04uc3RyaW5naWZ5KHAudHVybi5lcnJvcil9YCkpO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMucnBjIS5vbk5vdGlmaWNhdGlvbihcImVycm9yXCIsIChwKSA9PiB7XG4gICAgICAgIGlmIChwLnRocmVhZElkICE9PSB0aHJlYWRJZCkgcmV0dXJuO1xuICAgICAgICBpZiAoIXAud2lsbFJldHJ5KSB7XG4gICAgICAgICAgY2xlYW51cCgpO1xuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYGNvZGV4IGVycm9yOiAke3AuZXJyb3IubWVzc2FnZX1gKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdW1lU3RyZWFtTm90aWZpY2F0aW9ucyhcbiAgICB0aHJlYWRJZDogc3RyaW5nLFxuICAgIG1vZGVsOiBzdHJpbmcsXG4gICAgY2I6IFN0cmVhbUNhbGxiYWNrcyxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgY2xlYW51cCgpO1xuICAgICAgICBjYi5vbkVycm9yKG5ldyBFcnJvcihcInR1cm4gdGltZW91dCAoNjAwcylcIikpO1xuICAgICAgICByZWplY3QobmV3IEVycm9yKFwidHVybiB0aW1lb3V0ICg2MDBzKVwiKSk7XG4gICAgICB9LCA2MDBfMDAwKTtcblxuICAgICAgbGV0IHRleHQgPSBcIlwiO1xuICAgICAgbGV0IHVzYWdlOiBUb2tlblVzYWdlQnJlYWtkb3duID0ge1xuICAgICAgICB0b3RhbFRva2VuczogMCxcbiAgICAgICAgaW5wdXRUb2tlbnM6IDAsXG4gICAgICAgIG91dHB1dFRva2VuczogMCxcbiAgICAgICAgY2FjaGVkSW5wdXRUb2tlbnM6IDAsXG4gICAgICAgIHJlYXNvbmluZ091dHB1dFRva2VuczogMCxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGNsZWFudXAgPSAoKSA9PiB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgZm9yIChjb25zdCBuIG9mIFtcbiAgICAgICAgICBcIml0ZW0vY29tcGxldGVkXCIsXG4gICAgICAgICAgXCJpdGVtL2FnZW50TWVzc2FnZS9kZWx0YVwiLFxuICAgICAgICAgIFwidHVybi9jb21wbGV0ZWRcIixcbiAgICAgICAgICBcInRocmVhZC90b2tlblVzYWdlL3VwZGF0ZWRcIixcbiAgICAgICAgICBcImVycm9yXCIsXG4gICAgICAgIF0gYXMgY29uc3QpIHtcbiAgICAgICAgICB0aGlzLnJwYz8ub25Ob3RpZmljYXRpb24obiwgKCkgPT4ge30pO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICB0aGlzLnJwYyEub25Ob3RpZmljYXRpb24oXCJpdGVtL2FnZW50TWVzc2FnZS9kZWx0YVwiLCAocCkgPT4ge1xuICAgICAgICBpZiAocC50aHJlYWRJZCAhPT0gdGhyZWFkSWQpIHJldHVybjtcbiAgICAgICAgdGV4dCArPSBwLmRlbHRhO1xuICAgICAgICBjYi5vbkRlbHRhKHAuZGVsdGEpO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMucnBjIS5vbk5vdGlmaWNhdGlvbihcIml0ZW0vY29tcGxldGVkXCIsIChwKSA9PiB7XG4gICAgICAgIGlmIChwLnRocmVhZElkICE9PSB0aHJlYWRJZCkgcmV0dXJuO1xuICAgICAgICBpZiAocC5pdGVtLnR5cGUgPT09IFwiYWdlbnRNZXNzYWdlXCIpIHRleHQgPSBwLml0ZW0udGV4dDtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnJwYyEub25Ob3RpZmljYXRpb24oXCJ0aHJlYWQvdG9rZW5Vc2FnZS91cGRhdGVkXCIsIChwKSA9PiB7XG4gICAgICAgIGlmIChwLnRocmVhZElkICE9PSB0aHJlYWRJZCkgcmV0dXJuO1xuICAgICAgICB1c2FnZSA9IHAudG9rZW5Vc2FnZS50b3RhbDtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnJwYyEub25Ob3RpZmljYXRpb24oXCJ0dXJuL2NvbXBsZXRlZFwiLCAocCkgPT4ge1xuICAgICAgICBpZiAocC50aHJlYWRJZCAhPT0gdGhyZWFkSWQpIHJldHVybjtcbiAgICAgICAgY2xlYW51cCgpO1xuICAgICAgICBpZiAocC50dXJuLnN0YXR1cyA9PT0gXCJjb21wbGV0ZWRcIikge1xuICAgICAgICAgIGNiLm9uQ29tcGxldGUoeyB0ZXh0LCB1c2FnZSwgZHVyYXRpb25NczogcC50dXJuLmR1cmF0aW9uTXMgPz8gMCwgbW9kZWwgfSk7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGVyciA9IG5ldyBFcnJvcihgdHVybiAke3AudHVybi5zdGF0dXN9OiAke0pTT04uc3RyaW5naWZ5KHAudHVybi5lcnJvcil9YCk7XG4gICAgICAgICAgY2Iub25FcnJvcihlcnIpO1xuICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5ycGMhLm9uTm90aWZpY2F0aW9uKFwiZXJyb3JcIiwgKHApID0+IHtcbiAgICAgICAgaWYgKHAudGhyZWFkSWQgIT09IHRocmVhZElkKSByZXR1cm47XG4gICAgICAgIGlmICghcC53aWxsUmV0cnkpIHtcbiAgICAgICAgICBjbGVhbnVwKCk7XG4gICAgICAgICAgY29uc3QgZXJyID0gbmV3IEVycm9yKGBjb2RleCBlcnJvcjogJHtwLmVycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgY2Iub25FcnJvcihlcnIpO1xuICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBSZXN0YXJ0IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIHByaXZhdGUgc2NoZWR1bGVSZXN0YXJ0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRlc3Ryb3llZCB8fCB0aGlzLnJlc3RhcnRBdHRlbXB0cyA+PSBNQVhfUkVTVEFSVF9BVFRFTVBUUykge1xuICAgICAgaWYgKHRoaXMucmVzdGFydEF0dGVtcHRzID49IE1BWF9SRVNUQVJUX0FUVEVNUFRTKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKGB3b3JrZXIgJHt0aGlzLmNvbmZpZy50b2tlbk5hbWV9IG1heCByZXN0YXJ0IGF0dGVtcHRzIHJlYWNoZWRgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnJlc3RhcnRBdHRlbXB0cysrO1xuICAgIGNvbnN0IGJhc2VEZWxheSA9IFJFU1RBUlRfQkFDS09GRl9CQVNFX01TICogMiAqKiAodGhpcy5yZXN0YXJ0QXR0ZW1wdHMgLSAxKTtcbiAgICBjb25zdCBzdGFnZ2VyID0gKHRoaXMuY29uZmlnLndvcmtlckluZGV4ID8/IDApICogMl8wMDA7XG4gICAgY29uc3QgZGVsYXkgPSBiYXNlRGVsYXkgKyBzdGFnZ2VyO1xuICAgIGxvZ2dlci5pbmZvKFxuICAgICAgYHdvcmtlciAke3RoaXMuY29uZmlnLnRva2VuTmFtZX1bJHt0aGlzLmNvbmZpZy53b3JrZXJJbmRleCA/PyAwfV0gcmVzdGFydGluZyBpbiAke2RlbGF5fW1zIChhdHRlbXB0ICR7dGhpcy5yZXN0YXJ0QXR0ZW1wdHN9KWAsXG4gICAgKTtcblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZGVzdHJveWVkKSByZXR1cm47XG4gICAgICB0aGlzLmluaXRpYWxpemUoKVxuICAgICAgICAudGhlbigoKSA9PiB0aGlzLm9uUmVhZHk/LigpKVxuICAgICAgICAuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICBsb2dnZXIud2Fybihgd29ya2VyICR7dGhpcy5jb25maWcudG9rZW5OYW1lfSByZXN0YXJ0IGZhaWxlZDogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKTtcbiAgICAgICAgICB0aGlzLnNjaGVkdWxlUmVzdGFydCgpO1xuICAgICAgICB9KTtcbiAgICB9LCBkZWxheSk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBYUEsTUFBTSxTQUFTLFVBQVUsQ0FBQyxTQUFTLGVBQWUsQ0FBQztBQUVuRCxNQUFNLHVCQUF1QjtBQUM3QixNQUFNLDBCQUEwQjtBQXlDaEMsTUFBTSxrQkFBa0I7Q0FDdEIsU0FBUztDQUNULGdCQUFnQjtDQUNoQixRQUFRLEVBQ04sTUFBTSxFQUFFLFVBQVU7RUFBRSxTQUFTO0VBQU8scUJBQXFCO0VBQU8sb0JBQW9CO0VBQU8sRUFBRSxFQUM5RjtDQUNGO0FBRUQsTUFBTSxvQkFBb0I7Q0FDeEIsTUFBTTtDQUNOLFlBQVk7Q0FDYjtBQU1ELE1BQU0sb0JBQW9COzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXVCMUIsSUFBYSx1QkFBYixNQUFrQztDQUNoQyxPQUFvQztDQUNwQyxNQUFxQztDQUNyQztDQUNBLGtCQUEwQjtDQUMxQixRQUFnQjtDQUNoQixZQUFvQjtDQUNwQixPQUFlO0NBQ2YsU0FBUztDQUNUO0NBRUEsWUFBWSxRQUE4QjtBQUF0QixPQUFBLFNBQUE7RUFDbEIsTUFBTSxTQUFTLE9BQU8sZ0JBQWdCLFNBQVksSUFBSSxPQUFPLGdCQUFnQjtBQUM3RSxPQUFLLFlBQVksb0JBQW9CLE9BQU8sVUFBVTs7Q0FLeEQsTUFBYyxlQUE4QjtFQUMxQyxNQUFNLE1BQU0sR0FBRyxLQUFLLFVBQVU7QUFDOUIsWUFBVSxLQUFLLEVBQUUsV0FBVyxNQUFNLENBQUM7QUFFbkMsZ0JBQWMsR0FBRyxLQUFLLFVBQVUsZUFBZSxrQkFBa0I7QUFFakUsT0FBSyxPQUFPLE1BQU0sU0FBUztHQUFDO0dBQWM7R0FBWTtHQUFXLEVBQUU7R0FDakUsT0FBTztJQUFDO0lBQVE7SUFBUTtJQUFPO0dBQy9CO0dBQ0EsS0FBSztJQUNILE1BQU0sUUFBUSxJQUFJO0lBQ2xCLFFBQVEsUUFBUSxJQUFJO0lBQ3BC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
|
|
@@ -101,37 +101,50 @@ class QgridFrameClass extends BaseFrameClass {
|
|
|
101
101
|
const result = await QgridDispatcher.query(args, args.timeout);
|
|
102
102
|
|
|
103
103
|
if (effectiveLogMode === "auto") {
|
|
104
|
-
|
|
105
|
-
const responseText = result.content
|
|
106
|
-
.filter((item) => item.type === "text")
|
|
107
|
-
.map((item) => item.text)
|
|
108
|
-
.join("\n");
|
|
109
|
-
|
|
110
|
-
RequestLogModel.save([
|
|
111
|
-
{
|
|
112
|
-
token_name: result.tokenName,
|
|
113
|
-
project_name: args.projectName?.length ? args.projectName : null,
|
|
114
|
-
model_name: result.model ?? null,
|
|
115
|
-
user_prompt: args.prompt,
|
|
116
|
-
system_prompt: args.system ?? null,
|
|
117
|
-
response: responseText,
|
|
118
|
-
input_tokens: result.usage.input_tokens,
|
|
119
|
-
output_tokens: result.usage.output_tokens,
|
|
120
|
-
cache_read_tokens: result.usage.cache_read_input_tokens,
|
|
121
|
-
cache_creation_tokens: result.usage.cache_creation_input_tokens,
|
|
122
|
-
duration_ms: result.durationMs,
|
|
123
|
-
cost_usd: result.costUsd !== null ? Math.round(result.costUsd * MICRO_USD) : null,
|
|
124
|
-
effort: args.effort ?? null,
|
|
125
|
-
history: args.history ? JSON.parse(args.history) : null,
|
|
126
|
-
status: "succeeded",
|
|
127
|
-
tool_call_count: toolCallCount,
|
|
128
|
-
},
|
|
129
|
-
]).catch((e) => logger.error(`requestLog save failed: ${(e as Error).message}`));
|
|
104
|
+
this.saveAutoRequestLog(args, result);
|
|
130
105
|
}
|
|
131
106
|
|
|
132
107
|
return result;
|
|
133
108
|
}
|
|
134
109
|
|
|
110
|
+
// logMode "auto" 단일 요청 로깅: run lifecycle(step 분해) 없이 request_log 1건만 남긴다.
|
|
111
|
+
// query와 queryStream 양쪽에서 사용.
|
|
112
|
+
private saveAutoRequestLog(args: QueryInput, result: QueryOutput): void {
|
|
113
|
+
const toolCallCount = result.content.filter((item) => item.type === "tool-call").length;
|
|
114
|
+
const responseText = result.content
|
|
115
|
+
.filter((item) => item.type === "text")
|
|
116
|
+
.map((item) => item.text)
|
|
117
|
+
.join("\n");
|
|
118
|
+
|
|
119
|
+
RequestLogModel.save([
|
|
120
|
+
{
|
|
121
|
+
token_name: result.tokenName,
|
|
122
|
+
project_name: args.projectName?.length ? args.projectName : null,
|
|
123
|
+
model_name: result.model ?? null,
|
|
124
|
+
user_prompt: args.prompt,
|
|
125
|
+
system_prompt: args.system ?? null,
|
|
126
|
+
response: responseText,
|
|
127
|
+
input_tokens: result.usage.input_tokens,
|
|
128
|
+
output_tokens: result.usage.output_tokens,
|
|
129
|
+
cache_read_tokens: result.usage.cache_read_input_tokens,
|
|
130
|
+
cache_creation_tokens: result.usage.cache_creation_input_tokens,
|
|
131
|
+
duration_ms: result.durationMs,
|
|
132
|
+
cost_usd: result.costUsd !== null ? Math.round(result.costUsd * MICRO_USD) : null,
|
|
133
|
+
effort: args.effort ?? null,
|
|
134
|
+
// malformed history가 와도 성공한 턴(특히 stream sse.end())을 깨지 않도록 방어.
|
|
135
|
+
history: ((): { type: string }[] | null => {
|
|
136
|
+
try {
|
|
137
|
+
return args.history ? JSON.parse(args.history) : null;
|
|
138
|
+
} catch {
|
|
139
|
+
return null;
|
|
140
|
+
}
|
|
141
|
+
})(),
|
|
142
|
+
status: "succeeded",
|
|
143
|
+
tool_call_count: toolCallCount,
|
|
144
|
+
},
|
|
145
|
+
]).catch((e) => logger.error(`requestLog save failed: ${(e as Error).message}`));
|
|
146
|
+
}
|
|
147
|
+
|
|
135
148
|
@api({ httpMethod: "POST", clients: ["axios", "tanstack-mutation"] })
|
|
136
149
|
async prepareStream(args: QueryInput): Promise<{ streamId: string }> {
|
|
137
150
|
const streamId = crypto.randomUUID();
|
|
@@ -214,6 +227,9 @@ class QgridFrameClass extends BaseFrameClass {
|
|
|
214
227
|
} catch (e) {
|
|
215
228
|
logger.error(`stream afterQuery failed: ${(e as Error).message}`);
|
|
216
229
|
}
|
|
230
|
+
} else if (effectiveLogMode === "auto") {
|
|
231
|
+
// run lifecycle을 안 타는 단일 stream 요청도 request_log 1건은 남긴다 (query와 대칭).
|
|
232
|
+
this.saveAutoRequestLog(args, streamResult);
|
|
217
233
|
}
|
|
218
234
|
if (!sse.closed) sse.publish("done", { ...streamResult, runContext });
|
|
219
235
|
} else if (streamError) {
|
|
@@ -175,9 +175,7 @@ class RequestLogModelClass extends BaseModelClass<
|
|
|
175
175
|
cache_creation_tokens: 0,
|
|
176
176
|
duration_ms: 0,
|
|
177
177
|
tool_call_count: 0,
|
|
178
|
-
...(params.history !== undefined
|
|
179
|
-
? { history: params.history as { type: string }[] }
|
|
180
|
-
: {}),
|
|
178
|
+
...(params.history !== undefined ? { history: params.history as { type: string }[] } : {}),
|
|
181
179
|
});
|
|
182
180
|
return wdb.transaction(async (trx) => {
|
|
183
181
|
const ids = await trx.ubUpsert("request_logs");
|
|
@@ -43,6 +43,7 @@ const ANTHROPIC_COSTS: Record<string, ModelCosts> = {
|
|
|
43
43
|
"claude-opus-4-5": { inputTokens: 5, outputTokens: 25, cachedInputTokens: 0.5 },
|
|
44
44
|
"claude-opus-4-6": { inputTokens: 5, outputTokens: 25, cachedInputTokens: 0.5 },
|
|
45
45
|
"claude-opus-4-7": { inputTokens: 5, outputTokens: 25, cachedInputTokens: 0.5 },
|
|
46
|
+
"claude-opus-4-8": { inputTokens: 5, outputTokens: 25, cachedInputTokens: 0.5 },
|
|
46
47
|
};
|
|
47
48
|
|
|
48
49
|
const DEFAULT_COSTS: ModelCosts = { inputTokens: 3, outputTokens: 15, cachedInputTokens: 0.3 };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { spawn, type ChildProcess } from "node:child_process";
|
|
2
|
-
import { mkdirSync, readFileSync, rmSync } from "node:fs";
|
|
2
|
+
import { mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
|
|
3
3
|
|
|
4
4
|
import { getLogger } from "@logtape/logtape";
|
|
5
5
|
|
|
@@ -68,6 +68,31 @@ const BASE_INSTRUCTIONS = {
|
|
|
68
68
|
withSchema: "You are a helpful assistant. Respond using the provided output schema.",
|
|
69
69
|
} as const;
|
|
70
70
|
|
|
71
|
+
// codex가 매 요청에 자동 주입하는 내장 tool(shell/web_search/spawn_agent 등 14개)과
|
|
72
|
+
// instruction 블록(permissions/environment_context/skills, ~10KB)을 비활성화
|
|
73
|
+
// $CODEX_HOME/config.toml 로 써넣으면 codex 부팅 시 scan
|
|
74
|
+
// 통제불가: update_plan/request_user_input
|
|
75
|
+
const CODEX_CONFIG_TOML = `web_search = "disabled"
|
|
76
|
+
include_permissions_instructions = false
|
|
77
|
+
include_apps_instructions = false
|
|
78
|
+
include_environment_context = false
|
|
79
|
+
|
|
80
|
+
[features]
|
|
81
|
+
shell_tool = false
|
|
82
|
+
tool_search = false
|
|
83
|
+
tool_suggest = false
|
|
84
|
+
multi_agent = false
|
|
85
|
+
image_generation = false
|
|
86
|
+
apps = false
|
|
87
|
+
plugins = false
|
|
88
|
+
|
|
89
|
+
[tools]
|
|
90
|
+
view_image = false
|
|
91
|
+
|
|
92
|
+
[skills]
|
|
93
|
+
include_instructions = false
|
|
94
|
+
`;
|
|
95
|
+
|
|
71
96
|
// ── Worker ──────────────────────────────────────────────────────────
|
|
72
97
|
|
|
73
98
|
export class CodexAppServerWorker {
|
|
@@ -91,11 +116,19 @@ export class CodexAppServerWorker {
|
|
|
91
116
|
private async spawnAndInit(): Promise<void> {
|
|
92
117
|
const cwd = `${this.codexHome}/cwd`;
|
|
93
118
|
mkdirSync(cwd, { recursive: true });
|
|
119
|
+
// codex 내장 tool/web_search/instruction 블록 비활성화
|
|
120
|
+
writeFileSync(`${this.codexHome}/config.toml`, CODEX_CONFIG_TOML);
|
|
94
121
|
|
|
95
122
|
this.proc = spawn("codex", ["app-server", "--listen", "stdio://"], {
|
|
96
123
|
stdio: ["pipe", "pipe", "pipe"],
|
|
97
124
|
cwd,
|
|
98
|
-
env: {
|
|
125
|
+
env: {
|
|
126
|
+
PATH: process.env.PATH,
|
|
127
|
+
TMPDIR: process.env.TMPDIR,
|
|
128
|
+
CODEX_HOME: this.codexHome,
|
|
129
|
+
// environment 비활성화 → has_environment=false → shell/apply_patch/view_image 제거
|
|
130
|
+
CODEX_EXEC_SERVER_URL: "none",
|
|
131
|
+
},
|
|
99
132
|
});
|
|
100
133
|
|
|
101
134
|
this.proc.on("exit", (code) => {
|