@workflow/world-local 5.0.0-beta.23 → 5.0.0-beta.24
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 +9 -0
- package/dist/config.d.ts +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +13 -5
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +29 -5
- package/dist/queue.d.ts.map +1 -1
- package/dist/queue.js +7 -8
- package/dist/storage/events-storage.d.ts.map +1 -1
- package/dist/storage/events-storage.js +164 -20
- package/dist/storage/helpers.d.ts +37 -0
- package/dist/storage/helpers.d.ts.map +1 -1
- package/dist/storage/helpers.js +73 -2
- package/dist/storage/hooks-storage.d.ts.map +1 -1
- package/dist/storage/hooks-storage.js +18 -6
- package/dist/streamer.d.ts.map +1 -1
- package/dist/streamer.js +79 -62
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -6,3 +6,12 @@ Stores workflow data as JSON files on disk and provides in-memory queuing. Autom
|
|
|
6
6
|
|
|
7
7
|
Used by default on `next dev` and `next start`.
|
|
8
8
|
|
|
9
|
+
## Programmatic configuration
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
import { createWorld } from '@workflow/world-local';
|
|
13
|
+
|
|
14
|
+
const world = createWorld({
|
|
15
|
+
dataDir: './custom-workflow-data',
|
|
16
|
+
});
|
|
17
|
+
```
|
package/dist/config.d.ts
CHANGED
|
@@ -25,6 +25,7 @@ export type Config = {
|
|
|
25
25
|
export declare const config: {
|
|
26
26
|
readonly value: Config;
|
|
27
27
|
};
|
|
28
|
+
export declare function resolveDirectBaseUrl(config: Partial<Config>): string;
|
|
28
29
|
/**
|
|
29
30
|
* Resolves the base URL for queue requests following the priority order:
|
|
30
31
|
* 1. config.baseUrl (highest priority - full override from args)
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,2BAA2B,QAAQ,CAAC;AAMjD,MAAM,MAAM,MAAM,GAAG;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;;;;OAKG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC,CAAC;AAEF,eAAO,MAAM,MAAM;;CAKjB,CAAC;AAEH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAMpE;AAED;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CA2B7E"}
|
package/dist/config.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { createWorkflowBaseUrl, createWorkflowHealthEndpoint, } from '@workflow/utils';
|
|
1
2
|
import { getWorkflowPort } from '@workflow/utils/get-port';
|
|
2
3
|
import { once } from './util.js';
|
|
3
4
|
const getDataDirFromEnv = () => {
|
|
@@ -12,6 +13,11 @@ export const config = once(() => {
|
|
|
12
13
|
const baseUrl = getBaseUrlFromEnv();
|
|
13
14
|
return { dataDir, baseUrl };
|
|
14
15
|
});
|
|
16
|
+
export function resolveDirectBaseUrl(config) {
|
|
17
|
+
return (config.baseUrl ??
|
|
18
|
+
process.env.WORKFLOW_LOCAL_BASE_URL ??
|
|
19
|
+
createWorkflowBaseUrl('http://localhost'));
|
|
20
|
+
}
|
|
15
21
|
/**
|
|
16
22
|
* Resolves the base URL for queue requests following the priority order:
|
|
17
23
|
* 1. config.baseUrl (highest priority - full override from args)
|
|
@@ -30,15 +36,17 @@ export async function resolveBaseUrl(config) {
|
|
|
30
36
|
return process.env.WORKFLOW_LOCAL_BASE_URL;
|
|
31
37
|
}
|
|
32
38
|
if (typeof config.port === 'number') {
|
|
33
|
-
return `http://localhost:${config.port}
|
|
39
|
+
return createWorkflowBaseUrl(`http://localhost:${config.port}`);
|
|
34
40
|
}
|
|
35
41
|
if (process.env.PORT) {
|
|
36
|
-
return `http://localhost:${process.env.PORT}
|
|
42
|
+
return createWorkflowBaseUrl(`http://localhost:${process.env.PORT}`);
|
|
37
43
|
}
|
|
38
|
-
const detectedPort = await getWorkflowPort(
|
|
44
|
+
const detectedPort = await getWorkflowPort({
|
|
45
|
+
endpoint: createWorkflowHealthEndpoint(),
|
|
46
|
+
});
|
|
39
47
|
if (detectedPort) {
|
|
40
|
-
return `http://localhost:${detectedPort}
|
|
48
|
+
return createWorkflowBaseUrl(`http://localhost:${detectedPort}`);
|
|
41
49
|
}
|
|
42
50
|
throw new Error('Unable to resolve base URL for workflow queue.');
|
|
43
51
|
}
|
|
44
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLDRCQUE0QixHQUM3QixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRWpDLE1BQU0saUJBQWlCLEdBQUcsR0FBRyxFQUFFO0lBQzdCLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsSUFBSSxnQkFBZ0IsQ0FBQztBQUNqRSxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBRyxLQUFLLENBQUM7QUFFakQsTUFBTSxpQkFBaUIsR0FBRyxHQUFHLEVBQUU7SUFDN0IsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLHVCQUF1QixDQUFDO0FBQzdDLENBQUMsQ0FBQztBQTBCRixNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFTLEdBQUcsRUFBRTtJQUN0QyxNQUFNLE9BQU8sR0FBRyxpQkFBaUIsRUFBRSxDQUFDO0lBQ3BDLE1BQU0sT0FBTyxHQUFHLGlCQUFpQixFQUFFLENBQUM7SUFFcEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQztBQUVILE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxNQUF1QjtJQUMxRCxPQUFPLENBQ0wsTUFBTSxDQUFDLE9BQU87UUFDZCxPQUFPLENBQUMsR0FBRyxDQUFDLHVCQUF1QjtRQUNuQyxxQkFBcUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUMxQyxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLGNBQWMsQ0FBQyxNQUF1QjtJQUMxRCxJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNuQixPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUM7SUFDeEIsQ0FBQztJQUVELHdFQUF3RTtJQUN4RSwyRUFBMkU7SUFDM0UsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFDeEMsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLHVCQUF1QixDQUFDO0lBQzdDLENBQUM7SUFFRCxJQUFJLE9BQU8sTUFBTSxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUNwQyxPQUFPLHFCQUFxQixDQUFDLG9CQUFvQixNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JCLE9BQU8scUJBQXFCLENBQUMsb0JBQW9CLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRUQsTUFBTSxZQUFZLEdBQUcsTUFBTSxlQUFlLENBQUM7UUFDekMsUUFBUSxFQUFFLDRCQUE0QixFQUFFO0tBQ3pDLENBQUMsQ0FBQztJQUNILElBQUksWUFBWSxFQUFFLENBQUM7UUFDakIsT0FBTyxxQkFBcUIsQ0FBQyxvQkFBb0IsWUFBWSxFQUFFLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQsTUFBTSxJQUFJLEtBQUssQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDO0FBQ3BFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBjcmVhdGVXb3JrZmxvd0Jhc2VVcmwsXG4gIGNyZWF0ZVdvcmtmbG93SGVhbHRoRW5kcG9pbnQsXG59IGZyb20gJ0B3b3JrZmxvdy91dGlscyc7XG5pbXBvcnQgeyBnZXRXb3JrZmxvd1BvcnQgfSBmcm9tICdAd29ya2Zsb3cvdXRpbHMvZ2V0LXBvcnQnO1xuaW1wb3J0IHsgb25jZSB9IGZyb20gJy4vdXRpbC5qcyc7XG5cbmNvbnN0IGdldERhdGFEaXJGcm9tRW52ID0gKCkgPT4ge1xuICByZXR1cm4gcHJvY2Vzcy5lbnYuV09SS0ZMT1dfTE9DQUxfREFUQV9ESVIgfHwgJy53b3JrZmxvdy1kYXRhJztcbn07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1JFU09MVkVfREFUQV9PUFRJT04gPSAnYWxsJztcblxuY29uc3QgZ2V0QmFzZVVybEZyb21FbnYgPSAoKSA9PiB7XG4gIHJldHVybiBwcm9jZXNzLmVudi5XT1JLRkxPV19MT0NBTF9CQVNFX1VSTDtcbn07XG5cbmV4cG9ydCB0eXBlIENvbmZpZyA9IHtcbiAgZGF0YURpcjogc3RyaW5nO1xuICBwb3J0PzogbnVtYmVyO1xuICBiYXNlVXJsPzogc3RyaW5nO1xuICAvKipcbiAgICogV2hldGhlciBzdGFydCgpIHNob3VsZCByZS1lbnF1ZXVlIHBlbmRpbmcvcnVubmluZyBydW5zIGZyb20gc3RvcmFnZS5cbiAgICogRGVmYXVsdHMgdG8gdHJ1ZS4gVGVzdCBoYXJuZXNzZXMgdGhhdCBhbHdheXMgc3RhcnQgZnJvbSBhIGNsZWFuIHNsYXRlIGNhblxuICAgKiBkaXNhYmxlIHJlY292ZXJ5IHRvIGF2b2lkIHJlcGxheWluZyBzdGFsZSBydW5zLlxuICAgKi9cbiAgcmVjb3ZlckFjdGl2ZVJ1bnM/OiBib29sZWFuO1xuICAvKipcbiAgICogT3B0aW9uYWwgdGFnIHRvIHNjb3BlIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucy5cbiAgICogV2hlbiBzZXQsIGZpbGVzIGFyZSB3cml0dGVuIGFzIGB7aWR9Lnt0YWd9Lmpzb25gIGFuZCBgY2xlYXIoKWAgb25seSBkZWxldGVzXG4gICAqIGZpbGVzIG1hdGNoaW5nIHRoaXMgdGFnLiBVc2VkIGJ5IHZpdGVzdCB0byBpc29sYXRlIHRlc3QgZGF0YSBpbiB0aGUgc2hhcmVkXG4gICAqIGAud29ya2Zsb3ctZGF0YWAgZGlyZWN0b3J5LlxuICAgKi9cbiAgdGFnPzogc3RyaW5nO1xuICAvKipcbiAgICogT3ZlcnJpZGUgdGhlIGZsdXNoIGludGVydmFsIChpbiBtcykgZm9yIGJ1ZmZlcmVkIHN0cmVhbSB3cml0ZXMuXG4gICAqIERlZmF1bHQgaXMgMTBtcy4gU2V0IHRvIDAgZm9yIGltbWVkaWF0ZSBmbHVzaGluZy5cbiAgICovXG4gIHN0cmVhbUZsdXNoSW50ZXJ2YWxNcz86IG51bWJlcjtcbn07XG5cbmV4cG9ydCBjb25zdCBjb25maWcgPSBvbmNlPENvbmZpZz4oKCkgPT4ge1xuICBjb25zdCBkYXRhRGlyID0gZ2V0RGF0YURpckZyb21FbnYoKTtcbiAgY29uc3QgYmFzZVVybCA9IGdldEJhc2VVcmxGcm9tRW52KCk7XG5cbiAgcmV0dXJuIHsgZGF0YURpciwgYmFzZVVybCB9O1xufSk7XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlRGlyZWN0QmFzZVVybChjb25maWc6IFBhcnRpYWw8Q29uZmlnPik6IHN0cmluZyB7XG4gIHJldHVybiAoXG4gICAgY29uZmlnLmJhc2VVcmwgPz9cbiAgICBwcm9jZXNzLmVudi5XT1JLRkxPV19MT0NBTF9CQVNFX1VSTCA/P1xuICAgIGNyZWF0ZVdvcmtmbG93QmFzZVVybCgnaHR0cDovL2xvY2FsaG9zdCcpXG4gICk7XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgdGhlIGJhc2UgVVJMIGZvciBxdWV1ZSByZXF1ZXN0cyBmb2xsb3dpbmcgdGhlIHByaW9yaXR5IG9yZGVyOlxuICogMS4gY29uZmlnLmJhc2VVcmwgKGhpZ2hlc3QgcHJpb3JpdHkgLSBmdWxsIG92ZXJyaWRlIGZyb20gYXJncylcbiAqIDIuIFdPUktGTE9XX0xPQ0FMX0JBU0VfVVJMIGVudiB2YXIgKGNoZWNrZWQgZGlyZWN0bHkgdG8gaGFuZGxlIGxhdGUgZW52IHZhciBzZXR0aW5nKVxuICogMy4gY29uZmlnLnBvcnQgKGV4cGxpY2l0IHBvcnQgb3ZlcnJpZGUgZnJvbSBhcmdzKVxuICogNC4gUE9SVCBlbnYgdmFyIChleHBsaWNpdCBjb25maWd1cmF0aW9uKVxuICogNS4gQXV0by1kZXRlY3RlZCBwb3J0IHZpYSBnZXRQb3J0IChkZXRlY3QgYWN0dWFsIGxpc3RlbmluZyBwb3J0KVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZUJhc2VVcmwoY29uZmlnOiBQYXJ0aWFsPENvbmZpZz4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBpZiAoY29uZmlnLmJhc2VVcmwpIHtcbiAgICByZXR1cm4gY29uZmlnLmJhc2VVcmw7XG4gIH1cblxuICAvLyBDaGVjayBlbnYgdmFyIGRpcmVjdGx5IGluIGNhc2UgaXQgd2FzIHNldCBhZnRlciB0aGUgY29uZmlnIHdhcyBjYWNoZWRcbiAgLy8gVGhpcyBpcyBpbXBvcnRhbnQgZm9yIENMSSB0b29scyB0aGF0IHNldCB0aGUgZW52IHZhciBhZnRlciBtb2R1bGUgaW1wb3J0XG4gIGlmIChwcm9jZXNzLmVudi5XT1JLRkxPV19MT0NBTF9CQVNFX1VSTCkge1xuICAgIHJldHVybiBwcm9jZXNzLmVudi5XT1JLRkxPV19MT0NBTF9CQVNFX1VSTDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgY29uZmlnLnBvcnQgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIGNyZWF0ZVdvcmtmbG93QmFzZVVybChgaHR0cDovL2xvY2FsaG9zdDoke2NvbmZpZy5wb3J0fWApO1xuICB9XG5cbiAgaWYgKHByb2Nlc3MuZW52LlBPUlQpIHtcbiAgICByZXR1cm4gY3JlYXRlV29ya2Zsb3dCYXNlVXJsKGBodHRwOi8vbG9jYWxob3N0OiR7cHJvY2Vzcy5lbnYuUE9SVH1gKTtcbiAgfVxuXG4gIGNvbnN0IGRldGVjdGVkUG9ydCA9IGF3YWl0IGdldFdvcmtmbG93UG9ydCh7XG4gICAgZW5kcG9pbnQ6IGNyZWF0ZVdvcmtmbG93SGVhbHRoRW5kcG9pbnQoKSxcbiAgfSk7XG4gIGlmIChkZXRlY3RlZFBvcnQpIHtcbiAgICByZXR1cm4gY3JlYXRlV29ya2Zsb3dCYXNlVXJsKGBodHRwOi8vbG9jYWxob3N0OiR7ZGV0ZWN0ZWRQb3J0fWApO1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gcmVzb2x2ZSBiYXNlIFVSTCBmb3Igd29ya2Zsb3cgcXVldWUuJyk7XG59XG4iXX0=
|
package/dist/index.d.ts
CHANGED
|
@@ -22,5 +22,9 @@ export type LocalWorld = World & {
|
|
|
22
22
|
* @throws {DataDirAccessError} If the data directory cannot be created or accessed
|
|
23
23
|
* @throws {DataDirVersionError} If the data directory version is incompatible
|
|
24
24
|
*/
|
|
25
|
+
export declare function createWorld(args?: Partial<Config>): LocalWorld;
|
|
26
|
+
/**
|
|
27
|
+
* @deprecated Use `createWorld()` instead.
|
|
28
|
+
*/
|
|
25
29
|
export declare function createLocalWorld(args?: Partial<Config>): LocalWorld;
|
|
26
30
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAE1D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAa1C,OAAO,EAAe,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAM7D,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,aAAa,EACb,WAAW,EACX,KAAK,aAAa,EAClB,YAAY,GACb,MAAM,WAAW,CAAC;AAEnB,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG;IAC/B,+EAA+E;IAC/E,eAAe,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC;IACnE,qEAAqE;IACrE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,UAAU,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAE1D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAa1C,OAAO,EAAe,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAM7D,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,aAAa,EACb,WAAW,EACX,KAAK,aAAa,EAClB,YAAY,GACb,MAAM,WAAW,CAAC;AAEnB,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG;IAC/B,+EAA+E;IAC/E,eAAe,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC;IACnE,qEAAqE;IACrE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,UAAU,CAyJ9D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,UAAU,CAEnE"}
|
package/dist/index.js
CHANGED
|
@@ -25,7 +25,7 @@ export { DataDirAccessError, DataDirVersionError, ensureDataDir, initDataDir, pa
|
|
|
25
25
|
* @throws {DataDirAccessError} If the data directory cannot be created or accessed
|
|
26
26
|
* @throws {DataDirVersionError} If the data directory version is incompatible
|
|
27
27
|
*/
|
|
28
|
-
export function
|
|
28
|
+
export function createWorld(args) {
|
|
29
29
|
const definedArgs = args
|
|
30
30
|
? Object.fromEntries(Object.entries(args).filter(([, value]) => value !== undefined))
|
|
31
31
|
: {};
|
|
@@ -111,10 +111,28 @@ export function createLocalWorld(args) {
|
|
|
111
111
|
await fs
|
|
112
112
|
.rm(path.join(basedir, '.locks'), { recursive: true, force: true })
|
|
113
113
|
.catch(() => { });
|
|
114
|
-
// Delete tagged stream chunks (.{tag}.bin files)
|
|
114
|
+
// Delete tagged stream chunks (.{tag}.bin files). Chunks are sharded
|
|
115
|
+
// one directory per stream (streams/chunks/<streamName>/<chunkId>.{tag}.bin),
|
|
116
|
+
// so iterate each per-stream directory — the top-level chunks dir now
|
|
117
|
+
// holds only subdirectories, so listing it directly would match nothing
|
|
118
|
+
// and silently leak tagged chunk files across test sessions.
|
|
115
119
|
const chunksDir = path.join(basedir, 'streams', 'chunks');
|
|
116
|
-
|
|
117
|
-
|
|
120
|
+
let streamDirEntries;
|
|
121
|
+
try {
|
|
122
|
+
streamDirEntries = await fs.readdir(chunksDir, {
|
|
123
|
+
withFileTypes: true,
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
catch {
|
|
127
|
+
streamDirEntries = [];
|
|
128
|
+
}
|
|
129
|
+
await Promise.all(streamDirEntries
|
|
130
|
+
.filter((entry) => entry.isDirectory())
|
|
131
|
+
.map(async (entry) => {
|
|
132
|
+
const streamChunkDir = path.join(chunksDir, entry.name);
|
|
133
|
+
const taggedBinFiles = await listTaggedFilesByExtension(streamChunkDir, tag, '.bin');
|
|
134
|
+
await Promise.all(taggedBinFiles.map((f) => fs.unlink(path.join(streamChunkDir, f)).catch(() => { })));
|
|
135
|
+
}));
|
|
118
136
|
// Clear the in-memory write cache so deleted paths are forgotten
|
|
119
137
|
clearCreatedFilesCache();
|
|
120
138
|
}
|
|
@@ -127,4 +145,10 @@ export function createLocalWorld(args) {
|
|
|
127
145
|
},
|
|
128
146
|
};
|
|
129
147
|
}
|
|
130
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsSUFBSSxFQUFFLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDekMsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3RDLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUU3QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUU1RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3JDLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsVUFBVSxFQUNWLE1BQU0sRUFDTixVQUFVLEVBQ1YsZUFBZSxFQUNmLDBCQUEwQixFQUMxQixRQUFRLEdBQ1QsTUFBTSxTQUFTLENBQUM7QUFDakIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN4QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsV0FBVyxFQUFzQixNQUFNLFlBQVksQ0FBQztBQUM3RCxPQUFPLEVBQUUsU0FBUyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRS9DLG1EQUFtRDtBQUNuRCxPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLG1CQUFtQixFQUNuQixhQUFhLEVBQ2IsV0FBVyxFQUVYLFlBQVksR0FDYixNQUFNLFdBQVcsQ0FBQztBQVduQjs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsSUFBc0I7SUFDckQsTUFBTSxXQUFXLEdBQUcsSUFBSTtRQUN0QixDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FDaEIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FDaEU7UUFDSCxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ1AsTUFBTSxZQUFZLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxLQUFLLEVBQUUsR0FBRyxXQUFXLEVBQUUsQ0FBQztJQUN6RCxNQUFNLEdBQUcsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDO0lBQzdCLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN4QyxNQUFNLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixFQUFFLEdBQUcsT0FBTyxFQUFFLEdBQUcsYUFBYSxDQUNqRSxZQUFZLENBQUMsT0FBTyxFQUNwQixHQUFHLENBQ0osQ0FBQztJQUNGLE1BQU0saUJBQWlCLEdBQUcsWUFBWSxDQUFDLGlCQUFpQixJQUFJLElBQUksQ0FBQztJQUNqRSxPQUFPO1FBQ0wsV0FBVyxFQUFFLG9CQUFvQjtRQUNqQyxHQUFHLEtBQUs7UUFDUixHQUFHLE9BQU87UUFDVixHQUFHLGdCQUFnQixDQUFDLGVBQWUsRUFBRTtZQUNuQyxHQUFHLGNBQWMsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQztZQUM1QyxHQUFHLENBQUMsWUFBWSxDQUFDLHFCQUFxQixLQUFLLFNBQVMsSUFBSTtnQkFDdEQscUJBQXFCLEVBQUUsWUFBWSxDQUFDLHFCQUFxQjthQUMxRCxDQUFDO1NBQ0gsQ0FBQztRQUNGLEtBQUssQ0FBQyxLQUFLO1lBQ1QsTUFBTSxXQUFXLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3hDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO2dCQUN2QixPQUFPO1lBQ1QsQ0FBQztZQUNELHlFQUF5RTtZQUN6RSx1RUFBdUU7WUFDdkUsMEVBQTBFO1lBQzFFLHlFQUF5RTtZQUN6RSx1RUFBdUU7WUFDdkUsd0VBQXdFO1lBQ3hFLHdEQUF3RDtZQUN4RCxNQUFNLFlBQVksR0FBRyxHQUFHO2dCQUN0QixDQUFDLENBQUMsQ0FBQyxNQUFjLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDO2dCQUN6QyxDQUFDLENBQUMsVUFBVSxDQUFDO1lBQ2YsTUFBTSxZQUFZLEdBQUc7Z0JBQ25CLEdBQUcsT0FBTyxDQUFDLElBQUk7Z0JBQ2YsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUNoQixPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztvQkFDaEIsR0FBRyxNQUFNO29CQUNULFlBQVk7aUJBQ2IsQ0FBQyxDQUE2QjthQUNsQyxDQUFDO1lBQ0YsTUFBTSxtQkFBbUIsQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsQ0FBQztRQUN0RSxDQUFDO1FBQ0QsS0FBSyxDQUFDLEtBQUs7WUFDVCxpQkFBaUIsRUFBRSxDQUFDO1lBQ3BCLE1BQU0sS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3RCLENBQUM7UUFDRCxLQUFLLENBQUMsS0FBSztZQUNULGlCQUFpQixFQUFFLENBQUM7WUFDcEIsSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFDUixrREFBa0Q7Z0JBQ2xELE1BQU0sT0FBTyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUM7Z0JBRXJDLDREQUE0RDtnQkFDNUQsNkRBQTZEO2dCQUM3RCwwREFBMEQ7Z0JBQzFELHNEQUFzRDtnQkFDdEQsMERBQTBEO2dCQUMxRCxpREFBaUQ7Z0JBQ2pELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUM3QyxNQUFNLGVBQWUsR0FBRyxNQUFNLGVBQWUsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQzdELE1BQU0sRUFBRSxVQUFVLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO2dCQUN2RCxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQ2YsZUFBZSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUU7b0JBQ3JDLE1BQU0sSUFBSSxHQUFHLE1BQU0sUUFBUSxDQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsRUFDN0IsVUFBVSxDQUNYLENBQUM7b0JBQ0YsSUFBSSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUM7d0JBQ2hCLE1BQU0sVUFBVSxDQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUMvRCxDQUFDO3dCQUNGLE1BQU0sVUFBVSxDQUNkLHNCQUFzQixDQUNwQixPQUFPLEVBQ1AsSUFBSSxDQUFDLEtBQUssRUFDVixJQUFJLENBQUMsS0FBSyxFQUNWLElBQUksQ0FBQyxNQUFNLENBQ1osQ0FDRixDQUFDO29CQUNKLENBQUM7Z0JBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQztnQkFFRixvREFBb0Q7Z0JBQ3BELE1BQU0sVUFBVSxHQUFHO29CQUNqQixNQUFNO29CQUNOLE9BQU87b0JBQ1AsUUFBUTtvQkFDUixPQUFPO29CQUNQLE9BQU87b0JBQ1AsY0FBYztpQkFDZixDQUFDO2dCQUNGLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FDZixVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRTtvQkFDM0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7b0JBQ3hDLE1BQU0sS0FBSyxHQUFHLE1BQU0sZUFBZSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztvQkFDbEQsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUNmLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ3BELENBQUM7Z0JBQ0osQ0FBQyxDQUFDLENBQ0gsQ0FBQztnQkFDRiw0REFBNEQ7Z0JBQzVELE1BQU0sRUFBRTtxQkFDTCxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztxQkFDbEUsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNuQixpREFBaUQ7Z0JBQ2pELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDMUQsTUFBTSxjQUFjLEdBQUcsTUFBTSwwQkFBMEIsQ0FDckQsU0FBUyxFQUNULEdBQUcsRUFDSCxNQUFNLENBQ1AsQ0FBQztnQkFDRixNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQ2YsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQ3ZCLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDLENBQ25ELENBQ0YsQ0FBQztnQkFDRixpRUFBaUU7Z0JBQ2pFLHNCQUFzQixFQUFFLENBQUM7WUFDM0IsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLGtFQUFrRTtnQkFDbEUsc0JBQXNCLEVBQUUsQ0FBQztnQkFDekIsTUFBTSxFQUFFLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBQ2pFLE1BQU0sV0FBVyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMxQyxDQUFDO1FBQ0gsQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcHJvbWlzZXMgYXMgZnMgfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7IHJtIH0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHR5cGUgeyBRdWV1ZVByZWZpeCwgV29ybGQgfSBmcm9tICdAd29ya2Zsb3cvd29ybGQnO1xuaW1wb3J0IHsgcmVlbnF1ZXVlQWN0aXZlUnVucywgU1BFQ19WRVJTSU9OX0NVUlJFTlQgfSBmcm9tICdAd29ya2Zsb3cvd29ybGQnO1xuaW1wb3J0IHR5cGUgeyBDb25maWcgfSBmcm9tICcuL2NvbmZpZy5qcyc7XG5pbXBvcnQgeyBjb25maWcgfSBmcm9tICcuL2NvbmZpZy5qcyc7XG5pbXBvcnQge1xuICBjbGVhckNyZWF0ZWRGaWxlc0NhY2hlLFxuICBkZWxldGVKU09OLFxuICBoYXNUYWcsXG4gIGlzVW50YWdnZWQsXG4gIGxpc3RUYWdnZWRGaWxlcyxcbiAgbGlzdFRhZ2dlZEZpbGVzQnlFeHRlbnNpb24sXG4gIHJlYWRKU09OLFxufSBmcm9tICcuL2ZzLmpzJztcbmltcG9ydCB7IGluaXREYXRhRGlyIH0gZnJvbSAnLi9pbml0LmpzJztcbmltcG9ydCB7IGluc3RydW1lbnRPYmplY3QgfSBmcm9tICcuL2luc3RydW1lbnRPYmplY3QuanMnO1xuaW1wb3J0IHsgY3JlYXRlUXVldWUsIHR5cGUgRGlyZWN0SGFuZGxlciB9IGZyb20gJy4vcXVldWUuanMnO1xuaW1wb3J0IHsgaGFzaFRva2VuLCBob29rUmVjb3ZlcnlNYXJrZXJQYXRoIH0gZnJvbSAnLi9zdG9yYWdlL2hlbHBlcnMuanMnO1xuaW1wb3J0IHsgY3JlYXRlU3RvcmFnZSB9IGZyb20gJy4vc3RvcmFnZS5qcyc7XG5pbXBvcnQgeyBjcmVhdGVTdHJlYW1lciB9IGZyb20gJy4vc3RyZWFtZXIuanMnO1xuXG4vLyBSZS1leHBvcnQgaW5pdCB0eXBlcyBhbmQgdXRpbGl0aWVzIGZvciBjb25zdW1lcnNcbmV4cG9ydCB7XG4gIERhdGFEaXJBY2Nlc3NFcnJvcixcbiAgRGF0YURpclZlcnNpb25FcnJvcixcbiAgZW5zdXJlRGF0YURpcixcbiAgaW5pdERhdGFEaXIsXG4gIHR5cGUgUGFyc2VkVmVyc2lvbixcbiAgcGFyc2VWZXJzaW9uLFxufSBmcm9tICcuL2luaXQuanMnO1xuXG5leHBvcnQgdHlwZSB7IERpcmVjdEhhbmRsZXIgfSBmcm9tICcuL3F1ZXVlLmpzJztcblxuZXhwb3J0IHR5cGUgTG9jYWxXb3JsZCA9IFdvcmxkICYge1xuICAvKiogUmVnaXN0ZXIgYSBkaXJlY3QgaW4tcHJvY2VzcyBoYW5kbGVyIGZvciBhIHF1ZXVlIHByZWZpeCwgYnlwYXNzaW5nIEhUVFAuICovXG4gIHJlZ2lzdGVySGFuZGxlcihwcmVmaXg6IFF1ZXVlUHJlZml4LCBoYW5kbGVyOiBEaXJlY3RIYW5kbGVyKTogdm9pZDtcbiAgLyoqIENsZWFyIGFsbCB3b3JrZmxvdyBkYXRhIChydW5zLCBzdGVwcywgZXZlbnRzLCBob29rcywgc3RyZWFtcykuICovXG4gIGNsZWFyKCk6IFByb21pc2U8dm9pZD47XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBsb2NhbCB3b3JsZCBpbnN0YW5jZSB0aGF0IGNvbWJpbmVzIHF1ZXVlLCBzdG9yYWdlLCBhbmQgc3RyZWFtZXIgZnVuY3Rpb25hbGl0aWVzLlxuICpcbiAqIEBwYXJhbSBhcmdzIC0gT3B0aW9uYWwgY29uZmlndXJhdGlvbiBvYmplY3RcbiAqIEBwYXJhbSBhcmdzLmRhdGFEaXIgLSBEaXJlY3RvcnkgZm9yIHN0b3Jpbmcgd29ya2Zsb3cgZGF0YSAoZGVmYXVsdDogYC53b3JrZmxvdy1kYXRhL2ApXG4gKiBAcGFyYW0gYXJncy5wb3J0IC0gUG9ydCBvdmVycmlkZSBmb3IgcXVldWUgdHJhbnNwb3J0IChkZWZhdWx0OiBhdXRvLWRldGVjdGVkKVxuICogQHBhcmFtIGFyZ3MuYmFzZVVybCAtIEZ1bGwgYmFzZSBVUkwgb3ZlcnJpZGUgZm9yIHF1ZXVlIHRyYW5zcG9ydCAoZGVmYXVsdDogYGh0dHA6Ly9sb2NhbGhvc3Q6e3BvcnR9YClcbiAqIEBwYXJhbSBhcmdzLnJlY292ZXJBY3RpdmVSdW5zIC0gV2hldGhlciBgc3RhcnQoKWAgc2hvdWxkIHJlLWVucXVldWUgcGVuZGluZy9ydW5uaW5nIHJ1bnMgZnJvbSBzdG9yYWdlIChkZWZhdWx0OiBgdHJ1ZWApXG4gKiBAcGFyYW0gYXJncy50YWcgLSBPcHRpb25hbCB0YWcgdG8gc2NvcGUgZmlsZXMgKGUuZy4sIGB2aXRlc3QtMGApLiBXaGVuIHNldCwgZmlsZXMgYXJlIHdyaXR0ZW5cbiAqICAgYXMgYHtpZH0ue3RhZ30uanNvbmAgYW5kIGBjbGVhcigpYCBvbmx5IGRlbGV0ZXMgZmlsZXMgbWF0Y2hpbmcgdGhpcyB0YWcuXG4gKiBAdGhyb3dzIHtEYXRhRGlyQWNjZXNzRXJyb3J9IElmIHRoZSBkYXRhIGRpcmVjdG9yeSBjYW5ub3QgYmUgY3JlYXRlZCBvciBhY2Nlc3NlZFxuICogQHRocm93cyB7RGF0YURpclZlcnNpb25FcnJvcn0gSWYgdGhlIGRhdGEgZGlyZWN0b3J5IHZlcnNpb24gaXMgaW5jb21wYXRpYmxlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVMb2NhbFdvcmxkKGFyZ3M/OiBQYXJ0aWFsPENvbmZpZz4pOiBMb2NhbFdvcmxkIHtcbiAgY29uc3QgZGVmaW5lZEFyZ3MgPSBhcmdzXG4gICAgPyBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGFyZ3MpLmZpbHRlcigoWywgdmFsdWVdKSA9PiB2YWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgKVxuICAgIDoge307XG4gIGNvbnN0IG1lcmdlZENvbmZpZyA9IHsgLi4uY29uZmlnLnZhbHVlLCAuLi5kZWZpbmVkQXJncyB9O1xuICBjb25zdCB0YWcgPSBtZXJnZWRDb25maWcudGFnO1xuICBjb25zdCBxdWV1ZSA9IGNyZWF0ZVF1ZXVlKG1lcmdlZENvbmZpZyk7XG4gIGNvbnN0IHsgY2xlYXJDYWNoZTogY2xlYXJTdG9yYWdlQ2FjaGUsIC4uLnN0b3JhZ2UgfSA9IGNyZWF0ZVN0b3JhZ2UoXG4gICAgbWVyZ2VkQ29uZmlnLmRhdGFEaXIsXG4gICAgdGFnXG4gICk7XG4gIGNvbnN0IHJlY292ZXJBY3RpdmVSdW5zID0gbWVyZ2VkQ29uZmlnLnJlY292ZXJBY3RpdmVSdW5zID8/IHRydWU7XG4gIHJldHVybiB7XG4gICAgc3BlY1ZlcnNpb246IFNQRUNfVkVSU0lPTl9DVVJSRU5ULFxuICAgIC4uLnF1ZXVlLFxuICAgIC4uLnN0b3JhZ2UsXG4gICAgLi4uaW5zdHJ1bWVudE9iamVjdCgnd29ybGQuc3RyZWFtcycsIHtcbiAgICAgIC4uLmNyZWF0ZVN0cmVhbWVyKG1lcmdlZENvbmZpZy5kYXRhRGlyLCB0YWcpLFxuICAgICAgLi4uKG1lcmdlZENvbmZpZy5zdHJlYW1GbHVzaEludGVydmFsTXMgIT09IHVuZGVmaW5lZCAmJiB7XG4gICAgICAgIHN0cmVhbUZsdXNoSW50ZXJ2YWxNczogbWVyZ2VkQ29uZmlnLnN0cmVhbUZsdXNoSW50ZXJ2YWxNcyxcbiAgICAgIH0pLFxuICAgIH0pLFxuICAgIGFzeW5jIHN0YXJ0KCkge1xuICAgICAgYXdhaXQgaW5pdERhdGFEaXIobWVyZ2VkQ29uZmlnLmRhdGFEaXIpO1xuICAgICAgaWYgKCFyZWNvdmVyQWN0aXZlUnVucykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBTY29wZSByZWNvdmVyeSB0byB0aGlzIHdvcmxkJ3Mgb3duIGZpbGVzLiBBIHRhZ2dlZCB3b3JsZCByZWNvdmVycyBvbmx5XG4gICAgICAvLyBpdHMgdGFnOyBhbiB1bnRhZ2dlZCB3b3JsZCByZWNvdmVycyBvbmx5IHVudGFnZ2VkIGZpbGVzLiBXaXRob3V0IHRoZVxuICAgICAgLy8gdW50YWdnZWQgZmlsdGVyLCBhbiB1bnRhZ2dlZCBkZXYgc2VydmVyIHNoYXJpbmcgdGhlIGRhdGEgZGlyZWN0b3J5IHdpdGhcbiAgICAgIC8vIHRoZSB2aXRlc3QgaGFybmVzcyB3b3VsZCBsaXN0IHRhZ2dlZCBydW5zIChsaXN0IGVudW1lcmF0ZXMgZXZlcnkgZmlsZSlcbiAgICAgIC8vIGFuZCByZS1lbnF1ZXVlIHRoZW0sIGJ1dCBydW5fc3RhcnRlZCdzIHRhZ2dlZC1vci11bnRhZ2dlZCByZWFkIGNhbid0XG4gICAgICAvLyByZXNvbHZlIGEgZm9yZWlnbiB0YWcg4oCUIHlpZWxkaW5nIFwiZGlkIG5vdCByZXR1cm4gdGhlIHJ1biBlbnRpdHlcIiA1MDBzXG4gICAgICAvLyBvbiBzdGFydHVwIHVudGlsIHRoZSBtZXNzYWdlIGV4aGF1c3RzIGl0cyBkZWxpdmVyaWVzLlxuICAgICAgY29uc3QgZmlsZUlkRmlsdGVyID0gdGFnXG4gICAgICAgID8gKGZpbGVJZDogc3RyaW5nKSA9PiBoYXNUYWcoZmlsZUlkLCB0YWcpXG4gICAgICAgIDogaXNVbnRhZ2dlZDtcbiAgICAgIGNvbnN0IHJlY292ZXJ5UnVucyA9IHtcbiAgICAgICAgLi4uc3RvcmFnZS5ydW5zLFxuICAgICAgICBsaXN0OiAoKHBhcmFtcykgPT5cbiAgICAgICAgICBzdG9yYWdlLnJ1bnMubGlzdCh7XG4gICAgICAgICAgICAuLi5wYXJhbXMsXG4gICAgICAgICAgICBmaWxlSWRGaWx0ZXIsXG4gICAgICAgICAgfSkpIGFzIHR5cGVvZiBzdG9yYWdlLnJ1bnMubGlzdCxcbiAgICAgIH07XG4gICAgICBhd2FpdCByZWVucXVldWVBY3RpdmVSdW5zKHJlY292ZXJ5UnVucywgcXVldWUucXVldWUsICd3b3JsZC1sb2NhbCcpO1xuICAgIH0sXG4gICAgYXN5bmMgY2xvc2UoKSB7XG4gICAgICBjbGVhclN0b3JhZ2VDYWNoZSgpO1xuICAgICAgYXdhaXQgcXVldWUuY2xvc2UoKTtcbiAgICB9LFxuICAgIGFzeW5jIGNsZWFyKCkge1xuICAgICAgY2xlYXJTdG9yYWdlQ2FjaGUoKTtcbiAgICAgIGlmICh0YWcpIHtcbiAgICAgICAgLy8gU2VsZWN0aXZlbHkgZGVsZXRlIG9ubHkgZmlsZXMgbWF0Y2hpbmcgdGhpcyB0YWdcbiAgICAgICAgY29uc3QgYmFzZWRpciA9IG1lcmdlZENvbmZpZy5kYXRhRGlyO1xuXG4gICAgICAgIC8vIERlbGV0ZSBob29rIHRva2VuIGNvbnN0cmFpbnQgZmlsZXMgKGFuZCByZWNvdmVyeSBtYXJrZXJzLFxuICAgICAgICAvLyBmb3IgZGlzayBoeWdpZW5lKSBCRUZPUkUgZGVsZXRpbmcgdGhlIGhvb2tzLCBzaW5jZSB3ZSBuZWVkXG4gICAgICAgIC8vIHRvIHJlYWQgZWFjaCBob29rIHRvIGV4dHJhY3QgaXRzIHRva2VuIGhhc2guIENvbnN0cmFpbnRcbiAgICAgICAgLy8gZmlsZXMgYW5kIG1hcmtlcnMgYXJlIHVudGFnZ2VkIChge3NoYTI1Nn0uanNvbmAgYW5kXG4gICAgICAgIC8vIGB7c2hhMjU2fS5yZWNvdmVyeS5qc29uYCkgc28gbGlzdFRhZ2dlZEZpbGVzIHdvbid0IGZpbmRcbiAgICAgICAgLy8gdGhlbSDigJQgd2UgbXVzdCByZXNvbHZlIHRoZW0gdmlhIHRoZSBob29rIGRhdGEuXG4gICAgICAgIGNvbnN0IGhvb2tzRGlyID0gcGF0aC5qb2luKGJhc2VkaXIsICdob29rcycpO1xuICAgICAgICBjb25zdCB0YWdnZWRIb29rRmlsZXMgPSBhd2FpdCBsaXN0VGFnZ2VkRmlsZXMoaG9va3NEaXIsIHRhZyk7XG4gICAgICAgIGNvbnN0IHsgSG9va1NjaGVtYSB9ID0gYXdhaXQgaW1wb3J0KCdAd29ya2Zsb3cvd29ybGQnKTtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgdGFnZ2VkSG9va0ZpbGVzLm1hcChhc3luYyAoaG9va0ZpbGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGhvb2sgPSBhd2FpdCByZWFkSlNPTihcbiAgICAgICAgICAgICAgcGF0aC5qb2luKGhvb2tzRGlyLCBob29rRmlsZSksXG4gICAgICAgICAgICAgIEhvb2tTY2hlbWFcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoaG9vaz8udG9rZW4pIHtcbiAgICAgICAgICAgICAgYXdhaXQgZGVsZXRlSlNPTihcbiAgICAgICAgICAgICAgICBwYXRoLmpvaW4oaG9va3NEaXIsICd0b2tlbnMnLCBgJHtoYXNoVG9rZW4oaG9vay50b2tlbil9Lmpzb25gKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBhd2FpdCBkZWxldGVKU09OKFxuICAgICAgICAgICAgICAgIGhvb2tSZWNvdmVyeU1hcmtlclBhdGgoXG4gICAgICAgICAgICAgICAgICBiYXNlZGlyLFxuICAgICAgICAgICAgICAgICAgaG9vay50b2tlbixcbiAgICAgICAgICAgICAgICAgIGhvb2sucnVuSWQsXG4gICAgICAgICAgICAgICAgICBob29rLmhvb2tJZFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIERlbGV0ZSB0YWdnZWQgZW50aXR5IGZpbGVzIGFjcm9zcyBhbGwgZGlyZWN0b3JpZXNcbiAgICAgICAgY29uc3QgZW50aXR5RGlycyA9IFtcbiAgICAgICAgICAncnVucycsXG4gICAgICAgICAgJ3N0ZXBzJyxcbiAgICAgICAgICAnZXZlbnRzJyxcbiAgICAgICAgICAnaG9va3MnLFxuICAgICAgICAgICd3YWl0cycsXG4gICAgICAgICAgJ3N0cmVhbXMvcnVucycsXG4gICAgICAgIF07XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgIGVudGl0eURpcnMubWFwKGFzeW5jIChkaXIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZ1bGxEaXIgPSBwYXRoLmpvaW4oYmFzZWRpciwgZGlyKTtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgbGlzdFRhZ2dlZEZpbGVzKGZ1bGxEaXIsIHRhZyk7XG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgICAgZmlsZXMubWFwKChmKSA9PiBkZWxldGVKU09OKHBhdGguam9pbihmdWxsRGlyLCBmKSkpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICAgIC8vIENsZWFuIHVwIGxvY2sgZmlsZXMgdXNlZCBmb3IgYXRvbWljIHRlcm1pbmFsLXN0YXRlIGd1YXJkc1xuICAgICAgICBhd2FpdCBmc1xuICAgICAgICAgIC5ybShwYXRoLmpvaW4oYmFzZWRpciwgJy5sb2NrcycpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSlcbiAgICAgICAgICAuY2F0Y2goKCkgPT4ge30pO1xuICAgICAgICAvLyBEZWxldGUgdGFnZ2VkIHN0cmVhbSBjaHVua3MgKC57dGFnfS5iaW4gZmlsZXMpXG4gICAgICAgIGNvbnN0IGNodW5rc0RpciA9IHBhdGguam9pbihiYXNlZGlyLCAnc3RyZWFtcycsICdjaHVua3MnKTtcbiAgICAgICAgY29uc3QgdGFnZ2VkQmluRmlsZXMgPSBhd2FpdCBsaXN0VGFnZ2VkRmlsZXNCeUV4dGVuc2lvbihcbiAgICAgICAgICBjaHVua3NEaXIsXG4gICAgICAgICAgdGFnLFxuICAgICAgICAgICcuYmluJ1xuICAgICAgICApO1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICB0YWdnZWRCaW5GaWxlcy5tYXAoKGYpID0+XG4gICAgICAgICAgICBmcy51bmxpbmsocGF0aC5qb2luKGNodW5rc0RpciwgZikpLmNhdGNoKCgpID0+IHt9KVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgLy8gQ2xlYXIgdGhlIGluLW1lbW9yeSB3cml0ZSBjYWNoZSBzbyBkZWxldGVkIHBhdGhzIGFyZSBmb3Jnb3R0ZW5cbiAgICAgICAgY2xlYXJDcmVhdGVkRmlsZXNDYWNoZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gYHJtKClgIHJlbW92ZXMgZGlyZWN0b3JpZXMgdGhhdCB0aGUgd3JpdGUgcGF0aCBtYXkgaGF2ZSBjYWNoZWQuXG4gICAgICAgIGNsZWFyQ3JlYXRlZEZpbGVzQ2FjaGUoKTtcbiAgICAgICAgYXdhaXQgcm0obWVyZ2VkQ29uZmlnLmRhdGFEaXIsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcbiAgICAgICAgYXdhaXQgaW5pdERhdGFEaXIobWVyZ2VkQ29uZmlnLmRhdGFEaXIpO1xuICAgICAgfVxuICAgIH0sXG4gIH07XG59XG4iXX0=
|
|
148
|
+
/**
|
|
149
|
+
* @deprecated Use `createWorld()` instead.
|
|
150
|
+
*/
|
|
151
|
+
export function createLocalWorld(args) {
|
|
152
|
+
return createWorld(args);
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsSUFBSSxFQUFFLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDekMsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3RDLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUU3QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUU1RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3JDLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsVUFBVSxFQUNWLE1BQU0sRUFDTixVQUFVLEVBQ1YsZUFBZSxFQUNmLDBCQUEwQixFQUMxQixRQUFRLEdBQ1QsTUFBTSxTQUFTLENBQUM7QUFDakIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN4QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsV0FBVyxFQUFzQixNQUFNLFlBQVksQ0FBQztBQUM3RCxPQUFPLEVBQUUsU0FBUyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRS9DLG1EQUFtRDtBQUNuRCxPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLG1CQUFtQixFQUNuQixhQUFhLEVBQ2IsV0FBVyxFQUVYLFlBQVksR0FDYixNQUFNLFdBQVcsQ0FBQztBQVduQjs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUFDLElBQXNCO0lBQ2hELE1BQU0sV0FBVyxHQUFHLElBQUk7UUFDdEIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxX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QztvQkFDRixNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQ2YsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQ3ZCLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDLENBQ3hELENBQ0YsQ0FBQztnQkFDSixDQUFDLENBQUMsQ0FDTCxDQUFDO2dCQUNGLGlFQUFpRTtnQkFDakUsc0JBQXNCLEVBQUUsQ0FBQztZQUMzQixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sa0VBQWtFO2dCQUNsRSxzQkFBc0IsRUFBRSxDQUFDO2dCQUN6QixNQUFNLEVBQUUsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDakUsTUFBTSxXQUFXLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzFDLENBQUM7UUFDSCxDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxJQUFzQjtJQUNyRCxPQUFPLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMzQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcHJvbWlzZXMgYXMgZnMgfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7IHJtIH0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHR5cGUgeyBRdWV1ZVByZWZpeCwgV29ybGQgfSBmcm9tICdAd29ya2Zsb3cvd29ybGQnO1xuaW1wb3J0IHsgcmVlbnF1ZXVlQWN0aXZlUnVucywgU1BFQ19WRVJTSU9OX0NVUlJFTlQgfSBmcm9tICdAd29ya2Zsb3cvd29ybGQnO1xuaW1wb3J0IHR5cGUgeyBDb25maWcgfSBmcm9tICcuL2NvbmZpZy5qcyc7XG5pbXBvcnQgeyBjb25maWcgfSBmcm9tICcuL2NvbmZpZy5qcyc7XG5pbXBvcnQge1xuICBjbGVhckNyZWF0ZWRGaWxlc0NhY2hlLFxuICBkZWxldGVKU09OLFxuICBoYXNUYWcsXG4gIGlzVW50YWdnZWQsXG4gIGxpc3RUYWdnZWRGaWxlcyxcbiAgbGlzdFRhZ2dlZEZpbGVzQnlFeHRlbnNpb24sXG4gIHJlYWRKU09OLFxufSBmcm9tICcuL2ZzLmpzJztcbmltcG9ydCB7IGluaXREYXRhRGlyIH0gZnJvbSAnLi9pbml0LmpzJztcbmltcG9ydCB7IGluc3RydW1lbnRPYmplY3QgfSBmcm9tICcuL2luc3RydW1lbnRPYmplY3QuanMnO1xuaW1wb3J0IHsgY3JlYXRlUXVldWUsIHR5cGUgRGlyZWN0SGFuZGxlciB9IGZyb20gJy4vcXVldWUuanMnO1xuaW1wb3J0IHsgaGFzaFRva2VuLCBob29rUmVjb3ZlcnlNYXJrZXJQYXRoIH0gZnJvbSAnLi9zdG9yYWdlL2hlbHBlcnMuanMnO1xuaW1wb3J0IHsgY3JlYXRlU3RvcmFnZSB9IGZyb20gJy4vc3RvcmFnZS5qcyc7XG5pbXBvcnQgeyBjcmVhdGVTdHJlYW1lciB9IGZyb20gJy4vc3RyZWFtZXIuanMnO1xuXG4vLyBSZS1leHBvcnQgaW5pdCB0eXBlcyBhbmQgdXRpbGl0aWVzIGZvciBjb25zdW1lcnNcbmV4cG9ydCB7XG4gIERhdGFEaXJBY2Nlc3NFcnJvcixcbiAgRGF0YURpclZlcnNpb25FcnJvcixcbiAgZW5zdXJlRGF0YURpcixcbiAgaW5pdERhdGFEaXIsXG4gIHR5cGUgUGFyc2VkVmVyc2lvbixcbiAgcGFyc2VWZXJzaW9uLFxufSBmcm9tICcuL2luaXQuanMnO1xuXG5leHBvcnQgdHlwZSB7IERpcmVjdEhhbmRsZXIgfSBmcm9tICcuL3F1ZXVlLmpzJztcblxuZXhwb3J0IHR5cGUgTG9jYWxXb3JsZCA9IFdvcmxkICYge1xuICAvKiogUmVnaXN0ZXIgYSBkaXJlY3QgaW4tcHJvY2VzcyBoYW5kbGVyIGZvciBhIHF1ZXVlIHByZWZpeCwgYnlwYXNzaW5nIEhUVFAuICovXG4gIHJlZ2lzdGVySGFuZGxlcihwcmVmaXg6IFF1ZXVlUHJlZml4LCBoYW5kbGVyOiBEaXJlY3RIYW5kbGVyKTogdm9pZDtcbiAgLyoqIENsZWFyIGFsbCB3b3JrZmxvdyBkYXRhIChydW5zLCBzdGVwcywgZXZlbnRzLCBob29rcywgc3RyZWFtcykuICovXG4gIGNsZWFyKCk6IFByb21pc2U8dm9pZD47XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBsb2NhbCB3b3JsZCBpbnN0YW5jZSB0aGF0IGNvbWJpbmVzIHF1ZXVlLCBzdG9yYWdlLCBhbmQgc3RyZWFtZXIgZnVuY3Rpb25hbGl0aWVzLlxuICpcbiAqIEBwYXJhbSBhcmdzIC0gT3B0aW9uYWwgY29uZmlndXJhdGlvbiBvYmplY3RcbiAqIEBwYXJhbSBhcmdzLmRhdGFEaXIgLSBEaXJlY3RvcnkgZm9yIHN0b3Jpbmcgd29ya2Zsb3cgZGF0YSAoZGVmYXVsdDogYC53b3JrZmxvdy1kYXRhL2ApXG4gKiBAcGFyYW0gYXJncy5wb3J0IC0gUG9ydCBvdmVycmlkZSBmb3IgcXVldWUgdHJhbnNwb3J0IChkZWZhdWx0OiBhdXRvLWRldGVjdGVkKVxuICogQHBhcmFtIGFyZ3MuYmFzZVVybCAtIEZ1bGwgYmFzZSBVUkwgb3ZlcnJpZGUgZm9yIHF1ZXVlIHRyYW5zcG9ydCAoZGVmYXVsdDogYGh0dHA6Ly9sb2NhbGhvc3Q6e3BvcnR9YClcbiAqIEBwYXJhbSBhcmdzLnJlY292ZXJBY3RpdmVSdW5zIC0gV2hldGhlciBgc3RhcnQoKWAgc2hvdWxkIHJlLWVucXVldWUgcGVuZGluZy9ydW5uaW5nIHJ1bnMgZnJvbSBzdG9yYWdlIChkZWZhdWx0OiBgdHJ1ZWApXG4gKiBAcGFyYW0gYXJncy50YWcgLSBPcHRpb25hbCB0YWcgdG8gc2NvcGUgZmlsZXMgKGUuZy4sIGB2aXRlc3QtMGApLiBXaGVuIHNldCwgZmlsZXMgYXJlIHdyaXR0ZW5cbiAqICAgYXMgYHtpZH0ue3RhZ30uanNvbmAgYW5kIGBjbGVhcigpYCBvbmx5IGRlbGV0ZXMgZmlsZXMgbWF0Y2hpbmcgdGhpcyB0YWcuXG4gKiBAdGhyb3dzIHtEYXRhRGlyQWNjZXNzRXJyb3J9IElmIHRoZSBkYXRhIGRpcmVjdG9yeSBjYW5ub3QgYmUgY3JlYXRlZCBvciBhY2Nlc3NlZFxuICogQHRocm93cyB7RGF0YURpclZlcnNpb25FcnJvcn0gSWYgdGhlIGRhdGEgZGlyZWN0b3J5IHZlcnNpb24gaXMgaW5jb21wYXRpYmxlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVXb3JsZChhcmdzPzogUGFydGlhbDxDb25maWc+KTogTG9jYWxXb3JsZCB7XG4gIGNvbnN0IGRlZmluZWRBcmdzID0gYXJnc1xuICAgID8gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICBPYmplY3QuZW50cmllcyhhcmdzKS5maWx0ZXIoKFssIHZhbHVlXSkgPT4gdmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgIClcbiAgICA6IHt9O1xuICBjb25zdCBtZXJnZWRDb25maWcgPSB7IC4uLmNvbmZpZy52YWx1ZSwgLi4uZGVmaW5lZEFyZ3MgfTtcbiAgY29uc3QgdGFnID0gbWVyZ2VkQ29uZmlnLnRhZztcbiAgY29uc3QgcXVldWUgPSBjcmVhdGVRdWV1ZShtZXJnZWRDb25maWcpO1xuICBjb25zdCB7IGNsZWFyQ2FjaGU6IGNsZWFyU3RvcmFnZUNhY2hlLCAuLi5zdG9yYWdlIH0gPSBjcmVhdGVTdG9yYWdlKFxuICAgIG1lcmdlZENvbmZpZy5kYXRhRGlyLFxuICAgIHRhZ1xuICApO1xuICBjb25zdCByZWNvdmVyQWN0aXZlUnVucyA9IG1lcmdlZENvbmZpZy5yZWNvdmVyQWN0aXZlUnVucyA/PyB0cnVlO1xuICByZXR1cm4ge1xuICAgIHNwZWNWZXJzaW9uOiBTUEVDX1ZFUlNJT05fQ1VSUkVOVCxcbiAgICAuLi5xdWV1ZSxcbiAgICAuLi5zdG9yYWdlLFxuICAgIC4uLmluc3RydW1lbnRPYmplY3QoJ3dvcmxkLnN0cmVhbXMnLCB7XG4gICAgICAuLi5jcmVhdGVTdHJlYW1lcihtZXJnZWRDb25maWcuZGF0YURpciwgdGFnKSxcbiAgICAgIC4uLihtZXJnZWRDb25maWcuc3RyZWFtRmx1c2hJbnRlcnZhbE1zICE9PSB1bmRlZmluZWQgJiYge1xuICAgICAgICBzdHJlYW1GbHVzaEludGVydmFsTXM6IG1lcmdlZENvbmZpZy5zdHJlYW1GbHVzaEludGVydmFsTXMsXG4gICAgICB9KSxcbiAgICB9KSxcbiAgICBhc3luYyBzdGFydCgpIHtcbiAgICAgIGF3YWl0IGluaXREYXRhRGlyKG1lcmdlZENvbmZpZy5kYXRhRGlyKTtcbiAgICAgIGlmICghcmVjb3ZlckFjdGl2ZVJ1bnMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gU2NvcGUgcmVjb3ZlcnkgdG8gdGhpcyB3b3JsZCdzIG93biBmaWxlcy4gQSB0YWdnZWQgd29ybGQgcmVjb3ZlcnMgb25seVxuICAgICAgLy8gaXRzIHRhZzsgYW4gdW50YWdnZWQgd29ybGQgcmVjb3ZlcnMgb25seSB1bnRhZ2dlZCBmaWxlcy4gV2l0aG91dCB0aGVcbiAgICAgIC8vIHVudGFnZ2VkIGZpbHRlciwgYW4gdW50YWdnZWQgZGV2IHNlcnZlciBzaGFyaW5nIHRoZSBkYXRhIGRpcmVjdG9yeSB3aXRoXG4gICAgICAvLyB0aGUgdml0ZXN0IGhhcm5lc3Mgd291bGQgbGlzdCB0YWdnZWQgcnVucyAobGlzdCBlbnVtZXJhdGVzIGV2ZXJ5IGZpbGUpXG4gICAgICAvLyBhbmQgcmUtZW5xdWV1ZSB0aGVtLCBidXQgcnVuX3N0YXJ0ZWQncyB0YWdnZWQtb3ItdW50YWdnZWQgcmVhZCBjYW4ndFxuICAgICAgLy8gcmVzb2x2ZSBhIGZvcmVpZ24gdGFnIOKAlCB5aWVsZGluZyBcImRpZCBub3QgcmV0dXJuIHRoZSBydW4gZW50aXR5XCIgNTAwc1xuICAgICAgLy8gb24gc3RhcnR1cCB1bnRpbCB0aGUgbWVzc2FnZSBleGhhdXN0cyBpdHMgZGVsaXZlcmllcy5cbiAgICAgIGNvbnN0IGZpbGVJZEZpbHRlciA9IHRhZ1xuICAgICAgICA/IChmaWxlSWQ6IHN0cmluZykgPT4gaGFzVGFnKGZpbGVJZCwgdGFnKVxuICAgICAgICA6IGlzVW50YWdnZWQ7XG4gICAgICBjb25zdCByZWNvdmVyeVJ1bnMgPSB7XG4gICAgICAgIC4uLnN0b3JhZ2UucnVucyxcbiAgICAgICAgbGlzdDogKChwYXJhbXMpID0+XG4gICAgICAgICAgc3RvcmFnZS5ydW5zLmxpc3Qoe1xuICAgICAgICAgICAgLi4ucGFyYW1zLFxuICAgICAgICAgICAgZmlsZUlkRmlsdGVyLFxuICAgICAgICAgIH0pKSBhcyB0eXBlb2Ygc3RvcmFnZS5ydW5zLmxpc3QsXG4gICAgICB9O1xuICAgICAgYXdhaXQgcmVlbnF1ZXVlQWN0aXZlUnVucyhyZWNvdmVyeVJ1bnMsIHF1ZXVlLnF1ZXVlLCAnd29ybGQtbG9jYWwnKTtcbiAgICB9LFxuICAgIGFzeW5jIGNsb3NlKCkge1xuICAgICAgY2xlYXJTdG9yYWdlQ2FjaGUoKTtcbiAgICAgIGF3YWl0IHF1ZXVlLmNsb3NlKCk7XG4gICAgfSxcbiAgICBhc3luYyBjbGVhcigpIHtcbiAgICAgIGNsZWFyU3RvcmFnZUNhY2hlKCk7XG4gICAgICBpZiAodGFnKSB7XG4gICAgICAgIC8vIFNlbGVjdGl2ZWx5IGRlbGV0ZSBvbmx5IGZpbGVzIG1hdGNoaW5nIHRoaXMgdGFnXG4gICAgICAgIGNvbnN0IGJhc2VkaXIgPSBtZXJnZWRDb25maWcuZGF0YURpcjtcblxuICAgICAgICAvLyBEZWxldGUgaG9vayB0b2tlbiBjb25zdHJhaW50IGZpbGVzIChhbmQgcmVjb3ZlcnkgbWFya2VycyxcbiAgICAgICAgLy8gZm9yIGRpc2sgaHlnaWVuZSkgQkVGT1JFIGRlbGV0aW5nIHRoZSBob29rcywgc2luY2Ugd2UgbmVlZFxuICAgICAgICAvLyB0byByZWFkIGVhY2ggaG9vayB0byBleHRyYWN0IGl0cyB0b2tlbiBoYXNoLiBDb25zdHJhaW50XG4gICAgICAgIC8vIGZpbGVzIGFuZCBtYXJrZXJzIGFyZSB1bnRhZ2dlZCAoYHtzaGEyNTZ9Lmpzb25gIGFuZFxuICAgICAgICAvLyBge3NoYTI1Nn0ucmVjb3ZlcnkuanNvbmApIHNvIGxpc3RUYWdnZWRGaWxlcyB3b24ndCBmaW5kXG4gICAgICAgIC8vIHRoZW0g4oCUIHdlIG11c3QgcmVzb2x2ZSB0aGVtIHZpYSB0aGUgaG9vayBkYXRhLlxuICAgICAgICBjb25zdCBob29rc0RpciA9IHBhdGguam9pbihiYXNlZGlyLCAnaG9va3MnKTtcbiAgICAgICAgY29uc3QgdGFnZ2VkSG9va0ZpbGVzID0gYXdhaXQgbGlzdFRhZ2dlZEZpbGVzKGhvb2tzRGlyLCB0YWcpO1xuICAgICAgICBjb25zdCB7IEhvb2tTY2hlbWEgfSA9IGF3YWl0IGltcG9ydCgnQHdvcmtmbG93L3dvcmxkJyk7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgIHRhZ2dlZEhvb2tGaWxlcy5tYXAoYXN5bmMgKGhvb2tGaWxlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBob29rID0gYXdhaXQgcmVhZEpTT04oXG4gICAgICAgICAgICAgIHBhdGguam9pbihob29rc0RpciwgaG9va0ZpbGUpLFxuICAgICAgICAgICAgICBIb29rU2NoZW1hXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGhvb2s/LnRva2VuKSB7XG4gICAgICAgICAgICAgIGF3YWl0IGRlbGV0ZUpTT04oXG4gICAgICAgICAgICAgICAgcGF0aC5qb2luKGhvb2tzRGlyLCAndG9rZW5zJywgYCR7aGFzaFRva2VuKGhvb2sudG9rZW4pfS5qc29uYClcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgYXdhaXQgZGVsZXRlSlNPTihcbiAgICAgICAgICAgICAgICBob29rUmVjb3ZlcnlNYXJrZXJQYXRoKFxuICAgICAgICAgICAgICAgICAgYmFzZWRpcixcbiAgICAgICAgICAgICAgICAgIGhvb2sudG9rZW4sXG4gICAgICAgICAgICAgICAgICBob29rLnJ1bklkLFxuICAgICAgICAgICAgICAgICAgaG9vay5ob29rSWRcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBEZWxldGUgdGFnZ2VkIGVudGl0eSBmaWxlcyBhY3Jvc3MgYWxsIGRpcmVjdG9yaWVzXG4gICAgICAgIGNvbnN0IGVudGl0eURpcnMgPSBbXG4gICAgICAgICAgJ3J1bnMnLFxuICAgICAgICAgICdzdGVwcycsXG4gICAgICAgICAgJ2V2ZW50cycsXG4gICAgICAgICAgJ2hvb2tzJyxcbiAgICAgICAgICAnd2FpdHMnLFxuICAgICAgICAgICdzdHJlYW1zL3J1bnMnLFxuICAgICAgICBdO1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICBlbnRpdHlEaXJzLm1hcChhc3luYyAoZGlyKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmdWxsRGlyID0gcGF0aC5qb2luKGJhc2VkaXIsIGRpcik7XG4gICAgICAgICAgICBjb25zdCBmaWxlcyA9IGF3YWl0IGxpc3RUYWdnZWRGaWxlcyhmdWxsRGlyLCB0YWcpO1xuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICAgIGZpbGVzLm1hcCgoZikgPT4gZGVsZXRlSlNPTihwYXRoLmpvaW4oZnVsbERpciwgZikpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgICAvLyBDbGVhbiB1cCBsb2NrIGZpbGVzIHVzZWQgZm9yIGF0b21pYyB0ZXJtaW5hbC1zdGF0ZSBndWFyZHNcbiAgICAgICAgYXdhaXQgZnNcbiAgICAgICAgICAucm0ocGF0aC5qb2luKGJhc2VkaXIsICcubG9ja3MnKSwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pXG4gICAgICAgICAgLmNhdGNoKCgpID0+IHt9KTtcbiAgICAgICAgLy8gRGVsZXRlIHRhZ2dlZCBzdHJlYW0gY2h1bmtzICgue3RhZ30uYmluIGZpbGVzKS4gQ2h1bmtzIGFyZSBzaGFyZGVkXG4gICAgICAgIC8vIG9uZSBkaXJlY3RvcnkgcGVyIHN0cmVhbSAoc3RyZWFtcy9jaHVua3MvPHN0cmVhbU5hbWU+LzxjaHVua0lkPi57dGFnfS5iaW4pLFxuICAgICAgICAvLyBzbyBpdGVyYXRlIGVhY2ggcGVyLXN0cmVhbSBkaXJlY3Rvcnkg4oCUIHRoZSB0b3AtbGV2ZWwgY2h1bmtzIGRpciBub3dcbiAgICAgICAgLy8gaG9sZHMgb25seSBzdWJkaXJlY3Rvcmllcywgc28gbGlzdGluZyBpdCBkaXJlY3RseSB3b3VsZCBtYXRjaCBub3RoaW5nXG4gICAgICAgIC8vIGFuZCBzaWxlbnRseSBsZWFrIHRhZ2dlZCBjaHVuayBmaWxlcyBhY3Jvc3MgdGVzdCBzZXNzaW9ucy5cbiAgICAgICAgY29uc3QgY2h1bmtzRGlyID0gcGF0aC5qb2luKGJhc2VkaXIsICdzdHJlYW1zJywgJ2NodW5rcycpO1xuICAgICAgICBsZXQgc3RyZWFtRGlyRW50cmllczogaW1wb3J0KCdub2RlOmZzJykuRGlyZW50W107XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgc3RyZWFtRGlyRW50cmllcyA9IGF3YWl0IGZzLnJlYWRkaXIoY2h1bmtzRGlyLCB7XG4gICAgICAgICAgICB3aXRoRmlsZVR5cGVzOiB0cnVlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICBzdHJlYW1EaXJFbnRyaWVzID0gW107XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgc3RyZWFtRGlyRW50cmllc1xuICAgICAgICAgICAgLmZpbHRlcigoZW50cnkpID0+IGVudHJ5LmlzRGlyZWN0b3J5KCkpXG4gICAgICAgICAgICAubWFwKGFzeW5jIChlbnRyeSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBzdHJlYW1DaHVua0RpciA9IHBhdGguam9pbihjaHVua3NEaXIsIGVudHJ5Lm5hbWUpO1xuICAgICAgICAgICAgICBjb25zdCB0YWdnZWRCaW5GaWxlcyA9IGF3YWl0IGxpc3RUYWdnZWRGaWxlc0J5RXh0ZW5zaW9uKFxuICAgICAgICAgICAgICAgIHN0cmVhbUNodW5rRGlyLFxuICAgICAgICAgICAgICAgIHRhZyxcbiAgICAgICAgICAgICAgICAnLmJpbidcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICAgICAgdGFnZ2VkQmluRmlsZXMubWFwKChmKSA9PlxuICAgICAgICAgICAgICAgICAgZnMudW5saW5rKHBhdGguam9pbihzdHJlYW1DaHVua0RpciwgZikpLmNhdGNoKCgpID0+IHt9KVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICAgIC8vIENsZWFyIHRoZSBpbi1tZW1vcnkgd3JpdGUgY2FjaGUgc28gZGVsZXRlZCBwYXRocyBhcmUgZm9yZ290dGVuXG4gICAgICAgIGNsZWFyQ3JlYXRlZEZpbGVzQ2FjaGUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGBybSgpYCByZW1vdmVzIGRpcmVjdG9yaWVzIHRoYXQgdGhlIHdyaXRlIHBhdGggbWF5IGhhdmUgY2FjaGVkLlxuICAgICAgICBjbGVhckNyZWF0ZWRGaWxlc0NhY2hlKCk7XG4gICAgICAgIGF3YWl0IHJtKG1lcmdlZENvbmZpZy5kYXRhRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gICAgICAgIGF3YWl0IGluaXREYXRhRGlyKG1lcmdlZENvbmZpZy5kYXRhRGlyKTtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBgY3JlYXRlV29ybGQoKWAgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUxvY2FsV29ybGQoYXJncz86IFBhcnRpYWw8Q29uZmlnPik6IExvY2FsV29ybGQge1xuICByZXR1cm4gY3JlYXRlV29ybGQoYXJncyk7XG59XG4iXX0=
|
package/dist/queue.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../src/queue.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../src/queue.ts"],"names":[],"mappings":"AAGA,OAAO,EAGL,KAAK,KAAK,EACV,KAAK,WAAW,EAEjB,MAAM,iBAAiB,CAAC;AAKzB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAiD1C,MAAM,MAAM,aAAa,GAAG,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;AAEhE,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG;IAC/B,kDAAkD;IAClD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,+EAA+E;IAC/E,eAAe,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC;CACpE,CAAC;AAsCF,wBAAgB,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,UAAU,CAqU/D"}
|
package/dist/queue.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { setTimeout } from 'node:timers/promises';
|
|
2
|
+
import { createWorkflowUrl } from '@workflow/utils';
|
|
2
3
|
import { MessageId, parseQueueName, ValidQueueName, } from '@workflow/world';
|
|
3
4
|
import { Sema } from 'async-sema';
|
|
4
5
|
import { monotonicFactory } from 'ulid';
|
|
5
6
|
import { Agent } from 'undici';
|
|
6
7
|
import { z } from 'zod/v4';
|
|
7
|
-
import { resolveBaseUrl } from './config.js';
|
|
8
|
+
import { resolveBaseUrl, resolveDirectBaseUrl } from './config.js';
|
|
8
9
|
import { jsonReplacer, jsonReviver } from './fs.js';
|
|
9
10
|
import { getPackageInfo } from './init.js';
|
|
10
11
|
/**
|
|
@@ -161,17 +162,15 @@ export function createQueue(config) {
|
|
|
161
162
|
let response;
|
|
162
163
|
try {
|
|
163
164
|
if (directHandler) {
|
|
164
|
-
const req = new Request(
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
body,
|
|
168
|
-
});
|
|
165
|
+
const req = new Request(createWorkflowUrl(resolveDirectBaseUrl(config), {
|
|
166
|
+
type: pathname,
|
|
167
|
+
}), { method: 'POST', headers, body });
|
|
169
168
|
response = await directHandler(req);
|
|
170
169
|
}
|
|
171
170
|
else {
|
|
172
171
|
const baseUrl = await resolveBaseUrl(config);
|
|
173
172
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- undici v7 dispatcher types don't match @types/node's RequestInit
|
|
174
|
-
response = await fetch(
|
|
173
|
+
response = await fetch(createWorkflowUrl(baseUrl, { type: pathname }), {
|
|
175
174
|
method: 'POST',
|
|
176
175
|
duplex: 'half',
|
|
177
176
|
dispatcher: httpAgent,
|
|
@@ -342,4 +341,4 @@ export function createQueue(config) {
|
|
|
342
341
|
},
|
|
343
342
|
};
|
|
344
343
|
}
|
|
345
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVldWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcXVldWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRWxELE9BQU8sRUFDTCxTQUFTLEVBQ1QsY0FBYyxFQUdkLGNBQWMsR0FDZixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDbEMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDL0IsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUUzQixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3BELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFM0M7Ozs7R0FJRztBQUNILE1BQU0sa0JBQWtCO0lBQ2IsV0FBVyxHQUFHLGtCQUFrQixDQUFDO0lBRTFDLFNBQVMsQ0FBQyxLQUFjO1FBQ3RCLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVyxDQUFDLE1BQWtDO1FBQ2xELE1BQU0sTUFBTSxHQUFpQixFQUFFLENBQUM7UUFDaEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2xDLE9BQU8sSUFBSSxFQUFFLENBQUM7WUFDWixNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzVDLElBQUksSUFBSTtnQkFB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Y0FBYyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDdEMsQ0FBQztRQUNELEtBQUssQ0FBQyxLQUFLO1lBQ1Qsa0VBQWtFO1lBQ2xFLHNDQUFzQztZQUN0QyxJQUFJLFdBQVcsQ0FBQyxPQUFPO2dCQUFFLE9BQU87WUFDaEMsZUFBZSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3hCLE1BQU0sU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzFCLENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHNldFRpbWVvdXQgfSBmcm9tICdub2RlOnRpbWVycy9wcm9taXNlcyc7XG5pbXBvcnQgdHlwZSB7IFRyYW5zcG9ydCB9IGZyb20gJ0B2ZXJjZWwvcXVldWUnO1xuaW1wb3J0IHtcbiAgTWVzc2FnZUlkLFxuICBwYXJzZVF1ZXVlTmFtZSxcbiAgdHlwZSBRdWV1ZSxcbiAgdHlwZSBRdWV1ZVByZWZpeCxcbiAgVmFsaWRRdWV1ZU5hbWUsXG59IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgeyBTZW1hIH0gZnJvbSAnYXN5bmMtc2VtYSc7XG5pbXBvcnQgeyBtb25vdG9uaWNGYWN0b3J5IH0gZnJvbSAndWxpZCc7XG5pbXBvcnQgeyBBZ2VudCB9IGZyb20gJ3VuZGljaSc7XG5pbXBvcnQgeyB6IH0gZnJvbSAnem9kL3Y0JztcbmltcG9ydCB0eXBlIHsgQ29uZmlnIH0gZnJvbSAnLi9jb25maWcuanMnO1xuaW1wb3J0IHsgcmVzb2x2ZUJhc2VVcmwgfSBmcm9tICcuL2NvbmZpZy5qcyc7XG5pbXBvcnQgeyBqc29uUmVwbGFjZXIsIGpzb25SZXZpdmVyIH0gZnJvbSAnLi9mcy5qcyc7XG5pbXBvcnQgeyBnZXRQYWNrYWdlSW5mbyB9IGZyb20gJy4vaW5pdC5qcyc7XG5cbi8qKlxuICogSlNPTiB0cmFuc3BvcnQgdGhhdCBwcmVzZXJ2ZXMgVWludDhBcnJheSB2YWx1ZXMgdXNpbmcgdGhlIHNhbWVcbiAqIHJlcGxhY2VyL3Jldml2ZXIgdGhhdCB3b3JsZC1sb2NhbCB1c2VzIGZvciBmaWxlc3lzdGVtIHN0b3JhZ2UuXG4gKiBVaW50OEFycmF5IOKGkiB7IF9fdHlwZTogJ1VpbnQ4QXJyYXknLCBkYXRhOiAnPGJhc2U2ND4nIH0gaW4gSlNPTi5cbiAqL1xuY2xhc3MgVHlwZWRKc29uVHJhbnNwb3J0IGltcGxlbWVudHMgVHJhbnNwb3J0PHVua25vd24+IHtcbiAgcmVhZG9ubHkgY29udGVudFR5cGUgPSAnYXBwbGljYXRpb24vanNvbic7XG5cbiAgc2VyaWFsaXplKHZhbHVlOiB1bmtub3duKTogQnVmZmVyIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkodmFsdWUsIGpzb25SZXBsYWNlcikpO1xuICB9XG5cbiAgYXN5bmMgZGVzZXJpYWxpemUoc3RyZWFtOiBSZWFkYWJsZVN0cmVhbTxVaW50OEFycmF5Pik6IFByb21pc2U8dW5rbm93bj4ge1xuICAgIGNvbnN0IGNodW5rczogVWludDhBcnJheVtdID0gW107XG4gICAgY29uc3QgcmVhZGVyID0gc3RyZWFtLmdldFJlYWRlcigpO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCByZWFkZXIucmVhZCgpO1xuICAgICAgaWYgKGRvbmUpIGJyZWFrO1xuICAgICAgaWYgKHZhbHVlKSBjaHVua3MucHVzaCh2YWx1ZSk7XG4gICAgfVxuICAgIGNvbnN0IHRleHQgPSBCdWZmZXIuY29uY2F0KGNodW5rcykudG9TdHJpbmcoKTtcbiAgICByZXR1cm4gSlNPTi5wYXJzZSh0ZXh0LCBqc29uUmV2aXZlcik7XG4gIH1cbn1cblxuLy8gRm9yIGxvY2FsIHF1ZXVlLCB0aGVyZSBpcyBubyB0ZWNobmljYWwgbGltaXQgb24gdGhlIG1lc3NhZ2UgdmlzaWJpbGl0eSBsaWZlc3Bhbixcbi8vIGJ1dCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgY2FuIGJlIHVzZWQgZm9yIHRlc3RpbmcgcHVycG9zZXMgdG8gc2V0IGEgbWF4IHZpc2liaWxpdHkgbGltaXQuXG5jb25zdCBMT0NBTF9RVUVVRV9NQVhfVklTSUJJTElUWSA9XG4gIHBhcnNlSW50KHByb2Nlc3MuZW52LldPUktGTE9XX0xPQ0FMX1FVRVVFX01BWF9WSVNJQklMSVRZID8/ICcwJywgMTApIHx8XG4gIEluZmluaXR5O1xuXG4vLyBNYXhpbXVtIHNhZmUgZGVsYXkgZm9yIHNldFRpbWVvdXQgaW4gTm9kZS5qcyAoMl4zMSAtIDEgbWlsbGlzZWNvbmRzIOKJiCAyNC44NSBkYXlzKVxuLy8gTGFyZ2VyIHZhbHVlcyBjYXVzZSBcIlRpbWVvdXRPdmVyZmxvd1dhcm5pbmc6IFggZG9lcyBub3QgZml0IGludG8gYSAzMi1iaXQgc2lnbmVkIGludGVnZXJcIlxuLy8gV2hlbiB0aGUgY2xhbXBlZCB0aW1lb3V0IGZpcmVzLCB0aGUgaGFuZGxlciB3aWxsIHJlY2FsY3VsYXRlIHJlbWFpbmluZyB0aW1lIGZyb21cbi8vIHBlcnNpc3RlbnQgc3RhdGUgYW5kIHJldHVybiBhbm90aGVyIHRpbWVvdXRTZWNvbmRzIGlmIG5lZWRlZC5cbmNvbnN0IE1BWF9TQUZFX1RJTUVPVVRfTVMgPSAyMTQ3NDgzNjQ3O1xuXG4vLyBUaGUgbG9jYWwgd29ya2VycyBzaGFyZSB0aGUgc2FtZSBOb2RlLmpzIHByb2Nlc3MgYW5kIGV2ZW50IGxvb3AsXG4vLyBzbyB3ZSBuZWVkIHRvIGxpbWl0IGNvbmN1cnJlbmN5IHRvIGF2b2lkIG92ZXJ3aGVsbWluZyB0aGUgc3lzdGVtLlxuY29uc3QgREVGQVVMVF9DT05DVVJSRU5DWV9MSU1JVCA9IDEwMDA7XG5jb25zdCBXT1JLRkxPV19MT0NBTF9RVUVVRV9DT05DVVJSRU5DWSA9XG4gIHBhcnNlSW50KHByb2Nlc3MuZW52LldPUktGTE9XX0xPQ0FMX1FVRVVFX0NPTkNVUlJFTkNZID8/ICcwJywgMTApIHx8XG4gIERFRkFVTFRfQ09OQ1VSUkVOQ1lfTElNSVQ7XG5cbmV4cG9ydCB0eXBlIERpcmVjdEhhbmRsZXIgPSAocmVxOiBSZXF1ZXN0KSA9PiBQcm9taXNlPFJlc3BvbnNlPjtcblxuZXhwb3J0IHR5cGUgTG9jYWxRdWV1ZSA9IFF1ZXVlICYge1xuICAvKiogQ2xvc2UgdGhlIEhUVFAgYWdlbnQgYW5kIHJlbGVhc2UgcmVzb3VyY2VzLiAqL1xuICBjbG9zZSgpOiBQcm9taXNlPHZvaWQ+O1xuICAvKiogUmVnaXN0ZXIgYSBkaXJlY3QgaW4tcHJvY2VzcyBoYW5kbGVyIGZvciBhIHF1ZXVlIHByZWZpeCwgYnlwYXNzaW5nIEhUVFAuICovXG4gIHJlZ2lzdGVySGFuZGxlcihwcmVmaXg6IFF1ZXVlUHJlZml4LCBoYW5kbGVyOiBEaXJlY3RIYW5kbGVyKTogdm9pZDtcbn07XG5cbmNvbnN0IERFVEFDSEVEX0FSUkFZQlVGRkVSX0VSUk9SID1cbiAgJ0Nhbm5vdCBwZXJmb3JtIEFycmF5QnVmZmVyLnByb3RvdHlwZS5zbGljZSBvbiBhIGRldGFjaGVkIEFycmF5QnVmZmVyJztcbmNvbnN0IFBST1hZX0hBTkRMRVJfRE9DU19VUkwgPVxuICAnaHR0cHM6Ly93b3JrZmxvdy1zZGsuZGV2L2RvY3MvZ2V0dGluZy1zdGFydGVkL25leHQjY29uZmlndXJlLXByb3h5LWhhbmRsZXInO1xuXG5mdW5jdGlvbiBpc0RldGFjaGVkQXJyYXlCdWZmZXJRdWV1ZUVycm9yKGVycm9yOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIGxldCBjdXJyZW50ID0gZXJyb3I7XG4gIGNvbnN0IHZpc2l0ZWQgPSBuZXcgU2V0PHVua25vd24+KCk7XG5cbiAgd2hpbGUgKGN1cnJlbnQgJiYgdHlwZW9mIGN1cnJlbnQgPT09ICdvYmplY3QnICYmICF2aXNpdGVkLmhhcyhjdXJyZW50KSkge1xuICAgIHZpc2l0ZWQuYWRkKGN1cnJlbnQpO1xuICAgIGlmIChcbiAgICAgICdtZXNzYWdlJyBpbiBjdXJyZW50ICYmXG4gICAgICB0eXBlb2YgY3VycmVudC5tZXNzYWdlID09PSAnc3RyaW5nJyAmJlxuICAgICAgY3VycmVudC5tZXNzYWdlLmluY2x1ZGVzKERFVEFDSEVEX0FSUkFZQlVGRkVSX0VSUk9SKVxuICAgICkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGN1cnJlbnQgPSAnY2F1c2UnIGluIGN1cnJlbnQgPyBjdXJyZW50LmNhdXNlIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBnZXRRdWV1ZVJvdXRlKHF1ZXVlTmFtZTogVmFsaWRRdWV1ZU5hbWUpOiB7XG4gIHBhdGhuYW1lOiAnZmxvdycgfCAnc3RlcCc7XG4gIHByZWZpeDogUXVldWVQcmVmaXg7XG59IHtcbiAgY29uc3QgeyBraW5kLCBwcmVmaXggfSA9IHBhcnNlUXVldWVOYW1lKHF1ZXVlTmFtZSk7XG5cbiAgcmV0dXJuIHtcbiAgICBwYXRobmFtZToga2luZCA9PT0gJ3dvcmtmbG93JyA/ICdmbG93JyA6ICdzdGVwJyxcbiAgICBwcmVmaXgsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVRdWV1ZShjb25maWc6IFBhcnRpYWw8Q29uZmlnPik6IExvY2FsUXVldWUge1xuICAvLyBDcmVhdGUgYSBjdXN0b20gYWdlbnQgb3B0aW1pemVkIGZvciBoaWdoLWNvbmN1cnJlbmN5IGxvY2FsIHdvcmtmbG93czpcbiAgLy8gLSBoZWFkZXJzVGltZW91dDogMCBhbGxvd3MgbG9uZy1ydW5uaW5nIHN0ZXBzXG4gIC8vIC0gY29ubmVjdGlvbnM6IDEwMDAgYWxsb3dzIG1hbnkgcGFyYWxsZWwgY29ubmVjdGlvbnMgdG8gdGhlIHNhbWUgaG9zdFxuICAvLyAtIHBpcGVsaW5pbmc6IDEgKGRlZmF1bHQpIGZvciBIVFRQLzEuMSBjb21wYXRpYmlsaXR5XG4gIC8vIC0ga2VlcEFsaXZlVGltZW91dDogMzBzIGtlZXBzIGNvbm5lY3Rpb25zIHdhcm0gZm9yIHJhcGlkIHN0ZXAgZXhlY3V0aW9uXG4gIGNvbnN0IGh0dHBBZ2VudCA9IG5ldyBBZ2VudCh7XG4gICAgaGVhZGVyc1RpbWVvdXQ6IDAsXG4gICAgY29ubmVjdGlvbnM6IDEwMDAsXG4gICAga2VlcEFsaXZlVGltZW91dDogMzBfMDAwLFxuICB9KTtcbiAgY29uc3QgdHJhbnNwb3J0ID0gbmV3IFR5cGVkSnNvblRyYW5zcG9ydCgpO1xuICBjb25zdCBnZW5lcmF0ZUlkID0gbW9ub3RvbmljRmFjdG9yeSgpO1xuICBjb25zdCBzZW1hcGhvcmUgPSBuZXcgU2VtYShXT1JLRkxPV19MT0NBTF9RVUVVRV9DT05DVVJSRU5DWSk7XG5cbiAgLy8gQWJvcnRlZCBieSBjbG9zZSgpOiBjYW5jZWxzIGV2ZXJ5IHBlbmRpbmcgc2xlZXAgKGRlbGF5ZWQgZGVsaXZlcmllcyxcbiAgLy8gdGltZW91dFNlY29uZHMgcmUtZGVsaXZlcmllcywgcmV0cnkgYmFja29mZnMpIHNvIHNodXRkb3duIGlzbid0IGhlbGRcbiAgLy8gaG9zdGFnZSBieSBhIHRpbWVyIGFuZCBubyBkZWxpdmVyeSBpcyBhdHRlbXB0ZWQgYWdhaW5zdCB0aGUgY2xvc2VkXG4gIC8vIGFnZW50LiBUaGUgcmVzdWx0aW5nIEFib3J0RXJyb3IgaXMgc2lsZW50bHkgZHJvcHBlZCBieSB0aGVcbiAgLy8gaXNBYm9ydEVycm9yIGNoZWNrIGluIHRoZSBkZWxpdmVyeSBjYXRjaCBoYW5kbGVyLlxuICBjb25zdCBjbG9zZUNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIGNvbnN0IGNsb3NlU2lnbmFsID0gY2xvc2VDb250cm9sbGVyLnNpZ25hbDtcblxuICAvKipcbiAgICogaG9sZHMgaW5mbGlnaHQgbWVzc2FnZXMgYnkgaWRlbXBvdGVuY3kga2V5IHRvIGVuc3VyZVxuICAgKiB0aGF0IHdlIGRvbid0IHF1ZXVlIHRoZSBzYW1lIG1lc3NhZ2UgbXVsdGlwbGUgdGltZXNcbiAgICovXG4gIGNvbnN0IGluZmxpZ2h0TWVzc2FnZXMgPSBuZXcgTWFwPHN0cmluZywgTWVzc2FnZUlkPigpO1xuICAvKiogRGlyZWN0IGluLXByb2Nlc3MgaGFuZGxlcnMgYnkgcXVldWUgcHJlZml4LCBieXBhc3NpbmcgSFRUUCB3aGVuIHNldC4gKi9cbiAgY29uc3QgZGlyZWN0SGFuZGxlcnMgPSBuZXcgTWFwPHN0cmluZywgRGlyZWN0SGFuZGxlcj4oKTtcblxuICBjb25zdCBxdWV1ZTogUXVldWVbJ3F1ZXVlJ10gPSBhc3luYyAocXVldWVOYW1lLCBtZXNzYWdlLCBvcHRzKSA9PiB7XG4gICAgY29uc3QgY2xlYW51cCA9IFtdIGFzICgoKSA9PiB2b2lkKVtdO1xuXG4gICAgaWYgKG9wdHM/LmlkZW1wb3RlbmN5S2V5KSB7XG4gICAgICBjb25zdCBleGlzdGluZyA9IGluZmxpZ2h0TWVzc2FnZXMuZ2V0KG9wdHMuaWRlbXBvdGVuY3lLZXkpO1xuICAgICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICAgIHJldHVybiB7IG1lc3NhZ2VJZDogZXhpc3RpbmcgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBib2R5ID0gdHJhbnNwb3J0LnNlcmlhbGl6ZShtZXNzYWdlKTtcbiAgICBjb25zdCB7IHBhdGhuYW1lLCBwcmVmaXggfSA9IGdldFF1ZXVlUm91dGUocXVldWVOYW1lKTtcbiAgICBjb25zdCBtZXNzYWdlSWQgPSBNZXNzYWdlSWQucGFyc2UoYG1zZ18ke2dlbmVyYXRlSWQoKX1gKTtcblxuICAgIC8vIEV4dHJhY3QgaWRlbnRpZmllcnMgZnJvbSB0aGUgbWVzc2FnZSBmb3Igc3RydWN0dXJlZCBsb2dnaW5nLlxuICAgIC8vIFdvcmtmbG93IG1lc3NhZ2VzIGhhdmUgYHJ1bklkYCwgc3RlcCBtZXNzYWdlcyBoYXZlIGB3b3JrZmxvd1J1bklkYCArIGBzdGVwSWRgLlxuICAgIGNvbnN0IG1zZyA9IG1lc3NhZ2UgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgY29uc3QgcnVuSWQgPSAobXNnLnJ1bklkID8/IG1zZy53b3JrZmxvd1J1bklkID8/IHVuZGVmaW5lZCkgYXNcbiAgICAgIHwgc3RyaW5nXG4gICAgICB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCBzdGVwSWQgPSAobXNnLnN0ZXBJZCA/PyB1bmRlZmluZWQpIGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGlmIChvcHRzPy5pZGVtcG90ZW5jeUtleSkge1xuICAgICAgY29uc3Qga2V5ID0gb3B0cy5pZGVtcG90ZW5jeUtleTtcbiAgICAgIGluZmxpZ2h0TWVzc2FnZXMuc2V0KGtleSwgbWVzc2FnZUlkKTtcbiAgICAgIGNsZWFudXAucHVzaCgoKSA9PiB7XG4gICAgICAgIGluZmxpZ2h0TWVzc2FnZXMuZGVsZXRlKGtleSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gSG9ub3IgdGhlIGNhbGxlcidzIHJlcXVlc3RlZCBkZWxpdmVyeSBkZWxheSBiZWZvcmUgYWNxdWlyaW5nIGEgcXVldWVcbiAgICAgIC8vIHNsb3QuIFNsZWVwaW5nIG91dHNpZGUgdGhlIHNlbWFwaG9yZSBzbyBhIGRlbGF5ZWQgbWVzc2FnZSBkb2Vzbid0XG4gICAgICAvLyBob2xkIGEgd29ya2VyIGhvc3RhZ2UgZm9yIGl0cyBkZWxheSB3aW5kb3cg4oCUIHRoZSB3b3JrZXIgc2hvdWxkIGJlXG4gICAgICAvLyBmcmVlIHRvIHByb2Nlc3Mgb3RoZXIgKGltbWVkaWF0ZSkgbWVzc2FnZXMgdW50aWwgdGhpcyBvbmUgaXMgcmVhZHkuXG4gICAgICAvLyBWUVMtc2lkZSBxdWV1ZXMgaG9ub3IgZGVsYXlTZWNvbmRzIGF0IHRoZSBicm9rZXIsIHNvIHRoaXMgYnJpbmdzXG4gICAgICAvLyB3b3JsZC1sb2NhbCBpbiBsaW5lIHdpdGggcHJvZHVjdGlvbiBiZWhhdmlvci5cbiAgICAgIGlmIChvcHRzPy5kZWxheVNlY29uZHMgJiYgb3B0cy5kZWxheVNlY29uZHMgPiAwKSB7XG4gICAgICAgIGNvbnN0IGRlbGF5TXMgPSBNYXRoLm1pbihvcHRzLmRlbGF5U2Vjb25kcyAqIDEwMDAsIE1BWF9TQUZFX1RJTUVPVVRfTVMpO1xuICAgICAgICBhd2FpdCBzZXRUaW1lb3V0KGRlbGF5TXMsIHVuZGVmaW5lZCwgeyBzaWduYWw6IGNsb3NlU2lnbmFsIH0pO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB0b2tlbiA9IHNlbWFwaG9yZS50cnlBY3F1aXJlKCk7XG4gICAgICBpZiAoIXRva2VuKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBgW3dvcmxkLWxvY2FsXTogY29uY3VycmVuY3kgbGltaXQgKCR7V09SS0ZMT1dfTE9DQUxfUVVFVUVfQ09OQ1VSUkVOQ1l9KSByZWFjaGVkLCB3YWl0aW5nIGZvciBxdWV1ZSB0byBmcmVlIHVwYFxuICAgICAgICApO1xuICAgICAgICBhd2FpdCBzZW1hcGhvcmUuYWNxdWlyZSgpO1xuICAgICAgfVxuICAgICAgLy8gU2FmZXR5IGxpbWl0IHRvIHByZXZlbnQgaW5maW5pdGUgbG9vcHMgaW4gdGhlIGxvY2FsIHF1ZXVlLlxuICAgICAgLy8gVGhlIGFjdHVhbCBtYXggZGVsaXZlcnkgZW5mb3JjZW1lbnQgaGFwcGVucyBpbiB0aGUgd29ya2Zsb3cvc3RlcCBoYW5kbGVyc1xuICAgICAgLy8gKGF0IE1BWF9RVUVVRV9ERUxJVkVSSUVTID0gNDgpLCBzbyB0aGlzIGp1c3QgbmVlZHMgdG8gYmUgY29tZm9ydGFibHkgaGlnaGVyLlxuICAgICAgY29uc3QgTUFYX0xPQ0FMX1NBRkVUWV9MSU1JVCA9IDI1NjtcbiAgICAgIC8vIE51bWJlciBvZiB0aW1lcyB0aGUgbWVzc2FnZSBoYXMgYWN0dWFsbHkgcmVhY2hlZCBhIGhhbmRsZXIgKHJldHVybmVkXG4gICAgICAvLyBvaywgYSB0aW1lb3V0U2Vjb25kcyByZS1kZWxpdmVyeSwgb3IgYW4gSFRUUCBlcnJvciByZXNwb25zZSkuIFRoaXMg4oCUXG4gICAgICAvLyBub3QgdGhlIGxvb3AgY291bnRlciDigJQgaXMgdGhlIGF0dGVtcHQgdGhlIGhhbmRsZXIgc2VlcyB2aWFcbiAgICAgIC8vIGB4LXZxcy1tZXNzYWdlLWF0dGVtcHRgLCB3aGljaCBpdCBjb3VudHMgYWdhaW5zdCBNQVhfUVVFVUVfREVMSVZFUklFUy5cbiAgICAgIC8vIFRyYW5zcG9ydC1sZXZlbCBmYWlsdXJlcyAoYmVsb3cpIG5ldmVyIHJlYWNoIHRoZSBoYW5kbGVyLCBzbyB0aGV5IG11c3RcbiAgICAgIC8vIG5vdCBhZHZhbmNlIHRoaXMsIG9yIGEgYnVyc3Qgb2YgXCJmZXRjaCBmYWlsZWRcIi9FVElNRURPVVQgdGltZW91dHMgdW5kZXJcbiAgICAgIC8vIGxvY2FsIGxvYWQgd291bGQgZXhoYXVzdCB0aGUgaGFuZGxlcidzIGRlbGl2ZXJ5IGJ1ZGdldCBiZWZvcmUgaXRzIGZpcnN0XG4gICAgICAvLyByZWFsIGV4ZWN1dGlvbi5cbiAgICAgIGxldCBkZWxpdmVyeSA9IDA7XG4gICAgICB0cnkge1xuICAgICAgICBmb3IgKGxldCBsb29wID0gMDsgbG9vcCA8IE1BWF9MT0NBTF9TQUZFVFlfTElNSVQ7IGxvb3ArKykge1xuICAgICAgICAgIGNvbnN0IGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAgICAgICAuLi5vcHRzPy5oZWFkZXJzLFxuICAgICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICd4LXZxcy1xdWV1ZS1uYW1lJzogcXVldWVOYW1lLFxuICAgICAgICAgICAgJ3gtdnFzLW1lc3NhZ2UtaWQnOiBtZXNzYWdlSWQsXG4gICAgICAgICAgICAneC12cXMtbWVzc2FnZS1hdHRlbXB0JzogU3RyaW5nKGRlbGl2ZXJ5ICsgMSksXG4gICAgICAgICAgfTtcbiAgICAgICAgICBjb25zdCBkaXJlY3RIYW5kbGVyID0gZGlyZWN0SGFuZGxlcnMuZ2V0KHByZWZpeCk7XG4gICAgICAgICAgbGV0IHJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoZGlyZWN0SGFuZGxlcikge1xuICAgICAgICAgICAgICBjb25zdCByZXEgPSBuZXcgUmVxdWVzdChcbiAgICAgICAgICAgICAgICBgaHR0cDovL2xvY2FsaG9zdC8ud2VsbC1rbm93bi93b3JrZmxvdy92MS8ke3BhdGhuYW1lfWAsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIHJlc3BvbnNlID0gYXdhaXQgZGlyZWN0SGFuZGxlcihyZXEpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29uc3QgYmFzZVVybCA9IGF3YWl0IHJlc29sdmVCYXNlVXJsKGNvbmZpZyk7XG4gICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55IC0tIHVuZGljaSB2NyBkaXNwYXRjaGVyIHR5cGVzIGRvbid0IG1hdGNoIEB0eXBlcy9ub2RlJ3MgUmVxdWVzdEluaXRcbiAgICAgICAgICAgICAgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChcbiAgICAgICAgICAgICAgICBgJHtiYXNlVXJsfS8ud2VsbC1rbm93bi93b3JrZmxvdy92MS8ke3BhdGhuYW1lfWAsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgICAgICAgICBkdXBsZXg6ICdoYWxmJyxcbiAgICAgICAgICAgICAgICAgIGRpc3BhdGNoZXI6IGh0dHBBZ2VudCxcbiAgICAgICAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICBib2R5LFxuICAgICAgICAgICAgICAgIH0gYXMgYW55XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAvLyBUaGUgZGVsaXZlcnkgbmV2ZXIgcmVhY2hlZCB0aGUgaGFuZGxlcjogdW5kaWNpIHRocmV3IGJlZm9yZSBhXG4gICAgICAgICAgICAvLyByZXNwb25zZS4gVW5kZXIgaGVhdnkgbG9jYWwgY29uY3VycmVuY3kgdGhlIHNpbmdsZS1wcm9jZXNzIGRldlxuICAgICAgICAgICAgLy8gc2VydmVyIGNhbid0IGFjY2VwdCBldmVyeSBjb25uZWN0aW9uLCBzbyB1bmRpY2kgcmVwb3J0c1xuICAgICAgICAgICAgLy8gYFR5cGVFcnJvcjogZmV0Y2ggZmFpbGVkYCB3aXRoIGFuIEVUSU1FRE9VVC9FQ09OTlJFU0VUIGNhdXNlLlxuICAgICAgICAgICAgLy8gVGhlc2UgYXJlIHRyYW5zaWVudCDigJQgYmFjayBvZmYgYW5kIHJldHJ5IHRoZSAqc2FtZSogZGVsaXZlcnlcbiAgICAgICAgICAgIC8vIHJhdGhlciB0aGFuIGRyb3BwaW5nIHRoZSBtZXNzYWdlICh3aGljaCB3b3VsZCBsZWF2ZSB0aGUgc3RlcFxuICAgICAgICAgICAgLy8gbmV2ZXIgc3RhcnRlZCwgd2l0aCBubyByZXRyeSkuIFR3byBmYWlsdXJlcyBhcmUgbm90IHJldHJ5YWJsZTpcbiAgICAgICAgICAgIC8vICAtIHNodXRkb3duOiBjbG9zZSgpIGFib3J0ZWQgdGhlIGFnZW50IC8gdGhlIGJhY2tvZmYgc2xlZXAuXG4gICAgICAgICAgICAvLyAgLSBhIGRldGFjaGVkLUFycmF5QnVmZmVyIHByb3h5IG1pc2NvbmZpZywgd2hpY2ggbmV2ZXIgc3VjY2VlZHMg4oCUXG4gICAgICAgICAgICAvLyAgICByZXRocm93IHNvIHRoZSBvdXRlciBjYXRjaCBzdXJmYWNlcyB0aGUgYWN0aW9uYWJsZSBndWlkYW5jZS5cbiAgICAgICAgICAgIGNvbnN0IG5hbWUgPSAoZXJyIGFzIHsgbmFtZT86IHN0cmluZyB9IHwgdW5kZWZpbmVkKT8ubmFtZTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgY2xvc2VTaWduYWwuYWJvcnRlZCB8fFxuICAgICAgICAgICAgICBuYW1lID09PSAnQWJvcnRFcnJvcicgfHxcbiAgICAgICAgICAgICAgbmFtZSA9PT0gJ1Jlc3BvbnNlQWJvcnRlZCdcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNEZXRhY2hlZEFycmF5QnVmZmVyUXVldWVFcnJvcihlcnIpKSB0aHJvdyBlcnI7XG5cbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIGBbd29ybGQtbG9jYWxdIFF1ZXVlIGRlbGl2ZXJ5IGZhaWxlZCBhdCB0aGUgdHJhbnNwb3J0IChsb29wICR7bG9vcCArIDF9KSwgcmV0cnlpbmdgLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcXVldWVOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2VJZCxcbiAgICAgICAgICAgICAgICAuLi4ocnVuSWQgJiYgeyBydW5JZCB9KSxcbiAgICAgICAgICAgICAgICAuLi4oc3RlcElkICYmIHsgc3RlcElkIH0pLFxuICAgICAgICAgICAgICAgIGVycm9yOiBTdHJpbmcoZXJyKSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGF3YWl0IHNldFRpbWVvdXQoNTAwMCwgdW5kZWZpbmVkLCB7IHNpZ25hbDogY2xvc2VTaWduYWwgfSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkZWxpdmVyeSsrO1xuICAgICAgICAgIGNvbnN0IHRleHQgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG5cbiAgICAgICAgICBpZiAocmVzcG9uc2Uub2spIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IHRpbWVvdXRTZWNvbmRzID0gTnVtYmVyKEpTT04ucGFyc2UodGV4dCkudGltZW91dFNlY29uZHMpO1xuICAgICAgICAgICAgICBpZiAoTnVtYmVyLmlzRmluaXRlKHRpbWVvdXRTZWNvbmRzKSAmJiB0aW1lb3V0U2Vjb25kcyA+PSAwKSB7XG4gICAgICAgICAgICAgICAgLy8gQ2xhbXAgdG8gTUFYX1NBRkVfVElNRU9VVF9NUyB0byBhdm9pZCBOb2RlLmpzIHNldFRpbWVvdXQgb3ZlcmZsb3cgd2FybmluZy5cbiAgICAgICAgICAgICAgICAvLyBXaGVuIHRoaXMgZmlyZXMgZWFybHksIHRoZSBoYW5kbGVyIHJlY2FsY3VsYXRlcyByZW1haW5pbmcgdGltZSBmcm9tXG4gICAgICAgICAgICAgICAgLy8gcGVyc2lzdGVudCBzdGF0ZSBhbmQgcmV0dXJucyBhbm90aGVyIHRpbWVvdXRTZWNvbmRzIGlmIG5lZWRlZC5cbiAgICAgICAgICAgICAgICBpZiAodGltZW91dFNlY29uZHMgPiAwKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCB0aW1lb3V0TXMgPSBNYXRoLm1pbihcbiAgICAgICAgICAgICAgICAgICAgdGltZW91dFNlY29uZHMgKiAxMDAwLFxuICAgICAgICAgICAgICAgICAgICBNQVhfU0FGRV9USU1FT1VUX01TXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgYXdhaXQgc2V0VGltZW91dCh0aW1lb3V0TXMsIHVuZGVmaW5lZCwge1xuICAgICAgICAgICAgICAgICAgICBzaWduYWw6IGNsb3NlU2lnbmFsLFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIHt9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIGBbd29ybGQtbG9jYWxdIFF1ZXVlIG1lc3NhZ2UgZmFpbGVkIChhdHRlbXB0ICR7ZGVsaXZlcnl9LCBIVFRQICR7cmVzcG9uc2Uuc3RhdHVzfSlgLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBxdWV1ZU5hbWUsXG4gICAgICAgICAgICAgIG1lc3NhZ2VJZCxcbiAgICAgICAgICAgICAgLi4uKHJ1bklkICYmIHsgcnVuSWQgfSksXG4gICAgICAgICAgICAgIC4uLihzdGVwSWQgJiYgeyBzdGVwSWQgfSksXG4gICAgICAgICAgICAgIGhhbmRsZXJFcnJvcjogdGV4dCxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuXG4gICAgICAgICAgLy8gNXMgbGluZWFyIGJhY2tvZmYgdG8gYXBwcm94aW1hdGUgVlFTIHJldHJ5IHRpbWluZyBpbiBsb2NhbCBkZXYuXG4gICAgICAgICAgLy8gVlFTIHVzZXMgNXMgbGluZWFyIGZvciBhdHRlbXB0cyAx4oCTMzIsIHRoZW4gZXhwb25lbnRpYWwsIGJ1dCBmb3JcbiAgICAgICAgICAvLyBsb2NhbCBkZXYgbGluZWFyIDVzIGlzIHN1ZmZpY2llbnQg4oCUIHRoZSBoYW5kbGVyIGVuZm9yY2VzIHRoZSByZWFsXG4gICAgICAgICAgLy8gY2FwIGF0IE1BWF9RVUVVRV9ERUxJVkVSSUVTICg0OCkgd2hpY2gga2VlcHMgdG90YWwgdGltZSB1bmRlciB+NG1pbi5cbiAgICAgICAgICBhd2FpdCBzZXRUaW1lb3V0KDUwMDAsIHVuZGVmaW5lZCwgeyBzaWduYWw6IGNsb3NlU2lnbmFsIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBgW3dvcmxkLWxvY2FsXSBRdWV1ZSBtZXNzYWdlIGV4aGF1c3RlZCBzYWZldHkgbGltaXQgKCR7TUFYX0xPQ0FMX1NBRkVUWV9MSU1JVH0gYXR0ZW1wdHMpYCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBxdWV1ZU5hbWUsXG4gICAgICAgICAgICBtZXNzYWdlSWQsXG4gICAgICAgICAgICAuLi4ocnVuSWQgJiYgeyBydW5JZCB9KSxcbiAgICAgICAgICAgIC4uLihzdGVwSWQgJiYgeyBzdGVwSWQgfSksXG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgc2VtYXBob3JlLnJlbGVhc2UoKTtcbiAgICAgIH1cbiAgICB9KSgpXG4gICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAvLyBTaWxlbnRseSBpZ25vcmUgY2xpZW50IGRpc2Nvbm5lY3QgZXJyb3JzIChlLmcuLCBicm93c2VyIHJlZnJlc2ggZHVyaW5nIHN0cmVhbWluZylcbiAgICAgICAgLy8gVGhlc2UgYXJlIGV4cGVjdGVkIGFuZCBzaG91bGQgbm90IGNhdXNlIHVuaGFuZGxlZCByZWplY3Rpb24gd2FybmluZ3NcbiAgICAgICAgY29uc3QgaXNBYm9ydEVycm9yID1cbiAgICAgICAgICBlcnI/Lm5hbWUgPT09ICdBYm9ydEVycm9yJyB8fCBlcnI/Lm5hbWUgPT09ICdSZXNwb25zZUFib3J0ZWQnO1xuICAgICAgICBpZiAoIWlzQWJvcnRFcnJvcikge1xuICAgICAgICAgIGlmIChpc0RldGFjaGVkQXJyYXlCdWZmZXJRdWV1ZUVycm9yKGVycikpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIGBbbG9jYWwgd29ybGRdIFF1ZXVlIG9wZXJhdGlvbiBmYWlsZWQ6IGRldGVjdGVkIFwiJHtERVRBQ0hFRF9BUlJBWUJVRkZFUl9FUlJPUn1cIi4gYCArXG4gICAgICAgICAgICAgICAgXCJUaGlzIHVzdWFsbHkgbWVhbnMgYSBOZXh0LmpzIHByb3h5L21pZGRsZXdhcmUgY29uc3VtZWQgV29ya2Zsb3cncyBpbnRlcm5hbCBcIiArXG4gICAgICAgICAgICAgICAgJ3JlcXVlc3QgYmVmb3JlIHRoZSBleGVjdXRvciBjb3VsZCByZWFkIGl0LiBFeGNsdWRlIGAvLndlbGwta25vd24vd29ya2Zsb3cvKmAgJyArXG4gICAgICAgICAgICAgICAgYGZyb20geW91ciBtYXRjaGVyLiBTZWUgJHtQUk9YWV9IQU5ETEVSX0RPQ1NfVVJMfWAsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBxdWV1ZU5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZUlkLFxuICAgICAgICAgICAgICAgIC4uLihydW5JZCAmJiB7IHJ1bklkIH0pLFxuICAgICAgICAgICAgICAgIC4uLihzdGVwSWQgJiYgeyBzdGVwSWQgfSksXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxFcnJvcjogZXJyLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdbbG9jYWwgd29ybGRdIFF1ZXVlIG9wZXJhdGlvbiBmYWlsZWQ6JywgZXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgZm4gb2YgY2xlYW51cCkge1xuICAgICAgICAgIGZuKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgcmV0dXJuIHsgbWVzc2FnZUlkIH07XG4gIH07XG5cbiAgY29uc3QgSGVhZGVyUGFyc2VyID0gei5vYmplY3Qoe1xuICAgICd4LXZxcy1xdWV1ZS1uYW1lJzogVmFsaWRRdWV1ZU5hbWUsXG4gICAgJ3gtdnFzLW1lc3NhZ2UtaWQnOiBNZXNzYWdlSWQsXG4gICAgJ3gtdnFzLW1lc3NhZ2UtYXR0ZW1wdCc6IHouY29lcmNlLm51bWJlcigpLFxuICB9KTtcblxuICBjb25zdCBjcmVhdGVRdWV1ZUhhbmRsZXI6IFF1ZXVlWydjcmVhdGVRdWV1ZUhhbmRsZXInXSA9IChwcmVmaXgsIGhhbmRsZXIpID0+IHtcbiAgICByZXR1cm4gYXN5bmMgKHJlcSkgPT4ge1xuICAgICAgY29uc3QgaGVhZGVycyA9IEhlYWRlclBhcnNlci5zYWZlUGFyc2UoT2JqZWN0LmZyb21FbnRyaWVzKHJlcS5oZWFkZXJzKSk7XG5cbiAgICAgIGlmICghaGVhZGVycy5zdWNjZXNzIHx8ICFyZXEuYm9keSkge1xuICAgICAgICByZXR1cm4gUmVzcG9uc2UuanNvbihcbiAgICAgICAgICB7XG4gICAgICAgICAgICBlcnJvcjogIXJlcS5ib2R5XG4gICAgICAgICAgICAgID8gJ01pc3NpbmcgcmVxdWVzdCBib2R5J1xuICAgICAgICAgICAgICA6ICdNaXNzaW5nIHJlcXVpcmVkIGhlYWRlcnMnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgeyBzdGF0dXM6IDQwMCB9XG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHF1ZXVlTmFtZSA9IGhlYWRlcnMuZGF0YVsneC12cXMtcXVldWUtbmFtZSddO1xuICAgICAgY29uc3QgbWVzc2FnZUlkID0gaGVhZGVycy5kYXRhWyd4LXZxcy1tZXNzYWdlLWlkJ107XG4gICAgICBjb25zdCBhdHRlbXB0ID0gaGVhZGVycy5kYXRhWyd4LXZxcy1tZXNzYWdlLWF0dGVtcHQnXTtcblxuICAgICAgaWYgKCFxdWV1ZU5hbWUuc3RhcnRzV2l0aChwcmVmaXgpKSB7XG4gICAgICAgIHJldHVybiBSZXNwb25zZS5qc29uKHsgZXJyb3I6ICdVbmhhbmRsZWQgcXVldWUnIH0sIHsgc3RhdHVzOiA0MDAgfSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGJvZHkgPSBhd2FpdCBuZXcgVHlwZWRKc29uVHJhbnNwb3J0KCkuZGVzZXJpYWxpemUocmVxLmJvZHkpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaGFuZGxlcihib2R5LCB7IGF0dGVtcHQsIHF1ZXVlTmFtZSwgbWVzc2FnZUlkIH0pO1xuXG4gICAgICAgIGxldCB0aW1lb3V0U2Vjb25kczogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gICAgICAgIGlmICh0eXBlb2YgcmVzdWx0Py50aW1lb3V0U2Vjb25kcyA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICB0aW1lb3V0U2Vjb25kcyA9IE1hdGgubWluKFxuICAgICAgICAgICAgcmVzdWx0LnRpbWVvdXRTZWNvbmRzLFxuICAgICAgICAgICAgTE9DQUxfUVVFVUVfTUFYX1ZJU0lCSUxJVFlcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRpbWVvdXRTZWNvbmRzICE9IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gUmVzcG9uc2UuanNvbih7IHRpbWVvdXRTZWNvbmRzIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFJlc3BvbnNlLmpzb24oeyBvazogdHJ1ZSB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHJldHVybiBSZXNwb25zZS5qc29uKFN0cmluZyhlcnJvciksIHsgc3RhdHVzOiA1MDAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgfTtcblxuICBjb25zdCBnZXREZXBsb3ltZW50SWQ6IFF1ZXVlWydnZXREZXBsb3ltZW50SWQnXSA9IGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBwYWNrYWdlSW5mbyA9IGF3YWl0IGdldFBhY2thZ2VJbmZvKCk7XG4gICAgcmV0dXJuIGBkcGxfbG9jYWxAJHtwYWNrYWdlSW5mby52ZXJzaW9ufWA7XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBxdWV1ZSxcbiAgICBjcmVhdGVRdWV1ZUhhbmRsZXIsXG4gICAgZ2V0RGVwbG95bWVudElkLFxuICAgIHJlZ2lzdGVySGFuZGxlcihwcmVmaXg6IFF1ZXVlUHJlZml4LCBoYW5kbGVyOiBEaXJlY3RIYW5kbGVyKSB7XG4gICAgICBkaXJlY3RIYW5kbGVycy5zZXQocHJlZml4LCBoYW5kbGVyKTtcbiAgICB9LFxuICAgIGFzeW5jIGNsb3NlKCkge1xuICAgICAgLy8gSWRlbXBvdGVudDogc2h1dGRvd24gcGF0aHMgKENMSSBzaWduYWwgaGFuZGxlcnMsIHRlc3QgdGVhcmRvd24pXG4gICAgICAvLyBtYXkgY2xvc2UgdGhlIHF1ZXVlIG1vcmUgdGhhbiBvbmNlLlxuICAgICAgaWYgKGNsb3NlU2lnbmFsLmFib3J0ZWQpIHJldHVybjtcbiAgICAgIGNsb3NlQ29udHJvbGxlci5hYm9ydCgpO1xuICAgICAgYXdhaXQgaHR0cEFnZW50LmNsb3NlKCk7XG4gICAgfSxcbiAgfTtcbn1cbiJdfQ==
|
|
344
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVldWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcXVldWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRWxELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BELE9BQU8sRUFDTCxTQUFTLEVBQ1QsY0FBYyxFQUdkLGNBQWMsR0FDZixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDbEMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDL0IsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUUzQixPQUFPLEVBQUUsY0FBYyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3BELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFM0M7Ozs7R0FJRztBQUNILE1BQU0sa0JBQWtCO0lBQ2IsV0FBVyxHQUFHLGtCQUFrQixDQUFDO0lBRTFDLFNBQVMsQ0FBQyxLQUFjO1FBQ3RCLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVyxDQUFDLE1BQWtDO1FBQ2xELE1BQU0sTUFBTSxHQUFpQixFQUFFLENBQUM7UUFDaEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2xDLE9BQU8sSUFBSSxFQUFFLENBQUM7WUFDWixNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFB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LE9BQU8sYUFBYSxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDNUMsQ0FBQyxDQUFDO0lBRUYsT0FBTztRQUNMLEtBQUs7UUFDTCxrQkFBa0I7UUFDbEIsZUFBZTtRQUNmLGVBQWUsQ0FBQyxNQUFtQixFQUFFLE9BQXNCO1lBQ3pELGNBQWMsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3RDLENBQUM7UUFDRCxLQUFLLENBQUMsS0FBSztZQUNULGtFQUFrRTtZQUNsRSxzQ0FBc0M7WUFDdEMsSUFBSSxXQUFXLENBQUMsT0FBTztnQkFBRSxPQUFPO1lBQ2hDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN4QixNQUFNLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMxQixDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzZXRUaW1lb3V0IH0gZnJvbSAnbm9kZTp0aW1lcnMvcHJvbWlzZXMnO1xuaW1wb3J0IHR5cGUgeyBUcmFuc3BvcnQgfSBmcm9tICdAdmVyY2VsL3F1ZXVlJztcbmltcG9ydCB7IGNyZWF0ZVdvcmtmbG93VXJsIH0gZnJvbSAnQHdvcmtmbG93L3V0aWxzJztcbmltcG9ydCB7XG4gIE1lc3NhZ2VJZCxcbiAgcGFyc2VRdWV1ZU5hbWUsXG4gIHR5cGUgUXVldWUsXG4gIHR5cGUgUXVldWVQcmVmaXgsXG4gIFZhbGlkUXVldWVOYW1lLFxufSBmcm9tICdAd29ya2Zsb3cvd29ybGQnO1xuaW1wb3J0IHsgU2VtYSB9IGZyb20gJ2FzeW5jLXNlbWEnO1xuaW1wb3J0IHsgbW9ub3RvbmljRmFjdG9yeSB9IGZyb20gJ3VsaWQnO1xuaW1wb3J0IHsgQWdlbnQgfSBmcm9tICd1bmRpY2knO1xuaW1wb3J0IHsgeiB9IGZyb20gJ3pvZC92NCc7XG5pbXBvcnQgdHlwZSB7IENvbmZpZyB9IGZyb20gJy4vY29uZmlnLmpzJztcbmltcG9ydCB7IHJlc29sdmVCYXNlVXJsLCByZXNvbHZlRGlyZWN0QmFzZVVybCB9IGZyb20gJy4vY29uZmlnLmpzJztcbmltcG9ydCB7IGpzb25SZXBsYWNlciwganNvblJldml2ZXIgfSBmcm9tICcuL2ZzLmpzJztcbmltcG9ydCB7IGdldFBhY2thZ2VJbmZvIH0gZnJvbSAnLi9pbml0LmpzJztcblxuLyoqXG4gKiBKU09OIHRyYW5zcG9ydCB0aGF0IHByZXNlcnZlcyBVaW50OEFycmF5IHZhbHVlcyB1c2luZyB0aGUgc2FtZVxuICogcmVwbGFjZXIvcmV2aXZlciB0aGF0IHdvcmxkLWxvY2FsIHVzZXMgZm9yIGZpbGVzeXN0ZW0gc3RvcmFnZS5cbiAqIFVpbnQ4QXJyYXkg4oaSIHsgX190eXBlOiAnVWludDhBcnJheScsIGRhdGE6ICc8YmFzZTY0PicgfSBpbiBKU09OLlxuICovXG5jbGFzcyBUeXBlZEpzb25UcmFuc3BvcnQgaW1wbGVtZW50cyBUcmFuc3BvcnQ8dW5rbm93bj4ge1xuICByZWFkb25seSBjb250ZW50VHlwZSA9ICdhcHBsaWNhdGlvbi9qc29uJztcblxuICBzZXJpYWxpemUodmFsdWU6IHVua25vd24pOiBCdWZmZXIge1xuICAgIHJldHVybiBCdWZmZXIuZnJvbShKU09OLnN0cmluZ2lmeSh2YWx1ZSwganNvblJlcGxhY2VyKSk7XG4gIH1cblxuICBhc3luYyBkZXNlcmlhbGl6ZShzdHJlYW06IFJlYWRhYmxlU3RyZWFtPFVpbnQ4QXJyYXk+KTogUHJvbWlzZTx1bmtub3duPiB7XG4gICAgY29uc3QgY2h1bmtzOiBVaW50OEFycmF5W10gPSBbXTtcbiAgICBjb25zdCByZWFkZXIgPSBzdHJlYW0uZ2V0UmVhZGVyKCk7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IHJlYWRlci5yZWFkKCk7XG4gICAgICBpZiAoZG9uZSkgYnJlYWs7XG4gICAgICBpZiAodmFsdWUpIGNodW5rcy5wdXNoKHZhbHVlKTtcbiAgICB9XG4gICAgY29uc3QgdGV4dCA9IEJ1ZmZlci5jb25jYXQoY2h1bmtzKS50b1N0cmluZygpO1xuICAgIHJldHVybiBKU09OLnBhcnNlKHRleHQsIGpzb25SZXZpdmVyKTtcbiAgfVxufVxuXG4vLyBGb3IgbG9jYWwgcXVldWUsIHRoZXJlIGlzIG5vIHRlY2huaWNhbCBsaW1pdCBvbiB0aGUgbWVzc2FnZSB2aXNpYmlsaXR5IGxpZmVzcGFuLFxuLy8gYnV0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBjYW4gYmUgdXNlZCBmb3IgdGVzdGluZyBwdXJwb3NlcyB0byBzZXQgYSBtYXggdmlzaWJpbGl0eSBsaW1pdC5cbmNvbnN0IExPQ0FMX1FVRVVFX01BWF9WSVNJQklMSVRZID1cbiAgcGFyc2VJbnQocHJvY2Vzcy5lbnYuV09SS0ZMT1dfTE9DQUxfUVVFVUVfTUFYX1ZJU0lCSUxJVFkgPz8gJzAnLCAxMCkgfHxcbiAgSW5maW5pdHk7XG5cbi8vIE1heGltdW0gc2FmZSBkZWxheSBmb3Igc2V0VGltZW91dCBpbiBOb2RlLmpzICgyXjMxIC0gMSBtaWxsaXNlY29uZHMg4omIIDI0Ljg1IGRheXMpXG4vLyBMYXJnZXIgdmFsdWVzIGNhdXNlIFwiVGltZW91dE92ZXJmbG93V2FybmluZzogWCBkb2VzIG5vdCBmaXQgaW50byBhIDMyLWJpdCBzaWduZWQgaW50ZWdlclwiXG4vLyBXaGVuIHRoZSBjbGFtcGVkIHRpbWVvdXQgZmlyZXMsIHRoZSBoYW5kbGVyIHdpbGwgcmVjYWxjdWxhdGUgcmVtYWluaW5nIHRpbWUgZnJvbVxuLy8gcGVyc2lzdGVudCBzdGF0ZSBhbmQgcmV0dXJuIGFub3RoZXIgdGltZW91dFNlY29uZHMgaWYgbmVlZGVkLlxuY29uc3QgTUFYX1NBRkVfVElNRU9VVF9NUyA9IDIxNDc0ODM2NDc7XG5cbi8vIFRoZSBsb2NhbCB3b3JrZXJzIHNoYXJlIHRoZSBzYW1lIE5vZGUuanMgcHJvY2VzcyBhbmQgZXZlbnQgbG9vcCxcbi8vIHNvIHdlIG5lZWQgdG8gbGltaXQgY29uY3VycmVuY3kgdG8gYXZvaWQgb3ZlcndoZWxtaW5nIHRoZSBzeXN0ZW0uXG5jb25zdCBERUZBVUxUX0NPTkNVUlJFTkNZX0xJTUlUID0gMTAwMDtcbmNvbnN0IFdPUktGTE9XX0xPQ0FMX1FVRVVFX0NPTkNVUlJFTkNZID1cbiAgcGFyc2VJbnQocHJvY2Vzcy5lbnYuV09SS0ZMT1dfTE9DQUxfUVVFVUVfQ09OQ1VSUkVOQ1kgPz8gJzAnLCAxMCkgfHxcbiAgREVGQVVMVF9DT05DVVJSRU5DWV9MSU1JVDtcblxuZXhwb3J0IHR5cGUgRGlyZWN0SGFuZGxlciA9IChyZXE6IFJlcXVlc3QpID0+IFByb21pc2U8UmVzcG9uc2U+O1xuXG5leHBvcnQgdHlwZSBMb2NhbFF1ZXVlID0gUXVldWUgJiB7XG4gIC8qKiBDbG9zZSB0aGUgSFRUUCBhZ2VudCBhbmQgcmVsZWFzZSByZXNvdXJjZXMuICovXG4gIGNsb3NlKCk6IFByb21pc2U8dm9pZD47XG4gIC8qKiBSZWdpc3RlciBhIGRpcmVjdCBpbi1wcm9jZXNzIGhhbmRsZXIgZm9yIGEgcXVldWUgcHJlZml4LCBieXBhc3NpbmcgSFRUUC4gKi9cbiAgcmVnaXN0ZXJIYW5kbGVyKHByZWZpeDogUXVldWVQcmVmaXgsIGhhbmRsZXI6IERpcmVjdEhhbmRsZXIpOiB2b2lkO1xufTtcblxuY29uc3QgREVUQUNIRURfQVJSQVlCVUZGRVJfRVJST1IgPVxuICAnQ2Fubm90IHBlcmZvcm0gQXJyYXlCdWZmZXIucHJvdG90eXBlLnNsaWNlIG9uIGEgZGV0YWNoZWQgQXJyYXlCdWZmZXInO1xuY29uc3QgUFJPWFlfSEFORExFUl9ET0NTX1VSTCA9XG4gICdodHRwczovL3dvcmtmbG93LXNkay5kZXYvZG9jcy9nZXR0aW5nLXN0YXJ0ZWQvbmV4dCNjb25maWd1cmUtcHJveHktaGFuZGxlcic7XG5cbmZ1bmN0aW9uIGlzRGV0YWNoZWRBcnJheUJ1ZmZlclF1ZXVlRXJyb3IoZXJyb3I6IHVua25vd24pOiBib29sZWFuIHtcbiAgbGV0IGN1cnJlbnQgPSBlcnJvcjtcbiAgY29uc3QgdmlzaXRlZCA9IG5ldyBTZXQ8dW5rbm93bj4oKTtcblxuICB3aGlsZSAoY3VycmVudCAmJiB0eXBlb2YgY3VycmVudCA9PT0gJ29iamVjdCcgJiYgIXZpc2l0ZWQuaGFzKGN1cnJlbnQpKSB7XG4gICAgdmlzaXRlZC5hZGQoY3VycmVudCk7XG4gICAgaWYgKFxuICAgICAgJ21lc3NhZ2UnIGluIGN1cnJlbnQgJiZcbiAgICAgIHR5cGVvZiBjdXJyZW50Lm1lc3NhZ2UgPT09ICdzdHJpbmcnICYmXG4gICAgICBjdXJyZW50Lm1lc3NhZ2UuaW5jbHVkZXMoREVUQUNIRURfQVJSQVlCVUZGRVJfRVJST1IpXG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgY3VycmVudCA9ICdjYXVzZScgaW4gY3VycmVudCA/IGN1cnJlbnQuY2F1c2UgOiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGdldFF1ZXVlUm91dGUocXVldWVOYW1lOiBWYWxpZFF1ZXVlTmFtZSk6IHtcbiAgcGF0aG5hbWU6ICdmbG93JyB8ICdzdGVwJztcbiAgcHJlZml4OiBRdWV1ZVByZWZpeDtcbn0ge1xuICBjb25zdCB7IGtpbmQsIHByZWZpeCB9ID0gcGFyc2VRdWV1ZU5hbWUocXVldWVOYW1lKTtcblxuICByZXR1cm4ge1xuICAgIHBhdGhuYW1lOiBraW5kID09PSAnd29ya2Zsb3cnID8gJ2Zsb3cnIDogJ3N0ZXAnLFxuICAgIHByZWZpeCxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVF1ZXVlKGNvbmZpZzogUGFydGlhbDxDb25maWc+KTogTG9jYWxRdWV1ZSB7XG4gIC8vIENyZWF0ZSBhIGN1c3RvbSBhZ2VudCBvcHRpbWl6ZWQgZm9yIGhpZ2gtY29uY3VycmVuY3kgbG9jYWwgd29ya2Zsb3dzOlxuICAvLyAtIGhlYWRlcnNUaW1lb3V0OiAwIGFsbG93cyBsb25nLXJ1bm5pbmcgc3RlcHNcbiAgLy8gLSBjb25uZWN0aW9uczogMTAwMCBhbGxvd3MgbWFueSBwYXJhbGxlbCBjb25uZWN0aW9ucyB0byB0aGUgc2FtZSBob3N0XG4gIC8vIC0gcGlwZWxpbmluZzogMSAoZGVmYXVsdCkgZm9yIEhUVFAvMS4xIGNvbXBhdGliaWxpdHlcbiAgLy8gLSBrZWVwQWxpdmVUaW1lb3V0OiAzMHMga2VlcHMgY29ubmVjdGlvbnMgd2FybSBmb3IgcmFwaWQgc3RlcCBleGVjdXRpb25cbiAgY29uc3QgaHR0cEFnZW50ID0gbmV3IEFnZW50KHtcbiAgICBoZWFkZXJzVGltZW91dDogMCxcbiAgICBjb25uZWN0aW9uczogMTAwMCxcbiAgICBrZWVwQWxpdmVUaW1lb3V0OiAzMF8wMDAsXG4gIH0pO1xuICBjb25zdCB0cmFuc3BvcnQgPSBuZXcgVHlwZWRKc29uVHJhbnNwb3J0KCk7XG4gIGNvbnN0IGdlbmVyYXRlSWQgPSBtb25vdG9uaWNGYWN0b3J5KCk7XG4gIGNvbnN0IHNlbWFwaG9yZSA9IG5ldyBTZW1hKFdPUktGTE9XX0xPQ0FMX1FVRVVFX0NPTkNVUlJFTkNZKTtcblxuICAvLyBBYm9ydGVkIGJ5IGNsb3NlKCk6IGNhbmNlbHMgZXZlcnkgcGVuZGluZyBzbGVlcCAoZGVsYXllZCBkZWxpdmVyaWVzLFxuICAvLyB0aW1lb3V0U2Vjb25kcyByZS1kZWxpdmVyaWVzLCByZXRyeSBiYWNrb2Zmcykgc28gc2h1dGRvd24gaXNuJ3QgaGVsZFxuICAvLyBob3N0YWdlIGJ5IGEgdGltZXIgYW5kIG5vIGRlbGl2ZXJ5IGlzIGF0dGVtcHRlZCBhZ2FpbnN0IHRoZSBjbG9zZWRcbiAgLy8gYWdlbnQuIFRoZSByZXN1bHRpbmcgQWJvcnRFcnJvciBpcyBzaWxlbnRseSBkcm9wcGVkIGJ5IHRoZVxuICAvLyBpc0Fib3J0RXJyb3IgY2hlY2sgaW4gdGhlIGRlbGl2ZXJ5IGNhdGNoIGhhbmRsZXIuXG4gIGNvbnN0IGNsb3NlQ29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgY29uc3QgY2xvc2VTaWduYWwgPSBjbG9zZUNvbnRyb2xsZXIuc2lnbmFsO1xuXG4gIC8qKlxuICAgKiBob2xkcyBpbmZsaWdodCBtZXNzYWdlcyBieSBpZGVtcG90ZW5jeSBrZXkgdG8gZW5zdXJlXG4gICAqIHRoYXQgd2UgZG9uJ3QgcXVldWUgdGhlIHNhbWUgbWVzc2FnZSBtdWx0aXBsZSB0aW1lc1xuICAgKi9cbiAgY29uc3QgaW5mbGlnaHRNZXNzYWdlcyA9IG5ldyBNYXA8c3RyaW5nLCBNZXNzYWdlSWQ+KCk7XG4gIC8qKiBEaXJlY3QgaW4tcHJvY2VzcyBoYW5kbGVycyBieSBxdWV1ZSBwcmVmaXgsIGJ5cGFzc2luZyBIVFRQIHdoZW4gc2V0LiAqL1xuICBjb25zdCBkaXJlY3RIYW5kbGVycyA9IG5ldyBNYXA8c3RyaW5nLCBEaXJlY3RIYW5kbGVyPigpO1xuXG4gIGNvbnN0IHF1ZXVlOiBRdWV1ZVsncXVldWUnXSA9IGFzeW5jIChxdWV1ZU5hbWUsIG1lc3NhZ2UsIG9wdHMpID0+IHtcbiAgICBjb25zdCBjbGVhbnVwID0gW10gYXMgKCgpID0+IHZvaWQpW107XG5cbiAgICBpZiAob3B0cz8uaWRlbXBvdGVuY3lLZXkpIHtcbiAgICAgIGNvbnN0IGV4aXN0aW5nID0gaW5mbGlnaHRNZXNzYWdlcy5nZXQob3B0cy5pZGVtcG90ZW5jeUtleSk7XG4gICAgICBpZiAoZXhpc3RpbmcpIHtcbiAgICAgICAgcmV0dXJuIHsgbWVzc2FnZUlkOiBleGlzdGluZyB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGJvZHkgPSB0cmFuc3BvcnQuc2VyaWFsaXplKG1lc3NhZ2UpO1xuICAgIGNvbnN0IHsgcGF0aG5hbWUsIHByZWZpeCB9ID0gZ2V0UXVldWVSb3V0ZShxdWV1ZU5hbWUpO1xuICAgIGNvbnN0IG1lc3NhZ2VJZCA9IE1lc3NhZ2VJZC5wYXJzZShgbXNnXyR7Z2VuZXJhdGVJZCgpfWApO1xuXG4gICAgLy8gRXh0cmFjdCBpZGVudGlmaWVycyBmcm9tIHRoZSBtZXNzYWdlIGZvciBzdHJ1Y3R1cmVkIGxvZ2dpbmcuXG4gICAgLy8gV29ya2Zsb3cgbWVzc2FnZXMgaGF2ZSBgcnVuSWRgLCBzdGVwIG1lc3NhZ2VzIGhhdmUgYHdvcmtmbG93UnVuSWRgICsgYHN0ZXBJZGAuXG4gICAgY29uc3QgbXNnID0gbWVzc2FnZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBjb25zdCBydW5JZCA9IChtc2cucnVuSWQgPz8gbXNnLndvcmtmbG93UnVuSWQgPz8gdW5kZWZpbmVkKSBhc1xuICAgICAgfCBzdHJpbmdcbiAgICAgIHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IHN0ZXBJZCA9IChtc2cuc3RlcElkID8/IHVuZGVmaW5lZCkgYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgaWYgKG9wdHM/LmlkZW1wb3RlbmN5S2V5KSB7XG4gICAgICBjb25zdCBrZXkgPSBvcHRzLmlkZW1wb3RlbmN5S2V5O1xuICAgICAgaW5mbGlnaHRNZXNzYWdlcy5zZXQoa2V5LCBtZXNzYWdlSWQpO1xuICAgICAgY2xlYW51cC5wdXNoKCgpID0+IHtcbiAgICAgICAgaW5mbGlnaHRNZXNzYWdlcy5kZWxldGUoa2V5KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAvLyBIb25vciB0aGUgY2FsbGVyJ3MgcmVxdWVzdGVkIGRlbGl2ZXJ5IGRlbGF5IGJlZm9yZSBhY3F1aXJpbmcgYSBxdWV1ZVxuICAgICAgLy8gc2xvdC4gU2xlZXBpbmcgb3V0c2lkZSB0aGUgc2VtYXBob3JlIHNvIGEgZGVsYXllZCBtZXNzYWdlIGRvZXNuJ3RcbiAgICAgIC8vIGhvbGQgYSB3b3JrZXIgaG9zdGFnZSBmb3IgaXRzIGRlbGF5IHdpbmRvdyDigJQgdGhlIHdvcmtlciBzaG91bGQgYmVcbiAgICAgIC8vIGZyZWUgdG8gcHJvY2VzcyBvdGhlciAoaW1tZWRpYXRlKSBtZXNzYWdlcyB1bnRpbCB0aGlzIG9uZSBpcyByZWFkeS5cbiAgICAgIC8vIFZRUy1zaWRlIHF1ZXVlcyBob25vciBkZWxheVNlY29uZHMgYXQgdGhlIGJyb2tlciwgc28gdGhpcyBicmluZ3NcbiAgICAgIC8vIHdvcmxkLWxvY2FsIGluIGxpbmUgd2l0aCBwcm9kdWN0aW9uIGJlaGF2aW9yLlxuICAgICAgaWYgKG9wdHM/LmRlbGF5U2Vjb25kcyAmJiBvcHRzLmRlbGF5U2Vjb25kcyA+IDApIHtcbiAgICAgICAgY29uc3QgZGVsYXlNcyA9IE1hdGgubWluKG9wdHMuZGVsYXlTZWNvbmRzICogMTAwMCwgTUFYX1NBRkVfVElNRU9VVF9NUyk7XG4gICAgICAgIGF3YWl0IHNldFRpbWVvdXQoZGVsYXlNcywgdW5kZWZpbmVkLCB7IHNpZ25hbDogY2xvc2VTaWduYWwgfSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRva2VuID0gc2VtYXBob3JlLnRyeUFjcXVpcmUoKTtcbiAgICAgIGlmICghdG9rZW4pIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIGBbd29ybGQtbG9jYWxdOiBjb25jdXJyZW5jeSBsaW1pdCAoJHtXT1JLRkxPV19MT0NBTF9RVUVVRV9DT05DVVJSRU5DWX0pIHJlYWNoZWQsIHdhaXRpbmcgZm9yIHF1ZXVlIHRvIGZyZWUgdXBgXG4gICAgICAgICk7XG4gICAgICAgIGF3YWl0IHNlbWFwaG9yZS5hY3F1aXJlKCk7XG4gICAgICB9XG4gICAgICAvLyBTYWZldHkgbGltaXQgdG8gcHJldmVudCBpbmZpbml0ZSBsb29wcyBpbiB0aGUgbG9jYWwgcXVldWUuXG4gICAgICAvLyBUaGUgYWN0dWFsIG1heCBkZWxpdmVyeSBlbmZvcmNlbWVudCBoYXBwZW5zIGluIHRoZSB3b3JrZmxvdy9zdGVwIGhhbmRsZXJzXG4gICAgICAvLyAoYXQgTUFYX1FVRVVFX0RFTElWRVJJRVMgPSA0OCksIHNvIHRoaXMganVzdCBuZWVkcyB0byBiZSBjb21mb3J0YWJseSBoaWdoZXIuXG4gICAgICBjb25zdCBNQVhfTE9DQUxfU0FGRVRZX0xJTUlUID0gMjU2O1xuICAgICAgLy8gTnVtYmVyIG9mIHRpbWVzIHRoZSBtZXNzYWdlIGhhcyBhY3R1YWxseSByZWFjaGVkIGEgaGFuZGxlciAocmV0dXJuZWRcbiAgICAgIC8vIG9rLCBhIHRpbWVvdXRTZWNvbmRzIHJlLWRlbGl2ZXJ5LCBvciBhbiBIVFRQIGVycm9yIHJlc3BvbnNlKS4gVGhpcyDigJRcbiAgICAgIC8vIG5vdCB0aGUgbG9vcCBjb3VudGVyIOKAlCBpcyB0aGUgYXR0ZW1wdCB0aGUgaGFuZGxlciBzZWVzIHZpYVxuICAgICAgLy8gYHgtdnFzLW1lc3NhZ2UtYXR0ZW1wdGAsIHdoaWNoIGl0IGNvdW50cyBhZ2FpbnN0IE1BWF9RVUVVRV9ERUxJVkVSSUVTLlxuICAgICAgLy8gVHJhbnNwb3J0LWxldmVsIGZhaWx1cmVzIChiZWxvdykgbmV2ZXIgcmVhY2ggdGhlIGhhbmRsZXIsIHNvIHRoZXkgbXVzdFxuICAgICAgLy8gbm90IGFkdmFuY2UgdGhpcywgb3IgYSBidXJzdCBvZiBcImZldGNoIGZhaWxlZFwiL0VUSU1FRE9VVCB0aW1lb3V0cyB1bmRlclxuICAgICAgLy8gbG9jYWwgbG9hZCB3b3VsZCBleGhhdXN0IHRoZSBoYW5kbGVyJ3MgZGVsaXZlcnkgYnVkZ2V0IGJlZm9yZSBpdHMgZmlyc3RcbiAgICAgIC8vIHJlYWwgZXhlY3V0aW9uLlxuICAgICAgbGV0IGRlbGl2ZXJ5ID0gMDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZvciAobGV0IGxvb3AgPSAwOyBsb29wIDwgTUFYX0xPQ0FMX1NBRkVUWV9MSU1JVDsgbG9vcCsrKSB7XG4gICAgICAgICAgY29uc3QgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgICAgICAgIC4uLm9wdHM/LmhlYWRlcnMsXG4gICAgICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgJ3gtdnFzLXF1ZXVlLW5hbWUnOiBxdWV1ZU5hbWUsXG4gICAgICAgICAgICAneC12cXMtbWVzc2FnZS1pZCc6IG1lc3NhZ2VJZCxcbiAgICAgICAgICAgICd4LXZxcy1tZXNzYWdlLWF0dGVtcHQnOiBTdHJpbmcoZGVsaXZlcnkgKyAxKSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGNvbnN0IGRpcmVjdEhhbmRsZXIgPSBkaXJlY3RIYW5kbGVycy5nZXQocHJlZml4KTtcbiAgICAgICAgICBsZXQgcmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChkaXJlY3RIYW5kbGVyKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHJlcSA9IG5ldyBSZXF1ZXN0KFxuICAgICAgICAgICAgICAgIGNyZWF0ZVdvcmtmbG93VXJsKHJlc29sdmVEaXJlY3RCYXNlVXJsKGNvbmZpZyksIHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6IHBhdGhuYW1lLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHsgbWV0aG9kOiAnUE9TVCcsIGhlYWRlcnMsIGJvZHkgfVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICByZXNwb25zZSA9IGF3YWl0IGRpcmVjdEhhbmRsZXIocmVxKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnN0IGJhc2VVcmwgPSBhd2FpdCByZXNvbHZlQmFzZVVybChjb25maWcpO1xuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAtLSB1bmRpY2kgdjcgZGlzcGF0Y2hlciB0eXBlcyBkb24ndCBtYXRjaCBAdHlwZXMvbm9kZSdzIFJlcXVlc3RJbml0XG4gICAgICAgICAgICAgIHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goXG4gICAgICAgICAgICAgICAgY3JlYXRlV29ya2Zsb3dVcmwoYmFzZVVybCwgeyB0eXBlOiBwYXRobmFtZSB9KSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICAgICAgICAgIGR1cGxleDogJ2hhbGYnLFxuICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hlcjogaHR0cEFnZW50LFxuICAgICAgICAgICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICAgICAgICAgIGJvZHksXG4gICAgICAgICAgICAgICAgfSBhcyBhbnlcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIC8vIFRoZSBkZWxpdmVyeSBuZXZlciByZWFjaGVkIHRoZSBoYW5kbGVyOiB1bmRpY2kgdGhyZXcgYmVmb3JlIGFcbiAgICAgICAgICAgIC8vIHJlc3BvbnNlLiBVbmRlciBoZWF2eSBsb2NhbCBjb25jdXJyZW5jeSB0aGUgc2luZ2xlLXByb2Nlc3MgZGV2XG4gICAgICAgICAgICAvLyBzZXJ2ZXIgY2FuJ3QgYWNjZXB0IGV2ZXJ5IGNvbm5lY3Rpb24sIHNvIHVuZGljaSByZXBvcnRzXG4gICAgICAgICAgICAvLyBgVHlwZUVycm9yOiBmZXRjaCBmYWlsZWRgIHdpdGggYW4gRVRJTUVET1VUL0VDT05OUkVTRVQgY2F1c2UuXG4gICAgICAgICAgICAvLyBUaGVzZSBhcmUgdHJhbnNpZW50IOKAlCBiYWNrIG9mZiBhbmQgcmV0cnkgdGhlICpzYW1lKiBkZWxpdmVyeVxuICAgICAgICAgICAgLy8gcmF0aGVyIHRoYW4gZHJvcHBpbmcgdGhlIG1lc3NhZ2UgKHdoaWNoIHdvdWxkIGxlYXZlIHRoZSBzdGVwXG4gICAgICAgICAgICAvLyBuZXZlciBzdGFydGVkLCB3aXRoIG5vIHJldHJ5KS4gVHdvIGZhaWx1cmVzIGFyZSBub3QgcmV0cnlhYmxlOlxuICAgICAgICAgICAgLy8gIC0gc2h1dGRvd246IGNsb3NlKCkgYWJvcnRlZCB0aGUgYWdlbnQgLyB0aGUgYmFja29mZiBzbGVlcC5cbiAgICAgICAgICAgIC8vICAtIGEgZGV0YWNoZWQtQXJyYXlCdWZmZXIgcHJveHkgbWlzY29uZmlnLCB3aGljaCBuZXZlciBzdWNjZWVkcyDigJRcbiAgICAgICAgICAgIC8vICAgIHJldGhyb3cgc28gdGhlIG91dGVyIGNhdGNoIHN1cmZhY2VzIHRoZSBhY3Rpb25hYmxlIGd1aWRhbmNlLlxuICAgICAgICAgICAgY29uc3QgbmFtZSA9IChlcnIgYXMgeyBuYW1lPzogc3RyaW5nIH0gfCB1bmRlZmluZWQpPy5uYW1lO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBjbG9zZVNpZ25hbC5hYm9ydGVkIHx8XG4gICAgICAgICAgICAgIG5hbWUgPT09ICdBYm9ydEVycm9yJyB8fFxuICAgICAgICAgICAgICBuYW1lID09PSAnUmVzcG9uc2VBYm9ydGVkJ1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc0RldGFjaGVkQXJyYXlCdWZmZXJRdWV1ZUVycm9yKGVycikpIHRocm93IGVycjtcblxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgYFt3b3JsZC1sb2NhbF0gUXVldWUgZGVsaXZlcnkgZmFpbGVkIGF0IHRoZSB0cmFuc3BvcnQgKGxvb3AgJHtsb29wICsgMX0pLCByZXRyeWluZ2AsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBxdWV1ZU5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZUlkLFxuICAgICAgICAgICAgICAgIC4uLihydW5JZCAmJiB7IHJ1bklkIH0pLFxuICAgICAgICAgICAgICAgIC4uLihzdGVwSWQgJiYgeyBzdGVwSWQgfSksXG4gICAgICAgICAgICAgICAgZXJyb3I6IFN0cmluZyhlcnIpLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgYXdhaXQgc2V0VGltZW91dCg1MDAwLCB1bmRlZmluZWQsIHsgc2lnbmFsOiBjbG9zZVNpZ25hbCB9KTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRlbGl2ZXJ5Kys7XG4gICAgICAgICAgY29uc3QgdGV4dCA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcblxuICAgICAgICAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3QgdGltZW91dFNlY29uZHMgPSBOdW1iZXIoSlNPTi5wYXJzZSh0ZXh0KS50aW1lb3V0U2Vjb25kcyk7XG4gICAgICAgICAgICAgIGlmIChOdW1iZXIuaXNGaW5pdGUodGltZW91dFNlY29uZHMpICYmIHRpbWVvdXRTZWNvbmRzID49IDApIHtcbiAgICAgICAgICAgICAgICAvLyBDbGFtcCB0byBNQVhfU0FGRV9USU1FT1VUX01TIHRvIGF2b2lkIE5vZGUuanMgc2V0VGltZW91dCBvdmVyZmxvdyB3YXJuaW5nLlxuICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhpcyBmaXJlcyBlYXJseSwgdGhlIGhhbmRsZXIgcmVjYWxjdWxhdGVzIHJlbWFpbmluZyB0aW1lIGZyb21cbiAgICAgICAgICAgICAgICAvLyBwZXJzaXN0ZW50IHN0YXRlIGFuZCByZXR1cm5zIGFub3RoZXIgdGltZW91dFNlY29uZHMgaWYgbmVlZGVkLlxuICAgICAgICAgICAgICAgIGlmICh0aW1lb3V0U2Vjb25kcyA+IDApIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVvdXRNcyA9IE1hdGgubWluKFxuICAgICAgICAgICAgICAgICAgICB0aW1lb3V0U2Vjb25kcyAqIDEwMDAsXG4gICAgICAgICAgICAgICAgICAgIE1BWF9TQUZFX1RJTUVPVVRfTVNcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBhd2FpdCBzZXRUaW1lb3V0KHRpbWVvdXRNcywgdW5kZWZpbmVkLCB7XG4gICAgICAgICAgICAgICAgICAgIHNpZ25hbDogY2xvc2VTaWduYWwsXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2gge31cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgYFt3b3JsZC1sb2NhbF0gUXVldWUgbWVzc2FnZSBmYWlsZWQgKGF0dGVtcHQgJHtkZWxpdmVyeX0sIEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9KWAsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHF1ZXVlTmFtZSxcbiAgICAgICAgICAgICAgbWVzc2FnZUlkLFxuICAgICAgICAgICAgICAuLi4ocnVuSWQgJiYgeyBydW5JZCB9KSxcbiAgICAgICAgICAgICAgLi4uKHN0ZXBJZCAmJiB7IHN0ZXBJZCB9KSxcbiAgICAgICAgICAgICAgaGFuZGxlckVycm9yOiB0ZXh0LFxuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICAvLyA1cyBsaW5lYXIgYmFja29mZiB0byBhcHByb3hpbWF0ZSBWUVMgcmV0cnkgdGltaW5nIGluIGxvY2FsIGRldi5cbiAgICAgICAgICAvLyBWUVMgdXNlcyA1cyBsaW5lYXIgZm9yIGF0dGVtcHRzIDHigJMzMiwgdGhlbiBleHBvbmVudGlhbCwgYnV0IGZvclxuICAgICAgICAgIC8vIGxvY2FsIGRldiBsaW5lYXIgNXMgaXMgc3VmZmljaWVudCDigJQgdGhlIGhhbmRsZXIgZW5mb3JjZXMgdGhlIHJlYWxcbiAgICAgICAgICAvLyBjYXAgYXQgTUFYX1FVRVVFX0RFTElWRVJJRVMgKDQ4KSB3aGljaCBrZWVwcyB0b3RhbCB0aW1lIHVuZGVyIH40bWluLlxuICAgICAgICAgIGF3YWl0IHNldFRpbWVvdXQoNTAwMCwgdW5kZWZpbmVkLCB7IHNpZ25hbDogY2xvc2VTaWduYWwgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIGBbd29ybGQtbG9jYWxdIFF1ZXVlIG1lc3NhZ2UgZXhoYXVzdGVkIHNhZmV0eSBsaW1pdCAoJHtNQVhfTE9DQUxfU0FGRVRZX0xJTUlUfSBhdHRlbXB0cylgLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHF1ZXVlTmFtZSxcbiAgICAgICAgICAgIG1lc3NhZ2VJZCxcbiAgICAgICAgICAgIC4uLihydW5JZCAmJiB7IHJ1bklkIH0pLFxuICAgICAgICAgICAgLi4uKHN0ZXBJZCAmJiB7IHN0ZXBJZCB9KSxcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBzZW1hcGhvcmUucmVsZWFzZSgpO1xuICAgICAgfVxuICAgIH0pKClcbiAgICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgIC8vIFNpbGVudGx5IGlnbm9yZSBjbGllbnQgZGlzY29ubmVjdCBlcnJvcnMgKGUuZy4sIGJyb3dzZXIgcmVmcmVzaCBkdXJpbmcgc3RyZWFtaW5nKVxuICAgICAgICAvLyBUaGVzZSBhcmUgZXhwZWN0ZWQgYW5kIHNob3VsZCBub3QgY2F1c2UgdW5oYW5kbGVkIHJlamVjdGlvbiB3YXJuaW5nc1xuICAgICAgICBjb25zdCBpc0Fib3J0RXJyb3IgPVxuICAgICAgICAgIGVycj8ubmFtZSA9PT0gJ0Fib3J0RXJyb3InIHx8IGVycj8ubmFtZSA9PT0gJ1Jlc3BvbnNlQWJvcnRlZCc7XG4gICAgICAgIGlmICghaXNBYm9ydEVycm9yKSB7XG4gICAgICAgICAgaWYgKGlzRGV0YWNoZWRBcnJheUJ1ZmZlclF1ZXVlRXJyb3IoZXJyKSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgYFtsb2NhbCB3b3JsZF0gUXVldWUgb3BlcmF0aW9uIGZhaWxlZDogZGV0ZWN0ZWQgXCIke0RFVEFDSEVEX0FSUkFZQlVGRkVSX0VSUk9SfVwiLiBgICtcbiAgICAgICAgICAgICAgICBcIlRoaXMgdXN1YWxseSBtZWFucyBhIE5leHQuanMgcHJveHkvbWlkZGxld2FyZSBjb25zdW1lZCBXb3JrZmxvdydzIGludGVybmFsIFwiICtcbiAgICAgICAgICAgICAgICAncmVxdWVzdCBiZWZvcmUgdGhlIGV4ZWN1dG9yIGNvdWxkIHJlYWQgaXQuIEV4Y2x1ZGUgYC8ud2VsbC1rbm93bi93b3JrZmxvdy8qYCAnICtcbiAgICAgICAgICAgICAgICBgZnJvbSB5b3VyIG1hdGNoZXIuIFNlZSAke1BST1hZX0hBTkRMRVJfRE9DU19VUkx9YCxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHF1ZXVlTmFtZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlSWQsXG4gICAgICAgICAgICAgICAgLi4uKHJ1bklkICYmIHsgcnVuSWQgfSksXG4gICAgICAgICAgICAgICAgLi4uKHN0ZXBJZCAmJiB7IHN0ZXBJZCB9KSxcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEVycm9yOiBlcnIsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tsb2NhbCB3b3JsZF0gUXVldWUgb3BlcmF0aW9uIGZhaWxlZDonLCBlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBmbiBvZiBjbGVhbnVwKSB7XG4gICAgICAgICAgZm4oKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICByZXR1cm4geyBtZXNzYWdlSWQgfTtcbiAgfTtcblxuICBjb25zdCBIZWFkZXJQYXJzZXIgPSB6Lm9iamVjdCh7XG4gICAgJ3gtdnFzLXF1ZXVlLW5hbWUnOiBWYWxpZFF1ZXVlTmFtZSxcbiAgICAneC12cXMtbWVzc2FnZS1pZCc6IE1lc3NhZ2VJZCxcbiAgICAneC12cXMtbWVzc2FnZS1hdHRlbXB0Jzogei5jb2VyY2UubnVtYmVyKCksXG4gIH0pO1xuXG4gIGNvbnN0IGNyZWF0ZVF1ZXVlSGFuZGxlcjogUXVldWVbJ2NyZWF0ZVF1ZXVlSGFuZGxlciddID0gKHByZWZpeCwgaGFuZGxlcikgPT4ge1xuICAgIHJldHVybiBhc3luYyAocmVxKSA9PiB7XG4gICAgICBjb25zdCBoZWFkZXJzID0gSGVhZGVyUGFyc2VyLnNhZmVQYXJzZShPYmplY3QuZnJvbUVudHJpZXMocmVxLmhlYWRlcnMpKTtcblxuICAgICAgaWYgKCFoZWFkZXJzLnN1Y2Nlc3MgfHwgIXJlcS5ib2R5KSB7XG4gICAgICAgIHJldHVybiBSZXNwb25zZS5qc29uKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGVycm9yOiAhcmVxLmJvZHlcbiAgICAgICAgICAgICAgPyAnTWlzc2luZyByZXF1ZXN0IGJvZHknXG4gICAgICAgICAgICAgIDogJ01pc3NpbmcgcmVxdWlyZWQgaGVhZGVycycsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7IHN0YXR1czogNDAwIH1cbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcXVldWVOYW1lID0gaGVhZGVycy5kYXRhWyd4LXZxcy1xdWV1ZS1uYW1lJ107XG4gICAgICBjb25zdCBtZXNzYWdlSWQgPSBoZWFkZXJzLmRhdGFbJ3gtdnFzLW1lc3NhZ2UtaWQnXTtcbiAgICAgIGNvbnN0IGF0dGVtcHQgPSBoZWFkZXJzLmRhdGFbJ3gtdnFzLW1lc3NhZ2UtYXR0ZW1wdCddO1xuXG4gICAgICBpZiAoIXF1ZXVlTmFtZS5zdGFydHNXaXRoKHByZWZpeCkpIHtcbiAgICAgICAgcmV0dXJuIFJlc3BvbnNlLmpzb24oeyBlcnJvcjogJ1VuaGFuZGxlZCBxdWV1ZScgfSwgeyBzdGF0dXM6IDQwMCB9KTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYm9keSA9IGF3YWl0IG5ldyBUeXBlZEpzb25UcmFuc3BvcnQoKS5kZXNlcmlhbGl6ZShyZXEuYm9keSk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBoYW5kbGVyKGJvZHksIHsgYXR0ZW1wdCwgcXVldWVOYW1lLCBtZXNzYWdlSWQgfSk7XG5cbiAgICAgICAgbGV0IHRpbWVvdXRTZWNvbmRzOiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgICAgICAgaWYgKHR5cGVvZiByZXN1bHQ/LnRpbWVvdXRTZWNvbmRzID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIHRpbWVvdXRTZWNvbmRzID0gTWF0aC5taW4oXG4gICAgICAgICAgICByZXN1bHQudGltZW91dFNlY29uZHMsXG4gICAgICAgICAgICBMT0NBTF9RVUVVRV9NQVhfVklTSUJJTElUWVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGltZW91dFNlY29uZHMgIT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBSZXNwb25zZS5qc29uKHsgdGltZW91dFNlY29uZHMgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUmVzcG9uc2UuanNvbih7IG9rOiB0cnVlIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIFJlc3BvbnNlLmpzb24oU3RyaW5nKGVycm9yKSwgeyBzdGF0dXM6IDUwMCB9KTtcbiAgICAgIH1cbiAgICB9O1xuICB9O1xuXG4gIGNvbnN0IGdldERlcGxveW1lbnRJZDogUXVldWVbJ2dldERlcGxveW1lbnRJZCddID0gYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHBhY2thZ2VJbmZvID0gYXdhaXQgZ2V0UGFja2FnZUluZm8oKTtcbiAgICByZXR1cm4gYGRwbF9sb2NhbEAke3BhY2thZ2VJbmZvLnZlcnNpb259YDtcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIHF1ZXVlLFxuICAgIGNyZWF0ZVF1ZXVlSGFuZGxlcixcbiAgICBnZXREZXBsb3ltZW50SWQsXG4gICAgcmVnaXN0ZXJIYW5kbGVyKHByZWZpeDogUXVldWVQcmVmaXgsIGhhbmRsZXI6IERpcmVjdEhhbmRsZXIpIHtcbiAgICAgIGRpcmVjdEhhbmRsZXJzLnNldChwcmVmaXgsIGhhbmRsZXIpO1xuICAgIH0sXG4gICAgYXN5bmMgY2xvc2UoKSB7XG4gICAgICAvLyBJZGVtcG90ZW50OiBzaHV0ZG93biBwYXRocyAoQ0xJIHNpZ25hbCBoYW5kbGVycywgdGVzdCB0ZWFyZG93bilcbiAgICAgIC8vIG1heSBjbG9zZSB0aGUgcXVldWUgbW9yZSB0aGFuIG9uY2UuXG4gICAgICBpZiAoY2xvc2VTaWduYWwuYWJvcnRlZCkgcmV0dXJuO1xuICAgICAgY2xvc2VDb250cm9sbGVyLmFib3J0KCk7XG4gICAgICBhd2FpdCBodHRwQWdlbnQuY2xvc2UoKTtcbiAgICB9LFxuICB9O1xufVxuIl19
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events-storage.d.ts","sourceRoot":"","sources":["../../src/storage/events-storage.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAMV,OAAO,EAGR,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"events-storage.d.ts","sourceRoot":"","sources":["../../src/storage/events-storage.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAMV,OAAO,EAGR,MAAM,iBAAiB,CAAC;AAyazB;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG;IACnD,UAAU,IAAI,IAAI,CAAC;CACpB,CAAC;AAEF,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,GAAG,CAAC,EAAE,MAAM,GACX,kBAAkB,CA23DpB"}
|