experimental-agent 0.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +243 -0
- package/dist/agent-workflow.d.mts +21 -0
- package/dist/agent-workflow.d.ts +21 -0
- package/dist/agent-workflow.js +2659 -0
- package/dist/agent-workflow.mjs +9 -0
- package/dist/chunk-2YI7MQGZ.mjs +261 -0
- package/dist/chunk-36X6L7SK.mjs +1 -0
- package/dist/chunk-DPPQO7DA.mjs +343 -0
- package/dist/chunk-JQPR6M7D.mjs +649 -0
- package/dist/chunk-MR4UWCJT.mjs +878 -0
- package/dist/client-FCFZYOOB.mjs +9 -0
- package/dist/client-RRX3GDQD.mjs +9 -0
- package/dist/index.d.mts +128 -0
- package/dist/index.d.ts +128 -0
- package/dist/index.js +3078 -0
- package/dist/index.mjs +421 -0
- package/dist/lifecycle-workflow-steps-6BLGTYVB.mjs +20 -0
- package/dist/lifecycle-workflow.d.mts +17 -0
- package/dist/lifecycle-workflow.d.ts +17 -0
- package/dist/lifecycle-workflow.js +1690 -0
- package/dist/lifecycle-workflow.mjs +44 -0
- package/dist/local-J6QFWSWB.mjs +244 -0
- package/dist/process-manager-H2HF6G4G.mjs +153 -0
- package/dist/sandbox-Y3ENCNUA.mjs +10 -0
- package/dist/storage-QSTSE2ZB.mjs +27 -0
- package/dist/types-Lwut_0_u.d.mts +80 -0
- package/dist/types-ctZeJ3iQ.d.ts +80 -0
- package/dist/types-vRxN1Qz1.d.mts +805 -0
- package/dist/types-vRxN1Qz1.d.ts +805 -0
- package/dist/vercel-2CFDMEHB.mjs +18 -0
- package/package.json +59 -0
|
@@ -0,0 +1,343 @@
|
|
|
1
|
+
// src/errors.ts
|
|
2
|
+
import * as errore from "errore";
|
|
3
|
+
var SessionNotFoundError = class extends errore.createTaggedError({
|
|
4
|
+
name: "SessionNotFoundError",
|
|
5
|
+
message: "Session $id not found"
|
|
6
|
+
}) {
|
|
7
|
+
};
|
|
8
|
+
var SessionError = class extends errore.createTaggedError({
|
|
9
|
+
name: "SessionError",
|
|
10
|
+
message: "Session $id failed: $reason"
|
|
11
|
+
}) {
|
|
12
|
+
};
|
|
13
|
+
var SandboxNotFoundError = class extends errore.createTaggedError({
|
|
14
|
+
name: "SandboxNotFoundError",
|
|
15
|
+
message: "Sandbox $id not found"
|
|
16
|
+
}) {
|
|
17
|
+
};
|
|
18
|
+
var StorageError = class extends errore.createTaggedError({
|
|
19
|
+
name: "StorageError",
|
|
20
|
+
message: "$reason"
|
|
21
|
+
}) {
|
|
22
|
+
};
|
|
23
|
+
var SandboxError = class extends errore.createTaggedError({
|
|
24
|
+
name: "SandboxError",
|
|
25
|
+
message: "$reason"
|
|
26
|
+
}) {
|
|
27
|
+
};
|
|
28
|
+
var MessageNotFoundError = class extends errore.createTaggedError({
|
|
29
|
+
name: "MessageNotFoundError",
|
|
30
|
+
message: "Message $id not found"
|
|
31
|
+
}) {
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
// src/storage/client.ts
|
|
35
|
+
function getStorageClient({ url, headers }) {
|
|
36
|
+
async function rpc(method, params) {
|
|
37
|
+
const res = await fetch(url, {
|
|
38
|
+
method: "POST",
|
|
39
|
+
headers: { "Content-Type": "application/json", ...headers },
|
|
40
|
+
body: JSON.stringify({ method, params })
|
|
41
|
+
});
|
|
42
|
+
if (!res.ok) {
|
|
43
|
+
throw new StorageError({
|
|
44
|
+
reason: `HTTP ${res.status}: ${res.statusText}`
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
const json = await res.json();
|
|
48
|
+
if ("error" in json) {
|
|
49
|
+
throw new StorageError({ reason: json.error.message });
|
|
50
|
+
}
|
|
51
|
+
return json.result;
|
|
52
|
+
}
|
|
53
|
+
return {
|
|
54
|
+
session: {
|
|
55
|
+
get: async (id) => {
|
|
56
|
+
try {
|
|
57
|
+
const result = await rpc("session.get", { id });
|
|
58
|
+
if (result === null) {
|
|
59
|
+
return new SessionNotFoundError({ id });
|
|
60
|
+
}
|
|
61
|
+
return result;
|
|
62
|
+
} catch (e) {
|
|
63
|
+
if (e instanceof StorageError) {
|
|
64
|
+
return e;
|
|
65
|
+
}
|
|
66
|
+
return new StorageError({ reason: String(e), cause: e });
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
set: async (session) => {
|
|
70
|
+
try {
|
|
71
|
+
return await rpc("session.set", session);
|
|
72
|
+
} catch (e) {
|
|
73
|
+
if (e instanceof StorageError) {
|
|
74
|
+
return e;
|
|
75
|
+
}
|
|
76
|
+
return new StorageError({ reason: String(e), cause: e });
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
list: async (opts) => {
|
|
80
|
+
try {
|
|
81
|
+
return await rpc("session.list", {
|
|
82
|
+
tags: opts?.tags,
|
|
83
|
+
order: opts?.order,
|
|
84
|
+
cursor: opts?.cursor,
|
|
85
|
+
limit: opts?.limit
|
|
86
|
+
});
|
|
87
|
+
} catch (e) {
|
|
88
|
+
if (e instanceof StorageError) {
|
|
89
|
+
return e;
|
|
90
|
+
}
|
|
91
|
+
return new StorageError({ reason: String(e), cause: e });
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
tag: {
|
|
95
|
+
set: async ({ sessionId, tags }) => {
|
|
96
|
+
try {
|
|
97
|
+
return await rpc("session.tag.set", { sessionId, tags });
|
|
98
|
+
} catch (e) {
|
|
99
|
+
if (e instanceof StorageError) {
|
|
100
|
+
return e;
|
|
101
|
+
}
|
|
102
|
+
return new StorageError({ reason: String(e), cause: e });
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
},
|
|
107
|
+
message: {
|
|
108
|
+
list: async (sessionId, opts) => {
|
|
109
|
+
try {
|
|
110
|
+
return await rpc("message.list", {
|
|
111
|
+
sessionId,
|
|
112
|
+
cursor: opts?.cursor,
|
|
113
|
+
limit: opts?.limit
|
|
114
|
+
});
|
|
115
|
+
} catch (e) {
|
|
116
|
+
if (e instanceof StorageError) {
|
|
117
|
+
return e;
|
|
118
|
+
}
|
|
119
|
+
return new StorageError({ reason: String(e), cause: e });
|
|
120
|
+
}
|
|
121
|
+
},
|
|
122
|
+
get: async (id) => {
|
|
123
|
+
try {
|
|
124
|
+
const result = await rpc("message.get", { id });
|
|
125
|
+
if (result === null) {
|
|
126
|
+
return new MessageNotFoundError({ id });
|
|
127
|
+
}
|
|
128
|
+
return result;
|
|
129
|
+
} catch (e) {
|
|
130
|
+
if (e instanceof StorageError) {
|
|
131
|
+
return e;
|
|
132
|
+
}
|
|
133
|
+
return new StorageError({ reason: String(e), cause: e });
|
|
134
|
+
}
|
|
135
|
+
},
|
|
136
|
+
set: async (message) => {
|
|
137
|
+
try {
|
|
138
|
+
return await rpc("message.set", message);
|
|
139
|
+
} catch (e) {
|
|
140
|
+
if (e instanceof StorageError) {
|
|
141
|
+
return e;
|
|
142
|
+
}
|
|
143
|
+
return new StorageError({ reason: String(e), cause: e });
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
},
|
|
147
|
+
part: {
|
|
148
|
+
listByMessage: async (messageId, opts) => {
|
|
149
|
+
try {
|
|
150
|
+
const result = await rpc("part.listByMessage", {
|
|
151
|
+
messageId,
|
|
152
|
+
cursor: opts?.cursor,
|
|
153
|
+
limit: opts?.limit
|
|
154
|
+
});
|
|
155
|
+
return result;
|
|
156
|
+
} catch (e) {
|
|
157
|
+
if (e instanceof StorageError) {
|
|
158
|
+
return e;
|
|
159
|
+
}
|
|
160
|
+
return new StorageError({ reason: String(e), cause: e });
|
|
161
|
+
}
|
|
162
|
+
},
|
|
163
|
+
listBySession: async (sessionId, opts) => {
|
|
164
|
+
try {
|
|
165
|
+
const result = await rpc("part.listBySession", {
|
|
166
|
+
sessionId,
|
|
167
|
+
cursor: opts?.cursor,
|
|
168
|
+
limit: opts?.limit
|
|
169
|
+
});
|
|
170
|
+
return result;
|
|
171
|
+
} catch (e) {
|
|
172
|
+
if (e instanceof StorageError) {
|
|
173
|
+
return e;
|
|
174
|
+
}
|
|
175
|
+
return new StorageError({ reason: String(e), cause: e });
|
|
176
|
+
}
|
|
177
|
+
},
|
|
178
|
+
set: async (part) => {
|
|
179
|
+
try {
|
|
180
|
+
return await rpc("part.set", part);
|
|
181
|
+
} catch (e) {
|
|
182
|
+
if (e instanceof StorageError) {
|
|
183
|
+
return e;
|
|
184
|
+
}
|
|
185
|
+
return new StorageError({ reason: String(e), cause: e });
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
},
|
|
189
|
+
sandbox: {
|
|
190
|
+
get: async (key) => {
|
|
191
|
+
try {
|
|
192
|
+
const result = await rpc("sandbox.get", { key });
|
|
193
|
+
if (result === null) {
|
|
194
|
+
return new SandboxNotFoundError({ id: key });
|
|
195
|
+
}
|
|
196
|
+
return result;
|
|
197
|
+
} catch (e) {
|
|
198
|
+
if (e instanceof StorageError) {
|
|
199
|
+
return e;
|
|
200
|
+
}
|
|
201
|
+
return new StorageError({ reason: String(e), cause: e });
|
|
202
|
+
}
|
|
203
|
+
},
|
|
204
|
+
getBySession: async (sessionId) => {
|
|
205
|
+
try {
|
|
206
|
+
const result = await rpc("sandbox.getBySession", { sessionId });
|
|
207
|
+
if (result === null) {
|
|
208
|
+
return new SandboxNotFoundError({ id: sessionId });
|
|
209
|
+
}
|
|
210
|
+
return result;
|
|
211
|
+
} catch (e) {
|
|
212
|
+
if (e instanceof StorageError) {
|
|
213
|
+
return e;
|
|
214
|
+
}
|
|
215
|
+
return new StorageError({ reason: String(e), cause: e });
|
|
216
|
+
}
|
|
217
|
+
},
|
|
218
|
+
set: async (record) => {
|
|
219
|
+
try {
|
|
220
|
+
await rpc("sandbox.set", record);
|
|
221
|
+
return record;
|
|
222
|
+
} catch (e) {
|
|
223
|
+
if (e instanceof StorageError) {
|
|
224
|
+
return e;
|
|
225
|
+
}
|
|
226
|
+
return new StorageError({ reason: String(e), cause: e });
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
},
|
|
230
|
+
command: {
|
|
231
|
+
get: async (id) => {
|
|
232
|
+
try {
|
|
233
|
+
return await rpc("command.get", { id });
|
|
234
|
+
} catch (e) {
|
|
235
|
+
if (e instanceof StorageError) {
|
|
236
|
+
return e;
|
|
237
|
+
}
|
|
238
|
+
return new StorageError({ reason: String(e), cause: e });
|
|
239
|
+
}
|
|
240
|
+
},
|
|
241
|
+
set: async (command) => {
|
|
242
|
+
try {
|
|
243
|
+
return await rpc("command.set", command);
|
|
244
|
+
} catch (e) {
|
|
245
|
+
if (e instanceof StorageError) {
|
|
246
|
+
return e;
|
|
247
|
+
}
|
|
248
|
+
return new StorageError({ reason: String(e), cause: e });
|
|
249
|
+
}
|
|
250
|
+
},
|
|
251
|
+
list: async (sessionId, opts) => {
|
|
252
|
+
try {
|
|
253
|
+
const result = await rpc("command.list", {
|
|
254
|
+
sessionId,
|
|
255
|
+
includeFinished: opts?.includeFinished,
|
|
256
|
+
cursor: opts?.cursor,
|
|
257
|
+
limit: opts?.limit
|
|
258
|
+
});
|
|
259
|
+
return result;
|
|
260
|
+
} catch (e) {
|
|
261
|
+
if (e instanceof StorageError) {
|
|
262
|
+
return e;
|
|
263
|
+
}
|
|
264
|
+
return new StorageError({ reason: String(e), cause: e });
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
async function resolveStorageUrl(config) {
|
|
271
|
+
switch (config.type) {
|
|
272
|
+
case "local": {
|
|
273
|
+
const { startLocalStorage } = await import("./local-J6QFWSWB.mjs");
|
|
274
|
+
return { url: await startLocalStorage({ path: config.path }) };
|
|
275
|
+
}
|
|
276
|
+
case "vercel": {
|
|
277
|
+
const { getVercelStorageConfig } = await import("./vercel-2CFDMEHB.mjs");
|
|
278
|
+
return getVercelStorageConfig();
|
|
279
|
+
}
|
|
280
|
+
case "custom": {
|
|
281
|
+
return { url: config.url, headers: config.headers };
|
|
282
|
+
}
|
|
283
|
+
default: {
|
|
284
|
+
config;
|
|
285
|
+
throw new Error(
|
|
286
|
+
`Unknown storage type: ${config.type}`
|
|
287
|
+
);
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
function getStorage(storageConfig) {
|
|
292
|
+
let clientPromise = null;
|
|
293
|
+
const getClient = () => {
|
|
294
|
+
if (!clientPromise) {
|
|
295
|
+
clientPromise = resolveStorageUrl(storageConfig).then(
|
|
296
|
+
(resolved) => getStorageClient(resolved)
|
|
297
|
+
);
|
|
298
|
+
}
|
|
299
|
+
return clientPromise;
|
|
300
|
+
};
|
|
301
|
+
return {
|
|
302
|
+
session: {
|
|
303
|
+
get: async (id) => (await getClient()).session.get(id),
|
|
304
|
+
set: async (session) => (await getClient()).session.set(session),
|
|
305
|
+
list: async (opts) => (await getClient()).session.list(opts),
|
|
306
|
+
tag: {
|
|
307
|
+
set: async (opts) => (await getClient()).session.tag.set(opts)
|
|
308
|
+
}
|
|
309
|
+
},
|
|
310
|
+
message: {
|
|
311
|
+
list: async (sessionId, opts) => (await getClient()).message.list(sessionId, opts),
|
|
312
|
+
get: async (id) => (await getClient()).message.get(id),
|
|
313
|
+
set: async (message) => (await getClient()).message.set(message)
|
|
314
|
+
},
|
|
315
|
+
part: {
|
|
316
|
+
listByMessage: async (messageId, opts) => (await getClient()).part.listByMessage(messageId, opts),
|
|
317
|
+
listBySession: async (sessionId, opts) => (await getClient()).part.listBySession(sessionId, opts),
|
|
318
|
+
set: async (part) => (await getClient()).part.set(part)
|
|
319
|
+
},
|
|
320
|
+
sandbox: {
|
|
321
|
+
get: async (key) => (await getClient()).sandbox.get(key),
|
|
322
|
+
set: async (opts) => (await getClient()).sandbox.set(opts),
|
|
323
|
+
getBySession: async (sessionId) => (await getClient()).sandbox.getBySession(sessionId)
|
|
324
|
+
},
|
|
325
|
+
command: {
|
|
326
|
+
get: async (id) => (await getClient()).command.get(id),
|
|
327
|
+
set: async (command) => (await getClient()).command.set(command),
|
|
328
|
+
list: async (sessionId, opts) => (await getClient()).command.list(sessionId, opts)
|
|
329
|
+
}
|
|
330
|
+
};
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
export {
|
|
334
|
+
SessionNotFoundError,
|
|
335
|
+
SessionError,
|
|
336
|
+
SandboxNotFoundError,
|
|
337
|
+
StorageError,
|
|
338
|
+
SandboxError,
|
|
339
|
+
MessageNotFoundError,
|
|
340
|
+
getStorageClient,
|
|
341
|
+
getStorage
|
|
342
|
+
};
|
|
343
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2Vycm9ycy50cyIsICIuLi9zcmMvc3RvcmFnZS9jbGllbnQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCAqIGFzIGVycm9yZSBmcm9tIFwiZXJyb3JlXCI7XG5cbmV4cG9ydCBjbGFzcyBTZXNzaW9uTm90Rm91bmRFcnJvciBleHRlbmRzIGVycm9yZS5jcmVhdGVUYWdnZWRFcnJvcih7XG4gIG5hbWU6IFwiU2Vzc2lvbk5vdEZvdW5kRXJyb3JcIixcbiAgbWVzc2FnZTogXCJTZXNzaW9uICRpZCBub3QgZm91bmRcIixcbn0pIHt9XG5cbmV4cG9ydCBjbGFzcyBTZXNzaW9uRXJyb3IgZXh0ZW5kcyBlcnJvcmUuY3JlYXRlVGFnZ2VkRXJyb3Ioe1xuICBuYW1lOiBcIlNlc3Npb25FcnJvclwiLFxuICBtZXNzYWdlOiBcIlNlc3Npb24gJGlkIGZhaWxlZDogJHJlYXNvblwiLFxufSkge31cblxuZXhwb3J0IGNsYXNzIFNhbmRib3hOb3RGb3VuZEVycm9yIGV4dGVuZHMgZXJyb3JlLmNyZWF0ZVRhZ2dlZEVycm9yKHtcbiAgbmFtZTogXCJTYW5kYm94Tm90Rm91bmRFcnJvclwiLFxuICBtZXNzYWdlOiBcIlNhbmRib3ggJGlkIG5vdCBmb3VuZFwiLFxufSkge31cblxuZXhwb3J0IGNsYXNzIFN0b3JhZ2VFcnJvciBleHRlbmRzIGVycm9yZS5jcmVhdGVUYWdnZWRFcnJvcih7XG4gIG5hbWU6IFwiU3RvcmFnZUVycm9yXCIsXG4gIG1lc3NhZ2U6IFwiJHJlYXNvblwiLFxufSkge31cblxuZXhwb3J0IGNsYXNzIFNhbmRib3hFcnJvciBleHRlbmRzIGVycm9yZS5jcmVhdGVUYWdnZWRFcnJvcih7XG4gIG5hbWU6IFwiU2FuZGJveEVycm9yXCIsXG4gIG1lc3NhZ2U6IFwiJHJlYXNvblwiLFxufSkge31cblxuZXhwb3J0IGNsYXNzIE1lc3NhZ2VOb3RGb3VuZEVycm9yIGV4dGVuZHMgZXJyb3JlLmNyZWF0ZVRhZ2dlZEVycm9yKHtcbiAgbmFtZTogXCJNZXNzYWdlTm90Rm91bmRFcnJvclwiLFxuICBtZXNzYWdlOiBcIk1lc3NhZ2UgJGlkIG5vdCBmb3VuZFwiLFxufSkge31cbiIsICJpbXBvcnQgdHlwZSB7IHogfSBmcm9tIFwiem9kXCI7XG5pbXBvcnQge1xuICBNZXNzYWdlTm90Rm91bmRFcnJvcixcbiAgU2FuZGJveE5vdEZvdW5kRXJyb3IsXG4gIFNlc3Npb25Ob3RGb3VuZEVycm9yLFxuICBTdG9yYWdlRXJyb3IsXG59IGZyb20gXCIuLi9lcnJvcnNcIjtcbmltcG9ydCB0eXBlIHsgU3RvcmFnZU1ldGhvZHMgfSBmcm9tIFwiLi9ycGNcIjtcbmltcG9ydCB0eXBlIHtcbiAgQ29tbWFuZCxcbiAgTGlzdFJlc3VsdCxcbiAgUGFydCxcbiAgUmVzb2x2ZWRTdG9yYWdlLFxuICBTdG9yYWdlLFxuICBTdG9yYWdlQ29uZmlnLFxufSBmcm9tIFwiLi90eXBlc1wiO1xuXG50eXBlIFJwY1Jlc3BvbnNlPFQ+ID1cbiAgfCB7IHJlc3VsdDogVCB9XG4gIHwgeyBlcnJvcjogeyBjb2RlOiBzdHJpbmc7IG1lc3NhZ2U6IHN0cmluZyB9IH07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdG9yYWdlQ2xpZW50KHsgdXJsLCBoZWFkZXJzIH06IFJlc29sdmVkU3RvcmFnZSk6IFN0b3JhZ2Uge1xuICBhc3luYyBmdW5jdGlvbiBycGM8TSBleHRlbmRzIGtleW9mIFN0b3JhZ2VNZXRob2RzPihcbiAgICBtZXRob2Q6IE0sXG4gICAgcGFyYW1zOiB6LmluZmVyPFN0b3JhZ2VNZXRob2RzW01dW1wicGFyYW1zXCJdPlxuICApOiBQcm9taXNlPHouaW5mZXI8U3RvcmFnZU1ldGhvZHNbTV1bXCJyZXN1bHRcIl0+PiB7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2godXJsLCB7XG4gICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgaGVhZGVyczogeyBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiwgLi4uaGVhZGVycyB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBtZXRob2QsIHBhcmFtcyB9KSxcbiAgICB9KTtcblxuICAgIGlmICghcmVzLm9rKSB7XG4gICAgICB0aHJvdyBuZXcgU3RvcmFnZUVycm9yKHtcbiAgICAgICAgcmVhc29uOiBgSFRUUCAke3Jlcy5zdGF0dXN9OiAke3Jlcy5zdGF0dXNUZXh0fWAsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBqc29uID0gKGF3YWl0IHJlcy5qc29uKCkpIGFzIFJwY1Jlc3BvbnNlPFxuICAgICAgei5pbmZlcjxTdG9yYWdlTWV0aG9kc1tNXVtcInJlc3VsdFwiXT5cbiAgICA+O1xuXG4gICAgaWYgKFwiZXJyb3JcIiBpbiBqc29uKSB7XG4gICAgICB0aHJvdyBuZXcgU3RvcmFnZUVycm9yKHsgcmVhc29uOiBqc29uLmVycm9yLm1lc3NhZ2UgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGpzb24ucmVzdWx0O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzZXNzaW9uOiB7XG4gICAgICBnZXQ6IGFzeW5jIChpZCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJwYyhcInNlc3Npb24uZ2V0XCIsIHsgaWQgfSk7XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBTZXNzaW9uTm90Rm91bmRFcnJvcih7IGlkIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBTdG9yYWdlRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbmV3IFN0b3JhZ2VFcnJvcih7IHJlYXNvbjogU3RyaW5nKGUpLCBjYXVzZTogZSB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHNldDogYXN5bmMgKHNlc3Npb24pID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gYXdhaXQgcnBjKFwic2Vzc2lvbi5zZXRcIiwgc2Vzc2lvbik7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIFN0b3JhZ2VFcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIGU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBuZXcgU3RvcmFnZUVycm9yKHsgcmVhc29uOiBTdHJpbmcoZSksIGNhdXNlOiBlIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgbGlzdDogYXN5bmMgKG9wdHMpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gYXdhaXQgcnBjKFwic2Vzc2lvbi5saXN0XCIsIHtcbiAgICAgICAgICAgIHRhZ3M6IG9wdHM/LnRhZ3MsXG4gICAgICAgICAgICBvcmRlcjogb3B0cz8ub3JkZXIsXG4gICAgICAgICAgICBjdXJzb3I6IG9wdHM/LmN1cnNvcixcbiAgICAgICAgICAgIGxpbWl0OiBvcHRzPy5saW1pdCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgU3RvcmFnZUVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG5ldyBTdG9yYWdlRXJyb3IoeyByZWFzb246IFN0cmluZyhlKSwgY2F1c2U6IGUgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB0YWc6IHtcbiAgICAgICAgc2V0OiBhc3luYyAoeyBzZXNzaW9uSWQsIHRhZ3MgfSkgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgcnBjKFwic2Vzc2lvbi50YWcuc2V0XCIsIHsgc2Vzc2lvbklkLCB0YWdzIH0pO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgU3RvcmFnZUVycm9yKSB7XG4gICAgICAgICAgICAgIHJldHVybiBlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBTdG9yYWdlRXJyb3IoeyByZWFzb246IFN0cmluZyhlKSwgY2F1c2U6IGUgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICAgIG1lc3NhZ2U6IHtcbiAgICAgIGxpc3Q6IGFzeW5jIChzZXNzaW9uSWQsIG9wdHMpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gYXdhaXQgcnBjKFwibWVzc2FnZS5saXN0XCIsIHtcbiAgICAgICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgICAgIGN1cnNvcjogb3B0cz8uY3Vyc29yLFxuICAgICAgICAgICAgbGltaXQ6IG9wdHM/LmxpbWl0LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBTdG9yYWdlRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbmV3IFN0b3JhZ2VFcnJvcih7IHJlYXNvbjogU3RyaW5nKGUpLCBjYXVzZTogZSB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGdldDogYXN5bmMgKGlkKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcnBjKFwibWVzc2FnZS5nZXRcIiwgeyBpZCB9KTtcbiAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE1lc3NhZ2VOb3RGb3VuZEVycm9yKHsgaWQgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIFN0b3JhZ2VFcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIGU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBuZXcgU3RvcmFnZUVycm9yKHsgcmVhc29uOiBTdHJpbmcoZSksIGNhdXNlOiBlIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgc2V0OiBhc3luYyAobWVzc2FnZSkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBhd2FpdCBycGMoXCJtZXNzYWdlLnNldFwiLCBtZXNzYWdlKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgU3RvcmFnZUVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG5ldyBTdG9yYWdlRXJyb3IoeyByZWFzb246IFN0cmluZyhlKSwgY2F1c2U6IGUgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSxcbiAgICBwYXJ0OiB7XG4gICAgICBsaXN0QnlNZXNzYWdlOiBhc3luYyAobWVzc2FnZUlkLCBvcHRzKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcnBjKFwicGFydC5saXN0QnlNZXNzYWdlXCIsIHtcbiAgICAgICAgICAgIG1lc3NhZ2VJZCxcbiAgICAgICAgICAgIGN1cnNvcjogb3B0cz8uY3Vyc29yLFxuICAgICAgICAgICAgbGltaXQ6IG9wdHM/LmxpbWl0LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiByZXN1bHQgYXMgTGlzdFJlc3VsdDxQYXJ0PjtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgU3RvcmFnZUVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG5ldyBTdG9yYWdlRXJyb3IoeyByZWFzb246IFN0cmluZyhlKSwgY2F1c2U6IGUgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBsaXN0QnlTZXNzaW9uOiBhc3luYyAoc2Vzc2lvbklkLCBvcHRzKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcnBjKFwicGFydC5saXN0QnlTZXNzaW9uXCIsIHtcbiAgICAgICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgICAgIGN1cnNvcjogb3B0cz8uY3Vyc29yLFxuICAgICAgICAgICAgbGltaXQ6IG9wdHM/LmxpbWl0LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiByZXN1bHQgYXMgTGlzdFJlc3VsdDxQYXJ0PjtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgU3RvcmFnZUVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG5ldyBTdG9yYWdlRXJyb3IoeyByZWFzb246IFN0cmluZyhlKSwgY2F1c2U6IGUgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBzZXQ6IGFzeW5jIChwYXJ0KSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIChhd2FpdCBycGMoXCJwYXJ0LnNldFwiLCBwYXJ0KSkgYXMgUGFydDtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgU3RvcmFnZUVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG5ldyBTdG9yYWdlRXJyb3IoeyByZWFzb246IFN0cmluZyhlKSwgY2F1c2U6IGUgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSxcbiAgICBzYW5kYm94OiB7XG4gICAgICBnZXQ6IGFzeW5jIChrZXkpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBycGMoXCJzYW5kYm94LmdldFwiLCB7IGtleSB9KTtcbiAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFNhbmRib3hOb3RGb3VuZEVycm9yKHsgaWQ6IGtleSB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgU3RvcmFnZUVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG5ldyBTdG9yYWdlRXJyb3IoeyByZWFzb246IFN0cmluZyhlKSwgY2F1c2U6IGUgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBnZXRCeVNlc3Npb246IGFzeW5jIChzZXNzaW9uSWQpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBycGMoXCJzYW5kYm94LmdldEJ5U2Vzc2lvblwiLCB7IHNlc3Npb25JZCB9KTtcbiAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFNhbmRib3hOb3RGb3VuZEVycm9yKHsgaWQ6IHNlc3Npb25JZCB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgU3RvcmFnZUVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG5ldyBTdG9yYWdlRXJyb3IoeyByZWFzb246IFN0cmluZyhlKSwgY2F1c2U6IGUgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBzZXQ6IGFzeW5jIChyZWNvcmQpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBycGMoXCJzYW5kYm94LnNldFwiLCByZWNvcmQpO1xuICAgICAgICAgIHJldHVybiByZWNvcmQ7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIFN0b3JhZ2VFcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIGU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBuZXcgU3RvcmFnZUVycm9yKHsgcmVhc29uOiBTdHJpbmcoZSksIGNhdXNlOiBlIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0sXG4gICAgY29tbWFuZDoge1xuICAgICAgZ2V0OiBhc3luYyAoaWQpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gKGF3YWl0IHJwYyhcImNvbW1hbmQuZ2V0XCIsIHsgaWQgfSkpIGFzIENvbW1hbmQgfCBudWxsO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBTdG9yYWdlRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbmV3IFN0b3JhZ2VFcnJvcih7IHJlYXNvbjogU3RyaW5nKGUpLCBjYXVzZTogZSB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHNldDogYXN5bmMgKGNvbW1hbmQpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gKGF3YWl0IHJwYyhcImNvbW1hbmQuc2V0XCIsIGNvbW1hbmQpKSBhcyBDb21tYW5kO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBTdG9yYWdlRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbmV3IFN0b3JhZ2VFcnJvcih7IHJlYXNvbjogU3RyaW5nKGUpLCBjYXVzZTogZSB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGxpc3Q6IGFzeW5jIChzZXNzaW9uSWQsIG9wdHMpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBycGMoXCJjb21tYW5kLmxpc3RcIiwge1xuICAgICAgICAgICAgc2Vzc2lvbklkLFxuICAgICAgICAgICAgaW5jbHVkZUZpbmlzaGVkOiBvcHRzPy5pbmNsdWRlRmluaXNoZWQsXG4gICAgICAgICAgICBjdXJzb3I6IG9wdHM/LmN1cnNvcixcbiAgICAgICAgICAgIGxpbWl0OiBvcHRzPy5saW1pdCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0IGFzIExpc3RSZXN1bHQ8Q29tbWFuZD47XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIFN0b3JhZ2VFcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIGU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBuZXcgU3RvcmFnZUVycm9yKHsgcmVhc29uOiBTdHJpbmcoZSksIGNhdXNlOiBlIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0sXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVTdG9yYWdlVXJsKFxuICBjb25maWc6IFN0b3JhZ2VDb25maWdcbik6IFByb21pc2U8UmVzb2x2ZWRTdG9yYWdlPiB7XG4gIHN3aXRjaCAoY29uZmlnLnR5cGUpIHtcbiAgICBjYXNlIFwibG9jYWxcIjoge1xuICAgICAgY29uc3QgeyBzdGFydExvY2FsU3RvcmFnZSB9ID0gYXdhaXQgaW1wb3J0KFwiLi9iaW5kaW5ncy9sb2NhbFwiKTtcbiAgICAgIHJldHVybiB7IHVybDogYXdhaXQgc3RhcnRMb2NhbFN0b3JhZ2UoeyBwYXRoOiBjb25maWcucGF0aCB9KSB9O1xuICAgIH1cbiAgICBjYXNlIFwidmVyY2VsXCI6IHtcbiAgICAgIGNvbnN0IHsgZ2V0VmVyY2VsU3RvcmFnZUNvbmZpZyB9ID0gYXdhaXQgaW1wb3J0KFwiLi9iaW5kaW5ncy92ZXJjZWxcIik7XG4gICAgICByZXR1cm4gZ2V0VmVyY2VsU3RvcmFnZUNvbmZpZygpO1xuICAgIH1cbiAgICBjYXNlIFwiY3VzdG9tXCI6IHtcbiAgICAgIHJldHVybiB7IHVybDogY29uZmlnLnVybCwgaGVhZGVyczogY29uZmlnLmhlYWRlcnMgfTtcbiAgICB9XG4gICAgZGVmYXVsdDoge1xuICAgICAgY29uZmlnIHNhdGlzZmllcyBuZXZlcjtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFVua25vd24gc3RvcmFnZSB0eXBlOiAkeyhjb25maWcgYXMgeyB0eXBlOiBzdHJpbmcgfSkudHlwZX1gXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RvcmFnZShzdG9yYWdlQ29uZmlnOiBTdG9yYWdlQ29uZmlnKTogU3RvcmFnZSB7XG4gIGxldCBjbGllbnRQcm9taXNlOiBQcm9taXNlPFN0b3JhZ2U+IHwgbnVsbCA9IG51bGw7XG4gIGNvbnN0IGdldENsaWVudCA9ICgpID0+IHtcbiAgICBpZiAoIWNsaWVudFByb21pc2UpIHtcbiAgICAgIGNsaWVudFByb21pc2UgPSByZXNvbHZlU3RvcmFnZVVybChzdG9yYWdlQ29uZmlnKS50aGVuKChyZXNvbHZlZCkgPT5cbiAgICAgICAgZ2V0U3RvcmFnZUNsaWVudChyZXNvbHZlZClcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBjbGllbnRQcm9taXNlO1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgc2Vzc2lvbjoge1xuICAgICAgZ2V0OiBhc3luYyAoaWQpID0+IChhd2FpdCBnZXRDbGllbnQoKSkuc2Vzc2lvbi5nZXQoaWQpLFxuICAgICAgc2V0OiBhc3luYyAoc2Vzc2lvbikgPT4gKGF3YWl0IGdldENsaWVudCgpKS5zZXNzaW9uLnNldChzZXNzaW9uKSxcbiAgICAgIGxpc3Q6IGFzeW5jIChvcHRzKSA9PiAoYXdhaXQgZ2V0Q2xpZW50KCkpLnNlc3Npb24ubGlzdChvcHRzKSxcbiAgICAgIHRhZzoge1xuICAgICAgICBzZXQ6IGFzeW5jIChvcHRzKSA9PiAoYXdhaXQgZ2V0Q2xpZW50KCkpLnNlc3Npb24udGFnLnNldChvcHRzKSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBtZXNzYWdlOiB7XG4gICAgICBsaXN0OiBhc3luYyAoc2Vzc2lvbklkLCBvcHRzKSA9PlxuICAgICAgICAoYXdhaXQgZ2V0Q2xpZW50KCkpLm1lc3NhZ2UubGlzdChzZXNzaW9uSWQsIG9wdHMpLFxuICAgICAgZ2V0OiBhc3luYyAoaWQpID0+IChhd2FpdCBnZXRDbGllbnQoKSkubWVzc2FnZS5nZXQoaWQpLFxuICAgICAgc2V0OiBhc3luYyAobWVzc2FnZSkgPT4gKGF3YWl0IGdldENsaWVudCgpKS5tZXNzYWdlLnNldChtZXNzYWdlKSxcbiAgICB9LFxuICAgIHBhcnQ6IHtcbiAgICAgIGxpc3RCeU1lc3NhZ2U6IGFzeW5jIChtZXNzYWdlSWQsIG9wdHMpID0+XG4gICAgICAgIChhd2FpdCBnZXRDbGllbnQoKSkucGFydC5saXN0QnlNZXNzYWdlKG1lc3NhZ2VJZCwgb3B0cyksXG4gICAgICBsaXN0QnlTZXNzaW9uOiBhc3luYyAoc2Vzc2lvbklkLCBvcHRzKSA9PlxuICAgICAgICAoYXdhaXQgZ2V0Q2xpZW50KCkpLnBhcnQubGlzdEJ5U2Vzc2lvbihzZXNzaW9uSWQsIG9wdHMpLFxuICAgICAgc2V0OiBhc3luYyAocGFydCkgPT4gKGF3YWl0IGdldENsaWVudCgpKS5wYXJ0LnNldChwYXJ0KSxcbiAgICB9LFxuICAgIHNhbmRib3g6IHtcbiAgICAgIGdldDogYXN5bmMgKGtleSkgPT4gKGF3YWl0IGdldENsaWVudCgpKS5zYW5kYm94LmdldChrZXkpLFxuICAgICAgc2V0OiBhc3luYyAob3B0cykgPT4gKGF3YWl0IGdldENsaWVudCgpKS5zYW5kYm94LnNldChvcHRzKSxcbiAgICAgIGdldEJ5U2Vzc2lvbjogYXN5bmMgKHNlc3Npb25JZCkgPT5cbiAgICAgICAgKGF3YWl0IGdldENsaWVudCgpKS5zYW5kYm94LmdldEJ5U2Vzc2lvbihzZXNzaW9uSWQpLFxuICAgIH0sXG4gICAgY29tbWFuZDoge1xuICAgICAgZ2V0OiBhc3luYyAoaWQpID0+IChhd2FpdCBnZXRDbGllbnQoKSkuY29tbWFuZC5nZXQoaWQpLFxuICAgICAgc2V0OiBhc3luYyAoY29tbWFuZCkgPT4gKGF3YWl0IGdldENsaWVudCgpKS5jb21tYW5kLnNldChjb21tYW5kKSxcbiAgICAgIGxpc3Q6IGFzeW5jIChzZXNzaW9uSWQsIG9wdHMpID0+XG4gICAgICAgIChhd2FpdCBnZXRDbGllbnQoKSkuY29tbWFuZC5saXN0KHNlc3Npb25JZCwgb3B0cyksXG4gICAgfSxcbiAgfTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7QUFBQSxZQUFZLFlBQVk7QUFFakIsSUFBTSx1QkFBTixjQUEwQyx5QkFBa0I7QUFBQSxFQUNqRSxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsQ0FBQyxFQUFFO0FBQUM7QUFFRyxJQUFNLGVBQU4sY0FBa0MseUJBQWtCO0FBQUEsRUFDekQsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLENBQUMsRUFBRTtBQUFDO0FBRUcsSUFBTSx1QkFBTixjQUEwQyx5QkFBa0I7QUFBQSxFQUNqRSxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsQ0FBQyxFQUFFO0FBQUM7QUFFRyxJQUFNLGVBQU4sY0FBa0MseUJBQWtCO0FBQUEsRUFDekQsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLENBQUMsRUFBRTtBQUFDO0FBRUcsSUFBTSxlQUFOLGNBQWtDLHlCQUFrQjtBQUFBLEVBQ3pELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxDQUFDLEVBQUU7QUFBQztBQUVHLElBQU0sdUJBQU4sY0FBMEMseUJBQWtCO0FBQUEsRUFDakUsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLENBQUMsRUFBRTtBQUFDOzs7QUNURyxTQUFTLGlCQUFpQixFQUFFLEtBQUssUUFBUSxHQUE2QjtBQUMzRSxpQkFBZSxJQUNiLFFBQ0EsUUFDK0M7QUFDL0MsVUFBTSxN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
|