@rudderstack/integrations-lib 0.2.39 → 0.2.40

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.
@@ -1,4 +1,3 @@
1
1
  export { ClusterManager, ClusterManagerEmitter } from './manager';
2
2
  export type { ClusterManagerOptions, ClusterManagerEvents, WorkerState, PingMessage, PongMessage, ShutdownMessage, IPCMessage, } from './types';
3
- export { validateAndDefaultOptions, delay, timeout, safeExecute } from './utils';
4
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cluster/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAClE,YAAY,EACV,qBAAqB,EACrB,oBAAoB,EACpB,WAAW,EACX,WAAW,EACX,WAAW,EACX,eAAe,EACf,UAAU,GACX,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,yBAAyB,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cluster/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAClE,YAAY,EACV,qBAAqB,EACrB,oBAAoB,EACpB,WAAW,EACX,WAAW,EACX,WAAW,EACX,eAAe,EACf,UAAU,GACX,MAAM,SAAS,CAAC"}
@@ -1,11 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.safeExecute = exports.timeout = exports.delay = exports.validateAndDefaultOptions = exports.ClusterManager = void 0;
3
+ exports.ClusterManager = void 0;
4
4
  var manager_1 = require("./manager");
5
5
  Object.defineProperty(exports, "ClusterManager", { enumerable: true, get: function () { return manager_1.ClusterManager; } });
6
- var utils_1 = require("./utils");
7
- Object.defineProperty(exports, "validateAndDefaultOptions", { enumerable: true, get: function () { return utils_1.validateAndDefaultOptions; } });
8
- Object.defineProperty(exports, "delay", { enumerable: true, get: function () { return utils_1.delay; } });
9
- Object.defineProperty(exports, "timeout", { enumerable: true, get: function () { return utils_1.timeout; } });
10
- Object.defineProperty(exports, "safeExecute", { enumerable: true, get: function () { return utils_1.safeExecute; } });
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2x1c3Rlci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxQ0FBa0U7QUFBekQseUdBQUEsY0FBYyxPQUFBO0FBVXZCLGlDQUFpRjtBQUF4RSxrSEFBQSx5QkFBeUIsT0FBQTtBQUFFLDhGQUFBLEtBQUssT0FBQTtBQUFFLGdHQUFBLE9BQU8sT0FBQTtBQUFFLG9HQUFBLFdBQVcsT0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IENsdXN0ZXJNYW5hZ2VyLCBDbHVzdGVyTWFuYWdlckVtaXR0ZXIgfSBmcm9tICcuL21hbmFnZXInO1xuZXhwb3J0IHR5cGUge1xuICBDbHVzdGVyTWFuYWdlck9wdGlvbnMsXG4gIENsdXN0ZXJNYW5hZ2VyRXZlbnRzLFxuICBXb3JrZXJTdGF0ZSxcbiAgUGluZ01lc3NhZ2UsXG4gIFBvbmdNZXNzYWdlLFxuICBTaHV0ZG93bk1lc3NhZ2UsXG4gIElQQ01lc3NhZ2UsXG59IGZyb20gJy4vdHlwZXMnO1xuZXhwb3J0IHsgdmFsaWRhdGVBbmREZWZhdWx0T3B0aW9ucywgZGVsYXksIHRpbWVvdXQsIHNhZmVFeGVjdXRlIH0gZnJvbSAnLi91dGlscyc7XG4iXX0=
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2x1c3Rlci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxQ0FBa0U7QUFBekQseUdBQUEsY0FBYyxPQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgQ2x1c3Rlck1hbmFnZXIsIENsdXN0ZXJNYW5hZ2VyRW1pdHRlciB9IGZyb20gJy4vbWFuYWdlcic7XG5leHBvcnQgdHlwZSB7XG4gIENsdXN0ZXJNYW5hZ2VyT3B0aW9ucyxcbiAgQ2x1c3Rlck1hbmFnZXJFdmVudHMsXG4gIFdvcmtlclN0YXRlLFxuICBQaW5nTWVzc2FnZSxcbiAgUG9uZ01lc3NhZ2UsXG4gIFNodXRkb3duTWVzc2FnZSxcbiAgSVBDTWVzc2FnZSxcbn0gZnJvbSAnLi90eXBlcyc7XG4iXX0=
@@ -89,6 +89,8 @@ export declare class ClusterManager extends EventEmitter {
89
89
  * Handles worker exit events
90
90
  */
91
91
  private handleWorkerExit;
92
+ private getWorkerId;
93
+ private getCurrentWorkerId;
92
94
  /**
93
95
  * Handles unexpected worker exits with restart logic
94
96
  */
@@ -1 +1 @@
1
- {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/cluster/manager.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EAMrB,MAAM,SAAS,CAAC;AAGjB;;;;;;;;;GASG;AACH,qBAAa,cAAe,SAAQ,YAAY;IAC9C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkC;IAE1D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkC;IAE1D,OAAO,CAAC,OAAO,CAAS;IAExB,OAAO,CAAC,cAAc,CAAS;IAE/B,OAAO,CAAC,eAAe,CAA8B;IAErD,OAAO,CAAC,mBAAmB,CAA+B;IAE1D,OAAO,CAAC,cAAc,CAAyC;gBAEnD,OAAO,GAAE,qBAA0B;IAM/C;;;;OAIG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IASnC;;OAEG;IACI,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqB/C;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAU3B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAO5B;;OAEG;YACW,YAAY;IAoB1B;;OAEG;YACW,WAAW;IAUzB;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAWjC;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAgBlC;;OAEG;IACH,OAAO,CAAC,WAAW;IAoBnB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAiB3B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAWxB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAM7B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAO5B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAkB1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAkBxB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA4BzB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAoBxB;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAsBlC;;OAEG;YACW,eAAe;IAqB7B;;OAEG;YACW,kBAAkB;IAwChC;;OAEG;YACW,uBAAuB;IAOrC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAU3B;;OAEG;YACW,cAAc;IAqB5B;;OAEG;IACI,cAAc,IAAI,MAAM;IAI/B;;OAEG;IACI,aAAa,IAAI,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IAQhF;;OAEG;IACI,SAAS,IAAI,OAAO;IAI3B;;OAEG;IACI,UAAU,IAAI,OAAO;CAG7B;AAGD,MAAM,WAAW,qBAAqB;IACpC,EAAE,CAAC,CAAC,SAAS,MAAM,oBAAoB,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAC5F,IAAI,CAAC,CAAC,SAAS,MAAM,oBAAoB,EACvC,KAAK,EAAE,CAAC,EACR,GAAG,IAAI,EAAE,UAAU,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,GAC3C,OAAO,CAAC;CACZ"}
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/cluster/manager.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EAMrB,MAAM,SAAS,CAAC;AAGjB;;;;;;;;;GASG;AACH,qBAAa,cAAe,SAAQ,YAAY;IAC9C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkC;IAE1D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkC;IAE1D,OAAO,CAAC,OAAO,CAAS;IAExB,OAAO,CAAC,cAAc,CAAS;IAE/B,OAAO,CAAC,eAAe,CAA8B;IAErD,OAAO,CAAC,mBAAmB,CAA+B;IAE1D,OAAO,CAAC,cAAc,CAAyC;gBAEnD,OAAO,GAAE,qBAA0B;IAM/C;;;;OAIG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IASnC;;OAEG;IACI,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqB/C;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAU3B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAO5B;;OAEG;YACW,YAAY;IAqB1B;;OAEG;YACW,WAAW;IAUzB;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAWjC;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAgBlC;;OAEG;IACH,OAAO,CAAC,WAAW;IAuBnB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAmB3B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAWxB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAM7B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAO5B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAkB1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAkBxB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAiCzB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAsBxB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,kBAAkB;IAM1B;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAsBlC;;OAEG;YACW,eAAe;IA2B7B;;OAEG;YACW,kBAAkB;IAwChC;;OAEG;YACW,uBAAuB;IAOrC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAU3B;;OAEG;YACW,cAAc;IAwB5B;;OAEG;IACI,cAAc,IAAI,MAAM;IAI/B;;OAEG;IACI,aAAa,IAAI,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IAQhF;;OAEG;IACI,SAAS,IAAI,OAAO;IAI3B;;OAEG;IACI,UAAU,IAAI,OAAO;CAG7B;AAGD,MAAM,WAAW,qBAAqB;IACpC,EAAE,CAAC,CAAC,SAAS,MAAM,oBAAoB,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAC5F,IAAI,CAAC,CAAC,SAAS,MAAM,oBAAoB,EACvC,KAAK,EAAE,CAAC,EACR,GAAG,IAAI,EAAE,UAAU,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,GAC3C,OAAO,CAAC;CACZ"}
@@ -125,7 +125,8 @@ class ClusterManager extends events_1.EventEmitter {
125
125
  this.setupClusterEventHandlers();
126
126
  // Spawn initial workers
127
127
  for (let i = 0; i < this.options.numWorkers; i += 1) {
128
- this.spawnWorker();
128
+ const workerId = i + 1; // Worker IDs start from 1
129
+ this.spawnWorker(workerId);
129
130
  }
130
131
  // Start health monitoring
131
132
  this.startHealthMonitoring();
@@ -134,7 +135,7 @@ class ClusterManager extends events_1.EventEmitter {
134
135
  * Starts a worker process
135
136
  */
136
137
  async startWorker() {
137
- logger.info(`Worker ${this.options.cluster.worker?.id} (pid: ${process.pid}) starting`);
138
+ logger.info(`Worker ${this.getCurrentWorkerId()} (pid: ${process.pid}) starting`);
138
139
  // Set up IPC message handlers
139
140
  this.setupWorkerMessageHandlers();
140
141
  // Execute worker initialization function, any error will be propagated
@@ -148,7 +149,7 @@ class ClusterManager extends events_1.EventEmitter {
148
149
  this.handleWorkerExit(worker, code, signal);
149
150
  });
150
151
  this.options.cluster.on('online', (worker) => {
151
- logger.info(`Worker ${worker.id} (pid: ${worker.process.pid}) is online`);
152
+ logger.info(`Worker ${this.getWorkerId(worker)} (pid: ${worker.process.pid}) is online`);
152
153
  this.emit('worker:started', worker);
153
154
  });
154
155
  }
@@ -173,9 +174,12 @@ class ClusterManager extends events_1.EventEmitter {
173
174
  /**
174
175
  * Spawns a new worker and sets up its state
175
176
  */
176
- spawnWorker() {
177
- const worker = this.options.cluster.fork();
177
+ spawnWorker(id) {
178
+ const worker = this.options.cluster.fork({
179
+ WORKER_ID: id,
180
+ });
178
181
  const workerState = {
182
+ id,
179
183
  worker,
180
184
  restartCount: 0,
181
185
  lastPing: Date.now(),
@@ -202,7 +206,7 @@ class ClusterManager extends events_1.EventEmitter {
202
206
  workerState.pendingPing = false;
203
207
  break;
204
208
  default:
205
- logger.warn(`Received unknown message type from worker ${worker.process.pid}: ${message.type}`);
209
+ logger.warn(`Received unknown message type from worker ${this.getWorkerId(worker)} (pid: ${worker.process.pid}): ${message.type}`);
206
210
  break;
207
211
  }
208
212
  }
@@ -268,14 +272,14 @@ class ClusterManager extends events_1.EventEmitter {
268
272
  workerState.worker.send(pingMessage);
269
273
  }
270
274
  catch (error) {
271
- logger.error(`Failed to send ping to worker ${workerState.worker.process.pid}: ${error instanceof Error ? error.message : String(error)}`);
275
+ logger.error(`Failed to send ping to worker ${workerState.id} (pid: ${workerState.worker.process.pid}): ${error instanceof Error ? error.message : String(error)}`);
272
276
  }
273
277
  }
274
278
  /**
275
279
  * Handles a stuck worker
276
280
  */
277
281
  handleStuckWorker(workerState) {
278
- logger.error(`Worker ${workerState.worker.id} (pid: ${workerState.worker.process.pid}) is stuck, killing it`);
282
+ logger.error(`Worker ${workerState.id} (pid: ${workerState.worker.process.pid}) is stuck, killing it`);
279
283
  this.emit('worker:stuck', workerState.worker);
280
284
  // Remove worker state
281
285
  this.workers.delete(workerState.worker.id);
@@ -284,11 +288,16 @@ class ClusterManager extends events_1.EventEmitter {
284
288
  // Determine if we should spawn a replacement
285
289
  const shouldSpawn = this.options.stuckWorkerRespawnFunc(workerState.worker);
286
290
  if (shouldSpawn && !this.isShuttingDown) {
287
- logger.info(`Spawning replacement worker for stuck worker ${workerState.worker.id} (pid: ${workerState.worker.process.pid})`);
288
- this.spawnWorker();
291
+ logger.info(`Spawning replacement worker for stuck worker ${workerState.id} (pid: ${workerState.worker.process.pid})`);
292
+ const { restartCount } = workerState; // Preserve restart count
293
+ const newWorker = this.spawnWorker(workerState.id);
294
+ const newWorkerState = this.workers.get(newWorker.id);
295
+ if (newWorkerState) {
296
+ newWorkerState.restartCount = restartCount;
297
+ }
289
298
  }
290
299
  else {
291
- logger.error(`Triggering cluster shutdown due to stuck worker ${workerState.worker.id} (pid: ${workerState.worker.process.pid})`);
300
+ logger.error(`Triggering cluster shutdown due to stuck worker ${workerState.id} (pid: ${workerState.worker.process.pid})`);
292
301
  this.shutdown('STUCK_WORKER');
293
302
  }
294
303
  }
@@ -296,7 +305,7 @@ class ClusterManager extends events_1.EventEmitter {
296
305
  * Handles worker exit events
297
306
  */
298
307
  handleWorkerExit(worker, code, signal) {
299
- logger.info(`Worker ${worker.id} (pid: ${worker.process.pid}) died with code ${code} and signal ${signal}`);
308
+ logger.info(`Worker ${this.getWorkerId(worker)} (pid: ${worker.process.pid}) died with code ${code} and signal ${signal}`);
300
309
  this.emit('worker:died', worker, code, signal);
301
310
  const workerState = this.workers.get(worker.id);
302
311
  if (!workerState)
@@ -309,14 +318,21 @@ class ClusterManager extends events_1.EventEmitter {
309
318
  // Handle unexpected exit
310
319
  this.handleUnexpectedWorkerExit(workerState);
311
320
  }
321
+ getWorkerId(worker) {
322
+ return this.workers.get(worker.id)?.id ?? worker.id;
323
+ }
324
+ getCurrentWorkerId() {
325
+ const envWorkerId = process.env.WORKER_ID !== undefined ? Number(process.env.WORKER_ID) : undefined;
326
+ return envWorkerId ?? this.options.cluster.worker?.id ?? -1;
327
+ }
312
328
  /**
313
329
  * Handles unexpected worker exits with restart logic
314
330
  */
315
331
  handleUnexpectedWorkerExit(workerState) {
316
332
  const restartCount = workerState.restartCount + 1;
317
333
  if (restartCount <= this.options.restartMaxTimes) {
318
- logger.error(`Restarting worker ${workerState.worker.id} (pid: ${workerState.worker.process.pid}) (attempt ${restartCount}/${this.options.restartMaxTimes})`);
319
- const newWorker = this.spawnWorker();
334
+ logger.error(`Restarting worker ${workerState.id} (pid: ${workerState.worker.process.pid}) (attempt ${restartCount}/${this.options.restartMaxTimes})`);
335
+ const newWorker = this.spawnWorker(workerState.id);
320
336
  const newWorkerState = this.workers.get(newWorker.id);
321
337
  if (newWorkerState) {
322
338
  newWorkerState.restartCount = restartCount;
@@ -324,7 +340,7 @@ class ClusterManager extends events_1.EventEmitter {
324
340
  this.emit('worker:restarted', newWorker, workerState.restartCount);
325
341
  }
326
342
  else {
327
- logger.error(`Restart limit (${this.options.restartMaxTimes}) exceeded for worker ${workerState.worker.id} (pid: ${workerState.worker.process.pid}), shutting down cluster`);
343
+ logger.error(`Restart limit (${this.options.restartMaxTimes}) exceeded for worker ${workerState.id} (pid: ${workerState.worker.process.pid}), shutting down cluster`);
328
344
  this.emit('worker:restart-limit-exceeded', workerState.worker, workerState.restartCount);
329
345
  this.shutdown('RESTART_LIMIT_EXCEEDED');
330
346
  }
@@ -339,9 +355,10 @@ class ClusterManager extends events_1.EventEmitter {
339
355
  // Shutdown all workers
340
356
  await this.shutdownAllWorkers(signal);
341
357
  // Execute primary shutdown function
342
- await (0, utils_1.safeExecute)(() => this.options.primaryShutdownFn(signal), 'Error in primary shutdown function');
358
+ await (0, utils_1.safeExecute)(() => (0, utils_1.timeout)(this.options.primaryShutdownFn(signal), this.options.shutdownTimeout, 'primary shutdown timeout'), 'Error in primary shutdown function');
343
359
  logger.info(`Primary process (pid: ${process.pid}) shutdown completed`);
344
360
  this.emit('shutdown:completed');
361
+ process.exit(0);
345
362
  }
346
363
  /**
347
364
  * Shuts down all workers gracefully
@@ -364,7 +381,7 @@ class ClusterManager extends events_1.EventEmitter {
364
381
  }
365
382
  catch (error) {
366
383
  // Worker IPC channel is already closed, which is fine
367
- logger.debug(`Failed to send shutdown message to worker ${workerState.worker.id} (pid: ${workerState.worker.process.pid}): ${error instanceof Error ? error.message : String(error)}`);
384
+ logger.warn(`Failed to send shutdown message to worker ${workerState.id} (pid: ${workerState.worker.process.pid}): ${error instanceof Error ? error.message : String(error)}`);
368
385
  }
369
386
  }
370
387
  });
@@ -391,7 +408,7 @@ class ClusterManager extends events_1.EventEmitter {
391
408
  */
392
409
  forceKillAllWorkers() {
393
410
  Array.from(this.workers.values()).forEach((workerState) => {
394
- logger.error(`Force killing worker ${workerState.worker.id} (pid: ${workerState.worker.process.pid})`);
411
+ logger.error(`Force killing worker ${workerState.id} (pid: ${workerState.worker.process.pid})`);
395
412
  workerState.worker.kill('SIGKILL');
396
413
  });
397
414
  this.workers.clear();
@@ -400,11 +417,11 @@ class ClusterManager extends events_1.EventEmitter {
400
417
  * Shuts down a worker process
401
418
  */
402
419
  async shutdownWorker(signal) {
403
- logger.info(`Worker ${this.options.cluster.worker?.id} (pid: ${process.pid}) shutting down (signal: ${signal ?? 'manual'})`);
420
+ logger.info(`Worker ${this.getCurrentWorkerId()} (pid: ${process.pid}) shutting down (signal: ${signal ?? 'manual'})`);
404
421
  this.removeSignalHandlers();
405
422
  // Execute worker shutdown function
406
- await (0, utils_1.safeExecute)(() => this.options.workerShutdownFn(signal), `Error in worker ${this.options.cluster.worker?.id} (pid: ${process.pid}) shutdown function`);
407
- logger.info(`Worker ${this.options.cluster.worker?.id} (pid: ${process.pid}) shutdown completed`);
423
+ await (0, utils_1.safeExecute)(() => (0, utils_1.timeout)(this.options.workerShutdownFn(signal), this.options.shutdownTimeout, 'worker shutdown timeout'), `Error in worker ${this.getCurrentWorkerId()} (pid: ${process.pid}) shutdown function`);
424
+ logger.info(`Worker ${this.getCurrentWorkerId()} (pid: ${process.pid}) shutdown completed`);
408
425
  process.exit(0);
409
426
  }
410
427
  /**
@@ -418,7 +435,7 @@ class ClusterManager extends events_1.EventEmitter {
418
435
  */
419
436
  getWorkerInfo() {
420
437
  return Array.from(this.workers.values()).map((state) => ({
421
- id: state.worker.id,
438
+ id: state.id,
422
439
  pid: state.worker.process.pid ?? -1,
423
440
  restartCount: state.restartCount,
424
441
  }));
@@ -437,4 +454,4 @@ class ClusterManager extends events_1.EventEmitter {
437
454
  }
438
455
  }
439
456
  exports.ClusterManager = ClusterManager;
440
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbHVzdGVyL21hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBR0EsbUNBQXNDO0FBQ3RDLGtEQUFvQztBQVVwQyxtQ0FBaUY7QUFFakY7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBYSxjQUFlLFNBQVEscUJBQVk7SUFlOUMsWUFBWSxVQUFpQyxFQUFFO1FBQzdDLEtBQUssRUFBRSxDQUFDO1FBYk8sWUFBTyxHQUFHLElBQUksR0FBRyxFQUF1QixDQUFDO1FBRWxELFlBQU8sR0FBRyxLQUFLLENBQUM7UUFFaEIsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFFdkIsb0JBQWUsR0FBeUIsSUFBSSxDQUFDO1FBRTdDLHdCQUFtQixHQUEwQixJQUFJLENBQUM7UUFFbEQsbUJBQWMsR0FBRyxJQUFJLEdBQUcsRUFBOEIsQ0FBQztRQUk3RCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUEsaUNBQXlCLEVBQUMsT0FBTyxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxLQUFLLENBQUMsS0FBSztRQUNoQixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25DLE1BQU0sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzVCLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDM0IsQ0FBQztRQUNELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7T0FFRztJQUNJLFFBQVEsQ0FBQyxNQUFlO1FBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbEIsT0FBTyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDM0IsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3pCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztRQUM5QixDQUFDO1FBRUQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7UUFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUV0QyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25DLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0RCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNyRCxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQzlCLENBQUM7SUFFRDs7T0FFRztJQUNLLG1CQUFtQjtRQUN6QixJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUM5QyxNQUFNLE9BQU8sR0FBRyxHQUFHLEVBQUU7Z0JBQ25CLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDeEIsQ0FBQyxDQUFDO1lBQ0YsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ3pDLE9BQU8sQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzlCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0ssb0JBQW9CO1FBQzFCLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUU7WUFDdEUsT0FBTyxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDMUMsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRDs7T0FFRztJQUNLLEtBQUssQ0FBQyxZQUFZO1FBQ3hCLE1BQU0sQ0FBQyxJQUFJLENBQ1QseUJBQXlCLE9BQU8sQ0FBQyxHQUFHLG1CQUFtQixJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsVUFBVSxDQUN6RixDQUFDO1FBRUYseUZBQXlGO1FBQ3pGLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUUvQixnQ0FBZ0M7UUFDaEMsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7UUFFakMsd0JBQXdCO1FBQ3hCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDcEQsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3JCLENBQUM7UUFFRCwwQkFBMEI7UUFDMUIsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVEOztPQUVHO0lBQ0ssS0FBSyxDQUFDLFdBQVc7UUFDdkIsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLFVBQVUsT0FBTyxDQUFDLEdBQUcsWUFBWSxDQUFDLENBQUM7UUFFeEYsOEJBQThCO1FBQzlCLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1FBRWxDLHVFQUF1RTtRQUN2RSxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVEOztPQUVHO0lBQ0sseUJBQXlCO1FBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFjLEVBQUUsSUFBWSxFQUFFLE1BQWMsRUFBRSxFQUFFO1lBQy9FLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzlDLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQWMsRUFBRSxFQUFFO1lBQ25ELE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxNQUFNLENBQUMsRUFBRSxVQUFVLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxhQUFhLENBQUMsQ0FBQztZQUMxRSxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3RDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0ssMEJBQTBCO1FBQ2hDLE9BQU8sQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUMsT0FBbUIsRUFBRSxFQUFFO1lBQzVDLFFBQVEsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNyQixLQUFLLE1BQU07b0JBQ1QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUMvQixNQUFNO2dCQUNSLEtBQUssVUFBVTtvQkFDYixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDOUIsTUFBTTtnQkFDUjtvQkFDRSxNQUFNLENBQUMsSUFBSSxDQUFDLDJDQUEyQyxPQUFPLENBQUMsR0FBRyxLQUFLLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO29CQUN2RixNQUFNO1lBQ1YsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0ssV0FBVztRQUNqQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMzQyxNQUFNLFdBQVcsR0FBZ0I7WUFDL0IsTUFBTTtZQUNOLFlBQVksRUFBRSxDQUFDO1lBQ2YsUUFBUSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDcEIsV0FBVyxFQUFFLEtBQUs7WUFDbEIsY0FBYyxFQUFFLEtBQUs7U0FDdEIsQ0FBQztRQUVGLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFFekMsZ0NBQWdDO1FBQ2hDLE1BQU0sQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUMsT0FBbUIsRUFBRSxFQUFFO1lBQzNDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDNUMsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQ7O09BRUc7SUFDSyxtQkFBbUIsQ0FBQyxNQUFjLEVBQUUsT0FBbUI7UUFDN0QsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxXQUFXO1lBQUUsT0FBTztRQUV6QixRQUFRLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNyQixLQUFLLE1BQU07Z0JBQ1QsV0FBVyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ2xDLFdBQVcsQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO2dCQUNoQyxNQUFNO1lBQ1I7Z0JBQ0UsTUFBTSxDQUFDLElBQUksQ0FDVCw2Q0FBNkMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEtBQUssT0FBTyxDQUFDLElBQUksRUFBRSxDQUNuRixDQUFDO2dCQUNGLE1BQU07UUFDVixDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ssZ0JBQWdCLENBQUMsT0FBb0I7UUFDM0MsTUFBTSxXQUFXLEdBQWdCO1lBQy9CLElBQUksRUFBRSxNQUFNO1lBQ1osU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTO1NBQzdCLENBQUM7UUFFRixJQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNqQixPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzVCLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxxQkFBcUI7UUFDM0IsSUFBSSxDQUFDLG1CQUFtQixHQUFHLFdBQVcsQ0FBQyxHQUFHLEVBQUU7WUFDMUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDNUIsQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVEOztPQUVHO0lBQ0ssb0JBQW9CO1FBQzFCLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDN0IsYUFBYSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1lBQ3hDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUM7UUFDbEMsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNLLGtCQUFrQjtRQUN4QixJQUFJLElBQUksQ0FBQyxjQUFjO1lBQUUsT0FBTztRQUVoQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7YUFDOUIsTUFBTSxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUM7YUFDcEQsT0FBTyxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUU7WUFDdkIsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQztZQUU1RCxJQUFJLFdBQVcsQ0FBQyxXQUFXLElBQUksaUJBQWlCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDNUUsNkJBQTZCO2dCQUM3QixJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDdEMsQ0FBQztpQkFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUNwQyxzQkFBc0I7Z0JBQ3RCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNyQyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxnQkFBZ0IsQ0FBQyxXQUF3QjtRQUMvQyxNQUFNLFdBQVcsR0FBZ0I7WUFDL0IsSUFBSSxFQUFFLE1BQU07WUFDWixTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRTtTQUN0QixDQUFDO1FBRUYsV0FBVyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDL0IsSUFBSSxDQUFDO1lBQ0gsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDdkMsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixNQUFNLENBQUMsS0FBSyxDQUNWLGlDQUFpQyxXQUFXLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEtBQzdELEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQ3ZELEVBQUUsQ0FDSCxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNLLGlCQUFpQixDQUFDLFdBQXdCO1FBQ2hELE1BQU0sQ0FBQyxLQUFLLENBQ1YsVUFBVSxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUUsVUFBVSxXQUFXLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLHdCQUF3QixDQUNoRyxDQUFDO1FBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTlDLHNCQUFzQjtRQUN0QixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRTNDLGtCQUFrQjtRQUNsQixXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVuQyw2Q0FBNkM7UUFDN0MsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFNUUsSUFBSSxXQUFXLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDeEMsTUFBTSxDQUFDLElBQUksQ0FDVCxnREFBZ0QsV0FBVyxDQUFDLE1BQU0sQ0FBQyxFQUFFLFVBQVUsV0FBVyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQ2pILENBQUM7WUFDRixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDckIsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLENBQUMsS0FBSyxDQUNWLG1EQUFtRCxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUUsVUFBVSxXQUFXLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FDcEgsQ0FBQztZQUNGLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDaEMsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNLLGdCQUFnQixDQUFDLE1BQWMsRUFBRSxJQUFtQixFQUFFLE1BQXFCO1FBQ2pGLE1BQU0sQ0FBQyxJQUFJLENBQ1QsVUFBVSxNQUFNLENBQUMsRUFBRSxVQUFVLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxvQkFBb0IsSUFBSSxlQUFlLE1BQU0sRUFBRSxDQUMvRixDQUFDO1FBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztRQUUvQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLFdBQVc7WUFBRSxPQUFPO1FBRXpCLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUUvQiwyRUFBMkU7UUFDM0UsSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLFdBQVcsQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN0RCxPQUFPO1FBQ1QsQ0FBQztRQUVELHlCQUF5QjtRQUN6QixJQUFJLENBQUMsMEJBQTBCLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVEOztPQUVHO0lBQ0ssMEJBQTBCLENBQUMsV0FBd0I7UUFDekQsTUFBTSxZQUFZLEdBQUcsV0FBVyxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7UUFFbEQsSUFBSSxZQUFZLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUNqRCxNQUFNLENBQUMsS0FBSyxDQUNWLHFCQUFxQixXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUUsVUFBVSxXQUFXLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLGNBQWMsWUFBWSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxHQUFHLENBQ2hKLENBQUM7WUFDRixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDckMsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3RELElBQUksY0FBYyxFQUFFLENBQUM7Z0JBQ25CLGNBQWMsQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO1lBQzdDLENBQUM7WUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDckUsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLENBQUMsS0FBSyxDQUNWLGtCQUFrQixJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUseUJBQXlCLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRSxVQUFVLFdBQVcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsMEJBQTBCLENBQy9KLENBQUM7WUFDRixJQUFJLENBQUMsSUFBSSxDQUFDLCtCQUErQixFQUFFLFdBQVcsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3pGLElBQUksQ0FBQyxRQUFRLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUMxQyxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ssS0FBSyxDQUFDLGVBQWUsQ0FBQyxNQUFlO1FBQzNDLE1BQU0sQ0FBQyxJQUFJLENBQ1QseUJBQXlCLE9BQU8sQ0FBQyxHQUFHLDRCQUE0QixNQUFNLElBQUksUUFBUSxHQUFHLENBQ3RGLENBQUM7UUFFRixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUU1Qix1QkFBdUI7UUFDdkIsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFdEMsb0NBQW9DO1FBQ3BDLE1BQU0sSUFBQSxtQkFBVyxFQUNmLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLEVBQzVDLG9DQUFvQyxDQUNyQyxDQUFDO1FBRUYsTUFBTSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsT0FBTyxDQUFDLEdBQUcsc0JBQXNCLENBQUMsQ0FBQztRQUN4RSxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVEOztPQUVHO0lBQ0ssS0FBSyxDQUFDLGtCQUFrQixDQUFDLE1BQWU7UUFDOUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxDQUFDO1lBQUUsT0FBTztRQUVwQyxNQUFNLENBQUMsSUFBSSxDQUFDLGlCQUFpQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksYUFBYSxDQUFDLENBQUM7UUFFN0QsOERBQThEO1FBQzlELEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFO1lBQ3hELFdBQVcsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1lBQ2xDLDBEQUEwRDtZQUMxRCxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxXQUFXLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDekUsTUFBTSxlQUFlLEdBQW9CO29CQUN2QyxJQUFJLEVBQUUsVUFBVTtvQkFDaEIsTUFBTTtpQkFDUCxDQUFDO2dCQUNGLElBQUksQ0FBQztvQkFDSCxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztnQkFDM0MsQ0FBQztnQkFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO29CQUNmLHNEQUFzRDtvQkFDdEQsTUFBTSxDQUFDLEtBQUssQ0FDViw2Q0FBNkMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxFQUFFLFVBQ2hFLFdBQVcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQzdCLE1BQU0sS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQy9ELENBQUM7Z0JBQ0osQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILGlEQUFpRDtRQUNqRCxJQUFJLENBQUM7WUFDSCxNQUFNLElBQUEsZUFBTyxFQUNYLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxFQUM5QixJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFDNUIseUJBQXlCLENBQzFCLENBQUM7UUFDSixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sQ0FBQyxLQUFLLENBQUMsMkRBQTJELENBQUMsQ0FBQztZQUMxRSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUM3QixDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ssS0FBSyxDQUFDLHVCQUF1QjtRQUNuQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzdCLDRDQUE0QztZQUM1QyxNQUFNLElBQUEsYUFBSyxFQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxtQkFBbUI7UUFDekIsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUU7WUFDeEQsTUFBTSxDQUFDLEtBQUssQ0FDVix3QkFBd0IsV0FBVyxDQUFDLE1BQU0sQ0FBQyxFQUFFLFVBQVUsV0FBVyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQ3pGLENBQUM7WUFDRixXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNyQyxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVEOztPQUVHO0lBQ0ssS0FBSyxDQUFDLGNBQWMsQ0FBQyxNQUFlO1FBQzFDLE1BQU0sQ0FBQyxJQUFJLENBQ1QsVUFBVSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxVQUFVLE9BQU8sQ0FBQyxHQUFHLDRCQUM1RCxNQUFNLElBQUksUUFDWixHQUFHLENBQ0osQ0FBQztRQUVGLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBRTVCLG1DQUFtQztRQUNuQyxNQUFNLElBQUEsbUJBQVcsRUFDZixHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxFQUMzQyxtQkFBbUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsVUFBVSxPQUFPLENBQUMsR0FBRyxxQkFBcUIsQ0FDN0YsQ0FBQztRQUVGLE1BQU0sQ0FBQyxJQUFJLENBQ1QsVUFBVSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxVQUFVLE9BQU8sQ0FBQyxHQUFHLHNCQUFzQixDQUNyRixDQUFDO1FBQ0YsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxjQUFjO1FBQ25CLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7SUFDM0IsQ0FBQztJQUVEOztPQUVHO0lBQ0ksYUFBYTtRQUNsQixPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN2RCxFQUFFLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ25CLEdBQUcsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO1lBQ25DLFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWTtTQUNqQyxDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFRDs7T0FFRztJQUNJLFNBQVM7UUFDZCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksVUFBVTtRQUNmLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUM3QixDQUFDO0NBQ0Y7QUE3ZUQsd0NBNmVDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgY2xhc3MtbWV0aG9kcy11c2UtdGhpcyAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tcGFyYW0tcmVhc3NpZ24gKi9cbmltcG9ydCB7IFdvcmtlciB9IGZyb20gJ2NsdXN0ZXInO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRzJztcbmltcG9ydCAqIGFzIGxvZ2dlciBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IHtcbiAgQ2x1c3Rlck1hbmFnZXJPcHRpb25zLFxuICBDbHVzdGVyTWFuYWdlckV2ZW50cyxcbiAgV29ya2VyU3RhdGUsXG4gIElQQ01lc3NhZ2UsXG4gIFBpbmdNZXNzYWdlLFxuICBQb25nTWVzc2FnZSxcbiAgU2h1dGRvd25NZXNzYWdlLFxufSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IGRlbGF5LCB0aW1lb3V0LCBzYWZlRXhlY3V0ZSwgdmFsaWRhdGVBbmREZWZhdWx0T3B0aW9ucyB9IGZyb20gJy4vdXRpbHMnO1xuXG4vKipcbiAqIENsdXN0ZXJNYW5hZ2VyIC0gQSBjbHVzdGVyIGxpZmVjeWNsZSBtYW5hZ2VtZW50IHN5c3RlbVxuICpcbiAqIFRoZSBtYW5hZ2VyIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgZmVhdHVyZXM6XG4gKiAtIEdyYWNlZnVsIHNodXRkb3duIHdpdGggY29uZmlndXJhYmxlIHRpbWVvdXRcbiAqIC0gV29ya2VyIGhlYWx0aCBtb25pdG9yaW5nIHdpdGggcGluZy9wb25nIG1lY2hhbmlzbVxuICogLSBBdXRvbWF0aWMgd29ya2VyIHJlc3RhcnQgd2l0aCBjb25maWd1cmFibGUgbGltaXRzXG4gKiAtIFNpZ25hbCBoYW5kbGluZyBmb3Igc2h1dGRvd24gdHJpZ2dlcnNcbiAqIC0gRmxleGlibGUgcHJpbWFyeSBhbmQgd29ya2VyIGZ1bmN0aW9uIGhhbmRsZXJzXG4gKi9cbmV4cG9ydCBjbGFzcyBDbHVzdGVyTWFuYWdlciBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczogUmVxdWlyZWQ8Q2x1c3Rlck1hbmFnZXJPcHRpb25zPjtcblxuICBwcml2YXRlIHJlYWRvbmx5IHdvcmtlcnMgPSBuZXcgTWFwPG51bWJlciwgV29ya2VyU3RhdGU+KCk7XG5cbiAgcHJpdmF0ZSBzdGFydGVkID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBpc1NodXR0aW5nRG93biA9IGZhbHNlO1xuXG4gIHByaXZhdGUgc2h1dGRvd25Qcm9taXNlOiBQcm9taXNlPHZvaWQ+IHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSBoZWFsdGhDaGVja0ludGVydmFsOiBOb2RlSlMuVGltZW91dCB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgc2lnbmFsSGFuZGxlcnMgPSBuZXcgTWFwPE5vZGVKUy5TaWduYWxzLCAoKSA9PiB2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IENsdXN0ZXJNYW5hZ2VyT3B0aW9ucyA9IHt9KSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLm9wdGlvbnMgPSB2YWxpZGF0ZUFuZERlZmF1bHRPcHRpb25zKG9wdGlvbnMpO1xuICAgIHRoaXMuc2V0dXBTaWduYWxIYW5kbGVycygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0cyB0aGUgY2x1c3RlciBtYW5hZ2VyXG4gICAqIEluIHByaW1hcnkgcHJvY2Vzczogc3RhcnRzIHdvcmtlcnMgYW5kIGhlYWx0aCBtb25pdG9yaW5nXG4gICAqIEluIHdvcmtlciBwcm9jZXNzOiBleGVjdXRlcyB3b3JrZXIgZnVuY3Rpb25cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzdGFydCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5vcHRpb25zLmNsdXN0ZXIuaXNQcmltYXJ5KSB7XG4gICAgICBhd2FpdCB0aGlzLnN0YXJ0UHJpbWFyeSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB0aGlzLnN0YXJ0V29ya2VyKCk7XG4gICAgfVxuICAgIHRoaXMuc3RhcnRlZCA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhdGVzIGdyYWNlZnVsIHNodXRkb3duIG9mIHRoZSBjbHVzdGVyXG4gICAqL1xuICBwdWJsaWMgc2h1dGRvd24oc2lnbmFsPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zaHV0ZG93blByb21pc2UpIHtcbiAgICAgIHJldHVybiB0aGlzLnNodXRkb3duUHJvbWlzZTtcbiAgICB9XG5cbiAgICB0aGlzLmlzU2h1dHRpbmdEb3duID0gdHJ1ZTtcbiAgICB0aGlzLmVtaXQoJ3NodXRkb3duOnN0YXJ0ZWQnLCBzaWduYWwpO1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5jbHVzdGVyLmlzUHJpbWFyeSkge1xuICAgICAgdGhpcy5zaHV0ZG93blByb21pc2UgPSB0aGlzLnNodXRkb3duUHJpbWFyeShzaWduYWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNodXRkb3duUHJvbWlzZSA9IHRoaXMuc2h1dGRvd25Xb3JrZXIoc2lnbmFsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zaHV0ZG93blByb21pc2U7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB1cCBzaWduYWwgaGFuZGxlcnMgZm9yIGdyYWNlZnVsIHNodXRkb3duXG4gICAqL1xuICBwcml2YXRlIHNldHVwU2lnbmFsSGFuZGxlcnMoKTogdm9pZCB7XG4gICAgdGhpcy5vcHRpb25zLnNodXRkb3duU2lnbmFscy5mb3JFYWNoKChzaWduYWwpID0+IHtcbiAgICAgIGNvbnN0IGhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuc2h1dGRvd24oc2lnbmFsKTtcbiAgICAgIH07XG4gICAgICB0aGlzLnNpZ25hbEhhbmRsZXJzLnNldChzaWduYWwsIGhhbmRsZXIpO1xuICAgICAgcHJvY2Vzcy5vbihzaWduYWwsIGhhbmRsZXIpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgc2lnbmFsIGhhbmRsZXJzXG4gICAqL1xuICBwcml2YXRlIHJlbW92ZVNpZ25hbEhhbmRsZXJzKCk6IHZvaWQge1xuICAgIEFycmF5LmZyb20odGhpcy5zaWduYWxIYW5kbGVycy5lbnRyaWVzKCkpLmZvckVhY2goKFtzaWduYWwsIGhhbmRsZXJdKSA9PiB7XG4gICAgICBwcm9jZXNzLnJlbW92ZUxpc3RlbmVyKHNpZ25hbCwgaGFuZGxlcik7XG4gICAgfSk7XG4gICAgdGhpcy5zaWduYWxIYW5kbGVycy5jbGVhcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0cyB0aGUgcHJpbWFyeSBwcm9jZXNzXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHN0YXJ0UHJpbWFyeSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsb2dnZXIuaW5mbyhcbiAgICAgIGBQcmltYXJ5IHByb2Nlc3MgKHBpZDogJHtwcm9jZXNzLnBpZH0pIHN0YXJ0aW5nIHdpdGggJHt0aGlzLm9wdGlvbnMubnVtV29ya2Vyc30gd29ya2Vyc2AsXG4gICAgKTtcblxuICAgIC8vIEV4ZWN1dGUgcHJpbWFyeSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiwgYW55IGVycm9yIHdpbGwgc3RvcCB0aGUgY2x1c3RlciBmcm9tIHN0YXJ0aW5nXG4gICAgYXdhaXQgdGhpcy5vcHRpb25zLnByaW1hcnlGbigpO1xuXG4gICAgLy8gU2V0IHVwIGNsdXN0ZXIgZXZlbnQgaGFuZGxlcnNcbiAgICB0aGlzLnNldHVwQ2x1c3RlckV2ZW50SGFuZGxlcnMoKTtcblxuICAgIC8vIFNwYXduIGluaXRpYWwgd29ya2Vyc1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5vcHRpb25zLm51bVdvcmtlcnM7IGkgKz0gMSkge1xuICAgICAgdGhpcy5zcGF3bldvcmtlcigpO1xuICAgIH1cblxuICAgIC8vIFN0YXJ0IGhlYWx0aCBtb25pdG9yaW5nXG4gICAgdGhpcy5zdGFydEhlYWx0aE1vbml0b3JpbmcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydHMgYSB3b3JrZXIgcHJvY2Vzc1xuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBzdGFydFdvcmtlcigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsb2dnZXIuaW5mbyhgV29ya2VyICR7dGhpcy5vcHRpb25zLmNsdXN0ZXIud29ya2VyPy5pZH0gKHBpZDogJHtwcm9jZXNzLnBpZH0pIHN0YXJ0aW5nYCk7XG5cbiAgICAvLyBTZXQgdXAgSVBDIG1lc3NhZ2UgaGFuZGxlcnNcbiAgICB0aGlzLnNldHVwV29ya2VyTWVzc2FnZUhhbmRsZXJzKCk7XG5cbiAgICAvLyBFeGVjdXRlIHdvcmtlciBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiwgYW55IGVycm9yIHdpbGwgYmUgcHJvcGFnYXRlZFxuICAgIGF3YWl0IHRoaXMub3B0aW9ucy53b3JrZXJGbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdXAgY2x1c3RlciBldmVudCBoYW5kbGVycyBmb3IgdGhlIHByaW1hcnkgcHJvY2Vzc1xuICAgKi9cbiAgcHJpdmF0ZSBzZXR1cENsdXN0ZXJFdmVudEhhbmRsZXJzKCk6IHZvaWQge1xuICAgIHRoaXMub3B0aW9ucy5jbHVzdGVyLm9uKCdleGl0JywgKHdvcmtlcjogV29ya2VyLCBjb2RlOiBudW1iZXIsIHNpZ25hbDogc3RyaW5nKSA9PiB7XG4gICAgICB0aGlzLmhhbmRsZVdvcmtlckV4aXQod29ya2VyLCBjb2RlLCBzaWduYWwpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5vcHRpb25zLmNsdXN0ZXIub24oJ29ubGluZScsICh3b3JrZXI6IFdvcmtlcikgPT4ge1xuICAgICAgbG9nZ2VyLmluZm8oYFdvcmtlciAke3dvcmtlci5pZH0gKHBpZDogJHt3b3JrZXIucHJvY2Vzcy5waWR9KSBpcyBvbmxpbmVgKTtcbiAgICAgIHRoaXMuZW1pdCgnd29ya2VyOnN0YXJ0ZWQnLCB3b3JrZXIpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdXAgSVBDIG1lc3NhZ2UgaGFuZGxlcnMgZm9yIHdvcmtlciBwcm9jZXNzZXNcbiAgICovXG4gIHByaXZhdGUgc2V0dXBXb3JrZXJNZXNzYWdlSGFuZGxlcnMoKTogdm9pZCB7XG4gICAgcHJvY2Vzcy5vbignbWVzc2FnZScsIChtZXNzYWdlOiBJUENNZXNzYWdlKSA9PiB7XG4gICAgICBzd2l0Y2ggKG1lc3NhZ2UudHlwZSkge1xuICAgICAgICBjYXNlICdwaW5nJzpcbiAgICAgICAgICB0aGlzLmhhbmRsZVdvcmtlclBpbmcobWVzc2FnZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3NodXRkb3duJzpcbiAgICAgICAgICB0aGlzLnNodXRkb3duKG1lc3NhZ2Uuc2lnbmFsKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBsb2dnZXIud2FybihgaWdub3JpbmcgdW5rbm93biBtZXNzYWdlIHR5cGUgaW4gd29ya2VyICR7cHJvY2Vzcy5waWR9OiAke21lc3NhZ2UudHlwZX1gKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTcGF3bnMgYSBuZXcgd29ya2VyIGFuZCBzZXRzIHVwIGl0cyBzdGF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBzcGF3bldvcmtlcigpOiBXb3JrZXIge1xuICAgIGNvbnN0IHdvcmtlciA9IHRoaXMub3B0aW9ucy5jbHVzdGVyLmZvcmsoKTtcbiAgICBjb25zdCB3b3JrZXJTdGF0ZTogV29ya2VyU3RhdGUgPSB7XG4gICAgICB3b3JrZXIsXG4gICAgICByZXN0YXJ0Q291bnQ6IDAsXG4gICAgICBsYXN0UGluZzogRGF0ZS5ub3coKSxcbiAgICAgIHBlbmRpbmdQaW5nOiBmYWxzZSxcbiAgICAgIGlzU2h1dHRpbmdEb3duOiBmYWxzZSxcbiAgICB9O1xuXG4gICAgdGhpcy53b3JrZXJzLnNldCh3b3JrZXIuaWQsIHdvcmtlclN0YXRlKTtcblxuICAgIC8vIFNldCB1cCB3b3JrZXIgbWVzc2FnZSBoYW5kbGVyXG4gICAgd29ya2VyLm9uKCdtZXNzYWdlJywgKG1lc3NhZ2U6IElQQ01lc3NhZ2UpID0+IHtcbiAgICAgIHRoaXMuaGFuZGxlV29ya2VyTWVzc2FnZSh3b3JrZXIsIG1lc3NhZ2UpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHdvcmtlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIG1lc3NhZ2VzIGZyb20gd29ya2Vyc1xuICAgKi9cbiAgcHJpdmF0ZSBoYW5kbGVXb3JrZXJNZXNzYWdlKHdvcmtlcjogV29ya2VyLCBtZXNzYWdlOiBJUENNZXNzYWdlKTogdm9pZCB7XG4gICAgY29uc3Qgd29ya2VyU3RhdGUgPSB0aGlzLndvcmtlcnMuZ2V0KHdvcmtlci5pZCk7XG4gICAgaWYgKCF3b3JrZXJTdGF0ZSkgcmV0dXJuO1xuXG4gICAgc3dpdGNoIChtZXNzYWdlLnR5cGUpIHtcbiAgICAgIGNhc2UgJ3BvbmcnOlxuICAgICAgICB3b3JrZXJTdGF0ZS5sYXN0UGluZyA9IERhdGUubm93KCk7XG4gICAgICAgIHdvcmtlclN0YXRlLnBlbmRpbmdQaW5nID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgbG9nZ2VyLndhcm4oXG4gICAgICAgICAgYFJlY2VpdmVkIHVua25vd24gbWVzc2FnZSB0eXBlIGZyb20gd29ya2VyICR7d29ya2VyLnByb2Nlc3MucGlkfTogJHttZXNzYWdlLnR5cGV9YCxcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgcGluZyBtZXNzYWdlcyBpbiB3b3JrZXIgcHJvY2Vzc2VzXG4gICAqL1xuICBwcml2YXRlIGhhbmRsZVdvcmtlclBpbmcobWVzc2FnZTogUGluZ01lc3NhZ2UpOiB2b2lkIHtcbiAgICBjb25zdCBwb25nTWVzc2FnZTogUG9uZ01lc3NhZ2UgPSB7XG4gICAgICB0eXBlOiAncG9uZycsXG4gICAgICB0aW1lc3RhbXA6IG1lc3NhZ2UudGltZXN0YW1wLFxuICAgIH07XG5cbiAgICBpZiAocHJvY2Vzcy5zZW5kKSB7XG4gICAgICBwcm9jZXNzLnNlbmQocG9uZ01lc3NhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydHMgaGVhbHRoIG1vbml0b3JpbmcgZm9yIGFsbCB3b3JrZXJzXG4gICAqL1xuICBwcml2YXRlIHN0YXJ0SGVhbHRoTW9uaXRvcmluZygpOiB2b2lkIHtcbiAgICB0aGlzLmhlYWx0aENoZWNrSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICB0aGlzLnBlcmZvcm1IZWFsdGhDaGVjaygpO1xuICAgIH0sIHRoaXMub3B0aW9ucy5waW5nRnJlcXVlbmN5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9wcyBoZWFsdGggbW9uaXRvcmluZ1xuICAgKi9cbiAgcHJpdmF0ZSBzdG9wSGVhbHRoTW9uaXRvcmluZygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5oZWFsdGhDaGVja0ludGVydmFsKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMuaGVhbHRoQ2hlY2tJbnRlcnZhbCk7XG4gICAgICB0aGlzLmhlYWx0aENoZWNrSW50ZXJ2YWwgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJmb3JtcyBoZWFsdGggY2hlY2sgb24gYWxsIHdvcmtlcnNcbiAgICovXG4gIHByaXZhdGUgcGVyZm9ybUhlYWx0aENoZWNrKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzU2h1dHRpbmdEb3duKSByZXR1cm47XG5cbiAgICBBcnJheS5mcm9tKHRoaXMud29ya2Vycy52YWx1ZXMoKSlcbiAgICAgIC5maWx0ZXIoKHdvcmtlclN0YXRlKSA9PiAhd29ya2VyU3RhdGUuaXNTaHV0dGluZ0Rvd24pXG4gICAgICAuZm9yRWFjaCgod29ya2VyU3RhdGUpID0+IHtcbiAgICAgICAgY29uc3QgdGltZVNpbmNlTGFzdFBpbmcgPSBEYXRlLm5vdygpIC0gd29ya2VyU3RhdGUubGFzdFBpbmc7XG5cbiAgICAgICAgaWYgKHdvcmtlclN0YXRlLnBlbmRpbmdQaW5nICYmIHRpbWVTaW5jZUxhc3RQaW5nID4gdGhpcy5vcHRpb25zLnBpbmdUaW1lb3V0KSB7XG4gICAgICAgICAgLy8gV29ya2VyIGlzIHN0dWNrLCBoYW5kbGUgaXRcbiAgICAgICAgICB0aGlzLmhhbmRsZVN0dWNrV29ya2VyKHdvcmtlclN0YXRlKTtcbiAgICAgICAgfSBlbHNlIGlmICghd29ya2VyU3RhdGUucGVuZGluZ1BpbmcpIHtcbiAgICAgICAgICAvLyBTZW5kIHBpbmcgdG8gd29ya2VyXG4gICAgICAgICAgdGhpcy5zZW5kUGluZ1RvV29ya2VyKHdvcmtlclN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU2VuZHMgYSBwaW5nIG1lc3NhZ2UgdG8gYSB3b3JrZXJcbiAgICovXG4gIHByaXZhdGUgc2VuZFBpbmdUb1dvcmtlcih3b3JrZXJTdGF0ZTogV29ya2VyU3RhdGUpOiB2b2lkIHtcbiAgICBjb25zdCBwaW5nTWVzc2FnZTogUGluZ01lc3NhZ2UgPSB7XG4gICAgICB0eXBlOiAncGluZycsXG4gICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgfTtcblxuICAgIHdvcmtlclN0YXRlLnBlbmRpbmdQaW5nID0gdHJ1ZTtcbiAgICB0cnkge1xuICAgICAgd29ya2VyU3RhdGUud29ya2VyLnNlbmQocGluZ01lc3NhZ2UpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoXG4gICAgICAgIGBGYWlsZWQgdG8gc2VuZCBwaW5nIHRvIHdvcmtlciAke3dvcmtlclN0YXRlLndvcmtlci5wcm9jZXNzLnBpZH06ICR7XG4gICAgICAgICAgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpXG4gICAgICAgIH1gLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyBhIHN0dWNrIHdvcmtlclxuICAgKi9cbiAgcHJpdmF0ZSBoYW5kbGVTdHVja1dvcmtlcih3b3JrZXJTdGF0ZTogV29ya2VyU3RhdGUpOiB2b2lkIHtcbiAgICBsb2dnZXIuZXJyb3IoXG4gICAgICBgV29ya2VyICR7d29ya2VyU3RhdGUud29ya2VyLmlkfSAocGlkOiAke3dvcmtlclN0YXRlLndvcmtlci5wcm9jZXNzLnBpZH0pIGlzIHN0dWNrLCBraWxsaW5nIGl0YCxcbiAgICApO1xuICAgIHRoaXMuZW1pdCgnd29ya2VyOnN0dWNrJywgd29ya2VyU3RhdGUud29ya2VyKTtcblxuICAgIC8vIFJlbW92ZSB3b3JrZXIgc3RhdGVcbiAgICB0aGlzLndvcmtlcnMuZGVsZXRlKHdvcmtlclN0YXRlLndvcmtlci5pZCk7XG5cbiAgICAvLyBLaWxsIHRoZSB3b3JrZXJcbiAgICB3b3JrZXJTdGF0ZS53b3JrZXIua2lsbCgnU0lHS0lMTCcpO1xuXG4gICAgLy8gRGV0ZXJtaW5lIGlmIHdlIHNob3VsZCBzcGF3biBhIHJlcGxhY2VtZW50XG4gICAgY29uc3Qgc2hvdWxkU3Bhd24gPSB0aGlzLm9wdGlvbnMuc3R1Y2tXb3JrZXJSZXNwYXduRnVuYyh3b3JrZXJTdGF0ZS53b3JrZXIpO1xuXG4gICAgaWYgKHNob3VsZFNwYXduICYmICF0aGlzLmlzU2h1dHRpbmdEb3duKSB7XG4gICAgICBsb2dnZXIuaW5mbyhcbiAgICAgICAgYFNwYXduaW5nIHJlcGxhY2VtZW50IHdvcmtlciBmb3Igc3R1Y2sgd29ya2VyICR7d29ya2VyU3RhdGUud29ya2VyLmlkfSAocGlkOiAke3dvcmtlclN0YXRlLndvcmtlci5wcm9jZXNzLnBpZH0pYCxcbiAgICAgICk7XG4gICAgICB0aGlzLnNwYXduV29ya2VyKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ2dlci5lcnJvcihcbiAgICAgICAgYFRyaWdnZXJpbmcgY2x1c3RlciBzaHV0ZG93biBkdWUgdG8gc3R1Y2sgd29ya2VyICR7d29ya2VyU3RhdGUud29ya2VyLmlkfSAocGlkOiAke3dvcmtlclN0YXRlLndvcmtlci5wcm9jZXNzLnBpZH0pYCxcbiAgICAgICk7XG4gICAgICB0aGlzLnNodXRkb3duKCdTVFVDS19XT1JLRVInKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyB3b3JrZXIgZXhpdCBldmVudHNcbiAgICovXG4gIHByaXZhdGUgaGFuZGxlV29ya2VyRXhpdCh3b3JrZXI6IFdvcmtlciwgY29kZTogbnVtYmVyIHwgbnVsbCwgc2lnbmFsOiBzdHJpbmcgfCBudWxsKTogdm9pZCB7XG4gICAgbG9nZ2VyLmluZm8oXG4gICAgICBgV29ya2VyICR7d29ya2VyLmlkfSAocGlkOiAke3dvcmtlci5wcm9jZXNzLnBpZH0pIGRpZWQgd2l0aCBjb2RlICR7Y29kZX0gYW5kIHNpZ25hbCAke3NpZ25hbH1gLFxuICAgICk7XG4gICAgdGhpcy5lbWl0KCd3b3JrZXI6ZGllZCcsIHdvcmtlciwgY29kZSwgc2lnbmFsKTtcblxuICAgIGNvbnN0IHdvcmtlclN0YXRlID0gdGhpcy53b3JrZXJzLmdldCh3b3JrZXIuaWQpO1xuICAgIGlmICghd29ya2VyU3RhdGUpIHJldHVybjtcblxuICAgIHRoaXMud29ya2Vycy5kZWxldGUod29ya2VyLmlkKTtcblxuICAgIC8vIElmIHdlJ3JlIHNodXR0aW5nIGRvd24gb3Igd29ya2VyIHdhcyBraWxsZWQgaW50ZW50aW9uYWxseSwgZG9uJ3QgcmVzdGFydFxuICAgIGlmICh0aGlzLmlzU2h1dHRpbmdEb3duIHx8IHdvcmtlclN0YXRlLmlzU2h1dHRpbmdEb3duKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHVuZXhwZWN0ZWQgZXhpdFxuICAgIHRoaXMuaGFuZGxlVW5leHBlY3RlZFdvcmtlckV4aXQod29ya2VyU3RhdGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgdW5leHBlY3RlZCB3b3JrZXIgZXhpdHMgd2l0aCByZXN0YXJ0IGxvZ2ljXG4gICAqL1xuICBwcml2YXRlIGhhbmRsZVVuZXhwZWN0ZWRXb3JrZXJFeGl0KHdvcmtlclN0YXRlOiBXb3JrZXJTdGF0ZSk6IHZvaWQge1xuICAgIGNvbnN0IHJlc3RhcnRDb3VudCA9IHdvcmtlclN0YXRlLnJlc3RhcnRDb3VudCArIDE7XG5cbiAgICBpZiAocmVzdGFydENvdW50IDw9IHRoaXMub3B0aW9ucy5yZXN0YXJ0TWF4VGltZXMpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihcbiAgICAgICAgYFJlc3RhcnRpbmcgd29ya2VyICR7d29ya2VyU3RhdGUud29ya2VyLmlkfSAocGlkOiAke3dvcmtlclN0YXRlLndvcmtlci5wcm9jZXNzLnBpZH0pIChhdHRlbXB0ICR7cmVzdGFydENvdW50fS8ke3RoaXMub3B0aW9ucy5yZXN0YXJ0TWF4VGltZXN9KWAsXG4gICAgICApO1xuICAgICAgY29uc3QgbmV3V29ya2VyID0gdGhpcy5zcGF3bldvcmtlcigpO1xuICAgICAgY29uc3QgbmV3V29ya2VyU3RhdGUgPSB0aGlzLndvcmtlcnMuZ2V0KG5ld1dvcmtlci5pZCk7XG4gICAgICBpZiAobmV3V29ya2VyU3RhdGUpIHtcbiAgICAgICAgbmV3V29ya2VyU3RhdGUucmVzdGFydENvdW50ID0gcmVzdGFydENvdW50O1xuICAgICAgfVxuICAgICAgdGhpcy5lbWl0KCd3b3JrZXI6cmVzdGFydGVkJywgbmV3V29ya2VyLCB3b3JrZXJTdGF0ZS5yZXN0YXJ0Q291bnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dnZXIuZXJyb3IoXG4gICAgICAgIGBSZXN0YXJ0IGxpbWl0ICgke3RoaXMub3B0aW9ucy5yZXN0YXJ0TWF4VGltZXN9KSBleGNlZWRlZCBmb3Igd29ya2VyICR7d29ya2VyU3RhdGUud29ya2VyLmlkfSAocGlkOiAke3dvcmtlclN0YXRlLndvcmtlci5wcm9jZXNzLnBpZH0pLCBzaHV0dGluZyBkb3duIGNsdXN0ZXJgLFxuICAgICAgKTtcbiAgICAgIHRoaXMuZW1pdCgnd29ya2VyOnJlc3RhcnQtbGltaXQtZXhjZWVkZWQnLCB3b3JrZXJTdGF0ZS53b3JrZXIsIHdvcmtlclN0YXRlLnJlc3RhcnRDb3VudCk7XG4gICAgICB0aGlzLnNodXRkb3duKCdSRVNUQVJUX0xJTUlUX0VYQ0VFREVEJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNodXRzIGRvd24gdGhlIHByaW1hcnkgcHJvY2Vzc1xuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBzaHV0ZG93blByaW1hcnkoc2lnbmFsPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbG9nZ2VyLmluZm8oXG4gICAgICBgUHJpbWFyeSBwcm9jZXNzIChwaWQ6ICR7cHJvY2Vzcy5waWR9KSBzaHV0dGluZyBkb3duIChzaWduYWw6ICR7c2lnbmFsID8/ICdtYW51YWwnfSlgLFxuICAgICk7XG5cbiAgICB0aGlzLnN0b3BIZWFsdGhNb25pdG9yaW5nKCk7XG4gICAgdGhpcy5yZW1vdmVTaWduYWxIYW5kbGVycygpO1xuXG4gICAgLy8gU2h1dGRvd24gYWxsIHdvcmtlcnNcbiAgICBhd2FpdCB0aGlzLnNodXRkb3duQWxsV29ya2VycyhzaWduYWwpO1xuXG4gICAgLy8gRXhlY3V0ZSBwcmltYXJ5IHNodXRkb3duIGZ1bmN0aW9uXG4gICAgYXdhaXQgc2FmZUV4ZWN1dGUoXG4gICAgICAoKSA9PiB0aGlzLm9wdGlvbnMucHJpbWFyeVNodXRkb3duRm4oc2lnbmFsKSxcbiAgICAgICdFcnJvciBpbiBwcmltYXJ5IHNodXRkb3duIGZ1bmN0aW9uJyxcbiAgICApO1xuXG4gICAgbG9nZ2VyLmluZm8oYFByaW1hcnkgcHJvY2VzcyAocGlkOiAke3Byb2Nlc3MucGlkfSkgc2h1dGRvd24gY29tcGxldGVkYCk7XG4gICAgdGhpcy5lbWl0KCdzaHV0ZG93bjpjb21wbGV0ZWQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaHV0cyBkb3duIGFsbCB3b3JrZXJzIGdyYWNlZnVsbHlcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgc2h1dGRvd25BbGxXb3JrZXJzKHNpZ25hbD86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLndvcmtlcnMuc2l6ZSA9PT0gMCkgcmV0dXJuO1xuXG4gICAgbG9nZ2VyLmluZm8oYFNodXR0aW5nIGRvd24gJHt0aGlzLndvcmtlcnMuc2l6ZX0gd29ya2Vycy4uLmApO1xuXG4gICAgLy8gTWFyayBhbGwgd29ya2VycyBhcyBzaHV0dGluZyBkb3duIGFuZCBzZW5kIHNodXRkb3duIG1lc3NhZ2VcbiAgICBBcnJheS5mcm9tKHRoaXMud29ya2Vycy52YWx1ZXMoKSkuZm9yRWFjaCgod29ya2VyU3RhdGUpID0+IHtcbiAgICAgIHdvcmtlclN0YXRlLmlzU2h1dHRpbmdEb3duID0gdHJ1ZTtcbiAgICAgIC8vIE9ubHkgc2VuZCBzaHV0ZG93biBtZXNzYWdlIGlmIHdvcmtlciBpcyBzdGlsbCBjb25uZWN0ZWRcbiAgICAgIGlmICghd29ya2VyU3RhdGUud29ya2VyLmlzRGVhZCgpICYmIHdvcmtlclN0YXRlLndvcmtlci5wcm9jZXNzLmNvbm5lY3RlZCkge1xuICAgICAgICBjb25zdCBzaHV0ZG93bk1lc3NhZ2U6IFNodXRkb3duTWVzc2FnZSA9IHtcbiAgICAgICAgICB0eXBlOiAnc2h1dGRvd24nLFxuICAgICAgICAgIHNpZ25hbCxcbiAgICAgICAgfTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB3b3JrZXJTdGF0ZS53b3JrZXIuc2VuZChzaHV0ZG93bk1lc3NhZ2UpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIC8vIFdvcmtlciBJUEMgY2hhbm5lbCBpcyBhbHJlYWR5IGNsb3NlZCwgd2hpY2ggaXMgZmluZVxuICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICAgIGBGYWlsZWQgdG8gc2VuZCBzaHV0ZG93biBtZXNzYWdlIHRvIHdvcmtlciAke3dvcmtlclN0YXRlLndvcmtlci5pZH0gKHBpZDogJHtcbiAgICAgICAgICAgICAgd29ya2VyU3RhdGUud29ya2VyLnByb2Nlc3MucGlkXG4gICAgICAgICAgICB9KTogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcil9YCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBXYWl0IGZvciB3b3JrZXJzIHRvIGV4aXQgZ3JhY2VmdWxseSBvciB0aW1lb3V0XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRpbWVvdXQoXG4gICAgICAgIHRoaXMud2FpdEZvckFsbFdvcmtlcnNUb0V4aXQoKSxcbiAgICAgICAgdGhpcy5vcHRpb25zLnNodXRkb3duVGltZW91dCxcbiAgICAgICAgJ1dvcmtlciBzaHV0ZG93biB0aW1lb3V0JyxcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignR3JhY2VmdWwgc2h1dGRvd24gZm9yIHdvcmtlcnMgdGltZWQgb3V0LCBmb3JjaW5nIHNodXRkb3duJyk7XG4gICAgICB0aGlzLmZvcmNlS2lsbEFsbFdvcmtlcnMoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV2FpdHMgZm9yIGFsbCB3b3JrZXJzIHRvIGV4aXRcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgd2FpdEZvckFsbFdvcmtlcnNUb0V4aXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgd2hpbGUgKHRoaXMud29ya2Vycy5zaXplID4gMCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWF3YWl0LWluLWxvb3BcbiAgICAgIGF3YWl0IGRlbGF5KDEwMCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZvcmNlIGtpbGxzIGFsbCByZW1haW5pbmcgd29ya2Vyc1xuICAgKi9cbiAgcHJpdmF0ZSBmb3JjZUtpbGxBbGxXb3JrZXJzKCk6IHZvaWQge1xuICAgIEFycmF5LmZyb20odGhpcy53b3JrZXJzLnZhbHVlcygpKS5mb3JFYWNoKCh3b3JrZXJTdGF0ZSkgPT4ge1xuICAgICAgbG9nZ2VyLmVycm9yKFxuICAgICAgICBgRm9yY2Uga2lsbGluZyB3b3JrZXIgJHt3b3JrZXJTdGF0ZS53b3JrZXIuaWR9IChwaWQ6ICR7d29ya2VyU3RhdGUud29ya2VyLnByb2Nlc3MucGlkfSlgLFxuICAgICAgKTtcbiAgICAgIHdvcmtlclN0YXRlLndvcmtlci5raWxsKCdTSUdLSUxMJyk7XG4gICAgfSk7XG4gICAgdGhpcy53b3JrZXJzLmNsZWFyKCk7XG4gIH1cblxuICAvKipcbiAgICogU2h1dHMgZG93biBhIHdvcmtlciBwcm9jZXNzXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHNodXRkb3duV29ya2VyKHNpZ25hbD86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxvZ2dlci5pbmZvKFxuICAgICAgYFdvcmtlciAke3RoaXMub3B0aW9ucy5jbHVzdGVyLndvcmtlcj8uaWR9IChwaWQ6ICR7cHJvY2Vzcy5waWR9KSBzaHV0dGluZyBkb3duIChzaWduYWw6ICR7XG4gICAgICAgIHNpZ25hbCA/PyAnbWFudWFsJ1xuICAgICAgfSlgLFxuICAgICk7XG5cbiAgICB0aGlzLnJlbW92ZVNpZ25hbEhhbmRsZXJzKCk7XG5cbiAgICAvLyBFeGVjdXRlIHdvcmtlciBzaHV0ZG93biBmdW5jdGlvblxuICAgIGF3YWl0IHNhZmVFeGVjdXRlKFxuICAgICAgKCkgPT4gdGhpcy5vcHRpb25zLndvcmtlclNodXRkb3duRm4oc2lnbmFsKSxcbiAgICAgIGBFcnJvciBpbiB3b3JrZXIgJHt0aGlzLm9wdGlvbnMuY2x1c3Rlci53b3JrZXI/LmlkfSAocGlkOiAke3Byb2Nlc3MucGlkfSkgc2h1dGRvd24gZnVuY3Rpb25gLFxuICAgICk7XG5cbiAgICBsb2dnZXIuaW5mbyhcbiAgICAgIGBXb3JrZXIgJHt0aGlzLm9wdGlvbnMuY2x1c3Rlci53b3JrZXI/LmlkfSAocGlkOiAke3Byb2Nlc3MucGlkfSkgc2h1dGRvd24gY29tcGxldGVkYCxcbiAgICApO1xuICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBjdXJyZW50IG51bWJlciBvZiBhY3RpdmUgd29ya2Vyc1xuICAgKi9cbiAgcHVibGljIGdldFdvcmtlckNvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMud29ya2Vycy5zaXplO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgaW5mb3JtYXRpb24gYWJvdXQgYWxsIHdvcmtlcnNcbiAgICovXG4gIHB1YmxpYyBnZXRXb3JrZXJJbmZvKCk6IEFycmF5PHsgaWQ6IG51bWJlcjsgcGlkOiBudW1iZXI7IHJlc3RhcnRDb3VudDogbnVtYmVyIH0+IHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLndvcmtlcnMudmFsdWVzKCkpLm1hcCgoc3RhdGUpID0+ICh7XG4gICAgICBpZDogc3RhdGUud29ya2VyLmlkLFxuICAgICAgcGlkOiBzdGF0ZS53b3JrZXIucHJvY2Vzcy5waWQgPz8gLTEsXG4gICAgICByZXN0YXJ0Q291bnQ6IHN0YXRlLnJlc3RhcnRDb3VudCxcbiAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBjbHVzdGVyIGlzIGN1cnJlbnRseSBzdGFydGVkXG4gICAqL1xuICBwdWJsaWMgaXNTdGFydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0ZWQ7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBjbHVzdGVyIGlzIGN1cnJlbnRseSBzaHV0dGluZyBkb3duXG4gICAqL1xuICBwdWJsaWMgaXNTaHV0ZG93bigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1NodXR0aW5nRG93bjtcbiAgfVxufVxuXG4vLyBUeXBlLXNhZmUgZXZlbnQgZW1pdHRlciBpbnRlcmZhY2VcbmV4cG9ydCBpbnRlcmZhY2UgQ2x1c3Rlck1hbmFnZXJFbWl0dGVyIHtcbiAgb248SyBleHRlbmRzIGtleW9mIENsdXN0ZXJNYW5hZ2VyRXZlbnRzPihldmVudDogSywgbGlzdGVuZXI6IENsdXN0ZXJNYW5hZ2VyRXZlbnRzW0tdKTogdGhpcztcbiAgZW1pdDxLIGV4dGVuZHMga2V5b2YgQ2x1c3Rlck1hbmFnZXJFdmVudHM+KFxuICAgIGV2ZW50OiBLLFxuICAgIC4uLmFyZ3M6IFBhcmFtZXRlcnM8Q2x1c3Rlck1hbmFnZXJFdmVudHNbS10+XG4gICk6IGJvb2xlYW47XG59XG4iXX0=
457
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbHVzdGVyL21hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBR0EsbUNBQXNDO0FBQ3RDLGtEQUFvQztBQVVwQyxtQ0FBaUY7QUFFakY7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBYSxjQUFlLFNBQVEscUJBQVk7SUFlOUMsWUFBWSxVQUFpQyxFQUFFO1FBQzdDLEtBQUssRUFBRSxDQUFDO1FBYk8sWUFBTyxHQUFHLElBQUksR0FBRyxFQUF1QixDQUFDO1FBRWxELFlBQU8sR0FBRyxLQUFLLENBQUM7UUFFaEIsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFFdkIsb0JBQWUsR0FBeUIsSUFBSSxDQUFDO1FBRTdDLHdCQUFtQixHQUEwQixJQUFJLENBQUM7UUFFbEQsbUJBQWMsR0FBRyxJQUFJLEdBQUcsRUFBOEIsQ0FBQztRQUk3RCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUEsaUNBQXlCLEVBQUMsT0FBTyxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxLQUFLLENBQUMsS0FBSztRQUNoQixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25DLE1BQU0sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzVCLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDM0IsQ0FBQztRQUNELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7T0FFRztJQUNJLFFBQVEsQ0FBQyxNQUFlO1FBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbEIsT0FBTyxPQUFPLENBQUMsT0FBTyxF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QUMsQ0FBQztRQUM1RixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7SUFFRDs7T0FFRztJQUNJLGNBQWM7UUFDbkIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztJQUMzQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxhQUFhO1FBQ2xCLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZELEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRTtZQUNaLEdBQUcsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO1lBQ25DLFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWTtTQUNqQyxDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFRDs7T0FFRztJQUNJLFNBQVM7UUFDZCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksVUFBVTtRQUNmLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUM3QixDQUFDO0NBQ0Y7QUE3Z0JELHdDQTZnQkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBjbGFzcy1tZXRob2RzLXVzZS10aGlzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wYXJhbS1yZWFzc2lnbiAqL1xuaW1wb3J0IHsgV29ya2VyIH0gZnJvbSAnY2x1c3Rlcic7XG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnO1xuaW1wb3J0ICogYXMgbG9nZ2VyIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQge1xuICBDbHVzdGVyTWFuYWdlck9wdGlvbnMsXG4gIENsdXN0ZXJNYW5hZ2VyRXZlbnRzLFxuICBXb3JrZXJTdGF0ZSxcbiAgSVBDTWVzc2FnZSxcbiAgUGluZ01lc3NhZ2UsXG4gIFBvbmdNZXNzYWdlLFxuICBTaHV0ZG93bk1lc3NhZ2UsXG59IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgZGVsYXksIHRpbWVvdXQsIHNhZmVFeGVjdXRlLCB2YWxpZGF0ZUFuZERlZmF1bHRPcHRpb25zIH0gZnJvbSAnLi91dGlscyc7XG5cbi8qKlxuICogQ2x1c3Rlck1hbmFnZXIgLSBBIGNsdXN0ZXIgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgc3lzdGVtXG4gKlxuICogVGhlIG1hbmFnZXIgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBmZWF0dXJlczpcbiAqIC0gR3JhY2VmdWwgc2h1dGRvd24gd2l0aCBjb25maWd1cmFibGUgdGltZW91dFxuICogLSBXb3JrZXIgaGVhbHRoIG1vbml0b3Jpbmcgd2l0aCBwaW5nL3BvbmcgbWVjaGFuaXNtXG4gKiAtIEF1dG9tYXRpYyB3b3JrZXIgcmVzdGFydCB3aXRoIGNvbmZpZ3VyYWJsZSBsaW1pdHNcbiAqIC0gU2lnbmFsIGhhbmRsaW5nIGZvciBzaHV0ZG93biB0cmlnZ2Vyc1xuICogLSBGbGV4aWJsZSBwcmltYXJ5IGFuZCB3b3JrZXIgZnVuY3Rpb24gaGFuZGxlcnNcbiAqL1xuZXhwb3J0IGNsYXNzIENsdXN0ZXJNYW5hZ2VyIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBSZXF1aXJlZDxDbHVzdGVyTWFuYWdlck9wdGlvbnM+O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgd29ya2VycyA9IG5ldyBNYXA8bnVtYmVyLCBXb3JrZXJTdGF0ZT4oKTtcblxuICBwcml2YXRlIHN0YXJ0ZWQgPSBmYWxzZTtcblxuICBwcml2YXRlIGlzU2h1dHRpbmdEb3duID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBzaHV0ZG93blByb21pc2U6IFByb21pc2U8dm9pZD4gfCBudWxsID0gbnVsbDtcblxuICBwcml2YXRlIGhlYWx0aENoZWNrSW50ZXJ2YWw6IE5vZGVKUy5UaW1lb3V0IHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSBzaWduYWxIYW5kbGVycyA9IG5ldyBNYXA8Tm9kZUpTLlNpZ25hbHMsICgpID0+IHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogQ2x1c3Rlck1hbmFnZXJPcHRpb25zID0ge30pIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMub3B0aW9ucyA9IHZhbGlkYXRlQW5kRGVmYXVsdE9wdGlvbnMob3B0aW9ucyk7XG4gICAgdGhpcy5zZXR1cFNpZ25hbEhhbmRsZXJzKCk7XG4gIH1cblxuICAvKipcbiAgICogU3RhcnRzIHRoZSBjbHVzdGVyIG1hbmFnZXJcbiAgICogSW4gcHJpbWFyeSBwcm9jZXNzOiBzdGFydHMgd29ya2VycyBhbmQgaGVhbHRoIG1vbml0b3JpbmdcbiAgICogSW4gd29ya2VyIHByb2Nlc3M6IGV4ZWN1dGVzIHdvcmtlciBmdW5jdGlvblxuICAgKi9cbiAgcHVibGljIGFzeW5jIHN0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuY2x1c3Rlci5pc1ByaW1hcnkpIHtcbiAgICAgIGF3YWl0IHRoaXMuc3RhcnRQcmltYXJ5KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHRoaXMuc3RhcnRXb3JrZXIoKTtcbiAgICB9XG4gICAgdGhpcy5zdGFydGVkID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWF0ZXMgZ3JhY2VmdWwgc2h1dGRvd24gb2YgdGhlIGNsdXN0ZXJcbiAgICovXG4gIHB1YmxpYyBzaHV0ZG93bihzaWduYWw/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuc3RhcnRlZCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNodXRkb3duUHJvbWlzZSkge1xuICAgICAgcmV0dXJuIHRoaXMuc2h1dGRvd25Qcm9taXNlO1xuICAgIH1cblxuICAgIHRoaXMuaXNTaHV0dGluZ0Rvd24gPSB0cnVlO1xuICAgIHRoaXMuZW1pdCgnc2h1dGRvd246c3RhcnRlZCcsIHNpZ25hbCk7XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmNsdXN0ZXIuaXNQcmltYXJ5KSB7XG4gICAgICB0aGlzLnNodXRkb3duUHJvbWlzZSA9IHRoaXMuc2h1dGRvd25QcmltYXJ5KHNpZ25hbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2h1dGRvd25Qcm9taXNlID0gdGhpcy5zaHV0ZG93bldvcmtlcihzaWduYWwpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnNodXRkb3duUHJvbWlzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHVwIHNpZ25hbCBoYW5kbGVycyBmb3IgZ3JhY2VmdWwgc2h1dGRvd25cbiAgICovXG4gIHByaXZhdGUgc2V0dXBTaWduYWxIYW5kbGVycygpOiB2b2lkIHtcbiAgICB0aGlzLm9wdGlvbnMuc2h1dGRvd25TaWduYWxzLmZvckVhY2goKHNpZ25hbCkgPT4ge1xuICAgICAgY29uc3QgaGFuZGxlciA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5zaHV0ZG93bihzaWduYWwpO1xuICAgICAgfTtcbiAgICAgIHRoaXMuc2lnbmFsSGFuZGxlcnMuc2V0KHNpZ25hbCwgaGFuZGxlcik7XG4gICAgICBwcm9jZXNzLm9uKHNpZ25hbCwgaGFuZGxlcik7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBzaWduYWwgaGFuZGxlcnNcbiAgICovXG4gIHByaXZhdGUgcmVtb3ZlU2lnbmFsSGFuZGxlcnMoKTogdm9pZCB7XG4gICAgQXJyYXkuZnJvbSh0aGlzLnNpZ25hbEhhbmRsZXJzLmVudHJpZXMoKSkuZm9yRWFjaCgoW3NpZ25hbCwgaGFuZGxlcl0pID0+IHtcbiAgICAgIHByb2Nlc3MucmVtb3ZlTGlzdGVuZXIoc2lnbmFsLCBoYW5kbGVyKTtcbiAgICB9KTtcbiAgICB0aGlzLnNpZ25hbEhhbmRsZXJzLmNsZWFyKCk7XG4gIH1cblxuICAvKipcbiAgICogU3RhcnRzIHRoZSBwcmltYXJ5IHByb2Nlc3NcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgc3RhcnRQcmltYXJ5KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxvZ2dlci5pbmZvKFxuICAgICAgYFByaW1hcnkgcHJvY2VzcyAocGlkOiAke3Byb2Nlc3MucGlkfSkgc3RhcnRpbmcgd2l0aCAke3RoaXMub3B0aW9ucy5udW1Xb3JrZXJzfSB3b3JrZXJzYCxcbiAgICApO1xuXG4gICAgLy8gRXhlY3V0ZSBwcmltYXJ5IGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLCBhbnkgZXJyb3Igd2lsbCBzdG9wIHRoZSBjbHVzdGVyIGZyb20gc3RhcnRpbmdcbiAgICBhd2FpdCB0aGlzLm9wdGlvbnMucHJpbWFyeUZuKCk7XG5cbiAgICAvLyBTZXQgdXAgY2x1c3RlciBldmVudCBoYW5kbGVyc1xuICAgIHRoaXMuc2V0dXBDbHVzdGVyRXZlbnRIYW5kbGVycygpO1xuXG4gICAgLy8gU3Bhd24gaW5pdGlhbCB3b3JrZXJzXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm9wdGlvbnMubnVtV29ya2VyczsgaSArPSAxKSB7XG4gICAgICBjb25zdCB3b3JrZXJJZCA9IGkgKyAxOyAvLyBXb3JrZXIgSURzIHN0YXJ0IGZyb20gMVxuICAgICAgdGhpcy5zcGF3bldvcmtlcih3b3JrZXJJZCk7XG4gICAgfVxuXG4gICAgLy8gU3RhcnQgaGVhbHRoIG1vbml0b3JpbmdcbiAgICB0aGlzLnN0YXJ0SGVhbHRoTW9uaXRvcmluZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0cyBhIHdvcmtlciBwcm9jZXNzXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHN0YXJ0V29ya2VyKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxvZ2dlci5pbmZvKGBXb3JrZXIgJHt0aGlzLmdldEN1cnJlbnRXb3JrZXJJZCgpfSAocGlkOiAke3Byb2Nlc3MucGlkfSkgc3RhcnRpbmdgKTtcblxuICAgIC8vIFNldCB1cCBJUEMgbWVzc2FnZSBoYW5kbGVyc1xuICAgIHRoaXMuc2V0dXBXb3JrZXJNZXNzYWdlSGFuZGxlcnMoKTtcblxuICAgIC8vIEV4ZWN1dGUgd29ya2VyIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLCBhbnkgZXJyb3Igd2lsbCBiZSBwcm9wYWdhdGVkXG4gICAgYXdhaXQgdGhpcy5vcHRpb25zLndvcmtlckZuKCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB1cCBjbHVzdGVyIGV2ZW50IGhhbmRsZXJzIGZvciB0aGUgcHJpbWFyeSBwcm9jZXNzXG4gICAqL1xuICBwcml2YXRlIHNldHVwQ2x1c3RlckV2ZW50SGFuZGxlcnMoKTogdm9pZCB7XG4gICAgdGhpcy5vcHRpb25zLmNsdXN0ZXIub24oJ2V4aXQnLCAod29ya2VyOiBXb3JrZXIsIGNvZGU6IG51bWJlciwgc2lnbmFsOiBzdHJpbmcpID0+IHtcbiAgICAgIHRoaXMuaGFuZGxlV29ya2VyRXhpdCh3b3JrZXIsIGNvZGUsIHNpZ25hbCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLm9wdGlvbnMuY2x1c3Rlci5vbignb25saW5lJywgKHdvcmtlcjogV29ya2VyKSA9PiB7XG4gICAgICBsb2dnZXIuaW5mbyhgV29ya2VyICR7dGhpcy5nZXRXb3JrZXJJZCh3b3JrZXIpfSAocGlkOiAke3dvcmtlci5wcm9jZXNzLnBpZH0pIGlzIG9ubGluZWApO1xuICAgICAgdGhpcy5lbWl0KCd3b3JrZXI6c3RhcnRlZCcsIHdvcmtlcik7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB1cCBJUEMgbWVzc2FnZSBoYW5kbGVycyBmb3Igd29ya2VyIHByb2Nlc3Nlc1xuICAgKi9cbiAgcHJpdmF0ZSBzZXR1cFdvcmtlck1lc3NhZ2VIYW5kbGVycygpOiB2b2lkIHtcbiAgICBwcm9jZXNzLm9uKCdtZXNzYWdlJywgKG1lc3NhZ2U6IElQQ01lc3NhZ2UpID0+IHtcbiAgICAgIHN3aXRjaCAobWVzc2FnZS50eXBlKSB7XG4gICAgICAgIGNhc2UgJ3BpbmcnOlxuICAgICAgICAgIHRoaXMuaGFuZGxlV29ya2VyUGluZyhtZXNzYWdlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnc2h1dGRvd24nOlxuICAgICAgICAgIHRoaXMuc2h1dGRvd24obWVzc2FnZS5zaWduYWwpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGxvZ2dlci53YXJuKGBpZ25vcmluZyB1bmtub3duIG1lc3NhZ2UgdHlwZSBpbiB3b3JrZXIgJHtwcm9jZXNzLnBpZH06ICR7bWVzc2FnZS50eXBlfWApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNwYXducyBhIG5ldyB3b3JrZXIgYW5kIHNldHMgdXAgaXRzIHN0YXRlXG4gICAqL1xuICBwcml2YXRlIHNwYXduV29ya2VyKGlkOiBudW1iZXIpOiBXb3JrZXIge1xuICAgIGNvbnN0IHdvcmtlciA9IHRoaXMub3B0aW9ucy5jbHVzdGVyLmZvcmsoe1xuICAgICAgV09SS0VSX0lEOiBpZCxcbiAgICB9KTtcbiAgICBjb25zdCB3b3JrZXJTdGF0ZTogV29ya2VyU3RhdGUgPSB7XG4gICAgICBpZCxcbiAgICAgIHdvcmtlcixcbiAgICAgIHJlc3RhcnRDb3VudDogMCxcbiAgICAgIGxhc3RQaW5nOiBEYXRlLm5vdygpLFxuICAgICAgcGVuZGluZ1Bpbmc6IGZhbHNlLFxuICAgICAgaXNTaHV0dGluZ0Rvd246IGZhbHNlLFxuICAgIH07XG5cbiAgICB0aGlzLndvcmtlcnMuc2V0KHdvcmtlci5pZCwgd29ya2VyU3RhdGUpO1xuXG4gICAgLy8gU2V0IHVwIHdvcmtlciBtZXNzYWdlIGhhbmRsZXJcbiAgICB3b3JrZXIub24oJ21lc3NhZ2UnLCAobWVzc2FnZTogSVBDTWVzc2FnZSkgPT4ge1xuICAgICAgdGhpcy5oYW5kbGVXb3JrZXJNZXNzYWdlKHdvcmtlciwgbWVzc2FnZSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gd29ya2VyO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgbWVzc2FnZXMgZnJvbSB3b3JrZXJzXG4gICAqL1xuICBwcml2YXRlIGhhbmRsZVdvcmtlck1lc3NhZ2Uod29ya2VyOiBXb3JrZXIsIG1lc3NhZ2U6IElQQ01lc3NhZ2UpOiB2b2lkIHtcbiAgICBjb25zdCB3b3JrZXJTdGF0ZSA9IHRoaXMud29ya2Vycy5nZXQod29ya2VyLmlkKTtcbiAgICBpZiAoIXdvcmtlclN0YXRlKSByZXR1cm47XG5cbiAgICBzd2l0Y2ggKG1lc3NhZ2UudHlwZSkge1xuICAgICAgY2FzZSAncG9uZyc6XG4gICAgICAgIHdvcmtlclN0YXRlLmxhc3RQaW5nID0gRGF0ZS5ub3coKTtcbiAgICAgICAgd29ya2VyU3RhdGUucGVuZGluZ1BpbmcgPSBmYWxzZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBsb2dnZXIud2FybihcbiAgICAgICAgICBgUmVjZWl2ZWQgdW5rbm93biBtZXNzYWdlIHR5cGUgZnJvbSB3b3JrZXIgJHt0aGlzLmdldFdvcmtlcklkKHdvcmtlcil9IChwaWQ6ICR7XG4gICAgICAgICAgICB3b3JrZXIucHJvY2Vzcy5waWRcbiAgICAgICAgICB9KTogJHttZXNzYWdlLnR5cGV9YCxcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgcGluZyBtZXNzYWdlcyBpbiB3b3JrZXIgcHJvY2Vzc2VzXG4gICAqL1xuICBwcml2YXRlIGhhbmRsZVdvcmtlclBpbmcobWVzc2FnZTogUGluZ01lc3NhZ2UpOiB2b2lkIHtcbiAgICBjb25zdCBwb25nTWVzc2FnZTogUG9uZ01lc3NhZ2UgPSB7XG4gICAgICB0eXBlOiAncG9uZycsXG4gICAgICB0aW1lc3RhbXA6IG1lc3NhZ2UudGltZXN0YW1wLFxuICAgIH07XG5cbiAgICBpZiAocHJvY2Vzcy5zZW5kKSB7XG4gICAgICBwcm9jZXNzLnNlbmQocG9uZ01lc3NhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydHMgaGVhbHRoIG1vbml0b3JpbmcgZm9yIGFsbCB3b3JrZXJzXG4gICAqL1xuICBwcml2YXRlIHN0YXJ0SGVhbHRoTW9uaXRvcmluZygpOiB2b2lkIHtcbiAgICB0aGlzLmhlYWx0aENoZWNrSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICB0aGlzLnBlcmZvcm1IZWFsdGhDaGVjaygpO1xuICAgIH0sIHRoaXMub3B0aW9ucy5waW5nRnJlcXVlbmN5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9wcyBoZWFsdGggbW9uaXRvcmluZ1xuICAgKi9cbiAgcHJpdmF0ZSBzdG9wSGVhbHRoTW9uaXRvcmluZygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5oZWFsdGhDaGVja0ludGVydmFsKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMuaGVhbHRoQ2hlY2tJbnRlcnZhbCk7XG4gICAgICB0aGlzLmhlYWx0aENoZWNrSW50ZXJ2YWwgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJmb3JtcyBoZWFsdGggY2hlY2sgb24gYWxsIHdvcmtlcnNcbiAgICovXG4gIHByaXZhdGUgcGVyZm9ybUhlYWx0aENoZWNrKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzU2h1dHRpbmdEb3duKSByZXR1cm47XG5cbiAgICBBcnJheS5mcm9tKHRoaXMud29ya2Vycy52YWx1ZXMoKSlcbiAgICAgIC5maWx0ZXIoKHdvcmtlclN0YXRlKSA9PiAhd29ya2VyU3RhdGUuaXNTaHV0dGluZ0Rvd24pXG4gICAgICAuZm9yRWFjaCgod29ya2VyU3RhdGUpID0+IHtcbiAgICAgICAgY29uc3QgdGltZVNpbmNlTGFzdFBpbmcgPSBEYXRlLm5vdygpIC0gd29ya2VyU3RhdGUubGFzdFBpbmc7XG5cbiAgICAgICAgaWYgKHdvcmtlclN0YXRlLnBlbmRpbmdQaW5nICYmIHRpbWVTaW5jZUxhc3RQaW5nID4gdGhpcy5vcHRpb25zLnBpbmdUaW1lb3V0KSB7XG4gICAgICAgICAgLy8gV29ya2VyIGlzIHN0dWNrLCBoYW5kbGUgaXRcbiAgICAgICAgICB0aGlzLmhhbmRsZVN0dWNrV29ya2VyKHdvcmtlclN0YXRlKTtcbiAgICAgICAgfSBlbHNlIGlmICghd29ya2VyU3RhdGUucGVuZGluZ1BpbmcpIHtcbiAgICAgICAgICAvLyBTZW5kIHBpbmcgdG8gd29ya2VyXG4gICAgICAgICAgdGhpcy5zZW5kUGluZ1RvV29ya2VyKHdvcmtlclN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU2VuZHMgYSBwaW5nIG1lc3NhZ2UgdG8gYSB3b3JrZXJcbiAgICovXG4gIHByaXZhdGUgc2VuZFBpbmdUb1dvcmtlcih3b3JrZXJTdGF0ZTogV29ya2VyU3RhdGUpOiB2b2lkIHtcbiAgICBjb25zdCBwaW5nTWVzc2FnZTogUGluZ01lc3NhZ2UgPSB7XG4gICAgICB0eXBlOiAncGluZycsXG4gICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgfTtcblxuICAgIHdvcmtlclN0YXRlLnBlbmRpbmdQaW5nID0gdHJ1ZTtcbiAgICB0cnkge1xuICAgICAgd29ya2VyU3RhdGUud29ya2VyLnNlbmQocGluZ01lc3NhZ2UpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoXG4gICAgICAgIGBGYWlsZWQgdG8gc2VuZCBwaW5nIHRvIHdvcmtlciAke3dvcmtlclN0YXRlLmlkfSAocGlkOiAke1xuICAgICAgICAgIHdvcmtlclN0YXRlLndvcmtlci5wcm9jZXNzLnBpZFxuICAgICAgICB9KTogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcil9YCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgYSBzdHVjayB3b3JrZXJcbiAgICovXG4gIHByaXZhdGUgaGFuZGxlU3R1Y2tXb3JrZXIod29ya2VyU3RhdGU6IFdvcmtlclN0YXRlKTogdm9pZCB7XG4gICAgbG9nZ2VyLmVycm9yKFxuICAgICAgYFdvcmtlciAke3dvcmtlclN0YXRlLmlkfSAocGlkOiAke3dvcmtlclN0YXRlLndvcmtlci5wcm9jZXNzLnBpZH0pIGlzIHN0dWNrLCBraWxsaW5nIGl0YCxcbiAgICApO1xuICAgIHRoaXMuZW1pdCgnd29ya2VyOnN0dWNrJywgd29ya2VyU3RhdGUud29ya2VyKTtcblxuICAgIC8vIFJlbW92ZSB3b3JrZXIgc3RhdGVcbiAgICB0aGlzLndvcmtlcnMuZGVsZXRlKHdvcmtlclN0YXRlLndvcmtlci5pZCk7XG5cbiAgICAvLyBLaWxsIHRoZSB3b3JrZXJcbiAgICB3b3JrZXJTdGF0ZS53b3JrZXIua2lsbCgnU0lHS0lMTCcpO1xuXG4gICAgLy8gRGV0ZXJtaW5lIGlmIHdlIHNob3VsZCBzcGF3biBhIHJlcGxhY2VtZW50XG4gICAgY29uc3Qgc2hvdWxkU3Bhd24gPSB0aGlzLm9wdGlvbnMuc3R1Y2tXb3JrZXJSZXNwYXduRnVuYyh3b3JrZXJTdGF0ZS53b3JrZXIpO1xuXG4gICAgaWYgKHNob3VsZFNwYXduICYmICF0aGlzLmlzU2h1dHRpbmdEb3duKSB7XG4gICAgICBsb2dnZXIuaW5mbyhcbiAgICAgICAgYFNwYXduaW5nIHJlcGxhY2VtZW50IHdvcmtlciBmb3Igc3R1Y2sgd29ya2VyICR7d29ya2VyU3RhdGUuaWR9IChwaWQ6ICR7d29ya2VyU3RhdGUud29ya2VyLnByb2Nlc3MucGlkfSlgLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHsgcmVzdGFydENvdW50IH0gPSB3b3JrZXJTdGF0ZTsgLy8gUHJlc2VydmUgcmVzdGFydCBjb3VudFxuICAgICAgY29uc3QgbmV3V29ya2VyID0gdGhpcy5zcGF3bldvcmtlcih3b3JrZXJTdGF0ZS5pZCk7XG4gICAgICBjb25zdCBuZXdXb3JrZXJTdGF0ZSA9IHRoaXMud29ya2Vycy5nZXQobmV3V29ya2VyLmlkKTtcbiAgICAgIGlmIChuZXdXb3JrZXJTdGF0ZSkge1xuICAgICAgICBuZXdXb3JrZXJTdGF0ZS5yZXN0YXJ0Q291bnQgPSByZXN0YXJ0Q291bnQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ2dlci5lcnJvcihcbiAgICAgICAgYFRyaWdnZXJpbmcgY2x1c3RlciBzaHV0ZG93biBkdWUgdG8gc3R1Y2sgd29ya2VyICR7d29ya2VyU3RhdGUuaWR9IChwaWQ6ICR7d29ya2VyU3RhdGUud29ya2VyLnByb2Nlc3MucGlkfSlgLFxuICAgICAgKTtcbiAgICAgIHRoaXMuc2h1dGRvd24oJ1NUVUNLX1dPUktFUicpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIHdvcmtlciBleGl0IGV2ZW50c1xuICAgKi9cbiAgcHJpdmF0ZSBoYW5kbGVXb3JrZXJFeGl0KHdvcmtlcjogV29ya2VyLCBjb2RlOiBudW1iZXIgfCBudWxsLCBzaWduYWw6IHN0cmluZyB8IG51bGwpOiB2b2lkIHtcbiAgICBsb2dnZXIuaW5mbyhcbiAgICAgIGBXb3JrZXIgJHt0aGlzLmdldFdvcmtlcklkKHdvcmtlcil9IChwaWQ6ICR7XG4gICAgICAgIHdvcmtlci5wcm9jZXNzLnBpZFxuICAgICAgfSkgZGllZCB3aXRoIGNvZGUgJHtjb2RlfSBhbmQgc2lnbmFsICR7c2lnbmFsfWAsXG4gICAgKTtcbiAgICB0aGlzLmVtaXQoJ3dvcmtlcjpkaWVkJywgd29ya2VyLCBjb2RlLCBzaWduYWwpO1xuXG4gICAgY29uc3Qgd29ya2VyU3RhdGUgPSB0aGlzLndvcmtlcnMuZ2V0KHdvcmtlci5pZCk7XG4gICAgaWYgKCF3b3JrZXJTdGF0ZSkgcmV0dXJuO1xuXG4gICAgdGhpcy53b3JrZXJzLmRlbGV0ZSh3b3JrZXIuaWQpO1xuXG4gICAgLy8gSWYgd2UncmUgc2h1dHRpbmcgZG93biBvciB3b3JrZXIgd2FzIGtpbGxlZCBpbnRlbnRpb25hbGx5LCBkb24ndCByZXN0YXJ0XG4gICAgaWYgKHRoaXMuaXNTaHV0dGluZ0Rvd24gfHwgd29ya2VyU3RhdGUuaXNTaHV0dGluZ0Rvd24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgdW5leHBlY3RlZCBleGl0XG4gICAgdGhpcy5oYW5kbGVVbmV4cGVjdGVkV29ya2VyRXhpdCh3b3JrZXJTdGF0ZSk7XG4gIH1cblxuICBwcml2YXRlIGdldFdvcmtlcklkKHdvcmtlcjogV29ya2VyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy53b3JrZXJzLmdldCh3b3JrZXIuaWQpPy5pZCA/PyB3b3JrZXIuaWQ7XG4gIH1cblxuICBwcml2YXRlIGdldEN1cnJlbnRXb3JrZXJJZCgpOiBudW1iZXIge1xuICAgIGNvbnN0IGVudldvcmtlcklkID1cbiAgICAgIHByb2Nlc3MuZW52LldPUktFUl9JRCAhPT0gdW5kZWZpbmVkID8gTnVtYmVyKHByb2Nlc3MuZW52LldPUktFUl9JRCkgOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIGVudldvcmtlcklkID8/IHRoaXMub3B0aW9ucy5jbHVzdGVyLndvcmtlcj8uaWQgPz8gLTE7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyB1bmV4cGVjdGVkIHdvcmtlciBleGl0cyB3aXRoIHJlc3RhcnQgbG9naWNcbiAgICovXG4gIHByaXZhdGUgaGFuZGxlVW5leHBlY3RlZFdvcmtlckV4aXQod29ya2VyU3RhdGU6IFdvcmtlclN0YXRlKTogdm9pZCB7XG4gICAgY29uc3QgcmVzdGFydENvdW50ID0gd29ya2VyU3RhdGUucmVzdGFydENvdW50ICsgMTtcblxuICAgIGlmIChyZXN0YXJ0Q291bnQgPD0gdGhpcy5vcHRpb25zLnJlc3RhcnRNYXhUaW1lcykge1xuICAgICAgbG9nZ2VyLmVycm9yKFxuICAgICAgICBgUmVzdGFydGluZyB3b3JrZXIgJHt3b3JrZXJTdGF0ZS5pZH0gKHBpZDogJHt3b3JrZXJTdGF0ZS53b3JrZXIucHJvY2Vzcy5waWR9KSAoYXR0ZW1wdCAke3Jlc3RhcnRDb3VudH0vJHt0aGlzLm9wdGlvbnMucmVzdGFydE1heFRpbWVzfSlgLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IG5ld1dvcmtlciA9IHRoaXMuc3Bhd25Xb3JrZXIod29ya2VyU3RhdGUuaWQpO1xuICAgICAgY29uc3QgbmV3V29ya2VyU3RhdGUgPSB0aGlzLndvcmtlcnMuZ2V0KG5ld1dvcmtlci5pZCk7XG4gICAgICBpZiAobmV3V29ya2VyU3RhdGUpIHtcbiAgICAgICAgbmV3V29ya2VyU3RhdGUucmVzdGFydENvdW50ID0gcmVzdGFydENvdW50O1xuICAgICAgfVxuICAgICAgdGhpcy5lbWl0KCd3b3JrZXI6cmVzdGFydGVkJywgbmV3V29ya2VyLCB3b3JrZXJTdGF0ZS5yZXN0YXJ0Q291bnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dnZXIuZXJyb3IoXG4gICAgICAgIGBSZXN0YXJ0IGxpbWl0ICgke3RoaXMub3B0aW9ucy5yZXN0YXJ0TWF4VGltZXN9KSBleGNlZWRlZCBmb3Igd29ya2VyICR7d29ya2VyU3RhdGUuaWR9IChwaWQ6ICR7d29ya2VyU3RhdGUud29ya2VyLnByb2Nlc3MucGlkfSksIHNodXR0aW5nIGRvd24gY2x1c3RlcmAsXG4gICAgICApO1xuICAgICAgdGhpcy5lbWl0KCd3b3JrZXI6cmVzdGFydC1saW1pdC1leGNlZWRlZCcsIHdvcmtlclN0YXRlLndvcmtlciwgd29ya2VyU3RhdGUucmVzdGFydENvdW50KTtcbiAgICAgIHRoaXMuc2h1dGRvd24oJ1JFU1RBUlRfTElNSVRfRVhDRUVERUQnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2h1dHMgZG93biB0aGUgcHJpbWFyeSBwcm9jZXNzXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHNodXRkb3duUHJpbWFyeShzaWduYWw/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsb2dnZXIuaW5mbyhcbiAgICAgIGBQcmltYXJ5IHByb2Nlc3MgKHBpZDogJHtwcm9jZXNzLnBpZH0pIHNodXR0aW5nIGRvd24gKHNpZ25hbDogJHtzaWduYWwgPz8gJ21hbnVhbCd9KWAsXG4gICAgKTtcblxuICAgIHRoaXMuc3RvcEhlYWx0aE1vbml0b3JpbmcoKTtcbiAgICB0aGlzLnJlbW92ZVNpZ25hbEhhbmRsZXJzKCk7XG5cbiAgICAvLyBTaHV0ZG93biBhbGwgd29ya2Vyc1xuICAgIGF3YWl0IHRoaXMuc2h1dGRvd25BbGxXb3JrZXJzKHNpZ25hbCk7XG5cbiAgICAvLyBFeGVjdXRlIHByaW1hcnkgc2h1dGRvd24gZnVuY3Rpb25cbiAgICBhd2FpdCBzYWZlRXhlY3V0ZShcbiAgICAgICgpID0+XG4gICAgICAgIHRpbWVvdXQoXG4gICAgICAgICAgdGhpcy5vcHRpb25zLnByaW1hcnlTaHV0ZG93bkZuKHNpZ25hbCksXG4gICAgICAgICAgdGhpcy5vcHRpb25zLnNodXRkb3duVGltZW91dCxcbiAgICAgICAgICAncHJpbWFyeSBzaHV0ZG93biB0aW1lb3V0JyxcbiAgICAgICAgKSxcbiAgICAgICdFcnJvciBpbiBwcmltYXJ5IHNodXRkb3duIGZ1bmN0aW9uJyxcbiAgICApO1xuXG4gICAgbG9nZ2VyLmluZm8oYFByaW1hcnkgcHJvY2VzcyAocGlkOiAke3Byb2Nlc3MucGlkfSkgc2h1dGRvd24gY29tcGxldGVkYCk7XG4gICAgdGhpcy5lbWl0KCdzaHV0ZG93bjpjb21wbGV0ZWQnKTtcbiAgICBwcm9jZXNzLmV4aXQoMCk7XG4gIH1cblxuICAvKipcbiAgICogU2h1dHMgZG93biBhbGwgd29ya2VycyBncmFjZWZ1bGx5XG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHNodXRkb3duQWxsV29ya2VycyhzaWduYWw/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy53b3JrZXJzLnNpemUgPT09IDApIHJldHVybjtcblxuICAgIGxvZ2dlci5pbmZvKGBTaHV0dGluZyBkb3duICR7dGhpcy53b3JrZXJzLnNpemV9IHdvcmtlcnMuLi5gKTtcblxuICAgIC8vIE1hcmsgYWxsIHdvcmtlcnMgYXMgc2h1dHRpbmcgZG93biBhbmQgc2VuZCBzaHV0ZG93biBtZXNzYWdlXG4gICAgQXJyYXkuZnJvbSh0aGlzLndvcmtlcnMudmFsdWVzKCkpLmZvckVhY2goKHdvcmtlclN0YXRlKSA9PiB7XG4gICAgICB3b3JrZXJTdGF0ZS5pc1NodXR0aW5nRG93biA9IHRydWU7XG4gICAgICAvLyBPbmx5IHNlbmQgc2h1dGRvd24gbWVzc2FnZSBpZiB3b3JrZXIgaXMgc3RpbGwgY29ubmVjdGVkXG4gICAgICBpZiAoIXdvcmtlclN0YXRlLndvcmtlci5pc0RlYWQoKSAmJiB3b3JrZXJTdGF0ZS53b3JrZXIucHJvY2Vzcy5jb25uZWN0ZWQpIHtcbiAgICAgICAgY29uc3Qgc2h1dGRvd25NZXNzYWdlOiBTaHV0ZG93bk1lc3NhZ2UgPSB7XG4gICAgICAgICAgdHlwZTogJ3NodXRkb3duJyxcbiAgICAgICAgICBzaWduYWwsXG4gICAgICAgIH07XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgd29ya2VyU3RhdGUud29ya2VyLnNlbmQoc2h1dGRvd25NZXNzYWdlKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAvLyBXb3JrZXIgSVBDIGNoYW5uZWwgaXMgYWxyZWFkeSBjbG9zZWQsIHdoaWNoIGlzIGZpbmVcbiAgICAgICAgICBsb2dnZXIud2FybihcbiAgICAgICAgICAgIGBGYWlsZWQgdG8gc2VuZCBzaHV0ZG93biBtZXNzYWdlIHRvIHdvcmtlciAke3dvcmtlclN0YXRlLmlkfSAocGlkOiAke1xuICAgICAgICAgICAgICB3b3JrZXJTdGF0ZS53b3JrZXIucHJvY2Vzcy5waWRcbiAgICAgICAgICAgIH0pOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKX1gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIFdhaXQgZm9yIHdvcmtlcnMgdG8gZXhpdCBncmFjZWZ1bGx5IG9yIHRpbWVvdXRcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGltZW91dChcbiAgICAgICAgdGhpcy53YWl0Rm9yQWxsV29ya2Vyc1RvRXhpdCgpLFxuICAgICAgICB0aGlzLm9wdGlvbnMuc2h1dGRvd25UaW1lb3V0LFxuICAgICAgICAnV29ya2VyIHNodXRkb3duIHRpbWVvdXQnLFxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdHcmFjZWZ1bCBzaHV0ZG93biBmb3Igd29ya2VycyB0aW1lZCBvdXQsIGZvcmNpbmcgc2h1dGRvd24nKTtcbiAgICAgIHRoaXMuZm9yY2VLaWxsQWxsV29ya2VycygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBXYWl0cyBmb3IgYWxsIHdvcmtlcnMgdG8gZXhpdFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyB3YWl0Rm9yQWxsV29ya2Vyc1RvRXhpdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB3aGlsZSAodGhpcy53b3JrZXJzLnNpemUgPiAwKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYXdhaXQtaW4tbG9vcFxuICAgICAgYXdhaXQgZGVsYXkoMTAwKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRm9yY2Uga2lsbHMgYWxsIHJlbWFpbmluZyB3b3JrZXJzXG4gICAqL1xuICBwcml2YXRlIGZvcmNlS2lsbEFsbFdvcmtlcnMoKTogdm9pZCB7XG4gICAgQXJyYXkuZnJvbSh0aGlzLndvcmtlcnMudmFsdWVzKCkpLmZvckVhY2goKHdvcmtlclN0YXRlKSA9PiB7XG4gICAgICBsb2dnZXIuZXJyb3IoXG4gICAgICAgIGBGb3JjZSBraWxsaW5nIHdvcmtlciAke3dvcmtlclN0YXRlLmlkfSAocGlkOiAke3dvcmtlclN0YXRlLndvcmtlci5wcm9jZXNzLnBpZH0pYCxcbiAgICAgICk7XG4gICAgICB3b3JrZXJTdGF0ZS53b3JrZXIua2lsbCgnU0lHS0lMTCcpO1xuICAgIH0pO1xuICAgIHRoaXMud29ya2Vycy5jbGVhcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNodXRzIGRvd24gYSB3b3JrZXIgcHJvY2Vzc1xuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBzaHV0ZG93bldvcmtlcihzaWduYWw/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsb2dnZXIuaW5mbyhcbiAgICAgIGBXb3JrZXIgJHt0aGlzLmdldEN1cnJlbnRXb3JrZXJJZCgpfSAocGlkOiAke3Byb2Nlc3MucGlkfSkgc2h1dHRpbmcgZG93biAoc2lnbmFsOiAke1xuICAgICAgICBzaWduYWwgPz8gJ21hbnVhbCdcbiAgICAgIH0pYCxcbiAgICApO1xuXG4gICAgdGhpcy5yZW1vdmVTaWduYWxIYW5kbGVycygpO1xuXG4gICAgLy8gRXhlY3V0ZSB3b3JrZXIgc2h1dGRvd24gZnVuY3Rpb25cbiAgICBhd2FpdCBzYWZlRXhlY3V0ZShcbiAgICAgICgpID0+XG4gICAgICAgIHRpbWVvdXQoXG4gICAgICAgICAgdGhpcy5vcHRpb25zLndvcmtlclNodXRkb3duRm4oc2lnbmFsKSxcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuc2h1dGRvd25UaW1lb3V0LFxuICAgICAgICAgICd3b3JrZXIgc2h1dGRvd24gdGltZW91dCcsXG4gICAgICAgICksXG4gICAgICBgRXJyb3IgaW4gd29ya2VyICR7dGhpcy5nZXRDdXJyZW50V29ya2VySWQoKX0gKHBpZDogJHtwcm9jZXNzLnBpZH0pIHNodXRkb3duIGZ1bmN0aW9uYCxcbiAgICApO1xuXG4gICAgbG9nZ2VyLmluZm8oYFdvcmtlciAke3RoaXMuZ2V0Q3VycmVudFdvcmtlcklkKCl9IChwaWQ6ICR7cHJvY2Vzcy5waWR9KSBzaHV0ZG93biBjb21wbGV0ZWRgKTtcbiAgICBwcm9jZXNzLmV4aXQoMCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgY3VycmVudCBudW1iZXIgb2YgYWN0aXZlIHdvcmtlcnNcbiAgICovXG4gIHB1YmxpYyBnZXRXb3JrZXJDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLndvcmtlcnMuc2l6ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGluZm9ybWF0aW9uIGFib3V0IGFsbCB3b3JrZXJzXG4gICAqL1xuICBwdWJsaWMgZ2V0V29ya2VySW5mbygpOiBBcnJheTx7IGlkOiBudW1iZXI7IHBpZDogbnVtYmVyOyByZXN0YXJ0Q291bnQ6IG51bWJlciB9PiB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy53b3JrZXJzLnZhbHVlcygpKS5tYXAoKHN0YXRlKSA9PiAoe1xuICAgICAgaWQ6IHN0YXRlLmlkLFxuICAgICAgcGlkOiBzdGF0ZS53b3JrZXIucHJvY2Vzcy5waWQgPz8gLTEsXG4gICAgICByZXN0YXJ0Q291bnQ6IHN0YXRlLnJlc3RhcnRDb3VudCxcbiAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBjbHVzdGVyIGlzIGN1cnJlbnRseSBzdGFydGVkXG4gICAqL1xuICBwdWJsaWMgaXNTdGFydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0ZWQ7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBjbHVzdGVyIGlzIGN1cnJlbnRseSBzaHV0dGluZyBkb3duXG4gICAqL1xuICBwdWJsaWMgaXNTaHV0ZG93bigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1NodXR0aW5nRG93bjtcbiAgfVxufVxuXG4vLyBUeXBlLXNhZmUgZXZlbnQgZW1pdHRlciBpbnRlcmZhY2VcbmV4cG9ydCBpbnRlcmZhY2UgQ2x1c3Rlck1hbmFnZXJFbWl0dGVyIHtcbiAgb248SyBleHRlbmRzIGtleW9mIENsdXN0ZXJNYW5hZ2VyRXZlbnRzPihldmVudDogSywgbGlzdGVuZXI6IENsdXN0ZXJNYW5hZ2VyRXZlbnRzW0tdKTogdGhpcztcbiAgZW1pdDxLIGV4dGVuZHMga2V5b2YgQ2x1c3Rlck1hbmFnZXJFdmVudHM+KFxuICAgIGV2ZW50OiBLLFxuICAgIC4uLmFyZ3M6IFBhcmFtZXRlcnM8Q2x1c3Rlck1hbmFnZXJFdmVudHNbS10+XG4gICk6IGJvb2xlYW47XG59XG4iXX0=
@@ -39,6 +39,7 @@ export interface Cluster {
39
39
  * Internal worker state tracking
40
40
  */
41
41
  export interface WorkerState {
42
+ id: number;
42
43
  worker: Worker;
43
44
  restartCount: number;
44
45
  lastPing: number;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/cluster/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/cluster/types.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2x1c3Rlci90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgV29ya2VyIH0gZnJvbSAnY2x1c3Rlcic7XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBDbHVzdGVyTWFuYWdlclxuICovXG5leHBvcnQgaW50ZXJmYWNlIENsdXN0ZXJNYW5hZ2VyT3B0aW9ucyB7XG4gIGNsdXN0ZXI/OiBDbHVzdGVyO1xuXG4gIC8qKiBGdW5jdGlvbiB0byBleGVjdXRlIGluIHRoZSBwcmltYXJ5IHByb2Nlc3MgZHVyaW5nIHN0YXJ0ICovXG4gIHByaW1hcnlGbj86ICgpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKiBGdW5jdGlvbiB0byBleGVjdXRlIGluIHRoZSBwcmltYXJ5IHByb2Nlc3MgYWZ0ZXIgYWxsIHdvcmtlcnMgaGF2ZSBiZWVuIHNodXRkb3duIGFuZCBqdXN0IGJlZm9yZSBwcmltYXJ5IHByb2Nlc3Mgc2h1dGRvd24gKi9cbiAgcHJpbWFyeVNodXRkb3duRm4/OiAoc2lnbmFsPzogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKiBGdW5jdGlvbiB0byBleGVjdXRlIGluIHdvcmtlciBwcm9jZXNzZXMgZHVyaW5nIHN0YXJ0ICovXG4gIHdvcmtlckZuPzogKCkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD47XG5cbiAgLyoqIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgaW4gd29ya2VyIHByb2Nlc3NlcyBqdXN0IGJlZm9yZSB3b3JrZXIgcHJvY2VzcyBzaHV0ZG93biAqL1xuICB3b3JrZXJTaHV0ZG93bkZuPzogKHNpZ25hbD86IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcblxuICAvKiogRnJlcXVlbmN5IG9mIHdvcmtlciBoZWFsdGggY2hlY2tzIGluIG1pbGxpc2Vjb25kcyAoZGVmYXVsdDogMTAwMDApICovXG4gIHBpbmdGcmVxdWVuY3k/OiBudW1iZXI7XG5cbiAgLyoqIFRpbWVvdXQgZm9yIHdvcmtlciBwaW5nIHJlc3BvbnNlcyBpbiBtaWxsaXNlY29uZHMgKGRlZmF1bHQ6IDMwMDAwKSAqL1xuICBwaW5nVGltZW91dD86IG51bWJlcjtcblxuICAvKiogQ2FsbGJhY2sgdG8gZGV0ZXJtaW5lIGFjdGlvbiB3aGVuIGEgc3R1Y2sgd29ya2VyIGlzIGtpbGxlZCwgaWYgdHJ1ZSBhIG5ldyB3b3JrZXIgd2lsbCBiZSBzcGF3bmVkLCBpZiBmYWxzZSBjbHVzdGVyIHdpbGwgc2h1dGRvd24gKGRlZmF1bHQ6IHRydWUpICovXG4gIHN0dWNrV29ya2VyUmVzcGF3bkZ1bmM/OiAod29ya2VyOiBXb3JrZXIpID0+IGJvb2xlYW47XG5cbiAgLyoqIE1heGltdW0gbnVtYmVyIG9mIHRpbWVzIHRvIHJlc3RhcnQgYSB3b3JrZXIgYWZ0ZXIgaXQgaGFzIGV4aXRlZCB1bmV4cGVjdGVkbHkgKGRlZmF1bHQ6IDMpICovXG4gIHJlc3RhcnRNYXhUaW1lcz86IG51bWJlcjtcblxuICAvKiogU2lnbmFscyB0aGF0IHRyaWdnZXIgc2h1dGRvd24gKGRlZmF1bHQ6IFsnU0lHSU5UJywgJ1NJR1RFUk0nXSkgKi9cbiAgc2h1dGRvd25TaWduYWxzPzogTm9kZUpTLlNpZ25hbHNbXTtcblxuICAvKiogVGltZW91dCBmb3IgZ3JhY2VmdWwgd29ya2VyIHNodXRkb3duIGluIG1pbGxpc2Vjb25kcyAoZGVmYXVsdDogMzAwMDApICovXG4gIHNodXRkb3duVGltZW91dD86IG51bWJlcjtcblxuICAvKiogTnVtYmVyIG9mIHdvcmtlciBwcm9jZXNzZXMgdG8gc3Bhd24gKGRlZmF1bHQ6IG51bWJlciBvZiBDUFUgY29yZXMpICovXG4gIG51bVdvcmtlcnM/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2x1c3RlciB7XG4gIHdvcmtlcj86IFdvcmtlciB8IHVuZGVmaW5lZDtcbiAgcmVhZG9ubHkgaXNQcmltYXJ5OiBib29sZWFuO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBmb3JrKGVudj86IGFueSk6IFdvcmtlcjtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgb24oZXZlbnQ6IHN0cmluZywgbGlzdGVuZXI6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCk6IENsdXN0ZXI7XG4gIG9uKGV2ZW50OiAnZXhpdCcsIGxpc3RlbmVyOiAod29ya2VyOiBXb3JrZXIsIGNvZGU6IG51bWJlciwgc2lnbmFsOiBzdHJpbmcpID0+IHZvaWQpOiB0aGlzO1xuICBvbihldmVudDogJ29ubGluZScsIGxpc3RlbmVyOiAod29ya2VyOiBXb3JrZXIpID0+IHZvaWQpOiB0aGlzO1xufVxuLyoqXG4gKiBJbnRlcm5hbCB3b3JrZXIgc3RhdGUgdHJhY2tpbmdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXb3JrZXJTdGF0ZSB7XG4gIHdvcmtlcjogV29ya2VyO1xuICByZXN0YXJ0Q291bnQ6IG51bWJlcjsgLy8gTnVtYmVyIG9mIHRpbWVzIHRoZSB3b3JrZXIgaGFzIGJlZW4gcmVzdGFydGVkXG4gIGxhc3RQaW5nOiBudW1iZXI7IC8vIFRpbWVzdGFtcCBvZiB0aGUgbGFzdCBwaW5nIHJlY2VpdmVkIGZyb20gdGhlIHdvcmtlclxuICBwZW5kaW5nUGluZzogYm9vbGVhbjsgLy8gV2hldGhlciBhIHBpbmcgcmVzcG9uc2UgaXMgcGVuZGluZyBmcm9tIHRoZSB3b3JrZXJcbiAgaXNTaHV0dGluZ0Rvd246IGJvb2xlYW47IC8vIFdoZXRoZXIgdGhlIHdvcmtlciBpcyBpbiB0aGUgcHJvY2VzcyBvZiBzaHV0dGluZyBkb3duXG59XG5cbi8qKlxuICogRXZlbnRzIGVtaXR0ZWQgYnkgQ2x1c3Rlck1hbmFnZXJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDbHVzdGVyTWFuYWdlckV2ZW50cyB7XG4gICd3b3JrZXI6c3RhcnRlZCc6ICh3b3JrZXI6IFdvcmtlcikgPT4gdm9pZDtcbiAgJ3dvcmtlcjpkaWVkJzogKHdvcmtlcjogV29ya2VyLCBjb2RlOiBudW1iZXIgfCBudWxsLCBzaWduYWw6IHN0cmluZyB8IG51bGwpID0+IHZvaWQ7XG4gICd3b3JrZXI6c3R1Y2snOiAod29ya2VyOiBXb3JrZXIpID0+IHZvaWQ7XG4gICd3b3JrZXI6cmVzdGFydGVkJzogKHdvcmtlcjogV29ya2VyLCByZXN0YXJ0Q291bnQ6IG51bWJlcikgPT4gdm9pZDtcbiAgJ3dvcmtlcjpyZXN0YXJ0LWxpbWl0LWV4Y2VlZGVkJzogKHdvcmtlcjogV29ya2VyLCByZXN0YXJ0Q291bnQ6IG51bWJlcikgPT4gdm9pZDtcbiAgJ3NodXRkb3duOnN0YXJ0ZWQnOiAoc2lnbmFsPzogc3RyaW5nKSA9PiB2b2lkO1xuICAnc2h1dGRvd246Y29tcGxldGVkJzogKCkgPT4gdm9pZDtcbiAgZXJyb3I6IChlcnJvcjogRXJyb3IpID0+IHZvaWQ7XG59XG5cbi8qKlxuICogTWVzc2FnZSB0eXBlcyBmb3IgaW50ZXItcHJvY2VzcyBjb21tdW5pY2F0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGluZ01lc3NhZ2Uge1xuICB0eXBlOiAncGluZyc7XG4gIHRpbWVzdGFtcDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBvbmdNZXNzYWdlIHtcbiAgdHlwZTogJ3BvbmcnO1xuICB0aW1lc3RhbXA6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaHV0ZG93bk1lc3NhZ2Uge1xuICB0eXBlOiAnc2h1dGRvd24nO1xuICBzaWduYWw/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIElQQ01lc3NhZ2UgPSBQaW5nTWVzc2FnZSB8IFBvbmdNZXNzYWdlIHwgU2h1dGRvd25NZXNzYWdlO1xuIl19
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2x1c3Rlci90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgV29ya2VyIH0gZnJvbSAnY2x1c3Rlcic7XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBDbHVzdGVyTWFuYWdlclxuICovXG5leHBvcnQgaW50ZXJmYWNlIENsdXN0ZXJNYW5hZ2VyT3B0aW9ucyB7XG4gIGNsdXN0ZXI/OiBDbHVzdGVyO1xuXG4gIC8qKiBGdW5jdGlvbiB0byBleGVjdXRlIGluIHRoZSBwcmltYXJ5IHByb2Nlc3MgZHVyaW5nIHN0YXJ0ICovXG4gIHByaW1hcnlGbj86ICgpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKiBGdW5jdGlvbiB0byBleGVjdXRlIGluIHRoZSBwcmltYXJ5IHByb2Nlc3MgYWZ0ZXIgYWxsIHdvcmtlcnMgaGF2ZSBiZWVuIHNodXRkb3duIGFuZCBqdXN0IGJlZm9yZSBwcmltYXJ5IHByb2Nlc3Mgc2h1dGRvd24gKi9cbiAgcHJpbWFyeVNodXRkb3duRm4/OiAoc2lnbmFsPzogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKiBGdW5jdGlvbiB0byBleGVjdXRlIGluIHdvcmtlciBwcm9jZXNzZXMgZHVyaW5nIHN0YXJ0ICovXG4gIHdvcmtlckZuPzogKCkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD47XG5cbiAgLyoqIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgaW4gd29ya2VyIHByb2Nlc3NlcyBqdXN0IGJlZm9yZSB3b3JrZXIgcHJvY2VzcyBzaHV0ZG93biAqL1xuICB3b3JrZXJTaHV0ZG93bkZuPzogKHNpZ25hbD86IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcblxuICAvKiogRnJlcXVlbmN5IG9mIHdvcmtlciBoZWFsdGggY2hlY2tzIGluIG1pbGxpc2Vjb25kcyAoZGVmYXVsdDogMTAwMDApICovXG4gIHBpbmdGcmVxdWVuY3k/OiBudW1iZXI7XG5cbiAgLyoqIFRpbWVvdXQgZm9yIHdvcmtlciBwaW5nIHJlc3BvbnNlcyBpbiBtaWxsaXNlY29uZHMgKGRlZmF1bHQ6IDMwMDAwKSAqL1xuICBwaW5nVGltZW91dD86IG51bWJlcjtcblxuICAvKiogQ2FsbGJhY2sgdG8gZGV0ZXJtaW5lIGFjdGlvbiB3aGVuIGEgc3R1Y2sgd29ya2VyIGlzIGtpbGxlZCwgaWYgdHJ1ZSBhIG5ldyB3b3JrZXIgd2lsbCBiZSBzcGF3bmVkLCBpZiBmYWxzZSBjbHVzdGVyIHdpbGwgc2h1dGRvd24gKGRlZmF1bHQ6IHRydWUpICovXG4gIHN0dWNrV29ya2VyUmVzcGF3bkZ1bmM/OiAod29ya2VyOiBXb3JrZXIpID0+IGJvb2xlYW47XG5cbiAgLyoqIE1heGltdW0gbnVtYmVyIG9mIHRpbWVzIHRvIHJlc3RhcnQgYSB3b3JrZXIgYWZ0ZXIgaXQgaGFzIGV4aXRlZCB1bmV4cGVjdGVkbHkgKGRlZmF1bHQ6IDMpICovXG4gIHJlc3RhcnRNYXhUaW1lcz86IG51bWJlcjtcblxuICAvKiogU2lnbmFscyB0aGF0IHRyaWdnZXIgc2h1dGRvd24gKGRlZmF1bHQ6IFsnU0lHSU5UJywgJ1NJR1RFUk0nXSkgKi9cbiAgc2h1dGRvd25TaWduYWxzPzogTm9kZUpTLlNpZ25hbHNbXTtcblxuICAvKiogVGltZW91dCBmb3IgZ3JhY2VmdWwgd29ya2VyIHNodXRkb3duIGluIG1pbGxpc2Vjb25kcyAoZGVmYXVsdDogMzAwMDApICovXG4gIHNodXRkb3duVGltZW91dD86IG51bWJlcjtcblxuICAvKiogTnVtYmVyIG9mIHdvcmtlciBwcm9jZXNzZXMgdG8gc3Bhd24gKGRlZmF1bHQ6IG51bWJlciBvZiBDUFUgY29yZXMpICovXG4gIG51bVdvcmtlcnM/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2x1c3RlciB7XG4gIHdvcmtlcj86IFdvcmtlciB8IHVuZGVmaW5lZDtcbiAgcmVhZG9ubHkgaXNQcmltYXJ5OiBib29sZWFuO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBmb3JrKGVudj86IGFueSk6IFdvcmtlcjtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgb24oZXZlbnQ6IHN0cmluZywgbGlzdGVuZXI6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCk6IENsdXN0ZXI7XG4gIG9uKGV2ZW50OiAnZXhpdCcsIGxpc3RlbmVyOiAod29ya2VyOiBXb3JrZXIsIGNvZGU6IG51bWJlciwgc2lnbmFsOiBzdHJpbmcpID0+IHZvaWQpOiB0aGlzO1xuICBvbihldmVudDogJ29ubGluZScsIGxpc3RlbmVyOiAod29ya2VyOiBXb3JrZXIpID0+IHZvaWQpOiB0aGlzO1xufVxuLyoqXG4gKiBJbnRlcm5hbCB3b3JrZXIgc3RhdGUgdHJhY2tpbmdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXb3JrZXJTdGF0ZSB7XG4gIGlkOiBudW1iZXI7XG4gIHdvcmtlcjogV29ya2VyO1xuICByZXN0YXJ0Q291bnQ6IG51bWJlcjsgLy8gTnVtYmVyIG9mIHRpbWVzIHRoZSB3b3JrZXIgaGFzIGJlZW4gcmVzdGFydGVkXG4gIGxhc3RQaW5nOiBudW1iZXI7IC8vIFRpbWVzdGFtcCBvZiB0aGUgbGFzdCBwaW5nIHJlY2VpdmVkIGZyb20gdGhlIHdvcmtlclxuICBwZW5kaW5nUGluZzogYm9vbGVhbjsgLy8gV2hldGhlciBhIHBpbmcgcmVzcG9uc2UgaXMgcGVuZGluZyBmcm9tIHRoZSB3b3JrZXJcbiAgaXNTaHV0dGluZ0Rvd246IGJvb2xlYW47IC8vIFdoZXRoZXIgdGhlIHdvcmtlciBpcyBpbiB0aGUgcHJvY2VzcyBvZiBzaHV0dGluZyBkb3duXG59XG5cbi8qKlxuICogRXZlbnRzIGVtaXR0ZWQgYnkgQ2x1c3Rlck1hbmFnZXJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDbHVzdGVyTWFuYWdlckV2ZW50cyB7XG4gICd3b3JrZXI6c3RhcnRlZCc6ICh3b3JrZXI6IFdvcmtlcikgPT4gdm9pZDtcbiAgJ3dvcmtlcjpkaWVkJzogKHdvcmtlcjogV29ya2VyLCBjb2RlOiBudW1iZXIgfCBudWxsLCBzaWduYWw6IHN0cmluZyB8IG51bGwpID0+IHZvaWQ7XG4gICd3b3JrZXI6c3R1Y2snOiAod29ya2VyOiBXb3JrZXIpID0+IHZvaWQ7XG4gICd3b3JrZXI6cmVzdGFydGVkJzogKHdvcmtlcjogV29ya2VyLCByZXN0YXJ0Q291bnQ6IG51bWJlcikgPT4gdm9pZDtcbiAgJ3dvcmtlcjpyZXN0YXJ0LWxpbWl0LWV4Y2VlZGVkJzogKHdvcmtlcjogV29ya2VyLCByZXN0YXJ0Q291bnQ6IG51bWJlcikgPT4gdm9pZDtcbiAgJ3NodXRkb3duOnN0YXJ0ZWQnOiAoc2lnbmFsPzogc3RyaW5nKSA9PiB2b2lkO1xuICAnc2h1dGRvd246Y29tcGxldGVkJzogKCkgPT4gdm9pZDtcbiAgZXJyb3I6IChlcnJvcjogRXJyb3IpID0+IHZvaWQ7XG59XG5cbi8qKlxuICogTWVzc2FnZSB0eXBlcyBmb3IgaW50ZXItcHJvY2VzcyBjb21tdW5pY2F0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGluZ01lc3NhZ2Uge1xuICB0eXBlOiAncGluZyc7XG4gIHRpbWVzdGFtcDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBvbmdNZXNzYWdlIHtcbiAgdHlwZTogJ3BvbmcnO1xuICB0aW1lc3RhbXA6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaHV0ZG93bk1lc3NhZ2Uge1xuICB0eXBlOiAnc2h1dGRvd24nO1xuICBzaWduYWw/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIElQQ01lc3NhZ2UgPSBQaW5nTWVzc2FnZSB8IFBvbmdNZXNzYWdlIHwgU2h1dGRvd25NZXNzYWdlO1xuIl19
package/build/index.d.ts CHANGED
@@ -8,5 +8,6 @@ export * from './network';
8
8
  export * from './utils';
9
9
  export * from './constants';
10
10
  export * from './sdks';
11
+ export * from './cluster';
11
12
  export { setValue };
12
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,iBAAiB,CAAC;AAEvC,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,qBAAqB,CAAC;AACpC,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,QAAQ,CAAC;AACvB,OAAO,EAAE,QAAQ,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,iBAAiB,CAAC;AAEvC,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,qBAAqB,CAAC;AACpC,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,CAAC"}
package/build/index.js CHANGED
@@ -29,4 +29,5 @@ __exportStar(require("./network"), exports);
29
29
  __exportStar(require("./utils"), exports);
30
30
  __exportStar(require("./constants"), exports);
31
31
  __exportStar(require("./sdks"), exports);
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxnRUFBdUM7QUFXOUIsbUJBWEYsbUJBQVEsQ0FXRTtBQVRqQiwwQ0FBd0I7QUFDeEIseUNBQXVCO0FBQ3ZCLDJDQUF5QjtBQUN6QiwyQ0FBeUI7QUFDekIsc0RBQW9DO0FBQ3BDLDRDQUEwQjtBQUMxQiwwQ0FBd0I7QUFDeEIsOENBQTRCO0FBQzVCLHlDQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBzZXRWYWx1ZSBmcm9tICcuL2xpYi9zZXQtdmFsdWUnO1xuXG5leHBvcnQgKiBmcm9tICcuL3R5cGVzJztcbmV4cG9ydCAqIGZyb20gJy4vdGFncyc7XG5leHBvcnQgKiBmcm9tICcuL2Vycm9ycyc7XG5leHBvcnQgKiBmcm9tICcuL2xvZ2dlcic7XG5leHBvcnQgKiBmcm9tICcuL3N0cnVjdHVyZWQtbG9nZ2VyJztcbmV4cG9ydCAqIGZyb20gJy4vbmV0d29yayc7XG5leHBvcnQgKiBmcm9tICcuL3V0aWxzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RhbnRzJztcbmV4cG9ydCAqIGZyb20gJy4vc2Rrcyc7XG5leHBvcnQgeyBzZXRWYWx1ZSB9O1xuIl19
32
+ __exportStar(require("./cluster"), exports);
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxnRUFBdUM7QUFZOUIsbUJBWkYsbUJBQVEsQ0FZRTtBQVZqQiwwQ0FBd0I7QUFDeEIseUNBQXVCO0FBQ3ZCLDJDQUF5QjtBQUN6QiwyQ0FBeUI7QUFDekIsc0RBQW9DO0FBQ3BDLDRDQUEwQjtBQUMxQiwwQ0FBd0I7QUFDeEIsOENBQTRCO0FBQzVCLHlDQUF1QjtBQUN2Qiw0Q0FBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc2V0VmFsdWUgZnJvbSAnLi9saWIvc2V0LXZhbHVlJztcblxuZXhwb3J0ICogZnJvbSAnLi90eXBlcyc7XG5leHBvcnQgKiBmcm9tICcuL3RhZ3MnO1xuZXhwb3J0ICogZnJvbSAnLi9lcnJvcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9sb2dnZXInO1xuZXhwb3J0ICogZnJvbSAnLi9zdHJ1Y3R1cmVkLWxvZ2dlcic7XG5leHBvcnQgKiBmcm9tICcuL25ldHdvcmsnO1xuZXhwb3J0ICogZnJvbSAnLi91dGlscyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0YW50cyc7XG5leHBvcnQgKiBmcm9tICcuL3Nka3MnO1xuZXhwb3J0ICogZnJvbSAnLi9jbHVzdGVyJztcbmV4cG9ydCB7IHNldFZhbHVlIH07XG4iXX0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rudderstack/integrations-lib",
3
- "version": "0.2.39",
3
+ "version": "0.2.40",
4
4
  "description": "",
5
5
  "main": "build/index.js",
6
6
  "module": "build/index.js",