velocious 1.0.537 → 1.0.539

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -5,7 +5,7 @@
5
5
  * Database models with migrations and validations
6
6
  * Database models that work almost the same in frontend and backend
7
7
  * Built-in record auditing for model lifecycle changes (see [docs/auditing.md](docs/auditing.md))
8
- * Declarative state machines for models (see [docs/state-machine.md](docs/state-machine.md))
8
+ * Declarative state machines for models, with typed event methods generated into the base model (see [docs/state-machine.md](docs/state-machine.md))
9
9
  * Migrations for schema changes and UTC datetime storage (see [docs/database-migrations.md](docs/database-migrations.md))
10
10
  * External packages (engines) that contribute data models, frontend-model resources and migrations to a consuming app (see [docs/packages.md](docs/packages.md))
11
11
  * Controllers and views for HTTP endpoints
@@ -261,11 +261,16 @@ export default class BackgroundJobsScheduler {
261
261
  */
262
262
  async enqueueScheduledJob({jobConfiguration, jobKey}) {
263
263
  try {
264
+ // De-duplicate scheduled enqueues by default: a periodic job still pending from an earlier
265
+ // tick is not enqueued again, which is what let the background_jobs table fill with thousands
266
+ // of identical scheduled jobs when the queue backed up. Dedup is by job identity (see the
267
+ // store), so the job keeps its queue-derived concurrency cap. A schedule can opt out with
268
+ // `deduplicateWhileQueued: false`.
264
269
  await this.enqueueJob({
265
270
  args: Array.isArray(jobConfiguration.args) ? jobConfiguration.args : [],
266
271
  jobClass: jobConfiguration.class,
267
272
  jobKey,
268
- options: jobConfiguration.options || {}
273
+ options: {deduplicateWhileQueued: true, ...(jobConfiguration.options || {})}
269
274
  })
270
275
  } catch (error) {
271
276
  await this.logger.error(() => ["Failed to enqueue scheduled background job", {jobKey, jobName: jobConfiguration.class.jobName()}, error])
@@ -144,12 +144,16 @@ export default class BackgroundJobsStore {
144
144
  let resultJobId = jobId
145
145
 
146
146
  await this._withDb(async (db) => {
147
- if (options?.deduplicateWhileQueued && concurrency?.concurrencyKey) {
147
+ if (options?.deduplicateWhileQueued) {
148
+ // Dedupe on the job's identity (name + args + queue), NOT its concurrency key, so a job
149
+ // keeps whatever concurrency it resolves to — in particular a scheduled job that relies on
150
+ // its queue-derived `queue:<name>` cap still participates in that cluster-wide cap instead
151
+ // of being pulled onto a private per-job key.
148
152
  const existing = await db
149
153
  .newQuery()
150
154
  .from(JOBS_TABLE)
151
155
  .select("id")
152
- .where({status: "queued", concurrency_key: concurrency.concurrencyKey})
156
+ .where({status: "queued", job_name: jobName, args_json: argsJson, queue})
153
157
  .limit(1)
154
158
  .results()
155
159
 
@@ -15,7 +15,7 @@
15
15
  * @property {string} [queue] - Queue name. Defaults to `"default"`. When the queue has a configured cap in `backgroundJobs.queues`, that cap is enforced cluster-wide.
16
16
  * @property {string} [concurrencyKey] - Opaque non-empty key used to share a concurrency cap. Overrides any queue-derived cap.
17
17
  * @property {number} [maxConcurrency] - Positive integer cap; must be paired with `concurrencyKey`.
18
- * @property {boolean} [deduplicateWhileQueued] - When true (requires `concurrencyKey`), skip the enqueue if a still-queued job with the same `concurrencyKey` already exists, returning that job's id. Keeps an interval-scheduled recurring job (e.g. retention pruning) from piling up redundant queued rows when it runs slower than its interval or no worker is free.
18
+ * @property {boolean} [deduplicateWhileQueued] - When true, skip the enqueue if an identical still-queued job (same job name, args and queue) already exists, returning that job's id. Deduplication is by job identity and independent of `concurrencyKey`, so the job keeps its normal (e.g. queue-derived) concurrency cap. Keeps an interval-scheduled recurring job (e.g. retention pruning) from piling up redundant queued rows when it runs slower than its interval or no worker is free.
19
19
  * @property {number} [scheduledAtMs] - Epoch timestamp in milliseconds when the job becomes eligible for dispatch. Defaults to enqueue time.
20
20
  */
21
21
  /**
@@ -629,6 +629,31 @@ class VelociousDatabaseRecord {
629
629
  stateMachine(this, definition)
630
630
  }
631
631
 
632
+ /**
633
+ * Returns this model's state machine definition, or null when it declares none.
634
+ * `Model.stateMachine(...)` overrides this on classes that declare a machine.
635
+ * @returns {import("./state-machine.js").StateMachineDefinition | null} - The state machine definition, or null when none is declared.
636
+ */
637
+ static getStateMachineDefinition() {
638
+ return null
639
+ }
640
+
641
+ /**
642
+ * Returns this model's state column, or null when it declares no state machine.
643
+ * @returns {string | null} - The state column name, or null when no state machine is declared.
644
+ */
645
+ static getStateMachineColumn() {
646
+ return null
647
+ }
648
+
649
+ /**
650
+ * Returns this model's declared state names (empty when it has no state machine).
651
+ * @returns {string[]} - The declared state names, or an empty array when no state machine is declared.
652
+ */
653
+ static getStateMachineStateNames() {
654
+ return []
655
+ }
656
+
632
657
  /**
633
658
  * Maintains a counter column on a `belongsTo` parent as the sum of a per-record
634
659
  * magnitude, kept current by atomic increments diffed on every create/update/
@@ -399,6 +399,64 @@ export default class DbGenerateModel extends BaseCommand {
399
399
  methodsCount++
400
400
  }
401
401
 
402
+ // State-machine event methods. `Model.stateMachine(...)` registers these on the model's
403
+ // own prototype at runtime; those override the stubs below (declared on the base class),
404
+ // so these throwing stubs never execute. They exist only so call sites typecheck without
405
+ // the consumer hand-writing boilerplate. Guarded on the own `_stateMachineDefinition`
406
+ // property so a subclass without its own machine doesn't re-emit the parent's events.
407
+ const stateMachineDefinition = Object.prototype.hasOwnProperty.call(modelClass, "_stateMachineDefinition")
408
+ ? modelClass.getStateMachineDefinition()
409
+ : null
410
+
411
+ if (stateMachineDefinition) {
412
+ for (const eventName of Object.keys(stateMachineDefinition.events)) {
413
+ // `stateMachine()` installs event methods with `proto[eventName]`, so it accepts
414
+ // event keys that aren't valid JavaScript identifiers (e.g. "retry-build"). Those
415
+ // can't be written as class methods without producing an unparseable file, so skip
416
+ // them here — they still work at runtime via bracket access, just untyped.
417
+ if (!/^[A-Za-z_$][A-Za-z0-9_$]*$/.test(eventName)) {
418
+ console.warn(`Skipping generated state-machine methods for event '${eventName}' on '${modelClass.name}': the event name is not a valid JavaScript identifier.`)
419
+
420
+ continue
421
+ }
422
+
423
+ const capitalizedEvent = eventName.charAt(0).toUpperCase() + eventName.slice(1)
424
+
425
+ if (methodsCount > 0) {
426
+ fileContent += "\n"
427
+ }
428
+
429
+ fileContent += " /**\n"
430
+ fileContent += " * @abstract\n"
431
+ fileContent += " * @returns {void}\n"
432
+ fileContent += " */\n"
433
+ fileContent += ` ${eventName}() { throw new Error("Not implemented") }\n`
434
+
435
+ fileContent += "\n"
436
+ fileContent += " /**\n"
437
+ fileContent += " * @abstract\n"
438
+ fileContent += " * @returns {Promise<void>}\n"
439
+ fileContent += " */\n"
440
+ fileContent += ` ${eventName}AndSave() { throw new Error("Not implemented") }\n`
441
+
442
+ fileContent += "\n"
443
+ fileContent += " /**\n"
444
+ fileContent += " * @abstract\n"
445
+ fileContent += " * @returns {boolean}\n"
446
+ fileContent += " */\n"
447
+ fileContent += ` can${capitalizedEvent}() { throw new Error("Not implemented") }\n`
448
+
449
+ fileContent += "\n"
450
+ fileContent += " /**\n"
451
+ fileContent += " * @abstract\n"
452
+ fileContent += " * @returns {Promise<boolean>}\n"
453
+ fileContent += " */\n"
454
+ fileContent += ` can${capitalizedEvent}Async() { throw new Error("Not implemented") }\n`
455
+
456
+ methodsCount++
457
+ }
458
+ }
459
+
402
460
  fileContent += "}\n"
403
461
 
404
462
  await fs.writeFile(modelPath, fileContent)
@@ -1 +1 @@
1
- {"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../../../src/background-jobs/scheduler.js"],"names":[],"mappings":"AAuBA;;+DAE+D;AAE/D;;;;;GAKG;AACH,8CAJW,MAAM,GAAG,MAAM,aACf,MAAM,GACJ,MAAM,CA8BlB;AAED,0DAA0D;AAC1D;IACE;;;;;OAKG;IACH,2CAHG;QAAoD,aAAa,EAAzD,OAAO,qBAAqB,EAAE,OAAO;QAC6H,UAAU,EAA5K,CAAS,IAAiI,EAAjI;YAAC,IAAI,EAAE,KAAK,CAAC,OAAC,CAAC,CAAC;YAAC,QAAQ,EAAE,cAAc,UAAU,EAAE,OAAO,CAAC;YAAC,MAAM,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,OAAO,YAAY,EAAE,oBAAoB,CAAA;SAAC,KAAI,OAAO,CAAC,IAAI,CAAC;KACrK,EAoBA;IAlBC,qDAAkC;IAClC,mBAJkB;QAAC,IAAI,EAAE,KAAK,CAAC,OAAC,CAAC,CAAC;QAAC,QAAQ,EAAE,cAAc,UAAU,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,YAAY,EAAE,oBAAoB,CAAA;KAAC,KAAI,OAAO,CAAC,IAAI,CAAC,CAIxI;IAC5B,eAA8B;IAC9B;;uDAEmD;IACnD,aADU,KAAK,CAAC,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC,CAC1B;IACrB;;sDAEkD;IAClD,YADU,KAAK,CAAC,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC,CAC1B;IACpB,gFAAgF;IAChF,iBADW,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CACG;IAChC;;;OAGG;IACH,SAFU,OAAO,CAEG;IAGtB;;kCAE8B;IAC9B,SADa,OAAO,CAAC,IAAI,CAAC,CAmBzB;IAED;;;OAGG;IACH,QAFa,OAAO,CAAC,IAAI,CAAC,CAiBzB;IAED;;;;;;OAMG;IACH,0CAJG;QAAsF,gBAAgB,EAA9F,OAAO,2BAA2B,EAAE,mCAAmC;QAC1D,MAAM,EAAnB,MAAM;KACd,GAAU,IAAI,CAsBhB;IAED;;;;;;OAMG;IACH,+CAJG;QAAsF,gBAAgB,EAA9F,OAAO,2BAA2B,EAAE,mCAAmC;QAC1D,MAAM,EAAnB,MAAM;KACd,GAAU,IAAI,CAuBhB;IAED;;;;;;;;;OASG;IACH,8CAJG;QAAsF,gBAAgB,EAA9F,OAAO,2BAA2B,EAAE,mCAAmC;QAC1D,MAAM,EAAnB,MAAM;KACd,GAAU,IAAI,CA+BhB;IAED;;;;;;OAMG;IACH,8CAJG;QAAsF,gBAAgB,EAA9F,OAAO,2BAA2B,EAAE,mCAAmC;QAC1D,MAAM,EAAnB,MAAM;KACd,GAAU,OAAO,CAAC,IAAI,CAAC,CAWzB;IAED;;;;;;OAMG;IACH,kDAJG;QAAsF,gBAAgB,EAA9F,OAAO,2BAA2B,EAAE,mCAAmC;QAC1D,MAAM,EAAnB,MAAM;KACd,GAAU,OAAO,CAAC,IAAI,CAAC,CAazB;IAED;;;;OAIG;IACH,sBAHW,WAAW,CAAC,OAAO,2BAA2B,EAAE,mCAAmC,CAAC,OAAO,CAAC,CAAC,GAC3F;QAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;KAAC,CAczE;CACF;;;;2BA3QY,MAAM,OAAO,oBAAoB;mBAvB3B,cAAc"}
1
+ {"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../../../src/background-jobs/scheduler.js"],"names":[],"mappings":"AAuBA;;+DAE+D;AAE/D;;;;;GAKG;AACH,8CAJW,MAAM,GAAG,MAAM,aACf,MAAM,GACJ,MAAM,CA8BlB;AAED,0DAA0D;AAC1D;IACE;;;;;OAKG;IACH,2CAHG;QAAoD,aAAa,EAAzD,OAAO,qBAAqB,EAAE,OAAO;QAC6H,UAAU,EAA5K,CAAS,IAAiI,EAAjI;YAAC,IAAI,EAAE,KAAK,CAAC,OAAC,CAAC,CAAC;YAAC,QAAQ,EAAE,cAAc,UAAU,EAAE,OAAO,CAAC;YAAC,MAAM,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,OAAO,YAAY,EAAE,oBAAoB,CAAA;SAAC,KAAI,OAAO,CAAC,IAAI,CAAC;KACrK,EAoBA;IAlBC,qDAAkC;IAClC,mBAJkB;QAAC,IAAI,EAAE,KAAK,CAAC,OAAC,CAAC,CAAC;QAAC,QAAQ,EAAE,cAAc,UAAU,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,YAAY,EAAE,oBAAoB,CAAA;KAAC,KAAI,OAAO,CAAC,IAAI,CAAC,CAIxI;IAC5B,eAA8B;IAC9B;;uDAEmD;IACnD,aADU,KAAK,CAAC,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC,CAC1B;IACrB;;sDAEkD;IAClD,YADU,KAAK,CAAC,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC,CAC1B;IACpB,gFAAgF;IAChF,iBADW,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CACG;IAChC;;;OAGG;IACH,SAFU,OAAO,CAEG;IAGtB;;kCAE8B;IAC9B,SADa,OAAO,CAAC,IAAI,CAAC,CAmBzB;IAED;;;OAGG;IACH,QAFa,OAAO,CAAC,IAAI,CAAC,CAiBzB;IAED;;;;;;OAMG;IACH,0CAJG;QAAsF,gBAAgB,EAA9F,OAAO,2BAA2B,EAAE,mCAAmC;QAC1D,MAAM,EAAnB,MAAM;KACd,GAAU,IAAI,CAsBhB;IAED;;;;;;OAMG;IACH,+CAJG;QAAsF,gBAAgB,EAA9F,OAAO,2BAA2B,EAAE,mCAAmC;QAC1D,MAAM,EAAnB,MAAM;KACd,GAAU,IAAI,CAuBhB;IAED;;;;;;;;;OASG;IACH,8CAJG;QAAsF,gBAAgB,EAA9F,OAAO,2BAA2B,EAAE,mCAAmC;QAC1D,MAAM,EAAnB,MAAM;KACd,GAAU,IAAI,CA+BhB;IAED;;;;;;OAMG;IACH,8CAJG;QAAsF,gBAAgB,EAA9F,OAAO,2BAA2B,EAAE,mCAAmC;QAC1D,MAAM,EAAnB,MAAM;KACd,GAAU,OAAO,CAAC,IAAI,CAAC,CAWzB;IAED;;;;;;OAMG;IACH,kDAJG;QAAsF,gBAAgB,EAA9F,OAAO,2BAA2B,EAAE,mCAAmC;QAC1D,MAAM,EAAnB,MAAM;KACd,GAAU,OAAO,CAAC,IAAI,CAAC,CAkBzB;IAED;;;;OAIG;IACH,sBAHW,WAAW,CAAC,OAAO,2BAA2B,EAAE,mCAAmC,CAAC,OAAO,CAAC,CAAC,GAC3F;QAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;KAAC,CAczE;CACF;;;;2BAhRY,MAAM,OAAO,oBAAoB;mBAvB3B,cAAc"}
@@ -219,11 +219,16 @@ export default class BackgroundJobsScheduler {
219
219
  */
220
220
  async enqueueScheduledJob({ jobConfiguration, jobKey }) {
221
221
  try {
222
+ // De-duplicate scheduled enqueues by default: a periodic job still pending from an earlier
223
+ // tick is not enqueued again, which is what let the background_jobs table fill with thousands
224
+ // of identical scheduled jobs when the queue backed up. Dedup is by job identity (see the
225
+ // store), so the job keeps its queue-derived concurrency cap. A schedule can opt out with
226
+ // `deduplicateWhileQueued: false`.
222
227
  await this.enqueueJob({
223
228
  args: Array.isArray(jobConfiguration.args) ? jobConfiguration.args : [],
224
229
  jobClass: jobConfiguration.class,
225
230
  jobKey,
226
- options: jobConfiguration.options || {}
231
+ options: { deduplicateWhileQueued: true, ...(jobConfiguration.options || {}) }
227
232
  });
228
233
  }
229
234
  catch (error) {
@@ -246,4 +251,4 @@ export default class BackgroundJobsScheduler {
246
251
  return { everyValue: every };
247
252
  }
248
253
  }
249
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2JhY2tncm91bmQtam9icy9zY2hlZHVsZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sTUFBTSxNQUFNLGNBQWMsQ0FBQTtBQUNqQyxPQUFPLEVBQUMsZ0JBQWdCLEVBQUUsbUJBQW1CLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQTtBQUUxRSxNQUFNLG9CQUFvQixHQUFHO0lBQzNCLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJO0lBQ3RCLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJO0lBQ3hCLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJO0lBQ3pCLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUk7SUFDakIsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSTtJQUNwQixLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJO0lBQ3JCLENBQUMsRUFBRSxFQUFFLEdBQUcsSUFBSTtJQUNaLE1BQU0sRUFBRSxFQUFFLEdBQUcsSUFBSTtJQUNqQixPQUFPLEVBQUUsRUFBRSxHQUFHLElBQUk7SUFDbEIsRUFBRSxFQUFFLENBQUM7SUFDTCxDQUFDLEVBQUUsSUFBSTtJQUNQLE1BQU0sRUFBRSxJQUFJO0lBQ1osT0FBTyxFQUFFLElBQUk7SUFDYixDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUk7SUFDMUIsSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJO0lBQzdCLEtBQUssRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSTtDQUMvQixDQUFBO0FBQ0Q7OytE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QUNmLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyw0Q0FBNEMsRUFBRSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQTtRQUMzSSxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxjQUFjLENBQUMsS0FBSztRQUNsQixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN6QixNQUFNLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQyxHQUFHLEtBQUssQ0FBQTtZQUV4QyxJQUFJLENBQUMsWUFBWSxJQUFJLE9BQU8sWUFBWSxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7Z0JBQ3JGLE9BQU8sRUFBQyxVQUFVLEVBQUMsQ0FBQTtZQUNyQixDQUFDO1lBRUQsT0FBTyxFQUFDLFVBQVUsRUFBRSxZQUFZLEVBQUUsWUFBWSxDQUFDLE9BQU8sRUFBQyxDQUFBO1FBQ3pELENBQUM7UUFFRCxPQUFPLEVBQUMsVUFBVSxFQUFFLEtBQUssRUFBQyxDQUFBO0lBQzVCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgTG9nZ2VyIGZyb20gXCIuLi9sb2dnZXIuanNcIlxuaW1wb3J0IHtuZXh0Q3JvbkZpcmVEYXRlLCBwYXJzZUNyb25FeHByZXNzaW9ufSBmcm9tIFwiLi9jcm9uLWV4cHJlc3Npb24uanNcIlxuXG5jb25zdCBEVVJBVElPTl9NVUxUSVBMSUVSUyA9IHtcbiAgZDogMjQgKiA2MCAqIDYwICogMTAwMCxcbiAgZGF5OiAyNCAqIDYwICogNjAgKiAxMDAwLFxuICBkYXlzOiAyNCAqIDYwICogNjAgKiAxMDAwLFxuICBoOiA2MCAqIDYwICogMTAwMCxcbiAgaG91cjogNjAgKiA2MCAqIDEwMDAsXG4gIGhvdXJzOiA2MCAqIDYwICogMTAwMCxcbiAgbTogNjAgKiAxMDAwLFxuICBtaW51dGU6IDYwICogMTAwMCxcbiAgbWludXRlczogNjAgKiAxMDAwLFxuICBtczogMSxcbiAgczogMTAwMCxcbiAgc2Vjb25kOiAxMDAwLFxuICBzZWNvbmRzOiAxMDAwLFxuICB3OiA3ICogMjQgKiA2MCAqIDYwICogMTAwMCxcbiAgd2VlazogNyAqIDI0ICogNjAgKiA2MCAqIDEwMDAsXG4gIHdlZWtzOiA3ICogMjQgKiA2MCAqIDYwICogMTAwMFxufVxuLyoqXG4gKiBEdXJhdGlvblVuaXQgdHlwZS5cbiAqIEB0eXBlZGVmIHtrZXlvZiB0eXBlb2YgRFVSQVRJT05fTVVMVElQTElFUlN9IER1cmF0aW9uVW5pdCAqL1xuXG4vKipcbiAqIFJ1bnMgdGhlIHBhcnNlU2NoZWR1bGVkRHVyYXRpb24gaGVscGVyLlxuICogQHBhcmFtIHtudW1iZXIgfCBzdHJpbmd9IHZhbHVlIC0gRHVyYXRpb24gdmFsdWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lIC0gRmllbGQgbmFtZSBmb3IgZXJyb3JzLlxuICogQHJldHVybnMge251bWJlcn0gLSBEdXJhdGlvbiBpbiBtaWxsaXNlY29uZHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVNjaGVkdWxlZER1cmF0aW9uKHZhbHVlLCBmaWVsZE5hbWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIikge1xuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKHZhbHVlKSB8fCB2YWx1ZSA8IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgU2NoZWR1bGVkIGJhY2tncm91bmQgam9iICR7ZmllbGROYW1lfSBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcy5gKVxuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZVxuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJzdHJpbmdcIiB8fCAhdmFsdWUudHJpbSgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTY2hlZHVsZWQgYmFja2dyb3VuZCBqb2IgJHtmaWVsZE5hbWV9IG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nIG9yIG51bWJlci5gKVxuICB9XG5cbiAgY29uc3Qgbm9ybWFsaXplZFZhbHVlID0gdmFsdWUudHJpbSgpLnRvTG93ZXJDYXNlKClcbiAgY29uc3QgbWF0Y2ggPSBub3JtYWxpemVkVmFsdWUubWF0Y2goL14oXFxkKyg/OlxcLlxcZCspPylcXHMqKG1zfHN8bXxofGR8d3xzZWNvbmR8c2Vjb25kc3xtaW51dGV8bWludXRlc3xob3VyfGhvdXJzfGRheXxkYXlzfHdlZWt8d2Vla3MpJC8pXG5cbiAgaWYgKCFtYXRjaCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBzY2hlZHVsZWQgYmFja2dyb3VuZCBqb2IgJHtmaWVsZE5hbWV9OiAke3ZhbHVlfWApXG4gIH1cblxuICBjb25zdCBudW1lcmljVmFsdWUgPSBOdW1iZXIobWF0Y2hbMV0pXG4gIGNvbnN0IG11bHRpcGxpZXIgPSBEVVJBVElPTl9NVUxUSVBMSUVSU1svKiogQHR5cGUge0R1cmF0aW9uVW5pdH0gKi8gKG1hdGNoWzJdKV1cblxuICBpZiAoIW11bHRpcGxpZXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgc2NoZWR1bGVkIGJhY2tncm91bmQgam9iICR7ZmllbGROYW1lfTogJHt2YWx1ZX1gKVxuICB9XG5cbiAgcmV0dXJuIE1hdGgucm91bmQobnVtZXJpY1ZhbHVlICogbXVsdGlwbGllcilcbn1cblxuLyoqIFJ1bnMgY29uZmlndXJlZCByZWN1cnJpbmcgYmFja2dyb3VuZCBqb2Igc2NoZWR1bGVzLiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQmFja2dyb3VuZEpvYnNTY2hlZHVsZXIge1xuICAvKipcbiAgICogUnVucyBjb25zdHJ1Y3Rvci5cbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdH0gYXJncy5jb25maWd1cmF0aW9uIC0gQ29uZmlndXJhdGlvbi5cbiAgICogQHBhcmFtIHtmdW5jdGlvbih7YXJnczogQXJyYXk8Pz4sIGpvYkNsYXNzOiB0eXBlb2YgaW1wb3J0KFwiLi9qb2IuanNcIikuZGVmYXVsdCwgam9iS2V5OiBzdHJpbmcsIG9wdGlvbnM6IGltcG9ydChcIi4vdHlwZXMuanNcIikuQmFja2dyb3VuZEpvYk9wdGlvbnN9KSA6IFByb21pc2U8dm9pZD59IGFyZ3MuZW5xdWV1ZUpvYiAtIEVucXVldWUgY2FsbGJhY2suXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih7Y29uZmlndXJhdGlvbiwgZW5xdWV1ZUpvYn0pIHtcbiAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uXG4gICAgdGhpcy5lbnF1ZXVlSm9iID0gZW5xdWV1ZUpvYlxuICAgIHRoaXMubG9nZ2VyID0gbmV3IExvZ2dlcih0aGlzKVxuICAgIC8qKlxuICAgICAqIE5hcnJvd3MgdGhlIHJ1bnRpbWUgdmFsdWUgdG8gdGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAgICAgKiBAdHlwZSB7QXJyYXk8UmV0dXJuVHlwZTx0eXBlb2Ygc2V0SW50ZXJ2YWw+Pn0gKi9cbiAgICB0aGlzLmludGVydmFsSWRzID0gW11cbiAgICAvKipcbiAgICAgKiBOYXJyb3dzIHRoZSBydW50aW1lIHZhbHVlIHRvIHRoZSBkb2N1bWVudGVkIHR5cGUuXG4gICAgICogQHR5cGUge0FycmF5PFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+Pn0gKi9cbiAgICB0aGlzLnRpbWVvdXRJZHMgPSBbXVxuICAgIC8qKiBAdHlwZSB7U2V0PFByb21pc2U8dm9pZD4+fSAtIFNjaGVkdWxlZCBlbnF1ZXVlcyB0aGF0IHNodXRkb3duIG11c3QgZHJhaW4uICovXG4gICAgdGhpcy5wZW5kaW5nRW5xdWV1ZXMgPSBuZXcgU2V0KClcbiAgICAvKipcbiAgICAgKiBOYXJyb3dzIHRoZSBydW50aW1lIHZhbHVlIHRvIHRoZSBkb2N1bWVudGVkIHR5cGUuXG4gICAgICogQHR5cGUge2Jvb2xlYW59IC0gVHJ1ZSBiZXR3ZWVuIHN0b3AoKSBhbmQgdGhlIG5leHQgc3RhcnQoKTsgY3JvbiBzZWxmLXJlc2NoZWR1bGVyIGNoZWNrcyB0aGlzIHNvIGEgc3RvcCgpIGR1cmluZyBhbiBpbi1mbGlnaHQgZW5xdWV1ZSBkb2Vzbid0IGltbWVkaWF0ZWx5IHJlLWFybS5cbiAgICAgKi9cbiAgICB0aGlzLnN0b3BwZWQgPSBmYWxzZVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgc3RhcnQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAqL1xuICBhc3luYyBzdGFydCgpIHtcbiAgICB0aGlzLnN0b3BwZWQgPSBmYWxzZVxuXG4gICAgY29uc3Qgc2NoZWR1bGVkQmFja2dyb3VuZEpvYnNDb25maWcgPSBhd2FpdCB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0U2NoZWR1bGVkQmFja2dyb3VuZEpvYnNDb25maWcoKVxuXG4gICAgaWYgKCFzY2hlZHVsZWRCYWNrZ3JvdW5kSm9ic0NvbmZpZz8uam9icykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBqb2JLZXkgb2YgT2JqZWN0LmtleXMoc2NoZWR1bGVkQmFja2dyb3VuZEpvYnNDb25maWcuam9icykpIHtcbiAgICAgIGNvbnN0IGpvYkNvbmZpZ3VyYXRpb24gPSBzY2hlZHVsZWRCYWNrZ3JvdW5kSm9ic0NvbmZpZy5qb2JzW2pvYktleV1cblxuICAgICAgaWYgKCFqb2JDb25maWd1cmF0aW9uIHx8IGpvYkNvbmZpZ3VyYXRpb24uZW5hYmxlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgdGhpcy5zY2hlZHVsZUpvYih7am9iQ29uZmlndXJhdGlvbiwgam9iS2V5fSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUnVucyBzdG9wLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gUmVzb2x2ZXMgYWZ0ZXIgaW4tZmxpZ2h0IHNjaGVkdWxlZCBlbnF1ZXVlcyBmaW5pc2guXG4gICAqL1xuICBhc3luYyBzdG9wKCkge1xuICAgIHRoaXMuc3RvcHBlZCA9IHRydWVcblxuICAgIGZvciAoY29uc3QgaW50ZXJ2YWxJZCBvZiB0aGlzLmludGVydmFsSWRzKSB7XG4gICAgICBjbGVhckludGVydmFsKGludGVydmFsSWQpXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCB0aW1lb3V0SWQgb2YgdGhpcy50aW1lb3V0SWRzKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKVxuICAgIH1cblxuICAgIHRoaXMuaW50ZXJ2YWxJZHMgPSBbXVxuICAgIHRoaXMudGltZW91dElkcyA9IFtdXG5cbiAgICBhd2FpdCBQcm9taXNlLmFsbCh0aGlzLnBlbmRpbmdFbnF1ZXVlcylcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHNjaGVkdWxlIGpvYi5cbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24tdHlwZXMuanNcIikuU2NoZWR1bGVkQmFja2dyb3VuZEpvYkNvbmZpZ3VyYXRpb259IGFyZ3Muam9iQ29uZmlndXJhdGlvbiAtIEpvYiBjb25maWd1cmF0aW9uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5qb2JLZXkgLSBKb2Iga2V5LlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIHNjaGVkdWxlSm9iKHtqb2JDb25maWd1cmF0aW9uLCBqb2JLZXl9KSB7XG4gICAgaWYgKCFqb2JDb25maWd1cmF0aW9uLmNsYXNzIHx8IHR5cGVvZiBqb2JDb25maWd1cmF0aW9uLmNsYXNzLnBlcmZvcm1MYXRlcldpdGhPcHRpb25zICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgU2NoZWR1bGVkIGJhY2tncm91bmQgam9iICR7am9iS2V5fSBtdXN0IGRlZmluZSBhIGpvYiBjbGFzcy5gKVxuICAgIH1cblxuICAgIGlmIChqb2JDb25maWd1cmF0aW9uLmNyb24gIT09IHVuZGVmaW5lZCAmJiBqb2JDb25maWd1cmF0aW9uLmV2ZXJ5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgU2NoZWR1bGVkIGJhY2tncm91bmQgam9iICR7am9iS2V5fSBtdXN0IGRlZmluZSBlaXRoZXIgXCJldmVyeVwiIG9yIFwiY3JvblwiLCBub3QgYm90aC5gKVxuICAgIH1cblxuICAgIGlmIChqb2JDb25maWd1cmF0aW9uLmNyb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5zY2hlZHVsZUNyb25Kb2Ioe2pvYkNvbmZpZ3VyYXRpb24sIGpvYktleX0pXG5cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChqb2JDb25maWd1cmF0aW9uLmV2ZXJ5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgU2NoZWR1bGVkIGJhY2tncm91bmQgam9iICR7am9iS2V5fSBtdXN0IGRlZmluZSBlaXRoZXIgXCJldmVyeVwiIG9yIFwiY3JvblwiLmApXG4gICAgfVxuXG4gICAgdGhpcy5zY2hlZHVsZUV2ZXJ5Sm9iKHtqb2JDb25maWd1cmF0aW9uLCBqb2JLZXl9KVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgc2NoZWR1bGUgZXZlcnkgam9iLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5TY2hlZHVsZWRCYWNrZ3JvdW5kSm9iQ29uZmlndXJhdGlvbn0gYXJncy5qb2JDb25maWd1cmF0aW9uIC0gSm9iIGNvbmZpZ3VyYXRpb24uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLmpvYktleSAtIEpvYiBrZXkuXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgc2NoZWR1bGVFdmVyeUpvYih7am9iQ29uZmlndXJhdGlvbiwgam9iS2V5fSkge1xuICAgIGNvbnN0IGV2ZXJ5Q29uZmlnID0gLyoqIEB0eXBlIHtOb25OdWxsYWJsZTx0eXBlb2Ygam9iQ29uZmlndXJhdGlvbi5ldmVyeT59ICovIChqb2JDb25maWd1cmF0aW9uLmV2ZXJ5KVxuICAgIGNvbnN0IHtldmVyeVZhbHVlLCBmaXJzdEluVmFsdWV9ID0gdGhpcy5ub3JtYWxpemVFdmVyeShldmVyeUNvbmZpZylcbiAgICBjb25zdCBpbnRlcnZhbE1zID0gcGFyc2VTY2hlZHVsZWREdXJhdGlvbihldmVyeVZhbHVlLCBgJHtqb2JLZXl9LmV2ZXJ5YClcbiAgICBjb25zdCBmaXJzdEluTXMgPSBmaXJzdEluVmFsdWUgIT09IHVuZGVmaW5lZCA/IHBhcnNlU2NoZWR1bGVkRHVyYXRpb24oZmlyc3RJblZhbHVlLCBgJHtqb2JLZXl9LmZpcnN0SW5gKSA6IGludGVydmFsTXNcblxuICAgIGlmIChpbnRlcnZhbE1zIDwgMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBTY2hlZHVsZWQgYmFja2dyb3VuZCBqb2IgJHtqb2JLZXl9LmV2ZXJ5IG11c3QgYmUgYXQgbGVhc3QgMSBtaWxsaXNlY29uZC5gKVxuICAgIH1cblxuICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdm9pZCB0aGlzLnJ1blNjaGVkdWxlZEpvYih7am9iQ29uZmlndXJhdGlvbiwgam9iS2V5fSlcblxuICAgICAgY29uc3QgaW50ZXJ2YWxJZCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgdm9pZCB0aGlzLnJ1blNjaGVkdWxlZEpvYih7am9iQ29uZmlndXJhdGlvbiwgam9iS2V5fSlcbiAgICAgIH0sIGludGVydmFsTXMpXG5cbiAgICAgIHRoaXMuaW50ZXJ2YWxJZHMucHVzaChpbnRlcnZhbElkKVxuICAgIH0sIGZpcnN0SW5NcylcblxuICAgIHRoaXMudGltZW91dElkcy5wdXNoKHRpbWVvdXRJZClcbiAgfVxuXG4gIC8qKlxuICAgKiBDcm9udGFiIHNjaGVkdWxlcyBkb24ndCBoYXZlIGEgY29uc3RhbnQgaW50ZXJ2YWwgKGAwIDkgKiAqIDEtNWBcbiAgICogZmlyZXMgb25jZSBwZXIgd2Vla2RheSBhdCA5IEFNLCB3aXRoIGdhcHMgb2YgdmFyeWluZyBsZW5ndGgpLCBzb1xuICAgKiB3ZSBzZWxmLXJlc2NoZWR1bGUgd2l0aCBgc2V0VGltZW91dGAgYWZ0ZXIgZXZlcnkgZmlyZSBpbnN0ZWFkIG9mXG4gICAqIHVzaW5nIGBzZXRJbnRlcnZhbGAuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucy5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLXR5cGVzLmpzXCIpLlNjaGVkdWxlZEJhY2tncm91bmRKb2JDb25maWd1cmF0aW9ufSBhcmdzLmpvYkNvbmZpZ3VyYXRpb24gLSBKb2IgY29uZmlndXJhdGlvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3Muam9iS2V5IC0gSm9iIGtleS5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBzY2hlZHVsZUNyb25Kb2Ioe2pvYkNvbmZpZ3VyYXRpb24sIGpvYktleX0pIHtcbiAgICBjb25zdCBjcm9uRXhwcmVzc2lvbiA9IGpvYkNvbmZpZ3VyYXRpb24uY3JvblxuXG4gICAgaWYgKHR5cGVvZiBjcm9uRXhwcmVzc2lvbiAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBTY2hlZHVsZWQgYmFja2dyb3VuZCBqb2IgJHtqb2JLZXl9LmNyb24gbXVzdCBiZSBhIHN0cmluZy5gKVxuICAgIH1cblxuICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlQ3JvbkV4cHJlc3Npb24oY3JvbkV4cHJlc3Npb24pXG4gICAgY29uc3Qgc2NoZWR1bGVOZXh0ID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuc3RvcHBlZCkgcmV0dXJuXG5cbiAgICAgIGNvbnN0IG5leHREYXRlID0gbmV4dENyb25GaXJlRGF0ZShwYXJzZWQsIG5ldyBEYXRlKCkpXG4gICAgICBjb25zdCBkZWxheU1zID0gTWF0aC5tYXgoMSwgbmV4dERhdGUuZ2V0VGltZSgpIC0gRGF0ZS5ub3coKSlcbiAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5zdG9wcGVkKSByZXR1cm5cblxuICAgICAgICBhd2FpdCB0aGlzLnJ1blNjaGVkdWxlZEpvYih7am9iQ29uZmlndXJhdGlvbiwgam9iS2V5fSlcblxuICAgICAgICAvLyBUaGUgYXdhaXQgYWJvdmUgY2FuIHlpZWxkIHRvIGEgc3RvcCgpIGNhbGwuIFJlLWNoZWNrIGJlZm9yZVxuICAgICAgICAvLyByZS1hcm1pbmcgc28gd2UgZG9uJ3Qga2VlcCBmaXJpbmcgYWZ0ZXIgc2h1dGRvd24uXG4gICAgICAgIGlmICh0aGlzLnN0b3BwZWQpIHJldHVyblxuXG4gICAgICAgIHNjaGVkdWxlTmV4dCgpXG4gICAgICB9LCBkZWxheU1zKVxuXG4gICAgICB0aGlzLnRpbWVvdXRJZHMucHVzaCh0aW1lb3V0SWQpXG4gICAgfVxuXG4gICAgc2NoZWR1bGVOZXh0KClcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFja3MgYSBzY2hlZHVsZWQgZW5xdWV1ZSBzbyBzdG9wKCkgY2Fubm90IHJldHVybiB3aGlsZSBpdCBjYW4gc3RpbGwgbXV0YXRlIHRoZSBzdG9yZS5cbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24tdHlwZXMuanNcIikuU2NoZWR1bGVkQmFja2dyb3VuZEpvYkNvbmZpZ3VyYXRpb259IGFyZ3Muam9iQ29uZmlndXJhdGlvbiAtIEpvYiBjb25maWd1cmF0aW9uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5qb2JLZXkgLSBKb2Iga2V5LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyBhZnRlciB0aGUgZW5xdWV1ZSBhdHRlbXB0IGZpbmlzaGVzLlxuICAgKi9cbiAgYXN5bmMgcnVuU2NoZWR1bGVkSm9iKHtqb2JDb25maWd1cmF0aW9uLCBqb2JLZXl9KSB7XG4gICAgY29uc3QgcGVuZGluZ0VucXVldWUgPSB0aGlzLmVucXVldWVTY2hlZHVsZWRKb2Ioe2pvYkNvbmZpZ3VyYXRpb24sIGpvYktleX0pXG4gICAgdGhpcy5wZW5kaW5nRW5xdWV1ZXMuYWRkKHBlbmRpbmdFbnF1ZXVlKVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHBlbmRpbmdFbnF1ZXVlXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMucGVuZGluZ0VucXVldWVzLmRlbGV0ZShwZW5kaW5nRW5xdWV1ZSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUnVucyBlbnF1ZXVlIHNjaGVkdWxlZCBqb2IuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucy5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLXR5cGVzLmpzXCIpLlNjaGVkdWxlZEJhY2tncm91bmRKb2JDb25maWd1cmF0aW9ufSBhcmdzLmpvYkNvbmZpZ3VyYXRpb24gLSBKb2IgY29uZmlndXJhdGlvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3Muam9iS2V5IC0gSm9iIGtleS5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyBlbnF1ZXVlU2NoZWR1bGVkSm9iKHtqb2JDb25maWd1cmF0aW9uLCBqb2JLZXl9KSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuZW5xdWV1ZUpvYih7XG4gICAgICAgIGFyZ3M6IEFycmF5LmlzQXJyYXkoam9iQ29uZmlndXJhdGlvbi5hcmdzKSA/IGpvYkNvbmZpZ3VyYXRpb24uYXJncyA6IFtdLFxuICAgICAgICBqb2JDbGFzczogam9iQ29uZmlndXJhdGlvbi5jbGFzcyxcbiAgICAgICAgam9iS2V5LFxuICAgICAgICBvcHRpb25zOiBqb2JDb25maWd1cmF0aW9uLm9wdGlvbnMgfHwge31cbiAgICAgIH0pXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGF3YWl0IHRoaXMubG9nZ2VyLmVycm9yKCgpID0+IFtcIkZhaWxlZCB0byBlbnF1ZXVlIHNjaGVkdWxlZCBiYWNrZ3JvdW5kIGpvYlwiLCB7am9iS2V5LCBqb2JOYW1lOiBqb2JDb25maWd1cmF0aW9uLmNsYXNzLmpvYk5hbWUoKX0sIGVycm9yXSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUnVucyBub3JtYWxpemUgZXZlcnkuXG4gICAqIEBwYXJhbSB7Tm9uTnVsbGFibGU8aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5TY2hlZHVsZWRCYWNrZ3JvdW5kSm9iQ29uZmlndXJhdGlvbltcImV2ZXJ5XCJdPn0gZXZlcnkgLSBFdmVyeSBjb25maWcgKGNhbGxlciBtdXN0IGd1YXJhbnRlZSBub3QgdW5kZWZpbmVkKS5cbiAgICogQHJldHVybnMge3tldmVyeVZhbHVlOiBudW1iZXIgfCBzdHJpbmcsIGZpcnN0SW5WYWx1ZT86IG51bWJlciB8IHN0cmluZ319IC0gTm9ybWFsaXplZCBpbnRlcnZhbCBhbmQgZmlyc3QtcnVuIGRlbGF5IHZhbHVlcy5cbiAgICovXG4gIG5vcm1hbGl6ZUV2ZXJ5KGV2ZXJ5KSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZXZlcnkpKSB7XG4gICAgICBjb25zdCBbZXZlcnlWYWx1ZSwgZXZlcnlPcHRpb25zXSA9IGV2ZXJ5XG5cbiAgICAgIGlmICghZXZlcnlPcHRpb25zIHx8IHR5cGVvZiBldmVyeU9wdGlvbnMgIT09IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShldmVyeU9wdGlvbnMpKSB7XG4gICAgICAgIHJldHVybiB7ZXZlcnlWYWx1ZX1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtldmVyeVZhbHVlLCBmaXJzdEluVmFsdWU6IGV2ZXJ5T3B0aW9ucy5maXJzdElufVxuICAgIH1cblxuICAgIHJldHVybiB7ZXZlcnlWYWx1ZTogZXZlcnl9XG4gIH1cbn1cbiJdfQ==
254
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2JhY2tncm91bmQtam9icy9zY2hlZHVsZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sTUFBTSxNQUFNLGNBQWMsQ0FBQTtBQUNqQyxPQUFPLEVBQUMsZ0JBQWdCLEVBQUUsbUJBQW1CLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQTtBQUUxRSxNQUFNLG9CQUFvQixHQUFHO0lBQzNCLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJO0lBQ3RCLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJO0lBQ3hCLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJO0lBQ3pCLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUk7SUFDakIsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSTtJQUNwQixLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJO0lBQ3JCLENBQUMsRUFBRSxFQUFFLEdBQUcsSUFBSTtJQUNaLE1BQU0sRUFBRSxFQUFFLEdBQUcsSUFBSTtJQUNqQixPQUFPLEVBQUUsRUFBRSxHQUFHLElBQUk7SUFDbEIsRUFBRSxFQUFFLENBQUM7SUFDTCxDQUFDLEVBQUUsSUFBSTtJQUNQLE1BQU0sRUFBRSxJQUFJO0lBQ1osT0FBTyxFQUFFLElBQUk7SUFDYixDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUk7SUFDMUIsSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJO0lBQzdCLEtBQUssRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSTtDQUMvQixDQUFBO0FBQ0Q7OytE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QUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLEVBQUM7YUFDN0UsQ0FBQyxDQUFBO1FBQ0osQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsNENBQTRDLEVBQUUsRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUE7UUFDM0ksQ0FBQztJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsY0FBYyxDQUFDLEtBQUs7UUFDbEIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDekIsTUFBTSxDQUFDLFVBQVUsRUFBRSxZQUFZLENBQUMsR0FBRyxLQUFLLENBQUE7WUFFeEMsSUFBSSxDQUFDLFlBQVksSUFBSSxPQUFPLFlBQVksS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO2dCQUNyRixPQUFPLEVBQUMsVUFBVSxFQUFDLENBQUE7WUFDckIsQ0FBQztZQUVELE9BQU8sRUFBQyxVQUFVLEVBQUUsWUFBWSxFQUFFLFlBQVksQ0FBQyxPQUFPLEVBQUMsQ0FBQTtRQUN6RCxDQUFDO1FBRUQsT0FBTyxFQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUMsQ0FBQTtJQUM1QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IExvZ2dlciBmcm9tIFwiLi4vbG9nZ2VyLmpzXCJcbmltcG9ydCB7bmV4dENyb25GaXJlRGF0ZSwgcGFyc2VDcm9uRXhwcmVzc2lvbn0gZnJvbSBcIi4vY3Jvbi1leHByZXNzaW9uLmpzXCJcblxuY29uc3QgRFVSQVRJT05fTVVMVElQTElFUlMgPSB7XG4gIGQ6IDI0ICogNjAgKiA2MCAqIDEwMDAsXG4gIGRheTogMjQgKiA2MCAqIDYwICogMTAwMCxcbiAgZGF5czogMjQgKiA2MCAqIDYwICogMTAwMCxcbiAgaDogNjAgKiA2MCAqIDEwMDAsXG4gIGhvdXI6IDYwICogNjAgKiAxMDAwLFxuICBob3VyczogNjAgKiA2MCAqIDEwMDAsXG4gIG06IDYwICogMTAwMCxcbiAgbWludXRlOiA2MCAqIDEwMDAsXG4gIG1pbnV0ZXM6IDYwICogMTAwMCxcbiAgbXM6IDEsXG4gIHM6IDEwMDAsXG4gIHNlY29uZDogMTAwMCxcbiAgc2Vjb25kczogMTAwMCxcbiAgdzogNyAqIDI0ICogNjAgKiA2MCAqIDEwMDAsXG4gIHdlZWs6IDcgKiAyNCAqIDYwICogNjAgKiAxMDAwLFxuICB3ZWVrczogNyAqIDI0ICogNjAgKiA2MCAqIDEwMDBcbn1cbi8qKlxuICogRHVyYXRpb25Vbml0IHR5cGUuXG4gKiBAdHlwZWRlZiB7a2V5b2YgdHlwZW9mIERVUkFUSU9OX01VTFRJUExJRVJTfSBEdXJhdGlvblVuaXQgKi9cblxuLyoqXG4gKiBSdW5zIHRoZSBwYXJzZVNjaGVkdWxlZER1cmF0aW9uIGhlbHBlci5cbiAqIEBwYXJhbSB7bnVtYmVyIHwgc3RyaW5nfSB2YWx1ZSAtIER1cmF0aW9uIHZhbHVlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZSAtIEZpZWxkIG5hbWUgZm9yIGVycm9ycy5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IC0gRHVyYXRpb24gaW4gbWlsbGlzZWNvbmRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTY2hlZHVsZWREdXJhdGlvbih2YWx1ZSwgZmllbGROYW1lKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIpIHtcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZSh2YWx1ZSkgfHwgdmFsdWUgPCAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFNjaGVkdWxlZCBiYWNrZ3JvdW5kIGpvYiAke2ZpZWxkTmFtZX0gbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlciBvZiBtaWxsaXNlY29uZHMuYClcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWVcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIgfHwgIXZhbHVlLnRyaW0oKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgU2NoZWR1bGVkIGJhY2tncm91bmQgam9iICR7ZmllbGROYW1lfSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyBvciBudW1iZXIuYClcbiAgfVxuXG4gIGNvbnN0IG5vcm1hbGl6ZWRWYWx1ZSA9IHZhbHVlLnRyaW0oKS50b0xvd2VyQ2FzZSgpXG4gIGNvbnN0IG1hdGNoID0gbm9ybWFsaXplZFZhbHVlLm1hdGNoKC9eKFxcZCsoPzpcXC5cXGQrKT8pXFxzKihtc3xzfG18aHxkfHd8c2Vjb25kfHNlY29uZHN8bWludXRlfG1pbnV0ZXN8aG91cnxob3Vyc3xkYXl8ZGF5c3x3ZWVrfHdlZWtzKSQvKVxuXG4gIGlmICghbWF0Y2gpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgc2NoZWR1bGVkIGJhY2tncm91bmQgam9iICR7ZmllbGROYW1lfTogJHt2YWx1ZX1gKVxuICB9XG5cbiAgY29uc3QgbnVtZXJpY1ZhbHVlID0gTnVtYmVyKG1hdGNoWzFdKVxuICBjb25zdCBtdWx0aXBsaWVyID0gRFVSQVRJT05fTVVMVElQTElFUlNbLyoqIEB0eXBlIHtEdXJhdGlvblVuaXR9ICovIChtYXRjaFsyXSldXG5cbiAgaWYgKCFtdWx0aXBsaWVyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHNjaGVkdWxlZCBiYWNrZ3JvdW5kIGpvYiAke2ZpZWxkTmFtZX06ICR7dmFsdWV9YClcbiAgfVxuXG4gIHJldHVybiBNYXRoLnJvdW5kKG51bWVyaWNWYWx1ZSAqIG11bHRpcGxpZXIpXG59XG5cbi8qKiBSdW5zIGNvbmZpZ3VyZWQgcmVjdXJyaW5nIGJhY2tncm91bmQgam9iIHNjaGVkdWxlcy4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJhY2tncm91bmRKb2JzU2NoZWR1bGVyIHtcbiAgLyoqXG4gICAqIFJ1bnMgY29uc3RydWN0b3IuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucy5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9IGFyZ3MuY29uZmlndXJhdGlvbiAtIENvbmZpZ3VyYXRpb24uXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oe2FyZ3M6IEFycmF5PD8+LCBqb2JDbGFzczogdHlwZW9mIGltcG9ydChcIi4vam9iLmpzXCIpLmRlZmF1bHQsIGpvYktleTogc3RyaW5nLCBvcHRpb25zOiBpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLkJhY2tncm91bmRKb2JPcHRpb25zfSkgOiBQcm9taXNlPHZvaWQ+fSBhcmdzLmVucXVldWVKb2IgLSBFbnF1ZXVlIGNhbGxiYWNrLlxuICAgKi9cbiAgY29uc3RydWN0b3Ioe2NvbmZpZ3VyYXRpb24sIGVucXVldWVKb2J9KSB7XG4gICAgdGhpcy5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvblxuICAgIHRoaXMuZW5xdWV1ZUpvYiA9IGVucXVldWVKb2JcbiAgICB0aGlzLmxvZ2dlciA9IG5ldyBMb2dnZXIodGhpcylcbiAgICAvKipcbiAgICAgKiBOYXJyb3dzIHRoZSBydW50aW1lIHZhbHVlIHRvIHRoZSBkb2N1bWVudGVkIHR5cGUuXG4gICAgICogQHR5cGUge0FycmF5PFJldHVyblR5cGU8dHlwZW9mIHNldEludGVydmFsPj59ICovXG4gICAgdGhpcy5pbnRlcnZhbElkcyA9IFtdXG4gICAgLyoqXG4gICAgICogTmFycm93cyB0aGUgcnVudGltZSB2YWx1ZSB0byB0aGUgZG9jdW1lbnRlZCB0eXBlLlxuICAgICAqIEB0eXBlIHtBcnJheTxSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0Pj59ICovXG4gICAgdGhpcy50aW1lb3V0SWRzID0gW11cbiAgICAvKiogQHR5cGUge1NldDxQcm9taXNlPHZvaWQ+Pn0gLSBTY2hlZHVsZWQgZW5xdWV1ZXMgdGhhdCBzaHV0ZG93biBtdXN0IGRyYWluLiAqL1xuICAgIHRoaXMucGVuZGluZ0VucXVldWVzID0gbmV3IFNldCgpXG4gICAgLyoqXG4gICAgICogTmFycm93cyB0aGUgcnVudGltZSB2YWx1ZSB0byB0aGUgZG9jdW1lbnRlZCB0eXBlLlxuICAgICAqIEB0eXBlIHtib29sZWFufSAtIFRydWUgYmV0d2VlbiBzdG9wKCkgYW5kIHRoZSBuZXh0IHN0YXJ0KCk7IGNyb24gc2VsZi1yZXNjaGVkdWxlciBjaGVja3MgdGhpcyBzbyBhIHN0b3AoKSBkdXJpbmcgYW4gaW4tZmxpZ2h0IGVucXVldWUgZG9lc24ndCBpbW1lZGlhdGVseSByZS1hcm0uXG4gICAgICovXG4gICAgdGhpcy5zdG9wcGVkID0gZmFsc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHN0YXJ0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gKi9cbiAgYXN5bmMgc3RhcnQoKSB7XG4gICAgdGhpcy5zdG9wcGVkID0gZmFsc2VcblxuICAgIGNvbnN0IHNjaGVkdWxlZEJhY2tncm91bmRKb2JzQ29uZmlnID0gYXdhaXQgdGhpcy5jb25maWd1cmF0aW9uLmdldFNjaGVkdWxlZEJhY2tncm91bmRKb2JzQ29uZmlnKClcblxuICAgIGlmICghc2NoZWR1bGVkQmFja2dyb3VuZEpvYnNDb25maWc/LmpvYnMpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGZvciAoY29uc3Qgam9iS2V5IG9mIE9iamVjdC5rZXlzKHNjaGVkdWxlZEJhY2tncm91bmRKb2JzQ29uZmlnLmpvYnMpKSB7XG4gICAgICBjb25zdCBqb2JDb25maWd1cmF0aW9uID0gc2NoZWR1bGVkQmFja2dyb3VuZEpvYnNDb25maWcuam9ic1tqb2JLZXldXG5cbiAgICAgIGlmICgham9iQ29uZmlndXJhdGlvbiB8fCBqb2JDb25maWd1cmF0aW9uLmVuYWJsZWQgPT09IGZhbHNlKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2NoZWR1bGVKb2Ioe2pvYkNvbmZpZ3VyYXRpb24sIGpvYktleX0pXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgc3RvcC5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IFJlc29sdmVzIGFmdGVyIGluLWZsaWdodCBzY2hlZHVsZWQgZW5xdWV1ZXMgZmluaXNoLlxuICAgKi9cbiAgYXN5bmMgc3RvcCgpIHtcbiAgICB0aGlzLnN0b3BwZWQgPSB0cnVlXG5cbiAgICBmb3IgKGNvbnN0IGludGVydmFsSWQgb2YgdGhpcy5pbnRlcnZhbElkcykge1xuICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbElkKVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgdGltZW91dElkIG9mIHRoaXMudGltZW91dElkcykge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZClcbiAgICB9XG5cbiAgICB0aGlzLmludGVydmFsSWRzID0gW11cbiAgICB0aGlzLnRpbWVvdXRJZHMgPSBbXVxuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwodGhpcy5wZW5kaW5nRW5xdWV1ZXMpXG4gIH1cblxuICAvKipcbiAgICogUnVucyBzY2hlZHVsZSBqb2IuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucy5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLXR5cGVzLmpzXCIpLlNjaGVkdWxlZEJhY2tncm91bmRKb2JDb25maWd1cmF0aW9ufSBhcmdzLmpvYkNvbmZpZ3VyYXRpb24gLSBKb2IgY29uZmlndXJhdGlvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3Muam9iS2V5IC0gSm9iIGtleS5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBzY2hlZHVsZUpvYih7am9iQ29uZmlndXJhdGlvbiwgam9iS2V5fSkge1xuICAgIGlmICgham9iQ29uZmlndXJhdGlvbi5jbGFzcyB8fCB0eXBlb2Ygam9iQ29uZmlndXJhdGlvbi5jbGFzcy5wZXJmb3JtTGF0ZXJXaXRoT3B0aW9ucyAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFNjaGVkdWxlZCBiYWNrZ3JvdW5kIGpvYiAke2pvYktleX0gbXVzdCBkZWZpbmUgYSBqb2IgY2xhc3MuYClcbiAgICB9XG5cbiAgICBpZiAoam9iQ29uZmlndXJhdGlvbi5jcm9uICE9PSB1bmRlZmluZWQgJiYgam9iQ29uZmlndXJhdGlvbi5ldmVyeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFNjaGVkdWxlZCBiYWNrZ3JvdW5kIGpvYiAke2pvYktleX0gbXVzdCBkZWZpbmUgZWl0aGVyIFwiZXZlcnlcIiBvciBcImNyb25cIiwgbm90IGJvdGguYClcbiAgICB9XG5cbiAgICBpZiAoam9iQ29uZmlndXJhdGlvbi5jcm9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuc2NoZWR1bGVDcm9uSm9iKHtqb2JDb25maWd1cmF0aW9uLCBqb2JLZXl9KVxuXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoam9iQ29uZmlndXJhdGlvbi5ldmVyeSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFNjaGVkdWxlZCBiYWNrZ3JvdW5kIGpvYiAke2pvYktleX0gbXVzdCBkZWZpbmUgZWl0aGVyIFwiZXZlcnlcIiBvciBcImNyb25cIi5gKVxuICAgIH1cblxuICAgIHRoaXMuc2NoZWR1bGVFdmVyeUpvYih7am9iQ29uZmlndXJhdGlvbiwgam9iS2V5fSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHNjaGVkdWxlIGV2ZXJ5IGpvYi5cbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24tdHlwZXMuanNcIikuU2NoZWR1bGVkQmFja2dyb3VuZEpvYkNvbmZpZ3VyYXRpb259IGFyZ3Muam9iQ29uZmlndXJhdGlvbiAtIEpvYiBjb25maWd1cmF0aW9uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5qb2JLZXkgLSBKb2Iga2V5LlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIHNjaGVkdWxlRXZlcnlKb2Ioe2pvYkNvbmZpZ3VyYXRpb24sIGpvYktleX0pIHtcbiAgICBjb25zdCBldmVyeUNvbmZpZyA9IC8qKiBAdHlwZSB7Tm9uTnVsbGFibGU8dHlwZW9mIGpvYkNvbmZpZ3VyYXRpb24uZXZlcnk+fSAqLyAoam9iQ29uZmlndXJhdGlvbi5ldmVyeSlcbiAgICBjb25zdCB7ZXZlcnlWYWx1ZSwgZmlyc3RJblZhbHVlfSA9IHRoaXMubm9ybWFsaXplRXZlcnkoZXZlcnlDb25maWcpXG4gICAgY29uc3QgaW50ZXJ2YWxNcyA9IHBhcnNlU2NoZWR1bGVkRHVyYXRpb24oZXZlcnlWYWx1ZSwgYCR7am9iS2V5fS5ldmVyeWApXG4gICAgY29uc3QgZmlyc3RJbk1zID0gZmlyc3RJblZhbHVlICE9PSB1bmRlZmluZWQgPyBwYXJzZVNjaGVkdWxlZER1cmF0aW9uKGZpcnN0SW5WYWx1ZSwgYCR7am9iS2V5fS5maXJzdEluYCkgOiBpbnRlcnZhbE1zXG5cbiAgICBpZiAoaW50ZXJ2YWxNcyA8IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgU2NoZWR1bGVkIGJhY2tncm91bmQgam9iICR7am9iS2V5fS5ldmVyeSBtdXN0IGJlIGF0IGxlYXN0IDEgbWlsbGlzZWNvbmQuYClcbiAgICB9XG5cbiAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHZvaWQgdGhpcy5ydW5TY2hlZHVsZWRKb2Ioe2pvYkNvbmZpZ3VyYXRpb24sIGpvYktleX0pXG5cbiAgICAgIGNvbnN0IGludGVydmFsSWQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgIHZvaWQgdGhpcy5ydW5TY2hlZHVsZWRKb2Ioe2pvYkNvbmZpZ3VyYXRpb24sIGpvYktleX0pXG4gICAgICB9LCBpbnRlcnZhbE1zKVxuXG4gICAgICB0aGlzLmludGVydmFsSWRzLnB1c2goaW50ZXJ2YWxJZClcbiAgICB9LCBmaXJzdEluTXMpXG5cbiAgICB0aGlzLnRpbWVvdXRJZHMucHVzaCh0aW1lb3V0SWQpXG4gIH1cblxuICAvKipcbiAgICogQ3JvbnRhYiBzY2hlZHVsZXMgZG9uJ3QgaGF2ZSBhIGNvbnN0YW50IGludGVydmFsIChgMCA5ICogKiAxLTVgXG4gICAqIGZpcmVzIG9uY2UgcGVyIHdlZWtkYXkgYXQgOSBBTSwgd2l0aCBnYXBzIG9mIHZhcnlpbmcgbGVuZ3RoKSwgc29cbiAgICogd2Ugc2VsZi1yZXNjaGVkdWxlIHdpdGggYHNldFRpbWVvdXRgIGFmdGVyIGV2ZXJ5IGZpcmUgaW5zdGVhZCBvZlxuICAgKiB1c2luZyBgc2V0SW50ZXJ2YWxgLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5TY2hlZHVsZWRCYWNrZ3JvdW5kSm9iQ29uZmlndXJhdGlvbn0gYXJncy5qb2JDb25maWd1cmF0aW9uIC0gSm9iIGNvbmZpZ3VyYXRpb24uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLmpvYktleSAtIEpvYiBrZXkuXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgc2NoZWR1bGVDcm9uSm9iKHtqb2JDb25maWd1cmF0aW9uLCBqb2JLZXl9KSB7XG4gICAgY29uc3QgY3JvbkV4cHJlc3Npb24gPSBqb2JDb25maWd1cmF0aW9uLmNyb25cblxuICAgIGlmICh0eXBlb2YgY3JvbkV4cHJlc3Npb24gIT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgU2NoZWR1bGVkIGJhY2tncm91bmQgam9iICR7am9iS2V5fS5jcm9uIG11c3QgYmUgYSBzdHJpbmcuYClcbiAgICB9XG5cbiAgICBjb25zdCBwYXJzZWQgPSBwYXJzZUNyb25FeHByZXNzaW9uKGNyb25FeHByZXNzaW9uKVxuICAgIGNvbnN0IHNjaGVkdWxlTmV4dCA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLnN0b3BwZWQpIHJldHVyblxuXG4gICAgICBjb25zdCBuZXh0RGF0ZSA9IG5leHRDcm9uRmlyZURhdGUocGFyc2VkLCBuZXcgRGF0ZSgpKVxuICAgICAgY29uc3QgZGVsYXlNcyA9IE1hdGgubWF4KDEsIG5leHREYXRlLmdldFRpbWUoKSAtIERhdGUubm93KCkpXG4gICAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuc3RvcHBlZCkgcmV0dXJuXG5cbiAgICAgICAgYXdhaXQgdGhpcy5ydW5TY2hlZHVsZWRKb2Ioe2pvYkNvbmZpZ3VyYXRpb24sIGpvYktleX0pXG5cbiAgICAgICAgLy8gVGhlIGF3YWl0IGFib3ZlIGNhbiB5aWVsZCB0byBhIHN0b3AoKSBjYWxsLiBSZS1jaGVjayBiZWZvcmVcbiAgICAgICAgLy8gcmUtYXJtaW5nIHNvIHdlIGRvbid0IGtlZXAgZmlyaW5nIGFmdGVyIHNodXRkb3duLlxuICAgICAgICBpZiAodGhpcy5zdG9wcGVkKSByZXR1cm5cblxuICAgICAgICBzY2hlZHVsZU5leHQoKVxuICAgICAgfSwgZGVsYXlNcylcblxuICAgICAgdGhpcy50aW1lb3V0SWRzLnB1c2godGltZW91dElkKVxuICAgIH1cblxuICAgIHNjaGVkdWxlTmV4dCgpXG4gIH1cblxuICAvKipcbiAgICogVHJhY2tzIGEgc2NoZWR1bGVkIGVucXVldWUgc28gc3RvcCgpIGNhbm5vdCByZXR1cm4gd2hpbGUgaXQgY2FuIHN0aWxsIG11dGF0ZSB0aGUgc3RvcmUuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucy5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLXR5cGVzLmpzXCIpLlNjaGVkdWxlZEJhY2tncm91bmRKb2JDb25maWd1cmF0aW9ufSBhcmdzLmpvYkNvbmZpZ3VyYXRpb24gLSBKb2IgY29uZmlndXJhdGlvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3Muam9iS2V5IC0gSm9iIGtleS5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgYWZ0ZXIgdGhlIGVucXVldWUgYXR0ZW1wdCBmaW5pc2hlcy5cbiAgICovXG4gIGFzeW5jIHJ1blNjaGVkdWxlZEpvYih7am9iQ29uZmlndXJhdGlvbiwgam9iS2V5fSkge1xuICAgIGNvbnN0IHBlbmRpbmdFbnF1ZXVlID0gdGhpcy5lbnF1ZXVlU2NoZWR1bGVkSm9iKHtqb2JDb25maWd1cmF0aW9uLCBqb2JLZXl9KVxuICAgIHRoaXMucGVuZGluZ0VucXVldWVzLmFkZChwZW5kaW5nRW5xdWV1ZSlcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBwZW5kaW5nRW5xdWV1ZVxuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnBlbmRpbmdFbnF1ZXVlcy5kZWxldGUocGVuZGluZ0VucXVldWUpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgZW5xdWV1ZSBzY2hlZHVsZWQgam9iLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5TY2hlZHVsZWRCYWNrZ3JvdW5kSm9iQ29uZmlndXJhdGlvbn0gYXJncy5qb2JDb25maWd1cmF0aW9uIC0gSm9iIGNvbmZpZ3VyYXRpb24uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLmpvYktleSAtIEpvYiBrZXkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgYXN5bmMgZW5xdWV1ZVNjaGVkdWxlZEpvYih7am9iQ29uZmlndXJhdGlvbiwgam9iS2V5fSkge1xuICAgIHRyeSB7XG4gICAgICAvLyBEZS1kdXBsaWNhdGUgc2NoZWR1bGVkIGVucXVldWVzIGJ5IGRlZmF1bHQ6IGEgcGVyaW9kaWMgam9iIHN0aWxsIHBlbmRpbmcgZnJvbSBhbiBlYXJsaWVyXG4gICAgICAvLyB0aWNrIGlzIG5vdCBlbnF1ZXVlZCBhZ2Fpbiwgd2hpY2ggaXMgd2hhdCBsZXQgdGhlIGJhY2tncm91bmRfam9icyB0YWJsZSBmaWxsIHdpdGggdGhvdXNhbmRzXG4gICAgICAvLyBvZiBpZGVudGljYWwgc2NoZWR1bGVkIGpvYnMgd2hlbiB0aGUgcXVldWUgYmFja2VkIHVwLiBEZWR1cCBpcyBieSBqb2IgaWRlbnRpdHkgKHNlZSB0aGVcbiAgICAgIC8vIHN0b3JlKSwgc28gdGhlIGpvYiBrZWVwcyBpdHMgcXVldWUtZGVyaXZlZCBjb25jdXJyZW5jeSBjYXAuIEEgc2NoZWR1bGUgY2FuIG9wdCBvdXQgd2l0aFxuICAgICAgLy8gYGRlZHVwbGljYXRlV2hpbGVRdWV1ZWQ6IGZhbHNlYC5cbiAgICAgIGF3YWl0IHRoaXMuZW5xdWV1ZUpvYih7XG4gICAgICAgIGFyZ3M6IEFycmF5LmlzQXJyYXkoam9iQ29uZmlndXJhdGlvbi5hcmdzKSA/IGpvYkNvbmZpZ3VyYXRpb24uYXJncyA6IFtdLFxuICAgICAgICBqb2JDbGFzczogam9iQ29uZmlndXJhdGlvbi5jbGFzcyxcbiAgICAgICAgam9iS2V5LFxuICAgICAgICBvcHRpb25zOiB7ZGVkdXBsaWNhdGVXaGlsZVF1ZXVlZDogdHJ1ZSwgLi4uKGpvYkNvbmZpZ3VyYXRpb24ub3B0aW9ucyB8fCB7fSl9XG4gICAgICB9KVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBhd2FpdCB0aGlzLmxvZ2dlci5lcnJvcigoKSA9PiBbXCJGYWlsZWQgdG8gZW5xdWV1ZSBzY2hlZHVsZWQgYmFja2dyb3VuZCBqb2JcIiwge2pvYktleSwgam9iTmFtZTogam9iQ29uZmlndXJhdGlvbi5jbGFzcy5qb2JOYW1lKCl9LCBlcnJvcl0pXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgbm9ybWFsaXplIGV2ZXJ5LlxuICAgKiBAcGFyYW0ge05vbk51bGxhYmxlPGltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24tdHlwZXMuanNcIikuU2NoZWR1bGVkQmFja2dyb3VuZEpvYkNvbmZpZ3VyYXRpb25bXCJldmVyeVwiXT59IGV2ZXJ5IC0gRXZlcnkgY29uZmlnIChjYWxsZXIgbXVzdCBndWFyYW50ZWUgbm90IHVuZGVmaW5lZCkuXG4gICAqIEByZXR1cm5zIHt7ZXZlcnlWYWx1ZTogbnVtYmVyIHwgc3RyaW5nLCBmaXJzdEluVmFsdWU/OiBudW1iZXIgfCBzdHJpbmd9fSAtIE5vcm1hbGl6ZWQgaW50ZXJ2YWwgYW5kIGZpcnN0LXJ1biBkZWxheSB2YWx1ZXMuXG4gICAqL1xuICBub3JtYWxpemVFdmVyeShldmVyeSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGV2ZXJ5KSkge1xuICAgICAgY29uc3QgW2V2ZXJ5VmFsdWUsIGV2ZXJ5T3B0aW9uc10gPSBldmVyeVxuXG4gICAgICBpZiAoIWV2ZXJ5T3B0aW9ucyB8fCB0eXBlb2YgZXZlcnlPcHRpb25zICE9PSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoZXZlcnlPcHRpb25zKSkge1xuICAgICAgICByZXR1cm4ge2V2ZXJ5VmFsdWV9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7ZXZlcnlWYWx1ZSwgZmlyc3RJblZhbHVlOiBldmVyeU9wdGlvbnMuZmlyc3RJbn1cbiAgICB9XG5cbiAgICByZXR1cm4ge2V2ZXJ5VmFsdWU6IGV2ZXJ5fVxuICB9XG59XG4iXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../src/background-jobs/store.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../src/background-jobs/store.js"],"names":[],"mappings":"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"}