velocious 1.0.541 → 1.0.543

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 (62) hide show
  1. package/README.md +7 -1
  2. package/build/background-jobs/job-runner.js +1 -1
  3. package/build/background-jobs/job.js +9 -0
  4. package/build/background-jobs/store.js +5 -3
  5. package/build/background-jobs/types.js +1 -1
  6. package/build/background-jobs/worker.js +1 -1
  7. package/build/cli/commands/db/tenants/check.js +1 -1
  8. package/build/cli/commands/db/tenants/migrate.js +12 -6
  9. package/build/configuration.js +21 -9
  10. package/build/database/migrator.js +2 -2
  11. package/build/database/record/index.js +6 -3
  12. package/build/http-server/websocket-event-log-store.js +1 -1
  13. package/build/jobs/prune-terminal-background-jobs.js +3 -0
  14. package/build/src/background-jobs/job-runner.js +2 -2
  15. package/build/src/background-jobs/job.d.ts +8 -0
  16. package/build/src/background-jobs/job.d.ts.map +1 -1
  17. package/build/src/background-jobs/job.js +9 -1
  18. package/build/src/background-jobs/store.d.ts.map +1 -1
  19. package/build/src/background-jobs/store.js +6 -4
  20. package/build/src/background-jobs/types.d.ts +2 -2
  21. package/build/src/background-jobs/types.js +2 -2
  22. package/build/src/background-jobs/worker.js +2 -2
  23. package/build/src/cli/commands/db/tenants/check.js +2 -2
  24. package/build/src/cli/commands/db/tenants/migrate.d.ts.map +1 -1
  25. package/build/src/cli/commands/db/tenants/migrate.js +11 -7
  26. package/build/src/configuration.d.ts +6 -1
  27. package/build/src/configuration.d.ts.map +1 -1
  28. package/build/src/configuration.js +14 -10
  29. package/build/src/database/migrator.js +3 -3
  30. package/build/src/database/record/index.d.ts.map +1 -1
  31. package/build/src/database/record/index.js +7 -4
  32. package/build/src/http-server/websocket-event-log-store.js +2 -2
  33. package/build/src/jobs/prune-terminal-background-jobs.d.ts +2 -0
  34. package/build/src/jobs/prune-terminal-background-jobs.d.ts.map +1 -1
  35. package/build/src/jobs/prune-terminal-background-jobs.js +3 -1
  36. package/build/src/sync/server-change-feed.js +2 -2
  37. package/build/src/sync/server-sequence-allocator.js +2 -2
  38. package/build/src/sync/sync-scope-store.js +2 -2
  39. package/build/src/tenants/default-tenant-database-provisioning.d.ts +3 -2
  40. package/build/src/tenants/default-tenant-database-provisioning.d.ts.map +1 -1
  41. package/build/src/tenants/default-tenant-database-provisioning.js +4 -4
  42. package/build/sync/server-change-feed.js +1 -1
  43. package/build/sync/server-sequence-allocator.js +1 -1
  44. package/build/sync/sync-scope-store.js +1 -1
  45. package/build/tenants/default-tenant-database-provisioning.js +3 -3
  46. package/package.json +1 -1
  47. package/src/background-jobs/job-runner.js +1 -1
  48. package/src/background-jobs/job.js +9 -0
  49. package/src/background-jobs/store.js +5 -3
  50. package/src/background-jobs/types.js +1 -1
  51. package/src/background-jobs/worker.js +1 -1
  52. package/src/cli/commands/db/tenants/check.js +1 -1
  53. package/src/cli/commands/db/tenants/migrate.js +12 -6
  54. package/src/configuration.js +21 -9
  55. package/src/database/migrator.js +2 -2
  56. package/src/database/record/index.js +6 -3
  57. package/src/http-server/websocket-event-log-store.js +1 -1
  58. package/src/jobs/prune-terminal-background-jobs.js +3 -0
  59. package/src/sync/server-change-feed.js +1 -1
  60. package/src/sync/server-sequence-allocator.js +1 -1
  61. package/src/sync/sync-scope-store.js +1 -1
  62. package/src/tenants/default-tenant-database-provisioning.js +3 -3
@@ -358,7 +358,7 @@ export default class VelociousHttpServerWebsocketEventLogStore {
358
358
  * @returns {Promise<?>} - Callback result.
359
359
  */
360
360
  async _withDb(callback) {
361
- return await this.configuration.ensureConnections({ name: "Websocket event log store" }, async (dbs) => {
361
+ return await this.configuration.ensureConnections({ databaseIdentifiers: [this.databaseIdentifier], name: "Websocket event log store" }, async (dbs) => {
362
362
  const db = dbs[this.databaseIdentifier];
363
363
  if (!db)
364
364
  throw new Error(`No database connection available for identifier: ${this.databaseIdentifier}`);
@@ -366,4 +366,4 @@ export default class VelociousHttpServerWebsocketEventLogStore {
366
366
  });
367
367
  }
368
368
  }
369
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vic29ja2V0LWV2ZW50LWxvZy1zdG9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9odHRwLXNlcnZlci93ZWJzb2NrZXQtZXZlbnQtbG9nLXN0b3JlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sUUFBUSxDQUFBO0FBQ2pDLE9BQU8sU0FBUyxNQUFNLGlDQUFpQyxDQUFBO0FBQ3ZELE9BQU8sTUFBTSxNQUFNLGNBQWMsQ0FBQTtBQUVqQyxNQUFNLFlBQVksR0FBRywwQkFBMEIsQ0FBQTtBQUMvQyxNQUFNLHFCQUFxQixHQUFHLDJCQUEyQixDQUFBO0FBQ3pELE1BQU0sb0JBQW9CLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUE7QUFDM0MsTUFBTSxNQUFNLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQTtBQUU1Qjs7Ozs7Ozs7R0FRRztBQUVIOzs7O0dBSUc7QUFFSDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHNDQUFzQyxDQUFDLGFBQWE7SUFDbEUsSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQTtJQUVyQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDWCxLQUFLLEdBQUcsSUFBSSx5Q0FBeUMsQ0FBQyxFQUFDLGFBQWEsRUFBQyxDQUFDLENBQUE7UUFDdEUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUE7SUFDbEMsQ0FBQztJQUVELE9BQU8sS0FBSyxDQUFBO0FBQ2QsQ0FBQztBQUVELE1BQU0sQ0FBQyxPQUFPLE9BQU8seUNBQXlDO0lBQzVEOzs7Ozs7T0FNRztJQUNILFlBQVksRUFBQyxhQUFhLEVBQUUsa0JBQWtCLEdBQUcsU0FBUyxFQUFFLFdBQVcsR0FBRyxvQkFBb0IsRUFBQztRQUM3RixJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQTtR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TUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLEVBQUMsSUFBSSxFQUFFLDJCQUEyQixFQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQ25HLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQTtZQUV2QyxJQUFJLENBQUMsRUFBRTtnQkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLG9EQUFvRCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFBO1lBRXZHLE9BQU8sTUFBTSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDM0IsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHtyYW5kb21VVUlEfSBmcm9tIFwiY3J5cHRvXCJcbmltcG9ydCBUYWJsZURhdGEgZnJvbSBcIi4uL2RhdGFiYXNlL3RhYmxlLWRhdGEvaW5kZXguanNcIlxuaW1wb3J0IExvZ2dlciBmcm9tIFwiLi4vbG9nZ2VyLmpzXCJcblxuY29uc3QgRVZFTlRTX1RBQkxFID0gXCJ3ZWJzb2NrZXRfY2hhbm5lbF9ldmVudHNcIlxuY29uc3QgUkVQTEFZX0NIQU5ORUxTX1RBQkxFID0gXCJ3ZWJzb2NrZXRfcmVwbGF5X2NoYW5uZWxzXCJcbmNvbnN0IERFRkFVTFRfUkVURU5USU9OX01TID0gMTAgKiA2MCAqIDEwMDBcbmNvbnN0IHN0b3JlcyA9IG5ldyBXZWFrTWFwKClcblxuLyoqXG4gKiBXZWJzb2NrZXRFdmVudFJvdyB0eXBlLlxuICogQHR5cGVkZWYge29iamVjdH0gV2Vic29ja2V0RXZlbnRSb3dcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjaGFubmVsIC0gQ2hhbm5lbCBuYW1lLlxuICogQHByb3BlcnR5IHtEYXRlIHwgc3RyaW5nfSBjcmVhdGVkX2F0IC0gQ3JlYXRpb24gdGltZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpZCAtIEV2ZW50IGlkLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHBheWxvYWRfanNvbiAtIFNlcmlhbGl6ZWQgcGF5bG9hZC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyIHwgc3RyaW5nfSBzZXF1ZW5jZSAtIFNlcXVlbmNlIG51bWJlci5cbiAqL1xuXG4vKipcbiAqIFdlYnNvY2tldFJlcGxheUNoYW5uZWxSb3cgdHlwZS5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IFdlYnNvY2tldFJlcGxheUNoYW5uZWxSb3dcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjaGFubmVsIC0gQ2hhbm5lbCBuYW1lLlxuICovXG5cbi8qKlxuICogUnVucyB0aGUgd2Vic29ja2V0RXZlbnRMb2dTdG9yZUZvckNvbmZpZ3VyYXRpb24gaGVscGVyLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9IGNvbmZpZ3VyYXRpb24gLSBDb25maWd1cmF0aW9uLlxuICogQHJldHVybnMge1ZlbG9jaW91c0h0dHBTZXJ2ZXJXZWJzb2NrZXRFdmVudExvZ1N0b3JlfSAtIFNoYXJlZCBzdG9yZSBpbnN0YW5jZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdlYnNvY2tldEV2ZW50TG9nU3RvcmVGb3JDb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb24pIHtcbiAgbGV0IHN0b3JlID0gc3RvcmVzLmdldChjb25maWd1cmF0aW9uKVxuXG4gIGlmICghc3RvcmUpIHtcbiAgICBzdG9yZSA9IG5ldyBWZWxvY2lvdXNIdHRwU2VydmVyV2Vic29ja2V0RXZlbnRMb2dTdG9yZSh7Y29uZmlndXJhdGlvbn0pXG4gICAgc3RvcmVzLnNldChjb25maWd1cmF0aW9uLCBzdG9yZSlcbiAgfVxuXG4gIHJldHVybiBzdG9yZVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZWxvY2lvdXNIdHRwU2VydmVyV2Vic29ja2V0RXZlbnRMb2dTdG9yZSB7XG4gIC8qKlxuICAgKiBSdW5zIGNvbnN0cnVjdG9yLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSBhcmdzLmNvbmZpZ3VyYXRpb24gLSBDb25maWd1cmF0aW9uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3MuZGF0YWJhc2VJZGVudGlmaWVyXSAtIERhdGFiYXNlIGlkZW50aWZpZXIuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbYXJncy5yZXRlbnRpb25Nc10gLSBFdmVudCByZXRlbnRpb24gaW4gbWlsbGlzZWNvbmRzLlxuICAgKi9cbiAgY29uc3RydWN0b3Ioe2NvbmZpZ3VyYXRpb24sIGRhdGFiYXNlSWRlbnRpZmllciA9IFwiZGVmYXVsdFwiLCByZXRlbnRpb25NcyA9IERFRkFVTFRfUkVURU5USU9OX01TfSkge1xuICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb25cbiAgICB0aGlzLmRhdGFiYXNlSWRlbnRpZmllciA9IGRhdGFiYXNlSWRlbnRpZmllclxuICAgIHRoaXMucmV0ZW50aW9uTXMgPSByZXRlbnRpb25Nc1xuICAgIHRoaXMubG9nZ2VyID0gbmV3IExvZ2dlcih0aGlzKVxuICAgIHRoaXMuX2lzUmVhZHkgPSBmYWxzZVxuICAgIHRoaXMuX3JlYWR5UHJvbWlzZSA9IG51bGxcbiAgICAvKipcbiAgICAgKiBOYXJyb3dzIHRoZSBydW50aW1lIHZhbHVlIHRvIHRoZSBkb2N1bWVudGVkIHR5cGUuXG4gICAgICogQHR5cGUge01hcDxzdHJpbmcsIG51bWJlcj59ICovXG4gICAgdGhpcy5faW50ZXJlc3RlZENoYW5uZWxzID0gbmV3IE1hcCgpXG4gIH1cblxuICAvKipcbiAgICogUnVucyBlbnN1cmUgcmVhZHkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gcmVhZHkuXG4gICAqL1xuICBhc3luYyBlbnN1cmVSZWFkeSgpIHtcbiAgICBpZiAoYXdhaXQgdGhpcy5fc2NoZW1hUmVhZHkoKSkgcmV0dXJuXG5cbiAgICBpZiAodGhpcy5fcmVhZHlQcm9taXNlKSByZXR1cm4gYXdhaXQgdGhpcy5fcmVhZHlQcm9taXNlXG5cbiAgICB0aGlzLl9yZWFkeVByb21pc2UgPSAoYXN5bmMgKCkgPT4ge1xuICAgICAgdGhpcy5jb25maWd1cmF0aW9uLnNldEN1cnJlbnQoKVxuICAgICAgYXdhaXQgdGhpcy5fZW5zdXJlU2NoZW1hKClcbiAgICAgIHRoaXMuX2lzUmVhZHkgPSB0cnVlXG4gICAgfSkoKVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuX3JlYWR5UHJvbWlzZVxuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAoIXRoaXMuX2lzUmVhZHkpIHtcbiAgICAgICAgdGhpcy5fcmVhZHlQcm9taXNlID0gbnVsbFxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZS12YWxpZGF0ZXMgY2FjaGVkIHNjaGVtYSByZWFkaW5lc3MgYmVjYXVzZSB0cmFuc2FjdGlvbmFsIERETCBjYW4gcm9sbCB0aGUgdGFibGVzIGJhY2suXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fSAtIFdoZXRoZXIgdGhlIGNhY2hlZCByZWFkeSBzdGF0ZSBpcyBzdGlsbCB2YWxpZC5cbiAgICovXG4gIGFzeW5jIF9zY2hlbWFSZWFkeSgpIHtcbiAgICBpZiAoIXRoaXMuX2lzUmVhZHkpIHJldHVybiBmYWxzZVxuICAgIGlmIChhd2FpdCB0aGlzLl9zY2hlbWFQcmVzZW50KCkpIHJldHVybiB0cnVlXG5cbiAgICB0aGlzLl9pc1JlYWR5ID0gZmFsc2VcbiAgICB0aGlzLl9yZWFkeVByb21pc2UgPSBudWxsXG5cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHNjaGVtYSBwcmVzZW50LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxib29sZWFuPn0gLSBXaGV0aGVyIGJvdGggZXZlbnQtbG9nIHRhYmxlcyBwaHlzaWNhbGx5IGV4aXN0LlxuICAgKi9cbiAgYXN5bmMgX3NjaGVtYVByZXNlbnQoKSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuX3dpdGhEYihhc3luYyAoZGIpID0+XG4gICAgICBhd2FpdCBkYi50YWJsZUV4aXN0cyhFVkVOVFNfVEFCTEUpICYmIGF3YWl0IGRiLnRhYmxlRXhpc3RzKFJFUExBWV9DSEFOTkVMU19UQUJMRSlcbiAgICApXG4gIH1cblxuICAvKipcbiAgICogUnVucyBhcHBlbmQgZXZlbnQuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MuY2hhbm5lbCAtIENoYW5uZWwgbmFtZS5cbiAgICogQHBhcmFtIHs/fSBhcmdzLnBheWxvYWQgLSBFdmVudCBwYXlsb2FkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx7Y2hhbm5lbDogc3RyaW5nLCBjcmVhdGVkQXQ6IHN0cmluZywgaWQ6IHN0cmluZywgcGF5bG9hZDogP30+fSAtIFBlcnNpc3RlZCBldmVudCByb3cuXG4gICAqL1xuICBhc3luYyBhcHBlbmRFdmVudCh7Y2hhbm5lbCwgcGF5bG9hZH0pIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZVJlYWR5KClcblxuICAgIGNvbnN0IGlkID0gcmFuZG9tVVVJRCgpXG4gICAgY29uc3QgY3JlYXRlZEF0ID0gbmV3IERhdGUoKVxuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuX3dpdGhEYihhc3luYyAoZGIpID0+IHtcbiAgICAgIGF3YWl0IGRiLmluc2VydCh7XG4gICAgICAgIHRhYmxlTmFtZTogRVZFTlRTX1RBQkxFLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgY2hhbm5lbCxcbiAgICAgICAgICBjcmVhdGVkX2F0OiBjcmVhdGVkQXQsXG4gICAgICAgICAgaWQsXG4gICAgICAgICAgcGF5bG9hZF9qc29uOiBKU09OLnN0cmluZ2lmeShwYXlsb2FkKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgcmV0dXJuIHtjaGFubmVsLCBjcmVhdGVkQXQ6IGNyZWF0ZWRBdC50b0lTT1N0cmluZygpLCBpZCwgcGF5bG9hZH1cbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgbWFyayBjaGFubmVsIGludGVyZXN0ZWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjaGFubmVsIC0gQ2hhbm5lbCBuYW1lLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIHRoZSBjaGFubmVsIGludGVyZXN0IHdhcyBwZXJzaXN0ZWQuXG4gICAqL1xuICBhc3luYyBtYXJrQ2hhbm5lbEludGVyZXN0ZWQoY2hhbm5lbCkge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlUmVhZHkoKVxuXG4gICAgY29uc3QgaW50ZXJlc3RlZFVudGlsID0gbmV3IERhdGUoRGF0ZS5ub3coKSArIHRoaXMucmV0ZW50aW9uTXMpXG5cbiAgICB0aGlzLl9pbnRlcmVzdGVkQ2hhbm5lbHMuc2V0KGNoYW5uZWwsIGludGVyZXN0ZWRVbnRpbC5nZXRUaW1lKCkpXG5cbiAgICBhd2FpdCB0aGlzLl93aXRoRGIoYXN5bmMgKGRiKSA9PiB7XG4gICAgICBhd2FpdCB0aGlzLl91cHNlcnRSZXBsYXlDaGFubmVsSW50ZXJlc3QoZGIsIHtjaGFubmVsLCBpbnRlcmVzdGVkVW50aWx9KVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogUnVucyBzaG91bGQgcGVyc2lzdCBjaGFubmVsLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2hhbm5lbCAtIENoYW5uZWwgbmFtZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59IC0gV2hldGhlciB0aGUgY2hhbm5lbCBzaG91bGQgYmUgcGVyc2lzdGVkIGZvciByZXBsYXkuXG4gICAqL1xuICBhc3luYyBzaG91bGRQZXJzaXN0Q2hhbm5lbChjaGFubmVsKSB7XG4gICAgaWYgKHRoaXMuX2NoYW5uZWxJbnRlcmVzdENhY2hlZChjaGFubmVsKSkgcmV0dXJuIHRydWVcbiAgICBpZiAodGhpcy5faW50ZXJlc3RlZENoYW5uZWxzLnNpemUgPT09IDApIHJldHVybiBmYWxzZVxuXG4gICAgYXdhaXQgdGhpcy5lbnN1cmVSZWFkeSgpXG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5fd2l0aERiKGFzeW5jIChkYikgPT4ge1xuICAgICAgY29uc3Qgcm93cyA9IGF3YWl0IGRiXG4gICAgICAgIC5uZXdRdWVyeSgpXG4gICAgICAgIC5mcm9tKFJFUExBWV9DSEFOTkVMU19UQUJMRSlcbiAgICAgICAgLndoZXJlKHtjaGFubmVsfSlcbiAgICAgICAgLndoZXJlKGBpbnRlcmVzdGVkX3VudGlsID4gJHtkYi5xdW90ZShuZXcgRGF0ZSgpKX1gKVxuICAgICAgICAubGltaXQoMSlcbiAgICAgICAgLnJlc3VsdHMoKVxuXG4gICAgICByZXR1cm4gcm93cy5sZW5ndGggPiAwXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGNoYW5uZWwgaW50ZXJlc3QgY2FjaGVkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2hhbm5lbCAtIENoYW5uZWwgbmFtZS5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gV2hldGhlciBtZW1vcnkgY2FjaGUgc3RpbGwgbWFya3MgdGhlIGNoYW5uZWwgaW50ZXJlc3RlZC5cbiAgICovXG4gIF9jaGFubmVsSW50ZXJlc3RDYWNoZWQoY2hhbm5lbCkge1xuICAgIGNvbnN0IGludGVyZXN0ZWRVbnRpbCA9IHRoaXMuX2ludGVyZXN0ZWRDaGFubmVscy5nZXQoY2hhbm5lbClcblxuICAgIGlmICghaW50ZXJlc3RlZFVudGlsKSByZXR1cm4gZmFsc2VcbiAgICBpZiAoaW50ZXJlc3RlZFVudGlsID4gRGF0ZS5ub3coKSkgcmV0dXJuIHRydWVcblxuICAgIHRoaXMuX2ludGVyZXN0ZWRDaGFubmVscy5kZWxldGUoY2hhbm5lbClcblxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgZ2V0IGV2ZW50IGJ5IGlkLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLmNoYW5uZWwgLSBDaGFubmVsIG5hbWUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLmlkIC0gRXZlbnQgaWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHtjaGFubmVsOiBzdHJpbmcsIGNyZWF0ZWRBdDogc3RyaW5nLCBpZDogc3RyaW5nLCBwYXlsb2FkOiA/LCBzZXF1ZW5jZTogbnVtYmVyfSB8IG51bGw+fSAtIEV2ZW50IHJvdyBvciBudWxsLlxuICAgKi9cbiAgYXN5bmMgZ2V0RXZlbnRCeUlkKHtjaGFubmVsLCBpZH0pIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZVJlYWR5KClcblxuICAgIHJldHVybiBhd2FpdCB0aGlzLl93aXRoRGIoYXN5bmMgKGRiKSA9PiB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5fZ2V0RXZlbnRCeUlkKHtjaGFubmVsLCBkYiwgaWR9KVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogUnVucyBsYXRlc3Qgc2VxdWVuY2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjaGFubmVsIC0gQ2hhbm5lbCBuYW1lLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxudW1iZXIgfCBudWxsPn0gLSBMYXRlc3QgY2hhbm5lbCBzZXF1ZW5jZS5cbiAgICovXG4gIGFzeW5jIGxhdGVzdFNlcXVlbmNlKGNoYW5uZWwpIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZVJlYWR5KClcblxuICAgIHJldHVybiBhd2FpdCB0aGlzLl93aXRoRGIoYXN5bmMgKGRiKSA9PiB7XG4gICAgICBjb25zdCByb3dzID0gYXdhaXQgZGJcbiAgICAgICAgLm5ld1F1ZXJ5KClcbiAgICAgICAgLmZyb20oRVZFTlRTX1RBQkxFKVxuICAgICAgICAud2hlcmUoe2NoYW5uZWx9KVxuICAgICAgICAub3JkZXIoXCJzZXF1ZW5jZSBERVNDXCIpXG4gICAgICAgIC5saW1pdCgxKVxuICAgICAgICAucmVzdWx0cygpXG4gICAgICBjb25zdCByb3cgPSAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsID8+IHwgdW5kZWZpbmVkfSAqLyAocm93c1swXSlcblxuICAgICAgaWYgKCFyb3cpIHJldHVybiBudWxsXG5cbiAgICAgIHJldHVybiBOdW1iZXIocm93LnNlcXVlbmNlKVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogUnVucyBnZXQgZXZlbnRzIGFmdGVyLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLmNoYW5uZWwgLSBDaGFubmVsIG5hbWUuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBhcmdzLnNlcXVlbmNlIC0gTG93ZXIgYm91bmQgc2VxdWVuY2UuXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZH0gW2FyZ3MudXBUb1NlcXVlbmNlXSAtIEluY2x1c2l2ZSBjZWlsaW5nIHNlcXVlbmNlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxBcnJheTx7Y2hhbm5lbDogc3RyaW5nLCBjcmVhdGVkQXQ6IHN0cmluZywgaWQ6IHN0cmluZywgcGF5bG9hZDogPywgc2VxdWVuY2U6IG51bWJlcn0+Pn0gLSBPcmRlcmVkIGV2ZW50cy5cbiAgICovXG4gIGFzeW5jIGdldEV2ZW50c0FmdGVyKHtjaGFubmVsLCBzZXF1ZW5jZSwgdXBUb1NlcXVlbmNlfSkge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlUmVhZHkoKVxuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuX3dpdGhEYihhc3luYyAoZGIpID0+IHtcbiAgICAgIGNvbnN0IHF1ZXJ5ID0gZGJcbiAgICAgICAgLm5ld1F1ZXJ5KClcbiAgICAgICAgLmZyb20oRVZFTlRTX1RBQkxFKVxuICAgICAgICAud2hlcmUoe2NoYW5uZWx9KVxuICAgICAgICAud2hlcmUoYHNlcXVlbmNlID4gJHtkYi5xdW90ZShzZXF1ZW5jZSl9YClcbiAgICAgICAgLm9yZGVyKFwic2VxdWVuY2UgQVNDXCIpXG5cbiAgICAgIGlmICh0eXBlb2YgdXBUb1NlcXVlbmNlID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgIHF1ZXJ5LndoZXJlKGBzZXF1ZW5jZSA8PSAke2RiLnF1b3RlKHVwVG9TZXF1ZW5jZSl9YClcbiAgICAgIH1cblxuICAgICAgY29uc3Qgcm93cyA9IC8qKiBAdHlwZSB7V2Vic29ja2V0RXZlbnRSb3dbXX0gKi8gKGF3YWl0IHF1ZXJ5LnJlc3VsdHMoKSlcblxuICAgICAgcmV0dXJuIHJvd3MubWFwKChyb3cpID0+IHRoaXMuX25vcm1hbGl6ZUV2ZW50Um93KHJvdykpXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGNsZWFudXAgZXhwaXJlZC5cbiAgICogQHBhcmFtIHtvYmplY3R9IFthcmdzXSAtIE9wdGlvbnMuXG4gICAqIEBwYXJhbSB7RGF0ZX0gW2FyZ3Mubm93XSAtIENsZWFudXAgcmVmZXJlbmNlIHRpbWUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gY2xlYW51cCBjb21wbGV0ZXMuXG4gICAqL1xuICBhc3luYyBjbGVhbnVwRXhwaXJlZCh7bm93ID0gbmV3IERhdGUoKX0gPSB7fSkge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlUmVhZHkoKVxuXG4gICAgY29uc3QgY3V0b2ZmID0gbmV3IERhdGUobm93LmdldFRpbWUoKSAtIHRoaXMucmV0ZW50aW9uTXMpXG5cbiAgICBhd2FpdCB0aGlzLl93aXRoRGIoYXN5bmMgKGRiKSA9PiB7XG4gICAgICBjb25zdCBleHBpcmVkRXZlbnRSb3dzID0gLyoqIEB0eXBlIHtBcnJheTx7aWQ6IHN0cmluZ30+fSAqLyAoYXdhaXQgZGJcbiAgICAgICAgLm5ld1F1ZXJ5KClcbiAgICAgICAgLmZyb20oRVZFTlRTX1RBQkxFKVxuICAgICAgICAud2hlcmUoYGNyZWF0ZWRfYXQgPD0gJHtkYi5xdW90ZShjdXRvZmYpfWApXG4gICAgICAgIC5yZXN1bHRzKCkpXG4gICAgICBjb25zdCBleHBpcmVkUmVwbGF5Q2hhbm5lbFJvd3MgPSAvKiogQHR5cGUge1dlYnNvY2tldFJlcGxheUNoYW5uZWxSb3dbXX0gKi8gKGF3YWl0IGRiXG4gICAgICAgIC5uZXdRdWVyeSgpXG4gICAgICAgIC5mcm9tKFJFUExBWV9DSEFOTkVMU19UQUJMRSlcbiAgICAgICAgLndoZXJlKGBpbnRlcmVzdGVkX3VudGlsIDw9ICR7ZGIucXVvdGUobm93KX1gKVxuICAgICAgICAucmVzdWx0cygpKVxuXG4gICAgICBmb3IgKGNvbnN0IGV4cGlyZWRFdmVudFJvdyBvZiBleHBpcmVkRXZlbnRSb3dzKSB7XG4gICAgICAgIGF3YWl0IGRiLmRlbGV0ZSh7XG4gICAgICAgICAgdGFibGVOYW1lOiBFVkVOVFNfVEFCTEUsXG4gICAgICAgICAgY29uZGl0aW9uczoge2lkOiBleHBpcmVkRXZlbnRSb3cuaWR9XG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgZXhwaXJlZFJlcGxheUNoYW5uZWxSb3cgb2YgZXhwaXJlZFJlcGxheUNoYW5uZWxSb3dzKSB7XG4gICAgICAgIGF3YWl0IGRiLmRlbGV0ZSh7XG4gICAgICAgICAgdGFibGVOYW1lOiBSRVBMQVlfQ0hBTk5FTFNfVEFCTEUsXG4gICAgICAgICAgY29uZGl0aW9uczoge2NoYW5uZWw6IGV4cGlyZWRSZXBsYXlDaGFubmVsUm93LmNoYW5uZWx9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGFzeW5jIF9lbnN1cmVTY2hlbWEoKSB7XG4gICAgYXdhaXQgdGhpcy5fd2l0aERiKGFzeW5jIChkYikgPT4ge1xuICAgICAgYXdhaXQgdGhpcy5fZW5zdXJlRXZlbnRzVGFibGUoZGIpXG4gICAgICBhd2FpdCB0aGlzLl9lbnN1cmVSZXBsYXlDaGFubmVsc1RhYmxlKGRiKVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogUnVucyBlbnN1cmUgZXZlbnRzIHRhYmxlLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2RhdGFiYXNlL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0fSBkYiAtIERhdGFiYXNlIGNvbm5lY3Rpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gY29tcGxldGUuXG4gICAqL1xuICBhc3luYyBfZW5zdXJlRXZlbnRzVGFibGUoZGIpIHtcbiAgICB0aGlzLmxvZ2dlci5pbmZvKFwiQXBwbHlpbmcgd2Vic29ja2V0IGV2ZW50LWxvZyBzY2hlbWFcIilcblxuICAgIGlmIChhd2FpdCBkYi50YWJsZUV4aXN0cyhFVkVOVFNfVEFCTEUpKSB7XG4gICAgICB0aGlzLmxvZ2dlci5pbmZvKFwiV2Vic29ja2V0IGV2ZW50LWxvZyB0YWJsZSBhbHJlYWR5IGV4aXN0cyAtIHNraXBwaW5nIGNyZWF0ZVwiKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgZXZlbnRUYWJsZSA9IG5ldyBUYWJsZURhdGEoRVZFTlRTX1RBQkxFLCB7aWZOb3RFeGlzdHM6IHRydWV9KVxuXG4gICAgZXZlbnRUYWJsZS5pbnRlZ2VyKFwic2VxdWVuY2VcIiwge2F1dG9JbmNyZW1lbnQ6IHRydWUsIG51bGw6IGZhbHNlLCBwcmltYXJ5S2V5OiB0cnVlfSlcbiAgICBldmVudFRhYmxlLnN0cmluZyhcImlkXCIsIHtpbmRleDogdHJ1ZSwgbnVsbDogZmFsc2V9KVxuICAgIGV2ZW50VGFibGUuc3RyaW5nKFwiY2hhbm5lbFwiLCB7aW5kZXg6IHRydWUsIG51bGw6IGZhbHNlfSlcbiAgICBldmVudFRhYmxlLnRleHQoXCJwYXlsb2FkX2pzb25cIiwge251bGw6IGZhbHNlfSlcbiAgICBldmVudFRhYmxlLmRhdGV0aW1lKFwiY3JlYXRlZF9hdFwiLCB7aW5kZXg6IHRydWUsIG51bGw6IGZhbHNlfSlcblxuICAgIGF3YWl0IGRiLmNyZWF0ZVRhYmxlKGV2ZW50VGFibGUpXG4gIH1cblxuICAvKipcbiAgICogUnVucyBlbnN1cmUgcmVwbGF5IGNoYW5uZWxzIHRhYmxlLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2RhdGFiYXNlL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0fSBkYiAtIERhdGFiYXNlIGNvbm5lY3Rpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gY29tcGxldGUuXG4gICAqL1xuICBhc3luYyBfZW5zdXJlUmVwbGF5Q2hhbm5lbHNUYWJsZShkYikge1xuICAgIGlmIChhd2FpdCBkYi50YWJsZUV4aXN0cyhSRVBMQVlfQ0hBTk5FTFNfVEFCTEUpKSByZXR1cm5cblxuICAgIGNvbnN0IHJlcGxheUNoYW5uZWxUYWJsZSA9IG5ldyBUYWJsZURhdGEoUkVQTEFZX0NIQU5ORUxTX1RBQkxFLCB7aWZOb3RFeGlzdHM6IHRydWV9KVxuXG4gICAgcmVwbGF5Q2hhbm5lbFRhYmxlLnN0cmluZyhcImNoYW5uZWxcIiwge251bGw6IGZhbHNlLCBwcmltYXJ5S2V5OiB0cnVlfSlcbiAgICByZXBsYXlDaGFubmVsVGFibGUuZGF0ZXRpbWUoXCJpbnRlcmVzdGVkX3VudGlsXCIsIHtpbmRleDogdHJ1ZSwgbnVsbDogZmFsc2V9KVxuXG4gICAgYXdhaXQgZGIuY3JlYXRlVGFibGUocmVwbGF5Q2hhbm5lbFRhYmxlKVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgZ2V0IGV2ZW50IGJ5IGlkLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLmNoYW5uZWwgLSBDaGFubmVsIG5hbWUuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vZGF0YWJhc2UvZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHR9IGFyZ3MuZGIgLSBEYXRhYmFzZSBjb25uZWN0aW9uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5pZCAtIEV2ZW50IGlkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx7Y2hhbm5lbDogc3RyaW5nLCBjcmVhdGVkQXQ6IHN0cmluZywgaWQ6IHN0cmluZywgcGF5bG9hZDogPywgc2VxdWVuY2U6IG51bWJlcn0gfCBudWxsPn0gLSBFdmVudCByb3cgb3IgbnVsbC5cbiAgICovXG4gIGFzeW5jIF9nZXRFdmVudEJ5SWQoe2NoYW5uZWwsIGRiLCBpZH0pIHtcbiAgICBjb25zdCByb3dzID0gLyoqIEB0eXBlIHtXZWJzb2NrZXRFdmVudFJvd1tdfSAqLyAoYXdhaXQgZGJcbiAgICAgIC5uZXdRdWVyeSgpXG4gICAgICAuZnJvbShFVkVOVFNfVEFCTEUpXG4gICAgICAud2hlcmUoe2NoYW5uZWwsIGlkfSlcbiAgICAgIC5saW1pdCgxKVxuICAgICAgLnJlc3VsdHMoKSlcblxuICAgIGlmICghcm93c1swXSkgcmV0dXJuIG51bGxcblxuICAgIHJldHVybiB0aGlzLl9ub3JtYWxpemVFdmVudFJvdyhyb3dzWzBdKVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgbm9ybWFsaXplIGV2ZW50IHJvdy5cbiAgICogQHBhcmFtIHtXZWJzb2NrZXRFdmVudFJvd30gcm93IC0gUmF3IHJvdy5cbiAgICogQHJldHVybnMge3tjaGFubmVsOiBzdHJpbmcsIGNyZWF0ZWRBdDogc3RyaW5nLCBpZDogc3RyaW5nLCBwYXlsb2FkOiA/LCBzZXF1ZW5jZTogbnVtYmVyfX0gLSBOb3JtYWxpemVkIHJvdy5cbiAgICovXG4gIF9ub3JtYWxpemVFdmVudFJvdyhyb3cpIHtcbiAgICBjb25zdCBjcmVhdGVkQXRWYWx1ZSA9IHJvdy5jcmVhdGVkX2F0XG5cbiAgICByZXR1cm4ge1xuICAgICAgY2hhbm5lbDogcm93LmNoYW5uZWwsXG4gICAgICBjcmVhdGVkQXQ6IGNyZWF0ZWRBdFZhbHVlIGluc3RhbmNlb2YgRGF0ZSA/IGNyZWF0ZWRBdFZhbHVlLnRvSVNPU3RyaW5nKCkgOiBuZXcgRGF0ZShjcmVhdGVkQXRWYWx1ZSkudG9JU09TdHJpbmcoKSxcbiAgICAgIGlkOiByb3cuaWQsXG4gICAgICBwYXlsb2FkOiBKU09OLnBhcnNlKHJvdy5wYXlsb2FkX2pzb24pLFxuICAgICAgc2VxdWVuY2U6IE51bWJlcihyb3cuc2VxdWVuY2UpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgdXBzZXJ0IHJlcGxheSBjaGFubmVsIGludGVyZXN0LlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2RhdGFiYXNlL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0fSBkYiAtIERhdGFiYXNlIGNvbm5lY3Rpb24uXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MuY2hhbm5lbCAtIENoYW5uZWwgbmFtZS5cbiAgICogQHBhcmFtIHtEYXRlfSBhcmdzLmludGVyZXN0ZWRVbnRpbCAtIFJldGVudGlvbiBkZWFkbGluZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiB0aGUgcmVwbGF5LWNoYW5uZWwgcm93IHdhcyB1cHNlcnRlZC5cbiAgICovXG4gIGFzeW5jIF91cHNlcnRSZXBsYXlDaGFubmVsSW50ZXJlc3QoZGIsIHtjaGFubmVsLCBpbnRlcmVzdGVkVW50aWx9KSB7XG4gICAgYXdhaXQgZGIudXBzZXJ0KHtcbiAgICAgIGNvbmZsaWN0Q29sdW1uczogW1wiY2hhbm5lbFwiXSxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgY2hhbm5lbCxcbiAgICAgICAgaW50ZXJlc3RlZF91bnRpbDogaW50ZXJlc3RlZFVudGlsXG4gICAgICB9LFxuICAgICAgdGFibGVOYW1lOiBSRVBMQVlfQ0hBTk5FTFNfVEFCTEUsXG4gICAgICB1cGRhdGVDb2x1bW5zOiBbXCJpbnRlcmVzdGVkX3VudGlsXCJdXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHdpdGggZGIuXG4gICAqIEBwYXJhbSB7KGRiOiBpbXBvcnQoXCIuLi9kYXRhYmFzZS9kcml2ZXJzL2Jhc2UuanNcIikuZGVmYXVsdCkgPT4gUHJvbWlzZTw/Pn0gY2FsbGJhY2sgLSBDYWxsYmFjay5cbiAgICogQHJldHVybnMge1Byb21pc2U8Pz59IC0gQ2FsbGJhY2sgcmVzdWx0LlxuICAgKi9cbiAgYXN5bmMgX3dpdGhEYihjYWxsYmFjaykge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbmZpZ3VyYXRpb24uZW5zdXJlQ29ubmVjdGlvbnMoe25hbWU6IFwiV2Vic29ja2V0IGV2ZW50IGxvZyBzdG9yZVwifSwgYXN5bmMgKGRicykgPT4ge1xuICAgICAgY29uc3QgZGIgPSBkYnNbdGhpcy5kYXRhYmFzZUlkZW50aWZpZXJdXG5cbiAgICAgIGlmICghZGIpIHRocm93IG5ldyBFcnJvcihgTm8gZGF0YWJhc2UgY29ubmVjdGlvbiBhdmFpbGFibGUgZm9yIGlkZW50aWZpZXI6ICR7dGhpcy5kYXRhYmFzZUlkZW50aWZpZXJ9YClcblxuICAgICAgcmV0dXJuIGF3YWl0IGNhbGxiYWNrKGRiKVxuICAgIH0pXG4gIH1cbn1cbiJdfQ==
369
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vic29ja2V0LWV2ZW50LWxvZy1zdG9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9odHRwLXNlcnZlci93ZWJzb2NrZXQtZXZlbnQtbG9nLXN0b3JlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sUUFBUSxDQUFBO0FBQ2pDLE9BQU8sU0FBUyxNQUFNLGlDQUFpQyxDQUFBO0FBQ3ZELE9BQU8sTUFBTSxNQUFNLGNBQWMsQ0FBQTtBQUVqQyxNQUFNLFlBQVksR0FBRywwQkFBMEIsQ0FBQTtBQUMvQyxNQUFNLHFCQUFxQixHQUFHLDJCQUEyQixDQUFBO0FBQ3pELE1BQU0sb0JBQW9CLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUE7QUFDM0MsTUFBTSxNQUFNLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQTtBQUU1Qjs7Ozs7Ozs7R0FRRztBQUVIOzs7O0dBSUc7QUFFSDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHNDQUFzQyxDQUFDLGFBQWE7SUFDbEUsSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQTtJQUVyQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDWCxLQUFLLEdBQUcsSUFBSSx5Q0FBeUMsQ0FBQyxFQUFDLGFBQWEsRUFBQyxDQUFDLENBQUE7UUFDdEUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUE7SUFDbEMsQ0FBQztJQUVELE9BQU8sS0FBSyxDQUFBO0FBQ2QsQ0FBQztBQUVELE1BQU0sQ0FBQyxPQUFPLE9BQU8seUNBQXlDO0lBQzVEOzs7Ozs7T0FNRztJQUNILFlBQVksRUFBQyxhQUFhLEVBQUUsa0JBQWtCLEdBQUcsU0FBUyxFQUFFLFdBQVcsR0FBRyxvQkFBb0IsRUFBQztRQUM3RixJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQTtRQUNsQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsa0JBQWtCLENBQUE7UUFDNUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUE7UUFDOUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUM5QixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQTtRQUNyQixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQTtRQUN6Qjs7eUNBRWlDO1FBQ2pDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFBO0lBQ3RDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsV0FBVztRQUNmLElBQUksTUFBTSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQUUsT0FBTTtRQUVyQyxJQUFJLElBQUksQ0FBQyxhQUFhO1lBQUUsT0FBTyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUE7UUFFdkQsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLEtBQUssSUFBSSxFQUFFO1lBQy9CLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFLENBQUE7WUFDL0IsTUFBTSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUE7WUFDMUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUE7UUFDdEIsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtRQUVKLElBQUksQ0FBQztZQUNILE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQTtRQUMxQixDQUFDO2dCQUFTLENBQUM7WUFDVCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNuQixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQTtZQUMzQixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsWUFBWTtRQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPLEtBQUssQ0FBQTtRQUNoQyxJQUFJLE1BQU0sSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUFFLE9BQU8sSUFBSSxDQUFBO1FBRTVDLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFBO1FBQ3JCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFBO1FBRXpCLE9BQU8sS0FBSyxDQUFBO0lBQ2QsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxjQUFjO1FBQ2xCLE9BQU8sTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUNyQyxNQUFNLEVBQUUsQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLElBQUksTUFBTSxFQUFFLENBQUMsV0FBVyxDQUFDLHFCQUFxQixDQUFDLENBQ2xGLENBQUE7SUFDSCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUM7UUFDbEMsTUFBTSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUE7UUFFeEIsTUFBTSxFQUFFLEdBQUcsVUFBVSxFQUFFLENBQUE7UUFDdkIsTUFBTSxTQUFTLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQTtRQUU1QixPQUFPLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUU7WUFDckMsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDO2dCQUNkLFNBQVMsRUFBRSxZQUFZO2dCQUN2QixJQUFJLEVBQUU7b0JBQ0osT0FBTztvQkFDUCxVQUFVLEVBQUUsU0FBUztvQkFDckIsRUFBRTtvQkFDRixZQUFZLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUM7aUJBQ3RDO2FBQ0YsQ0FBQyxDQUFBO1lBQ0YsT0FBTyxFQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLFdBQVcsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUMsQ0FBQTtRQUNuRSxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLHFCQUFxQixDQUFDLE9BQU87UUFDakMsTUFBTSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUE7UUFFeEIsTUFBTSxlQUFlLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUUvRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxlQUFlLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQTtRQUVoRSxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFO1lBQzlCLE1BQU0sSUFBSSxDQUFDLDRCQUE0QixDQUFDLEVBQUUsRUFBRSxFQUFDLE9BQU8sRUFBRSxlQUFlLEVBQUMsQ0FBQyxDQUFBO1FBQ3pFLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsb0JBQW9CLENBQUMsT0FBTztRQUNoQyxJQUFJLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQTtRQUNyRCxJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEtBQUssQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFBO1FBRXJELE1BQU0sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFBO1FBRXhCLE9BQU8sTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRTtZQUNyQyxNQUFNLElBQUksR0FBRyxNQUFNLEVBQUU7aUJBQ2xCLFFBQVEsRUFBRTtpQkFDVixJQUFJLENBQUMscUJBQXFCLENBQUM7aUJBQzNCLEtBQUssQ0FBQyxFQUFDLE9BQU8sRUFBQyxDQUFDO2lCQUNoQixLQUFLLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7aUJBQ25ELEtBQUssQ0FBQyxDQUFDLENBQUM7aUJBQ1IsT0FBTyxFQUFFLENBQUE7WUFFWixPQUFPLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFBO1FBQ3hCLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxzQkFBc0IsQ0FBQyxPQUFPO1FBQzVCLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUE7UUFFN0QsSUFBSSxDQUFDLGVBQWU7WUFBRSxPQUFPLEtBQUssQ0FBQTtRQUNsQyxJQUFJLGVBQWUsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQUUsT0FBTyxJQUFJLENBQUE7UUFFN0MsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUV4QyxPQUFPLEtBQUssQ0FBQTtJQUNkLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxLQUFLLENBQUMsWUFBWSxDQUFDLEVBQUMsT0FBTyxFQUFFLEVBQUUsRUFBQztRQUM5QixNQUFNLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQTtRQUV4QixPQUFPLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUU7WUFDckMsT0FBTyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBQyxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBQyxDQUFDLENBQUE7UUFDcEQsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxjQUFjLENBQUMsT0FBTztRQUMxQixNQUFNLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQTtRQUV4QixPQUFPLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUU7WUFDckMsTUFBTSxJQUFJLEdBQUcsTUFBTSxFQUFFO2lCQUNsQixRQUFRLEVBQUU7aUJBQ1YsSUFBSSxDQUFDLFlBQVksQ0FBQztpQkFDbEIsS0FBSyxDQUFDLEVBQUMsT0FBTyxFQUFDLENBQUM7aUJBQ2hCLEtBQUssQ0FBQyxlQUFlLENBQUM7aUJBQ3RCLEtBQUssQ0FBQyxDQUFDLENBQUM7aUJBQ1IsT0FBTyxFQUFFLENBQUE7WUFDWixNQUFNLEdBQUcsR0FBRyw0Q0FBNEMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1lBRWxFLElBQUksQ0FBQyxHQUFHO2dCQUFFLE9BQU8sSUFBSSxDQUFBO1lBRXJCLE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUM3QixDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsS0FBSyxDQUFDLGNBQWMsQ0FBQyxFQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFDO1FBQ3BELE1BQU0sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFBO1FBRXhCLE9BQU8sTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRTtZQUNyQyxNQUFNLEtBQUssR0FBRyxFQUFFO2lCQUNiLFFBQVEsRUFBRTtpQkFDVixJQUFJLENBQUMsWUFBWSxDQUFDO2lCQUNsQixLQUFLLENBQUMsRUFBQyxPQUFPLEVBQUMsQ0FBQztpQkFDaEIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO2lCQUN6QyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUE7WUFFeEIsSUFBSSxPQUFPLFlBQVksS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDckMsS0FBSyxDQUFDLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1lBQ3RELENBQUM7WUFFRCxNQUFNLElBQUksR0FBRyxrQ0FBa0MsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUE7WUFFdkUsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTtRQUN4RCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyxjQUFjLENBQUMsRUFBQyxHQUFHLEdBQUcsSUFBSSxJQUFJLEVBQUUsRUFBQyxHQUFHLEVBQUU7UUFDMUMsTUFBTSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUE7UUFFeEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUV6RCxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFO1lBQzlCLE1BQU0sZ0JBQWdCLEdBQUcsa0NBQWtDLENBQUMsQ0FBQyxNQUFNLEVBQUU7aUJBQ2xFLFFBQVEsRUFBRTtpQkFDVixJQUFJLENBQUMsWUFBWSxDQUFDO2lCQUNsQixLQUFLLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztpQkFDMUMsT0FBTyxFQUFFLENBQUMsQ0FBQTtZQUNiLE1BQU0sd0JBQXdCLEdBQUcsMENBQTBDLENBQUMsQ0FBQyxNQUFNLEVBQUU7aUJBQ2xGLFFBQVEsRUFBRTtpQkFDVixJQUFJLENBQUMscUJBQXFCLENBQUM7aUJBQzNCLEtBQUssQ0FBQyx1QkFBdUIsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2lCQUM3QyxPQUFPLEVBQUUsQ0FBQyxDQUFBO1lBRWIsS0FBSyxNQUFNLGVBQWUsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO2dCQUMvQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUM7b0JBQ2QsU0FBUyxFQUFFLFlBQVk7b0JBQ3ZCLFVBQVUsRUFBRSxFQUFDLEVBQUUsRUFBRSxlQUFlLENBQUMsRUFBRSxFQUFDO2lCQUNyQyxDQUFDLENBQUE7WUFDSixDQUFDO1lBRUQsS0FBSyxNQUFNLHVCQUF1QixJQUFJLHdCQUF3QixFQUFFLENBQUM7Z0JBQy9ELE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQztvQkFDZCxTQUFTLEVBQUUscUJBQXFCO29CQUNoQyxVQUFVLEVBQUUsRUFBQyxPQUFPLEVBQUUsdUJBQXVCLENBQUMsT0FBTyxFQUFDO2lCQUN2RCxDQUFDLENBQUE7WUFDSixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsS0FBSyxDQUFDLGFBQWE7UUFDakIsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRTtZQUM5QixNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsQ0FBQTtZQUNqQyxNQUFNLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUMzQyxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLGtCQUFrQixDQUFDLEVBQUU7UUFDekIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMscUNBQXFDLENBQUMsQ0FBQTtRQUV2RCxJQUFJLE1BQU0sRUFBRSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLDREQUE0RCxDQUFDLENBQUE7WUFDOUUsT0FBTTtRQUNSLENBQUM7UUFFRCxNQUFNLFVBQVUsR0FBRyxJQUFJLFNBQVMsQ0FBQyxZQUFZLEVBQUUsRUFBQyxXQUFXLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQTtRQUVuRSxVQUFVLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFDLGFBQWEsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQTtRQUNwRixVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUE7UUFDbkQsVUFBVSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsRUFBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFBO1FBQ3hELFVBQVUsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUMsSUFBSSxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUE7UUFDOUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsRUFBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFBO1FBRTdELE1BQU0sRUFBRSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUNsQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxFQUFFO1FBQ2pDLElBQUksTUFBTSxFQUFFLENBQUMsV0FBVyxDQUFDLHFCQUFxQixDQUFDO1lBQUUsT0FBTTtRQUV2RCxNQUFNLGtCQUFrQixHQUFHLElBQUksU0FBUyxDQUFDLHFCQUFxQixFQUFFLEVBQUMsV0FBVyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUE7UUFFcEYsa0JBQWtCLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxFQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUE7UUFDckUsa0JBQWtCLENBQUMsUUFBUSxDQUFDLGtCQUFrQixFQUFFLEVBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQTtRQUUzRSxNQUFNLEVBQUUsQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsQ0FBQTtJQUMxQyxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBQyxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBQztRQUNuQyxNQUFNLElBQUksR0FBRyxrQ0FBa0MsQ0FBQyxDQUFDLE1BQU0sRUFBRTthQUN0RCxRQUFRLEVBQUU7YUFDVixJQUFJLENBQUMsWUFBWSxDQUFDO2FBQ2xCLEtBQUssQ0FBQyxFQUFDLE9BQU8sRUFBRSxFQUFFLEVBQUMsQ0FBQzthQUNwQixLQUFLLENBQUMsQ0FBQyxDQUFDO2FBQ1IsT0FBTyxFQUFFLENBQUMsQ0FBQTtRQUViLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUE7UUFFekIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDekMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxrQkFBa0IsQ0FBQyxHQUFHO1FBQ3BCLE1BQU0sY0FBYyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUE7UUFFckMsT0FBTztZQUNMLE9BQU8sRUFBRSxHQUFHLENBQUMsT0FBTztZQUNwQixTQUFTLEVBQUUsY0FBYyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxXQUFXLEVBQUU7WUFDakgsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFO1lBQ1YsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQztZQUNyQyxRQUFRLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7U0FDL0IsQ0FBQTtJQUNILENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsS0FBSyxDQUFDLDRCQUE0QixDQUFDLEVBQUUsRUFBRSxFQUFDLE9BQU8sRUFBRSxlQUFlLEVBQUM7UUFDL0QsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDO1lBQ2QsZUFBZSxFQUFFLENBQUMsU0FBUyxDQUFDO1lBQzVCLElBQUksRUFBRTtnQkFDSixPQUFPO2dCQUNQLGdCQUFnQixFQUFFLGVBQWU7YUFDbEM7WUFDRCxTQUFTLEVBQUUscUJBQXFCO1lBQ2hDLGFBQWEsRUFBRSxDQUFDLGtCQUFrQixDQUFDO1NBQ3BDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRO1FBQ3BCLE9BQU8sTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLEVBQUMsbUJBQW1CLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsRUFBRSxJQUFJLEVBQUUsMkJBQTJCLEVBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDbkosTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO1lBRXZDLElBQUksQ0FBQyxFQUFFO2dCQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsb0RBQW9ELElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUE7WUFFdkcsT0FBTyxNQUFNLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUMzQixDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQge3JhbmRvbVVVSUR9IGZyb20gXCJjcnlwdG9cIlxuaW1wb3J0IFRhYmxlRGF0YSBmcm9tIFwiLi4vZGF0YWJhc2UvdGFibGUtZGF0YS9pbmRleC5qc1wiXG5pbXBvcnQgTG9nZ2VyIGZyb20gXCIuLi9sb2dnZXIuanNcIlxuXG5jb25zdCBFVkVOVFNfVEFCTEUgPSBcIndlYnNvY2tldF9jaGFubmVsX2V2ZW50c1wiXG5jb25zdCBSRVBMQVlfQ0hBTk5FTFNfVEFCTEUgPSBcIndlYnNvY2tldF9yZXBsYXlfY2hhbm5lbHNcIlxuY29uc3QgREVGQVVMVF9SRVRFTlRJT05fTVMgPSAxMCAqIDYwICogMTAwMFxuY29uc3Qgc3RvcmVzID0gbmV3IFdlYWtNYXAoKVxuXG4vKipcbiAqIFdlYnNvY2tldEV2ZW50Um93IHR5cGUuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBXZWJzb2NrZXRFdmVudFJvd1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGNoYW5uZWwgLSBDaGFubmVsIG5hbWUuXG4gKiBAcHJvcGVydHkge0RhdGUgfCBzdHJpbmd9IGNyZWF0ZWRfYXQgLSBDcmVhdGlvbiB0aW1lLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGlkIC0gRXZlbnQgaWQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcGF5bG9hZF9qc29uIC0gU2VyaWFsaXplZCBwYXlsb2FkLlxuICogQHByb3BlcnR5IHtudW1iZXIgfCBzdHJpbmd9IHNlcXVlbmNlIC0gU2VxdWVuY2UgbnVtYmVyLlxuICovXG5cbi8qKlxuICogV2Vic29ja2V0UmVwbGF5Q2hhbm5lbFJvdyB0eXBlLlxuICogQHR5cGVkZWYge29iamVjdH0gV2Vic29ja2V0UmVwbGF5Q2hhbm5lbFJvd1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGNoYW5uZWwgLSBDaGFubmVsIG5hbWUuXG4gKi9cblxuLyoqXG4gKiBSdW5zIHRoZSB3ZWJzb2NrZXRFdmVudExvZ1N0b3JlRm9yQ29uZmlndXJhdGlvbiBoZWxwZXIuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdH0gY29uZmlndXJhdGlvbiAtIENvbmZpZ3VyYXRpb24uXG4gKiBAcmV0dXJucyB7VmVsb2Npb3VzSHR0cFNlcnZlcldlYnNvY2tldEV2ZW50TG9nU3RvcmV9IC0gU2hhcmVkIHN0b3JlIGluc3RhbmNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gd2Vic29ja2V0RXZlbnRMb2dTdG9yZUZvckNvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbikge1xuICBsZXQgc3RvcmUgPSBzdG9yZXMuZ2V0KGNvbmZpZ3VyYXRpb24pXG5cbiAgaWYgKCFzdG9yZSkge1xuICAgIHN0b3JlID0gbmV3IFZlbG9jaW91c0h0dHBTZXJ2ZXJXZWJzb2NrZXRFdmVudExvZ1N0b3JlKHtjb25maWd1cmF0aW9ufSlcbiAgICBzdG9yZXMuc2V0KGNvbmZpZ3VyYXRpb24sIHN0b3JlKVxuICB9XG5cbiAgcmV0dXJuIHN0b3JlXG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlbG9jaW91c0h0dHBTZXJ2ZXJXZWJzb2NrZXRFdmVudExvZ1N0b3JlIHtcbiAgLyoqXG4gICAqIFJ1bnMgY29uc3RydWN0b3IuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucy5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9IGFyZ3MuY29uZmlndXJhdGlvbiAtIENvbmZpZ3VyYXRpb24uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5kYXRhYmFzZUlkZW50aWZpZXJdIC0gRGF0YWJhc2UgaWRlbnRpZmllci5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFthcmdzLnJldGVudGlvbk1zXSAtIEV2ZW50IHJldGVudGlvbiBpbiBtaWxsaXNlY29uZHMuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih7Y29uZmlndXJhdGlvbiwgZGF0YWJhc2VJZGVudGlmaWVyID0gXCJkZWZhdWx0XCIsIHJldGVudGlvbk1zID0gREVGQVVMVF9SRVRFTlRJT05fTVN9KSB7XG4gICAgdGhpcy5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvblxuICAgIHRoaXMuZGF0YWJhc2VJZGVudGlmaWVyID0gZGF0YWJhc2VJZGVudGlmaWVyXG4gICAgdGhpcy5yZXRlbnRpb25NcyA9IHJldGVudGlvbk1zXG4gICAgdGhpcy5sb2dnZXIgPSBuZXcgTG9nZ2VyKHRoaXMpXG4gICAgdGhpcy5faXNSZWFkeSA9IGZhbHNlXG4gICAgdGhpcy5fcmVhZHlQcm9taXNlID0gbnVsbFxuICAgIC8qKlxuICAgICAqIE5hcnJvd3MgdGhlIHJ1bnRpbWUgdmFsdWUgdG8gdGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAgICAgKiBAdHlwZSB7TWFwPHN0cmluZywgbnVtYmVyPn0gKi9cbiAgICB0aGlzLl9pbnRlcmVzdGVkQ2hhbm5lbHMgPSBuZXcgTWFwKClcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGVuc3VyZSByZWFkeS5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiByZWFkeS5cbiAgICovXG4gIGFzeW5jIGVuc3VyZVJlYWR5KCkge1xuICAgIGlmIChhd2FpdCB0aGlzLl9zY2hlbWFSZWFkeSgpKSByZXR1cm5cblxuICAgIGlmICh0aGlzLl9yZWFkeVByb21pc2UpIHJldHVybiBhd2FpdCB0aGlzLl9yZWFkeVByb21pc2VcblxuICAgIHRoaXMuX3JlYWR5UHJvbWlzZSA9IChhc3luYyAoKSA9PiB7XG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb24uc2V0Q3VycmVudCgpXG4gICAgICBhd2FpdCB0aGlzLl9lbnN1cmVTY2hlbWEoKVxuICAgICAgdGhpcy5faXNSZWFkeSA9IHRydWVcbiAgICB9KSgpXG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5fcmVhZHlQcm9taXNlXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmICghdGhpcy5faXNSZWFkeSkge1xuICAgICAgICB0aGlzLl9yZWFkeVByb21pc2UgPSBudWxsXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlLXZhbGlkYXRlcyBjYWNoZWQgc2NoZW1hIHJlYWRpbmVzcyBiZWNhdXNlIHRyYW5zYWN0aW9uYWwgRERMIGNhbiByb2xsIHRoZSB0YWJsZXMgYmFjay5cbiAgICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59IC0gV2hldGhlciB0aGUgY2FjaGVkIHJlYWR5IHN0YXRlIGlzIHN0aWxsIHZhbGlkLlxuICAgKi9cbiAgYXN5bmMgX3NjaGVtYVJlYWR5KCkge1xuICAgIGlmICghdGhpcy5faXNSZWFkeSkgcmV0dXJuIGZhbHNlXG4gICAgaWYgKGF3YWl0IHRoaXMuX3NjaGVtYVByZXNlbnQoKSkgcmV0dXJuIHRydWVcblxuICAgIHRoaXMuX2lzUmVhZHkgPSBmYWxzZVxuICAgIHRoaXMuX3JlYWR5UHJvbWlzZSA9IG51bGxcblxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgc2NoZW1hIHByZXNlbnQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fSAtIFdoZXRoZXIgYm90aCBldmVudC1sb2cgdGFibGVzIHBoeXNpY2FsbHkgZXhpc3QuXG4gICAqL1xuICBhc3luYyBfc2NoZW1hUHJlc2VudCgpIHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5fd2l0aERiKGFzeW5jIChkYikgPT5cbiAgICAgIGF3YWl0IGRiLnRhYmxlRXhpc3RzKEVWRU5UU19UQUJMRSkgJiYgYXdhaXQgZGIudGFibGVFeGlzdHMoUkVQTEFZX0NIQU5ORUxTX1RBQkxFKVxuICAgIClcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGFwcGVuZCBldmVudC5cbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5jaGFubmVsIC0gQ2hhbm5lbCBuYW1lLlxuICAgKiBAcGFyYW0gez99IGFyZ3MucGF5bG9hZCAtIEV2ZW50IHBheWxvYWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHtjaGFubmVsOiBzdHJpbmcsIGNyZWF0ZWRBdDogc3RyaW5nLCBpZDogc3RyaW5nLCBwYXlsb2FkOiA/fT59IC0gUGVyc2lzdGVkIGV2ZW50IHJvdy5cbiAgICovXG4gIGFzeW5jIGFwcGVuZEV2ZW50KHtjaGFubmVsLCBwYXlsb2FkfSkge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlUmVhZHkoKVxuXG4gICAgY29uc3QgaWQgPSByYW5kb21VVUlEKClcbiAgICBjb25zdCBjcmVhdGVkQXQgPSBuZXcgRGF0ZSgpXG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5fd2l0aERiKGFzeW5jIChkYikgPT4ge1xuICAgICAgYXdhaXQgZGIuaW5zZXJ0KHtcbiAgICAgICAgdGFibGVOYW1lOiBFVkVOVFNfVEFCTEUsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBjaGFubmVsLFxuICAgICAgICAgIGNyZWF0ZWRfYXQ6IGNyZWF0ZWRBdCxcbiAgICAgICAgICBpZCxcbiAgICAgICAgICBwYXlsb2FkX2pzb246IEpTT04uc3RyaW5naWZ5KHBheWxvYWQpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICByZXR1cm4ge2NoYW5uZWwsIGNyZWF0ZWRBdDogY3JlYXRlZEF0LnRvSVNPU3RyaW5nKCksIGlkLCBwYXlsb2FkfVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogUnVucyBtYXJrIGNoYW5uZWwgaW50ZXJlc3RlZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNoYW5uZWwgLSBDaGFubmVsIG5hbWUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gdGhlIGNoYW5uZWwgaW50ZXJlc3Qgd2FzIHBlcnNpc3RlZC5cbiAgICovXG4gIGFzeW5jIG1hcmtDaGFubmVsSW50ZXJlc3RlZChjaGFubmVsKSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVSZWFkeSgpXG5cbiAgICBjb25zdCBpbnRlcmVzdGVkVW50aWwgPSBuZXcgRGF0ZShEYXRlLm5vdygpICsgdGhpcy5yZXRlbnRpb25NcylcblxuICAgIHRoaXMuX2ludGVyZXN0ZWRDaGFubmVscy5zZXQoY2hhbm5lbCwgaW50ZXJlc3RlZFVudGlsLmdldFRpbWUoKSlcblxuICAgIGF3YWl0IHRoaXMuX3dpdGhEYihhc3luYyAoZGIpID0+IHtcbiAgICAgIGF3YWl0IHRoaXMuX3Vwc2VydFJlcGxheUNoYW5uZWxJbnRlcmVzdChkYiwge2NoYW5uZWwsIGludGVyZXN0ZWRVbnRpbH0pXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHNob3VsZCBwZXJzaXN0IGNoYW5uZWwuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjaGFubmVsIC0gQ2hhbm5lbCBuYW1lLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxib29sZWFuPn0gLSBXaGV0aGVyIHRoZSBjaGFubmVsIHNob3VsZCBiZSBwZXJzaXN0ZWQgZm9yIHJlcGxheS5cbiAgICovXG4gIGFzeW5jIHNob3VsZFBlcnNpc3RDaGFubmVsKGNoYW5uZWwpIHtcbiAgICBpZiAodGhpcy5fY2hhbm5lbEludGVyZXN0Q2FjaGVkKGNoYW5uZWwpKSByZXR1cm4gdHJ1ZVxuICAgIGlmICh0aGlzLl9pbnRlcmVzdGVkQ2hhbm5lbHMuc2l6ZSA9PT0gMCkgcmV0dXJuIGZhbHNlXG5cbiAgICBhd2FpdCB0aGlzLmVuc3VyZVJlYWR5KClcblxuICAgIHJldHVybiBhd2FpdCB0aGlzLl93aXRoRGIoYXN5bmMgKGRiKSA9PiB7XG4gICAgICBjb25zdCByb3dzID0gYXdhaXQgZGJcbiAgICAgICAgLm5ld1F1ZXJ5KClcbiAgICAgICAgLmZyb20oUkVQTEFZX0NIQU5ORUxTX1RBQkxFKVxuICAgICAgICAud2hlcmUoe2NoYW5uZWx9KVxuICAgICAgICAud2hlcmUoYGludGVyZXN0ZWRfdW50aWwgPiAke2RiLnF1b3RlKG5ldyBEYXRlKCkpfWApXG4gICAgICAgIC5saW1pdCgxKVxuICAgICAgICAucmVzdWx0cygpXG5cbiAgICAgIHJldHVybiByb3dzLmxlbmd0aCA+IDBcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgY2hhbm5lbCBpbnRlcmVzdCBjYWNoZWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjaGFubmVsIC0gQ2hhbm5lbCBuYW1lLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBXaGV0aGVyIG1lbW9yeSBjYWNoZSBzdGlsbCBtYXJrcyB0aGUgY2hhbm5lbCBpbnRlcmVzdGVkLlxuICAgKi9cbiAgX2NoYW5uZWxJbnRlcmVzdENhY2hlZChjaGFubmVsKSB7XG4gICAgY29uc3QgaW50ZXJlc3RlZFVudGlsID0gdGhpcy5faW50ZXJlc3RlZENoYW5uZWxzLmdldChjaGFubmVsKVxuXG4gICAgaWYgKCFpbnRlcmVzdGVkVW50aWwpIHJldHVybiBmYWxzZVxuICAgIGlmIChpbnRlcmVzdGVkVW50aWwgPiBEYXRlLm5vdygpKSByZXR1cm4gdHJ1ZVxuXG4gICAgdGhpcy5faW50ZXJlc3RlZENoYW5uZWxzLmRlbGV0ZShjaGFubmVsKVxuXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvKipcbiAgICogUnVucyBnZXQgZXZlbnQgYnkgaWQuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MuY2hhbm5lbCAtIENoYW5uZWwgbmFtZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MuaWQgLSBFdmVudCBpZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8e2NoYW5uZWw6IHN0cmluZywgY3JlYXRlZEF0OiBzdHJpbmcsIGlkOiBzdHJpbmcsIHBheWxvYWQ6ID8sIHNlcXVlbmNlOiBudW1iZXJ9IHwgbnVsbD59IC0gRXZlbnQgcm93IG9yIG51bGwuXG4gICAqL1xuICBhc3luYyBnZXRFdmVudEJ5SWQoe2NoYW5uZWwsIGlkfSkge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlUmVhZHkoKVxuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuX3dpdGhEYihhc3luYyAoZGIpID0+IHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9nZXRFdmVudEJ5SWQoe2NoYW5uZWwsIGRiLCBpZH0pXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGxhdGVzdCBzZXF1ZW5jZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNoYW5uZWwgLSBDaGFubmVsIG5hbWUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPG51bWJlciB8IG51bGw+fSAtIExhdGVzdCBjaGFubmVsIHNlcXVlbmNlLlxuICAgKi9cbiAgYXN5bmMgbGF0ZXN0U2VxdWVuY2UoY2hhbm5lbCkge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlUmVhZHkoKVxuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuX3dpdGhEYihhc3luYyAoZGIpID0+IHtcbiAgICAgIGNvbnN0IHJvd3MgPSBhd2FpdCBkYlxuICAgICAgICAubmV3UXVlcnkoKVxuICAgICAgICAuZnJvbShFVkVOVFNfVEFCTEUpXG4gICAgICAgIC53aGVyZSh7Y2hhbm5lbH0pXG4gICAgICAgIC5vcmRlcihcInNlcXVlbmNlIERFU0NcIilcbiAgICAgICAgLmxpbWl0KDEpXG4gICAgICAgIC5yZXN1bHRzKClcbiAgICAgIGNvbnN0IHJvdyA9IC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgPz4gfCB1bmRlZmluZWR9ICovIChyb3dzWzBdKVxuXG4gICAgICBpZiAoIXJvdykgcmV0dXJuIG51bGxcblxuICAgICAgcmV0dXJuIE51bWJlcihyb3cuc2VxdWVuY2UpXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGdldCBldmVudHMgYWZ0ZXIuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MuY2hhbm5lbCAtIENoYW5uZWwgbmFtZS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGFyZ3Muc2VxdWVuY2UgLSBMb3dlciBib3VuZCBzZXF1ZW5jZS5cbiAgICogQHBhcmFtIHtudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkfSBbYXJncy51cFRvU2VxdWVuY2VdIC0gSW5jbHVzaXZlIGNlaWxpbmcgc2VxdWVuY2UuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPEFycmF5PHtjaGFubmVsOiBzdHJpbmcsIGNyZWF0ZWRBdDogc3RyaW5nLCBpZDogc3RyaW5nLCBwYXlsb2FkOiA/LCBzZXF1ZW5jZTogbnVtYmVyfT4+fSAtIE9yZGVyZWQgZXZlbnRzLlxuICAgKi9cbiAgYXN5bmMgZ2V0RXZlbnRzQWZ0ZXIoe2NoYW5uZWwsIHNlcXVlbmNlLCB1cFRvU2VxdWVuY2V9KSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVSZWFkeSgpXG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5fd2l0aERiKGFzeW5jIChkYikgPT4ge1xuICAgICAgY29uc3QgcXVlcnkgPSBkYlxuICAgICAgICAubmV3UXVlcnkoKVxuICAgICAgICAuZnJvbShFVkVOVFNfVEFCTEUpXG4gICAgICAgIC53aGVyZSh7Y2hhbm5lbH0pXG4gICAgICAgIC53aGVyZShgc2VxdWVuY2UgPiAke2RiLnF1b3RlKHNlcXVlbmNlKX1gKVxuICAgICAgICAub3JkZXIoXCJzZXF1ZW5jZSBBU0NcIilcblxuICAgICAgaWYgKHR5cGVvZiB1cFRvU2VxdWVuY2UgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgcXVlcnkud2hlcmUoYHNlcXVlbmNlIDw9ICR7ZGIucXVvdGUodXBUb1NlcXVlbmNlKX1gKVxuICAgICAgfVxuXG4gICAgICBjb25zdCByb3dzID0gLyoqIEB0eXBlIHtXZWJzb2NrZXRFdmVudFJvd1tdfSAqLyAoYXdhaXQgcXVlcnkucmVzdWx0cygpKVxuXG4gICAgICByZXR1cm4gcm93cy5tYXAoKHJvdykgPT4gdGhpcy5fbm9ybWFsaXplRXZlbnRSb3cocm93KSlcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgY2xlYW51cCBleHBpcmVkLlxuICAgKiBAcGFyYW0ge29iamVjdH0gW2FyZ3NdIC0gT3B0aW9ucy5cbiAgICogQHBhcmFtIHtEYXRlfSBbYXJncy5ub3ddIC0gQ2xlYW51cCByZWZlcmVuY2UgdGltZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBjbGVhbnVwIGNvbXBsZXRlcy5cbiAgICovXG4gIGFzeW5jIGNsZWFudXBFeHBpcmVkKHtub3cgPSBuZXcgRGF0ZSgpfSA9IHt9KSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVSZWFkeSgpXG5cbiAgICBjb25zdCBjdXRvZmYgPSBuZXcgRGF0ZShub3cuZ2V0VGltZSgpIC0gdGhpcy5yZXRlbnRpb25NcylcblxuICAgIGF3YWl0IHRoaXMuX3dpdGhEYihhc3luYyAoZGIpID0+IHtcbiAgICAgIGNvbnN0IGV4cGlyZWRFdmVudFJvd3MgPSAvKiogQHR5cGUge0FycmF5PHtpZDogc3RyaW5nfT59ICovIChhd2FpdCBkYlxuICAgICAgICAubmV3UXVlcnkoKVxuICAgICAgICAuZnJvbShFVkVOVFNfVEFCTEUpXG4gICAgICAgIC53aGVyZShgY3JlYXRlZF9hdCA8PSAke2RiLnF1b3RlKGN1dG9mZil9YClcbiAgICAgICAgLnJlc3VsdHMoKSlcbiAgICAgIGNvbnN0IGV4cGlyZWRSZXBsYXlDaGFubmVsUm93cyA9IC8qKiBAdHlwZSB7V2Vic29ja2V0UmVwbGF5Q2hhbm5lbFJvd1tdfSAqLyAoYXdhaXQgZGJcbiAgICAgICAgLm5ld1F1ZXJ5KClcbiAgICAgICAgLmZyb20oUkVQTEFZX0NIQU5ORUxTX1RBQkxFKVxuICAgICAgICAud2hlcmUoYGludGVyZXN0ZWRfdW50aWwgPD0gJHtkYi5xdW90ZShub3cpfWApXG4gICAgICAgIC5yZXN1bHRzKCkpXG5cbiAgICAgIGZvciAoY29uc3QgZXhwaXJlZEV2ZW50Um93IG9mIGV4cGlyZWRFdmVudFJvd3MpIHtcbiAgICAgICAgYXdhaXQgZGIuZGVsZXRlKHtcbiAgICAgICAgICB0YWJsZU5hbWU6IEVWRU5UU19UQUJMRSxcbiAgICAgICAgICBjb25kaXRpb25zOiB7aWQ6IGV4cGlyZWRFdmVudFJvdy5pZH1cbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBleHBpcmVkUmVwbGF5Q2hhbm5lbFJvdyBvZiBleHBpcmVkUmVwbGF5Q2hhbm5lbFJvd3MpIHtcbiAgICAgICAgYXdhaXQgZGIuZGVsZXRlKHtcbiAgICAgICAgICB0YWJsZU5hbWU6IFJFUExBWV9DSEFOTkVMU19UQUJMRSxcbiAgICAgICAgICBjb25kaXRpb25zOiB7Y2hhbm5lbDogZXhwaXJlZFJlcGxheUNoYW5uZWxSb3cuY2hhbm5lbH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgYXN5bmMgX2Vuc3VyZVNjaGVtYSgpIHtcbiAgICBhd2FpdCB0aGlzLl93aXRoRGIoYXN5bmMgKGRiKSA9PiB7XG4gICAgICBhd2FpdCB0aGlzLl9lbnN1cmVFdmVudHNUYWJsZShkYilcbiAgICAgIGF3YWl0IHRoaXMuX2Vuc3VyZVJlcGxheUNoYW5uZWxzVGFibGUoZGIpXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGVuc3VyZSBldmVudHMgdGFibGUuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vZGF0YWJhc2UvZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHR9IGRiIC0gRGF0YWJhc2UgY29ubmVjdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBjb21wbGV0ZS5cbiAgICovXG4gIGFzeW5jIF9lbnN1cmVFdmVudHNUYWJsZShkYikge1xuICAgIHRoaXMubG9nZ2VyLmluZm8oXCJBcHBseWluZyB3ZWJzb2NrZXQgZXZlbnQtbG9nIHNjaGVtYVwiKVxuXG4gICAgaWYgKGF3YWl0IGRiLnRhYmxlRXhpc3RzKEVWRU5UU19UQUJMRSkpIHtcbiAgICAgIHRoaXMubG9nZ2VyLmluZm8oXCJXZWJzb2NrZXQgZXZlbnQtbG9nIHRhYmxlIGFscmVhZHkgZXhpc3RzIC0gc2tpcHBpbmcgY3JlYXRlXCIpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBldmVudFRhYmxlID0gbmV3IFRhYmxlRGF0YShFVkVOVFNfVEFCTEUsIHtpZk5vdEV4aXN0czogdHJ1ZX0pXG5cbiAgICBldmVudFRhYmxlLmludGVnZXIoXCJzZXF1ZW5jZVwiLCB7YXV0b0luY3JlbWVudDogdHJ1ZSwgbnVsbDogZmFsc2UsIHByaW1hcnlLZXk6IHRydWV9KVxuICAgIGV2ZW50VGFibGUuc3RyaW5nKFwiaWRcIiwge2luZGV4OiB0cnVlLCBudWxsOiBmYWxzZX0pXG4gICAgZXZlbnRUYWJsZS5zdHJpbmcoXCJjaGFubmVsXCIsIHtpbmRleDogdHJ1ZSwgbnVsbDogZmFsc2V9KVxuICAgIGV2ZW50VGFibGUudGV4dChcInBheWxvYWRfanNvblwiLCB7bnVsbDogZmFsc2V9KVxuICAgIGV2ZW50VGFibGUuZGF0ZXRpbWUoXCJjcmVhdGVkX2F0XCIsIHtpbmRleDogdHJ1ZSwgbnVsbDogZmFsc2V9KVxuXG4gICAgYXdhaXQgZGIuY3JlYXRlVGFibGUoZXZlbnRUYWJsZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGVuc3VyZSByZXBsYXkgY2hhbm5lbHMgdGFibGUuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vZGF0YWJhc2UvZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHR9IGRiIC0gRGF0YWJhc2UgY29ubmVjdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBjb21wbGV0ZS5cbiAgICovXG4gIGFzeW5jIF9lbnN1cmVSZXBsYXlDaGFubmVsc1RhYmxlKGRiKSB7XG4gICAgaWYgKGF3YWl0IGRiLnRhYmxlRXhpc3RzKFJFUExBWV9DSEFOTkVMU19UQUJMRSkpIHJldHVyblxuXG4gICAgY29uc3QgcmVwbGF5Q2hhbm5lbFRhYmxlID0gbmV3IFRhYmxlRGF0YShSRVBMQVlfQ0hBTk5FTFNfVEFCTEUsIHtpZk5vdEV4aXN0czogdHJ1ZX0pXG5cbiAgICByZXBsYXlDaGFubmVsVGFibGUuc3RyaW5nKFwiY2hhbm5lbFwiLCB7bnVsbDogZmFsc2UsIHByaW1hcnlLZXk6IHRydWV9KVxuICAgIHJlcGxheUNoYW5uZWxUYWJsZS5kYXRldGltZShcImludGVyZXN0ZWRfdW50aWxcIiwge2luZGV4OiB0cnVlLCBudWxsOiBmYWxzZX0pXG5cbiAgICBhd2FpdCBkYi5jcmVhdGVUYWJsZShyZXBsYXlDaGFubmVsVGFibGUpXG4gIH1cblxuICAvKipcbiAgICogUnVucyBnZXQgZXZlbnQgYnkgaWQuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MuY2hhbm5lbCAtIENoYW5uZWwgbmFtZS5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9kYXRhYmFzZS9kcml2ZXJzL2Jhc2UuanNcIikuZGVmYXVsdH0gYXJncy5kYiAtIERhdGFiYXNlIGNvbm5lY3Rpb24uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLmlkIC0gRXZlbnQgaWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHtjaGFubmVsOiBzdHJpbmcsIGNyZWF0ZWRBdDogc3RyaW5nLCBpZDogc3RyaW5nLCBwYXlsb2FkOiA/LCBzZXF1ZW5jZTogbnVtYmVyfSB8IG51bGw+fSAtIEV2ZW50IHJvdyBvciBudWxsLlxuICAgKi9cbiAgYXN5bmMgX2dldEV2ZW50QnlJZCh7Y2hhbm5lbCwgZGIsIGlkfSkge1xuICAgIGNvbnN0IHJvd3MgPSAvKiogQHR5cGUge1dlYnNvY2tldEV2ZW50Um93W119ICovIChhd2FpdCBkYlxuICAgICAgLm5ld1F1ZXJ5KClcbiAgICAgIC5mcm9tKEVWRU5UU19UQUJMRSlcbiAgICAgIC53aGVyZSh7Y2hhbm5lbCwgaWR9KVxuICAgICAgLmxpbWl0KDEpXG4gICAgICAucmVzdWx0cygpKVxuXG4gICAgaWYgKCFyb3dzWzBdKSByZXR1cm4gbnVsbFxuXG4gICAgcmV0dXJuIHRoaXMuX25vcm1hbGl6ZUV2ZW50Um93KHJvd3NbMF0pXG4gIH1cblxuICAvKipcbiAgICogUnVucyBub3JtYWxpemUgZXZlbnQgcm93LlxuICAgKiBAcGFyYW0ge1dlYnNvY2tldEV2ZW50Um93fSByb3cgLSBSYXcgcm93LlxuICAgKiBAcmV0dXJucyB7e2NoYW5uZWw6IHN0cmluZywgY3JlYXRlZEF0OiBzdHJpbmcsIGlkOiBzdHJpbmcsIHBheWxvYWQ6ID8sIHNlcXVlbmNlOiBudW1iZXJ9fSAtIE5vcm1hbGl6ZWQgcm93LlxuICAgKi9cbiAgX25vcm1hbGl6ZUV2ZW50Um93KHJvdykge1xuICAgIGNvbnN0IGNyZWF0ZWRBdFZhbHVlID0gcm93LmNyZWF0ZWRfYXRcblxuICAgIHJldHVybiB7XG4gICAgICBjaGFubmVsOiByb3cuY2hhbm5lbCxcbiAgICAgIGNyZWF0ZWRBdDogY3JlYXRlZEF0VmFsdWUgaW5zdGFuY2VvZiBEYXRlID8gY3JlYXRlZEF0VmFsdWUudG9JU09TdHJpbmcoKSA6IG5ldyBEYXRlKGNyZWF0ZWRBdFZhbHVlKS50b0lTT1N0cmluZygpLFxuICAgICAgaWQ6IHJvdy5pZCxcbiAgICAgIHBheWxvYWQ6IEpTT04ucGFyc2Uocm93LnBheWxvYWRfanNvbiksXG4gICAgICBzZXF1ZW5jZTogTnVtYmVyKHJvdy5zZXF1ZW5jZSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUnVucyB1cHNlcnQgcmVwbGF5IGNoYW5uZWwgaW50ZXJlc3QuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vZGF0YWJhc2UvZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHR9IGRiIC0gRGF0YWJhc2UgY29ubmVjdGlvbi5cbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5jaGFubmVsIC0gQ2hhbm5lbCBuYW1lLlxuICAgKiBAcGFyYW0ge0RhdGV9IGFyZ3MuaW50ZXJlc3RlZFVudGlsIC0gUmV0ZW50aW9uIGRlYWRsaW5lLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIHRoZSByZXBsYXktY2hhbm5lbCByb3cgd2FzIHVwc2VydGVkLlxuICAgKi9cbiAgYXN5bmMgX3Vwc2VydFJlcGxheUNoYW5uZWxJbnRlcmVzdChkYiwge2NoYW5uZWwsIGludGVyZXN0ZWRVbnRpbH0pIHtcbiAgICBhd2FpdCBkYi51cHNlcnQoe1xuICAgICAgY29uZmxpY3RDb2x1bW5zOiBbXCJjaGFubmVsXCJdLFxuICAgICAgZGF0YToge1xuICAgICAgICBjaGFubmVsLFxuICAgICAgICBpbnRlcmVzdGVkX3VudGlsOiBpbnRlcmVzdGVkVW50aWxcbiAgICAgIH0sXG4gICAgICB0YWJsZU5hbWU6IFJFUExBWV9DSEFOTkVMU19UQUJMRSxcbiAgICAgIHVwZGF0ZUNvbHVtbnM6IFtcImludGVyZXN0ZWRfdW50aWxcIl1cbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgd2l0aCBkYi5cbiAgICogQHBhcmFtIHsoZGI6IGltcG9ydChcIi4uL2RhdGFiYXNlL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0KSA9PiBQcm9taXNlPD8+fSBjYWxsYmFjayAtIENhbGxiYWNrLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTw/Pn0gLSBDYWxsYmFjayByZXN1bHQuXG4gICAqL1xuICBhc3luYyBfd2l0aERiKGNhbGxiYWNrKSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29uZmlndXJhdGlvbi5lbnN1cmVDb25uZWN0aW9ucyh7ZGF0YWJhc2VJZGVudGlmaWVyczogW3RoaXMuZGF0YWJhc2VJZGVudGlmaWVyXSwgbmFtZTogXCJXZWJzb2NrZXQgZXZlbnQgbG9nIHN0b3JlXCJ9LCBhc3luYyAoZGJzKSA9PiB7XG4gICAgICBjb25zdCBkYiA9IGRic1t0aGlzLmRhdGFiYXNlSWRlbnRpZmllcl1cblxuICAgICAgaWYgKCFkYikgdGhyb3cgbmV3IEVycm9yKGBObyBkYXRhYmFzZSBjb25uZWN0aW9uIGF2YWlsYWJsZSBmb3IgaWRlbnRpZmllcjogJHt0aGlzLmRhdGFiYXNlSWRlbnRpZmllcn1gKVxuXG4gICAgICByZXR1cm4gYXdhaXQgY2FsbGJhY2soZGIpXG4gICAgfSlcbiAgfVxufVxuIl19
@@ -7,6 +7,8 @@
7
7
  * @augments {VelociousJob<[]>}
8
8
  */
9
9
  export default class PruneTerminalBackgroundJobsJob extends VelociousJob<[]> {
10
+ /** @type {string[]} */
11
+ static databaseIdentifiers: string[];
10
12
  /**
11
13
  * Builds the scheduler configuration for this job from a resolved retention
12
14
  * config, or returns `null` when retention is fully disabled (nothing to
@@ -1 +1 @@
1
- {"version":3,"file":"prune-terminal-background-jobs.d.ts","sourceRoot":"","sources":["../../../src/jobs/prune-terminal-background-jobs.js"],"names":[],"mappings":"AAMA;;;;;;;GAOG;AACH;IAaE;;;;;;;;OAQG;IACH,wCAHW,OAAO,2BAA2B,EAAE,4CAA4C,GAC9E,OAAO,2BAA2B,EAAE,mCAAmC,GAAG,IAAI,CAe1F;;CAiBF;yBA9DwB,2BAA2B"}
1
+ {"version":3,"file":"prune-terminal-background-jobs.d.ts","sourceRoot":"","sources":["../../../src/jobs/prune-terminal-background-jobs.js"],"names":[],"mappings":"AAMA;;;;;;;GAOG;AACH;IACE,uBAAuB;IACvB,4BADW,MAAM,EAAE,CACY;IAc/B;;;;;;;;OAQG;IACH,wCAHW,OAAO,2BAA2B,EAAE,4CAA4C,GAC9E,OAAO,2BAA2B,EAAE,mCAAmC,GAAG,IAAI,CAe1F;;CAiBF;yBAjEwB,2BAA2B"}
@@ -11,6 +11,8 @@ import VelociousJob from "../background-jobs/job.js";
11
11
  * @augments {VelociousJob<[]>}
12
12
  */
13
13
  export default class PruneTerminalBackgroundJobsJob extends VelociousJob {
14
+ /** @type {string[]} */
15
+ static databaseIdentifiers = [];
14
16
  /**
15
17
  * Reserved job name that an application job cannot shadow. The registry loads
16
18
  * app `src/jobs` first and skips duplicate built-in names, so if this used the
@@ -58,4 +60,4 @@ export default class PruneTerminalBackgroundJobsJob extends VelociousJob {
58
60
  });
59
61
  }
60
62
  }
61
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJ1bmUtdGVybWluYWwtYmFja2dyb3VuZC1qb2JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2pvYnMvcHJ1bmUtdGVybWluYWwtYmFja2dyb3VuZC1qb2JzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLG1CQUFtQixNQUFNLDZCQUE2QixDQUFBO0FBQzdELE9BQU8sYUFBYSxNQUFNLHFCQUFxQixDQUFBO0FBQy9DLE9BQU8sWUFBWSxNQUFNLDJCQUEyQixDQUFBO0FBRXBEOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLENBQUMsT0FBTyxPQUFPLDhCQUErQixTQUFRLFlBQVk7SUFDdEU7Ozs7Ozs7T0FPRztJQUNILE1BQU0sQ0FBQyxPQUFPO1FBQ1osT0FBTywwQ0FBMEMsQ0FBQTtJQUNuRCxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxNQUFNLENBQUMscUJBQXFCLENBQUMsU0FBUztRQUNwQyxNQUFNLGVBQWUsR0FBRyxPQUFPLFNBQVMsQ0FBQyxjQUFjLEtBQUssUUFBUSxJQUFJLFNBQVMsQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFBO1FBQ3BHLE1BQU0sWUFBWSxHQUFHLE9BQU8sU0FBUyxDQUFDLFdBQVcsS0FBSyxRQUFRLElBQUksU0FBUyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUE7UUFFM0YsSUFBSSxDQUFDLGVBQWUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3RDLE9BQU8sSUFBSSxDQUFBO1FBQ2IsQ0FBQztRQUVELE9BQU87WUFDTCxLQUFLLEVBQUUsSUFBSTtZQUNYLEtBQUssRUFBRSxTQUFTLENBQUMsZUFBZTtZQUNoQyxPQUFPLEVBQUUsRUFBQyxjQUFjLEVBQUUsMENBQTBDLEVBQUUsY0FBYyxFQUFFLENBQUMsRUFBRSxzQkFBc0IsRUFBRSxJQUFJLEVBQUM7U0FDdkgsQ0FBQTtJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsT0FBTztRQUNYLE1BQU0sYUFBYSxHQUFHLGFBQWEsQ0FBQyxPQUFPLEVBQUUsQ0FBQTtRQUM3QyxNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsdUJBQXVCLEVBQUUsQ0FBQTtRQUN0RCxNQUFNLEtBQUssR0FBRyxJQUFJLG1CQUFtQixDQUFDLEVBQUMsYUFBYSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sQ0FBQyxrQkFBa0IsRUFBQyxDQUFDLENBQUE7UUFFckcsTUFBTSxLQUFLLENBQUMsaUJBQWlCLENBQUM7WUFDNUIsY0FBYyxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYztZQUMvQyxXQUFXLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxXQUFXO1lBQ3pDLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLFNBQVM7U0FDdEMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBCYWNrZ3JvdW5kSm9ic1N0b3JlIGZyb20gXCIuLi9iYWNrZ3JvdW5kLWpvYnMvc3RvcmUuanNcIlxuaW1wb3J0IENvbmZpZ3VyYXRpb24gZnJvbSBcIi4uL2NvbmZpZ3VyYXRpb24uanNcIlxuaW1wb3J0IFZlbG9jaW91c0pvYiBmcm9tIFwiLi4vYmFja2dyb3VuZC1qb2JzL2pvYi5qc1wiXG5cbi8qKlxuICogQnVpbHQtaW4gam9iIHRoYXQgcHJ1bmVzIHRlcm1pbmFsIGBiYWNrZ3JvdW5kX2pvYnNgIHJvd3MgcGFzdCB0aGVpciByZXRlbnRpb25cbiAqIHdpbmRvdyBzbyB0aGUgdGFibGUgZG9lcyBub3QgZ3JvdyB1bmJvdW5kZWQuIFRoZSBtYWluIHByb2Nlc3MgcmVnaXN0ZXJzIHRoaXNcbiAqIG9uIHRoZSBub3JtYWwgYmFja2dyb3VuZC1qb2JzIHNjaGVkdWxlciB3aGVuIGBiYWNrZ3JvdW5kSm9icy5yZXRlbnRpb25gIGlzXG4gKiBlbmFibGVkLCBzbyBpdCBydW5zIGFzIGFuIG9yZGluYXJ5IHNjaGVkdWxlZC9xdWV1ZWQgam9iIOKAlCB2aXNpYmxlIGluIHRoZSBqb2JcbiAqIHRhYmxlcyBhbmQgZGlzcGF0Y2hlZCB0byBhIHdvcmtlciDigJQgcmF0aGVyIHRoYW4gYSBoaWRkZW4gaW4tcHJvY2VzcyB0aW1lci5cbiAqIEBhdWdtZW50cyB7VmVsb2Npb3VzSm9iPFtdPn1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHJ1bmVUZXJtaW5hbEJhY2tncm91bmRKb2JzSm9iIGV4dGVuZHMgVmVsb2Npb3VzSm9iIHtcbiAgLyoqXG4gICAqIFJlc2VydmVkIGpvYiBuYW1lIHRoYXQgYW4gYXBwbGljYXRpb24gam9iIGNhbm5vdCBzaGFkb3cuIFRoZSByZWdpc3RyeSBsb2Fkc1xuICAgKiBhcHAgYHNyYy9qb2JzYCBmaXJzdCBhbmQgc2tpcHMgZHVwbGljYXRlIGJ1aWx0LWluIG5hbWVzLCBzbyBpZiB0aGlzIHVzZWQgdGhlXG4gICAqIGRlZmF1bHQgY2xhc3MtbmFtZSBpZGVudGl0eSBhbiBhcHAgY2xhc3MgbmFtZWQgYFBydW5lVGVybWluYWxCYWNrZ3JvdW5kSm9ic0pvYmBcbiAgICogd291bGQgYmUgZGlzcGF0Y2hlZCBpbnN0ZWFkLiBBIGA6YC1uYW1lc3BhY2VkIG5hbWUgY2FuIG5ldmVyIGNvbGxpZGUgd2l0aCBhXG4gICAqIGRlZmF1bHQgKGNsYXNzLW5hbWUpIGlkZW50aXR5LCBzaW5jZSBjbGFzcyBuYW1lcyBjYW5ub3QgY29udGFpbiBgOmAuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gUmVzZXJ2ZWQgam9iIG5hbWUuXG4gICAqL1xuICBzdGF0aWMgam9iTmFtZSgpIHtcbiAgICByZXR1cm4gXCJ2ZWxvY2lvdXM6cHJ1bmUtdGVybWluYWwtYmFja2dyb3VuZC1qb2JzXCJcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgdGhlIHNjaGVkdWxlciBjb25maWd1cmF0aW9uIGZvciB0aGlzIGpvYiBmcm9tIGEgcmVzb2x2ZWQgcmV0ZW50aW9uXG4gICAqIGNvbmZpZywgb3IgcmV0dXJucyBgbnVsbGAgd2hlbiByZXRlbnRpb24gaXMgZnVsbHkgZGlzYWJsZWQgKG5vdGhpbmcgdG9cbiAgICogcHJ1bmUsIHNvIG5vdGhpbmcgdG8gc2NoZWR1bGUpLiBgbWF4Q29uY3VycmVuY3k6IDFgIGtlZXBzIHJ1bnMgZnJvbVxuICAgKiBvdmVybGFwcGluZywgYW5kIGBkZWR1cGxpY2F0ZVdoaWxlUXVldWVkYCBzdG9wcyB0aGUgaW50ZXJ2YWwgc2NoZWR1bGVyIGZyb21cbiAgICogcGlsaW5nIHVwIHJlZHVuZGFudCBxdWV1ZWQgcm93cyB3aGVuIGEgcHJ1bmUgaXMgc2xvdyBvciBubyB3b3JrZXIgaXMgZnJlZS5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLXR5cGVzLmpzXCIpLlJlc29sdmVkQmFja2dyb3VuZEpvYnNSZXRlbnRpb25Db25maWd1cmF0aW9ufSByZXRlbnRpb24gLSBSZXNvbHZlZCByZXRlbnRpb24gY29uZmlnLlxuICAgKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5TY2hlZHVsZWRCYWNrZ3JvdW5kSm9iQ29uZmlndXJhdGlvbiB8IG51bGx9IC0gU2NoZWR1bGVyIGNvbmZpZyBmb3IgdGhlIHBydW5lIGpvYiwgb3IgbnVsbCB3aGVuIHJldGVudGlvbiBpcyBkaXNhYmxlZC5cbiAgICovXG4gIHN0YXRpYyBzY2hlZHVsZUNvbmZpZ3VyYXRpb24ocmV0ZW50aW9uKSB7XG4gICAgY29uc3QgcHJ1bmVzQ29tcGxldGVkID0gdHlwZW9mIHJldGVudGlvbi5jb21wbGV0ZWRUdGxNcyA9PT0gXCJudW1iZXJcIiAmJiByZXRlbnRpb24uY29tcGxldGVkVHRsTXMgPiAwXG4gICAgY29uc3QgcHJ1bmVzRmFpbGVkID0gdHlwZW9mIHJldGVudGlvbi5mYWlsZWRUdGxNcyA9PT0gXCJudW1iZXJcIiAmJiByZXRlbnRpb24uZmFpbGVkVHRsTXMgPiAwXG5cbiAgICBpZiAoIXBydW5lc0NvbXBsZXRlZCAmJiAhcHJ1bmVzRmFpbGVkKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBjbGFzczogdGhpcyxcbiAgICAgIGV2ZXJ5OiByZXRlbnRpb24uc3dlZXBJbnRlcnZhbE1zLFxuICAgICAgb3B0aW9uczoge2NvbmN1cnJlbmN5S2V5OiBcInZlbG9jaW91cy1wcnVuZS10ZXJtaW5hbC1iYWNrZ3JvdW5kLWpvYnNcIiwgbWF4Q29uY3VycmVuY3k6IDEsIGRlZHVwbGljYXRlV2hpbGVRdWV1ZWQ6IHRydWV9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFBydW5lcyB0ZXJtaW5hbCBqb2Igcm93cyBwYXN0IHRoZWlyIHJldGVudGlvbiB3aW5kb3cuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgYXN5bmMgcGVyZm9ybSgpIHtcbiAgICBjb25zdCBjb25maWd1cmF0aW9uID0gQ29uZmlndXJhdGlvbi5jdXJyZW50KClcbiAgICBjb25zdCBjb25maWcgPSBjb25maWd1cmF0aW9uLmdldEJhY2tncm91bmRKb2JzQ29uZmlnKClcbiAgICBjb25zdCBzdG9yZSA9IG5ldyBCYWNrZ3JvdW5kSm9ic1N0b3JlKHtjb25maWd1cmF0aW9uLCBkYXRhYmFzZUlkZW50aWZpZXI6IGNvbmZpZy5kYXRhYmFzZUlkZW50aWZpZXJ9KVxuXG4gICAgYXdhaXQgc3RvcmUucHJ1bmVUZXJtaW5hbEpvYnMoe1xuICAgICAgY29tcGxldGVkVHRsTXM6IGNvbmZpZy5yZXRlbnRpb24uY29tcGxldGVkVHRsTXMsXG4gICAgICBmYWlsZWRUdGxNczogY29uZmlnLnJldGVudGlvbi5mYWlsZWRUdGxNcyxcbiAgICAgIGJhdGNoU2l6ZTogY29uZmlnLnJldGVudGlvbi5iYXRjaFNpemVcbiAgICB9KVxuICB9XG59XG4iXX0=
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJ1bmUtdGVybWluYWwtYmFja2dyb3VuZC1qb2JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2pvYnMvcHJ1bmUtdGVybWluYWwtYmFja2dyb3VuZC1qb2JzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLG1CQUFtQixNQUFNLDZCQUE2QixDQUFBO0FBQzdELE9BQU8sYUFBYSxNQUFNLHFCQUFxQixDQUFBO0FBQy9DLE9BQU8sWUFBWSxNQUFNLDJCQUEyQixDQUFBO0FBRXBEOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLENBQUMsT0FBTyxPQUFPLDhCQUErQixTQUFRLFlBQVk7SUFDdEUsdUJBQXVCO0lBQ3ZCLE1BQU0sQ0FBQyxtQkFBbUIsR0FBRyxFQUFFLENBQUE7SUFFL0I7Ozs7Ozs7T0FPRztJQUNILE1BQU0sQ0FBQyxPQUFPO1FBQ1osT0FBTywwQ0FBMEMsQ0FBQTtJQUNuRCxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxNQUFNLENBQUMscUJBQXFCLENBQUMsU0FBUztRQUNwQyxNQUFNLGVBQWUsR0FBRyxPQUFPLFNBQVMsQ0FBQyxjQUFjLEtBQUssUUFBUSxJQUFJLFNBQVMsQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFBO1FBQ3BHLE1BQU0sWUFBWSxHQUFHLE9BQU8sU0FBUyxDQUFDLFdBQVcsS0FBSyxRQUFRLElBQUksU0FBUyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUE7UUFFM0YsSUFBSSxDQUFDLGVBQWUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3RDLE9BQU8sSUFBSSxDQUFBO1FBQ2IsQ0FBQztRQUVELE9BQU87WUFDTCxLQUFLLEVBQUUsSUFBSTtZQUNYLEtBQUssRUFBRSxTQUFTLENBQUMsZUFBZTtZQUNoQyxPQUFPLEVBQUUsRUFBQyxjQUFjLEVBQUUsMENBQTBDLEVBQUUsY0FBYyxFQUFFLENBQUMsRUFBRSxzQkFBc0IsRUFBRSxJQUFJLEVBQUM7U0FDdkgsQ0FBQTtJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsT0FBTztRQUNYLE1BQU0sYUFBYSxHQUFHLGFBQWEsQ0FBQyxPQUFPLEVBQUUsQ0FBQTtRQUM3QyxNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsdUJBQXVCLEVBQUUsQ0FBQTtRQUN0RCxNQUFNLEtBQUssR0FBRyxJQUFJLG1CQUFtQixDQUFDLEVBQUMsYUFBYSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sQ0FBQyxrQkFBa0IsRUFBQyxDQUFDLENBQUE7UUFFckcsTUFBTSxLQUFLLENBQUMsaUJBQWlCLENBQUM7WUFDNUIsY0FBYyxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYztZQUMvQyxXQUFXLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxXQUFXO1lBQ3pDLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLFNBQVM7U0FDdEMsQ0FBQyxDQUFBO0lBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgQmFja2dyb3VuZEpvYnNTdG9yZSBmcm9tIFwiLi4vYmFja2dyb3VuZC1qb2JzL3N0b3JlLmpzXCJcbmltcG9ydCBDb25maWd1cmF0aW9uIGZyb20gXCIuLi9jb25maWd1cmF0aW9uLmpzXCJcbmltcG9ydCBWZWxvY2lvdXNKb2IgZnJvbSBcIi4uL2JhY2tncm91bmQtam9icy9qb2IuanNcIlxuXG4vKipcbiAqIEJ1aWx0LWluIGpvYiB0aGF0IHBydW5lcyB0ZXJtaW5hbCBgYmFja2dyb3VuZF9qb2JzYCByb3dzIHBhc3QgdGhlaXIgcmV0ZW50aW9uXG4gKiB3aW5kb3cgc28gdGhlIHRhYmxlIGRvZXMgbm90IGdyb3cgdW5ib3VuZGVkLiBUaGUgbWFpbiBwcm9jZXNzIHJlZ2lzdGVycyB0aGlzXG4gKiBvbiB0aGUgbm9ybWFsIGJhY2tncm91bmQtam9icyBzY2hlZHVsZXIgd2hlbiBgYmFja2dyb3VuZEpvYnMucmV0ZW50aW9uYCBpc1xuICogZW5hYmxlZCwgc28gaXQgcnVucyBhcyBhbiBvcmRpbmFyeSBzY2hlZHVsZWQvcXVldWVkIGpvYiDigJQgdmlzaWJsZSBpbiB0aGUgam9iXG4gKiB0YWJsZXMgYW5kIGRpc3BhdGNoZWQgdG8gYSB3b3JrZXIg4oCUIHJhdGhlciB0aGFuIGEgaGlkZGVuIGluLXByb2Nlc3MgdGltZXIuXG4gKiBAYXVnbWVudHMge1ZlbG9jaW91c0pvYjxbXT59XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBydW5lVGVybWluYWxCYWNrZ3JvdW5kSm9ic0pvYiBleHRlbmRzIFZlbG9jaW91c0pvYiB7XG4gIC8qKiBAdHlwZSB7c3RyaW5nW119ICovXG4gIHN0YXRpYyBkYXRhYmFzZUlkZW50aWZpZXJzID0gW11cblxuICAvKipcbiAgICogUmVzZXJ2ZWQgam9iIG5hbWUgdGhhdCBhbiBhcHBsaWNhdGlvbiBqb2IgY2Fubm90IHNoYWRvdy4gVGhlIHJlZ2lzdHJ5IGxvYWRzXG4gICAqIGFwcCBgc3JjL2pvYnNgIGZpcnN0IGFuZCBza2lwcyBkdXBsaWNhdGUgYnVpbHQtaW4gbmFtZXMsIHNvIGlmIHRoaXMgdXNlZCB0aGVcbiAgICogZGVmYXVsdCBjbGFzcy1uYW1lIGlkZW50aXR5IGFuIGFwcCBjbGFzcyBuYW1lZCBgUHJ1bmVUZXJtaW5hbEJhY2tncm91bmRKb2JzSm9iYFxuICAgKiB3b3VsZCBiZSBkaXNwYXRjaGVkIGluc3RlYWQuIEEgYDpgLW5hbWVzcGFjZWQgbmFtZSBjYW4gbmV2ZXIgY29sbGlkZSB3aXRoIGFcbiAgICogZGVmYXVsdCAoY2xhc3MtbmFtZSkgaWRlbnRpdHksIHNpbmNlIGNsYXNzIG5hbWVzIGNhbm5vdCBjb250YWluIGA6YC5cbiAgICogQHJldHVybnMge3N0cmluZ30gLSBSZXNlcnZlZCBqb2IgbmFtZS5cbiAgICovXG4gIHN0YXRpYyBqb2JOYW1lKCkge1xuICAgIHJldHVybiBcInZlbG9jaW91czpwcnVuZS10ZXJtaW5hbC1iYWNrZ3JvdW5kLWpvYnNcIlxuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyB0aGUgc2NoZWR1bGVyIGNvbmZpZ3VyYXRpb24gZm9yIHRoaXMgam9iIGZyb20gYSByZXNvbHZlZCByZXRlbnRpb25cbiAgICogY29uZmlnLCBvciByZXR1cm5zIGBudWxsYCB3aGVuIHJldGVudGlvbiBpcyBmdWxseSBkaXNhYmxlZCAobm90aGluZyB0b1xuICAgKiBwcnVuZSwgc28gbm90aGluZyB0byBzY2hlZHVsZSkuIGBtYXhDb25jdXJyZW5jeTogMWAga2VlcHMgcnVucyBmcm9tXG4gICAqIG92ZXJsYXBwaW5nLCBhbmQgYGRlZHVwbGljYXRlV2hpbGVRdWV1ZWRgIHN0b3BzIHRoZSBpbnRlcnZhbCBzY2hlZHVsZXIgZnJvbVxuICAgKiBwaWxpbmcgdXAgcmVkdW5kYW50IHF1ZXVlZCByb3dzIHdoZW4gYSBwcnVuZSBpcyBzbG93IG9yIG5vIHdvcmtlciBpcyBmcmVlLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24tdHlwZXMuanNcIikuUmVzb2x2ZWRCYWNrZ3JvdW5kSm9ic1JldGVudGlvbkNvbmZpZ3VyYXRpb259IHJldGVudGlvbiAtIFJlc29sdmVkIHJldGVudGlvbiBjb25maWcuXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLXR5cGVzLmpzXCIpLlNjaGVkdWxlZEJhY2tncm91bmRKb2JDb25maWd1cmF0aW9uIHwgbnVsbH0gLSBTY2hlZHVsZXIgY29uZmlnIGZvciB0aGUgcHJ1bmUgam9iLCBvciBudWxsIHdoZW4gcmV0ZW50aW9uIGlzIGRpc2FibGVkLlxuICAgKi9cbiAgc3RhdGljIHNjaGVkdWxlQ29uZmlndXJhdGlvbihyZXRlbnRpb24pIHtcbiAgICBjb25zdCBwcnVuZXNDb21wbGV0ZWQgPSB0eXBlb2YgcmV0ZW50aW9uLmNvbXBsZXRlZFR0bE1zID09PSBcIm51bWJlclwiICYmIHJldGVudGlvbi5jb21wbGV0ZWRUdGxNcyA+IDBcbiAgICBjb25zdCBwcnVuZXNGYWlsZWQgPSB0eXBlb2YgcmV0ZW50aW9uLmZhaWxlZFR0bE1zID09PSBcIm51bWJlclwiICYmIHJldGVudGlvbi5mYWlsZWRUdGxNcyA+IDBcblxuICAgIGlmICghcHJ1bmVzQ29tcGxldGVkICYmICFwcnVuZXNGYWlsZWQpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNsYXNzOiB0aGlzLFxuICAgICAgZXZlcnk6IHJldGVudGlvbi5zd2VlcEludGVydmFsTXMsXG4gICAgICBvcHRpb25zOiB7Y29uY3VycmVuY3lLZXk6IFwidmVsb2Npb3VzLXBydW5lLXRlcm1pbmFsLWJhY2tncm91bmQtam9ic1wiLCBtYXhDb25jdXJyZW5jeTogMSwgZGVkdXBsaWNhdGVXaGlsZVF1ZXVlZDogdHJ1ZX1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUHJ1bmVzIHRlcm1pbmFsIGpvYiByb3dzIHBhc3QgdGhlaXIgcmV0ZW50aW9uIHdpbmRvdy5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyBwZXJmb3JtKCkge1xuICAgIGNvbnN0IGNvbmZpZ3VyYXRpb24gPSBDb25maWd1cmF0aW9uLmN1cnJlbnQoKVxuICAgIGNvbnN0IGNvbmZpZyA9IGNvbmZpZ3VyYXRpb24uZ2V0QmFja2dyb3VuZEpvYnNDb25maWcoKVxuICAgIGNvbnN0IHN0b3JlID0gbmV3IEJhY2tncm91bmRKb2JzU3RvcmUoe2NvbmZpZ3VyYXRpb24sIGRhdGFiYXNlSWRlbnRpZmllcjogY29uZmlnLmRhdGFiYXNlSWRlbnRpZmllcn0pXG5cbiAgICBhd2FpdCBzdG9yZS5wcnVuZVRlcm1pbmFsSm9icyh7XG4gICAgICBjb21wbGV0ZWRUdGxNczogY29uZmlnLnJldGVudGlvbi5jb21wbGV0ZWRUdGxNcyxcbiAgICAgIGZhaWxlZFR0bE1zOiBjb25maWcucmV0ZW50aW9uLmZhaWxlZFR0bE1zLFxuICAgICAgYmF0Y2hTaXplOiBjb25maWcucmV0ZW50aW9uLmJhdGNoU2l6ZVxuICAgIH0pXG4gIH1cbn1cbiJdfQ==
@@ -377,7 +377,7 @@ export default class ServerChangeFeedStore {
377
377
  * @returns {Promise<?>} - Callback result.
378
378
  */
379
379
  async _withDb(callback) {
380
- return await this.configuration.ensureConnections({ name: "Server change-feed store" }, async (dbs) => {
380
+ return await this.configuration.ensureConnections({ databaseIdentifiers: [this.databaseIdentifier], name: "Server change-feed store" }, async (dbs) => {
381
381
  const db = dbs[this.databaseIdentifier];
382
382
  if (!db)
383
383
  throw new Error(`No database connection available for identifier: ${this.databaseIdentifier}`);
@@ -450,4 +450,4 @@ function scopesEqual(changeScope, requestedScope) {
450
450
  * @property {string | null} scope_json - Scope JSON.
451
451
  * @property {number | string} server_sequence - Server sequence.
452
452
  */
453
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVyLWNoYW5nZS1mZWVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3N5bmMvc2VydmVyLWNoYW5nZS1mZWVkLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sUUFBUSxDQUFBO0FBQ2pDLE9BQU8sU0FBUyxNQUFNLGlDQUFpQyxDQUFBO0FBQ3ZELE9BQU8sbUJBQW1CLE1BQU0sa0JBQWtCLENBQUE7QUFFbEQsTUFBTSxzQkFBc0IsR0FBRyxLQUFLLENBQUE7QUFDcEMsTUFBTSxpQkFBaUIsR0FBRyxHQUFHLENBQUE7QUFDN0IsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFBO0FBQzFCLE1BQU0sVUFBVSxHQUFHLDZCQUE2QixDQUFBO0FBQ2hELE1BQU0sTUFBTSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUE7QUFFNUI7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxxQ0FBcUMsQ0FBQyxhQUFhO0lBQ2pFLElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUE7SUFFckMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ1gsS0FBSyxHQUFHLElBQUkscUJBQXFCLENBQUMsRUFBQyxhQUFhLEVBQUMsQ0FBQyxDQUFBO1FBQ2xELE1BQU0sQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFBO0lBQ2xDLENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQTtBQUNkLENBQUM7QUFFRCxNQUFNLENBQUMsT0FBTyxPQUFPLHFCQUFxQjtJQUN4Qzs7Ozs7O09BTUc7SUFDSCxZQUFZLEVBQUMsYUFBYSxFQUFFLGtCQUFrQixHQUFHLFNBQVMsRUFBRSxhQUFhLEVBQUM7UUFDeEUsTUFBTSxpQkFBaUIsR0FBRyxhQUFhLENBQUMsb0JBQW9CLEVBQUUsQ0FBQTtRQUU5RCxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQTtR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LENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQTtJQUVuRyxPQUFPLGlCQUFpQixDQUFBO0FBQzFCLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxlQUFlLENBQUMsS0FBSztJQUM1QixJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUM7UUFBRSxPQUFPLElBQUksQ0FBQTtJQUU5RCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUE7QUFDMUIsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUyxXQUFXLENBQUMsV0FBVyxFQUFFLGNBQWM7SUFDOUMsSUFBSSxjQUFjLEtBQUssU0FBUztRQUFFLE9BQU8sSUFBSSxDQUFBO0lBRTdDLE9BQU8sbUJBQW1CLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxLQUFLLG1CQUFtQixDQUFDLGNBQWMsQ0FBQyxDQUFBO0FBQ3pGLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSDs7Ozs7Ozs7Ozs7Ozs7O0dBZUciLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHtyYW5kb21VVUlEfSBmcm9tIFwiY3J5cHRvXCJcbmltcG9ydCBUYWJsZURhdGEgZnJvbSBcIi4uL2RhdGFiYXNlL3RhYmxlLWRhdGEvaW5kZXguanNcIlxuaW1wb3J0IHN0YWJsZUpzb25TdHJpbmdpZnkgZnJvbSBcIi4vc3RhYmxlLWpzb24uanNcIlxuXG5jb25zdCBERUZBVUxUX1JFVEVOVElPTl9TSVpFID0gMTAwMDBcbmNvbnN0IERFRkFVTFRfUEFHRV9TSVpFID0gMTAwXG5jb25zdCBNQVhfUEFHRV9TSVpFID0gMTAwMFxuY29uc3QgVEFCTEVfTkFNRSA9IFwiZnJvbnRlbmRfbW9kZWxfc3luY19jaGFuZ2VzXCJcbmNvbnN0IHN0b3JlcyA9IG5ldyBXZWFrTWFwKClcblxuLyoqXG4gKiBTaGFyZWQgc2VydmVyIGNoYW5nZS1mZWVkIHN0b3JlIGZvciBhIGNvbmZpZ3VyYXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdH0gY29uZmlndXJhdGlvbiAtIENvbmZpZ3VyYXRpb24uXG4gKiBAcmV0dXJucyB7U2VydmVyQ2hhbmdlRmVlZFN0b3JlfSAtIFN0b3JlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VydmVyQ2hhbmdlRmVlZFN0b3JlRm9yQ29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uKSB7XG4gIGxldCBzdG9yZSA9IHN0b3Jlcy5nZXQoY29uZmlndXJhdGlvbilcblxuICBpZiAoIXN0b3JlKSB7XG4gICAgc3RvcmUgPSBuZXcgU2VydmVyQ2hhbmdlRmVlZFN0b3JlKHtjb25maWd1cmF0aW9ufSlcbiAgICBzdG9yZXMuc2V0KGNvbmZpZ3VyYXRpb24sIHN0b3JlKVxuICB9XG5cbiAgcmV0dXJuIHN0b3JlXG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlcnZlckNoYW5nZUZlZWRTdG9yZSB7XG4gIC8qKlxuICAgKiBSdW5zIGNvbnN0cnVjdG9yLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSBhcmdzLmNvbmZpZ3VyYXRpb24gLSBDb25maWd1cmF0aW9uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3MuZGF0YWJhc2VJZGVudGlmaWVyXSAtIERhdGFiYXNlIGlkZW50aWZpZXIuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbYXJncy5yZXRlbnRpb25TaXplXSAtIE51bWJlciBvZiBmZWVkIGVudHJpZXMgdG8gcmV0YWluLlxuICAgKi9cbiAgY29uc3RydWN0b3Ioe2NvbmZpZ3VyYXRpb24sIGRhdGFiYXNlSWRlbnRpZmllciA9IFwiZGVmYXVsdFwiLCByZXRlbnRpb25TaXplfSkge1xuICAgIGNvbnN0IHN5bmNDb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbi5nZXRTeW5jQ29uZmlndXJhdGlvbigpXG5cbiAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uXG4gICAgdGhpcy5kYXRhYmFzZUlkZW50aWZpZXIgPSBkYXRhYmFzZUlkZW50aWZpZXJcbiAgICB0aGlzLnJldGVudGlvblNpemUgPSByZXRlbnRpb25TaXplIHx8IHN5bmNDb25maWd1cmF0aW9uLmNoYW5nZUZlZWRSZXRlbnRpb25TaXplIHx8IERFRkFVTFRfUkVURU5USU9OX1NJWkVcbiAgICAvKiogQHR5cGUge1NlcnZlckNoYW5nZUZlZWRFbnRyeVtdfSAqL1xuICAgIHRoaXMuX21lbW9yeUNoYW5nZXMgPSBbXVxuICAgIHRoaXMuX21lbW9yeVNlcXVlbmNlID0gMFxuICAgIHRoaXMuX2lzUmVhZHkgPSBmYWxzZVxuICAgIHRoaXMuX3JlYWR5UHJvbWlzZSA9IG51bGxcbiAgfVxuXG4gIC8qKlxuICAgKiBFbnN1cmVzIHRoZSBiYWNraW5nIHRhYmxlIGV4aXN0cy5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiByZWFkeS5cbiAgICovXG4gIGFzeW5jIGVuc3VyZVJlYWR5KCkge1xuICAgIGlmICh0aGlzLl91c2VzTWVtb3J5U3RvcmFnZSgpKSB7XG4gICAgICB0aGlzLl9pc1JlYWR5ID0gdHJ1ZVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGF3YWl0IHRoaXMuX3NjaGVtYVJlYWR5KCkpIHJldHVyblxuICAgIGlmICh0aGlzLl9yZWFkeVByb21pc2UpIHJldHVybiBhd2FpdCB0aGlzLl9yZWFkeVByb21pc2VcblxuICAgIHRoaXMuX3JlYWR5UHJvbWlzZSA9IChhc3luYyAoKSA9PiB7XG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb24uc2V0Q3VycmVudCgpXG4gICAgICBhd2FpdCB0aGlzLl93aXRoRGIoYXN5bmMgKGRiKSA9PiB7XG4gICAgICAgIGF3YWl0IHRoaXMuX2Vuc3VyZUNoYW5nZXNUYWJsZShkYilcbiAgICAgIH0pXG4gICAgICB0aGlzLl9pc1JlYWR5ID0gdHJ1ZVxuICAgIH0pKClcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLl9yZWFkeVByb21pc2VcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKCF0aGlzLl9pc1JlYWR5KSB0aGlzLl9yZWFkeVByb21pc2UgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFwcGVuZHMgYSBjaGFuZ2UgYW5kIGFzc2lnbnMgdGhlIG5leHQgc2VydmVyIHNlcXVlbmNlLlxuICAgKiBAcGFyYW0ge09taXQ8U2VydmVyQ2hhbmdlRmVlZEVudHJ5LCBcImNyZWF0ZWRBdFwiIHwgXCJpZFwiIHwgXCJzZXJ2ZXJTZXF1ZW5jZVwiPiAmIHtjcmVhdGVkQXQ/OiBzdHJpbmcsIGlkPzogc3RyaW5nfX0gY2hhbmdlIC0gQ2hhbmdlIHBheWxvYWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFNlcnZlckNoYW5nZUZlZWRFbnRyeT59IC0gUGVyc2lzdGVkIGNoYW5nZS5cbiAgICovXG4gIGFzeW5jIGFwcGVuZChjaGFuZ2UpIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZVJlYWR5KClcblxuICAgIGNvbnN0IGlkID0gY2hhbmdlLmlkIHx8IHJhbmRvbVVVSUQoKVxuICAgIGNvbnN0IGNyZWF0ZWRBdCA9IGNoYW5nZS5jcmVhdGVkQXQgfHwgbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG5cbiAgICBpZiAodGhpcy5fdXNlc01lbW9yeVN0b3JhZ2UoKSkgcmV0dXJuIHRoaXMuX2FwcGVuZE1lbW9yeSh7Li4uY2hhbmdlLCBjcmVhdGVkQXQsIGlkfSlcblxuICAgIHJldHVybiBhd2FpdCB0aGlzLl93aXRoRGIoYXN5bmMgKGRiKSA9PiB7XG4gICAgICBhd2FpdCBkYi5pbnNlcnQoe1xuICAgICAgICB0YWJsZU5hbWU6IFRBQkxFX05BTUUsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBhY3Rvcl9kZXZpY2VfaWQ6IGNoYW5nZS5hY3RvckRldmljZUlkLFxuICAgICAgICAgIGFjdG9yX3VzZXJfaWQ6IGNoYW5nZS5hY3RvclVzZXJJZCxcbiAgICAgICAgICBhdHRyaWJ1dGVzX2pzb246IEpTT04uc3RyaW5naWZ5KGNoYW5nZS5hdHRyaWJ1dGVzIHx8IG51bGwpLFxuICAgICAgICAgIGNyZWF0ZWRfYXQ6IG5ldyBEYXRlKGNyZWF0ZWRBdCksXG4gICAgICAgICAgaWQsXG4gICAgICAgICAgaWRlbXBvdGVuY3lfa2V5OiBjaGFuZ2UuaWRlbXBvdGVuY3lLZXksXG4gICAgICAgICAgbW9kZWw6IGNoYW5nZS5tb2RlbCxcbiAgICAgICAgICBvcGVyYXRpb246IGNoYW5nZS5vcGVyYXRpb24sXG4gICAgICAgICAgcGF5bG9hZF9qc29uOiBKU09OLnN0cmluZ2lmeShjaGFuZ2UucGF5bG9hZCB8fCBudWxsKSxcbiAgICAgICAgICByZWNvcmRfaWQ6IGNoYW5nZS5yZWNvcmRJZCA9PT0gbnVsbCB8fCBjaGFuZ2UucmVjb3JkSWQgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBTdHJpbmcoY2hhbmdlLnJlY29yZElkKSxcbiAgICAgICAgICByZXNwb25zZV9qc29uOiBKU09OLnN0cmluZ2lmeShjaGFuZ2UucmVzcG9uc2UgfHwgbnVsbCksXG4gICAgICAgICAgc2NvcGVfanNvbjogc3RhYmxlSnNvblN0cmluZ2lmeShjaGFuZ2Uuc2NvcGUgfHwgbnVsbClcbiAgICAgICAgfVxuICAgICAgfSlcblxuICAgICAgY29uc3Qgcm93ID0gYXdhaXQgdGhpcy5fY2hhbmdlQnlJZChkYiwgaWQpXG4gICAgICBpZiAoIXJvdykgdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIHBlcnNpc3Qgc2VydmVyIGNoYW5nZS1mZWVkIGVudHJ5XCIpXG5cbiAgICAgIGF3YWl0IHRoaXMuX3BydW5lUmV0YWluZWRDaGFuZ2VzKGRiLCByb3cuc2VydmVyU2VxdWVuY2UpXG5cbiAgICAgIHJldHVybiByb3dcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgY3VycmVudCBsYXRlc3Qgc2VydmVyIHNlcXVlbmNlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxudW1iZXI+fSAtIExhdGVzdCBzZXF1ZW5jZS5cbiAgICovXG4gIGFzeW5jIGxhdGVzdFNlcXVlbmNlKCkge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlUmVhZHkoKVxuXG4gICAgaWYgKHRoaXMuX3VzZXNNZW1vcnlTdG9yYWdlKCkpIHJldHVybiB0aGlzLl9tZW1vcnlTZXF1ZW5jZVxuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuX3dpdGhEYihhc3luYyAoZGIpID0+IHtcbiAgICAgIGNvbnN0IHJvd3MgPSBhd2FpdCBkYlxuICAgICAgICAubmV3UXVlcnkoKVxuICAgICAgICAuZnJvbShUQUJMRV9OQU1FKVxuICAgICAgICAub3JkZXIoXCJzZXJ2ZXJfc2VxdWVuY2UgREVTQ1wiKVxuICAgICAgICAubGltaXQoMSlcbiAgICAgICAgLnJlc3VsdHMoKVxuICAgICAgY29uc3Qgcm93ID0gLyoqIEB0eXBlIHt7c2VydmVyX3NlcXVlbmNlPzogbnVtYmVyIHwgc3RyaW5nfSB8IHVuZGVmaW5lZH0gKi8gKHJvd3NbMF0pXG5cbiAgICAgIHJldHVybiByb3cgPyBOdW1iZXIocm93LnNlcnZlcl9zZXF1ZW5jZSkgOiAwXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIG9sZGVzdCByZXRhaW5lZCBzZXJ2ZXIgc2VxdWVuY2UuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPG51bWJlciB8IG51bGw+fSAtIE9sZGVzdCByZXRhaW5lZCBzZXF1ZW5jZS5cbiAgICovXG4gIGFzeW5jIG9sZGVzdFNlcXVlbmNlKCkge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlUmVhZHkoKVxuXG4gICAgaWYgKHRoaXMuX3VzZXNNZW1vcnlTdG9yYWdlKCkpIHJldHVybiB0aGlzLl9tZW1vcnlDaGFuZ2VzWzBdPy5zZXJ2ZXJTZXF1ZW5jZSB8fCBudWxsXG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5fd2l0aERiKGFzeW5jIChkYikgPT4gYXdhaXQgdGhpcy5fb2xkZXN0U2VxdWVuY2UoZGIpKVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgb3JkZXJlZCBjaGFuZ2VzIGFmdGVyIGEgY3Vyc29yLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIEFyZ3VtZW50cy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGFyZ3MuYWZ0ZXJTZXF1ZW5jZSAtIEV4Y2x1c2l2ZSBsb3dlciBib3VuZC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFthcmdzLmxpbWl0XSAtIE1heGltdW0gbnVtYmVyIG9mIGNoYW5nZXMuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbYXJncy51cFRvU2VxdWVuY2VdIC0gSW5jbHVzaXZlIHVwcGVyIGJvdW5kLlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsID8+fSBbYXJncy5zY29wZV0gLSBDYWxsZXIgc3luYyBzY29wZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8e2NoYW5nZXM6IFNlcnZlckNoYW5nZUZlZWRFbnRyeVtdLCBoYXNNb3JlOiBib29sZWFuLCBuZXh0U2VxdWVuY2U6IG51bWJlciwgb2xkZXN0U2VxdWVuY2U6IG51bWJlciB8IG51bGwsIHNuYXBzaG90UmVxdWlyZWQ6IGJvb2xlYW4sIHVwVG9TZXF1ZW5jZTogbnVtYmVyfT59IC0gT3JkZXJlZCBwYWdlLlxuICAgKi9cbiAgYXN5bmMgY2hhbmdlc0FmdGVyKHthZnRlclNlcXVlbmNlLCBsaW1pdCA9IERFRkFVTFRfUEFHRV9TSVpFLCBzY29wZSwgdXBUb1NlcXVlbmNlfSkge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlUmVhZHkoKVxuXG4gICAgY29uc3QgcGFnZVNpemUgPSBub3JtYWxpemVMaW1pdChsaW1pdClcblxuICAgIGlmICh0aGlzLl91c2VzTWVtb3J5U3RvcmFnZSgpKSByZXR1cm4gdGhpcy5fbWVtb3J5Q2hhbmdlc0FmdGVyKHthZnRlclNlcXVlbmNlLCBsaW1pdDogcGFnZVNpemUsIHNjb3BlLCB1cFRvU2VxdWVuY2V9KVxuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuX3dpdGhEYihhc3luYyAoZGIpID0+IHtcbiAgICAgIGNvbnN0IGxhdGVzdFNlcXVlbmNlID0gdHlwZW9mIHVwVG9TZXF1ZW5jZSA9PT0gXCJudW1iZXJcIiA/IHVwVG9TZXF1ZW5jZSA6IGF3YWl0IHRoaXMuX2xhdGVzdFNlcXVlbmNlKGRiKVxuICAgICAgY29uc3Qgb2xkZXN0U2VxdWVuY2UgPSBhd2FpdCB0aGlzLl9vbGRlc3RTZXF1ZW5jZShkYilcbiAgICAgIGNvbnN0IHNuYXBzaG90UmVxdWlyZWQgPSBhZnRlclNlcXVlbmNlID4gMCAmJiBvbGRlc3RTZXF1ZW5jZSAhPT0gbnVsbCAmJiBvbGRlc3RTZXF1ZW5jZSA+IGFmdGVyU2VxdWVuY2UgKyAxXG5cbiAgICAgIGlmIChzbmFwc2hvdFJlcXVpcmVkKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY2hhbmdlczogW10sXG4gICAgICAgICAgaGFzTW9yZTogZmFsc2UsXG4gICAgICAgICAgbmV4dFNlcXVlbmNlOiBhZnRlclNlcXVlbmNlLFxuICAgICAgICAgIG9sZGVzdFNlcXVlbmNlLFxuICAgICAgICAgIHNuYXBzaG90UmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgdXBUb1NlcXVlbmNlOiBsYXRlc3RTZXF1ZW5jZVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJvd3MgPSAvKiogQHR5cGUge1NlcnZlckNoYW5nZUZlZWRSb3dbXX0gKi8gKGF3YWl0IGRiXG4gICAgICAgIC5uZXdRdWVyeSgpXG4gICAgICAgIC5mcm9tKFRBQkxFX05BTUUpXG4gICAgICAgIC53aGVyZShgc2VydmVyX3NlcXVlbmNlID4gJHtkYi5xdW90ZShhZnRlclNlcXVlbmNlKX1gKVxuICAgICAgICAud2hlcmUoYHNlcnZlcl9zZXF1ZW5jZSA8PSAke2RiLnF1b3RlKGxhdGVzdFNlcXVlbmNlKX1gKVxuICAgICAgICAud2hlcmUoc2NvcGUgPT09IHVuZGVmaW5lZCA/IFwiMSA9IDFcIiA6IHtzY29wZV9qc29uOiBzdGFibGVKc29uU3RyaW5naWZ5KHNjb3BlKX0pXG4gICAgICAgIC5vcmRlcihcInNlcnZlcl9zZXF1ZW5jZSBBU0NcIilcbiAgICAgICAgLmxpbWl0KHBhZ2VTaXplICsgMSlcbiAgICAgICAgLnJlc3VsdHMoKSlcbiAgICAgIGNvbnN0IGhhc01vcmUgPSByb3dzLmxlbmd0aCA+IHBhZ2VTaXplXG4gICAgICBjb25zdCBwYWdlUm93cyA9IHJvd3Muc2xpY2UoMCwgcGFnZVNpemUpXG4gICAgICBjb25zdCBjaGFuZ2VzID0gcGFnZVJvd3MubWFwKChyb3cpID0+IHRoaXMuX25vcm1hbGl6ZUNoYW5nZVJvdyhyb3cpKVxuICAgICAgY29uc3QgbGFzdENoYW5nZSA9IGNoYW5nZXNbY2hhbmdlcy5sZW5ndGggLSAxXVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjaGFuZ2VzLFxuICAgICAgICBoYXNNb3JlLFxuICAgICAgICBuZXh0U2VxdWVuY2U6IGxhc3RDaGFuZ2UgPyBsYXN0Q2hhbmdlLnNlcnZlclNlcXVlbmNlIDogYWZ0ZXJTZXF1ZW5jZSxcbiAgICAgICAgb2xkZXN0U2VxdWVuY2UsXG4gICAgICAgIHNuYXBzaG90UmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICB1cFRvU2VxdWVuY2U6IGxhdGVzdFNlcXVlbmNlXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBFbnN1cmVzIHNjaGVtYSBpcyBzdGlsbCBwcmVzZW50LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxib29sZWFuPn0gLSBXaGV0aGVyIHJlYWR5LlxuICAgKi9cbiAgYXN5bmMgX3NjaGVtYVJlYWR5KCkge1xuICAgIGlmICh0aGlzLl91c2VzTWVtb3J5U3RvcmFnZSgpKSByZXR1cm4gdGhpcy5faXNSZWFkeVxuICAgIGlmICghdGhpcy5faXNSZWFkeSkgcmV0dXJuIGZhbHNlXG4gICAgaWYgKGF3YWl0IHRoaXMuX3dpdGhEYihhc3luYyAoZGIpID0+IGF3YWl0IGRiLnRhYmxlRXhpc3RzKFRBQkxFX05BTUUpKSkgcmV0dXJuIHRydWVcblxuICAgIHRoaXMuX2lzUmVhZHkgPSBmYWxzZVxuICAgIHRoaXMuX3JlYWR5UHJvbWlzZSA9IG51bGxcblxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLyoqXG4gICAqIEVuc3VyZXMgY2hhbmdlcyB0YWJsZSBleGlzdHMuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vZGF0YWJhc2UvZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHR9IGRiIC0gRGF0YWJhc2UgY29ubmVjdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBjb21wbGV0ZS5cbiAgICovXG4gIGFzeW5jIF9lbnN1cmVDaGFuZ2VzVGFibGUoZGIpIHtcbiAgICBpZiAoYXdhaXQgZGIudGFibGVFeGlzdHMoVEFCTEVfTkFNRSkpIHJldHVyblxuXG4gICAgY29uc3QgdGFibGUgPSBuZXcgVGFibGVEYXRhKFRBQkxFX05BTUUsIHtpZk5vdEV4aXN0czogdHJ1ZX0pXG5cbiAgICB0YWJsZS5pbnRlZ2VyKFwic2VydmVyX3NlcXVlbmNlXCIsIHthdXRvSW5jcmVtZW50OiB0cnVlLCBudWxsOiBmYWxzZSwgcHJpbWFyeUtleTogdHJ1ZX0pXG4gICAgdGFibGUuc3RyaW5nKFwiaWRcIiwge2luZGV4OiB0cnVlLCBudWxsOiBmYWxzZX0pXG4gICAgdGFibGUuc3RyaW5nKFwibW9kZWxcIiwge2luZGV4OiB0cnVlLCBudWxsOiBmYWxzZX0pXG4gICAgdGFibGUuc3RyaW5nKFwib3BlcmF0aW9uXCIsIHtudWxsOiBmYWxzZX0pXG4gICAgdGFibGUuc3RyaW5nKFwicmVjb3JkX2lkXCIsIHtpbmRleDogdHJ1ZSwgbnVsbDogdHJ1ZX0pXG4gICAgdGFibGUudGV4dChcInBheWxvYWRfanNvblwiLCB7bnVsbDogdHJ1ZX0pXG4gICAgdGFibGUudGV4dChcImF0dHJpYnV0ZXNfanNvblwiLCB7bnVsbDogdHJ1ZX0pXG4gICAgdGFibGUuc3RyaW5nKFwiaWRlbXBvdGVuY3lfa2V5XCIsIHtpbmRleDogdHJ1ZSwgbnVsbDogdHJ1ZX0pXG4gICAgdGFibGUuc3RyaW5nKFwiYWN0b3JfdXNlcl9pZFwiLCB7aW5kZXg6IHRydWUsIG51bGw6IHRydWV9KVxuICAgIHRhYmxlLnN0cmluZyhcImFjdG9yX2RldmljZV9pZFwiLCB7aW5kZXg6IHRydWUsIG51bGw6IHRydWV9KVxuICAgIHRhYmxlLnRleHQoXCJzY29wZV9qc29uXCIsIHtudWxsOiB0cnVlfSlcbiAgICB0YWJsZS50ZXh0KFwicmVzcG9uc2VfanNvblwiLCB7bnVsbDogdHJ1ZX0pXG4gICAgdGFibGUuZGF0ZXRpbWUoXCJjcmVhdGVkX2F0XCIsIHtpbmRleDogdHJ1ZSwgbnVsbDogZmFsc2V9KVxuXG4gICAgYXdhaXQgZGIuY3JlYXRlVGFibGUodGFibGUpXG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgYSBwZXJzaXN0ZWQgY2hhbmdlIGJ5IGlkLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2RhdGFiYXNlL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0fSBkYiAtIERhdGFiYXNlIGNvbm5lY3Rpb24uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpZCAtIEVudHJ5IGlkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxTZXJ2ZXJDaGFuZ2VGZWVkRW50cnkgfCBudWxsPn0gLSBFbnRyeSBvciBudWxsLlxuICAgKi9cbiAgYXN5bmMgX2NoYW5nZUJ5SWQoZGIsIGlkKSB7XG4gICAgY29uc3Qgcm93cyA9IC8qKiBAdHlwZSB7U2VydmVyQ2hhbmdlRmVlZFJvd1tdfSAqLyAoYXdhaXQgZGJcbiAgICAgIC5uZXdRdWVyeSgpXG4gICAgICAuZnJvbShUQUJMRV9OQU1FKVxuICAgICAgLndoZXJlKHtpZH0pXG4gICAgICAubGltaXQoMSlcbiAgICAgIC5yZXN1bHRzKCkpXG5cbiAgICByZXR1cm4gcm93c1swXSA/IHRoaXMuX25vcm1hbGl6ZUNoYW5nZVJvdyhyb3dzWzBdKSA6IG51bGxcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyBjdXJyZW50IGxhdGVzdCBzZXF1ZW5jZSB3aXRob3V0IHJlYWRpbmVzcyBjaGVja3MuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vZGF0YWJhc2UvZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHR9IGRiIC0gRGF0YWJhc2UgY29ubmVjdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8bnVtYmVyPn0gLSBMYXRlc3Qgc2VxdWVuY2UuXG4gICAqL1xuICBhc3luYyBfbGF0ZXN0U2VxdWVuY2UoZGIpIHtcbiAgICBjb25zdCByb3dzID0gLyoqIEB0eXBlIHtBcnJheTx7c2VydmVyX3NlcXVlbmNlPzogbnVtYmVyIHwgc3RyaW5nfT59ICovIChhd2FpdCBkYlxuICAgICAgLm5ld1F1ZXJ5KClcbiAgICAgIC5mcm9tKFRBQkxFX05BTUUpXG4gICAgICAub3JkZXIoXCJzZXJ2ZXJfc2VxdWVuY2UgREVTQ1wiKVxuICAgICAgLmxpbWl0KDEpXG4gICAgICAucmVzdWx0cygpKVxuXG4gICAgcmV0dXJuIHJvd3NbMF0gPyBOdW1iZXIocm93c1swXS5zZXJ2ZXJfc2VxdWVuY2UpIDogMFxuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIGN1cnJlbnQgb2xkZXN0IHNlcXVlbmNlIHdpdGhvdXQgcmVhZGluZXNzIGNoZWNrcy5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9kYXRhYmFzZS9kcml2ZXJzL2Jhc2UuanNcIikuZGVmYXVsdH0gZGIgLSBEYXRhYmFzZSBjb25uZWN0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxudW1iZXIgfCBudWxsPn0gLSBPbGRlc3Qgc2VxdWVuY2UuXG4gICAqL1xuICBhc3luYyBfb2xkZXN0U2VxdWVuY2UoZGIpIHtcbiAgICBjb25zdCByb3dzID0gLyoqIEB0eXBlIHtBcnJheTx7c2VydmVyX3NlcXVlbmNlPzogbnVtYmVyIHwgc3RyaW5nfT59ICovIChhd2FpdCBkYlxuICAgICAgLm5ld1F1ZXJ5KClcbiAgICAgIC5mcm9tKFRBQkxFX05BTUUpXG4gICAgICAub3JkZXIoXCJzZXJ2ZXJfc2VxdWVuY2UgQVNDXCIpXG4gICAgICAubGltaXQoMSlcbiAgICAgIC5yZXN1bHRzKCkpXG5cbiAgICByZXR1cm4gcm93c1swXSA/IE51bWJlcihyb3dzWzBdLnNlcnZlcl9zZXF1ZW5jZSkgOiBudWxsXG4gIH1cblxuICAvKipcbiAgICogUHJ1bmVzIG9sZCByZXRhaW5lZCBjaGFuZ2VzLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2RhdGFiYXNlL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0fSBkYiAtIERhdGFiYXNlIGNvbm5lY3Rpb24uXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBsYXRlc3RTZXF1ZW5jZSAtIExhdGVzdCBzZXF1ZW5jZSBhZnRlciBhcHBlbmQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gY29tcGxldGUuXG4gICAqL1xuICBhc3luYyBfcHJ1bmVSZXRhaW5lZENoYW5nZXMoZGIsIGxhdGVzdFNlcXVlbmNlKSB7XG4gICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHRoaXMucmV0ZW50aW9uU2l6ZSkgfHwgdGhpcy5yZXRlbnRpb25TaXplIDwgMSkgcmV0dXJuXG5cbiAgICBjb25zdCBwcnVuZUJlZm9yZU9yQXQgPSBsYXRlc3RTZXF1ZW5jZSAtIHRoaXMucmV0ZW50aW9uU2l6ZVxuICAgIGlmIChwcnVuZUJlZm9yZU9yQXQgPCAxKSByZXR1cm5cblxuICAgIGNvbnN0IHJvd3MgPSAvKiogQHR5cGUge0FycmF5PHtpZDogc3RyaW5nfT59ICovIChhd2FpdCBkYlxuICAgICAgLm5ld1F1ZXJ5KClcbiAgICAgIC5mcm9tKFRBQkxFX05BTUUpXG4gICAgICAud2hlcmUoYHNlcnZlcl9zZXF1ZW5jZSA8PSAke2RiLnF1b3RlKHBydW5lQmVmb3JlT3JBdCl9YClcbiAgICAgIC5yZXN1bHRzKCkpXG5cbiAgICBmb3IgKGNvbnN0IHJvdyBvZiByb3dzKSB7XG4gICAgICBhd2FpdCBkYi5kZWxldGUoe2NvbmRpdGlvbnM6IHtpZDogcm93LmlkfSwgdGFibGVOYW1lOiBUQUJMRV9OQU1FfSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTm9ybWFsaXplcyBhIGNoYW5nZSByb3cuXG4gICAqIEBwYXJhbSB7U2VydmVyQ2hhbmdlRmVlZFJvd30gcm93IC0gUmF3IGRhdGFiYXNlIHJvdy5cbiAgICogQHJldHVybnMge1NlcnZlckNoYW5nZUZlZWRFbnRyeX0gLSBOb3JtYWxpemVkIGNoYW5nZS5cbiAgICovXG4gIF9ub3JtYWxpemVDaGFuZ2VSb3cocm93KSB7XG4gICAgY29uc3QgY3JlYXRlZEF0VmFsdWUgPSByb3cuY3JlYXRlZF9hdFxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGFjdG9yRGV2aWNlSWQ6IHJvdy5hY3Rvcl9kZXZpY2VfaWQgfHwgbnVsbCxcbiAgICAgIGFjdG9yVXNlcklkOiByb3cuYWN0b3JfdXNlcl9pZCB8fCBudWxsLFxuICAgICAgYXR0cmlidXRlczogcGFyc2VKc29uT3JOdWxsKHJvdy5hdHRyaWJ1dGVzX2pzb24pLFxuICAgICAgY3JlYXRlZEF0OiBjcmVhdGVkQXRWYWx1ZSBpbnN0YW5jZW9mIERhdGUgPyBjcmVhdGVkQXRWYWx1ZS50b0lTT1N0cmluZygpIDogbmV3IERhdGUoY3JlYXRlZEF0VmFsdWUpLnRvSVNPU3RyaW5nKCksXG4gICAgICBpZDogcm93LmlkLFxuICAgICAgaWRlbXBvdGVuY3lLZXk6IHJvdy5pZGVtcG90ZW5jeV9rZXkgfHwgbnVsbCxcbiAgICAgIG1vZGVsOiByb3cubW9kZWwsXG4gICAgICBvcGVyYXRpb246IHJvdy5vcGVyYXRpb24sXG4gICAgICBwYXlsb2FkOiBwYXJzZUpzb25Pck51bGwocm93LnBheWxvYWRfanNvbiksXG4gICAgICByZWNvcmRJZDogcm93LnJlY29yZF9pZCB8fCBudWxsLFxuICAgICAgcmVzcG9uc2U6IHBhcnNlSnNvbk9yTnVsbChyb3cucmVzcG9uc2VfanNvbiksXG4gICAgICBzY29wZTogcGFyc2VKc29uT3JOdWxsKHJvdy5zY29wZV9qc29uKSxcbiAgICAgIHNlcnZlclNlcXVlbmNlOiBOdW1iZXIocm93LnNlcnZlcl9zZXF1ZW5jZSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGlzIHN0b3JlIHNob3VsZCB1c2UgcHJvY2Vzcy1sb2NhbCBtZW1vcnkgYmVjYXVzZSBubyBkYXRhYmFzZSBpZGVudGlmaWVyIGlzIGNvbmZpZ3VyZWQuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgbWVtb3J5IHN0b3JhZ2UgaXMgYWN0aXZlLlxuICAgKi9cbiAgX3VzZXNNZW1vcnlTdG9yYWdlKCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gIXRoaXMuY29uZmlndXJhdGlvbi5nZXREYXRhYmFzZUNvbmZpZ3VyYXRpb24oKVt0aGlzLmRhdGFiYXNlSWRlbnRpZmllcl1cbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFwcGVuZHMgYSBwcm9jZXNzLWxvY2FsIG1lbW9yeSBlbnRyeSB3aGVuIG5vIGRhdGFiYXNlIGlzIGNvbmZpZ3VyZWQuXG4gICAqIEBwYXJhbSB7T21pdDxTZXJ2ZXJDaGFuZ2VGZWVkRW50cnksIFwic2VydmVyU2VxdWVuY2VcIj59IGNoYW5nZSAtIENoYW5nZSBwYXlsb2FkLlxuICAgKiBAcmV0dXJucyB7U2VydmVyQ2hhbmdlRmVlZEVudHJ5fSAtIEFwcGVuZGVkIGVudHJ5LlxuICAgKi9cbiAgX2FwcGVuZE1lbW9yeShjaGFuZ2UpIHtcbiAgICBjb25zdCBlbnRyeSA9IC8qKiBAdHlwZSB7U2VydmVyQ2hhbmdlRmVlZEVudHJ5fSAqLyAoe1xuICAgICAgYWN0b3JEZXZpY2VJZDogY2hhbmdlLmFjdG9yRGV2aWNlSWQsXG4gICAgICBhY3RvclVzZXJJZDogY2hhbmdlLmFjdG9yVXNlcklkLFxuICAgICAgYXR0cmlidXRlczogY2hhbmdlLmF0dHJpYnV0ZXMgfHwgbnVsbCxcbiAgICAgIGNyZWF0ZWRBdDogY2hhbmdlLmNyZWF0ZWRBdCxcbiAgICAgIGlkOiBjaGFuZ2UuaWQsXG4gICAgICBpZGVtcG90ZW5jeUtleTogY2hhbmdlLmlkZW1wb3RlbmN5S2V5LFxuICAgICAgbW9kZWw6IGNoYW5nZS5tb2RlbCxcbiAgICAgIG9wZXJhdGlvbjogY2hhbmdlLm9wZXJhdGlvbixcbiAgICAgIHBheWxvYWQ6IGNoYW5nZS5wYXlsb2FkIHx8IG51bGwsXG4gICAgICByZWNvcmRJZDogY2hhbmdlLnJlY29yZElkID09PSBudWxsIHx8IGNoYW5nZS5yZWNvcmRJZCA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IFN0cmluZyhjaGFuZ2UucmVjb3JkSWQpLFxuICAgICAgcmVzcG9uc2U6IGNoYW5nZS5yZXNwb25zZSB8fCBudWxsLFxuICAgICAgc2NvcGU6IGNoYW5nZS5zY29wZSB8fCBudWxsLFxuICAgICAgc2VydmVyU2VxdWVuY2U6ICsrdGhpcy5fbWVtb3J5U2VxdWVuY2VcbiAgICB9KVxuXG4gICAgdGhpcy5fbWVtb3J5Q2hhbmdlcy5wdXNoKGVudHJ5KVxuICAgIGlmICh0aGlzLl9tZW1vcnlDaGFuZ2VzLmxlbmd0aCA+IHRoaXMucmV0ZW50aW9uU2l6ZSkgdGhpcy5fbWVtb3J5Q2hhbmdlcy5zcGxpY2UoMCwgdGhpcy5fbWVtb3J5Q2hhbmdlcy5sZW5ndGggLSB0aGlzLnJldGVudGlvblNpemUpXG5cbiAgICByZXR1cm4gZW50cnlcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgcHJvY2Vzcy1sb2NhbCBtZW1vcnkgY2hhbmdlIHBhZ2UuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gQXJndW1lbnRzLlxuICAgKiBAcGFyYW0ge251bWJlcn0gYXJncy5hZnRlclNlcXVlbmNlIC0gRXhjbHVzaXZlIGxvd2VyIGJvdW5kLlxuICAgKiBAcGFyYW0ge251bWJlcn0gYXJncy5saW1pdCAtIFBhZ2Ugc2l6ZS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFthcmdzLnVwVG9TZXF1ZW5jZV0gLSBJbmNsdXNpdmUgdXBwZXIgYm91bmQuXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgPz59IFthcmdzLnNjb3BlXSAtIENhbGxlciBzeW5jIHNjb3BlLlxuICAgKiBAcmV0dXJucyB7e2NoYW5nZXM6IFNlcnZlckNoYW5nZUZlZWRFbnRyeVtdLCBoYXNNb3JlOiBib29sZWFuLCBuZXh0U2VxdWVuY2U6IG51bWJlciwgb2xkZXN0U2VxdWVuY2U6IG51bWJlciB8IG51bGwsIHNuYXBzaG90UmVxdWlyZWQ6IGJvb2xlYW4sIHVwVG9TZXF1ZW5jZTogbnVtYmVyfX0gLSBPcmRlcmVkIHBhZ2UuXG4gICAqL1xuICBfbWVtb3J5Q2hhbmdlc0FmdGVyKHthZnRlclNlcXVlbmNlLCBsaW1pdCwgc2NvcGUsIHVwVG9TZXF1ZW5jZX0pIHtcbiAgICBjb25zdCBsYXRlc3RTZXF1ZW5jZSA9IHR5cGVvZiB1cFRvU2VxdWVuY2UgPT09IFwibnVtYmVyXCIgPyB1cFRvU2VxdWVuY2UgOiB0aGlzLl9tZW1vcnlTZXF1ZW5jZVxuICAgIGNvbnN0IG9sZGVzdFNlcXVlbmNlID0gdGhpcy5fbWVtb3J5Q2hhbmdlc1swXT8uc2VydmVyU2VxdWVuY2UgfHwgbnVsbFxuICAgIGNvbnN0IHNuYXBzaG90UmVxdWlyZWQgPSBhZnRlclNlcXVlbmNlID4gMCAmJiBvbGRlc3RTZXF1ZW5jZSAhPT0gbnVsbCAmJiBvbGRlc3RTZXF1ZW5jZSA+IGFmdGVyU2VxdWVuY2UgKyAxXG5cbiAgICBpZiAoc25hcHNob3RSZXF1aXJlZCkge1xuICAgICAgcmV0dXJuIHtjaGFuZ2VzOiBbXSwgaGFzTW9yZTogZmFsc2UsIG5leHRTZXF1ZW5jZTogYWZ0ZXJTZXF1ZW5jZSwgb2xkZXN0U2VxdWVuY2UsIHNuYXBzaG90UmVxdWlyZWQ6IHRydWUsIHVwVG9TZXF1ZW5jZTogbGF0ZXN0U2VxdWVuY2V9XG4gICAgfVxuXG4gICAgY29uc3Qgcm93cyA9IHRoaXMuX21lbW9yeUNoYW5nZXMuZmlsdGVyKChjaGFuZ2UpID0+IHtcbiAgICAgIHJldHVybiBjaGFuZ2Uuc2VydmVyU2VxdWVuY2UgPiBhZnRlclNlcXVlbmNlICYmIGNoYW5nZS5zZXJ2ZXJTZXF1ZW5jZSA8PSBsYXRlc3RTZXF1ZW5jZSAmJiBzY29wZXNFcXVhbChjaGFuZ2Uuc2NvcGUsIHNjb3BlKVxuICAgIH0pXG4gICAgY29uc3QgaGFzTW9yZSA9IHJvd3MubGVuZ3RoID4gbGltaXRcbiAgICBjb25zdCBjaGFuZ2VzID0gcm93cy5zbGljZSgwLCBsaW1pdClcbiAgICBjb25zdCBsYXN0Q2hhbmdlID0gY2hhbmdlc1tjaGFuZ2VzLmxlbmd0aCAtIDFdXG5cbiAgICByZXR1cm4ge2NoYW5nZXMsIGhhc01vcmUsIG5leHRTZXF1ZW5jZTogbGFzdENoYW5nZSA/IGxhc3RDaGFuZ2Uuc2VydmVyU2VxdWVuY2UgOiBhZnRlclNlcXVlbmNlLCBvbGRlc3RTZXF1ZW5jZSwgc25hcHNob3RSZXF1aXJlZDogZmFsc2UsIHVwVG9TZXF1ZW5jZTogbGF0ZXN0U2VxdWVuY2V9XG4gIH1cblxuICAvKipcbiAgICogUnVucyB3aXRoIGRiLlxuICAgKiBAcGFyYW0geyhkYjogaW1wb3J0KFwiLi4vZGF0YWJhc2UvZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHQpID0+IFByb21pc2U8Pz59IGNhbGxiYWNrIC0gQ2FsbGJhY2suXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPD8+fSAtIENhbGxiYWNrIHJlc3VsdC5cbiAgICovXG4gIGFzeW5jIF93aXRoRGIoY2FsbGJhY2spIHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25maWd1cmF0aW9uLmVuc3VyZUNvbm5lY3Rpb25zKHtuYW1lOiBcIlNlcnZlciBjaGFuZ2UtZmVlZCBzdG9yZVwifSwgYXN5bmMgKGRicykgPT4ge1xuICAgICAgY29uc3QgZGIgPSBkYnNbdGhpcy5kYXRhYmFzZUlkZW50aWZpZXJdXG5cbiAgICAgIGlmICghZGIpIHRocm93IG5ldyBFcnJvcihgTm8gZGF0YWJhc2UgY29ubmVjdGlvbiBhdmFpbGFibGUgZm9yIGlkZW50aWZpZXI6ICR7dGhpcy5kYXRhYmFzZUlkZW50aWZpZXJ9YClcblxuICAgICAgcmV0dXJuIGF3YWl0IGNhbGxiYWNrKGRiKVxuICAgIH0pXG4gIH1cbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIHBhZ2UgbGltaXQuXG4gKiBAcGFyYW0gez99IGxpbWl0IC0gUmVxdWVzdGVkIGxpbWl0LlxuICogQHJldHVybnMge251bWJlcn0gLSBQYWdlIHNpemUuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZUxpbWl0KGxpbWl0KSB7XG4gIGlmICh0eXBlb2YgbGltaXQgPT09IFwibnVtYmVyXCIgJiYgTnVtYmVyLmlzSW50ZWdlcihsaW1pdCkgJiYgbGltaXQgPiAwKSByZXR1cm4gTWF0aC5taW4obGltaXQsIE1BWF9QQUdFX1NJWkUpXG4gIGlmICh0eXBlb2YgbGltaXQgPT09IFwic3RyaW5nXCIgJiYgL15cXGQrJC8udGVzdChsaW1pdCkpIHJldHVybiBNYXRoLm1pbihOdW1iZXIobGltaXQpLCBNQVhfUEFHRV9TSVpFKVxuXG4gIHJldHVybiBERUZBVUxUX1BBR0VfU0laRVxufVxuXG4vKipcbiAqIFBhcnNlcyBKU09OLWlzaCB2YWx1ZXMuXG4gKiBAcGFyYW0gez99IHZhbHVlIC0gSlNPTiBzdHJpbmcuXG4gKiBAcmV0dXJucyB7P30gLSBQYXJzZWQgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlSnNvbk9yTnVsbCh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcInN0cmluZ1wiIHx8IHZhbHVlLmxlbmd0aCA8IDEpIHJldHVybiBudWxsXG5cbiAgcmV0dXJuIEpTT04ucGFyc2UodmFsdWUpXG59XG5cbi8qKlxuICogQ29tcGFyZXMgc3luYyBzY29wZXMgYnkgc3RhYmxlIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsID8+IHwgbnVsbH0gY2hhbmdlU2NvcGUgLSBQZXJzaXN0ZWQgY2hhbmdlIHNjb3BlLlxuICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCA/PiB8IHVuZGVmaW5lZH0gcmVxdWVzdGVkU2NvcGUgLSBDYWxsZXIgc2NvcGUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBXaGV0aGVyIHRoZSBjaGFuZ2UgaXMgdmlzaWJsZSBmb3IgdGhlIHJlcXVlc3RlZCBzY29wZS5cbiAqL1xuZnVuY3Rpb24gc2NvcGVzRXF1YWwoY2hhbmdlU2NvcGUsIHJlcXVlc3RlZFNjb3BlKSB7XG4gIGlmIChyZXF1ZXN0ZWRTY29wZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdHJ1ZVxuXG4gIHJldHVybiBzdGFibGVKc29uU3RyaW5naWZ5KGNoYW5nZVNjb3BlIHx8IG51bGwpID09PSBzdGFibGVKc29uU3RyaW5naWZ5KHJlcXVlc3RlZFNjb3BlKVxufVxuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFNlcnZlckNoYW5nZUZlZWRFbnRyeVxuICogQHByb3BlcnR5IHtzdHJpbmcgfCBudWxsfSBhY3RvckRldmljZUlkIC0gU2lnbmVkIG11dGF0aW9uIGFjdG9yIGRldmljZSBpZCB3aGVuIGF2YWlsYWJsZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nIHwgbnVsbH0gYWN0b3JVc2VySWQgLSBTaWduZWQgbXV0YXRpb24gYWN0b3IgdXNlciBpZCB3aGVuIGF2YWlsYWJsZS5cbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgPz4gfCBudWxsfSBhdHRyaWJ1dGVzIC0gU2VyaWFsaXplZCBtdXRhdGlvbiBhdHRyaWJ1dGVzLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGNyZWF0ZWRBdCAtIFNlcnZlciBjaGFuZ2UgY3JlYXRpb24gdGltZXN0YW1wLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGlkIC0gU2VydmVyIGNoYW5nZSBpZC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nIHwgbnVsbH0gaWRlbXBvdGVuY3lLZXkgLSBNdXRhdGlvbiBpZGVtcG90ZW5jeSBrZXkgd2hlbiBhdmFpbGFibGUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbW9kZWwgLSBGcm9udGVuZCBtb2RlbCBuYW1lLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IG9wZXJhdGlvbiAtIE11dGF0aW9uIG9wZXJhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgPz4gfCBudWxsfSBwYXlsb2FkIC0gU2VyaWFsaXplZCBtdXRhdGlvbiBwYXlsb2FkLlxuICogQHByb3BlcnR5IHtzdHJpbmcgfCBudWxsfSByZWNvcmRJZCAtIENoYW5nZWQgcmVjb3JkIGlkIHdoZW4ga25vd24uXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsID8+IHwgbnVsbH0gcmVzcG9uc2UgLSBDb21tYW5kIHJlc3BvbnNlIHBheWxvYWQuXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsID8+IHwgbnVsbH0gc2NvcGUgLSBPZmZsaW5lIGdyYW50IHNjb3BlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHNlcnZlclNlcXVlbmNlIC0gTW9ub3RvbmljIHNlcnZlciBzZXF1ZW5jZS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFNlcnZlckNoYW5nZUZlZWRSb3dcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nIHwgbnVsbH0gYWN0b3JfZGV2aWNlX2lkIC0gQWN0b3IgZGV2aWNlIGlkLlxuICogQHByb3BlcnR5IHtzdHJpbmcgfCBudWxsfSBhY3Rvcl91c2VyX2lkIC0gQWN0b3IgdXNlciBpZC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nIHwgbnVsbH0gYXR0cmlidXRlc19qc29uIC0gQXR0cmlidXRlcyBKU09OLlxuICogQHByb3BlcnR5IHtEYXRlIHwgc3RyaW5nfSBjcmVhdGVkX2F0IC0gQ3JlYXRpb24gdGltZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpZCAtIEVudHJ5IGlkLlxuICogQHByb3BlcnR5IHtzdHJpbmcgfCBudWxsfSBpZGVtcG90ZW5jeV9rZXkgLSBNdXRhdGlvbiBpZGVtcG90ZW5jeSBrZXkuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbW9kZWwgLSBGcm9udGVuZCBtb2RlbCBuYW1lLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IG9wZXJhdGlvbiAtIE11dGF0aW9uIG9wZXJhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nIHwgbnVsbH0gcGF5bG9hZF9qc29uIC0gTXV0YXRpb24gcGF5bG9hZCBKU09OLlxuICogQHByb3BlcnR5IHtzdHJpbmcgfCBudWxsfSByZWNvcmRfaWQgLSBSZWNvcmQgaWQuXG4gKiBAcHJvcGVydHkge3N0cmluZyB8IG51bGx9IHJlc3BvbnNlX2pzb24gLSBSZXNwb25zZSBKU09OLlxuICogQHByb3BlcnR5IHtzdHJpbmcgfCBudWxsfSBzY29wZV9qc29uIC0gU2NvcGUgSlNPTi5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyIHwgc3RyaW5nfSBzZXJ2ZXJfc2VxdWVuY2UgLSBTZXJ2ZXIgc2VxdWVuY2UuXG4gKi9cbiJdfQ==
453
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVyLWNoYW5nZS1mZWVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3N5bmMvc2VydmVyLWNoYW5nZS1mZWVkLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sUUFBUSxDQUFBO0FBQ2pDLE9BQU8sU0FBUyxNQUFNLGlDQUFpQyxDQUFBO0FBQ3ZELE9BQU8sbUJBQW1CLE1BQU0sa0JBQWtCLENBQUE7QUFFbEQsTUFBTSxzQkFBc0IsR0FBRyxLQUFLLENBQUE7QUFDcEMsTUFBTSxpQkFBaUIsR0FBRyxHQUFHLENBQUE7QUFDN0IsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFBO0FBQzFCLE1BQU0sVUFBVSxHQUFHLDZCQUE2QixDQUFBO0FBQ2hELE1BQU0sTUFBTSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUE7QUFFNUI7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxxQ0FBcUMsQ0FBQyxhQUFhO0lBQ2pFLElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUE7SUFFckMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ1gsS0FBSyxHQUFHLElBQUkscUJBQXFCLENBQUMsRUFBQyxhQUFhLEVBQUMsQ0FBQyxDQUFBO1FBQ2xELE1BQU0sQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFBO0lBQ2xDLENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQTtBQUNkLENBQUM7QUFFRCxNQUFNLENBQUMsT0FBTyxPQUFPLHFCQUFxQjtJQUN4Qzs7Ozs7O09BTUc7SUFDSCxZQUFZLEVBQUMsYUFBYSxFQUFFLGtCQUFrQixHQUFHLFNBQVMsRUFBRSxhQUFhLEVBQUM7UUFDeEUsTUFBTSxpQkFBaUIsR0FBRyxhQUFhLENBQUMsb0JBQW9CLEVBQUUsQ0FBQTtRQUU5RCxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQTtR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UUFBRSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFBO0lBRW5HLE9BQU8saUJBQWlCLENBQUE7QUFDMUIsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLGVBQWUsQ0FBQyxLQUFLO0lBQzVCLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQztRQUFFLE9BQU8sSUFBSSxDQUFBO0lBRTlELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQTtBQUMxQixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLFdBQVcsQ0FBQyxXQUFXLEVBQUUsY0FBYztJQUM5QyxJQUFJLGNBQWMsS0FBSyxTQUFTO1FBQUUsT0FBTyxJQUFJLENBQUE7SUFFN0MsT0FBTyxtQkFBbUIsQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLEtBQUssbUJBQW1CLENBQUMsY0FBYyxDQUFDLENBQUE7QUFDekYsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVIOzs7Ozs7Ozs7Ozs7Ozs7R0FlRyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQge3JhbmRvbVVVSUR9IGZyb20gXCJjcnlwdG9cIlxuaW1wb3J0IFRhYmxlRGF0YSBmcm9tIFwiLi4vZGF0YWJhc2UvdGFibGUtZGF0YS9pbmRleC5qc1wiXG5pbXBvcnQgc3RhYmxlSnNvblN0cmluZ2lmeSBmcm9tIFwiLi9zdGFibGUtanNvbi5qc1wiXG5cbmNvbnN0IERFRkFVTFRfUkVURU5USU9OX1NJWkUgPSAxMDAwMFxuY29uc3QgREVGQVVMVF9QQUdFX1NJWkUgPSAxMDBcbmNvbnN0IE1BWF9QQUdFX1NJWkUgPSAxMDAwXG5jb25zdCBUQUJMRV9OQU1FID0gXCJmcm9udGVuZF9tb2RlbF9zeW5jX2NoYW5nZXNcIlxuY29uc3Qgc3RvcmVzID0gbmV3IFdlYWtNYXAoKVxuXG4vKipcbiAqIFNoYXJlZCBzZXJ2ZXIgY2hhbmdlLWZlZWQgc3RvcmUgZm9yIGEgY29uZmlndXJhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSBjb25maWd1cmF0aW9uIC0gQ29uZmlndXJhdGlvbi5cbiAqIEByZXR1cm5zIHtTZXJ2ZXJDaGFuZ2VGZWVkU3RvcmV9IC0gU3RvcmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJ2ZXJDaGFuZ2VGZWVkU3RvcmVGb3JDb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb24pIHtcbiAgbGV0IHN0b3JlID0gc3RvcmVzLmdldChjb25maWd1cmF0aW9uKVxuXG4gIGlmICghc3RvcmUpIHtcbiAgICBzdG9yZSA9IG5ldyBTZXJ2ZXJDaGFuZ2VGZWVkU3RvcmUoe2NvbmZpZ3VyYXRpb259KVxuICAgIHN0b3Jlcy5zZXQoY29uZmlndXJhdGlvbiwgc3RvcmUpXG4gIH1cblxuICByZXR1cm4gc3RvcmVcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2VydmVyQ2hhbmdlRmVlZFN0b3JlIHtcbiAgLyoqXG4gICAqIFJ1bnMgY29uc3RydWN0b3IuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucy5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9IGFyZ3MuY29uZmlndXJhdGlvbiAtIENvbmZpZ3VyYXRpb24uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5kYXRhYmFzZUlkZW50aWZpZXJdIC0gRGF0YWJhc2UgaWRlbnRpZmllci5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFthcmdzLnJldGVudGlvblNpemVdIC0gTnVtYmVyIG9mIGZlZWQgZW50cmllcyB0byByZXRhaW4uXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih7Y29uZmlndXJhdGlvbiwgZGF0YWJhc2VJZGVudGlmaWVyID0gXCJkZWZhdWx0XCIsIHJldGVudGlvblNpemV9KSB7XG4gICAgY29uc3Qgc3luY0NvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uLmdldFN5bmNDb25maWd1cmF0aW9uKClcblxuICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb25cbiAgICB0aGlzLmRhdGFiYXNlSWRlbnRpZmllciA9IGRhdGFiYXNlSWRlbnRpZmllclxuICAgIHRoaXMucmV0ZW50aW9uU2l6ZSA9IHJldGVudGlvblNpemUgfHwgc3luY0NvbmZpZ3VyYXRpb24uY2hhbmdlRmVlZFJldGVudGlvblNpemUgfHwgREVGQVVMVF9SRVRFTlRJT05fU0laRVxuICAgIC8qKiBAdHlwZSB7U2VydmVyQ2hhbmdlRmVlZEVudHJ5W119ICovXG4gICAgdGhpcy5fbWVtb3J5Q2hhbmdlcyA9IFtdXG4gICAgdGhpcy5fbWVtb3J5U2VxdWVuY2UgPSAwXG4gICAgdGhpcy5faXNSZWFkeSA9IGZhbHNlXG4gICAgdGhpcy5fcmVhZHlQcm9taXNlID0gbnVsbFxuICB9XG5cbiAgLyoqXG4gICAqIEVuc3VyZXMgdGhlIGJhY2tpbmcgdGFibGUgZXhpc3RzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIHJlYWR5LlxuICAgKi9cbiAgYXN5bmMgZW5zdXJlUmVhZHkoKSB7XG4gICAgaWYgKHRoaXMuX3VzZXNNZW1vcnlTdG9yYWdlKCkpIHtcbiAgICAgIHRoaXMuX2lzUmVhZHkgPSB0cnVlXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoYXdhaXQgdGhpcy5fc2NoZW1hUmVhZHkoKSkgcmV0dXJuXG4gICAgaWYgKHRoaXMuX3JlYWR5UHJvbWlzZSkgcmV0dXJuIGF3YWl0IHRoaXMuX3JlYWR5UHJvbWlzZVxuXG4gICAgdGhpcy5fcmVhZHlQcm9taXNlID0gKGFzeW5jICgpID0+IHtcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5zZXRDdXJyZW50KClcbiAgICAgIGF3YWl0IHRoaXMuX3dpdGhEYihhc3luYyAoZGIpID0+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5fZW5zdXJlQ2hhbmdlc1RhYmxlKGRiKVxuICAgICAgfSlcbiAgICAgIHRoaXMuX2lzUmVhZHkgPSB0cnVlXG4gICAgfSkoKVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuX3JlYWR5UHJvbWlzZVxuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAoIXRoaXMuX2lzUmVhZHkpIHRoaXMuX3JlYWR5UHJvbWlzZSA9IG51bGxcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQXBwZW5kcyBhIGNoYW5nZSBhbmQgYXNzaWducyB0aGUgbmV4dCBzZXJ2ZXIgc2VxdWVuY2UuXG4gICAqIEBwYXJhbSB7T21pdDxTZXJ2ZXJDaGFuZ2VGZWVkRW50cnksIFwiY3JlYXRlZEF0XCIgfCBcImlkXCIgfCBcInNlcnZlclNlcXVlbmNlXCI+ICYge2NyZWF0ZWRBdD86IHN0cmluZywgaWQ/OiBzdHJpbmd9fSBjaGFuZ2UgLSBDaGFuZ2UgcGF5bG9hZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8U2VydmVyQ2hhbmdlRmVlZEVudHJ5Pn0gLSBQZXJzaXN0ZWQgY2hhbmdlLlxuICAgKi9cbiAgYXN5bmMgYXBwZW5kKGNoYW5nZSkge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlUmVhZHkoKVxuXG4gICAgY29uc3QgaWQgPSBjaGFuZ2UuaWQgfHwgcmFuZG9tVVVJRCgpXG4gICAgY29uc3QgY3JlYXRlZEF0ID0gY2hhbmdlLmNyZWF0ZWRBdCB8fCBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcblxuICAgIGlmICh0aGlzLl91c2VzTWVtb3J5U3RvcmFnZSgpKSByZXR1cm4gdGhpcy5fYXBwZW5kTWVtb3J5KHsuLi5jaGFuZ2UsIGNyZWF0ZWRBdCwgaWR9KVxuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuX3dpdGhEYihhc3luYyAoZGIpID0+IHtcbiAgICAgIGF3YWl0IGRiLmluc2VydCh7XG4gICAgICAgIHRhYmxlTmFtZTogVEFCTEVfTkFNRSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGFjdG9yX2RldmljZV9pZDogY2hhbmdlLmFjdG9yRGV2aWNlSWQsXG4gICAgICAgICAgYWN0b3JfdXNlcl9pZDogY2hhbmdlLmFjdG9yVXNlcklkLFxuICAgICAgICAgIGF0dHJpYnV0ZXNfanNvbjogSlNPTi5zdHJpbmdpZnkoY2hhbmdlLmF0dHJpYnV0ZXMgfHwgbnVsbCksXG4gICAgICAgICAgY3JlYXRlZF9hdDogbmV3IERhdGUoY3JlYXRlZEF0KSxcbiAgICAgICAgICBpZCxcbiAgICAgICAgICBpZGVtcG90ZW5jeV9rZXk6IGNoYW5nZS5pZGVtcG90ZW5jeUtleSxcbiAgICAgICAgICBtb2RlbDogY2hhbmdlLm1vZGVsLFxuICAgICAgICAgIG9wZXJhdGlvbjogY2hhbmdlLm9wZXJhdGlvbixcbiAgICAgICAgICBwYXlsb2FkX2pzb246IEpTT04uc3RyaW5naWZ5KGNoYW5nZS5wYXlsb2FkIHx8IG51bGwpLFxuICAgICAgICAgIHJlY29yZF9pZDogY2hhbmdlLnJlY29yZElkID09PSBudWxsIHx8IGNoYW5nZS5yZWNvcmRJZCA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IFN0cmluZyhjaGFuZ2UucmVjb3JkSWQpLFxuICAgICAgICAgIHJlc3BvbnNlX2pzb246IEpTT04uc3RyaW5naWZ5KGNoYW5nZS5yZXNwb25zZSB8fCBudWxsKSxcbiAgICAgICAgICBzY29wZV9qc29uOiBzdGFibGVKc29uU3RyaW5naWZ5KGNoYW5nZS5zY29wZSB8fCBudWxsKVxuICAgICAgICB9XG4gICAgICB9KVxuXG4gICAgICBjb25zdCByb3cgPSBhd2FpdCB0aGlzLl9jaGFuZ2VCeUlkKGRiLCBpZClcbiAgICAgIGlmICghcm93KSB0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gcGVyc2lzdCBzZXJ2ZXIgY2hhbmdlLWZlZWQgZW50cnlcIilcblxuICAgICAgYXdhaXQgdGhpcy5fcHJ1bmVSZXRhaW5lZENoYW5nZXMoZGIsIHJvdy5zZXJ2ZXJTZXF1ZW5jZSlcblxuICAgICAgcmV0dXJuIHJvd1xuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBjdXJyZW50IGxhdGVzdCBzZXJ2ZXIgc2VxdWVuY2UuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPG51bWJlcj59IC0gTGF0ZXN0IHNlcXVlbmNlLlxuICAgKi9cbiAgYXN5bmMgbGF0ZXN0U2VxdWVuY2UoKSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVSZWFkeSgpXG5cbiAgICBpZiAodGhpcy5fdXNlc01lbW9yeVN0b3JhZ2UoKSkgcmV0dXJuIHRoaXMuX21lbW9yeVNlcXVlbmNlXG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5fd2l0aERiKGFzeW5jIChkYikgPT4ge1xuICAgICAgY29uc3Qgcm93cyA9IGF3YWl0IGRiXG4gICAgICAgIC5uZXdRdWVyeSgpXG4gICAgICAgIC5mcm9tKFRBQkxFX05BTUUpXG4gICAgICAgIC5vcmRlcihcInNlcnZlcl9zZXF1ZW5jZSBERVNDXCIpXG4gICAgICAgIC5saW1pdCgxKVxuICAgICAgICAucmVzdWx0cygpXG4gICAgICBjb25zdCByb3cgPSAvKiogQHR5cGUge3tzZXJ2ZXJfc2VxdWVuY2U/OiBudW1iZXIgfCBzdHJpbmd9IHwgdW5kZWZpbmVkfSAqLyAocm93c1swXSlcblxuICAgICAgcmV0dXJuIHJvdyA/IE51bWJlcihyb3cuc2VydmVyX3NlcXVlbmNlKSA6IDBcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgb2xkZXN0IHJldGFpbmVkIHNlcnZlciBzZXF1ZW5jZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8bnVtYmVyIHwgbnVsbD59IC0gT2xkZXN0IHJldGFpbmVkIHNlcXVlbmNlLlxuICAgKi9cbiAgYXN5bmMgb2xkZXN0U2VxdWVuY2UoKSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVSZWFkeSgpXG5cbiAgICBpZiAodGhpcy5fdXNlc01lbW9yeVN0b3JhZ2UoKSkgcmV0dXJuIHRoaXMuX21lbW9yeUNoYW5nZXNbMF0/LnNlcnZlclNlcXVlbmNlIHx8IG51bGxcblxuICAgIHJldHVybiBhd2FpdCB0aGlzLl93aXRoRGIoYXN5bmMgKGRiKSA9PiBhd2FpdCB0aGlzLl9vbGRlc3RTZXF1ZW5jZShkYikpXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBvcmRlcmVkIGNoYW5nZXMgYWZ0ZXIgYSBjdXJzb3IuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gQXJndW1lbnRzLlxuICAgKiBAcGFyYW0ge251bWJlcn0gYXJncy5hZnRlclNlcXVlbmNlIC0gRXhjbHVzaXZlIGxvd2VyIGJvdW5kLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2FyZ3MubGltaXRdIC0gTWF4aW11bSBudW1iZXIgb2YgY2hhbmdlcy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFthcmdzLnVwVG9TZXF1ZW5jZV0gLSBJbmNsdXNpdmUgdXBwZXIgYm91bmQuXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgPz59IFthcmdzLnNjb3BlXSAtIENhbGxlciBzeW5jIHNjb3BlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx7Y2hhbmdlczogU2VydmVyQ2hhbmdlRmVlZEVudHJ5W10sIGhhc01vcmU6IGJvb2xlYW4sIG5leHRTZXF1ZW5jZTogbnVtYmVyLCBvbGRlc3RTZXF1ZW5jZTogbnVtYmVyIHwgbnVsbCwgc25hcHNob3RSZXF1aXJlZDogYm9vbGVhbiwgdXBUb1NlcXVlbmNlOiBudW1iZXJ9Pn0gLSBPcmRlcmVkIHBhZ2UuXG4gICAqL1xuICBhc3luYyBjaGFuZ2VzQWZ0ZXIoe2FmdGVyU2VxdWVuY2UsIGxpbWl0ID0gREVGQVVMVF9QQUdFX1NJWkUsIHNjb3BlLCB1cFRvU2VxdWVuY2V9KSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVSZWFkeSgpXG5cbiAgICBjb25zdCBwYWdlU2l6ZSA9IG5vcm1hbGl6ZUxpbWl0KGxpbWl0KVxuXG4gICAgaWYgKHRoaXMuX3VzZXNNZW1vcnlTdG9yYWdlKCkpIHJldHVybiB0aGlzLl9tZW1vcnlDaGFuZ2VzQWZ0ZXIoe2FmdGVyU2VxdWVuY2UsIGxpbWl0OiBwYWdlU2l6ZSwgc2NvcGUsIHVwVG9TZXF1ZW5jZX0pXG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5fd2l0aERiKGFzeW5jIChkYikgPT4ge1xuICAgICAgY29uc3QgbGF0ZXN0U2VxdWVuY2UgPSB0eXBlb2YgdXBUb1NlcXVlbmNlID09PSBcIm51bWJlclwiID8gdXBUb1NlcXVlbmNlIDogYXdhaXQgdGhpcy5fbGF0ZXN0U2VxdWVuY2UoZGIpXG4gICAgICBjb25zdCBvbGRlc3RTZXF1ZW5jZSA9IGF3YWl0IHRoaXMuX29sZGVzdFNlcXVlbmNlKGRiKVxuICAgICAgY29uc3Qgc25hcHNob3RSZXF1aXJlZCA9IGFmdGVyU2VxdWVuY2UgPiAwICYmIG9sZGVzdFNlcXVlbmNlICE9PSBudWxsICYmIG9sZGVzdFNlcXVlbmNlID4gYWZ0ZXJTZXF1ZW5jZSArIDFcblxuICAgICAgaWYgKHNuYXBzaG90UmVxdWlyZWQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjaGFuZ2VzOiBbXSxcbiAgICAgICAgICBoYXNNb3JlOiBmYWxzZSxcbiAgICAgICAgICBuZXh0U2VxdWVuY2U6IGFmdGVyU2VxdWVuY2UsXG4gICAgICAgICAgb2xkZXN0U2VxdWVuY2UsXG4gICAgICAgICAgc25hcHNob3RSZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICB1cFRvU2VxdWVuY2U6IGxhdGVzdFNlcXVlbmNlXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3Qgcm93cyA9IC8qKiBAdHlwZSB7U2VydmVyQ2hhbmdlRmVlZFJvd1tdfSAqLyAoYXdhaXQgZGJcbiAgICAgICAgLm5ld1F1ZXJ5KClcbiAgICAgICAgLmZyb20oVEFCTEVfTkFNRSlcbiAgICAgICAgLndoZXJlKGBzZXJ2ZXJfc2VxdWVuY2UgPiAke2RiLnF1b3RlKGFmdGVyU2VxdWVuY2UpfWApXG4gICAgICAgIC53aGVyZShgc2VydmVyX3NlcXVlbmNlIDw9ICR7ZGIucXVvdGUobGF0ZXN0U2VxdWVuY2UpfWApXG4gICAgICAgIC53aGVyZShzY29wZSA9PT0gdW5kZWZpbmVkID8gXCIxID0gMVwiIDoge3Njb3BlX2pzb246IHN0YWJsZUpzb25TdHJpbmdpZnkoc2NvcGUpfSlcbiAgICAgICAgLm9yZGVyKFwic2VydmVyX3NlcXVlbmNlIEFTQ1wiKVxuICAgICAgICAubGltaXQocGFnZVNpemUgKyAxKVxuICAgICAgICAucmVzdWx0cygpKVxuICAgICAgY29uc3QgaGFzTW9yZSA9IHJvd3MubGVuZ3RoID4gcGFnZVNpemVcbiAgICAgIGNvbnN0IHBhZ2VSb3dzID0gcm93cy5zbGljZSgwLCBwYWdlU2l6ZSlcbiAgICAgIGNvbnN0IGNoYW5nZXMgPSBwYWdlUm93cy5tYXAoKHJvdykgPT4gdGhpcy5fbm9ybWFsaXplQ2hhbmdlUm93KHJvdykpXG4gICAgICBjb25zdCBsYXN0Q2hhbmdlID0gY2hhbmdlc1tjaGFuZ2VzLmxlbmd0aCAtIDFdXG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNoYW5nZXMsXG4gICAgICAgIGhhc01vcmUsXG4gICAgICAgIG5leHRTZXF1ZW5jZTogbGFzdENoYW5nZSA/IGxhc3RDaGFuZ2Uuc2VydmVyU2VxdWVuY2UgOiBhZnRlclNlcXVlbmNlLFxuICAgICAgICBvbGRlc3RTZXF1ZW5jZSxcbiAgICAgICAgc25hcHNob3RSZXF1aXJlZDogZmFsc2UsXG4gICAgICAgIHVwVG9TZXF1ZW5jZTogbGF0ZXN0U2VxdWVuY2VcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEVuc3VyZXMgc2NoZW1hIGlzIHN0aWxsIHByZXNlbnQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fSAtIFdoZXRoZXIgcmVhZHkuXG4gICAqL1xuICBhc3luYyBfc2NoZW1hUmVhZHkoKSB7XG4gICAgaWYgKHRoaXMuX3VzZXNNZW1vcnlTdG9yYWdlKCkpIHJldHVybiB0aGlzLl9pc1JlYWR5XG4gICAgaWYgKCF0aGlzLl9pc1JlYWR5KSByZXR1cm4gZmFsc2VcbiAgICBpZiAoYXdhaXQgdGhpcy5fd2l0aERiKGFzeW5jIChkYikgPT4gYXdhaXQgZGIudGFibGVFeGlzdHMoVEFCTEVfTkFNRSkpKSByZXR1cm4gdHJ1ZVxuXG4gICAgdGhpcy5faXNSZWFkeSA9IGZhbHNlXG4gICAgdGhpcy5fcmVhZHlQcm9taXNlID0gbnVsbFxuXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvKipcbiAgICogRW5zdXJlcyBjaGFuZ2VzIHRhYmxlIGV4aXN0cy5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9kYXRhYmFzZS9kcml2ZXJzL2Jhc2UuanNcIikuZGVmYXVsdH0gZGIgLSBEYXRhYmFzZSBjb25uZWN0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLlxuICAgKi9cbiAgYXN5bmMgX2Vuc3VyZUNoYW5nZXNUYWJsZShkYikge1xuICAgIGlmIChhd2FpdCBkYi50YWJsZUV4aXN0cyhUQUJMRV9OQU1FKSkgcmV0dXJuXG5cbiAgICBjb25zdCB0YWJsZSA9IG5ldyBUYWJsZURhdGEoVEFCTEVfTkFNRSwge2lmTm90RXhpc3RzOiB0cnVlfSlcblxuICAgIHRhYmxlLmludGVnZXIoXCJzZXJ2ZXJfc2VxdWVuY2VcIiwge2F1dG9JbmNyZW1lbnQ6IHRydWUsIG51bGw6IGZhbHNlLCBwcmltYXJ5S2V5OiB0cnVlfSlcbiAgICB0YWJsZS5zdHJpbmcoXCJpZFwiLCB7aW5kZXg6IHRydWUsIG51bGw6IGZhbHNlfSlcbiAgICB0YWJsZS5zdHJpbmcoXCJtb2RlbFwiLCB7aW5kZXg6IHRydWUsIG51bGw6IGZhbHNlfSlcbiAgICB0YWJsZS5zdHJpbmcoXCJvcGVyYXRpb25cIiwge251bGw6IGZhbHNlfSlcbiAgICB0YWJsZS5zdHJpbmcoXCJyZWNvcmRfaWRcIiwge2luZGV4OiB0cnVlLCBudWxsOiB0cnVlfSlcbiAgICB0YWJsZS50ZXh0KFwicGF5bG9hZF9qc29uXCIsIHtudWxsOiB0cnVlfSlcbiAgICB0YWJsZS50ZXh0KFwiYXR0cmlidXRlc19qc29uXCIsIHtudWxsOiB0cnVlfSlcbiAgICB0YWJsZS5zdHJpbmcoXCJpZGVtcG90ZW5jeV9rZXlcIiwge2luZGV4OiB0cnVlLCBudWxsOiB0cnVlfSlcbiAgICB0YWJsZS5zdHJpbmcoXCJhY3Rvcl91c2VyX2lkXCIsIHtpbmRleDogdHJ1ZSwgbnVsbDogdHJ1ZX0pXG4gICAgdGFibGUuc3RyaW5nKFwiYWN0b3JfZGV2aWNlX2lkXCIsIHtpbmRleDogdHJ1ZSwgbnVsbDogdHJ1ZX0pXG4gICAgdGFibGUudGV4dChcInNjb3BlX2pzb25cIiwge251bGw6IHRydWV9KVxuICAgIHRhYmxlLnRleHQoXCJyZXNwb25zZV9qc29uXCIsIHtudWxsOiB0cnVlfSlcbiAgICB0YWJsZS5kYXRldGltZShcImNyZWF0ZWRfYXRcIiwge2luZGV4OiB0cnVlLCBudWxsOiBmYWxzZX0pXG5cbiAgICBhd2FpdCBkYi5jcmVhdGVUYWJsZSh0YWJsZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyBhIHBlcnNpc3RlZCBjaGFuZ2UgYnkgaWQuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vZGF0YWJhc2UvZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHR9IGRiIC0gRGF0YWJhc2UgY29ubmVjdGlvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGlkIC0gRW50cnkgaWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFNlcnZlckNoYW5nZUZlZWRFbnRyeSB8IG51bGw+fSAtIEVudHJ5IG9yIG51bGwuXG4gICAqL1xuICBhc3luYyBfY2hhbmdlQnlJZChkYiwgaWQpIHtcbiAgICBjb25zdCByb3dzID0gLyoqIEB0eXBlIHtTZXJ2ZXJDaGFuZ2VGZWVkUm93W119ICovIChhd2FpdCBkYlxuICAgICAgLm5ld1F1ZXJ5KClcbiAgICAgIC5mcm9tKFRBQkxFX05BTUUpXG4gICAgICAud2hlcmUoe2lkfSlcbiAgICAgIC5saW1pdCgxKVxuICAgICAgLnJlc3VsdHMoKSlcblxuICAgIHJldHVybiByb3dzWzBdID8gdGhpcy5fbm9ybWFsaXplQ2hhbmdlUm93KHJvd3NbMF0pIDogbnVsbFxuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIGN1cnJlbnQgbGF0ZXN0IHNlcXVlbmNlIHdpdGhvdXQgcmVhZGluZXNzIGNoZWNrcy5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9kYXRhYmFzZS9kcml2ZXJzL2Jhc2UuanNcIikuZGVmYXVsdH0gZGIgLSBEYXRhYmFzZSBjb25uZWN0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxudW1iZXI+fSAtIExhdGVzdCBzZXF1ZW5jZS5cbiAgICovXG4gIGFzeW5jIF9sYXRlc3RTZXF1ZW5jZShkYikge1xuICAgIGNvbnN0IHJvd3MgPSAvKiogQHR5cGUge0FycmF5PHtzZXJ2ZXJfc2VxdWVuY2U/OiBudW1iZXIgfCBzdHJpbmd9Pn0gKi8gKGF3YWl0IGRiXG4gICAgICAubmV3UXVlcnkoKVxuICAgICAgLmZyb20oVEFCTEVfTkFNRSlcbiAgICAgIC5vcmRlcihcInNlcnZlcl9zZXF1ZW5jZSBERVNDXCIpXG4gICAgICAubGltaXQoMSlcbiAgICAgIC5yZXN1bHRzKCkpXG5cbiAgICByZXR1cm4gcm93c1swXSA/IE51bWJlcihyb3dzWzBdLnNlcnZlcl9zZXF1ZW5jZSkgOiAwXG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgY3VycmVudCBvbGRlc3Qgc2VxdWVuY2Ugd2l0aG91dCByZWFkaW5lc3MgY2hlY2tzLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2RhdGFiYXNlL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0fSBkYiAtIERhdGFiYXNlIGNvbm5lY3Rpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPG51bWJlciB8IG51bGw+fSAtIE9sZGVzdCBzZXF1ZW5jZS5cbiAgICovXG4gIGFzeW5jIF9vbGRlc3RTZXF1ZW5jZShkYikge1xuICAgIGNvbnN0IHJvd3MgPSAvKiogQHR5cGUge0FycmF5PHtzZXJ2ZXJfc2VxdWVuY2U/OiBudW1iZXIgfCBzdHJpbmd9Pn0gKi8gKGF3YWl0IGRiXG4gICAgICAubmV3UXVlcnkoKVxuICAgICAgLmZyb20oVEFCTEVfTkFNRSlcbiAgICAgIC5vcmRlcihcInNlcnZlcl9zZXF1ZW5jZSBBU0NcIilcbiAgICAgIC5saW1pdCgxKVxuICAgICAgLnJlc3VsdHMoKSlcblxuICAgIHJldHVybiByb3dzWzBdID8gTnVtYmVyKHJvd3NbMF0uc2VydmVyX3NlcXVlbmNlKSA6IG51bGxcbiAgfVxuXG4gIC8qKlxuICAgKiBQcnVuZXMgb2xkIHJldGFpbmVkIGNoYW5nZXMuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vZGF0YWJhc2UvZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHR9IGRiIC0gRGF0YWJhc2UgY29ubmVjdGlvbi5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGxhdGVzdFNlcXVlbmNlIC0gTGF0ZXN0IHNlcXVlbmNlIGFmdGVyIGFwcGVuZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBjb21wbGV0ZS5cbiAgICovXG4gIGFzeW5jIF9wcnVuZVJldGFpbmVkQ2hhbmdlcyhkYiwgbGF0ZXN0U2VxdWVuY2UpIHtcbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIodGhpcy5yZXRlbnRpb25TaXplKSB8fCB0aGlzLnJldGVudGlvblNpemUgPCAxKSByZXR1cm5cblxuICAgIGNvbnN0IHBydW5lQmVmb3JlT3JBdCA9IGxhdGVzdFNlcXVlbmNlIC0gdGhpcy5yZXRlbnRpb25TaXplXG4gICAgaWYgKHBydW5lQmVmb3JlT3JBdCA8IDEpIHJldHVyblxuXG4gICAgY29uc3Qgcm93cyA9IC8qKiBAdHlwZSB7QXJyYXk8e2lkOiBzdHJpbmd9Pn0gKi8gKGF3YWl0IGRiXG4gICAgICAubmV3UXVlcnkoKVxuICAgICAgLmZyb20oVEFCTEVfTkFNRSlcbiAgICAgIC53aGVyZShgc2VydmVyX3NlcXVlbmNlIDw9ICR7ZGIucXVvdGUocHJ1bmVCZWZvcmVPckF0KX1gKVxuICAgICAgLnJlc3VsdHMoKSlcblxuICAgIGZvciAoY29uc3Qgcm93IG9mIHJvd3MpIHtcbiAgICAgIGF3YWl0IGRiLmRlbGV0ZSh7Y29uZGl0aW9uczoge2lkOiByb3cuaWR9LCB0YWJsZU5hbWU6IFRBQkxFX05BTUV9KVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBOb3JtYWxpemVzIGEgY2hhbmdlIHJvdy5cbiAgICogQHBhcmFtIHtTZXJ2ZXJDaGFuZ2VGZWVkUm93fSByb3cgLSBSYXcgZGF0YWJhc2Ugcm93LlxuICAgKiBAcmV0dXJucyB7U2VydmVyQ2hhbmdlRmVlZEVudHJ5fSAtIE5vcm1hbGl6ZWQgY2hhbmdlLlxuICAgKi9cbiAgX25vcm1hbGl6ZUNoYW5nZVJvdyhyb3cpIHtcbiAgICBjb25zdCBjcmVhdGVkQXRWYWx1ZSA9IHJvdy5jcmVhdGVkX2F0XG5cbiAgICByZXR1cm4ge1xuICAgICAgYWN0b3JEZXZpY2VJZDogcm93LmFjdG9yX2RldmljZV9pZCB8fCBudWxsLFxuICAgICAgYWN0b3JVc2VySWQ6IHJvdy5hY3Rvcl91c2VyX2lkIHx8IG51bGwsXG4gICAgICBhdHRyaWJ1dGVzOiBwYXJzZUpzb25Pck51bGwocm93LmF0dHJpYnV0ZXNfanNvbiksXG4gICAgICBjcmVhdGVkQXQ6IGNyZWF0ZWRBdFZhbHVlIGluc3RhbmNlb2YgRGF0ZSA/IGNyZWF0ZWRBdFZhbHVlLnRvSVNPU3RyaW5nKCkgOiBuZXcgRGF0ZShjcmVhdGVkQXRWYWx1ZSkudG9JU09TdHJpbmcoKSxcbiAgICAgIGlkOiByb3cuaWQsXG4gICAgICBpZGVtcG90ZW5jeUtleTogcm93LmlkZW1wb3RlbmN5X2tleSB8fCBudWxsLFxuICAgICAgbW9kZWw6IHJvdy5tb2RlbCxcbiAgICAgIG9wZXJhdGlvbjogcm93Lm9wZXJhdGlvbixcbiAgICAgIHBheWxvYWQ6IHBhcnNlSnNvbk9yTnVsbChyb3cucGF5bG9hZF9qc29uKSxcbiAgICAgIHJlY29yZElkOiByb3cucmVjb3JkX2lkIHx8IG51bGwsXG4gICAgICByZXNwb25zZTogcGFyc2VKc29uT3JOdWxsKHJvdy5yZXNwb25zZV9qc29uKSxcbiAgICAgIHNjb3BlOiBwYXJzZUpzb25Pck51bGwocm93LnNjb3BlX2pzb24pLFxuICAgICAgc2VydmVyU2VxdWVuY2U6IE51bWJlcihyb3cuc2VydmVyX3NlcXVlbmNlKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgc3RvcmUgc2hvdWxkIHVzZSBwcm9jZXNzLWxvY2FsIG1lbW9yeSBiZWNhdXNlIG5vIGRhdGFiYXNlIGlkZW50aWZpZXIgaXMgY29uZmlndXJlZC5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gV2hldGhlciBtZW1vcnkgc3RvcmFnZSBpcyBhY3RpdmUuXG4gICAqL1xuICBfdXNlc01lbW9yeVN0b3JhZ2UoKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAhdGhpcy5jb25maWd1cmF0aW9uLmdldERhdGFiYXNlQ29uZmlndXJhdGlvbigpW3RoaXMuZGF0YWJhc2VJZGVudGlmaWVyXVxuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQXBwZW5kcyBhIHByb2Nlc3MtbG9jYWwgbWVtb3J5IGVudHJ5IHdoZW4gbm8gZGF0YWJhc2UgaXMgY29uZmlndXJlZC5cbiAgICogQHBhcmFtIHtPbWl0PFNlcnZlckNoYW5nZUZlZWRFbnRyeSwgXCJzZXJ2ZXJTZXF1ZW5jZVwiPn0gY2hhbmdlIC0gQ2hhbmdlIHBheWxvYWQuXG4gICAqIEByZXR1cm5zIHtTZXJ2ZXJDaGFuZ2VGZWVkRW50cnl9IC0gQXBwZW5kZWQgZW50cnkuXG4gICAqL1xuICBfYXBwZW5kTWVtb3J5KGNoYW5nZSkge1xuICAgIGNvbnN0IGVudHJ5ID0gLyoqIEB0eXBlIHtTZXJ2ZXJDaGFuZ2VGZWVkRW50cnl9ICovICh7XG4gICAgICBhY3RvckRldmljZUlkOiBjaGFuZ2UuYWN0b3JEZXZpY2VJZCxcbiAgICAgIGFjdG9yVXNlcklkOiBjaGFuZ2UuYWN0b3JVc2VySWQsXG4gICAgICBhdHRyaWJ1dGVzOiBjaGFuZ2UuYXR0cmlidXRlcyB8fCBudWxsLFxuICAgICAgY3JlYXRlZEF0OiBjaGFuZ2UuY3JlYXRlZEF0LFxuICAgICAgaWQ6IGNoYW5nZS5pZCxcbiAgICAgIGlkZW1wb3RlbmN5S2V5OiBjaGFuZ2UuaWRlbXBvdGVuY3lLZXksXG4gICAgICBtb2RlbDogY2hhbmdlLm1vZGVsLFxuICAgICAgb3BlcmF0aW9uOiBjaGFuZ2Uub3BlcmF0aW9uLFxuICAgICAgcGF5bG9hZDogY2hhbmdlLnBheWxvYWQgfHwgbnVsbCxcbiAgICAgIHJlY29yZElkOiBjaGFuZ2UucmVjb3JkSWQgPT09IG51bGwgfHwgY2hhbmdlLnJlY29yZElkID09PSB1bmRlZmluZWQgPyBudWxsIDogU3RyaW5nKGNoYW5nZS5yZWNvcmRJZCksXG4gICAgICByZXNwb25zZTogY2hhbmdlLnJlc3BvbnNlIHx8IG51bGwsXG4gICAgICBzY29wZTogY2hhbmdlLnNjb3BlIHx8IG51bGwsXG4gICAgICBzZXJ2ZXJTZXF1ZW5jZTogKyt0aGlzLl9tZW1vcnlTZXF1ZW5jZVxuICAgIH0pXG5cbiAgICB0aGlzLl9tZW1vcnlDaGFuZ2VzLnB1c2goZW50cnkpXG4gICAgaWYgKHRoaXMuX21lbW9yeUNoYW5nZXMubGVuZ3RoID4gdGhpcy5yZXRlbnRpb25TaXplKSB0aGlzLl9tZW1vcnlDaGFuZ2VzLnNwbGljZSgwLCB0aGlzLl9tZW1vcnlDaGFuZ2VzLmxlbmd0aCAtIHRoaXMucmV0ZW50aW9uU2l6ZSlcblxuICAgIHJldHVybiBlbnRyeVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBwcm9jZXNzLWxvY2FsIG1lbW9yeSBjaGFuZ2UgcGFnZS5cbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBBcmd1bWVudHMuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBhcmdzLmFmdGVyU2VxdWVuY2UgLSBFeGNsdXNpdmUgbG93ZXIgYm91bmQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBhcmdzLmxpbWl0IC0gUGFnZSBzaXplLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2FyZ3MudXBUb1NlcXVlbmNlXSAtIEluY2x1c2l2ZSB1cHBlciBib3VuZC5cbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCA/Pn0gW2FyZ3Muc2NvcGVdIC0gQ2FsbGVyIHN5bmMgc2NvcGUuXG4gICAqIEByZXR1cm5zIHt7Y2hhbmdlczogU2VydmVyQ2hhbmdlRmVlZEVudHJ5W10sIGhhc01vcmU6IGJvb2xlYW4sIG5leHRTZXF1ZW5jZTogbnVtYmVyLCBvbGRlc3RTZXF1ZW5jZTogbnVtYmVyIHwgbnVsbCwgc25hcHNob3RSZXF1aXJlZDogYm9vbGVhbiwgdXBUb1NlcXVlbmNlOiBudW1iZXJ9fSAtIE9yZGVyZWQgcGFnZS5cbiAgICovXG4gIF9tZW1vcnlDaGFuZ2VzQWZ0ZXIoe2FmdGVyU2VxdWVuY2UsIGxpbWl0LCBzY29wZSwgdXBUb1NlcXVlbmNlfSkge1xuICAgIGNvbnN0IGxhdGVzdFNlcXVlbmNlID0gdHlwZW9mIHVwVG9TZXF1ZW5jZSA9PT0gXCJudW1iZXJcIiA/IHVwVG9TZXF1ZW5jZSA6IHRoaXMuX21lbW9yeVNlcXVlbmNlXG4gICAgY29uc3Qgb2xkZXN0U2VxdWVuY2UgPSB0aGlzLl9tZW1vcnlDaGFuZ2VzWzBdPy5zZXJ2ZXJTZXF1ZW5jZSB8fCBudWxsXG4gICAgY29uc3Qgc25hcHNob3RSZXF1aXJlZCA9IGFmdGVyU2VxdWVuY2UgPiAwICYmIG9sZGVzdFNlcXVlbmNlICE9PSBudWxsICYmIG9sZGVzdFNlcXVlbmNlID4gYWZ0ZXJTZXF1ZW5jZSArIDFcblxuICAgIGlmIChzbmFwc2hvdFJlcXVpcmVkKSB7XG4gICAgICByZXR1cm4ge2NoYW5nZXM6IFtdLCBoYXNNb3JlOiBmYWxzZSwgbmV4dFNlcXVlbmNlOiBhZnRlclNlcXVlbmNlLCBvbGRlc3RTZXF1ZW5jZSwgc25hcHNob3RSZXF1aXJlZDogdHJ1ZSwgdXBUb1NlcXVlbmNlOiBsYXRlc3RTZXF1ZW5jZX1cbiAgICB9XG5cbiAgICBjb25zdCByb3dzID0gdGhpcy5fbWVtb3J5Q2hhbmdlcy5maWx0ZXIoKGNoYW5nZSkgPT4ge1xuICAgICAgcmV0dXJuIGNoYW5nZS5zZXJ2ZXJTZXF1ZW5jZSA+IGFmdGVyU2VxdWVuY2UgJiYgY2hhbmdlLnNlcnZlclNlcXVlbmNlIDw9IGxhdGVzdFNlcXVlbmNlICYmIHNjb3Blc0VxdWFsKGNoYW5nZS5zY29wZSwgc2NvcGUpXG4gICAgfSlcbiAgICBjb25zdCBoYXNNb3JlID0gcm93cy5sZW5ndGggPiBsaW1pdFxuICAgIGNvbnN0IGNoYW5nZXMgPSByb3dzLnNsaWNlKDAsIGxpbWl0KVxuICAgIGNvbnN0IGxhc3RDaGFuZ2UgPSBjaGFuZ2VzW2NoYW5nZXMubGVuZ3RoIC0gMV1cblxuICAgIHJldHVybiB7Y2hhbmdlcywgaGFzTW9yZSwgbmV4dFNlcXVlbmNlOiBsYXN0Q2hhbmdlID8gbGFzdENoYW5nZS5zZXJ2ZXJTZXF1ZW5jZSA6IGFmdGVyU2VxdWVuY2UsIG9sZGVzdFNlcXVlbmNlLCBzbmFwc2hvdFJlcXVpcmVkOiBmYWxzZSwgdXBUb1NlcXVlbmNlOiBsYXRlc3RTZXF1ZW5jZX1cbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHdpdGggZGIuXG4gICAqIEBwYXJhbSB7KGRiOiBpbXBvcnQoXCIuLi9kYXRhYmFzZS9kcml2ZXJzL2Jhc2UuanNcIikuZGVmYXVsdCkgPT4gUHJvbWlzZTw/Pn0gY2FsbGJhY2sgLSBDYWxsYmFjay5cbiAgICogQHJldHVybnMge1Byb21pc2U8Pz59IC0gQ2FsbGJhY2sgcmVzdWx0LlxuICAgKi9cbiAgYXN5bmMgX3dpdGhEYihjYWxsYmFjaykge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbmZpZ3VyYXRpb24uZW5zdXJlQ29ubmVjdGlvbnMoe2RhdGFiYXNlSWRlbnRpZmllcnM6IFt0aGlzLmRhdGFiYXNlSWRlbnRpZmllcl0sIG5hbWU6IFwiU2VydmVyIGNoYW5nZS1mZWVkIHN0b3JlXCJ9LCBhc3luYyAoZGJzKSA9PiB7XG4gICAgICBjb25zdCBkYiA9IGRic1t0aGlzLmRhdGFiYXNlSWRlbnRpZmllcl1cblxuICAgICAgaWYgKCFkYikgdGhyb3cgbmV3IEVycm9yKGBObyBkYXRhYmFzZSBjb25uZWN0aW9uIGF2YWlsYWJsZSBmb3IgaWRlbnRpZmllcjogJHt0aGlzLmRhdGFiYXNlSWRlbnRpZmllcn1gKVxuXG4gICAgICByZXR1cm4gYXdhaXQgY2FsbGJhY2soZGIpXG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgcGFnZSBsaW1pdC5cbiAqIEBwYXJhbSB7P30gbGltaXQgLSBSZXF1ZXN0ZWQgbGltaXQuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSAtIFBhZ2Ugc2l6ZS5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplTGltaXQobGltaXQpIHtcbiAgaWYgKHR5cGVvZiBsaW1pdCA9PT0gXCJudW1iZXJcIiAmJiBOdW1iZXIuaXNJbnRlZ2VyKGxpbWl0KSAmJiBsaW1pdCA+IDApIHJldHVybiBNYXRoLm1pbihsaW1pdCwgTUFYX1BBR0VfU0laRSlcbiAgaWYgKHR5cGVvZiBsaW1pdCA9PT0gXCJzdHJpbmdcIiAmJiAvXlxcZCskLy50ZXN0KGxpbWl0KSkgcmV0dXJuIE1hdGgubWluKE51bWJlcihsaW1pdCksIE1BWF9QQUdFX1NJWkUpXG5cbiAgcmV0dXJuIERFRkFVTFRfUEFHRV9TSVpFXG59XG5cbi8qKlxuICogUGFyc2VzIEpTT04taXNoIHZhbHVlcy5cbiAqIEBwYXJhbSB7P30gdmFsdWUgLSBKU09OIHN0cmluZy5cbiAqIEByZXR1cm5zIHs/fSAtIFBhcnNlZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gcGFyc2VKc29uT3JOdWxsKHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIgfHwgdmFsdWUubGVuZ3RoIDwgMSkgcmV0dXJuIG51bGxcblxuICByZXR1cm4gSlNPTi5wYXJzZSh2YWx1ZSlcbn1cblxuLyoqXG4gKiBDb21wYXJlcyBzeW5jIHNjb3BlcyBieSBzdGFibGUgSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgPz4gfCBudWxsfSBjaGFuZ2VTY29wZSAtIFBlcnNpc3RlZCBjaGFuZ2Ugc2NvcGUuXG4gKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsID8+IHwgdW5kZWZpbmVkfSByZXF1ZXN0ZWRTY29wZSAtIENhbGxlciBzY29wZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgdGhlIGNoYW5nZSBpcyB2aXNpYmxlIGZvciB0aGUgcmVxdWVzdGVkIHNjb3BlLlxuICovXG5mdW5jdGlvbiBzY29wZXNFcXVhbChjaGFuZ2VTY29wZSwgcmVxdWVzdGVkU2NvcGUpIHtcbiAgaWYgKHJlcXVlc3RlZFNjb3BlID09PSB1bmRlZmluZWQpIHJldHVybiB0cnVlXG5cbiAgcmV0dXJuIHN0YWJsZUpzb25TdHJpbmdpZnkoY2hhbmdlU2NvcGUgfHwgbnVsbCkgPT09IHN0YWJsZUpzb25TdHJpbmdpZnkocmVxdWVzdGVkU2NvcGUpXG59XG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gU2VydmVyQ2hhbmdlRmVlZEVudHJ5XG4gKiBAcHJvcGVydHkge3N0cmluZyB8IG51bGx9IGFjdG9yRGV2aWNlSWQgLSBTaWduZWQgbXV0YXRpb24gYWN0b3IgZGV2aWNlIGlkIHdoZW4gYXZhaWxhYmxlLlxuICogQHByb3BlcnR5IHtzdHJpbmcgfCBudWxsfSBhY3RvclVzZXJJZCAtIFNpZ25lZCBtdXRhdGlvbiBhY3RvciB1c2VyIGlkIHdoZW4gYXZhaWxhYmxlLlxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCA/PiB8IG51bGx9IGF0dHJpYnV0ZXMgLSBTZXJpYWxpemVkIG11dGF0aW9uIGF0dHJpYnV0ZXMuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gY3JlYXRlZEF0IC0gU2VydmVyIGNoYW5nZSBjcmVhdGlvbiB0aW1lc3RhbXAuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gaWQgLSBTZXJ2ZXIgY2hhbmdlIGlkLlxuICogQHByb3BlcnR5IHtzdHJpbmcgfCBudWxsfSBpZGVtcG90ZW5jeUtleSAtIE11dGF0aW9uIGlkZW1wb3RlbmN5IGtleSB3aGVuIGF2YWlsYWJsZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBtb2RlbCAtIEZyb250ZW5kIG1vZGVsIG5hbWUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gb3BlcmF0aW9uIC0gTXV0YXRpb24gb3BlcmF0aW9uLlxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCA/PiB8IG51bGx9IHBheWxvYWQgLSBTZXJpYWxpemVkIG11dGF0aW9uIHBheWxvYWQuXG4gKiBAcHJvcGVydHkge3N0cmluZyB8IG51bGx9IHJlY29yZElkIC0gQ2hhbmdlZCByZWNvcmQgaWQgd2hlbiBrbm93bi5cbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgPz4gfCBudWxsfSByZXNwb25zZSAtIENvbW1hbmQgcmVzcG9uc2UgcGF5bG9hZC5cbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgPz4gfCBudWxsfSBzY29wZSAtIE9mZmxpbmUgZ3JhbnQgc2NvcGUuXG4gKiBAcHJvcGVydHkge251bWJlcn0gc2VydmVyU2VxdWVuY2UgLSBNb25vdG9uaWMgc2VydmVyIHNlcXVlbmNlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gU2VydmVyQ2hhbmdlRmVlZFJvd1xuICogQHByb3BlcnR5IHtzdHJpbmcgfCBudWxsfSBhY3Rvcl9kZXZpY2VfaWQgLSBBY3RvciBkZXZpY2UgaWQuXG4gKiBAcHJvcGVydHkge3N0cmluZyB8IG51bGx9IGFjdG9yX3VzZXJfaWQgLSBBY3RvciB1c2VyIGlkLlxuICogQHByb3BlcnR5IHtzdHJpbmcgfCBudWxsfSBhdHRyaWJ1dGVzX2pzb24gLSBBdHRyaWJ1dGVzIEpTT04uXG4gKiBAcHJvcGVydHkge0RhdGUgfCBzdHJpbmd9IGNyZWF0ZWRfYXQgLSBDcmVhdGlvbiB0aW1lLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGlkIC0gRW50cnkgaWQuXG4gKiBAcHJvcGVydHkge3N0cmluZyB8IG51bGx9IGlkZW1wb3RlbmN5X2tleSAtIE11dGF0aW9uIGlkZW1wb3RlbmN5IGtleS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBtb2RlbCAtIEZyb250ZW5kIG1vZGVsIG5hbWUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gb3BlcmF0aW9uIC0gTXV0YXRpb24gb3BlcmF0aW9uLlxuICogQHByb3BlcnR5IHtzdHJpbmcgfCBudWxsfSBwYXlsb2FkX2pzb24gLSBNdXRhdGlvbiBwYXlsb2FkIEpTT04uXG4gKiBAcHJvcGVydHkge3N0cmluZyB8IG51bGx9IHJlY29yZF9pZCAtIFJlY29yZCBpZC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nIHwgbnVsbH0gcmVzcG9uc2VfanNvbiAtIFJlc3BvbnNlIEpTT04uXG4gKiBAcHJvcGVydHkge3N0cmluZyB8IG51bGx9IHNjb3BlX2pzb24gLSBTY29wZSBKU09OLlxuICogQHByb3BlcnR5IHtudW1iZXIgfCBzdHJpbmd9IHNlcnZlcl9zZXF1ZW5jZSAtIFNlcnZlciBzZXF1ZW5jZS5cbiAqL1xuIl19
@@ -147,7 +147,7 @@ export default class ServerSequenceAllocator {
147
147
  * @returns {Promise<Result>} Callback result.
148
148
  */
149
149
  async _withDb(callback) {
150
- return await this._getConfiguration().ensureConnections({ name: "Server sequence allocator" }, async (dbs) => {
150
+ return await this._getConfiguration().ensureConnections({ databaseIdentifiers: [this.databaseIdentifier], name: "Server sequence allocator" }, async (dbs) => {
151
151
  const db = dbs[this.databaseIdentifier];
152
152
  if (!db)
153
153
  throw new Error(`No database connection available for identifier: ${this.databaseIdentifier}`);
@@ -217,4 +217,4 @@ export function withServerSequence(ModelClass, { allocator, column = "serverSequ
217
217
  });
218
218
  return ModelClass;
219
219
  }
220
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVyLXNlcXVlbmNlLWFsbG9jYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zeW5jL3NlcnZlci1zZXF1ZW5jZS1hbGxvY2F0b3IuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sYUFBYSxNQUFNLHFCQUFxQixDQUFBO0FBQy9DLE9BQU8sU0FBUyxNQUFNLGlDQUFpQyxDQUFBO0FBRXZEOzs7O0dBSUc7QUFDSCxNQUFNLGdCQUFnQixHQUFHLElBQUksR0FBRyxFQUFFLENBQUE7QUFFbEM7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLENBQUMsT0FBTyxPQUFPLHVCQUF1QjtJQUMxQzs7Ozs7OztPQU9HO0lBQ0gsWUFBWSxFQUFDLGFBQWEsRUFBRSxrQkFBa0IsR0FBRyxTQUFTLEVBQUUsVUFBVSxFQUFFLFNBQVMsR0FBRyw0QkFBNEIsRUFBQyxHQUFHLEVBQUU7UUFDcEgsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUE7UUFDbEMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGtCQUFrQixDQUFBO1FBQzVDLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFBO1FBQzVCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFBO1FBQzFCLElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFBO1FBQ3hCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFBO1FBQ3JCLG1DQUFtQztRQUNuQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQTtJQUMzQixDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxLQUFLLENBQUMsSUFBSTtRQUNSLE1BQU0sUUFBUSxHQUFHLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixLQUFLLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQTtRQUNoRSxNQUFNLGtCQUFrQixHQUFHLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxPQUFPLENBQUMs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LE9BQU8sU0FBUyxDQUFDLGFBQWEsQ0FBQyxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQ3RHLE1BQU0sSUFBSSxLQUFLLENBQUMseUNBQXlDLGdCQUFnQixRQUFRLGFBQWEsaUJBQWlCLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFBO0lBQ25JLENBQUM7SUFFRCxJQUFJLE9BQU8sU0FBUyxDQUFDLGlCQUFpQixDQUFDLElBQUksVUFBVSxFQUFFLENBQUM7UUFDdEQ7Ozs7V0FJRztRQUNILFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEtBQUssVUFBVSxxQ0FBcUM7WUFDakYsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsTUFBTSxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQTtRQUNoRCxDQUFDLENBQUE7SUFDSCxDQUFDO0lBRUQsVUFBVSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDdkMsOEVBQThFO1FBQzlFLE1BQU0sYUFBYSxHQUFHLGdDQUFnQyxDQUFDLEVBQUMsZ0JBQWlCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQTtRQUVsRixJQUFJLGFBQWEsQ0FBQyxhQUFhLENBQUMsRUFBRTtZQUFFLE9BQU07UUFFMUMsTUFBTSxhQUFhLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFBO0lBQzFDLENBQUMsQ0FBQyxDQUFBO0lBRUYsT0FBTyxVQUFVLENBQUE7QUFDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgQ29uZmlndXJhdGlvbiBmcm9tIFwiLi4vY29uZmlndXJhdGlvbi5qc1wiXG5pbXBvcnQgVGFibGVEYXRhIGZyb20gXCIuLi9kYXRhYmFzZS90YWJsZS1kYXRhL2luZGV4LmpzXCJcblxuLyoqXG4gKiBBbGxvY2F0aW9uIHF1ZXVlcyBwZXIgZGF0YWJhc2UrdGFibGUsIHNlcmlhbGl6aW5nIGluc2VydC9sYXN0LWluc2VydC1pZFxuICogcGFpcnMgYWNyb3NzIGFsbCBhbGxvY2F0b3IgaW5zdGFuY2VzIGluIHRoaXMgcHJvY2Vzcy5cbiAqIEB0eXBlIHtNYXA8c3RyaW5nLCBQcm9taXNlPHZvaWQ+Pn1cbiAqL1xuY29uc3QgYWxsb2NhdGlvblF1ZXVlcyA9IG5ldyBNYXAoKVxuXG4vKipcbiAqIEFsbG9jYXRlcyBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcgc2VydmVyIHN5bmMgc2VxdWVuY2VzIGZyb20gYW5cbiAqIEFVVE9fSU5DUkVNRU5UIGlkIHRhYmxlOiBldmVyeSBhbGxvY2F0aW9uIGluc2VydHMgYSByb3cgYW5kIHJldHVybnMgdGhlXG4gKiBkcml2ZXIncyBsYXN0LWluc2VydCBpZCwgc28gc2VxdWVuY2VzIHN0YXkgdW5pcXVlIGFuZCBpbmNyZWFzaW5nIGFjcm9zc1xuICogcHJvY2Vzc2VzIHNoYXJpbmcgdGhlIHNhbWUgZGF0YWJhc2UuXG4gKlxuICogQmFja2VkIGJ5IGFuIGF1dG8tY3JlYXRlZCBgdmVsb2Npb3VzX3NlcnZlcl9zZXF1ZW5jZXNgIHRhYmxlIG9uIHRoZVxuICogY29uZmlndXJlZCBkYXRhYmFzZSwgd2l0aCBhIHByb2Nlc3MtbG9jYWwgbWVtb3J5IGNvdW50ZXIgZmFsbGJhY2sgd2hlbiBub1xuICogZGF0YWJhc2UgaXMgY29uZmlndXJlZCAobWlycm9yaW5nIHRoZSBzeW5jIHNjb3BlIHN0b3JlKS4gQXBwcyB3aXRoIGFuXG4gKiBleGlzdGluZyBzZXF1ZW5jZSB0YWJsZSAoZm9yIGV4YW1wbGUgYSBiYXJlIGBpZGAtb25seSBBVVRPX0lOQ1JFTUVOVCB0YWJsZSlcbiAqIHBvaW50IGB0YWJsZU5hbWVgIGF0IGl0IGFuZCBwYXNzIGBpbnNlcnREYXRhOiB7fWAgdG8gaW5zZXJ0IGVtcHR5IHJvd3MuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlcnZlclNlcXVlbmNlQWxsb2NhdG9yIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBzZXJ2ZXIgc2VxdWVuY2UgYWxsb2NhdG9yLlxuICAgKiBAcGFyYW0ge29iamVjdH0gW2FyZ3NdIC0gT3B0aW9ucy5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9IFthcmdzLmNvbmZpZ3VyYXRpb25dIC0gQ29uZmlndXJhdGlvbiBvd25pbmcgdGhlIGRhdGFiYXNlLiBEZWZhdWx0cyB0byB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLCByZXNvbHZlZCBsYXppbHkgcGVyIGFsbG9jYXRpb24uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5kYXRhYmFzZUlkZW50aWZpZXJdIC0gRGF0YWJhc2UgaWRlbnRpZmllci5cbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCA/Pn0gW2FyZ3MuaW5zZXJ0RGF0YV0gLSBSb3cgcGF5bG9hZCBpbnNlcnRlZCBwZXIgYWxsb2NhdGlvbi4gRGVmYXVsdHMgdG8gYHtjcmVhdGVkX2F0OiBuZXcgRGF0ZSgpfWAgbWF0Y2hpbmcgdGhlIGF1dG8tY3JlYXRlZCB0YWJsZTsgcGFzcyBge31gIGZvciBiYXJlIGlkLW9ubHkgdGFibGVzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3MudGFibGVOYW1lXSAtIFNlcXVlbmNlIHRhYmxlIG5hbWUuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih7Y29uZmlndXJhdGlvbiwgZGF0YWJhc2VJZGVudGlmaWVyID0gXCJkZWZhdWx0XCIsIGluc2VydERhdGEsIHRhYmxlTmFtZSA9IFwidmVsb2Npb3VzX3NlcnZlcl9zZXF1ZW5jZXNcIn0gPSB7fSkge1xuICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb25cbiAgICB0aGlzLmRhdGFiYXNlSWRlbnRpZmllciA9IGRhdGFiYXNlSWRlbnRpZmllclxuICAgIHRoaXMuaW5zZXJ0RGF0YSA9IGluc2VydERhdGFcbiAgICB0aGlzLnRhYmxlTmFtZSA9IHRhYmxlTmFtZVxuICAgIHRoaXMuX21lbW9yeVNlcXVlbmNlID0gMFxuICAgIHRoaXMuX2lzUmVhZHkgPSBmYWxzZVxuICAgIC8qKiBAdHlwZSB7UHJvbWlzZTx2b2lkPiB8IG51bGx9ICovXG4gICAgdGhpcy5fcmVhZHlQcm9taXNlID0gbnVsbFxuICB9XG5cbiAgLyoqXG4gICAqIEFsbG9jYXRlcyB0aGUgbmV4dCBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcgc2VxdWVuY2UuXG4gICAqXG4gICAqIEFsbG9jYXRpb25zIHNlcmlhbGl6ZSB0aHJvdWdoIGEgbW9kdWxlLWxldmVsIHF1ZXVlIHBlciBkYXRhYmFzZSt0YWJsZSBzb1xuICAgKiBwYXJhbGxlbCBgbmV4dCgpYCBjYWxscyAtIGluY2x1ZGluZyBjYWxscyBmcm9tIG90aGVyIGFsbG9jYXRvciBpbnN0YW5jZXNcbiAgICogc2hhcmluZyB0aGUgc2FtZSB0YWJsZSBhbmQgY29ubmVjdGlvbiAtIGNhbm5vdCBpbnRlcmxlYXZlIHRoZWlyIGluc2VydFxuICAgKiBhbmQgbGFzdC1pbnNlcnQtaWQgcmVhZHMgYW5kIGhhbmQgb3V0IGR1cGxpY2F0ZSBzZXF1ZW5jZXMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPG51bWJlcj59IE5leHQgc2VxdWVuY2UgdmFsdWUuXG4gICAqL1xuICBhc3luYyBuZXh0KCkge1xuICAgIGNvbnN0IHF1ZXVlS2V5ID0gYCR7dGhpcy5kYXRhYmFzZUlkZW50aWZpZXJ9Ojoke3RoaXMudGFibGVOYW1lfWBcbiAgICBjb25zdCBwcmV2aW91c0FsbG9jYXRpb24gPSBhbGxvY2F0aW9uUXVldWVzLmdldChxdWV1ZUtleSkgPz8gUHJvbWlzZS5yZXNvbHZlKClcbiAgICBjb25zdCBhbGxvY2F0aW9uID0gcHJldmlvdXNBbGxvY2F0aW9uLnRoZW4oKCkgPT4gdGhpcy5fYWxsb2NhdGVOZXh0KCkpXG5cbiAgICBhbGxvY2F0aW9uUXVldWVzLnNldChxdWV1ZUtleSwgYWxsb2NhdGlvbi50aGVuKCgpID0+IHVuZGVmaW5lZCwgKCkgPT4gdW5kZWZpbmVkKSlcblxuICAgIHJldHVybiBhd2FpdCBhbGxvY2F0aW9uXG4gIH1cblxuICAvKipcbiAgICogRW5zdXJlcyB0aGUgYmFja2luZyB0YWJsZSBleGlzdHMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSBSZXNvbHZlcyB3aGVuIHJlYWR5LlxuICAgKi9cbiAgYXN5bmMgZW5zdXJlUmVhZHkoKSB7XG4gICAgaWYgKHRoaXMuX2lzUmVhZHkpIHJldHVyblxuXG4gICAgaWYgKHRoaXMuX3VzZXNNZW1vcnlTdG9yYWdlKCkpIHtcbiAgICAgIHRoaXMuX2lzUmVhZHkgPSB0cnVlXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcmVhZHlQcm9taXNlKSByZXR1cm4gYXdhaXQgdGhpcy5fcmVhZHlQcm9taXNlXG5cbiAgICB0aGlzLl9yZWFkeVByb21pc2UgPSB0aGlzLl93aXRoRGIoYXN5bmMgKGRiKSA9PiB7XG4gICAgICBjb25zdCBjcmVhdGVkID0gYXdhaXQgdGhpcy5fZW5zdXJlU2VxdWVuY2VzVGFibGUoZGIpXG5cbiAgICAgIC8vIERETCBqb2lucyBhbnkgdHJhbnNhY3Rpb24gYWxyZWFkeSBvcGVuIG9uIHRoaXMgY29ubmVjdGlvbiAodGhlIG1peGluJ3NcbiAgICAgIC8vIGJlZm9yZUNyZWF0ZSBhbGxvY2F0aW9uIGFsd2F5cyBydW5zIGluc2lkZSB0aGUgcmVjb3JkIHNhdmUgdHJhbnNhY3Rpb24pLFxuICAgICAgLy8gYW5kIG9uIHRyYW5zYWN0aW9uYWwtRERMIGRhdGFiYXNlcyAoTVNTUUwsIFBvc3RncmVTUUwsIFNRTGl0ZSkgYSByb2xsYmFja1xuICAgICAgLy8gb2YgdGhhdCBvdXRlciB0cmFuc2FjdGlvbiByZW1vdmVzIHRoZSBqdXN0LWNyZWF0ZWQgdGFibGUgYWdhaW4uIE9ubHlcbiAgICAgIC8vIGNhY2hlIHJlYWRpbmVzcyB3aGVuIHRoZSB0YWJsZSB3YXMgbm90IGNyZWF0ZWQgaW5zaWRlIGFuIGFjdGl2ZVxuICAgICAgLy8gdHJhbnNhY3Rpb247IG90aGVyd2lzZSB0aGUgbmV4dCBhbGxvY2F0aW9uIHJlLXZlcmlmaWVzIHRoZSB0YWJsZS5cbiAgICAgIGlmICghY3JlYXRlZCB8fCAhZGIuaW5zaWRlVHJhbnNhY3Rpb24oKSkgdGhpcy5faXNSZWFkeSA9IHRydWVcbiAgICB9KVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuX3JlYWR5UHJvbWlzZVxuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAoIXRoaXMuX2lzUmVhZHkpIHRoaXMuX3JlYWR5UHJvbWlzZSA9IG51bGxcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWxsb2NhdGVzIG9uZSBzZXF1ZW5jZSB2YWx1ZSBhZnRlciBxdWV1ZWluZy5cbiAgICogQHJldHVybnMge1Byb21pc2U8bnVtYmVyPn0gQWxsb2NhdGVkIHNlcXVlbmNlIHZhbHVlLlxuICAgKi9cbiAgYXN5bmMgX2FsbG9jYXRlTmV4dCgpIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZVJlYWR5KClcblxuICAgIGlmICh0aGlzLl91c2VzTWVtb3J5U3RvcmFnZSgpKSB7XG4gICAgICByZXR1cm4gKyt0aGlzLl9tZW1vcnlTZXF1ZW5jZVxuICAgIH1cblxuICAgIHJldHVybiBhd2FpdCB0aGlzLl93aXRoRGIoYXN5bmMgKGRiKSA9PiB7XG4gICAgICAvLyBUaGUgYWxsb2NhdGVkIGlkIG11c3QgYmUgcmV0dXJuZWQgYnkgdGhlIGluc2VydCBzdGF0ZW1lbnQgaXRzZWxmIChPVVRQVVRcbiAgICAgIC8vIElOU0VSVEVEL1JFVFVSTklORyksIGxpa2UgdGhlIHJlY29yZCBjcmVhdGUgcGF0aCBkb2VzOiBNU1NRTCdzXG4gICAgICAvLyBTQ09QRV9JREVOVElUWSgpIG9ubHkgc2VlcyBpbnNlcnRzIGZyb20gdGhlIHNhbWUgYmF0Y2gvc2NvcGUsIHNvIHJlYWRpbmdcbiAgICAgIC8vIHRoZSBsYXN0LWluc2VydCBpZCBhcyBhIHNlcGFyYXRlIHF1ZXJ5IGFsd2F5cyByZXR1cm5zIE5VTEwgdGhlcmUuIERyaXZlcnNcbiAgICAgIC8vIHdpdGhvdXQgaW5zZXJ0LXJldHVybmluZyBzdXBwb3J0IChvbGRlciBTUUxpdGUpIGtlZXAgdGhlIHJlbGlhYmxlXG4gICAgICAvLyBjb25uZWN0aW9uLXNjb3BlZCBsYXN0LWluc2VydC1pZCBmYWxsYmFjay5cbiAgICAgIGNvbnN0IGluc2VydFNxbCA9IGRiLmluc2VydFNxbCh7XG4gICAgICAgIGRhdGE6IHRoaXMuX2luc2VydFBheWxvYWQoKSxcbiAgICAgICAgcmV0dXJuTGFzdEluc2VydGVkQ29sdW1uTmFtZXM6IFtcImlkXCJdLFxuICAgICAgICB0YWJsZU5hbWU6IHRoaXMudGFibGVOYW1lXG4gICAgICB9KVxuICAgICAgY29uc3QgaW5zZXJ0UmVzdWx0ID0gYXdhaXQgZGIucXVlcnkoaW5zZXJ0U3FsKVxuICAgICAgY29uc3QgaW5zZXJ0ZWRJZCA9IEFycmF5LmlzQXJyYXkoaW5zZXJ0UmVzdWx0KSA/IGluc2VydFJlc3VsdFswXT8uaWQgOiB1bmRlZmluZWRcblxuICAgICAgaWYgKGluc2VydGVkSWQgIT09IHVuZGVmaW5lZCAmJiBpbnNlcnRlZElkICE9PSBudWxsKSByZXR1cm4gTnVtYmVyKGluc2VydGVkSWQpXG5cbiAgICAgIHJldHVybiBOdW1iZXIoYXdhaXQgZGIubGFzdEluc2VydElEKCkpXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgdGhlIHJvdyBwYXlsb2FkIGluc2VydGVkIHBlciBhbGxvY2F0aW9uLlxuICAgKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgPz59IEluc2VydCBwYXlsb2FkLlxuICAgKi9cbiAgX2luc2VydFBheWxvYWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaW5zZXJ0RGF0YSA/PyB7Y3JlYXRlZF9hdDogbmV3IERhdGUoKX1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyB0aGUgY29uZmlndXJhdGlvbiBvd25pbmcgdGhlIHNlcXVlbmNlIHRhYmxlLlxuICAgKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSBSZXNvbHZlZCBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgX2dldENvbmZpZ3VyYXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlndXJhdGlvbiA/PyBDb25maWd1cmF0aW9uLmN1cnJlbnQoKVxuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGFsbG9jYXRvciBydW5zIHdpdGhvdXQgYSBjb25maWd1cmVkIGRhdGFiYXNlLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciBtZW1vcnkgc3RvcmFnZSBpcyB1c2VkLlxuICAgKi9cbiAgX3VzZXNNZW1vcnlTdG9yYWdlKCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gIXRoaXMuX2dldENvbmZpZ3VyYXRpb24oKS5nZXREYXRhYmFzZUNvbmZpZ3VyYXRpb24oKVt0aGlzLmRhdGFiYXNlSWRlbnRpZmllcl1cbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgYSBjYWxsYmFjayB3aXRoIGEgZGF0YWJhc2UgY29ubmVjdGlvbi5cbiAgICogQHRlbXBsYXRlIFJlc3VsdFxuICAgKiBAcGFyYW0geyhkYjogaW1wb3J0KFwiLi4vZGF0YWJhc2UvZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHQpID0+IFByb21pc2U8UmVzdWx0Pn0gY2FsbGJhY2sgLSBEYXRhYmFzZSBjYWxsYmFjay5cbiAgICogQHJldHVybnMge1Byb21pc2U8UmVzdWx0Pn0gQ2FsbGJhY2sgcmVzdWx0LlxuICAgKi9cbiAgYXN5bmMgX3dpdGhEYihjYWxsYmFjaykge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLl9nZXRDb25maWd1cmF0aW9uKCkuZW5zdXJlQ29ubmVjdGlvbnMoe25hbWU6IFwiU2VydmVyIHNlcXVlbmNlIGFsbG9jYXRvclwifSwgYXN5bmMgKGRicykgPT4ge1xuICAgICAgY29uc3QgZGIgPSBkYnNbdGhpcy5kYXRhYmFzZUlkZW50aWZpZXJdXG5cbiAgICAgIGlmICghZGIpIHRocm93IG5ldyBFcnJvcihgTm8gZGF0YWJhc2UgY29ubmVjdGlvbiBhdmFpbGFibGUgZm9yIGlkZW50aWZpZXI6ICR7dGhpcy5kYXRhYmFzZUlkZW50aWZpZXJ9YClcblxuICAgICAgcmV0dXJuIGF3YWl0IGNhbGxiYWNrKGRiKVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogRW5zdXJlcyB0aGUgc2VxdWVuY2VzIHRhYmxlIGV4aXN0cy5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9kYXRhYmFzZS9kcml2ZXJzL2Jhc2UuanNcIikuZGVmYXVsdH0gZGIgLSBEYXRhYmFzZSBjb25uZWN0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxib29sZWFuPn0gV2hldGhlciB0aGUgdGFibGUgaGFkIHRvIGJlIGNyZWF0ZWQuXG4gICAqL1xuICBhc3luYyBfZW5zdXJlU2VxdWVuY2VzVGFibGUoZGIpIHtcbiAgICBpZiAoYXdhaXQgZGIudGFibGVFeGlzdHModGhpcy50YWJsZU5hbWUpKSByZXR1cm4gZmFsc2VcblxuICAgIGNvbnN0IHRhYmxlID0gbmV3IFRhYmxlRGF0YSh0aGlzLnRhYmxlTmFtZSwge2lmTm90RXhpc3RzOiB0cnVlfSlcblxuICAgIHRhYmxlLmJpZ2ludChcImlkXCIsIHthdXRvSW5jcmVtZW50OiB0cnVlLCBudWxsOiBmYWxzZSwgcHJpbWFyeUtleTogdHJ1ZX0pXG4gICAgdGFibGUuZGF0ZXRpbWUoXCJjcmVhdGVkX2F0XCIsIHtudWxsOiBmYWxzZX0pXG5cbiAgICBhd2FpdCBkYi5jcmVhdGVUYWJsZSh0YWJsZSlcblxuICAgIHJldHVybiB0cnVlXG4gIH1cbn1cblxuLyoqXG4gKiBXaXJlcyBzZXJ2ZXIgc2VxdWVuY2luZyBvbnRvIGEgc3luYyBtb2RlbCBjbGFzczogcmVnaXN0ZXJzIGEgYmVmb3JlQ3JlYXRlXG4gKiBsaWZlY3ljbGUgY2FsbGJhY2sgYXNzaWduaW5nIHRoZSBuZXh0IHNlcXVlbmNlIHdoZW4gdGhlIHJlY29yZCBoYXMgbm9uZSwgYW5kXG4gKiBkZWZpbmVzIGFuIGBhZHZhbmNlPENvbHVtbj4oKWAgaW5zdGFuY2UgbWV0aG9kICh3aGVuIHRoZSBtb2RlbCBkb2VzIG5vdFxuICogYWxyZWFkeSBkZWZpbmUgb25lKSB0aGF0IHJlLXNlcXVlbmNlcyB0aGUgcmVjb3JkIHRocm91Z2ggdGhlIGFsbG9jYXRvci5cbiAqXG4gKiBUaGUgc2VxdWVuY2UgaXMgYWx3YXlzIHdyaXR0ZW4gdGhyb3VnaCB0aGUgbW9kZWwncyBnZW5lcmF0ZWQgdHlwZWQgc2V0dGVyXG4gKiAoZm9yIGV4YW1wbGUgYHNldFNlcnZlclNlcXVlbmNlYCksIHNvIHRoZSBtb2RlbCBtdXN0IGV4cG9zZSB0aGUgZ2VuZXJhdGVkXG4gKiBgc2V0PENvbHVtbj5gL2BoYXM8Q29sdW1uPmAgYWNjZXNzb3JzIGZvciB0aGUgY29sdW1uLlxuICogQHRlbXBsYXRlIHt0eXBlb2YgaW1wb3J0KFwiLi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHR9IFRNb2RlbENsYXNzXG4gKiBAcGFyYW0ge1RNb2RlbENsYXNzfSBNb2RlbENsYXNzIC0gU3luYyBtb2RlbCBjbGFzcyB0byBzZXF1ZW5jZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucy5cbiAqIEBwYXJhbSB7U2VydmVyU2VxdWVuY2VBbGxvY2F0b3J9IGFyZ3MuYWxsb2NhdG9yIC0gQWxsb2NhdG9yIHByb3ZpZGluZyBzZXF1ZW5jZSB2YWx1ZXMuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3MuY29sdW1uXSAtIFNlcXVlbmNlIGF0dHJpYnV0ZSBuYW1lLlxuICogQHJldHVybnMge1RNb2RlbENsYXNzfSBUaGUgZ2l2ZW4gbW9kZWwgY2xhc3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aXRoU2VydmVyU2VxdWVuY2UoTW9kZWxDbGFzcywge2FsbG9jYXRvciwgY29sdW1uID0gXCJzZXJ2ZXJTZXF1ZW5jZVwifSkge1xuICBpZiAoIShhbGxvY2F0b3IgaW5zdGFuY2VvZiBTZXJ2ZXJTZXF1ZW5jZUFsbG9jYXRvcikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHdpdGhTZXJ2ZXJTZXF1ZW5jZSByZXF1aXJlcyBhIFNlcnZlclNlcXVlbmNlQWxsb2NhdG9yLCBnb3Q6ICR7U3RyaW5nKGFsbG9jYXRvcil9YClcbiAgfVxuXG4gIGNvbnN0IHVwcGVyQ29sdW1uID0gYCR7Y29sdW1uLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpfSR7Y29sdW1uLnNsaWNlKDEpfWBcbiAgY29uc3QgYWR2YW5jZU1ldGhvZE5hbWUgPSBgYWR2YW5jZSR7dXBwZXJDb2x1bW59YFxuICBjb25zdCBoYXNNZXRob2ROYW1lID0gYGhhcyR7dXBwZXJDb2x1bW59YFxuICBjb25zdCBzZXR0ZXJNZXRob2ROYW1lID0gYHNldCR7dXBwZXJDb2x1bW59YFxuXG4gIC8vIE5hcnJvd3MgdGhlIHByb3RvdHlwZSB0byBkeW5hbWljIG1ldGhvZCBhY2Nlc3MgZm9yIHRoZSBjb25maWd1cmVkIGNvbHVtbiBuYW1lLlxuICBjb25zdCBwcm90b3R5cGUgPSAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsID8+fSAqLyAoTW9kZWxDbGFzcy5wcm90b3R5cGUpXG5cbiAgaWYgKHR5cGVvZiBwcm90b3R5cGVbc2V0dGVyTWV0aG9kTmFtZV0gIT0gXCJmdW5jdGlvblwiIHx8IHR5cGVvZiBwcm90b3R5cGVbaGFzTWV0aG9kTmFtZV0gIT0gXCJmdW5jdGlvblwiKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGB3aXRoU2VydmVyU2VxdWVuY2UgcmVxdWlyZXMgZ2VuZXJhdGVkICR7c2V0dGVyTWV0aG9kTmFtZX0gYW5kICR7aGFzTWV0aG9kTmFtZX0gYWNjZXNzb3JzIG9uICR7TW9kZWxDbGFzcy5uYW1lfWApXG4gIH1cblxuICBpZiAodHlwZW9mIHByb3RvdHlwZVthZHZhbmNlTWV0aG9kTmFtZV0gIT0gXCJmdW5jdGlvblwiKSB7XG4gICAgLyoqXG4gICAgICogQXNzaWducyB0aGUgbmV4dCBzZXJ2ZXItc2lkZSBzZXF1ZW5jZS5cbiAgICAgKiBAdGhpcyB7UmVjb3JkPHN0cmluZywgPz59XG4gICAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAgICovXG4gICAgcHJvdG90eXBlW2FkdmFuY2VNZXRob2ROYW1lXSA9IGFzeW5jIGZ1bmN0aW9uIGFkdmFuY2VTZXJ2ZXJTZXF1ZW5jZVRocm91Z2hBbGxvY2F0b3IoKSB7XG4gICAgICB0aGlzW3NldHRlck1ldGhvZE5hbWVdKGF3YWl0IGFsbG9jYXRvci5uZXh0KCkpXG4gICAgfVxuICB9XG5cbiAgTW9kZWxDbGFzcy5iZWZvcmVDcmVhdGUoYXN5bmMgKHJlY29yZCkgPT4ge1xuICAgIC8vIE5hcnJvd3MgdGhlIHJlY29yZCB0byBkeW5hbWljIG1ldGhvZCBhY2Nlc3MgZm9yIHRoZSBjb25maWd1cmVkIGNvbHVtbiBuYW1lLlxuICAgIGNvbnN0IGR5bmFtaWNSZWNvcmQgPSAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsID8+fSAqLyAoLyoqIEB0eXBlIHs/fSAqLyAocmVjb3JkKSlcblxuICAgIGlmIChkeW5hbWljUmVjb3JkW2hhc01ldGhvZE5hbWVdKCkpIHJldHVyblxuXG4gICAgYXdhaXQgZHluYW1pY1JlY29yZFthZHZhbmNlTWV0aG9kTmFtZV0oKVxuICB9KVxuXG4gIHJldHVybiBNb2RlbENsYXNzXG59XG4iXX0=
220
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVyLXNlcXVlbmNlLWFsbG9jYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zeW5jL3NlcnZlci1zZXF1ZW5jZS1hbGxvY2F0b3IuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sYUFBYSxNQUFNLHFCQUFxQixDQUFBO0FBQy9DLE9BQU8sU0FBUyxNQUFNLGlDQUFpQyxDQUFBO0FBRXZEOzs7O0dBSUc7QUFDSCxNQUFNLGdCQUFnQixHQUFHLElBQUksR0FBRyxFQUFFLENBQUE7QUFFbEM7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLENBQUMsT0FBTyxPQUFPLHVCQUF1QjtJQUMxQzs7Ozs7OztPQU9HO0lBQ0gsWUFBWSxFQUFDLGFBQWEsRUFBRSxrQkFBa0IsR0FBRyxTQUFTLEVBQUUsVUFBVSxFQUFFLFNBQVMsR0FBRyw0QkFBNEIsRUFBQyxHQUFHLEVBQUU7UUFDcEgsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUE7UUFDbEMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGtCQUFrQixDQUFBO1FBQzVDLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFBO1FBQzVCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFBO1FBQzFCLElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFBO1FBQ3hCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFBO1FBQ3JCLG1DQUFtQztRQUNuQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQTtJQUMzQixDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxLQUFLLENBQUMsSUFBSTtRQUNSLE1BQU0sUUFBUSxHQUFHLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixLQUFLLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQTtRQUNoRSxNQUFNLGtCQUFrQixHQUFHLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUE7UUFDOUUsTUFBTSxVQUFVLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFBO1FBRXRFLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQTtRQUVqRixPQUFPLE1BQU0sVUFBVSxDQUFBO0lBQ3pCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsV0FBVztRQUNmLElBQUksSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFNO1FBRXpCLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQTtZQUNwQixPQUFNO1FBQ1IsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLGFBQWE7WUFBRSxPQUFPLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQTtRQUV2RCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFO1lBQzdDLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixDQUFDLEVBQUUsQ0FBQyxDQUFBO1lBRXBELHlFQUF5RTtZQUN6RSwyRUFBMkU7WUFDM0UsNEVBQTRFO1lBQzVFLHVFQUF1RTtZQUN2RSxrRUFBa0U7WUFDbEUsb0VBQW9FO1lBQ3BFLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsaUJBQWlCLEVBQUU7Z0JBQUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUE7UUFDL0QsQ0FBQyxDQUFDLENBQUE7UUFFRixJQUFJLENBQUM7WUFDSCxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUE7UUFDMUIsQ0FBQztnQkFBUyxDQUFDO1lBQ1QsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRO2dCQUFFLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFBO1FBQy9DLENBQUM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLGFBQWE7UUFDakIsTUFBTSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUE7UUFFeEIsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxDQUFDO1lBQzlCLE9BQU8sRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFBO1FBQy9CLENBQUM7UUFFRCxPQUFPLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUU7WUFDckMsMkVBQTJFO1lBQzNFLGlFQUFpRTtZQUNqRSwyRUFBMkU7WUFDM0UsNEVBQTRFO1lBQzVFLG9FQUFvRTtZQUNwRSw2Q0FBNkM7WUFDN0MsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQztnQkFDN0IsSUFBSSxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUU7Z0JBQzNCLDZCQUE2QixFQUFFLENBQUMsSUFBSSxDQUFDO2dCQUNyQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7YUFDMUIsQ0FBQyxDQUFBO1lBQ0YsTUFBTSxZQUFZLEdBQUcsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFBO1lBQzlDLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQTtZQUVoRixJQUFJLFVBQVUsS0FBSyxTQUFTLElBQUksVUFBVSxLQUFLLElBQUk7Z0JBQUUsT0FBTyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUE7WUFFOUUsT0FBTyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQTtRQUN4QyxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRDs7O09BR0c7SUFDSCxjQUFjO1FBQ1osT0FBTyxJQUFJLENBQUMsVUFBVSxJQUFJLEVBQUMsVUFBVSxFQUFFLElBQUksSUFBSSxFQUFFLEVBQUMsQ0FBQTtJQUNwRCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsaUJBQWlCO1FBQ2YsT0FBTyxJQUFJLENBQUMsYUFBYSxJQUFJLGFBQWEsQ0FBQyxPQUFPLEVBQUUsQ0FBQTtJQUN0RCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsa0JBQWtCO1FBQ2hCLElBQUksQ0FBQztZQUNILE9BQU8sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO1FBQ3RGLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxPQUFPLElBQUksQ0FBQTtRQUNiLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVE7UUFDcEIsT0FBTyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLGlCQUFpQixDQUFDLEVBQUMsbUJBQW1CLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsRUFBRSxJQUFJLEVBQUUsMkJBQTJCLEVBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDekosTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO1lBRXZDLElBQUksQ0FBQyxFQUFFO2dCQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsb0RBQW9ELElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUE7WUFFdkcsT0FBTyxNQUFNLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUMzQixDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLHFCQUFxQixDQUFDLEVBQUU7UUFDNUIsSUFBSSxNQUFNLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFBO1FBRXRELE1BQU0sS0FBSyxHQUFHLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBQyxXQUFXLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQTtRQUVoRSxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFDLGFBQWEsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQTtRQUN4RSxLQUFLLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxFQUFDLElBQUksRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFBO1FBRTNDLE1BQU0sRUFBRSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUUzQixPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7Q0FDRjtBQUVEOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxVQUFVLEVBQUUsRUFBQyxTQUFTLEVBQUUsTUFBTSxHQUFHLGdCQUFnQixFQUFDO0lBQ25GLElBQUksQ0FBQyxDQUFDLFNBQVMsWUFBWSx1QkFBdUIsQ0FBQyxFQUFFLENBQUM7UUFDcEQsTUFBTSxJQUFJLEtBQUssQ0FBQywrREFBK0QsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUNyRyxDQUFDO0lBRUQsTUFBTSxXQUFXLEdBQUcsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtJQUN6RSxNQUFNLGlCQUFpQixHQUFHLFVBQVUsV0FBVyxFQUFFLENBQUE7SUFDakQsTUFBTSxhQUFhLEdBQUcsTUFBTSxXQUFXLEVBQUUsQ0FBQTtJQUN6QyxNQUFNLGdCQUFnQixHQUFHLE1BQU0sV0FBVyxFQUFFLENBQUE7SUFFNUMsaUZBQWlGO0lBQ2pGLE1BQU0sU0FBUyxHQUFHLGdDQUFnQyxDQUFDLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBRXpFLElBQUksT0FBTyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxVQUFVLElBQUksT0FBTyxTQUFTLENBQUMsYUFBYSxDQUFDLElBQUksVUFBVSxFQUFFLENBQUM7UUFDdEcsTUFBTSxJQUFJLEtBQUssQ0FBQyx5Q0FBeUMsZ0JBQWdCLFFBQVEsYUFBYSxpQkFBaUIsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUE7SUFDbkksQ0FBQztJQUVELElBQUksT0FBTyxTQUFTLENBQUMsaUJBQWlCLENBQUMsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUN0RDs7OztXQUlHO1FBQ0gsU0FBUyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsS0FBSyxVQUFVLHFDQUFxQztZQUNqRixJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxNQUFNLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFBO1FBQ2hELENBQUMsQ0FBQTtJQUNILENBQUM7SUFFRCxVQUFVLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUN2Qyw4RUFBOEU7UUFDOUUsTUFBTSxhQUFhLEdBQUcsZ0NBQWdDLENBQUMsRUFBQyxnQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFBO1FBRWxGLElBQUksYUFBYSxDQUFDLGFBQWEsQ0FBQyxFQUFFO1lBQUUsT0FBTTtRQUUxQyxNQUFNLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUE7SUFDMUMsQ0FBQyxDQUFDLENBQUE7SUFFRixPQUFPLFVBQVUsQ0FBQTtBQUNuQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBDb25maWd1cmF0aW9uIGZyb20gXCIuLi9jb25maWd1cmF0aW9uLmpzXCJcbmltcG9ydCBUYWJsZURhdGEgZnJvbSBcIi4uL2RhdGFiYXNlL3RhYmxlLWRhdGEvaW5kZXguanNcIlxuXG4vKipcbiAqIEFsbG9jYXRpb24gcXVldWVzIHBlciBkYXRhYmFzZSt0YWJsZSwgc2VyaWFsaXppbmcgaW5zZXJ0L2xhc3QtaW5zZXJ0LWlkXG4gKiBwYWlycyBhY3Jvc3MgYWxsIGFsbG9jYXRvciBpbnN0YW5jZXMgaW4gdGhpcyBwcm9jZXNzLlxuICogQHR5cGUge01hcDxzdHJpbmcsIFByb21pc2U8dm9pZD4+fVxuICovXG5jb25zdCBhbGxvY2F0aW9uUXVldWVzID0gbmV3IE1hcCgpXG5cbi8qKlxuICogQWxsb2NhdGVzIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZyBzZXJ2ZXIgc3luYyBzZXF1ZW5jZXMgZnJvbSBhblxuICogQVVUT19JTkNSRU1FTlQgaWQgdGFibGU6IGV2ZXJ5IGFsbG9jYXRpb24gaW5zZXJ0cyBhIHJvdyBhbmQgcmV0dXJucyB0aGVcbiAqIGRyaXZlcidzIGxhc3QtaW5zZXJ0IGlkLCBzbyBzZXF1ZW5jZXMgc3RheSB1bmlxdWUgYW5kIGluY3JlYXNpbmcgYWNyb3NzXG4gKiBwcm9jZXNzZXMgc2hhcmluZyB0aGUgc2FtZSBkYXRhYmFzZS5cbiAqXG4gKiBCYWNrZWQgYnkgYW4gYXV0by1jcmVhdGVkIGB2ZWxvY2lvdXNfc2VydmVyX3NlcXVlbmNlc2AgdGFibGUgb24gdGhlXG4gKiBjb25maWd1cmVkIGRhdGFiYXNlLCB3aXRoIGEgcHJvY2Vzcy1sb2NhbCBtZW1vcnkgY291bnRlciBmYWxsYmFjayB3aGVuIG5vXG4gKiBkYXRhYmFzZSBpcyBjb25maWd1cmVkIChtaXJyb3JpbmcgdGhlIHN5bmMgc2NvcGUgc3RvcmUpLiBBcHBzIHdpdGggYW5cbiAqIGV4aXN0aW5nIHNlcXVlbmNlIHRhYmxlIChmb3IgZXhhbXBsZSBhIGJhcmUgYGlkYC1vbmx5IEFVVE9fSU5DUkVNRU5UIHRhYmxlKVxuICogcG9pbnQgYHRhYmxlTmFtZWAgYXQgaXQgYW5kIHBhc3MgYGluc2VydERhdGE6IHt9YCB0byBpbnNlcnQgZW1wdHkgcm93cy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2VydmVyU2VxdWVuY2VBbGxvY2F0b3Ige1xuICAvKipcbiAgICogQ3JlYXRlcyBhIHNlcnZlciBzZXF1ZW5jZSBhbGxvY2F0b3IuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbYXJnc10gLSBPcHRpb25zLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdH0gW2FyZ3MuY29uZmlndXJhdGlvbl0gLSBDb25maWd1cmF0aW9uIG93bmluZyB0aGUgZGF0YWJhc2UuIERlZmF1bHRzIHRvIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24sIHJlc29sdmVkIGxhemlseSBwZXIgYWxsb2NhdGlvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFthcmdzLmRhdGFiYXNlSWRlbnRpZmllcl0gLSBEYXRhYmFzZSBpZGVudGlmaWVyLlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsID8+fSBbYXJncy5pbnNlcnREYXRhXSAtIFJvdyBwYXlsb2FkIGluc2VydGVkIHBlciBhbGxvY2F0aW9uLiBEZWZhdWx0cyB0byBge2NyZWF0ZWRfYXQ6IG5ldyBEYXRlKCl9YCBtYXRjaGluZyB0aGUgYXV0by1jcmVhdGVkIHRhYmxlOyBwYXNzIGB7fWAgZm9yIGJhcmUgaWQtb25seSB0YWJsZXMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy50YWJsZU5hbWVdIC0gU2VxdWVuY2UgdGFibGUgbmFtZS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHtjb25maWd1cmF0aW9uLCBkYXRhYmFzZUlkZW50aWZpZXIgPSBcImRlZmF1bHRcIiwgaW5zZXJ0RGF0YSwgdGFibGVOYW1lID0gXCJ2ZWxvY2lvdXNfc2VydmVyX3NlcXVlbmNlc1wifSA9IHt9KSB7XG4gICAgdGhpcy5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvblxuICAgIHRoaXMuZGF0YWJhc2VJZGVudGlmaWVyID0gZGF0YWJhc2VJZGVudGlmaWVyXG4gICAgdGhpcy5pbnNlcnREYXRhID0gaW5zZXJ0RGF0YVxuICAgIHRoaXMudGFibGVOYW1lID0gdGFibGVOYW1lXG4gICAgdGhpcy5fbWVtb3J5U2VxdWVuY2UgPSAwXG4gICAgdGhpcy5faXNSZWFkeSA9IGZhbHNlXG4gICAgLyoqIEB0eXBlIHtQcm9taXNlPHZvaWQ+IHwgbnVsbH0gKi9cbiAgICB0aGlzLl9yZWFkeVByb21pc2UgPSBudWxsXG4gIH1cblxuICAvKipcbiAgICogQWxsb2NhdGVzIHRoZSBuZXh0IG1vbm90b25pY2FsbHkgaW5jcmVhc2luZyBzZXF1ZW5jZS5cbiAgICpcbiAgICogQWxsb2NhdGlvbnMgc2VyaWFsaXplIHRocm91Z2ggYSBtb2R1bGUtbGV2ZWwgcXVldWUgcGVyIGRhdGFiYXNlK3RhYmxlIHNvXG4gICAqIHBhcmFsbGVsIGBuZXh0KClgIGNhbGxzIC0gaW5jbHVkaW5nIGNhbGxzIGZyb20gb3RoZXIgYWxsb2NhdG9yIGluc3RhbmNlc1xuICAgKiBzaGFyaW5nIHRoZSBzYW1lIHRhYmxlIGFuZCBjb25uZWN0aW9uIC0gY2Fubm90IGludGVybGVhdmUgdGhlaXIgaW5zZXJ0XG4gICAqIGFuZCBsYXN0LWluc2VydC1pZCByZWFkcyBhbmQgaGFuZCBvdXQgZHVwbGljYXRlIHNlcXVlbmNlcy5cbiAgICogQHJldHVybnMge1Byb21pc2U8bnVtYmVyPn0gTmV4dCBzZXF1ZW5jZSB2YWx1ZS5cbiAgICovXG4gIGFzeW5jIG5leHQoKSB7XG4gICAgY29uc3QgcXVldWVLZXkgPSBgJHt0aGlzLmRhdGFiYXNlSWRlbnRpZmllcn06OiR7dGhpcy50YWJsZU5hbWV9YFxuICAgIGNvbnN0IHByZXZpb3VzQWxsb2NhdGlvbiA9IGFsbG9jYXRpb25RdWV1ZXMuZ2V0KHF1ZXVlS2V5KSA/PyBQcm9taXNlLnJlc29sdmUoKVxuICAgIGNvbnN0IGFsbG9jYXRpb24gPSBwcmV2aW91c0FsbG9jYXRpb24udGhlbigoKSA9PiB0aGlzLl9hbGxvY2F0ZU5leHQoKSlcblxuICAgIGFsbG9jYXRpb25RdWV1ZXMuc2V0KHF1ZXVlS2V5LCBhbGxvY2F0aW9uLnRoZW4oKCkgPT4gdW5kZWZpbmVkLCAoKSA9PiB1bmRlZmluZWQpKVxuXG4gICAgcmV0dXJuIGF3YWl0IGFsbG9jYXRpb25cbiAgfVxuXG4gIC8qKlxuICAgKiBFbnN1cmVzIHRoZSBiYWNraW5nIHRhYmxlIGV4aXN0cy5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IFJlc29sdmVzIHdoZW4gcmVhZHkuXG4gICAqL1xuICBhc3luYyBlbnN1cmVSZWFkeSgpIHtcbiAgICBpZiAodGhpcy5faXNSZWFkeSkgcmV0dXJuXG5cbiAgICBpZiAodGhpcy5fdXNlc01lbW9yeVN0b3JhZ2UoKSkge1xuICAgICAgdGhpcy5faXNSZWFkeSA9IHRydWVcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICh0aGlzLl9yZWFkeVByb21pc2UpIHJldHVybiBhd2FpdCB0aGlzLl9yZWFkeVByb21pc2VcblxuICAgIHRoaXMuX3JlYWR5UHJvbWlzZSA9IHRoaXMuX3dpdGhEYihhc3luYyAoZGIpID0+IHtcbiAgICAgIGNvbnN0IGNyZWF0ZWQgPSBhd2FpdCB0aGlzLl9lbnN1cmVTZXF1ZW5jZXNUYWJsZShkYilcblxuICAgICAgLy8gRERMIGpvaW5zIGFueSB0cmFuc2FjdGlvbiBhbHJlYWR5IG9wZW4gb24gdGhpcyBjb25uZWN0aW9uICh0aGUgbWl4aW4nc1xuICAgICAgLy8gYmVmb3JlQ3JlYXRlIGFsbG9jYXRpb24gYWx3YXlzIHJ1bnMgaW5zaWRlIHRoZSByZWNvcmQgc2F2ZSB0cmFuc2FjdGlvbiksXG4gICAgICAvLyBhbmQgb24gdHJhbnNhY3Rpb25hbC1EREwgZGF0YWJhc2VzIChNU1NRTCwgUG9zdGdyZVNRTCwgU1FMaXRlKSBhIHJvbGxiYWNrXG4gICAgICAvLyBvZiB0aGF0IG91dGVyIHRyYW5zYWN0aW9uIHJlbW92ZXMgdGhlIGp1c3QtY3JlYXRlZCB0YWJsZSBhZ2Fpbi4gT25seVxuICAgICAgLy8gY2FjaGUgcmVhZGluZXNzIHdoZW4gdGhlIHRhYmxlIHdhcyBub3QgY3JlYXRlZCBpbnNpZGUgYW4gYWN0aXZlXG4gICAgICAvLyB0cmFuc2FjdGlvbjsgb3RoZXJ3aXNlIHRoZSBuZXh0IGFsbG9jYXRpb24gcmUtdmVyaWZpZXMgdGhlIHRhYmxlLlxuICAgICAgaWYgKCFjcmVhdGVkIHx8ICFkYi5pbnNpZGVUcmFuc2FjdGlvbigpKSB0aGlzLl9pc1JlYWR5ID0gdHJ1ZVxuICAgIH0pXG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5fcmVhZHlQcm9taXNlXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmICghdGhpcy5faXNSZWFkeSkgdGhpcy5fcmVhZHlQcm9taXNlID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvY2F0ZXMgb25lIHNlcXVlbmNlIHZhbHVlIGFmdGVyIHF1ZXVlaW5nLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxudW1iZXI+fSBBbGxvY2F0ZWQgc2VxdWVuY2UgdmFsdWUuXG4gICAqL1xuICBhc3luYyBfYWxsb2NhdGVOZXh0KCkge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlUmVhZHkoKVxuXG4gICAgaWYgKHRoaXMuX3VzZXNNZW1vcnlTdG9yYWdlKCkpIHtcbiAgICAgIHJldHVybiArK3RoaXMuX21lbW9yeVNlcXVlbmNlXG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuX3dpdGhEYihhc3luYyAoZGIpID0+IHtcbiAgICAgIC8vIFRoZSBhbGxvY2F0ZWQgaWQgbXVzdCBiZSByZXR1cm5lZCBieSB0aGUgaW5zZXJ0IHN0YXRlbWVudCBpdHNlbGYgKE9VVFBVVFxuICAgICAgLy8gSU5TRVJURUQvUkVUVVJOSU5HKSwgbGlrZSB0aGUgcmVjb3JkIGNyZWF0ZSBwYXRoIGRvZXM6IE1TU1FMJ3NcbiAgICAgIC8vIFNDT1BFX0lERU5USVRZKCkgb25seSBzZWVzIGluc2VydHMgZnJvbSB0aGUgc2FtZSBiYXRjaC9zY29wZSwgc28gcmVhZGluZ1xuICAgICAgLy8gdGhlIGxhc3QtaW5zZXJ0IGlkIGFzIGEgc2VwYXJhdGUgcXVlcnkgYWx3YXlzIHJldHVybnMgTlVMTCB0aGVyZS4gRHJpdmVyc1xuICAgICAgLy8gd2l0aG91dCBpbnNlcnQtcmV0dXJuaW5nIHN1cHBvcnQgKG9sZGVyIFNRTGl0ZSkga2VlcCB0aGUgcmVsaWFibGVcbiAgICAgIC8vIGNvbm5lY3Rpb24tc2NvcGVkIGxhc3QtaW5zZXJ0LWlkIGZhbGxiYWNrLlxuICAgICAgY29uc3QgaW5zZXJ0U3FsID0gZGIuaW5zZXJ0U3FsKHtcbiAgICAgICAgZGF0YTogdGhpcy5faW5zZXJ0UGF5bG9hZCgpLFxuICAgICAgICByZXR1cm5MYXN0SW5zZXJ0ZWRDb2x1bW5OYW1lczogW1wiaWRcIl0sXG4gICAgICAgIHRhYmxlTmFtZTogdGhpcy50YWJsZU5hbWVcbiAgICAgIH0pXG4gICAgICBjb25zdCBpbnNlcnRSZXN1bHQgPSBhd2FpdCBkYi5xdWVyeShpbnNlcnRTcWwpXG4gICAgICBjb25zdCBpbnNlcnRlZElkID0gQXJyYXkuaXNBcnJheShpbnNlcnRSZXN1bHQpID8gaW5zZXJ0UmVzdWx0WzBdPy5pZCA6IHVuZGVmaW5lZFxuXG4gICAgICBpZiAoaW5zZXJ0ZWRJZCAhPT0gdW5kZWZpbmVkICYmIGluc2VydGVkSWQgIT09IG51bGwpIHJldHVybiBOdW1iZXIoaW5zZXJ0ZWRJZClcblxuICAgICAgcmV0dXJuIE51bWJlcihhd2FpdCBkYi5sYXN0SW5zZXJ0SUQoKSlcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyB0aGUgcm93IHBheWxvYWQgaW5zZXJ0ZWQgcGVyIGFsbG9jYXRpb24uXG4gICAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCA/Pn0gSW5zZXJ0IHBheWxvYWQuXG4gICAqL1xuICBfaW5zZXJ0UGF5bG9hZCgpIHtcbiAgICByZXR1cm4gdGhpcy5pbnNlcnREYXRhID8/IHtjcmVhdGVkX2F0OiBuZXcgRGF0ZSgpfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIHRoZSBjb25maWd1cmF0aW9uIG93bmluZyB0aGUgc2VxdWVuY2UgdGFibGUuXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9IFJlc29sdmVkIGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBfZ2V0Q29uZmlndXJhdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWd1cmF0aW9uID8/IENvbmZpZ3VyYXRpb24uY3VycmVudCgpXG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGUgYWxsb2NhdG9yIHJ1bnMgd2l0aG91dCBhIGNvbmZpZ3VyZWQgZGF0YWJhc2UuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIG1lbW9yeSBzdG9yYWdlIGlzIHVzZWQuXG4gICAqL1xuICBfdXNlc01lbW9yeVN0b3JhZ2UoKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAhdGhpcy5fZ2V0Q29uZmlndXJhdGlvbigpLmdldERhdGFiYXNlQ29uZmlndXJhdGlvbigpW3RoaXMuZGF0YWJhc2VJZGVudGlmaWVyXVxuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUnVucyBhIGNhbGxiYWNrIHdpdGggYSBkYXRhYmFzZSBjb25uZWN0aW9uLlxuICAgKiBAdGVtcGxhdGUgUmVzdWx0XG4gICAqIEBwYXJhbSB7KGRiOiBpbXBvcnQoXCIuLi9kYXRhYmFzZS9kcml2ZXJzL2Jhc2UuanNcIikuZGVmYXVsdCkgPT4gUHJvbWlzZTxSZXN1bHQ+fSBjYWxsYmFjayAtIERhdGFiYXNlIGNhbGxiYWNrLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxSZXN1bHQ+fSBDYWxsYmFjayByZXN1bHQuXG4gICAqL1xuICBhc3luYyBfd2l0aERiKGNhbGxiYWNrKSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuX2dldENvbmZpZ3VyYXRpb24oKS5lbnN1cmVDb25uZWN0aW9ucyh7ZGF0YWJhc2VJZGVudGlmaWVyczogW3RoaXMuZGF0YWJhc2VJZGVudGlmaWVyXSwgbmFtZTogXCJTZXJ2ZXIgc2VxdWVuY2UgYWxsb2NhdG9yXCJ9LCBhc3luYyAoZGJzKSA9PiB7XG4gICAgICBjb25zdCBkYiA9IGRic1t0aGlzLmRhdGFiYXNlSWRlbnRpZmllcl1cblxuICAgICAgaWYgKCFkYikgdGhyb3cgbmV3IEVycm9yKGBObyBkYXRhYmFzZSBjb25uZWN0aW9uIGF2YWlsYWJsZSBmb3IgaWRlbnRpZmllcjogJHt0aGlzLmRhdGFiYXNlSWRlbnRpZmllcn1gKVxuXG4gICAgICByZXR1cm4gYXdhaXQgY2FsbGJhY2soZGIpXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBFbnN1cmVzIHRoZSBzZXF1ZW5jZXMgdGFibGUgZXhpc3RzLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2RhdGFiYXNlL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0fSBkYiAtIERhdGFiYXNlIGNvbm5lY3Rpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fSBXaGV0aGVyIHRoZSB0YWJsZSBoYWQgdG8gYmUgY3JlYXRlZC5cbiAgICovXG4gIGFzeW5jIF9lbnN1cmVTZXF1ZW5jZXNUYWJsZShkYikge1xuICAgIGlmIChhd2FpdCBkYi50YWJsZUV4aXN0cyh0aGlzLnRhYmxlTmFtZSkpIHJldHVybiBmYWxzZVxuXG4gICAgY29uc3QgdGFibGUgPSBuZXcgVGFibGVEYXRhKHRoaXMudGFibGVOYW1lLCB7aWZOb3RFeGlzdHM6IHRydWV9KVxuXG4gICAgdGFibGUuYmlnaW50KFwiaWRcIiwge2F1dG9JbmNyZW1lbnQ6IHRydWUsIG51bGw6IGZhbHNlLCBwcmltYXJ5S2V5OiB0cnVlfSlcbiAgICB0YWJsZS5kYXRldGltZShcImNyZWF0ZWRfYXRcIiwge251bGw6IGZhbHNlfSlcblxuICAgIGF3YWl0IGRiLmNyZWF0ZVRhYmxlKHRhYmxlKVxuXG4gICAgcmV0dXJuIHRydWVcbiAgfVxufVxuXG4vKipcbiAqIFdpcmVzIHNlcnZlciBzZXF1ZW5jaW5nIG9udG8gYSBzeW5jIG1vZGVsIGNsYXNzOiByZWdpc3RlcnMgYSBiZWZvcmVDcmVhdGVcbiAqIGxpZmVjeWNsZSBjYWxsYmFjayBhc3NpZ25pbmcgdGhlIG5leHQgc2VxdWVuY2Ugd2hlbiB0aGUgcmVjb3JkIGhhcyBub25lLCBhbmRcbiAqIGRlZmluZXMgYW4gYGFkdmFuY2U8Q29sdW1uPigpYCBpbnN0YW5jZSBtZXRob2QgKHdoZW4gdGhlIG1vZGVsIGRvZXMgbm90XG4gKiBhbHJlYWR5IGRlZmluZSBvbmUpIHRoYXQgcmUtc2VxdWVuY2VzIHRoZSByZWNvcmQgdGhyb3VnaCB0aGUgYWxsb2NhdG9yLlxuICpcbiAqIFRoZSBzZXF1ZW5jZSBpcyBhbHdheXMgd3JpdHRlbiB0aHJvdWdoIHRoZSBtb2RlbCdzIGdlbmVyYXRlZCB0eXBlZCBzZXR0ZXJcbiAqIChmb3IgZXhhbXBsZSBgc2V0U2VydmVyU2VxdWVuY2VgKSwgc28gdGhlIG1vZGVsIG11c3QgZXhwb3NlIHRoZSBnZW5lcmF0ZWRcbiAqIGBzZXQ8Q29sdW1uPmAvYGhhczxDb2x1bW4+YCBhY2Nlc3NvcnMgZm9yIHRoZSBjb2x1bW4uXG4gKiBAdGVtcGxhdGUge3R5cGVvZiBpbXBvcnQoXCIuLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdH0gVE1vZGVsQ2xhc3NcbiAqIEBwYXJhbSB7VE1vZGVsQ2xhc3N9IE1vZGVsQ2xhc3MgLSBTeW5jIG1vZGVsIGNsYXNzIHRvIHNlcXVlbmNlLlxuICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zLlxuICogQHBhcmFtIHtTZXJ2ZXJTZXF1ZW5jZUFsbG9jYXRvcn0gYXJncy5hbGxvY2F0b3IgLSBBbGxvY2F0b3IgcHJvdmlkaW5nIHNlcXVlbmNlIHZhbHVlcy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5jb2x1bW5dIC0gU2VxdWVuY2UgYXR0cmlidXRlIG5hbWUuXG4gKiBAcmV0dXJucyB7VE1vZGVsQ2xhc3N9IFRoZSBnaXZlbiBtb2RlbCBjbGFzcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhTZXJ2ZXJTZXF1ZW5jZShNb2RlbENsYXNzLCB7YWxsb2NhdG9yLCBjb2x1bW4gPSBcInNlcnZlclNlcXVlbmNlXCJ9KSB7XG4gIGlmICghKGFsbG9jYXRvciBpbnN0YW5jZW9mIFNlcnZlclNlcXVlbmNlQWxsb2NhdG9yKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgd2l0aFNlcnZlclNlcXVlbmNlIHJlcXVpcmVzIGEgU2VydmVyU2VxdWVuY2VBbGxvY2F0b3IsIGdvdDogJHtTdHJpbmcoYWxsb2NhdG9yKX1gKVxuICB9XG5cbiAgY29uc3QgdXBwZXJDb2x1bW4gPSBgJHtjb2x1bW4uY2hhckF0KDApLnRvVXBwZXJDYXNlKCl9JHtjb2x1bW4uc2xpY2UoMSl9YFxuICBjb25zdCBhZHZhbmNlTWV0aG9kTmFtZSA9IGBhZHZhbmNlJHt1cHBlckNvbHVtbn1gXG4gIGNvbnN0IGhhc01ldGhvZE5hbWUgPSBgaGFzJHt1cHBlckNvbHVtbn1gXG4gIGNvbnN0IHNldHRlck1ldGhvZE5hbWUgPSBgc2V0JHt1cHBlckNvbHVtbn1gXG5cbiAgLy8gTmFycm93cyB0aGUgcHJvdG90eXBlIHRvIGR5bmFtaWMgbWV0aG9kIGFjY2VzcyBmb3IgdGhlIGNvbmZpZ3VyZWQgY29sdW1uIG5hbWUuXG4gIGNvbnN0IHByb3RvdHlwZSA9IC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgPz59ICovIChNb2RlbENsYXNzLnByb3RvdHlwZSlcblxuICBpZiAodHlwZW9mIHByb3RvdHlwZVtzZXR0ZXJNZXRob2ROYW1lXSAhPSBcImZ1bmN0aW9uXCIgfHwgdHlwZW9mIHByb3RvdHlwZVtoYXNNZXRob2ROYW1lXSAhPSBcImZ1bmN0aW9uXCIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHdpdGhTZXJ2ZXJTZXF1ZW5jZSByZXF1aXJlcyBnZW5lcmF0ZWQgJHtzZXR0ZXJNZXRob2ROYW1lfSBhbmQgJHtoYXNNZXRob2ROYW1lfSBhY2Nlc3NvcnMgb24gJHtNb2RlbENsYXNzLm5hbWV9YClcbiAgfVxuXG4gIGlmICh0eXBlb2YgcHJvdG90eXBlW2FkdmFuY2VNZXRob2ROYW1lXSAhPSBcImZ1bmN0aW9uXCIpIHtcbiAgICAvKipcbiAgICAgKiBBc3NpZ25zIHRoZSBuZXh0IHNlcnZlci1zaWRlIHNlcXVlbmNlLlxuICAgICAqIEB0aGlzIHtSZWNvcmQ8c3RyaW5nLCA/Pn1cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICAgKi9cbiAgICBwcm90b3R5cGVbYWR2YW5jZU1ldGhvZE5hbWVdID0gYXN5bmMgZnVuY3Rpb24gYWR2YW5jZVNlcnZlclNlcXVlbmNlVGhyb3VnaEFsbG9jYXRvcigpIHtcbiAgICAgIHRoaXNbc2V0dGVyTWV0aG9kTmFtZV0oYXdhaXQgYWxsb2NhdG9yLm5leHQoKSlcbiAgICB9XG4gIH1cblxuICBNb2RlbENsYXNzLmJlZm9yZUNyZWF0ZShhc3luYyAocmVjb3JkKSA9PiB7XG4gICAgLy8gTmFycm93cyB0aGUgcmVjb3JkIHRvIGR5bmFtaWMgbWV0aG9kIGFjY2VzcyBmb3IgdGhlIGNvbmZpZ3VyZWQgY29sdW1uIG5hbWUuXG4gICAgY29uc3QgZHluYW1pY1JlY29yZCA9IC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgPz59ICovICgvKiogQHR5cGUgez99ICovIChyZWNvcmQpKVxuXG4gICAgaWYgKGR5bmFtaWNSZWNvcmRbaGFzTWV0aG9kTmFtZV0oKSkgcmV0dXJuXG5cbiAgICBhd2FpdCBkeW5hbWljUmVjb3JkW2FkdmFuY2VNZXRob2ROYW1lXSgpXG4gIH0pXG5cbiAgcmV0dXJuIE1vZGVsQ2xhc3Ncbn1cbiJdfQ==