@dbx-tools/search 0.6.118 → 0.6.120

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.
@@ -66,7 +66,7 @@ export interface LakebaseSearchPool {
66
66
  connect(): Promise<PoolClient>;
67
67
  }
68
68
  type LakebasePoolSource = (() => Promise<PoolConfig> | PoolConfig) | LakebaseSearchPool | {
69
- managedPool: () => LakebaseSearchPool;
69
+ managedPool: () => LakebaseSearchPool | null | undefined;
70
70
  };
71
71
  /** Options for provisioning a Lakebase-backed index. */
72
72
  export interface LakebaseProvisionOptions {
@@ -88,8 +88,15 @@ export class LakebaseSearchBackend {
88
88
  if (this.pool)
89
89
  return this.pool;
90
90
  if ("managedPool" in this.poolSource) {
91
- this.pool = this.poolSource.managedPool();
92
- return this.pool;
91
+ for (let attempt = 0; attempt < 200; attempt += 1) {
92
+ this.pool = this.poolSource.managedPool() ?? undefined;
93
+ if (this.pool)
94
+ return this.pool;
95
+ await new Promise((resolve) => setTimeout(resolve, 50));
96
+ }
97
+ throw new ExecutionError("search (lakebase): managed pool did not initialize", {
98
+ context: { operation: "connect" },
99
+ });
93
100
  }
94
101
  if (typeof this.poolSource !== "function") {
95
102
  this.pool = this.poolSource;
@@ -325,4 +332,4 @@ export class LakebaseSearchBackend {
325
332
  }
326
333
  }
327
334
  }
328
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFrZWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGFrZWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUJHO0FBRUgsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBUTdELE9BQU8sRUFBRSxJQUFJLEVBQW9DLE1BQU0sSUFBSSxDQUFDO0FBRTVELE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUU3Qyx1RkFBdUY7QUFDdkYsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUM7QUFFckY7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFDSCxNQUFNLFVBQVUsYUFBYSxDQUFDLEtBQWE7SUFDekMsT0FBTztRQUNMLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsRUFBRSxLQUFLLENBQUM7S0FDNUYsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLFNBQVMsQ0FBQyxLQUF3QixFQUFFLFdBQXNCLEdBQUc7SUFDM0UsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztBQUNoRSxDQUFDO0FBb0NEOzs7R0FHRztBQUNILE1BQU0sT0FBTyxxQkFBcUI7SUFPYjtJQUNBO0lBRUE7SUFU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dGdyZXMpIGZ1bGwtdGV4dCBydW50aW1lIGJlaGluZCBgbGFrZWJhc2VBaVNlYXJjaGAuIEl0IHByb3Zpc2lvbnNcbiAqIGEgc2luZ2xlIHRhYmxlIHBlciBpbmRleCBhbGlhcywgaW5kZXhlcyBhIGdlbmVyYXRlZFxuICogYHRzdmVjdG9yYCwgYW5kIGFuc3dlcnMgcXVlcmllcyB3aXRoIGEgcHJlZml4IGB0b190c3F1ZXJ5YCArIGB0c19yYW5rYC5cbiAqXG4gKiBRdWVyaWVzIGFyZSBjb21waWxlZCByYXRoZXIgdGhhbiBwYXNzZWQgdGhyb3VnaCBgd2Vic2VhcmNoX3RvX3RzcXVlcnlgLFxuICogYmVjYXVzZSBhIHNlYXJjaCBib3ggbmVlZHMgdHdvIHRoaW5ncyB0aGF0IGZ1bmN0aW9uIGRvZXMgbm90IGdpdmU6XG4gKiBwdW5jdHVhdGlvbi1pbnNlbnNpdGl2aXR5IChzbyBgc3RvcmUtaW50ZWxsaWdlbmNlYCBtYXRjaGVzIHRoZSBzYW1lIHJvd3MgYXNcbiAqIGBzdG9yZSBpbnRlbGxpZ2VuY2VgKSBhbmQgcHJlZml4IG1hdGNoaW5nIChzbyBgaW50ZWxgIHJlYWNoZXNcbiAqIGBpbnRlbGxpZ2VuY2VgKS4gU2VlIHtAbGluayB0b1NlYXJjaFRlcm1zfSAvIHtAbGluayB0b1RzUXVlcnl9LlxuICpcbiAqIFRoZSB3aG9sZSBwb2ludCBpcyBwYXJpdHk6IHRoaXMgYmFja2VuZCByZXR1cm5zIHRoZSBFWEFDVCBzYW1lXG4gKiBgQGRieC10b29scy9zaGFyZWQtc2VhcmNoYCBzaGFwZXMgKGBTZWFyY2hSZXN1bHRgIC8gYFNlYXJjaEhpdGAgL1xuICogYFVwc2VydFJlc3VsdGApIGFzIHRoZSBWZWN0b3IgU2VhcmNoIGJhY2tlbmQsIHNvIHRoZSBjbGllbnQsIHRoZSBNYXN0cmFcbiAqIHRvb2xzLCB0aGUgcm91dGVzLCBhbmQgdGhlIFJlYWN0IHNlYXJjaCBib3ggY2Fubm90IHRlbGwgd2hpY2ggb25lIGFuc3dlcmVkLlxuICogQSBoaXQncyBgaWRgIGlzIHRoZSBwcmltYXJ5IGtleSwgaXRzIGBzY29yZWAgaXMgdGhlIHRleHQtcmFuaywgYW5kIGBmaWVsZHNgXG4gKiBpcyB0aGUgc3RvcmVkIGRvY3VtZW50IG1pbnVzIHRoZSBpbnRlcm5hbCBjb2x1bW5zLlxuICpcbiAqIFN0YW5kYWxvbmUgY2FsbGVycyBjYW4gc3VwcGx5IGEgYFBvb2xDb25maWdgIGZhY3RvcnkgYW5kIGxldCB0aGlzIGJhY2tlbmQgb3duXG4gKiB0aGUgcmVzdWx0aW5nIHBvb2wuIEFwcEtpdCBpbnRlZ3JhdGlvbnMgaW5zdGVhZCBzdXBwbHkgdGhlIExha2ViYXNlIHBsdWdpbidzXG4gKiBtYW5hZ2VkIHBvb2wgZGlyZWN0bHksIHByZXNlcnZpbmcgaXRzIHJvdXRpbmcgYW5kIGNyZWRlbnRpYWwgcmVmcmVzaC5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgRXhlY3V0aW9uRXJyb3IgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG5pbXBvcnQgeyBsb2csIG9iamVjdCwgc3RyaW5nIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB0eXBlIHtcbiAgU2VhcmNoRG9jdW1lbnQsXG4gIFNlYXJjaEhpdCxcbiAgU2VhcmNoUmVxdWVzdCxcbiAgU2VhcmNoUmVzdWx0LFxuICBVcHNlcnRSZXN1bHQsXG59IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1zZWFyY2hcIjtcbmltcG9ydCB7IFBvb2wsIHR5cGUgUG9vbENsaWVudCwgdHlwZSBQb29sQ29uZmlnIH0gZnJvbSBcInBnXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJzZWFyY2gvbGFrZWJhc2VcIik7XG5cbi8qKiBUaGUgaW50ZXJuYWwgY29sdW1ucyBldmVyeSBzZWFyY2ggdGFibGUgY2FycmllcywgZXhjbHVkZWQgZnJvbSBhIGhpdCdzIGBmaWVsZHNgLiAqL1xuY29uc3QgUkVTRVJWRURfQ09MVU1OUyA9IG5ldyBTZXQoW1wiaWRcIiwgXCJzZWFyY2hfdGV4dFwiLCBcImRvY3VtZW50XCIsIFwic2VhcmNoX3ZlY3RvclwiXSk7XG5cbi8qKlxuICogU3BsaXQgYSBzZWFyY2gtYm94IHN0cmluZyBpbnRvIHRoZSB0ZXJtcyBhIHRzcXVlcnkgaXMgYnVpbHQgZnJvbSwgdXNpbmcgdGhlXG4gKiBzaGFyZWQgYEBkYngtdG9vbHMvc2hhcmVkLWNvcmVgIHRva2VuaXplciBzbyB0aGUgc3BsaXR0aW5nIHJ1bGVzIHN0YXlcbiAqIGNvbnNpc3RlbnQgd2l0aCB0aGUgcmVzdCBvZiB0aGUgdG9vbGtpdC5cbiAqXG4gKiBTcGxpdHRpbmcgb24gcHVuY3R1YXRpb24gaXMgd2hhdCBtYWtlcyBgc3RvcmUtaW50ZWxsaWdlbmNlYCBiZWhhdmUgbGlrZVxuICogYHN0b3JlIGludGVsbGlnZW5jZWAuIFBvc3RncmVzIGluZGV4ZXMgYSBoeXBoZW5hdGVkIHdvcmQgYXMgdGhlIGNvbXBvdW5kXG4gKiBsZXhlbWUgUExVUyBlYWNoIG9mIGl0cyBwYXJ0cywgYnV0IGNvbXBpbGVzIGEgaHlwaGVuYXRlZCBRVUVSWSB0byB0aGVcbiAqIGNvbXBvdW5kIGFsb25lIC0gc28gYHN0b3JlLWludGVsbGlnZW5jZWAgZGVtYW5kcyBhIGBzdG9yZS1pbnRlbGxpZ2AgbGV4ZW1lXG4gKiB0aGF0IGEgZG9jdW1lbnQgdGl0bGVkIGByYWNldHJhYy1zdG9yZS1pbnRlbGxpZ2VuY2VgIGRvZXMgbm90IGhhdmUsIGFuZCB0aGVcbiAqIHNlYXJjaCBzaWxlbnRseSByZXR1cm5zIG5vdGhpbmcgd2hpbGUgYHN0b3JlIGludGVsbGlnZW5jZWAgcmV0dXJuc1xuICogZXZlcnl0aGluZy4gU2FtZSBmb3IgYC5gIGFuZCBgX2AgaW4gYSB0YWJsZSByZWZlcmVuY2UuXG4gKlxuICogYGNhbWVsQ2FzZTogZmFsc2VgIGlzIGxvYWQtYmVhcmluZyByYXRoZXIgdGhhbiBhIGRlZmF1bHQ6IHRoZSBjYW1lbENhc2VcbiAqIHNwbGl0dGVyIGFsc28gYnJlYWtzIGRpZ2l0IHJ1bnMsIHR1cm5pbmcgYGdwdDRgIGludG8gYGdwdGAgKyBgNGAgYW5kIGBzM2BcbiAqIGludG8gYHNgICsgYDNgLiBQb3N0Z3JlcyBpbmRleGVzIGVhY2ggb2YgdGhvc2UgYXMgT05FIGxleGVtZSwgc28gbm8gbGV4ZW1lXG4gKiBldmVyIHN0YXJ0cyB3aXRoIHRoZSB0cmFpbGluZyBkaWdpdHMgYW5kIHRoZSBwcmVjaXNlIHBhc3MgY291bGQgbm90IG1hdGNoXG4gKiB0aGVtLiBLZWVwaW5nIHB1bmN0dWF0aW9uIGFzIHRoZSBvbmx5IGJvdW5kYXJ5IG1pcnJvcnMgaG93IHRoZSBpbmRleCB3YXNcbiAqIGJ1aWx0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9TZWFyY2hUZXJtcyhxdWVyeTogc3RyaW5nKTogc3RyaW5nW10ge1xuICByZXR1cm4gW1xuICAgIC4uLnN0cmluZy50b2tlbml6ZVdpdGhPcHRpb25zKHsgbG93ZXJDYXNlOiB0cnVlLCBjYW1lbENhc2U6IGZhbHNlLCBkaXN0aW5jdDogdHJ1ZSB9LCBxdWVyeSksXG4gIF07XG59XG5cbi8qKlxuICogQ29tcGlsZSB0ZXJtcyBpbnRvIGEgYHRvX3RzcXVlcnlgIGlucHV0IHdoZXJlIGV2ZXJ5IHRlcm0gaXMgYSBQUkVGSVgsIHNvIGFcbiAqIHBhcnRpYWxseSB0eXBlZCB3b3JkIHN0aWxsIG1hdGNoZXMgKGBpbnRlbDoqYCByZWFjaGVzIGBpbnRlbGxpZ2VuY2VgKS5cbiAqXG4gKiBUZXJtcyBjYXJyeSBvbmx5IGxldHRlcnMgYW5kIGRpZ2l0cyBieSBjb25zdHJ1Y3Rpb24sIHNvIG5vbmUgb2YgdHNxdWVyeSdzXG4gKiBvcGVyYXRvcnMgKGAmIHwgISAoICkgOiAqYCkgY2FuIHN1cnZpdmUgZnJvbSB1c2VyIGlucHV0IGludG8gdGhlIGNvbXBpbGVkXG4gKiBzdHJpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1RzUXVlcnkodGVybXM6IHJlYWRvbmx5IHN0cmluZ1tdLCBvcGVyYXRvcjogXCImXCIgfCBcInxcIiA9IFwiJlwiKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRlcm1zLm1hcCgodGVybSkgPT4gYCR7dGVybX06KmApLmpvaW4oYCAke29wZXJhdG9yfSBgKTtcbn1cblxuLyoqIE9wdGlvbnMgZm9yIGEgc2luZ2xlLWluZGV4IExha2ViYXNlIHNlYXJjaCAobWlycm9ycyB0aGUgY2xpZW50J3MgYFNlYXJjaE9wdGlvbnNgKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGFrZWJhc2VTZWFyY2hPcHRpb25zIHtcbiAgbGltaXQ/OiBudW1iZXI7XG4gIGZpbHRlcj86IFNlYXJjaFJlcXVlc3RbXCJmaWx0ZXJcIl07XG4gIHNjb3JlVGhyZXNob2xkPzogbnVtYmVyO1xuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbn1cblxuLyoqIE9uZSByYXcgc2VhcmNoIHJvdyBiZWZvcmUgaXQgaXMgc2hhcGVkIGludG8gYSB7QGxpbmsgU2VhcmNoSGl0fS4gKi9cbmludGVyZmFjZSBTZWFyY2hSb3cge1xuICBpZDogc3RyaW5nO1xuICBkb2N1bWVudDogdW5rbm93bjtcbiAgc2NvcmU6IG51bWJlcjtcbn1cblxuLyoqIFRoZSBtYW5hZ2VkLXBvb2wgc3VyZmFjZSBuZWVkZWQgYnkgdGhlIHNlYXJjaCBiYWNrZW5kLiAqL1xuZXhwb3J0IGludGVyZmFjZSBMYWtlYmFzZVNlYXJjaFBvb2wge1xuICBjb25uZWN0KCk6IFByb21pc2U8UG9vbENsaWVudD47XG59XG5cbnR5cGUgTGFrZWJhc2VQb29sU291cmNlID1cbiAgfCAoKCkgPT4gUHJvbWlzZTxQb29sQ29uZmlnPiB8IFBvb2xDb25maWcpXG4gIHwgTGFrZWJhc2VTZWFyY2hQb29sXG4gIHwgeyBtYW5hZ2VkUG9vbDogKCkgPT4gTGFrZWJhc2VTZWFyY2hQb29sIH07XG5cbi8qKiBPcHRpb25zIGZvciBwcm92aXNpb25pbmcgYSBMYWtlYmFzZS1iYWNrZWQgaW5kZXguICovXG5leHBvcnQgaW50ZXJmYWNlIExha2ViYXNlUHJvdmlzaW9uT3B0aW9ucyB7XG4gIC8qKiBUZXh0IGNvbHVtbiBlbWJlZGRlZCBpbnRvIHRoZSBzZWFyY2ggdmVjdG9yLiBEZWZhdWx0cyB0byBgdGV4dGAuICovXG4gIHRleHRDb2x1bW4/OiBzdHJpbmc7XG4gIC8qKiBEb2N1bWVudHMgdG8gc2VlZCB3aGVuIHRoZSB0YWJsZSBpcyBlbXB0eS4gKi9cbiAgc2VlZD86IFNlYXJjaERvY3VtZW50W107XG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xufVxuXG4vKipcbiAqIEEgUG9zdGdyZXMgZnVsbC10ZXh0IGJhY2tlbmQuIE9uZSBpbnN0YW5jZSBpcyBzaGFyZWQgYWNyb3NzIGluZGV4ZXM7IGVhY2hcbiAqIGluZGV4IG1hcHMgdG8gYSB0YWJsZSB3aG9zZSBuYW1lIGlzIGRlcml2ZWQgZnJvbSB0aGUgaW5kZXggcmVmZXJlbmNlLlxuICovXG5leHBvcnQgY2xhc3MgTGFrZWJhc2VTZWFyY2hCYWNrZW5kIHtcbiAgcHJpdmF0ZSBwb29sOiBMYWtlYmFzZVNlYXJjaFBvb2wgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgcG9vbFByb21pc2U6IFByb21pc2U8TGFrZWJhc2VTZWFyY2hQb29sPiB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBvd25zUG9vbCA9IGZhbHNlO1xuICBwcml2YXRlIHJlYWRvbmx5IHByb3Zpc2lvbmVkID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBwb29sU291cmNlOiBMYWtlYmFzZVBvb2xTb3VyY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBzY2hlbWEgPSBcInB1YmxpY1wiLFxuICAgIC8qKiBIb3cgYSBwb29sIGlzIGJ1aWx0IGZyb20gdGhlIHJlc29sdmVkIGNvbmZpZy4gT3ZlcnJpZGFibGUgZm9yIHRlc3RzLiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcG9vbEZhY3Rvcnk6IChjb25maWc6IFBvb2xDb25maWcpID0+IFBvb2wgPSAoY29uZmlnKSA9PiBuZXcgUG9vbChjb25maWcpLFxuICApIHt9XG5cbiAgLyoqIExhemlseSBidWlsZCAoYW5kIGNhY2hlKSB0aGUgcGcgcG9vbCBmcm9tIHRoZSByZXNvbHZlZCBMYWtlYmFzZSBjb25maWcuICovXG4gIHByaXZhdGUgYXN5bmMgZ2V0UG9vbCgpOiBQcm9taXNlPExha2ViYXNlU2VhcmNoUG9vbD4ge1xuICAgIGlmICh0aGlzLnBvb2wpIHJldHVybiB0aGlzLnBvb2w7XG4gICAgaWYgKFwibWFuYWdlZFBvb2xcIiBpbiB0aGlzLnBvb2xTb3VyY2UpIHtcbiAgICAgIHRoaXMucG9vbCA9IHRoaXMucG9vbFNvdXJjZS5tYW5hZ2VkUG9vbCgpO1xuICAgICAgcmV0dXJuIHRoaXMucG9vbDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB0aGlzLnBvb2xTb3VyY2UgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhpcy5wb29sID0gdGhpcy5wb29sU291cmNlO1xuICAgICAgcmV0dXJuIHRoaXMucG9vbDtcbiAgICB9XG4gICAgY29uc3QgcGdDb25maWdGYWN0b3J5ID0gdGhpcy5wb29sU291cmNlO1xuICAgIHRoaXMucG9vbFByb21pc2UgPz89IChhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBjb25maWcgPSBhd2FpdCBwZ0NvbmZpZ0ZhY3RvcnkoKTtcbiAgICAgIGNvbnN0IHBvb2wgPSB0aGlzLnBvb2xGYWN0b3J5KGNvbmZpZyk7XG4gICAgICB0aGlzLnBvb2wgPSBwb29sO1xuICAgICAgdGhpcy5vd25zUG9vbCA9IHRydWU7XG4gICAgICByZXR1cm4gcG9vbDtcbiAgICB9KSgpO1xuICAgIHJldHVybiB0aGlzLnBvb2xQcm9taXNlO1xuICB9XG5cbiAgLyoqIENsb3NlIHRoZSBwb29sIHNvIGEgcmVzdGFydGVkIGFwcCByZWJ1aWxkcyBpdC4gKi9cbiAgYXN5bmMgY2xvc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcG9vbCA9IHRoaXMucG9vbDtcbiAgICB0aGlzLnBvb2wgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5wb29sUHJvbWlzZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnByb3Zpc2lvbmVkLmNsZWFyKCk7XG4gICAgaWYgKHBvb2wgJiYgdGhpcy5vd25zUG9vbCkgYXdhaXQgKHBvb2wgYXMgUG9vbCkuZW5kKCk7XG4gICAgdGhpcy5vd25zUG9vbCA9IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlYXJjaCBhIExha2ViYXNlLWJhY2tlZCBpbmRleC4gUmV0dXJucyBoaXRzIHNvcnRlZCBtb3N0LXJlbGV2YW50LWZpcnN0LFxuICAgKiBzaGFwZWQgaWRlbnRpY2FsbHkgdG8gdGhlIFZlY3RvciBTZWFyY2ggYmFja2VuZC5cbiAgICovXG4gIGFzeW5jIHNlYXJjaChcbiAgICBpbmRleDogc3RyaW5nLFxuICAgIHF1ZXJ5OiBzdHJpbmcsXG4gICAgb3B0aW9uczogTGFrZWJhc2VTZWFyY2hPcHRpb25zID0ge30sXG4gICk6IFByb21pc2U8U2VhcmNoUmVzdWx0PiB7XG4gICAgY29uc3QgdGV4dCA9IHN0cmluZy50cmltVG9FbXB0eShxdWVyeSk7XG4gICAgY29uc3QgdGFibGUgPSB0aGlzLnRhYmxlRm9yKGluZGV4KTtcbiAgICBjb25zdCBsaW1pdCA9IG9wdGlvbnMubGltaXQgPz8gMTA7XG4gICAgY29uc3QgcG9vbCA9IGF3YWl0IHRoaXMuZ2V0UG9vbCgpO1xuICAgIGNvbnN0IHRlcm1zID0gdG9TZWFyY2hUZXJtcyh0ZXh0KTtcblxuICAgIC8vIEFuIGVtcHR5IChvciBwdW5jdHVhdGlvbi1vbmx5KSBib3ggcmV0dXJucyByb3dzIHJhdGhlciB0aGFuIG5vdGhpbmcsIHNvXG4gICAgLy8gdGhlIFVJIHNob3dzIGNvbnRlbnQgYmVmb3JlIHRoZSB1c2VyIHR5cGVzIC0gYXMgYSBrZXl3b3JkIGluZGV4IHdvdWxkLlxuICAgIGlmICh0ZXJtcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuZmlsdGVyQ2xhdXNlKG9wdGlvbnMuZmlsdGVyLCAxKTtcbiAgICAgIGNvbnN0IGxpbWl0UG9zaXRpb24gPSBmaWx0ZXIucGFyYW1zLmxlbmd0aCArIDE7XG4gICAgICBjb25zdCB7IHJvd3MgfSA9IGF3YWl0IHRoaXMucXVlcnk8U2VhcmNoUm93PihcbiAgICAgICAgcG9vbCxcbiAgICAgICAgYFNFTEVDVCBpZCwgZG9jdW1lbnQsIDA6OmZsb2F0NCBBUyBzY29yZVxuICAgICAgICAgICBGUk9NICR7dGFibGV9XG4gICAgICAgICAgV0hFUkUgVFJVRSR7ZmlsdGVyLnNxbH1cbiAgICAgICAgICBPUkRFUiBCWSBpZFxuICAgICAgICAgIExJTUlUICQke2xpbWl0UG9zaXRpb259YCxcbiAgICAgICAgWy4uLmZpbHRlci5wYXJhbXMsIGxpbWl0XSxcbiAgICAgICAgb3B0aW9ucy5zaWduYWwsXG4gICAgICApO1xuICAgICAgcmV0dXJuIHRoaXMudG9SZXN1bHQodGV4dCwgaW5kZXgsIHJvd3MsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIC8vIFByZWNpc2UgcGFzczogZXZlcnkgdGVybSBtdXN0IG1hdGNoLCBlYWNoIGFzIGEgcHJlZml4LlxuICAgIGNvbnN0IHN0cmljdEZpbHRlciA9IHRoaXMuZmlsdGVyQ2xhdXNlKG9wdGlvbnMuZmlsdGVyLCAyKTtcbiAgICBjb25zdCBzdHJpY3RMaW1pdFBvc2l0aW9uID0gc3RyaWN0RmlsdGVyLnBhcmFtcy5sZW5ndGggKyAyO1xuICAgIGNvbnN0IHN0cmljdCA9IGF3YWl0IHRoaXMucXVlcnk8U2VhcmNoUm93PihcbiAgICAgIHBvb2wsXG4gICAgICBgU0VMRUNUIGlkLCBkb2N1bWVudCwgdHNfcmFuayhzZWFyY2hfdmVjdG9yLCB0b190c3F1ZXJ5KCdlbmdsaXNoJywgJDEpKSBBUyBzY29yZVxuICAgICAgICAgRlJPTSAke3RhYmxlfVxuICAgICAgICBXSEVSRSBzZWFyY2hfdmVjdG9yIEBAIHRvX3RzcXVlcnkoJ2VuZ2xpc2gnLCAkMSlcbiAgICAgICAgICAke3N0cmljdEZpbHRlci5zcWx9XG4gICAgICAgIE9SREVSIEJZIHNjb3JlIERFU0NcbiAgICAgICAgTElNSVQgJCR7c3RyaWN0TGltaXRQb3NpdGlvbn1gLFxuICAgICAgW3RvVHNRdWVyeSh0ZXJtcyksIC4uLnN0cmljdEZpbHRlci5wYXJhbXMsIGxpbWl0XSxcbiAgICAgIG9wdGlvbnMuc2lnbmFsLFxuICAgICk7XG4gICAgaWYgKHN0cmljdC5yb3dzLmxlbmd0aCA+IDApIHJldHVybiB0aGlzLnRvUmVzdWx0KHRleHQsIGluZGV4LCBzdHJpY3Qucm93cywgb3B0aW9ucyk7XG5cbiAgICAvLyBOb3RoaW5nIG1hdGNoZWQgRVZFUlkgdGVybSwgc28gcmVsYXggcmF0aGVyIHRoYW4gcmV0dXJuIGFuIGVtcHR5IGJveDpcbiAgICAvLyBhbnkgb25lIHRlcm0gaXMgZW5vdWdoLCBhbmQgYW4gYElMSUtFYCBwYXNzIGFkZGl0aW9uYWxseSBjYXRjaGVzIGFcbiAgICAvLyBmcmFnbWVudCB0aGF0IGlzIG5vdCBhIHByZWZpeCAoYHRlbGxpZ2VuY2VgKSBvciBhIHRva2VuIHRoZSB0ZXh0LXNlYXJjaFxuICAgIC8vIHBhcnNlciBzcGxpdCBkaWZmZXJlbnRseSB0aGFuIGV4cGVjdGVkLiBTdWJzdHJpbmcgbWF0Y2hpbmcgY2Fubm90IHVzZVxuICAgIC8vIHRoZSBHSU4gaW5kZXgsIHdoaWNoIGlzIHdoeSBpdCBvbmx5IHJ1bnMgb25jZSB0aGUgaW5kZXhlZCBwYXNzIGZhaWxzLlxuICAgIGNvbnN0IHJlbGF4ZWRGaWx0ZXIgPSB0aGlzLmZpbHRlckNsYXVzZShvcHRpb25zLmZpbHRlciwgMyk7XG4gICAgY29uc3QgcmVsYXhlZExpbWl0UG9zaXRpb24gPSByZWxheGVkRmlsdGVyLnBhcmFtcy5sZW5ndGggKyAzO1xuICAgIGNvbnN0IHJlbGF4ZWQgPSBhd2FpdCB0aGlzLnF1ZXJ5PFNlYXJjaFJvdz4oXG4gICAgICBwb29sLFxuICAgICAgYFNFTEVDVCBpZCwgZG9jdW1lbnQsIHRzX3Jhbmsoc2VhcmNoX3ZlY3RvciwgdG9fdHNxdWVyeSgnZW5nbGlzaCcsICQxKSkgQVMgc2NvcmVcbiAgICAgICAgIEZST00gJHt0YWJsZX1cbiAgICAgICAgV0hFUkUgKHNlYXJjaF92ZWN0b3IgQEAgdG9fdHNxdWVyeSgnZW5nbGlzaCcsICQxKVxuICAgICAgICAgICBPUiBzZWFyY2hfdGV4dCBJTElLRSBBTlkoJDI6OnRleHRbXSkpXG4gICAgICAgICAgJHtyZWxheGVkRmlsdGVyLnNxbH1cbiAgICAgICAgT1JERVIgQlkgc2NvcmUgREVTQ1xuICAgICAgICBMSU1JVCAkJHtyZWxheGVkTGltaXRQb3NpdGlvbn1gLFxuICAgICAgW3RvVHNRdWVyeSh0ZXJtcywgXCJ8XCIpLCB0ZXJtcy5tYXAoKHRlcm0pID0+IGAlJHt0ZXJtfSVgKSwgLi4ucmVsYXhlZEZpbHRlci5wYXJhbXMsIGxpbWl0XSxcbiAgICAgIG9wdGlvbnMuc2lnbmFsLFxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMudG9SZXN1bHQodGV4dCwgaW5kZXgsIHJlbGF4ZWQucm93cywgb3B0aW9ucyk7XG4gIH1cblxuICAvKiogU2hhcGUgcmF3IHJvd3MgaW50byB0aGUgYFNlYXJjaFJlc3VsdGAgYm90aCBiYWNrZW5kcyByZXR1cm4uICovXG4gIHByaXZhdGUgdG9SZXN1bHQoXG4gICAgcXVlcnk6IHN0cmluZyxcbiAgICBpbmRleDogc3RyaW5nLFxuICAgIHJvd3M6IFNlYXJjaFJvd1tdLFxuICAgIG9wdGlvbnM6IExha2ViYXNlU2VhcmNoT3B0aW9ucyxcbiAgKTogU2VhcmNoUmVzdWx0IHtcbiAgICBjb25zdCBoaXRzOiBTZWFyY2hIaXRbXSA9IHJvd3NcbiAgICAgIC5tYXAoKHJvdykgPT4gKHtcbiAgICAgICAgaWQ6IFN0cmluZyhyb3cuaWQpLFxuICAgICAgICBzY29yZTogTnVtYmVyKHJvdy5zY29yZSkgfHwgMCxcbiAgICAgICAgZmllbGRzOiB0aGlzLnRvRmllbGRzKHJvdy5kb2N1bWVudCksXG4gICAgICB9KSlcbiAgICAgIC5maWx0ZXIoKGhpdCkgPT4gb3B0aW9ucy5zY29yZVRocmVzaG9sZCA9PT0gdW5kZWZpbmVkIHx8IGhpdC5zY29yZSA+PSBvcHRpb25zLnNjb3JlVGhyZXNob2xkKTtcbiAgICByZXR1cm4geyBxdWVyeSwgaW5kZXgsIGhpdHMsIGNvdW50OiBoaXRzLmxlbmd0aCB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEVuc3VyZSB0aGUgdGFibGUgKyBmdWxsLXRleHQgaW5kZXggZXhpc3QgYW5kIHNlZWQgZG9jdW1lbnRzIHdoZW4gZW1wdHkuXG4gICAqIElkZW1wb3RlbnQsIHNvIGl0IGlzIHNhZmUgdG8gY2FsbCBvbiBldmVyeSBib290LlxuICAgKi9cbiAgYXN5bmMgcHJvdmlzaW9uKGluZGV4OiBzdHJpbmcsIG9wdGlvbnM6IExha2ViYXNlUHJvdmlzaW9uT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCB0YWJsZSA9IHRoaXMudGFibGVGb3IoaW5kZXgpO1xuICAgIGNvbnN0IHBvb2wgPSBhd2FpdCB0aGlzLmdldFBvb2woKTtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZVRhYmxlKHBvb2wsIHRhYmxlLCBvcHRpb25zLnNpZ25hbCk7XG5cbiAgICBjb25zdCB7IHJvd3MgfSA9IGF3YWl0IHRoaXMucXVlcnk8eyBjb3VudDogc3RyaW5nIH0+KFxuICAgICAgcG9vbCxcbiAgICAgIGBTRUxFQ1QgY291bnQoKik6OnRleHQgQVMgY291bnQgRlJPTSAke3RhYmxlfWAsXG4gICAgICBbXSxcbiAgICAgIG9wdGlvbnMuc2lnbmFsLFxuICAgICk7XG4gICAgY29uc3QgZXhpc3RpbmcgPSBOdW1iZXIocm93c1swXT8uY291bnQgPz8gXCIwXCIpO1xuICAgIGNvbnN0IHNlZWQgPSBvcHRpb25zLnNlZWQgPz8gW107XG4gICAgaWYgKGV4aXN0aW5nID09PSAwICYmIHNlZWQubGVuZ3RoID4gMCkge1xuICAgICAgYXdhaXQgdGhpcy51cHNlcnQocG9vbCwgdGFibGUsIHNlZWQsIG9wdGlvbnMudGV4dENvbHVtbiA/PyBcInRleHRcIiwgb3B0aW9ucy5zaWduYWwpO1xuICAgICAgbG9nZ2VyLmluZm8oXCJpbmRleC1zZWVkZWRcIiwgeyBpbmRleCwgdGFibGUsIGNvdW50OiBzZWVkLmxlbmd0aCB9KTtcbiAgICAgIHJldHVybiBzZWVkLmxlbmd0aDtcbiAgICB9XG4gICAgcmV0dXJuIGV4aXN0aW5nO1xuICB9XG5cbiAgLyoqIEFkZCBvciB1cGRhdGUgZG9jdW1lbnRzIGJ5IHByaW1hcnkga2V5LiAqL1xuICBhc3luYyBhZGREb2N1bWVudHMoXG4gICAgaW5kZXg6IHN0cmluZyxcbiAgICBkb2N1bWVudHM6IFNlYXJjaERvY3VtZW50W10sXG4gICAgdGV4dENvbHVtbiA9IFwidGV4dFwiLFxuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuICApOiBQcm9taXNlPFVwc2VydFJlc3VsdD4ge1xuICAgIGNvbnN0IHRhYmxlID0gdGhpcy50YWJsZUZvcihpbmRleCk7XG4gICAgY29uc3QgcG9vbCA9IGF3YWl0IHRoaXMuZ2V0UG9vbCgpO1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlVGFibGUocG9vbCwgdGFibGUsIHNpZ25hbCk7XG4gICAgYXdhaXQgdGhpcy51cHNlcnQocG9vbCwgdGFibGUsIGRvY3VtZW50cywgdGV4dENvbHVtbiwgc2lnbmFsKTtcbiAgICByZXR1cm4geyBpbmRleCwgY291bnQ6IGRvY3VtZW50cy5sZW5ndGggfTtcbiAgfVxuXG4gIC8qKiBEZWxldGUgZG9jdW1lbnRzIGJ5IHByaW1hcnkga2V5LiAqL1xuICBhc3luYyBkZWxldGVEb2N1bWVudHMoXG4gICAgaW5kZXg6IHN0cmluZyxcbiAgICBpZHM6IEFycmF5PHN0cmluZyB8IG51bWJlcj4sXG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4gICk6IFByb21pc2U8VXBzZXJ0UmVzdWx0PiB7XG4gICAgY29uc3QgdGFibGUgPSB0aGlzLnRhYmxlRm9yKGluZGV4KTtcbiAgICBjb25zdCBwb29sID0gYXdhaXQgdGhpcy5nZXRQb29sKCk7XG4gICAgYXdhaXQgdGhpcy5xdWVyeShwb29sLCBgREVMRVRFIEZST00gJHt0YWJsZX0gV0hFUkUgaWQgPSBBTlkoJDEpYCwgW2lkcy5tYXAoU3RyaW5nKV0sIHNpZ25hbCk7XG4gICAgcmV0dXJuIHsgaW5kZXgsIGNvdW50OiBpZHMubGVuZ3RoIH07XG4gIH1cblxuICAvKiogQ3JlYXRlIHRoZSB0YWJsZSArIEdJTiBpbmRleCBvbmNlIHBlciB0YWJsZSAobWVtb2l6ZWQgYWNyb3NzIGNhbGxzKS4gKi9cbiAgcHJpdmF0ZSBhc3luYyBlbnN1cmVUYWJsZShcbiAgICBwb29sOiBMYWtlYmFzZVNlYXJjaFBvb2wsXG4gICAgdGFibGU6IHN0cmluZyxcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbCxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMucHJvdmlzaW9uZWQuaGFzKHRhYmxlKSkgcmV0dXJuO1xuICAgIC8vIGBkb2N1bWVudGAgaG9sZHMgdGhlIHdob2xlIHJvdzsgYHNlYXJjaF90ZXh0YCBpcyB0aGUgaW5kZXhlZCB0ZXh0OyB0aGVcbiAgICAvLyBnZW5lcmF0ZWQgYHNlYXJjaF92ZWN0b3JgIGtlZXBzIHRoZSB0c3ZlY3RvciBpbiBsb2Nrc3RlcCB3aXRoIGl0IHNvIGFcbiAgICAvLyB3cml0ZSBuZXZlciBoYXMgdG8gY29tcHV0ZSB0aGUgdmVjdG9yIGJ5IGhhbmQuXG4gICAgYXdhaXQgdGhpcy5xdWVyeShwb29sLCBgQ1JFQVRFIFNDSEVNQSBJRiBOT1QgRVhJU1RTICR7dGhpcy5pZGVudCh0aGlzLnNjaGVtYSl9YCwgW10sIHNpZ25hbCk7XG4gICAgYXdhaXQgdGhpcy5xdWVyeShcbiAgICAgIHBvb2wsXG4gICAgICBgQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgJHt0YWJsZX0gKFxuICAgICAgICAgaWQgdGV4dCBQUklNQVJZIEtFWSxcbiAgICAgICAgIHNlYXJjaF90ZXh0IHRleHQgTk9UIE5VTEwgREVGQVVMVCAnJyxcbiAgICAgICAgIGRvY3VtZW50IGpzb25iIE5PVCBOVUxMIERFRkFVTFQgJ3t9Jzo6anNvbmIsXG4gICAgICAgICBzZWFyY2hfdmVjdG9yIHRzdmVjdG9yIEdFTkVSQVRFRCBBTFdBWVMgQVMgKHRvX3RzdmVjdG9yKCdlbmdsaXNoJywgc2VhcmNoX3RleHQpKSBTVE9SRURcbiAgICAgICApYCxcbiAgICAgIFtdLFxuICAgICAgc2lnbmFsLFxuICAgICk7XG4gICAgYXdhaXQgdGhpcy5xdWVyeShcbiAgICAgIHBvb2wsXG4gICAgICBgQUxURVIgVEFCTEUgJHt0YWJsZX1cbiAgICAgICAgIEFERCBDT0xVTU4gSUYgTk9UIEVYSVNUUyBzZWFyY2hfdmVjdG9yIHRzdmVjdG9yXG4gICAgICAgICBHRU5FUkFURUQgQUxXQVlTIEFTICh0b190c3ZlY3RvcignZW5nbGlzaCcsIHNlYXJjaF90ZXh0KSkgU1RPUkVEYCxcbiAgICAgIFtdLFxuICAgICAgc2lnbmFsLFxuICAgICk7XG4gICAgYXdhaXQgdGhpcy5xdWVyeShcbiAgICAgIHBvb2wsXG4gICAgICBgQ1JFQVRFIElOREVYIElGIE5PVCBFWElTVFMgJHt0aGlzLmlkZW50KGAke3RoaXMuYmFyZU5hbWUodGFibGUpfV9mdHNgKX1cbiAgICAgICAgIE9OICR7dGFibGV9IFVTSU5HIGdpbiAoc2VhcmNoX3ZlY3RvcilgLFxuICAgICAgW10sXG4gICAgICBzaWduYWwsXG4gICAgKTtcbiAgICB0aGlzLnByb3Zpc2lvbmVkLmFkZCh0YWJsZSk7XG4gICAgbG9nZ2VyLmluZm8oXCJpbmRleC1jcmVhdGVkXCIsIHsgdGFibGUgfSk7XG4gIH1cblxuICAvKiogVXBzZXJ0IHJvd3M6IHRoZSB3aG9sZSBkb2N1bWVudCBhcyBqc29uYiArIGEgZmxhdHRlbmVkIHRleHQgYmxvYiB0byBpbmRleC4gKi9cbiAgcHJpdmF0ZSBhc3luYyB1cHNlcnQoXG4gICAgcG9vbDogTGFrZWJhc2VTZWFyY2hQb29sLFxuICAgIHRhYmxlOiBzdHJpbmcsXG4gICAgZG9jdW1lbnRzOiBTZWFyY2hEb2N1bWVudFtdLFxuICAgIHRleHRDb2x1bW46IHN0cmluZyxcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbCxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgZm9yIChjb25zdCBkb2Mgb2YgZG9jdW1lbnRzKSB7XG4gICAgICBjb25zdCBpZCA9IHN0cmluZy50cmltVG9OdWxsKFN0cmluZyhkb2MuaWQgPz8gZG9jLklEID8/IFwiXCIpKSA/PyB1bmRlZmluZWQ7XG4gICAgICBpZiAoaWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXhlY3V0aW9uRXJyb3IoXCJzZWFyY2ggKGxha2ViYXNlKTogYSBkb2N1bWVudCBpcyBtaXNzaW5nIGFuIGBpZGBcIiwge1xuICAgICAgICAgIGNvbnRleHQ6IHsgb3BlcmF0aW9uOiBcImFkZERvY3VtZW50c1wiIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgY29uc3Qgc2VhcmNoVGV4dCA9IHRoaXMuc2VhcmNoVGV4dChkb2MsIHRleHRDb2x1bW4pO1xuICAgICAgYXdhaXQgdGhpcy5xdWVyeShcbiAgICAgICAgcG9vbCxcbiAgICAgICAgYElOU0VSVCBJTlRPICR7dGFibGV9IChpZCwgc2VhcmNoX3RleHQsIGRvY3VtZW50KVxuICAgICAgICAgICBWQUxVRVMgKCQxLCAkMiwgJDM6Ompzb25iKVxuICAgICAgICAgT04gQ09ORkxJQ1QgKGlkKSBETyBVUERBVEVcbiAgICAgICAgICAgU0VUIHNlYXJjaF90ZXh0ID0gRVhDTFVERUQuc2VhcmNoX3RleHQsIGRvY3VtZW50ID0gRVhDTFVERUQuZG9jdW1lbnRgLFxuICAgICAgICBbaWQsIHNlYXJjaFRleHQsIEpTT04uc3RyaW5naWZ5KGRvYyldLFxuICAgICAgICBzaWduYWwsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBUaGUgdGV4dCBhIHJvdyBpcyBpbmRleGVkIGJ5OiB0aGUgdGV4dCBjb2x1bW4gZmlyc3QsIHRoZW4gYW55IG90aGVyIHN0cmluZyBmaWVsZC4gKi9cbiAgcHJpdmF0ZSBzZWFyY2hUZXh0KGRvYzogU2VhcmNoRG9jdW1lbnQsIHRleHRDb2x1bW46IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgcHJpbWFyeSA9IHN0cmluZy50cmltVG9FbXB0eShTdHJpbmcoZG9jW3RleHRDb2x1bW5dID8/IFwiXCIpKTtcbiAgICBjb25zdCByZXN0ID0gT2JqZWN0LmVudHJpZXMoZG9jKVxuICAgICAgLmZpbHRlcigoW2tleSwgdmFsdWVdKSA9PiBrZXkgIT09IHRleHRDb2x1bW4gJiYga2V5ICE9PSBcImlkXCIgJiYgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKVxuICAgICAgLm1hcCgoWywgdmFsdWVdKSA9PiB2YWx1ZSBhcyBzdHJpbmcpO1xuICAgIHJldHVybiBbcHJpbWFyeSwgLi4ucmVzdF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCJcXG5cIik7XG4gIH1cblxuICAvKiogQSBoaXQncyBgZmllbGRzYDogdGhlIHN0b3JlZCBkb2N1bWVudCBtaW51cyB0aGUgcmVzZXJ2ZWQvaW50ZXJuYWwga2V5cy4gKi9cbiAgcHJpdmF0ZSB0b0ZpZWxkcyhkb2N1bWVudDogdW5rbm93bik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICBpZiAoIW9iamVjdC5pc1JlY29yZChkb2N1bWVudCkpIHJldHVybiB7fTtcbiAgICBjb25zdCBmaWVsZHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZG9jdW1lbnQpKSB7XG4gICAgICBpZiAoUkVTRVJWRURfQ09MVU1OUy5oYXMoa2V5KSkgY29udGludWU7XG4gICAgICBmaWVsZHNba2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gZmllbGRzO1xuICB9XG5cbiAgLyoqIENvbXBpbGUgQXBwS2l0IHNjYWxhci9hcnJheSBmaWx0ZXJzIGFnYWluc3QgdGhlIHN0b3JlZCBKU09OIGRvY3VtZW50LiAqL1xuICBwcml2YXRlIGZpbHRlckNsYXVzZShcbiAgICBmaWx0ZXI6IFNlYXJjaFJlcXVlc3RbXCJmaWx0ZXJcIl0sXG4gICAgc3RhcnRQb3NpdGlvbjogbnVtYmVyLFxuICApOiB7IHNxbDogc3RyaW5nOyBwYXJhbXM6IHVua25vd25bXSB9IHtcbiAgICBpZiAoIWZpbHRlciB8fCBPYmplY3Qua2V5cyhmaWx0ZXIpLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHsgc3FsOiBcIlwiLCBwYXJhbXM6IFtdIH07XG4gICAgY29uc3QgY2xhdXNlczogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBwYXJhbXM6IHVua25vd25bXSA9IFtdO1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGZpbHRlcikpIHtcbiAgICAgIGNvbnN0IGtleVBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbiArIHBhcmFtcy5sZW5ndGg7XG4gICAgICBwYXJhbXMucHVzaChrZXkpO1xuICAgICAgY29uc3QgdmFsdWVQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb24gKyBwYXJhbXMubGVuZ3RoO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHBhcmFtcy5wdXNoKHZhbHVlLm1hcChTdHJpbmcpKTtcbiAgICAgICAgY2xhdXNlcy5wdXNoKGBkb2N1bWVudCAtPj4gJCR7a2V5UG9zaXRpb259ID0gQU5ZKCQke3ZhbHVlUG9zaXRpb259Ojp0ZXh0W10pYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJhbXMucHVzaChTdHJpbmcodmFsdWUpKTtcbiAgICAgICAgY2xhdXNlcy5wdXNoKGBkb2N1bWVudCAtPj4gJCR7a2V5UG9zaXRpb259ID0gJCR7dmFsdWVQb3NpdGlvbn1gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHsgc3FsOiBgIEFORCAke2NsYXVzZXMuam9pbihcIiBBTkQgXCIpfWAsIHBhcmFtcyB9O1xuICB9XG5cbiAgLyoqIFRoZSBmdWxseS1xdWFsaWZpZWQgdGFibGUgbmFtZSBmb3IgYW4gaW5kZXggcmVmZXJlbmNlLiAqL1xuICBwcml2YXRlIHRhYmxlRm9yKGluZGV4OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLmlkZW50KHRoaXMuc2NoZW1hKX0uJHt0aGlzLmlkZW50KHRoaXMuYmFyZU5hbWUoaW5kZXgpKX1gO1xuICB9XG5cbiAgLyoqIEEgc2FmZSBiYXJlIHRhYmxlIG5hbWUgZGVyaXZlZCBmcm9tIGFuIGluZGV4IHJlZmVyZW5jZS4gKi9cbiAgcHJpdmF0ZSBiYXJlTmFtZShyZWZlcmVuY2U6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgbGFzdCA9IHJlZmVyZW5jZS5zcGxpdChcIi5cIikuZmlsdGVyKEJvb2xlYW4pLnBvcCgpID8/IHJlZmVyZW5jZTtcbiAgICBjb25zdCBzbHVnID0gc3RyaW5nLnRvU2x1ZyhsYXN0KS5yZXBsYWNlKC8tL2csIFwiX1wiKTtcbiAgICByZXR1cm4gc2x1Zy5sZW5ndGggPiAwID8gc2x1ZyA6IFwiZG9jdW1lbnRzXCI7XG4gIH1cblxuICAvKiogUXVvdGUgYSBQb3N0Z3JlcyBpZGVudGlmaWVyLiAqL1xuICBwcml2YXRlIGlkZW50KG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBcIiR7bmFtZS5yZXBsYWNlKC9cIi9nLCAnXCJcIicpfVwiYDtcbiAgfVxuXG4gIC8qKiBSdW4gb25lIHF1ZXJ5IHVuZGVyIGV4dGVybmFsIGNhbmNlbGxhdGlvbi4gKi9cbiAgcHJpdmF0ZSBhc3luYyBxdWVyeTxUPihcbiAgICBwb29sOiBMYWtlYmFzZVNlYXJjaFBvb2wsXG4gICAgc3FsOiBzdHJpbmcsXG4gICAgcGFyYW1zOiB1bmtub3duW10sXG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4gICk6IFByb21pc2U8eyByb3dzOiBUW10gfT4ge1xuICAgIGlmIChzaWduYWw/LmFib3J0ZWQpIHRocm93IEV4ZWN1dGlvbkVycm9yLmNhbmNlbGVkKCk7XG4gICAgY29uc3QgY2xpZW50ID0gYXdhaXQgcG9vbC5jb25uZWN0KCk7XG4gICAgbGV0IHJlbGVhc2VkID0gZmFsc2U7XG4gICAgY29uc3Qgb25BYm9ydCA9ICgpID0+IHtcbiAgICAgIGlmIChyZWxlYXNlZCkgcmV0dXJuO1xuICAgICAgcmVsZWFzZWQgPSB0cnVlO1xuICAgICAgY2xpZW50LnJlbGVhc2UodHJ1ZSk7XG4gICAgfTtcbiAgICBzaWduYWw/LmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBvbkFib3J0LCB7IG9uY2U6IHRydWUgfSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNsaWVudC5xdWVyeShzcWwsIHBhcmFtcyk7XG4gICAgICByZXR1cm4geyByb3dzOiByZXN1bHQucm93cyBhcyBUW10gfTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2lnbmFsPy5yZW1vdmVFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgb25BYm9ydCk7XG4gICAgICBpZiAoIXJlbGVhc2VkKSBjbGllbnQucmVsZWFzZSgpO1xuICAgIH1cbiAgfVxufVxuIl19
335
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFrZWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGFrZWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUJHO0FBRUgsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBUTdELE9BQU8sRUFBRSxJQUFJLEVBQW9DLE1BQU0sSUFBSSxDQUFDO0FBRTVELE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUU3Qyx1RkFBdUY7QUFDdkYsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUM7QUFFckY7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFDSCxNQUFNLFVBQVUsYUFBYSxDQUFDLEtBQWE7SUFDekMsT0FBTztRQUNMLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsRUFBRSxLQUFLLENBQUM7S0FDNUYsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLFNBQVMsQ0FBQyxLQUF3QixFQUFFLFdBQXNCLEdBQUc7SUFDM0UsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztBQUNoRSxDQUFDO0FBb0NEOzs7R0FHRztBQUNILE1BQU0sT0FBTyxxQkFBcUI7SUFPYjtJQUNBO0lBRUE7SUFU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QztZQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDL0MsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsSUFBVyxFQUFFLENBQUM7UUFDdEMsQ0FBQztnQkFBUyxDQUFDO1lBQ1QsTUFBTSxFQUFFLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztZQUM5QyxJQUFJLENBQUMsUUFBUTtnQkFBRSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDbEMsQ0FBQztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTGFrZWJhc2UgKFBvc3RncmVzKSBmdWxsLXRleHQgcnVudGltZSBiZWhpbmQgYGxha2ViYXNlQWlTZWFyY2hgLiBJdCBwcm92aXNpb25zXG4gKiBhIHNpbmdsZSB0YWJsZSBwZXIgaW5kZXggYWxpYXMsIGluZGV4ZXMgYSBnZW5lcmF0ZWRcbiAqIGB0c3ZlY3RvcmAsIGFuZCBhbnN3ZXJzIHF1ZXJpZXMgd2l0aCBhIHByZWZpeCBgdG9fdHNxdWVyeWAgKyBgdHNfcmFua2AuXG4gKlxuICogUXVlcmllcyBhcmUgY29tcGlsZWQgcmF0aGVyIHRoYW4gcGFzc2VkIHRocm91Z2ggYHdlYnNlYXJjaF90b190c3F1ZXJ5YCxcbiAqIGJlY2F1c2UgYSBzZWFyY2ggYm94IG5lZWRzIHR3byB0aGluZ3MgdGhhdCBmdW5jdGlvbiBkb2VzIG5vdCBnaXZlOlxuICogcHVuY3R1YXRpb24taW5zZW5zaXRpdml0eSAoc28gYHN0b3JlLWludGVsbGlnZW5jZWAgbWF0Y2hlcyB0aGUgc2FtZSByb3dzIGFzXG4gKiBgc3RvcmUgaW50ZWxsaWdlbmNlYCkgYW5kIHByZWZpeCBtYXRjaGluZyAoc28gYGludGVsYCByZWFjaGVzXG4gKiBgaW50ZWxsaWdlbmNlYCkuIFNlZSB7QGxpbmsgdG9TZWFyY2hUZXJtc30gLyB7QGxpbmsgdG9Uc1F1ZXJ5fS5cbiAqXG4gKiBUaGUgd2hvbGUgcG9pbnQgaXMgcGFyaXR5OiB0aGlzIGJhY2tlbmQgcmV0dXJucyB0aGUgRVhBQ1Qgc2FtZVxuICogYEBkYngtdG9vbHMvc2hhcmVkLXNlYXJjaGAgc2hhcGVzIChgU2VhcmNoUmVzdWx0YCAvIGBTZWFyY2hIaXRgIC9cbiAqIGBVcHNlcnRSZXN1bHRgKSBhcyB0aGUgVmVjdG9yIFNlYXJjaCBiYWNrZW5kLCBzbyB0aGUgY2xpZW50LCB0aGUgTWFzdHJhXG4gKiB0b29scywgdGhlIHJvdXRlcywgYW5kIHRoZSBSZWFjdCBzZWFyY2ggYm94IGNhbm5vdCB0ZWxsIHdoaWNoIG9uZSBhbnN3ZXJlZC5cbiAqIEEgaGl0J3MgYGlkYCBpcyB0aGUgcHJpbWFyeSBrZXksIGl0cyBgc2NvcmVgIGlzIHRoZSB0ZXh0LXJhbmssIGFuZCBgZmllbGRzYFxuICogaXMgdGhlIHN0b3JlZCBkb2N1bWVudCBtaW51cyB0aGUgaW50ZXJuYWwgY29sdW1ucy5cbiAqXG4gKiBTdGFuZGFsb25lIGNhbGxlcnMgY2FuIHN1cHBseSBhIGBQb29sQ29uZmlnYCBmYWN0b3J5IGFuZCBsZXQgdGhpcyBiYWNrZW5kIG93blxuICogdGhlIHJlc3VsdGluZyBwb29sLiBBcHBLaXQgaW50ZWdyYXRpb25zIGluc3RlYWQgc3VwcGx5IHRoZSBMYWtlYmFzZSBwbHVnaW4nc1xuICogbWFuYWdlZCBwb29sIGRpcmVjdGx5LCBwcmVzZXJ2aW5nIGl0cyByb3V0aW5nIGFuZCBjcmVkZW50aWFsIHJlZnJlc2guXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IEV4ZWN1dGlvbkVycm9yIH0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuaW1wb3J0IHsgbG9nLCBvYmplY3QsIHN0cmluZyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgdHlwZSB7XG4gIFNlYXJjaERvY3VtZW50LFxuICBTZWFyY2hIaXQsXG4gIFNlYXJjaFJlcXVlc3QsXG4gIFNlYXJjaFJlc3VsdCxcbiAgVXBzZXJ0UmVzdWx0LFxufSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtc2VhcmNoXCI7XG5pbXBvcnQgeyBQb29sLCB0eXBlIFBvb2xDbGllbnQsIHR5cGUgUG9vbENvbmZpZyB9IGZyb20gXCJwZ1wiO1xuXG5jb25zdCBsb2dnZXIgPSBsb2cubG9nZ2VyKFwic2VhcmNoL2xha2ViYXNlXCIpO1xuXG4vKiogVGhlIGludGVybmFsIGNvbHVtbnMgZXZlcnkgc2VhcmNoIHRhYmxlIGNhcnJpZXMsIGV4Y2x1ZGVkIGZyb20gYSBoaXQncyBgZmllbGRzYC4gKi9cbmNvbnN0IFJFU0VSVkVEX0NPTFVNTlMgPSBuZXcgU2V0KFtcImlkXCIsIFwic2VhcmNoX3RleHRcIiwgXCJkb2N1bWVudFwiLCBcInNlYXJjaF92ZWN0b3JcIl0pO1xuXG4vKipcbiAqIFNwbGl0IGEgc2VhcmNoLWJveCBzdHJpbmcgaW50byB0aGUgdGVybXMgYSB0c3F1ZXJ5IGlzIGJ1aWx0IGZyb20sIHVzaW5nIHRoZVxuICogc2hhcmVkIGBAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlYCB0b2tlbml6ZXIgc28gdGhlIHNwbGl0dGluZyBydWxlcyBzdGF5XG4gKiBjb25zaXN0ZW50IHdpdGggdGhlIHJlc3Qgb2YgdGhlIHRvb2xraXQuXG4gKlxuICogU3BsaXR0aW5nIG9uIHB1bmN0dWF0aW9uIGlzIHdoYXQgbWFrZXMgYHN0b3JlLWludGVsbGlnZW5jZWAgYmVoYXZlIGxpa2VcbiAqIGBzdG9yZSBpbnRlbGxpZ2VuY2VgLiBQb3N0Z3JlcyBpbmRleGVzIGEgaHlwaGVuYXRlZCB3b3JkIGFzIHRoZSBjb21wb3VuZFxuICogbGV4ZW1lIFBMVVMgZWFjaCBvZiBpdHMgcGFydHMsIGJ1dCBjb21waWxlcyBhIGh5cGhlbmF0ZWQgUVVFUlkgdG8gdGhlXG4gKiBjb21wb3VuZCBhbG9uZSAtIHNvIGBzdG9yZS1pbnRlbGxpZ2VuY2VgIGRlbWFuZHMgYSBgc3RvcmUtaW50ZWxsaWdgIGxleGVtZVxuICogdGhhdCBhIGRvY3VtZW50IHRpdGxlZCBgcmFjZXRyYWMtc3RvcmUtaW50ZWxsaWdlbmNlYCBkb2VzIG5vdCBoYXZlLCBhbmQgdGhlXG4gKiBzZWFyY2ggc2lsZW50bHkgcmV0dXJucyBub3RoaW5nIHdoaWxlIGBzdG9yZSBpbnRlbGxpZ2VuY2VgIHJldHVybnNcbiAqIGV2ZXJ5dGhpbmcuIFNhbWUgZm9yIGAuYCBhbmQgYF9gIGluIGEgdGFibGUgcmVmZXJlbmNlLlxuICpcbiAqIGBjYW1lbENhc2U6IGZhbHNlYCBpcyBsb2FkLWJlYXJpbmcgcmF0aGVyIHRoYW4gYSBkZWZhdWx0OiB0aGUgY2FtZWxDYXNlXG4gKiBzcGxpdHRlciBhbHNvIGJyZWFrcyBkaWdpdCBydW5zLCB0dXJuaW5nIGBncHQ0YCBpbnRvIGBncHRgICsgYDRgIGFuZCBgczNgXG4gKiBpbnRvIGBzYCArIGAzYC4gUG9zdGdyZXMgaW5kZXhlcyBlYWNoIG9mIHRob3NlIGFzIE9ORSBsZXhlbWUsIHNvIG5vIGxleGVtZVxuICogZXZlciBzdGFydHMgd2l0aCB0aGUgdHJhaWxpbmcgZGlnaXRzIGFuZCB0aGUgcHJlY2lzZSBwYXNzIGNvdWxkIG5vdCBtYXRjaFxuICogdGhlbS4gS2VlcGluZyBwdW5jdHVhdGlvbiBhcyB0aGUgb25seSBib3VuZGFyeSBtaXJyb3JzIGhvdyB0aGUgaW5kZXggd2FzXG4gKiBidWlsdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvU2VhcmNoVGVybXMocXVlcnk6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIFtcbiAgICAuLi5zdHJpbmcudG9rZW5pemVXaXRoT3B0aW9ucyh7IGxvd2VyQ2FzZTogdHJ1ZSwgY2FtZWxDYXNlOiBmYWxzZSwgZGlzdGluY3Q6IHRydWUgfSwgcXVlcnkpLFxuICBdO1xufVxuXG4vKipcbiAqIENvbXBpbGUgdGVybXMgaW50byBhIGB0b190c3F1ZXJ5YCBpbnB1dCB3aGVyZSBldmVyeSB0ZXJtIGlzIGEgUFJFRklYLCBzbyBhXG4gKiBwYXJ0aWFsbHkgdHlwZWQgd29yZCBzdGlsbCBtYXRjaGVzIChgaW50ZWw6KmAgcmVhY2hlcyBgaW50ZWxsaWdlbmNlYCkuXG4gKlxuICogVGVybXMgY2Fycnkgb25seSBsZXR0ZXJzIGFuZCBkaWdpdHMgYnkgY29uc3RydWN0aW9uLCBzbyBub25lIG9mIHRzcXVlcnknc1xuICogb3BlcmF0b3JzIChgJiB8ICEgKCApIDogKmApIGNhbiBzdXJ2aXZlIGZyb20gdXNlciBpbnB1dCBpbnRvIHRoZSBjb21waWxlZFxuICogc3RyaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9Uc1F1ZXJ5KHRlcm1zOiByZWFkb25seSBzdHJpbmdbXSwgb3BlcmF0b3I6IFwiJlwiIHwgXCJ8XCIgPSBcIiZcIik6IHN0cmluZyB7XG4gIHJldHVybiB0ZXJtcy5tYXAoKHRlcm0pID0+IGAke3Rlcm19OipgKS5qb2luKGAgJHtvcGVyYXRvcn0gYCk7XG59XG5cbi8qKiBPcHRpb25zIGZvciBhIHNpbmdsZS1pbmRleCBMYWtlYmFzZSBzZWFyY2ggKG1pcnJvcnMgdGhlIGNsaWVudCdzIGBTZWFyY2hPcHRpb25zYCkuICovXG5leHBvcnQgaW50ZXJmYWNlIExha2ViYXNlU2VhcmNoT3B0aW9ucyB7XG4gIGxpbWl0PzogbnVtYmVyO1xuICBmaWx0ZXI/OiBTZWFyY2hSZXF1ZXN0W1wiZmlsdGVyXCJdO1xuICBzY29yZVRocmVzaG9sZD86IG51bWJlcjtcbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG59XG5cbi8qKiBPbmUgcmF3IHNlYXJjaCByb3cgYmVmb3JlIGl0IGlzIHNoYXBlZCBpbnRvIGEge0BsaW5rIFNlYXJjaEhpdH0uICovXG5pbnRlcmZhY2UgU2VhcmNoUm93IHtcbiAgaWQ6IHN0cmluZztcbiAgZG9jdW1lbnQ6IHVua25vd247XG4gIHNjb3JlOiBudW1iZXI7XG59XG5cbi8qKiBUaGUgbWFuYWdlZC1wb29sIHN1cmZhY2UgbmVlZGVkIGJ5IHRoZSBzZWFyY2ggYmFja2VuZC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGFrZWJhc2VTZWFyY2hQb29sIHtcbiAgY29ubmVjdCgpOiBQcm9taXNlPFBvb2xDbGllbnQ+O1xufVxuXG50eXBlIExha2ViYXNlUG9vbFNvdXJjZSA9XG4gIHwgKCgpID0+IFByb21pc2U8UG9vbENvbmZpZz4gfCBQb29sQ29uZmlnKVxuICB8IExha2ViYXNlU2VhcmNoUG9vbFxuICB8IHsgbWFuYWdlZFBvb2w6ICgpID0+IExha2ViYXNlU2VhcmNoUG9vbCB8IG51bGwgfCB1bmRlZmluZWQgfTtcblxuLyoqIE9wdGlvbnMgZm9yIHByb3Zpc2lvbmluZyBhIExha2ViYXNlLWJhY2tlZCBpbmRleC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGFrZWJhc2VQcm92aXNpb25PcHRpb25zIHtcbiAgLyoqIFRleHQgY29sdW1uIGVtYmVkZGVkIGludG8gdGhlIHNlYXJjaCB2ZWN0b3IuIERlZmF1bHRzIHRvIGB0ZXh0YC4gKi9cbiAgdGV4dENvbHVtbj86IHN0cmluZztcbiAgLyoqIERvY3VtZW50cyB0byBzZWVkIHdoZW4gdGhlIHRhYmxlIGlzIGVtcHR5LiAqL1xuICBzZWVkPzogU2VhcmNoRG9jdW1lbnRbXTtcbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG59XG5cbi8qKlxuICogQSBQb3N0Z3JlcyBmdWxsLXRleHQgYmFja2VuZC4gT25lIGluc3RhbmNlIGlzIHNoYXJlZCBhY3Jvc3MgaW5kZXhlczsgZWFjaFxuICogaW5kZXggbWFwcyB0byBhIHRhYmxlIHdob3NlIG5hbWUgaXMgZGVyaXZlZCBmcm9tIHRoZSBpbmRleCByZWZlcmVuY2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBMYWtlYmFzZVNlYXJjaEJhY2tlbmQge1xuICBwcml2YXRlIHBvb2w6IExha2ViYXNlU2VhcmNoUG9vbCB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBwb29sUHJvbWlzZTogUHJvbWlzZTxMYWtlYmFzZVNlYXJjaFBvb2w+IHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIG93bnNQb29sID0gZmFsc2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvdmlzaW9uZWQgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBvb2xTb3VyY2U6IExha2ViYXNlUG9vbFNvdXJjZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNjaGVtYSA9IFwicHVibGljXCIsXG4gICAgLyoqIEhvdyBhIHBvb2wgaXMgYnVpbHQgZnJvbSB0aGUgcmVzb2x2ZWQgY29uZmlnLiBPdmVycmlkYWJsZSBmb3IgdGVzdHMuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBwb29sRmFjdG9yeTogKGNvbmZpZzogUG9vbENvbmZpZykgPT4gUG9vbCA9IChjb25maWcpID0+IG5ldyBQb29sKGNvbmZpZyksXG4gICkge31cblxuICAvKiogTGF6aWx5IGJ1aWxkIChhbmQgY2FjaGUpIHRoZSBwZyBwb29sIGZyb20gdGhlIHJlc29sdmVkIExha2ViYXNlIGNvbmZpZy4gKi9cbiAgcHJpdmF0ZSBhc3luYyBnZXRQb29sKCk6IFByb21pc2U8TGFrZWJhc2VTZWFyY2hQb29sPiB7XG4gICAgaWYgKHRoaXMucG9vbCkgcmV0dXJuIHRoaXMucG9vbDtcbiAgICBpZiAoXCJtYW5hZ2VkUG9vbFwiIGluIHRoaXMucG9vbFNvdXJjZSkge1xuICAgICAgZm9yIChsZXQgYXR0ZW1wdCA9IDA7IGF0dGVtcHQgPCAyMDA7IGF0dGVtcHQgKz0gMSkge1xuICAgICAgICB0aGlzLnBvb2wgPSB0aGlzLnBvb2xTb3VyY2UubWFuYWdlZFBvb2woKSA/PyB1bmRlZmluZWQ7XG4gICAgICAgIGlmICh0aGlzLnBvb2wpIHJldHVybiB0aGlzLnBvb2w7XG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDUwKSk7XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXhlY3V0aW9uRXJyb3IoXCJzZWFyY2ggKGxha2ViYXNlKTogbWFuYWdlZCBwb29sIGRpZCBub3QgaW5pdGlhbGl6ZVwiLCB7XG4gICAgICAgIGNvbnRleHQ6IHsgb3BlcmF0aW9uOiBcImNvbm5lY3RcIiB9LFxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdGhpcy5wb29sU291cmNlICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRoaXMucG9vbCA9IHRoaXMucG9vbFNvdXJjZTtcbiAgICAgIHJldHVybiB0aGlzLnBvb2w7XG4gICAgfVxuICAgIGNvbnN0IHBnQ29uZmlnRmFjdG9yeSA9IHRoaXMucG9vbFNvdXJjZTtcbiAgICB0aGlzLnBvb2xQcm9taXNlID8/PSAoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgY29uZmlnID0gYXdhaXQgcGdDb25maWdGYWN0b3J5KCk7XG4gICAgICBjb25zdCBwb29sID0gdGhpcy5wb29sRmFjdG9yeShjb25maWcpO1xuICAgICAgdGhpcy5wb29sID0gcG9vbDtcbiAgICAgIHRoaXMub3duc1Bvb2wgPSB0cnVlO1xuICAgICAgcmV0dXJuIHBvb2w7XG4gICAgfSkoKTtcbiAgICByZXR1cm4gdGhpcy5wb29sUHJvbWlzZTtcbiAgfVxuXG4gIC8qKiBDbG9zZSB0aGUgcG9vbCBzbyBhIHJlc3RhcnRlZCBhcHAgcmVidWlsZHMgaXQuICovXG4gIGFzeW5jIGNsb3NlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHBvb2wgPSB0aGlzLnBvb2w7XG4gICAgdGhpcy5wb29sID0gdW5kZWZpbmVkO1xuICAgIHRoaXMucG9vbFByb21pc2UgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5wcm92aXNpb25lZC5jbGVhcigpO1xuICAgIGlmIChwb29sICYmIHRoaXMub3duc1Bvb2wpIGF3YWl0IChwb29sIGFzIFBvb2wpLmVuZCgpO1xuICAgIHRoaXMub3duc1Bvb2wgPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2ggYSBMYWtlYmFzZS1iYWNrZWQgaW5kZXguIFJldHVybnMgaGl0cyBzb3J0ZWQgbW9zdC1yZWxldmFudC1maXJzdCxcbiAgICogc2hhcGVkIGlkZW50aWNhbGx5IHRvIHRoZSBWZWN0b3IgU2VhcmNoIGJhY2tlbmQuXG4gICAqL1xuICBhc3luYyBzZWFyY2goXG4gICAgaW5kZXg6IHN0cmluZyxcbiAgICBxdWVyeTogc3RyaW5nLFxuICAgIG9wdGlvbnM6IExha2ViYXNlU2VhcmNoT3B0aW9ucyA9IHt9LFxuICApOiBQcm9taXNlPFNlYXJjaFJlc3VsdD4ge1xuICAgIGNvbnN0IHRleHQgPSBzdHJpbmcudHJpbVRvRW1wdHkocXVlcnkpO1xuICAgIGNvbnN0IHRhYmxlID0gdGhpcy50YWJsZUZvcihpbmRleCk7XG4gICAgY29uc3QgbGltaXQgPSBvcHRpb25zLmxpbWl0ID8/IDEwO1xuICAgIGNvbnN0IHBvb2wgPSBhd2FpdCB0aGlzLmdldFBvb2woKTtcbiAgICBjb25zdCB0ZXJtcyA9IHRvU2VhcmNoVGVybXModGV4dCk7XG5cbiAgICAvLyBBbiBlbXB0eSAob3IgcHVuY3R1YXRpb24tb25seSkgYm94IHJldHVybnMgcm93cyByYXRoZXIgdGhhbiBub3RoaW5nLCBzb1xuICAgIC8vIHRoZSBVSSBzaG93cyBjb250ZW50IGJlZm9yZSB0aGUgdXNlciB0eXBlcyAtIGFzIGEga2V5d29yZCBpbmRleCB3b3VsZC5cbiAgICBpZiAodGVybXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLmZpbHRlckNsYXVzZShvcHRpb25zLmZpbHRlciwgMSk7XG4gICAgICBjb25zdCBsaW1pdFBvc2l0aW9uID0gZmlsdGVyLnBhcmFtcy5sZW5ndGggKyAxO1xuICAgICAgY29uc3QgeyByb3dzIH0gPSBhd2FpdCB0aGlzLnF1ZXJ5PFNlYXJjaFJvdz4oXG4gICAgICAgIHBvb2wsXG4gICAgICAgIGBTRUxFQ1QgaWQsIGRvY3VtZW50LCAwOjpmbG9hdDQgQVMgc2NvcmVcbiAgICAgICAgICAgRlJPTSAke3RhYmxlfVxuICAgICAgICAgIFdIRVJFIFRSVUUke2ZpbHRlci5zcWx9XG4gICAgICAgICAgT1JERVIgQlkgaWRcbiAgICAgICAgICBMSU1JVCAkJHtsaW1pdFBvc2l0aW9ufWAsXG4gICAgICAgIFsuLi5maWx0ZXIucGFyYW1zLCBsaW1pdF0sXG4gICAgICAgIG9wdGlvbnMuc2lnbmFsLFxuICAgICAgKTtcbiAgICAgIHJldHVybiB0aGlzLnRvUmVzdWx0KHRleHQsIGluZGV4LCByb3dzLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICAvLyBQcmVjaXNlIHBhc3M6IGV2ZXJ5IHRlcm0gbXVzdCBtYXRjaCwgZWFjaCBhcyBhIHByZWZpeC5cbiAgICBjb25zdCBzdHJpY3RGaWx0ZXIgPSB0aGlzLmZpbHRlckNsYXVzZShvcHRpb25zLmZpbHRlciwgMik7XG4gICAgY29uc3Qgc3RyaWN0TGltaXRQb3NpdGlvbiA9IHN0cmljdEZpbHRlci5wYXJhbXMubGVuZ3RoICsgMjtcbiAgICBjb25zdCBzdHJpY3QgPSBhd2FpdCB0aGlzLnF1ZXJ5PFNlYXJjaFJvdz4oXG4gICAgICBwb29sLFxuICAgICAgYFNFTEVDVCBpZCwgZG9jdW1lbnQsIHRzX3Jhbmsoc2VhcmNoX3ZlY3RvciwgdG9fdHNxdWVyeSgnZW5nbGlzaCcsICQxKSkgQVMgc2NvcmVcbiAgICAgICAgIEZST00gJHt0YWJsZX1cbiAgICAgICAgV0hFUkUgc2VhcmNoX3ZlY3RvciBAQCB0b190c3F1ZXJ5KCdlbmdsaXNoJywgJDEpXG4gICAgICAgICAgJHtzdHJpY3RGaWx0ZXIuc3FsfVxuICAgICAgICBPUkRFUiBCWSBzY29yZSBERVNDXG4gICAgICAgIExJTUlUICQke3N0cmljdExpbWl0UG9zaXRpb259YCxcbiAgICAgIFt0b1RzUXVlcnkodGVybXMpLCAuLi5zdHJpY3RGaWx0ZXIucGFyYW1zLCBsaW1pdF0sXG4gICAgICBvcHRpb25zLnNpZ25hbCxcbiAgICApO1xuICAgIGlmIChzdHJpY3Qucm93cy5sZW5ndGggPiAwKSByZXR1cm4gdGhpcy50b1Jlc3VsdCh0ZXh0LCBpbmRleCwgc3RyaWN0LnJvd3MsIG9wdGlvbnMpO1xuXG4gICAgLy8gTm90aGluZyBtYXRjaGVkIEVWRVJZIHRlcm0sIHNvIHJlbGF4IHJhdGhlciB0aGFuIHJldHVybiBhbiBlbXB0eSBib3g6XG4gICAgLy8gYW55IG9uZSB0ZXJtIGlzIGVub3VnaCwgYW5kIGFuIGBJTElLRWAgcGFzcyBhZGRpdGlvbmFsbHkgY2F0Y2hlcyBhXG4gICAgLy8gZnJhZ21lbnQgdGhhdCBpcyBub3QgYSBwcmVmaXggKGB0ZWxsaWdlbmNlYCkgb3IgYSB0b2tlbiB0aGUgdGV4dC1zZWFyY2hcbiAgICAvLyBwYXJzZXIgc3BsaXQgZGlmZmVyZW50bHkgdGhhbiBleHBlY3RlZC4gU3Vic3RyaW5nIG1hdGNoaW5nIGNhbm5vdCB1c2VcbiAgICAvLyB0aGUgR0lOIGluZGV4LCB3aGljaCBpcyB3aHkgaXQgb25seSBydW5zIG9uY2UgdGhlIGluZGV4ZWQgcGFzcyBmYWlscy5cbiAgICBjb25zdCByZWxheGVkRmlsdGVyID0gdGhpcy5maWx0ZXJDbGF1c2Uob3B0aW9ucy5maWx0ZXIsIDMpO1xuICAgIGNvbnN0IHJlbGF4ZWRMaW1pdFBvc2l0aW9uID0gcmVsYXhlZEZpbHRlci5wYXJhbXMubGVuZ3RoICsgMztcbiAgICBjb25zdCByZWxheGVkID0gYXdhaXQgdGhpcy5xdWVyeTxTZWFyY2hSb3c+KFxuICAgICAgcG9vbCxcbiAgICAgIGBTRUxFQ1QgaWQsIGRvY3VtZW50LCB0c19yYW5rKHNlYXJjaF92ZWN0b3IsIHRvX3RzcXVlcnkoJ2VuZ2xpc2gnLCAkMSkpIEFTIHNjb3JlXG4gICAgICAgICBGUk9NICR7dGFibGV9XG4gICAgICAgIFdIRVJFIChzZWFyY2hfdmVjdG9yIEBAIHRvX3RzcXVlcnkoJ2VuZ2xpc2gnLCAkMSlcbiAgICAgICAgICAgT1Igc2VhcmNoX3RleHQgSUxJS0UgQU5ZKCQyOjp0ZXh0W10pKVxuICAgICAgICAgICR7cmVsYXhlZEZpbHRlci5zcWx9XG4gICAgICAgIE9SREVSIEJZIHNjb3JlIERFU0NcbiAgICAgICAgTElNSVQgJCR7cmVsYXhlZExpbWl0UG9zaXRpb259YCxcbiAgICAgIFt0b1RzUXVlcnkodGVybXMsIFwifFwiKSwgdGVybXMubWFwKCh0ZXJtKSA9PiBgJSR7dGVybX0lYCksIC4uLnJlbGF4ZWRGaWx0ZXIucGFyYW1zLCBsaW1pdF0sXG4gICAgICBvcHRpb25zLnNpZ25hbCxcbiAgICApO1xuICAgIHJldHVybiB0aGlzLnRvUmVzdWx0KHRleHQsIGluZGV4LCByZWxheGVkLnJvd3MsIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqIFNoYXBlIHJhdyByb3dzIGludG8gdGhlIGBTZWFyY2hSZXN1bHRgIGJvdGggYmFja2VuZHMgcmV0dXJuLiAqL1xuICBwcml2YXRlIHRvUmVzdWx0KFxuICAgIHF1ZXJ5OiBzdHJpbmcsXG4gICAgaW5kZXg6IHN0cmluZyxcbiAgICByb3dzOiBTZWFyY2hSb3dbXSxcbiAgICBvcHRpb25zOiBMYWtlYmFzZVNlYXJjaE9wdGlvbnMsXG4gICk6IFNlYXJjaFJlc3VsdCB7XG4gICAgY29uc3QgaGl0czogU2VhcmNoSGl0W10gPSByb3dzXG4gICAgICAubWFwKChyb3cpID0+ICh7XG4gICAgICAgIGlkOiBTdHJpbmcocm93LmlkKSxcbiAgICAgICAgc2NvcmU6IE51bWJlcihyb3cuc2NvcmUpIHx8IDAsXG4gICAgICAgIGZpZWxkczogdGhpcy50b0ZpZWxkcyhyb3cuZG9jdW1lbnQpLFxuICAgICAgfSkpXG4gICAgICAuZmlsdGVyKChoaXQpID0+IG9wdGlvbnMuc2NvcmVUaHJlc2hvbGQgPT09IHVuZGVmaW5lZCB8fCBoaXQuc2NvcmUgPj0gb3B0aW9ucy5zY29yZVRocmVzaG9sZCk7XG4gICAgcmV0dXJuIHsgcXVlcnksIGluZGV4LCBoaXRzLCBjb3VudDogaGl0cy5sZW5ndGggfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbnN1cmUgdGhlIHRhYmxlICsgZnVsbC10ZXh0IGluZGV4IGV4aXN0IGFuZCBzZWVkIGRvY3VtZW50cyB3aGVuIGVtcHR5LlxuICAgKiBJZGVtcG90ZW50LCBzbyBpdCBpcyBzYWZlIHRvIGNhbGwgb24gZXZlcnkgYm9vdC5cbiAgICovXG4gIGFzeW5jIHByb3Zpc2lvbihpbmRleDogc3RyaW5nLCBvcHRpb25zOiBMYWtlYmFzZVByb3Zpc2lvbk9wdGlvbnMgPSB7fSk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgdGFibGUgPSB0aGlzLnRhYmxlRm9yKGluZGV4KTtcbiAgICBjb25zdCBwb29sID0gYXdhaXQgdGhpcy5nZXRQb29sKCk7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVUYWJsZShwb29sLCB0YWJsZSwgb3B0aW9ucy5zaWduYWwpO1xuXG4gICAgY29uc3QgeyByb3dzIH0gPSBhd2FpdCB0aGlzLnF1ZXJ5PHsgY291bnQ6IHN0cmluZyB9PihcbiAgICAgIHBvb2wsXG4gICAgICBgU0VMRUNUIGNvdW50KCopOjp0ZXh0IEFTIGNvdW50IEZST00gJHt0YWJsZX1gLFxuICAgICAgW10sXG4gICAgICBvcHRpb25zLnNpZ25hbCxcbiAgICApO1xuICAgIGNvbnN0IGV4aXN0aW5nID0gTnVtYmVyKHJvd3NbMF0/LmNvdW50ID8/IFwiMFwiKTtcbiAgICBjb25zdCBzZWVkID0gb3B0aW9ucy5zZWVkID8/IFtdO1xuICAgIGlmIChleGlzdGluZyA9PT0gMCAmJiBzZWVkLmxlbmd0aCA+IDApIHtcbiAgICAgIGF3YWl0IHRoaXMudXBzZXJ0KHBvb2wsIHRhYmxlLCBzZWVkLCBvcHRpb25zLnRleHRDb2x1bW4gPz8gXCJ0ZXh0XCIsIG9wdGlvbnMuc2lnbmFsKTtcbiAgICAgIGxvZ2dlci5pbmZvKFwiaW5kZXgtc2VlZGVkXCIsIHsgaW5kZXgsIHRhYmxlLCBjb3VudDogc2VlZC5sZW5ndGggfSk7XG4gICAgICByZXR1cm4gc2VlZC5sZW5ndGg7XG4gICAgfVxuICAgIHJldHVybiBleGlzdGluZztcbiAgfVxuXG4gIC8qKiBBZGQgb3IgdXBkYXRlIGRvY3VtZW50cyBieSBwcmltYXJ5IGtleS4gKi9cbiAgYXN5bmMgYWRkRG9jdW1lbnRzKFxuICAgIGluZGV4OiBzdHJpbmcsXG4gICAgZG9jdW1lbnRzOiBTZWFyY2hEb2N1bWVudFtdLFxuICAgIHRleHRDb2x1bW4gPSBcInRleHRcIixcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbCxcbiAgKTogUHJvbWlzZTxVcHNlcnRSZXN1bHQ+IHtcbiAgICBjb25zdCB0YWJsZSA9IHRoaXMudGFibGVGb3IoaW5kZXgpO1xuICAgIGNvbnN0IHBvb2wgPSBhd2FpdCB0aGlzLmdldFBvb2woKTtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZVRhYmxlKHBvb2wsIHRhYmxlLCBzaWduYWwpO1xuICAgIGF3YWl0IHRoaXMudXBzZXJ0KHBvb2wsIHRhYmxlLCBkb2N1bWVudHMsIHRleHRDb2x1bW4sIHNpZ25hbCk7XG4gICAgcmV0dXJuIHsgaW5kZXgsIGNvdW50OiBkb2N1bWVudHMubGVuZ3RoIH07XG4gIH1cblxuICAvKiogRGVsZXRlIGRvY3VtZW50cyBieSBwcmltYXJ5IGtleS4gKi9cbiAgYXN5bmMgZGVsZXRlRG9jdW1lbnRzKFxuICAgIGluZGV4OiBzdHJpbmcsXG4gICAgaWRzOiBBcnJheTxzdHJpbmcgfCBudW1iZXI+LFxuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuICApOiBQcm9taXNlPFVwc2VydFJlc3VsdD4ge1xuICAgIGNvbnN0IHRhYmxlID0gdGhpcy50YWJsZUZvcihpbmRleCk7XG4gICAgY29uc3QgcG9vbCA9IGF3YWl0IHRoaXMuZ2V0UG9vbCgpO1xuICAgIGF3YWl0IHRoaXMucXVlcnkocG9vbCwgYERFTEVURSBGUk9NICR7dGFibGV9IFdIRVJFIGlkID0gQU5ZKCQxKWAsIFtpZHMubWFwKFN0cmluZyldLCBzaWduYWwpO1xuICAgIHJldHVybiB7IGluZGV4LCBjb3VudDogaWRzLmxlbmd0aCB9O1xuICB9XG5cbiAgLyoqIENyZWF0ZSB0aGUgdGFibGUgKyBHSU4gaW5kZXggb25jZSBwZXIgdGFibGUgKG1lbW9pemVkIGFjcm9zcyBjYWxscykuICovXG4gIHByaXZhdGUgYXN5bmMgZW5zdXJlVGFibGUoXG4gICAgcG9vbDogTGFrZWJhc2VTZWFyY2hQb29sLFxuICAgIHRhYmxlOiBzdHJpbmcsXG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLnByb3Zpc2lvbmVkLmhhcyh0YWJsZSkpIHJldHVybjtcbiAgICAvLyBgZG9jdW1lbnRgIGhvbGRzIHRoZSB3aG9sZSByb3c7IGBzZWFyY2hfdGV4dGAgaXMgdGhlIGluZGV4ZWQgdGV4dDsgdGhlXG4gICAgLy8gZ2VuZXJhdGVkIGBzZWFyY2hfdmVjdG9yYCBrZWVwcyB0aGUgdHN2ZWN0b3IgaW4gbG9ja3N0ZXAgd2l0aCBpdCBzbyBhXG4gICAgLy8gd3JpdGUgbmV2ZXIgaGFzIHRvIGNvbXB1dGUgdGhlIHZlY3RvciBieSBoYW5kLlxuICAgIGF3YWl0IHRoaXMucXVlcnkocG9vbCwgYENSRUFURSBTQ0hFTUEgSUYgTk9UIEVYSVNUUyAke3RoaXMuaWRlbnQodGhpcy5zY2hlbWEpfWAsIFtdLCBzaWduYWwpO1xuICAgIGF3YWl0IHRoaXMucXVlcnkoXG4gICAgICBwb29sLFxuICAgICAgYENSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTICR7dGFibGV9IChcbiAgICAgICAgIGlkIHRleHQgUFJJTUFSWSBLRVksXG4gICAgICAgICBzZWFyY2hfdGV4dCB0ZXh0IE5PVCBOVUxMIERFRkFVTFQgJycsXG4gICAgICAgICBkb2N1bWVudCBqc29uYiBOT1QgTlVMTCBERUZBVUxUICd7fSc6Ompzb25iLFxuICAgICAgICAgc2VhcmNoX3ZlY3RvciB0c3ZlY3RvciBHRU5FUkFURUQgQUxXQVlTIEFTICh0b190c3ZlY3RvcignZW5nbGlzaCcsIHNlYXJjaF90ZXh0KSkgU1RPUkVEXG4gICAgICAgKWAsXG4gICAgICBbXSxcbiAgICAgIHNpZ25hbCxcbiAgICApO1xuICAgIGF3YWl0IHRoaXMucXVlcnkoXG4gICAgICBwb29sLFxuICAgICAgYEFMVEVSIFRBQkxFICR7dGFibGV9XG4gICAgICAgICBBREQgQ09MVU1OIElGIE5PVCBFWElTVFMgc2VhcmNoX3ZlY3RvciB0c3ZlY3RvclxuICAgICAgICAgR0VORVJBVEVEIEFMV0FZUyBBUyAodG9fdHN2ZWN0b3IoJ2VuZ2xpc2gnLCBzZWFyY2hfdGV4dCkpIFNUT1JFRGAsXG4gICAgICBbXSxcbiAgICAgIHNpZ25hbCxcbiAgICApO1xuICAgIGF3YWl0IHRoaXMucXVlcnkoXG4gICAgICBwb29sLFxuICAgICAgYENSRUFURSBJTkRFWCBJRiBOT1QgRVhJU1RTICR7dGhpcy5pZGVudChgJHt0aGlzLmJhcmVOYW1lKHRhYmxlKX1fZnRzYCl9XG4gICAgICAgICBPTiAke3RhYmxlfSBVU0lORyBnaW4gKHNlYXJjaF92ZWN0b3IpYCxcbiAgICAgIFtdLFxuICAgICAgc2lnbmFsLFxuICAgICk7XG4gICAgdGhpcy5wcm92aXNpb25lZC5hZGQodGFibGUpO1xuICAgIGxvZ2dlci5pbmZvKFwiaW5kZXgtY3JlYXRlZFwiLCB7IHRhYmxlIH0pO1xuICB9XG5cbiAgLyoqIFVwc2VydCByb3dzOiB0aGUgd2hvbGUgZG9jdW1lbnQgYXMganNvbmIgKyBhIGZsYXR0ZW5lZCB0ZXh0IGJsb2IgdG8gaW5kZXguICovXG4gIHByaXZhdGUgYXN5bmMgdXBzZXJ0KFxuICAgIHBvb2w6IExha2ViYXNlU2VhcmNoUG9vbCxcbiAgICB0YWJsZTogc3RyaW5nLFxuICAgIGRvY3VtZW50czogU2VhcmNoRG9jdW1lbnRbXSxcbiAgICB0ZXh0Q29sdW1uOiBzdHJpbmcsXG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGZvciAoY29uc3QgZG9jIG9mIGRvY3VtZW50cykge1xuICAgICAgY29uc3QgaWQgPSBzdHJpbmcudHJpbVRvTnVsbChTdHJpbmcoZG9jLmlkID8/IGRvYy5JRCA/PyBcIlwiKSkgPz8gdW5kZWZpbmVkO1xuICAgICAgaWYgKGlkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEV4ZWN1dGlvbkVycm9yKFwic2VhcmNoIChsYWtlYmFzZSk6IGEgZG9jdW1lbnQgaXMgbWlzc2luZyBhbiBgaWRgXCIsIHtcbiAgICAgICAgICBjb250ZXh0OiB7IG9wZXJhdGlvbjogXCJhZGREb2N1bWVudHNcIiB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNlYXJjaFRleHQgPSB0aGlzLnNlYXJjaFRleHQoZG9jLCB0ZXh0Q29sdW1uKTtcbiAgICAgIGF3YWl0IHRoaXMucXVlcnkoXG4gICAgICAgIHBvb2wsXG4gICAgICAgIGBJTlNFUlQgSU5UTyAke3RhYmxlfSAoaWQsIHNlYXJjaF90ZXh0LCBkb2N1bWVudClcbiAgICAgICAgICAgVkFMVUVTICgkMSwgJDIsICQzOjpqc29uYilcbiAgICAgICAgIE9OIENPTkZMSUNUIChpZCkgRE8gVVBEQVRFXG4gICAgICAgICAgIFNFVCBzZWFyY2hfdGV4dCA9IEVYQ0xVREVELnNlYXJjaF90ZXh0LCBkb2N1bWVudCA9IEVYQ0xVREVELmRvY3VtZW50YCxcbiAgICAgICAgW2lkLCBzZWFyY2hUZXh0LCBKU09OLnN0cmluZ2lmeShkb2MpXSxcbiAgICAgICAgc2lnbmFsLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKiogVGhlIHRleHQgYSByb3cgaXMgaW5kZXhlZCBieTogdGhlIHRleHQgY29sdW1uIGZpcnN0LCB0aGVuIGFueSBvdGhlciBzdHJpbmcgZmllbGQuICovXG4gIHByaXZhdGUgc2VhcmNoVGV4dChkb2M6IFNlYXJjaERvY3VtZW50LCB0ZXh0Q29sdW1uOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHByaW1hcnkgPSBzdHJpbmcudHJpbVRvRW1wdHkoU3RyaW5nKGRvY1t0ZXh0Q29sdW1uXSA/PyBcIlwiKSk7XG4gICAgY29uc3QgcmVzdCA9IE9iamVjdC5lbnRyaWVzKGRvYylcbiAgICAgIC5maWx0ZXIoKFtrZXksIHZhbHVlXSkgPT4ga2V5ICE9PSB0ZXh0Q29sdW1uICYmIGtleSAhPT0gXCJpZFwiICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIilcbiAgICAgIC5tYXAoKFssIHZhbHVlXSkgPT4gdmFsdWUgYXMgc3RyaW5nKTtcbiAgICByZXR1cm4gW3ByaW1hcnksIC4uLnJlc3RdLmZpbHRlcihCb29sZWFuKS5qb2luKFwiXFxuXCIpO1xuICB9XG5cbiAgLyoqIEEgaGl0J3MgYGZpZWxkc2A6IHRoZSBzdG9yZWQgZG9jdW1lbnQgbWludXMgdGhlIHJlc2VydmVkL2ludGVybmFsIGtleXMuICovXG4gIHByaXZhdGUgdG9GaWVsZHMoZG9jdW1lbnQ6IHVua25vd24pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgaWYgKCFvYmplY3QuaXNSZWNvcmQoZG9jdW1lbnQpKSByZXR1cm4ge307XG4gICAgY29uc3QgZmllbGRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGRvY3VtZW50KSkge1xuICAgICAgaWYgKFJFU0VSVkVEX0NPTFVNTlMuaGFzKGtleSkpIGNvbnRpbnVlO1xuICAgICAgZmllbGRzW2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZpZWxkcztcbiAgfVxuXG4gIC8qKiBDb21waWxlIEFwcEtpdCBzY2FsYXIvYXJyYXkgZmlsdGVycyBhZ2FpbnN0IHRoZSBzdG9yZWQgSlNPTiBkb2N1bWVudC4gKi9cbiAgcHJpdmF0ZSBmaWx0ZXJDbGF1c2UoXG4gICAgZmlsdGVyOiBTZWFyY2hSZXF1ZXN0W1wiZmlsdGVyXCJdLFxuICAgIHN0YXJ0UG9zaXRpb246IG51bWJlcixcbiAgKTogeyBzcWw6IHN0cmluZzsgcGFyYW1zOiB1bmtub3duW10gfSB7XG4gICAgaWYgKCFmaWx0ZXIgfHwgT2JqZWN0LmtleXMoZmlsdGVyKS5sZW5ndGggPT09IDApIHJldHVybiB7IHNxbDogXCJcIiwgcGFyYW1zOiBbXSB9O1xuICAgIGNvbnN0IGNsYXVzZXM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgcGFyYW1zOiB1bmtub3duW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhmaWx0ZXIpKSB7XG4gICAgICBjb25zdCBrZXlQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb24gKyBwYXJhbXMubGVuZ3RoO1xuICAgICAgcGFyYW1zLnB1c2goa2V5KTtcbiAgICAgIGNvbnN0IHZhbHVlUG9zaXRpb24gPSBzdGFydFBvc2l0aW9uICsgcGFyYW1zLmxlbmd0aDtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBwYXJhbXMucHVzaCh2YWx1ZS5tYXAoU3RyaW5nKSk7XG4gICAgICAgIGNsYXVzZXMucHVzaChgZG9jdW1lbnQgLT4+ICQke2tleVBvc2l0aW9ufSA9IEFOWSgkJHt2YWx1ZVBvc2l0aW9ufTo6dGV4dFtdKWApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyYW1zLnB1c2goU3RyaW5nKHZhbHVlKSk7XG4gICAgICAgIGNsYXVzZXMucHVzaChgZG9jdW1lbnQgLT4+ICQke2tleVBvc2l0aW9ufSA9ICQke3ZhbHVlUG9zaXRpb259YCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7IHNxbDogYCBBTkQgJHtjbGF1c2VzLmpvaW4oXCIgQU5EIFwiKX1gLCBwYXJhbXMgfTtcbiAgfVxuXG4gIC8qKiBUaGUgZnVsbHktcXVhbGlmaWVkIHRhYmxlIG5hbWUgZm9yIGFuIGluZGV4IHJlZmVyZW5jZS4gKi9cbiAgcHJpdmF0ZSB0YWJsZUZvcihpbmRleDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5pZGVudCh0aGlzLnNjaGVtYSl9LiR7dGhpcy5pZGVudCh0aGlzLmJhcmVOYW1lKGluZGV4KSl9YDtcbiAgfVxuXG4gIC8qKiBBIHNhZmUgYmFyZSB0YWJsZSBuYW1lIGRlcml2ZWQgZnJvbSBhbiBpbmRleCByZWZlcmVuY2UuICovXG4gIHByaXZhdGUgYmFyZU5hbWUocmVmZXJlbmNlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGxhc3QgPSByZWZlcmVuY2Uuc3BsaXQoXCIuXCIpLmZpbHRlcihCb29sZWFuKS5wb3AoKSA/PyByZWZlcmVuY2U7XG4gICAgY29uc3Qgc2x1ZyA9IHN0cmluZy50b1NsdWcobGFzdCkucmVwbGFjZSgvLS9nLCBcIl9cIik7XG4gICAgcmV0dXJuIHNsdWcubGVuZ3RoID4gMCA/IHNsdWcgOiBcImRvY3VtZW50c1wiO1xuICB9XG5cbiAgLyoqIFF1b3RlIGEgUG9zdGdyZXMgaWRlbnRpZmllci4gKi9cbiAgcHJpdmF0ZSBpZGVudChuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBgXCIke25hbWUucmVwbGFjZSgvXCIvZywgJ1wiXCInKX1cImA7XG4gIH1cblxuICAvKiogUnVuIG9uZSBxdWVyeSB1bmRlciBleHRlcm5hbCBjYW5jZWxsYXRpb24uICovXG4gIHByaXZhdGUgYXN5bmMgcXVlcnk8VD4oXG4gICAgcG9vbDogTGFrZWJhc2VTZWFyY2hQb29sLFxuICAgIHNxbDogc3RyaW5nLFxuICAgIHBhcmFtczogdW5rbm93bltdLFxuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuICApOiBQcm9taXNlPHsgcm93czogVFtdIH0+IHtcbiAgICBpZiAoc2lnbmFsPy5hYm9ydGVkKSB0aHJvdyBFeGVjdXRpb25FcnJvci5jYW5jZWxlZCgpO1xuICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IHBvb2wuY29ubmVjdCgpO1xuICAgIGxldCByZWxlYXNlZCA9IGZhbHNlO1xuICAgIGNvbnN0IG9uQWJvcnQgPSAoKSA9PiB7XG4gICAgICBpZiAocmVsZWFzZWQpIHJldHVybjtcbiAgICAgIHJlbGVhc2VkID0gdHJ1ZTtcbiAgICAgIGNsaWVudC5yZWxlYXNlKHRydWUpO1xuICAgIH07XG4gICAgc2lnbmFsPy5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgb25BYm9ydCwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjbGllbnQucXVlcnkoc3FsLCBwYXJhbXMpO1xuICAgICAgcmV0dXJuIHsgcm93czogcmVzdWx0LnJvd3MgYXMgVFtdIH07XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNpZ25hbD8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIG9uQWJvcnQpO1xuICAgICAgaWYgKCFyZWxlYXNlZCkgY2xpZW50LnJlbGVhc2UoKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
package/package.json CHANGED
@@ -28,12 +28,12 @@
28
28
  "dependencies": {
29
29
  "@databricks/appkit": "^0.60.0",
30
30
  "@databricks/sdk-experimental": "^0.17.0",
31
- "@dbx-tools/appkit": "0.6.118",
32
- "@dbx-tools/core": "0.6.118",
33
- "@dbx-tools/model": "0.6.118",
34
- "@dbx-tools/shared-core": "0.6.118",
35
- "@dbx-tools/shared-model": "0.6.118",
36
- "@dbx-tools/shared-search": "0.6.118",
31
+ "@dbx-tools/appkit": "0.6.120",
32
+ "@dbx-tools/core": "0.6.120",
33
+ "@dbx-tools/model": "0.6.120",
34
+ "@dbx-tools/shared-core": "0.6.120",
35
+ "@dbx-tools/shared-model": "0.6.120",
36
+ "@dbx-tools/shared-search": "0.6.120",
37
37
  "@mastra/core": "1.47.0",
38
38
  "pg": "^8.22.0",
39
39
  "zod": "4.3.6"
@@ -52,7 +52,7 @@
52
52
  "./package.json": "./package.json"
53
53
  }
54
54
  },
55
- "version": "0.6.118",
55
+ "version": "0.6.120",
56
56
  "types": "./lib/index.d.ts",
57
57
  "type": "module",
58
58
  "exports": {
package/src/lakebase.ts CHANGED
@@ -100,7 +100,7 @@ export interface LakebaseSearchPool {
100
100
  type LakebasePoolSource =
101
101
  | (() => Promise<PoolConfig> | PoolConfig)
102
102
  | LakebaseSearchPool
103
- | { managedPool: () => LakebaseSearchPool };
103
+ | { managedPool: () => LakebaseSearchPool | null | undefined };
104
104
 
105
105
  /** Options for provisioning a Lakebase-backed index. */
106
106
  export interface LakebaseProvisionOptions {
@@ -132,8 +132,14 @@ export class LakebaseSearchBackend {
132
132
  private async getPool(): Promise<LakebaseSearchPool> {
133
133
  if (this.pool) return this.pool;
134
134
  if ("managedPool" in this.poolSource) {
135
- this.pool = this.poolSource.managedPool();
136
- return this.pool;
135
+ for (let attempt = 0; attempt < 200; attempt += 1) {
136
+ this.pool = this.poolSource.managedPool() ?? undefined;
137
+ if (this.pool) return this.pool;
138
+ await new Promise((resolve) => setTimeout(resolve, 50));
139
+ }
140
+ throw new ExecutionError("search (lakebase): managed pool did not initialize", {
141
+ context: { operation: "connect" },
142
+ });
137
143
  }
138
144
  if (typeof this.poolSource !== "function") {
139
145
  this.pool = this.poolSource;