@dollhousemcp/mcp-server 2.0.18 → 2.0.20
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/CHANGELOG.md +8 -0
- package/dist/generated/version.d.ts +2 -2
- package/dist/generated/version.js +3 -3
- package/dist/handlers/ElementCRUDHandler.d.ts +30 -0
- package/dist/handlers/ElementCRUDHandler.d.ts.map +1 -1
- package/dist/handlers/ElementCRUDHandler.js +141 -2
- package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts +3 -0
- package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/MCPAQLHandler.js +98 -1
- package/dist/handlers/mcp-aql/OperationRouter.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/OperationRouter.js +6 -1
- package/dist/handlers/mcp-aql/OperationSchema.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/OperationSchema.js +17 -1
- package/dist/handlers/mcp-aql/policies/AgentToolPolicyTranslator.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/policies/AgentToolPolicyTranslator.js +2 -1
- package/dist/handlers/mcp-aql/policies/ElementPolicies.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/policies/ElementPolicies.js +2 -1
- package/dist/handlers/mcp-aql/policies/OperationPolicies.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/policies/OperationPolicies.js +6 -1
- package/dist/handlers/mcp-aql/policies/ToolClassification.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/policies/ToolClassification.js +2 -1
- package/dist/server/tools/MCPAQLTools.js +2 -1
- package/dist/web/console/IngestRoutes.d.ts +6 -0
- package/dist/web/console/IngestRoutes.d.ts.map +1 -1
- package/dist/web/console/IngestRoutes.js +38 -9
- package/dist/web/console/LeaderElection.d.ts +39 -0
- package/dist/web/console/LeaderElection.d.ts.map +1 -1
- package/dist/web/console/LeaderElection.js +147 -29
- package/dist/web/console/LeaderForwardingSink.d.ts.map +1 -1
- package/dist/web/console/LeaderForwardingSink.js +5 -1
- package/dist/web/console/PromotionManager.d.ts.map +1 -1
- package/dist/web/console/PromotionManager.js +3 -11
- package/dist/web/console/StaleProcessRecovery.d.ts +11 -0
- package/dist/web/console/StaleProcessRecovery.d.ts.map +1 -1
- package/dist/web/console/StaleProcessRecovery.js +229 -63
- package/dist/web/console/UnifiedConsole.d.ts +22 -1
- package/dist/web/console/UnifiedConsole.d.ts.map +1 -1
- package/dist/web/console/UnifiedConsole.js +172 -11
- package/dist/web/public/app.js +62 -1
- package/dist/web/public/index.html +19 -17
- package/dist/web/public/sessions.js +111 -0
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js +12 -10
- package/package.json +1 -1
- package/server.json +2 -2
|
@@ -22,7 +22,9 @@ import { join } from 'node:path';
|
|
|
22
22
|
import { mkdir, readFile, writeFile, rename, unlink } from 'node:fs/promises';
|
|
23
23
|
import { UnicodeValidator } from '../../security/validators/unicodeValidator.js';
|
|
24
24
|
import { env } from '../../config/env.js';
|
|
25
|
+
import { PACKAGE_VERSION } from '../../generated/version.js';
|
|
25
26
|
import { logger } from '../../utils/logger.js';
|
|
27
|
+
import { compareVersions } from '../../utils/version.js';
|
|
26
28
|
/** Directory for runtime state files */
|
|
27
29
|
const RUN_DIR = join(homedir(), '.dollhouse', 'run');
|
|
28
30
|
/**
|
|
@@ -54,6 +56,15 @@ const HEARTBEAT_INTERVAL_MS = 10_000;
|
|
|
54
56
|
const HEARTBEAT_STALE_MS = 30_000;
|
|
55
57
|
/** Current lock file schema version */
|
|
56
58
|
export const LOCK_VERSION = 1;
|
|
59
|
+
/**
|
|
60
|
+
* Version of the leader-election/session metadata contract used by the
|
|
61
|
+
* authenticated web console. Older leaders will not have this field.
|
|
62
|
+
*/
|
|
63
|
+
export const CONSOLE_PROTOCOL_VERSION = 1;
|
|
64
|
+
/** Missing protocol metadata means the leader predates version-aware election. */
|
|
65
|
+
export const LEGACY_CONSOLE_PROTOCOL_VERSION = 0;
|
|
66
|
+
/** Old lock files do not carry package version metadata. Treat them as oldest. */
|
|
67
|
+
export const LEGACY_SERVER_VERSION = '0.0.0';
|
|
57
68
|
/**
|
|
58
69
|
* Check whether a process with the given PID is alive.
|
|
59
70
|
* Uses signal 0 which checks existence without sending a signal.
|
|
@@ -68,6 +79,95 @@ export function isProcessAlive(pid) {
|
|
|
68
79
|
return err?.code === 'EPERM';
|
|
69
80
|
}
|
|
70
81
|
}
|
|
82
|
+
/**
|
|
83
|
+
* Normalize the server version present in the leader lock.
|
|
84
|
+
* Missing metadata means "legacy leader" for election purposes.
|
|
85
|
+
*/
|
|
86
|
+
export function getLeaderServerVersion(info) {
|
|
87
|
+
if (typeof info.serverVersion === 'string' && info.serverVersion.trim().length > 0) {
|
|
88
|
+
return info.serverVersion.trim();
|
|
89
|
+
}
|
|
90
|
+
return LEGACY_SERVER_VERSION;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Normalize the console protocol version present in the leader lock.
|
|
94
|
+
* Missing metadata means a leader from before version-aware election.
|
|
95
|
+
*/
|
|
96
|
+
export function getLeaderConsoleProtocolVersion(info) {
|
|
97
|
+
const raw = info.consoleProtocolVersion;
|
|
98
|
+
if (typeof raw === 'number' && Number.isInteger(raw) && raw >= 0) {
|
|
99
|
+
return raw;
|
|
100
|
+
}
|
|
101
|
+
return LEGACY_CONSOLE_PROTOCOL_VERSION;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Create this process's leader metadata in one place so all leadership paths
|
|
105
|
+
* publish the same version and protocol information.
|
|
106
|
+
*/
|
|
107
|
+
export function createLeaderInfo(sessionId, port) {
|
|
108
|
+
const now = new Date().toISOString();
|
|
109
|
+
return {
|
|
110
|
+
version: LOCK_VERSION,
|
|
111
|
+
pid: process.pid,
|
|
112
|
+
port,
|
|
113
|
+
sessionId: UnicodeValidator.normalize(sessionId).normalizedContent,
|
|
114
|
+
startedAt: now,
|
|
115
|
+
heartbeat: now,
|
|
116
|
+
serverVersion: PACKAGE_VERSION,
|
|
117
|
+
consoleProtocolVersion: CONSOLE_PROTOCOL_VERSION,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Decide whether this process should replace the current live leader based on
|
|
122
|
+
* compatibility first, then package version.
|
|
123
|
+
*/
|
|
124
|
+
export function evaluateLeaderPreference(candidate, existing) {
|
|
125
|
+
const candidateVersion = getLeaderServerVersion(candidate);
|
|
126
|
+
const existingVersion = getLeaderServerVersion(existing);
|
|
127
|
+
const candidateProtocolVersion = getLeaderConsoleProtocolVersion(candidate);
|
|
128
|
+
const existingProtocolVersion = getLeaderConsoleProtocolVersion(existing);
|
|
129
|
+
const compatible = existingProtocolVersion === candidateProtocolVersion ||
|
|
130
|
+
existingProtocolVersion === LEGACY_CONSOLE_PROTOCOL_VERSION;
|
|
131
|
+
if (!compatible) {
|
|
132
|
+
return {
|
|
133
|
+
shouldReplace: false,
|
|
134
|
+
reason: 'incompatible-protocol',
|
|
135
|
+
candidateVersion,
|
|
136
|
+
existingVersion,
|
|
137
|
+
candidateProtocolVersion,
|
|
138
|
+
existingProtocolVersion,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
const versionComparison = compareVersions(candidateVersion, existingVersion);
|
|
142
|
+
if (versionComparison > 0) {
|
|
143
|
+
return {
|
|
144
|
+
shouldReplace: true,
|
|
145
|
+
reason: 'newer-compatible-version',
|
|
146
|
+
candidateVersion,
|
|
147
|
+
existingVersion,
|
|
148
|
+
candidateProtocolVersion,
|
|
149
|
+
existingProtocolVersion,
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
if (versionComparison === 0) {
|
|
153
|
+
return {
|
|
154
|
+
shouldReplace: false,
|
|
155
|
+
reason: 'same-version',
|
|
156
|
+
candidateVersion,
|
|
157
|
+
existingVersion,
|
|
158
|
+
candidateProtocolVersion,
|
|
159
|
+
existingProtocolVersion,
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
return {
|
|
163
|
+
shouldReplace: false,
|
|
164
|
+
reason: 'older-version',
|
|
165
|
+
candidateVersion,
|
|
166
|
+
existingVersion,
|
|
167
|
+
candidateProtocolVersion,
|
|
168
|
+
existingProtocolVersion,
|
|
169
|
+
};
|
|
170
|
+
}
|
|
71
171
|
/**
|
|
72
172
|
* Detect whether a legacy (pre-authentication) DollhouseMCP console is
|
|
73
173
|
* currently running on this machine (#1794).
|
|
@@ -118,7 +218,13 @@ export async function readLeaderLock() {
|
|
|
118
218
|
}
|
|
119
219
|
return data;
|
|
120
220
|
}
|
|
121
|
-
catch {
|
|
221
|
+
catch (error) {
|
|
222
|
+
if (error.code !== 'ENOENT') {
|
|
223
|
+
logger.debug('[LeaderElection] Ignoring unreadable or invalid leader lock', {
|
|
224
|
+
lockFile: LOCK_FILE,
|
|
225
|
+
error: error instanceof Error ? error.message : String(error),
|
|
226
|
+
});
|
|
227
|
+
}
|
|
122
228
|
return null;
|
|
123
229
|
}
|
|
124
230
|
}
|
|
@@ -180,17 +286,46 @@ export async function deleteLeaderLock() {
|
|
|
180
286
|
* @returns Election result with role and leader info
|
|
181
287
|
*/
|
|
182
288
|
export async function electLeader(sessionId, port) {
|
|
183
|
-
|
|
289
|
+
const myInfo = createLeaderInfo(sessionId, port);
|
|
290
|
+
sessionId = myInfo.sessionId;
|
|
184
291
|
const existingLock = await readLeaderLock();
|
|
185
292
|
if (existingLock && !isLockStale(existingLock)) {
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
293
|
+
const preference = evaluateLeaderPreference(myInfo, existingLock);
|
|
294
|
+
if (preference.shouldReplace) {
|
|
295
|
+
logger.info('[LeaderElection] Replacing leader with newer compatible version', {
|
|
296
|
+
staleSession: existingLock.sessionId,
|
|
297
|
+
stalePid: existingLock.pid,
|
|
298
|
+
stalePort: existingLock.port,
|
|
299
|
+
staleVersion: preference.existingVersion,
|
|
300
|
+
staleProtocolVersion: preference.existingProtocolVersion,
|
|
301
|
+
mySession: sessionId,
|
|
302
|
+
myPid: process.pid,
|
|
303
|
+
myVersion: preference.candidateVersion,
|
|
304
|
+
myProtocolVersion: preference.candidateProtocolVersion,
|
|
305
|
+
});
|
|
306
|
+
await deleteLeaderLock();
|
|
307
|
+
}
|
|
308
|
+
else {
|
|
309
|
+
logger.info('[LeaderElection] Existing leader found — becoming follower', {
|
|
310
|
+
leaderSession: existingLock.sessionId,
|
|
311
|
+
leaderPid: existingLock.pid,
|
|
312
|
+
leaderPort: existingLock.port,
|
|
313
|
+
leaderVersion: preference.existingVersion,
|
|
314
|
+
leaderProtocolVersion: preference.existingProtocolVersion,
|
|
315
|
+
mySession: sessionId,
|
|
316
|
+
myPid: process.pid,
|
|
317
|
+
myVersion: preference.candidateVersion,
|
|
318
|
+
myProtocolVersion: preference.candidateProtocolVersion,
|
|
319
|
+
reason: preference.reason,
|
|
320
|
+
});
|
|
321
|
+
return { role: 'follower', leaderInfo: existingLock };
|
|
322
|
+
}
|
|
191
323
|
}
|
|
192
|
-
|
|
193
|
-
|
|
324
|
+
if (existingLock && !isLockStale(existingLock)) {
|
|
325
|
+
// Leader was intentionally replaced above. Continue to the claim path.
|
|
326
|
+
}
|
|
327
|
+
else if (existingLock) {
|
|
328
|
+
// No valid leader — try to claim
|
|
194
329
|
const alive = isProcessAlive(existingLock.pid);
|
|
195
330
|
const heartbeatAge = Date.now() - new Date(existingLock.heartbeat).getTime();
|
|
196
331
|
logger.info('[LeaderElection] Stale leader lock — taking over', {
|
|
@@ -199,15 +334,6 @@ export async function electLeader(sessionId, port) {
|
|
|
199
334
|
});
|
|
200
335
|
await deleteLeaderLock();
|
|
201
336
|
}
|
|
202
|
-
const now = new Date().toISOString();
|
|
203
|
-
const myInfo = {
|
|
204
|
-
version: LOCK_VERSION,
|
|
205
|
-
pid: process.pid,
|
|
206
|
-
port,
|
|
207
|
-
sessionId,
|
|
208
|
-
startedAt: now,
|
|
209
|
-
heartbeat: now,
|
|
210
|
-
};
|
|
211
337
|
const claimed = await claimLeadership(myInfo);
|
|
212
338
|
if (claimed) {
|
|
213
339
|
logger.info('[LeaderElection] Claimed leadership', { sessionId, port, pid: process.pid });
|
|
@@ -223,7 +349,7 @@ export async function electLeader(sessionId, port) {
|
|
|
223
349
|
}
|
|
224
350
|
// Extremely unlikely: lock disappeared between our claim and re-read. Retry once.
|
|
225
351
|
logger.warn('[LeaderElection] Lock vanished after failed claim. Retrying.');
|
|
226
|
-
const retryInfo = { ...
|
|
352
|
+
const retryInfo = { ...createLeaderInfo(sessionId, port) };
|
|
227
353
|
const retryClaimed = await claimLeadership(retryInfo);
|
|
228
354
|
if (retryClaimed) {
|
|
229
355
|
return { role: 'leader', leaderInfo: retryInfo };
|
|
@@ -256,15 +382,7 @@ export async function isLeaderWebConsoleReachable(leaderInfo) {
|
|
|
256
382
|
export async function forceClaimLeadership(sessionId, port) {
|
|
257
383
|
logger.info('[LeaderElection] Forcing leadership takeover — existing leader has no web console');
|
|
258
384
|
await deleteLeaderLock();
|
|
259
|
-
const
|
|
260
|
-
const myInfo = {
|
|
261
|
-
version: LOCK_VERSION,
|
|
262
|
-
pid: process.pid,
|
|
263
|
-
port,
|
|
264
|
-
sessionId: UnicodeValidator.normalize(sessionId).normalizedContent,
|
|
265
|
-
startedAt: now,
|
|
266
|
-
heartbeat: now,
|
|
267
|
-
};
|
|
385
|
+
const myInfo = createLeaderInfo(sessionId, port);
|
|
268
386
|
const claimed = await claimLeadership(myInfo);
|
|
269
387
|
if (claimed) {
|
|
270
388
|
logger.info('[LeaderElection] Forced leadership claimed', { sessionId, port, pid: process.pid });
|
|
@@ -307,4 +425,4 @@ export function registerLeaderCleanup() {
|
|
|
307
425
|
process.once('SIGINT', cleanup);
|
|
308
426
|
process.once('SIGHUP', cleanup);
|
|
309
427
|
}
|
|
310
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGVhZGVyRWxlY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvd2ViL2NvbnNvbGUvTGVhZGVyRWxlY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCRztBQUVILE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDbEMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzlFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMxQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFL0Msd0NBQXdDO0FBQ3hDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFFckQ7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0scUJBQXFCLEdBQUcsMEJBQTBCLENBQUM7QUFFekQseUZBQXlGO0FBQ3pGLE1BQU0sb0JBQW9CLEdBQUcscUJBQXFCLENBQUM7QUFFbkQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUMsa0NBQWtDLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO0FBRWpHLGlGQUFpRjtBQUNqRixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztBQUU3RCxzREFBc0Q7QUFDdEQsTUFBTSxxQkFBcUIsR0FBRyxNQUFNLENBQUM7QUFFckMsMkRBQTJEO0FBQzNELE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxD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QUFRLENBQUMsQ0FBQztBQUN2QyxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQjtJQUNuQyxNQUFNLE9BQU8sR0FBRyxHQUFHLEVBQUUsR0FBRyxnQkFBZ0IsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5RCxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM5QixPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNqQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNoQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNsQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBMZWFkZXIgZWxlY3Rpb24gZm9yIHRoZSB1bmlmaWVkIHdlYiBjb25zb2xlLlxuICpcbiAqIFdoZW4gbXVsdGlwbGUgTUNQIHNlcnZlciBpbnN0YW5jZXMgcnVuIGNvbmN1cnJlbnRseSwgb25seSBvbmUgc2hvdWxkIGhvc3RcbiAqIHRoZSB3ZWIgY29uc29sZSAodGhlIFwibGVhZGVyXCIpLiBPdGhlcnMgYmVjb21lIFwiZm9sbG93ZXJzXCIgdGhhdCBmb3J3YXJkXG4gKiBldmVudHMgdG8gdGhlIGxlYWRlci4gVGhpcyBtb2R1bGUgaGFuZGxlczpcbiAqXG4gKiAxLiBSZWFkaW5nL3dyaXRpbmcgYSBsZWFkZXIgbG9jayBmaWxlIGF0IH4vLmRvbGxob3VzZS9ydW4vY29uc29sZS1sZWFkZXIubG9ja1xuICogMi4gQXRvbWljIGNsYWltIHZpYSB0ZW1wK3JlbmFtZSB0byBwcmV2ZW50IFRPQ1RPVSByYWNlc1xuICogMy4gUElELWJhc2VkIHN0YWxlIGRldGVjdGlvbiAoc2lnbmFsLTAgbGl2ZW5lc3MgY2hlY2spXG4gKiA0LiBIZWFydGJlYXQgdXBkYXRlcyAoMTBzIGludGVydmFsKSBzbyBmb2xsb3dlcnMgY2FuIGRldGVjdCBodW5nIGxlYWRlcnNcbiAqIDUuIENsZWFudXAgb24gcHJvY2VzcyBleGl0XG4gKlxuICogVGhlIGNvbmZpZ3VyZWQgcG9ydCBiaW5kaW5nIGlzIHRoZSB1bHRpbWF0ZSB0aWVicmVha2VyOiBldmVuIGlmIHR3b1xuICogcHJvY2Vzc2VzIGJvdGggd3JpdGUgdGhlIGxvY2sgZmlsZSwgb25seSBvbmUgY2FuIGJpbmQgdGhlIHBvcnQgKHNlZVxuICogYERPTExIT1VTRV9XRUJfQ09OU09MRV9QT1JUYCBpbiBgc3JjL2NvbmZpZy9lbnYudHNgKS5cbiAqXG4gKiBAc2luY2UgdjIuMS4wIOKAlCBJc3N1ZSAjMTcwMFxuICovXG5cbmltcG9ydCB7IGhvbWVkaXIgfSBmcm9tICdub2RlOm9zJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgbWtkaXIsIHJlYWRGaWxlLCB3cml0ZUZpbGUsIHJlbmFtZSwgdW5saW5rIH0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQgeyBVbmljb2RlVmFsaWRhdG9yIH0gZnJvbSAnLi4vLi4vc2VjdXJpdHkvdmFsaWRhdG9ycy91bmljb2RlVmFsaWRhdG9yLmpzJztcbmltcG9ydCB7IGVudiB9IGZyb20gJy4uLy4uL2NvbmZpZy9lbnYuanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vLi4vdXRpbHMvbG9nZ2VyLmpzJztcblxuLyoqIERpcmVjdG9yeSBmb3IgcnVudGltZSBzdGF0ZSBmaWxlcyAqL1xuY29uc3QgUlVOX0RJUiA9IGpvaW4oaG9tZWRpcigpLCAnLmRvbGxob3VzZScsICdydW4nKTtcblxuLyoqXG4gKiBCdWlsdC1pbiBkZWZhdWx0IGZpbGVuYW1lIGZvciB0aGUgYXV0aGVudGljYXRlZCBjb25zb2xlJ3MgbGVhZGVyIGxvY2suXG4gKlxuICogVGhlIGAuYXV0aGAgc3VmZml4IGlzb2xhdGVzIHRoaXMgZnJvbSBhbnkgbGVnYWN5IG5vLWF1dGhlbnRpY2F0aW9uXG4gKiBEb2xsaG91c2VNQ1AgaW5zdGFsbGF0aW9uIHRoYXQgbWF5IGFsc28gYmUgcnVubmluZyBvbiB0aGUgc2FtZVxuICogbWFjaGluZS4gVGhvc2Ugb2xkZXIgaW5zdGFsbHMgdXNlIGBjb25zb2xlLWxlYWRlci5sb2NrYCAobm8gc3VmZml4KTtcbiAqIHRoZSBhdXRoZW50aWNhdGVkIGNvbnNvbGUgdXNlcyBgY29uc29sZS1sZWFkZXIuYXV0aC5sb2NrYC4gQ29tYmluZWRcbiAqIHdpdGggdGhlIHBvcnQgc2VwYXJhdGlvbiwgdGhpcyBtZWFucyB0aGUgdHdvIGdlbmVyYXRpb25zIG9mIHRoZVxuICogY29uc29sZSBjYW4gY29leGlzdCB3aXRoIHplcm8gaW50ZXJmZXJlbmNlIOKAlCBkaWZmZXJlbnQgcG9ydCwgZGlmZmVyZW50XG4gKiBsb2NrIGZpbGUsIGRpZmZlcmVudCB0b2tlbiBmaWxlLCBpbmRlcGVuZGVudCBsZWFkZXIgZWxlY3Rpb24gc3BhY2VzLlxuICovXG5jb25zdCBERUZBVUxUX0xPQ0tfRklMRU5BTUUgPSAnY29uc29sZS1sZWFkZXIuYXV0aC5sb2NrJztcblxuLyoqIExlZ2FjeSBsb2NrIGZpbGVuYW1lIGZyb20gdGhlIHByZS1hdXRoZW50aWNhdGlvbiBjb25zb2xlLiBVc2VkIG9ubHkgZm9yIGRldGVjdGlvbi4gKi9cbmNvbnN0IExFR0FDWV9MT0NLX0ZJTEVOQU1FID0gJ2NvbnNvbGUtbGVhZGVyLmxvY2snO1xuXG4vKipcbiAqIFBhdGggdG8gdGhlIGxlYWRlciBsb2NrIGZpbGUuIFByZWZlcnMgdGhlIGBET0xMSE9VU0VfQ09OU09MRV9MRUFERVJfTE9DS19GSUxFYFxuICogZW52IHZhciB3aGVuIHNldCwgb3RoZXJ3aXNlIHVzZXMgYERFRkFVTFRfTE9DS19GSUxFTkFNRWAgdW5kZXIgUlVOX0RJUi5cbiAqIFRoZSBlbnYgdmFyIGlzIHRoZSBzaW5nbGUgc291cmNlIG9mIHRydXRoIHdoZW4gcHJlc2VudCwgc28gYSBkZXBsb3ltZW50XG4gKiBjYW4gcmVsb2NhdGUgdGhlIGxvY2sgd2l0aG91dCBjb2RlIGNoYW5nZXMgKHNlZSBgc3JjL2NvbmZpZy9lbnYudHNgKS5cbiAqL1xuY29uc3QgTE9DS19GSUxFID0gZW52LkRPTExIT1VTRV9DT05TT0xFX0xFQURFUl9MT0NLX0ZJTEUgPz8gam9pbihSVU5fRElSLCBERUZBVUxUX0xPQ0tfRklMRU5BTUUpO1xuXG4vKiogUGF0aCB0byB0aGUgbGVnYWN5IHByZS1hdXRoIGxvY2sgZmlsZSAodXNlZCBieSBgZGV0ZWN0TGVnYWN5TGVhZGVyYCBvbmx5KS4gKi9cbmNvbnN0IExFR0FDWV9MT0NLX0ZJTEUgPSBqb2luKFJVTl9ESVIsIExFR0FDWV9MT0NLX0ZJTEVOQU1FKTtcblxuLyoqIEhvdyBvZnRlbiB0aGUgbGVhZGVyIHVwZGF0ZXMgaXRzIGhlYXJ0YmVhdCAobXMpICovXG5jb25zdCBIRUFSVEJFQVRfSU5URVJWQUxfTVMgPSAxMF8wMDA7XG5cbi8qKiBIb3cgbG9uZyBiZWZvcmUgYSBoZWFydGJlYXQgaXMgY29uc2lkZXJlZCBzdGFsZSAobXMpICovXG5jb25zdCBIRUFSVEJFQVRfU1RBTEVfTVMgPSAzMF8wMDA7XG5cbi8qKiBDdXJyZW50IGxvY2sgZmlsZSBzY2hlbWEgdmVyc2lvbiAqL1xuZXhwb3J0IGNvbnN0IExPQ0tfVkVSU0lPTiA9IDE7XG5cbi8qKlxuICogSW5mb3JtYXRpb24gc3RvcmVkIGluIHRoZSBsZWFkZXIgbG9jayBmaWxlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbnNvbGVMZWFkZXJJbmZvIHtcbiAgdmVyc2lvbjogbnVtYmVyO1xuICBwaWQ6IG51bWJlcjtcbiAgcG9ydDogbnVtYmVyO1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgc3RhcnRlZEF0OiBzdHJpbmc7XG4gIGhlYXJ0YmVhdDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlc3VsdCBvZiBhIGxlYWRlciBlbGVjdGlvbiBhdHRlbXB0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVsZWN0aW9uUmVzdWx0IHtcbiAgcm9sZTogJ2xlYWRlcicgfCAnZm9sbG93ZXInO1xuICAvKiogTGVhZGVyIGluZm8g4oCUIGZvciBmb2xsb3dlcnMsIHRoaXMgaXMgdGhlIGV4aXN0aW5nIGxlYWRlcidzIGluZm8gKi9cbiAgbGVhZGVySW5mbzogQ29uc29sZUxlYWRlckluZm87XG59XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciBhIHByb2Nlc3Mgd2l0aCB0aGUgZ2l2ZW4gUElEIGlzIGFsaXZlLlxuICogVXNlcyBzaWduYWwgMCB3aGljaCBjaGVja3MgZXhpc3RlbmNlIHdpdGhvdXQgc2VuZGluZyBhIHNpZ25hbC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUHJvY2Vzc0FsaXZlKHBpZDogbnVtYmVyKTogYm9vbGVhbiB7XG4gIHRyeSB7XG4gICAgcHJvY2Vzcy5raWxsKHBpZCwgMCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgLy8gRVBFUk0gPSBwcm9jZXNzIGV4aXN0cyBidXQgb3duZWQgYnkgYW5vdGhlciB1c2VyIOKAlCBzdGlsbCBhbGl2ZVxuICAgIHJldHVybiBlcnI/LmNvZGUgPT09ICdFUEVSTSc7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXN1bHQgb2YgYSBsZWdhY3ktbGVhZGVyIGRldGVjdGlvbiBzY2FuLlxuICogYGxlZ2FjeVJ1bm5pbmcgPT09IHRydWVgIG1lYW5zIGEgcHJlLWF1dGhlbnRpY2F0aW9uIERvbGxob3VzZU1DUCBjb25zb2xlXG4gKiBpcyBjdXJyZW50bHkgcnVubmluZyBvbiB0aGlzIG1hY2hpbmUgKGl0cyBsb2NrIGZpbGUgZXhpc3RzIGFuZCBpdHMgcGlkXG4gKiBpcyBhbGl2ZSkuIENhbGxlcnMgY2FuIHN1cmZhY2UgdGhpcyB0byB0aGUgdXNlciBhcyBhIHdhcm5pbmcuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGVnYWN5TGVhZGVySW5mbyB7XG4gIGxlZ2FjeVJ1bm5pbmc6IGJvb2xlYW47XG4gIHBpZD86IG51bWJlcjtcbiAgcG9ydD86IG51bWJlcjtcbiAgbG9ja1BhdGg6IHN0cmluZztcbn1cblxuLyoqXG4gKiBEZXRlY3Qgd2hldGhlciBhIGxlZ2FjeSAocHJlLWF1dGhlbnRpY2F0aW9uKSBEb2xsaG91c2VNQ1AgY29uc29sZSBpc1xuICogY3VycmVudGx5IHJ1bm5pbmcgb24gdGhpcyBtYWNoaW5lICgjMTc5NCkuXG4gKlxuICogVGhlIHByZS1hdXRoZW50aWNhdGlvbiBjb25zb2xlIHdyaXRlcyBpdHMgbG9jayB0b1xuICogYH4vLmRvbGxob3VzZS9ydW4vY29uc29sZS1sZWFkZXIubG9ja2AgKG5vIGAuYXV0aGAgc3VmZml4KS4gQW5cbiAqIGF1dGhlbnRpY2F0ZWQgY29uc29sZSBvbiBhIGRpZmZlcmVudCBwb3J0IHdpbGwgbm90IGludGVyZmVyZSB3aXRoXG4gKiBpdCDigJQgdGhleSBoYXZlIGZ1bGx5IGluZGVwZW5kZW50IHBvcnRzLCBsb2NrIGZpbGVzLCBhbmQgdG9rZW4gZmlsZXMg4oCUXG4gKiBidXQgdGhlIHVzZXIgcHJvYmFibHkgd2FudHMgdG8ga25vdyB0aGUgdHdvIGV4aXN0IHNpbXVsdGFuZW91c2x5XG4gKiBiZWNhdXNlIHRoZSBzZWN1cml0eSBwb3N0dXJlIG9mIGVhY2ggY29uc29sZSBpcyBkaWZmZXJlbnQuXG4gKlxuICogUmV0dXJucyBpbmZvIGFib3V0IHRoZSBsZWdhY3kgbGVhZGVyIGlmIG9uZSBpcyBkZXRlY3RlZCwgb3JcbiAqIGB7IGxlZ2FjeVJ1bm5pbmc6IGZhbHNlIH1gIG90aGVyd2lzZS5cbiAqXG4gKiBAcGFyYW0gbG9ja1BhdGggLSBPcHRpb25hbCBvdmVycmlkZSBmb3IgdGhlIGxlZ2FjeSBsb2NrIGZpbGUgcGF0aC5cbiAqICAgICAgICAgICAgICAgICAgIERlZmF1bHRzIHRvIHRoZSBidWlsdC1pbiBsZWdhY3kgbG9jYXRpb24uIFByaW1hcmlseVxuICogICAgICAgICAgICAgICAgICAgdXNlZCBieSB0ZXN0cyB0byBwb2ludCBhdCBhIHRlbXAgZGlyZWN0b3J5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGV0ZWN0TGVnYWN5TGVhZGVyKGxvY2tQYXRoOiBzdHJpbmcgPSBMRUdBQ1lfTE9DS19GSUxFKTogUHJvbWlzZTxMZWdhY3lMZWFkZXJJbmZvPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgY29udGVudCA9IGF3YWl0IHJlYWRGaWxlKGxvY2tQYXRoLCAndXRmLTgnKTtcbiAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShjb250ZW50KSBhcyBDb25zb2xlTGVhZGVySW5mbztcbiAgICBpZiAoIWRhdGEucGlkIHx8ICFpc1Byb2Nlc3NBbGl2ZShkYXRhLnBpZCkpIHtcbiAgICAgIHJldHVybiB7IGxlZ2FjeVJ1bm5pbmc6IGZhbHNlLCBsb2NrUGF0aCB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgbGVnYWN5UnVubmluZzogdHJ1ZSxcbiAgICAgIHBpZDogZGF0YS5waWQsXG4gICAgICBwb3J0OiBkYXRhLnBvcnQsXG4gICAgICBsb2NrUGF0aCxcbiAgICB9O1xuICB9IGNhdGNoIHtcbiAgICAvLyBGaWxlIG1pc3NpbmcsIHVucmVhZGFibGUsIG9yIGludmFsaWQgSlNPTiDigJQgbm8gbGVnYWN5IGxlYWRlciBkZXRlY3RlZFxuICAgIHJldHVybiB7IGxlZ2FjeVJ1bm5pbmc6IGZhbHNlLCBsb2NrUGF0aCB9O1xuICB9XG59XG5cbi8qKlxuICogUmVhZCBhbmQgcGFyc2UgdGhlIGxlYWRlciBsb2NrIGZpbGUuXG4gKiBSZXR1cm5zIG51bGwgaWYgdGhlIGZpbGUgZG9lc24ndCBleGlzdCwgaXMgdW5yZWFkYWJsZSwgb3IgaGFzIGludmFsaWQgY29udGVudC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRMZWFkZXJMb2NrKCk6IFByb21pc2U8Q29uc29sZUxlYWRlckluZm8gfCBudWxsPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgY29udGVudCA9IGF3YWl0IHJlYWRGaWxlKExPQ0tfRklMRSwgJ3V0Zi04Jyk7XG4gICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoY29udGVudCkgYXMgQ29uc29sZUxlYWRlckluZm87XG4gICAgaWYgKGRhdGEudmVyc2lvbiAhPT0gTE9DS19WRVJTSU9OIHx8ICFkYXRhLnBpZCB8fCAhZGF0YS5wb3J0IHx8ICFkYXRhLnNlc3Npb25JZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG4vKipcbiAqIENoZWNrIGlmIGEgbGVhZGVyIGxvY2sgaXMgc3RhbGUgKGRlYWQgcHJvY2VzcyBvciBleHBpcmVkIGhlYXJ0YmVhdCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0xvY2tTdGFsZShpbmZvOiBDb25zb2xlTGVhZGVySW5mbyk6IGJvb2xlYW4ge1xuICBpZiAoIWlzUHJvY2Vzc0FsaXZlKGluZm8ucGlkKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGNvbnN0IGhlYXJ0YmVhdEFnZSA9IERhdGUubm93KCkgLSBuZXcgRGF0ZShpbmZvLmhlYXJ0YmVhdCkuZ2V0VGltZSgpO1xuICByZXR1cm4gaGVhcnRiZWF0QWdlID4gSEVBUlRCRUFUX1NUQUxFX01TO1xufVxuXG4vKipcbiAqIEF0dGVtcHQgdG8gYXRvbWljYWxseSBjbGFpbSBsZWFkZXJzaGlwLlxuICpcbiAqIFdyaXRlcyB0byBhIHRlbXAgZmlsZSB0aGVuIHJlbmFtZXMgdG8gdGhlIGxvY2sgcGF0aC4gT24gUE9TSVggc3lzdGVtc1xuICogcmVuYW1lIGlzIGF0b21pYywgc28gb25seSBvbmUgd3JpdGVyIHdpbnMuIEFmdGVyIHJlbmFtaW5nLCByZS1yZWFkcyB0aGVcbiAqIGxvY2sgdG8gdmVyaWZ5IG91ciBQSUQgd29uLlxuICpcbiAqIEByZXR1cm5zIHRydWUgaWYgdGhpcyBwcm9jZXNzIHN1Y2Nlc3NmdWxseSBjbGFpbWVkIGxlYWRlcnNoaXBcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNsYWltTGVhZGVyc2hpcChpbmZvOiBDb25zb2xlTGVhZGVySW5mbyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBhd2FpdCBta2RpcihSVU5fRElSLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgY29uc3QgdG1wRmlsZSA9IGpvaW4oUlVOX0RJUiwgYGNvbnNvbGUtbGVhZGVyLmxvY2suJHtwcm9jZXNzLnBpZH0udG1wYCk7XG4gIHRyeSB7XG4gICAgYXdhaXQgd3JpdGVGaWxlKHRtcEZpbGUsIEpTT04uc3RyaW5naWZ5KGluZm8sIG51bGwsIDIpLCAndXRmLTgnKTtcbiAgICBhd2FpdCByZW5hbWUodG1wRmlsZSwgTE9DS19GSUxFKTtcblxuICAgIC8vIFZlcmlmeSB3ZSB3b24gdGhlIHJhY2VcbiAgICBjb25zdCB3cml0dGVuID0gYXdhaXQgcmVhZExlYWRlckxvY2soKTtcbiAgICByZXR1cm4gd3JpdHRlbiAhPT0gbnVsbCAmJiB3cml0dGVuLnBpZCA9PT0gaW5mby5waWQ7XG4gIH0gY2F0Y2gge1xuICAgIC8vIENsZWFuIHVwIHRlbXAgZmlsZSBvbiBmYWlsdXJlXG4gICAgdHJ5IHsgYXdhaXQgdW5saW5rKHRtcEZpbGUpOyB9IGNhdGNoIHsgLyogaWdub3JlICovIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqXG4gKiBEZWxldGUgdGhlIGxlYWRlciBsb2NrIGZpbGUgKGZvciBjbGVhbnVwIG9yIHRha2VvdmVyKS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlbGV0ZUxlYWRlckxvY2soKTogUHJvbWlzZTx2b2lkPiB7XG4gIHRyeSB7IGF3YWl0IHVubGluayhMT0NLX0ZJTEUpOyB9IGNhdGNoIHsgLyogYWxyZWFkeSBnb25lICovIH1cbn1cblxuLyoqXG4gKiBSdW4gdGhlIGxlYWRlciBlbGVjdGlvbiBwcm90b2NvbC5cbiAqXG4gKiAxLiBJZiBubyBsb2NrIGV4aXN0cyBvciBsb2NrIGlzIHN0YWxlIOKGkiBjbGFpbSBsZWFkZXJzaGlwXG4gKiAyLiBJZiBsb2NrIGV4aXN0cyB3aXRoIGEgbGl2ZSwgcmVzcG9uc2l2ZSBsZWFkZXIg4oaSIGJlY29tZSBmb2xsb3dlclxuICpcbiAqIEBwYXJhbSBzZXNzaW9uSWQgLSBUaGlzIHByb2Nlc3MncyB1bmlxdWUgc2Vzc2lvbiBpZGVudGlmaWVyXG4gKiBAcGFyYW0gcG9ydCAtIFRoZSBwb3J0IHRoaXMgcHJvY2VzcyB3b3VsZCB1c2UgYXMgbGVhZGVyIChzZWUgYERPTExIT1VTRV9XRUJfQ09OU09MRV9QT1JUYClcbiAqIEByZXR1cm5zIEVsZWN0aW9uIHJlc3VsdCB3aXRoIHJvbGUgYW5kIGxlYWRlciBpbmZvXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlbGVjdExlYWRlcihzZXNzaW9uSWQ6IHN0cmluZywgcG9ydDogbnVtYmVyKTogUHJvbWlzZTxFbGVjdGlvblJlc3VsdD4ge1xuICBzZXNzaW9uSWQgPSBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZShzZXNzaW9uSWQpLm5vcm1hbGl6ZWRDb250ZW50O1xuICBjb25zdCBleGlzdGluZ0xvY2sgPSBhd2FpdCByZWFkTGVhZGVyTG9jaygpO1xuXG4gIGlmIChleGlzdGluZ0xvY2sgJiYgIWlzTG9ja1N0YWxlKGV4aXN0aW5nTG9jaykpIHtcbiAgICBsb2dnZXIuaW5mbygnW0xlYWRlckVsZWN0aW9uXSBFeGlzdGluZyBsZWFkZXIgZm91bmQg4oCUIGJlY29taW5nIGZvbGxvd2VyJywge1xuICAgICAgbGVhZGVyU2Vzc2lvbjogZXhpc3RpbmdMb2NrLnNlc3Npb25JZCwgbGVhZGVyUGlkOiBleGlzdGluZ0xvY2sucGlkLFxuICAgICAgbGVhZGVyUG9ydDogZXhpc3RpbmdMb2NrLnBvcnQsIG15U2Vzc2lvbjogc2Vzc2lvbklkLCBteVBpZDogcHJvY2Vzcy5waWQsXG4gICAgfSk7XG4gICAgcmV0dXJuIHsgcm9sZTogJ2ZvbGxvd2VyJywgbGVhZGVySW5mbzogZXhpc3RpbmdMb2NrIH07XG4gIH1cblxuICAvLyBObyB2YWxpZCBsZWFkZXIg4oCUIHRyeSB0byBjbGFpbVxuICBpZiAoZXhpc3RpbmdMb2NrKSB7XG4gICAgY29uc3QgYWxpdmUgPSBpc1Byb2Nlc3NBbGl2ZShleGlzdGluZ0xvY2sucGlkKTtcbiAgICBjb25zdCBoZWFydGJlYXRBZ2UgPSBEYXRlLm5vdygpIC0gbmV3IERhdGUoZXhpc3RpbmdMb2NrLmhlYXJ0YmVhdCkuZ2V0VGltZSgpO1xuICAgIGxvZ2dlci5pbmZvKCdbTGVhZGVyRWxlY3Rpb25dIFN0YWxlIGxlYWRlciBsb2NrIOKAlCB0YWtpbmcgb3ZlcicsIHtcbiAgICAgIHN0YWxlUGlkOiBleGlzdGluZ0xvY2sucGlkLCBhbGl2ZSwgaGVhcnRiZWF0QWdlTXM6IGhlYXJ0YmVhdEFnZSxcbiAgICAgIHN0YWxlU2Vzc2lvbjogZXhpc3RpbmdMb2NrLnNlc3Npb25JZCwgbXlTZXNzaW9uOiBzZXNzaW9uSWQsXG4gICAgfSk7XG4gICAgYXdhaXQgZGVsZXRlTGVhZGVyTG9jaygpO1xuICB9XG5cbiAgY29uc3Qgbm93ID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuICBjb25zdCBteUluZm86IENvbnNvbGVMZWFkZXJJbmZvID0ge1xuICAgIHZlcnNpb246IExPQ0tfVkVSU0lPTixcbiAgICBwaWQ6IHByb2Nlc3MucGlkLFxuICAgIHBvcnQsXG4gICAgc2Vzc2lvbklkLFxuICAgIHN0YXJ0ZWRBdDogbm93LFxuICAgIGhlYXJ0YmVhdDogbm93LFxuICB9O1xuXG4gIGNvbnN0IGNsYWltZWQgPSBhd2FpdCBjbGFpbUxlYWRlcnNoaXAobXlJbmZvKTtcbiAgaWYgKGNsYWltZWQpIHtcbiAgICBsb2dnZXIuaW5mbygnW0xlYWRlckVsZWN0aW9uXSBDbGFpbWVkIGxlYWRlcnNoaXAnLCB7IHNlc3Npb25JZCwgcG9ydCwgcGlkOiBwcm9jZXNzLnBpZCB9KTtcbiAgICByZXR1cm4geyByb2xlOiAnbGVhZGVyJywgbGVhZGVySW5mbzogbXlJbmZvIH07XG4gIH1cblxuICAvLyBBbm90aGVyIHByb2Nlc3Mgd29uIHRoZSByYWNlIOKAlCByZS1yZWFkIGFuZCBiZWNvbWUgZm9sbG93ZXJcbiAgY29uc3Qgd2lubmVyID0gYXdhaXQgcmVhZExlYWRlckxvY2soKTtcbiAgaWYgKHdpbm5lcikge1xuICAgIGxvZ2dlci5pbmZvKCdbTGVhZGVyRWxlY3Rpb25dIExvc3QgZWxlY3Rpb24g4oCUIGJlY29taW5nIGZvbGxvd2VyJywge1xuICAgICAgd2lubmVyUGlkOiB3aW5uZXIucGlkLCB3aW5uZXJTZXNzaW9uOiB3aW5uZXIuc2Vzc2lvbklkLCBteVNlc3Npb246IHNlc3Npb25JZCwgbXlQaWQ6IHByb2Nlc3MucGlkLFxuICAgIH0pO1xuICAgIHJldHVybiB7IHJvbGU6ICdmb2xsb3dlcicsIGxlYWRlckluZm86IHdpbm5lciB9O1xuICB9XG5cbiAgLy8gRXh0cmVtZWx5IHVubGlrZWx5OiBsb2NrIGRpc2FwcGVhcmVkIGJldHdlZW4gb3VyIGNsYWltIGFuZCByZS1yZWFkLiBSZXRyeSBvbmNlLlxuICBsb2dnZXIud2FybignW0xlYWRlckVsZWN0aW9uXSBMb2NrIHZhbmlzaGVkIGFmdGVyIGZhaWxlZCBjbGFpbS4gUmV0cnlpbmcuJyk7XG4gIGNvbnN0IHJldHJ5SW5mbzogQ29uc29sZUxlYWRlckluZm8gPSB7IC4uLm15SW5mbywgaGVhcnRiZWF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkgfTtcbiAgY29uc3QgcmV0cnlDbGFpbWVkID0gYXdhaXQgY2xhaW1MZWFkZXJzaGlwKHJldHJ5SW5mbyk7XG4gIGlmIChyZXRyeUNsYWltZWQpIHtcbiAgICByZXR1cm4geyByb2xlOiAnbGVhZGVyJywgbGVhZGVySW5mbzogcmV0cnlJbmZvIH07XG4gIH1cbiAgY29uc3QgYWN0dWFsTGVhZGVyID0gYXdhaXQgcmVhZExlYWRlckxvY2soKTtcbiAgcmV0dXJuIHsgcm9sZTogJ2ZvbGxvd2VyJywgbGVhZGVySW5mbzogYWN0dWFsTGVhZGVyID8/IHJldHJ5SW5mbyB9O1xufVxuXG4vKipcbiAqIFByb2JlIHdoZXRoZXIgdGhlIGxlYWRlcidzIHdlYiBjb25zb2xlIGlzIHJlYWNoYWJsZS5cbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgbGVhZGVyJ3MgaW5nZXN0IGVuZHBvaW50IHJlc3BvbmRzLCBmYWxzZSBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpc0xlYWRlcldlYkNvbnNvbGVSZWFjaGFibGUobGVhZGVySW5mbzogQ29uc29sZUxlYWRlckluZm8pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IGNvbnRyb2xsZXIuYWJvcnQoKSwgMl8wMDApO1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKGBodHRwOi8vMTI3LjAuMC4xOiR7bGVhZGVySW5mby5wb3J0fS9hcGkvbG9ncy9zdGF0c2AsIHtcbiAgICAgIHNpZ25hbDogY29udHJvbGxlci5zaWduYWwsXG4gICAgfSk7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgIHJldHVybiByZXMub2s7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIEZvcmNlIGNsYWltIGxlYWRlcnNoaXAgYnkgZGVsZXRpbmcgdGhlIGV4aXN0aW5nIGxvY2sgYW5kIGNsYWltaW5nLlxuICogVXNlZCB3aGVuIHRoZSBleGlzdGluZyBsZWFkZXIgaXMgYWxpdmUgYnV0IG5vdCBydW5uaW5nIGEgd2ViIGNvbnNvbGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmb3JjZUNsYWltTGVhZGVyc2hpcChzZXNzaW9uSWQ6IHN0cmluZywgcG9ydDogbnVtYmVyKTogUHJvbWlzZTxFbGVjdGlvblJlc3VsdD4ge1xuICBsb2dnZXIuaW5mbygnW0xlYWRlckVsZWN0aW9uXSBGb3JjaW5nIGxlYWRlcnNoaXAgdGFrZW92ZXIg4oCUIGV4aXN0aW5nIGxlYWRlciBoYXMgbm8gd2ViIGNvbnNvbGUnKTtcbiAgYXdhaXQgZGVsZXRlTGVhZGVyTG9jaygpO1xuXG4gIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgY29uc3QgbXlJbmZvOiBDb25zb2xlTGVhZGVySW5mbyA9IHtcbiAgICB2ZXJzaW9uOiBMT0NLX1ZFUlNJT04sXG4gICAgcGlkOiBwcm9jZXNzLnBpZCxcbiAgICBwb3J0LFxuICAgIHNlc3Npb25JZDogVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUoc2Vzc2lvbklkKS5ub3JtYWxpemVkQ29udGVudCxcbiAgICBzdGFydGVkQXQ6IG5vdyxcbiAgICBoZWFydGJlYXQ6IG5vdyxcbiAgfTtcblxuICBjb25zdCBjbGFpbWVkID0gYXdhaXQgY2xhaW1MZWFkZXJzaGlwKG15SW5mbyk7XG4gIGlmIChjbGFpbWVkKSB7XG4gICAgbG9nZ2VyLmluZm8oJ1tMZWFkZXJFbGVjdGlvbl0gRm9yY2VkIGxlYWRlcnNoaXAgY2xhaW1lZCcsIHsgc2Vzc2lvbklkLCBwb3J0LCBwaWQ6IHByb2Nlc3MucGlkIH0pO1xuICAgIHJldHVybiB7IHJvbGU6ICdsZWFkZXInLCBsZWFkZXJJbmZvOiBteUluZm8gfTtcbiAgfVxuXG4gIC8vIEZhaWxlZCDigJQgZmFsbCBiYWNrIHRvIGZvbGxvd2VyXG4gIGNvbnN0IHdpbm5lciA9IGF3YWl0IHJlYWRMZWFkZXJMb2NrKCk7XG4gIHJldHVybiB7IHJvbGU6ICdmb2xsb3dlcicsIGxlYWRlckluZm86IHdpbm5lciA/PyBteUluZm8gfTtcbn1cblxuLyoqXG4gKiBTdGFydCB0aGUgbGVhZGVyIGhlYXJ0YmVhdCBsb29wLlxuICogVXBkYXRlcyB0aGUgbG9jayBmaWxlIGV2ZXJ5IEhFQVJUQkVBVF9JTlRFUlZBTF9NUyBzbyBmb2xsb3dlcnMga25vdyB0aGUgbGVhZGVyIGlzIGFsaXZlLlxuICpcbiAqIEByZXR1cm5zIEEgc3RvcCBmdW5jdGlvbiB0byBjbGVhciB0aGUgaW50ZXJ2YWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0SGVhcnRiZWF0KGluZm86IENvbnNvbGVMZWFkZXJJbmZvKTogKCkgPT4gdm9pZCB7XG4gIGNvbnN0IGludGVydmFsID0gc2V0SW50ZXJ2YWwoYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB1cGRhdGVkOiBDb25zb2xlTGVhZGVySW5mbyA9IHsgLi4uaW5mbywgaGVhcnRiZWF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkgfTtcbiAgICAgIGNvbnN0IHRtcEZpbGUgPSBqb2luKFJVTl9ESVIsIGBjb25zb2xlLWxlYWRlci5sb2NrLiR7cHJvY2Vzcy5waWR9LnRtcGApO1xuICAgICAgYXdhaXQgd3JpdGVGaWxlKHRtcEZpbGUsIEpTT04uc3RyaW5naWZ5KHVwZGF0ZWQsIG51bGwsIDIpLCAndXRmLTgnKTtcbiAgICAgIGF3YWl0IHJlbmFtZSh0bXBGaWxlLCBMT0NLX0ZJTEUpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nZ2VyLmRlYnVnKCdbTGVhZGVyRWxlY3Rpb25dIEhlYXJ0YmVhdCB3cml0ZSBmYWlsZWQ6JywgZXJyKTtcbiAgICB9XG4gIH0sIEhFQVJUQkVBVF9JTlRFUlZBTF9NUyk7XG5cbiAgLy8gRG9uJ3QgbGV0IHRoZSBoZWFydGJlYXQgaW50ZXJ2YWwga2VlcCB0aGUgcHJvY2VzcyBhbGl2ZVxuICBpbnRlcnZhbC51bnJlZigpO1xuXG4gIHJldHVybiAoKSA9PiBjbGVhckludGVydmFsKGludGVydmFsKTtcbn1cblxuLyoqXG4gKiBSZWdpc3RlciBjbGVhbnVwIGhhbmRsZXJzIHRvIHJlbW92ZSB0aGUgbGVhZGVyIGxvY2sgb24gcHJvY2VzcyBleGl0LlxuICogU2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5IHRoZSBsZWFkZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlckxlYWRlckNsZWFudXAoKTogdm9pZCB7XG4gIGNvbnN0IGNsZWFudXAgPSAoKSA9PiB7IGRlbGV0ZUxlYWRlckxvY2soKS5jYXRjaCgoKSA9PiB7fSk7IH07XG4gIHByb2Nlc3Mub25jZSgnZXhpdCcsIGNsZWFudXApO1xuICBwcm9jZXNzLm9uY2UoJ1NJR1RFUk0nLCBjbGVhbnVwKTtcbiAgcHJvY2Vzcy5vbmNlKCdTSUdJTlQnLCBjbGVhbnVwKTtcbiAgcHJvY2Vzcy5vbmNlKCdTSUdIVVAnLCBjbGVhbnVwKTtcbn1cbiJdfQ==
|
|
428
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGVhZGVyRWxlY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvd2ViL2NvbnNvbGUvTGVhZGVyRWxlY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCRztBQUVILE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDbEMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzlFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMxQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUV6RCx3Q0FBd0M7QUFDeEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQztBQUVyRDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxxQkFBcUIsR0FBRywwQkFBMEIsQ0FBQztBQUV6RCx5RkFBeUY7QUFDekYsTUFBTSxvQkFBb0IsR0FBRyxxQkFBcUIsQ0FBQztBQUVuRDs7Ozs7R0FLRztBQUNILE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxrQ0FBa0MsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLHFCQUFxQixDQUFDLENBQUM7QUFFakcsaUZBQWlGO0FBQ2pGLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO0FB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QyxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQjtJQUNuQyxNQUFNLE9BQU8sR0FBRyxHQUFHLEVBQUUsR0FBRyxnQkFBZ0IsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5RCxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM5QixPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNqQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNoQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNsQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBMZWFkZXIgZWxlY3Rpb24gZm9yIHRoZSB1bmlmaWVkIHdlYiBjb25zb2xlLlxuICpcbiAqIFdoZW4gbXVsdGlwbGUgTUNQIHNlcnZlciBpbnN0YW5jZXMgcnVuIGNvbmN1cnJlbnRseSwgb25seSBvbmUgc2hvdWxkIGhvc3RcbiAqIHRoZSB3ZWIgY29uc29sZSAodGhlIFwibGVhZGVyXCIpLiBPdGhlcnMgYmVjb21lIFwiZm9sbG93ZXJzXCIgdGhhdCBmb3J3YXJkXG4gKiBldmVudHMgdG8gdGhlIGxlYWRlci4gVGhpcyBtb2R1bGUgaGFuZGxlczpcbiAqXG4gKiAxLiBSZWFkaW5nL3dyaXRpbmcgYSBsZWFkZXIgbG9jayBmaWxlIGF0IH4vLmRvbGxob3VzZS9ydW4vY29uc29sZS1sZWFkZXIubG9ja1xuICogMi4gQXRvbWljIGNsYWltIHZpYSB0ZW1wK3JlbmFtZSB0byBwcmV2ZW50IFRPQ1RPVSByYWNlc1xuICogMy4gUElELWJhc2VkIHN0YWxlIGRldGVjdGlvbiAoc2lnbmFsLTAgbGl2ZW5lc3MgY2hlY2spXG4gKiA0LiBIZWFydGJlYXQgdXBkYXRlcyAoMTBzIGludGVydmFsKSBzbyBmb2xsb3dlcnMgY2FuIGRldGVjdCBodW5nIGxlYWRlcnNcbiAqIDUuIENsZWFudXAgb24gcHJvY2VzcyBleGl0XG4gKlxuICogVGhlIGNvbmZpZ3VyZWQgcG9ydCBiaW5kaW5nIGlzIHRoZSB1bHRpbWF0ZSB0aWVicmVha2VyOiBldmVuIGlmIHR3b1xuICogcHJvY2Vzc2VzIGJvdGggd3JpdGUgdGhlIGxvY2sgZmlsZSwgb25seSBvbmUgY2FuIGJpbmQgdGhlIHBvcnQgKHNlZVxuICogYERPTExIT1VTRV9XRUJfQ09OU09MRV9QT1JUYCBpbiBgc3JjL2NvbmZpZy9lbnYudHNgKS5cbiAqXG4gKiBAc2luY2UgdjIuMS4wIOKAlCBJc3N1ZSAjMTcwMFxuICovXG5cbmltcG9ydCB7IGhvbWVkaXIgfSBmcm9tICdub2RlOm9zJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgbWtkaXIsIHJlYWRGaWxlLCB3cml0ZUZpbGUsIHJlbmFtZSwgdW5saW5rIH0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQgeyBVbmljb2RlVmFsaWRhdG9yIH0gZnJvbSAnLi4vLi4vc2VjdXJpdHkvdmFsaWRhdG9ycy91bmljb2RlVmFsaWRhdG9yLmpzJztcbmltcG9ydCB7IGVudiB9IGZyb20gJy4uLy4uL2NvbmZpZy9lbnYuanMnO1xuaW1wb3J0IHsgUEFDS0FHRV9WRVJTSU9OIH0gZnJvbSAnLi4vLi4vZ2VuZXJhdGVkL3ZlcnNpb24uanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IGNvbXBhcmVWZXJzaW9ucyB9IGZyb20gJy4uLy4uL3V0aWxzL3ZlcnNpb24uanMnO1xuXG4vKiogRGlyZWN0b3J5IGZvciBydW50aW1lIHN0YXRlIGZpbGVzICovXG5jb25zdCBSVU5fRElSID0gam9pbihob21lZGlyKCksICcuZG9sbGhvdXNlJywgJ3J1bicpO1xuXG4vKipcbiAqIEJ1aWx0LWluIGRlZmF1bHQgZmlsZW5hbWUgZm9yIHRoZSBhdXRoZW50aWNhdGVkIGNvbnNvbGUncyBsZWFkZXIgbG9jay5cbiAqXG4gKiBUaGUgYC5hdXRoYCBzdWZmaXggaXNvbGF0ZXMgdGhpcyBmcm9tIGFueSBsZWdhY3kgbm8tYXV0aGVudGljYXRpb25cbiAqIERvbGxob3VzZU1DUCBpbnN0YWxsYXRpb24gdGhhdCBtYXkgYWxzbyBiZSBydW5uaW5nIG9uIHRoZSBzYW1lXG4gKiBtYWNoaW5lLiBUaG9zZSBvbGRlciBpbnN0YWxscyB1c2UgYGNvbnNvbGUtbGVhZGVyLmxvY2tgIChubyBzdWZmaXgpO1xuICogdGhlIGF1dGhlbnRpY2F0ZWQgY29uc29sZSB1c2VzIGBjb25zb2xlLWxlYWRlci5hdXRoLmxvY2tgLiBDb21iaW5lZFxuICogd2l0aCB0aGUgcG9ydCBzZXBhcmF0aW9uLCB0aGlzIG1lYW5zIHRoZSB0d28gZ2VuZXJhdGlvbnMgb2YgdGhlXG4gKiBjb25zb2xlIGNhbiBjb2V4aXN0IHdpdGggemVybyBpbnRlcmZlcmVuY2Ug4oCUIGRpZmZlcmVudCBwb3J0LCBkaWZmZXJlbnRcbiAqIGxvY2sgZmlsZSwgZGlmZmVyZW50IHRva2VuIGZpbGUsIGluZGVwZW5kZW50IGxlYWRlciBlbGVjdGlvbiBzcGFjZXMuXG4gKi9cbmNvbnN0IERFRkFVTFRfTE9DS19GSUxFTkFNRSA9ICdjb25zb2xlLWxlYWRlci5hdXRoLmxvY2snO1xuXG4vKiogTGVnYWN5IGxvY2sgZmlsZW5hbWUgZnJvbSB0aGUgcHJlLWF1dGhlbnRpY2F0aW9uIGNvbnNvbGUuIFVzZWQgb25seSBmb3IgZGV0ZWN0aW9uLiAqL1xuY29uc3QgTEVHQUNZX0xPQ0tfRklMRU5BTUUgPSAnY29uc29sZS1sZWFkZXIubG9jayc7XG5cbi8qKlxuICogUGF0aCB0byB0aGUgbGVhZGVyIGxvY2sgZmlsZS4gUHJlZmVycyB0aGUgYERPTExIT1VTRV9DT05TT0xFX0xFQURFUl9MT0NLX0ZJTEVgXG4gKiBlbnYgdmFyIHdoZW4gc2V0LCBvdGhlcndpc2UgdXNlcyBgREVGQVVMVF9MT0NLX0ZJTEVOQU1FYCB1bmRlciBSVU5fRElSLlxuICogVGhlIGVudiB2YXIgaXMgdGhlIHNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGggd2hlbiBwcmVzZW50LCBzbyBhIGRlcGxveW1lbnRcbiAqIGNhbiByZWxvY2F0ZSB0aGUgbG9jayB3aXRob3V0IGNvZGUgY2hhbmdlcyAoc2VlIGBzcmMvY29uZmlnL2Vudi50c2ApLlxuICovXG5jb25zdCBMT0NLX0ZJTEUgPSBlbnYuRE9MTEhPVVNFX0NPTlNPTEVfTEVBREVSX0xPQ0tfRklMRSA/PyBqb2luKFJVTl9ESVIsIERFRkFVTFRfTE9DS19GSUxFTkFNRSk7XG5cbi8qKiBQYXRoIHRvIHRoZSBsZWdhY3kgcHJlLWF1dGggbG9jayBmaWxlICh1c2VkIGJ5IGBkZXRlY3RMZWdhY3lMZWFkZXJgIG9ubHkpLiAqL1xuY29uc3QgTEVHQUNZX0xPQ0tfRklMRSA9IGpvaW4oUlVOX0RJUiwgTEVHQUNZX0xPQ0tfRklMRU5BTUUpO1xuXG4vKiogSG93IG9mdGVuIHRoZSBsZWFkZXIgdXBkYXRlcyBpdHMgaGVhcnRiZWF0IChtcykgKi9cbmNvbnN0IEhFQVJUQkVBVF9JTlRFUlZBTF9NUyA9IDEwXzAwMDtcblxuLyoqIEhvdyBsb25nIGJlZm9yZSBhIGhlYXJ0YmVhdCBpcyBjb25zaWRlcmVkIHN0YWxlIChtcykgKi9cbmNvbnN0IEhFQVJUQkVBVF9TVEFMRV9NUyA9IDMwXzAwMDtcblxuLyoqIEN1cnJlbnQgbG9jayBmaWxlIHNjaGVtYSB2ZXJzaW9uICovXG5leHBvcnQgY29uc3QgTE9DS19WRVJTSU9OID0gMTtcblxuLyoqXG4gKiBWZXJzaW9uIG9mIHRoZSBsZWFkZXItZWxlY3Rpb24vc2Vzc2lvbiBtZXRhZGF0YSBjb250cmFjdCB1c2VkIGJ5IHRoZVxuICogYXV0aGVudGljYXRlZCB3ZWIgY29uc29sZS4gT2xkZXIgbGVhZGVycyB3aWxsIG5vdCBoYXZlIHRoaXMgZmllbGQuXG4gKi9cbmV4cG9ydCBjb25zdCBDT05TT0xFX1BST1RPQ09MX1ZFUlNJT04gPSAxO1xuXG4vKiogTWlzc2luZyBwcm90b2NvbCBtZXRhZGF0YSBtZWFucyB0aGUgbGVhZGVyIHByZWRhdGVzIHZlcnNpb24tYXdhcmUgZWxlY3Rpb24uICovXG5leHBvcnQgY29uc3QgTEVHQUNZX0NPTlNPTEVfUFJPVE9DT0xfVkVSU0lPTiA9IDA7XG5cbi8qKiBPbGQgbG9jayBmaWxlcyBkbyBub3QgY2FycnkgcGFja2FnZSB2ZXJzaW9uIG1ldGFkYXRhLiBUcmVhdCB0aGVtIGFzIG9sZGVzdC4gKi9cbmV4cG9ydCBjb25zdCBMRUdBQ1lfU0VSVkVSX1ZFUlNJT04gPSAnMC4wLjAnO1xuXG4vKipcbiAqIEluZm9ybWF0aW9uIHN0b3JlZCBpbiB0aGUgbGVhZGVyIGxvY2sgZmlsZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25zb2xlTGVhZGVySW5mbyB7XG4gIHZlcnNpb246IG51bWJlcjtcbiAgcGlkOiBudW1iZXI7XG4gIHBvcnQ6IG51bWJlcjtcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHN0YXJ0ZWRBdDogc3RyaW5nO1xuICBoZWFydGJlYXQ6IHN0cmluZztcbiAgc2VydmVyVmVyc2lvbj86IHN0cmluZztcbiAgY29uc29sZVByb3RvY29sVmVyc2lvbj86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBSZXN1bHQgb2YgYSBsZWFkZXIgZWxlY3Rpb24gYXR0ZW1wdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbGVjdGlvblJlc3VsdCB7XG4gIHJvbGU6ICdsZWFkZXInIHwgJ2ZvbGxvd2VyJztcbiAgLyoqIExlYWRlciBpbmZvIOKAlCBmb3IgZm9sbG93ZXJzLCB0aGlzIGlzIHRoZSBleGlzdGluZyBsZWFkZXIncyBpbmZvICovXG4gIGxlYWRlckluZm86IENvbnNvbGVMZWFkZXJJbmZvO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExlYWRlclByZWZlcmVuY2VEZWNpc2lvbiB7XG4gIHNob3VsZFJlcGxhY2U6IGJvb2xlYW47XG4gIHJlYXNvbjogJ25ld2VyLWNvbXBhdGlibGUtdmVyc2lvbicgfCAnc2FtZS12ZXJzaW9uJyB8ICdvbGRlci12ZXJzaW9uJyB8ICdpbmNvbXBhdGlibGUtcHJvdG9jb2wnO1xuICBjYW5kaWRhdGVWZXJzaW9uOiBzdHJpbmc7XG4gIGV4aXN0aW5nVmVyc2lvbjogc3RyaW5nO1xuICBjYW5kaWRhdGVQcm90b2NvbFZlcnNpb246IG51bWJlcjtcbiAgZXhpc3RpbmdQcm90b2NvbFZlcnNpb246IG51bWJlcjtcbn1cblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIGEgcHJvY2VzcyB3aXRoIHRoZSBnaXZlbiBQSUQgaXMgYWxpdmUuXG4gKiBVc2VzIHNpZ25hbCAwIHdoaWNoIGNoZWNrcyBleGlzdGVuY2Ugd2l0aG91dCBzZW5kaW5nIGEgc2lnbmFsLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQcm9jZXNzQWxpdmUocGlkOiBudW1iZXIpOiBib29sZWFuIHtcbiAgdHJ5IHtcbiAgICBwcm9jZXNzLmtpbGwocGlkLCAwKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAvLyBFUEVSTSA9IHByb2Nlc3MgZXhpc3RzIGJ1dCBvd25lZCBieSBhbm90aGVyIHVzZXIg4oCUIHN0aWxsIGFsaXZlXG4gICAgcmV0dXJuIGVycj8uY29kZSA9PT0gJ0VQRVJNJztcbiAgfVxufVxuXG4vKipcbiAqIE5vcm1hbGl6ZSB0aGUgc2VydmVyIHZlcnNpb24gcHJlc2VudCBpbiB0aGUgbGVhZGVyIGxvY2suXG4gKiBNaXNzaW5nIG1ldGFkYXRhIG1lYW5zIFwibGVnYWN5IGxlYWRlclwiIGZvciBlbGVjdGlvbiBwdXJwb3Nlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldExlYWRlclNlcnZlclZlcnNpb24oaW5mbzogQ29uc29sZUxlYWRlckluZm8pOiBzdHJpbmcge1xuICBpZiAodHlwZW9mIGluZm8uc2VydmVyVmVyc2lvbiA9PT0gJ3N0cmluZycgJiYgaW5mby5zZXJ2ZXJWZXJzaW9uLnRyaW0oKS5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIGluZm8uc2VydmVyVmVyc2lvbi50cmltKCk7XG4gIH1cbiAgcmV0dXJuIExFR0FDWV9TRVJWRVJfVkVSU0lPTjtcbn1cblxuLyoqXG4gKiBOb3JtYWxpemUgdGhlIGNvbnNvbGUgcHJvdG9jb2wgdmVyc2lvbiBwcmVzZW50IGluIHRoZSBsZWFkZXIgbG9jay5cbiAqIE1pc3NpbmcgbWV0YWRhdGEgbWVhbnMgYSBsZWFkZXIgZnJvbSBiZWZvcmUgdmVyc2lvbi1hd2FyZSBlbGVjdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldExlYWRlckNvbnNvbGVQcm90b2NvbFZlcnNpb24oaW5mbzogQ29uc29sZUxlYWRlckluZm8pOiBudW1iZXIge1xuICBjb25zdCByYXcgPSBpbmZvLmNvbnNvbGVQcm90b2NvbFZlcnNpb247XG4gIGlmICh0eXBlb2YgcmF3ID09PSAnbnVtYmVyJyAmJiBOdW1iZXIuaXNJbnRlZ2VyKHJhdykgJiYgcmF3ID49IDApIHtcbiAgICByZXR1cm4gcmF3O1xuICB9XG4gIHJldHVybiBMRUdBQ1lfQ09OU09MRV9QUk9UT0NPTF9WRVJTSU9OO1xufVxuXG4vKipcbiAqIENyZWF0ZSB0aGlzIHByb2Nlc3MncyBsZWFkZXIgbWV0YWRhdGEgaW4gb25lIHBsYWNlIHNvIGFsbCBsZWFkZXJzaGlwIHBhdGhzXG4gKiBwdWJsaXNoIHRoZSBzYW1lIHZlcnNpb24gYW5kIHByb3RvY29sIGluZm9ybWF0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTGVhZGVySW5mbyhzZXNzaW9uSWQ6IHN0cmluZywgcG9ydDogbnVtYmVyKTogQ29uc29sZUxlYWRlckluZm8ge1xuICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG4gIHJldHVybiB7XG4gICAgdmVyc2lvbjogTE9DS19WRVJTSU9OLFxuICAgIHBpZDogcHJvY2Vzcy5waWQsXG4gICAgcG9ydCxcbiAgICBzZXNzaW9uSWQ6IFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKHNlc3Npb25JZCkubm9ybWFsaXplZENvbnRlbnQsXG4gICAgc3RhcnRlZEF0OiBub3csXG4gICAgaGVhcnRiZWF0OiBub3csXG4gICAgc2VydmVyVmVyc2lvbjogUEFDS0FHRV9WRVJTSU9OLFxuICAgIGNvbnNvbGVQcm90b2NvbFZlcnNpb246IENPTlNPTEVfUFJPVE9DT0xfVkVSU0lPTixcbiAgfTtcbn1cblxuLyoqXG4gKiBEZWNpZGUgd2hldGhlciB0aGlzIHByb2Nlc3Mgc2hvdWxkIHJlcGxhY2UgdGhlIGN1cnJlbnQgbGl2ZSBsZWFkZXIgYmFzZWQgb25cbiAqIGNvbXBhdGliaWxpdHkgZmlyc3QsIHRoZW4gcGFja2FnZSB2ZXJzaW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXZhbHVhdGVMZWFkZXJQcmVmZXJlbmNlKFxuICBjYW5kaWRhdGU6IENvbnNvbGVMZWFkZXJJbmZvLFxuICBleGlzdGluZzogQ29uc29sZUxlYWRlckluZm8sXG4pOiBMZWFkZXJQcmVmZXJlbmNlRGVjaXNpb24ge1xuICBjb25zdCBjYW5kaWRhdGVWZXJzaW9uID0gZ2V0TGVhZGVyU2VydmVyVmVyc2lvbihjYW5kaWRhdGUpO1xuICBjb25zdCBleGlzdGluZ1ZlcnNpb24gPSBnZXRMZWFkZXJTZXJ2ZXJWZXJzaW9uKGV4aXN0aW5nKTtcbiAgY29uc3QgY2FuZGlkYXRlUHJvdG9jb2xWZXJzaW9uID0gZ2V0TGVhZGVyQ29uc29sZVByb3RvY29sVmVyc2lvbihjYW5kaWRhdGUpO1xuICBjb25zdCBleGlzdGluZ1Byb3RvY29sVmVyc2lvbiA9IGdldExlYWRlckNvbnNvbGVQcm90b2NvbFZlcnNpb24oZXhpc3RpbmcpO1xuXG4gIGNvbnN0IGNvbXBhdGlibGUgPVxuICAgIGV4aXN0aW5nUHJvdG9jb2xWZXJzaW9uID09PSBjYW5kaWRhdGVQcm90b2NvbFZlcnNpb24gfHxcbiAgICBleGlzdGluZ1Byb3RvY29sVmVyc2lvbiA9PT0gTEVHQUNZX0NPTlNPTEVfUFJPVE9DT0xfVkVSU0lPTjtcblxuICBpZiAoIWNvbXBhdGlibGUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2hvdWxkUmVwbGFjZTogZmFsc2UsXG4gICAgICByZWFzb246ICdpbmNvbXBhdGlibGUtcHJvdG9jb2wnLFxuICAgICAgY2FuZGlkYXRlVmVyc2lvbixcbiAgICAgIGV4aXN0aW5nVmVyc2lvbixcbiAgICAgIGNhbmRpZGF0ZVByb3RvY29sVmVyc2lvbixcbiAgICAgIGV4aXN0aW5nUHJvdG9jb2xWZXJzaW9uLFxuICAgIH07XG4gIH1cblxuICBjb25zdCB2ZXJzaW9uQ29tcGFyaXNvbiA9IGNvbXBhcmVWZXJzaW9ucyhjYW5kaWRhdGVWZXJzaW9uLCBleGlzdGluZ1ZlcnNpb24pO1xuICBpZiAodmVyc2lvbkNvbXBhcmlzb24gPiAwKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNob3VsZFJlcGxhY2U6IHRydWUsXG4gICAgICByZWFzb246ICduZXdlci1jb21wYXRpYmxlLXZlcnNpb24nLFxuICAgICAgY2FuZGlkYXRlVmVyc2lvbixcbiAgICAgIGV4aXN0aW5nVmVyc2lvbixcbiAgICAgIGNhbmRpZGF0ZVByb3RvY29sVmVyc2lvbixcbiAgICAgIGV4aXN0aW5nUHJvdG9jb2xWZXJzaW9uLFxuICAgIH07XG4gIH1cbiAgaWYgKHZlcnNpb25Db21wYXJpc29uID09PSAwKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNob3VsZFJlcGxhY2U6IGZhbHNlLFxuICAgICAgcmVhc29uOiAnc2FtZS12ZXJzaW9uJyxcbiAgICAgIGNhbmRpZGF0ZVZlcnNpb24sXG4gICAgICBleGlzdGluZ1ZlcnNpb24sXG4gICAgICBjYW5kaWRhdGVQcm90b2NvbFZlcnNpb24sXG4gICAgICBleGlzdGluZ1Byb3RvY29sVmVyc2lvbixcbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgc2hvdWxkUmVwbGFjZTogZmFsc2UsXG4gICAgcmVhc29uOiAnb2xkZXItdmVyc2lvbicsXG4gICAgY2FuZGlkYXRlVmVyc2lvbixcbiAgICBleGlzdGluZ1ZlcnNpb24sXG4gICAgY2FuZGlkYXRlUHJvdG9jb2xWZXJzaW9uLFxuICAgIGV4aXN0aW5nUHJvdG9jb2xWZXJzaW9uLFxuICB9O1xufVxuXG4vKipcbiAqIFJlc3VsdCBvZiBhIGxlZ2FjeS1sZWFkZXIgZGV0ZWN0aW9uIHNjYW4uXG4gKiBgbGVnYWN5UnVubmluZyA9PT0gdHJ1ZWAgbWVhbnMgYSBwcmUtYXV0aGVudGljYXRpb24gRG9sbGhvdXNlTUNQIGNvbnNvbGVcbiAqIGlzIGN1cnJlbnRseSBydW5uaW5nIG9uIHRoaXMgbWFjaGluZSAoaXRzIGxvY2sgZmlsZSBleGlzdHMgYW5kIGl0cyBwaWRcbiAqIGlzIGFsaXZlKS4gQ2FsbGVycyBjYW4gc3VyZmFjZSB0aGlzIHRvIHRoZSB1c2VyIGFzIGEgd2FybmluZy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMZWdhY3lMZWFkZXJJbmZvIHtcbiAgbGVnYWN5UnVubmluZzogYm9vbGVhbjtcbiAgcGlkPzogbnVtYmVyO1xuICBwb3J0PzogbnVtYmVyO1xuICBsb2NrUGF0aDogc3RyaW5nO1xufVxuXG4vKipcbiAqIERldGVjdCB3aGV0aGVyIGEgbGVnYWN5IChwcmUtYXV0aGVudGljYXRpb24pIERvbGxob3VzZU1DUCBjb25zb2xlIGlzXG4gKiBjdXJyZW50bHkgcnVubmluZyBvbiB0aGlzIG1hY2hpbmUgKCMxNzk0KS5cbiAqXG4gKiBUaGUgcHJlLWF1dGhlbnRpY2F0aW9uIGNvbnNvbGUgd3JpdGVzIGl0cyBsb2NrIHRvXG4gKiBgfi8uZG9sbGhvdXNlL3J1bi9jb25zb2xlLWxlYWRlci5sb2NrYCAobm8gYC5hdXRoYCBzdWZmaXgpLiBBblxuICogYXV0aGVudGljYXRlZCBjb25zb2xlIG9uIGEgZGlmZmVyZW50IHBvcnQgd2lsbCBub3QgaW50ZXJmZXJlIHdpdGhcbiAqIGl0IOKAlCB0aGV5IGhhdmUgZnVsbHkgaW5kZXBlbmRlbnQgcG9ydHMsIGxvY2sgZmlsZXMsIGFuZCB0b2tlbiBmaWxlcyDigJRcbiAqIGJ1dCB0aGUgdXNlciBwcm9iYWJseSB3YW50cyB0byBrbm93IHRoZSB0d28gZXhpc3Qgc2ltdWx0YW5lb3VzbHlcbiAqIGJlY2F1c2UgdGhlIHNlY3VyaXR5IHBvc3R1cmUgb2YgZWFjaCBjb25zb2xlIGlzIGRpZmZlcmVudC5cbiAqXG4gKiBSZXR1cm5zIGluZm8gYWJvdXQgdGhlIGxlZ2FjeSBsZWFkZXIgaWYgb25lIGlzIGRldGVjdGVkLCBvclxuICogYHsgbGVnYWN5UnVubmluZzogZmFsc2UgfWAgb3RoZXJ3aXNlLlxuICpcbiAqIEBwYXJhbSBsb2NrUGF0aCAtIE9wdGlvbmFsIG92ZXJyaWRlIGZvciB0aGUgbGVnYWN5IGxvY2sgZmlsZSBwYXRoLlxuICogICAgICAgICAgICAgICAgICAgRGVmYXVsdHMgdG8gdGhlIGJ1aWx0LWluIGxlZ2FjeSBsb2NhdGlvbi4gUHJpbWFyaWx5XG4gKiAgICAgICAgICAgICAgICAgICB1c2VkIGJ5IHRlc3RzIHRvIHBvaW50IGF0IGEgdGVtcCBkaXJlY3RvcnkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZXRlY3RMZWdhY3lMZWFkZXIobG9ja1BhdGg6IHN0cmluZyA9IExFR0FDWV9MT0NLX0ZJTEUpOiBQcm9taXNlPExlZ2FjeUxlYWRlckluZm8+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgcmVhZEZpbGUobG9ja1BhdGgsICd1dGYtOCcpO1xuICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGNvbnRlbnQpIGFzIENvbnNvbGVMZWFkZXJJbmZvO1xuICAgIGlmICghZGF0YS5waWQgfHwgIWlzUHJvY2Vzc0FsaXZlKGRhdGEucGlkKSkge1xuICAgICAgcmV0dXJuIHsgbGVnYWN5UnVubmluZzogZmFsc2UsIGxvY2tQYXRoIH07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBsZWdhY3lSdW5uaW5nOiB0cnVlLFxuICAgICAgcGlkOiBkYXRhLnBpZCxcbiAgICAgIHBvcnQ6IGRhdGEucG9ydCxcbiAgICAgIGxvY2tQYXRoLFxuICAgIH07XG4gIH0gY2F0Y2gge1xuICAgIC8vIEZpbGUgbWlzc2luZywgdW5yZWFkYWJsZSwgb3IgaW52YWxpZCBKU09OIOKAlCBubyBsZWdhY3kgbGVhZGVyIGRldGVjdGVkXG4gICAgcmV0dXJuIHsgbGVnYWN5UnVubmluZzogZmFsc2UsIGxvY2tQYXRoIH07XG4gIH1cbn1cblxuLyoqXG4gKiBSZWFkIGFuZCBwYXJzZSB0aGUgbGVhZGVyIGxvY2sgZmlsZS5cbiAqIFJldHVybnMgbnVsbCBpZiB0aGUgZmlsZSBkb2Vzbid0IGV4aXN0LCBpcyB1bnJlYWRhYmxlLCBvciBoYXMgaW52YWxpZCBjb250ZW50LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZExlYWRlckxvY2soKTogUHJvbWlzZTxDb25zb2xlTGVhZGVySW5mbyB8IG51bGw+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgcmVhZEZpbGUoTE9DS19GSUxFLCAndXRmLTgnKTtcbiAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShjb250ZW50KSBhcyBDb25zb2xlTGVhZGVySW5mbztcbiAgICBpZiAoZGF0YS52ZXJzaW9uICE9PSBMT0NLX1ZFUlNJT04gfHwgIWRhdGEucGlkIHx8ICFkYXRhLnBvcnQgfHwgIWRhdGEuc2Vzc2lvbklkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKChlcnJvciBhcyBOb2RlSlMuRXJybm9FeGNlcHRpb24pLmNvZGUgIT09ICdFTk9FTlQnKSB7XG4gICAgICBsb2dnZXIuZGVidWcoJ1tMZWFkZXJFbGVjdGlvbl0gSWdub3JpbmcgdW5yZWFkYWJsZSBvciBpbnZhbGlkIGxlYWRlciBsb2NrJywge1xuICAgICAgICBsb2NrRmlsZTogTE9DS19GSUxFLFxuICAgICAgICBlcnJvcjogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYSBsZWFkZXIgbG9jayBpcyBzdGFsZSAoZGVhZCBwcm9jZXNzIG9yIGV4cGlyZWQgaGVhcnRiZWF0KS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTG9ja1N0YWxlKGluZm86IENvbnNvbGVMZWFkZXJJbmZvKTogYm9vbGVhbiB7XG4gIGlmICghaXNQcm9jZXNzQWxpdmUoaW5mby5waWQpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgY29uc3QgaGVhcnRiZWF0QWdlID0gRGF0ZS5ub3coKSAtIG5ldyBEYXRlKGluZm8uaGVhcnRiZWF0KS5nZXRUaW1lKCk7XG4gIHJldHVybiBoZWFydGJlYXRBZ2UgPiBIRUFSVEJFQVRfU1RBTEVfTVM7XG59XG5cbi8qKlxuICogQXR0ZW1wdCB0byBhdG9taWNhbGx5IGNsYWltIGxlYWRlcnNoaXAuXG4gKlxuICogV3JpdGVzIHRvIGEgdGVtcCBmaWxlIHRoZW4gcmVuYW1lcyB0byB0aGUgbG9jayBwYXRoLiBPbiBQT1NJWCBzeXN0ZW1zXG4gKiByZW5hbWUgaXMgYXRvbWljLCBzbyBvbmx5IG9uZSB3cml0ZXIgd2lucy4gQWZ0ZXIgcmVuYW1pbmcsIHJlLXJlYWRzIHRoZVxuICogbG9jayB0byB2ZXJpZnkgb3VyIFBJRCB3b24uXG4gKlxuICogQHJldHVybnMgdHJ1ZSBpZiB0aGlzIHByb2Nlc3Mgc3VjY2Vzc2Z1bGx5IGNsYWltZWQgbGVhZGVyc2hpcFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2xhaW1MZWFkZXJzaGlwKGluZm86IENvbnNvbGVMZWFkZXJJbmZvKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGF3YWl0IG1rZGlyKFJVTl9ESVIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICBjb25zdCB0bXBGaWxlID0gam9pbihSVU5fRElSLCBgY29uc29sZS1sZWFkZXIubG9jay4ke3Byb2Nlc3MucGlkfS50bXBgKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCB3cml0ZUZpbGUodG1wRmlsZSwgSlNPTi5zdHJpbmdpZnkoaW5mbywgbnVsbCwgMiksICd1dGYtOCcpO1xuICAgIGF3YWl0IHJlbmFtZSh0bXBGaWxlLCBMT0NLX0ZJTEUpO1xuXG4gICAgLy8gVmVyaWZ5IHdlIHdvbiB0aGUgcmFjZVxuICAgIGNvbnN0IHdyaXR0ZW4gPSBhd2FpdCByZWFkTGVhZGVyTG9jaygpO1xuICAgIHJldHVybiB3cml0dGVuICE9PSBudWxsICYmIHdyaXR0ZW4ucGlkID09PSBpbmZvLnBpZDtcbiAgfSBjYXRjaCB7XG4gICAgLy8gQ2xlYW4gdXAgdGVtcCBmaWxlIG9uIGZhaWx1cmVcbiAgICB0cnkgeyBhd2FpdCB1bmxpbmsodG1wRmlsZSk7IH0gY2F0Y2ggeyAvKiBpZ25vcmUgKi8gfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIERlbGV0ZSB0aGUgbGVhZGVyIGxvY2sgZmlsZSAoZm9yIGNsZWFudXAgb3IgdGFrZW92ZXIpLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVsZXRlTGVhZGVyTG9jaygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgdHJ5IHsgYXdhaXQgdW5saW5rKExPQ0tfRklMRSk7IH0gY2F0Y2ggeyAvKiBhbHJlYWR5IGdvbmUgKi8gfVxufVxuXG4vKipcbiAqIFJ1biB0aGUgbGVhZGVyIGVsZWN0aW9uIHByb3RvY29sLlxuICpcbiAqIDEuIElmIG5vIGxvY2sgZXhpc3RzIG9yIGxvY2sgaXMgc3RhbGUg4oaSIGNsYWltIGxlYWRlcnNoaXBcbiAqIDIuIElmIGxvY2sgZXhpc3RzIHdpdGggYSBsaXZlLCByZXNwb25zaXZlIGxlYWRlciDihpIgYmVjb21lIGZvbGxvd2VyXG4gKlxuICogQHBhcmFtIHNlc3Npb25JZCAtIFRoaXMgcHJvY2VzcydzIHVuaXF1ZSBzZXNzaW9uIGlkZW50aWZpZXJcbiAqIEBwYXJhbSBwb3J0IC0gVGhlIHBvcnQgdGhpcyBwcm9jZXNzIHdvdWxkIHVzZSBhcyBsZWFkZXIgKHNlZSBgRE9MTEhPVVNFX1dFQl9DT05TT0xFX1BPUlRgKVxuICogQHJldHVybnMgRWxlY3Rpb24gcmVzdWx0IHdpdGggcm9sZSBhbmQgbGVhZGVyIGluZm9cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVsZWN0TGVhZGVyKHNlc3Npb25JZDogc3RyaW5nLCBwb3J0OiBudW1iZXIpOiBQcm9taXNlPEVsZWN0aW9uUmVzdWx0PiB7XG4gIGNvbnN0IG15SW5mbyA9IGNyZWF0ZUxlYWRlckluZm8oc2Vzc2lvbklkLCBwb3J0KTtcbiAgc2Vzc2lvbklkID0gbXlJbmZvLnNlc3Npb25JZDtcbiAgY29uc3QgZXhpc3RpbmdMb2NrID0gYXdhaXQgcmVhZExlYWRlckxvY2soKTtcblxuICBpZiAoZXhpc3RpbmdMb2NrICYmICFpc0xvY2tTdGFsZShleGlzdGluZ0xvY2spKSB7XG4gICAgY29uc3QgcHJlZmVyZW5jZSA9IGV2YWx1YXRlTGVhZGVyUHJlZmVyZW5jZShteUluZm8sIGV4aXN0aW5nTG9jayk7XG4gICAgaWYgKHByZWZlcmVuY2Uuc2hvdWxkUmVwbGFjZSkge1xuICAgICAgbG9nZ2VyLmluZm8oJ1tMZWFkZXJFbGVjdGlvbl0gUmVwbGFjaW5nIGxlYWRlciB3aXRoIG5ld2VyIGNvbXBhdGlibGUgdmVyc2lvbicsIHtcbiAgICAgICAgc3RhbGVTZXNzaW9uOiBleGlzdGluZ0xvY2suc2Vzc2lvbklkLFxuICAgICAgICBzdGFsZVBpZDogZXhpc3RpbmdMb2NrLnBpZCxcbiAgICAgICAgc3RhbGVQb3J0OiBleGlzdGluZ0xvY2sucG9ydCxcbiAgICAgICAgc3RhbGVWZXJzaW9uOiBwcmVmZXJlbmNlLmV4aXN0aW5nVmVyc2lvbixcbiAgICAgICAgc3RhbGVQcm90b2NvbFZlcnNpb246IHByZWZlcmVuY2UuZXhpc3RpbmdQcm90b2NvbFZlcnNpb24sXG4gICAgICAgIG15U2Vzc2lvbjogc2Vzc2lvbklkLFxuICAgICAgICBteVBpZDogcHJvY2Vzcy5waWQsXG4gICAgICAgIG15VmVyc2lvbjogcHJlZmVyZW5jZS5jYW5kaWRhdGVWZXJzaW9uLFxuICAgICAgICBteVByb3RvY29sVmVyc2lvbjogcHJlZmVyZW5jZS5jYW5kaWRhdGVQcm90b2NvbFZlcnNpb24sXG4gICAgICB9KTtcbiAgICAgIGF3YWl0IGRlbGV0ZUxlYWRlckxvY2soKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nZ2VyLmluZm8oJ1tMZWFkZXJFbGVjdGlvbl0gRXhpc3RpbmcgbGVhZGVyIGZvdW5kIOKAlCBiZWNvbWluZyBmb2xsb3dlcicsIHtcbiAgICAgICAgbGVhZGVyU2Vzc2lvbjogZXhpc3RpbmdMb2NrLnNlc3Npb25JZCxcbiAgICAgICAgbGVhZGVyUGlkOiBleGlzdGluZ0xvY2sucGlkLFxuICAgICAgICBsZWFkZXJQb3J0OiBleGlzdGluZ0xvY2sucG9ydCxcbiAgICAgICAgbGVhZGVyVmVyc2lvbjogcHJlZmVyZW5jZS5leGlzdGluZ1ZlcnNpb24sXG4gICAgICAgIGxlYWRlclByb3RvY29sVmVyc2lvbjogcHJlZmVyZW5jZS5leGlzdGluZ1Byb3RvY29sVmVyc2lvbixcbiAgICAgICAgbXlTZXNzaW9uOiBzZXNzaW9uSWQsXG4gICAgICAgIG15UGlkOiBwcm9jZXNzLnBpZCxcbiAgICAgICAgbXlWZXJzaW9uOiBwcmVmZXJlbmNlLmNhbmRpZGF0ZVZlcnNpb24sXG4gICAgICAgIG15UHJvdG9jb2xWZXJzaW9uOiBwcmVmZXJlbmNlLmNhbmRpZGF0ZVByb3RvY29sVmVyc2lvbixcbiAgICAgICAgcmVhc29uOiBwcmVmZXJlbmNlLnJlYXNvbixcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHsgcm9sZTogJ2ZvbGxvd2VyJywgbGVhZGVySW5mbzogZXhpc3RpbmdMb2NrIH07XG4gICAgfVxuICB9XG5cbiAgaWYgKGV4aXN0aW5nTG9jayAmJiAhaXNMb2NrU3RhbGUoZXhpc3RpbmdMb2NrKSkge1xuICAgIC8vIExlYWRlciB3YXMgaW50ZW50aW9uYWxseSByZXBsYWNlZCBhYm92ZS4gQ29udGludWUgdG8gdGhlIGNsYWltIHBhdGguXG4gIH0gZWxzZSBpZiAoZXhpc3RpbmdMb2NrKSB7XG4gICAgLy8gTm8gdmFsaWQgbGVhZGVyIOKAlCB0cnkgdG8gY2xhaW1cbiAgICBjb25zdCBhbGl2ZSA9IGlzUHJvY2Vzc0FsaXZlKGV4aXN0aW5nTG9jay5waWQpO1xuICAgIGNvbnN0IGhlYXJ0YmVhdEFnZSA9IERhdGUubm93KCkgLSBuZXcgRGF0ZShleGlzdGluZ0xvY2suaGVhcnRiZWF0KS5nZXRUaW1lKCk7XG4gICAgbG9nZ2VyLmluZm8oJ1tMZWFkZXJFbGVjdGlvbl0gU3RhbGUgbGVhZGVyIGxvY2sg4oCUIHRha2luZyBvdmVyJywge1xuICAgICAgc3RhbGVQaWQ6IGV4aXN0aW5nTG9jay5waWQsIGFsaXZlLCBoZWFydGJlYXRBZ2VNczogaGVhcnRiZWF0QWdlLFxuICAgICAgc3RhbGVTZXNzaW9uOiBleGlzdGluZ0xvY2suc2Vzc2lvbklkLCBteVNlc3Npb246IHNlc3Npb25JZCxcbiAgICB9KTtcbiAgICBhd2FpdCBkZWxldGVMZWFkZXJMb2NrKCk7XG4gIH1cblxuICBjb25zdCBjbGFpbWVkID0gYXdhaXQgY2xhaW1MZWFkZXJzaGlwKG15SW5mbyk7XG4gIGlmIChjbGFpbWVkKSB7XG4gICAgbG9nZ2VyLmluZm8oJ1tMZWFkZXJFbGVjdGlvbl0gQ2xhaW1lZCBsZWFkZXJzaGlwJywgeyBzZXNzaW9uSWQsIHBvcnQsIHBpZDogcHJvY2Vzcy5waWQgfSk7XG4gICAgcmV0dXJuIHsgcm9sZTogJ2xlYWRlcicsIGxlYWRlckluZm86IG15SW5mbyB9O1xuICB9XG5cbiAgLy8gQW5vdGhlciBwcm9jZXNzIHdvbiB0aGUgcmFjZSDigJQgcmUtcmVhZCBhbmQgYmVjb21lIGZvbGxvd2VyXG4gIGNvbnN0IHdpbm5lciA9IGF3YWl0IHJlYWRMZWFkZXJMb2NrKCk7XG4gIGlmICh3aW5uZXIpIHtcbiAgICBsb2dnZXIuaW5mbygnW0xlYWRlckVsZWN0aW9uXSBMb3N0IGVsZWN0aW9uIOKAlCBiZWNvbWluZyBmb2xsb3dlcicsIHtcbiAgICAgIHdpbm5lclBpZDogd2lubmVyLnBpZCwgd2lubmVyU2Vzc2lvbjogd2lubmVyLnNlc3Npb25JZCwgbXlTZXNzaW9uOiBzZXNzaW9uSWQsIG15UGlkOiBwcm9jZXNzLnBpZCxcbiAgICB9KTtcbiAgICByZXR1cm4geyByb2xlOiAnZm9sbG93ZXInLCBsZWFkZXJJbmZvOiB3aW5uZXIgfTtcbiAgfVxuXG4gIC8vIEV4dHJlbWVseSB1bmxpa2VseTogbG9jayBkaXNhcHBlYXJlZCBiZXR3ZWVuIG91ciBjbGFpbSBhbmQgcmUtcmVhZC4gUmV0cnkgb25jZS5cbiAgbG9nZ2VyLndhcm4oJ1tMZWFkZXJFbGVjdGlvbl0gTG9jayB2YW5pc2hlZCBhZnRlciBmYWlsZWQgY2xhaW0uIFJldHJ5aW5nLicpO1xuICBjb25zdCByZXRyeUluZm86IENvbnNvbGVMZWFkZXJJbmZvID0geyAuLi5jcmVhdGVMZWFkZXJJbmZvKHNlc3Npb25JZCwgcG9ydCkgfTtcbiAgY29uc3QgcmV0cnlDbGFpbWVkID0gYXdhaXQgY2xhaW1MZWFkZXJzaGlwKHJldHJ5SW5mbyk7XG4gIGlmIChyZXRyeUNsYWltZWQpIHtcbiAgICByZXR1cm4geyByb2xlOiAnbGVhZGVyJywgbGVhZGVySW5mbzogcmV0cnlJbmZvIH07XG4gIH1cbiAgY29uc3QgYWN0dWFsTGVhZGVyID0gYXdhaXQgcmVhZExlYWRlckxvY2soKTtcbiAgcmV0dXJuIHsgcm9sZTogJ2ZvbGxvd2VyJywgbGVhZGVySW5mbzogYWN0dWFsTGVhZGVyID8/IHJldHJ5SW5mbyB9O1xufVxuXG4vKipcbiAqIFByb2JlIHdoZXRoZXIgdGhlIGxlYWRlcidzIHdlYiBjb25zb2xlIGlzIHJlYWNoYWJsZS5cbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgbGVhZGVyJ3MgaW5nZXN0IGVuZHBvaW50IHJlc3BvbmRzLCBmYWxzZSBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpc0xlYWRlcldlYkNvbnNvbGVSZWFjaGFibGUobGVhZGVySW5mbzogQ29uc29sZUxlYWRlckluZm8pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IGNvbnRyb2xsZXIuYWJvcnQoKSwgMl8wMDApO1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKGBodHRwOi8vMTI3LjAuMC4xOiR7bGVhZGVySW5mby5wb3J0fS9hcGkvbG9ncy9zdGF0c2AsIHtcbiAgICAgIHNpZ25hbDogY29udHJvbGxlci5zaWduYWwsXG4gICAgfSk7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgIHJldHVybiByZXMub2s7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIEZvcmNlIGNsYWltIGxlYWRlcnNoaXAgYnkgZGVsZXRpbmcgdGhlIGV4aXN0aW5nIGxvY2sgYW5kIGNsYWltaW5nLlxuICogVXNlZCB3aGVuIHRoZSBleGlzdGluZyBsZWFkZXIgaXMgYWxpdmUgYnV0IG5vdCBydW5uaW5nIGEgd2ViIGNvbnNvbGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmb3JjZUNsYWltTGVhZGVyc2hpcChzZXNzaW9uSWQ6IHN0cmluZywgcG9ydDogbnVtYmVyKTogUHJvbWlzZTxFbGVjdGlvblJlc3VsdD4ge1xuICBsb2dnZXIuaW5mbygnW0xlYWRlckVsZWN0aW9uXSBGb3JjaW5nIGxlYWRlcnNoaXAgdGFrZW92ZXIg4oCUIGV4aXN0aW5nIGxlYWRlciBoYXMgbm8gd2ViIGNvbnNvbGUnKTtcbiAgYXdhaXQgZGVsZXRlTGVhZGVyTG9jaygpO1xuICBjb25zdCBteUluZm8gPSBjcmVhdGVMZWFkZXJJbmZvKHNlc3Npb25JZCwgcG9ydCk7XG5cbiAgY29uc3QgY2xhaW1lZCA9IGF3YWl0IGNsYWltTGVhZGVyc2hpcChteUluZm8pO1xuICBpZiAoY2xhaW1lZCkge1xuICAgIGxvZ2dlci5pbmZvKCdbTGVhZGVyRWxlY3Rpb25dIEZvcmNlZCBsZWFkZXJzaGlwIGNsYWltZWQnLCB7IHNlc3Npb25JZCwgcG9ydCwgcGlkOiBwcm9jZXNzLnBpZCB9KTtcbiAgICByZXR1cm4geyByb2xlOiAnbGVhZGVyJywgbGVhZGVySW5mbzogbXlJbmZvIH07XG4gIH1cblxuICAvLyBGYWlsZWQg4oCUIGZhbGwgYmFjayB0byBmb2xsb3dlclxuICBjb25zdCB3aW5uZXIgPSBhd2FpdCByZWFkTGVhZGVyTG9jaygpO1xuICByZXR1cm4geyByb2xlOiAnZm9sbG93ZXInLCBsZWFkZXJJbmZvOiB3aW5uZXIgPz8gbXlJbmZvIH07XG59XG5cbi8qKlxuICogU3RhcnQgdGhlIGxlYWRlciBoZWFydGJlYXQgbG9vcC5cbiAqIFVwZGF0ZXMgdGhlIGxvY2sgZmlsZSBldmVyeSBIRUFSVEJFQVRfSU5URVJWQUxfTVMgc28gZm9sbG93ZXJzIGtub3cgdGhlIGxlYWRlciBpcyBhbGl2ZS5cbiAqXG4gKiBAcmV0dXJucyBBIHN0b3AgZnVuY3Rpb24gdG8gY2xlYXIgdGhlIGludGVydmFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdGFydEhlYXJ0YmVhdChpbmZvOiBDb25zb2xlTGVhZGVySW5mbyk6ICgpID0+IHZvaWQge1xuICBjb25zdCBpbnRlcnZhbCA9IHNldEludGVydmFsKGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdXBkYXRlZDogQ29uc29sZUxlYWRlckluZm8gPSB7IC4uLmluZm8sIGhlYXJ0YmVhdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpIH07XG4gICAgICBjb25zdCB0bXBGaWxlID0gam9pbihSVU5fRElSLCBgY29uc29sZS1sZWFkZXIubG9jay4ke3Byb2Nlc3MucGlkfS50bXBgKTtcbiAgICAgIGF3YWl0IHdyaXRlRmlsZSh0bXBGaWxlLCBKU09OLnN0cmluZ2lmeSh1cGRhdGVkLCBudWxsLCAyKSwgJ3V0Zi04Jyk7XG4gICAgICBhd2FpdCByZW5hbWUodG1wRmlsZSwgTE9DS19GSUxFKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZygnW0xlYWRlckVsZWN0aW9uXSBIZWFydGJlYXQgd3JpdGUgZmFpbGVkOicsIGVycik7XG4gICAgfVxuICB9LCBIRUFSVEJFQVRfSU5URVJWQUxfTVMpO1xuXG4gIC8vIERvbid0IGxldCB0aGUgaGVhcnRiZWF0IGludGVydmFsIGtlZXAgdGhlIHByb2Nlc3MgYWxpdmVcbiAgaW50ZXJ2YWwudW5yZWYoKTtcblxuICByZXR1cm4gKCkgPT4gY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7XG59XG5cbi8qKlxuICogUmVnaXN0ZXIgY2xlYW51cCBoYW5kbGVycyB0byByZW1vdmUgdGhlIGxlYWRlciBsb2NrIG9uIHByb2Nlc3MgZXhpdC5cbiAqIFNob3VsZCBvbmx5IGJlIGNhbGxlZCBieSB0aGUgbGVhZGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJMZWFkZXJDbGVhbnVwKCk6IHZvaWQge1xuICBjb25zdCBjbGVhbnVwID0gKCkgPT4geyBkZWxldGVMZWFkZXJMb2NrKCkuY2F0Y2goKCkgPT4ge30pOyB9O1xuICBwcm9jZXNzLm9uY2UoJ2V4aXQnLCBjbGVhbnVwKTtcbiAgcHJvY2Vzcy5vbmNlKCdTSUdURVJNJywgY2xlYW51cCk7XG4gIHByb2Nlc3Mub25jZSgnU0lHSU5UJywgY2xlYW51cCk7XG4gIHByb2Nlc3Mub25jZSgnU0lHSFVQJywgY2xlYW51cCk7XG59XG4iXX0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LeaderForwardingSink.d.ts","sourceRoot":"","sources":["../../../src/web/console/LeaderForwardingSink.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"LeaderForwardingSink.d.ts","sourceRoot":"","sources":["../../../src/web/console/LeaderForwardingSink.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AA0C7D;;GAEG;AACH,qBAAa,uBAAwB,YAAW,QAAQ;IASpD,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,sFAAsF;IACtF,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,gGAAgG;IAChG,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC;IAbjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAyB;IAChD,OAAO,CAAC,UAAU,CAA+C;IACjE,OAAO,CAAC,SAAS,CAAsB;IACvC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,mBAAmB,CAAK;IAChC,OAAO,CAAC,MAAM,CAAS;gBAGJ,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM;IAClC,sFAAsF;IACrE,SAAS,GAAE,MAAM,GAAG,IAAW;IAChD,gGAAgG;IAC/E,aAAa,CAAC,GAAE,MAAM,IAAI,aAAA;IAO7C,KAAK,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI;IAkB7B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAQd,WAAW;IAgCzB,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,aAAa;CAwBtB;AAED;;GAEG;AACH,qBAAa,2BAA2B;IAEpC,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,sFAAsF;IACtF,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAHT,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM;IAClC,sFAAsF;IACrE,SAAS,GAAE,MAAM,GAAG,IAAW;IAG5C,UAAU,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;CAgB1D;AAED;;GAEG;AACH,qBAAa,gBAAgB;IAIzB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,sFAAsF;IACtF,OAAO,CAAC,QAAQ,CAAC,SAAS;IAP5B,OAAO,CAAC,cAAc,CAA+C;gBAGlD,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM;IAC5B,sFAAsF;IACrE,SAAS,GAAE,MAAM,GAAG,IAAW;IAGlD,sDAAsD;IAChD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAS5B,sDAAsD;IAChD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAQb,SAAS;CAuBxB"}
|
|
@@ -15,8 +15,10 @@
|
|
|
15
15
|
* @since v2.1.0 — Issue #1700
|
|
16
16
|
*/
|
|
17
17
|
import { UnicodeValidator } from '../../security/validators/unicodeValidator.js';
|
|
18
|
+
import { PACKAGE_VERSION } from '../../generated/version.js';
|
|
18
19
|
import { logger } from '../../utils/logger.js';
|
|
19
20
|
import { env } from '../../config/env.js';
|
|
21
|
+
import { CONSOLE_PROTOCOL_VERSION } from './LeaderElection.js';
|
|
20
22
|
/** Maximum entries to buffer when leader is unreachable */
|
|
21
23
|
const MAX_BUFFER_SIZE = 10_000;
|
|
22
24
|
/** Batch size before flushing */
|
|
@@ -237,6 +239,8 @@ export class SessionHeartbeat {
|
|
|
237
239
|
event,
|
|
238
240
|
pid: this.pid,
|
|
239
241
|
startedAt: new Date().toISOString(),
|
|
242
|
+
serverVersion: PACKAGE_VERSION,
|
|
243
|
+
consoleProtocolVersion: CONSOLE_PROTOCOL_VERSION,
|
|
240
244
|
}),
|
|
241
245
|
signal: controller.signal,
|
|
242
246
|
});
|
|
@@ -247,4 +251,4 @@ export class SessionHeartbeat {
|
|
|
247
251
|
}
|
|
248
252
|
}
|
|
249
253
|
}
|
|
250
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGVhZGVyRm9yd2FyZGluZ1NpbmsuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvd2ViL2NvbnNvbGUvTGVhZGVyRm9yd2FyZGluZ1NpbmsudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBSUgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDakYsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQy9DLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUUxQywyREFBMkQ7QUFDM0QsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDO0FBRS9CLGlDQUFpQztBQUNqQyxNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUM7QUFFdEIscUNBQXFDO0FBQ3JDLE1BQU0saUJBQWlCLEdBQUcsS0FBSyxDQUFDO0FBRWhDLDRDQUE0QztBQUM1QyxNQUFNLGtCQUFrQixHQUFHLEtBQUssQ0FBQztBQUVqQyxpQ0FBaUM7QUFDakMsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDO0FBRTlCLDRGQUE0RjtBQUM1RixNQUFNLHdCQUF3QixHQUFHLEdBQUcsQ0FBQyxzQ0FBc0MsQ0FBQztBQUU1RSxnQ0FBZ0M7QUFDaEMsTUFBTSxrQkFBa0IsR0FBRyxLQUFLLENBQUM7QUFFakM7Ozs7O0dBS0c7QUFDSCxTQUFTLGtCQUFrQixDQUFDLEtBQW9CO0lBQzlDLE1BQU0sT0FBTyxHQUEyQixFQUFFLGNBQWMsRUFBRSxrQkFBa0IsRUFBRSxDQUFDO0lBQy9FLElBQUksS0FBSyxFQUFFLENBQUM7UUFDVixPQUFPLENBQUMsZUFBZSxDQUFDLEdBQUcsVUFBVSxLQUFLLEVBQUUsQ0FBQztJQUMvQyxDQUFDO0lBQ0QsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLHVCQUF1QjtJQVNmO0lBQ0E7SUFFQTtJQUVBO0lBYkYsTUFBTSxHQUFzQixFQUFFLENBQUM7SUFDeEMsVUFBVSxHQUEwQyxJQUFJLENBQUM7SUFDekQsU0FBUyxHQUFHLGtCQUFrQixDQUFDO0lBQy9CLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDakIsbUJBQW1CLEdBQUcsQ0FBQyxDQUFDO0lBQ3hCLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFFdkIsWUFDbUIsU0FBaUIsRUFDakIsU0FBaUI7SUFDbEMsc0ZBQXNGO0lBQ3JFLFlBQTJCLElBQUk7SUFDaEQsZ0dBQWdHO0lBQy9FLGFBQTBCO1FBTDFCLGNBQVMsR0FBVCxTQUFTLENBQVE7UUFDakIsY0FBUyxHQUFULFNBQVMsQ0FBUTtRQUVqQixjQUFTLEdBQVQsU0FBUyxDQUFzQjtRQUUvQixrQkFBYSxHQUFiLGFBQWEsQ0FBYTtRQUUzQyxJQUFJLENBQUMsU0FBUyxHQUFHLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQztRQUN6RSxJQUFJLENBQUMsVUFBVSxHQUFHLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztRQUMzRSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxLQUFLLENBQUMsS0FBc0I7UUFDMUIsb0NBQW9DO1FBQ3BDLE1BQU0sT0FBTyxHQUFvQjtZQUMvQixHQUFHLEtBQUs7WUFDUixJQUFJLEVBQUUsRUFBRSxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUU7U0FDcEQsQ0FBQztRQUVGLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksZUFBZSxFQUFFLENBQUM7WUFDMUMsNEJBQTRCO1lBQzVCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdEIsQ0FBQztRQUNELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTFCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksVUFBVSxFQUFFLENBQUM7WUFDckMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3JCLENBQUM7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLEtBQUs7UUFDVCxNQUFNLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsS0FBSyxDQUFDLEtBQUs7UUFDVCxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNwQixhQUFhLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQy9CLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLENBQUM7UUFDRCxNQUFNLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRU8sS0FBSyxDQUFDLFdBQVc7UUFDdkIsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU87UUFDckUsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFFckIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQztZQUNILE1BQU0sVUFBVSxHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7WUFDekMsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1lBRXpFLE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsa0JBQWtCLEVBQUU7Z0JBQ2hFLE1BQU0sRUFBRSxNQUFNO2dCQUNkLE9BQU8sRUFBRSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO2dCQUMzQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQztnQkFDbkUsTUFBTSxFQUFFLFVBQVUsQ0FBQyxNQUFNO2FBQzFCLENBQUMsQ0FBQztZQUNILFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUV0QixJQUFJLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDaEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxrQkFBa0IsQ0FBQztnQkFDcEMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLENBQUMsQ0FBQztZQUMvQixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDekIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3ZCLENBQUM7UUFDSCxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN6QixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDdkIsQ0FBQztnQkFBUyxDQUFDO1lBQ1QsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFDeEIsQ0FBQztJQUNILENBQUM7SUFFTyxZQUFZLENBQUMsS0FBd0I7UUFDM0MsTUFBTSxjQUFjLEdBQUcsZUFBZSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQzVELElBQUksY0FBYyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1lBQ2pELElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUM7UUFDcEMsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLENBQUMsSUFBSSxDQUFDLGlDQUFpQyxlQUFlLGVBQWUsS0FBSyxDQUFDLE1BQU0sVUFBVSxDQUFDLENBQUM7UUFDckcsQ0FBQztJQUNILENBQUM7SUFFTyxhQUFhO1FBQ25CLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBRTNCLElBQUksSUFBSSxDQUFDLG1CQUFtQixJQUFJLHdCQUF3QixFQUFFLENBQUM7WUFDekQsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDakIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7Z0JBQ25CLE1BQU0sQ0FBQyxJQUFJLENBQUMsbUZBQW1GLElBQUksQ0FBQyxtQkFBbUIsOEJBQThCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxxQkFBcUIsQ0FBQyxDQUFDO2dCQUM5TCxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7Z0JBQ3ZCLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO29CQUNwQixhQUFhLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO29CQUMvQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztnQkFDekIsQ0FBQztnQkFDRCxrRkFBa0Y7Z0JBQ2xGLGlGQUFpRjtnQkFDakYsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7b0JBQ3ZCLGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYyxFQUFFLENBQUMsQ0FBQztnQkFDOUMsQ0FBQztZQUNILENBQUM7WUFDRCxPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sQ0FBQyxLQUFLLENBQUMsZ0RBQWdELElBQUksQ0FBQyxTQUFTLGVBQWUsSUFBSSxDQUFDLG1CQUFtQixJQUFJLHdCQUF3QixlQUFlLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNwTCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDaEUsQ0FBQztDQUNGO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sMkJBQTJCO0lBRW5CO0lBQ0E7SUFFQTtJQUpuQixZQUNtQixTQUFpQixFQUNqQixTQUFpQjtJQUNsQyxzRkFBc0Y7SUFDckUsWUFBMkIsSUFBSTtRQUgvQixjQUFTLEdBQVQsU0FBUyxDQUFRO1FBQ2pCLGNBQVMsR0FBVCxTQUFTLENBQVE7UUFFakIsY0FBUyxHQUFULFNBQVMsQ0FBc0I7SUFDL0MsQ0FBQztJQUVKLEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBd0I7UUFDdkMsSUFBSSxDQUFDO1lBQ0gsTUFBTSxVQUFVLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUN6QyxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxFQUFFLGtCQUFrQixDQUFDLENBQUM7WUFFekUsTUFBTSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxxQkFBcUIsRUFBRTtnQkFDbEQsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsT0FBTyxFQUFFLGtCQUFrQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7Z0JBQzNDLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLENBQUM7Z0JBQzdELE1BQU0sRUFBRSxVQUFVLENBQUMsTUFBTTthQUMxQixDQUFDLENBQUM7WUFDSCxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDeEIsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLE1BQU0sQ0FBQyxLQUFLLENBQUMscURBQXFELENBQUMsQ0FBQztRQUN0RSxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sZ0JBQWdCO0lBSVI7SUFDQTtJQUNBO0lBRUE7SUFQWCxjQUFjLEdBQTBDLElBQUksQ0FBQztJQUVyRSxZQUNtQixTQUFpQixFQUNqQixTQUFpQixFQUNqQixHQUFXO0lBQzVCLHNGQUFzRjtJQUNyRSxZQUEyQixJQUFJO1FBSi9CLGNBQVMsR0FBVCxTQUFTLENBQVE7UUFDakIsY0FBUyxHQUFULFNBQVMsQ0FBUTtRQUNqQixRQUFHLEdBQUgsR0FBRyxDQUFRO1FBRVgsY0FBUyxHQUFULFNBQVMsQ0FBc0I7SUFDL0MsQ0FBQztJQUVKLHNEQUFzRDtJQUN0RCxLQUFLLENBQUMsS0FBSztRQUNULE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVoQyxJQUFJLENBQUMsY0FBYyxHQUFHLFdBQVcsQ0FBQyxHQUFHLEVBQUU7WUFDckMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDLENBQUM7UUFDOUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ1gsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsc0RBQXNEO0lBQ3RELEtBQUssQ0FBQyxJQUFJO1FBQ1IsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDeEIsYUFBYSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUNuQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztRQUM3QixDQUFDO1FBQ0QsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFTyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQTBDO1FBQ2hFLElBQUksQ0FBQztZQUNILE1BQU0sVUFBVSxHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7WUFDekMsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1lBRXpFLE1BQU0sS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMscUJBQXFCLEVBQUU7Z0JBQ2xELE1BQU0sRUFBRSxNQUFNO2dCQUNkLE9BQU8sRUFBRSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO2dCQUMzQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQztvQkFDbkIsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO29CQUN6QixLQUFLO29CQUNMLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRztvQkFDYixTQUFTLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7aUJBQ3BDLENBQUM7Z0JBQ0YsTUFBTSxFQUFFLFVBQVUsQ0FBQyxNQUFNO2FBQzFCLENBQUMsQ0FBQztZQUNILFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN4QixDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsTUFBTSxDQUFDLEtBQUssQ0FBQyxxQ0FBcUMsS0FBSyxRQUFRLENBQUMsQ0FBQztRQUNuRSxDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBGb3J3YXJkaW5nIHNpbmtzIGZvciBmb2xsb3dlciBNQ1Agc2VydmVycy5cbiAqXG4gKiBXaGVuIGEgc2VydmVyIGJlY29tZXMgYSBmb2xsb3dlciBpbiB0aGUgdW5pZmllZCBjb25zb2xlIGVsZWN0aW9uLCBpdFxuICogcmVnaXN0ZXJzIHRoZXNlIHNpbmtzIHdpdGggaXRzIExvZ01hbmFnZXIgYW5kIE1ldHJpY3NNYW5hZ2VyLiBJbnN0ZWFkXG4gKiBvZiBicm9hZGNhc3RpbmcgdG8gbG9jYWwgU1NFIGNsaWVudHMsIGVudHJpZXMgYXJlIGJhdGNoLVBPU1RlZCB0b1xuICogdGhlIGxlYWRlcidzIGluZ2VzdGlvbiBlbmRwb2ludHMuXG4gKlxuICogRmVhdHVyZXM6XG4gKiAtIEJhdGNoIGJ1ZmZlcmluZyAoNTAgZW50cmllcyBvciAxcyBmbHVzaCwgd2hpY2hldmVyIGNvbWVzIGZpcnN0KVxuICogLSBJbi1tZW1vcnkgYnVmZmVyIHVwIHRvIDEwLDAwMCBlbnRyaWVzIG9uIGxlYWRlciBmYWlsdXJlXG4gKiAtIEV4cG9uZW50aWFsIGJhY2tvZmYgb24gUE9TVCBmYWlsdXJlICgxcyDihpIgMnMg4oaSIDRzLCBtYXggMzBzKVxuICogLSBBdXRvbWF0aWMgZHJhaW4gb24gbGVhZGVyIHJlY292ZXJ5XG4gKlxuICogQHNpbmNlIHYyLjEuMCDigJQgSXNzdWUgIzE3MDBcbiAqL1xuXG5pbXBvcnQgdHlwZSB7IElMb2dTaW5rLCBVbmlmaWVkTG9nRW50cnkgfSBmcm9tICcuLi8uLi9sb2dnaW5nL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgTWV0cmljU25hcHNob3QgfSBmcm9tICcuLi8uLi9tZXRyaWNzL3R5cGVzLmpzJztcbmltcG9ydCB7IFVuaWNvZGVWYWxpZGF0b3IgfSBmcm9tICcuLi8uLi9zZWN1cml0eS92YWxpZGF0b3JzL3VuaWNvZGVWYWxpZGF0b3IuanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IGVudiB9IGZyb20gJy4uLy4uL2NvbmZpZy9lbnYuanMnO1xuXG4vKiogTWF4aW11bSBlbnRyaWVzIHRvIGJ1ZmZlciB3aGVuIGxlYWRlciBpcyB1bnJlYWNoYWJsZSAqL1xuY29uc3QgTUFYX0JVRkZFUl9TSVpFID0gMTBfMDAwO1xuXG4vKiogQmF0Y2ggc2l6ZSBiZWZvcmUgZmx1c2hpbmcgKi9cbmNvbnN0IEJBVENIX1NJWkUgPSA1MDtcblxuLyoqIFRpbWUtYmFzZWQgZmx1c2ggaW50ZXJ2YWwgKG1zKSAqL1xuY29uc3QgRkxVU0hfSU5URVJWQUxfTVMgPSAxXzAwMDtcblxuLyoqIEluaXRpYWwgYmFja29mZiBkZWxheSBvbiBmYWlsdXJlIChtcykgKi9cbmNvbnN0IElOSVRJQUxfQkFDS09GRl9NUyA9IDFfMDAwO1xuXG4vKiogTWF4aW11bSBiYWNrb2ZmIGRlbGF5IChtcykgKi9cbmNvbnN0IE1BWF9CQUNLT0ZGX01TID0gMzBfMDAwO1xuXG4vKiogR2l2ZSB1cCBmb3J3YXJkaW5nIGFmdGVyIHRoaXMgbWFueSBjb25zZWN1dGl2ZSBmYWlsdXJlcyAoIzE4NTA6IGNvbmZpZ3VyYWJsZSB2aWEgZW52KSAqL1xuY29uc3QgTUFYX0NPTlNFQ1VUSVZFX0ZBSUxVUkVTID0gZW52LkRPTExIT1VTRV9DT05TT0xFX01BWF9GT1JXQVJEX0ZBSUxVUkVTO1xuXG4vKiogSFRUUCByZXF1ZXN0IHRpbWVvdXQgKG1zKSAqL1xuY29uc3QgUkVRVUVTVF9USU1FT1VUX01TID0gNV8wMDA7XG5cbi8qKlxuICogQnVpbGQgdGhlIEhUVFAgaGVhZGVycyBmb3IgaW5nZXN0IFBPU1RzLCBpbmNsdWRpbmcgdGhlIGNvbnNvbGUgYXV0aCB0b2tlblxuICogaWYgb25lIHdhcyBwcm92aWRlZCAoIzE3ODApLiBGb2xsb3dlcnMgcmVhZCB0aGUgdG9rZW4gZnJvbSB0aGUgc2hhcmVkIHRva2VuXG4gKiBmaWxlIG9uIHN0YXJ0dXAgYW5kIHBhc3MgaXQgdG8gZWFjaCBzaW5rOyB3aGVuIHRoZSBsZWFkZXIgaGFzIGF1dGggZGlzYWJsZWRcbiAqIG9yIHRoZSB0b2tlbiBmaWxlIGlzIG1pc3NpbmcsIHRoaXMgaXMgYSBuby1vcCB0aGF0IHNlbmRzIG9ubHkgQ29udGVudC1UeXBlLlxuICovXG5mdW5jdGlvbiBidWlsZEluZ2VzdEhlYWRlcnModG9rZW46IHN0cmluZyB8IG51bGwpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgY29uc3QgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9O1xuICBpZiAodG9rZW4pIHtcbiAgICBoZWFkZXJzWydBdXRob3JpemF0aW9uJ10gPSBgQmVhcmVyICR7dG9rZW59YDtcbiAgfVxuICByZXR1cm4gaGVhZGVycztcbn1cblxuLyoqXG4gKiBJTG9nU2luayB0aGF0IGJhdGNoLVBPU1RzIGVudHJpZXMgdG8gdGhlIGxlYWRlcidzIC9hcGkvaW5nZXN0L2xvZ3MuXG4gKi9cbmV4cG9ydCBjbGFzcyBMZWFkZXJGb3J3YXJkaW5nTG9nU2luayBpbXBsZW1lbnRzIElMb2dTaW5rIHtcbiAgcHJpdmF0ZSByZWFkb25seSBidWZmZXI6IFVuaWZpZWRMb2dFbnRyeVtdID0gW107XG4gIHByaXZhdGUgZmx1c2hUaW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0SW50ZXJ2YWw+IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgYmFja29mZk1zID0gSU5JVElBTF9CQUNLT0ZGX01TO1xuICBwcml2YXRlIGZsdXNoaW5nID0gZmFsc2U7XG4gIHByaXZhdGUgY29uc2VjdXRpdmVGYWlsdXJlcyA9IDA7XG4gIHByaXZhdGUgZ2F2ZVVwID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBsZWFkZXJVcmw6IHN0cmluZyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNlc3Npb25JZDogc3RyaW5nLFxuICAgIC8qKiBPcHRpb25hbCBjb25zb2xlIGF1dGggdG9rZW4gKCMxNzgwKS4gSW5jbHVkZWQgYXMgQmVhcmVyIGhlYWRlciBvbiBpbmdlc3QgUE9TVHMuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBhdXRoVG9rZW46IHN0cmluZyB8IG51bGwgPSBudWxsLFxuICAgIC8qKiBDYWxsYmFjayBpbnZva2VkIHdoZW4gdGhlIGxlYWRlciBpcyBwcmVzdW1lZCBkZWFkIGFmdGVyIE1BWF9DT05TRUNVVElWRV9GQUlMVVJFUyAoIzE4NTApLiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgb25MZWFkZXJEZWF0aD86ICgpID0+IHZvaWQsXG4gICkge1xuICAgIHRoaXMuc2Vzc2lvbklkID0gVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUoc2Vzc2lvbklkKS5ub3JtYWxpemVkQ29udGVudDtcbiAgICB0aGlzLmZsdXNoVGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB0aGlzLmZsdXNoQnVmZmVyKCksIEZMVVNIX0lOVEVSVkFMX01TKTtcbiAgICB0aGlzLmZsdXNoVGltZXIudW5yZWYoKTtcbiAgfVxuXG4gIHdyaXRlKGVudHJ5OiBVbmlmaWVkTG9nRW50cnkpOiB2b2lkIHtcbiAgICAvLyBTdGFtcCBzZXNzaW9uIElEIGJlZm9yZSBidWZmZXJpbmdcbiAgICBjb25zdCBzdGFtcGVkOiBVbmlmaWVkTG9nRW50cnkgPSB7XG4gICAgICAuLi5lbnRyeSxcbiAgICAgIGRhdGE6IHsgLi4uZW50cnkuZGF0YSwgX3Nlc3Npb25JZDogdGhpcy5zZXNzaW9uSWQgfSxcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuYnVmZmVyLmxlbmd0aCA+PSBNQVhfQlVGRkVSX1NJWkUpIHtcbiAgICAgIC8vIEV2aWN0IG9sZGVzdCBlbnRyeSAoRklGTylcbiAgICAgIHRoaXMuYnVmZmVyLnNoaWZ0KCk7XG4gICAgfVxuICAgIHRoaXMuYnVmZmVyLnB1c2goc3RhbXBlZCk7XG5cbiAgICBpZiAodGhpcy5idWZmZXIubGVuZ3RoID49IEJBVENIX1NJWkUpIHtcbiAgICAgIHRoaXMuZmx1c2hCdWZmZXIoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBmbHVzaCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmZsdXNoQnVmZmVyKCk7XG4gIH1cblxuICBhc3luYyBjbG9zZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5mbHVzaFRpbWVyKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMuZmx1c2hUaW1lcik7XG4gICAgICB0aGlzLmZsdXNoVGltZXIgPSBudWxsO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLmZsdXNoQnVmZmVyKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZsdXNoQnVmZmVyKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmZsdXNoaW5nIHx8IHRoaXMuYnVmZmVyLmxlbmd0aCA9PT0gMCB8fCB0aGlzLmdhdmVVcCkgcmV0dXJuO1xuICAgIHRoaXMuZmx1c2hpbmcgPSB0cnVlO1xuXG4gICAgY29uc3QgYmF0Y2ggPSB0aGlzLmJ1ZmZlci5zcGxpY2UoMCwgQkFUQ0hfU0laRSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiBjb250cm9sbGVyLmFib3J0KCksIFJFUVVFU1RfVElNRU9VVF9NUyk7XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYCR7dGhpcy5sZWFkZXJVcmx9L2FwaS9pbmdlc3QvbG9nc2AsIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGhlYWRlcnM6IGJ1aWxkSW5nZXN0SGVhZGVycyh0aGlzLmF1dGhUb2tlbiksXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgc2Vzc2lvbklkOiB0aGlzLnNlc3Npb25JZCwgZW50cmllczogYmF0Y2ggfSksXG4gICAgICAgIHNpZ25hbDogY29udHJvbGxlci5zaWduYWwsXG4gICAgICB9KTtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcblxuICAgICAgaWYgKHJlc3BvbnNlLm9rKSB7XG4gICAgICAgIHRoaXMuYmFja29mZk1zID0gSU5JVElBTF9CQUNLT0ZGX01TO1xuICAgICAgICB0aGlzLmNvbnNlY3V0aXZlRmFpbHVyZXMgPSAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yZXF1ZXVlQmF0Y2goYmF0Y2gpO1xuICAgICAgICB0aGlzLmhhbmRsZUZhaWx1cmUoKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIHRoaXMucmVxdWV1ZUJhdGNoKGJhdGNoKTtcbiAgICAgIHRoaXMuaGFuZGxlRmFpbHVyZSgpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmZsdXNoaW5nID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXF1ZXVlQmF0Y2goYmF0Y2g6IFVuaWZpZWRMb2dFbnRyeVtdKTogdm9pZCB7XG4gICAgY29uc3Qgc3BhY2VBdmFpbGFibGUgPSBNQVhfQlVGRkVSX1NJWkUgLSB0aGlzLmJ1ZmZlci5sZW5ndGg7XG4gICAgaWYgKHNwYWNlQXZhaWxhYmxlID4gMCkge1xuICAgICAgY29uc3QgdG9SZXF1ZXVlID0gYmF0Y2guc2xpY2UoMCwgc3BhY2VBdmFpbGFibGUpO1xuICAgICAgdGhpcy5idWZmZXIudW5zaGlmdCguLi50b1JlcXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dnZXIud2FybihgW0ZvcndhcmRpbmdTaW5rXSBCdWZmZXIgZnVsbCAoJHtNQVhfQlVGRkVSX1NJWkV9KSwgZHJvcHBpbmcgJHtiYXRjaC5sZW5ndGh9IGVudHJpZXNgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUZhaWx1cmUoKTogdm9pZCB7XG4gICAgdGhpcy5jb25zZWN1dGl2ZUZhaWx1cmVzKys7XG5cbiAgICBpZiAodGhpcy5jb25zZWN1dGl2ZUZhaWx1cmVzID49IE1BWF9DT05TRUNVVElWRV9GQUlMVVJFUykge1xuICAgICAgaWYgKCF0aGlzLmdhdmVVcCkge1xuICAgICAgICB0aGlzLmdhdmVVcCA9IHRydWU7XG4gICAgICAgIGxvZ2dlci5pbmZvKGBbRm9yd2FyZGluZ1NpbmtdIExlYWRlciBub3QgcnVubmluZyB3ZWIgY29uc29sZSDigJQgbG9nIGZvcndhcmRpbmcgZGlzYWJsZWQgYWZ0ZXIgJHt0aGlzLmNvbnNlY3V0aXZlRmFpbHVyZXN9IGZhaWxlZCBhdHRlbXB0cy4gQnVmZmVyZWQgJHt0aGlzLmJ1ZmZlci5sZW5ndGh9IGVudHJpZXMgZGlzY2FyZGVkLmApO1xuICAgICAgICB0aGlzLmJ1ZmZlci5sZW5ndGggPSAwO1xuICAgICAgICBpZiAodGhpcy5mbHVzaFRpbWVyKSB7XG4gICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmZsdXNoVGltZXIpO1xuICAgICAgICAgIHRoaXMuZmx1c2hUaW1lciA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgLy8gTm90aWZ5IHRoZSBvcmNoZXN0cmF0b3Igc28gaXQgY2FuIGF0dGVtcHQgZm9sbG93ZXItdG8tbGVhZGVyIHByb21vdGlvbiAoIzE4NTApLlxuICAgICAgICAvLyBGaXJlZCBhc3luY2hyb25vdXNseSBzbyBoYW5kbGVGYWlsdXJlIGNvbXBsZXRlcyBjbGVhbmx5IGJlZm9yZSBwcm9tb3Rpb24gcnVucy5cbiAgICAgICAgaWYgKHRoaXMub25MZWFkZXJEZWF0aCkge1xuICAgICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHRoaXMub25MZWFkZXJEZWF0aCEoKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsb2dnZXIuZGVidWcoYFtGb3J3YXJkaW5nU2lua10gTGVhZGVyIHVucmVhY2hhYmxlLCBiYWNrb2ZmICR7dGhpcy5iYWNrb2ZmTXN9bXMgKGF0dGVtcHQgJHt0aGlzLmNvbnNlY3V0aXZlRmFpbHVyZXN9LyR7TUFYX0NPTlNFQ1VUSVZFX0ZBSUxVUkVTfSwgYnVmZmVyZWQ6ICR7dGhpcy5idWZmZXIubGVuZ3RofSlgKTtcbiAgICB0aGlzLmJhY2tvZmZNcyA9IE1hdGgubWluKHRoaXMuYmFja29mZk1zICogMiwgTUFYX0JBQ0tPRkZfTVMpO1xuICB9XG59XG5cbi8qKlxuICogRm9yd2FyZHMgbWV0cmljIHNuYXBzaG90cyB0byB0aGUgbGVhZGVyJ3MgL2FwaS9pbmdlc3QvbWV0cmljcy5cbiAqL1xuZXhwb3J0IGNsYXNzIExlYWRlckZvcndhcmRpbmdNZXRyaWNzU2luayB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbGVhZGVyVXJsOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSByZWFkb25seSBzZXNzaW9uSWQ6IHN0cmluZyxcbiAgICAvKiogT3B0aW9uYWwgY29uc29sZSBhdXRoIHRva2VuICgjMTc4MCkuIEluY2x1ZGVkIGFzIEJlYXJlciBoZWFkZXIgb24gaW5nZXN0IFBPU1RzLiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgYXV0aFRva2VuOiBzdHJpbmcgfCBudWxsID0gbnVsbCxcbiAgKSB7fVxuXG4gIGFzeW5jIG9uU25hcHNob3Qoc25hcHNob3Q6IE1ldHJpY1NuYXBzaG90KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiBjb250cm9sbGVyLmFib3J0KCksIFJFUVVFU1RfVElNRU9VVF9NUyk7XG5cbiAgICAgIGF3YWl0IGZldGNoKGAke3RoaXMubGVhZGVyVXJsfS9hcGkvaW5nZXN0L21ldHJpY3NgLCB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBoZWFkZXJzOiBidWlsZEluZ2VzdEhlYWRlcnModGhpcy5hdXRoVG9rZW4pLFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IHNlc3Npb25JZDogdGhpcy5zZXNzaW9uSWQsIHNuYXBzaG90IH0pLFxuICAgICAgICBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsLFxuICAgICAgfSk7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICBsb2dnZXIuZGVidWcoJ1tGb3J3YXJkaW5nU2lua10gRmFpbGVkIHRvIGZvcndhcmQgbWV0cmljcyBzbmFwc2hvdCcpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFNlbmRzIHNlc3Npb24gbGlmZWN5Y2xlIGV2ZW50cyB0byB0aGUgbGVhZGVyLlxuICovXG5leHBvcnQgY2xhc3MgU2Vzc2lvbkhlYXJ0YmVhdCB7XG4gIHByaXZhdGUgaGVhcnRiZWF0VGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldEludGVydmFsPiB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbGVhZGVyVXJsOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSByZWFkb25seSBzZXNzaW9uSWQ6IHN0cmluZyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBpZDogbnVtYmVyLFxuICAgIC8qKiBPcHRpb25hbCBjb25zb2xlIGF1dGggdG9rZW4gKCMxNzgwKS4gSW5jbHVkZWQgYXMgQmVhcmVyIGhlYWRlciBvbiBpbmdlc3QgUE9TVHMuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBhdXRoVG9rZW46IHN0cmluZyB8IG51bGwgPSBudWxsLFxuICApIHt9XG5cbiAgLyoqIE5vdGlmeSB0aGUgbGVhZGVyIHRoYXQgdGhpcyBzZXNzaW9uIGhhcyBzdGFydGVkICovXG4gIGFzeW5jIHN0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuc2VuZEV2ZW50KCdzdGFydGVkJyk7XG5cbiAgICB0aGlzLmhlYXJ0YmVhdFRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgdGhpcy5zZW5kRXZlbnQoJ2hlYXJ0YmVhdCcpLmNhdGNoKCgpID0+IHt9KTtcbiAgICB9LCAxMF8wMDApO1xuICAgIHRoaXMuaGVhcnRiZWF0VGltZXIudW5yZWYoKTtcbiAgfVxuXG4gIC8qKiBOb3RpZnkgdGhlIGxlYWRlciB0aGF0IHRoaXMgc2Vzc2lvbiBpcyBzdG9wcGluZyAqL1xuICBhc3luYyBzdG9wKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmhlYXJ0YmVhdFRpbWVyKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMuaGVhcnRiZWF0VGltZXIpO1xuICAgICAgdGhpcy5oZWFydGJlYXRUaW1lciA9IG51bGw7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuc2VuZEV2ZW50KCdzdG9wcGVkJyk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlbmRFdmVudChldmVudDogJ3N0YXJ0ZWQnIHwgJ3N0b3BwZWQnIHwgJ2hlYXJ0YmVhdCcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICAgIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IGNvbnRyb2xsZXIuYWJvcnQoKSwgUkVRVUVTVF9USU1FT1VUX01TKTtcblxuICAgICAgYXdhaXQgZmV0Y2goYCR7dGhpcy5sZWFkZXJVcmx9L2FwaS9pbmdlc3Qvc2Vzc2lvbmAsIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGhlYWRlcnM6IGJ1aWxkSW5nZXN0SGVhZGVycyh0aGlzLmF1dGhUb2tlbiksXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICBzZXNzaW9uSWQ6IHRoaXMuc2Vzc2lvbklkLFxuICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgIHBpZDogdGhpcy5waWQsXG4gICAgICAgICAgc3RhcnRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIH0pLFxuICAgICAgICBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsLFxuICAgICAgfSk7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICBsb2dnZXIuZGVidWcoYFtTZXNzaW9uSGVhcnRiZWF0XSBGYWlsZWQgdG8gc2VuZCAke2V2ZW50fSBldmVudGApO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
254
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGVhZGVyRm9yd2FyZGluZ1NpbmsuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvd2ViL2NvbnNvbGUvTGVhZGVyRm9yd2FyZGluZ1NpbmsudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBSUgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDakYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDMUMsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFL0QsMkRBQTJEO0FBQzNELE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQztBQUUvQixpQ0FBaUM7QUFDakMsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDO0FBRXRCLHFDQUFxQztBQUNyQyxNQUFNLGlCQUFpQixHQUFHLEtBQUssQ0FBQztBQUVoQyw0Q0FBNEM7QUFDNUMsTUFBTSxrQkFBa0IsR0FBRyxLQUFLLENBQUM7QUFFakMsaUNBQWlDO0FBQ2pDLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQztBQUU5Qiw0RkFBNEY7QUFDNUYsTUFBTSx3QkFBd0IsR0FBRyxHQUFHLENBQUMsc0NBQXNDLENBQUM7QUFFNUUsZ0NBQWdDO0FBQ2hDLE1BQU0sa0JBQWtCLEdBQUcsS0FBSyxDQUFDO0FBRWpDOzs7OztHQUtHO0FBQ0gsU0FBUyxrQkFBa0IsQ0FBQyxLQUFvQjtJQUM5QyxNQUFNLE9BQU8sR0FBMkIsRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQztJQUMvRSxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ1YsT0FBTyxDQUFDLGVBQWUsQ0FBQyxHQUFHLFVBQVUsS0FBSyxFQUFFLENBQUM7SUFDL0MsQ0FB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QkFDZCxPQUFPLEVBQUUsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztnQkFDM0MsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUM7b0JBQ25CLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztvQkFDekIsS0FBSztvQkFDTCxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUc7b0JBQ2IsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO29CQUNuQyxhQUFhLEVBQUUsZUFBZTtvQkFDOUIsc0JBQXNCLEVBQUUsd0JBQXdCO2lCQUNqRCxDQUFDO2dCQUNGLE1BQU0sRUFBRSxVQUFVLENBQUMsTUFBTTthQUMxQixDQUFDLENBQUM7WUFDSCxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDeEIsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLE1BQU0sQ0FBQyxLQUFLLENBQUMscUNBQXFDLEtBQUssUUFBUSxDQUFDLENBQUM7UUFDbkUsQ0FBQztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRm9yd2FyZGluZyBzaW5rcyBmb3IgZm9sbG93ZXIgTUNQIHNlcnZlcnMuXG4gKlxuICogV2hlbiBhIHNlcnZlciBiZWNvbWVzIGEgZm9sbG93ZXIgaW4gdGhlIHVuaWZpZWQgY29uc29sZSBlbGVjdGlvbiwgaXRcbiAqIHJlZ2lzdGVycyB0aGVzZSBzaW5rcyB3aXRoIGl0cyBMb2dNYW5hZ2VyIGFuZCBNZXRyaWNzTWFuYWdlci4gSW5zdGVhZFxuICogb2YgYnJvYWRjYXN0aW5nIHRvIGxvY2FsIFNTRSBjbGllbnRzLCBlbnRyaWVzIGFyZSBiYXRjaC1QT1NUZWQgdG9cbiAqIHRoZSBsZWFkZXIncyBpbmdlc3Rpb24gZW5kcG9pbnRzLlxuICpcbiAqIEZlYXR1cmVzOlxuICogLSBCYXRjaCBidWZmZXJpbmcgKDUwIGVudHJpZXMgb3IgMXMgZmx1c2gsIHdoaWNoZXZlciBjb21lcyBmaXJzdClcbiAqIC0gSW4tbWVtb3J5IGJ1ZmZlciB1cCB0byAxMCwwMDAgZW50cmllcyBvbiBsZWFkZXIgZmFpbHVyZVxuICogLSBFeHBvbmVudGlhbCBiYWNrb2ZmIG9uIFBPU1QgZmFpbHVyZSAoMXMg4oaSIDJzIOKGkiA0cywgbWF4IDMwcylcbiAqIC0gQXV0b21hdGljIGRyYWluIG9uIGxlYWRlciByZWNvdmVyeVxuICpcbiAqIEBzaW5jZSB2Mi4xLjAg4oCUIElzc3VlICMxNzAwXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBJTG9nU2luaywgVW5pZmllZExvZ0VudHJ5IH0gZnJvbSAnLi4vLi4vbG9nZ2luZy90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IE1ldHJpY1NuYXBzaG90IH0gZnJvbSAnLi4vLi4vbWV0cmljcy90eXBlcy5qcyc7XG5pbXBvcnQgeyBVbmljb2RlVmFsaWRhdG9yIH0gZnJvbSAnLi4vLi4vc2VjdXJpdHkvdmFsaWRhdG9ycy91bmljb2RlVmFsaWRhdG9yLmpzJztcbmltcG9ydCB7IFBBQ0tBR0VfVkVSU0lPTiB9IGZyb20gJy4uLy4uL2dlbmVyYXRlZC92ZXJzaW9uLmpzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uLy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBlbnYgfSBmcm9tICcuLi8uLi9jb25maWcvZW52LmpzJztcbmltcG9ydCB7IENPTlNPTEVfUFJPVE9DT0xfVkVSU0lPTiB9IGZyb20gJy4vTGVhZGVyRWxlY3Rpb24uanMnO1xuXG4vKiogTWF4aW11bSBlbnRyaWVzIHRvIGJ1ZmZlciB3aGVuIGxlYWRlciBpcyB1bnJlYWNoYWJsZSAqL1xuY29uc3QgTUFYX0JVRkZFUl9TSVpFID0gMTBfMDAwO1xuXG4vKiogQmF0Y2ggc2l6ZSBiZWZvcmUgZmx1c2hpbmcgKi9cbmNvbnN0IEJBVENIX1NJWkUgPSA1MDtcblxuLyoqIFRpbWUtYmFzZWQgZmx1c2ggaW50ZXJ2YWwgKG1zKSAqL1xuY29uc3QgRkxVU0hfSU5URVJWQUxfTVMgPSAxXzAwMDtcblxuLyoqIEluaXRpYWwgYmFja29mZiBkZWxheSBvbiBmYWlsdXJlIChtcykgKi9cbmNvbnN0IElOSVRJQUxfQkFDS09GRl9NUyA9IDFfMDAwO1xuXG4vKiogTWF4aW11bSBiYWNrb2ZmIGRlbGF5IChtcykgKi9cbmNvbnN0IE1BWF9CQUNLT0ZGX01TID0gMzBfMDAwO1xuXG4vKiogR2l2ZSB1cCBmb3J3YXJkaW5nIGFmdGVyIHRoaXMgbWFueSBjb25zZWN1dGl2ZSBmYWlsdXJlcyAoIzE4NTA6IGNvbmZpZ3VyYWJsZSB2aWEgZW52KSAqL1xuY29uc3QgTUFYX0NPTlNFQ1VUSVZFX0ZBSUxVUkVTID0gZW52LkRPTExIT1VTRV9DT05TT0xFX01BWF9GT1JXQVJEX0ZBSUxVUkVTO1xuXG4vKiogSFRUUCByZXF1ZXN0IHRpbWVvdXQgKG1zKSAqL1xuY29uc3QgUkVRVUVTVF9USU1FT1VUX01TID0gNV8wMDA7XG5cbi8qKlxuICogQnVpbGQgdGhlIEhUVFAgaGVhZGVycyBmb3IgaW5nZXN0IFBPU1RzLCBpbmNsdWRpbmcgdGhlIGNvbnNvbGUgYXV0aCB0b2tlblxuICogaWYgb25lIHdhcyBwcm92aWRlZCAoIzE3ODApLiBGb2xsb3dlcnMgcmVhZCB0aGUgdG9rZW4gZnJvbSB0aGUgc2hhcmVkIHRva2VuXG4gKiBmaWxlIG9uIHN0YXJ0dXAgYW5kIHBhc3MgaXQgdG8gZWFjaCBzaW5rOyB3aGVuIHRoZSBsZWFkZXIgaGFzIGF1dGggZGlzYWJsZWRcbiAqIG9yIHRoZSB0b2tlbiBmaWxlIGlzIG1pc3NpbmcsIHRoaXMgaXMgYSBuby1vcCB0aGF0IHNlbmRzIG9ubHkgQ29udGVudC1UeXBlLlxuICovXG5mdW5jdGlvbiBidWlsZEluZ2VzdEhlYWRlcnModG9rZW46IHN0cmluZyB8IG51bGwpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgY29uc3QgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9O1xuICBpZiAodG9rZW4pIHtcbiAgICBoZWFkZXJzWydBdXRob3JpemF0aW9uJ10gPSBgQmVhcmVyICR7dG9rZW59YDtcbiAgfVxuICByZXR1cm4gaGVhZGVycztcbn1cblxuLyoqXG4gKiBJTG9nU2luayB0aGF0IGJhdGNoLVBPU1RzIGVudHJpZXMgdG8gdGhlIGxlYWRlcidzIC9hcGkvaW5nZXN0L2xvZ3MuXG4gKi9cbmV4cG9ydCBjbGFzcyBMZWFkZXJGb3J3YXJkaW5nTG9nU2luayBpbXBsZW1lbnRzIElMb2dTaW5rIHtcbiAgcHJpdmF0ZSByZWFkb25seSBidWZmZXI6IFVuaWZpZWRMb2dFbnRyeVtdID0gW107XG4gIHByaXZhdGUgZmx1c2hUaW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0SW50ZXJ2YWw+IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgYmFja29mZk1zID0gSU5JVElBTF9CQUNLT0ZGX01TO1xuICBwcml2YXRlIGZsdXNoaW5nID0gZmFsc2U7XG4gIHByaXZhdGUgY29uc2VjdXRpdmVGYWlsdXJlcyA9IDA7XG4gIHByaXZhdGUgZ2F2ZVVwID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBsZWFkZXJVcmw6IHN0cmluZyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNlc3Npb25JZDogc3RyaW5nLFxuICAgIC8qKiBPcHRpb25hbCBjb25zb2xlIGF1dGggdG9rZW4gKCMxNzgwKS4gSW5jbHVkZWQgYXMgQmVhcmVyIGhlYWRlciBvbiBpbmdlc3QgUE9TVHMuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBhdXRoVG9rZW46IHN0cmluZyB8IG51bGwgPSBudWxsLFxuICAgIC8qKiBDYWxsYmFjayBpbnZva2VkIHdoZW4gdGhlIGxlYWRlciBpcyBwcmVzdW1lZCBkZWFkIGFmdGVyIE1BWF9DT05TRUNVVElWRV9GQUlMVVJFUyAoIzE4NTApLiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgb25MZWFkZXJEZWF0aD86ICgpID0+IHZvaWQsXG4gICkge1xuICAgIHRoaXMuc2Vzc2lvbklkID0gVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUoc2Vzc2lvbklkKS5ub3JtYWxpemVkQ29udGVudDtcbiAgICB0aGlzLmZsdXNoVGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB0aGlzLmZsdXNoQnVmZmVyKCksIEZMVVNIX0lOVEVSVkFMX01TKTtcbiAgICB0aGlzLmZsdXNoVGltZXIudW5yZWYoKTtcbiAgfVxuXG4gIHdyaXRlKGVudHJ5OiBVbmlmaWVkTG9nRW50cnkpOiB2b2lkIHtcbiAgICAvLyBTdGFtcCBzZXNzaW9uIElEIGJlZm9yZSBidWZmZXJpbmdcbiAgICBjb25zdCBzdGFtcGVkOiBVbmlmaWVkTG9nRW50cnkgPSB7XG4gICAgICAuLi5lbnRyeSxcbiAgICAgIGRhdGE6IHsgLi4uZW50cnkuZGF0YSwgX3Nlc3Npb25JZDogdGhpcy5zZXNzaW9uSWQgfSxcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuYnVmZmVyLmxlbmd0aCA+PSBNQVhfQlVGRkVSX1NJWkUpIHtcbiAgICAgIC8vIEV2aWN0IG9sZGVzdCBlbnRyeSAoRklGTylcbiAgICAgIHRoaXMuYnVmZmVyLnNoaWZ0KCk7XG4gICAgfVxuICAgIHRoaXMuYnVmZmVyLnB1c2goc3RhbXBlZCk7XG5cbiAgICBpZiAodGhpcy5idWZmZXIubGVuZ3RoID49IEJBVENIX1NJWkUpIHtcbiAgICAgIHRoaXMuZmx1c2hCdWZmZXIoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBmbHVzaCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmZsdXNoQnVmZmVyKCk7XG4gIH1cblxuICBhc3luYyBjbG9zZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5mbHVzaFRpbWVyKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMuZmx1c2hUaW1lcik7XG4gICAgICB0aGlzLmZsdXNoVGltZXIgPSBudWxsO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLmZsdXNoQnVmZmVyKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZsdXNoQnVmZmVyKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmZsdXNoaW5nIHx8IHRoaXMuYnVmZmVyLmxlbmd0aCA9PT0gMCB8fCB0aGlzLmdhdmVVcCkgcmV0dXJuO1xuICAgIHRoaXMuZmx1c2hpbmcgPSB0cnVlO1xuXG4gICAgY29uc3QgYmF0Y2ggPSB0aGlzLmJ1ZmZlci5zcGxpY2UoMCwgQkFUQ0hfU0laRSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiBjb250cm9sbGVyLmFib3J0KCksIFJFUVVFU1RfVElNRU9VVF9NUyk7XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYCR7dGhpcy5sZWFkZXJVcmx9L2FwaS9pbmdlc3QvbG9nc2AsIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGhlYWRlcnM6IGJ1aWxkSW5nZXN0SGVhZGVycyh0aGlzLmF1dGhUb2tlbiksXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgc2Vzc2lvbklkOiB0aGlzLnNlc3Npb25JZCwgZW50cmllczogYmF0Y2ggfSksXG4gICAgICAgIHNpZ25hbDogY29udHJvbGxlci5zaWduYWwsXG4gICAgICB9KTtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcblxuICAgICAgaWYgKHJlc3BvbnNlLm9rKSB7XG4gICAgICAgIHRoaXMuYmFja29mZk1zID0gSU5JVElBTF9CQUNLT0ZGX01TO1xuICAgICAgICB0aGlzLmNvbnNlY3V0aXZlRmFpbHVyZXMgPSAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yZXF1ZXVlQmF0Y2goYmF0Y2gpO1xuICAgICAgICB0aGlzLmhhbmRsZUZhaWx1cmUoKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIHRoaXMucmVxdWV1ZUJhdGNoKGJhdGNoKTtcbiAgICAgIHRoaXMuaGFuZGxlRmFpbHVyZSgpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmZsdXNoaW5nID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXF1ZXVlQmF0Y2goYmF0Y2g6IFVuaWZpZWRMb2dFbnRyeVtdKTogdm9pZCB7XG4gICAgY29uc3Qgc3BhY2VBdmFpbGFibGUgPSBNQVhfQlVGRkVSX1NJWkUgLSB0aGlzLmJ1ZmZlci5sZW5ndGg7XG4gICAgaWYgKHNwYWNlQXZhaWxhYmxlID4gMCkge1xuICAgICAgY29uc3QgdG9SZXF1ZXVlID0gYmF0Y2guc2xpY2UoMCwgc3BhY2VBdmFpbGFibGUpO1xuICAgICAgdGhpcy5idWZmZXIudW5zaGlmdCguLi50b1JlcXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dnZXIud2FybihgW0ZvcndhcmRpbmdTaW5rXSBCdWZmZXIgZnVsbCAoJHtNQVhfQlVGRkVSX1NJWkV9KSwgZHJvcHBpbmcgJHtiYXRjaC5sZW5ndGh9IGVudHJpZXNgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUZhaWx1cmUoKTogdm9pZCB7XG4gICAgdGhpcy5jb25zZWN1dGl2ZUZhaWx1cmVzKys7XG5cbiAgICBpZiAodGhpcy5jb25zZWN1dGl2ZUZhaWx1cmVzID49IE1BWF9DT05TRUNVVElWRV9GQUlMVVJFUykge1xuICAgICAgaWYgKCF0aGlzLmdhdmVVcCkge1xuICAgICAgICB0aGlzLmdhdmVVcCA9IHRydWU7XG4gICAgICAgIGxvZ2dlci5pbmZvKGBbRm9yd2FyZGluZ1NpbmtdIExlYWRlciBub3QgcnVubmluZyB3ZWIgY29uc29sZSDigJQgbG9nIGZvcndhcmRpbmcgZGlzYWJsZWQgYWZ0ZXIgJHt0aGlzLmNvbnNlY3V0aXZlRmFpbHVyZXN9IGZhaWxlZCBhdHRlbXB0cy4gQnVmZmVyZWQgJHt0aGlzLmJ1ZmZlci5sZW5ndGh9IGVudHJpZXMgZGlzY2FyZGVkLmApO1xuICAgICAgICB0aGlzLmJ1ZmZlci5sZW5ndGggPSAwO1xuICAgICAgICBpZiAodGhpcy5mbHVzaFRpbWVyKSB7XG4gICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmZsdXNoVGltZXIpO1xuICAgICAgICAgIHRoaXMuZmx1c2hUaW1lciA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgLy8gTm90aWZ5IHRoZSBvcmNoZXN0cmF0b3Igc28gaXQgY2FuIGF0dGVtcHQgZm9sbG93ZXItdG8tbGVhZGVyIHByb21vdGlvbiAoIzE4NTApLlxuICAgICAgICAvLyBGaXJlZCBhc3luY2hyb25vdXNseSBzbyBoYW5kbGVGYWlsdXJlIGNvbXBsZXRlcyBjbGVhbmx5IGJlZm9yZSBwcm9tb3Rpb24gcnVucy5cbiAgICAgICAgaWYgKHRoaXMub25MZWFkZXJEZWF0aCkge1xuICAgICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHRoaXMub25MZWFkZXJEZWF0aCEoKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsb2dnZXIuZGVidWcoYFtGb3J3YXJkaW5nU2lua10gTGVhZGVyIHVucmVhY2hhYmxlLCBiYWNrb2ZmICR7dGhpcy5iYWNrb2ZmTXN9bXMgKGF0dGVtcHQgJHt0aGlzLmNvbnNlY3V0aXZlRmFpbHVyZXN9LyR7TUFYX0NPTlNFQ1VUSVZFX0ZBSUxVUkVTfSwgYnVmZmVyZWQ6ICR7dGhpcy5idWZmZXIubGVuZ3RofSlgKTtcbiAgICB0aGlzLmJhY2tvZmZNcyA9IE1hdGgubWluKHRoaXMuYmFja29mZk1zICogMiwgTUFYX0JBQ0tPRkZfTVMpO1xuICB9XG59XG5cbi8qKlxuICogRm9yd2FyZHMgbWV0cmljIHNuYXBzaG90cyB0byB0aGUgbGVhZGVyJ3MgL2FwaS9pbmdlc3QvbWV0cmljcy5cbiAqL1xuZXhwb3J0IGNsYXNzIExlYWRlckZvcndhcmRpbmdNZXRyaWNzU2luayB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbGVhZGVyVXJsOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSByZWFkb25seSBzZXNzaW9uSWQ6IHN0cmluZyxcbiAgICAvKiogT3B0aW9uYWwgY29uc29sZSBhdXRoIHRva2VuICgjMTc4MCkuIEluY2x1ZGVkIGFzIEJlYXJlciBoZWFkZXIgb24gaW5nZXN0IFBPU1RzLiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgYXV0aFRva2VuOiBzdHJpbmcgfCBudWxsID0gbnVsbCxcbiAgKSB7fVxuXG4gIGFzeW5jIG9uU25hcHNob3Qoc25hcHNob3Q6IE1ldHJpY1NuYXBzaG90KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiBjb250cm9sbGVyLmFib3J0KCksIFJFUVVFU1RfVElNRU9VVF9NUyk7XG5cbiAgICAgIGF3YWl0IGZldGNoKGAke3RoaXMubGVhZGVyVXJsfS9hcGkvaW5nZXN0L21ldHJpY3NgLCB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBoZWFkZXJzOiBidWlsZEluZ2VzdEhlYWRlcnModGhpcy5hdXRoVG9rZW4pLFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IHNlc3Npb25JZDogdGhpcy5zZXNzaW9uSWQsIHNuYXBzaG90IH0pLFxuICAgICAgICBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsLFxuICAgICAgfSk7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICBsb2dnZXIuZGVidWcoJ1tGb3J3YXJkaW5nU2lua10gRmFpbGVkIHRvIGZvcndhcmQgbWV0cmljcyBzbmFwc2hvdCcpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFNlbmRzIHNlc3Npb24gbGlmZWN5Y2xlIGV2ZW50cyB0byB0aGUgbGVhZGVyLlxuICovXG5leHBvcnQgY2xhc3MgU2Vzc2lvbkhlYXJ0YmVhdCB7XG4gIHByaXZhdGUgaGVhcnRiZWF0VGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldEludGVydmFsPiB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbGVhZGVyVXJsOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSByZWFkb25seSBzZXNzaW9uSWQ6IHN0cmluZyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBpZDogbnVtYmVyLFxuICAgIC8qKiBPcHRpb25hbCBjb25zb2xlIGF1dGggdG9rZW4gKCMxNzgwKS4gSW5jbHVkZWQgYXMgQmVhcmVyIGhlYWRlciBvbiBpbmdlc3QgUE9TVHMuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBhdXRoVG9rZW46IHN0cmluZyB8IG51bGwgPSBudWxsLFxuICApIHt9XG5cbiAgLyoqIE5vdGlmeSB0aGUgbGVhZGVyIHRoYXQgdGhpcyBzZXNzaW9uIGhhcyBzdGFydGVkICovXG4gIGFzeW5jIHN0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuc2VuZEV2ZW50KCdzdGFydGVkJyk7XG5cbiAgICB0aGlzLmhlYXJ0YmVhdFRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgdGhpcy5zZW5kRXZlbnQoJ2hlYXJ0YmVhdCcpLmNhdGNoKCgpID0+IHt9KTtcbiAgICB9LCAxMF8wMDApO1xuICAgIHRoaXMuaGVhcnRiZWF0VGltZXIudW5yZWYoKTtcbiAgfVxuXG4gIC8qKiBOb3RpZnkgdGhlIGxlYWRlciB0aGF0IHRoaXMgc2Vzc2lvbiBpcyBzdG9wcGluZyAqL1xuICBhc3luYyBzdG9wKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmhlYXJ0YmVhdFRpbWVyKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMuaGVhcnRiZWF0VGltZXIpO1xuICAgICAgdGhpcy5oZWFydGJlYXRUaW1lciA9IG51bGw7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuc2VuZEV2ZW50KCdzdG9wcGVkJyk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlbmRFdmVudChldmVudDogJ3N0YXJ0ZWQnIHwgJ3N0b3BwZWQnIHwgJ2hlYXJ0YmVhdCcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICAgIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IGNvbnRyb2xsZXIuYWJvcnQoKSwgUkVRVUVTVF9USU1FT1VUX01TKTtcblxuICAgICAgYXdhaXQgZmV0Y2goYCR7dGhpcy5sZWFkZXJVcmx9L2FwaS9pbmdlc3Qvc2Vzc2lvbmAsIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGhlYWRlcnM6IGJ1aWxkSW5nZXN0SGVhZGVycyh0aGlzLmF1dGhUb2tlbiksXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICBzZXNzaW9uSWQ6IHRoaXMuc2Vzc2lvbklkLFxuICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgIHBpZDogdGhpcy5waWQsXG4gICAgICAgICAgc3RhcnRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgc2VydmVyVmVyc2lvbjogUEFDS0FHRV9WRVJTSU9OLFxuICAgICAgICAgIGNvbnNvbGVQcm90b2NvbFZlcnNpb246IENPTlNPTEVfUFJPVE9DT0xfVkVSU0lPTixcbiAgICAgICAgfSksXG4gICAgICAgIHNpZ25hbDogY29udHJvbGxlci5zaWduYWwsXG4gICAgICB9KTtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgW1Nlc3Npb25IZWFydGJlYXRdIEZhaWxlZCB0byBzZW5kICR7ZXZlbnR9IGV2ZW50YCk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PromotionManager.d.ts","sourceRoot":"","sources":["../../../src/web/console/PromotionManager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAKL,KAAK,cAAc,
|
|
1
|
+
{"version":3,"file":"PromotionManager.d.ts","sourceRoot":"","sources":["../../../src/web/console/PromotionManager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAKL,KAAK,cAAc,EACpB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC3F,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAIjE,qBAAa,gBAAgB;IAKzB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAK9B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAXlC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAK;gBAGF,OAAO,EAAE,qBAAqB,EAC9B,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,CAC9B,OAAO,EAAE,qBAAqB,EAC9B,QAAQ,EAAE,cAAc,EACxB,WAAW,EAAE,MAAM,KAChB,OAAO,CAAC,OAAO,CAAC,EACJ,eAAe,EAAE,CAChC,OAAO,EAAE,qBAAqB,EAC9B,QAAQ,EAAE,cAAc,EACxB,WAAW,EAAE,MAAM,KAChB,OAAO,CAAC,OAAO,CAAC;IAGvB;;;OAGG;IACG,OAAO,CACX,cAAc,EAAE,uBAAuB,EACvC,gBAAgB,EAAE,gBAAgB,GACjC,OAAO,CAAC,IAAI,CAAC;CAwDjB"}
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* with each other's promotion budgets.
|
|
11
11
|
*/
|
|
12
12
|
import { logger } from '../../utils/logger.js';
|
|
13
|
-
import { deleteLeaderLock, claimLeadership, readLeaderLock,
|
|
13
|
+
import { deleteLeaderLock, claimLeadership, readLeaderLock, createLeaderInfo, } from './LeaderElection.js';
|
|
14
14
|
const MAX_PROMOTION_ATTEMPTS = 3;
|
|
15
15
|
export class PromotionManager {
|
|
16
16
|
options;
|
|
@@ -48,15 +48,7 @@ export class PromotionManager {
|
|
|
48
48
|
await sessionHeartbeat.stop();
|
|
49
49
|
await forwardingSink.close();
|
|
50
50
|
await deleteLeaderLock();
|
|
51
|
-
const
|
|
52
|
-
const myInfo = {
|
|
53
|
-
version: LOCK_VERSION,
|
|
54
|
-
pid: process.pid,
|
|
55
|
-
port: this.consolePort,
|
|
56
|
-
sessionId: this.options.sessionId,
|
|
57
|
-
startedAt: now,
|
|
58
|
-
heartbeat: now,
|
|
59
|
-
};
|
|
51
|
+
const myInfo = createLeaderInfo(this.options.sessionId, this.consolePort);
|
|
60
52
|
const claimed = await claimLeadership(myInfo);
|
|
61
53
|
const durationMs = Date.now() - startMs;
|
|
62
54
|
if (claimed) {
|
|
@@ -91,4 +83,4 @@ export class PromotionManager {
|
|
|
91
83
|
}
|
|
92
84
|
}
|
|
93
85
|
}
|
|
94
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
86
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHJvbW90aW9uTWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy93ZWIvY29uc29sZS9Qcm9tb3Rpb25NYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7O0dBVUc7QUFFSCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDL0MsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixlQUFlLEVBQ2YsY0FBYyxFQUNkLGdCQUFnQixHQUVqQixNQUFNLHFCQUFxQixDQUFDO0FBSTdCLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxDQUFDO0FBRWpDLE1BQU0sT0FBTyxnQkFBZ0I7SUFLUjtJQUNBO0lBQ0E7SUFLQTtJQVhYLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDbkIsUUFBUSxHQUFHLENBQUMsQ0FBQztJQUVyQixZQUNtQixPQUE4QixFQUM5QixXQUFtQixFQUNuQixhQUlJLEVBQ0osZUFJSTtRQVhKLFlBQU8sR0FBUCxPQUFPLENBQXVCO1FBQzlCLGdCQUFXLEdBQVgsV0FBVyxDQUFRO1FBQ25CLGtCQUFhLEdBQWIsYUFBYSxDQUlUO1FBQ0osb0JBQWUsR0FBZixlQUFlLENBSVg7SUFDcEIsQ0FBQztJQUVKOzs7T0FHRztJQUNILEtBQUssQ0FBQyxPQUFPLENBQ1gsY0FBdUMsRUFDdkMsZ0JBQWtDO1FBRWxDLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3BCLE1BQU0sQ0FBQyxJQUFJLENBQUMsNkRBQTZELENBQUMsQ0FBQztZQUMzRSxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNoQixJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsc0JBQXNCLEVBQUUsQ0FBQztZQUMzQyxNQUFNLENBQUMsS0FBSyxDQUFDLDhCQUE4QixJQUFJLENBQUMsUUFBUSxpQkFBaUIsc0JBQXNCLGVBQWUsQ0FBQyxDQUFDO1lBQ2hILE9BQU87UUFD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ZW50IjpbIi8qKlxuICogRm9sbG93ZXItdG8tbGVhZGVyIHByb21vdGlvbiBtYW5hZ2VyICgjMTg1MCkuXG4gKlxuICogSGFuZGxlcyB0aGUgbGlmZWN5Y2xlIG9mIHByb21vdGluZyBhIGZvbGxvd2VyIHByb2Nlc3MgdG8gbGVhZGVyIHdoZW4gdGhlXG4gKiBjdXJyZW50IGxlYWRlciBiZWNvbWVzIHVucmVhY2hhYmxlLiBFeHRyYWN0ZWQgZnJvbSBVbmlmaWVkQ29uc29sZS50cyB0b1xuICogcmVkdWNlIGNvbXBsZXhpdHkgYW5kIGFsbG93IHBlci1pbnN0YW5jZSBzdGF0ZSB0cmFja2luZy5cbiAqXG4gKiBFYWNoIFByb21vdGlvbk1hbmFnZXIgaW5zdGFuY2UgdHJhY2tzIGl0cyBvd24gYXR0ZW1wdCBjb3VudGVyLCBzbyBtdWx0aXBsZVxuICogZm9sbG93ZXJzIGluIHRoZSBzYW1lIHByb2Nlc3MgKHVubGlrZWx5IGJ1dCBwb3NzaWJsZSkgZG9uJ3QgaW50ZXJmZXJlXG4gKiB3aXRoIGVhY2ggb3RoZXIncyBwcm9tb3Rpb24gYnVkZ2V0cy5cbiAqL1xuXG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi8uLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHtcbiAgZGVsZXRlTGVhZGVyTG9jayxcbiAgY2xhaW1MZWFkZXJzaGlwLFxuICByZWFkTGVhZGVyTG9jayxcbiAgY3JlYXRlTGVhZGVySW5mbyxcbiAgdHlwZSBFbGVjdGlvblJlc3VsdCxcbn0gZnJvbSAnLi9MZWFkZXJFbGVjdGlvbi5qcyc7XG5pbXBvcnQgdHlwZSB7IExlYWRlckZvcndhcmRpbmdMb2dTaW5rLCBTZXNzaW9uSGVhcnRiZWF0IH0gZnJvbSAnLi9MZWFkZXJGb3J3YXJkaW5nU2luay5qcyc7XG5pbXBvcnQgdHlwZSB7IFVuaWZpZWRDb25zb2xlT3B0aW9ucyB9IGZyb20gJy4vVW5pZmllZENvbnNvbGUuanMnO1xuXG5jb25zdCBNQVhfUFJPTU9USU9OX0FUVEVNUFRTID0gMztcblxuZXhwb3J0IGNsYXNzIFByb21vdGlvbk1hbmFnZXIge1xuICBwcml2YXRlIGluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgcHJpdmF0ZSBhdHRlbXB0cyA9IDA7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBVbmlmaWVkQ29uc29sZU9wdGlvbnMsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb25zb2xlUG9ydDogbnVtYmVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3RhcnRBc0xlYWRlcjogKFxuICAgICAgb3B0aW9uczogVW5pZmllZENvbnNvbGVPcHRpb25zLFxuICAgICAgZWxlY3Rpb246IEVsZWN0aW9uUmVzdWx0LFxuICAgICAgY29uc29sZVBvcnQ6IG51bWJlcixcbiAgICApID0+IFByb21pc2U8dW5rbm93bj4sXG4gICAgcHJpdmF0ZSByZWFkb25seSBzdGFydEFzRm9sbG93ZXI6IChcbiAgICAgIG9wdGlvbnM6IFVuaWZpZWRDb25zb2xlT3B0aW9ucyxcbiAgICAgIGVsZWN0aW9uOiBFbGVjdGlvblJlc3VsdCxcbiAgICAgIGNvbnNvbGVQb3J0OiBudW1iZXIsXG4gICAgKSA9PiBQcm9taXNlPHVua25vd24+LFxuICApIHt9XG5cbiAgLyoqXG4gICAqIEF0dGVtcHQgcHJvbW90aW9uLiBTYWZlIHRvIGNhbGwgZnJvbSB0aGUgRm9yd2FyZGluZ1Npbmsgb25MZWFkZXJEZWF0aFxuICAgKiBjYWxsYmFjayDigJQgZ3VhcmRzIGFnYWluc3QgY29uY3VycmVudCBhbmQgZXhjZXNzaXZlIGF0dGVtcHRzLlxuICAgKi9cbiAgYXN5bmMgcHJvbW90ZShcbiAgICBmb3J3YXJkaW5nU2luazogTGVhZGVyRm9yd2FyZGluZ0xvZ1NpbmssXG4gICAgc2Vzc2lvbkhlYXJ0YmVhdDogU2Vzc2lvbkhlYXJ0YmVhdCxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuaW5Qcm9ncmVzcykge1xuICAgICAgbG9nZ2VyLmluZm8oJ1tQcm9tb3Rpb25NYW5hZ2VyXSBQcm9tb3Rpb24gYWxyZWFkeSBpbiBwcm9ncmVzcyDigJQgc2tpcHBpbmcnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmF0dGVtcHRzKys7XG4gICAgaWYgKHRoaXMuYXR0ZW1wdHMgPiBNQVhfUFJPTU9USU9OX0FUVEVNUFRTKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYFtQcm9tb3Rpb25NYW5hZ2VyXSBBdHRlbXB0ICR7dGhpcy5hdHRlbXB0c30gZXhjZWVkcyBtYXggKCR7TUFYX1BST01PVElPTl9BVFRFTVBUU30pIOKAlCBnaXZpbmcgdXBgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmluUHJvZ3Jlc3MgPSB0cnVlO1xuICAgIGNvbnN0IHN0YXJ0TXMgPSBEYXRlLm5vdygpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxvZ2dlci53YXJuKGBbUHJvbW90aW9uTWFuYWdlcl0gTGVhZGVyIGRlYXRoIGRldGVjdGVkIOKAlCBwcm9tb3Rpb24gYXR0ZW1wdCAke3RoaXMuYXR0ZW1wdHN9LyR7TUFYX1BST01PVElPTl9BVFRFTVBUU31gLCB7XG4gICAgICAgIHNlc3Npb25JZDogdGhpcy5vcHRpb25zLnNlc3Npb25JZCwgcGlkOiBwcm9jZXNzLnBpZCwgcG9ydDogdGhpcy5jb25zb2xlUG9ydCwgYXR0ZW1wdDogdGhpcy5hdHRlbXB0cyxcbiAgICAgIH0pO1xuXG4gICAgICBhd2FpdCBzZXNzaW9uSGVhcnRiZWF0LnN0b3AoKTtcbiAgICAgIGF3YWl0IGZvcndhcmRpbmdTaW5rLmNsb3NlKCk7XG4gICAgICBhd2FpdCBkZWxldGVMZWFkZXJMb2NrKCk7XG5cbiAgICAgIGNvbnN0IG15SW5mbyA9IGNyZWF0ZUxlYWRlckluZm8odGhpcy5vcHRpb25zLnNlc3Npb25JZCwgdGhpcy5jb25zb2xlUG9ydCk7XG5cbiAgICAgIGNvbnN0IGNsYWltZWQgPSBhd2FpdCBjbGFpbUxlYWRlcnNoaXAobXlJbmZvKTtcbiAgICAgIGNvbnN0IGR1cmF0aW9uTXMgPSBEYXRlLm5vdygpIC0gc3RhcnRNcztcblxuICAgICAgaWYgKGNsYWltZWQpIHtcbiAgICAgICAgbG9nZ2VyLmluZm8oJ1tQcm9tb3Rpb25NYW5hZ2VyXSBQcm9tb3Rpb24gc3VjY2VlZGVkIOKAlCBzdGFydGluZyBhcyBsZWFkZXInLCB7XG4gICAgICAgICAgc2Vzc2lvbklkOiB0aGlzLm9wdGlvbnMuc2Vzc2lvbklkLCBwb3J0OiB0aGlzLmNvbnNvbGVQb3J0LCBkdXJhdGlvbk1zLCBhdHRlbXB0OiB0aGlzLmF0dGVtcHRzLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZWxlY3Rpb246IEVsZWN0aW9uUmVzdWx0ID0geyByb2xlOiAnbGVhZGVyJywgbGVhZGVySW5mbzogbXlJbmZvIH07XG4gICAgICAgIGF3YWl0IHRoaXMuc3RhcnRBc0xlYWRlcih0aGlzLm9wdGlvbnMsIGVsZWN0aW9uLCB0aGlzLmNvbnNvbGVQb3J0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKCdbUHJvbW90aW9uTWFuYWdlcl0gTG9zdCBwcm9tb3Rpb24gcmFjZSDigJQgZm9sbG93aW5nIG5ldyBsZWFkZXInLCB7XG4gICAgICAgICAgc2Vzc2lvbklkOiB0aGlzLm9wdGlvbnMuc2Vzc2lvbklkLCBkdXJhdGlvbk1zLCBhdHRlbXB0OiB0aGlzLmF0dGVtcHRzLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgbmV3TGVhZGVyID0gYXdhaXQgcmVhZExlYWRlckxvY2soKTtcbiAgICAgICAgaWYgKG5ld0xlYWRlcikge1xuICAgICAgICAgIGNvbnN0IGVsZWN0aW9uOiBFbGVjdGlvblJlc3VsdCA9IHsgcm9sZTogJ2ZvbGxvd2VyJywgbGVhZGVySW5mbzogbmV3TGVhZGVyIH07XG4gICAgICAgICAgYXdhaXQgdGhpcy5zdGFydEFzRm9sbG93ZXIodGhpcy5vcHRpb25zLCBlbGVjdGlvbiwgdGhpcy5jb25zb2xlUG9ydCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbG9nZ2VyLmVycm9yKCdbUHJvbW90aW9uTWFuYWdlcl0gTm8gbGVhZGVyIGF2YWlsYWJsZSBhZnRlciBsb3N0IHJhY2UnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdbUHJvbW90aW9uTWFuYWdlcl0gUHJvbW90aW9uIGZhaWxlZCcsIHtcbiAgICAgICAgZXJyb3I6IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKSxcbiAgICAgICAgZHVyYXRpb25NczogRGF0ZS5ub3coKSAtIHN0YXJ0TXMsIGF0dGVtcHQ6IHRoaXMuYXR0ZW1wdHMsXG4gICAgICB9KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5pblByb2dyZXNzID0gZmFsc2U7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -8,6 +8,16 @@
|
|
|
8
8
|
* Extracted to a standalone module so it can be tested without importing
|
|
9
9
|
* the full Express server and its dependency chain.
|
|
10
10
|
*/
|
|
11
|
+
export interface KillStaleProcessOutcome {
|
|
12
|
+
killed: boolean;
|
|
13
|
+
reason: 'inspect_failed' | 'different_user' | 'not_dollhouse_process' | 'active_host_parent' | 'terminated' | 'already_dead' | 'still_alive' | 'signal_failed';
|
|
14
|
+
pid: number;
|
|
15
|
+
parentPid?: number;
|
|
16
|
+
command?: string;
|
|
17
|
+
parentCommand?: string;
|
|
18
|
+
detail?: string;
|
|
19
|
+
}
|
|
20
|
+
export declare function isRecognizedMcpHostParent(command: string): boolean;
|
|
11
21
|
/**
|
|
12
22
|
* Find the PID of the process listening on a given port.
|
|
13
23
|
* Uses lsof on macOS/Linux. Returns null if not found or on error.
|
|
@@ -26,6 +36,7 @@ export declare function findPidOnPort(port: number): Promise<number | null>;
|
|
|
26
36
|
* before escalating to SIGKILL. Total worst case: ~4s.
|
|
27
37
|
*/
|
|
28
38
|
export declare function killStaleProcess(pid: number, port: number): Promise<boolean>;
|
|
39
|
+
export declare function killStaleProcessDetailed(pid: number, port: number): Promise<KillStaleProcessOutcome>;
|
|
29
40
|
/**
|
|
30
41
|
* Detect and recover from a stale process squatting on the port.
|
|
31
42
|
* Compares the port holder's PID against the leader lock file to determine
|