experimental-agent 0.0.4 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/dist/agent-workflow.d.mts +2 -3
  2. package/dist/agent-workflow.d.ts +2 -3
  3. package/dist/agent-workflow.js +947 -436
  4. package/dist/agent-workflow.mjs +3 -2
  5. package/dist/chunk-2IIWVPZB.mjs +334 -0
  6. package/dist/chunk-A63YU65A.mjs +20 -0
  7. package/dist/{chunk-3ODWQVIA.mjs → chunk-BJTO5JO5.mjs} +1 -2
  8. package/dist/chunk-GJETDXOU.mjs +361 -0
  9. package/dist/chunk-RDKDLHXM.mjs +2031 -0
  10. package/dist/{chunk-T7PMZLOX.mjs → chunk-T2UUL6VC.mjs} +4 -4
  11. package/dist/{chunk-TQRCSTCF.mjs → chunk-VGJISV6O.mjs} +9 -4
  12. package/dist/chunk-VS7U6SXN.mjs +1261 -0
  13. package/dist/{client-SREKHM6I.mjs → client-66JIQLSA.mjs} +2 -2
  14. package/dist/client-DjcE0ATp.d.mts +710 -0
  15. package/dist/client-DwrDzn4_.d.ts +710 -0
  16. package/dist/client.mjs +1 -1
  17. package/dist/{handler-36FM5H35.mjs → handler-BQY5SOI2.mjs} +2 -2
  18. package/dist/index.d.mts +18 -4
  19. package/dist/index.d.ts +18 -4
  20. package/dist/index.js +1178 -509
  21. package/dist/index.mjs +152 -49
  22. package/dist/lifecycle-workflow.d.mts +3 -2
  23. package/dist/lifecycle-workflow.d.ts +3 -2
  24. package/dist/lifecycle-workflow.js +111 -5
  25. package/dist/lifecycle-workflow.mjs +3 -2
  26. package/dist/local-fs-handlers-Q5W52DKV.mjs +290 -0
  27. package/dist/next/loader.js +7 -7
  28. package/dist/next/loader.mjs +3 -3
  29. package/dist/next.js +9 -4
  30. package/dist/next.mjs +11 -6
  31. package/dist/{process-manager-JAKAXROL.mjs → process-manager-ZCET3VD2.mjs} +1 -1
  32. package/dist/{sandbox-QAPGBVYM.mjs → sandbox-27X2DSE3.mjs} +4 -3
  33. package/dist/{storage-Q376OZH3.mjs → storage-KQYV42J4.mjs} +3 -3
  34. package/dist/{client-6g79J0s3.d.mts → types-DuTc4UQW.d.mts} +229 -590
  35. package/dist/{client-6g79J0s3.d.ts → types-DuTc4UQW.d.ts} +229 -590
  36. package/dist/vercel-SD3JTECG.mjs +20 -0
  37. package/dist/{vercel-sdk-VHKEX2GQ.mjs → vercel-sdk-I6A4MVAN.mjs} +3 -3
  38. package/package.json +3 -3
  39. package/dist/chunk-GSRJYPWF.mjs +0 -284
  40. package/dist/chunk-JCPQQWIK.mjs +0 -2057
  41. package/dist/chunk-JEE2FQ4O.mjs +0 -844
  42. package/dist/chunk-VBLZWXVE.mjs +0 -318
  43. package/dist/local-fs-handlers-P4WGW3QY.mjs +0 -235
  44. package/dist/vercel-LLXAHKVJ.mjs +0 -20
@@ -0,0 +1,290 @@
1
+ import "./chunk-BJTO5JO5.mjs";
2
+
3
+ // src/storage/bindings/local-fs-handlers.ts
4
+ import { mkdir, readdir, readFile, unlink, writeFile } from "fs/promises";
5
+ import { dirname, join, resolve } from "path";
6
+ import equal from "fast-deep-equal";
7
+
8
+ // src/utils/paginate.ts
9
+ function paginate(opts) {
10
+ const { items, cursor, limit } = opts;
11
+ const startIndex = cursor ? items.findIndex((m) => m.id === cursor) + 1 : 0;
12
+ const sliced = limit !== void 0 ? items.slice(startIndex, startIndex + limit) : items.slice(startIndex);
13
+ const nextCursor = limit !== void 0 && startIndex + limit < items.length ? sliced.at(-1)?.id ?? null : null;
14
+ return { items: sliced, nextCursor };
15
+ }
16
+
17
+ // src/storage/bindings/local-fs-handlers.ts
18
+ function createFilesystemHandlers(basePath) {
19
+ const resolvedBase = resolve(basePath);
20
+ const sessionDir = join(resolvedBase, "session");
21
+ const messageDir = join(resolvedBase, "message");
22
+ const partDir = join(resolvedBase, "part");
23
+ const sandboxDir = join(resolvedBase, "sandbox");
24
+ const commandDir = join(resolvedBase, "command");
25
+ const setupDir = join(resolvedBase, "setup");
26
+ async function ensureDir(dir) {
27
+ await mkdir(dir, { recursive: true });
28
+ }
29
+ async function readJson(filePath) {
30
+ try {
31
+ const content = await readFile(filePath, "utf-8");
32
+ return JSON.parse(content);
33
+ } catch {
34
+ return null;
35
+ }
36
+ }
37
+ async function writeJsonFile(filePath, data) {
38
+ await ensureDir(dirname(filePath));
39
+ await writeFile(filePath, JSON.stringify(data, null, 2));
40
+ }
41
+ async function readAllFromDir(dir) {
42
+ try {
43
+ const files = await readdir(dir);
44
+ const results = await Promise.all(
45
+ files.filter((f) => f.endsWith(".json")).map((f) => readJson(join(dir, f)))
46
+ );
47
+ return results.filter((r) => r !== null);
48
+ } catch {
49
+ return [];
50
+ }
51
+ }
52
+ return {
53
+ "session.get": async ({ id }) => {
54
+ const sessionPath = join(sessionDir, `${id}.json`);
55
+ return await readJson(sessionPath) ?? null;
56
+ },
57
+ "session.set": async (session) => {
58
+ const now = Date.now();
59
+ const sessionPath = join(sessionDir, `${session.id}.json`);
60
+ const existing = await readJson(sessionPath);
61
+ const newSession = {
62
+ ...session,
63
+ tags: session.tags ?? existing?.tags ?? {},
64
+ createdAt: existing?.createdAt ?? session.createdAt ?? now,
65
+ updatedAt: now
66
+ };
67
+ await writeJsonFile(sessionPath, newSession);
68
+ return newSession;
69
+ },
70
+ "session.list": async ({ tags, order, cursor, limit }) => {
71
+ const allSessions = await readAllFromDir(sessionDir);
72
+ let filtered = allSessions;
73
+ if (tags && Object.keys(tags).length > 0) {
74
+ filtered = filtered.filter((s) => {
75
+ const sessionTags = s.tags ?? {};
76
+ return Object.entries(tags).every(
77
+ ([key, value]) => equal(sessionTags[key], value)
78
+ );
79
+ });
80
+ }
81
+ const resolvedOrder = order ?? "updatedAt_desc";
82
+ const sortField = resolvedOrder.startsWith("updatedAt") ? "updatedAt" : "createdAt";
83
+ const sortDir = resolvedOrder.endsWith("_desc") ? -1 : 1;
84
+ filtered.sort((a, b) => sortDir * (a[sortField] - b[sortField]));
85
+ return paginate({ items: filtered, cursor, limit });
86
+ },
87
+ "session.listBySandbox": async ({
88
+ sandboxId,
89
+ tags,
90
+ order,
91
+ cursor,
92
+ limit
93
+ }) => {
94
+ const allSessions = await readAllFromDir(sessionDir);
95
+ let filtered = allSessions.filter((s) => s.sandboxId === sandboxId);
96
+ if (tags && Object.keys(tags).length > 0) {
97
+ filtered = filtered.filter((s) => {
98
+ const sessionTags = s.tags ?? {};
99
+ return Object.entries(tags).every(
100
+ ([key, value]) => equal(sessionTags[key], value)
101
+ );
102
+ });
103
+ }
104
+ const resolvedOrder = order ?? "updatedAt_desc";
105
+ const sortField = resolvedOrder.startsWith("updatedAt") ? "updatedAt" : "createdAt";
106
+ const sortDir = resolvedOrder.endsWith("_desc") ? -1 : 1;
107
+ filtered.sort((a, b) => sortDir * (a[sortField] - b[sortField]));
108
+ return paginate({ items: filtered, cursor, limit });
109
+ },
110
+ "session.tag.set": async ({ sessionId, tags }) => {
111
+ const sessionPath = join(sessionDir, `${sessionId}.json`);
112
+ const existing = await readJson(sessionPath);
113
+ if (!existing) {
114
+ throw new Error(`Session ${sessionId} not found`);
115
+ }
116
+ const mergedTags = { ...existing.tags, ...tags };
117
+ const now = Date.now();
118
+ const updatedSession = {
119
+ ...existing,
120
+ tags: mergedTags,
121
+ updatedAt: now
122
+ };
123
+ await writeJsonFile(sessionPath, updatedSession);
124
+ return updatedSession;
125
+ },
126
+ "message.get": async ({ id }) => {
127
+ return await readJson(join(messageDir, `${id}.json`));
128
+ },
129
+ "message.set": async (message) => {
130
+ await writeJsonFile(join(messageDir, `${message.id}.json`), message);
131
+ return message;
132
+ },
133
+ "message.list": async ({ sessionId, cursor, limit }) => {
134
+ const allMessages = await readAllFromDir(messageDir);
135
+ const filtered = allMessages.filter((m) => m.sessionId === sessionId).sort((a, b) => a.createdAt - b.createdAt);
136
+ return paginate({ items: filtered, cursor, limit });
137
+ },
138
+ "part.listByMessage": async ({ messageId, cursor, limit }) => {
139
+ const allParts = await readAllFromDir(partDir);
140
+ const filtered = allParts.filter((p) => p.messageId === messageId).sort((a, b) => a.index - b.index);
141
+ return paginate({ items: filtered, cursor, limit });
142
+ },
143
+ "part.listBySession": async ({ sessionId, cursor, limit }) => {
144
+ const allParts = await readAllFromDir(partDir);
145
+ const filtered = allParts.filter((p) => p.sessionId === sessionId).sort((a, b) => {
146
+ if (a.messageId !== b.messageId) {
147
+ return a.messageId.localeCompare(b.messageId);
148
+ }
149
+ return a.index - b.index;
150
+ });
151
+ return paginate({ items: filtered, cursor, limit });
152
+ },
153
+ "part.set": async (part) => {
154
+ await writeJsonFile(join(partDir, `${part.id}.json`), part);
155
+ return part;
156
+ },
157
+ "part.delete": async ({ id }) => {
158
+ try {
159
+ await unlink(join(partDir, `${id}.json`));
160
+ } catch {
161
+ }
162
+ },
163
+ "sandbox.get": async ({ key }) => {
164
+ const safeName = Buffer.from(key).toString("base64url");
165
+ const sandboxPath = join(sandboxDir, `${safeName}.json`);
166
+ const data = await readJson(sandboxPath);
167
+ if (!data) {
168
+ return null;
169
+ }
170
+ return data;
171
+ },
172
+ "sandbox.set": async (record) => {
173
+ const safeName = Buffer.from(record.id).toString("base64url");
174
+ const sandboxPath = join(sandboxDir, `${safeName}.json`);
175
+ const existing = await readJson(sandboxPath);
176
+ const newRecord = {
177
+ ...record,
178
+ tags: record.tags ?? existing?.tags ?? null
179
+ };
180
+ await writeJsonFile(sandboxPath, newRecord);
181
+ },
182
+ "sandbox.list": async ({ tags, order, cursor, limit }) => {
183
+ const allSandboxes = await readAllFromDir(sandboxDir);
184
+ let filtered = allSandboxes;
185
+ if (tags && Object.keys(tags).length > 0) {
186
+ filtered = filtered.filter((s) => {
187
+ const sandboxTags = s.tags ?? {};
188
+ return Object.entries(tags).every(
189
+ ([key, value]) => equal(sandboxTags[key], value)
190
+ );
191
+ });
192
+ }
193
+ const sortField = order?.startsWith("lastActivityAt") ? "lastActivityAt" : "createdAt";
194
+ const sortDir = order?.endsWith("_desc") ? -1 : 1;
195
+ filtered.sort(
196
+ (a, b) => sortDir * ((a[sortField] ?? 0) - (b[sortField] ?? 0))
197
+ );
198
+ return paginate({ items: filtered, cursor, limit });
199
+ },
200
+ "sandbox.tag.set": async ({ sandboxId, tags }) => {
201
+ const safeName = Buffer.from(sandboxId).toString("base64url");
202
+ const sandboxPath = join(sandboxDir, `${safeName}.json`);
203
+ const existing = await readJson(sandboxPath);
204
+ if (!existing) {
205
+ throw new Error(`Sandbox ${sandboxId} not found`);
206
+ }
207
+ const mergedTags = { ...existing.tags, ...tags };
208
+ const updatedSandbox = {
209
+ ...existing,
210
+ tags: mergedTags
211
+ };
212
+ await writeJsonFile(sandboxPath, updatedSandbox);
213
+ return updatedSandbox;
214
+ },
215
+ "sandbox.getBySession": async ({ sessionId }) => {
216
+ const allSandboxes = await readAllFromDir(sandboxDir);
217
+ const matching = allSandboxes.filter(
218
+ (s) => s.id.startsWith(`${sessionId}-`)
219
+ );
220
+ if (matching.length === 0) {
221
+ return null;
222
+ }
223
+ matching.sort(
224
+ (a, b) => (b.lastActivityAt ?? 0) - (a.lastActivityAt ?? 0)
225
+ );
226
+ return matching[0];
227
+ },
228
+ "command.get": async ({ id }) => {
229
+ return await readJson(join(commandDir, `${id}.json`));
230
+ },
231
+ "command.set": async (command) => {
232
+ await writeJsonFile(join(commandDir, `${command.id}.json`), command);
233
+ return command;
234
+ },
235
+ "setup.get": async ({ key }) => {
236
+ const safeName = Buffer.from(key).toString("base64url");
237
+ return await readJson(join(setupDir, `${safeName}.json`));
238
+ },
239
+ "setup.set": async (snapshot) => {
240
+ const safeName = Buffer.from(snapshot.key).toString("base64url");
241
+ await writeJsonFile(join(setupDir, `${safeName}.json`), snapshot);
242
+ },
243
+ "setup.acquireLock": async ({ key, lockId, lockTimeoutMs }) => {
244
+ const safeName = Buffer.from(key).toString("base64url");
245
+ const filePath = join(setupDir, `${safeName}.json`);
246
+ const existing = await readJson(filePath);
247
+ if (existing?.acquiringLockId && existing.acquiringLockAt && Date.now() - existing.acquiringLockAt < lockTimeoutMs) {
248
+ return null;
249
+ }
250
+ const now = Date.now();
251
+ const snapshot = {
252
+ key,
253
+ snapshotId: existing?.snapshotId ?? null,
254
+ createdAt: existing?.createdAt ?? now,
255
+ lastUsedAt: existing?.lastUsedAt ?? null,
256
+ acquiringLockId: lockId,
257
+ acquiringLockAt: now
258
+ };
259
+ await writeJsonFile(filePath, snapshot);
260
+ return snapshot;
261
+ },
262
+ "sandbox.acquireLock": async ({ record, lockTimeoutMs }) => {
263
+ const safeName = Buffer.from(record.id).toString("base64url");
264
+ const filePath = join(sandboxDir, `${safeName}.json`);
265
+ const existing = await readJson(filePath);
266
+ if (existing?.acquiringLockId && existing.acquiringLockAt && Date.now() - existing.acquiringLockAt < lockTimeoutMs) {
267
+ return null;
268
+ }
269
+ const newRecord = {
270
+ ...record,
271
+ tags: record.tags ?? existing?.tags ?? null
272
+ };
273
+ await writeJsonFile(filePath, newRecord);
274
+ return newRecord;
275
+ },
276
+ "command.list": async ({ sessionId, includeFinished, cursor, limit }) => {
277
+ const allCommands = await readAllFromDir(commandDir);
278
+ let filtered = allCommands.filter((c) => c.sessionId === sessionId);
279
+ if (!includeFinished) {
280
+ filtered = filtered.filter((c) => c.status === "running");
281
+ }
282
+ filtered.sort((a, b) => a.startedAt - b.startedAt);
283
+ return paginate({ items: filtered, cursor, limit });
284
+ }
285
+ };
286
+ }
287
+ export {
288
+ createFilesystemHandlers
289
+ };
290
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3N0b3JhZ2UvYmluZGluZ3MvbG9jYWwtZnMtaGFuZGxlcnMudHMiLCAiLi4vc3JjL3V0aWxzL3BhZ2luYXRlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyBta2RpciwgcmVhZGRpciwgcmVhZEZpbGUsIHVubGluaywgd3JpdGVGaWxlIH0gZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IGRpcm5hbWUsIGpvaW4sIHJlc29sdmUgfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgZXF1YWwgZnJvbSBcImZhc3QtZGVlcC1lcXVhbFwiO1xuaW1wb3J0IHsgcGFnaW5hdGUgfSBmcm9tIFwiLi4vLi4vdXRpbHMvcGFnaW5hdGVcIjtcbmltcG9ydCB0eXBlIHtcbiAgQ29tbWFuZCxcbiAgSGFuZGxlcnMsXG4gIE1lc3NhZ2UsXG4gIFBhcnQsXG4gIFNhbmRib3hSZWNvcmQsXG4gIFNlc3Npb24sXG4gIFNldHVwU25hcHNob3QsXG59IGZyb20gXCIuLlwiO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRmlsZXN5c3RlbUhhbmRsZXJzKGJhc2VQYXRoOiBzdHJpbmcpOiBIYW5kbGVycyB7XG4gIGNvbnN0IHJlc29sdmVkQmFzZSA9IHJlc29sdmUoYmFzZVBhdGgpO1xuICBjb25zdCBzZXNzaW9uRGlyID0gam9pbihyZXNvbHZlZEJhc2UsIFwic2Vzc2lvblwiKTtcbiAgY29uc3QgbWVzc2FnZURpciA9IGpvaW4ocmVzb2x2ZWRCYXNlLCBcIm1lc3NhZ2VcIik7XG4gIGNvbnN0IHBhcnREaXIgPSBqb2luKHJlc29sdmVkQmFzZSwgXCJwYXJ0XCIpO1xuICBjb25zdCBzYW5kYm94RGlyID0gam9pbihyZXNvbHZlZEJhc2UsIFwic2FuZGJveFwiKTtcbiAgY29uc3QgY29tbWFuZERpciA9IGpvaW4ocmVzb2x2ZWRCYXNlLCBcImNvbW1hbmRcIik7XG4gIGNvbnN0IHNldHVwRGlyID0gam9pbihyZXNvbHZlZEJhc2UsIFwic2V0dXBcIik7XG5cbiAgYXN5bmMgZnVuY3Rpb24gZW5zdXJlRGlyKGRpcjogc3RyaW5nKSB7XG4gICAgYXdhaXQgbWtkaXIoZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHJlYWRKc29uPFQ+KGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPFQgfCBudWxsPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCByZWFkRmlsZShmaWxlUGF0aCwgXCJ1dGYtOFwiKTtcbiAgICAgIHJldHVybiBKU09OLnBhcnNlKGNvbnRlbnQpIGFzIFQ7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiB3cml0ZUpzb25GaWxlKGZpbGVQYXRoOiBzdHJpbmcsIGRhdGE6IHVua25vd24pIHtcbiAgICBhd2FpdCBlbnN1cmVEaXIoZGlybmFtZShmaWxlUGF0aCkpO1xuICAgIGF3YWl0IHdyaXRlRmlsZShmaWxlUGF0aCwgSlNPTi5zdHJpbmdpZnkoZGF0YSwgbnVsbCwgMikpO1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gcmVhZEFsbEZyb21EaXI8VD4oZGlyOiBzdHJpbmcpOiBQcm9taXNlPFRbXT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBmaWxlcyA9IGF3YWl0IHJlYWRkaXIoZGlyKTtcbiAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgZmlsZXNcbiAgICAgICAgICAuZmlsdGVyKChmKSA9PiBmLmVuZHNXaXRoKFwiLmpzb25cIikpXG4gICAgICAgICAgLm1hcCgoZikgPT4gcmVhZEpzb248VD4oam9pbihkaXIsIGYpKSlcbiAgICAgICk7XG4gICAgICByZXR1cm4gcmVzdWx0cy5maWx0ZXIoKHIpOiByIGlzIE5vbk51bGxhYmxlPHR5cGVvZiByPiA9PiByICE9PSBudWxsKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIFwic2Vzc2lvbi5nZXRcIjogYXN5bmMgKHsgaWQgfSkgPT4ge1xuICAgICAgY29uc3Qgc2Vzc2lvblBhdGggPSBqb2luKHNlc3Npb25EaXIsIGAke2lkfS5qc29uYCk7XG4gICAgICByZXR1cm4gKGF3YWl0IHJlYWRKc29uPFNlc3Npb24+KHNlc3Npb25QYXRoKSkgPz8gbnVsbDtcbiAgICB9LFxuXG4gICAgXCJzZXNzaW9uLnNldFwiOiBhc3luYyAoc2Vzc2lvbikgPT4ge1xuICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgIGNvbnN0IHNlc3Npb25QYXRoID0gam9pbihzZXNzaW9uRGlyLCBgJHtzZXNzaW9uLmlkfS5qc29uYCk7XG4gICAgICBjb25zdCBleGlzdGluZyA9IGF3YWl0IHJlYWRKc29uPFNlc3Npb24+KHNlc3Npb25QYXRoKTtcbiAgICAgIGNvbnN0IG5ld1Nlc3Npb246IFNlc3Npb24gPSB7XG4gICAgICAgIC4uLnNlc3Npb24sXG4gICAgICAgIHRhZ3M6IHNlc3Npb24udGFncyA/PyBleGlzdGluZz8udGFncyA/PyB7fSxcbiAgICAgICAgY3JlYXRlZEF0OiBleGlzdGluZz8uY3JlYXRlZEF0ID8/IHNlc3Npb24uY3JlYXRlZEF0ID8/IG5vdyxcbiAgICAgICAgdXBkYXRlZEF0OiBub3csXG4gICAgICB9O1xuICAgICAgYXdhaXQgd3JpdGVKc29uRmlsZShzZXNzaW9uUGF0aCwgbmV3U2Vzc2lvbik7XG4gICAgICByZXR1cm4gbmV3U2Vzc2lvbjtcbiAgICB9LFxuXG4gICAgXCJzZXNzaW9uLmxpc3RcIjogYXN5bmMgKHsgdGFncywgb3JkZXIsIGN1cnNvciwgbGltaXQgfSkgPT4ge1xuICAgICAgY29uc3QgYWxsU2Vzc2lvbnMgPSBhd2FpdCByZWFkQWxsRnJvbURpcjxTZXNzaW9uPihzZXNzaW9uRGlyKTtcbiAgICAgIGxldCBmaWx0ZXJlZCA9IGFsbFNlc3Npb25zO1xuICAgICAgaWYgKHRhZ3MgJiYgT2JqZWN0LmtleXModGFncykubGVuZ3RoID4gMCkge1xuICAgICAgICBmaWx0ZXJlZCA9IGZpbHRlcmVkLmZpbHRlcigocykgPT4ge1xuICAgICAgICAgIGNvbnN0IHNlc3Npb25UYWdzID0gcy50YWdzID8/IHt9O1xuICAgICAgICAgIHJldHVybiBPYmplY3QuZW50cmllcyh0YWdzKS5ldmVyeSgoW2tleSwgdmFsdWVdKSA9PlxuICAgICAgICAgICAgZXF1YWwoc2Vzc2lvblRhZ3Nba2V5XSwgdmFsdWUpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBjb25zdCByZXNvbHZlZE9yZGVyID0gb3JkZXIgPz8gXCJ1cGRhdGVkQXRfZGVzY1wiO1xuICAgICAgY29uc3Qgc29ydEZpZWxkID0gcmVzb2x2ZWRPcmRlci5zdGFydHNXaXRoKFwidXBkYXRlZEF0XCIpXG4gICAgICAgID8gXCJ1cGRhdGVkQXRcIlxuICAgICAgICA6IFwiY3JlYXRlZEF0XCI7XG4gICAgICBjb25zdCBzb3J0RGlyID0gcmVzb2x2ZWRPcmRlci5lbmRzV2l0aChcIl9kZXNjXCIpID8gLTEgOiAxO1xuICAgICAgZmlsdGVyZWQuc29ydCgoYSwgYikgPT4gc29ydERpciAqIChhW3NvcnRGaWVsZF0gLSBiW3NvcnRGaWVsZF0pKTtcbiAgICAgIHJldHVybiBwYWdpbmF0ZSh7IGl0ZW1zOiBmaWx0ZXJlZCwgY3Vyc29yLCBsaW1pdCB9KTtcbiAgICB9LFxuXG4gICAgXCJzZXNzaW9uLmxpc3RCeVNhbmRib3hcIjogYXN5bmMgKHtcbiAgICAgIHNhbmRib3hJZCxcbiAgICAgIHRhZ3MsXG4gICAgICBvcmRlcixcbiAgICAgIGN1cnNvcixcbiAgICAgIGxpbWl0LFxuICAgIH0pID0+IHtcbiAgICAgIGNvbnN0IGFsbFNlc3Npb25zID0gYXdhaXQgcmVhZEFsbEZyb21EaXI8U2Vzc2lvbj4oc2Vzc2lvbkRpcik7XG4gICAgICBsZXQgZmlsdGVyZWQgPSBhbGxTZXNzaW9ucy5maWx0ZXIoKHMpID0+IHMuc2FuZGJveElkID09PSBzYW5kYm94SWQpO1xuICAgICAgaWYgKHRhZ3MgJiYgT2JqZWN0LmtleXModGFncykubGVuZ3RoID4gMCkge1xuICAgICAgICBmaWx0ZXJlZCA9IGZpbHRlcmVkLmZpbHRlcigocykgPT4ge1xuICAgICAgICAgIGNvbnN0IHNlc3Npb25UYWdzID0gcy50YWdzID8/IHt9O1xuICAgICAgICAgIHJldHVybiBPYmplY3QuZW50cmllcyh0YWdzKS5ldmVyeSgoW2tleSwgdmFsdWVdKSA9PlxuICAgICAgICAgICAgZXF1YWwoc2Vzc2lvblRhZ3Nba2V5XSwgdmFsdWUpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBjb25zdCByZXNvbHZlZE9yZGVyID0gb3JkZXIgPz8gXCJ1cGRhdGVkQXRfZGVzY1wiO1xuICAgICAgY29uc3Qgc29ydEZpZWxkID0gcmVzb2x2ZWRPcmRlci5zdGFydHNXaXRoKFwidXBkYXRlZEF0XCIpXG4gICAgICAgID8gXCJ1cGRhdGVkQXRcIlxuICAgICAgICA6IFwiY3JlYXRlZEF0XCI7XG4gICAgICBjb25zdCBzb3J0RGlyID0gcmVzb2x2ZWRPcmRlci5lbmRzV2l0aChcIl9kZXNjXCIpID8gLTEgOiAxO1xuICAgICAgZmlsdGVyZWQuc29ydCgoYSwgYikgPT4gc29ydERpciAqIChhW3NvcnRGaWVsZF0gLSBiW3NvcnRGaWVsZF0pKTtcbiAgICAgIHJldHVybiBwYWdpbmF0ZSh7IGl0ZW1zOiBmaWx0ZXJlZCwgY3Vyc29yLCBsaW1pdCB9KTtcbiAgICB9LFxuXG4gICAgXCJzZXNzaW9uLnRhZy5zZXRcIjogYXN5bmMgKHsgc2Vzc2lvbklkLCB0YWdzIH0pID0+IHtcbiAgICAgIGNvbnN0IHNlc3Npb25QYXRoID0gam9pbihzZXNzaW9uRGlyLCBgJHtzZXNzaW9uSWR9Lmpzb25gKTtcbiAgICAgIGNvbnN0IGV4aXN0aW5nID0gYXdhaXQgcmVhZEpzb248U2Vzc2lvbj4oc2Vzc2lvblBhdGgpO1xuICAgICAgaWYgKCFleGlzdGluZykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNlc3Npb24gJHtzZXNzaW9uSWR9IG5vdCBmb3VuZGApO1xuICAgICAgfVxuICAgICAgY29uc3QgbWVyZ2VkVGFncyA9IHsgLi4uZXhpc3RpbmcudGFncywgLi4udGFncyB9O1xuICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgIGNvbnN0IHVwZGF0ZWRTZXNzaW9uOiBTZXNzaW9uID0ge1xuICAgICAgICAuLi5leGlzdGluZyxcbiAgICAgICAgdGFnczogbWVyZ2VkVGFncyxcbiAgICAgICAgdXBkYXRlZEF0OiBub3csXG4gICAgICB9O1xuICAgICAgYXdhaXQgd3JpdGVKc29uRmlsZShzZXNzaW9uUGF0aCwgdXBkYXRlZFNlc3Npb24pO1xuICAgICAgcmV0dXJuIHVwZGF0ZWRTZXNzaW9uO1xuICAgIH0sXG5cbiAgICBcIm1lc3NhZ2UuZ2V0XCI6IGFzeW5jICh7IGlkIH0pID0+IHtcbiAgICAgIHJldHVybiBhd2FpdCByZWFkSnNvbjxNZXNzYWdlPihqb2luKG1lc3NhZ2VEaXIsIGAke2lkfS5qc29uYCkpO1xuICAgIH0sXG5cbiAgICBcIm1lc3NhZ2Uuc2V0XCI6IGFzeW5jIChtZXNzYWdlKSA9PiB7XG4gICAgICBhd2FpdCB3cml0ZUpzb25GaWxlKGpvaW4obWVzc2FnZURpciwgYCR7bWVzc2FnZS5pZH0uanNvbmApLCBtZXNzYWdlKTtcbiAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH0sXG5cbiAgICBcIm1lc3NhZ2UubGlzdFwiOiBhc3luYyAoeyBzZXNzaW9uSWQsIGN1cnNvciwgbGltaXQgfSkgPT4ge1xuICAgICAgY29uc3QgYWxsTWVzc2FnZXMgPSBhd2FpdCByZWFkQWxsRnJvbURpcjxNZXNzYWdlPihtZXNzYWdlRGlyKTtcbiAgICAgIGNvbnN0IGZpbHRlcmVkID0gYWxsTWVzc2FnZXNcbiAgICAgICAgLmZpbHRlcigobSkgPT4gbS5zZXNzaW9uSWQgPT09IHNlc3Npb25JZClcbiAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEuY3JlYXRlZEF0IC0gYi5jcmVhdGVkQXQpO1xuICAgICAgcmV0dXJuIHBhZ2luYXRlKHsgaXRlbXM6IGZpbHRlcmVkLCBjdXJzb3IsIGxpbWl0IH0pO1xuICAgIH0sXG5cbiAgICBcInBhcnQubGlzdEJ5TWVzc2FnZVwiOiBhc3luYyAoeyBtZXNzYWdlSWQsIGN1cnNvciwgbGltaXQgfSkgPT4ge1xuICAgICAgY29uc3QgYWxsUGFydHMgPSBhd2FpdCByZWFkQWxsRnJvbURpcjxQYXJ0PihwYXJ0RGlyKTtcbiAgICAgIGNvbnN0IGZpbHRlcmVkID0gYWxsUGFydHNcbiAgICAgICAgLmZpbHRlcigocCkgPT4gcC5tZXNzYWdlSWQgPT09IG1lc3NhZ2VJZClcbiAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEuaW5kZXggLSBiLmluZGV4KTtcbiAgICAgIHJldHVybiBwYWdpbmF0ZSh7IGl0ZW1zOiBmaWx0ZXJlZCwgY3Vyc29yLCBsaW1pdCB9KTtcbiAgICB9LFxuXG4gICAgXCJwYXJ0Lmxpc3RCeVNlc3Npb25cIjogYXN5bmMgKHsgc2Vzc2lvbklkLCBjdXJzb3IsIGxpbWl0IH0pID0+IHtcbiAgICAgIGNvbnN0IGFsbFBhcnRzID0gYXdhaXQgcmVhZEFsbEZyb21EaXI8UGFydD4ocGFydERpcik7XG4gICAgICBjb25zdCBmaWx0ZXJlZCA9IGFsbFBhcnRzXG4gICAgICAgIC5maWx0ZXIoKHApID0+IHAuc2Vzc2lvbklkID09PSBzZXNzaW9uSWQpXG4gICAgICAgIC5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgaWYgKGEubWVzc2FnZUlkICE9PSBiLm1lc3NhZ2VJZCkge1xuICAgICAgICAgICAgcmV0dXJuIGEubWVzc2FnZUlkLmxvY2FsZUNvbXBhcmUoYi5tZXNzYWdlSWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYS5pbmRleCAtIGIuaW5kZXg7XG4gICAgICAgIH0pO1xuICAgICAgcmV0dXJuIHBhZ2luYXRlKHsgaXRlbXM6IGZpbHRlcmVkLCBjdXJzb3IsIGxpbWl0IH0pO1xuICAgIH0sXG5cbiAgICBcInBhcnQuc2V0XCI6IGFzeW5jIChwYXJ0KSA9PiB7XG4gICAgICBhd2FpdCB3cml0ZUpzb25GaWxlKGpvaW4ocGFydERpciwgYCR7cGFydC5pZH0uanNvbmApLCBwYXJ0KTtcbiAgICAgIHJldHVybiBwYXJ0O1xuICAgIH0sXG5cbiAgICBcInBhcnQuZGVsZXRlXCI6IGFzeW5jICh7IGlkIH0pID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHVubGluayhqb2luKHBhcnREaXIsIGAke2lkfS5qc29uYCkpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIElnbm9yZSBpZiBmaWxlIGRvZXNuJ3QgZXhpc3RcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgXCJzYW5kYm94LmdldFwiOiBhc3luYyAoeyBrZXkgfSkgPT4ge1xuICAgICAgY29uc3Qgc2FmZU5hbWUgPSBCdWZmZXIuZnJvbShrZXkpLnRvU3RyaW5nKFwiYmFzZTY0dXJsXCIpO1xuICAgICAgY29uc3Qgc2FuZGJveFBhdGggPSBqb2luKHNhbmRib3hEaXIsIGAke3NhZmVOYW1lfS5qc29uYCk7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVhZEpzb248U2FuZGJveFJlY29yZD4oc2FuZGJveFBhdGgpO1xuICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSxcblxuICAgIFwic2FuZGJveC5zZXRcIjogYXN5bmMgKHJlY29yZCkgPT4ge1xuICAgICAgY29uc3Qgc2FmZU5hbWUgPSBCdWZmZXIuZnJvbShyZWNvcmQuaWQpLnRvU3RyaW5nKFwiYmFzZTY0dXJsXCIpO1xuICAgICAgY29uc3Qgc2FuZGJveFBhdGggPSBqb2luKHNhbmRib3hEaXIsIGAke3NhZmVOYW1lfS5qc29uYCk7XG4gICAgICBjb25zdCBleGlzdGluZyA9IGF3YWl0IHJlYWRKc29uPFNhbmRib3hSZWNvcmQ+KHNhbmRib3hQYXRoKTtcbiAgICAgIGNvbnN0IG5ld1JlY29yZDogU2FuZGJveFJlY29yZCA9IHtcbiAgICAgICAgLi4ucmVjb3JkLFxuICAgICAgICB0YWdzOiByZWNvcmQudGFncyA/PyBleGlzdGluZz8udGFncyA/PyBudWxsLFxuICAgICAgfTtcbiAgICAgIGF3YWl0IHdyaXRlSnNvbkZpbGUoc2FuZGJveFBhdGgsIG5ld1JlY29yZCk7XG4gICAgfSxcblxuICAgIFwic2FuZGJveC5saXN0XCI6IGFzeW5jICh7IHRhZ3MsIG9yZGVyLCBjdXJzb3IsIGxpbWl0IH0pID0+IHtcbiAgICAgIGNvbnN0IGFsbFNhbmRib3hlcyA9IGF3YWl0IHJlYWRBbGxGcm9tRGlyPFNhbmRib3hSZWNvcmQ+KHNhbmRib3hEaXIpO1xuICAgICAgbGV0IGZpbHRlcmVkID0gYWxsU2FuZGJveGVzO1xuICAgICAgaWYgKHRhZ3MgJiYgT2JqZWN0LmtleXModGFncykubGVuZ3RoID4gMCkge1xuICAgICAgICBmaWx0ZXJlZCA9IGZpbHRlcmVkLmZpbHRlcigocykgPT4ge1xuICAgICAgICAgIGNvbnN0IHNhbmRib3hUYWdzID0gcy50YWdzID8/IHt9O1xuICAgICAgICAgIHJldHVybiBPYmplY3QuZW50cmllcyh0YWdzKS5ldmVyeSgoW2tleSwgdmFsdWVdKSA9PlxuICAgICAgICAgICAgZXF1YWwoc2FuZGJveFRhZ3Nba2V5XSwgdmFsdWUpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBjb25zdCBzb3J0RmllbGQgPSBvcmRlcj8uc3RhcnRzV2l0aChcImxhc3RBY3Rpdml0eUF0XCIpXG4gICAgICAgID8gXCJsYXN0QWN0aXZpdHlBdFwiXG4gICAgICAgIDogXCJjcmVhdGVkQXRcIjtcbiAgICAgIGNvbnN0IHNvcnREaXIgPSBvcmRlcj8uZW5kc1dpdGgoXCJfZGVzY1wiKSA/IC0xIDogMTtcbiAgICAgIGZpbHRlcmVkLnNvcnQoXG4gICAgICAgIChhLCBiKSA9PiBzb3J0RGlyICogKChhW3NvcnRGaWVsZF0gPz8gMCkgLSAoYltzb3J0RmllbGRdID8/IDApKVxuICAgICAgKTtcbiAgICAgIHJldHVybiBwYWdpbmF0ZSh7IGl0ZW1zOiBmaWx0ZXJlZCwgY3Vyc29yLCBsaW1pdCB9KTtcbiAgICB9LFxuXG4gICAgXCJzYW5kYm94LnRhZy5zZXRcIjogYXN5bmMgKHsgc2FuZGJveElkLCB0YWdzIH0pID0+IHtcbiAgICAgIGNvbnN0IHNhZmVOYW1lID0gQnVmZmVyLmZyb20oc2FuZGJveElkKS50b1N0cmluZyhcImJhc2U2NHVybFwiKTtcbiAgICAgIGNvbnN0IHNhbmRib3hQYXRoID0gam9pbihzYW5kYm94RGlyLCBgJHtzYWZlTmFtZX0uanNvbmApO1xuICAgICAgY29uc3QgZXhpc3RpbmcgPSBhd2FpdCByZWFkSnNvbjxTYW5kYm94UmVjb3JkPihzYW5kYm94UGF0aCk7XG4gICAgICBpZiAoIWV4aXN0aW5nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgU2FuZGJveCAke3NhbmRib3hJZH0gbm90IGZvdW5kYCk7XG4gICAgICB9XG4gICAgICBjb25zdCBtZXJnZWRUYWdzID0geyAuLi5leGlzdGluZy50YWdzLCAuLi50YWdzIH07XG4gICAgICBjb25zdCB1cGRhdGVkU2FuZGJveDogU2FuZGJveFJlY29yZCA9IHtcbiAgICAgICAgLi4uZXhpc3RpbmcsXG4gICAgICAgIHRhZ3M6IG1lcmdlZFRhZ3MsXG4gICAgICB9O1xuICAgICAgYXdhaXQgd3JpdGVKc29uRmlsZShzYW5kYm94UGF0aCwgdXBkYXRlZFNhbmRib3gpO1xuICAgICAgcmV0dXJuIHVwZGF0ZWRTYW5kYm94O1xuICAgIH0sXG5cbiAgICBcInNhbmRib3guZ2V0QnlTZXNzaW9uXCI6IGFzeW5jICh7IHNlc3Npb25JZCB9KSA9PiB7XG4gICAgICBjb25zdCBhbGxTYW5kYm94ZXMgPSBhd2FpdCByZWFkQWxsRnJvbURpcjxTYW5kYm94UmVjb3JkPihzYW5kYm94RGlyKTtcbiAgICAgIGNvbnN0IG1hdGNoaW5nID0gYWxsU2FuZGJveGVzLmZpbHRlcigocykgPT5cbiAgICAgICAgcy5pZC5zdGFydHNXaXRoKGAke3Nlc3Npb25JZH0tYClcbiAgICAgICk7XG4gICAgICBpZiAobWF0Y2hpbmcubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgbWF0Y2hpbmcuc29ydChcbiAgICAgICAgKGEsIGIpID0+IChiLmxhc3RBY3Rpdml0eUF0ID8/IDApIC0gKGEubGFzdEFjdGl2aXR5QXQgPz8gMClcbiAgICAgICk7XG4gICAgICByZXR1cm4gbWF0Y2hpbmdbMF07XG4gICAgfSxcblxuICAgIFwiY29tbWFuZC5nZXRcIjogYXN5bmMgKHsgaWQgfSkgPT4ge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlYWRKc29uPENvbW1hbmQ+KGpvaW4oY29tbWFuZERpciwgYCR7aWR9Lmpzb25gKSk7XG4gICAgfSxcblxuICAgIFwiY29tbWFuZC5zZXRcIjogYXN5bmMgKGNvbW1hbmQpID0+IHtcbiAgICAgIGF3YWl0IHdyaXRlSnNvbkZpbGUoam9pbihjb21tYW5kRGlyLCBgJHtjb21tYW5kLmlkfS5qc29uYCksIGNvbW1hbmQpO1xuICAgICAgcmV0dXJuIGNvbW1hbmQ7XG4gICAgfSxcblxuICAgIFwic2V0dXAuZ2V0XCI6IGFzeW5jICh7IGtleSB9KSA9PiB7XG4gICAgICBjb25zdCBzYWZlTmFtZSA9IEJ1ZmZlci5mcm9tKGtleSkudG9TdHJpbmcoXCJiYXNlNjR1cmxcIik7XG4gICAgICByZXR1cm4gYXdhaXQgcmVhZEpzb248U2V0dXBTbmFwc2hvdD4oam9pbihzZXR1cERpciwgYCR7c2FmZU5hbWV9Lmpzb25gKSk7XG4gICAgfSxcblxuICAgIFwic2V0dXAuc2V0XCI6IGFzeW5jIChzbmFwc2hvdCkgPT4ge1xuICAgICAgY29uc3Qgc2FmZU5hbWUgPSBCdWZmZXIuZnJvbShzbmFwc2hvdC5rZXkpLnRvU3RyaW5nKFwiYmFzZTY0dXJsXCIpO1xuICAgICAgYXdhaXQgd3JpdGVKc29uRmlsZShqb2luKHNldHVwRGlyLCBgJHtzYWZlTmFtZX0uanNvbmApLCBzbmFwc2hvdCk7XG4gICAgfSxcblxuICAgIFwic2V0dXAuYWNxdWlyZUxvY2tcIjogYXN5bmMgKHsga2V5LCBsb2NrSWQsIGxvY2tUaW1lb3V0TXMgfSkgPT4ge1xuICAgICAgY29uc3Qgc2FmZU5hbWUgPSBCdWZmZXIuZnJvbShrZXkpLnRvU3RyaW5nKFwiYmFzZTY0dXJsXCIpO1xuICAgICAgY29uc3QgZmlsZVBhdGggPSBqb2luKHNldHVwRGlyLCBgJHtzYWZlTmFtZX0uanNvbmApO1xuICAgICAgY29uc3QgZXhpc3RpbmcgPSBhd2FpdCByZWFkSnNvbjxTZXR1cFNuYXBzaG90PihmaWxlUGF0aCk7XG4gICAgICBpZiAoXG4gICAgICAgIGV4aXN0aW5nPy5hY3F1aXJpbmdMb2NrSWQgJiZcbiAgICAgICAgZXhpc3RpbmcuYWNxdWlyaW5nTG9ja0F0ICYmXG4gICAgICAgIERhdGUubm93KCkgLSBleGlzdGluZy5hY3F1aXJpbmdMb2NrQXQgPCBsb2NrVGltZW91dE1zXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIG51bGw7IC8vIGFjdGl2ZSBsb2NrIGhlbGQgYnkgc29tZW9uZSBlbHNlXG4gICAgICB9XG4gICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgY29uc3Qgc25hcHNob3Q6IFNldHVwU25hcHNob3QgPSB7XG4gICAgICAgIGtleSxcbiAgICAgICAgc25hcHNob3RJZDogZXhpc3Rpbmc/LnNuYXBzaG90SWQgPz8gbnVsbCxcbiAgICAgICAgY3JlYXRlZEF0OiBleGlzdGluZz8uY3JlYXRlZEF0ID8/IG5vdyxcbiAgICAgICAgbGFzdFVzZWRBdDogZXhpc3Rpbmc/Lmxhc3RVc2VkQXQgPz8gbnVsbCxcbiAgICAgICAgYWNxdWlyaW5nTG9ja0lkOiBsb2NrSWQsXG4gICAgICAgIGFjcXVpcmluZ0xvY2tBdDogbm93LFxuICAgICAgfTtcbiAgICAgIGF3YWl0IHdyaXRlSnNvbkZpbGUoZmlsZVBhdGgsIHNuYXBzaG90KTtcbiAgICAgIHJldHVybiBzbmFwc2hvdDtcbiAgICB9LFxuXG4gICAgXCJzYW5kYm94LmFjcXVpcmVMb2NrXCI6IGFzeW5jICh7IHJlY29yZCwgbG9ja1RpbWVvdXRNcyB9KSA9PiB7XG4gICAgICBjb25zdCBzYWZlTmFtZSA9IEJ1ZmZlci5mcm9tKHJlY29yZC5pZCkudG9TdHJpbmcoXCJiYXNlNjR1cmxcIik7XG4gICAgICBjb25zdCBmaWxlUGF0aCA9IGpvaW4oc2FuZGJveERpciwgYCR7c2FmZU5hbWV9Lmpzb25gKTtcbiAgICAgIGNvbnN0IGV4aXN0aW5nID0gYXdhaXQgcmVhZEpzb248U2FuZGJveFJlY29yZD4oZmlsZVBhdGgpO1xuICAgICAgaWYgKFxuICAgICAgICBleGlzdGluZz8uYWNxdWlyaW5nTG9ja0lkICYmXG4gICAgICAgIGV4aXN0aW5nLmFjcXVpcmluZ0xvY2tBdCAmJlxuICAgICAgICBEYXRlLm5vdygpIC0gZXhpc3RpbmcuYWNxdWlyaW5nTG9ja0F0IDwgbG9ja1RpbWVvdXRNc1xuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBudWxsOyAvLyBhY3RpdmUgbG9jayBoZWxkIGJ5IHNvbWVvbmUgZWxzZVxuICAgICAgfVxuICAgICAgY29uc3QgbmV3UmVjb3JkOiBTYW5kYm94UmVjb3JkID0ge1xuICAgICAgICAuLi5yZWNvcmQsXG4gICAgICAgIHRhZ3M6IHJlY29yZC50YWdzID8/IGV4aXN0aW5nPy50YWdzID8/IG51bGwsXG4gICAgICB9O1xuICAgICAgYXdhaXQgd3JpdGVKc29uRmlsZShmaWxlUGF0aCwgbmV3UmVjb3JkKTtcbiAgICAgIHJldHVybiBuZXdSZWNvcmQ7XG4gICAgfSxcblxuICAgIFwiY29tbWFuZC5saXN0XCI6IGFzeW5jICh7IHNlc3Npb25JZCwgaW5jbHVkZUZpbmlzaGVkLCBjdXJzb3IsIGxpbWl0IH0pID0+IHtcbiAgICAgIGNvbnN0IGFsbENvbW1hbmRzID0gYXdhaXQgcmVhZEFsbEZyb21EaXI8Q29tbWFuZD4oY29tbWFuZERpcik7XG4gICAgICBsZXQgZmlsdGVyZWQgPSBhbGxDb21tYW5kcy5maWx0ZXIoKGMpID0+IGMuc2Vzc2lvbklkID09PSBzZXNzaW9uSWQpO1xuICAgICAgaWYgKCFpbmNsdWRlRmluaXNoZWQpIHtcbiAgICAgICAgZmlsdGVyZWQgPSBmaWx0ZXJlZC5maWx0ZXIoKGMpID0+IGMuc3RhdHVzID09PSBcInJ1bm5pbmdcIik7XG4gICAgICB9XG4gICAgICBmaWx0ZXJlZC5zb3J0KChhLCBiKSA9PiBhLnN0YXJ0ZWRBdCAtIGIuc3RhcnRlZEF0KTtcbiAgICAgIHJldHVybiBwYWdpbmF0ZSh7IGl0ZW1zOiBmaWx0ZXJlZCwgY3Vyc29yLCBsaW1pdCB9KTtcbiAgICB9LFxuICB9O1xufVxuIiwgImltcG9ydCB0eXBlIHsgTGlzdFJlc3VsdCB9IGZyb20gXCIuLi9zdG9yYWdlXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBwYWdpbmF0ZTxUIGV4dGVuZHMgeyBpZDogc3RyaW5nIH0+KG9wdHM6IHtcbiAgaXRlbXM6IFRbXTtcbiAgY3Vyc29yPzogc3RyaW5nO1xuICBsaW1pdD86IG51bWJlcjtcbn0pOiBMaXN0UmVzdWx0PFQ+IHtcbiAgY29uc3QgeyBpdGVtcywgY3Vyc29yLCBsaW1pdCB9ID0gb3B0cztcbiAgY29uc3Qgc3RhcnRJbmRleCA9IGN1cnNvciA/IGl0ZW1zLmZpbmRJbmRleCgobSkgPT4gbS5pZCA9PT0gY3Vyc29yKSArIDEgOiAwO1xuICBjb25zdCBzbGljZWQgPVxuICAgIGxpbWl0ICE9PSB1bmRlZmluZWRcbiAgICAgID8gaXRlbXMuc2xpY2Uoc3RhcnRJbmRleCwgc3RhcnRJbmRleCArIGxpbWl0KVxuICAgICAgOiBpdGVtcy5zbGljZShzdGFydEluZGV4KTtcbiAgY29uc3QgbmV4dEN1cnNvciA9XG4gICAgbGltaXQgIT09IHVuZGVmaW5lZCAmJiBzdGFydEluZGV4ICsgbGltaXQgPCBpdGVtcy5sZW5ndGhcbiAgICAgID8gKHNsaWNlZC5hdCgtMSk/LmlkID8/IG51bGwpXG4gICAgICA6IG51bGw7XG4g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
@@ -39,7 +39,7 @@ var import_core = require("@swc/core");
39
39
  // package.json
40
40
  var package_default = {
41
41
  name: "experimental-agent",
42
- version: "0.0.4",
42
+ version: "0.1.1",
43
43
  main: "./dist/index.js",
44
44
  module: "./dist/index.mjs",
45
45
  types: "./dist/index.d.ts",
@@ -88,7 +88,7 @@ var package_default = {
88
88
  "fast-deep-equal": "^3.1.3",
89
89
  glob: "^11.0.0",
90
90
  hono: "^4.11.6",
91
- sandbox: "^1.0.18",
91
+ "@vercel/sandbox": "^1.5.0",
92
92
  ulid: "^3.0.2",
93
93
  zod: "^4.3.6"
94
94
  },
@@ -104,7 +104,7 @@ var package_default = {
104
104
  },
105
105
  peerDependencies: {
106
106
  ai: "^6.0.0",
107
- workflow: "https://workflow-docs-7evupb64d.vercel.sh/workflow.tgz"
107
+ workflow: "https://workflow-docs-ad7o5pmal.vercel.sh/workflow.tgz"
108
108
  },
109
109
  publishConfig: {
110
110
  access: "public"
@@ -188,19 +188,19 @@ function findAgentExports(ast) {
188
188
  if (!agentLocalName) {
189
189
  return [];
190
190
  }
191
- const exports = [];
191
+ const exports2 = [];
192
192
  for (const item of ast.body) {
193
193
  if (item.type === "ExportDeclaration" && item.declaration) {
194
194
  const decl = item.declaration;
195
195
  if (decl.type === "VariableDeclaration") {
196
196
  for (const declarator of decl.declarations) {
197
197
  if (declarator.id.type === "Identifier" && declarator.init?.type === "CallExpression" && declarator.init.callee.type === "Identifier" && declarator.init.callee.value === agentLocalName) {
198
- exports.push(declarator.id.value);
198
+ exports2.push(declarator.id.value);
199
199
  }
200
200
  }
201
201
  }
202
202
  }
203
203
  }
204
- return exports;
204
+ return exports2;
205
205
  }
206
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL25leHQvbG9hZGVyLnRzIiwgIi4uLy4uL3BhY2thZ2UuanNvbiJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyB0eXBlIE1vZHVsZSwgcGFyc2VTeW5jIH0gZnJvbSBcIkBzd2MvY29yZVwiO1xuaW1wb3J0IHBrZyBmcm9tIFwiLi4vLi4vcGFja2FnZS5qc29uXCI7XG5cbnR5cGUgTG9hZGVyT3B0aW9ucyA9IHtcbiAgZGVidWc/OiBib29sZWFuO1xufTtcblxudHlwZSBMb2FkZXJDb250ZXh0ID0ge1xuICByZXNvdXJjZVBhdGg6IHN0cmluZztcbiAgZ2V0T3B0aW9ucygpOiBMb2FkZXJPcHRpb25zO1xufTtcblxuY29uc3QgUEFDS0FHRV9OQU1FID0gcGtnLm5hbWU7XG5jb25zdCBBR0VOVF9QUk9UT0NPTF9WRVJTSU9OID0gXCJ2MVwiO1xuY29uc3QgVFlQRVNDUklQVF9FWFRfUkVHRVggPSAvXFwuKHRzfHRzeHxtdHN8Y3RzKSQvO1xuXG4vKipcbiAqIFdlYnBhY2svVHVyYm9wYWNrIGxvYWRlciB0aGF0IHdpcmVzIHVwIGFnZW50LnJwYyBieSByZXF1aXJpbmcgc3RlcHMuanNcbiAqIGF0IHRoZSBFTkQgb2YgdGhlIGZpbGUuIFVzaW5nIHJlcXVpcmUoKSBhdm9pZHMgaW1wb3J0IGhvaXN0aW5nIGlzc3Vlcy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYWdlbnRScGNMb2FkZXIoXG4gIHRoaXM6IExvYWRlckNvbnRleHQsXG4gIHNvdXJjZTogc3RyaW5nXG4pOiBzdHJpbmcge1xuICBjb25zdCB7IGRlYnVnIH0gPSB0aGlzLmdldE9wdGlvbnMoKTtcbiAgY29uc3QgbG9nID0gZGVidWdcbiAgICA/ICguLi5hcmdzOiB1bmtub3duW10pID0+IGNvbnNvbGUubG9nKFwiW2FnZW50LWxvYWRlcl1cIiwgLi4uYXJncylcbiAgICA6ICgpID0+IHVuZGVmaW5lZDtcblxuICBsb2coXCJwcm9jZXNzaW5nOlwiLCB0aGlzLnJlc291cmNlUGF0aCk7XG5cbiAgaWYgKCFzb3VyY2UuaW5jbHVkZXMoUEFDS0FHRV9OQU1FKSkge1xuICAgIGxvZyhcInNraXBwaW5nIC0gbm8gcGFja2FnZSBuYW1lXCIpO1xuICAgIHJldHVybiBzb3VyY2U7XG4gIH1cblxuICBjb25zdCBmaWxlbmFtZSA9IHRoaXMucmVzb3VyY2VQYXRoO1xuICBjb25zdCBpc1R5cGVTY3JpcHQgPSBUWVBFU0NSSVBUX0VYVF9SRUdFWC50ZXN0KGZpbGVuYW1lKTtcblxuICBsZXQgYXN0OiBNb2R1bGU7XG4gIHRyeSB7XG4gICAgYXN0ID0gcGFyc2VTeW5jKHNvdXJjZSwge1xuICAgICAgc3ludGF4OiBpc1R5cGVTY3JpcHQgPyBcInR5cGVzY3JpcHRcIiA6IFwiZWNtYXNjcmlwdFwiLFxuICAgICAgdHN4OiBmaWxlbmFtZS5lbmRzV2l0aChcIi50c3hcIiksXG4gICAgICBqc3g6IGZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzeFwiKSxcbiAgICB9KTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfVxuXG4gIGNvbnN0IGFnZW50RXhwb3J0cyA9IGZpbmRBZ2VudEV4cG9ydHMoYXN0KTtcbiAgaWYgKGFnZW50RXhwb3J0cy5sZW5ndGggPT09IDApIHtcbiAgICBsb2coXCJza2lwcGluZyAtIG5vIGFnZW50IGV4cG9ydHNcIik7XG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfVxuXG4gIGxvZyhcImZvdW5kIGFnZW50IGV4cG9ydHM6XCIsIGFnZW50RXhwb3J0cyk7XG5cbiAgLy8gQ2FsY3VsYXRlIHBhdGggdG8gc3RlcHMuanNcbiAgY29uc3QgZmlsZURpciA9IHBhdGguZGlybmFtZShmaWxlbmFtZSk7XG4gIGNvbnN0IHNyY0luZGV4ID0gZmlsZW5hbWUubGFzdEluZGV4T2YoYCR7cGF0aC5zZXB9c3JjJHtwYXRoLnNlcH1gKTtcbiAgaWYgKHNyY0luZGV4ID09PSAtMSkge1xuICAgIGxvZyhcInNraXBwaW5nIC0gbm8gc3JjIGRpciBmb3VuZFwiKTtcbiAgICByZXR1cm4gc291cmNlO1xuICB9XG5cbiAgY29uc3Qgc3JjRGlyID0gZmlsZW5hbWUuc3Vic3RyaW5nKDAsIHNyY0luZGV4ICsgNCk7XG4gIGNvbnN0IGFwcERpciA9IHBhdGguam9pbihzcmNEaXIsIFwiYXBwXCIpO1xuICBjb25zdCBzdGVwc1BhdGggPSBwYXRoLmpvaW4oXG4gICAgYXBwRGlyLFxuICAgIFwiLndlbGwta25vd25cIixcbiAgICBcImFnZW50XCIsXG4gICAgQUdFTlRfUFJPVE9DT0xfVkVSU0lPTixcbiAgICBcInN0ZXBzLmpzXCJcbiAgKTtcbiAgbGV0IHJlbGF0aXZlUGF0aCA9IHBhdGgucmVsYXRpdmUoZmlsZURpciwgc3RlcHNQYXRoKS5yZXBsYWNlKC9cXFxcL2csIFwiL1wiKTtcblxuICBpZiAoIShyZWxhdGl2ZVBhdGguc3RhcnRzV2l0aChcIi4vXCIpIHx8IHJlbGF0aXZlUGF0aC5zdGFydHNXaXRoKFwiLi4vXCIpKSkge1xuICAgIHJlbGF0aXZlUGF0aCA9IGAuLyR7cmVsYXRpdmVQYXRofWA7XG4gIH1cblxuICAvLyBJbXBvcnQgdGhlIGluaXQgZnVuY3Rpb24gZnJvbSBzdGVwcy5qcyBhbmQgY2FsbCBpdCBmb3IgZWFjaCBhZ2VudFxuICAvLyBzdGVwcy5qcyBubyBsb25nZXIgaW1wb3J0cyB0aGUgYWdlbnQsIHNvIG5vIGNpcmN1bGFyIGRlcGVuZGVuY3lcbiAgY29uc3QgaW5pdENhbGxzID0gYWdlbnRFeHBvcnRzXG4gICAgLm1hcCgobmFtZSkgPT4ge1xuICAgICAgY29uc3QgaW5pdE5hbWUgPSBgX19pbml0JHtuYW1lWzBdLnRvVXBwZXJDYXNlKCl9JHtuYW1lLnNsaWNlKDEpfWA7XG4gICAgICByZXR1cm4gYCR7aW5pdE5hbWV9KCR7bmFtZX0pO2A7XG4gICAgfSlcbiAgICAuam9pbihcIlxcblwiKTtcblxuICBjb25zdCBpbml0SW1wb3J0cyA9IGFnZW50RXhwb3J0c1xuICAgIC5tYXAoKG5hbWUpID0+IGBfX2luaXQke25hbWVbMF0udG9VcHBlckNhc2UoKX0ke25hbWUuc2xpY2UoMSl9YClcbiAgICAuam9pbihcIiwgXCIpO1xuXG4gIGxvZyhcImluamVjdGluZyBpbml0IGNhbGxzIGZvcjpcIiwgYWdlbnRFeHBvcnRzKTtcbiAgcmV0dXJuIGAke3NvdXJjZX1cbmltcG9ydCB7ICR7aW5pdEltcG9ydHN9IH0gZnJvbSBcIiR7cmVsYXRpdmVQYXRofVwiO1xuJHtpbml0Q2FsbHN9YDtcbn1cblxuZnVuY3Rpb24gZmluZEFnZW50RXhwb3J0cyhhc3Q6IE1vZHVsZSk6IHN0cmluZ1tdIHtcbiAgbGV0IGFnZW50TG9jYWxOYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICBmb3IgKGNvbnN0IGl0ZW0gb2YgYXN0LmJvZHkpIHtcbiAgICBpZiAoXG4gICAgICBpdGVtLnR5cGUgPT09IFwiSW1wb3J0RGVjbGFyYXRpb25cIiAmJlxuICAgICAgaXRlbS5zb3VyY2UudmFsdWUgPT09IFBBQ0tBR0VfTkFNRVxuICAgICkge1xuICAgICAgZm9yIChjb25zdCBzcGVjaWZpZXIgb2YgaXRlbS5zcGVjaWZpZXJzKSB7XG4gICAgICAgIGlmIChzcGVjaWZpZXIudHlwZSA9PT0gXCJJbXBvcnRTcGVjaWZpZXJcIikge1xuICAgICAgICAgIGNvbnN0IGltcG9ydGVkID1cbiAgICAgICAgICAgIHNwZWNpZmllci5pbXBvcnRlZD8udHlwZSA9PT0gXCJJZGVudGlmaWVyXCJcbiAgICAgICAgICAgICAgPyBzcGVjaWZpZXIuaW1wb3J0ZWQudmFsdWVcbiAgICAgICAgICAgICAgOiBzcGVjaWZpZXIubG9jYWwudmFsdWU7XG5cbiAgICAgICAgICBpZiAoaW1wb3J0ZWQgPT09IFwiYWdlbnRcIikge1xuICAgICAgICAgICAgYWdlbnRMb2NhbE5hbWUgPSBzcGVjaWZpZXIubG9jYWwudmFsdWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoIWFnZW50TG9jYWxOYW1lKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3QgZXhwb3J0czogc3RyaW5nW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IGl0ZW0gb2YgYXN0LmJvZHkpIHtcbiAgICBpZiAoaXRlbS50eXBlID09PSBcIkV4cG9ydERlY2xhcmF0aW9uXCIgJiYgaXRlbS5kZWNsYXJhdGlvbikge1xuICAgICAgY29uc3QgZGVjbCA9IGl0ZW0uZGVjbGFyYXRpb247XG4gICAgICBpZiAoZGVjbC50eXBlID09PSBcIlZhcmlhYmxlRGVjbGFyYXRpb25cIikge1xuICAgICAgICBmb3IgKGNvbnN0IGRlY2xhcmF0b3Igb2YgZGVjbC5kZWNsYXJhdGlvbnMpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBkZWNsYXJhdG9yLmlkLnR5cGUgPT09IFwiSWRlbnRpZmllclwiICYmXG4gICAgICAgICAgICBkZWNsYXJhdG9yLmluaXQ/LnR5cGUgPT09IFwiQ2FsbEV4cHJlc3Npb25cIiAmJlxuICAgICAgICAgICAgZGVjbGFyYXRvci5pbml0LmNhbGxlZS50eXBlID09PSBcIklkZW50aWZpZXJcIiAmJlxuICAgICAgICAgICAgZGVjbGFyYXRvci5pbml0LmNhbGxlZS52YWx1ZSA9PT0gYWdlbnRMb2NhbE5hbWVcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGV4cG9ydHMucHVzaChkZWNsYXJhdG9yLmlkLnZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZXhwb3J0cztcbn1cbiIsICJ7XG4gIFwibmFtZVwiOiBcImV4cGVyaW1lbnRhbC1hZ2VudFwiLFxuICBcInZlcnNpb25cIjogXCIwLjAuNFwiLFxuICBcIm1haW5cIjogXCIuL2Rpc3QvaW5kZXguanNcIixcbiAgXCJtb2R1bGVcIjogXCIuL2Rpc3QvaW5kZXgubWpzXCIsXG4gIFwidHlwZXNcIjogXCIuL2Rpc3QvaW5kZXguZC50c1wiLFxuICBcInNpZGVFZmZlY3RzXCI6IHRydWUsXG4gIFwibGljZW5zZVwiOiBcIk1JVFwiLFxuICBcImZpbGVzXCI6IFtcbiAgICBcImRpc3QvKipcIlxuICBdLFxuICBcImV4cG9ydHNcIjoge1xuICAgIFwiLlwiOiB7XG4gICAgICBcInR5cGVzXCI6IFwiLi9kaXN0L2luZGV4LmQudHNcIixcbiAgICAgIFwiaW1wb3J0XCI6IFwiLi9kaXN0L2luZGV4Lm1qc1wiLFxuICAgICAgXCJyZXF1aXJlXCI6IFwiLi9kaXN0L2luZGV4LmpzXCJcbiAgICB9LFxuICAgIFwiLi9uZXh0XCI6IHtcbiAgICAgIFwidHlwZXNcIjogXCIuL2Rpc3QvbmV4dC5kLnRzXCIsXG4gICAgICBcImltcG9ydFwiOiBcIi4vZGlzdC9uZXh0Lm1qc1wiLFxuICAgICAgXCJyZXF1aXJlXCI6IFwiLi9kaXN0L25leHQuanNcIlxuICAgIH0sXG4gICAgXCIuL25leHQvbG9hZGVyXCI6IHtcbiAgICAgIFwidHlwZXNcIjogXCIuL2Rpc3QvbmV4dC9sb2FkZXIuZC50c1wiLFxuICAgICAgXCJpbXBvcnRcIjogXCIuL2Rpc3QvbmV4dC9sb2FkZXIubWpzXCIsXG4gICAgICBcInJlcXVpcmVcIjogXCIuL2Rpc3QvbmV4dC9sb2FkZXIuanNcIlxuICAgIH0sXG4gICAgXCIuL2NsaWVudFwiOiB7XG4gICAgICBcInR5cGVzXCI6IFwiLi9kaXN0L2NsaWVudC5kLnRzXCIsXG4gICAgICBcImltcG9ydFwiOiBcIi4vZGlzdC9jbGllbnQubWpzXCIsXG4gICAgICBcInJlcXVpcmVcIjogXCIuL2Rpc3QvY2xpZW50LmpzXCJcbiAgICB9XG4gIH0sXG4gIFwic2NyaXB0c1wiOiB7XG4gICAgXCJidWlsZFwiOiBcInRzdXBcIixcbiAgICBcImRldlwiOiBcInRzdXAgLS13YXRjaFwiLFxuICAgIFwiY2xlYW5cIjogXCJybSAtcmYgLnR1cmJvICYmIHJtIC1yZiBub2RlX21vZHVsZXMgJiYgcm0gLXJmIGRpc3RcIixcbiAgICBcInJlbGVhc2VcIjogXCJwbnBtIGJ1aWxkICYmIG5wbSBwdWJsaXNoXCIsXG4gICAgXCJ0eXBlY2hlY2tcIjogXCJ0c2MgLS1ub0VtaXRcIixcbiAgICBcInRlc3RcIjogXCJ2aXRlc3QgcnVuXCIsXG4gICAgXCJ0ZXN0OndhdGNoXCI6IFwidml0ZXN0XCJcbiAgfSxcbiAgXCJkZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiQGhvbm8vbm9kZS1zZXJ2ZXJcIjogXCJeMS4xOS45XCIsXG4gICAgXCJAc3djL2NvcmVcIjogXCJeMS4xMC4wXCIsXG4gICAgXCJAdmVyY2VsL29pZGNcIjogXCJeMy4xLjBcIixcbiAgICBcImJldHRlci1hbGxcIjogXCJeMC4wLjVcIixcbiAgICBcImVycm9yZVwiOiBcIl4wLjguMlwiLFxuICAgIFwiZmFzdC1kZWVwLWVxdWFsXCI6IFwiXjMuMS4zXCIsXG4gICAgXCJnbG9iXCI6IFwiXjExLjAuMFwiLFxuICAgIFwiaG9ub1wiOiBcIl40LjExLjZcIixcbiAgICBcInNhbmRib3hcIjogXCJeMS4wLjE4XCIsXG4gICAgXCJ1bGlkXCI6IFwiXjMuMC4yXCIsXG4gICAgXCJ6b2RcIjogXCJeNC4zLjZcIlxuICB9LFxuICBcImRldkRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJAYWdlbnQvdHNjb25maWdcIjogXCJ3b3Jrc3BhY2U6KlwiLFxuICAgIFwiQHR5cGVzL25vZGVcIjogXCJeMjAuMTEuMjRcIixcbiAgICBcImRvdGVudlwiOiBcIl4xNy4yLjNcIixcbiAgICBcIm5leHRcIjogXCJeMTYuMC4wXCIsXG4gICAgXCJ0c3VwXCI6IFwiXjguMC4yXCIsXG4gICAgXCJ0eXBlLWZlc3RcIjogXCJeNS40LjJcIixcbiAgICBcInR5cGVzY3JpcHRcIjogXCI1LjUuNFwiLFxuICAgIFwidml0ZXN0XCI6IFwiXjMuMC4wXCJcbiAgfSxcbiAgXCJwZWVyRGVwZW5kZW5jaWVzXCI6IHtcbiAgICBcImFpXCI6IFwiXjYuMC4wXCIsXG4gICAgXCJ3b3JrZmxvd1wiOiBcImh0dHBzOi8vd29ya2Zsb3ctZG9jcy03ZXZ1cGI2NGQudmVyY2VsLnNoL3dvcmtmbG93LnRnelwiXG4gIH0sXG4gIFwicHVibGlzaENvbmZpZ1wiOiB7XG4gICAgXCJhY2Nlc3NcIjogXCJwdWJsaWNcIlxuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsV0FBc0I7QUFDdEIsa0JBQXVDOzs7QUNEdkM7QUFBQSxFQUNFLE1BQVE7QUFBQSxFQUNSLFNBQVc7QUFBQSxFQUNYLE1BQVE7QUFBQSxFQUNSLFFBQVU7QUFBQSxFQUNWLE9BQVM7QUFBQSxFQUNULGFBQWU7QUFBQSxFQUNmLFNBQVc7QUFBQSxFQUNYLE9BQVM7QUFBQSxJQUNQO0FBQUEsRUFDRjtBQUFBLEVBQ0EsU0FBVztBQUFBLElBQ1QsS0FBSztBQUFBLE1BQ0gsT0FBUztBQUFBLE1BQ1QsUUFBVTtBQUFBLE1BQ1YsU0FBVztBQUFBLElBQ2I7QUFBQSxJQUNBLFVBQVU7QUFBQSxNQUNSLE9BQVM7QUFBQSxNQUNULFFBQVU7QUFBQSxNQUNWLFNBQVc7QUFBQSxJQUNiO0FBQUEsSUFDQSxpQkFBaUI7QUFBQSxNQUNmLE9BQVM7QUFBQSxNQUNULFFBQVU7QUFBQSxNQUNWLFNBQVc7QUFBQSxJQUNiO0FBQUEsSUFDQSxZQUFZO0FBQUEsTUFDVixPQUFTO0FBQUEsTUFDVCxRQUFVO0FBQUEsTUFDVixTQUFXO0FBQUEsSUFDYjtBQUFBLEVBQ0Y7QUFBQSxFQUNBLFNBQVc7QUFBQSxJQUNULE9BQVM7QUFBQSxJQUNULEtBQU87QUFBQSxJQUNQLE9BQVM7QUFBQSxJQUNULFNBQVc7QUFBQSxJQUNYLFdBQWE7QUFBQSxJQUNiLE1BQVE7QUFBQSxJQUNSLGNBQWM7QUFBQSxFQUNoQjtBQUFBLEVBQ0EsY0FBZ0I7QUFBQSxJQUNkLHFCQUFxQjtBQUFBLElBQ3JCLGFBQWE7QUFBQSxJQUNiLGdCQUFnQjtBQUFBLElBQ2hCLGNBQWM7QUFBQSxJQUNkLFFBQVU7QUFB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
206
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL25leHQvbG9hZGVyLnRzIiwgIi4uLy4uL3BhY2thZ2UuanNvbiJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyB0eXBlIE1vZHVsZSwgcGFyc2VTeW5jIH0gZnJvbSBcIkBzd2MvY29yZVwiO1xuaW1wb3J0IHBrZyBmcm9tIFwiLi4vLi4vcGFja2FnZS5qc29uXCI7XG5cbnR5cGUgTG9hZGVyT3B0aW9ucyA9IHtcbiAgZGVidWc/OiBib29sZWFuO1xufTtcblxudHlwZSBMb2FkZXJDb250ZXh0ID0ge1xuICByZXNvdXJjZVBhdGg6IHN0cmluZztcbiAgZ2V0T3B0aW9ucygpOiBMb2FkZXJPcHRpb25zO1xufTtcblxuY29uc3QgUEFDS0FHRV9OQU1FID0gcGtnLm5hbWU7XG5jb25zdCBBR0VOVF9QUk9UT0NPTF9WRVJTSU9OID0gXCJ2MVwiO1xuY29uc3QgVFlQRVNDUklQVF9FWFRfUkVHRVggPSAvXFwuKHRzfHRzeHxtdHN8Y3RzKSQvO1xuXG4vKipcbiAqIFdlYnBhY2svVHVyYm9wYWNrIGxvYWRlciB0aGF0IHdpcmVzIHVwIGFnZW50LnJwYyBieSByZXF1aXJpbmcgc3RlcHMuanNcbiAqIGF0IHRoZSBFTkQgb2YgdGhlIGZpbGUuIFVzaW5nIHJlcXVpcmUoKSBhdm9pZHMgaW1wb3J0IGhvaXN0aW5nIGlzc3Vlcy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYWdlbnRScGNMb2FkZXIoXG4gIHRoaXM6IExvYWRlckNvbnRleHQsXG4gIHNvdXJjZTogc3RyaW5nXG4pOiBzdHJpbmcge1xuICBjb25zdCB7IGRlYnVnIH0gPSB0aGlzLmdldE9wdGlvbnMoKTtcbiAgY29uc3QgbG9nID0gZGVidWdcbiAgICA/ICguLi5hcmdzOiB1bmtub3duW10pID0+IGNvbnNvbGUubG9nKFwiW2FnZW50LWxvYWRlcl1cIiwgLi4uYXJncylcbiAgICA6ICgpID0+IHVuZGVmaW5lZDtcblxuICBsb2coXCJwcm9jZXNzaW5nOlwiLCB0aGlzLnJlc291cmNlUGF0aCk7XG5cbiAgaWYgKCFzb3VyY2UuaW5jbHVkZXMoUEFDS0FHRV9OQU1FKSkge1xuICAgIGxvZyhcInNraXBwaW5nIC0gbm8gcGFja2FnZSBuYW1lXCIpO1xuICAgIHJldHVybiBzb3VyY2U7XG4gIH1cblxuICBjb25zdCBmaWxlbmFtZSA9IHRoaXMucmVzb3VyY2VQYXRoO1xuICBjb25zdCBpc1R5cGVTY3JpcHQgPSBUWVBFU0NSSVBUX0VYVF9SRUdFWC50ZXN0KGZpbGVuYW1lKTtcblxuICBsZXQgYXN0OiBNb2R1bGU7XG4gIHRyeSB7XG4gICAgYXN0ID0gcGFyc2VTeW5jKHNvdXJjZSwge1xuICAgICAgc3ludGF4OiBpc1R5cGVTY3JpcHQgPyBcInR5cGVzY3JpcHRcIiA6IFwiZWNtYXNjcmlwdFwiLFxuICAgICAgdHN4OiBmaWxlbmFtZS5lbmRzV2l0aChcIi50c3hcIiksXG4gICAgICBqc3g6IGZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzeFwiKSxcbiAgICB9KTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfVxuXG4gIGNvbnN0IGFnZW50RXhwb3J0cyA9IGZpbmRBZ2VudEV4cG9ydHMoYXN0KTtcbiAgaWYgKGFnZW50RXhwb3J0cy5sZW5ndGggPT09IDApIHtcbiAgICBsb2coXCJza2lwcGluZyAtIG5vIGFnZW50IGV4cG9ydHNcIik7XG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfVxuXG4gIGxvZyhcImZvdW5kIGFnZW50IGV4cG9ydHM6XCIsIGFnZW50RXhwb3J0cyk7XG5cbiAgLy8gQ2FsY3VsYXRlIHBhdGggdG8gc3RlcHMuanNcbiAgY29uc3QgZmlsZURpciA9IHBhdGguZGlybmFtZShmaWxlbmFtZSk7XG4gIGNvbnN0IHNyY0luZGV4ID0gZmlsZW5hbWUubGFzdEluZGV4T2YoYCR7cGF0aC5zZXB9c3JjJHtwYXRoLnNlcH1gKTtcbiAgaWYgKHNyY0luZGV4ID09PSAtMSkge1xuICAgIGxvZyhcInNraXBwaW5nIC0gbm8gc3JjIGRpciBmb3VuZFwiKTtcbiAgICByZXR1cm4gc291cmNlO1xuICB9XG5cbiAgY29uc3Qgc3JjRGlyID0gZmlsZW5hbWUuc3Vic3RyaW5nKDAsIHNyY0luZGV4ICsgNCk7XG4gIGNvbnN0IGFwcERpciA9IHBhdGguam9pbihzcmNEaXIsIFwiYXBwXCIpO1xuICBjb25zdCBzdGVwc1BhdGggPSBwYXRoLmpvaW4oXG4gICAgYXBwRGlyLFxuICAgIFwiLndlbGwta25vd25cIixcbiAgICBcImFnZW50XCIsXG4gICAgQUdFTlRfUFJPVE9DT0xfVkVSU0lPTixcbiAgICBcInN0ZXBzLmpzXCJcbiAgKTtcbiAgbGV0IHJlbGF0aXZlUGF0aCA9IHBhdGgucmVsYXRpdmUoZmlsZURpciwgc3RlcHNQYXRoKS5yZXBsYWNlKC9cXFxcL2csIFwiL1wiKTtcblxuICBpZiAoIShyZWxhdGl2ZVBhdGguc3RhcnRzV2l0aChcIi4vXCIpIHx8IHJlbGF0aXZlUGF0aC5zdGFydHNXaXRoKFwiLi4vXCIpKSkge1xuICAgIHJlbGF0aXZlUGF0aCA9IGAuLyR7cmVsYXRpdmVQYXRofWA7XG4gIH1cblxuICAvLyBJbXBvcnQgdGhlIGluaXQgZnVuY3Rpb24gZnJvbSBzdGVwcy5qcyBhbmQgY2FsbCBpdCBmb3IgZWFjaCBhZ2VudFxuICAvLyBzdGVwcy5qcyBubyBsb25nZXIgaW1wb3J0cyB0aGUgYWdlbnQsIHNvIG5vIGNpcmN1bGFyIGRlcGVuZGVuY3lcbiAgY29uc3QgaW5pdENhbGxzID0gYWdlbnRFeHBvcnRzXG4gICAgLm1hcCgobmFtZSkgPT4ge1xuICAgICAgY29uc3QgaW5pdE5hbWUgPSBgX19pbml0JHtuYW1lWzBdLnRvVXBwZXJDYXNlKCl9JHtuYW1lLnNsaWNlKDEpfWA7XG4gICAgICByZXR1cm4gYCR7aW5pdE5hbWV9KCR7bmFtZX0pO2A7XG4gICAgfSlcbiAgICAuam9pbihcIlxcblwiKTtcblxuICBjb25zdCBpbml0SW1wb3J0cyA9IGFnZW50RXhwb3J0c1xuICAgIC5tYXAoKG5hbWUpID0+IGBfX2luaXQke25hbWVbMF0udG9VcHBlckNhc2UoKX0ke25hbWUuc2xpY2UoMSl9YClcbiAgICAuam9pbihcIiwgXCIpO1xuXG4gIGxvZyhcImluamVjdGluZyBpbml0IGNhbGxzIGZvcjpcIiwgYWdlbnRFeHBvcnRzKTtcbiAgcmV0dXJuIGAke3NvdXJjZX1cbmltcG9ydCB7ICR7aW5pdEltcG9ydHN9IH0gZnJvbSBcIiR7cmVsYXRpdmVQYXRofVwiO1xuJHtpbml0Q2FsbHN9YDtcbn1cblxuZnVuY3Rpb24gZmluZEFnZW50RXhwb3J0cyhhc3Q6IE1vZHVsZSk6IHN0cmluZ1tdIHtcbiAgbGV0IGFnZW50TG9jYWxOYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICBmb3IgKGNvbnN0IGl0ZW0gb2YgYXN0LmJvZHkpIHtcbiAgICBpZiAoXG4gICAgICBpdGVtLnR5cGUgPT09IFwiSW1wb3J0RGVjbGFyYXRpb25cIiAmJlxuICAgICAgaXRlbS5zb3VyY2UudmFsdWUgPT09IFBBQ0tBR0VfTkFNRVxuICAgICkge1xuICAgICAgZm9yIChjb25zdCBzcGVjaWZpZXIgb2YgaXRlbS5zcGVjaWZpZXJzKSB7XG4gICAgICAgIGlmIChzcGVjaWZpZXIudHlwZSA9PT0gXCJJbXBvcnRTcGVjaWZpZXJcIikge1xuICAgICAgICAgIGNvbnN0IGltcG9ydGVkID1cbiAgICAgICAgICAgIHNwZWNpZmllci5pbXBvcnRlZD8udHlwZSA9PT0gXCJJZGVudGlmaWVyXCJcbiAgICAgICAgICAgICAgPyBzcGVjaWZpZXIuaW1wb3J0ZWQudmFsdWVcbiAgICAgICAgICAgICAgOiBzcGVjaWZpZXIubG9jYWwudmFsdWU7XG5cbiAgICAgICAgICBpZiAoaW1wb3J0ZWQgPT09IFwiYWdlbnRcIikge1xuICAgICAgICAgICAgYWdlbnRMb2NhbE5hbWUgPSBzcGVjaWZpZXIubG9jYWwudmFsdWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoIWFnZW50TG9jYWxOYW1lKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3QgZXhwb3J0czogc3RyaW5nW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IGl0ZW0gb2YgYXN0LmJvZHkpIHtcbiAgICBpZiAoaXRlbS50eXBlID09PSBcIkV4cG9ydERlY2xhcmF0aW9uXCIgJiYgaXRlbS5kZWNsYXJhdGlvbikge1xuICAgICAgY29uc3QgZGVjbCA9IGl0ZW0uZGVjbGFyYXRpb247XG4gICAgICBpZiAoZGVjbC50eXBlID09PSBcIlZhcmlhYmxlRGVjbGFyYXRpb25cIikge1xuICAgICAgICBmb3IgKGNvbnN0IGRlY2xhcmF0b3Igb2YgZGVjbC5kZWNsYXJhdGlvbnMpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBkZWNsYXJhdG9yLmlkLnR5cGUgPT09IFwiSWRlbnRpZmllclwiICYmXG4gICAgICAgICAgICBkZWNsYXJhdG9yLmluaXQ/LnR5cGUgPT09IFwiQ2FsbEV4cHJlc3Npb25cIiAmJlxuICAgICAgICAgICAgZGVjbGFyYXRvci5pbml0LmNhbGxlZS50eXBlID09PSBcIklkZW50aWZpZXJcIiAmJlxuICAgICAgICAgICAgZGVjbGFyYXRvci5pbml0LmNhbGxlZS52YWx1ZSA9PT0gYWdlbnRMb2NhbE5hbWVcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGV4cG9ydHMucHVzaChkZWNsYXJhdG9yLmlkLnZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZXhwb3J0cztcbn1cbiIsICJ7XG4gIFwibmFtZVwiOiBcImV4cGVyaW1lbnRhbC1hZ2VudFwiLFxuICBcInZlcnNpb25cIjogXCIwLjEuMVwiLFxuICBcIm1haW5cIjogXCIuL2Rpc3QvaW5kZXguanNcIixcbiAgXCJtb2R1bGVcIjogXCIuL2Rpc3QvaW5kZXgubWpzXCIsXG4gIFwidHlwZXNcIjogXCIuL2Rpc3QvaW5kZXguZC50c1wiLFxuICBcInNpZGVFZmZlY3RzXCI6IHRydWUsXG4gIFwibGljZW5zZVwiOiBcIk1JVFwiLFxuICBcImZpbGVzXCI6IFtcbiAgICBcImRpc3QvKipcIlxuICBdLFxuICBcImV4cG9ydHNcIjoge1xuICAgIFwiLlwiOiB7XG4gICAgICBcInR5cGVzXCI6IFwiLi9kaXN0L2luZGV4LmQudHNcIixcbiAgICAgIFwiaW1wb3J0XCI6IFwiLi9kaXN0L2luZGV4Lm1qc1wiLFxuICAgICAgXCJyZXF1aXJlXCI6IFwiLi9kaXN0L2luZGV4LmpzXCJcbiAgICB9LFxuICAgIFwiLi9uZXh0XCI6IHtcbiAgICAgIFwidHlwZXNcIjogXCIuL2Rpc3QvbmV4dC5kLnRzXCIsXG4gICAgICBcImltcG9ydFwiOiBcIi4vZGlzdC9uZXh0Lm1qc1wiLFxuICAgICAgXCJyZXF1aXJlXCI6IFwiLi9kaXN0L25leHQuanNcIlxuICAgIH0sXG4gICAgXCIuL25leHQvbG9hZGVyXCI6IHtcbiAgICAgIFwidHlwZXNcIjogXCIuL2Rpc3QvbmV4dC9sb2FkZXIuZC50c1wiLFxuICAgICAgXCJpbXBvcnRcIjogXCIuL2Rpc3QvbmV4dC9sb2FkZXIubWpzXCIsXG4gICAgICBcInJlcXVpcmVcIjogXCIuL2Rpc3QvbmV4dC9sb2FkZXIuanNcIlxuICAgIH0sXG4gICAgXCIuL2NsaWVudFwiOiB7XG4gICAgICBcInR5cGVzXCI6IFwiLi9kaXN0L2NsaWVudC5kLnRzXCIsXG4gICAgICBcImltcG9ydFwiOiBcIi4vZGlzdC9jbGllbnQubWpzXCIsXG4gICAgICBcInJlcXVpcmVcIjogXCIuL2Rpc3QvY2xpZW50LmpzXCJcbiAgICB9XG4gIH0sXG4gIFwic2NyaXB0c1wiOiB7XG4gICAgXCJidWlsZFwiOiBcInRzdXBcIixcbiAgICBcImRldlwiOiBcInRzdXAgLS13YXRjaFwiLFxuICAgIFwiY2xlYW5cIjogXCJybSAtcmYgLnR1cmJvICYmIHJtIC1yZiBub2RlX21vZHVsZXMgJiYgcm0gLXJmIGRpc3RcIixcbiAgICBcInJlbGVhc2VcIjogXCJwbnBtIGJ1aWxkICYmIG5wbSBwdWJsaXNoXCIsXG4gICAgXCJ0eXBlY2hlY2tcIjogXCJ0c2MgLS1ub0VtaXRcIixcbiAgICBcInRlc3RcIjogXCJ2aXRlc3QgcnVuXCIsXG4gICAgXCJ0ZXN0OndhdGNoXCI6IFwidml0ZXN0XCJcbiAgfSxcbiAgXCJkZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiQGhvbm8vbm9kZS1zZXJ2ZXJcIjogXCJeMS4xOS45XCIsXG4gICAgXCJAc3djL2NvcmVcIjogXCJeMS4xMC4wXCIsXG4gICAgXCJAdmVyY2VsL29pZGNcIjogXCJeMy4xLjBcIixcbiAgICBcImJldHRlci1hbGxcIjogXCJeMC4wLjVcIixcbiAgICBcImVycm9yZVwiOiBcIl4wLjguMlwiLFxuICAgIFwiZmFzdC1kZWVwLWVxdWFsXCI6IFwiXjMuMS4zXCIsXG4gICAgXCJnbG9iXCI6IFwiXjExLjAuMFwiLFxuICAgIFwiaG9ub1wiOiBcIl40LjExLjZcIixcbiAgICBcIkB2ZXJjZWwvc2FuZGJveFwiOiBcIl4xLjUuMFwiLFxuICAgIFwidWxpZFwiOiBcIl4zLjAuMlwiLFxuICAgIFwiem9kXCI6IFwiXjQuMy42XCJcbiAgfSxcbiAgXCJkZXZEZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiQGFnZW50L3RzY29uZmlnXCI6IFwid29ya3NwYWNlOipcIixcbiAgICBcIkB0eXBlcy9ub2RlXCI6IFwiXjIwLjExLjI0XCIsXG4gICAgXCJkb3RlbnZcIjogXCJeMTcuMi4zXCIsXG4gICAgXCJuZXh0XCI6IFwiXjE2LjAuMFwiLFxuICAgIFwidHN1cFwiOiBcIl44LjAuMlwiLFxuICAgIFwidHlwZS1mZXN0XCI6IFwiXjUuNC4yXCIsXG4gICAgXCJ0eXBlc2NyaXB0XCI6IFwiNS41LjRcIixcbiAgICBcInZpdGVzdFwiOiBcIl4zLjAuMFwiXG4gIH0sXG4gIFwicGVlckRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJhaVwiOiBcIl42LjAuMFwiLFxuICAgIFwid29ya2Zsb3dcIjogXCJodHRwczovL3dvcmtmbG93LWRvY3MtYWQ3bzVwbWFsLnZlcmNlbC5zaC93b3JrZmxvdy50Z3pcIlxuICB9LFxuICBcInB1Ymxpc2hDb25maWdcIjoge1xuICAgIFwiYWNjZXNzXCI6IFwicHVibGljXCJcbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFdBQXNCO0FBQ3RCLGtCQUF1Qzs7O0FDRHZDO0FBQUEsRUFDRSxNQUFRO0FBQUEsRUFDUixTQUFXO0FBQUEsRUFDWCxNQUFRO0FBQUEsRUFDUixRQUFVO0FBQUEsRUFDVixPQUFTO0FBQUEsRUFDVCxhQUFlO0FBQUEsRUFDZixTQUFXO0FBQUEsRUFDWCxPQUFTO0FBQUEsSUFDUDtBQUFBLEVBQ0Y7QUFBQSxFQUNBLFNBQVc7QUFBQSxJQUNULEtBQUs7QUFBQSxNQUNILE9BQVM7QUFBQSxNQUNULFFBQVU7QUFBQSxNQUNWLFNBQVc7QUFBQSxJQUNiO0FBQUEsSUFDQSxVQUFVO0FBQUEsTUFDUixPQUFTO0FBQUEsTUFDVCxRQUFVO0FBQUEsTUFDVixTQUFXO0FBQUEsSUFDYjtBQUFBLElBQ0EsaUJBQWlCO0FBQUEsTUFDZixPQUFTO0FBQUEsTUFDVCxRQUFVO0FBQUEsTUFDVixTQUFXO0FBQUEsSUFDYjtBQUFBLElBQ0EsWUFBWTtBQUFBLE1BQ1YsT0FBUztBQUFBLE1BQ1QsUUFBVTtBQUFBLE1BQ1YsU0FBVztBQUFBLElBQ2I7QUFBQSxFQUNGO0FBQUEsRUFDQSxTQUFXO0FBQUEsSUFDVCxPQUFTO0FBQUEsSUFDVCxLQUFPO0FBQUEsSUFDUCxPQUFTO0FBQUEsSUFDVCxTQUFXO0FBQUEsSUFDWCxXQUFhO0FBQUEsSUFDYixNQUFRO0FBQUEsSUFDUixjQUFjO0FBQUEsRUFDaEI7QUFBQSxFQUNBLGNBQWdCO0FBQUEsSUFDZCxxQkFBcUI7QUFBQSxJQUNyQixhQUFhO0FBQUEsSUFDYixnQkFBZ0I7QUFBQSxJQUNoQixjQUFjO0FBQUEsSUFDZCxR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
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  package_default
3
- } from "../chunk-T7PMZLOX.mjs";
4
- import "../chunk-3ODWQVIA.mjs";
3
+ } from "../chunk-T2UUL6VC.mjs";
4
+ import "../chunk-BJTO5JO5.mjs";
5
5
 
6
6
  // src/next/loader.ts
7
- import * as path from "node:path";
7
+ import * as path from "path";
8
8
  import { parseSync } from "@swc/core";
9
9
  var PACKAGE_NAME = package_default.name;
10
10
  var AGENT_PROTOCOL_VERSION = "v1";
package/dist/next.js CHANGED
@@ -40,7 +40,7 @@ var path = __toESM(require("path"));
40
40
  // package.json
41
41
  var package_default = {
42
42
  name: "experimental-agent",
43
- version: "0.0.4",
43
+ version: "0.1.1",
44
44
  main: "./dist/index.js",
45
45
  module: "./dist/index.mjs",
46
46
  types: "./dist/index.d.ts",
@@ -89,7 +89,7 @@ var package_default = {
89
89
  "fast-deep-equal": "^3.1.3",
90
90
  glob: "^11.0.0",
91
91
  hono: "^4.11.6",
92
- sandbox: "^1.0.18",
92
+ "@vercel/sandbox": "^1.5.0",
93
93
  ulid: "^3.0.2",
94
94
  zod: "^4.3.6"
95
95
  },
@@ -105,7 +105,7 @@ var package_default = {
105
105
  },
106
106
  peerDependencies: {
107
107
  ai: "^6.0.0",
108
- workflow: "https://workflow-docs-7evupb64d.vercel.sh/workflow.tgz"
108
+ workflow: "https://workflow-docs-ad7o5pmal.vercel.sh/workflow.tgz"
109
109
  },
110
110
  publishConfig: {
111
111
  access: "public"
@@ -222,9 +222,11 @@ export function __init${a.exportName[0].toUpperCase()}${a.exportName.slice(
222
222
  1
223
223
  )}(agent) {
224
224
  agent.rpc = ${a.uniqueId}Rpc;
225
+ registerRpc(agent._agentName, ${a.uniqueId}Rpc);
225
226
  }`
226
227
  ).join("\n");
227
228
  const stepsContent = `// Auto-generated by withAgent - do not edit
229
+ import { registerRpc } from "experimental-agent";
228
230
  ${rpcFunctions}
229
231
  ${initFunctions}
230
232
  `;
@@ -248,6 +250,9 @@ export function GET() {
248
250
  }
249
251
  function withAgent(configOrFn, agentConfig) {
250
252
  const debug = agentConfig?.debug ?? false;
253
+ if (debug) {
254
+ process.env.AGENT_DEBUG = "1";
255
+ }
251
256
  const cwd = process.cwd();
252
257
  const appDir = getAppDir(cwd);
253
258
  const agentDir = `${appDir}/.well-known/agent/${AGENT_PROTOCOL_VERSION}`;
@@ -326,4 +331,4 @@ function withAgent(configOrFn, agentConfig) {
326
331
  0 && (module.exports = {
327
332
  withAgent
328
333
  });
329
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL25leHQvaW5kZXgudHMiLCAiLi4vcGFja2FnZS5qc29uIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgKiBhcyBjcnlwdG8gZnJvbSBcIm5vZGU6Y3J5cHRvXCI7XG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgdHlwZSB7IE5leHRDb25maWcgfSBmcm9tIFwibmV4dFwiO1xuaW1wb3J0IHBrZyBmcm9tIFwiLi4vLi4vcGFja2FnZS5qc29uXCI7XG5cbmV4cG9ydCB0eXBlIFdpdGhBZ2VudENvbmZpZyA9IHtcbiAgLyoqIEVuYWJsZSBkZWJ1ZyBsb2dnaW5nICovXG4gIGRlYnVnPzogYm9vbGVhbjtcbn07XG5cbmNvbnN0IFBBQ0tBR0VfTkFNRSA9IHBrZy5uYW1lO1xuY29uc3QgQUdFTlRfUFJPVE9DT0xfVkVSU0lPTiA9IFwidjFcIjtcbmNvbnN0IEZJTEVfRVhUX1JFR0VYID0gL1xcLih0c3x0c3h8anN8anN4KSQvO1xuY29uc3QgQUdFTlRfRVhQT1JUX1JFR0VYID0gL2V4cG9ydFxccytjb25zdFxccysoXFx3KylcXHMqPVxccyphZ2VudFxccypcXCgvZztcbmNvbnN0IERFRkFVTFRfV09SS0ZMT1dfRElSUyA9IFtcInBhZ2VzXCIsIFwiYXBwXCIsIFwic3JjL3BhZ2VzXCIsIFwic3JjL2FwcFwiXTtcblxudHlwZSBEZXRlY3RlZEFnZW50ID0ge1xuICBleHBvcnROYW1lOiBzdHJpbmc7XG4gIGZpbGVQYXRoOiBzdHJpbmc7XG4gIC8qKiBVbmlxdWUgaWRlbnRpZmllcjogZXhwb3J0TmFtZSBvciBleHBvcnROYW1lX2hhc2ggaWYgZHVwbGljYXRlcyBleGlzdCAqL1xuICB1bmlxdWVJZDogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gc2hvcnRIYXNoKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgbGV0IGhhc2ggPSAwO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGNoYXIgPSBzdHIuY2hhckNvZGVBdChpKTtcbiAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vQml0d2lzZU9wZXJhdG9yczogaW50ZW50aW9uYWwgaGFzaCBjb21wdXRhdGlvblxuICAgIGhhc2ggPSAoaGFzaCA8PCA1KSAtIGhhc2ggKyBjaGFyO1xuICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9CaXR3aXNlT3BlcmF0b3JzOiBjb252ZXJ0IHRvIDMyLWJpdCBpbnRlZ2VyXG4gICAgaGFzaCAmPSBoYXNoO1xuICB9XG4gIHJldHVybiBNYXRoLmFicyhoYXNoKS50b1N0cmluZygzNikuc2xpY2UoMCwgNik7XG59XG5cbi8qKlxuICogRGV0ZWN0cyB3aGV0aGVyIHRoZSBwcm9qZWN0IHVzZXMgc3JjL2FwcCBvciBhcHAgZGlyZWN0b3J5IHN0cnVjdHVyZS5cbiAqIFJldHVybnMgdGhlIGFwcCBkaXJlY3RvcnkgcGF0aCByZWxhdGl2ZSB0byBjd2QuXG4gKi9cbmZ1bmN0aW9uIGdldEFwcERpcihjd2Q6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHNyY0FwcERpciA9IHBhdGguam9pbihjd2QsIFwic3JjXCIsIFwiYXBwXCIpO1xuICBpZiAoZnMuZXhpc3RzU3luYyhzcmNBcHBEaXIpKSB7XG4gICAgcmV0dXJuIFwic3JjL2FwcFwiO1xuICB9XG4gIHJldHVybiBcImFwcFwiO1xufVxuXG4vKipcbiAqIFNjYW5zIGZvciBhZ2VudCBleHBvcnRzIGluIHRoZSBwcm9qZWN0LlxuICovXG5mdW5jdGlvbiBkZXRlY3RBZ2VudHMoY3dkOiBzdHJpbmcsIGRlYnVnOiBib29sZWFuKTogRGV0ZWN0ZWRBZ2VudFtdIHtcbiAgY29uc3QgYWdlbnRzOiBEZXRlY3RlZEFnZW50W10gPSBbXTtcblxuICBjb25zdCBkaXJzVG9TY2FuID0gW3BhdGguam9pbihjd2QsIFwic3JjXCIpLCBjd2RdO1xuXG4gIGZ1bmN0aW9uIHNjYW5EaXIoZGlyOiBzdHJpbmcpIHtcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMoZGlyKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGVudHJpZXMgPSBmcy5yZWFkZGlyU3luYyhkaXIsIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KTtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5qb2luKGRpciwgZW50cnkubmFtZSk7XG4gICAgICBpZiAoXG4gICAgICAgIGVudHJ5LmlzRGlyZWN0b3J5KCkgJiZcbiAgICAgICAgIWVudHJ5Lm5hbWUuc3RhcnRzV2l0aChcIi5cIikgJiZcbiAgICAgICAgZW50cnkubmFtZSAhPT0gXCJub2RlX21vZHVsZXNcIiAmJlxuICAgICAgICBlbnRyeS5uYW1lICE9PSBcInNyY1wiXG4gICAgICApIHtcbiAgICAgICAgc2NhbkRpcihmdWxsUGF0aCk7XG4gICAgICB9IGVsc2UgaWYgKGVudHJ5LmlzRmlsZSgpICYmIEZJTEVfRVhUX1JFR0VYLnRlc3QoZW50cnkubmFtZSkpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKGZ1bGxQYXRoLCBcInV0Zi04XCIpO1xuICAgICAgICAgIGlmIChjb250ZW50LmluY2x1ZGVzKFBBQ0tBR0VfTkFNRSkgJiYgY29udGVudC5pbmNsdWRlcyhcImFnZW50KFwiKSkge1xuICAgICAgICAgICAgY29uc3QgZXhwb3J0TWF0Y2hlcyA9IGNvbnRlbnQubWF0Y2hBbGwoQUdFTlRfRVhQT1JUX1JFR0VYKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgbWF0Y2ggb2YgZXhwb3J0TWF0Y2hlcykge1xuICAgICAgICAgICAgICBhZ2VudHMucHVzaCh7XG4gICAgICAgICAgICAgICAgZXhwb3J0TmFtZTogbWF0Y2hbMV0sXG4gICAgICAgICAgICAgICAgZmlsZVBhdGg6IGZ1bGxQYXRoLFxuICAgICAgICAgICAgICAgIHVuaXF1ZUlkOiBcIlwiLCAvLyBXaWxsIGJlIHNldCBhZnRlciBhbGwgYWdlbnRzIGFyZSBmb3VuZFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgaWYgKGRlYnVnKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICBgW3dpdGhBZ2VudF0gRm91bmQgYWdlbnQ6ICR7bWF0Y2hbMV19IGluICR7ZnVsbFBhdGh9YFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIC8vIElnbm9yZSByZWFkIGVycm9yc1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBkaXIgb2YgZGlyc1RvU2Nhbikge1xuICAgIHNjYW5EaXIoZGlyKTtcbiAgfVxuXG4gIC8vIEFzc2lnbiB1bmlxdWUgSURzIC0gYWRkIGhhc2ggc3VmZml4IGlmIGR1cGxpY2F0ZSBleHBvcnQgbmFtZXMgZXhpc3RcbiAgY29uc3QgbmFtZUNvdW50cyA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG4gIGZvciAoY29uc3QgYWdlbnQgb2YgYWdlbnRzKSB7XG4gICAgbmFtZUNvdW50cy5zZXQoXG4gICAgICBhZ2VudC5leHBvcnROYW1lLFxuICAgICAgKG5hbWVDb3VudHMuZ2V0KGFnZW50LmV4cG9ydE5hbWUpIHx8IDApICsgMVxuICAgICk7XG4gIH1cblxuICBmb3IgKGNvbnN0IGFnZW50IG9mIGFnZW50cykge1xuICAgIGNvbnN0IGNvdW50ID0gbmFtZUNvdW50cy5nZXQoYWdlbnQuZXhwb3J0TmFtZSkgPz8gMDtcbiAgICBpZiAoY291bnQgPiAxKSB7XG4gICAgICBhZ2VudC51bmlxdWVJZCA9IGAke2FnZW50LmV4cG9ydE5hbWV9XyR7c2hvcnRIYXNoKGFnZW50LmZpbGVQYXRoKX1gO1xuICAgIH0gZWxzZSB7XG4gICAgICBhZ2VudC51bmlxdWVJZCA9IGFnZW50LmV4cG9ydE5hbWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGFnZW50cztcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgYWxsIGFnZW50IGZpbGVzIGluIC53ZWxsLWtub3duL2FnZW50L3YxLzpcbiAqIC0gc3RlcHMuanM6IFJQQyBzdGVwIGZ1bmN0aW9ucyB3aXRoIFwidXNlIHN0ZXBcIlxuICogLSByb3V0ZS5qczogdHJpZ2dlcnMgd29ya2Zsb3cgZGlzY292ZXJ5XG4gKi9cbmZ1bmN0aW9uIGdlbmVyYXRlQWdlbnRGaWxlcyhcbiAgYWdlbnRzOiBEZXRlY3RlZEFnZW50W10sXG4gIG91dHB1dERpcjogc3RyaW5nLFxuICBfY3dkOiBzdHJpbmcsXG4gIGRlYnVnOiBib29sZWFuXG4pOiB2b2lkIHtcbiAgaWYgKGFnZW50cy5sZW5ndGggPT09IDApIHtcbiAgICBpZiAoZGVidWcpIHtcbiAgICAgIGNvbnNvbGUubG9nKFwiW3dpdGhBZ2VudF0gTm8gYWdlbnRzIGZvdW5kLCBza2lwcGluZyBnZW5lcmF0aW9uXCIpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoIWZzLmV4aXN0c1N5bmMob3V0cHV0RGlyKSkge1xuICAgIGZzLm1rZGlyU3luYyhvdXRwdXREaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIHN0ZXAgZnVuY3Rpb25zIHRoYXQgdXNlIGR5bmFtaWMgaW1wb3J0LlxuICAgKiBEeW5hbWljIGltcG9ydCBlbnN1cmVzIHRoZSBhZ2VudCBtb2R1bGUgbG9hZHMgKGluY2x1ZGluZyBsb2FkZXItaW5qZWN0ZWQgaW5pdClcbiAgICogd2hlbiB0aGUgc3RlcCBydW5zIGluIHdvcmtmbG93IGNvbnRleHQsIGF2b2lkaW5nIHRoZSBcIm5vdCBpbml0aWFsaXplZFwiIGVycm9yLlxuICAgKlxuICAgKiBVc2VzIHVuaXF1ZUlkIGZvciBmdW5jdGlvbiBuYW1lcyB0byBoYW5kbGUgZHVwbGljYXRlIGV4cG9ydCBuYW1lcyBhY3Jvc3MgZmlsZXMuXG4gICAqL1xuICBjb25zdCBycGNGdW5jdGlvbnMgPSBhZ2VudHNcbiAgICAubWFwKChhKSA9PiB7XG4gICAgICAvLyBDYWxjdWxhdGUgcmVsYXRpdmUgcGF0aCBmcm9tIHN0ZXBzLmpzIHRvIHRoZSBhZ2VudCBmaWxlXG4gICAgICBsZXQgYWdlbnRSZWxQYXRoID0gcGF0aFxuICAgICAgICAucmVsYXRpdmUob3V0cHV0RGlyLCBhLmZpbGVQYXRoKVxuICAgICAgICAucmVwbGFjZSgvXFxcXC9nLCBcIi9cIik7XG5cbiAgICAgIGlmICghYWdlbnRSZWxQYXRoLnN0YXJ0c1dpdGgoXCIuXCIpKSB7XG4gICAgICAgIGFnZW50UmVsUGF0aCA9IGAuLyR7YWdlbnRSZWxQYXRofWA7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBgXG5leHBvcnQgY29uc3QgJHthLnVuaXF1ZUlkfVJwYyA9IGFzeW5jIChwYXJhbXMpID0+IHtcbiAgXCJ1c2Ugc3RlcFwiO1xuICBjb25zdCB7ICR7YS5leHBvcnROYW1lfSB9ID0gYXdhaXQgaW1wb3J0KFwiJHthZ2VudFJlbFBhdGh9XCIpO1xuICBjb25zdCByZXMgPSBhd2FpdCAke2EuZXhwb3J0TmFtZX0uaGFuZGxlcihwYXJhbXMpO1xuICBpZiAocmVzIGluc3RhbmNlb2YgUmVzcG9uc2UpIHtcbiAgICByZXR1cm4gcmVzLmpzb24oKTtcbiAgfVxuICByZXR1cm4gcmVzO1xufTtgO1xuICAgIH0pXG4gICAgLmpvaW4oXCJcXG5cIik7XG5cbiAgLyoqXG4gICAqIEluaXQgZnVuY3Rpb25zIHdpcmUgdXAgYWdlbnQucnBjIGluIHRoZSBtYWluIGFwcCBjb250ZXh0LlxuICAgKiBVc2VzIGV4cG9ydE5hbWUgZm9yIHRoZSBmdW5jdGlvbiBuYW1lIChsb2FkZXIgbWF0Y2hlcyBieSBleHBvcnQgbmFtZSksXG4gICAqIGJ1dCByZWZlcmVuY2VzIHVuaXF1ZUlkIGZvciB0aGUgUnBjIGZ1bmN0aW9uLlxuICAgKi9cbiAgY29uc3QgaW5pdEZ1bmN0aW9ucyA9IGFnZW50c1xuICAgIC5tYXAoXG4gICAgICAoYSkgPT4gYFxuZXhwb3J0IGZ1bmN0aW9uIF9faW5pdCR7YS5leHBvcnROYW1lWzBdLnRvVXBwZXJDYXNlKCl9JHthLmV4cG9ydE5hbWUuc2xpY2UoXG4gICAgICAgIDFcbiAgICAgICl9KGFnZW50KSB7XG4gIGFnZW50LnJwYyA9ICR7YS51bmlxdWVJZH1ScGM7XG59YFxuICAgIClcbiAgICAuam9pbihcIlxcblwiKTtcblxuICBjb25zdCBzdGVwc0NvbnRlbnQgPSBgLy8gQXV0by1nZW5lcmF0ZWQgYnkgd2l0aEFnZW50IC0gZG8gbm90IGVkaXRcbiR7cnBjRnVuY3Rpb25zfVxuJHtpbml0RnVuY3Rpb25zfVxuYDtcblxuICBjb25zdCBzdGVwc1BhdGggPSBwYXRoLmpvaW4ob3V0cHV0RGlyLCBcInN0ZXBzLmpzXCIpO1xuICBmcy53cml0ZUZpbGVTeW5jKHN0ZXBzUGF0aCwgc3RlcHNDb250ZW50KTtcblxuICAvKipcbiAgICogR2VuZXJhdGUgcm91dGUuanMgdGhhdCBpbXBvcnRzIHN0ZXBzLmpzLlxuICAgKiBUaGlzIGVuc3VyZXMgd29ya2Zsb3cgZGlzY292ZXJzIHRoZSBcInVzZSBzdGVwXCIgZnVuY3Rpb25zLlxuICAgKiBObyBhY3R1YWwgaGFuZGxlciBuZWVkZWQgLSBzdG9yYWdlIFJQQyB1c2VzIHRoZSBzdGVwIGZ1bmN0aW9uIGRpcmVjdGx5LlxuICAgKi9cbiAgY29uc3Qgcm91dGVDb250ZW50ID0gYC8vIEF1dG8tZ2VuZXJhdGVkIGJ5IHdpdGhBZ2VudCAtIHRyaWdnZXJzIHdvcmtmbG93IGRpc2NvdmVyeVxuaW1wb3J0IFwiLi9zdGVwcy5qc1wiO1xuZXhwb3J0IGZ1bmN0aW9uIEdFVCgpIHtcbiAgcmV0dXJuIG5ldyBSZXNwb25zZShcIm9rXCIpO1xufVxuYDtcblxuICBjb25zdCByb3V0ZVBhdGggPSBwYXRoLmpvaW4ob3V0cHV0RGlyLCBcInJvdXRlLmpzXCIpO1xuICBmcy53cml0ZUZpbGVTeW5jKHJvdXRlUGF0aCwgcm91dGVDb250ZW50KTtcblxuICAvLyBBZGQgLmdpdGlnbm9yZVxuICBjb25zdCBnaXRpZ25vcmVQYXRoID0gcGF0aC5qb2luKG91dHB1dERpciwgXCIuZ2l0aWdub3JlXCIpO1xuICBpZiAoIWZzLmV4aXN0c1N5bmMoZ2l0aWdub3JlUGF0aCkpIHtcbiAgICBmcy53cml0ZUZpbGVTeW5jKGdpdGlnbm9yZVBhdGgsIFwiKlxcblwiKTtcbiAgfVxuXG4gIGlmIChkZWJ1Zykge1xuICAgIGNvbnNvbGUubG9nKGBbd2l0aEFnZW50XSBHZW5lcmF0ZWQgYWdlbnQgZmlsZXMgYXQgJHtvdXRwdXREaXJ9YCk7XG4gIH1cbn1cblxudHlwZSBUdXJib3BhY2tSdWxlID0ge1xuICBsb2FkZXJzPzogc3RyaW5nW107XG4gIGNvbmRpdGlvbj86IHtcbiAgICBhbGw/OiB1bmtub3duW107XG4gICAgYW55PzogdW5rbm93bltdO1xuICAgIHBhdGg/OiBSZWdFeHA7XG4gICAgY29udGVudD86IFJlZ0V4cDtcbiAgICBub3Q/OiB1bmtub3duO1xuICB9O1xufTtcblxudHlwZSBXb3JrZmxvd0NvbmZpZ0ZuID0gKFxuICBwaGFzZTogc3RyaW5nLFxuICBjdHg6IHsgZGVmYXVsdENvbmZpZzogTmV4dENvbmZpZyB9XG4pID0+IFByb21pc2U8TmV4dENvbmZpZz47XG5cbnR5cGUgTmV4dENvbmZpZ0lucHV0ID1cbiAgfCBOZXh0Q29uZmlnXG4gIHwgKChcbiAgICAgIHBoYXNlOiBzdHJpbmcsXG4gICAgICBjdHg6IHsgZGVmYXVsdENvbmZpZzogTmV4dENvbmZpZyB9XG4gICAgKSA9PiBQcm9taXNlPE5leHRDb25maWc+KTtcblxuLyoqXG4gKiBOZXh0LmpzIHBsdWdpbiB0aGF0IGNvbmZpZ3VyZXMgYWdlbnQgc3VwcG9ydC5cbiAqXG4gKiAtIERldGVjdHMgYWdlbnRzIGFuZCBnZW5lcmF0ZXMgUlBDIHN0ZXBzIHdpdGggXCJ1c2Ugc3RlcFwiIGluIC53ZWxsLWtub3duL2FnZW50L3YxL1xuICogLSBHZW5lcmF0ZXMgQUdFTlRfU0VDUkVUIGZvciBzZWN1cmUgUlBDIGNhbGxzXG4gKiAtIFdyYXBzIHdpdGhXb3JrZmxvdyBmb3Igd29ya2Zsb3cgc3VwcG9ydFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogLy8gbmV4dC5jb25maWcudHNcbiAqIGltcG9ydCB7IHdpdGhBZ2VudCB9IGZyb20gXCJleHBlcmltZW50YWwtYWdlbnQvbmV4dFwiO1xuICpcbiAqIC8vIE9wdGlvbiAxOiB3aXRoQWdlbnQgaGFuZGxlcyBldmVyeXRoaW5nIChyZWNvbW1lbmRlZClcbiAqIGV4cG9ydCBkZWZhdWx0IHdpdGhBZ2VudCh7fSk7XG4gKlxuICogLy8gT3B0aW9uIDI6IENvbXBvc2Ugd2l0aCBvdGhlciBwbHVnaW5zXG4gKiBleHBvcnQgZGVmYXVsdCB3aXRoQWdlbnQod2l0aFNvbWVPdGhlclBsdWdpbih7fSkpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aXRoQWdlbnQoXG4gIGNvbmZpZ09yRm46IE5leHRDb25maWdJbnB1dCxcbiAgYWdlbnRDb25maWc/OiBXaXRoQWdlbnRDb25maWdcbik6IFdvcmtmbG93Q29uZmlnRm4ge1xuICBjb25zdCBkZWJ1ZyA9IGFnZW50Q29uZmlnPy5kZWJ1ZyA/PyBmYWxzZTtcbiAgY29uc3QgY3dkID0gcHJvY2Vzcy5jd2QoKTtcblxuICAvLyBEZXRlY3QgYXBwIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgKHNyYy9hcHAgdnMgYXBwKVxuICBjb25zdCBhcHBEaXIgPSBnZXRBcHBEaXIoY3dkKTtcbiAgY29uc3QgYWdlbnREaXIgPSBgJHthcHBEaXJ9Ly53ZWxsLWtub3duL2FnZW50LyR7QUdFTlRfUFJPVE9DT0xfVkVSU0lPTn1gO1xuXG4gIC8vIERldGVjdCBhZ2VudHMgYW5kIGdlbmVyYXRlIGZpbGVzIEZJUlNUIChiZWZvcmUgd29ya2Zsb3cgZGlzY292ZXJzIHRoZW0pXG4gIGNvbnN0IGFnZW50cyA9IGRldGVjdEFnZW50cyhjd2QsIGRlYnVnKTtcbiAgY29uc3Qgb3V0cHV0RGlyID0gcGF0aC5qb2luKGN3ZCwgYWdlbnREaXIpO1xuICBnZW5lcmF0ZUFnZW50RmlsZXMoYWdlbnRzLCBvdXRwdXREaXIsIGN3ZCwgZGVidWcpO1xuXG4gIGNvbnN0IGFnZW50RmlsZVBhdGhzID0gYWdlbnRzLm1hcCgoYSkgPT4gYS5maWxlUGF0aCk7XG4gIGNvbnN0IGxvYWRlclBhdGggPSByZXF1aXJlLnJlc29sdmUoXCIuL25leHQvbG9hZGVyXCIpO1xuXG4gIGlmIChkZWJ1Zykge1xuICAgIGNvbnNvbGUubG9nKFwiW3dpdGhBZ2VudF0gbG9hZGVyIHBhdGg6XCIsIGxvYWRlclBhdGgpO1xuICAgIGNvbnNvbGUubG9nKFwiW3dpdGhBZ2VudF0gYWdlbnQgZmlsZXM6XCIsIGFnZW50RmlsZVBhdGhzKTtcbiAgICBjb25zb2xlLmxvZyhcIlt3aXRoQWdlbnRdIGFnZW50IGRpcjpcIiwgYWdlbnREaXIpO1xuICB9XG5cbiAgLy8gQnVpbGQgcmVnZXggdG8gbWF0Y2ggYWdlbnQgZmlsZSBwYXRoc1xuICBjb25zdCBhZ2VudFBhdGhSZWdleCA9XG4gICAgYWdlbnRGaWxlUGF0aHMubGVuZ3RoID4gMFxuICAgICAgPyBuZXcgUmVnRXhwKFxuICAgICAgICAgIGAke2FnZW50RmlsZVBhdGhzXG4gICAgICAgICAgICAubWFwKChwKSA9PlxuICAgICAgICAgICAgICBwYXRoXG4gICAgICAgICAgICAgICAgLnJlbGF0aXZlKGN3ZCwgcClcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxcXC9nLCBcIi9cIilcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xcXVxcXFxdL2csIFwiXFxcXCQmXCIpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuam9pbihcInxcIil9JGBcbiAgICAgICAgKVxuICAgICAgOiBudWxsO1xuXG4gIC8qKlxuICAgKiBBbHdheXMgcGFzcyB0aHJvdWdoIHdpdGhXb3JrZmxvdyAtIGl0IGhhbmRsZXMgYm90aCBOZXh0Q29uZmlnIGFuZCBhc3luYyBmdW5jdGlvbnMuXG4gICAqIFRoaXMgZW5zdXJlcyB3b3JrZmxvdyBpcyBhbHdheXMgY29uZmlndXJlZCwgcmVnYXJkbGVzcyBvZiB3aGF0IHRoZSB1c2VyIHBhc3NlZC5cbiAgICovXG4gIGxldCB3aXRoV29ya2Zsb3c6IChcbiAgICBjb25maWc6IE5leHRDb25maWdJbnB1dCxcbiAgICBvcHRpb25zPzogeyB3b3JrZmxvd3M/OiB7IGRpcnM/OiBzdHJpbmdbXSB9IH1cbiAgKSA9PiBXb3JrZmxvd0NvbmZpZ0ZuO1xuICB0cnkge1xuICAgIHdpdGhXb3JrZmxvdyA9IHJlcXVpcmUoXCJ3b3JrZmxvdy9uZXh0XCIpLndpdGhXb3JrZmxvdztcbiAgfSBjYXRjaCB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgXCJbd2l0aEFnZW50XSB3b3JrZmxvdy9uZXh0IG5vdCBmb3VuZC4gTWFrZSBzdXJlIHdvcmtmbG93IGlzIGluc3RhbGxlZC5cIlxuICAgICk7XG4gICAgcmV0dXJuIHR5cGVvZiBjb25maWdPckZuID09PSBcImZ1bmN0aW9uXCJcbiAgICAgID8gY29uZmlnT3JGblxuICAgICAgOiBhc3luYyAoKSA9PiBjb25maWdPckZuO1xuICB9XG5cbiAgY29uc3QgYmFzZUNvbmZpZ0ZuID0gd2l0aFdvcmtmbG93KGNvbmZpZ09yRm4sIHtcbiAgICB3b3JrZmxvd3M6IHtcbiAgICAgIGRpcnM6IFsuLi5ERUZBVUxUX1dPUktGTE9XX0RJUlMsIGFnZW50RGlyXSxcbiAgICB9LFxuICB9KTtcblxuICAvKipcbiAgICogUmV0dXJuIGEgd3JhcHBlciB0aGF0IHJ1bnMgQUZURVIgd29ya2Zsb3cgcHJvY2Vzc2VzLCB0aGVuIGFkZHMgb3VyIGxvYWRlci5cbiAgICogVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSB3b3JrZmxvdyBvdmVyd3JpdGVzIHR1cmJvcGFjayBydWxlcyAtIHdlIG5lZWQgdG9cbiAgICogbW9kaWZ5IHRoZW0gYWZ0ZXIgd29ya2Zsb3cgaXMgZG9uZS5cbiAgICovXG4gIHJldHVybiBhc3luYyAocGhhc2UsIGN0eCkgPT4ge1xuICAgIGNvbnN0IG5leHRDb25maWcgPSBhd2FpdCBiYXNlQ29uZmlnRm4ocGhhc2UsIGN0eCk7XG5cbiAgICAvLyBTZXQgdXAgQUdFTlRfU0VDUkVUIGlmIG5vdCBhbHJlYWR5IHNldFxuICAgIGlmICghcHJvY2Vzcy5lbnYuQUdFTlRfU0VDUkVUKSB7XG4gICAgICBuZXh0Q29uZmlnLmVudiA9IHtcbiAgICAgICAgLi4ubmV4dENvbmZpZy5lbnYsXG4gICAgICAgIEFHRU5UX1NFQ1JFVDogY3J5cHRvLnJhbmRvbVVVSUQoKSxcbiAgICAgIH07XG4gICAgICBpZiAoZGVidWcpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJbd2l0aEFnZW50XSBHZW5lcmF0ZWQgQUdFTlRfU0VDUkVUXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghYWdlbnRQYXRoUmVnZXggfHwgYWdlbnRGaWxlUGF0aHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbmV4dENvbmZpZztcbiAgICB9XG5cbiAgICAvLyBNb2RpZnkgdHVyYm9wYWNrIHJ1bGVzIHRvIGluY2x1ZGUgb3VyIGxvYWRlciBmb3IgYWdlbnQgZmlsZXNcbiAgICBjb25zdCBydWxlcyA9IChuZXh0Q29uZmlnLnR1cmJvcGFjaz8ucnVsZXMgfHwge30pIGFzIFJlY29yZDxcbiAgICAgIHN0cmluZyxcbiAgICAgIFR1cmJvcGFja1J1bGVcbiAgICA+O1xuXG4gICAgZm9yIChjb25zdCBrZXkgb2YgW1wiKi50c1wiLCBcIioudHN4XCIsIFwiKi5qc1wiLCBcIiouanN4XCJdKSB7XG4gICAgICBjb25zdCBleGlzdGluZ1J1bGUgPSBydWxlc1trZXldO1xuICAgICAgaWYgKCFleGlzdGluZ1J1bGUpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8qKlxuICAgICAgICogV29ya2Zsb3cncyBydWxlIGhhczogY29uZGl0aW9uLmFsbCA9IFt7IG5vdDogcGF0aCB9LCB7IGNvbnRlbnQ6IC91c2Ugc3RlcHwuLi4vIH1dXG4gICAgICAgKiBXZSB3YW50OiBydW4gbG9hZGVyIGlmIHdvcmtmbG93J3MgY29uZGl0aW9ucyBtYXRjaCBPUiBpdCdzIGFuIGFnZW50IGZpbGUuXG4gICAgICAgKiBTbyB3ZSB3cmFwIGluOiBjb25kaXRpb24uYW55ID0gW2V4aXN0aW5nQ29uZGl0aW9uLCB7IHBhdGg6IGFnZW50UGF0aFJlZ2V4IH1dXG4gICAgICAgKi9cbiAgICAgIHJ1bGVzW2tleV0gPSB7XG4gICAgICAgIC4uLmV4aXN0aW5nUnVsZSxcbiAgICAgICAgbG9hZGVyczogW2xvYWRlclBhdGgsIC4uLihleGlzdGluZ1J1bGUubG9hZGVycyB8fCBbXSldLFxuICAgICAgICBjb25kaXRpb246IHtcbiAgICAgICAgICBhbnk6IFtleGlzdGluZ1J1bGUuY29uZGl0aW9uLCB7IHBhdGg6IGFnZW50UGF0aFJlZ2V4IH1dLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBBbHNvIGNvbmZpZ3VyZSB3ZWJwYWNrIGZvciBub24tdHVyYm9wYWNrIGJ1aWxkc1xuICAgIGNvbnN0IGV4aXN0aW5nV2VicGFjayA9IG5leHRDb25maWcud2VicGFjaztcbiAgICBuZXh0Q29uZmlnLndlYnBhY2sgPSAod2VicGFja0NvbmZpZywgY29udGV4dCkgPT4ge1xuICAgICAgd2VicGFja0NvbmZpZy5tb2R1bGUucnVsZXMucHVzaCh7XG4gICAgICAgIHRlc3Q6IChyZXNvdXJjZVBhdGg6IHN0cmluZykgPT4gYWdlbnRGaWxlUGF0aHMuaW5jbHVkZXMocmVzb3VyY2VQYXRoKSxcbiAgICAgICAgdXNlOiBbeyBsb2FkZXI6IGxvYWRlclBhdGggfV0sXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBleGlzdGluZ1dlYnBhY2s/Lih3ZWJwYWNrQ29uZmlnLCBjb250ZXh0KSA/PyB3ZWJwYWNrQ29uZmlnO1xuICAgIH07XG5cbiAgICBpZiAoZGVidWcpIHtcbiAgICAgIGNvbnNvbGUubG9nKFwiW3dpdGhBZ2VudF0gQWRkZWQgYWdlbnQgbG9hZGVyIHRvIHR1cmJvcGFjayBydWxlc1wiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV4dENvbmZpZztcbiAgfTtcbn1cbiIsICJ7XG4gIFwibmFtZVwiOiBcImV4cGVyaW1lbnRhbC1hZ2VudFwiLFxuICBcInZlcnNpb25cIjogXCIwLjAuNFwiLFxuICBcIm1haW5cIjogXCIuL2Rpc3QvaW5kZXguanNcIixcbiAgXCJtb2R1bGVcIjogXCIuL2Rpc3QvaW5kZXgubWpzXCIsXG4gIFwidHlwZXNcIjogXCIuL2Rpc3QvaW5kZXguZC50c1wiLFxuICBcInNpZGVFZmZlY3RzXCI6IHRydWUsXG4gIFwibGljZW5zZVwiOiBcIk1JVFwiLFxuICBcImZpbGVzXCI6IFtcbiAgICBcImRpc3QvKipcIlxuICBdLFxuICBcImV4cG9ydHNcIjoge1xuICAgIFwiLlwiOiB7XG4gICAgICBcInR5cGVzXCI6IFwiLi9kaXN0L2luZGV4LmQudHNcIixcbiAgICAgIFwiaW1wb3J0XCI6IFwiLi9kaXN0L2luZGV4Lm1qc1wiLFxuICAgICAgXCJyZXF1aXJlXCI6IFwiLi9kaXN0L2luZGV4LmpzXCJcbiAgICB9LFxuICAgIFwiLi9uZXh0XCI6IHtcbiAgICAgIFwidHlwZXNcIjogXCIuL2Rpc3QvbmV4dC5kLnRzXCIsXG4gICAgICBcImltcG9ydFwiOiBcIi4vZGlzdC9uZXh0Lm1qc1wiLFxuICAgICAgXCJyZXF1aXJlXCI6IFwiLi9kaXN0L25leHQuanNcIlxuICAgIH0sXG4gICAgXCIuL25leHQvbG9hZGVyXCI6IHtcbiAgICAgIFwidHlwZXNcIjogXCIuL2Rpc3QvbmV4dC9sb2FkZXIuZC50c1wiLFxuICAgICAgXCJpbXBvcnRcIjogXCIuL2Rpc3QvbmV4dC9sb2FkZXIubWpzXCIsXG4gICAgICBcInJlcXVpcmVcIjogXCIuL2Rpc3QvbmV4dC9sb2FkZXIuanNcIlxuICAgIH0sXG4gICAgXCIuL2NsaWVudFwiOiB7XG4gICAgICBcInR5cGVzXCI6IFwiLi9kaXN0L2NsaWVudC5kLnRzXCIsXG4gICAgICBcImltcG9ydFwiOiBcIi4vZGlzdC9jbGllbnQubWpzXCIsXG4gICAgICBcInJlcXVpcmVcIjogXCIuL2Rpc3QvY2xpZW50LmpzXCJcbiAgICB9XG4gIH0sXG4gIFwic2NyaXB0c1wiOiB7XG4gICAgXCJidWlsZFwiOiBcInRzdXBcIixcbiAgICBcImRldlwiOiBcInRzdXAgLS13YXRjaFwiLFxuICAgIFwiY2xlYW5cIjogXCJybSAtcmYgLnR1cmJvICYmIHJtIC1yZiBub2RlX21vZHVsZXMgJiYgcm0gLXJmIGRpc3RcIixcbiAgICBcInJlbGVhc2VcIjogXCJwbnBtIGJ1aWxkICYmIG5wbSBwdWJsaXNoXCIsXG4gICAgXCJ0eXBlY2hlY2tcIjogXCJ0c2MgLS1ub0VtaXRcIixcbiAgICBcInRlc3RcIjogXCJ2aXRlc3QgcnVuXCIsXG4gICAgXCJ0ZXN0OndhdGNoXCI6IFwidml0ZXN0XCJcbiAgfSxcbiAgXCJkZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiQGhvbm8vbm9kZS1zZXJ2ZXJcIjogXCJeMS4xOS45XCIsXG4gICAgXCJAc3djL2NvcmVcIjogXCJeMS4xMC4wXCIsXG4gICAgXCJAdmVyY2VsL29pZGNcIjogXCJeMy4xLjBcIixcbiAgICBcImJldHRlci1hbGxcIjogXCJeMC4wLjVcIixcbiAgICBcImVycm9yZVwiOiBcIl4wLjguMlwiLFxuICAgIFwiZmFzdC1kZWVwLWVxdWFsXCI6IFwiXjMuMS4zXCIsXG4gICAgXCJnbG9iXCI6IFwiXjExLjAuMFwiLFxuICAgIFwiaG9ub1wiOiBcIl40LjExLjZcIixcbiAgICBcInNhbmRib3hcIjogXCJeMS4wLjE4XCIsXG4gICAgXCJ1bGlkXCI6IFwiXjMuMC4yXCIsXG4gICAgXCJ6b2RcIjogXCJeNC4zLjZcIlxuICB9LFxuICBcImRldkRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJAYWdlbnQvdHNjb25maWdcIjogXCJ3b3Jrc3BhY2U6KlwiLFxuICAgIFwiQHR5cGVzL25vZGVcIjogXCJeMjAuMTEuMjRcIixcbiAgICBcImRvdGVudlwiOiBcIl4xNy4yLjNcIixcbiAgICBcIm5leHRcIjogXCJeMTYuMC4wXCIsXG4gICAgXCJ0c3VwXCI6IFwiXjguMC4yXCIsXG4gICAgXCJ0eXBlLWZlc3RcIjogXCJeNS40LjJcIixcbiAgICBcInR5cGVzY3JpcHRcIjogXCI1LjUuNFwiLFxuICAgIFwidml0ZXN0XCI6IFwiXjMuMC4wXCJcbiAgfSxcbiAgXCJwZWVyRGVwZW5kZW5jaWVzXCI6IHtcbiAgICBcImFpXCI6IFwiXjYuMC4wXCIsXG4gICAgXCJ3b3JrZmxvd1wiOiBcImh0dHBzOi8vd29ya2Zsb3ctZG9jcy03ZXZ1cGI2NGQudmVyY2VsLnNoL3dvcmtmbG93LnRnelwiXG4gIH0sXG4gIFwicHVibGlzaENvbmZpZ1wiOiB7XG4gICAgXCJhY2Nlc3NcIjogXCJwdWJsaWNcIlxuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsYUFBd0I7QUFDeEIsU0FBb0I7QUFDcEIsV0FBc0I7OztBQ0Z0QjtBQUFBLEVBQ0UsTUFBUTtBQUFBLEVBQ1IsU0FBVztBQUFBLEVBQ1gsTUFBUTtBQUFBLEVBQ1IsUUFBVTtBQUFBLEVBQ1YsT0FBUztBQUFBLEVBQ1QsYUFBZTtBQUFBLEVBQ2YsU0FBVztBQUFBLEVBQ1gsT0FBUztBQUFBLElBQ1A7QUFBQSxFQUNGO0FBQUEsRUFDQSxTQUFXO0FBQUEsSUFDVCxLQUFLO0FBQUEsTUFDSCxPQUFTO0FBQUEsTUFDVCxRQUFVO0FBQUEsTUFDVixTQUFXO0FBQUEsSUFDYjtBQUFBLElBQ0EsVUFBVTtBQUFBLE1BQ1IsT0FBUztBQUFBLE1BQ1QsUUFBVTtBQUFBLE1BQ1YsU0FBVztBQUFBLElBQ2I7QUFBQSxJQUNBLGlCQUFpQjtBQUFBLE1BQ2YsT0FBUztBQUFBLE1BQ1QsUUFBVTtBQUFBLE1BQ1YsU0FBVztBQUFBLElBQ2I7QUFBQSxJQUNB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
334
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL25leHQvaW5kZXgudHMiLCAiLi4vcGFja2FnZS5qc29uIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgKiBhcyBjcnlwdG8gZnJvbSBcIm5vZGU6Y3J5cHRvXCI7XG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgdHlwZSB7IE5leHRDb25maWcgfSBmcm9tIFwibmV4dFwiO1xuaW1wb3J0IHBrZyBmcm9tIFwiLi4vLi4vcGFja2FnZS5qc29uXCI7XG5cbmV4cG9ydCB0eXBlIFdpdGhBZ2VudENvbmZpZyA9IHtcbiAgLyoqIEVuYWJsZSBkZWJ1ZyBsb2dnaW5nICovXG4gIGRlYnVnPzogYm9vbGVhbjtcbn07XG5cbmNvbnN0IFBBQ0tBR0VfTkFNRSA9IHBrZy5uYW1lO1xuY29uc3QgQUdFTlRfUFJPVE9DT0xfVkVSU0lPTiA9IFwidjFcIjtcbmNvbnN0IEZJTEVfRVhUX1JFR0VYID0gL1xcLih0c3x0c3h8anN8anN4KSQvO1xuY29uc3QgQUdFTlRfRVhQT1JUX1JFR0VYID0gL2V4cG9ydFxccytjb25zdFxccysoXFx3KylcXHMqPVxccyphZ2VudFxccypcXCgvZztcbmNvbnN0IERFRkFVTFRfV09SS0ZMT1dfRElSUyA9IFtcInBhZ2VzXCIsIFwiYXBwXCIsIFwic3JjL3BhZ2VzXCIsIFwic3JjL2FwcFwiXTtcblxudHlwZSBEZXRlY3RlZEFnZW50ID0ge1xuICBleHBvcnROYW1lOiBzdHJpbmc7XG4gIGZpbGVQYXRoOiBzdHJpbmc7XG4gIC8qKiBVbmlxdWUgaWRlbnRpZmllcjogZXhwb3J0TmFtZSBvciBleHBvcnROYW1lX2hhc2ggaWYgZHVwbGljYXRlcyBleGlzdCAqL1xuICB1bmlxdWVJZDogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gc2hvcnRIYXNoKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgbGV0IGhhc2ggPSAwO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGNoYXIgPSBzdHIuY2hhckNvZGVBdChpKTtcbiAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vQml0d2lzZU9wZXJhdG9yczogaW50ZW50aW9uYWwgaGFzaCBjb21wdXRhdGlvblxuICAgIGhhc2ggPSAoaGFzaCA8PCA1KSAtIGhhc2ggKyBjaGFyO1xuICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9CaXR3aXNlT3BlcmF0b3JzOiBjb252ZXJ0IHRvIDMyLWJpdCBpbnRlZ2VyXG4gICAgaGFzaCAmPSBoYXNoO1xuICB9XG4gIHJldHVybiBNYXRoLmFicyhoYXNoKS50b1N0cmluZygzNikuc2xpY2UoMCwgNik7XG59XG5cbi8qKlxuICogRGV0ZWN0cyB3aGV0aGVyIHRoZSBwcm9qZWN0IHVzZXMgc3JjL2FwcCBvciBhcHAgZGlyZWN0b3J5IHN0cnVjdHVyZS5cbiAqIFJldHVybnMgdGhlIGFwcCBkaXJlY3RvcnkgcGF0aCByZWxhdGl2ZSB0byBjd2QuXG4gKi9cbmZ1bmN0aW9uIGdldEFwcERpcihjd2Q6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHNyY0FwcERpciA9IHBhdGguam9pbihjd2QsIFwic3JjXCIsIFwiYXBwXCIpO1xuICBpZiAoZnMuZXhpc3RzU3luYyhzcmNBcHBEaXIpKSB7XG4gICAgcmV0dXJuIFwic3JjL2FwcFwiO1xuICB9XG4gIHJldHVybiBcImFwcFwiO1xufVxuXG4vKipcbiAqIFNjYW5zIGZvciBhZ2VudCBleHBvcnRzIGluIHRoZSBwcm9qZWN0LlxuICovXG5mdW5jdGlvbiBkZXRlY3RBZ2VudHMoY3dkOiBzdHJpbmcsIGRlYnVnOiBib29sZWFuKTogRGV0ZWN0ZWRBZ2VudFtdIHtcbiAgY29uc3QgYWdlbnRzOiBEZXRlY3RlZEFnZW50W10gPSBbXTtcblxuICBjb25zdCBkaXJzVG9TY2FuID0gW3BhdGguam9pbihjd2QsIFwic3JjXCIpLCBjd2RdO1xuXG4gIGZ1bmN0aW9uIHNjYW5EaXIoZGlyOiBzdHJpbmcpIHtcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMoZGlyKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGVudHJpZXMgPSBmcy5yZWFkZGlyU3luYyhkaXIsIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KTtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5qb2luKGRpciwgZW50cnkubmFtZSk7XG4gICAgICBpZiAoXG4gICAgICAgIGVudHJ5LmlzRGlyZWN0b3J5KCkgJiZcbiAgICAgICAgIWVudHJ5Lm5hbWUuc3RhcnRzV2l0aChcIi5cIikgJiZcbiAgICAgICAgZW50cnkubmFtZSAhPT0gXCJub2RlX21vZHVsZXNcIiAmJlxuICAgICAgICBlbnRyeS5uYW1lICE9PSBcInNyY1wiXG4gICAgICApIHtcbiAgICAgICAgc2NhbkRpcihmdWxsUGF0aCk7XG4gICAgICB9IGVsc2UgaWYgKGVudHJ5LmlzRmlsZSgpICYmIEZJTEVfRVhUX1JFR0VYLnRlc3QoZW50cnkubmFtZSkpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKGZ1bGxQYXRoLCBcInV0Zi04XCIpO1xuICAgICAgICAgIGlmIChjb250ZW50LmluY2x1ZGVzKFBBQ0tBR0VfTkFNRSkgJiYgY29udGVudC5pbmNsdWRlcyhcImFnZW50KFwiKSkge1xuICAgICAgICAgICAgY29uc3QgZXhwb3J0TWF0Y2hlcyA9IGNvbnRlbnQubWF0Y2hBbGwoQUdFTlRfRVhQT1JUX1JFR0VYKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgbWF0Y2ggb2YgZXhwb3J0TWF0Y2hlcykge1xuICAgICAgICAgICAgICBhZ2VudHMucHVzaCh7XG4gICAgICAgICAgICAgICAgZXhwb3J0TmFtZTogbWF0Y2hbMV0sXG4gICAgICAgICAgICAgICAgZmlsZVBhdGg6IGZ1bGxQYXRoLFxuICAgICAgICAgICAgICAgIHVuaXF1ZUlkOiBcIlwiLCAvLyBXaWxsIGJlIHNldCBhZnRlciBhbGwgYWdlbnRzIGFyZSBmb3VuZFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgaWYgKGRlYnVnKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICBgW3dpdGhBZ2VudF0gRm91bmQgYWdlbnQ6ICR7bWF0Y2hbMV19IGluICR7ZnVsbFBhdGh9YFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIC8vIElnbm9yZSByZWFkIGVycm9yc1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBkaXIgb2YgZGlyc1RvU2Nhbikge1xuICAgIHNjYW5EaXIoZGlyKTtcbiAgfVxuXG4gIC8vIEFzc2lnbiB1bmlxdWUgSURzIC0gYWRkIGhhc2ggc3VmZml4IGlmIGR1cGxpY2F0ZSBleHBvcnQgbmFtZXMgZXhpc3RcbiAgY29uc3QgbmFtZUNvdW50cyA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG4gIGZvciAoY29uc3QgYWdlbnQgb2YgYWdlbnRzKSB7XG4gICAgbmFtZUNvdW50cy5zZXQoXG4gICAgICBhZ2VudC5leHBvcnROYW1lLFxuICAgICAgKG5hbWVDb3VudHMuZ2V0KGFnZW50LmV4cG9ydE5hbWUpIHx8IDApICsgMVxuICAgICk7XG4gIH1cblxuICBmb3IgKGNvbnN0IGFnZW50IG9mIGFnZW50cykge1xuICAgIGNvbnN0IGNvdW50ID0gbmFtZUNvdW50cy5nZXQoYWdlbnQuZXhwb3J0TmFtZSkgPz8gMDtcbiAgICBpZiAoY291bnQgPiAxKSB7XG4gICAgICBhZ2VudC51bmlxdWVJZCA9IGAke2FnZW50LmV4cG9ydE5hbWV9XyR7c2hvcnRIYXNoKGFnZW50LmZpbGVQYXRoKX1gO1xuICAgIH0gZWxzZSB7XG4gICAgICBhZ2VudC51bmlxdWVJZCA9IGFnZW50LmV4cG9ydE5hbWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGFnZW50cztcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgYWxsIGFnZW50IGZpbGVzIGluIC53ZWxsLWtub3duL2FnZW50L3YxLzpcbiAqIC0gc3RlcHMuanM6IFJQQyBzdGVwIGZ1bmN0aW9ucyB3aXRoIFwidXNlIHN0ZXBcIlxuICogLSByb3V0ZS5qczogdHJpZ2dlcnMgd29ya2Zsb3cgZGlzY292ZXJ5XG4gKi9cbmZ1bmN0aW9uIGdlbmVyYXRlQWdlbnRGaWxlcyhcbiAgYWdlbnRzOiBEZXRlY3RlZEFnZW50W10sXG4gIG91dHB1dERpcjogc3RyaW5nLFxuICBfY3dkOiBzdHJpbmcsXG4gIGRlYnVnOiBib29sZWFuXG4pOiB2b2lkIHtcbiAgaWYgKGFnZW50cy5sZW5ndGggPT09IDApIHtcbiAgICBpZiAoZGVidWcpIHtcbiAgICAgIGNvbnNvbGUubG9nKFwiW3dpdGhBZ2VudF0gTm8gYWdlbnRzIGZvdW5kLCBza2lwcGluZyBnZW5lcmF0aW9uXCIpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoIWZzLmV4aXN0c1N5bmMob3V0cHV0RGlyKSkge1xuICAgIGZzLm1rZGlyU3luYyhvdXRwdXREaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIHN0ZXAgZnVuY3Rpb25zIHRoYXQgdXNlIGR5bmFtaWMgaW1wb3J0LlxuICAgKiBEeW5hbWljIGltcG9ydCBlbnN1cmVzIHRoZSBhZ2VudCBtb2R1bGUgbG9hZHMgKGluY2x1ZGluZyBsb2FkZXItaW5qZWN0ZWQgaW5pdClcbiAgICogd2hlbiB0aGUgc3RlcCBydW5zIGluIHdvcmtmbG93IGNvbnRleHQsIGF2b2lkaW5nIHRoZSBcIm5vdCBpbml0aWFsaXplZFwiIGVycm9yLlxuICAgKlxuICAgKiBVc2VzIHVuaXF1ZUlkIGZvciBmdW5jdGlvbiBuYW1lcyB0byBoYW5kbGUgZHVwbGljYXRlIGV4cG9ydCBuYW1lcyBhY3Jvc3MgZmlsZXMuXG4gICAqL1xuICBjb25zdCBycGNGdW5jdGlvbnMgPSBhZ2VudHNcbiAgICAubWFwKChhKSA9PiB7XG4gICAgICAvLyBDYWxjdWxhdGUgcmVsYXRpdmUgcGF0aCBmcm9tIHN0ZXBzLmpzIHRvIHRoZSBhZ2VudCBmaWxlXG4gICAgICBsZXQgYWdlbnRSZWxQYXRoID0gcGF0aFxuICAgICAgICAucmVsYXRpdmUob3V0cHV0RGlyLCBhLmZpbGVQYXRoKVxuICAgICAgICAucmVwbGFjZSgvXFxcXC9nLCBcIi9cIik7XG5cbiAgICAgIGlmICghYWdlbnRSZWxQYXRoLnN0YXJ0c1dpdGgoXCIuXCIpKSB7XG4gICAgICAgIGFnZW50UmVsUGF0aCA9IGAuLyR7YWdlbnRSZWxQYXRofWA7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBgXG5leHBvcnQgY29uc3QgJHthLnVuaXF1ZUlkfVJwYyA9IGFzeW5jIChwYXJhbXMpID0+IHtcbiAgXCJ1c2Ugc3RlcFwiO1xuICBjb25zdCB7ICR7YS5leHBvcnROYW1lfSB9ID0gYXdhaXQgaW1wb3J0KFwiJHthZ2VudFJlbFBhdGh9XCIpO1xuICBjb25zdCByZXMgPSBhd2FpdCAke2EuZXhwb3J0TmFtZX0uaGFuZGxlcihwYXJhbXMpO1xuICBpZiAocmVzIGluc3RhbmNlb2YgUmVzcG9uc2UpIHtcbiAgICByZXR1cm4gcmVzLmpzb24oKTtcbiAgfVxuICByZXR1cm4gcmVzO1xufTtgO1xuICAgIH0pXG4gICAgLmpvaW4oXCJcXG5cIik7XG5cbiAgLyoqXG4gICAqIEluaXQgZnVuY3Rpb25zIHdpcmUgdXAgYWdlbnQucnBjIGluIHRoZSBtYWluIGFwcCBjb250ZXh0LlxuICAgKiBVc2VzIGV4cG9ydE5hbWUgZm9yIHRoZSBmdW5jdGlvbiBuYW1lIChsb2FkZXIgbWF0Y2hlcyBieSBleHBvcnQgbmFtZSksXG4gICAqIGJ1dCByZWZlcmVuY2VzIHVuaXF1ZUlkIGZvciB0aGUgUnBjIGZ1bmN0aW9uLlxuICAgKi9cbiAgY29uc3QgaW5pdEZ1bmN0aW9ucyA9IGFnZW50c1xuICAgIC5tYXAoXG4gICAgICAoYSkgPT4gYFxuZXhwb3J0IGZ1bmN0aW9uIF9faW5pdCR7YS5leHBvcnROYW1lWzBdLnRvVXBwZXJDYXNlKCl9JHthLmV4cG9ydE5hbWUuc2xpY2UoXG4gICAgICAgIDFcbiAgICAgICl9KGFnZW50KSB7XG4gIGFnZW50LnJwYyA9ICR7YS51bmlxdWVJZH1ScGM7XG4gIHJlZ2lzdGVyUnBjKGFnZW50Ll9hZ2VudE5hbWUsICR7YS51bmlxdWVJZH1ScGMpO1xufWBcbiAgICApXG4gICAgLmpvaW4oXCJcXG5cIik7XG5cbiAgY29uc3Qgc3RlcHNDb250ZW50ID0gYC8vIEF1dG8tZ2VuZXJhdGVkIGJ5IHdpdGhBZ2VudCAtIGRvIG5vdCBlZGl0XG5pbXBvcnQgeyByZWdpc3RlclJwYyB9IGZyb20gXCJleHBlcmltZW50YWwtYWdlbnRcIjtcbiR7cnBjRnVuY3Rpb25zfVxuJHtpbml0RnVuY3Rpb25zfVxuYDtcblxuICBjb25zdCBzdGVwc1BhdGggPSBwYXRoLmpvaW4ob3V0cHV0RGlyLCBcInN0ZXBzLmpzXCIpO1xuICBmcy53cml0ZUZpbGVTeW5jKHN0ZXBzUGF0aCwgc3RlcHNDb250ZW50KTtcblxuICAvKipcbiAgICogR2VuZXJhdGUgcm91dGUuanMgdGhhdCBpbXBvcnRzIHN0ZXBzLmpzLlxuICAgKiBUaGlzIGVuc3VyZXMgd29ya2Zsb3cgZGlzY292ZXJzIHRoZSBcInVzZSBzdGVwXCIgZnVuY3Rpb25zLlxuICAgKiBObyBhY3R1YWwgaGFuZGxlciBuZWVkZWQgLSBzdG9yYWdlIFJQQyB1c2VzIHRoZSBzdGVwIGZ1bmN0aW9uIGRpcmVjdGx5LlxuICAgKi9cbiAgY29uc3Qgcm91dGVDb250ZW50ID0gYC8vIEF1dG8tZ2VuZXJhdGVkIGJ5IHdpdGhBZ2VudCAtIHRyaWdnZXJzIHdvcmtmbG93IGRpc2NvdmVyeVxuaW1wb3J0IFwiLi9zdGVwcy5qc1wiO1xuZXhwb3J0IGZ1bmN0aW9uIEdFVCgpIHtcbiAgcmV0dXJuIG5ldyBSZXNwb25zZShcIm9rXCIpO1xufVxuYDtcblxuICBjb25zdCByb3V0ZVBhdGggPSBwYXRoLmpvaW4ob3V0cHV0RGlyLCBcInJvdXRlLmpzXCIpO1xuICBmcy53cml0ZUZpbGVTeW5jKHJvdXRlUGF0aCwgcm91dGVDb250ZW50KTtcblxuICAvLyBBZGQgLmdpdGlnbm9yZVxuICBjb25zdCBnaXRpZ25vcmVQYXRoID0gcGF0aC5qb2luKG91dHB1dERpciwgXCIuZ2l0aWdub3JlXCIpO1xuICBpZiAoIWZzLmV4aXN0c1N5bmMoZ2l0aWdub3JlUGF0aCkpIHtcbiAgICBmcy53cml0ZUZpbGVTeW5jKGdpdGlnbm9yZVBhdGgsIFwiKlxcblwiKTtcbiAgfVxuXG4gIGlmIChkZWJ1Zykge1xuICAgIGNvbnNvbGUubG9nKGBbd2l0aEFnZW50XSBHZW5lcmF0ZWQgYWdlbnQgZmlsZXMgYXQgJHtvdXRwdXREaXJ9YCk7XG4gIH1cbn1cblxudHlwZSBUdXJib3BhY2tSdWxlID0ge1xuICBsb2FkZXJzPzogc3RyaW5nW107XG4gIGNvbmRpdGlvbj86IHtcbiAgICBhbGw/OiB1bmtub3duW107XG4gICAgYW55PzogdW5rbm93bltdO1xuICAgIHBhdGg/OiBSZWdFeHA7XG4gICAgY29udGVudD86IFJlZ0V4cDtcbiAgICBub3Q/OiB1bmtub3duO1xuICB9O1xufTtcblxudHlwZSBXb3JrZmxvd0NvbmZpZ0ZuID0gKFxuICBwaGFzZTogc3RyaW5nLFxuICBjdHg6IHsgZGVmYXVsdENvbmZpZzogTmV4dENvbmZpZyB9XG4pID0+IFByb21pc2U8TmV4dENvbmZpZz47XG5cbnR5cGUgTmV4dENvbmZpZ0lucHV0ID1cbiAgfCBOZXh0Q29uZmlnXG4gIHwgKChcbiAgICAgIHBoYXNlOiBzdHJpbmcsXG4gICAgICBjdHg6IHsgZGVmYXVsdENvbmZpZzogTmV4dENvbmZpZyB9XG4gICAgKSA9PiBQcm9taXNlPE5leHRDb25maWc+KTtcblxuLyoqXG4gKiBOZXh0LmpzIHBsdWdpbiB0aGF0IGNvbmZpZ3VyZXMgYWdlbnQgc3VwcG9ydC5cbiAqXG4gKiAtIERldGVjdHMgYWdlbnRzIGFuZCBnZW5lcmF0ZXMgUlBDIHN0ZXBzIHdpdGggXCJ1c2Ugc3RlcFwiIGluIC53ZWxsLWtub3duL2FnZW50L3YxL1xuICogLSBHZW5lcmF0ZXMgQUdFTlRfU0VDUkVUIGZvciBzZWN1cmUgUlBDIGNhbGxzXG4gKiAtIFdyYXBzIHdpdGhXb3JrZmxvdyBmb3Igd29ya2Zsb3cgc3VwcG9ydFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogLy8gbmV4dC5jb25maWcudHNcbiAqIGltcG9ydCB7IHdpdGhBZ2VudCB9IGZyb20gXCJleHBlcmltZW50YWwtYWdlbnQvbmV4dFwiO1xuICpcbiAqIC8vIE9wdGlvbiAxOiB3aXRoQWdlbnQgaGFuZGxlcyBldmVyeXRoaW5nIChyZWNvbW1lbmRlZClcbiAqIGV4cG9ydCBkZWZhdWx0IHdpdGhBZ2VudCh7fSk7XG4gKlxuICogLy8gT3B0aW9uIDI6IENvbXBvc2Ugd2l0aCBvdGhlciBwbHVnaW5zXG4gKiBleHBvcnQgZGVmYXVsdCB3aXRoQWdlbnQod2l0aFNvbWVPdGhlclBsdWdpbih7fSkpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aXRoQWdlbnQoXG4gIGNvbmZpZ09yRm46IE5leHRDb25maWdJbnB1dCxcbiAgYWdlbnRDb25maWc/OiBXaXRoQWdlbnRDb25maWdcbik6IFdvcmtmbG93Q29uZmlnRm4ge1xuICBjb25zdCBkZWJ1ZyA9IGFnZW50Q29uZmlnPy5kZWJ1ZyA/PyBmYWxzZTtcbiAgaWYgKGRlYnVnKSB7XG4gICAgcHJvY2Vzcy5lbnYuQUdFTlRfREVCVUcgPSBcIjFcIjtcbiAgfVxuICBjb25zdCBjd2QgPSBwcm9jZXNzLmN3ZCgpO1xuXG4gIC8vIERldGVjdCBhcHAgZGlyZWN0b3J5IHN0cnVjdHVyZSAoc3JjL2FwcCB2cyBhcHApXG4gIGNvbnN0IGFwcERpciA9IGdldEFwcERpcihjd2QpO1xuICBjb25zdCBhZ2VudERpciA9IGAke2FwcERpcn0vLndlbGwta25vd24vYWdlbnQvJHtBR0VOVF9QUk9UT0NPTF9WRVJTSU9OfWA7XG5cbiAgLy8gRGV0ZWN0IGFnZW50cyBhbmQgZ2VuZXJhdGUgZmlsZXMgRklSU1QgKGJlZm9yZSB3b3JrZmxvdyBkaXNjb3ZlcnMgdGhlbSlcbiAgY29uc3QgYWdlbnRzID0gZGV0ZWN0QWdlbnRzKGN3ZCwgZGVidWcpO1xuICBjb25zdCBvdXRwdXREaXIgPSBwYXRoLmpvaW4oY3dkLCBhZ2VudERpcik7XG4gIGdlbmVyYXRlQWdlbnRGaWxlcyhhZ2VudHMsIG91dHB1dERpciwgY3dkLCBkZWJ1Zyk7XG5cbiAgY29uc3QgYWdlbnRGaWxlUGF0aHMgPSBhZ2VudHMubWFwKChhKSA9PiBhLmZpbGVQYXRoKTtcbiAgY29uc3QgbG9hZGVyUGF0aCA9IHJlcXVpcmUucmVzb2x2ZShcIi4vbmV4dC9sb2FkZXJcIik7XG5cbiAgaWYgKGRlYnVnKSB7XG4gICAgY29uc29sZS5sb2coXCJbd2l0aEFnZW50XSBsb2FkZXIgcGF0aDpcIiwgbG9hZGVyUGF0aCk7XG4gICAgY29uc29sZS5sb2coXCJbd2l0aEFnZW50XSBhZ2VudCBmaWxlczpcIiwgYWdlbnRGaWxlUGF0aHMpO1xuICAgIGNvbnNvbGUubG9nKFwiW3dpdGhBZ2VudF0gYWdlbnQgZGlyOlwiLCBhZ2VudERpcik7XG4gIH1cblxuICAvLyBCdWlsZCByZWdleCB0byBtYXRjaCBhZ2VudCBmaWxlIHBhdGhzXG4gIGNvbnN0IGFnZW50UGF0aFJlZ2V4ID1cbiAgICBhZ2VudEZpbGVQYXRocy5sZW5ndGggPiAwXG4gICAgICA/IG5ldyBSZWdFeHAoXG4gICAgICAgICAgYCR7YWdlbnRGaWxlUGF0aHNcbiAgICAgICAgICAgIC5tYXAoKHApID0+XG4gICAgICAgICAgICAgIHBhdGhcbiAgICAgICAgICAgICAgICAucmVsYXRpdmUoY3dkLCBwKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXFxcL2csIFwiL1wiKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9bLiorP14ke30oKXxbXFxdXFxcXF0vZywgXCJcXFxcJCZcIilcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5qb2luKFwifFwiKX0kYFxuICAgICAgICApXG4gICAgICA6IG51bGw7XG5cbiAgLyoqXG4gICAqIEFsd2F5cyBwYXNzIHRocm91Z2ggd2l0aFdvcmtmbG93IC0gaXQgaGFuZGxlcyBib3RoIE5leHRDb25maWcgYW5kIGFzeW5jIGZ1bmN0aW9ucy5cbiAgICogVGhpcyBlbnN1cmVzIHdvcmtmbG93IGlzIGFsd2F5cyBjb25maWd1cmVkLCByZWdhcmRsZXNzIG9mIHdoYXQgdGhlIHVzZXIgcGFzc2VkLlxuICAgKi9cbiAgbGV0IHdpdGhXb3JrZmxvdzogKFxuICAgIGNvbmZpZzogTmV4dENvbmZpZ0lucHV0LFxuICAgIG9wdGlvbnM/OiB7IHdvcmtmbG93cz86IHsgZGlycz86IHN0cmluZ1tdIH0gfVxuICApID0+IFdvcmtmbG93Q29uZmlnRm47XG4gIHRyeSB7XG4gICAgd2l0aFdvcmtmbG93ID0gcmVxdWlyZShcIndvcmtmbG93L25leHRcIikud2l0aFdvcmtmbG93O1xuICB9IGNhdGNoIHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBcIlt3aXRoQWdlbnRdIHdvcmtmbG93L25leHQgbm90IGZvdW5kLiBNYWtlIHN1cmUgd29ya2Zsb3cgaXMgaW5zdGFsbGVkLlwiXG4gICAgKTtcbiAgICByZXR1cm4gdHlwZW9mIGNvbmZpZ09yRm4gPT09IFwiZnVuY3Rpb25cIlxuICAgICAgPyBjb25maWdPckZuXG4gICAgICA6IGFzeW5jICgpID0+IGNvbmZpZ09yRm47XG4gIH1cblxuICBjb25zdCBiYXNlQ29uZmlnRm4gPSB3aXRoV29ya2Zsb3coY29uZmlnT3JGbiwge1xuICAgIHdvcmtmbG93czoge1xuICAgICAgZGlyczogWy4uLkRFRkFVTFRfV09SS0ZMT1dfRElSUywgYWdlbnREaXJdLFxuICAgIH0sXG4gIH0pO1xuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSB3cmFwcGVyIHRoYXQgcnVucyBBRlRFUiB3b3JrZmxvdyBwcm9jZXNzZXMsIHRoZW4gYWRkcyBvdXIgbG9hZGVyLlxuICAgKiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHdvcmtmbG93IG92ZXJ3cml0ZXMgdHVyYm9wYWNrIHJ1bGVzIC0gd2UgbmVlZCB0b1xuICAgKiBtb2RpZnkgdGhlbSBhZnRlciB3b3JrZmxvdyBpcyBkb25lLlxuICAgKi9cbiAgcmV0dXJuIGFzeW5jIChwaGFzZSwgY3R4KSA9PiB7XG4gICAgY29uc3QgbmV4dENvbmZpZyA9IGF3YWl0IGJhc2VDb25maWdGbihwaGFzZSwgY3R4KTtcblxuICAgIC8vIFNldCB1cCBBR0VOVF9TRUNSRVQgaWYgbm90IGFscmVhZHkgc2V0XG4gICAgaWYgKCFwcm9jZXNzLmVudi5BR0VOVF9TRUNSRVQpIHtcbiAgICAgIG5leHRDb25maWcuZW52ID0ge1xuICAgICAgICAuLi5uZXh0Q29uZmlnLmVudixcbiAgICAgICAgQUdFTlRfU0VDUkVUOiBjcnlwdG8ucmFuZG9tVVVJRCgpLFxuICAgICAgfTtcbiAgICAgIGlmIChkZWJ1Zykge1xuICAgICAgICBjb25zb2xlLmxvZyhcIlt3aXRoQWdlbnRdIEdlbmVyYXRlZCBBR0VOVF9TRUNSRVRcIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFhZ2VudFBhdGhSZWdleCB8fCBhZ2VudEZpbGVQYXRocy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBuZXh0Q29uZmlnO1xuICAgIH1cblxuICAgIC8vIE1vZGlmeSB0dXJib3BhY2sgcnVsZXMgdG8gaW5jbHVkZSBvdXIgbG9hZGVyIGZvciBhZ2VudCBmaWxlc1xuICAgIGNvbnN0IHJ1bGVzID0gKG5leHRDb25maWcudHVyYm9wYWNrPy5ydWxlcyB8fCB7fSkgYXMgUmVjb3JkPFxuICAgICAgc3RyaW5nLFxuICAgICAgVHVyYm9wYWNrUnVsZVxuICAgID47XG5cbiAgICBmb3IgKGNvbnN0IGtleSBvZiBbXCIqLnRzXCIsIFwiKi50c3hcIiwgXCIqLmpzXCIsIFwiKi5qc3hcIl0pIHtcbiAgICAgIGNvbnN0IGV4aXN0aW5nUnVsZSA9IHJ1bGVzW2tleV07XG4gICAgICBpZiAoIWV4aXN0aW5nUnVsZSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLyoqXG4gICAgICAgKiBXb3JrZmxvdydzIHJ1bGUgaGFzOiBjb25kaXRpb24uYWxsID0gW3sgbm90OiBwYXRoIH0sIHsgY29udGVudDogL3VzZSBzdGVwfC4uLi8gfV1cbiAgICAgICAqIFdlIHdhbnQ6IHJ1biBsb2FkZXIgaWYgd29ya2Zsb3cncyBjb25kaXRpb25zIG1hdGNoIE9SIGl0J3MgYW4gYWdlbnQgZmlsZS5cbiAgICAgICAqIFNvIHdlIHdyYXAgaW46IGNvbmRpdGlvbi5hbnkgPSBbZXhpc3RpbmdDb25kaXRpb24sIHsgcGF0aDogYWdlbnRQYXRoUmVnZXggfV1cbiAgICAgICAqL1xuICAgICAgcnVsZXNba2V5XSA9IHtcbiAgICAgICAgLi4uZXhpc3RpbmdSdWxlLFxuICAgICAgICBsb2FkZXJzOiBbbG9hZGVyUGF0aCwgLi4uKGV4aXN0aW5nUnVsZS5sb2FkZXJzIHx8IFtdKV0sXG4gICAgICAgIGNvbmRpdGlvbjoge1xuICAgICAgICAgIGFueTogW2V4aXN0aW5nUnVsZS5jb25kaXRpb24sIHsgcGF0aDogYWdlbnRQYXRoUmVnZXggfV0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIEFsc28gY29uZmlndXJlIHdlYnBhY2sgZm9yIG5vbi10dXJib3BhY2sgYnVpbGRzXG4gICAgY29uc3QgZXhpc3RpbmdXZWJwYWNrID0gbmV4dENvbmZpZy53ZWJwYWNrO1xuICAgIG5leHRDb25maWcud2VicGFjayA9ICh3ZWJwYWNrQ29uZmlnLCBjb250ZXh0KSA9PiB7XG4gICAgICB3ZWJwYWNrQ29uZmlnLm1vZHVsZS5ydWxlcy5wdXNoKHtcbiAgICAgICAgdGVzdDogKHJlc291cmNlUGF0aDogc3RyaW5nKSA9PiBhZ2VudEZpbGVQYXRocy5pbmNsdWRlcyhyZXNvdXJjZVBhdGgpLFxuICAgICAgICB1c2U6IFt7IGxvYWRlcjogbG9hZGVyUGF0aCB9XSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGV4aXN0aW5nV2VicGFjaz8uKHdlYnBhY2tDb25maWcsIGNvbnRleHQpID8/IHdlYnBhY2tDb25maWc7XG4gICAgfTtcblxuICAgIGlmIChkZWJ1Zykge1xuICAgICAgY29uc29sZS5sb2coXCJbd2l0aEFnZW50XSBBZGRlZCBhZ2VudCBsb2FkZXIgdG8gdHVyYm9wYWNrIHJ1bGVzXCIpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXh0Q29uZmlnO1xuICB9O1xufVxuIiwgIntcbiAgXCJuYW1lXCI6IFwiZXhwZXJpbWVudGFsLWFnZW50XCIsXG4gIFwidmVyc2lvblwiOiBcIjAuMS4xXCIsXG4gIFwibWFpblwiOiBcIi4vZGlzdC9pbmRleC5qc1wiLFxuICBcIm1vZHVsZVwiOiBcIi4vZGlzdC9pbmRleC5tanNcIixcbiAgXCJ0eXBlc1wiOiBcIi4vZGlzdC9pbmRleC5kLnRzXCIsXG4gIFwic2lkZUVmZmVjdHNcIjogdHJ1ZSxcbiAgXCJsaWNlbnNlXCI6IFwiTUlUXCIsXG4gIFwiZmlsZXNcIjogW1xuICAgIFwiZGlzdC8qKlwiXG4gIF0sXG4gIFwiZXhwb3J0c1wiOiB7XG4gICAgXCIuXCI6IHtcbiAgICAgIFwidHlwZXNcIjogXCIuL2Rpc3QvaW5kZXguZC50c1wiLFxuICAgICAgXCJpbXBvcnRcIjogXCIuL2Rpc3QvaW5kZXgubWpzXCIsXG4gICAgICBcInJlcXVpcmVcIjogXCIuL2Rpc3QvaW5kZXguanNcIlxuICAgIH0sXG4gICAgXCIuL25leHRcIjoge1xuICAgICAgXCJ0eXBlc1wiOiBcIi4vZGlzdC9uZXh0LmQudHNcIixcbiAgICAgIFwiaW1wb3J0XCI6IFwiLi9kaXN0L25leHQubWpzXCIsXG4gICAgICBcInJlcXVpcmVcIjogXCIuL2Rpc3QvbmV4dC5qc1wiXG4gICAgfSxcbiAgICBcIi4vbmV4dC9sb2FkZXJcIjoge1xuICAgICAgXCJ0eXBlc1wiOiBcIi4vZGlzdC9uZXh0L2xvYWRlci5kLnRzXCIsXG4gICAgICBcImltcG9ydFwiOiBcIi4vZGlzdC9uZXh0L2xvYWRlci5tanNcIixcbiAgICAgIFwicmVxdWlyZVwiOiBcIi4vZGlzdC9uZXh0L2xvYWRlci5qc1wiXG4gICAgfSxcbiAgICBcIi4vY2xpZW50XCI6IHtcbiAgICAgIFwidHlwZXNcIjogXCIuL2Rpc3QvY2xpZW50LmQudHNcIixcbiAgICAgIFwiaW1wb3J0XCI6IFwiLi9kaXN0L2NsaWVudC5tanNcIixcbiAgICAgIFwicmVxdWlyZVwiOiBcIi4vZGlzdC9jbGllbnQuanNcIlxuICAgIH1cbiAgfSxcbiAgXCJzY3JpcHRzXCI6IHtcbiAgICBcImJ1aWxkXCI6IFwidHN1cFwiLFxuICAgIFwiZGV2XCI6IFwidHN1cCAtLXdhdGNoXCIsXG4gICAgXCJjbGVhblwiOiBcInJtIC1yZiAudHVyYm8gJiYgcm0gLXJmIG5vZGVfbW9kdWxlcyAmJiBybSAtcmYgZGlzdFwiLFxuICAgIFwicmVsZWFzZVwiOiBcInBucG0gYnVpbGQgJiYgbnBtIHB1Ymxpc2hcIixcbiAgICBcInR5cGVjaGVja1wiOiBcInRzYyAtLW5vRW1pdFwiLFxuICAgIFwidGVzdFwiOiBcInZpdGVzdCBydW5cIixcbiAgICBcInRlc3Q6d2F0Y2hcIjogXCJ2aXRlc3RcIlxuICB9LFxuICBcImRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJAaG9uby9ub2RlLXNlcnZlclwiOiBcIl4xLjE5LjlcIixcbiAgICBcIkBzd2MvY29yZVwiOiBcIl4xLjEwLjBcIixcbiAgICBcIkB2ZXJjZWwvb2lkY1wiOiBcIl4zLjEuMFwiLFxuICAgIFwiYmV0dGVyLWFsbFwiOiBcIl4wLjAuNVwiLFxuICAgIFwiZXJyb3JlXCI6IFwiXjAuOC4yXCIsXG4gICAgXCJmYXN0LWRlZXAtZXF1YWxcIjogXCJeMy4xLjNcIixcbiAgICBcImdsb2JcIjogXCJeMTEuMC4wXCIsXG4gICAgXCJob25vXCI6IFwiXjQuMTEuNlwiLFxuICAgIFwiQHZlcmNlbC9zYW5kYm94XCI6IFwiXjEuNS4wXCIsXG4gICAgXCJ1bGlkXCI6IFwiXjMuMC4yXCIsXG4gICAgXCJ6b2RcIjogXCJeNC4zLjZcIlxuICB9LFxuICBcImRldkRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJAYWdlbnQvdHNjb25maWdcIjogXCJ3b3Jrc3BhY2U6KlwiLFxuICAgIFwiQHR5cGVzL25vZGVcIjogXCJeMjAuMTEuMjRcIixcbiAgICBcImRvdGVudlwiOiBcIl4xNy4yLjNcIixcbiAgICBcIm5leHRcIjogXCJeMTYuMC4wXCIsXG4gICAgXCJ0c3VwXCI6IFwiXjguMC4yXCIsXG4gICAgXCJ0eXBlLWZlc3RcIjogXCJeNS40LjJcIixcbiAgICBcInR5cGVzY3JpcHRcIjogXCI1LjUuNFwiLFxuICAgIFwidml0ZXN0XCI6IFwiXjMuMC4wXCJcbiAgfSxcbiAgXCJwZWVyRGVwZW5kZW5jaWVzXCI6IHtcbiAgICBcImFpXCI6IFwiXjYuMC4wXCIsXG4gICAgXCJ3b3JrZmxvd1wiOiBcImh0dHBzOi8vd29ya2Zsb3ctZG9jcy1hZDdvNXBtYWwudmVyY2VsLnNoL3dvcmtmbG93LnRnelwiXG4gIH0sXG4gIFwicHVibGlzaENvbmZpZ1wiOiB7XG4gICAgXCJhY2Nlc3NcIjogXCJwdWJsaWNcIlxuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsYUFBd0I7QUFDeEIsU0FBb0I7QUFDcEIsV0FBc0I7OztBQ0Z0QjtBQUFBLEVBQ0UsTUFBUTtBQUFBLEVBQ1IsU0FBVztBQUFBLEVBQ1gsTUFBUTtBQUFBLEVBQ1IsUUFBVTtBQUFBLEVBQ1YsT0FBUztBQUFBLEVBQ1QsYUFBZTtBQUFBLEVBQ2YsU0FBVztBQUFBLEVBQ1gsT0FBUztBQUFBLElBQ1A7QUFBQSxFQUNGO0FBQUEsRUFDQSxTQUFXO0FBQUEsSUFDVCxLQUFLO0FBQUEsTUFDSCxPQUFTO0FBQUEsTUFDVCxRQUFVO0FBQUEs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