velocious 1.0.596 → 1.0.597

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.
Files changed (106) hide show
  1. package/README.md +16 -0
  2. package/build/background-jobs/pooled-runner-broker-identity.js +22 -4
  3. package/build/background-jobs/store.js +383 -9
  4. package/build/background-jobs/types.js +1 -0
  5. package/build/cli/commands/db/tenants/migrations/pending.js +45 -0
  6. package/build/configuration-types.js +3 -0
  7. package/build/configuration.js +5 -2
  8. package/build/database/drivers/sqlite/base.js +3 -3
  9. package/build/database/tenants/migration-pending-inspector.js +77 -0
  10. package/build/environment-handlers/base.js +8 -0
  11. package/build/environment-handlers/node.js +14 -0
  12. package/build/mailer/backends/resend-smtp.js +121 -0
  13. package/build/mailer/base.js +52 -22
  14. package/build/mailer/delivery-operation-store.js +152 -0
  15. package/build/mailer/delivery-operation.js +205 -0
  16. package/build/mailer/delivery.js +9 -4
  17. package/build/mailer/index.js +5 -1
  18. package/build/mailer.js +6 -1
  19. package/build/src/background-jobs/pooled-runner-broker-identity.d.ts +10 -1
  20. package/build/src/background-jobs/pooled-runner-broker-identity.d.ts.map +1 -1
  21. package/build/src/background-jobs/pooled-runner-broker-identity.js +23 -5
  22. package/build/src/background-jobs/store.d.ts +154 -0
  23. package/build/src/background-jobs/store.d.ts.map +1 -1
  24. package/build/src/background-jobs/store.js +350 -10
  25. package/build/src/background-jobs/types.d.ts +5 -0
  26. package/build/src/background-jobs/types.d.ts.map +1 -1
  27. package/build/src/background-jobs/types.js +2 -1
  28. package/build/src/cli/commands/db/tenants/migrations/pending.d.ts +15 -0
  29. package/build/src/cli/commands/db/tenants/migrations/pending.d.ts.map +1 -0
  30. package/build/src/cli/commands/db/tenants/migrations/pending.js +40 -0
  31. package/build/src/configuration-types.d.ts +20 -0
  32. package/build/src/configuration-types.d.ts.map +1 -1
  33. package/build/src/configuration-types.js +4 -1
  34. package/build/src/configuration.d.ts +2 -2
  35. package/build/src/configuration.d.ts.map +1 -1
  36. package/build/src/configuration.js +6 -3
  37. package/build/src/database/drivers/sqlite/base.js +4 -4
  38. package/build/src/database/tenants/migration-pending-inspector.d.ts +38 -0
  39. package/build/src/database/tenants/migration-pending-inspector.d.ts.map +1 -0
  40. package/build/src/database/tenants/migration-pending-inspector.js +70 -0
  41. package/build/src/environment-handlers/base.d.ts +10 -0
  42. package/build/src/environment-handlers/base.d.ts.map +1 -1
  43. package/build/src/environment-handlers/base.js +8 -1
  44. package/build/src/environment-handlers/node.d.ts +11 -0
  45. package/build/src/environment-handlers/node.d.ts.map +1 -1
  46. package/build/src/environment-handlers/node.js +14 -1
  47. package/build/src/mailer/backends/resend-smtp.d.ts +43 -0
  48. package/build/src/mailer/backends/resend-smtp.d.ts.map +1 -0
  49. package/build/src/mailer/backends/resend-smtp.js +106 -0
  50. package/build/src/mailer/base.d.ts +9 -2
  51. package/build/src/mailer/base.d.ts.map +1 -1
  52. package/build/src/mailer/base.js +41 -19
  53. package/build/src/mailer/delivery-operation-store.d.ts +52 -0
  54. package/build/src/mailer/delivery-operation-store.d.ts.map +1 -0
  55. package/build/src/mailer/delivery-operation-store.js +130 -0
  56. package/build/src/mailer/delivery-operation.d.ts +73 -0
  57. package/build/src/mailer/delivery-operation.d.ts.map +1 -0
  58. package/build/src/mailer/delivery-operation.js +185 -0
  59. package/build/src/mailer/delivery.d.ts +4 -2
  60. package/build/src/mailer/delivery.d.ts.map +1 -1
  61. package/build/src/mailer/delivery.js +9 -5
  62. package/build/src/mailer/index.d.ts +24 -1
  63. package/build/src/mailer/index.d.ts.map +1 -1
  64. package/build/src/mailer/index.js +6 -2
  65. package/build/src/mailer.d.ts +11 -13
  66. package/build/src/mailer.d.ts.map +1 -1
  67. package/build/src/mailer.js +7 -2
  68. package/build/src/sync/local-mutation-log.d.ts +5 -5
  69. package/build/src/sync/local-mutation-log.d.ts.map +1 -1
  70. package/build/src/sync/local-mutation-log.js +34 -10
  71. package/build/src/sync/stable-json.d.ts +1 -8
  72. package/build/src/sync/stable-json.d.ts.map +1 -1
  73. package/build/src/sync/stable-json.js +2 -27
  74. package/build/src/sync/sync-envelope-replay-service.d.ts +3 -2
  75. package/build/src/sync/sync-envelope-replay-service.d.ts.map +1 -1
  76. package/build/src/sync/sync-envelope-replay-service.js +12 -8
  77. package/build/src/utils/stable-json.d.ts +7 -0
  78. package/build/src/utils/stable-json.d.ts.map +1 -0
  79. package/build/src/utils/stable-json.js +25 -0
  80. package/build/sync/local-mutation-log.js +37 -6
  81. package/build/sync/stable-json.js +1 -28
  82. package/build/sync/sync-envelope-replay-service.js +11 -7
  83. package/build/tsconfig.tsbuildinfo +1 -1
  84. package/build/utils/stable-json.js +26 -0
  85. package/package.json +1 -1
  86. package/src/background-jobs/pooled-runner-broker-identity.js +22 -4
  87. package/src/background-jobs/store.js +383 -9
  88. package/src/background-jobs/types.js +1 -0
  89. package/src/cli/commands/db/tenants/migrations/pending.js +45 -0
  90. package/src/configuration-types.js +3 -0
  91. package/src/configuration.js +5 -2
  92. package/src/database/drivers/sqlite/base.js +3 -3
  93. package/src/database/tenants/migration-pending-inspector.js +77 -0
  94. package/src/environment-handlers/base.js +8 -0
  95. package/src/environment-handlers/node.js +14 -0
  96. package/src/mailer/backends/resend-smtp.js +121 -0
  97. package/src/mailer/base.js +52 -22
  98. package/src/mailer/delivery-operation-store.js +152 -0
  99. package/src/mailer/delivery-operation.js +205 -0
  100. package/src/mailer/delivery.js +9 -4
  101. package/src/mailer/index.js +5 -1
  102. package/src/mailer.js +6 -1
  103. package/src/sync/local-mutation-log.js +37 -6
  104. package/src/sync/stable-json.js +1 -28
  105. package/src/sync/sync-envelope-replay-service.js +11 -7
  106. package/src/utils/stable-json.js +26 -0
@@ -37,10 +37,11 @@
37
37
  * @property {import("./device-identity.js").SignedSyncMutation} [signedMutation] - Original signed mutation envelope, retained for peer-forwarded mutations.
38
38
  * @property {number} sequence - Monotonic local sequence.
39
39
  * @property {LocalMutationStatus} status - Local replay/apply status.
40
- * @property {Record<string, import("../configuration-types.js").FrontendModelSyncJsonValue>} [syncResult] - Backend replay/result metadata.
40
+ * @property {Record<string, import("../frontend-models/base.js").FrontendModelTransportValue>} [syncResult] - Backend replay/result metadata. Stored as transport markers so Date (and other typed) values survive the durable JSON round trip and are restored on readback.
41
41
  * @property {string} updatedAt - ISO timestamp when the record was last changed.
42
42
  */
43
43
  // @ts-check
44
+ import { deserializeFrontendModelTransportValue, serializeFrontendModelTransportValue } from "../frontend-models/transport-serialization.js";
44
45
  import stableJsonStringify from "./stable-json.js";
45
46
  const DEFAULT_STORAGE_KEY = "velocious.sync.localMutationLog";
46
47
  const PENDING_STATUS_VALUES = /** @type {LocalMutationStatus[]} */ (["pending", "applied-locally", "peer-applied"]);
@@ -115,7 +116,7 @@ export default class LocalMutationLog {
115
116
  * @param {object} args - Arguments.
116
117
  * @param {string} args.id - Record id.
117
118
  * @param {LocalMutationStatus} args.status - New status.
118
- * @param {Record<string, import("../configuration-types.js").FrontendModelSyncJsonValue>} [args.syncResult] - Result metadata.
119
+ * @param {Record<string, import("../frontend-models/base.js").FrontendModelTransportValue>} [args.syncResult] - Result metadata (may carry transport-restored typed values).
119
120
  * @returns {Promise<LocalMutationLogRecord>} - Updated record.
120
121
  */
121
122
  async updateStatus({ id, status, syncResult }) {
@@ -127,11 +128,15 @@ export default class LocalMutationLog {
127
128
  throw new Error(`No local mutation log record '${id}'`);
128
129
  const record = normalizeRecord(rawRecord);
129
130
  record.status = /** @type {LocalMutationStatus} */ (status);
130
- if (syncResult !== undefined)
131
- record.syncResult = cloneJsonObject(syncResult, "syncResult");
131
+ if (syncResult !== undefined) {
132
+ // Encode transport-restored typed values (e.g. Date attributes in a
133
+ // conflict serverModel) as markers before the JSON clone so the
134
+ // durable persistence round trip cannot stringify them.
135
+ record.syncResult = cloneJsonObject(serializeFrontendModelTransportValue(syncResult), "syncResult");
136
+ }
132
137
  record.updatedAt = this.currentTimestamp();
133
138
  await this.storage.updateRecord(this.storageKey, cloneRecord(record));
134
- return cloneRecord(record);
139
+ return restoreSyncResultTypes(cloneRecord(record));
135
140
  });
136
141
  }
137
142
  /**
@@ -151,7 +156,7 @@ export default class LocalMutationLog {
151
156
  record.mutation = normalizeMutation(mutation);
152
157
  record.updatedAt = this.currentTimestamp();
153
158
  await this.storage.updateRecord(this.storageKey, cloneRecord(record));
154
- return cloneRecord(record);
159
+ return restoreSyncResultTypes(cloneRecord(record));
155
160
  });
156
161
  }
157
162
  /**
@@ -239,7 +244,23 @@ function normalizeRecordList(records) {
239
244
  return records
240
245
  .map(normalizeRecord)
241
246
  .sort((left, right) => left.sequence - right.sequence)
242
- .map((record) => cloneRecord(record));
247
+ .map((record) => cloneRecord(record))
248
+ .map(restoreSyncResultTypes);
249
+ }
250
+ /**
251
+ * Restores transport-restored typed values in a record's syncResult after the
252
+ * final JSON clone, so callers see Date (and other typed) values on durable
253
+ * readback instead of marker-encoded ISO strings.
254
+ * @param {LocalMutationLogRecord} record - Cloned record.
255
+ * @returns {LocalMutationLogRecord} - Record with restored syncResult types.
256
+ */
257
+ function restoreSyncResultTypes(record) {
258
+ if (record.syncResult === undefined)
259
+ return record;
260
+ return {
261
+ ...record,
262
+ syncResult: /** @type {Record<string, import("../frontend-models/base.js").FrontendModelTransportValue>} */ (deserializeFrontendModelTransportValue(record.syncResult))
263
+ };
243
264
  }
244
265
  /**
245
266
  * Runs a callback after earlier writes for the same storage key have completed.
@@ -292,8 +313,11 @@ function normalizeRecord(value) {
292
313
  if (record.signedMutation !== undefined) {
293
314
  normalizedRecord.signedMutation = /** @type {import("./device-identity.js").SignedSyncMutation} */ (cloneJsonObject(record.signedMutation, "signedMutation"));
294
315
  }
295
- if (record.syncResult !== undefined)
296
- normalizedRecord.syncResult = cloneJsonObject(record.syncResult, "syncResult");
316
+ if (record.syncResult !== undefined) {
317
+ // Persisted syncResult is marker-encoded so it survives the JSON clone;
318
+ // typed values are restored by restoreSyncResultTypes at the read boundary.
319
+ normalizedRecord.syncResult = /** @type {Record<string, import("../frontend-models/base.js").FrontendModelTransportValue>} */ (cloneJsonObject(record.syncResult, "syncResult"));
320
+ }
297
321
  return normalizedRecord;
298
322
  }
299
323
  /**
@@ -431,4 +455,4 @@ function randomRecordId() {
431
455
  return cryptoProvider.randomUUID();
432
456
  return `local-mutation-${Date.now()}-${Math.random().toString(16).slice(2)}`;
433
457
  }
434
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtbXV0YXRpb24tbG9nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3N5bmMvbG9jYWwtbXV0YXRpb24tbG9nLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFDSDs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0g7Ozs7O0dBS0c7QUFDSDs7O0tBR0s7QUFDTDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxZQUFZO0FBRVosT0FBTyxtQkFBbUIsTUFBTSxrQkFBa0IsQ0FBQTtBQUVsRCxNQUFNLG1CQUFtQixHQUFHLGlDQUFpQyxDQUFBO0FBQzdELE1BQU0scUJBQXFCLEdBQUcsb0NBQW9DLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFBO0FBQ25ILE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQTtBQUN2RCxNQUFNLGlCQUFpQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUE7QUFDMUYsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFBO0FBQ3pELDRDQUE0QztBQUM1QyxNQUFNLGlCQUFpQixHQUFHLElBQUksR0FBRyxFQUFFLENBQUE7QUFFbkMsbUZBQW1GO0FBQ25GLE1BQU0sQ0FBQyxPQUFPLE9BQU8sZ0JBQWdCO0lBQ25DOzs7Ozs7O09BT0c7SUFDSCxZQUFZLEVBQUMsV0FBVyxHQUFHLGNBQWMsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsVUFBVSxHQUFHLG1CQUFtQixFQUFDO1FBQzNHLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUMzQixNQUFN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UyxXQUFXLENBQUMsTUFBTTtJQUN6QixPQUFPLHFDQUFxQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUNuRixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUyxjQUFjO0lBQ3JCLE1BQU0sY0FBYyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUE7SUFFeEMsSUFBSSxjQUFjLElBQUksT0FBTyxjQUFjLENBQUMsVUFBVSxLQUFLLFVBQVU7UUFBRSxPQUFPLGNBQWMsQ0FBQyxVQUFVLEVBQUUsQ0FBQTtJQUV6RyxPQUFPLGtCQUFrQixJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtBQUM5RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBMb2NhbCBtdXRhdGlvbiBsb2cgcmVjb3JkIHF1ZXJ5IG9wdGlvbnMuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBMb2NhbE11dGF0aW9uTG9nUmVjb3Jkc09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7TG9jYWxNdXRhdGlvblN0YXR1c1tdfSBbc3RhdHVzZXNdIC0gT3B0aW9uYWwgc3RhdHVzIGZpbHRlci5cbiAqL1xuLyoqXG4gKiBMb2NhbCBtdXRhdGlvbiBsb2cgcm93LW9yaWVudGVkIHN0b3JhZ2UgYWRhcHRlci5cbiAqXG4gKiBJbXBsZW1lbnRhdGlvbnMgc2hvdWxkIHN0b3JlIGVhY2ggbXV0YXRpb24gbG9nIHJlY29yZCBhcyBpdHMgb3duIHJvdy9lbnRyeS5cbiAqIE5hdGl2ZSBhcHBzIHNob3VsZCBiYWNrIHRoaXMgd2l0aCBTUUxpdGUgYW5kIGluZGV4ZXMgb24gc3RvcmFnZSBrZXksIHN0YXR1cyxcbiAqIGFuZCBzZXF1ZW5jZS4gQXZvaWQgc3RvcmluZyB0aGUgd2hvbGUgbG9nIGFzIG9uZSBKU09OIGJsb2IuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBMb2NhbE11dGF0aW9uTG9nU3RvcmFnZVxuICogQHByb3BlcnR5IHsoc3RvcmFnZUtleTogc3RyaW5nLCByZWNvcmQ6IExvY2FsTXV0YXRpb25Mb2dSZWNvcmQpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkfSBhcHBlbmRSZWNvcmQgLSBBcHBlbmRzIG9uZSBsb2cgcmVjb3JkLlxuICogQHByb3BlcnR5IHsoc3RvcmFnZUtleTogc3RyaW5nLCBpZHM6IHN0cmluZ1tdKSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZH0gZGVsZXRlUmVjb3JkcyAtIERlbGV0ZXMgbG9nIHJlY29yZHMgYnkgaWQuXG4gKiBAcHJvcGVydHkgeyhzdG9yYWdlS2V5OiBzdHJpbmcpID0+IFByb21pc2U8bnVtYmVyPiB8IG51bWJlcn0gbmV4dFNlcXVlbmNlIC0gUmV0dXJucyB0aGUgbmV4dCBsb2NhbCBzZXF1ZW5jZSBudW1iZXIuXG4gKiBAcHJvcGVydHkgeyhzdG9yYWdlS2V5OiBzdHJpbmcsIGlkOiBzdHJpbmcpID0+IFByb21pc2U8TG9jYWxNdXRhdGlvbkxvZ1JlY29yZCB8IG51bGwgfCB1bmRlZmluZWQ+IHwgTG9jYWxNdXRhdGlvbkxvZ1JlY29yZCB8IG51bGwgfCB1bmRlZmluZWR9IHJlY29yZCAtIFJlYWRzIG9uZSBsb2cgcmVjb3JkIGJ5IGlkLlxuICogQHByb3BlcnR5IHsoc3RvcmFnZUtleTogc3RyaW5nLCBvcHRpb25zPzogTG9jYWxNdXRhdGlvbkxvZ1JlY29yZHNPcHRpb25zKSA9PiBQcm9taXNlPExvY2FsTXV0YXRpb25Mb2dSZWNvcmRbXT4gfCBMb2NhbE11dGF0aW9uTG9nUmVjb3JkW119IHJlY29yZHMgLSBSZWFkcyBsb2cgcmVjb3Jkcy5cbiAqIEBwcm9wZXJ0eSB7KHN0b3JhZ2VLZXk6IHN0cmluZywgcmVjb3JkOiBMb2NhbE11dGF0aW9uTG9nUmVjb3JkKSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZH0gdXBkYXRlUmVjb3JkIC0gUmVwbGFjZXMgb25lIGxvZyByZWNvcmQuXG4gKi9cbi8qKlxuICogTG9jYWwgc3luYyBtdXRhdGlvbiBkZXBlbmRlbmN5IG1ldGFkYXRhLlxuICogQHR5cGVkZWYge29iamVjdH0gTG9jYWxNdXRhdGlvbkRlcGVuZGVuY3lcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjbGllbnRNdXRhdGlvbklkIC0gQ2xpZW50IG11dGF0aW9uIGlkIHRoaXMgbXV0YXRpb24gZGVwZW5kcyBvbi5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBtb2RlbCAtIERlcGVuZGVudCBtb2RlbC9yZXNvdXJjZSBuYW1lLlxuICovXG4vKipcbiAqIExvY2FsIG11dGF0aW9uIGxvZyBzdGF0dXMuXG4gKiBAdHlwZWRlZiB7XCJwZW5kaW5nXCIgfCBcImFwcGxpZWQtbG9jYWxseVwiIHwgXCJwZWVyLWFwcGxpZWRcIiB8IFwiY29uZmxpY3RcIiB8IFwicmVqZWN0ZWRcIiB8IFwic3luY2VkXCJ9IExvY2FsTXV0YXRpb25TdGF0dXNcbiAqICovXG4vKipcbiAqIExvY2FsIG11dGF0aW9uIGxvZyByZWNvcmQuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBMb2NhbE11dGF0aW9uTG9nUmVjb3JkXG4gKiBAcHJvcGVydHkge3N0cmluZ30gY3JlYXRlZEF0IC0gSVNPIHRpbWVzdGFtcCB3aGVuIHRoZSByZWNvcmQgd2FzIGNyZWF0ZWQgbG9jYWxseS5cbiAqIEBwcm9wZXJ0eSB7TG9jYWxNdXRhdGlvbkRlcGVuZGVuY3lbXX0gZGVwZW5kZW5jaWVzIC0gT3RoZXIgbG9jYWwgbXV0YXRpb25zIHRoYXQgbXVzdCByZXBsYXkgZmlyc3QuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gaWQgLSBMb2NhbCBsb2cgcmVjb3JkIGlkLlxuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuL2RldmljZS1pZGVudGl0eS5qc1wiKS5TeW5jTXV0YXRpb259IG11dGF0aW9uIC0gRGV2aWNlIG11dGF0aW9uIHBheWxvYWQuXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4vZGV2aWNlLWlkZW50aXR5LmpzXCIpLlNpZ25lZFN5bmNNdXRhdGlvbn0gW3NpZ25lZE11dGF0aW9uXSAtIE9yaWdpbmFsIHNpZ25lZCBtdXRhdGlvbiBlbnZlbG9wZSwgcmV0YWluZWQgZm9yIHBlZXItZm9yd2FyZGVkIG11dGF0aW9ucy5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBzZXF1ZW5jZSAtIE1vbm90b25pYyBsb2NhbCBzZXF1ZW5jZS5cbiAqIEBwcm9wZXJ0eSB7TG9jYWxNdXRhdGlvblN0YXR1c30gc3RhdHVzIC0gTG9jYWwgcmVwbGF5L2FwcGx5IHN0YXR1cy5cbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgaW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5Gcm9udGVuZE1vZGVsU3luY0pzb25WYWx1ZT59IFtzeW5jUmVzdWx0XSAtIEJhY2tlbmQgcmVwbGF5L3Jlc3VsdCBtZXRhZGF0YS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB1cGRhdGVkQXQgLSBJU08gdGltZXN0YW1wIHdoZW4gdGhlIHJlY29yZCB3YXMgbGFzdCBjaGFuZ2VkLlxuICovXG4vLyBAdHMtY2hlY2tcblxuaW1wb3J0IHN0YWJsZUpzb25TdHJpbmdpZnkgZnJvbSBcIi4vc3RhYmxlLWpzb24uanNcIlxuXG5jb25zdCBERUZBVUxUX1NUT1JBR0VfS0VZID0gXCJ2ZWxvY2lvdXMuc3luYy5sb2NhbE11dGF0aW9uTG9nXCJcbmNvbnN0IFBFTkRJTkdfU1RBVFVTX1ZBTFVFUyA9IC8qKiBAdHlwZSB7TG9jYWxNdXRhdGlvblN0YXR1c1tdfSAqLyAoW1wicGVuZGluZ1wiLCBcImFwcGxpZWQtbG9jYWxseVwiLCBcInBlZXItYXBwbGllZFwiXSlcbmNvbnN0IFBFTkRJTkdfU1RBVFVTRVMgPSBuZXcgU2V0KFBFTkRJTkdfU1RBVFVTX1ZBTFVFUylcbmNvbnN0IE1VVEFUSU9OX1NUQVRVU0VTID0gbmV3IFNldChbLi4uUEVORElOR19TVEFUVVNFUywgXCJjb25mbGljdFwiLCBcInJlamVjdGVkXCIsIFwic3luY2VkXCJdKVxuY29uc3QgVEVSTUlOQUxfU1RBVFVTRVMgPSBuZXcgU2V0KFtcInJlamVjdGVkXCIsIFwic3luY2VkXCJdKVxuLyoqIEB0eXBlIHtNYXA8c3RyaW5nLCBQcm9taXNlPHVua25vd24+Pn0gKi9cbmNvbnN0IFNUT1JBR0VfS0VZX0xPQ0tTID0gbmV3IE1hcCgpXG5cbi8qKiBDbGllbnQtc2lkZSBhcHBlbmQtb25seSBzeW5jIG11dGF0aW9uIGxvZyB3aXRoIHBsdWdnYWJsZSBwZXJzaXN0ZW50IHN0b3JhZ2UuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2NhbE11dGF0aW9uTG9nIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBsb2NhbCBtdXRhdGlvbiBsb2cuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gQXJndW1lbnRzLlxuICAgKiBAcGFyYW0geygpID0+IHN0cmluZ30gW2FyZ3MuaWRHZW5lcmF0b3JdIC0gUmVjb3JkIGlkIGdlbmVyYXRvci5cbiAgICogQHBhcmFtIHsoKSA9PiBEYXRlfSBbYXJncy5ub3ddIC0gQ2xvY2sgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7TG9jYWxNdXRhdGlvbkxvZ1N0b3JhZ2V9IGFyZ3Muc3RvcmFnZSAtIFBlcnNpc3RlbnQgc3RvcmFnZSBhZGFwdGVyLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3Muc3RvcmFnZUtleV0gLSBTdG9yYWdlIGtleS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHtpZEdlbmVyYXRvciA9IHJhbmRvbVJlY29yZElkLCBub3cgPSAoKSA9PiBuZXcgRGF0ZSgpLCBzdG9yYWdlLCBzdG9yYWdlS2V5ID0gREVGQVVMVF9TVE9SQUdFX0tFWX0pIHtcbiAgICBpZiAoIXZhbGlkU3RvcmFnZShzdG9yYWdlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTG9jYWxNdXRhdGlvbkxvZyByZXF1aXJlcyByb3cgc3RvcmFnZSB3aXRoIGFwcGVuZFJlY29yZC9kZWxldGVSZWNvcmRzL25leHRTZXF1ZW5jZS9yZWNvcmQvcmVjb3Jkcy91cGRhdGVSZWNvcmRcIilcbiAgICB9XG5cbiAgICB0aGlzLmlkR2VuZXJhdG9yID0gaWRHZW5lcmF0b3JcbiAgICB0aGlzLm5vdyA9IG5vd1xuICAgIHRoaXMuc3RvcmFnZSA9IHN0b3JhZ2VcbiAgICB0aGlzLnN0b3JhZ2VLZXkgPSBzdG9yYWdlS2V5XG4gIH1cblxuICAvKipcbiAgICogQXBwZW5kcyBhIHBlbmRpbmcgbXV0YXRpb24gcmVjb3JkLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIEFyZ3VtZW50cy5cbiAgICogQHBhcmFtIHtMb2NhbE11dGF0aW9uRGVwZW5kZW5jeVtdfSBbYXJncy5kZXBlbmRlbmNpZXNdIC0gTXV0YXRpb24gZGVwZW5kZW5jaWVzLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vZGV2aWNlLWlkZW50aXR5LmpzXCIpLlN5bmNNdXRhdGlvbn0gYXJncy5tdXRhdGlvbiAtIE11dGF0aW9uIHBheWxvYWQuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi9kZXZpY2UtaWRlbnRpdHkuanNcIikuU2lnbmVkU3luY011dGF0aW9ufSBbYXJncy5zaWduZWRNdXRhdGlvbl0gLSBPcmlnaW5hbCBzaWduZWQgbXV0YXRpb24gZW52ZWxvcGUsIHJldGFpbmVkIGZvciBwZWVyLWZvcndhcmRlZCBtdXRhdGlvbnMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPExvY2FsTXV0YXRpb25Mb2dSZWNvcmQ+fSAtIENyZWF0ZWQgbG9nIHJlY29yZC5cbiAgICovXG4gIGFzeW5jIGFwcGVuZCh7ZGVwZW5kZW5jaWVzID0gW10sIG11dGF0aW9uLCBzaWduZWRNdXRhdGlvbn0pIHtcbiAgICBpZiAoc2lnbmVkTXV0YXRpb24gIT09IHVuZGVmaW5lZCAmJiBzdGFibGVKc29uU3RyaW5naWZ5KHNpZ25lZE11dGF0aW9uLm11dGF0aW9uKSAhPT0gc3RhYmxlSnNvblN0cmluZ2lmeShtdXRhdGlvbikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlNpZ25lZCBtdXRhdGlvbiBwYXlsb2FkIGRvZXMgbm90IG1hdGNoIHRoZSBtdXRhdGlvblwiKVxuICAgIH1cblxuICAgIHJldHVybiBhd2FpdCB3aXRoU3RvcmFnZUtleUxvY2sodGhpcy5zdG9yYWdlS2V5LCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0aW1lc3RhbXAgPSB0aGlzLmN1cnJlbnRUaW1lc3RhbXAoKVxuICAgICAgY29uc3QgcmVjb3JkID0gbm9ybWFsaXplUmVjb3JkKHtcbiAgICAgICAgY3JlYXRlZEF0OiB0aW1lc3RhbXAsXG4gICAgICAgIGRlcGVuZGVuY2llcyxcbiAgICAgICAgaWQ6IHRoaXMuaWRHZW5lcmF0b3IoKSxcbiAgICAgICAgbXV0YXRpb24sXG4gICAgICAgIHNlcXVlbmNlOiBhd2FpdCB0aGlzLnN0b3JhZ2UubmV4dFNlcXVlbmNlKHRoaXMuc3RvcmFnZUtleSksXG4gICAgICAgIHNpZ25lZE11dGF0aW9uLFxuICAgICAgICBzdGF0dXM6IFwicGVuZGluZ1wiLFxuICAgICAgICB1cGRhdGVkQXQ6IHRpbWVzdGFtcFxuICAgICAgfSlcblxuICAgICAgYXdhaXQgdGhpcy5zdG9yYWdlLmFwcGVuZFJlY29yZCh0aGlzLnN0b3JhZ2VLZXksIGNsb25lUmVjb3JkKHJlY29yZCkpXG5cbiAgICAgIHJldHVybiBjbG9uZVJlY29yZChyZWNvcmQpXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFsbCByZWNvcmRzIG9yZGVyZWQgYnkgbG9jYWwgc2VxdWVuY2UuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPExvY2FsTXV0YXRpb25Mb2dSZWNvcmRbXT59IC0gTG9nIHJlY29yZHMuXG4gICAqL1xuICBhc3luYyByZWNvcmRzKCkge1xuICAgIHJldHVybiBub3JtYWxpemVSZWNvcmRMaXN0KGF3YWl0IHRoaXMuc3RvcmFnZS5yZWNvcmRzKHRoaXMuc3RvcmFnZUtleSkpXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyByZWNvcmRzIHRoYXQgc3RpbGwgbmVlZCBsb2NhbC9zZXJ2ZXIgcmVjb25jaWxpYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPExvY2FsTXV0YXRpb25Mb2dSZWNvcmRbXT59IC0gUGVuZGluZyByZWNvcmRzLlxuICAgKi9cbiAgYXN5bmMgcGVuZGluZ1JlY29yZHMoKSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZVJlY29yZExpc3QoYXdhaXQgdGhpcy5zdG9yYWdlLnJlY29yZHModGhpcy5zdG9yYWdlS2V5LCB7c3RhdHVzZXM6IFBFTkRJTkdfU1RBVFVTX1ZBTFVFU30pKVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgYSByZWNvcmQgc3RhdHVzLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIEFyZ3VtZW50cy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MuaWQgLSBSZWNvcmQgaWQuXG4gICAqIEBwYXJhbSB7TG9jYWxNdXRhdGlvblN0YXR1c30gYXJncy5zdGF0dXMgLSBOZXcgc3RhdHVzLlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24tdHlwZXMuanNcIikuRnJvbnRlbmRNb2RlbFN5bmNKc29uVmFsdWU+fSBbYXJncy5zeW5jUmVzdWx0XSAtIFJlc3VsdCBtZXRhZGF0YS5cbiAgICogQHJldHVybnMge1Byb21pc2U8TG9jYWxNdXRhdGlvbkxvZ1JlY29yZD59IC0gVXBkYXRlZCByZWNvcmQuXG4gICAqL1xuICBhc3luYyB1cGRhdGVTdGF0dXMoe2lkLCBzdGF0dXMsIHN5bmNSZXN1bHR9KSB7XG4gICAgaWYgKCFNVVRBVElPTl9TVEFUVVNFUy5oYXMoc3RhdHVzKSkgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGxvY2FsIG11dGF0aW9uIHN0YXR1cyAnJHtzdGF0dXN9J2ApXG5cbiAgICByZXR1cm4gYXdhaXQgd2l0aFN0b3JhZ2VLZXlMb2NrKHRoaXMuc3RvcmFnZUtleSwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmF3UmVjb3JkID0gYXdhaXQgdGhpcy5zdG9yYWdlLnJlY29yZCh0aGlzLnN0b3JhZ2VLZXksIGlkKVxuXG4gICAgICBpZiAoIXJhd1JlY29yZCkgdGhyb3cgbmV3IEVycm9yKGBObyBsb2NhbCBtdXRhdGlvbiBsb2cgcmVjb3JkICcke2lkfSdgKVxuXG4gICAgICBjb25zdCByZWNvcmQgPSBub3JtYWxpemVSZWNvcmQocmF3UmVjb3JkKVxuXG4gICAgICByZWNvcmQuc3RhdHVzID0gLyoqIEB0eXBlIHtMb2NhbE11dGF0aW9uU3RhdHVzfSAqLyAoc3RhdHVzKVxuICAgICAgaWYgKHN5bmNSZXN1bHQgIT09IHVuZGVmaW5lZCkgcmVjb3JkLnN5bmNSZXN1bHQgPSBjbG9uZUpzb25PYmplY3Qoc3luY1Jlc3VsdCwgXCJzeW5jUmVzdWx0XCIpXG4gICAgICByZWNvcmQudXBkYXRlZEF0ID0gdGhpcy5jdXJyZW50VGltZXN0YW1wKClcbiAgICAgIGF3YWl0IHRoaXMuc3RvcmFnZS51cGRhdGVSZWNvcmQodGhpcy5zdG9yYWdlS2V5LCBjbG9uZVJlY29yZChyZWNvcmQpKVxuXG4gICAgICByZXR1cm4gY2xvbmVSZWNvcmQocmVjb3JkKVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogUmVwbGFjZXMgdGhlIG11dGF0aW9uIHBheWxvYWQgb2YgYSBzdGlsbC1wZW5kaW5nIHJlY29yZC4gVXNlZCB3aGVuIGFuXG4gICAqIGFja25vd2xlZGdlZCBwcmVkZWNlc3NvciBzdXBwbGllcyB0aGUgYXV0aG9yaXRhdGl2ZSBiYXNlIGZvciBpdHMgc3VjY2Vzc29yLlxuICAgKiBAcGFyYW0ge3tpZDogc3RyaW5nLCBtdXRhdGlvbjogaW1wb3J0KFwiLi9kZXZpY2UtaWRlbnRpdHkuanNcIikuU3luY011dGF0aW9ufX0gYXJncyAtIFJlY29yZCBhbmQgcmVwbGFjZW1lbnQgbXV0YXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPExvY2FsTXV0YXRpb25Mb2dSZWNvcmQ+fSBVcGRhdGVkIHJlY29yZC5cbiAgICovXG4gIGFzeW5jIHVwZGF0ZU11dGF0aW9uKHtpZCwgbXV0YXRpb259KSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpdGhTdG9yYWdlS2V5TG9jayh0aGlzLnN0b3JhZ2VLZXksIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJhd1JlY29yZCA9IGF3YWl0IHRoaXMuc3RvcmFnZS5yZWNvcmQodGhpcy5zdG9yYWdlS2V5LCBpZClcblxuICAgICAgaWYgKCFyYXdSZWNvcmQpIHRocm93IG5ldyBFcnJvcihgTm8gbG9jYWwgbXV0YXRpb24gbG9nIHJlY29yZCAnJHtpZH0nYClcblxuICAgICAgY29uc3QgcmVjb3JkID0gbm9ybWFsaXplUmVjb3JkKHJhd1JlY29yZClcblxuICAgICAgaWYgKCFQRU5ESU5HX1NUQVRVU0VTLmhhcyhyZWNvcmQuc3RhdHVzKSkgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgdXBkYXRlIG11dGF0aW9uIGZvciAke3JlY29yZC5zdGF0dXN9IGxvY2FsIG11dGF0aW9uICcke2lkfSdgKVxuXG4gICAgICByZWNvcmQubXV0YXRpb24gPSBub3JtYWxpemVNdXRhdGlvbihtdXRhdGlvbilcbiAgICAgIHJlY29yZC51cGRhdGVkQXQgPSB0aGlzLmN1cnJlbnRUaW1lc3RhbXAoKVxuICAgICAgYXdhaXQgdGhpcy5zdG9yYWdlLnVwZGF0ZVJlY29yZCh0aGlzLnN0b3JhZ2VLZXksIGNsb25lUmVjb3JkKHJlY29yZCkpXG5cbiAgICAgIHJldHVybiBjbG9uZVJlY29yZChyZWNvcmQpXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBQcnVuZXMgdGVybWluYWwgcmVjb3JkcyB0aGF0IGFyZSBubyBsb25nZXIgbmVlZGVkIGZvciByZXBsYXkgZGVwZW5kZW5jaWVzLlxuICAgKiBAcGFyYW0ge29iamVjdH0gW2FyZ3NdIC0gQ29tcGFjdGlvbiBvcHRpb25zLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2FyZ3MubWF4VGVybWluYWxSZWNvcmRzXSAtIE1heGltdW0gdGVybWluYWwgcmVjb3JkcyB0byByZXRhaW4uXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbYXJncy50ZXJtaW5hbFJldGVudGlvbk1zXSAtIE1pbmltdW0gYWdlIGJlZm9yZSBwcnVuaW5nIHRlcm1pbmFsIHJlY29yZHMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHtkZWxldGVkUmVjb3JkSWRzOiBzdHJpbmdbXX0+fSAtIENvbXBhY3Rpb24gcmVzdWx0LlxuICAgKi9cbiAgYXN5bmMgY29tcGFjdCh7bWF4VGVybWluYWxSZWNvcmRzLCB0ZXJtaW5hbFJldGVudGlvbk1zfSA9IHt9KSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpdGhTdG9yYWdlS2V5TG9jayh0aGlzLnN0b3JhZ2VLZXksIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJlY29yZHMgPSBhd2FpdCB0aGlzLnJlY29yZHMoKVxuICAgICAgY29uc3QgcHJvdGVjdGVkQ2xpZW50TXV0YXRpb25JZHMgPSBuZXcgU2V0KFxuICAgICAgICByZWNvcmRzXG4gICAgICAgICAgLmZpbHRlcigocmVjb3JkKSA9PiBQRU5ESU5HX1NUQVRVU0VTLmhhcyhyZWNvcmQuc3RhdHVzKSB8fCByZWNvcmQuc3RhdHVzID09PSBcImNvbmZsaWN0XCIpXG4gICAgICAgICAgLmZsYXRNYXAoKHJlY29yZCkgPT4gcmVjb3JkLmRlcGVuZGVuY2llcy5tYXAoKGRlcGVuZGVuY3kpID0+IGRlcGVuZGVuY3kuY2xpZW50TXV0YXRpb25JZCkpXG4gICAgICApXG4gICAgICBjb25zdCB0ZXJtaW5hbFJlY29yZHMgPSByZWNvcmRzXG4gICAgICAgIC5maWx0ZXIoKHJlY29yZCkgPT4gVEVSTUlOQUxfU1RBVFVTRVMuaGFzKHJlY29yZC5zdGF0dXMpKVxuICAgICAgICAuZmlsdGVyKChyZWNvcmQpID0+ICFwcm90ZWN0ZWRDbGllbnRNdXRhdGlvbklkcy5oYXMocmVjb3JkLm11dGF0aW9uLmNsaWVudE11dGF0aW9uSWQpKVxuICAgICAgICAuc29ydChjb21wYXJlUmVjb3Jkc05ld2VzdEZpcnN0KVxuICAgICAgY29uc3QgZGVsZXRlSWRzID0gbmV3IFNldCgpXG5cbiAgICAgIGlmICh0eXBlb2YgbWF4VGVybWluYWxSZWNvcmRzID09PSBcIm51bWJlclwiICYmIG1heFRlcm1pbmFsUmVjb3JkcyA+PSAwKSB7XG4gICAgICAgIGZvciAoY29uc3QgcmVjb3JkIG9mIHRlcm1pbmFsUmVjb3Jkcy5zbGljZShtYXhUZXJtaW5hbFJlY29yZHMpKSBkZWxldGVJZHMuYWRkKHJlY29yZC5pZClcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB0ZXJtaW5hbFJldGVudGlvbk1zID09PSBcIm51bWJlclwiICYmIHRlcm1pbmFsUmV0ZW50aW9uTXMgPj0gMCkge1xuICAgICAgICBjb25zdCBjdXRvZmYgPSB0aGlzLm5vdygpLmdldFRpbWUoKSAtIHRlcm1pbmFsUmV0ZW50aW9uTXNcblxuICAgICAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiB0ZXJtaW5hbFJlY29yZHMpIHtcbiAgICAgICAgICBpZiAobmV3IERhdGUocmVjb3JkLnVwZGF0ZWRBdCkuZ2V0VGltZSgpIDwgY3V0b2ZmKSBkZWxldGVJZHMuYWRkKHJlY29yZC5pZClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkZWxldGVkUmVjb3JkSWRzID0gQXJyYXkuZnJvbShkZWxldGVJZHMpXG5cbiAgICAgIGlmIChkZWxldGVkUmVjb3JkSWRzLmxlbmd0aCA+IDApIGF3YWl0IHRoaXMuc3RvcmFnZS5kZWxldGVSZWNvcmRzKHRoaXMuc3RvcmFnZUtleSwgZGVsZXRlZFJlY29yZElkcylcblxuICAgICAgcmV0dXJuIHtkZWxldGVkUmVjb3JkSWRzfVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY3VycmVudCBsb2cgdGltZXN0YW1wLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIEN1cnJlbnQgSVNPIHRpbWVzdGFtcC5cbiAgICovXG4gIGN1cnJlbnRUaW1lc3RhbXAoKSB7XG4gICAgY29uc3QgZGF0ZSA9IHRoaXMubm93KClcblxuICAgIGlmICghKGRhdGUgaW5zdGFuY2VvZiBEYXRlKSB8fCBOdW1iZXIuaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB0aHJvdyBuZXcgRXJyb3IoXCJMb2NhbE11dGF0aW9uTG9nIG5vdygpIG11c3QgcmV0dXJuIGEgdmFsaWQgRGF0ZVwiKVxuXG4gICAgcmV0dXJuIGRhdGUudG9JU09TdHJpbmcoKVxuICB9XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYSBzdG9yYWdlIGFkYXB0ZXIgaGFzIGFsbCByZXF1aXJlZCByb3ctc3RvcmUgbWV0aG9kcy5cbiAqIEBwYXJhbSB7dW5rbm93bn0gc3RvcmFnZSAtIFN0b3JhZ2UgYWRhcHRlciBjYW5kaWRhdGUuXG4gKiBAcmV0dXJucyB7c3RvcmFnZSBpcyBMb2NhbE11dGF0aW9uTG9nU3RvcmFnZX0gLSBXaGV0aGVyIHN0b3JhZ2UgaXMgdmFsaWQuXG4gKi9cbmZ1bmN0aW9uIHZhbGlkU3RvcmFnZShzdG9yYWdlKSB7XG4gIGlmICghc3RvcmFnZSB8fCB0eXBlb2Ygc3RvcmFnZSAhPT0gXCJvYmplY3RcIikgcmV0dXJuIGZhbHNlXG5cbiAgY29uc3Qgc3RvcmFnZU9iamVjdCA9IC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgdW5rbm93bj59ICovIChzdG9yYWdlKVxuXG4gIHJldHVybiB0eXBlb2Ygc3RvcmFnZU9iamVjdC5hcHBlbmRSZWNvcmQgPT09IFwiZnVuY3Rpb25cIlxuICAgICYmIHR5cGVvZiBzdG9yYWdlT2JqZWN0LmRlbGV0ZVJlY29yZHMgPT09IFwiZnVuY3Rpb25cIlxuICAgICYmIHR5cGVvZiBzdG9yYWdlT2JqZWN0Lm5leHRTZXF1ZW5jZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgJiYgdHlwZW9mIHN0b3JhZ2VPYmplY3QucmVjb3JkID09PSBcImZ1bmN0aW9uXCJcbiAgICAmJiB0eXBlb2Ygc3RvcmFnZU9iamVjdC5yZWNvcmRzID09PSBcImZ1bmN0aW9uXCJcbiAgICAmJiB0eXBlb2Ygc3RvcmFnZU9iamVjdC51cGRhdGVSZWNvcmQgPT09IFwiZnVuY3Rpb25cIlxufVxuXG4vKipcbiAqIFNvcnRzIHJlY29yZHMgYnkgbmV3ZXN0IHVwZGF0ZS9zZXF1ZW5jZSBmaXJzdC5cbiAqIEBwYXJhbSB7TG9jYWxNdXRhdGlvbkxvZ1JlY29yZH0gbGVmdCAtIExlZnQgcmVjb3JkLlxuICogQHBhcmFtIHtMb2NhbE11dGF0aW9uTG9nUmVjb3JkfSByaWdodCAtIFJpZ2h0IHJlY29yZC5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IC0gU29ydCByZXN1bHQuXG4gKi9cbmZ1bmN0aW9uIGNvbXBhcmVSZWNvcmRzTmV3ZXN0Rmlyc3QobGVmdCwgcmlnaHQpIHtcbiAgY29uc3QgdXBkYXRlZEF0Q29tcGFyaXNvbiA9IHJpZ2h0LnVwZGF0ZWRBdC5sb2NhbGVDb21wYXJlKGxlZnQudXBkYXRlZEF0KVxuXG4gIGlmICh1cGRhdGVkQXRDb21wYXJpc29uICE9PSAwKSByZXR1cm4gdXBkYXRlZEF0Q29tcGFyaXNvblxuXG4gIHJldHVybiByaWdodC5zZXF1ZW5jZSAtIGxlZnQuc2VxdWVuY2Vcbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIGFuZCBzb3J0cyBhIGxpc3Qgb2YgcmVjb3Jkcy5cbiAqIEBwYXJhbSB7dW5rbm93bn0gcmVjb3JkcyAtIFJhdyByZWNvcmRzLlxuICogQHJldHVybnMge0xvY2FsTXV0YXRpb25Mb2dSZWNvcmRbXX0gLSBOb3JtYWxpemVkIHJlY29yZHMuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVJlY29yZExpc3QocmVjb3Jkcykge1xuICBpZiAoIUFycmF5LmlzQXJyYXkocmVjb3JkcykpIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIGxvY2FsIG11dGF0aW9uIGxvZyBzdG9yYWdlIHJlY29yZHMgYXJyYXlcIilcblxuICByZXR1cm4gcmVjb3Jkc1xuICAgIC5tYXAobm9ybWFsaXplUmVjb3JkKVxuICAgIC5zb3J0KChsZWZ0LCByaWdodCkgPT4gbGVmdC5zZXF1ZW5jZSAtIHJpZ2h0LnNlcXVlbmNlKVxuICAgIC5tYXAoKHJlY29yZCkgPT4gY2xvbmVSZWNvcmQocmVjb3JkKSlcbn1cblxuLyoqXG4gKiBSdW5zIGEgY2FsbGJhY2sgYWZ0ZXIgZWFybGllciB3cml0ZXMgZm9yIHRoZSBzYW1lIHN0b3JhZ2Uga2V5IGhhdmUgY29tcGxldGVkLlxuICogQHRlbXBsYXRlIFRcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdG9yYWdlS2V5IC0gU3RvcmFnZSBrZXkgdG8gc2VyaWFsaXplLlxuICogQHBhcmFtIHsoKSA9PiBQcm9taXNlPFQ+fSBjYWxsYmFjayAtIENhbGxiYWNrIHRvIHJ1biB1bmRlciB0aGUgc3RvcmFnZS1rZXkgbG9jay5cbiAqIEByZXR1cm5zIHtQcm9taXNlPFQ+fSAtIENhbGxiYWNrIHJlc3VsdC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gd2l0aFN0b3JhZ2VLZXlMb2NrKHN0b3JhZ2VLZXksIGNhbGxiYWNrKSB7XG4gIGNvbnN0IHByZXZpb3VzID0gU1RPUkFHRV9LRVlfTE9DS1MuZ2V0KHN0b3JhZ2VLZXkpIHx8IFByb21pc2UucmVzb2x2ZSgpXG4gIGxldCByZWxlYXNlID0gKCkgPT4ge31cbiAgY29uc3QgY3VycmVudCA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7IHJlbGVhc2UgPSAoKSA9PiByZXNvbHZlKHVuZGVmaW5lZCkgfSlcbiAgY29uc3QgY2hhaW5lZCA9IHByZXZpb3VzLmNhdGNoKChfZXJyb3IpID0+IHt9KS50aGVuKCgpID0+IGN1cnJlbnQpXG5cbiAgU1RPUkFHRV9LRVlfTE9DS1Muc2V0KHN0b3JhZ2VLZXksIGNoYWluZWQpXG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBwcmV2aW91cy5jYXRjaCgoX2Vycm9yKSA9PiB7fSlcblxuICAgIHJldHVybiBhd2FpdCBjYWxsYmFjaygpXG4gIH0gZmluYWxseSB7XG4gICAgcmVsZWFzZSgpXG4gICAgaWYgKFNUT1JBR0VfS0VZX0xPQ0tTLmdldChzdG9yYWdlS2V5KSA9PT0gY2hhaW5lZCkgU1RPUkFHRV9LRVlfTE9DS1MuZGVsZXRlKHN0b3JhZ2VLZXkpXG4gIH1cbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIGEgcGVyc2lzdGVkIGxvZyByZWNvcmQuXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gUmF3IHJlY29yZC5cbiAqIEByZXR1cm5zIHtMb2NhbE11dGF0aW9uTG9nUmVjb3JkfSAtIE5vcm1hbGl6ZWQgcmVjb3JkLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVSZWNvcmQodmFsdWUpIHtcbiAgaWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIGxvY2FsIG11dGF0aW9uIGxvZyByZWNvcmQgb2JqZWN0XCIpXG5cbiAgY29uc3QgcmVjb3JkID0gLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0gKi8gKHZhbHVlKVxuICBjb25zdCBzdGF0dXMgPSByZXF1aXJlZFN0cmluZyhyZWNvcmQuc3RhdHVzLCBcInN0YXR1c1wiKVxuXG4gIGlmICghTVVUQVRJT05fU1RBVFVTRVMuaGFzKHN0YXR1cykpIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBsb2NhbCBtdXRhdGlvbiBzdGF0dXMgJyR7c3RhdHVzfSdgKVxuXG4gIGNvbnN0IGJhc2VSZWNvcmQgPSB7XG4gICAgY3JlYXRlZEF0OiByZXF1aXJlZElzb1RpbWVzdGFtcChyZWNvcmQuY3JlYXRlZEF0LCBcImNyZWF0ZWRBdFwiKSxcbiAgICBkZXBlbmRlbmNpZXM6IG5vcm1hbGl6ZURlcGVuZGVuY2llcyhyZWNvcmQuZGVwZW5kZW5jaWVzKSxcbiAgICBpZDogcmVxdWlyZWRTdHJpbmcocmVjb3JkLmlkLCBcImlkXCIpLFxuICAgIG11dGF0aW9uOiBub3JtYWxpemVNdXRhdGlvbihyZWNvcmQubXV0YXRpb24pLFxuICAgIHNlcXVlbmNlOiByZXF1aXJlZFBvc2l0aXZlSW50ZWdlcihyZWNvcmQuc2VxdWVuY2UsIFwic2VxdWVuY2VcIiksXG4gICAgc3RhdHVzOiAvKiogQHR5cGUge0xvY2FsTXV0YXRpb25TdGF0dXN9ICovIChzdGF0dXMpLFxuICAgIHVwZGF0ZWRBdDogcmVxdWlyZWRJc29UaW1lc3RhbXAocmVjb3JkLnVwZGF0ZWRBdCwgXCJ1cGRhdGVkQXRcIilcbiAgfVxuXG4gIGlmIChyZWNvcmQuc2lnbmVkTXV0YXRpb24gPT09IHVuZGVmaW5lZCAmJiByZWNvcmQuc3luY1Jlc3VsdCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gYmFzZVJlY29yZFxuXG4gIC8qKiBAdHlwZSB7TG9jYWxNdXRhdGlvbkxvZ1JlY29yZH0gKi9cbiAgY29uc3Qgbm9ybWFsaXplZFJlY29yZCA9IHsuLi5iYXNlUmVjb3JkfVxuXG4gIGlmIChyZWNvcmQuc2lnbmVkTXV0YXRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgIG5vcm1hbGl6ZWRSZWNvcmQuc2lnbmVkTXV0YXRpb24gPSAvKiogQHR5cGUge2ltcG9ydChcIi4vZGV2aWNlLWlkZW50aXR5LmpzXCIpLlNpZ25lZFN5bmNNdXRhdGlvbn0gKi8gKGNsb25lSnNvbk9iamVjdChyZWNvcmQuc2lnbmVkTXV0YXRpb24sIFwic2lnbmVkTXV0YXRpb25cIikpXG4gIH1cbiAgaWYgKHJlY29yZC5zeW5jUmVzdWx0ICE9PSB1bmRlZmluZWQpIG5vcm1hbGl6ZWRSZWNvcmQuc3luY1Jlc3VsdCA9IGNsb25lSnNvbk9iamVjdChyZWNvcmQuc3luY1Jlc3VsdCwgXCJzeW5jUmVzdWx0XCIpXG5cbiAgcmV0dXJuIG5vcm1hbGl6ZWRSZWNvcmRcbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIGRlcGVuZGVuY3kgbWV0YWRhdGEgZW50cmllcy5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBSYXcgZGVwZW5kZW5jaWVzLlxuICogQHJldHVybnMge0xvY2FsTXV0YXRpb25EZXBlbmRlbmN5W119IC0gTm9ybWFsaXplZCBkZXBlbmRlbmNpZXMuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZURlcGVuZGVuY2llcyh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIFtdXG4gIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIGxvY2FsIG11dGF0aW9uIGRlcGVuZGVuY2llcyBhcnJheVwiKVxuXG4gIHJldHVybiB2YWx1ZS5tYXAoKGRlcGVuZGVuY3kpID0+IHtcbiAgICBpZiAoIWRlcGVuZGVuY3kgfHwgdHlwZW9mIGRlcGVuZGVuY3kgIT09IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShkZXBlbmRlbmN5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgbG9jYWwgbXV0YXRpb24gZGVwZW5kZW5jeSBvYmplY3RcIilcbiAgICB9XG5cbiAgICBjb25zdCBkZXBlbmRlbmN5T2JqZWN0ID0gLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0gKi8gKGRlcGVuZGVuY3kpXG5cbiAgICByZXR1cm4ge1xuICAgICAgY2xpZW50TXV0YXRpb25JZDogcmVxdWlyZWRTdHJpbmcoZGVwZW5kZW5jeU9iamVjdC5jbGllbnRNdXRhdGlvbklkLCBcImRlcGVuZGVuY3kgY2xpZW50TXV0YXRpb25JZFwiKSxcbiAgICAgIG1vZGVsOiByZXF1aXJlZFN0cmluZyhkZXBlbmRlbmN5T2JqZWN0Lm1vZGVsLCBcImRlcGVuZGVuY3kgbW9kZWxcIilcbiAgICB9XG4gIH0pXG59XG5cbi8qKlxuICogTm9ybWFsaXplcyBhIHN5bmMgbXV0YXRpb24gcGF5bG9hZC5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBSYXcgbXV0YXRpb24uXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi9kZXZpY2UtaWRlbnRpdHkuanNcIikuU3luY011dGF0aW9ufSAtIE5vcm1hbGl6ZWQgbXV0YXRpb24uXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZU11dGF0aW9uKHZhbHVlKSB7XG4gIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpKSB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBsb2NhbCBzeW5jIG11dGF0aW9uIG9iamVjdFwiKVxuXG4gIGNvbnN0IG11dGF0aW9uID0gLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0gKi8gKHZhbHVlKVxuICBjb25zdCBub3JtYWxpemVkID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuL2RldmljZS1pZGVudGl0eS5qc1wiKS5TeW5jTXV0YXRpb259ICovICh7XG4gICAgYWN0b3JEZXZpY2VJZDogcmVxdWlyZWRTdHJpbmcobXV0YXRpb24uYWN0b3JEZXZpY2VJZCwgXCJhY3RvckRldmljZUlkXCIpLFxuICAgIGFjdG9yVXNlcklkOiByZXF1aXJlZFN0cmluZyhtdXRhdGlvbi5hY3RvclVzZXJJZCwgXCJhY3RvclVzZXJJZFwiKSxcbiAgICBjbGllbnRNdXRhdGlvbklkOiByZXF1aXJlZFN0cmluZyhtdXRhdGlvbi5jbGllbnRNdXRhdGlvbklkLCBcImNsaWVudE11dGF0aW9uSWRcIiksXG4gICAgbW9kZWw6IHJlcXVpcmVkU3RyaW5nKG11dGF0aW9uLm1vZGVsLCBcIm1vZGVsXCIpLFxuICAgIG9jY3VycmVkQXQ6IHJlcXVpcmVkSXNvVGltZXN0YW1wKG11dGF0aW9uLm9jY3VycmVkQXQsIFwib2NjdXJyZWRBdFwiKSxcbiAgICBvZmZsaW5lR3JhbnRJZDogcmVxdWlyZWRTdHJpbmcobXV0YXRpb24ub2ZmbGluZUdyYW50SWQsIFwib2ZmbGluZUdyYW50SWRcIiksXG4gICAgb3BlcmF0aW9uOiByZXF1aXJlZFN0cmluZyhtdXRhdGlvbi5vcGVyYXRpb24sIFwib3BlcmF0aW9uXCIpLFxuICAgIHBvbGljeUhhc2g6IHJlcXVpcmVkU3RyaW5nKG11dGF0aW9uLnBvbGljeUhhc2gsIFwicG9saWN5SGFzaFwiKVxuICB9KVxuXG4gIGlmIChtdXRhdGlvbi5hdHRyaWJ1dGVzICE9PSB1bmRlZmluZWQpIG5vcm1hbGl6ZWQuYXR0cmlidXRlcyA9IGNsb25lSnNvbk9iamVjdChtdXRhdGlvbi5hdHRyaWJ1dGVzLCBcImF0dHJpYnV0ZXNcIilcbiAgaWYgKG11dGF0aW9uLmJhc2VWZXJzaW9uICE9PSB1bmRlZmluZWQpIG5vcm1hbGl6ZWQuYmFzZVZlcnNpb24gPSBjbG9uZUJhc2VWZXJzaW9uKG11dGF0aW9uLmJhc2VWZXJzaW9uKVxuICBpZiAobXV0YXRpb24uY29tbWFuZCAhPT0gdW5kZWZpbmVkKSBub3JtYWxpemVkLmNvbW1hbmQgPSByZXF1aXJlZFN0cmluZyhtdXRhdGlvbi5jb21tYW5kLCBcImNvbW1hbmRcIilcbiAgaWYgKG11dGF0aW9uLnBheWxvYWQgIT09IHVuZGVmaW5lZCkgbm9ybWFsaXplZC5wYXlsb2FkID0gY2xvbmVKc29uT2JqZWN0KG11dGF0aW9uLnBheWxvYWQsIFwicGF5bG9hZFwiKVxuXG4gIHJldHVybiBub3JtYWxpemVkXG59XG5cbi8qKlxuICogUmVxdWlyZXMgYSBub24tZW1wdHkgc3RyaW5nIHZhbHVlLlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIFJhdyB2YWx1ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBsYWJlbCAtIEZpZWxkIGxhYmVsLlxuICogQHJldHVybnMge3N0cmluZ30gLSBSZXF1aXJlZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIHJlcXVpcmVkU3RyaW5nKHZhbHVlLCBsYWJlbCkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcInN0cmluZ1wiIHx8IHZhbHVlLmxlbmd0aCA8IDEpIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgbG9jYWwgbXV0YXRpb24gJHtsYWJlbH1gKVxuXG4gIHJldHVybiB2YWx1ZVxufVxuXG4vKipcbiAqIFJlcXVpcmVzIGFuIElTTyB0aW1lc3RhbXAgc3RyaW5nLlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIFJhdyB2YWx1ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBsYWJlbCAtIEZpZWxkIGxhYmVsLlxuICogQHJldHVybnMge3N0cmluZ30gLSBJU08gdGltZXN0YW1wLlxuICovXG5mdW5jdGlvbiByZXF1aXJlZElzb1RpbWVzdGFtcCh2YWx1ZSwgbGFiZWwpIHtcbiAgY29uc3Qgc3RyaW5nVmFsdWUgPSByZXF1aXJlZFN0cmluZyh2YWx1ZSwgbGFiZWwpXG4gIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShzdHJpbmdWYWx1ZSlcblxuICBpZiAoTnVtYmVyLmlzTmFOKGRhdGUuZ2V0VGltZSgpKSB8fCBkYXRlLnRvSVNPU3RyaW5nKCkgIT09IHN0cmluZ1ZhbHVlKSB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGxvY2FsIG11dGF0aW9uICR7bGFiZWx9IElTTyB0aW1lc3RhbXBgKVxuXG4gIHJldHVybiBzdHJpbmdWYWx1ZVxufVxuXG4vKipcbiAqIFJlcXVpcmVzIGEgcG9zaXRpdmUgaW50ZWdlciB2YWx1ZS5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBSYXcgdmFsdWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFiZWwgLSBGaWVsZCBsYWJlbC5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IC0gUG9zaXRpdmUgaW50ZWdlci5cbiAqL1xuZnVuY3Rpb24gcmVxdWlyZWRQb3NpdGl2ZUludGVnZXIodmFsdWUsIGxhYmVsKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwibnVtYmVyXCIgfHwgIU51bWJlci5pc0ludGVnZXIodmFsdWUpIHx8IHZhbHVlIDwgMSkgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBsb2NhbCBtdXRhdGlvbiAke2xhYmVsfSBwb3NpdGl2ZSBpbnRlZ2VyYClcblxuICByZXR1cm4gdmFsdWVcbn1cblxuLyoqXG4gKiBDbG9uZXMgYSBzdXBwb3J0ZWQgYmFzZS12ZXJzaW9uIHZhbHVlLlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIFJhdyBiYXNlIHZlcnNpb24uXG4gKiBAcmV0dXJucyB7c3RyaW5nIHwgbnVtYmVyIHwgbnVsbH0gLSBOb3JtYWxpemVkIGJhc2UgdmVyc2lvbi5cbiAqL1xuZnVuY3Rpb24gY2xvbmVCYXNlVmVyc2lvbih2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09IG51bGwgfHwgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHZhbHVlXG5cbiAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgbG9jYWwgbXV0YXRpb24gYmFzZVZlcnNpb24gc3RyaW5nLCBudW1iZXIsIG9yIG51bGxcIilcbn1cblxuLyoqXG4gKiBDbG9uZXMgYSBKU09OLWNvbXBhdGlibGUgdmFsdWUuXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gUmF3IEpTT04gdmFsdWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFiZWwgLSBGaWVsZCBsYWJlbC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLXR5cGVzLmpzXCIpLkZyb250ZW5kTW9kZWxTeW5jSnNvblZhbHVlfSAtIENsb25lZCBKU09OIHZhbHVlLlxuICovXG5mdW5jdGlvbiBjbG9uZUpzb25WYWx1ZSh2YWx1ZSwgbGFiZWwpIHtcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgSlNPTi1jb21wYXRpYmxlIGxvY2FsIG11dGF0aW9uICR7bGFiZWx9YClcblxuICByZXR1cm4gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLXR5cGVzLmpzXCIpLkZyb250ZW5kTW9kZWxTeW5jSnNvblZhbHVlfSAqLyAoSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh2YWx1ZSkpKVxufVxuXG4vKipcbiAqIENsb25lcyBhIEpTT04tY29tcGF0aWJsZSBvYmplY3QuXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gUmF3IEpTT04gb2JqZWN0LlxuICogQHBhcmFtIHtzdHJpbmd9IGxhYmVsIC0gRmllbGQgbGFiZWwuXG4gKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgaW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5Gcm9udGVuZE1vZGVsU3luY0pzb25WYWx1ZT59IC0gQ2xvbmVkIEpTT04gb2JqZWN0LlxuICovXG5mdW5jdGlvbiBjbG9uZUpzb25PYmplY3QodmFsdWUsIGxhYmVsKSB7XG4gIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpKSB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGxvY2FsIG11dGF0aW9uICR7bGFiZWx9IG9iamVjdGApXG5cbiAgcmV0dXJuIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgaW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5Gcm9udGVuZE1vZGVsU3luY0pzb25WYWx1ZT59ICovIChjbG9uZUpzb25WYWx1ZSh2YWx1ZSwgbGFiZWwpKVxufVxuXG4vKipcbiAqIENsb25lcyBhIGxvY2FsIG11dGF0aW9uIGxvZyByZWNvcmQuXG4gKiBAcGFyYW0ge0xvY2FsTXV0YXRpb25Mb2dSZWNvcmR9IHJlY29yZCAtIFJlY29yZCB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtMb2NhbE11dGF0aW9uTG9nUmVjb3JkfSAtIENsb25lZCByZWNvcmQuXG4gKi9cbmZ1bmN0aW9uIGNsb25lUmVjb3JkKHJlY29yZCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtMb2NhbE11dGF0aW9uTG9nUmVjb3JkfSAqLyAoSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShyZWNvcmQpKSlcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgYSByYW5kb20gbG9jYWwgbXV0YXRpb24gcmVjb3JkIGlkLlxuICogQHJldHVybnMge3N0cmluZ30gLSBSYW5kb20gcmVjb3JkIGlkLlxuICovXG5mdW5jdGlvbiByYW5kb21SZWNvcmRJZCgpIHtcbiAgY29uc3QgY3J5cHRvUHJvdmlkZXIgPSBnbG9iYWxUaGlzLmNyeXB0b1xuXG4gIGlmIChjcnlwdG9Qcm92aWRlciAmJiB0eXBlb2YgY3J5cHRvUHJvdmlkZXIucmFuZG9tVVVJRCA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gY3J5cHRvUHJvdmlkZXIucmFuZG9tVVVJRCgpXG5cbiAgcmV0dXJuIGBsb2NhbC1tdXRhdGlvbi0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygxNikuc2xpY2UoMil9YFxufVxuIl19
458
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtbXV0YXRpb24tbG9nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3N5bmMvbG9jYWwtbXV0YXRpb24tbG9nLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFDSDs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0g7Ozs7O0dBS0c7QUFDSDs7O0tBR0s7QUFDTDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxZQUFZO0FBRVosT0FBTyxFQUFDLHNDQUFzQyxFQUFFLG9DQUFvQyxFQUFDLE1BQU0sK0NBQStDLENBQUE7QUFDMUksT0FBTyxtQkFBbUIsTUFBTSxrQkFBa0IsQ0FBQTtBQUVsRCxNQUFNLG1CQUFtQixHQUFHLGlDQUFpQyxDQUFBO0FBQzdELE1BQU0scUJBQXFCLEdBQUcsb0NBQW9DLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFBO0FBQ25ILE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQTtBQUN2RCxNQUFNLGlCQUFpQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUE7QUFDMUYsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFBO0FBQ3pELDRDQUE0QztBQUM1QyxNQUFNLGlCQUFpQixHQUFHLElBQUksR0FBRyxFQUFFLENBQUE7QUFFbkMsbUZBQW1GO0FBQ25GLE1BQU0sQ0FBQyxPQUFPLE9BQU8sZ0JBQWdCO0lBQ25DOzs7Ozs7O09BT0c7SUFDSCxZQUFZLEVBQUMsV0FBVyxHQUFHLGNBQWMsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsVUFBVSxHQUFHLG1CQUFtQixFQUFD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ZXNDb250ZW50IjpbIi8qKlxuICogTG9jYWwgbXV0YXRpb24gbG9nIHJlY29yZCBxdWVyeSBvcHRpb25zLlxuICogQHR5cGVkZWYge29iamVjdH0gTG9jYWxNdXRhdGlvbkxvZ1JlY29yZHNPcHRpb25zXG4gKiBAcHJvcGVydHkge0xvY2FsTXV0YXRpb25TdGF0dXNbXX0gW3N0YXR1c2VzXSAtIE9wdGlvbmFsIHN0YXR1cyBmaWx0ZXIuXG4gKi9cbi8qKlxuICogTG9jYWwgbXV0YXRpb24gbG9nIHJvdy1vcmllbnRlZCBzdG9yYWdlIGFkYXB0ZXIuXG4gKlxuICogSW1wbGVtZW50YXRpb25zIHNob3VsZCBzdG9yZSBlYWNoIG11dGF0aW9uIGxvZyByZWNvcmQgYXMgaXRzIG93biByb3cvZW50cnkuXG4gKiBOYXRpdmUgYXBwcyBzaG91bGQgYmFjayB0aGlzIHdpdGggU1FMaXRlIGFuZCBpbmRleGVzIG9uIHN0b3JhZ2Uga2V5LCBzdGF0dXMsXG4gKiBhbmQgc2VxdWVuY2UuIEF2b2lkIHN0b3JpbmcgdGhlIHdob2xlIGxvZyBhcyBvbmUgSlNPTiBibG9iLlxuICogQHR5cGVkZWYge29iamVjdH0gTG9jYWxNdXRhdGlvbkxvZ1N0b3JhZ2VcbiAqIEBwcm9wZXJ0eSB7KHN0b3JhZ2VLZXk6IHN0cmluZywgcmVjb3JkOiBMb2NhbE11dGF0aW9uTG9nUmVjb3JkKSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZH0gYXBwZW5kUmVjb3JkIC0gQXBwZW5kcyBvbmUgbG9nIHJlY29yZC5cbiAqIEBwcm9wZXJ0eSB7KHN0b3JhZ2VLZXk6IHN0cmluZywgaWRzOiBzdHJpbmdbXSkgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWR9IGRlbGV0ZVJlY29yZHMgLSBEZWxldGVzIGxvZyByZWNvcmRzIGJ5IGlkLlxuICogQHByb3BlcnR5IHsoc3RvcmFnZUtleTogc3RyaW5nKSA9PiBQcm9taXNlPG51bWJlcj4gfCBudW1iZXJ9IG5leHRTZXF1ZW5jZSAtIFJldHVybnMgdGhlIG5leHQgbG9jYWwgc2VxdWVuY2UgbnVtYmVyLlxuICogQHByb3BlcnR5IHsoc3RvcmFnZUtleTogc3RyaW5nLCBpZDogc3RyaW5nKSA9PiBQcm9taXNlPExvY2FsTXV0YXRpb25Mb2dSZWNvcmQgfCBudWxsIHwgdW5kZWZpbmVkPiB8IExvY2FsTXV0YXRpb25Mb2dSZWNvcmQgfCBudWxsIHwgdW5kZWZpbmVkfSByZWNvcmQgLSBSZWFkcyBvbmUgbG9nIHJlY29yZCBieSBpZC5cbiAqIEBwcm9wZXJ0eSB7KHN0b3JhZ2VLZXk6IHN0cmluZywgb3B0aW9ucz86IExvY2FsTXV0YXRpb25Mb2dSZWNvcmRzT3B0aW9ucykgPT4gUHJvbWlzZTxMb2NhbE11dGF0aW9uTG9nUmVjb3JkW10+IHwgTG9jYWxNdXRhdGlvbkxvZ1JlY29yZFtdfSByZWNvcmRzIC0gUmVhZHMgbG9nIHJlY29yZHMuXG4gKiBAcHJvcGVydHkgeyhzdG9yYWdlS2V5OiBzdHJpbmcsIHJlY29yZDogTG9jYWxNdXRhdGlvbkxvZ1JlY29yZCkgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWR9IHVwZGF0ZVJlY29yZCAtIFJlcGxhY2VzIG9uZSBsb2cgcmVjb3JkLlxuICovXG4vKipcbiAqIExvY2FsIHN5bmMgbXV0YXRpb24gZGVwZW5kZW5jeSBtZXRhZGF0YS5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IExvY2FsTXV0YXRpb25EZXBlbmRlbmN5XG4gKiBAcHJvcGVydHkge3N0cmluZ30gY2xpZW50TXV0YXRpb25JZCAtIENsaWVudCBtdXRhdGlvbiBpZCB0aGlzIG11dGF0aW9uIGRlcGVuZHMgb24uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbW9kZWwgLSBEZXBlbmRlbnQgbW9kZWwvcmVzb3VyY2UgbmFtZS5cbiAqL1xuLyoqXG4gKiBMb2NhbCBtdXRhdGlvbiBsb2cgc3RhdHVzLlxuICogQHR5cGVkZWYge1wicGVuZGluZ1wiIHwgXCJhcHBsaWVkLWxvY2FsbHlcIiB8IFwicGVlci1hcHBsaWVkXCIgfCBcImNvbmZsaWN0XCIgfCBcInJlamVjdGVkXCIgfCBcInN5bmNlZFwifSBMb2NhbE11dGF0aW9uU3RhdHVzXG4gKiAqL1xuLyoqXG4gKiBMb2NhbCBtdXRhdGlvbiBsb2cgcmVjb3JkLlxuICogQHR5cGVkZWYge29iamVjdH0gTG9jYWxNdXRhdGlvbkxvZ1JlY29yZFxuICogQHByb3BlcnR5IHtzdHJpbmd9IGNyZWF0ZWRBdCAtIElTTyB0aW1lc3RhbXAgd2hlbiB0aGUgcmVjb3JkIHdhcyBjcmVhdGVkIGxvY2FsbHkuXG4gKiBAcHJvcGVydHkge0xvY2FsTXV0YXRpb25EZXBlbmRlbmN5W119IGRlcGVuZGVuY2llcyAtIE90aGVyIGxvY2FsIG11dGF0aW9ucyB0aGF0IG11c3QgcmVwbGF5IGZpcnN0LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGlkIC0gTG9jYWwgbG9nIHJlY29yZCBpZC5cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi9kZXZpY2UtaWRlbnRpdHkuanNcIikuU3luY011dGF0aW9ufSBtdXRhdGlvbiAtIERldmljZSBtdXRhdGlvbiBwYXlsb2FkLlxuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuL2RldmljZS1pZGVudGl0eS5qc1wiKS5TaWduZWRTeW5jTXV0YXRpb259IFtzaWduZWRNdXRhdGlvbl0gLSBPcmlnaW5hbCBzaWduZWQgbXV0YXRpb24gZW52ZWxvcGUsIHJldGFpbmVkIGZvciBwZWVyLWZvcndhcmRlZCBtdXRhdGlvbnMuXG4gKiBAcHJvcGVydHkge251bWJlcn0gc2VxdWVuY2UgLSBNb25vdG9uaWMgbG9jYWwgc2VxdWVuY2UuXG4gKiBAcHJvcGVydHkge0xvY2FsTXV0YXRpb25TdGF0dXN9IHN0YXR1cyAtIExvY2FsIHJlcGxheS9hcHBseSBzdGF0dXMuXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsIGltcG9ydChcIi4uL2Zyb250ZW5kLW1vZGVscy9iYXNlLmpzXCIpLkZyb250ZW5kTW9kZWxUcmFuc3BvcnRWYWx1ZT59IFtzeW5jUmVzdWx0XSAtIEJhY2tlbmQgcmVwbGF5L3Jlc3VsdCBtZXRhZGF0YS4gU3RvcmVkIGFzIHRyYW5zcG9ydCBtYXJrZXJzIHNvIERhdGUgKGFuZCBvdGhlciB0eXBlZCkgdmFsdWVzIHN1cnZpdmUgdGhlIGR1cmFibGUgSlNPTiByb3VuZCB0cmlwIGFuZCBhcmUgcmVzdG9yZWQgb24gcmVhZGJhY2suXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdXBkYXRlZEF0IC0gSVNPIHRpbWVzdGFtcCB3aGVuIHRoZSByZWNvcmQgd2FzIGxhc3QgY2hhbmdlZC5cbiAqL1xuLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB7ZGVzZXJpYWxpemVGcm9udGVuZE1vZGVsVHJhbnNwb3J0VmFsdWUsIHNlcmlhbGl6ZUZyb250ZW5kTW9kZWxUcmFuc3BvcnRWYWx1ZX0gZnJvbSBcIi4uL2Zyb250ZW5kLW1vZGVscy90cmFuc3BvcnQtc2VyaWFsaXphdGlvbi5qc1wiXG5pbXBvcnQgc3RhYmxlSnNvblN0cmluZ2lmeSBmcm9tIFwiLi9zdGFibGUtanNvbi5qc1wiXG5cbmNvbnN0IERFRkFVTFRfU1RPUkFHRV9LRVkgPSBcInZlbG9jaW91cy5zeW5jLmxvY2FsTXV0YXRpb25Mb2dcIlxuY29uc3QgUEVORElOR19TVEFUVVNfVkFMVUVTID0gLyoqIEB0eXBlIHtMb2NhbE11dGF0aW9uU3RhdHVzW119ICovIChbXCJwZW5kaW5nXCIsIFwiYXBwbGllZC1sb2NhbGx5XCIsIFwicGVlci1hcHBsaWVkXCJdKVxuY29uc3QgUEVORElOR19TVEFUVVNFUyA9IG5ldyBTZXQoUEVORElOR19TVEFUVVNfVkFMVUVTKVxuY29uc3QgTVVUQVRJT05fU1RBVFVTRVMgPSBuZXcgU2V0KFsuLi5QRU5ESU5HX1NUQVRVU0VTLCBcImNvbmZsaWN0XCIsIFwicmVqZWN0ZWRcIiwgXCJzeW5jZWRcIl0pXG5jb25zdCBURVJNSU5BTF9TVEFUVVNFUyA9IG5ldyBTZXQoW1wicmVqZWN0ZWRcIiwgXCJzeW5jZWRcIl0pXG4vKiogQHR5cGUge01hcDxzdHJpbmcsIFByb21pc2U8dW5rbm93bj4+fSAqL1xuY29uc3QgU1RPUkFHRV9LRVlfTE9DS1MgPSBuZXcgTWFwKClcblxuLyoqIENsaWVudC1zaWRlIGFwcGVuZC1vbmx5IHN5bmMgbXV0YXRpb24gbG9nIHdpdGggcGx1Z2dhYmxlIHBlcnNpc3RlbnQgc3RvcmFnZS4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvY2FsTXV0YXRpb25Mb2cge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIGxvY2FsIG11dGF0aW9uIGxvZy5cbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBBcmd1bWVudHMuXG4gICAqIEBwYXJhbSB7KCkgPT4gc3RyaW5nfSBbYXJncy5pZEdlbmVyYXRvcl0gLSBSZWNvcmQgaWQgZ2VuZXJhdG9yLlxuICAgKiBAcGFyYW0geygpID0+IERhdGV9IFthcmdzLm5vd10gLSBDbG9jayBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtMb2NhbE11dGF0aW9uTG9nU3RvcmFnZX0gYXJncy5zdG9yYWdlIC0gUGVyc2lzdGVudCBzdG9yYWdlIGFkYXB0ZXIuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5zdG9yYWdlS2V5XSAtIFN0b3JhZ2Uga2V5LlxuICAgKi9cbiAgY29uc3RydWN0b3Ioe2lkR2VuZXJhdG9yID0gcmFuZG9tUmVjb3JkSWQsIG5vdyA9ICgpID0+IG5ldyBEYXRlKCksIHN0b3JhZ2UsIHN0b3JhZ2VLZXkgPSBERUZBVUxUX1NUT1JBR0VfS0VZfSkge1xuICAgIGlmICghdmFsaWRTdG9yYWdlKHN0b3JhZ2UpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJMb2NhbE11dGF0aW9uTG9nIHJlcXVpcmVzIHJvdyBzdG9yYWdlIHdpdGggYXBwZW5kUmVjb3JkL2RlbGV0ZVJlY29yZHMvbmV4dFNlcXVlbmNlL3JlY29yZC9yZWNvcmRzL3VwZGF0ZVJlY29yZFwiKVxuICAgIH1cblxuICAgIHRoaXMuaWRHZW5lcmF0b3IgPSBpZEdlbmVyYXRvclxuICAgIHRoaXMubm93ID0gbm93XG4gICAgdGhpcy5zdG9yYWdlID0gc3RvcmFnZVxuICAgIHRoaXMuc3RvcmFnZUtleSA9IHN0b3JhZ2VLZXlcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBlbmRzIGEgcGVuZGluZyBtdXRhdGlvbiByZWNvcmQuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gQXJndW1lbnRzLlxuICAgKiBAcGFyYW0ge0xvY2FsTXV0YXRpb25EZXBlbmRlbmN5W119IFthcmdzLmRlcGVuZGVuY2llc10gLSBNdXRhdGlvbiBkZXBlbmRlbmNpZXMuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi9kZXZpY2UtaWRlbnRpdHkuanNcIikuU3luY011dGF0aW9ufSBhcmdzLm11dGF0aW9uIC0gTXV0YXRpb24gcGF5bG9hZC5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL2RldmljZS1pZGVudGl0eS5qc1wiKS5TaWduZWRTeW5jTXV0YXRpb259IFthcmdzLnNpZ25lZE11dGF0aW9uXSAtIE9yaWdpbmFsIHNpZ25lZCBtdXRhdGlvbiBlbnZlbG9wZSwgcmV0YWluZWQgZm9yIHBlZXItZm9yd2FyZGVkIG11dGF0aW9ucy5cbiAgICogQHJldHVybnMge1Byb21pc2U8TG9jYWxNdXRhdGlvbkxvZ1JlY29yZD59IC0gQ3JlYXRlZCBsb2cgcmVjb3JkLlxuICAgKi9cbiAgYXN5bmMgYXBwZW5kKHtkZXBlbmRlbmNpZXMgPSBbXSwgbXV0YXRpb24sIHNpZ25lZE11dGF0aW9ufSkge1xuICAgIGlmIChzaWduZWRNdXRhdGlvbiAhPT0gdW5kZWZpbmVkICYmIHN0YWJsZUpzb25TdHJpbmdpZnkoc2lnbmVkTXV0YXRpb24ubXV0YXRpb24pICE9PSBzdGFibGVKc29uU3RyaW5naWZ5KG11dGF0aW9uKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU2lnbmVkIG11dGF0aW9uIHBheWxvYWQgZG9lcyBub3QgbWF0Y2ggdGhlIG11dGF0aW9uXCIpXG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IHdpdGhTdG9yYWdlS2V5TG9jayh0aGlzLnN0b3JhZ2VLZXksIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHRpbWVzdGFtcCA9IHRoaXMuY3VycmVudFRpbWVzdGFtcCgpXG4gICAgICBjb25zdCByZWNvcmQgPSBub3JtYWxpemVSZWNvcmQoe1xuICAgICAgICBjcmVhdGVkQXQ6IHRpbWVzdGFtcCxcbiAgICAgICAgZGVwZW5kZW5jaWVzLFxuICAgICAgICBpZDogdGhpcy5pZEdlbmVyYXRvcigpLFxuICAgICAgICBtdXRhdGlvbixcbiAgICAgICAgc2VxdWVuY2U6IGF3YWl0IHRoaXMuc3RvcmFnZS5uZXh0U2VxdWVuY2UodGhpcy5zdG9yYWdlS2V5KSxcbiAgICAgICAgc2lnbmVkTXV0YXRpb24sXG4gICAgICAgIHN0YXR1czogXCJwZW5kaW5nXCIsXG4gICAgICAgIHVwZGF0ZWRBdDogdGltZXN0YW1wXG4gICAgICB9KVxuXG4gICAgICBhd2FpdCB0aGlzLnN0b3JhZ2UuYXBwZW5kUmVjb3JkKHRoaXMuc3RvcmFnZUtleSwgY2xvbmVSZWNvcmQocmVjb3JkKSlcblxuICAgICAgcmV0dXJuIGNsb25lUmVjb3JkKHJlY29yZClcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYWxsIHJlY29yZHMgb3JkZXJlZCBieSBsb2NhbCBzZXF1ZW5jZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8TG9jYWxNdXRhdGlvbkxvZ1JlY29yZFtdPn0gLSBMb2cgcmVjb3Jkcy5cbiAgICovXG4gIGFzeW5jIHJlY29yZHMoKSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZVJlY29yZExpc3QoYXdhaXQgdGhpcy5zdG9yYWdlLnJlY29yZHModGhpcy5zdG9yYWdlS2V5KSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHJlY29yZHMgdGhhdCBzdGlsbCBuZWVkIGxvY2FsL3NlcnZlciByZWNvbmNpbGlhdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8TG9jYWxNdXRhdGlvbkxvZ1JlY29yZFtdPn0gLSBQZW5kaW5nIHJlY29yZHMuXG4gICAqL1xuICBhc3luYyBwZW5kaW5nUmVjb3JkcygpIHtcbiAgICByZXR1cm4gbm9ybWFsaXplUmVjb3JkTGlzdChhd2FpdCB0aGlzLnN0b3JhZ2UucmVjb3Jkcyh0aGlzLnN0b3JhZ2VLZXksIHtzdGF0dXNlczogUEVORElOR19TVEFUVVNfVkFMVUVTfSkpXG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyBhIHJlY29yZCBzdGF0dXMuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gQXJndW1lbnRzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5pZCAtIFJlY29yZCBpZC5cbiAgICogQHBhcmFtIHtMb2NhbE11dGF0aW9uU3RhdHVzfSBhcmdzLnN0YXR1cyAtIE5ldyBzdGF0dXMuXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgaW1wb3J0KFwiLi4vZnJvbnRlbmQtbW9kZWxzL2Jhc2UuanNcIikuRnJvbnRlbmRNb2RlbFRyYW5zcG9ydFZhbHVlPn0gW2FyZ3Muc3luY1Jlc3VsdF0gLSBSZXN1bHQgbWV0YWRhdGEgKG1heSBjYXJyeSB0cmFuc3BvcnQtcmVzdG9yZWQgdHlwZWQgdmFsdWVzKS5cbiAgICogQHJldHVybnMge1Byb21pc2U8TG9jYWxNdXRhdGlvbkxvZ1JlY29yZD59IC0gVXBkYXRlZCByZWNvcmQuXG4gICAqL1xuICBhc3luYyB1cGRhdGVTdGF0dXMoe2lkLCBzdGF0dXMsIHN5bmNSZXN1bHR9KSB7XG4gICAgaWYgKCFNVVRBVElPTl9TVEFUVVNFUy5oYXMoc3RhdHVzKSkgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGxvY2FsIG11dGF0aW9uIHN0YXR1cyAnJHtzdGF0dXN9J2ApXG5cbiAgICByZXR1cm4gYXdhaXQgd2l0aFN0b3JhZ2VLZXlMb2NrKHRoaXMuc3RvcmFnZUtleSwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmF3UmVjb3JkID0gYXdhaXQgdGhpcy5zdG9yYWdlLnJlY29yZCh0aGlzLnN0b3JhZ2VLZXksIGlkKVxuXG4gICAgICBpZiAoIXJhd1JlY29yZCkgdGhyb3cgbmV3IEVycm9yKGBObyBsb2NhbCBtdXRhdGlvbiBsb2cgcmVjb3JkICcke2lkfSdgKVxuXG4gICAgICBjb25zdCByZWNvcmQgPSBub3JtYWxpemVSZWNvcmQocmF3UmVjb3JkKVxuXG4gICAgICByZWNvcmQuc3RhdHVzID0gLyoqIEB0eXBlIHtMb2NhbE11dGF0aW9uU3RhdHVzfSAqLyAoc3RhdHVzKVxuICAgICAgaWYgKHN5bmNSZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBFbmNvZGUgdHJhbnNwb3J0LXJlc3RvcmVkIHR5cGVkIHZhbHVlcyAoZS5nLiBEYXRlIGF0dHJpYnV0ZXMgaW4gYVxuICAgICAgICAvLyBjb25mbGljdCBzZXJ2ZXJNb2RlbCkgYXMgbWFya2VycyBiZWZvcmUgdGhlIEpTT04gY2xvbmUgc28gdGhlXG4gICAgICAgIC8vIGR1cmFibGUgcGVyc2lzdGVuY2Ugcm91bmQgdHJpcCBjYW5ub3Qgc3RyaW5naWZ5IHRoZW0uXG4gICAgICAgIHJlY29yZC5zeW5jUmVzdWx0ID0gY2xvbmVKc29uT2JqZWN0KHNlcmlhbGl6ZUZyb250ZW5kTW9kZWxUcmFuc3BvcnRWYWx1ZShzeW5jUmVzdWx0KSwgXCJzeW5jUmVzdWx0XCIpXG4gICAgICB9XG4gICAgICByZWNvcmQudXBkYXRlZEF0ID0gdGhpcy5jdXJyZW50VGltZXN0YW1wKClcbiAgICAgIGF3YWl0IHRoaXMuc3RvcmFnZS51cGRhdGVSZWNvcmQodGhpcy5zdG9yYWdlS2V5LCBjbG9uZVJlY29yZChyZWNvcmQpKVxuXG4gICAgICByZXR1cm4gcmVzdG9yZVN5bmNSZXN1bHRUeXBlcyhjbG9uZVJlY29yZChyZWNvcmQpKVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogUmVwbGFjZXMgdGhlIG11dGF0aW9uIHBheWxvYWQgb2YgYSBzdGlsbC1wZW5kaW5nIHJlY29yZC4gVXNlZCB3aGVuIGFuXG4gICAqIGFja25vd2xlZGdlZCBwcmVkZWNlc3NvciBzdXBwbGllcyB0aGUgYXV0aG9yaXRhdGl2ZSBiYXNlIGZvciBpdHMgc3VjY2Vzc29yLlxuICAgKiBAcGFyYW0ge3tpZDogc3RyaW5nLCBtdXRhdGlvbjogaW1wb3J0KFwiLi9kZXZpY2UtaWRlbnRpdHkuanNcIikuU3luY011dGF0aW9ufX0gYXJncyAtIFJlY29yZCBhbmQgcmVwbGFjZW1lbnQgbXV0YXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPExvY2FsTXV0YXRpb25Mb2dSZWNvcmQ+fSBVcGRhdGVkIHJlY29yZC5cbiAgICovXG4gIGFzeW5jIHVwZGF0ZU11dGF0aW9uKHtpZCwgbXV0YXRpb259KSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpdGhTdG9yYWdlS2V5TG9jayh0aGlzLnN0b3JhZ2VLZXksIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJhd1JlY29yZCA9IGF3YWl0IHRoaXMuc3RvcmFnZS5yZWNvcmQodGhpcy5zdG9yYWdlS2V5LCBpZClcblxuICAgICAgaWYgKCFyYXdSZWNvcmQpIHRocm93IG5ldyBFcnJvcihgTm8gbG9jYWwgbXV0YXRpb24gbG9nIHJlY29yZCAnJHtpZH0nYClcblxuICAgICAgY29uc3QgcmVjb3JkID0gbm9ybWFsaXplUmVjb3JkKHJhd1JlY29yZClcblxuICAgICAgaWYgKCFQRU5ESU5HX1NUQVRVU0VTLmhhcyhyZWNvcmQuc3RhdHVzKSkgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgdXBkYXRlIG11dGF0aW9uIGZvciAke3JlY29yZC5zdGF0dXN9IGxvY2FsIG11dGF0aW9uICcke2lkfSdgKVxuXG4gICAgICByZWNvcmQubXV0YXRpb24gPSBub3JtYWxpemVNdXRhdGlvbihtdXRhdGlvbilcbiAgICAgIHJlY29yZC51cGRhdGVkQXQgPSB0aGlzLmN1cnJlbnRUaW1lc3RhbXAoKVxuICAgICAgYXdhaXQgdGhpcy5zdG9yYWdlLnVwZGF0ZVJlY29yZCh0aGlzLnN0b3JhZ2VLZXksIGNsb25lUmVjb3JkKHJlY29yZCkpXG5cbiAgICAgIHJldHVybiByZXN0b3JlU3luY1Jlc3VsdFR5cGVzKGNsb25lUmVjb3JkKHJlY29yZCkpXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBQcnVuZXMgdGVybWluYWwgcmVjb3JkcyB0aGF0IGFyZSBubyBsb25nZXIgbmVlZGVkIGZvciByZXBsYXkgZGVwZW5kZW5jaWVzLlxuICAgKiBAcGFyYW0ge29iamVjdH0gW2FyZ3NdIC0gQ29tcGFjdGlvbiBvcHRpb25zLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2FyZ3MubWF4VGVybWluYWxSZWNvcmRzXSAtIE1heGltdW0gdGVybWluYWwgcmVjb3JkcyB0byByZXRhaW4uXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbYXJncy50ZXJtaW5hbFJldGVudGlvbk1zXSAtIE1pbmltdW0gYWdlIGJlZm9yZSBwcnVuaW5nIHRlcm1pbmFsIHJlY29yZHMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHtkZWxldGVkUmVjb3JkSWRzOiBzdHJpbmdbXX0+fSAtIENvbXBhY3Rpb24gcmVzdWx0LlxuICAgKi9cbiAgYXN5bmMgY29tcGFjdCh7bWF4VGVybWluYWxSZWNvcmRzLCB0ZXJtaW5hbFJldGVudGlvbk1zfSA9IHt9KSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpdGhTdG9yYWdlS2V5TG9jayh0aGlzLnN0b3JhZ2VLZXksIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJlY29yZHMgPSBhd2FpdCB0aGlzLnJlY29yZHMoKVxuICAgICAgY29uc3QgcHJvdGVjdGVkQ2xpZW50TXV0YXRpb25JZHMgPSBuZXcgU2V0KFxuICAgICAgICByZWNvcmRzXG4gICAgICAgICAgLmZpbHRlcigocmVjb3JkKSA9PiBQRU5ESU5HX1NUQVRVU0VTLmhhcyhyZWNvcmQuc3RhdHVzKSB8fCByZWNvcmQuc3RhdHVzID09PSBcImNvbmZsaWN0XCIpXG4gICAgICAgICAgLmZsYXRNYXAoKHJlY29yZCkgPT4gcmVjb3JkLmRlcGVuZGVuY2llcy5tYXAoKGRlcGVuZGVuY3kpID0+IGRlcGVuZGVuY3kuY2xpZW50TXV0YXRpb25JZCkpXG4gICAgICApXG4gICAgICBjb25zdCB0ZXJtaW5hbFJlY29yZHMgPSByZWNvcmRzXG4gICAgICAgIC5maWx0ZXIoKHJlY29yZCkgPT4gVEVSTUlOQUxfU1RBVFVTRVMuaGFzKHJlY29yZC5zdGF0dXMpKVxuICAgICAgICAuZmlsdGVyKChyZWNvcmQpID0+ICFwcm90ZWN0ZWRDbGllbnRNdXRhdGlvbklkcy5oYXMocmVjb3JkLm11dGF0aW9uLmNsaWVudE11dGF0aW9uSWQpKVxuICAgICAgICAuc29ydChjb21wYXJlUmVjb3Jkc05ld2VzdEZpcnN0KVxuICAgICAgY29uc3QgZGVsZXRlSWRzID0gbmV3IFNldCgpXG5cbiAgICAgIGlmICh0eXBlb2YgbWF4VGVybWluYWxSZWNvcmRzID09PSBcIm51bWJlclwiICYmIG1heFRlcm1pbmFsUmVjb3JkcyA+PSAwKSB7XG4gICAgICAgIGZvciAoY29uc3QgcmVjb3JkIG9mIHRlcm1pbmFsUmVjb3Jkcy5zbGljZShtYXhUZXJtaW5hbFJlY29yZHMpKSBkZWxldGVJZHMuYWRkKHJlY29yZC5pZClcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB0ZXJtaW5hbFJldGVudGlvbk1zID09PSBcIm51bWJlclwiICYmIHRlcm1pbmFsUmV0ZW50aW9uTXMgPj0gMCkge1xuICAgICAgICBjb25zdCBjdXRvZmYgPSB0aGlzLm5vdygpLmdldFRpbWUoKSAtIHRlcm1pbmFsUmV0ZW50aW9uTXNcblxuICAgICAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiB0ZXJtaW5hbFJlY29yZHMpIHtcbiAgICAgICAgICBpZiAobmV3IERhdGUocmVjb3JkLnVwZGF0ZWRBdCkuZ2V0VGltZSgpIDwgY3V0b2ZmKSBkZWxldGVJZHMuYWRkKHJlY29yZC5pZClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkZWxldGVkUmVjb3JkSWRzID0gQXJyYXkuZnJvbShkZWxldGVJZHMpXG5cbiAgICAgIGlmIChkZWxldGVkUmVjb3JkSWRzLmxlbmd0aCA+IDApIGF3YWl0IHRoaXMuc3RvcmFnZS5kZWxldGVSZWNvcmRzKHRoaXMuc3RvcmFnZUtleSwgZGVsZXRlZFJlY29yZElkcylcblxuICAgICAgcmV0dXJuIHtkZWxldGVkUmVjb3JkSWRzfVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY3VycmVudCBsb2cgdGltZXN0YW1wLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIEN1cnJlbnQgSVNPIHRpbWVzdGFtcC5cbiAgICovXG4gIGN1cnJlbnRUaW1lc3RhbXAoKSB7XG4gICAgY29uc3QgZGF0ZSA9IHRoaXMubm93KClcblxuICAgIGlmICghKGRhdGUgaW5zdGFuY2VvZiBEYXRlKSB8fCBOdW1iZXIuaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB0aHJvdyBuZXcgRXJyb3IoXCJMb2NhbE11dGF0aW9uTG9nIG5vdygpIG11c3QgcmV0dXJuIGEgdmFsaWQgRGF0ZVwiKVxuXG4gICAgcmV0dXJuIGRhdGUudG9JU09TdHJpbmcoKVxuICB9XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYSBzdG9yYWdlIGFkYXB0ZXIgaGFzIGFsbCByZXF1aXJlZCByb3ctc3RvcmUgbWV0aG9kcy5cbiAqIEBwYXJhbSB7dW5rbm93bn0gc3RvcmFnZSAtIFN0b3JhZ2UgYWRhcHRlciBjYW5kaWRhdGUuXG4gKiBAcmV0dXJucyB7c3RvcmFnZSBpcyBMb2NhbE11dGF0aW9uTG9nU3RvcmFnZX0gLSBXaGV0aGVyIHN0b3JhZ2UgaXMgdmFsaWQuXG4gKi9cbmZ1bmN0aW9uIHZhbGlkU3RvcmFnZShzdG9yYWdlKSB7XG4gIGlmICghc3RvcmFnZSB8fCB0eXBlb2Ygc3RvcmFnZSAhPT0gXCJvYmplY3RcIikgcmV0dXJuIGZhbHNlXG5cbiAgY29uc3Qgc3RvcmFnZU9iamVjdCA9IC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgdW5rbm93bj59ICovIChzdG9yYWdlKVxuXG4gIHJldHVybiB0eXBlb2Ygc3RvcmFnZU9iamVjdC5hcHBlbmRSZWNvcmQgPT09IFwiZnVuY3Rpb25cIlxuICAgICYmIHR5cGVvZiBzdG9yYWdlT2JqZWN0LmRlbGV0ZVJlY29yZHMgPT09IFwiZnVuY3Rpb25cIlxuICAgICYmIHR5cGVvZiBzdG9yYWdlT2JqZWN0Lm5leHRTZXF1ZW5jZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgJiYgdHlwZW9mIHN0b3JhZ2VPYmplY3QucmVjb3JkID09PSBcImZ1bmN0aW9uXCJcbiAgICAmJiB0eXBlb2Ygc3RvcmFnZU9iamVjdC5yZWNvcmRzID09PSBcImZ1bmN0aW9uXCJcbiAgICAmJiB0eXBlb2Ygc3RvcmFnZU9iamVjdC51cGRhdGVSZWNvcmQgPT09IFwiZnVuY3Rpb25cIlxufVxuXG4vKipcbiAqIFNvcnRzIHJlY29yZHMgYnkgbmV3ZXN0IHVwZGF0ZS9zZXF1ZW5jZSBmaXJzdC5cbiAqIEBwYXJhbSB7TG9jYWxNdXRhdGlvbkxvZ1JlY29yZH0gbGVmdCAtIExlZnQgcmVjb3JkLlxuICogQHBhcmFtIHtMb2NhbE11dGF0aW9uTG9nUmVjb3JkfSByaWdodCAtIFJpZ2h0IHJlY29yZC5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IC0gU29ydCByZXN1bHQuXG4gKi9cbmZ1bmN0aW9uIGNvbXBhcmVSZWNvcmRzTmV3ZXN0Rmlyc3QobGVmdCwgcmlnaHQpIHtcbiAgY29uc3QgdXBkYXRlZEF0Q29tcGFyaXNvbiA9IHJpZ2h0LnVwZGF0ZWRBdC5sb2NhbGVDb21wYXJlKGxlZnQudXBkYXRlZEF0KVxuXG4gIGlmICh1cGRhdGVkQXRDb21wYXJpc29uICE9PSAwKSByZXR1cm4gdXBkYXRlZEF0Q29tcGFyaXNvblxuXG4gIHJldHVybiByaWdodC5zZXF1ZW5jZSAtIGxlZnQuc2VxdWVuY2Vcbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIGFuZCBzb3J0cyBhIGxpc3Qgb2YgcmVjb3Jkcy5cbiAqIEBwYXJhbSB7dW5rbm93bn0gcmVjb3JkcyAtIFJhdyByZWNvcmRzLlxuICogQHJldHVybnMge0xvY2FsTXV0YXRpb25Mb2dSZWNvcmRbXX0gLSBOb3JtYWxpemVkIHJlY29yZHMuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVJlY29yZExpc3QocmVjb3Jkcykge1xuICBpZiAoIUFycmF5LmlzQXJyYXkocmVjb3JkcykpIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIGxvY2FsIG11dGF0aW9uIGxvZyBzdG9yYWdlIHJlY29yZHMgYXJyYXlcIilcblxuICByZXR1cm4gcmVjb3Jkc1xuICAgIC5tYXAobm9ybWFsaXplUmVjb3JkKVxuICAgIC5zb3J0KChsZWZ0LCByaWdodCkgPT4gbGVmdC5zZXF1ZW5jZSAtIHJpZ2h0LnNlcXVlbmNlKVxuICAgIC5tYXAoKHJlY29yZCkgPT4gY2xvbmVSZWNvcmQocmVjb3JkKSlcbiAgICAubWFwKHJlc3RvcmVTeW5jUmVzdWx0VHlwZXMpXG59XG5cbi8qKlxuICogUmVzdG9yZXMgdHJhbnNwb3J0LXJlc3RvcmVkIHR5cGVkIHZhbHVlcyBpbiBhIHJlY29yZCdzIHN5bmNSZXN1bHQgYWZ0ZXIgdGhlXG4gKiBmaW5hbCBKU09OIGNsb25lLCBzbyBjYWxsZXJzIHNlZSBEYXRlIChhbmQgb3RoZXIgdHlwZWQpIHZhbHVlcyBvbiBkdXJhYmxlXG4gKiByZWFkYmFjayBpbnN0ZWFkIG9mIG1hcmtlci1lbmNvZGVkIElTTyBzdHJpbmdzLlxuICogQHBhcmFtIHtMb2NhbE11dGF0aW9uTG9nUmVjb3JkfSByZWNvcmQgLSBDbG9uZWQgcmVjb3JkLlxuICogQHJldHVybnMge0xvY2FsTXV0YXRpb25Mb2dSZWNvcmR9IC0gUmVjb3JkIHdpdGggcmVzdG9yZWQgc3luY1Jlc3VsdCB0eXBlcy5cbiAqL1xuZnVuY3Rpb24gcmVzdG9yZVN5bmNSZXN1bHRUeXBlcyhyZWNvcmQpIHtcbiAgaWYgKHJlY29yZC5zeW5jUmVzdWx0ID09PSB1bmRlZmluZWQpIHJldHVybiByZWNvcmRcblxuICByZXR1cm4ge1xuICAgIC4uLnJlY29yZCxcbiAgICBzeW5jUmVzdWx0OiAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIGltcG9ydChcIi4uL2Zyb250ZW5kLW1vZGVscy9iYXNlLmpzXCIpLkZyb250ZW5kTW9kZWxUcmFuc3BvcnRWYWx1ZT59ICovIChcbiAgICAgIGRlc2VyaWFsaXplRnJvbnRlbmRNb2RlbFRyYW5zcG9ydFZhbHVlKHJlY29yZC5zeW5jUmVzdWx0KVxuICAgIClcbiAgfVxufVxuXG4vKipcbiAqIFJ1bnMgYSBjYWxsYmFjayBhZnRlciBlYXJsaWVyIHdyaXRlcyBmb3IgdGhlIHNhbWUgc3RvcmFnZSBrZXkgaGF2ZSBjb21wbGV0ZWQuXG4gKiBAdGVtcGxhdGUgVFxuICogQHBhcmFtIHtzdHJpbmd9IHN0b3JhZ2VLZXkgLSBTdG9yYWdlIGtleSB0byBzZXJpYWxpemUuXG4gKiBAcGFyYW0geygpID0+IFByb21pc2U8VD59IGNhbGxiYWNrIC0gQ2FsbGJhY2sgdG8gcnVuIHVuZGVyIHRoZSBzdG9yYWdlLWtleSBsb2NrLlxuICogQHJldHVybnMge1Byb21pc2U8VD59IC0gQ2FsbGJhY2sgcmVzdWx0LlxuICovXG5hc3luYyBmdW5jdGlvbiB3aXRoU3RvcmFnZUtleUxvY2soc3RvcmFnZUtleSwgY2FsbGJhY2spIHtcbiAgY29uc3QgcHJldmlvdXMgPSBTVE9SQUdFX0tFWV9MT0NLUy5nZXQoc3RvcmFnZUtleSkgfHwgUHJvbWlzZS5yZXNvbHZlKClcbiAgbGV0IHJlbGVhc2UgPSAoKSA9PiB7fVxuICBjb25zdCBjdXJyZW50ID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHsgcmVsZWFzZSA9ICgpID0+IHJlc29sdmUodW5kZWZpbmVkKSB9KVxuICBjb25zdCBjaGFpbmVkID0gcHJldmlvdXMuY2F0Y2goKF9lcnJvcikgPT4ge30pLnRoZW4oKCkgPT4gY3VycmVudClcblxuICBTVE9SQUdFX0tFWV9MT0NLUy5zZXQoc3RvcmFnZUtleSwgY2hhaW5lZClcblxuICB0cnkge1xuICAgIGF3YWl0IHByZXZpb3VzLmNhdGNoKChfZXJyb3IpID0+IHt9KVxuXG4gICAgcmV0dXJuIGF3YWl0IGNhbGxiYWNrKClcbiAgfSBmaW5hbGx5IHtcbiAgICByZWxlYXNlKClcbiAgICBpZiAoU1RPUkFHRV9LRVlfTE9DS1MuZ2V0KHN0b3JhZ2VLZXkpID09PSBjaGFpbmVkKSBTVE9SQUdFX0tFWV9MT0NLUy5kZWxldGUoc3RvcmFnZUtleSlcbiAgfVxufVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgYSBwZXJzaXN0ZWQgbG9nIHJlY29yZC5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBSYXcgcmVjb3JkLlxuICogQHJldHVybnMge0xvY2FsTXV0YXRpb25Mb2dSZWNvcmR9IC0gTm9ybWFsaXplZCByZWNvcmQuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVJlY29yZCh2YWx1ZSkge1xuICBpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSkgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgbG9jYWwgbXV0YXRpb24gbG9nIHJlY29yZCBvYmplY3RcIilcblxuICBjb25zdCByZWNvcmQgPSAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHVua25vd24+fSAqLyAodmFsdWUpXG4gIGNvbnN0IHN0YXR1cyA9IHJlcXVpcmVkU3RyaW5nKHJlY29yZC5zdGF0dXMsIFwic3RhdHVzXCIpXG5cbiAgaWYgKCFNVVRBVElPTl9TVEFUVVNFUy5oYXMoc3RhdHVzKSkgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGxvY2FsIG11dGF0aW9uIHN0YXR1cyAnJHtzdGF0dXN9J2ApXG5cbiAgY29uc3QgYmFzZVJlY29yZCA9IHtcbiAgICBjcmVhdGVkQXQ6IHJlcXVpcmVkSXNvVGltZXN0YW1wKHJlY29yZC5jcmVhdGVkQXQsIFwiY3JlYXRlZEF0XCIpLFxuICAgIGRlcGVuZGVuY2llczogbm9ybWFsaXplRGVwZW5kZW5jaWVzKHJlY29yZC5kZXBlbmRlbmNpZXMpLFxuICAgIGlkOiByZXF1aXJlZFN0cmluZyhyZWNvcmQuaWQsIFwiaWRcIiksXG4gICAgbXV0YXRpb246IG5vcm1hbGl6ZU11dGF0aW9uKHJlY29yZC5tdXRhdGlvbiksXG4gICAgc2VxdWVuY2U6IHJlcXVpcmVkUG9zaXRpdmVJbnRlZ2VyKHJlY29yZC5zZXF1ZW5jZSwgXCJzZXF1ZW5jZVwiKSxcbiAgICBzdGF0dXM6IC8qKiBAdHlwZSB7TG9jYWxNdXRhdGlvblN0YXR1c30gKi8gKHN0YXR1cyksXG4gICAgdXBkYXRlZEF0OiByZXF1aXJlZElzb1RpbWVzdGFtcChyZWNvcmQudXBkYXRlZEF0LCBcInVwZGF0ZWRBdFwiKVxuICB9XG5cbiAgaWYgKHJlY29yZC5zaWduZWRNdXRhdGlvbiA9PT0gdW5kZWZpbmVkICYmIHJlY29yZC5zeW5jUmVzdWx0ID09PSB1bmRlZmluZWQpIHJldHVybiBiYXNlUmVjb3JkXG5cbiAgLyoqIEB0eXBlIHtMb2NhbE11dGF0aW9uTG9nUmVjb3JkfSAqL1xuICBjb25zdCBub3JtYWxpemVkUmVjb3JkID0gey4uLmJhc2VSZWNvcmR9XG5cbiAgaWYgKHJlY29yZC5zaWduZWRNdXRhdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgbm9ybWFsaXplZFJlY29yZC5zaWduZWRNdXRhdGlvbiA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi9kZXZpY2UtaWRlbnRpdHkuanNcIikuU2lnbmVkU3luY011dGF0aW9ufSAqLyAoY2xvbmVKc29uT2JqZWN0KHJlY29yZC5zaWduZWRNdXRhdGlvbiwgXCJzaWduZWRNdXRhdGlvblwiKSlcbiAgfVxuICBpZiAocmVjb3JkLnN5bmNSZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgIC8vIFBlcnNpc3RlZCBzeW5jUmVzdWx0IGlzIG1hcmtlci1lbmNvZGVkIHNvIGl0IHN1cnZpdmVzIHRoZSBKU09OIGNsb25lO1xuICAgIC8vIHR5cGVkIHZhbHVlcyBhcmUgcmVzdG9yZWQgYnkgcmVzdG9yZVN5bmNSZXN1bHRUeXBlcyBhdCB0aGUgcmVhZCBib3VuZGFyeS5cbiAgICBub3JtYWxpemVkUmVjb3JkLnN5bmNSZXN1bHQgPSAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIGltcG9ydChcIi4uL2Zyb250ZW5kLW1vZGVscy9iYXNlLmpzXCIpLkZyb250ZW5kTW9kZWxUcmFuc3BvcnRWYWx1ZT59ICovIChcbiAgICAgIGNsb25lSnNvbk9iamVjdChyZWNvcmQuc3luY1Jlc3VsdCwgXCJzeW5jUmVzdWx0XCIpXG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIG5vcm1hbGl6ZWRSZWNvcmRcbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIGRlcGVuZGVuY3kgbWV0YWRhdGEgZW50cmllcy5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBSYXcgZGVwZW5kZW5jaWVzLlxuICogQHJldHVybnMge0xvY2FsTXV0YXRpb25EZXBlbmRlbmN5W119IC0gTm9ybWFsaXplZCBkZXBlbmRlbmNpZXMuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZURlcGVuZGVuY2llcyh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIFtdXG4gIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIGxvY2FsIG11dGF0aW9uIGRlcGVuZGVuY2llcyBhcnJheVwiKVxuXG4gIHJldHVybiB2YWx1ZS5tYXAoKGRlcGVuZGVuY3kpID0+IHtcbiAgICBpZiAoIWRlcGVuZGVuY3kgfHwgdHlwZW9mIGRlcGVuZGVuY3kgIT09IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShkZXBlbmRlbmN5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgbG9jYWwgbXV0YXRpb24gZGVwZW5kZW5jeSBvYmplY3RcIilcbiAgICB9XG5cbiAgICBjb25zdCBkZXBlbmRlbmN5T2JqZWN0ID0gLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0gKi8gKGRlcGVuZGVuY3kpXG5cbiAgICByZXR1cm4ge1xuICAgICAgY2xpZW50TXV0YXRpb25JZDogcmVxdWlyZWRTdHJpbmcoZGVwZW5kZW5jeU9iamVjdC5jbGllbnRNdXRhdGlvbklkLCBcImRlcGVuZGVuY3kgY2xpZW50TXV0YXRpb25JZFwiKSxcbiAgICAgIG1vZGVsOiByZXF1aXJlZFN0cmluZyhkZXBlbmRlbmN5T2JqZWN0Lm1vZGVsLCBcImRlcGVuZGVuY3kgbW9kZWxcIilcbiAgICB9XG4gIH0pXG59XG5cbi8qKlxuICogTm9ybWFsaXplcyBhIHN5bmMgbXV0YXRpb24gcGF5bG9hZC5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBSYXcgbXV0YXRpb24uXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi9kZXZpY2UtaWRlbnRpdHkuanNcIikuU3luY011dGF0aW9ufSAtIE5vcm1hbGl6ZWQgbXV0YXRpb24uXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZU11dGF0aW9uKHZhbHVlKSB7XG4gIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpKSB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBsb2NhbCBzeW5jIG11dGF0aW9uIG9iamVjdFwiKVxuXG4gIGNvbnN0IG11dGF0aW9uID0gLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0gKi8gKHZhbHVlKVxuICBjb25zdCBub3JtYWxpemVkID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuL2RldmljZS1pZGVudGl0eS5qc1wiKS5TeW5jTXV0YXRpb259ICovICh7XG4gICAgYWN0b3JEZXZpY2VJZDogcmVxdWlyZWRTdHJpbmcobXV0YXRpb24uYWN0b3JEZXZpY2VJZCwgXCJhY3RvckRldmljZUlkXCIpLFxuICAgIGFjdG9yVXNlcklkOiByZXF1aXJlZFN0cmluZyhtdXRhdGlvbi5hY3RvclVzZXJJZCwgXCJhY3RvclVzZXJJZFwiKSxcbiAgICBjbGllbnRNdXRhdGlvbklkOiByZXF1aXJlZFN0cmluZyhtdXRhdGlvbi5jbGllbnRNdXRhdGlvbklkLCBcImNsaWVudE11dGF0aW9uSWRcIiksXG4gICAgbW9kZWw6IHJlcXVpcmVkU3RyaW5nKG11dGF0aW9uLm1vZGVsLCBcIm1vZGVsXCIpLFxuICAgIG9jY3VycmVkQXQ6IHJlcXVpcmVkSXNvVGltZXN0YW1wKG11dGF0aW9uLm9jY3VycmVkQXQsIFwib2NjdXJyZWRBdFwiKSxcbiAgICBvZmZsaW5lR3JhbnRJZDogcmVxdWlyZWRTdHJpbmcobXV0YXRpb24ub2ZmbGluZUdyYW50SWQsIFwib2ZmbGluZUdyYW50SWRcIiksXG4gICAgb3BlcmF0aW9uOiByZXF1aXJlZFN0cmluZyhtdXRhdGlvbi5vcGVyYXRpb24sIFwib3BlcmF0aW9uXCIpLFxuICAgIHBvbGljeUhhc2g6IHJlcXVpcmVkU3RyaW5nKG11dGF0aW9uLnBvbGljeUhhc2gsIFwicG9saWN5SGFzaFwiKVxuICB9KVxuXG4gIGlmIChtdXRhdGlvbi5hdHRyaWJ1dGVzICE9PSB1bmRlZmluZWQpIG5vcm1hbGl6ZWQuYXR0cmlidXRlcyA9IGNsb25lSnNvbk9iamVjdChtdXRhdGlvbi5hdHRyaWJ1dGVzLCBcImF0dHJpYnV0ZXNcIilcbiAgaWYgKG11dGF0aW9uLmJhc2VWZXJzaW9uICE9PSB1bmRlZmluZWQpIG5vcm1hbGl6ZWQuYmFzZVZlcnNpb24gPSBjbG9uZUJhc2VWZXJzaW9uKG11dGF0aW9uLmJhc2VWZXJzaW9uKVxuICBpZiAobXV0YXRpb24uY29tbWFuZCAhPT0gdW5kZWZpbmVkKSBub3JtYWxpemVkLmNvbW1hbmQgPSByZXF1aXJlZFN0cmluZyhtdXRhdGlvbi5jb21tYW5kLCBcImNvbW1hbmRcIilcbiAgaWYgKG11dGF0aW9uLnBheWxvYWQgIT09IHVuZGVmaW5lZCkgbm9ybWFsaXplZC5wYXlsb2FkID0gY2xvbmVKc29uT2JqZWN0KG11dGF0aW9uLnBheWxvYWQsIFwicGF5bG9hZFwiKVxuXG4gIHJldHVybiBub3JtYWxpemVkXG59XG5cbi8qKlxuICogUmVxdWlyZXMgYSBub24tZW1wdHkgc3RyaW5nIHZhbHVlLlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIFJhdyB2YWx1ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBsYWJlbCAtIEZpZWxkIGxhYmVsLlxuICogQHJldHVybnMge3N0cmluZ30gLSBSZXF1aXJlZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIHJlcXVpcmVkU3RyaW5nKHZhbHVlLCBsYWJlbCkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcInN0cmluZ1wiIHx8IHZhbHVlLmxlbmd0aCA8IDEpIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgbG9jYWwgbXV0YXRpb24gJHtsYWJlbH1gKVxuXG4gIHJldHVybiB2YWx1ZVxufVxuXG4vKipcbiAqIFJlcXVpcmVzIGFuIElTTyB0aW1lc3RhbXAgc3RyaW5nLlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIFJhdyB2YWx1ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBsYWJlbCAtIEZpZWxkIGxhYmVsLlxuICogQHJldHVybnMge3N0cmluZ30gLSBJU08gdGltZXN0YW1wLlxuICovXG5mdW5jdGlvbiByZXF1aXJlZElzb1RpbWVzdGFtcCh2YWx1ZSwgbGFiZWwpIHtcbiAgY29uc3Qgc3RyaW5nVmFsdWUgPSByZXF1aXJlZFN0cmluZyh2YWx1ZSwgbGFiZWwpXG4gIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShzdHJpbmdWYWx1ZSlcblxuICBpZiAoTnVtYmVyLmlzTmFOKGRhdGUuZ2V0VGltZSgpKSB8fCBkYXRlLnRvSVNPU3RyaW5nKCkgIT09IHN0cmluZ1ZhbHVlKSB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGxvY2FsIG11dGF0aW9uICR7bGFiZWx9IElTTyB0aW1lc3RhbXBgKVxuXG4gIHJldHVybiBzdHJpbmdWYWx1ZVxufVxuXG4vKipcbiAqIFJlcXVpcmVzIGEgcG9zaXRpdmUgaW50ZWdlciB2YWx1ZS5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBSYXcgdmFsdWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFiZWwgLSBGaWVsZCBsYWJlbC5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IC0gUG9zaXRpdmUgaW50ZWdlci5cbiAqL1xuZnVuY3Rpb24gcmVxdWlyZWRQb3NpdGl2ZUludGVnZXIodmFsdWUsIGxhYmVsKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwibnVtYmVyXCIgfHwgIU51bWJlci5pc0ludGVnZXIodmFsdWUpIHx8IHZhbHVlIDwgMSkgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBsb2NhbCBtdXRhdGlvbiAke2xhYmVsfSBwb3NpdGl2ZSBpbnRlZ2VyYClcblxuICByZXR1cm4gdmFsdWVcbn1cblxuLyoqXG4gKiBDbG9uZXMgYSBzdXBwb3J0ZWQgYmFzZS12ZXJzaW9uIHZhbHVlLlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIFJhdyBiYXNlIHZlcnNpb24uXG4gKiBAcmV0dXJucyB7c3RyaW5nIHwgbnVtYmVyIHwgbnVsbH0gLSBOb3JtYWxpemVkIGJhc2UgdmVyc2lvbi5cbiAqL1xuZnVuY3Rpb24gY2xvbmVCYXNlVmVyc2lvbih2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09IG51bGwgfHwgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHZhbHVlXG5cbiAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgbG9jYWwgbXV0YXRpb24gYmFzZVZlcnNpb24gc3RyaW5nLCBudW1iZXIsIG9yIG51bGxcIilcbn1cblxuLyoqXG4gKiBDbG9uZXMgYSBKU09OLWNvbXBhdGlibGUgdmFsdWUuXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gUmF3IEpTT04gdmFsdWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFiZWwgLSBGaWVsZCBsYWJlbC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLXR5cGVzLmpzXCIpLkZyb250ZW5kTW9kZWxTeW5jSnNvblZhbHVlfSAtIENsb25lZCBKU09OIHZhbHVlLlxuICovXG5mdW5jdGlvbiBjbG9uZUpzb25WYWx1ZSh2YWx1ZSwgbGFiZWwpIHtcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgSlNPTi1jb21wYXRpYmxlIGxvY2FsIG11dGF0aW9uICR7bGFiZWx9YClcblxuICByZXR1cm4gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLXR5cGVzLmpzXCIpLkZyb250ZW5kTW9kZWxTeW5jSnNvblZhbHVlfSAqLyAoSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh2YWx1ZSkpKVxufVxuXG4vKipcbiAqIENsb25lcyBhIEpTT04tY29tcGF0aWJsZSBvYmplY3QuXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gUmF3IEpTT04gb2JqZWN0LlxuICogQHBhcmFtIHtzdHJpbmd9IGxhYmVsIC0gRmllbGQgbGFiZWwuXG4gKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgaW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5Gcm9udGVuZE1vZGVsU3luY0pzb25WYWx1ZT59IC0gQ2xvbmVkIEpTT04gb2JqZWN0LlxuICovXG5mdW5jdGlvbiBjbG9uZUpzb25PYmplY3QodmFsdWUsIGxhYmVsKSB7XG4gIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpKSB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGxvY2FsIG11dGF0aW9uICR7bGFiZWx9IG9iamVjdGApXG5cbiAgcmV0dXJuIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgaW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5Gcm9udGVuZE1vZGVsU3luY0pzb25WYWx1ZT59ICovIChjbG9uZUpzb25WYWx1ZSh2YWx1ZSwgbGFiZWwpKVxufVxuXG4vKipcbiAqIENsb25lcyBhIGxvY2FsIG11dGF0aW9uIGxvZyByZWNvcmQuXG4gKiBAcGFyYW0ge0xvY2FsTXV0YXRpb25Mb2dSZWNvcmR9IHJlY29yZCAtIFJlY29yZCB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtMb2NhbE11dGF0aW9uTG9nUmVjb3JkfSAtIENsb25lZCByZWNvcmQuXG4gKi9cbmZ1bmN0aW9uIGNsb25lUmVjb3JkKHJlY29yZCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtMb2NhbE11dGF0aW9uTG9nUmVjb3JkfSAqLyAoSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShyZWNvcmQpKSlcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgYSByYW5kb20gbG9jYWwgbXV0YXRpb24gcmVjb3JkIGlkLlxuICogQHJldHVybnMge3N0cmluZ30gLSBSYW5kb20gcmVjb3JkIGlkLlxuICovXG5mdW5jdGlvbiByYW5kb21SZWNvcmRJZCgpIHtcbiAgY29uc3QgY3J5cHRvUHJvdmlkZXIgPSBnbG9iYWxUaGlzLmNyeXB0b1xuXG4gIGlmIChjcnlwdG9Qcm92aWRlciAmJiB0eXBlb2YgY3J5cHRvUHJvdmlkZXIucmFuZG9tVVVJRCA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gY3J5cHRvUHJvdmlkZXIucmFuZG9tVVVJRCgpXG5cbiAgcmV0dXJuIGBsb2NhbC1tdXRhdGlvbi0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygxNikuc2xpY2UoMil9YFxufVxuIl19
@@ -1,9 +1,2 @@
1
- /**
2
- * Serializes a JSON-compatible value with recursively sorted object keys, so
3
- * equal values always produce byte-identical strings (used for sync scope and
4
- * change-feed identity comparisons).
5
- * @param {ReturnType<typeof JSON.parse>} value - JSON-compatible value.
6
- * @returns {string} - Stable JSON string.
7
- */
8
- export default function stableJsonStringify(value: ReturnType<typeof JSON.parse>): string;
1
+ export { default } from "../utils/stable-json.js";
9
2
  //# sourceMappingURL=stable-json.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"stable-json.d.ts","sourceRoot":"","sources":["../../../src/sync/stable-json.js"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,KAAK,EAHtC,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAGU,GAFpC,MAAM,CAIlB"}
1
+ {"version":3,"file":"stable-json.d.ts","sourceRoot":"","sources":["../../../src/sync/stable-json.js"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,yBAAyB,CAAA"}
@@ -1,27 +1,2 @@
1
- // @ts-check
2
- /**
3
- * Serializes a JSON-compatible value with recursively sorted object keys, so
4
- * equal values always produce byte-identical strings (used for sync scope and
5
- * change-feed identity comparisons).
6
- * @param {ReturnType<typeof JSON.parse>} value - JSON-compatible value.
7
- * @returns {string} - Stable JSON string.
8
- */
9
- export default function stableJsonStringify(value) {
10
- return JSON.stringify(stableJsonValue(value));
11
- }
12
- /**
13
- * Produces a recursively key-sorted JSON value.
14
- * @param {ReturnType<typeof JSON.parse>} value - JSON-compatible value.
15
- * @returns {ReturnType<typeof JSON.parse>} - Stable JSON-compatible value.
16
- */
17
- function stableJsonValue(value) {
18
- if (Array.isArray(value))
19
- return value.map((item) => stableJsonValue(item));
20
- if (!value || typeof value !== "object")
21
- return value;
22
- return Object.keys(value).sort().reduce((memo, key) => {
23
- memo[key] = stableJsonValue(value[key]);
24
- return memo;
25
- }, /** @type {Record<string, ReturnType<typeof JSON.parse>>} */ ({}));
26
- }
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhYmxlLWpzb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc3luYy9zdGFibGUtanNvbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVo7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLE9BQU8sVUFBVSxtQkFBbUIsQ0FBQyxLQUFLO0lBQy9DLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtBQUMvQyxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsZUFBZSxDQUFDLEtBQUs7SUFDNUIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUFFLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDM0UsSUFBSSxDQUFDLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO1FBQUUsT0FBTyxLQUFLLENBQUE7SUFFckQsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRTtRQUNwRCxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsZUFBZSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO1FBRXZDLE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQyxFQUFFLDREQUE0RCxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQTtBQUN2RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbi8qKlxuICogU2VyaWFsaXplcyBhIEpTT04tY29tcGF0aWJsZSB2YWx1ZSB3aXRoIHJlY3Vyc2l2ZWx5IHNvcnRlZCBvYmplY3Qga2V5cywgc29cbiAqIGVxdWFsIHZhbHVlcyBhbHdheXMgcHJvZHVjZSBieXRlLWlkZW50aWNhbCBzdHJpbmdzICh1c2VkIGZvciBzeW5jIHNjb3BlIGFuZFxuICogY2hhbmdlLWZlZWQgaWRlbnRpdHkgY29tcGFyaXNvbnMpLlxuICogQHBhcmFtIHtSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPn0gdmFsdWUgLSBKU09OLWNvbXBhdGlibGUgdmFsdWUuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIFN0YWJsZSBKU09OIHN0cmluZy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3RhYmxlSnNvblN0cmluZ2lmeSh2YWx1ZSkge1xuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoc3RhYmxlSnNvblZhbHVlKHZhbHVlKSlcbn1cblxuLyoqXG4gKiBQcm9kdWNlcyBhIHJlY3Vyc2l2ZWx5IGtleS1zb3J0ZWQgSlNPTiB2YWx1ZS5cbiAqIEBwYXJhbSB7UmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT59IHZhbHVlIC0gSlNPTi1jb21wYXRpYmxlIHZhbHVlLlxuICogQHJldHVybnMge1JldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+fSAtIFN0YWJsZSBKU09OLWNvbXBhdGlibGUgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHN0YWJsZUpzb25WYWx1ZSh2YWx1ZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHJldHVybiB2YWx1ZS5tYXAoKGl0ZW0pID0+IHN0YWJsZUpzb25WYWx1ZShpdGVtKSlcbiAgaWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIpIHJldHVybiB2YWx1ZVxuXG4gIHJldHVybiBPYmplY3Qua2V5cyh2YWx1ZSkuc29ydCgpLnJlZHVjZSgobWVtbywga2V5KSA9PiB7XG4gICAgbWVtb1trZXldID0gc3RhYmxlSnNvblZhbHVlKHZhbHVlW2tleV0pXG5cbiAgICByZXR1cm4gbWVtb1xuICB9LCAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pn0gKi8gKHt9KSlcbn1cbiJdfQ==
1
+ export { default } from "../utils/stable-json.js";
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhYmxlLWpzb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc3luYy9zdGFibGUtanNvbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0seUJBQXlCLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQge2RlZmF1bHR9IGZyb20gXCIuLi91dGlscy9zdGFibGUtanNvbi5qc1wiXG4iXX0=
@@ -544,8 +544,9 @@ export default class SyncEnvelopeReplayService {
544
544
  * Projects affected mutation fields through the resource's readable
545
545
  * attribute contract. Writable-but-hidden fields are omitted, while custom
546
546
  * `<attribute>Attribute(model)` serializers and model accessors remain the
547
- * source of frontend-visible values. The full model attribute hash is never
548
- * exposed.
547
+ * source of frontend-visible values (Date values are kept raw so the normal
548
+ * frontend-model transport serializer can emit its date marker). The full
549
+ * model attribute hash is never exposed.
549
550
  * @param {object} args - Projection args.
550
551
  * @param {Record<string, ReturnType<typeof JSON.parse>>} args.attributes - Permitted affected mutation attributes.
551
552
  * @param {import("../database/record/index.js").default} args.existingRecord - Authorized server record.
@@ -1 +1 @@
1
- {"version":3,"file":"sync-envelope-replay-service.d.ts","sourceRoot":"","sources":["../../../src/sync/sync-envelope-replay-service.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sync-envelope-replay-service.d.ts","sourceRoot":"","sources":["../../../src/sync/sync-envelope-replay-service.js"],"names":[],"mappings":"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"}