@dbx-tools/appkit-lakebox 0.9.154 → 0.9.157

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,10 +1,8 @@
1
1
  import { createHash } from "node:crypto";
2
- import { exec } from "@dbx-tools/core";
3
- import { SshKeyStore } from "@dbx-tools/lakebox/key-store";
4
- import { ensureLakeboxRunning, ensureLakeboxStopped, lakeboxIdleTimeoutSeconds, normalizeLakeboxStatus, } from "@dbx-tools/lakebox/lifecycle";
5
- import { isLakeboxUnavailable, LakeboxApiError, LakeboxClient, } from "@dbx-tools/lakebox/rest";
6
- import { SshCommand, SshSession } from "@dbx-tools/lakebox/session";
7
- import { errorUtils, log } from "@dbx-tools/shared-core";
2
+ import { onParentTerminationSignal } from "@dbx-tools/core";
3
+ import { SshKeyStore, ensureLakeboxRunning, ensureLakeboxStopped, lakeboxIdleTimeoutSeconds, normalizeLakeboxStatus, SshCommand, SshSession, } from "@dbx-tools/lakebox";
4
+ import { isLakeboxUnavailable, LakeboxApiError, LakeboxClient, } from "@dbx-tools/lakebox";
5
+ import { log, toError } from "@dbx-tools/shared-core";
8
6
  import { LAKEBOX_BUILT_IN_SERVICES, lakeboxBuiltInServiceNameSchema, lakeboxCommandRequestSchema, lakeboxServiceLogsRequestSchema, } from "@dbx-tools/shared-lakebox";
9
7
  import { readPackageResource } from "./_package.js";
10
8
  import { stoppedSnapshotServices } from "./_service-snapshots.js";
@@ -81,7 +79,7 @@ export class LakeboxRuntime {
81
79
  unavailable: (user, service) => this.markUnavailable(user, service),
82
80
  });
83
81
  this.metrics = new LakeboxMetrics((signal) => this.readMetrics(signal), config.metricsIntervalSeconds * 1_000);
84
- this.stopParentTerminationSignal = exec.onParentTerminationSignal(() => this.routes.beginShutdown());
82
+ this.stopParentTerminationSignal = onParentTerminationSignal(() => this.routes.beginShutdown());
85
83
  }
86
84
  /**
87
85
  * Supplies app service-principal credentials and the request identity
@@ -306,7 +304,7 @@ export class LakeboxRuntime {
306
304
  }
307
305
  catch (error) {
308
306
  if (!isLakeboxUnavailable(error)) {
309
- logger.warn("legacy Lakebox cleanup failed", { error: errorUtils.toError(error) });
307
+ logger.warn("legacy Lakebox cleanup failed", { error: toError(error) });
310
308
  }
311
309
  }
312
310
  if (!pool)
@@ -320,7 +318,7 @@ export class LakeboxRuntime {
320
318
  }
321
319
  }
322
320
  catch (error) {
323
- logger.warn("legacy ownership schema cleanup failed", { error: errorUtils.toError(error) });
321
+ logger.warn("legacy ownership schema cleanup failed", { error: toError(error) });
324
322
  }
325
323
  }
326
324
  /** Cancels in-flight work before teardown. */
@@ -521,7 +519,7 @@ export class LakeboxRuntime {
521
519
  return;
522
520
  logger.warn("Lakebox service restore failed", {
523
521
  user: hash,
524
- error: errorUtils.toError(error),
522
+ error: toError(error),
525
523
  });
526
524
  }
527
525
  }
@@ -676,7 +674,7 @@ export class LakeboxRuntime {
676
674
  if (this.waking)
677
675
  return;
678
676
  this.waking = action()
679
- .catch((error) => logger.warn("Lakebox wake failed", { error: errorUtils.toError(error) }))
677
+ .catch((error) => logger.warn("Lakebox wake failed", { error: toError(error) }))
680
678
  .finally(() => {
681
679
  this.waking = undefined;
682
680
  });
@@ -757,4 +755,4 @@ function shellQuote(value) {
757
755
  export function isLakeboxMissing(error) {
758
756
  return error instanceof LakeboxApiError && error.status === 404;
759
757
  }
760
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW50aW1lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFekMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMzRCxPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLG9CQUFvQixFQUNwQix5QkFBeUIsRUFDekIsc0JBQXNCLEdBQ3ZCLE1BQU0sOEJBQThCLENBQUM7QUFDdEMsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixlQUFlLEVBQ2YsYUFBYSxHQUdkLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pELE9BQU8sRUFDTCx5QkFBeUIsRUFDekIsK0JBQStCLEVBQy9CLDJCQUEyQixFQUMzQiwrQkFBK0IsR0FXaEMsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFcEQsT0FBTyxFQUEyQix1QkFBdUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRTNGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDOUMsT0FBTyxFQUFFLG9CQUFvQixFQUErQixNQUFNLGFBQWEsQ0FBQztBQUNoRixPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLGtCQUFrQixFQUNsQixlQUFlLEVBQ2YsOEJBQThCLEVBQzlCLFlBQVksRUFDWixnQkFBZ0IsR0FHakIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFdBQVcsRUFBRSxNQUFNLFdBQVcs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VUFBVSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDcEUsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUFDLEtBQWE7SUFDL0IsT0FBTyxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUM7QUFDL0MsQ0FBQztBQUVELDJFQUEyRTtBQUMzRSxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsS0FBYztJQUM3QyxPQUFPLEtBQUssWUFBWSxlQUFlLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxHQUFHLENBQUM7QUFDbEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tIFwibm9kZTpjcnlwdG9cIjtcbmltcG9ydCB0eXBlIHsgSW5jb21pbmdIdHRwSGVhZGVycyB9IGZyb20gXCJub2RlOmh0dHBcIjtcbmltcG9ydCB7IGV4ZWMgfSBmcm9tIFwiQGRieC10b29scy9jb3JlXCI7XG5pbXBvcnQgeyBTc2hLZXlTdG9yZSB9IGZyb20gXCJAZGJ4LXRvb2xzL2xha2Vib3gva2V5LXN0b3JlXCI7XG5pbXBvcnQge1xuICBlbnN1cmVMYWtlYm94UnVubmluZyxcbiAgZW5zdXJlTGFrZWJveFN0b3BwZWQsXG4gIGxha2Vib3hJZGxlVGltZW91dFNlY29uZHMsXG4gIG5vcm1hbGl6ZUxha2Vib3hTdGF0dXMsXG59IGZyb20gXCJAZGJ4LXRvb2xzL2xha2Vib3gvbGlmZWN5Y2xlXCI7XG5pbXBvcnQge1xuICBpc0xha2Vib3hVbmF2YWlsYWJsZSxcbiAgTGFrZWJveEFwaUVycm9yLFxuICBMYWtlYm94Q2xpZW50LFxuICB0eXBlIExha2Vib3hBdXRoLFxuICB0eXBlIExha2Vib3hFbnRyeSxcbn0gZnJvbSBcIkBkYngtdG9vbHMvbGFrZWJveC9yZXN0XCI7XG5pbXBvcnQgeyBTc2hDb21tYW5kLCBTc2hTZXNzaW9uIH0gZnJvbSBcIkBkYngtdG9vbHMvbGFrZWJveC9zZXNzaW9uXCI7XG5pbXBvcnQgeyBlcnJvclV0aWxzLCBsb2cgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHtcbiAgTEFLRUJPWF9CVUlMVF9JTl9TRVJWSUNFUyxcbiAgbGFrZWJveEJ1aWx0SW5TZXJ2aWNlTmFtZVNjaGVtYSxcbiAgbGFrZWJveENvbW1hbmRSZXF1ZXN0U2NoZW1hLFxuICBsYWtlYm94U2VydmljZUxvZ3NSZXF1ZXN0U2NoZW1hLFxuICB0eXBlIENyZWF0ZUxha2Vib3hTZXJ2aWNlUmVxdWVzdCxcbiAgdHlwZSBMYWtlYm94QnVpbHRJblNlcnZpY2VOYW1lLFxuICB0eXBlIExha2Vib3hDb21tYW5kUmVxdWVzdCxcbiAgdHlwZSBMYWtlYm94TWV0cmljc1Jlc3BvbnNlLFxuICB0eXBlIExha2Vib3hNZXRyaWNzU25hcHNob3QsXG4gIHR5cGUgTGFrZWJveFNlcnZpY2UsXG4gIHR5cGUgTGFrZWJveFNlcnZpY2VMb2dzUmVxdWVzdCxcbiAgdHlwZSBMYWtlYm94U3RhdHVzLFxuICB0eXBlIExha2Vib3hTdW1tYXJ5LFxuICB0eXBlIExha2Vib3hVc2VyLFxufSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtbGFrZWJveFwiO1xuaW1wb3J0IHsgcmVhZFBhY2thZ2VSZXNvdXJjZSB9IGZyb20gXCIuL19wYWNrYWdlLnRzXCI7XG5pbXBvcnQgeyBMYWtlYm94UmVzb3VyY2VSZWdpc3RyeSB9IGZyb20gXCIuL19yZXNvdXJjZS1yZWdpc3RyeS50c1wiO1xuaW1wb3J0IHsgTGFrZWJveFNlcnZpY2VTbmFwc2hvdHMsIHN0b3BwZWRTbmFwc2hvdFNlcnZpY2VzIH0gZnJvbSBcIi4vX3NlcnZpY2Utc25hcHNob3RzLnRzXCI7XG5pbXBvcnQgdHlwZSB7IFJlc29sdmVkTGFrZWJveFBsdWdpbkNvbmZpZyB9IGZyb20gXCIuL2NvbmZpZy50c1wiO1xuaW1wb3J0IHsgTGFrZWJveE1ldHJpY3MgfSBmcm9tIFwiLi9tZXRyaWNzLnRzXCI7XG5pbXBvcnQgeyBMYWtlYm94Um91dGVSZWdpc3RyeSwgdHlwZSBMYWtlYm94Um91dGVSZXNvbHV0aW9uIH0gZnJvbSBcIi4vcm91dGVzLnRzXCI7XG5pbXBvcnQge1xuICBidWlsdEluRGVmaW5pdGlvbixcbiAgaWRsZUJ1aWx0SW5TZXJ2aWNlLFxuICBpbWFnZURlZmluaXRpb24sXG4gIExha2Vib3hDb250cm9sbGVyU2VydmljZVNjaGVtYSxcbiAgc2VydmljZVJvdXRlLFxuICB0b0xha2Vib3hTZXJ2aWNlLFxuICB0eXBlIExha2Vib3hDb250cm9sbGVyRGVmaW5pdGlvbixcbiAgdHlwZSBMYWtlYm94Q29udHJvbGxlclNlcnZpY2UsXG59IGZyb20gXCIuL3NlcnZpY2VzLnRzXCI7XG5pbXBvcnQgeyBMQUtFQk9YX1JVTlRJTUVfUk9PVCwgbGFrZWJveFVzZXIgfSBmcm9tIFwiLi91c2VyLnRzXCI7XG5cbmNvbnN0IEFETUlOX1NDUklQVCA9IHJlYWRQYWNrYWdlUmVzb3VyY2UoXCJzY3JpcHRzXCIsIFwibGFrZWJveC1hZG1pbi5zaFwiKTtcbmNvbnN0IEhFTFBFUlMgPSB7XG4gIFwibGFrZWJveC1zZXJ2aWNlXCI6IHJlYWRQYWNrYWdlUmVzb3VyY2UoXCJzY3JpcHRzXCIsIFwibGFrZWJveC1zZXJ2aWNlLnB5XCIpLFxuICBcImRlc2t0b3Atc2Vzc2lvblwiOiByZWFkUGFja2FnZVJlc291cmNlKFwic2NyaXB0c1wiLCBcImRlc2t0b3Atc2Vzc2lvbi5zaFwiKSxcbiAgXCJkZXNrdG9wLXByZXJlcXVpc2l0ZXNcIjogcmVhZFBhY2thZ2VSZXNvdXJjZShcInNjcmlwdHNcIiwgXCJkZXNrdG9wLXByZXJlcXVpc2l0ZXMuc2hcIiksXG59IGFzIGNvbnN0O1xuY29uc3QgQ09OVFJPTExFUiA9IGAke0xBS0VCT1hfUlVOVElNRV9ST09UfS9iaW4vbGFrZWJveC1zZXJ2aWNlYDtcbmNvbnN0IEVOVFJZX1RUTF9NUyA9IDVfMDAwO1xuY29uc3QgU0VUVVBfVElNRU9VVF9NUyA9IDYwMF8wMDA7XG5jb25zdCBNRVRSSUNTX0xFQVNFX01TID0gNjBfMDAwO1xuY29uc3QgSURMRV9DSEVDS19NUyA9IDMwXzAwMDtcbmNvbnN0IFNTSF9LRVlfT1dORVIgPSBcImFwcC1zZXJ2aWNlLXByaW5jaXBhbFwiO1xuY29uc3QgTEVHQUNZX05BTUUgPVxuICAvXmRieC0oPyFsYWtlYm94LSlbYS16XSstW2Etel0rLVswLTlhLWZdezh9KD86X3VpZF9bQS1aYS16MC05Xy1dK19leHBfWzAtOV0rKT8kLztcbmNvbnN0IExFR0FDWV9TQ0hFTUFfUFJFRklYID0gXCJkYnhfdG9vbHNfZGF0YWJyaWNrc19zYW5kYm94XCI7XG5jb25zdCBsb2dnZXIgPSBsb2cubG9nZ2VyKFwiYXBwa2l0LWxha2Vib3g6cnVudGltZVwiKTtcblxuLyoqIFJlc29sdmVzIHRoZSBhdXRoZW50aWNhdGVkIGlkZW50aXR5IGZvciByYXcgcmVxdWVzdCBoZWFkZXJzLiAqL1xuZXhwb3J0IHR5cGUgTGFrZWJveElkZW50aXR5UmVzb2x2ZXIgPSAoaGVhZGVyczogSW5jb21pbmdIdHRwSGVhZGVycykgPT4gc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4vKiogTWluaW1hbCBMYWtlYmFzZSBwb29sIHVzZWQgdG8gZHJvcCBsZWdhY3kgb3duZXJzaGlwIHNjaGVtYXMuICovXG5leHBvcnQgaW50ZXJmYWNlIExha2Vib3hMZWdhY3lQb29sIHtcbiAgcXVlcnkoc3FsOiBzdHJpbmcsIHZhbHVlcz86IHVua25vd25bXSk6IFByb21pc2U8eyByb3dzOiBBcnJheTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4gfT47XG59XG5cbmludGVyZmFjZSBCb290IHtcbiAga2V5OiBzdHJpbmc7XG4gIGVudHJ5OiBMYWtlYm94RW50cnk7XG4gIHNlc3Npb246IFNzaFNlc3Npb247XG4gIHVzZXJzOiBNYXA8c3RyaW5nLCBQcm9taXNlPHZvaWQ+PjtcbiAgc2VydmljZXM6IE1hcDxzdHJpbmcsIE1hcDxzdHJpbmcsIExha2Vib3hDb250cm9sbGVyU2VydmljZT4+O1xuICBzdGFydGluZzogTWFwPHN0cmluZywgUHJvbWlzZTxMYWtlYm94U2VydmljZT4+O1xuICBkZXNrdG9wPzogUHJvbWlzZTx2b2lkPjtcbn1cblxuaW50ZXJmYWNlIFNlcnZpY2VMaXN0aW5nIHtcbiAgc2VydmljZXM6IExha2Vib3hTZXJ2aWNlW107XG4gIHN0YWxlOiBib29sZWFuO1xuICBvYnNlcnZlZEF0Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE93bnMgdGhlIHNpbmdsZSBsYXppbHkgY3JlYXRlZCBMYWtlYm94IG9mIG9uZSBhcHBsaWNhdGlvbi5cbiAqXG4gKiBFdmVyeSBEYXRhYnJpY2tzIExha2Vib3ggUkVTVCBjYWxsIHVzZXMgdGhlIGFwcCBzZXJ2aWNlIHByaW5jaXBhbCBzdXBwbGllZFxuICogdGhyb3VnaCB7QGxpbmsgaW5pdGlhbGl6ZX07IHJlcXVlc3QgaWRlbnRpdHkgb25seSBzZWxlY3RzIHRoZSBpbnRlcm5hbCBMaW51eFxuICogYWNjb3VudC4gRWFjaCBhdXRoZW50aWNhdGVkIGlkZW50aXR5IG1hcHMgdGhyb3VnaCBvbmUgRk5WLTFhIGhhc2ggdG8gYSBsb2NrZWRcbiAqIGFjY291bnQsIHBlcnNpc3RlbnQgaG9tZSwgcm91dGUgc2VnbWVudCwgYW5kIHNlcnZpY2UgcG9ydHMuIExpZmVjeWNsZSBhbmRcbiAqIHBlci1ib290IGJvb3RzdHJhcCBhcmUgc2VyaWFsaXplZCBpbi1wcm9jZXNzOyB0aGUgcGVyc2lzdGVudCByZXNvdXJjZVxuICogcmVnaXN0cnkgc2VyaWFsaXplcyBmaXJzdCBjcmVhdGlvbiBhY3Jvc3MgcmVwbGljYXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBMYWtlYm94UnVudGltZSB7XG4gIHJlYWRvbmx5IHJvdXRlczogTGFrZWJveFJvdXRlUmVnaXN0cnk7XG4gIHJlYWRvbmx5IG1ldHJpY3M6IExha2Vib3hNZXRyaWNzO1xuICBwcml2YXRlIHJlYWRvbmx5IGtleXM6IFNzaEtleVN0b3JlO1xuICBwcml2YXRlIHJlYWRvbmx5IHN0b3BQYXJlbnRUZXJtaW5hdGlvblNpZ25hbDogKCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSByZWFkb25seSBzaHV0ZG93bkNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIHByaXZhdGUgYXBpPzogTGFrZWJveENsaWVudDtcbiAgcHJpdmF0ZSBpZGVudGl0eTogTGFrZWJveElkZW50aXR5UmVzb2x2ZXIgPSAoKSA9PiB1bmRlZmluZWQ7XG4gIC8qKiBJbi1tZW1vcnkgaWRlbnRpdGllcyBvZiByb3V0ZWQgdXNlcnM7IG5ldmVyIHBlcnNpc3RlZC4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSByb3V0ZWRJZGVudGl0aWVzID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgcHJpdmF0ZSBjYWNoZWQ/OiB7IGVudHJ5PzogTGFrZWJveEVudHJ5OyBhdDogbnVtYmVyIH07XG4gIHByaXZhdGUgYm9vdD86IEJvb3Q7XG4gIC8qKiBMYXN0IGJvb3QgdGhhdCBjb21wbGV0ZWQgcnVudGltZSBib290c3RyYXAgYW5kIHByb2R1Y2VkIGEgbWV0cmljcyBzYW1wbGUuICovXG4gIHByaXZhdGUgcmVhZHlCb290S2V5Pzogc3RyaW5nO1xuICBwcml2YXRlIGNvbnZlcmdpbmc/OiBQcm9taXNlPEJvb3Q+O1xuICBwcml2YXRlIHdha2luZz86IFByb21pc2U8dW5rbm93bj47XG4gIHByaXZhdGUgbWV0cmljc0xlYXNlPzogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD47XG4gIHByaXZhdGUgaWRsZVRpbWVyPzogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0SW50ZXJ2YWw+O1xuICBwcml2YXRlIGxhc3RBY3Rpdml0eSA9IERhdGUubm93KCk7XG4gIHByaXZhdGUgYWN0aXZlQ29tbWFuZHMgPSAwO1xuICAvKiogTGFzdCBzZXJ2aWNlIHN0YXRlcyBwZXIgdXNlciBoYXNoLCBrZXB0IGFmdGVyIGFuIGlkbGUgc2Vzc2lvbiByZWxlYXNlLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGxhc3RTZXJ2aWNlcyA9IG5ldyBNYXA8c3RyaW5nLCBNYXA8c3RyaW5nLCBMYWtlYm94Q29udHJvbGxlclNlcnZpY2U+PigpO1xuICBwcml2YXRlIHJlYWRvbmx5IGxhc3RTZXJ2aWNlc09ic2VydmVkQXQgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICBwcml2YXRlIHJlc291cmNlUmVnaXN0cnk/OiBMYWtlYm94UmVzb3VyY2VSZWdpc3RyeTtcbiAgcHJpdmF0ZSBzZXJ2aWNlU25hcHNob3RzPzogTGFrZWJveFNlcnZpY2VTbmFwc2hvdHM7XG4gIHByaXZhdGUgY2xvc2luZz86IFByb21pc2U8dm9pZD47XG5cbiAgLyoqIENyZWF0ZXMgYSBydW50aW1lIGZyb20gcmVzb2x2ZWQgcGx1Z2luIGNvbmZpZ3VyYXRpb24uICovXG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IGNvbmZpZzogUmVzb2x2ZWRMYWtlYm94UGx1Z2luQ29uZmlnKSB7XG4gICAgdGhpcy5rZXlzID0gbmV3IFNzaEtleVN0b3JlKGNvbmZpZy5rZXlEaXJlY3RvcnkpO1xuICAgIHRoaXMucm91dGVzID0gbmV3IExha2Vib3hSb3V0ZVJlZ2lzdHJ5KGNvbmZpZy5yb3V0ZVByZWZpeCwge1xuICAgICAgdXNlcjogKGhlYWRlcnMpID0+IHtcbiAgICAgICAgY29uc3QgaWRlbnRpdHkgPSB0aGlzLmlkZW50aXR5KGhlYWRlcnMpO1xuICAgICAgICBpZiAoIWlkZW50aXR5KSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCB1c2VyID0gdGhpcy51c2VyKGlkZW50aXR5KTtcbiAgICAgICAgdGhpcy5yb3V0ZWRJZGVudGl0aWVzLnNldCh1c2VyLmhhc2gsIGlkZW50aXR5KTtcbiAgICAgICAgcmV0dXJuIHVzZXI7XG4gICAgICB9LFxuICAgICAgcmVzb2x2ZTogKHVzZXIsIHNlcnZpY2UpID0+IHRoaXMucmVzb2x2ZVJvdXRlKHVzZXIsIHNlcnZpY2UpLFxuICAgICAgdW5hdmFpbGFibGU6ICh1c2VyLCBzZXJ2aWNlKSA9PiB0aGlzLm1hcmtVbmF2YWlsYWJsZSh1c2VyLCBzZXJ2aWNlKSxcbiAgICB9KTtcbiAgICB0aGlzLm1ldHJpY3MgPSBuZXcgTGFrZWJveE1ldHJpY3MoXG4gICAgICAoc2lnbmFsKSA9PiB0aGlzLnJlYWRNZXRyaWNzKHNpZ25hbCksXG4gICAgICBjb25maWcubWV0cmljc0ludGVydmFsU2Vjb25kcyAqIDFfMDAwLFxuICAgICk7XG4gICAgdGhpcy5zdG9wUGFyZW50VGVybWluYXRpb25TaWduYWwgPSBleGVjLm9uUGFyZW50VGVybWluYXRpb25TaWduYWwoKCkgPT5cbiAgICAgIHRoaXMucm91dGVzLmJlZ2luU2h1dGRvd24oKSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFN1cHBsaWVzIGFwcCBzZXJ2aWNlLXByaW5jaXBhbCBjcmVkZW50aWFscyBhbmQgdGhlIHJlcXVlc3QgaWRlbnRpdHlcbiAgICogcmVzb2x2ZXIgdXNlZCBieSByb3V0ZXMuXG4gICAqL1xuICBpbml0aWFsaXplKFxuICAgIGF1dGg6IExha2Vib3hBdXRoLFxuICAgIGlkZW50aXR5PzogTGFrZWJveElkZW50aXR5UmVzb2x2ZXIsXG4gICAgc2VydmljZVNuYXBzaG90cz86IExha2Vib3hTZXJ2aWNlU25hcHNob3RzLFxuICAgIHJlc291cmNlUmVnaXN0cnk/OiBMYWtlYm94UmVzb3VyY2VSZWdpc3RyeSxcbiAgKTogdm9pZCB7XG4gICAgdGhpcy5hcGkgPSBuZXcgTGFrZWJveENsaWVudChhdXRoKTtcbiAgICBpZiAoaWRlbnRpdHkpIHRoaXMuaWRlbnRpdHkgPSBpZGVudGl0eTtcbiAgICBpZiAoc2VydmljZVNuYXBzaG90cykgdGhpcy5zZXJ2aWNlU25hcHNob3RzID0gc2VydmljZVNuYXBzaG90cztcbiAgICBpZiAocmVzb3VyY2VSZWdpc3RyeSkgdGhpcy5yZXNvdXJjZVJlZ2lzdHJ5ID0gcmVzb3VyY2VSZWdpc3RyeTtcbiAgfVxuXG4gIC8qKiBEZXJpdmVzIHRoZSBMYWtlYm94IGFjY291bnQgZm9yIG9uZSBhdXRoZW50aWNhdGVkIGlkZW50aXR5LiAqL1xuICB1c2VyKGlkZW50aXR5OiBzdHJpbmcpOiBMYWtlYm94VXNlciB7XG4gICAgcmV0dXJuIGxha2Vib3hVc2VyKGlkZW50aXR5LCB0aGlzLmNvbmZpZy5yb3V0ZVByZWZpeCk7XG4gIH1cblxuICAvKiogU3VtbWFyaXplcyB0aGUgYXBwIExha2Vib3ggZm9yIG9uZSB1c2VyIHdpdGhvdXQgY3JlYXRpbmcgaXQuICovXG4gIGFzeW5jIHN1bW1hcnkoaWRlbnRpdHk6IHN0cmluZywgc2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPExha2Vib3hTdW1tYXJ5PiB7XG4gICAgY29uc3QgdXNlciA9IHRoaXMudXNlcihpZGVudGl0eSk7XG4gICAgY29uc3QgYmFzZSA9IHsgYXV0bzogdGhpcy5jb25maWcuYXV0bywgbmFtZTogXCJMYWtlYm94XCIsIHVzZXIgfTtcbiAgICBsZXQgZW50cnk6IExha2Vib3hFbnRyeSB8IHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgZW50cnkgPSBhd2FpdCB0aGlzLmVudHJ5KHNpZ25hbCwgdHJ1ZSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChpc0xha2Vib3hVbmF2YWlsYWJsZShlcnJvcikpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5iYXNlLFxuICAgICAgICAgIHN1cHBvcnRlZDogZmFsc2UsXG4gICAgICAgICAgc3RhdHVzOiBcIm1pc3NpbmdcIixcbiAgICAgICAgICBzZXJ2aWNlczogW10sXG4gICAgICAgICAgc2VydmljZXNTdGFsZTogZmFsc2UsXG4gICAgICAgICAgY2FuU3RhcnQ6IGZhbHNlLFxuICAgICAgICAgIGNhblN0b3A6IGZhbHNlLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICAgIGNvbnN0IHBsYXRmb3JtU3RhdHVzOiBMYWtlYm94U3RhdHVzID0gZW50cnkgPyBub3JtYWxpemVMYWtlYm94U3RhdHVzKGVudHJ5LnN0YXR1cykgOiBcIm1pc3NpbmdcIjtcbiAgICBjb25zdCBzdGF0dXMgPSB0aGlzLnByb2R1Y3RTdGF0dXMoZW50cnksIHBsYXRmb3JtU3RhdHVzKTtcbiAgICBpZiAoZW50cnkgJiYgcGxhdGZvcm1TdGF0dXMgPT09IFwicnVubmluZ1wiICYmIHN0YXR1cyA9PT0gXCJzdGFydGluZ1wiKSB7XG4gICAgICB0aGlzLndha2UoKCkgPT4gdGhpcy5yZWFkeSgpKTtcbiAgICB9XG4gICAgY29uc3QgbGlzdGluZyA9IGF3YWl0IHRoaXMuc2VydmljZUxpc3RpbmcoaWRlbnRpdHksIHVzZXIsIGVudHJ5LCBzdGF0dXMsIHNpZ25hbCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmJhc2UsXG4gICAgICBzdXBwb3J0ZWQ6IHRydWUsXG4gICAgICBzdGF0dXMsXG4gICAgICAuLi4oZW50cnkgPyB7IGlkOiBlbnRyeS5zYW5kYm94SWQgfSA6IHt9KSxcbiAgICAgIC4uLihsYWtlYm94SWRsZVRpbWVvdXRTZWNvbmRzKGVudHJ5Py5pZGxlVGltZW91dCkgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IHsgaWRsZVRpbWVvdXRTZWNvbmRzOiBsYWtlYm94SWRsZVRpbWVvdXRTZWNvbmRzKGVudHJ5Py5pZGxlVGltZW91dCkgfVxuICAgICAgICA6IHt9KSxcbiAgICAgIHNlcnZpY2VzOiBsaXN0aW5nLnNlcnZpY2VzLFxuICAgICAgc2VydmljZXNTdGFsZTogbGlzdGluZy5zdGFsZSxcbiAgICAgIC4uLihsaXN0aW5nLm9ic2VydmVkQXQgPyB7IHNlcnZpY2VzT2JzZXJ2ZWRBdDogbGlzdGluZy5vYnNlcnZlZEF0IH0gOiB7fSksXG4gICAgICBjYW5TdGFydDogc3RhdHVzICE9PSBcInJ1bm5pbmdcIiAmJiBzdGF0dXMgIT09IFwic3RhcnRpbmdcIixcbiAgICAgIGNhblN0b3A6IHN0YXR1cyA9PT0gXCJydW5uaW5nXCIgfHwgc3RhdHVzID09PSBcInN0YXJ0aW5nXCIsXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBDcmVhdGVzIHRoZSBMYWtlYm94IHdoZW4gbmVlZGVkLCBzdGFydHMgaXQsIGFuZCByZXN0b3JlcyBzYXZlZCBzZXJ2aWNlcy4gKi9cbiAgYXN5bmMgc3RhcnQoc2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnJlYWR5KHNpZ25hbCwgdHJ1ZSk7XG4gIH1cblxuICAvKiogU3RvcHMgdGhlIHNoYXJlZCBMYWtlYm94IGZvciBldmVyeSB1c2VyLiBGaWxlcyBhbmQgc2F2ZWQgc2VydmljZXMgcGVyc2lzdC4gKi9cbiAgYXN5bmMgc3RvcChzaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGVudHJ5ID0gYXdhaXQgdGhpcy5lbnRyeShzaWduYWwsIHRydWUpO1xuICAgIGlmICghZW50cnkpIHJldHVybjtcbiAgICBhd2FpdCB0aGlzLmRpc2NhcmRCb290KCk7XG4gICAgYXdhaXQgZW5zdXJlTGFrZWJveFN0b3BwZWQodGhpcy5jbGllbnQoKSwgZW50cnksIHNpZ25hbCk7XG4gICAgdGhpcy5jYWNoZWQgPSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKiogUGVybWFuZW50bHkgZGVsZXRlcyB0aGUgbWFuYWdlZCBMYWtlYm94IGFuZCBldmVyeSB1c2VyJ3MgZmlsZXMuICovXG4gIGFzeW5jIGRlbGV0ZShzaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGVudHJ5ID0gYXdhaXQgdGhpcy5lbnRyeShzaWduYWwsIHRydWUpO1xuICAgIGlmICghZW50cnkpIHJldHVybiBmYWxzZTtcbiAgICBhd2FpdCB0aGlzLmRpc2NhcmRCb290KCk7XG4gICAgYXdhaXQgdGhpcy5jbGllbnQoKS5kZWxldGUoZW50cnkuc2FuZGJveElkLCBzaWduYWwpO1xuICAgIGF3YWl0IHRoaXMucmVzb3VyY2VzKCkuY2xlYXIodGhpcy5jbGllbnQoKSk7XG4gICAgdGhpcy5yZWFkeUJvb3RLZXkgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5jYWNoZWQgPSB7IGF0OiBEYXRlLm5vdygpIH07XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogUnVucyBvbmUgY29tbWFuZCBhcyB0aGUgdXNlcidzIGFjY291bnQsIGNyZWF0aW5nIG9yIHN0YXJ0aW5nIHRoZSBMYWtlYm94XG4gICAqIHdoZW4gYGF1dG9gIGlzIGVuYWJsZWQuXG4gICAqL1xuICBleGVjdXRlKGlkZW50aXR5OiBzdHJpbmcsIGlucHV0OiBMYWtlYm94Q29tbWFuZFJlcXVlc3QsIHNpZ25hbD86IEFib3J0U2lnbmFsKTogU3NoQ29tbWFuZCB7XG4gICAgY29uc3QgcmVxdWVzdCA9IGxha2Vib3hDb21tYW5kUmVxdWVzdFNjaGVtYS5wYXJzZShpbnB1dCk7XG4gICAgY29uc3QgdGltZW91dE1zID0gcmVxdWVzdC50aW1lb3V0TXMgPz8gdGhpcy5jb25maWcuY29tbWFuZFRpbWVvdXRNcztcbiAgICBjb25zdCB1c2VyID0gdGhpcy51c2VyKGlkZW50aXR5KTtcbiAgICByZXR1cm4gbmV3IFNzaENvbW1hbmQoXG4gICAgICByZXF1ZXN0LmNvbW1hbmQsXG4gICAgICByZXF1ZXN0LmFyZ3MsXG4gICAgICB7IHRpbWVvdXRNcywgc2lnbmFsIH0sXG4gICAgICBhc3luYyAoZXhlY3V0aW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IGJvb3QgPSBhd2FpdCB0aGlzLnJlYWR5VXNlcih1c2VyLCBpZGVudGl0eSwgZXhlY3V0aW9uLnNpZ25hbCk7XG4gICAgICAgIHRoaXMuYWN0aXZlQ29tbWFuZHMgKz0gMTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gYXdhaXQgZXhlY3V0aW9uLmZvbGxvdyhcbiAgICAgICAgICAgIGJvb3Quc2Vzc2lvbi5leGVjdXRlKHJlcXVlc3QuY29tbWFuZCwgcmVxdWVzdC5hcmdzLCB7XG4gICAgICAgICAgICAgIHVzZXIsXG4gICAgICAgICAgICAgIC4uLihyZXF1ZXN0LmN3ZCA/IHsgY3dkOiByZXF1ZXN0LmN3ZCB9IDoge30pLFxuICAgICAgICAgICAgICAuLi4ocmVxdWVzdC5lbnYgPyB7IGVudjogcmVxdWVzdC5lbnYgfSA6IHt9KSxcbiAgICAgICAgICAgICAgdGltZW91dE1zLFxuICAgICAgICAgICAgICBzaWduYWw6IGV4ZWN1dGlvbi5zaWduYWwsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHRoaXMuYWN0aXZlQ29tbWFuZHMgLT0gMTtcbiAgICAgICAgICB0aGlzLnRvdWNoKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBMaXN0cyB0aGUgdXNlcidzIHNlcnZpY2VzLCBpbmNsdWRpbmcgaWRsZSBidWlsdC1pbnMuIE5ldmVyIGNyZWF0ZXMgdGhlIExha2Vib3guICovXG4gIGFzeW5jIGxpc3RTZXJ2aWNlcyhpZGVudGl0eTogc3RyaW5nLCBzaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8TGFrZWJveFNlcnZpY2VbXT4ge1xuICAgIGNvbnN0IHVzZXIgPSB0aGlzLnVzZXIoaWRlbnRpdHkpO1xuICAgIGNvbnN0IGVudHJ5ID0gYXdhaXQgdGhpcy5lbnRyeShzaWduYWwpO1xuICAgIGNvbnN0IHN0YXR1czogTGFrZWJveFN0YXR1cyA9IGVudHJ5ID8gbm9ybWFsaXplTGFrZWJveFN0YXR1cyhlbnRyeS5zdGF0dXMpIDogXCJtaXNzaW5nXCI7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLnNlcnZpY2VMaXN0aW5nKGlkZW50aXR5LCB1c2VyLCBlbnRyeSwgc3RhdHVzLCBzaWduYWwpKS5zZXJ2aWNlcztcbiAgfVxuXG4gIC8qKiBDcmVhdGVzIG9yIHJlcGxhY2VzIG9uZSBpbWFnZSBzZXJ2aWNlIGFuZCB3YWl0cyB1bnRpbCBpdCBpcyByZWFkeSBvciBmYWlsZWQuICovXG4gIGFzeW5jIGNyZWF0ZVNlcnZpY2UoXG4gICAgaWRlbnRpdHk6IHN0cmluZyxcbiAgICBpbnB1dDogQ3JlYXRlTGFrZWJveFNlcnZpY2VSZXF1ZXN0LFxuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuICApOiBQcm9taXNlPExha2Vib3hTZXJ2aWNlPiB7XG4gICAgY29uc3QgdXNlciA9IHRoaXMudXNlcihpZGVudGl0eSk7XG4gICAgY29uc3QgZGVmaW5pdGlvbiA9IGltYWdlRGVmaW5pdGlvbihpbnB1dCwgdXNlcik7XG4gICAgY29uc3QgYm9vdCA9IGF3YWl0IHRoaXMucmVhZHlVc2VyKHVzZXIsIGlkZW50aXR5LCBzaWduYWwpO1xuICAgIGF3YWl0IHRoaXMuY29udHJvbGxlcihib290LCB1c2VyLCBcInB1dFwiLCBbZW5jb2RlKGRlZmluaXRpb24pXSwgc2lnbmFsKTtcbiAgICByZXR1cm4gdGhpcy5ydW5TZXJ2aWNlKGJvb3QsIHVzZXIsIGRlZmluaXRpb24sIHNpZ25hbCk7XG4gIH1cblxuICAvKiogU3RhcnRzIGEgc2F2ZWQgc2VydmljZSBvciBhIGJ1aWx0LWluIGFuZCB3YWl0cyB1bnRpbCBpdCBpcyByZWFkeSBvciBmYWlsZWQuICovXG4gIGFzeW5jIHN0YXJ0U2VydmljZShcbiAgICBpZGVudGl0eTogc3RyaW5nLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbCxcbiAgKTogUHJvbWlzZTxMYWtlYm94U2VydmljZT4ge1xuICAgIGNvbnN0IHVzZXIgPSB0aGlzLnVzZXIoaWRlbnRpdHkpO1xuICAgIGNvbnN0IGJvb3QgPSBhd2FpdCB0aGlzLnJlYWR5VXNlcih1c2VyLCBpZGVudGl0eSwgc2lnbmFsKTtcbiAgICBjb25zdCBidWlsdEluID0gbGFrZWJveEJ1aWx0SW5TZXJ2aWNlTmFtZVNjaGVtYS5zYWZlUGFyc2UobmFtZSk7XG4gICAgaWYgKGJ1aWx0SW4uc3VjY2Vzcykge1xuICAgICAgY29uc3QgZGVmaW5pdGlvbiA9IGJ1aWx0SW5EZWZpbml0aW9uKGJ1aWx0SW4uZGF0YSwgdXNlcik7XG4gICAgICBhd2FpdCB0aGlzLmNvbnRyb2xsZXIoYm9vdCwgdXNlciwgXCJwdXRcIiwgW2VuY29kZShkZWZpbml0aW9uKV0sIHNpZ25hbCk7XG4gICAgICByZXR1cm4gdGhpcy5ydW5TZXJ2aWNlKGJvb3QsIHVzZXIsIGRlZmluaXRpb24sIHNpZ25hbCk7XG4gICAgfVxuICAgIGNvbnN0IHNhdmVkID0gKGF3YWl0IHRoaXMucmVmcmVzaFNlcnZpY2VzKGJvb3QsIHVzZXIsIGlkZW50aXR5LCBzaWduYWwpKS5nZXQobmFtZSk7XG4gICAgaWYgKCFzYXZlZCkgdGhyb3cgbmV3IEVycm9yKGBMYWtlYm94IHNlcnZpY2UgJHtuYW1lfSBkb2VzIG5vdCBleGlzdGApO1xuICAgIHJldHVybiB0aGlzLnJ1blNlcnZpY2UoYm9vdCwgdXNlciwgc2F2ZWQuZGVmaW5pdGlvbiwgc2lnbmFsKTtcbiAgfVxuXG4gIC8qKiBTdG9wcyBvbmUgcnVubmluZyBzZXJ2aWNlIHdpdGhvdXQgcmVtb3ZpbmcgaXRzIGRlZmluaXRpb24uICovXG4gIGFzeW5jIHN0b3BTZXJ2aWNlKGlkZW50aXR5OiBzdHJpbmcsIG5hbWU6IHN0cmluZywgc2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPExha2Vib3hTZXJ2aWNlPiB7XG4gICAgY29uc3QgdXNlciA9IHRoaXMudXNlcihpZGVudGl0eSk7XG4gICAgY29uc3QgYm9vdCA9IGF3YWl0IHRoaXMucmVhZHlVc2VyKHVzZXIsIGlkZW50aXR5LCBzaWduYWwpO1xuICAgIGNvbnN0IHN0b3BwZWQgPSBMYWtlYm94Q29udHJvbGxlclNlcnZpY2VTY2hlbWEucGFyc2UoXG4gICAgICBhd2FpdCB0aGlzLmNvbnRyb2xsZXIoYm9vdCwgdXNlciwgXCJzdG9wXCIsIFtuYW1lXSwgc2lnbmFsKSxcbiAgICApO1xuICAgIHRoaXMuY2FjaGVTZXJ2aWNlKGJvb3QsIHVzZXIsIHN0b3BwZWQpO1xuICAgIHJldHVybiB0b0xha2Vib3hTZXJ2aWNlKHN0b3BwZWQsIHVzZXIsIHRoaXMuY29uZmlnLnJvdXRlUHJlZml4KTtcbiAgfVxuXG4gIC8qKiBTdG9wcyBhbmQgZGVsZXRlcyBvbmUgc2F2ZWQgc2VydmljZS4gTW91bnRlZCBob21lIGRpcmVjdG9yaWVzIGFyZSBwcmVzZXJ2ZWQuICovXG4gIGFzeW5jIHJlbW92ZVNlcnZpY2UoaWRlbnRpdHk6IHN0cmluZywgbmFtZTogc3RyaW5nLCBzaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHVzZXIgPSB0aGlzLnVzZXIoaWRlbnRpdHkpO1xuICAgIGNvbnN0IGJvb3QgPSBhd2FpdCB0aGlzLnJlYWR5VXNlcih1c2VyLCBpZGVudGl0eSwgc2lnbmFsKTtcbiAgICBjb25zdCByZXN1bHQgPSAoYXdhaXQgdGhpcy5jb250cm9sbGVyKGJvb3QsIHVzZXIsIFwicmVtb3ZlXCIsIFtuYW1lXSwgc2lnbmFsKSkgYXMge1xuICAgICAgcmVtb3ZlZD86IGJvb2xlYW47XG4gICAgfTtcbiAgICBpZiAocmVzdWx0LnJlbW92ZWQgPT09IHRydWUpIGF3YWl0IHRoaXMucmVmcmVzaFNlcnZpY2VzKGJvb3QsIHVzZXIsIGlkZW50aXR5LCBzaWduYWwpO1xuICAgIHJldHVybiByZXN1bHQucmVtb3ZlZCA9PT0gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBSZWFkcyBhIGJvdW5kZWQgdGFpbCBvZiBvbmUgc2VydmljZSBsb2cuICovXG4gIGFzeW5jIHNlcnZpY2VMb2dzKFxuICAgIGlkZW50aXR5OiBzdHJpbmcsXG4gICAgaW5wdXQ6IExha2Vib3hTZXJ2aWNlTG9nc1JlcXVlc3QsXG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4gICk6IFByb21pc2U8eyBsb2c6IHN0cmluZyB9PiB7XG4gICAgY29uc3QgcmVxdWVzdCA9IGxha2Vib3hTZXJ2aWNlTG9nc1JlcXVlc3RTY2hlbWEucGFyc2UoaW5wdXQpO1xuICAgIGNvbnN0IHVzZXIgPSB0aGlzLnVzZXIoaWRlbnRpdHkpO1xuICAgIGNvbnN0IGVudHJ5ID0gYXdhaXQgdGhpcy5lbnRyeShzaWduYWwpO1xuICAgIGlmICghZW50cnkgfHwgbm9ybWFsaXplTGFrZWJveFN0YXR1cyhlbnRyeS5zdGF0dXMpICE9PSBcInJ1bm5pbmdcIikgcmV0dXJuIHsgbG9nOiBcIlwiIH07XG4gICAgY29uc3QgYm9vdCA9IGF3YWl0IHRoaXMucmVhZHlVc2VyKHVzZXIsIGlkZW50aXR5LCBzaWduYWwpO1xuICAgIGNvbnN0IHJlc3VsdCA9IChhd2FpdCB0aGlzLmNvbnRyb2xsZXIoXG4gICAgICBib290LFxuICAgICAgdXNlcixcbiAgICAgIFwibG9nc1wiLFxuICAgICAgW3JlcXVlc3QubmFtZSwgU3RyaW5nKHJlcXVlc3QubWF4TGluZXMpLCBTdHJpbmcocmVxdWVzdC5tYXhDaGFycyldLFxuICAgICAgc2lnbmFsLFxuICAgICkpIGFzIHsgbG9nPzogc3RyaW5nIH07XG4gICAgcmV0dXJuIHsgbG9nOiByZXN1bHQubG9nID8/IFwiXCIgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHJlY2VudCBtZXRyaWNzIGFuZCBrZWVwcyBzYW1wbGluZyBmb3Igb25lIGxlYXNlIGludGVydmFsLiBTYW1wbGluZ1xuICAgKiBydW5zIG9ubHkgd2hpbGUgdGhlIExha2Vib3ggcnVucyBhbmQgYSBjYWxsZXIgaXMgd2F0Y2hpbmcsIHNvIG1ldHJpY3MgbmV2ZXJcbiAgICoga2VlcCBhbiBvdGhlcndpc2UgaWRsZSBMYWtlYm94IGF3YWtlLlxuICAgKi9cbiAgYXN5bmMgbWV0cmljc1Jlc3BvbnNlKHNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxMYWtlYm94TWV0cmljc1Jlc3BvbnNlPiB7XG4gICAgY29uc3QgZW50cnkgPSBhd2FpdCB0aGlzLmVudHJ5KHNpZ25hbCk7XG4gICAgY29uc3QgcGxhdGZvcm1TdGF0dXM6IExha2Vib3hTdGF0dXMgPSBlbnRyeSA/IG5vcm1hbGl6ZUxha2Vib3hTdGF0dXMoZW50cnkuc3RhdHVzKSA6IFwibWlzc2luZ1wiO1xuICAgIGlmIChwbGF0Zm9ybVN0YXR1cyAhPT0gXCJydW5uaW5nXCIpIHtcbiAgICAgIHRoaXMubWV0cmljcy5zdG9wKCk7XG4gICAgICByZXR1cm4geyBzdGF0dXM6IHBsYXRmb3JtU3RhdHVzLCBzZXJpZXM6IFtdIH07XG4gICAgfVxuICAgIGlmICghZW50cnkgfHwgIXRoaXMuYm9vdCB8fCB0aGlzLmJvb3Qua2V5ICE9PSB0aGlzLmJvb3RLZXkoZW50cnkpKSB7XG4gICAgICB0aGlzLm1ldHJpY3Muc3RvcCgpO1xuICAgICAgdGhpcy53YWtlKCgpID0+IHRoaXMucmVhZHkoKSk7XG4gICAgICByZXR1cm4geyBzdGF0dXM6IFwic3RhcnRpbmdcIiwgc2VyaWVzOiBbXSB9O1xuICAgIH1cbiAgICB0aGlzLmxlYXNlTWV0cmljcygpO1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IHRoaXMucHJvZHVjdFN0YXR1cyhlbnRyeSwgcGxhdGZvcm1TdGF0dXMpLFxuICAgICAgc2VyaWVzOiBbLi4udGhpcy5tZXRyaWNzLnNlcmllcygpXSxcbiAgICB9O1xuICB9XG5cbiAgLyoqIFN1YnNjcmliZXMgdG8gbWV0cmljcyBzbmFwc2hvdHMgd2hpbGUgdGhlIExha2Vib3ggcnVucy4gKi9cbiAgc3Vic2NyaWJlTWV0cmljcyhsaXN0ZW5lcjogKHNuYXBzaG90OiBMYWtlYm94TWV0cmljc1NuYXBzaG90KSA9PiB2b2lkKTogKCkgPT4gdm9pZCB7XG4gICAgdGhpcy5tZXRyaWNzLm9uKFwic25hcHNob3RcIiwgbGlzdGVuZXIpO1xuICAgIGlmICh0aGlzLmJvb3Q/LmtleSA9PT0gdGhpcy5yZWFkeUJvb3RLZXkpIHRoaXMubWV0cmljcy5zdGFydCgpO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB0aGlzLm1ldHJpY3Mub2ZmKFwic25hcHNob3RcIiwgbGlzdGVuZXIpO1xuICAgICAgdGhpcy5sZWFzZU1ldHJpY3MoKTtcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgbGVnYWN5IHBlci11c2VyIExha2Vib3hlcyBhbmQgZHJvcHMgbGVnYWN5IG93bmVyc2hpcCBzY2hlbWFzLlxuICAgKlxuICAgKiBUaGVyZSBpcyBubyBtaWdyYXRpb246IHRoZSBlYXJsaWVyIG9uZS1tYWNoaW5lLXBlci11c2VyIG1vZGVsIGlzIHJlbW92ZWQuXG4gICAqIFRoZSBtYW5hZ2VkIGFwcCBMYWtlYm94IGFuZCBMYWtlYm94ZXMgd2l0aCBvdGhlciBuYW1lcyBhcmUgbmV2ZXIgdG91Y2hlZC5cbiAgICovXG4gIGFzeW5jIGNsZWFudXBMZWdhY3kocG9vbD86IExha2Vib3hMZWdhY3lQb29sLCBzaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBlbnRyaWVzID0gYXdhaXQgdGhpcy5jbGllbnQoKS5saXN0KHNpZ25hbCk7XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgZW50cmllc1xuICAgICAgICAgIC5maWx0ZXIoKGVudHJ5KSA9PiBlbnRyeS5uYW1lICYmIExFR0FDWV9OQU1FLnRlc3QoZW50cnkubmFtZSkpXG4gICAgICAgICAgLm1hcChhc3luYyAoZW50cnkpID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2xpZW50KCkuZGVsZXRlKGVudHJ5LnNhbmRib3hJZCwgc2lnbmFsKTtcbiAgICAgICAgICAgIGxvZ2dlci5pbmZvKFwiZGVsZXRlZCBsZWdhY3kgcGVyLXVzZXIgTGFrZWJveFwiLCB7XG4gICAgICAgICAgICAgIGlkOiBlbnRyeS5zYW5kYm94SWQsXG4gICAgICAgICAgICAgIG5hbWU6IGVudHJ5Lm5hbWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICghaXNMYWtlYm94VW5hdmFpbGFibGUoZXJyb3IpKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKFwibGVnYWN5IExha2Vib3ggY2xlYW51cCBmYWlsZWRcIiwgeyBlcnJvcjogZXJyb3JVdGlscy50b0Vycm9yKGVycm9yKSB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFwb29sKSByZXR1cm47XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHNjaGVtYXMgPSBhd2FpdCBwb29sLnF1ZXJ5KFxuICAgICAgICBcIlNFTEVDVCBuc3BuYW1lIEZST00gcGdfbmFtZXNwYWNlIFdIRVJFIG5zcG5hbWUgPSAkMSBPUiBzdGFydHNfd2l0aChuc3BuYW1lLCAkMilcIixcbiAgICAgICAgW0xFR0FDWV9TQ0hFTUFfUFJFRklYLCBgJHtMRUdBQ1lfU0NIRU1BX1BSRUZJWH1fYF0sXG4gICAgICApO1xuICAgICAgZm9yIChjb25zdCByb3cgb2Ygc2NoZW1hcy5yb3dzKSB7XG4gICAgICAgIGNvbnN0IHNjaGVtYSA9IFN0cmluZyhyb3cubnNwbmFtZSk7XG4gICAgICAgIGF3YWl0IHBvb2wucXVlcnkoYERST1AgU0NIRU1BIElGIEVYSVNUUyBcIiR7c2NoZW1hLnJlcGxhY2VBbGwoJ1wiJywgJ1wiXCInKX1cIiBDQVNDQURFYCk7XG4gICAgICAgIGxvZ2dlci5pbmZvKFwiZHJvcHBlZCBsZWdhY3kgTGFrZWJveCBvd25lcnNoaXAgc2NoZW1hXCIsIHsgc2NoZW1hIH0pO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIud2FybihcImxlZ2FjeSBvd25lcnNoaXAgc2NoZW1hIGNsZWFudXAgZmFpbGVkXCIsIHsgZXJyb3I6IGVycm9yVXRpbHMudG9FcnJvcihlcnJvcikgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqIENhbmNlbHMgaW4tZmxpZ2h0IHdvcmsgYmVmb3JlIHRlYXJkb3duLiAqL1xuICBhYm9ydEFjdGl2ZU9wZXJhdGlvbnMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnNodXRkb3duQ29udHJvbGxlci5zaWduYWwuYWJvcnRlZCkgdGhpcy5zaHV0ZG93bkNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgfVxuXG4gIC8qKiBDbG9zZXMgcm91dGVzLCBtZXRyaWNzLCBhbmQgdGhlIFNTSCBzZXNzaW9uIHdpdGhvdXQgY2hhbmdpbmcgdGhlIExha2Vib3guICovXG4gIGNsb3NlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuYWJvcnRBY3RpdmVPcGVyYXRpb25zKCk7XG4gICAgdGhpcy5yb3V0ZXMuYmVnaW5TaHV0ZG93bigpO1xuICAgIHRoaXMuY2xvc2luZyA/Pz0gKGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICh0aGlzLm1ldHJpY3NMZWFzZSkgY2xlYXJUaW1lb3V0KHRoaXMubWV0cmljc0xlYXNlKTtcbiAgICAgICAgdGhpcy5tZXRyaWNzLnN0b3AoKTtcbiAgICAgICAgYXdhaXQgdGhpcy5yb3V0ZXMuY2xvc2UoKTtcbiAgICAgICAgYXdhaXQgdGhpcy5ib290Py5zZXNzaW9uLmNsb3NlKCk7XG4gICAgICAgIHRoaXMuYm9vdCA9IHVuZGVmaW5lZDtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuc3RvcFBhcmVudFRlcm1pbmF0aW9uU2lnbmFsKCk7XG4gICAgICB9XG4gICAgfSkoKTtcbiAgICByZXR1cm4gdGhpcy5jbG9zaW5nO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGllbnQoKTogTGFrZWJveENsaWVudCB7XG4gICAgaWYgKCF0aGlzLmFwaSkgdGhyb3cgbmV3IEVycm9yKFwiVGhlIExha2Vib3ggcnVudGltZSBoYXMgbm8gYXBwIHNlcnZpY2UtcHJpbmNpcGFsIGNyZWRlbnRpYWxzXCIpO1xuICAgIHJldHVybiB0aGlzLmFwaTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb3VyY2VzKCk6IExha2Vib3hSZXNvdXJjZVJlZ2lzdHJ5IHtcbiAgICBpZiAoIXRoaXMucmVzb3VyY2VSZWdpc3RyeSkgdGhyb3cgbmV3IEVycm9yKFwiVGhlIExha2Vib3ggcnVudGltZSBoYXMgbm8gcmVzb3VyY2UgcmVnaXN0cnlcIik7XG4gICAgcmV0dXJuIHRoaXMucmVzb3VyY2VSZWdpc3RyeTtcbiAgfVxuXG4gIC8qKiBSZXR1cm5zIHRoZSBtYW5hZ2VkIExha2Vib3ggZW50cnksIGNhY2hlZCBicmllZmx5IHRvIGtlZXAgcm91dGVzIGNoZWFwLiAqL1xuICBwcml2YXRlIGFzeW5jIGVudHJ5KHNpZ25hbD86IEFib3J0U2lnbmFsLCBmcmVzaCA9IGZhbHNlKTogUHJvbWlzZTxMYWtlYm94RW50cnkgfCB1bmRlZmluZWQ+IHtcbiAgICBpZiAoIWZyZXNoICYmIHRoaXMuY2FjaGVkICYmIERhdGUubm93KCkgLSB0aGlzLmNhY2hlZC5hdCA8IEVOVFJZX1RUTF9NUykge1xuICAgICAgcmV0dXJuIHRoaXMuY2FjaGVkLmVudHJ5O1xuICAgIH1cbiAgICBjb25zdCBlbnRyeSA9IGF3YWl0IHRoaXMucmVzb3VyY2VzKCkucmVhZCh0aGlzLmNsaWVudCgpLCBzaWduYWwpO1xuICAgIHRoaXMuY2FjaGVkID0geyAuLi4oZW50cnkgPyB7IGVudHJ5IH0gOiB7fSksIGF0OiBEYXRlLm5vdygpIH07XG4gICAgaWYgKCFlbnRyeSB8fCBub3JtYWxpemVMYWtlYm94U3RhdHVzKGVudHJ5LnN0YXR1cykgIT09IFwicnVubmluZ1wiKSB7XG4gICAgICB0aGlzLnJlYWR5Qm9vdEtleSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKHRoaXMuYm9vdCAmJiAoIWVudHJ5IHx8IHRoaXMuYm9vdEtleShlbnRyeSkgIT09IHRoaXMuYm9vdC5rZXkpKSBhd2FpdCB0aGlzLmRpc2NhcmRCb290KCk7XG4gICAgcmV0dXJuIGVudHJ5O1xuICB9XG5cbiAgcHJpdmF0ZSBib290S2V5KGVudHJ5OiBMYWtlYm94RW50cnkpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtlbnRyeS5zYW5kYm94SWR9XFwwJHtlbnRyeS5sYXN0U3RhcnRUaW1lID8/IFwiXCJ9YDtcbiAgfVxuXG4gIHByaXZhdGUgcHJvZHVjdFN0YXR1cyhlbnRyeTogTGFrZWJveEVudHJ5IHwgdW5kZWZpbmVkLCBzdGF0dXM6IExha2Vib3hTdGF0dXMpOiBMYWtlYm94U3RhdHVzIHtcbiAgICByZXR1cm4gZW50cnkgJiYgc3RhdHVzID09PSBcInJ1bm5pbmdcIiAmJiB0aGlzLnJlYWR5Qm9vdEtleSAhPT0gdGhpcy5ib290S2V5KGVudHJ5KVxuICAgICAgPyBcInN0YXJ0aW5nXCJcbiAgICAgIDogc3RhdHVzO1xuICB9XG5cbiAgLyoqIFNlcmlhbGl6ZXMgY3JlYXRlLCBzdGFydCwgY29ubmVjdCwgYW5kIGJvb3RzdHJhcCBmb3IgdGhlIGN1cnJlbnQgYm9vdC4gKi9cbiAgcHJpdmF0ZSByZWFkeShzaWduYWw/OiBBYm9ydFNpZ25hbCwgZXhwbGljaXQgPSBmYWxzZSk6IFByb21pc2U8Qm9vdD4ge1xuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmJvb3Q7XG4gICAgaWYgKGN1cnJlbnQgJiYgdGhpcy5jYWNoZWQ/LmVudHJ5ICYmIHRoaXMuYm9vdEtleSh0aGlzLmNhY2hlZC5lbnRyeSkgPT09IGN1cnJlbnQua2V5KSB7XG4gICAgICBpZiAoRGF0ZS5ub3coKSAtIHRoaXMuY2FjaGVkLmF0IDwgRU5UUllfVFRMX01TKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGN1cnJlbnQpO1xuICAgIH1cbiAgICB0aGlzLmNvbnZlcmdpbmcgPz89IHRoaXMuY29udmVyZ2Uoc2lnbmFsLCBleHBsaWNpdCkuZmluYWxseSgoKSA9PiB7XG4gICAgICB0aGlzLmNvbnZlcmdpbmcgPSB1bmRlZmluZWQ7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuY29udmVyZ2luZztcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY29udmVyZ2Uoc2lnbmFsOiBBYm9ydFNpZ25hbCB8IHVuZGVmaW5lZCwgZXhwbGljaXQ6IGJvb2xlYW4pOiBQcm9taXNlPEJvb3Q+IHtcbiAgICBjb25zdCBvcGVyYXRpb25TaWduYWwgPSBzaWduYWxcbiAgICAgID8gQWJvcnRTaWduYWwuYW55KFtzaWduYWwsIHRoaXMuc2h1dGRvd25Db250cm9sbGVyLnNpZ25hbF0pXG4gICAgICA6IHRoaXMuc2h1dGRvd25Db250cm9sbGVyLnNpZ25hbDtcbiAgICBsZXQgZW50cnkgPSBhd2FpdCB0aGlzLmVudHJ5KG9wZXJhdGlvblNpZ25hbCwgdHJ1ZSk7XG4gICAgaWYgKCFlbnRyeSB8fCBub3JtYWxpemVMYWtlYm94U3RhdHVzKGVudHJ5LnN0YXR1cykgIT09IFwicnVubmluZ1wiKSB7XG4gICAgICBpZiAoIXRoaXMuY29uZmlnLmF1dG8gJiYgIWV4cGxpY2l0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgTGFrZWJveCBpcyAke2VudHJ5ID8gZW50cnkuc3RhdHVzIDogXCJub3QgY3JlYXRlZFwifTsgc3RhcnQgaXQgZXhwbGljaXRseSBiZWNhdXNlIGF1dG8gaXMgZmFsc2VgLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBlbnRyeSA/Pz0gYXdhaXQgdGhpcy5yZXNvdXJjZXMoKS5nZXRPckNyZWF0ZSh0aGlzLmNsaWVudCgpLCBvcGVyYXRpb25TaWduYWwpO1xuICAgIGlmIChsYWtlYm94SWRsZVRpbWVvdXRTZWNvbmRzKGVudHJ5LmlkbGVUaW1lb3V0KSAhPT0gdGhpcy5jb25maWcuaWRsZVRpbWVvdXRTZWNvbmRzKSB7XG4gICAgICBlbnRyeSA9IGF3YWl0IHRoaXMuY2xpZW50KCkuc2V0SWRsZVRpbWVvdXQoXG4gICAgICAgIGVudHJ5LnNhbmRib3hJZCxcbiAgICAgICAgdGhpcy5jb25maWcuaWRsZVRpbWVvdXRTZWNvbmRzLFxuICAgICAgICBvcGVyYXRpb25TaWduYWwsXG4gICAgICApO1xuICAgIH1cbiAgICBlbnRyeSA9IGF3YWl0IGVuc3VyZUxha2Vib3hSdW5uaW5nKHRoaXMuY2xpZW50KCksIGVudHJ5LCBvcGVyYXRpb25TaWduYWwpO1xuICAgIHRoaXMuY2FjaGVkID0geyBlbnRyeSwgYXQ6IERhdGUubm93KCkgfTtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmJvb3RLZXkoZW50cnkpO1xuICAgIGlmICh0aGlzLmJvb3Q/LmtleSA9PT0ga2V5KSByZXR1cm4gdGhpcy5ib290O1xuICAgIGF3YWl0IHRoaXMuZGlzY2FyZEJvb3QoKTtcbiAgICBjb25zdCBzZXNzaW9uID0gYXdhaXQgdGhpcy5jb25uZWN0KGVudHJ5LCBvcGVyYXRpb25TaWduYWwpO1xuICAgIGNvbnN0IGJvb3Q6IEJvb3QgPSB7XG4gICAgICBrZXksXG4gICAgICBlbnRyeSxcbiAgICAgIHNlc3Npb24sXG4gICAgICB1c2VyczogbmV3IE1hcCgpLFxuICAgICAgc2VydmljZXM6IG5ldyBNYXAoKSxcbiAgICAgIHN0YXJ0aW5nOiBuZXcgTWFwKCksXG4gICAgfTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdG9yZWQgPSBhd2FpdCB0aGlzLmJvb3RzdHJhcChzZXNzaW9uLCBvcGVyYXRpb25TaWduYWwpO1xuICAgICAgdGhpcy5tZXRyaWNzLnN0b3AoKTtcbiAgICAgIHRoaXMubWV0cmljcy5zZWVkKChhd2FpdCB0aGlzLmFkbWluKHNlc3Npb24sIFtcIm1ldHJpY3NcIl0sIG9wZXJhdGlvblNpZ25hbCkpLnN0ZG91dCk7XG4gICAgICB0aGlzLmJvb3QgPSBib290O1xuICAgICAgdGhpcy5yZWFkeUJvb3RLZXkgPSBrZXk7XG4gICAgICB0aGlzLndhdGNoSWRsZSgpO1xuICAgICAgaWYgKHRoaXMubWV0cmljcy5saXN0ZW5lckNvdW50KFwic25hcHNob3RcIikgPiAwKSB0aGlzLm1ldHJpY3Muc3RhcnQoKTtcbiAgICAgIGZvciAoY29uc3QgaGFzaCBvZiByZXN0b3JlZCkgdm9pZCB0aGlzLnJlc3RvcmVVc2VyKGJvb3QsIGhhc2gpO1xuICAgICAgcmV0dXJuIGJvb3Q7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGF3YWl0IHNlc3Npb24uY2xvc2UoKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY29ubmVjdChlbnRyeTogTGFrZWJveEVudHJ5LCBzaWduYWw6IEFib3J0U2lnbmFsKTogUHJvbWlzZTxTc2hTZXNzaW9uPiB7XG4gICAgY29uc3QgYXBpID0gdGhpcy5jbGllbnQoKTtcbiAgICBjb25zdCBzY29wZSA9IGF3YWl0IGFwaS53b3Jrc3BhY2VTY29wZSgpO1xuICAgIGNvbnN0IGtleSA9IGF3YWl0IHRoaXMua2V5cy5lbnN1cmVSZWdpc3RlcmVkKGFwaSwgU1NIX0tFWV9PV05FUiwgc2lnbmFsKTtcbiAgICBjb25zdCBnYXRld2F5SG9zdCA9IGVudHJ5LmdhdGV3YXlIb3N0ID8/IGtleS5nYXRld2F5SG9zdDtcbiAgICBpZiAoIWdhdGV3YXlIb3N0KSB0aHJvdyBuZXcgRXJyb3IoXCJEYXRhYnJpY2tzIExha2Vib3ggZGlkIG5vdCByZXR1cm4gYW4gU1NIIGdhdGV3YXkgaG9zdFwiKTtcbiAgICBjb25zdCBwb3J0ID0gdGhpcy5jb25maWcuZ2F0ZXdheVBvcnQ7XG4gICAgY29uc3Qga25vd25Ib3N0ID0gYXdhaXQgdGhpcy5rZXlzLmtub3duSG9zdChzY29wZSwgU1NIX0tFWV9PV05FUiwgZ2F0ZXdheUhvc3QsIHBvcnQpO1xuICAgIGNvbnN0IHNlc3Npb24gPSBuZXcgU3NoU2Vzc2lvbih7XG4gICAgICBob3N0OiBnYXRld2F5SG9zdCxcbiAgICAgIHBvcnQsXG4gICAgICB1c2VybmFtZTogZW50cnkuc2FuZGJveElkLFxuICAgICAgcHJpdmF0ZUtleToga2V5LnByaXZhdGVLZXksXG4gICAgICBwcml2YXRlS2V5UGF0aDoga2V5LnByaXZhdGVLZXlQYXRoLFxuICAgICAga25vd25Ib3N0c1BhdGg6IHRoaXMua2V5cy5rbm93bkhvc3RzUGF0aChzY29wZSwgU1NIX0tFWV9PV05FUiwgZ2F0ZXdheUhvc3QsIHBvcnQpLFxuICAgICAgY29ubmVjdFRpbWVvdXRNczogdGhpcy5jb25maWcuY29ubmVjdFRpbWVvdXRNcyxcbiAgICAgIHNzaFRyYW5zcG9ydDogdGhpcy5jb25maWcuc3NoVHJhbnNwb3J0LFxuICAgICAgc3NoMlBhdGNoOiB0aGlzLmNvbmZpZy5zc2gyUGF0Y2gsXG4gICAgICAuLi4oa25vd25Ib3N0ID8geyBrbm93bkhvc3QgfSA6IHt9KSxcbiAgICAgIHJlbWVtYmVySG9zdDogKGZpbmdlcnByaW50LCBob3N0S2V5KSA9PlxuICAgICAgICB0aGlzLmtleXMucmVtZW1iZXJIb3N0KHNjb3BlLCBTU0hfS0VZX09XTkVSLCBnYXRld2F5SG9zdCwgcG9ydCwgZmluZ2VycHJpbnQsIGhvc3RLZXkpLFxuICAgIH0pO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBzZXNzaW9uLmNvbm5lY3QoKTtcbiAgICAgIHJldHVybiBzZXNzaW9uO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBhd2FpdCBzZXNzaW9uLmNsb3NlKCk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICAvKiogUnVucyB0aGUgZml4ZWQgcHJpdmlsZWdlZCBib290c3RyYXAgYW5kIHJldHVybnMgdGhlIHJlc3RvcmVkIHVzZXIgaGFzaGVzLiAqL1xuICBwcml2YXRlIGFzeW5jIGJvb3RzdHJhcChzZXNzaW9uOiBTc2hTZXNzaW9uLCBzaWduYWw6IEFib3J0U2lnbmFsKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIGNvbnN0IGhlbHBlcnMgPSBPYmplY3QuZW50cmllcyhIRUxQRVJTKS5tYXAoXG4gICAgICAoW25hbWUsIGNvbnRlbnRdKSA9PiBgJHtuYW1lfT0ke0J1ZmZlci5mcm9tKGNvbnRlbnQpLnRvU3RyaW5nKFwiYmFzZTY0XCIpfWAsXG4gICAgKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmFkbWluKHNlc3Npb24sIFtcImJvb3RzdHJhcFwiLCAuLi5oZWxwZXJzXSwgc2lnbmFsKTtcbiAgICByZXR1cm4gcmVzdWx0LnN0ZG91dFxuICAgICAgLnNwbGl0KFwiXFxuXCIpXG4gICAgICAuZmlsdGVyKChsaW5lKSA9PiBsaW5lLnN0YXJ0c1dpdGgoXCJfX0xBS0VCT1hfVVNFUl9fPVwiKSlcbiAgICAgIC5tYXAoKGxpbmUpID0+IGxpbmUuc2xpY2UoXCJfX0xBS0VCT1hfVVNFUl9fPVwiLmxlbmd0aCkudHJpbSgpKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYWRtaW4oXG4gICAgc2Vzc2lvbjogU3NoU2Vzc2lvbixcbiAgICBhcmdzOiByZWFkb25seSBzdHJpbmdbXSxcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbCxcbiAgKTogUHJvbWlzZTx7IHN0ZG91dDogc3RyaW5nIH0+IHtcbiAgICBjb25zdCBlbmNvZGVkID0gQnVmZmVyLmZyb20oQURNSU5fU0NSSVBUKS50b1N0cmluZyhcImJhc2U2NFwiKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzZXNzaW9uLmV4ZWN1dGVQcml2aWxlZ2VkKFxuICAgICAgXCJzaFwiLFxuICAgICAgW1wiLWNcIiwgYHByaW50ZiAlcyAnJHtlbmNvZGVkfScgfCBiYXNlNjQgLWQgfCBzaCAtcyAtLSAke2FyZ3MubWFwKHNoZWxsUXVvdGUpLmpvaW4oXCIgXCIpfWBdLFxuICAgICAgeyB0aW1lb3V0TXM6IFNFVFVQX1RJTUVPVVRfTVMsIC4uLihzaWduYWwgPyB7IHNpZ25hbCB9IDoge30pIH0sXG4gICAgKS5yZXN1bHQ7XG4gICAgaWYgKCFyZXN1bHQuc3VjY2Vzcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgTGFrZWJveCAke2FyZ3NbMF19IGZhaWxlZDogJHtyZXN1bHQuc3RkZXJyLnRyaW0oKSB8fCByZXN1bHQuc3Rkb3V0LnRyaW0oKSB8fCBgZXhpdCAke3Jlc3VsdC5leGl0Q29kZX1gfWAsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqIE1hcmtzIGFjdGl2aXR5LCByZWFkaWVzIHRoZSBjdXJyZW50IGJvb3QsIGFuZCBjb252ZXJnZXMgdGhlIHVzZXIncyBhY2NvdW50LiAqL1xuICBwcml2YXRlIGFzeW5jIHJlYWR5VXNlcihcbiAgICB1c2VyOiBMYWtlYm94VXNlcixcbiAgICBpZGVudGl0eTogc3RyaW5nLFxuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuICApOiBQcm9taXNlPEJvb3Q+IHtcbiAgICB0aGlzLnRvdWNoKCk7XG4gICAgY29uc3QgYm9vdCA9IGF3YWl0IHRoaXMucmVhZHkoc2lnbmFsKTtcbiAgICBhd2FpdCB0aGlzLmNvbnZlcmdlVXNlcihib290LCB1c2VyLCBpZGVudGl0eSwgc2lnbmFsKTtcbiAgICByZXR1cm4gYm9vdDtcbiAgfVxuXG4gIC8qKiBDcmVhdGVzIG9yIHZlcmlmaWVzIHRoZSB1c2VyJ3MgYWNjb3VudCBvbmNlIHBlciBib290LiAqL1xuICBwcml2YXRlIGNvbnZlcmdlVXNlcihcbiAgICBib290OiBCb290LFxuICAgIHVzZXI6IExha2Vib3hVc2VyLFxuICAgIGlkZW50aXR5OiBzdHJpbmcsXG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxldCBjb252ZXJnZWQgPSBib290LnVzZXJzLmdldCh1c2VyLmhhc2gpO1xuICAgIGlmICghY29udmVyZ2VkKSB7XG4gICAgICBjb25zdCBkaWdlc3QgPSBjcmVhdGVIYXNoKFwic2hhMjU2XCIpLnVwZGF0ZShpZGVudGl0eS50cmltKCkudG9Mb3dlckNhc2UoKSkuZGlnZXN0KFwiaGV4XCIpO1xuICAgICAgY29udmVyZ2VkID0gdGhpcy5hZG1pbihcbiAgICAgICAgYm9vdC5zZXNzaW9uLFxuICAgICAgICBbXCJlbnN1cmUtdXNlclwiLCB1c2VyLmhhc2gsIFN0cmluZyh1c2VyLnVpZCksIGRpZ2VzdF0sXG4gICAgICAgIHNpZ25hbCxcbiAgICAgICkudGhlbigoKSA9PiB1bmRlZmluZWQpO1xuICAgICAgYm9vdC51c2Vycy5zZXQodXNlci5oYXNoLCBjb252ZXJnZWQpO1xuICAgICAgY29udmVyZ2VkLmNhdGNoKCgpID0+IGJvb3QudXNlcnMuZGVsZXRlKHVzZXIuaGFzaCkpO1xuICAgIH1cbiAgICByZXR1cm4gY29udmVyZ2VkO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZXN0b3JlVXNlcihib290OiBCb290LCBoYXNoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB1c2VyID0geyBuYW1lOiBgbGFrZWJveC0ke2hhc2h9YCwgaG9tZTogYC9ob21lL2xha2Vib3gtJHtoYXNofWAgfTtcbiAgICBib290LnVzZXJzLnNldChoYXNoLCBQcm9taXNlLnJlc29sdmUoKSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJvb3Quc2Vzc2lvbi5leGVjdXRlKFwicHl0aG9uM1wiLCBbQ09OVFJPTExFUiwgXCJzdGFydC1hbGxcIl0sIHtcbiAgICAgICAgdXNlcixcbiAgICAgICAgdGltZW91dE1zOiBTRVRVUF9USU1FT1VUX01TLFxuICAgICAgICBzaWduYWw6IHRoaXMuc2h1dGRvd25Db250cm9sbGVyLnNpZ25hbCxcbiAgICAgIH0pLnJlc3VsdDtcbiAgICAgIGlmICghcmVzdWx0LnN1Y2Nlc3MpIHRocm93IG5ldyBFcnJvcihyZXN1bHQuc3RkZXJyLnRyaW0oKSB8fCBgZXhpdCAke3Jlc3VsdC5leGl0Q29kZX1gKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKHRoaXMuc2h1dGRvd25Db250cm9sbGVyLnNpZ25hbC5hYm9ydGVkKSByZXR1cm47XG4gICAgICBsb2dnZXIud2FybihcIkxha2Vib3ggc2VydmljZSByZXN0b3JlIGZhaWxlZFwiLCB7XG4gICAgICAgIHVzZXI6IGhhc2gsXG4gICAgICAgIGVycm9yOiBlcnJvclV0aWxzLnRvRXJyb3IoZXJyb3IpLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjb250cm9sbGVyKFxuICAgIGJvb3Q6IEJvb3QsXG4gICAgdXNlcjogTGFrZWJveFVzZXIsXG4gICAgY29tbWFuZDogc3RyaW5nLFxuICAgIGFyZ3M6IHJlYWRvbmx5IHN0cmluZ1tdLFxuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuICApOiBQcm9taXNlPHVua25vd24+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBib290LnNlc3Npb24uZXhlY3V0ZShcInB5dGhvbjNcIiwgW0NPTlRST0xMRVIsIGNvbW1hbmQsIC4uLmFyZ3NdLCB7XG4gICAgICB1c2VyLFxuICAgICAgdGltZW91dE1zOiBTRVRVUF9USU1FT1VUX01TLFxuICAgICAgLi4uKHNpZ25hbCA/IHsgc2lnbmFsIH0gOiB7fSksXG4gICAgfSkucmVzdWx0O1xuICAgIGlmICghcmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYExha2Vib3ggc2VydmljZSAke2NvbW1hbmR9IGZhaWxlZDogJHtyZXN1bHQuc3RkZXJyLnRyaW0oKSB8fCBgZXhpdCAke3Jlc3VsdC5leGl0Q29kZX1gfWAsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gSlNPTi5wYXJzZShyZXN1bHQuc3Rkb3V0KSBhcyB1bmtub3duO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBydW5TZXJ2aWNlKFxuICAgIGJvb3Q6IEJvb3QsXG4gICAgdXNlcjogTGFrZWJveFVzZXIsXG4gICAgZGVmaW5pdGlvbjogTGFrZWJveENvbnRyb2xsZXJEZWZpbml0aW9uLFxuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuICApOiBQcm9taXNlPExha2Vib3hTZXJ2aWNlPiB7XG4gICAgY29uc3Qga2V5ID0gYCR7dXNlci5oYXNofVxcMCR7ZGVmaW5pdGlvbi5uYW1lfWA7XG4gICAgY29uc3QgcGVuZGluZyA9IGJvb3Quc3RhcnRpbmcuZ2V0KGtleSk7XG4gICAgaWYgKHBlbmRpbmcpIHJldHVybiBwZW5kaW5nO1xuICAgIGNvbnN0IG9wZXJhdGlvbiA9IChhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoZGVmaW5pdGlvbi5raW5kID09PSBcImRlc2t0b3BcIikge1xuICAgICAgICBib290LmRlc2t0b3AgPz89IHRoaXMuYWRtaW4oYm9vdC5zZXNzaW9uLCBbXCJkZXNrdG9wLXByZXJlcXVpc2l0ZXNcIl0sIHNpZ25hbCkudGhlbihcbiAgICAgICAgICAoKSA9PiB1bmRlZmluZWQsXG4gICAgICAgICk7XG4gICAgICAgIGJvb3QuZGVza3RvcC5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgYm9vdC5kZXNrdG9wID0gdW5kZWZpbmVkO1xuICAgICAgICB9KTtcbiAgICAgICAgYXdhaXQgYm9vdC5kZXNrdG9wO1xuICAgICAgfVxuICAgICAgYXdhaXQgdGhpcy5hZG1pbihcbiAgICAgICAgYm9vdC5zZXNzaW9uLFxuICAgICAgICBbXCJhbGxvdy1wb3J0XCIsIFN0cmluZyh1c2VyLnVpZCksIFN0cmluZyhkZWZpbml0aW9uLnBvcnQpXSxcbiAgICAgICAgc2lnbmFsLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHN0YXJ0ZWQgPSBMYWtlYm94Q29udHJvbGxlclNlcnZpY2VTY2hlbWEucGFyc2UoXG4gICAgICAgIGF3YWl0IHRoaXMuY29udHJvbGxlcihib290LCB1c2VyLCBcInN0YXJ0XCIsIFtkZWZpbml0aW9uLm5hbWVdLCBzaWduYWwpLFxuICAgICAgKTtcbiAgICAgIHRoaXMuY2FjaGVTZXJ2aWNlKGJvb3QsIHVzZXIsIHN0YXJ0ZWQpO1xuICAgICAgcmV0dXJuIHRvTGFrZWJveFNlcnZpY2Uoc3RhcnRlZCwgdXNlciwgdGhpcy5jb25maWcucm91dGVQcmVmaXgpO1xuICAgIH0pKCkuZmluYWxseSgoKSA9PiBib290LnN0YXJ0aW5nLmRlbGV0ZShrZXkpKTtcbiAgICBib290LnN0YXJ0aW5nLnNldChrZXksIG9wZXJhdGlvbik7XG4gICAgcmV0dXJuIG9wZXJhdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVmcmVzaFNlcnZpY2VzKFxuICAgIGJvb3Q6IEJvb3QsXG4gICAgdXNlcjogTGFrZWJveFVzZXIsXG4gICAgaWRlbnRpdHk6IHN0cmluZyxcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbCxcbiAgKTogUHJvbWlzZTxNYXA8c3RyaW5nLCBMYWtlYm94Q29udHJvbGxlclNlcnZpY2U+PiB7XG4gICAgYXdhaXQgdGhpcy5jb252ZXJnZVVzZXIoYm9vdCwgdXNlciwgaWRlbnRpdHksIHNpZ25hbCk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSAoYXdhaXQgdGhpcy5jb250cm9sbGVyKGJvb3QsIHVzZXIsIFwibGlzdFwiLCBbXSwgc2lnbmFsKSkgYXMge1xuICAgICAgc2VydmljZXM/OiB1bmtub3duW107XG4gICAgfTtcbiAgICBjb25zdCBzZXJ2aWNlcyA9IG5ldyBNYXAoXG4gICAgICAocmVzcG9uc2Uuc2VydmljZXMgPz8gW10pLm1hcCgoc2VydmljZSkgPT4ge1xuICAgICAgICBjb25zdCBwYXJzZWQgPSBMYWtlYm94Q29udHJvbGxlclNlcnZpY2VTY2hlbWEucGFyc2Uoc2VydmljZSk7XG4gICAgICAgIHJldHVybiBbcGFyc2VkLm5hbWUsIHBhcnNlZF0gYXMgY29uc3Q7XG4gICAgICB9KSxcbiAgICApO1xuICAgIGJvb3Quc2VydmljZXMuc2V0KHVzZXIuaGFzaCwgc2VydmljZXMpO1xuICAgIHRoaXMubGFzdFNlcnZpY2VzLnNldCh1c2VyLmhhc2gsIHNlcnZpY2VzKTtcbiAgICBjb25zdCBvYnNlcnZlZEF0ID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuICAgIHRoaXMubGFzdFNlcnZpY2VzT2JzZXJ2ZWRBdC5zZXQodXNlci5oYXNoLCBvYnNlcnZlZEF0KTtcbiAgICBhd2FpdCB0aGlzLnBlcnNpc3RTZXJ2aWNlU25hcHNob3QoYm9vdC5lbnRyeSwgdXNlciwgc2VydmljZXMsIG9ic2VydmVkQXQpO1xuICAgIHJldHVybiBzZXJ2aWNlcztcbiAgfVxuXG4gIHByaXZhdGUgY2FjaGVTZXJ2aWNlKGJvb3Q6IEJvb3QsIHVzZXI6IExha2Vib3hVc2VyLCBzZXJ2aWNlOiBMYWtlYm94Q29udHJvbGxlclNlcnZpY2UpOiB2b2lkIHtcbiAgICBjb25zdCBzZXJ2aWNlcyA9IGJvb3Quc2VydmljZXMuZ2V0KHVzZXIuaGFzaCkgPz8gbmV3IE1hcDxzdHJpbmcsIExha2Vib3hDb250cm9sbGVyU2VydmljZT4oKTtcbiAgICBzZXJ2aWNlcy5zZXQoc2VydmljZS5uYW1lLCBzZXJ2aWNlKTtcbiAgICBib290LnNlcnZpY2VzLnNldCh1c2VyLmhhc2gsIHNlcnZpY2VzKTtcbiAgICB0aGlzLmxhc3RTZXJ2aWNlcy5zZXQodXNlci5oYXNoLCBzZXJ2aWNlcyk7XG4gICAgY29uc3Qgb2JzZXJ2ZWRBdCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgICB0aGlzLmxhc3RTZXJ2aWNlc09ic2VydmVkQXQuc2V0KHVzZXIuaGFzaCwgb2JzZXJ2ZWRBdCk7XG4gICAgdm9pZCB0aGlzLnBlcnNpc3RTZXJ2aWNlU25hcHNob3QoYm9vdC5lbnRyeSwgdXNlciwgc2VydmljZXMsIG9ic2VydmVkQXQpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZXJ2aWNlTGlzdGluZyhcbiAgICBpZGVudGl0eTogc3RyaW5nLFxuICAgIHVzZXI6IExha2Vib3hVc2VyLFxuICAgIGVudHJ5OiBMYWtlYm94RW50cnkgfCB1bmRlZmluZWQsXG4gICAgc3RhdHVzOiBMYWtlYm94U3RhdHVzLFxuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuICApOiBQcm9taXNlPFNlcnZpY2VMaXN0aW5nPiB7XG4gICAgaWYgKCFlbnRyeSB8fCBzdGF0dXMgPT09IFwibWlzc2luZ1wiKSB7XG4gICAgICByZXR1cm4geyBzZXJ2aWNlczogdGhpcy5pZGxlU2VydmljZXModXNlciksIHN0YWxlOiBmYWxzZSB9O1xuICAgIH1cbiAgICBpZiAoc3RhdHVzID09PSBcInJ1bm5pbmdcIiAmJiB0aGlzLmJvb3Q/LmtleSA9PT0gdGhpcy5ib290S2V5KGVudHJ5KSkge1xuICAgICAgY29uc3Qgc2VydmljZXMgPSBhd2FpdCB0aGlzLnJlZnJlc2hTZXJ2aWNlcyh0aGlzLmJvb3QsIHVzZXIsIGlkZW50aXR5LCBzaWduYWwpO1xuICAgICAgcmV0dXJuIHsgc2VydmljZXM6IHRoaXMud2l0aEJ1aWx0SW5zKHVzZXIsIHNlcnZpY2VzKSwgc3RhbGU6IGZhbHNlIH07XG4gICAgfVxuICAgIGNvbnN0IG1lbW9yeSA9IHRoaXMubGFzdFNlcnZpY2VzLmdldCh1c2VyLmhhc2gpO1xuICAgIGlmIChtZW1vcnkpIHtcbiAgICAgIGNvbnN0IG9ic2VydmVkQXQgPSB0aGlzLmxhc3RTZXJ2aWNlc09ic2VydmVkQXQuZ2V0KHVzZXIuaGFzaCk7XG4gICAgICBjb25zdCBzZXJ2aWNlcyA9XG4gICAgICAgIHN0YXR1cyA9PT0gXCJydW5uaW5nXCJcbiAgICAgICAgICA/IG1lbW9yeVxuICAgICAgICAgIDogc3RvcHBlZFNuYXBzaG90U2VydmljZXMoe1xuICAgICAgICAgICAgICBvYnNlcnZlZEF0OiBvYnNlcnZlZEF0ID8/IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICAgICAgZGVmaW5pdGlvbnM6IFsuLi5tZW1vcnkudmFsdWVzKCldLm1hcCgoc2VydmljZSkgPT4gc2VydmljZS5kZWZpbml0aW9uKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2VydmljZXM6IHRoaXMud2l0aEJ1aWx0SW5zKHVzZXIsIHNlcnZpY2VzKSxcbiAgICAgICAgc3RhbGU6IHRydWUsXG4gICAgICAgIC4uLihvYnNlcnZlZEF0ID8geyBvYnNlcnZlZEF0IH0gOiB7fSksXG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBzbmFwc2hvdCA9IGF3YWl0IHRoaXMuc2VydmljZVNuYXBzaG90cz8ucmVhZChlbnRyeS5zYW5kYm94SWQsIHVzZXIuaGFzaCk7XG4gICAgcmV0dXJuIHNuYXBzaG90XG4gICAgICA/IHtcbiAgICAgICAgICBzZXJ2aWNlczogdGhpcy53aXRoQnVpbHRJbnModXNlciwgc3RvcHBlZFNuYXBzaG90U2VydmljZXMoc25hcHNob3QpKSxcbiAgICAgICAgICBzdGFsZTogdHJ1ZSxcbiAgICAgICAgICBvYnNlcnZlZEF0OiBzbmFwc2hvdC5vYnNlcnZlZEF0LFxuICAgICAgICB9XG4gICAgICA6IHsgc2VydmljZXM6IHRoaXMuaWRsZVNlcnZpY2VzKHVzZXIpLCBzdGFsZTogdHJ1ZSB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwZXJzaXN0U2VydmljZVNuYXBzaG90KFxuICAgIGVudHJ5OiBMYWtlYm94RW50cnksXG4gICAgdXNlcjogTGFrZWJveFVzZXIsXG4gICAgc2VydmljZXM6IFJlYWRvbmx5TWFwPHN0cmluZywgTGFrZWJveENvbnRyb2xsZXJTZXJ2aWNlPixcbiAgICBvYnNlcnZlZEF0OiBzdHJpbmcsXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuc2VydmljZVNuYXBzaG90cz8ud3JpdGUoZW50cnkuc2FuZGJveElkLCB1c2VyLmhhc2gsIHtcbiAgICAgIG9ic2VydmVkQXQsXG4gICAgICBkZWZpbml0aW9uczogWy4uLnNlcnZpY2VzLnZhbHVlcygpXS5tYXAoKHNlcnZpY2UpID0+IHNlcnZpY2UuZGVmaW5pdGlvbiksXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHdpdGhCdWlsdElucyhcbiAgICB1c2VyOiBMYWtlYm94VXNlcixcbiAgICBzZXJ2aWNlczogUmVhZG9ubHlNYXA8c3RyaW5nLCBMYWtlYm94Q29udHJvbGxlclNlcnZpY2U+LFxuICApOiBMYWtlYm94U2VydmljZVtdIHtcbiAgICBjb25zdCBidWlsdElucyA9IExBS0VCT1hfQlVJTFRfSU5fU0VSVklDRVMubWFwKCh7IG5hbWUgfSkgPT4ge1xuICAgICAgY29uc3Qgc2F2ZWQgPSBzZXJ2aWNlcy5nZXQobmFtZSk7XG4gICAgICByZXR1cm4gc2F2ZWRcbiAgICAgICAgPyB0b0xha2Vib3hTZXJ2aWNlKHNhdmVkLCB1c2VyLCB0aGlzLmNvbmZpZy5yb3V0ZVByZWZpeClcbiAgICAgICAgOiBpZGxlQnVpbHRJblNlcnZpY2UobmFtZSwgdXNlciwgdGhpcy5jb25maWcucm91dGVQcmVmaXgpO1xuICAgIH0pO1xuICAgIGNvbnN0IGN1c3RvbSA9IFsuLi5zZXJ2aWNlcy52YWx1ZXMoKV1cbiAgICAgIC5maWx0ZXIoKHNlcnZpY2UpID0+ICFMQUtFQk9YX0JVSUxUX0lOX1NFUlZJQ0VTLnNvbWUoKHsgbmFtZSB9KSA9PiBuYW1lID09PSBzZXJ2aWNlLm5hbWUpKVxuICAgICAgLm1hcCgoc2VydmljZSkgPT4gdG9MYWtlYm94U2VydmljZShzZXJ2aWNlLCB1c2VyLCB0aGlzLmNvbmZpZy5yb3V0ZVByZWZpeCkpO1xuICAgIHJldHVybiBbLi4uYnVpbHRJbnMsIC4uLmN1c3RvbV07XG4gIH1cblxuICBwcml2YXRlIGlkbGVTZXJ2aWNlcyh1c2VyOiBMYWtlYm94VXNlcik6IExha2Vib3hTZXJ2aWNlW10ge1xuICAgIHJldHVybiBMQUtFQk9YX0JVSUxUX0lOX1NFUlZJQ0VTLm1hcCgoeyBuYW1lIH0pID0+XG4gICAgICBpZGxlQnVpbHRJblNlcnZpY2UobmFtZSBhcyBMYWtlYm94QnVpbHRJblNlcnZpY2VOYW1lLCB1c2VyLCB0aGlzLmNvbmZpZy5yb3V0ZVByZWZpeCksXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBSZXNvbHZlcyBvbmUgcm91dGVkIHJlcXVlc3QsIHdha2luZyB0aGUgTGFrZWJveCBvciBzZXJ2aWNlIGluIHRoZSBiYWNrZ3JvdW5kLiAqL1xuICBwcml2YXRlIGFzeW5jIHJlc29sdmVSb3V0ZSh1c2VyOiBMYWtlYm94VXNlciwgbmFtZTogc3RyaW5nKTogUHJvbWlzZTxMYWtlYm94Um91dGVSZXNvbHV0aW9uPiB7XG4gICAgdGhpcy50b3VjaCgpO1xuICAgIGNvbnN0IGVudHJ5ID0gYXdhaXQgdGhpcy5lbnRyeSgpO1xuICAgIGNvbnN0IHJ1bm5pbmcgPSBlbnRyeSAmJiBub3JtYWxpemVMYWtlYm94U3RhdHVzKGVudHJ5LnN0YXR1cykgPT09IFwicnVubmluZ1wiO1xuICAgIGNvbnN0IGJvb3QgPSB0aGlzLmJvb3Q7XG4gICAgaWYgKCFydW5uaW5nIHx8ICFib290IHx8IGJvb3Qua2V5ICE9PSB0aGlzLmJvb3RLZXkoZW50cnkpKSB7XG4gICAgICBpZiAoIXRoaXMuY29uZmlnLmF1dG8pIHJldHVybiB7IGtpbmQ6IFwibWlzc2luZ1wiIH07XG4gICAgICB0aGlzLndha2UoKCkgPT4gdGhpcy5yZWFkeSgpKTtcbiAgICAgIHJldHVybiB7IGtpbmQ6IFwibG9hZGluZ1wiIH07XG4gICAgfVxuICAgIGNvbnN0IGlkZW50aXR5ID0gdGhpcy5yb3V0ZWRJZGVudGl0aWVzLmdldCh1c2VyLmhhc2gpO1xuICAgIGlmICghaWRlbnRpdHkpIHJldHVybiB7IGtpbmQ6IFwibWlzc2luZ1wiIH07XG4gICAgbGV0IHNlcnZpY2UgPSBib290LnNlcnZpY2VzLmdldCh1c2VyLmhhc2gpPy5nZXQobmFtZSk7XG4gICAgaWYgKCFzZXJ2aWNlKSBzZXJ2aWNlID0gKGF3YWl0IHRoaXMucmVmcmVzaFNlcnZpY2VzKGJvb3QsIHVzZXIsIGlkZW50aXR5KSkuZ2V0KG5hbWUpO1xuICAgIGNvbnN0IGJ1aWx0SW4gPSBsYWtlYm94QnVpbHRJblNlcnZpY2VOYW1lU2NoZW1hLnNhZmVQYXJzZShuYW1lKTtcbiAgICBpZiAoIXNlcnZpY2UgJiYgIWJ1aWx0SW4uc3VjY2VzcykgcmV0dXJuIHsga2luZDogXCJtaXNzaW5nXCIgfTtcbiAgICBpZiAoc2VydmljZT8uc3RhdGUgPT09IFwicmVhZHlcIikge1xuICAgICAgcmV0dXJuIHsga2luZDogXCJyZWFkeVwiLCBzZXNzaW9uOiBib290LnNlc3Npb24sIHJvdXRlOiBzZXJ2aWNlUm91dGUoc2VydmljZS5kZWZpbml0aW9uKSB9O1xuICAgIH1cbiAgICBpZiAoc2VydmljZT8uc3RhdGUgPT09IFwiZXJyb3JcIiAmJiAhYm9vdC5zdGFydGluZy5oYXMoYCR7dXNlci5oYXNofVxcMCR7bmFtZX1gKSkge1xuICAgICAgcmV0dXJuIHsga2luZDogXCJmYWlsZWRcIiwgbWVzc2FnZTogc2VydmljZS5lcnJvciA/PyBcInRoZSBzZXJ2aWNlIGZhaWxlZCB0byBzdGFydFwiIH07XG4gICAgfVxuICAgIGNvbnN0IGRlZmluaXRpb24gPSBzZXJ2aWNlPy5kZWZpbml0aW9uID8/IGJ1aWx0SW5EZWZpbml0aW9uKGJ1aWx0SW4uZGF0YSEsIHVzZXIpO1xuICAgIHRoaXMud2FrZShhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIXNlcnZpY2UpIGF3YWl0IHRoaXMuY29udHJvbGxlcihib290LCB1c2VyLCBcInB1dFwiLCBbZW5jb2RlKGRlZmluaXRpb24pXSk7XG4gICAgICBhd2FpdCB0aGlzLnJ1blNlcnZpY2UoYm9vdCwgdXNlciwgZGVmaW5pdGlvbik7XG4gICAgfSk7XG4gICAgcmV0dXJuIHsga2luZDogXCJsb2FkaW5nXCIgfTtcbiAgfVxuXG4gIHByaXZhdGUgbWFya1VuYXZhaWxhYmxlKHVzZXI6IExha2Vib3hVc2VyLCBuYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmJvb3Q/LnNlcnZpY2VzLmdldCh1c2VyLmhhc2gpPy5kZWxldGUobmFtZSk7XG4gICAgdGhpcy5jYWNoZWQgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIHdha2UoYWN0aW9uOiAoKSA9PiBQcm9taXNlPHVua25vd24+KTogdm9pZCB7XG4gICAgaWYgKHRoaXMud2FraW5nKSByZXR1cm47XG4gICAgdGhpcy53YWtpbmcgPSBhY3Rpb24oKVxuICAgICAgLmNhdGNoKChlcnJvcikgPT4gbG9nZ2VyLndhcm4oXCJMYWtlYm94IHdha2UgZmFpbGVkXCIsIHsgZXJyb3I6IGVycm9yVXRpbHMudG9FcnJvcihlcnJvcikgfSkpXG4gICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgIHRoaXMud2FraW5nID0gdW5kZWZpbmVkO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlYWRNZXRyaWNzKHNpZ25hbDogQWJvcnRTaWduYWwpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGJvb3QgPSB0aGlzLmJvb3Q7XG4gICAgaWYgKCFib290KSB0aHJvdyBuZXcgRXJyb3IoXCJMYWtlYm94IGlzIG5vdCBydW5uaW5nXCIpO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gKGF3YWl0IHRoaXMuYWRtaW4oYm9vdC5zZXNzaW9uLCBbXCJtZXRyaWNzXCJdLCBzaWduYWwpKS5zdGRvdXQ7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMuY2FjaGVkID0gdW5kZWZpbmVkO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBsZWFzZU1ldHJpY3MoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmJvb3QpIHJldHVybjtcbiAgICB0aGlzLm1ldHJpY3Muc3RhcnQoKTtcbiAgICBpZiAodGhpcy5tZXRyaWNzTGVhc2UpIGNsZWFyVGltZW91dCh0aGlzLm1ldHJpY3NMZWFzZSk7XG4gICAgdGhpcy5tZXRyaWNzTGVhc2UgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLm1ldHJpY3MubGlzdGVuZXJDb3VudChcInNuYXBzaG90XCIpID09PSAwKSB0aGlzLm1ldHJpY3Muc3RvcCgpO1xuICAgIH0sIE1FVFJJQ1NfTEVBU0VfTVMpO1xuICAgIHRoaXMubWV0cmljc0xlYXNlLnVucmVmPy4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWxlYXNlcyB0aGUgU1NIIHNlc3Npb24gYWZ0ZXIgdGhlIGlkbGUgdGltZW91dCB3aXRob3V0IGNvbW1hbmRzLCBzZXJ2aWNlXG4gICAqIG9wZXJhdGlvbnMsIHJvdXRlZCB0cmFmZmljLCBvcGVuIHN0cmVhbXMsIG9yIG1ldHJpY3Mgd2F0Y2hlcnMuIEFuIG9wZW5cbiAgICogc2Vzc2lvbiBjb3VudHMgYXMgYWN0aXZpdHkgZm9yIHRoZSBwbGF0Zm9ybSB3YXRjaGRvZywgc28gcmVsZWFzaW5nIGl0IGxldHNcbiAgICogdGhlIHBsYXRmb3JtIHN0b3AgdGhlIExha2Vib3ggYWZ0ZXIgaXRzIG93biBpZGxlIHRpbWVvdXQuIFRoZSBuZXh0IHJlcXVlc3RcbiAgICogcmVjb25uZWN0cy5cbiAgICovXG4gIHByaXZhdGUgd2F0Y2hJZGxlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlkbGVUaW1lcikgY2xlYXJJbnRlcnZhbCh0aGlzLmlkbGVUaW1lcik7XG4gICAgdGhpcy5pZGxlVGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBjb25zdCBpZGxlTXMgPSBEYXRlLm5vdygpIC0gdGhpcy5sYXN0QWN0aXZpdHk7XG4gICAgICBpZiAoXG4gICAgICAgICF0aGlzLmJvb3QgfHxcbiAgICAgICAgdGhpcy5jb252ZXJnaW5nIHx8XG4gICAgICAgIGlkbGVNcyA8IHRoaXMuY29uZmlnLmlkbGVUaW1lb3V0U2Vjb25kcyAqIDFfMDAwIHx8XG4gICAgICAgIHRoaXMuYWN0aXZlQ29tbWFuZHMgPiAwIHx8XG4gICAgICAgIHRoaXMuYm9vdC5zdGFydGluZy5zaXplID4gMCB8fFxuICAgICAgICB0aGlzLnJvdXRlcy5hY3RpdmVDb25uZWN0aW9ucygpID4gMCB8fFxuICAgICAgICB0aGlzLm1ldHJpY3MubGlzdGVuZXJDb3VudChcInNuYXBzaG90XCIpID4gMFxuICAgICAgKSB7XG4gICAgICAgIGlmICh0aGlzLnJvdXRlcy5hY3RpdmVDb25uZWN0aW9ucygpID4gMCB8fCB0aGlzLmFjdGl2ZUNvbW1hbmRzID4gMCkgdGhpcy50b3VjaCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBsb2dnZXIuaW5mbyhcInJlbGVhc2luZyBpZGxlIExha2Vib3ggc2Vzc2lvblwiLCB7IGlkbGVTZWNvbmRzOiBNYXRoLnJvdW5kKGlkbGVNcyAvIDFfMDAwKSB9KTtcbiAgICAgIHZvaWQgdGhpcy5kaXNjYXJkQm9vdCgpO1xuICAgIH0sIElETEVfQ0hFQ0tfTVMpO1xuICAgIHRoaXMuaWRsZVRpbWVyLnVucmVmPy4oKTtcbiAgfVxuXG4gIHByaXZhdGUgdG91Y2goKTogdm9pZCB7XG4gICAgdGhpcy5sYXN0QWN0aXZpdHkgPSBEYXRlLm5vdygpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkaXNjYXJkQm9vdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5pZGxlVGltZXIpIGNsZWFySW50ZXJ2YWwodGhpcy5pZGxlVGltZXIpO1xuICAgIHRoaXMuaWRsZVRpbWVyID0gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGJvb3QgPSB0aGlzLmJvb3Q7XG4gICAgdGhpcy5ib290ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMubWV0cmljcy5zdG9wKCk7XG4gICAgYXdhaXQgdGhpcy5yb3V0ZXMuY2xvc2VCcmlkZ2VzKCk7XG4gICAgYXdhaXQgYm9vdD8uc2Vzc2lvbi5jbG9zZSgpLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZW5jb2RlKGRlZmluaXRpb246IExha2Vib3hDb250cm9sbGVyRGVmaW5pdGlvbik6IHN0cmluZyB7XG4gIHJldHVybiBCdWZmZXIuZnJvbShKU09OLnN0cmluZ2lmeShkZWZpbml0aW9uKSkudG9TdHJpbmcoXCJiYXNlNjRcIik7XG59XG5cbmZ1bmN0aW9uIHNoZWxsUXVvdGUodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgJyR7dmFsdWUucmVwbGFjZUFsbChcIidcIiwgXCInXFxcXCcnXCIpfSdgO1xufVxuXG4vKiogUmV0dXJucyB3aGV0aGVyIGFuIGVycm9yIG1lYW5zIHRoZSBtYW5hZ2VkIExha2Vib3ggbm8gbG9uZ2VyIGV4aXN0cy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0xha2Vib3hNaXNzaW5nKGVycm9yOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiBlcnJvciBpbnN0YW5jZW9mIExha2Vib3hBcGlFcnJvciAmJiBlcnJvci5zdGF0dXMgPT09IDQwNDtcbn1cbiJdfQ==
758
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW50aW1lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFekMsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDNUQsT0FBTyxFQUNMLFdBQVcsRUFDWCxvQkFBb0IsRUFDcEIsb0JBQW9CLEVBQ3BCLHlCQUF5QixFQUN6QixzQkFBc0IsRUFDdEIsVUFBVSxFQUNWLFVBQVUsR0FDWCxNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsZUFBZSxFQUNmLGFBQWEsR0FHZCxNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEQsT0FBTyxFQUNMLHlCQUF5QixFQUN6QiwrQkFBK0IsRUFDL0IsMkJBQTJCLEVBQzNCLCtCQUErQixHQVdoQyxNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVwRCxPQUFPLEVBQTJCLHVCQUF1QixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFM0YsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM5QyxPQUFPLEVBQUUsb0JBQW9CLEVBQStCLE1BQU0sYUFBYSxDQUFDO0FBQ2hGLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsa0JBQWtCLEVBQ2xCLGVBQWUsRUFDZiw4QkFBOEIsRUFDOUIsWUFBWSxFQUNaLGdCQUFnQixHQUdqQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsV0FBVyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRTlELE1BQU0sWUFBWSxHQUFHLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxrQkFBa0IsQ0FBQyxDQUFD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QyxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQztBQUMvQyxDQUFDO0FBRUQsMkVBQTJFO0FBQzNFLE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxLQUFjO0lBQzdDLE9BQU8sS0FBSyxZQUFZLGVBQWUsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLEdBQUcsQ0FBQztBQUNsRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlSGFzaCB9IGZyb20gXCJub2RlOmNyeXB0b1wiO1xuaW1wb3J0IHR5cGUgeyBJbmNvbWluZ0h0dHBIZWFkZXJzIH0gZnJvbSBcIm5vZGU6aHR0cFwiO1xuaW1wb3J0IHsgb25QYXJlbnRUZXJtaW5hdGlvblNpZ25hbCB9IGZyb20gXCJAZGJ4LXRvb2xzL2NvcmVcIjtcbmltcG9ydCB7XG4gIFNzaEtleVN0b3JlLFxuICBlbnN1cmVMYWtlYm94UnVubmluZyxcbiAgZW5zdXJlTGFrZWJveFN0b3BwZWQsXG4gIGxha2Vib3hJZGxlVGltZW91dFNlY29uZHMsXG4gIG5vcm1hbGl6ZUxha2Vib3hTdGF0dXMsXG4gIFNzaENvbW1hbmQsXG4gIFNzaFNlc3Npb24sXG59IGZyb20gXCJAZGJ4LXRvb2xzL2xha2Vib3hcIjtcbmltcG9ydCB7XG4gIGlzTGFrZWJveFVuYXZhaWxhYmxlLFxuICBMYWtlYm94QXBpRXJyb3IsXG4gIExha2Vib3hDbGllbnQsXG4gIHR5cGUgTGFrZWJveEF1dGgsXG4gIHR5cGUgTGFrZWJveEVudHJ5LFxufSBmcm9tIFwiQGRieC10b29scy9sYWtlYm94XCI7XG5pbXBvcnQgeyBsb2csIHRvRXJyb3IgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHtcbiAgTEFLRUJPWF9CVUlMVF9JTl9TRVJWSUNFUyxcbiAgbGFrZWJveEJ1aWx0SW5TZXJ2aWNlTmFtZVNjaGVtYSxcbiAgbGFrZWJveENvbW1hbmRSZXF1ZXN0U2NoZW1hLFxuICBsYWtlYm94U2VydmljZUxvZ3NSZXF1ZXN0U2NoZW1hLFxuICB0eXBlIENyZWF0ZUxha2Vib3hTZXJ2aWNlUmVxdWVzdCxcbiAgdHlwZSBMYWtlYm94QnVpbHRJblNlcnZpY2VOYW1lLFxuICB0eXBlIExha2Vib3hDb21tYW5kUmVxdWVzdCxcbiAgdHlwZSBMYWtlYm94TWV0cmljc1Jlc3BvbnNlLFxuICB0eXBlIExha2Vib3hNZXRyaWNzU25hcHNob3QsXG4gIHR5cGUgTGFrZWJveFNlcnZpY2UsXG4gIHR5cGUgTGFrZWJveFNlcnZpY2VMb2dzUmVxdWVzdCxcbiAgdHlwZSBMYWtlYm94U3RhdHVzLFxuICB0eXBlIExha2Vib3hTdW1tYXJ5LFxuICB0eXBlIExha2Vib3hVc2VyLFxufSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtbGFrZWJveFwiO1xuaW1wb3J0IHsgcmVhZFBhY2thZ2VSZXNvdXJjZSB9IGZyb20gXCIuL19wYWNrYWdlLnRzXCI7XG5pbXBvcnQgeyBMYWtlYm94UmVzb3VyY2VSZWdpc3RyeSB9IGZyb20gXCIuL19yZXNvdXJjZS1yZWdpc3RyeS50c1wiO1xuaW1wb3J0IHsgTGFrZWJveFNlcnZpY2VTbmFwc2hvdHMsIHN0b3BwZWRTbmFwc2hvdFNlcnZpY2VzIH0gZnJvbSBcIi4vX3NlcnZpY2Utc25hcHNob3RzLnRzXCI7XG5pbXBvcnQgdHlwZSB7IFJlc29sdmVkTGFrZWJveFBsdWdpbkNvbmZpZyB9IGZyb20gXCIuL2NvbmZpZy50c1wiO1xuaW1wb3J0IHsgTGFrZWJveE1ldHJpY3MgfSBmcm9tIFwiLi9tZXRyaWNzLnRzXCI7XG5pbXBvcnQgeyBMYWtlYm94Um91dGVSZWdpc3RyeSwgdHlwZSBMYWtlYm94Um91dGVSZXNvbHV0aW9uIH0gZnJvbSBcIi4vcm91dGVzLnRzXCI7XG5pbXBvcnQge1xuICBidWlsdEluRGVmaW5pdGlvbixcbiAgaWRsZUJ1aWx0SW5TZXJ2aWNlLFxuICBpbWFnZURlZmluaXRpb24sXG4gIExha2Vib3hDb250cm9sbGVyU2VydmljZVNjaGVtYSxcbiAgc2VydmljZVJvdXRlLFxuICB0b0xha2Vib3hTZXJ2aWNlLFxuICB0eXBlIExha2Vib3hDb250cm9sbGVyRGVmaW5pdGlvbixcbiAgdHlwZSBMYWtlYm94Q29udHJvbGxlclNlcnZpY2UsXG59IGZyb20gXCIuL3NlcnZpY2VzLnRzXCI7XG5pbXBvcnQgeyBMQUtFQk9YX1JVTlRJTUVfUk9PVCwgbGFrZWJveFVzZXIgfSBmcm9tIFwiLi91c2VyLnRzXCI7XG5cbmNvbnN0IEFETUlOX1NDUklQVCA9IHJlYWRQYWNrYWdlUmVzb3VyY2UoXCJzY3JpcHRzXCIsIFwibGFrZWJveC1hZG1pbi5zaFwiKTtcbmNvbnN0IEhFTFBFUlMgPSB7XG4gIFwibGFrZWJveC1zZXJ2aWNlXCI6IHJlYWRQYWNrYWdlUmVzb3VyY2UoXCJzY3JpcHRzXCIsIFwibGFrZWJveC1zZXJ2aWNlLnB5XCIpLFxuICBcImRlc2t0b3Atc2Vzc2lvblwiOiByZWFkUGFja2FnZVJlc291cmNlKFwic2NyaXB0c1wiLCBcImRlc2t0b3Atc2Vzc2lvbi5zaFwiKSxcbiAgXCJkZXNrdG9wLXByZXJlcXVpc2l0ZXNcIjogcmVhZFBhY2thZ2VSZXNvdXJjZShcInNjcmlwdHNcIiwgXCJkZXNrdG9wLXByZXJlcXVpc2l0ZXMuc2hcIiksXG59IGFzIGNvbnN0O1xuY29uc3QgQ09OVFJPTExFUiA9IGAke0xBS0VCT1hfUlVOVElNRV9ST09UfS9iaW4vbGFrZWJveC1zZXJ2aWNlYDtcbmNvbnN0IEVOVFJZX1RUTF9NUyA9IDVfMDAwO1xuY29uc3QgU0VUVVBfVElNRU9VVF9NUyA9IDYwMF8wMDA7XG5jb25zdCBNRVRSSUNTX0xFQVNFX01TID0gNjBfMDAwO1xuY29uc3QgSURMRV9DSEVDS19NUyA9IDMwXzAwMDtcbmNvbnN0IFNTSF9LRVlfT1dORVIgPSBcImFwcC1zZXJ2aWNlLXByaW5jaXBhbFwiO1xuY29uc3QgTEVHQUNZX05BTUUgPVxuICAvXmRieC0oPyFsYWtlYm94LSlbYS16XSstW2Etel0rLVswLTlhLWZdezh9KD86X3VpZF9bQS1aYS16MC05Xy1dK19leHBfWzAtOV0rKT8kLztcbmNvbnN0IExFR0FDWV9TQ0hFTUFfUFJFRklYID0gXCJkYnhfdG9vbHNfZGF0YWJyaWNrc19zYW5kYm94XCI7XG5jb25zdCBsb2dnZXIgPSBsb2cubG9nZ2VyKFwiYXBwa2l0LWxha2Vib3g6cnVudGltZVwiKTtcblxuLyoqIFJlc29sdmVzIHRoZSBhdXRoZW50aWNhdGVkIGlkZW50aXR5IGZvciByYXcgcmVxdWVzdCBoZWFkZXJzLiAqL1xuZXhwb3J0IHR5cGUgTGFrZWJveElkZW50aXR5UmVzb2x2ZXIgPSAoaGVhZGVyczogSW5jb21pbmdIdHRwSGVhZGVycykgPT4gc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4vKiogTWluaW1hbCBMYWtlYmFzZSBwb29sIHVzZWQgdG8gZHJvcCBsZWdhY3kgb3duZXJzaGlwIHNjaGVtYXMuICovXG5leHBvcnQgaW50ZXJmYWNlIExha2Vib3hMZWdhY3lQb29sIHtcbiAgcXVlcnkoc3FsOiBzdHJpbmcsIHZhbHVlcz86IHVua25vd25bXSk6IFByb21pc2U8eyByb3dzOiBBcnJheTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4gfT47XG59XG5cbmludGVyZmFjZSBCb290IHtcbiAga2V5OiBzdHJpbmc7XG4gIGVudHJ5OiBMYWtlYm94RW50cnk7XG4gIHNlc3Npb246IFNzaFNlc3Npb247XG4gIHVzZXJzOiBNYXA8c3RyaW5nLCBQcm9taXNlPHZvaWQ+PjtcbiAgc2VydmljZXM6IE1hcDxzdHJpbmcsIE1hcDxzdHJpbmcsIExha2Vib3hDb250cm9sbGVyU2VydmljZT4+O1xuICBzdGFydGluZzogTWFwPHN0cmluZywgUHJvbWlzZTxMYWtlYm94U2VydmljZT4+O1xuICBkZXNrdG9wPzogUHJvbWlzZTx2b2lkPjtcbn1cblxuaW50ZXJmYWNlIFNlcnZpY2VMaXN0aW5nIHtcbiAgc2VydmljZXM6IExha2Vib3hTZXJ2aWNlW107XG4gIHN0YWxlOiBib29sZWFuO1xuICBvYnNlcnZlZEF0Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE93bnMgdGhlIHNpbmdsZSBsYXppbHkgY3JlYXRlZCBMYWtlYm94IG9mIG9uZSBhcHBsaWNhdGlvbi5cbiAqXG4gKiBFdmVyeSBEYXRhYnJpY2tzIExha2Vib3ggUkVTVCBjYWxsIHVzZXMgdGhlIGFwcCBzZXJ2aWNlIHByaW5jaXBhbCBzdXBwbGllZFxuICogdGhyb3VnaCB7QGxpbmsgaW5pdGlhbGl6ZX07IHJlcXVlc3QgaWRlbnRpdHkgb25seSBzZWxlY3RzIHRoZSBpbnRlcm5hbCBMaW51eFxuICogYWNjb3VudC4gRWFjaCBhdXRoZW50aWNhdGVkIGlkZW50aXR5IG1hcHMgdGhyb3VnaCBvbmUgRk5WLTFhIGhhc2ggdG8gYSBsb2NrZWRcbiAqIGFjY291bnQsIHBlcnNpc3RlbnQgaG9tZSwgcm91dGUgc2VnbWVudCwgYW5kIHNlcnZpY2UgcG9ydHMuIExpZmVjeWNsZSBhbmRcbiAqIHBlci1ib290IGJvb3RzdHJhcCBhcmUgc2VyaWFsaXplZCBpbi1wcm9jZXNzOyB0aGUgcGVyc2lzdGVudCByZXNvdXJjZVxuICogcmVnaXN0cnkgc2VyaWFsaXplcyBmaXJzdCBjcmVhdGlvbiBhY3Jvc3MgcmVwbGljYXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBMYWtlYm94UnVudGltZSB7XG4gIHJlYWRvbmx5IHJvdXRlczogTGFrZWJveFJvdXRlUmVnaXN0cnk7XG4gIHJlYWRvbmx5IG1ldHJpY3M6IExha2Vib3hNZXRyaWNzO1xuICBwcml2YXRlIHJlYWRvbmx5IGtleXM6IFNzaEtleVN0b3JlO1xuICBwcml2YXRlIHJlYWRvbmx5IHN0b3BQYXJlbnRUZXJtaW5hdGlvblNpZ25hbDogKCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSByZWFkb25seSBzaHV0ZG93bkNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIHByaXZhdGUgYXBpPzogTGFrZWJveENsaWVudDtcbiAgcHJpdmF0ZSBpZGVudGl0eTogTGFrZWJveElkZW50aXR5UmVzb2x2ZXIgPSAoKSA9PiB1bmRlZmluZWQ7XG4gIC8qKiBJbi1tZW1vcnkgaWRlbnRpdGllcyBvZiByb3V0ZWQgdXNlcnM7IG5ldmVyIHBlcnNpc3RlZC4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSByb3V0ZWRJZGVudGl0aWVzID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgcHJpdmF0ZSBjYWNoZWQ/OiB7IGVudHJ5PzogTGFrZWJveEVudHJ5OyBhdDogbnVtYmVyIH07XG4gIHByaXZhdGUgYm9vdD86IEJvb3Q7XG4gIC8qKiBMYXN0IGJvb3QgdGhhdCBjb21wbGV0ZWQgcnVudGltZSBib290c3RyYXAgYW5kIHByb2R1Y2VkIGEgbWV0cmljcyBzYW1wbGUuICovXG4gIHByaXZhdGUgcmVhZHlCb290S2V5Pzogc3RyaW5nO1xuICBwcml2YXRlIGNvbnZlcmdpbmc/OiBQcm9taXNlPEJvb3Q+O1xuICBwcml2YXRlIHdha2luZz86IFByb21pc2U8dW5rbm93bj47XG4gIHByaXZhdGUgbWV0cmljc0xlYXNlPzogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD47XG4gIHByaXZhdGUgaWRsZVRpbWVyPzogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0SW50ZXJ2YWw+O1xuICBwcml2YXRlIGxhc3RBY3Rpdml0eSA9IERhdGUubm93KCk7XG4gIHByaXZhdGUgYWN0aXZlQ29tbWFuZHMgPSAwO1xuICAvKiogTGFzdCBzZXJ2aWNlIHN0YXRlcyBwZXIgdXNlciBoYXNoLCBrZXB0IGFmdGVyIGFuIGlkbGUgc2Vzc2lvbiByZWxlYXNlLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGxhc3RTZXJ2aWNlcyA9IG5ldyBNYXA8c3RyaW5nLCBNYXA8c3RyaW5nLCBMYWtlYm94Q29udHJvbGxlclNlcnZpY2U+PigpO1xuICBwcml2YXRlIHJlYWRvbmx5IGxhc3RTZXJ2aWNlc09ic2VydmVkQXQgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICBwcml2YXRlIHJlc291cmNlUmVnaXN0cnk/OiBMYWtlYm94UmVzb3VyY2VSZWdpc3RyeTtcbiAgcHJpdmF0ZSBzZXJ2aWNlU25hcHNob3RzPzogTGFrZWJveFNlcnZpY2VTbmFwc2hvdHM7XG4gIHByaXZhdGUgY2xvc2luZz86IFByb21pc2U8dm9pZD47XG5cbiAgLyoqIENyZWF0ZXMgYSBydW50aW1lIGZyb20gcmVzb2x2ZWQgcGx1Z2luIGNvbmZpZ3VyYXRpb24uICovXG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IGNvbmZpZzogUmVzb2x2ZWRMYWtlYm94UGx1Z2luQ29uZmlnKSB7XG4gICAgdGhpcy5rZXlzID0gbmV3IFNzaEtleVN0b3JlKGNvbmZpZy5rZXlEaXJlY3RvcnkpO1xuICAgIHRoaXMucm91dGVzID0gbmV3IExha2Vib3hSb3V0ZVJlZ2lzdHJ5KGNvbmZpZy5yb3V0ZVByZWZpeCwge1xuICAgICAgdXNlcjogKGhlYWRlcnMpID0+IHtcbiAgICAgICAgY29uc3QgaWRlbnRpdHkgPSB0aGlzLmlkZW50aXR5KGhlYWRlcnMpO1xuICAgICAgICBpZiAoIWlkZW50aXR5KSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCB1c2VyID0gdGhpcy51c2VyKGlkZW50aXR5KTtcbiAgICAgICAgdGhpcy5yb3V0ZWRJZGVudGl0aWVzLnNldCh1c2VyLmhhc2gsIGlkZW50aXR5KTtcbiAgICAgICAgcmV0dXJuIHVzZXI7XG4gICAgICB9LFxuICAgICAgcmVzb2x2ZTogKHVzZXIsIHNlcnZpY2UpID0+IHRoaXMucmVzb2x2ZVJvdXRlKHVzZXIsIHNlcnZpY2UpLFxuICAgICAgdW5hdmFpbGFibGU6ICh1c2VyLCBzZXJ2aWNlKSA9PiB0aGlzLm1hcmtVbmF2YWlsYWJsZSh1c2VyLCBzZXJ2aWNlKSxcbiAgICB9KTtcbiAgICB0aGlzLm1ldHJpY3MgPSBuZXcgTGFrZWJveE1ldHJpY3MoXG4gICAgICAoc2lnbmFsKSA9PiB0aGlzLnJlYWRNZXRyaWNzKHNpZ25hbCksXG4gICAgICBjb25maWcubWV0cmljc0ludGVydmFsU2Vjb25kcyAqIDFfMDAwLFxuICAgICk7XG4gICAgdGhpcy5zdG9wUGFyZW50VGVybWluYXRpb25TaWduYWwgPSBvblBhcmVudFRlcm1pbmF0aW9uU2lnbmFsKCgpID0+IHRoaXMucm91dGVzLmJlZ2luU2h1dGRvd24oKSk7XG4gIH1cblxuICAvKipcbiAgICogU3VwcGxpZXMgYXBwIHNlcnZpY2UtcHJpbmNpcGFsIGNyZWRlbnRpYWxzIGFuZCB0aGUgcmVxdWVzdCBpZGVudGl0eVxuICAgKiByZXNvbHZlciB1c2VkIGJ5IHJvdXRlcy5cbiAgICovXG4gIGluaXRpYWxpemUoXG4gICAgYXV0aDogTGFrZWJveEF1dGgsXG4gICAgaWRlbnRpdHk/OiBMYWtlYm94SWRlbnRpdHlSZXNvbHZlcixcbiAgICBzZXJ2aWNlU25hcHNob3RzPzogTGFrZWJveFNlcnZpY2VTbmFwc2hvdHMsXG4gICAgcmVzb3VyY2VSZWdpc3RyeT86IExha2Vib3hSZXNvdXJjZVJlZ2lzdHJ5LFxuICApOiB2b2lkIHtcbiAgICB0aGlzLmFwaSA9IG5ldyBMYWtlYm94Q2xpZW50KGF1dGgpO1xuICAgIGlmIChpZGVudGl0eSkgdGhpcy5pZGVudGl0eSA9IGlkZW50aXR5O1xuICAgIGlmIChzZXJ2aWNlU25hcHNob3RzKSB0aGlzLnNlcnZpY2VTbmFwc2hvdHMgPSBzZXJ2aWNlU25hcHNob3RzO1xuICAgIGlmIChyZXNvdXJjZVJlZ2lzdHJ5KSB0aGlzLnJlc291cmNlUmVnaXN0cnkgPSByZXNvdXJjZVJlZ2lzdHJ5O1xuICB9XG5cbiAgLyoqIERlcml2ZXMgdGhlIExha2Vib3ggYWNjb3VudCBmb3Igb25lIGF1dGhlbnRpY2F0ZWQgaWRlbnRpdHkuICovXG4gIHVzZXIoaWRlbnRpdHk6IHN0cmluZyk6IExha2Vib3hVc2VyIHtcbiAgICByZXR1cm4gbGFrZWJveFVzZXIoaWRlbnRpdHksIHRoaXMuY29uZmlnLnJvdXRlUHJlZml4KTtcbiAgfVxuXG4gIC8qKiBTdW1tYXJpemVzIHRoZSBhcHAgTGFrZWJveCBmb3Igb25lIHVzZXIgd2l0aG91dCBjcmVhdGluZyBpdC4gKi9cbiAgYXN5bmMgc3VtbWFyeShpZGVudGl0eTogc3RyaW5nLCBzaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8TGFrZWJveFN1bW1hcnk+IHtcbiAgICBjb25zdCB1c2VyID0gdGhpcy51c2VyKGlkZW50aXR5KTtcbiAgICBjb25zdCBiYXNlID0geyBhdXRvOiB0aGlzLmNvbmZpZy5hdXRvLCBuYW1lOiBcIkxha2Vib3hcIiwgdXNlciB9O1xuICAgIGxldCBlbnRyeTogTGFrZWJveEVudHJ5IHwgdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICBlbnRyeSA9IGF3YWl0IHRoaXMuZW50cnkoc2lnbmFsLCB0cnVlKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGlzTGFrZWJveFVuYXZhaWxhYmxlKGVycm9yKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLmJhc2UsXG4gICAgICAgICAgc3VwcG9ydGVkOiBmYWxzZSxcbiAgICAgICAgICBzdGF0dXM6IFwibWlzc2luZ1wiLFxuICAgICAgICAgIHNlcnZpY2VzOiBbXSxcbiAgICAgICAgICBzZXJ2aWNlc1N0YWxlOiBmYWxzZSxcbiAgICAgICAgICBjYW5TdGFydDogZmFsc2UsXG4gICAgICAgICAgY2FuU3RvcDogZmFsc2UsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gICAgY29uc3QgcGxhdGZvcm1TdGF0dXM6IExha2Vib3hTdGF0dXMgPSBlbnRyeSA/IG5vcm1hbGl6ZUxha2Vib3hTdGF0dXMoZW50cnkuc3RhdHVzKSA6IFwibWlzc2luZ1wiO1xuICAgIGNvbnN0IHN0YXR1cyA9IHRoaXMucHJvZHVjdFN0YXR1cyhlbnRyeSwgcGxhdGZvcm1TdGF0dXMpO1xuICAgIGlmIChlbnRyeSAmJiBwbGF0Zm9ybVN0YXR1cyA9PT0gXCJydW5uaW5nXCIgJiYgc3RhdHVzID09PSBcInN0YXJ0aW5nXCIpIHtcbiAgICAgIHRoaXMud2FrZSgoKSA9PiB0aGlzLnJlYWR5KCkpO1xuICAgIH1cbiAgICBjb25zdCBsaXN0aW5nID0gYXdhaXQgdGhpcy5zZXJ2aWNlTGlzdGluZyhpZGVudGl0eSwgdXNlciwgZW50cnksIHN0YXR1cywgc2lnbmFsKTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uYmFzZSxcbiAgICAgIHN1cHBvcnRlZDogdHJ1ZSxcbiAgICAgIHN0YXR1cyxcbiAgICAgIC4uLihlbnRyeSA/IHsgaWQ6IGVudHJ5LnNhbmRib3hJZCB9IDoge30pLFxuICAgICAgLi4uKGxha2Vib3hJZGxlVGltZW91dFNlY29uZHMoZW50cnk/LmlkbGVUaW1lb3V0KSAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8geyBpZGxlVGltZW91dFNlY29uZHM6IGxha2Vib3hJZGxlVGltZW91dFNlY29uZHMoZW50cnk/LmlkbGVUaW1lb3V0KSB9XG4gICAgICAgIDoge30pLFxuICAgICAgc2VydmljZXM6IGxpc3Rpbmcuc2VydmljZXMsXG4gICAgICBzZXJ2aWNlc1N0YWxlOiBsaXN0aW5nLnN0YWxlLFxuICAgICAgLi4uKGxpc3Rpbmcub2JzZXJ2ZWRBdCA/IHsgc2VydmljZXNPYnNlcnZlZEF0OiBsaXN0aW5nLm9ic2VydmVkQXQgfSA6IHt9KSxcbiAgICAgIGNhblN0YXJ0OiBzdGF0dXMgIT09IFwicnVubmluZ1wiICYmIHN0YXR1cyAhPT0gXCJzdGFydGluZ1wiLFxuICAgICAgY2FuU3RvcDogc3RhdHVzID09PSBcInJ1bm5pbmdcIiB8fCBzdGF0dXMgPT09IFwic3RhcnRpbmdcIixcbiAgICB9O1xuICB9XG5cbiAgLyoqIENyZWF0ZXMgdGhlIExha2Vib3ggd2hlbiBuZWVkZWQsIHN0YXJ0cyBpdCwgYW5kIHJlc3RvcmVzIHNhdmVkIHNlcnZpY2VzLiAqL1xuICBhc3luYyBzdGFydChzaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMucmVhZHkoc2lnbmFsLCB0cnVlKTtcbiAgfVxuXG4gIC8qKiBTdG9wcyB0aGUgc2hhcmVkIExha2Vib3ggZm9yIGV2ZXJ5IHVzZXIuIEZpbGVzIGFuZCBzYXZlZCBzZXJ2aWNlcyBwZXJzaXN0LiAqL1xuICBhc3luYyBzdG9wKHNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZW50cnkgPSBhd2FpdCB0aGlzLmVudHJ5KHNpZ25hbCwgdHJ1ZSk7XG4gICAgaWYgKCFlbnRyeSkgcmV0dXJuO1xuICAgIGF3YWl0IHRoaXMuZGlzY2FyZEJvb3QoKTtcbiAgICBhd2FpdCBlbnN1cmVMYWtlYm94U3RvcHBlZCh0aGlzLmNsaWVudCgpLCBlbnRyeSwgc2lnbmFsKTtcbiAgICB0aGlzLmNhY2hlZCA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKiBQZXJtYW5lbnRseSBkZWxldGVzIHRoZSBtYW5hZ2VkIExha2Vib3ggYW5kIGV2ZXJ5IHVzZXIncyBmaWxlcy4gKi9cbiAgYXN5bmMgZGVsZXRlKHNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgZW50cnkgPSBhd2FpdCB0aGlzLmVudHJ5KHNpZ25hbCwgdHJ1ZSk7XG4gICAgaWYgKCFlbnRyeSkgcmV0dXJuIGZhbHNlO1xuICAgIGF3YWl0IHRoaXMuZGlzY2FyZEJvb3QoKTtcbiAgICBhd2FpdCB0aGlzLmNsaWVudCgpLmRlbGV0ZShlbnRyeS5zYW5kYm94SWQsIHNpZ25hbCk7XG4gICAgYXdhaXQgdGhpcy5yZXNvdXJjZXMoKS5jbGVhcih0aGlzLmNsaWVudCgpKTtcbiAgICB0aGlzLnJlYWR5Qm9vdEtleSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmNhY2hlZCA9IHsgYXQ6IERhdGUubm93KCkgfTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIG9uZSBjb21tYW5kIGFzIHRoZSB1c2VyJ3MgYWNjb3VudCwgY3JlYXRpbmcgb3Igc3RhcnRpbmcgdGhlIExha2Vib3hcbiAgICogd2hlbiBgYXV0b2AgaXMgZW5hYmxlZC5cbiAgICovXG4gIGV4ZWN1dGUoaWRlbnRpdHk6IHN0cmluZywgaW5wdXQ6IExha2Vib3hDb21tYW5kUmVxdWVzdCwgc2lnbmFsPzogQWJvcnRTaWduYWwpOiBTc2hDb21tYW5kIHtcbiAgICBjb25zdCByZXF1ZXN0ID0gbGFrZWJveENvbW1hbmRSZXF1ZXN0U2NoZW1hLnBhcnNlKGlucHV0KTtcbiAgICBjb25zdCB0aW1lb3V0TXMgPSByZXF1ZXN0LnRpbWVvdXRNcyA/PyB0aGlzLmNvbmZpZy5jb21tYW5kVGltZW91dE1zO1xuICAgIGNvbnN0IHVzZXIgPSB0aGlzLnVzZXIoaWRlbnRpdHkpO1xuICAgIHJldHVybiBuZXcgU3NoQ29tbWFuZChcbiAgICAgIHJlcXVlc3QuY29tbWFuZCxcbiAgICAgIHJlcXVlc3QuYXJncyxcbiAgICAgIHsgdGltZW91dE1zLCBzaWduYWwgfSxcbiAgICAgIGFzeW5jIChleGVjdXRpb24pID0+IHtcbiAgICAgICAgY29uc3QgYm9vdCA9IGF3YWl0IHRoaXMucmVhZHlVc2VyKHVzZXIsIGlkZW50aXR5LCBleGVjdXRpb24uc2lnbmFsKTtcbiAgICAgICAgdGhpcy5hY3RpdmVDb21tYW5kcyArPSAxO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBhd2FpdCBleGVjdXRpb24uZm9sbG93KFxuICAgICAgICAgICAgYm9vdC5zZXNzaW9uLmV4ZWN1dGUocmVxdWVzdC5jb21tYW5kLCByZXF1ZXN0LmFyZ3MsIHtcbiAgICAgICAgICAgICAgdXNlcixcbiAgICAgICAgICAgICAgLi4uKHJlcXVlc3QuY3dkID8geyBjd2Q6IHJlcXVlc3QuY3dkIH0gOiB7fSksXG4gICAgICAgICAgICAgIC4uLihyZXF1ZXN0LmVudiA/IHsgZW52OiByZXF1ZXN0LmVudiB9IDoge30pLFxuICAgICAgICAgICAgICB0aW1lb3V0TXMsXG4gICAgICAgICAgICAgIHNpZ25hbDogZXhlY3V0aW9uLnNpZ25hbCxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdGhpcy5hY3RpdmVDb21tYW5kcyAtPSAxO1xuICAgICAgICAgIHRoaXMudG91Y2goKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLyoqIExpc3RzIHRoZSB1c2VyJ3Mgc2VydmljZXMsIGluY2x1ZGluZyBpZGxlIGJ1aWx0LWlucy4gTmV2ZXIgY3JlYXRlcyB0aGUgTGFrZWJveC4gKi9cbiAgYXN5bmMgbGlzdFNlcnZpY2VzKGlkZW50aXR5OiBzdHJpbmcsIHNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxMYWtlYm94U2VydmljZVtdPiB7XG4gICAgY29uc3QgdXNlciA9IHRoaXMudXNlcihpZGVudGl0eSk7XG4gICAgY29uc3QgZW50cnkgPSBhd2FpdCB0aGlzLmVudHJ5KHNpZ25hbCk7XG4gICAgY29uc3Qgc3RhdHVzOiBMYWtlYm94U3RhdHVzID0gZW50cnkgPyBub3JtYWxpemVMYWtlYm94U3RhdHVzKGVudHJ5LnN0YXR1cykgOiBcIm1pc3NpbmdcIjtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuc2VydmljZUxpc3RpbmcoaWRlbnRpdHksIHVzZXIsIGVudHJ5LCBzdGF0dXMsIHNpZ25hbCkpLnNlcnZpY2VzO1xuICB9XG5cbiAgLyoqIENyZWF0ZXMgb3IgcmVwbGFjZXMgb25lIGltYWdlIHNlcnZpY2UgYW5kIHdhaXRzIHVudGlsIGl0IGlzIHJlYWR5IG9yIGZhaWxlZC4gKi9cbiAgYXN5bmMgY3JlYXRlU2VydmljZShcbiAgICBpZGVudGl0eTogc3RyaW5nLFxuICAgIGlucHV0OiBDcmVhdGVMYWtlYm94U2VydmljZVJlcXVlc3QsXG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4gICk6IFByb21pc2U8TGFrZWJveFNlcnZpY2U+IHtcbiAgICBjb25zdCB1c2VyID0gdGhpcy51c2VyKGlkZW50aXR5KTtcbiAgICBjb25zdCBkZWZpbml0aW9uID0gaW1hZ2VEZWZpbml0aW9uKGlucHV0LCB1c2VyKTtcbiAgICBjb25zdCBib290ID0gYXdhaXQgdGhpcy5yZWFkeVVzZXIodXNlciwgaWRlbnRpdHksIHNpZ25hbCk7XG4gICAgYXdhaXQgdGhpcy5jb250cm9sbGVyKGJvb3QsIHVzZXIsIFwicHV0XCIsIFtlbmNvZGUoZGVmaW5pdGlvbildLCBzaWduYWwpO1xuICAgIHJldHVybiB0aGlzLnJ1blNlcnZpY2UoYm9vdCwgdXNlciwgZGVmaW5pdGlvbiwgc2lnbmFsKTtcbiAgfVxuXG4gIC8qKiBTdGFydHMgYSBzYXZlZCBzZXJ2aWNlIG9yIGEgYnVpbHQtaW4gYW5kIHdhaXRzIHVudGlsIGl0IGlzIHJlYWR5IG9yIGZhaWxlZC4gKi9cbiAgYXN5bmMgc3RhcnRTZXJ2aWNlKFxuICAgIGlkZW50aXR5OiBzdHJpbmcsXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuICApOiBQcm9taXNlPExha2Vib3hTZXJ2aWNlPiB7XG4gICAgY29uc3QgdXNlciA9IHRoaXMudXNlcihpZGVudGl0eSk7XG4gICAgY29uc3QgYm9vdCA9IGF3YWl0IHRoaXMucmVhZHlVc2VyKHVzZXIsIGlkZW50aXR5LCBzaWduYWwpO1xuICAgIGNvbnN0IGJ1aWx0SW4gPSBsYWtlYm94QnVpbHRJblNlcnZpY2VOYW1lU2NoZW1hLnNhZmVQYXJzZShuYW1lKTtcbiAgICBpZiAoYnVpbHRJbi5zdWNjZXNzKSB7XG4gICAgICBjb25zdCBkZWZpbml0aW9uID0gYnVpbHRJbkRlZmluaXRpb24oYnVpbHRJbi5kYXRhLCB1c2VyKTtcbiAgICAgIGF3YWl0IHRoaXMuY29udHJvbGxlcihib290LCB1c2VyLCBcInB1dFwiLCBbZW5jb2RlKGRlZmluaXRpb24pXSwgc2lnbmFsKTtcbiAgICAgIHJldHVybiB0aGlzLnJ1blNlcnZpY2UoYm9vdCwgdXNlciwgZGVmaW5pdGlvbiwgc2lnbmFsKTtcbiAgICB9XG4gICAgY29uc3Qgc2F2ZWQgPSAoYXdhaXQgdGhpcy5yZWZyZXNoU2VydmljZXMoYm9vdCwgdXNlciwgaWRlbnRpdHksIHNpZ25hbCkpLmdldChuYW1lKTtcbiAgICBpZiAoIXNhdmVkKSB0aHJvdyBuZXcgRXJyb3IoYExha2Vib3ggc2VydmljZSAke25hbWV9IGRvZXMgbm90IGV4aXN0YCk7XG4gICAgcmV0dXJuIHRoaXMucnVuU2VydmljZShib290LCB1c2VyLCBzYXZlZC5kZWZpbml0aW9uLCBzaWduYWwpO1xuICB9XG5cbiAgLyoqIFN0b3BzIG9uZSBydW5uaW5nIHNlcnZpY2Ugd2l0aG91dCByZW1vdmluZyBpdHMgZGVmaW5pdGlvbi4gKi9cbiAgYXN5bmMgc3RvcFNlcnZpY2UoaWRlbnRpdHk6IHN0cmluZywgbmFtZTogc3RyaW5nLCBzaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8TGFrZWJveFNlcnZpY2U+IHtcbiAgICBjb25zdCB1c2VyID0gdGhpcy51c2VyKGlkZW50aXR5KTtcbiAgICBjb25zdCBib290ID0gYXdhaXQgdGhpcy5yZWFkeVVzZXIodXNlciwgaWRlbnRpdHksIHNpZ25hbCk7XG4gICAgY29uc3Qgc3RvcHBlZCA9IExha2Vib3hDb250cm9sbGVyU2VydmljZVNjaGVtYS5wYXJzZShcbiAgICAgIGF3YWl0IHRoaXMuY29udHJvbGxlcihib290LCB1c2VyLCBcInN0b3BcIiwgW25hbWVdLCBzaWduYWwpLFxuICAgICk7XG4gICAgdGhpcy5jYWNoZVNlcnZpY2UoYm9vdCwgdXNlciwgc3RvcHBlZCk7XG4gICAgcmV0dXJuIHRvTGFrZWJveFNlcnZpY2Uoc3RvcHBlZCwgdXNlciwgdGhpcy5jb25maWcucm91dGVQcmVmaXgpO1xuICB9XG5cbiAgLyoqIFN0b3BzIGFuZCBkZWxldGVzIG9uZSBzYXZlZCBzZXJ2aWNlLiBNb3VudGVkIGhvbWUgZGlyZWN0b3JpZXMgYXJlIHByZXNlcnZlZC4gKi9cbiAgYXN5bmMgcmVtb3ZlU2VydmljZShpZGVudGl0eTogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIHNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgdXNlciA9IHRoaXMudXNlcihpZGVudGl0eSk7XG4gICAgY29uc3QgYm9vdCA9IGF3YWl0IHRoaXMucmVhZHlVc2VyKHVzZXIsIGlkZW50aXR5LCBzaWduYWwpO1xuICAgIGNvbnN0IHJlc3VsdCA9IChhd2FpdCB0aGlzLmNvbnRyb2xsZXIoYm9vdCwgdXNlciwgXCJyZW1vdmVcIiwgW25hbWVdLCBzaWduYWwpKSBhcyB7XG4gICAgICByZW1vdmVkPzogYm9vbGVhbjtcbiAgICB9O1xuICAgIGlmIChyZXN1bHQucmVtb3ZlZCA9PT0gdHJ1ZSkgYXdhaXQgdGhpcy5yZWZyZXNoU2VydmljZXMoYm9vdCwgdXNlciwgaWRlbnRpdHksIHNpZ25hbCk7XG4gICAgcmV0dXJuIHJlc3VsdC5yZW1vdmVkID09PSB0cnVlO1xuICB9XG5cbiAgLyoqIFJlYWRzIGEgYm91bmRlZCB0YWlsIG9mIG9uZSBzZXJ2aWNlIGxvZy4gKi9cbiAgYXN5bmMgc2VydmljZUxvZ3MoXG4gICAgaWRlbnRpdHk6IHN0cmluZyxcbiAgICBpbnB1dDogTGFrZWJveFNlcnZpY2VMb2dzUmVxdWVzdCxcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbCxcbiAgKTogUHJvbWlzZTx7IGxvZzogc3RyaW5nIH0+IHtcbiAgICBjb25zdCByZXF1ZXN0ID0gbGFrZWJveFNlcnZpY2VMb2dzUmVxdWVzdFNjaGVtYS5wYXJzZShpbnB1dCk7XG4gICAgY29uc3QgdXNlciA9IHRoaXMudXNlcihpZGVudGl0eSk7XG4gICAgY29uc3QgZW50cnkgPSBhd2FpdCB0aGlzLmVudHJ5KHNpZ25hbCk7XG4gICAgaWYgKCFlbnRyeSB8fCBub3JtYWxpemVMYWtlYm94U3RhdHVzKGVudHJ5LnN0YXR1cykgIT09IFwicnVubmluZ1wiKSByZXR1cm4geyBsb2c6IFwiXCIgfTtcbiAgICBjb25zdCBib290ID0gYXdhaXQgdGhpcy5yZWFkeVVzZXIodXNlciwgaWRlbnRpdHksIHNpZ25hbCk7XG4gICAgY29uc3QgcmVzdWx0ID0gKGF3YWl0IHRoaXMuY29udHJvbGxlcihcbiAgICAgIGJvb3QsXG4gICAgICB1c2VyLFxuICAgICAgXCJsb2dzXCIsXG4gICAgICBbcmVxdWVzdC5uYW1lLCBTdHJpbmcocmVxdWVzdC5tYXhMaW5lcyksIFN0cmluZyhyZXF1ZXN0Lm1heENoYXJzKV0sXG4gICAgICBzaWduYWwsXG4gICAgKSkgYXMgeyBsb2c/OiBzdHJpbmcgfTtcbiAgICByZXR1cm4geyBsb2c6IHJlc3VsdC5sb2cgPz8gXCJcIiB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgcmVjZW50IG1ldHJpY3MgYW5kIGtlZXBzIHNhbXBsaW5nIGZvciBvbmUgbGVhc2UgaW50ZXJ2YWwuIFNhbXBsaW5nXG4gICAqIHJ1bnMgb25seSB3aGlsZSB0aGUgTGFrZWJveCBydW5zIGFuZCBhIGNhbGxlciBpcyB3YXRjaGluZywgc28gbWV0cmljcyBuZXZlclxuICAgKiBrZWVwIGFuIG90aGVyd2lzZSBpZGxlIExha2Vib3ggYXdha2UuXG4gICAqL1xuICBhc3luYyBtZXRyaWNzUmVzcG9uc2Uoc2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPExha2Vib3hNZXRyaWNzUmVzcG9uc2U+IHtcbiAgICBjb25zdCBlbnRyeSA9IGF3YWl0IHRoaXMuZW50cnkoc2lnbmFsKTtcbiAgICBjb25zdCBwbGF0Zm9ybVN0YXR1czogTGFrZWJveFN0YXR1cyA9IGVudHJ5ID8gbm9ybWFsaXplTGFrZWJveFN0YXR1cyhlbnRyeS5zdGF0dXMpIDogXCJtaXNzaW5nXCI7XG4gICAgaWYgKHBsYXRmb3JtU3RhdHVzICE9PSBcInJ1bm5pbmdcIikge1xuICAgICAgdGhpcy5tZXRyaWNzLnN0b3AoKTtcbiAgICAgIHJldHVybiB7IHN0YXR1czogcGxhdGZvcm1TdGF0dXMsIHNlcmllczogW10gfTtcbiAgICB9XG4gICAgaWYgKCFlbnRyeSB8fCAhdGhpcy5ib290IHx8IHRoaXMuYm9vdC5rZXkgIT09IHRoaXMuYm9vdEtleShlbnRyeSkpIHtcbiAgICAgIHRoaXMubWV0cmljcy5zdG9wKCk7XG4gICAgICB0aGlzLndha2UoKCkgPT4gdGhpcy5yZWFkeSgpKTtcbiAgICAgIHJldHVybiB7IHN0YXR1czogXCJzdGFydGluZ1wiLCBzZXJpZXM6IFtdIH07XG4gICAgfVxuICAgIHRoaXMubGVhc2VNZXRyaWNzKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1czogdGhpcy5wcm9kdWN0U3RhdHVzKGVudHJ5LCBwbGF0Zm9ybVN0YXR1cyksXG4gICAgICBzZXJpZXM6IFsuLi50aGlzLm1ldHJpY3Muc2VyaWVzKCldLFxuICAgIH07XG4gIH1cblxuICAvKiogU3Vic2NyaWJlcyB0byBtZXRyaWNzIHNuYXBzaG90cyB3aGlsZSB0aGUgTGFrZWJveCBydW5zLiAqL1xuICBzdWJzY3JpYmVNZXRyaWNzKGxpc3RlbmVyOiAoc25hcHNob3Q6IExha2Vib3hNZXRyaWNzU25hcHNob3QpID0+IHZvaWQpOiAoKSA9PiB2b2lkIHtcbiAgICB0aGlzLm1ldHJpY3Mub24oXCJzbmFwc2hvdFwiLCBsaXN0ZW5lcik7XG4gICAgaWYgKHRoaXMuYm9vdD8ua2V5ID09PSB0aGlzLnJlYWR5Qm9vdEtleSkgdGhpcy5tZXRyaWNzLnN0YXJ0KCk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHRoaXMubWV0cmljcy5vZmYoXCJzbmFwc2hvdFwiLCBsaXN0ZW5lcik7XG4gICAgICB0aGlzLmxlYXNlTWV0cmljcygpO1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyBsZWdhY3kgcGVyLXVzZXIgTGFrZWJveGVzIGFuZCBkcm9wcyBsZWdhY3kgb3duZXJzaGlwIHNjaGVtYXMuXG4gICAqXG4gICAqIFRoZXJlIGlzIG5vIG1pZ3JhdGlvbjogdGhlIGVhcmxpZXIgb25lLW1hY2hpbmUtcGVyLXVzZXIgbW9kZWwgaXMgcmVtb3ZlZC5cbiAgICogVGhlIG1hbmFnZWQgYXBwIExha2Vib3ggYW5kIExha2Vib3hlcyB3aXRoIG90aGVyIG5hbWVzIGFyZSBuZXZlciB0b3VjaGVkLlxuICAgKi9cbiAgYXN5bmMgY2xlYW51cExlZ2FjeShwb29sPzogTGFrZWJveExlZ2FjeVBvb2wsIHNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGVudHJpZXMgPSBhd2FpdCB0aGlzLmNsaWVudCgpLmxpc3Qoc2lnbmFsKTtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBlbnRyaWVzXG4gICAgICAgICAgLmZpbHRlcigoZW50cnkpID0+IGVudHJ5Lm5hbWUgJiYgTEVHQUNZX05BTUUudGVzdChlbnRyeS5uYW1lKSlcbiAgICAgICAgICAubWFwKGFzeW5jIChlbnRyeSkgPT4ge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jbGllbnQoKS5kZWxldGUoZW50cnkuc2FuZGJveElkLCBzaWduYWwpO1xuICAgICAgICAgICAgbG9nZ2VyLmluZm8oXCJkZWxldGVkIGxlZ2FjeSBwZXItdXNlciBMYWtlYm94XCIsIHtcbiAgICAgICAgICAgICAgaWQ6IGVudHJ5LnNhbmRib3hJZCxcbiAgICAgICAgICAgICAgbmFtZTogZW50cnkubmFtZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKCFpc0xha2Vib3hVbmF2YWlsYWJsZShlcnJvcikpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oXCJsZWdhY3kgTGFrZWJveCBjbGVhbnVwIGZhaWxlZFwiLCB7IGVycm9yOiB0b0Vycm9yKGVycm9yKSB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFwb29sKSByZXR1cm47XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHNjaGVtYXMgPSBhd2FpdCBwb29sLnF1ZXJ5KFxuICAgICAgICBcIlNFTEVDVCBuc3BuYW1lIEZST00gcGdfbmFtZXNwYWNlIFdIRVJFIG5zcG5hbWUgPSAkMSBPUiBzdGFydHNfd2l0aChuc3BuYW1lLCAkMilcIixcbiAgICAgICAgW0xFR0FDWV9TQ0hFTUFfUFJFRklYLCBgJHtMRUdBQ1lfU0NIRU1BX1BSRUZJWH1fYF0sXG4gICAgICApO1xuICAgICAgZm9yIChjb25zdCByb3cgb2Ygc2NoZW1hcy5yb3dzKSB7XG4gICAgICAgIGNvbnN0IHNjaGVtYSA9IFN0cmluZyhyb3cubnNwbmFtZSk7XG4gICAgICAgIGF3YWl0IHBvb2wucXVlcnkoYERST1AgU0NIRU1BIElGIEVYSVNUUyBcIiR7c2NoZW1hLnJlcGxhY2VBbGwoJ1wiJywgJ1wiXCInKX1cIiBDQVNDQURFYCk7XG4gICAgICAgIGxvZ2dlci5pbmZvKFwiZHJvcHBlZCBsZWdhY3kgTGFrZWJveCBvd25lcnNoaXAgc2NoZW1hXCIsIHsgc2NoZW1hIH0pO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIud2FybihcImxlZ2FjeSBvd25lcnNoaXAgc2NoZW1hIGNsZWFudXAgZmFpbGVkXCIsIHsgZXJyb3I6IHRvRXJyb3IoZXJyb3IpIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBDYW5jZWxzIGluLWZsaWdodCB3b3JrIGJlZm9yZSB0ZWFyZG93bi4gKi9cbiAgYWJvcnRBY3RpdmVPcGVyYXRpb25zKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zaHV0ZG93bkNvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWQpIHRoaXMuc2h1dGRvd25Db250cm9sbGVyLmFib3J0KCk7XG4gIH1cblxuICAvKiogQ2xvc2VzIHJvdXRlcywgbWV0cmljcywgYW5kIHRoZSBTU0ggc2Vzc2lvbiB3aXRob3V0IGNoYW5naW5nIHRoZSBMYWtlYm94LiAqL1xuICBjbG9zZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmFib3J0QWN0aXZlT3BlcmF0aW9ucygpO1xuICAgIHRoaXMucm91dGVzLmJlZ2luU2h1dGRvd24oKTtcbiAgICB0aGlzLmNsb3NpbmcgPz89IChhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAodGhpcy5tZXRyaWNzTGVhc2UpIGNsZWFyVGltZW91dCh0aGlzLm1ldHJpY3NMZWFzZSk7XG4gICAgICAgIHRoaXMubWV0cmljcy5zdG9wKCk7XG4gICAgICAgIGF3YWl0IHRoaXMucm91dGVzLmNsb3NlKCk7XG4gICAgICAgIGF3YWl0IHRoaXMuYm9vdD8uc2Vzc2lvbi5jbG9zZSgpO1xuICAgICAgICB0aGlzLmJvb3QgPSB1bmRlZmluZWQ7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLnN0b3BQYXJlbnRUZXJtaW5hdGlvblNpZ25hbCgpO1xuICAgICAgfVxuICAgIH0pKCk7XG4gICAgcmV0dXJuIHRoaXMuY2xvc2luZztcbiAgfVxuXG4gIHByaXZhdGUgY2xpZW50KCk6IExha2Vib3hDbGllbnQge1xuICAgIGlmICghdGhpcy5hcGkpIHRocm93IG5ldyBFcnJvcihcIlRoZSBMYWtlYm94IHJ1bnRpbWUgaGFzIG5vIGFwcCBzZXJ2aWNlLXByaW5jaXBhbCBjcmVkZW50aWFsc1wiKTtcbiAgICByZXR1cm4gdGhpcy5hcGk7XG4gIH1cblxuICBwcml2YXRlIHJlc291cmNlcygpOiBMYWtlYm94UmVzb3VyY2VSZWdpc3RyeSB7XG4gICAgaWYgKCF0aGlzLnJlc291cmNlUmVnaXN0cnkpIHRocm93IG5ldyBFcnJvcihcIlRoZSBMYWtlYm94IHJ1bnRpbWUgaGFzIG5vIHJlc291cmNlIHJlZ2lzdHJ5XCIpO1xuICAgIHJldHVybiB0aGlzLnJlc291cmNlUmVnaXN0cnk7XG4gIH1cblxuICAvKiogUmV0dXJucyB0aGUgbWFuYWdlZCBMYWtlYm94IGVudHJ5LCBjYWNoZWQgYnJpZWZseSB0byBrZWVwIHJvdXRlcyBjaGVhcC4gKi9cbiAgcHJpdmF0ZSBhc3luYyBlbnRyeShzaWduYWw/OiBBYm9ydFNpZ25hbCwgZnJlc2ggPSBmYWxzZSk6IFByb21pc2U8TGFrZWJveEVudHJ5IHwgdW5kZWZpbmVkPiB7XG4gICAgaWYgKCFmcmVzaCAmJiB0aGlzLmNhY2hlZCAmJiBEYXRlLm5vdygpIC0gdGhpcy5jYWNoZWQuYXQgPCBFTlRSWV9UVExfTVMpIHtcbiAgICAgIHJldHVybiB0aGlzLmNhY2hlZC5lbnRyeTtcbiAgICB9XG4gICAgY29uc3QgZW50cnkgPSBhd2FpdCB0aGlzLnJlc291cmNlcygpLnJlYWQodGhpcy5jbGllbnQoKSwgc2lnbmFsKTtcbiAgICB0aGlzLmNhY2hlZCA9IHsgLi4uKGVudHJ5ID8geyBlbnRyeSB9IDoge30pLCBhdDogRGF0ZS5ub3coKSB9O1xuICAgIGlmICghZW50cnkgfHwgbm9ybWFsaXplTGFrZWJveFN0YXR1cyhlbnRyeS5zdGF0dXMpICE9PSBcInJ1bm5pbmdcIikge1xuICAgICAgdGhpcy5yZWFkeUJvb3RLZXkgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmICh0aGlzLmJvb3QgJiYgKCFlbnRyeSB8fCB0aGlzLmJvb3RLZXkoZW50cnkpICE9PSB0aGlzLmJvb3Qua2V5KSkgYXdhaXQgdGhpcy5kaXNjYXJkQm9vdCgpO1xuICAgIHJldHVybiBlbnRyeTtcbiAgfVxuXG4gIHByaXZhdGUgYm9vdEtleShlbnRyeTogTGFrZWJveEVudHJ5KTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7ZW50cnkuc2FuZGJveElkfVxcMCR7ZW50cnkubGFzdFN0YXJ0VGltZSA/PyBcIlwifWA7XG4gIH1cblxuICBwcml2YXRlIHByb2R1Y3RTdGF0dXMoZW50cnk6IExha2Vib3hFbnRyeSB8IHVuZGVmaW5lZCwgc3RhdHVzOiBMYWtlYm94U3RhdHVzKTogTGFrZWJveFN0YXR1cyB7XG4gICAgcmV0dXJuIGVudHJ5ICYmIHN0YXR1cyA9PT0gXCJydW5uaW5nXCIgJiYgdGhpcy5yZWFkeUJvb3RLZXkgIT09IHRoaXMuYm9vdEtleShlbnRyeSlcbiAgICAgID8gXCJzdGFydGluZ1wiXG4gICAgICA6IHN0YXR1cztcbiAgfVxuXG4gIC8qKiBTZXJpYWxpemVzIGNyZWF0ZSwgc3RhcnQsIGNvbm5lY3QsIGFuZCBib290c3RyYXAgZm9yIHRoZSBjdXJyZW50IGJvb3QuICovXG4gIHByaXZhdGUgcmVhZHkoc2lnbmFsPzogQWJvcnRTaWduYWwsIGV4cGxpY2l0ID0gZmFsc2UpOiBQcm9taXNlPEJvb3Q+IHtcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5ib290O1xuICAgIGlmIChjdXJyZW50ICYmIHRoaXMuY2FjaGVkPy5lbnRyeSAmJiB0aGlzLmJvb3RLZXkodGhpcy5jYWNoZWQuZW50cnkpID09PSBjdXJyZW50LmtleSkge1xuICAgICAgaWYgKERhdGUubm93KCkgLSB0aGlzLmNhY2hlZC5hdCA8IEVOVFJZX1RUTF9NUykgcmV0dXJuIFByb21pc2UucmVzb2x2ZShjdXJyZW50KTtcbiAgICB9XG4gICAgdGhpcy5jb252ZXJnaW5nID8/PSB0aGlzLmNvbnZlcmdlKHNpZ25hbCwgZXhwbGljaXQpLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgdGhpcy5jb252ZXJnaW5nID0gdW5kZWZpbmVkO1xuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmNvbnZlcmdpbmc7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvbnZlcmdlKHNpZ25hbDogQWJvcnRTaWduYWwgfCB1bmRlZmluZWQsIGV4cGxpY2l0OiBib29sZWFuKTogUHJvbWlzZTxCb290PiB7XG4gICAgY29uc3Qgb3BlcmF0aW9uU2lnbmFsID0gc2lnbmFsXG4gICAgICA/IEFib3J0U2lnbmFsLmFueShbc2lnbmFsLCB0aGlzLnNodXRkb3duQ29udHJvbGxlci5zaWduYWxdKVxuICAgICAgOiB0aGlzLnNodXRkb3duQ29udHJvbGxlci5zaWduYWw7XG4gICAgbGV0IGVudHJ5ID0gYXdhaXQgdGhpcy5lbnRyeShvcGVyYXRpb25TaWduYWwsIHRydWUpO1xuICAgIGlmICghZW50cnkgfHwgbm9ybWFsaXplTGFrZWJveFN0YXR1cyhlbnRyeS5zdGF0dXMpICE9PSBcInJ1bm5pbmdcIikge1xuICAgICAgaWYgKCF0aGlzLmNvbmZpZy5hdXRvICYmICFleHBsaWNpdCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYExha2Vib3ggaXMgJHtlbnRyeSA/IGVudHJ5LnN0YXR1cyA6IFwibm90IGNyZWF0ZWRcIn07IHN0YXJ0IGl0IGV4cGxpY2l0bHkgYmVjYXVzZSBhdXRvIGlzIGZhbHNlYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZW50cnkgPz89IGF3YWl0IHRoaXMucmVzb3VyY2VzKCkuZ2V0T3JDcmVhdGUodGhpcy5jbGllbnQoKSwgb3BlcmF0aW9uU2lnbmFsKTtcbiAgICBpZiAobGFrZWJveElkbGVUaW1lb3V0U2Vjb25kcyhlbnRyeS5pZGxlVGltZW91dCkgIT09IHRoaXMuY29uZmlnLmlkbGVUaW1lb3V0U2Vjb25kcykge1xuICAgICAgZW50cnkgPSBhd2FpdCB0aGlzLmNsaWVudCgpLnNldElkbGVUaW1lb3V0KFxuICAgICAgICBlbnRyeS5zYW5kYm94SWQsXG4gICAgICAgIHRoaXMuY29uZmlnLmlkbGVUaW1lb3V0U2Vjb25kcyxcbiAgICAgICAgb3BlcmF0aW9uU2lnbmFsLFxuICAgICAgKTtcbiAgICB9XG4gICAgZW50cnkgPSBhd2FpdCBlbnN1cmVMYWtlYm94UnVubmluZyh0aGlzLmNsaWVudCgpLCBlbnRyeSwgb3BlcmF0aW9uU2lnbmFsKTtcbiAgICB0aGlzLmNhY2hlZCA9IHsgZW50cnksIGF0OiBEYXRlLm5vdygpIH07XG4gICAgY29uc3Qga2V5ID0gdGhpcy5ib290S2V5KGVudHJ5KTtcbiAgICBpZiAodGhpcy5ib290Py5rZXkgPT09IGtleSkgcmV0dXJuIHRoaXMuYm9vdDtcbiAgICBhd2FpdCB0aGlzLmRpc2NhcmRCb290KCk7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IGF3YWl0IHRoaXMuY29ubmVjdChlbnRyeSwgb3BlcmF0aW9uU2lnbmFsKTtcbiAgICBjb25zdCBib290OiBCb290ID0ge1xuICAgICAga2V5LFxuICAgICAgZW50cnksXG4gICAgICBzZXNzaW9uLFxuICAgICAgdXNlcnM6IG5ldyBNYXAoKSxcbiAgICAgIHNlcnZpY2VzOiBuZXcgTWFwKCksXG4gICAgICBzdGFydGluZzogbmV3IE1hcCgpLFxuICAgIH07XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3RvcmVkID0gYXdhaXQgdGhpcy5ib290c3RyYXAoc2Vzc2lvbiwgb3BlcmF0aW9uU2lnbmFsKTtcbiAgICAgIHRoaXMubWV0cmljcy5zdG9wKCk7XG4gICAgICB0aGlzLm1ldHJpY3Muc2VlZCgoYXdhaXQgdGhpcy5hZG1pbihzZXNzaW9uLCBbXCJtZXRyaWNzXCJdLCBvcGVyYXRpb25TaWduYWwpKS5zdGRvdXQpO1xuICAgICAgdGhpcy5ib290ID0gYm9vdDtcbiAgICAgIHRoaXMucmVhZHlCb290S2V5ID0ga2V5O1xuICAgICAgdGhpcy53YXRjaElkbGUoKTtcbiAgICAgIGlmICh0aGlzLm1ldHJpY3MubGlzdGVuZXJDb3VudChcInNuYXBzaG90XCIpID4gMCkgdGhpcy5tZXRyaWNzLnN0YXJ0KCk7XG4gICAgICBmb3IgKGNvbnN0IGhhc2ggb2YgcmVzdG9yZWQpIHZvaWQgdGhpcy5yZXN0b3JlVXNlcihib290LCBoYXNoKTtcbiAgICAgIHJldHVybiBib290O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBhd2FpdCBzZXNzaW9uLmNsb3NlKCk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvbm5lY3QoZW50cnk6IExha2Vib3hFbnRyeSwgc2lnbmFsOiBBYm9ydFNpZ25hbCk6IFByb21pc2U8U3NoU2Vzc2lvbj4ge1xuICAgIGNvbnN0IGFwaSA9IHRoaXMuY2xpZW50KCk7XG4gICAgY29uc3Qgc2NvcGUgPSBhd2FpdCBhcGkud29ya3NwYWNlU2NvcGUoKTtcbiAgICBjb25zdCBrZXkgPSBhd2FpdCB0aGlzLmtleXMuZW5zdXJlUmVnaXN0ZXJlZChhcGksIFNTSF9LRVlfT1dORVIsIHNpZ25hbCk7XG4gICAgY29uc3QgZ2F0ZXdheUhvc3QgPSBlbnRyeS5nYXRld2F5SG9zdCA/PyBrZXkuZ2F0ZXdheUhvc3Q7XG4gICAgaWYgKCFnYXRld2F5SG9zdCkgdGhyb3cgbmV3IEVycm9yKFwiRGF0YWJyaWNrcyBMYWtlYm94IGRpZCBub3QgcmV0dXJuIGFuIFNTSCBnYXRld2F5IGhvc3RcIik7XG4gICAgY29uc3QgcG9ydCA9IHRoaXMuY29uZmlnLmdhdGV3YXlQb3J0O1xuICAgIGNvbnN0IGtub3duSG9zdCA9IGF3YWl0IHRoaXMua2V5cy5rbm93bkhvc3Qoc2NvcGUsIFNTSF9LRVlfT1dORVIsIGdhdGV3YXlIb3N0LCBwb3J0KTtcbiAgICBjb25zdCBzZXNzaW9uID0gbmV3IFNzaFNlc3Npb24oe1xuICAgICAgaG9zdDogZ2F0ZXdheUhvc3QsXG4gICAgICBwb3J0LFxuICAgICAgdXNlcm5hbWU6IGVudHJ5LnNhbmRib3hJZCxcbiAgICAgIHByaXZhdGVLZXk6IGtleS5wcml2YXRlS2V5LFxuICAgICAgcHJpdmF0ZUtleVBhdGg6IGtleS5wcml2YXRlS2V5UGF0aCxcbiAgICAgIGtub3duSG9zdHNQYXRoOiB0aGlzLmtleXMua25vd25Ib3N0c1BhdGgoc2NvcGUsIFNTSF9LRVlfT1dORVIsIGdhdGV3YXlIb3N0LCBwb3J0KSxcbiAgICAgIGNvbm5lY3RUaW1lb3V0TXM6IHRoaXMuY29uZmlnLmNvbm5lY3RUaW1lb3V0TXMsXG4gICAgICBzc2hUcmFuc3BvcnQ6IHRoaXMuY29uZmlnLnNzaFRyYW5zcG9ydCxcbiAgICAgIHNzaDJQYXRjaDogdGhpcy5jb25maWcuc3NoMlBhdGNoLFxuICAgICAgLi4uKGtub3duSG9zdCA/IHsga25vd25Ib3N0IH0gOiB7fSksXG4gICAgICByZW1lbWJlckhvc3Q6IChmaW5nZXJwcmludCwgaG9zdEtleSkgPT5cbiAgICAgICAgdGhpcy5rZXlzLnJlbWVtYmVySG9zdChzY29wZSwgU1NIX0tFWV9PV05FUiwgZ2F0ZXdheUhvc3QsIHBvcnQsIGZpbmdlcnByaW50LCBob3N0S2V5KSxcbiAgICB9KTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgc2Vzc2lvbi5jb25uZWN0KCk7XG4gICAgICByZXR1cm4gc2Vzc2lvbjtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgYXdhaXQgc2Vzc2lvbi5jbG9zZSgpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgLyoqIFJ1bnMgdGhlIGZpeGVkIHByaXZpbGVnZWQgYm9vdHN0cmFwIGFuZCByZXR1cm5zIHRoZSByZXN0b3JlZCB1c2VyIGhhc2hlcy4gKi9cbiAgcHJpdmF0ZSBhc3luYyBib290c3RyYXAoc2Vzc2lvbjogU3NoU2Vzc2lvbiwgc2lnbmFsOiBBYm9ydFNpZ25hbCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICBjb25zdCBoZWxwZXJzID0gT2JqZWN0LmVudHJpZXMoSEVMUEVSUykubWFwKFxuICAgICAgKFtuYW1lLCBjb250ZW50XSkgPT4gYCR7bmFtZX09JHtCdWZmZXIuZnJvbShjb250ZW50KS50b1N0cmluZyhcImJhc2U2NFwiKX1gLFxuICAgICk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5hZG1pbihzZXNzaW9uLCBbXCJib290c3RyYXBcIiwgLi4uaGVscGVyc10sIHNpZ25hbCk7XG4gICAgcmV0dXJuIHJlc3VsdC5zdGRvdXRcbiAgICAgIC5zcGxpdChcIlxcblwiKVxuICAgICAgLmZpbHRlcigobGluZSkgPT4gbGluZS5zdGFydHNXaXRoKFwiX19MQUtFQk9YX1VTRVJfXz1cIikpXG4gICAgICAubWFwKChsaW5lKSA9PiBsaW5lLnNsaWNlKFwiX19MQUtFQk9YX1VTRVJfXz1cIi5sZW5ndGgpLnRyaW0oKSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGFkbWluKFxuICAgIHNlc3Npb246IFNzaFNlc3Npb24sXG4gICAgYXJnczogcmVhZG9ubHkgc3RyaW5nW10sXG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4gICk6IFByb21pc2U8eyBzdGRvdXQ6IHN0cmluZyB9PiB7XG4gICAgY29uc3QgZW5jb2RlZCA9IEJ1ZmZlci5mcm9tKEFETUlOX1NDUklQVCkudG9TdHJpbmcoXCJiYXNlNjRcIik7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2Vzc2lvbi5leGVjdXRlUHJpdmlsZWdlZChcbiAgICAgIFwic2hcIixcbiAgICAgIFtcIi1jXCIsIGBwcmludGYgJXMgJyR7ZW5jb2RlZH0nIHwgYmFzZTY0IC1kIHwgc2ggLXMgLS0gJHthcmdzLm1hcChzaGVsbFF1b3RlKS5qb2luKFwiIFwiKX1gXSxcbiAgICAgIHsgdGltZW91dE1zOiBTRVRVUF9USU1FT1VUX01TLCAuLi4oc2lnbmFsID8geyBzaWduYWwgfSA6IHt9KSB9LFxuICAgICkucmVzdWx0O1xuICAgIGlmICghcmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYExha2Vib3ggJHthcmdzWzBdfSBmYWlsZWQ6ICR7cmVzdWx0LnN0ZGVyci50cmltKCkgfHwgcmVzdWx0LnN0ZG91dC50cmltKCkgfHwgYGV4aXQgJHtyZXN1bHQuZXhpdENvZGV9YH1gLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKiBNYXJrcyBhY3Rpdml0eSwgcmVhZGllcyB0aGUgY3VycmVudCBib290LCBhbmQgY29udmVyZ2VzIHRoZSB1c2VyJ3MgYWNjb3VudC4gKi9cbiAgcHJpdmF0ZSBhc3luYyByZWFkeVVzZXIoXG4gICAgdXNlcjogTGFrZWJveFVzZXIsXG4gICAgaWRlbnRpdHk6IHN0cmluZyxcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbCxcbiAgKTogUHJvbWlzZTxCb290PiB7XG4gICAgdGhpcy50b3VjaCgpO1xuICAgIGNvbnN0IGJvb3QgPSBhd2FpdCB0aGlzLnJlYWR5KHNpZ25hbCk7XG4gICAgYXdhaXQgdGhpcy5jb252ZXJnZVVzZXIoYm9vdCwgdXNlciwgaWRlbnRpdHksIHNpZ25hbCk7XG4gICAgcmV0dXJuIGJvb3Q7XG4gIH1cblxuICAvKiogQ3JlYXRlcyBvciB2ZXJpZmllcyB0aGUgdXNlcidzIGFjY291bnQgb25jZSBwZXIgYm9vdC4gKi9cbiAgcHJpdmF0ZSBjb252ZXJnZVVzZXIoXG4gICAgYm9vdDogQm9vdCxcbiAgICB1c2VyOiBMYWtlYm94VXNlcixcbiAgICBpZGVudGl0eTogc3RyaW5nLFxuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsZXQgY29udmVyZ2VkID0gYm9vdC51c2Vycy5nZXQodXNlci5oYXNoKTtcbiAgICBpZiAoIWNvbnZlcmdlZCkge1xuICAgICAgY29uc3QgZGlnZXN0ID0gY3JlYXRlSGFzaChcInNoYTI1NlwiKS51cGRhdGUoaWRlbnRpdHkudHJpbSgpLnRvTG93ZXJDYXNlKCkpLmRpZ2VzdChcImhleFwiKTtcbiAgICAgIGNvbnZlcmdlZCA9IHRoaXMuYWRtaW4oXG4gICAgICAgIGJvb3Quc2Vzc2lvbixcbiAgICAgICAgW1wiZW5zdXJlLXVzZXJcIiwgdXNlci5oYXNoLCBTdHJpbmcodXNlci51aWQpLCBkaWdlc3RdLFxuICAgICAgICBzaWduYWwsXG4gICAgICApLnRoZW4oKCkgPT4gdW5kZWZpbmVkKTtcbiAgICAgIGJvb3QudXNlcnMuc2V0KHVzZXIuaGFzaCwgY29udmVyZ2VkKTtcbiAgICAgIGNvbnZlcmdlZC5jYXRjaCgoKSA9PiBib290LnVzZXJzLmRlbGV0ZSh1c2VyLmhhc2gpKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnZlcmdlZDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVzdG9yZVVzZXIoYm9vdDogQm9vdCwgaGFzaDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdXNlciA9IHsgbmFtZTogYGxha2Vib3gtJHtoYXNofWAsIGhvbWU6IGAvaG9tZS9sYWtlYm94LSR7aGFzaH1gIH07XG4gICAgYm9vdC51c2Vycy5zZXQoaGFzaCwgUHJvbWlzZS5yZXNvbHZlKCkpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBib290LnNlc3Npb24uZXhlY3V0ZShcInB5dGhvbjNcIiwgW0NPTlRST0xMRVIsIFwic3RhcnQtYWxsXCJdLCB7XG4gICAgICAgIHVzZXIsXG4gICAgICAgIHRpbWVvdXRNczogU0VUVVBfVElNRU9VVF9NUyxcbiAgICAgICAgc2lnbmFsOiB0aGlzLnNodXRkb3duQ29udHJvbGxlci5zaWduYWwsXG4gICAgICB9KS5yZXN1bHQ7XG4gICAgICBpZiAoIXJlc3VsdC5zdWNjZXNzKSB0aHJvdyBuZXcgRXJyb3IocmVzdWx0LnN0ZGVyci50cmltKCkgfHwgYGV4aXQgJHtyZXN1bHQuZXhpdENvZGV9YCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICh0aGlzLnNodXRkb3duQ29udHJvbGxlci5zaWduYWwuYWJvcnRlZCkgcmV0dXJuO1xuICAgICAgbG9nZ2VyLndhcm4oXCJMYWtlYm94IHNlcnZpY2UgcmVzdG9yZSBmYWlsZWRcIiwge1xuICAgICAgICB1c2VyOiBoYXNoLFxuICAgICAgICBlcnJvcjogdG9FcnJvcihlcnJvciksXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvbnRyb2xsZXIoXG4gICAgYm9vdDogQm9vdCxcbiAgICB1c2VyOiBMYWtlYm94VXNlcixcbiAgICBjb21tYW5kOiBzdHJpbmcsXG4gICAgYXJnczogcmVhZG9ubHkgc3RyaW5nW10sXG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4gICk6IFByb21pc2U8dW5rbm93bj4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJvb3Quc2Vzc2lvbi5leGVjdXRlKFwicHl0aG9uM1wiLCBbQ09OVFJPTExFUiwgY29tbWFuZCwgLi4uYXJnc10sIHtcbiAgICAgIHVzZXIsXG4gICAgICB0aW1lb3V0TXM6IFNFVFVQX1RJTUVPVVRfTVMsXG4gICAgICAuLi4oc2lnbmFsID8geyBzaWduYWwgfSA6IHt9KSxcbiAgICB9KS5yZXN1bHQ7XG4gICAgaWYgKCFyZXN1bHQuc3VjY2Vzcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgTGFrZWJveCBzZXJ2aWNlICR7Y29tbWFuZH0gZmFpbGVkOiAke3Jlc3VsdC5zdGRlcnIudHJpbSgpIHx8IGBleGl0ICR7cmVzdWx0LmV4aXRDb2RlfWB9YCxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBKU09OLnBhcnNlKHJlc3VsdC5zdGRvdXQpIGFzIHVua25vd247XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJ1blNlcnZpY2UoXG4gICAgYm9vdDogQm9vdCxcbiAgICB1c2VyOiBMYWtlYm94VXNlcixcbiAgICBkZWZpbml0aW9uOiBMYWtlYm94Q29udHJvbGxlckRlZmluaXRpb24sXG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4gICk6IFByb21pc2U8TGFrZWJveFNlcnZpY2U+IHtcbiAgICBjb25zdCBrZXkgPSBgJHt1c2VyLmhhc2h9XFwwJHtkZWZpbml0aW9uLm5hbWV9YDtcbiAgICBjb25zdCBwZW5kaW5nID0gYm9vdC5zdGFydGluZy5nZXQoa2V5KTtcbiAgICBpZiAocGVuZGluZykgcmV0dXJuIHBlbmRpbmc7XG4gICAgY29uc3Qgb3BlcmF0aW9uID0gKGFzeW5jICgpID0+IHtcbiAgICAgIGlmIChkZWZpbml0aW9uLmtpbmQgPT09IFwiZGVza3RvcFwiKSB7XG4gICAgICAgIGJvb3QuZGVza3RvcCA/Pz0gdGhpcy5hZG1pbihib290LnNlc3Npb24sIFtcImRlc2t0b3AtcHJlcmVxdWlzaXRlc1wiXSwgc2lnbmFsKS50aGVuKFxuICAgICAgICAgICgpID0+IHVuZGVmaW5lZCxcbiAgICAgICAgKTtcbiAgICAgICAgYm9vdC5kZXNrdG9wLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICBib290LmRlc2t0b3AgPSB1bmRlZmluZWQ7XG4gICAgICAgIH0pO1xuICAgICAgICBhd2FpdCBib290LmRlc2t0b3A7XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLmFkbWluKFxuICAgICAgICBib290LnNlc3Npb24sXG4gICAgICAgIFtcImFsbG93LXBvcnRcIiwgU3RyaW5nKHVzZXIudWlkKSwgU3RyaW5nKGRlZmluaXRpb24ucG9ydCldLFxuICAgICAgICBzaWduYWwsXG4gICAgICApO1xuICAgICAgY29uc3Qgc3RhcnRlZCA9IExha2Vib3hDb250cm9sbGVyU2VydmljZVNjaGVtYS5wYXJzZShcbiAgICAgICAgYXdhaXQgdGhpcy5jb250cm9sbGVyKGJvb3QsIHVzZXIsIFwic3RhcnRcIiwgW2RlZmluaXRpb24ubmFtZV0sIHNpZ25hbCksXG4gICAgICApO1xuICAgICAgdGhpcy5jYWNoZVNlcnZpY2UoYm9vdCwgdXNlciwgc3RhcnRlZCk7XG4gICAgICByZXR1cm4gdG9MYWtlYm94U2VydmljZShzdGFydGVkLCB1c2VyLCB0aGlzLmNvbmZpZy5yb3V0ZVByZWZpeCk7XG4gICAgfSkoKS5maW5hbGx5KCgpID0+IGJvb3Quc3RhcnRpbmcuZGVsZXRlKGtleSkpO1xuICAgIGJvb3Quc3RhcnRpbmcuc2V0KGtleSwgb3BlcmF0aW9uKTtcbiAgICByZXR1cm4gb3BlcmF0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZWZyZXNoU2VydmljZXMoXG4gICAgYm9vdDogQm9vdCxcbiAgICB1c2VyOiBMYWtlYm94VXNlcixcbiAgICBpZGVudGl0eTogc3RyaW5nLFxuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuICApOiBQcm9taXNlPE1hcDxzdHJpbmcsIExha2Vib3hDb250cm9sbGVyU2VydmljZT4+IHtcbiAgICBhd2FpdCB0aGlzLmNvbnZlcmdlVXNlcihib290LCB1c2VyLCBpZGVudGl0eSwgc2lnbmFsKTtcbiAgICBjb25zdCByZXNwb25zZSA9IChhd2FpdCB0aGlzLmNvbnRyb2xsZXIoYm9vdCwgdXNlciwgXCJsaXN0XCIsIFtdLCBzaWduYWwpKSBhcyB7XG4gICAgICBzZXJ2aWNlcz86IHVua25vd25bXTtcbiAgICB9O1xuICAgIGNvbnN0IHNlcnZpY2VzID0gbmV3IE1hcChcbiAgICAgIChyZXNwb25zZS5zZXJ2aWNlcyA/PyBbXSkubWFwKChzZXJ2aWNlKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IExha2Vib3hDb250cm9sbGVyU2VydmljZVNjaGVtYS5wYXJzZShzZXJ2aWNlKTtcbiAgICAgICAgcmV0dXJuIFtwYXJzZWQubmFtZSwgcGFyc2VkXSBhcyBjb25zdDtcbiAgICAgIH0pLFxuICAgICk7XG4gICAgYm9vdC5zZXJ2aWNlcy5zZXQodXNlci5oYXNoLCBzZXJ2aWNlcyk7XG4gICAgdGhpcy5sYXN0U2VydmljZXMuc2V0KHVzZXIuaGFzaCwgc2VydmljZXMpO1xuICAgIGNvbnN0IG9ic2VydmVkQXQgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG4gICAgdGhpcy5sYXN0U2VydmljZXNPYnNlcnZlZEF0LnNldCh1c2VyLmhhc2gsIG9ic2VydmVkQXQpO1xuICAgIGF3YWl0IHRoaXMucGVyc2lzdFNlcnZpY2VTbmFwc2hvdChib290LmVudHJ5LCB1c2VyLCBzZXJ2aWNlcywgb2JzZXJ2ZWRBdCk7XG4gICAgcmV0dXJuIHNlcnZpY2VzO1xuICB9XG5cbiAgcHJpdmF0ZSBjYWNoZVNlcnZpY2UoYm9vdDogQm9vdCwgdXNlcjogTGFrZWJveFVzZXIsIHNlcnZpY2U6IExha2Vib3hDb250cm9sbGVyU2VydmljZSk6IHZvaWQge1xuICAgIGNvbnN0IHNlcnZpY2VzID0gYm9vdC5zZXJ2aWNlcy5nZXQodXNlci5oYXNoKSA/PyBuZXcgTWFwPHN0cmluZywgTGFrZWJveENvbnRyb2xsZXJTZXJ2aWNlPigpO1xuICAgIHNlcnZpY2VzLnNldChzZXJ2aWNlLm5hbWUsIHNlcnZpY2UpO1xuICAgIGJvb3Quc2VydmljZXMuc2V0KHVzZXIuaGFzaCwgc2VydmljZXMpO1xuICAgIHRoaXMubGFzdFNlcnZpY2VzLnNldCh1c2VyLmhhc2gsIHNlcnZpY2VzKTtcbiAgICBjb25zdCBvYnNlcnZlZEF0ID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuICAgIHRoaXMubGFzdFNlcnZpY2VzT2JzZXJ2ZWRBdC5zZXQodXNlci5oYXNoLCBvYnNlcnZlZEF0KTtcbiAgICB2b2lkIHRoaXMucGVyc2lzdFNlcnZpY2VTbmFwc2hvdChib290LmVudHJ5LCB1c2VyLCBzZXJ2aWNlcywgb2JzZXJ2ZWRBdCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlcnZpY2VMaXN0aW5nKFxuICAgIGlkZW50aXR5OiBzdHJpbmcsXG4gICAgdXNlcjogTGFrZWJveFVzZXIsXG4gICAgZW50cnk6IExha2Vib3hFbnRyeSB8IHVuZGVmaW5lZCxcbiAgICBzdGF0dXM6IExha2Vib3hTdGF0dXMsXG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4gICk6IFByb21pc2U8U2VydmljZUxpc3Rpbmc+IHtcbiAgICBpZiAoIWVudHJ5IHx8IHN0YXR1cyA9PT0gXCJtaXNzaW5nXCIpIHtcbiAgICAgIHJldHVybiB7IHNlcnZpY2VzOiB0aGlzLmlkbGVTZXJ2aWNlcyh1c2VyKSwgc3RhbGU6IGZhbHNlIH07XG4gICAgfVxuICAgIGlmIChzdGF0dXMgPT09IFwicnVubmluZ1wiICYmIHRoaXMuYm9vdD8ua2V5ID09PSB0aGlzLmJvb3RLZXkoZW50cnkpKSB7XG4gICAgICBjb25zdCBzZXJ2aWNlcyA9IGF3YWl0IHRoaXMucmVmcmVzaFNlcnZpY2VzKHRoaXMuYm9vdCwgdXNlciwgaWRlbnRpdHksIHNpZ25hbCk7XG4gICAgICByZXR1cm4geyBzZXJ2aWNlczogdGhpcy53aXRoQnVpbHRJbnModXNlciwgc2VydmljZXMpLCBzdGFsZTogZmFsc2UgfTtcbiAgICB9XG4gICAgY29uc3QgbWVtb3J5ID0gdGhpcy5sYXN0U2VydmljZXMuZ2V0KHVzZXIuaGFzaCk7XG4gICAgaWYgKG1lbW9yeSkge1xuICAgICAgY29uc3Qgb2JzZXJ2ZWRBdCA9IHRoaXMubGFzdFNlcnZpY2VzT2JzZXJ2ZWRBdC5nZXQodXNlci5oYXNoKTtcbiAgICAgIGNvbnN0IHNlcnZpY2VzID1cbiAgICAgICAgc3RhdHVzID09PSBcInJ1bm5pbmdcIlxuICAgICAgICAgID8gbWVtb3J5XG4gICAgICAgICAgOiBzdG9wcGVkU25hcHNob3RTZXJ2aWNlcyh7XG4gICAgICAgICAgICAgIG9ic2VydmVkQXQ6IG9ic2VydmVkQXQgPz8gbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgICAgICBkZWZpbml0aW9uczogWy4uLm1lbW9yeS52YWx1ZXMoKV0ubWFwKChzZXJ2aWNlKSA9PiBzZXJ2aWNlLmRlZmluaXRpb24pLFxuICAgICAgICAgICAgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzZXJ2aWNlczogdGhpcy53aXRoQnVpbHRJbnModXNlciwgc2VydmljZXMpLFxuICAgICAgICBzdGFsZTogdHJ1ZSxcbiAgICAgICAgLi4uKG9ic2VydmVkQXQgPyB7IG9ic2VydmVkQXQgfSA6IHt9KSxcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IHNuYXBzaG90ID0gYXdhaXQgdGhpcy5zZXJ2aWNlU25hcHNob3RzPy5yZWFkKGVudHJ5LnNhbmRib3hJZCwgdXNlci5oYXNoKTtcbiAgICByZXR1cm4gc25hcHNob3RcbiAgICAgID8ge1xuICAgICAgICAgIHNlcnZpY2VzOiB0aGlzLndpdGhCdWlsdElucyh1c2VyLCBzdG9wcGVkU25hcHNob3RTZXJ2aWNlcyhzbmFwc2hvdCkpLFxuICAgICAgICAgIHN0YWxlOiB0cnVlLFxuICAgICAgICAgIG9ic2VydmVkQXQ6IHNuYXBzaG90Lm9ic2VydmVkQXQsXG4gICAgICAgIH1cbiAgICAgIDogeyBzZXJ2aWNlczogdGhpcy5pZGxlU2VydmljZXModXNlciksIHN0YWxlOiB0cnVlIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHBlcnNpc3RTZXJ2aWNlU25hcHNob3QoXG4gICAgZW50cnk6IExha2Vib3hFbnRyeSxcbiAgICB1c2VyOiBMYWtlYm94VXNlcixcbiAgICBzZXJ2aWNlczogUmVhZG9ubHlNYXA8c3RyaW5nLCBMYWtlYm94Q29udHJvbGxlclNlcnZpY2U+LFxuICAgIG9ic2VydmVkQXQ6IHN0cmluZyxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5zZXJ2aWNlU25hcHNob3RzPy53cml0ZShlbnRyeS5zYW5kYm94SWQsIHVzZXIuaGFzaCwge1xuICAgICAgb2JzZXJ2ZWRBdCxcbiAgICAgIGRlZmluaXRpb25zOiBbLi4uc2VydmljZXMudmFsdWVzKCldLm1hcCgoc2VydmljZSkgPT4gc2VydmljZS5kZWZpbml0aW9uKSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgd2l0aEJ1aWx0SW5zKFxuICAgIHVzZXI6IExha2Vib3hVc2VyLFxuICAgIHNlcnZpY2VzOiBSZWFkb25seU1hcDxzdHJpbmcsIExha2Vib3hDb250cm9sbGVyU2VydmljZT4sXG4gICk6IExha2Vib3hTZXJ2aWNlW10ge1xuICAgIGNvbnN0IGJ1aWx0SW5zID0gTEFLRUJPWF9CVUlMVF9JTl9TRVJWSUNFUy5tYXAoKHsgbmFtZSB9KSA9PiB7XG4gICAgICBjb25zdCBzYXZlZCA9IHNlcnZpY2VzLmdldChuYW1lKTtcbiAgICAgIHJldHVybiBzYXZlZFxuICAgICAgICA/IHRvTGFrZWJveFNlcnZpY2Uoc2F2ZWQsIHVzZXIsIHRoaXMuY29uZmlnLnJvdXRlUHJlZml4KVxuICAgICAgICA6IGlkbGVCdWlsdEluU2VydmljZShuYW1lLCB1c2VyLCB0aGlzLmNvbmZpZy5yb3V0ZVByZWZpeCk7XG4gICAgfSk7XG4gICAgY29uc3QgY3VzdG9tID0gWy4uLnNlcnZpY2VzLnZhbHVlcygpXVxuICAgICAgLmZpbHRlcigoc2VydmljZSkgPT4gIUxBS0VCT1hfQlVJTFRfSU5fU0VSVklDRVMuc29tZSgoeyBuYW1lIH0pID0+IG5hbWUgPT09IHNlcnZpY2UubmFtZSkpXG4gICAgICAubWFwKChzZXJ2aWNlKSA9PiB0b0xha2Vib3hTZXJ2aWNlKHNlcnZpY2UsIHVzZXIsIHRoaXMuY29uZmlnLnJvdXRlUHJlZml4KSk7XG4gICAgcmV0dXJuIFsuLi5idWlsdElucywgLi4uY3VzdG9tXTtcbiAgfVxuXG4gIHByaXZhdGUgaWRsZVNlcnZpY2VzKHVzZXI6IExha2Vib3hVc2VyKTogTGFrZWJveFNlcnZpY2VbXSB7XG4gICAgcmV0dXJuIExBS0VCT1hfQlVJTFRfSU5fU0VSVklDRVMubWFwKCh7IG5hbWUgfSkgPT5cbiAgICAgIGlkbGVCdWlsdEluU2VydmljZShuYW1lIGFzIExha2Vib3hCdWlsdEluU2VydmljZU5hbWUsIHVzZXIsIHRoaXMuY29uZmlnLnJvdXRlUHJlZml4KSxcbiAgICApO1xuICB9XG5cbiAgLyoqIFJlc29sdmVzIG9uZSByb3V0ZWQgcmVxdWVzdCwgd2FraW5nIHRoZSBMYWtlYm94IG9yIHNlcnZpY2UgaW4gdGhlIGJhY2tncm91bmQuICovXG4gIHByaXZhdGUgYXN5bmMgcmVzb2x2ZVJvdXRlKHVzZXI6IExha2Vib3hVc2VyLCBuYW1lOiBzdHJpbmcpOiBQcm9taXNlPExha2Vib3hSb3V0ZVJlc29sdXRpb24+IHtcbiAgICB0aGlzLnRvdWNoKCk7XG4gICAgY29uc3QgZW50cnkgPSBhd2FpdCB0aGlzLmVudHJ5KCk7XG4gICAgY29uc3QgcnVubmluZyA9IGVudHJ5ICYmIG5vcm1hbGl6ZUxha2Vib3hTdGF0dXMoZW50cnkuc3RhdHVzKSA9PT0gXCJydW5uaW5nXCI7XG4gICAgY29uc3QgYm9vdCA9IHRoaXMuYm9vdDtcbiAgICBpZiAoIXJ1bm5pbmcgfHwgIWJvb3QgfHwgYm9vdC5rZXkgIT09IHRoaXMuYm9vdEtleShlbnRyeSkpIHtcbiAgICAgIGlmICghdGhpcy5jb25maWcuYXV0bykgcmV0dXJuIHsga2luZDogXCJtaXNzaW5nXCIgfTtcbiAgICAgIHRoaXMud2FrZSgoKSA9PiB0aGlzLnJlYWR5KCkpO1xuICAgICAgcmV0dXJuIHsga2luZDogXCJsb2FkaW5nXCIgfTtcbiAgICB9XG4gICAgY29uc3QgaWRlbnRpdHkgPSB0aGlzLnJvdXRlZElkZW50aXRpZXMuZ2V0KHVzZXIuaGFzaCk7XG4gICAgaWYgKCFpZGVudGl0eSkgcmV0dXJuIHsga2luZDogXCJtaXNzaW5nXCIgfTtcbiAgICBsZXQgc2VydmljZSA9IGJvb3Quc2VydmljZXMuZ2V0KHVzZXIuaGFzaCk/LmdldChuYW1lKTtcbiAgICBpZiAoIXNlcnZpY2UpIHNlcnZpY2UgPSAoYXdhaXQgdGhpcy5yZWZyZXNoU2VydmljZXMoYm9vdCwgdXNlciwgaWRlbnRpdHkpKS5nZXQobmFtZSk7XG4gICAgY29uc3QgYnVpbHRJbiA9IGxha2Vib3hCdWlsdEluU2VydmljZU5hbWVTY2hlbWEuc2FmZVBhcnNlKG5hbWUpO1xuICAgIGlmICghc2VydmljZSAmJiAhYnVpbHRJbi5zdWNjZXNzKSByZXR1cm4geyBraW5kOiBcIm1pc3NpbmdcIiB9O1xuICAgIGlmIChzZXJ2aWNlPy5zdGF0ZSA9PT0gXCJyZWFkeVwiKSB7XG4gICAgICByZXR1cm4geyBraW5kOiBcInJlYWR5XCIsIHNlc3Npb246IGJvb3Quc2Vzc2lvbiwgcm91dGU6IHNlcnZpY2VSb3V0ZShzZXJ2aWNlLmRlZmluaXRpb24pIH07XG4gICAgfVxuICAgIGlmIChzZXJ2aWNlPy5zdGF0ZSA9PT0gXCJlcnJvclwiICYmICFib290LnN0YXJ0aW5nLmhhcyhgJHt1c2VyLmhhc2h9XFwwJHtuYW1lfWApKSB7XG4gICAgICByZXR1cm4geyBraW5kOiBcImZhaWxlZFwiLCBtZXNzYWdlOiBzZXJ2aWNlLmVycm9yID8/IFwidGhlIHNlcnZpY2UgZmFpbGVkIHRvIHN0YXJ0XCIgfTtcbiAgICB9XG4gICAgY29uc3QgZGVmaW5pdGlvbiA9IHNlcnZpY2U/LmRlZmluaXRpb24gPz8gYnVpbHRJbkRlZmluaXRpb24oYnVpbHRJbi5kYXRhISwgdXNlcik7XG4gICAgdGhpcy53YWtlKGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghc2VydmljZSkgYXdhaXQgdGhpcy5jb250cm9sbGVyKGJvb3QsIHVzZXIsIFwicHV0XCIsIFtlbmNvZGUoZGVmaW5pdGlvbildKTtcbiAgICAgIGF3YWl0IHRoaXMucnVuU2VydmljZShib290LCB1c2VyLCBkZWZpbml0aW9uKTtcbiAgICB9KTtcbiAgICByZXR1cm4geyBraW5kOiBcImxvYWRpbmdcIiB9O1xuICB9XG5cbiAgcHJpdmF0ZSBtYXJrVW5hdmFpbGFibGUodXNlcjogTGFrZWJveFVzZXIsIG5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuYm9vdD8uc2VydmljZXMuZ2V0KHVzZXIuaGFzaCk/LmRlbGV0ZShuYW1lKTtcbiAgICB0aGlzLmNhY2hlZCA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgd2FrZShhY3Rpb246ICgpID0+IFByb21pc2U8dW5rbm93bj4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy53YWtpbmcpIHJldHVybjtcbiAgICB0aGlzLndha2luZyA9IGFjdGlvbigpXG4gICAgICAuY2F0Y2goKGVycm9yKSA9PiBsb2dnZXIud2FybihcIkxha2Vib3ggd2FrZSBmYWlsZWRcIiwgeyBlcnJvcjogdG9FcnJvcihlcnJvcikgfSkpXG4gICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgIHRoaXMud2FraW5nID0gdW5kZWZpbmVkO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlYWRNZXRyaWNzKHNpZ25hbDogQWJvcnRTaWduYWwpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGJvb3QgPSB0aGlzLmJvb3Q7XG4gICAgaWYgKCFib290KSB0aHJvdyBuZXcgRXJyb3IoXCJMYWtlYm94IGlzIG5vdCBydW5uaW5nXCIpO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gKGF3YWl0IHRoaXMuYWRtaW4oYm9vdC5zZXNzaW9uLCBbXCJtZXRyaWNzXCJdLCBzaWduYWwpKS5zdGRvdXQ7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMuY2FjaGVkID0gdW5kZWZpbmVkO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBsZWFzZU1ldHJpY3MoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmJvb3QpIHJldHVybjtcbiAgICB0aGlzLm1ldHJpY3Muc3RhcnQoKTtcbiAgICBpZiAodGhpcy5tZXRyaWNzTGVhc2UpIGNsZWFyVGltZW91dCh0aGlzLm1ldHJpY3NMZWFzZSk7XG4gICAgdGhpcy5tZXRyaWNzTGVhc2UgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLm1ldHJpY3MubGlzdGVuZXJDb3VudChcInNuYXBzaG90XCIpID09PSAwKSB0aGlzLm1ldHJpY3Muc3RvcCgpO1xuICAgIH0sIE1FVFJJQ1NfTEVBU0VfTVMpO1xuICAgIHRoaXMubWV0cmljc0xlYXNlLnVucmVmPy4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWxlYXNlcyB0aGUgU1NIIHNlc3Npb24gYWZ0ZXIgdGhlIGlkbGUgdGltZW91dCB3aXRob3V0IGNvbW1hbmRzLCBzZXJ2aWNlXG4gICAqIG9wZXJhdGlvbnMsIHJvdXRlZCB0cmFmZmljLCBvcGVuIHN0cmVhbXMsIG9yIG1ldHJpY3Mgd2F0Y2hlcnMuIEFuIG9wZW5cbiAgICogc2Vzc2lvbiBjb3VudHMgYXMgYWN0aXZpdHkgZm9yIHRoZSBwbGF0Zm9ybSB3YXRjaGRvZywgc28gcmVsZWFzaW5nIGl0IGxldHNcbiAgICogdGhlIHBsYXRmb3JtIHN0b3AgdGhlIExha2Vib3ggYWZ0ZXIgaXRzIG93biBpZGxlIHRpbWVvdXQuIFRoZSBuZXh0IHJlcXVlc3RcbiAgICogcmVjb25uZWN0cy5cbiAgICovXG4gIHByaXZhdGUgd2F0Y2hJZGxlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlkbGVUaW1lcikgY2xlYXJJbnRlcnZhbCh0aGlzLmlkbGVUaW1lcik7XG4gICAgdGhpcy5pZGxlVGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBjb25zdCBpZGxlTXMgPSBEYXRlLm5vdygpIC0gdGhpcy5sYXN0QWN0aXZpdHk7XG4gICAgICBpZiAoXG4gICAgICAgICF0aGlzLmJvb3QgfHxcbiAgICAgICAgdGhpcy5jb252ZXJnaW5nIHx8XG4gICAgICAgIGlkbGVNcyA8IHRoaXMuY29uZmlnLmlkbGVUaW1lb3V0U2Vjb25kcyAqIDFfMDAwIHx8XG4gICAgICAgIHRoaXMuYWN0aXZlQ29tbWFuZHMgPiAwIHx8XG4gICAgICAgIHRoaXMuYm9vdC5zdGFydGluZy5zaXplID4gMCB8fFxuICAgICAgICB0aGlzLnJvdXRlcy5hY3RpdmVDb25uZWN0aW9ucygpID4gMCB8fFxuICAgICAgICB0aGlzLm1ldHJpY3MubGlzdGVuZXJDb3VudChcInNuYXBzaG90XCIpID4gMFxuICAgICAgKSB7XG4gICAgICAgIGlmICh0aGlzLnJvdXRlcy5hY3RpdmVDb25uZWN0aW9ucygpID4gMCB8fCB0aGlzLmFjdGl2ZUNvbW1hbmRzID4gMCkgdGhpcy50b3VjaCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBsb2dnZXIuaW5mbyhcInJlbGVhc2luZyBpZGxlIExha2Vib3ggc2Vzc2lvblwiLCB7IGlkbGVTZWNvbmRzOiBNYXRoLnJvdW5kKGlkbGVNcyAvIDFfMDAwKSB9KTtcbiAgICAgIHZvaWQgdGhpcy5kaXNjYXJkQm9vdCgpO1xuICAgIH0sIElETEVfQ0hFQ0tfTVMpO1xuICAgIHRoaXMuaWRsZVRpbWVyLnVucmVmPy4oKTtcbiAgfVxuXG4gIHByaXZhdGUgdG91Y2goKTogdm9pZCB7XG4gICAgdGhpcy5sYXN0QWN0aXZpdHkgPSBEYXRlLm5vdygpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkaXNjYXJkQm9vdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5pZGxlVGltZXIpIGNsZWFySW50ZXJ2YWwodGhpcy5pZGxlVGltZXIpO1xuICAgIHRoaXMuaWRsZVRpbWVyID0gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGJvb3QgPSB0aGlzLmJvb3Q7XG4gICAgdGhpcy5ib290ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMubWV0cmljcy5zdG9wKCk7XG4gICAgYXdhaXQgdGhpcy5yb3V0ZXMuY2xvc2VCcmlkZ2VzKCk7XG4gICAgYXdhaXQgYm9vdD8uc2Vzc2lvbi5jbG9zZSgpLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZW5jb2RlKGRlZmluaXRpb246IExha2Vib3hDb250cm9sbGVyRGVmaW5pdGlvbik6IHN0cmluZyB7XG4gIHJldHVybiBCdWZmZXIuZnJvbShKU09OLnN0cmluZ2lmeShkZWZpbml0aW9uKSkudG9TdHJpbmcoXCJiYXNlNjRcIik7XG59XG5cbmZ1bmN0aW9uIHNoZWxsUXVvdGUodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgJyR7dmFsdWUucmVwbGFjZUFsbChcIidcIiwgXCInXFxcXCcnXCIpfSdgO1xufVxuXG4vKiogUmV0dXJucyB3aGV0aGVyIGFuIGVycm9yIG1lYW5zIHRoZSBtYW5hZ2VkIExha2Vib3ggbm8gbG9uZ2VyIGV4aXN0cy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0xha2Vib3hNaXNzaW5nKGVycm9yOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiBlcnJvciBpbnN0YW5jZW9mIExha2Vib3hBcGlFcnJvciAmJiBlcnJvci5zdGF0dXMgPT09IDQwNDtcbn1cbiJdfQ==
@@ -1,5 +1,5 @@
1
1
  import { createLakeboxServiceRequestSchema, lakeboxServiceKindSchema, lakeboxServiceStateSchema, } from "@dbx-tools/shared-lakebox";
2
- import { lakeboxServicePath } from "@dbx-tools/shared-lakebox/client";
2
+ import { lakeboxServicePath } from "@dbx-tools/shared-lakebox";
3
3
  import { z } from "zod";
4
4
  import { desktopEnvironment, desktopHtmlHead, desktopOpenUrl } from "./desktop.js";
5
5
  import { LAKEBOX_RUNTIME_ROOT, lakeboxServicePort } from "./user.js";
@@ -185,4 +185,4 @@ function injectedEnvironment(user, name, port, route = true) {
185
185
  PORT: value,
186
186
  };
187
187
  }
188
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGlDQUFpQyxFQUNqQyx3QkFBd0IsRUFDeEIseUJBQXlCLEdBSzFCLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDdEUsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUN4QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNuRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFckUsTUFBTSxtQkFBbUIsR0FBRztJQUMxQixxQkFBcUI7SUFDckIsb0JBQW9CO0lBQ3BCLGlCQUFpQjtJQUNqQixtQkFBbUI7SUFDbkIsNEJBQTRCO0lBQzVCLHdCQUF3QjtJQUN4QiwyQkFBMkI7Q0FDNUIsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGlDQUFpQyxHQUFHLENBQUM7S0FDL0MsTUFBTSxDQUFDO0lBQ04sSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDO0lBQzFDLElBQUksRUFBRSx3QkFBd0I7SUFDOUIsS0FBSyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsK0JBQStCLENBQUM7SUFDdEUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLG9CQUFvQixDQUFDO0lBQ3JGLE9BQU8sRUFBRSxDQUFDO1NBQ1AsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUNqQixRQUFRLEVBQUU7U0FDVixRQUFRLENBQUMsd0RBQXdELENBQUM7SUFDckUsR0FBRyxFQUFFLENBQUM7U0FDSCxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUM5QixRQUFRLENBQUMsbURBQW1ELENBQUM7SUFDaEUsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyw4QkFBOEIsQ0FBQztJQUNoRixNQUFNLEVBQUUsQ0FBQztTQUNOLEtBQUssQ0FDSixDQUFDO1NBQ0UsTUFBTSxDQUFDO1FBQ04sTUFBTSxFQUFFLENBQUM7YUFDTixNQUFNLEVBQUU7YUFDUixVQUFVLENBQUMsR0FBRyxDQUFDO2FBQ2YsUUFBUSxDQUFDLDZDQUE2QyxDQUFDO1FBQzFELE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQztRQUM5RCxRQUFRLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQztLQUNsRCxDQUFDO1NBQ0QsTUFBTSxFQUFFLENBQ1o7U0FDQSxRQUFRLENBQUMsY0FBYyxDQUFDO0lBQzNCLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLHdCQUF3QixDQUFDO0lBQ3pELFNBQVMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDO0lBQy9ELFlBQVksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLHlCQUF5QixDQUFDO0lBQzdFLFNBQVMsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDLHVEQUF1RCxDQUFDO0lBQ3hGLEtBQUssRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDLG9DQUFvQyxDQUFDO0lBQ2pFLFdBQVcsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDLHdEQUF3RCxDQUFDO0lBQzNGLFFBQVEsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLG1DQUFtQyxDQUFDO0NBQzlFLENBQUM7S0FDRCxNQUFNLEVBQUU7S0FDUixRQUFRLENBQUMscUZBQXFGLENBQUMsQ0FBQztBQUluRyxNQUFNLENBQUMsTUFBTSw4QkFBOEIsR0FBRyxDQUFDO0tBQzVDLE1BQU0sQ0FBQztJQUNOLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0lBQ2hCLEtBQUssRUFBRSx5QkFBeUI7SUFDaEMsVUFBVSxFQUFFLGlDQUFpQztJQUM3QyxLQUFLLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUM1QixHQUFHLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtDQUMzQixDQUFDO0tBQ0QsV0FBVyxFQUFFO0tBQ2IsUUFBUSxDQUFDLG1EQUFtRCxDQUFDLENBQUM7QUFZakUsa0VBQWtFO0FBQ2xFLE1BQU0sVUFBVSxpQkFBaUIsQ0FDL0IsSUFBK0IsRUFDL0IsSUFBaUI7SUFFakIsTUFBTSxJQUFJLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNqRCxNQUFNLE1BQU0sR0FBRztRQUNiLElBQUk7UUFDSixJQUFJLEVBQUUsSUFBSTtRQUNWLElBQUksRUFBRSxTQUFrQjtRQUN4QixNQUFNLEVBQUUsRUFBRTtRQUNWLElBQUk7UUFDSixTQUFTLEVBQUUsS0FBYztRQUN6QixTQUFTLEVBQUUsS0FBSztRQUNoQixLQUFLLEVBQUUsSUFBSTtRQUNYLFdBQVcsRUFBRSxJQUFJO0tBQ2xCLENBQUM7SUFDRixJQUFJLElBQUksS0FBSyxVQUFVLEVBQUUsQ0FBQztRQUN4QixPQUFPO1lBQ0wsR0FBRyxNQUFNO1lBQ1QsWUFBWSxFQUFFLEVBQUU7WUFDaEIsR0FBRyxFQUFFLG1CQUFtQixDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDO1lBQzFDLE9BQU8sRUFBRTtnQkFDUCxHQUFHLG9CQUFvQixXQUFXO2dCQUNsQyxhQUFhO2dCQUNiLFdBQVc7Z0JBQ1gsUUFBUTtnQkFDUixNQUFNLENBQUMsSUFBSSxDQUFDO2dCQUNaLFlBQVk7Z0JBQ1osR0FBRyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQ3ZFLFdBQVc7Z0JBQ1gsSUFBSTthQUNMO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFDRCxPQUFPO1FBQ0wsR0FBRyxNQUFNO1FBQ1QsWUFBWSxFQUFFLEdBQUc7UUFDakIsR0FBRyxFQUFFLEVBQUUsR0FBRyxrQkFBa0IsRUFBRSxFQUFFLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRTtRQUMxRSxPQUFPLEVBQUUsQ0FBQyxTQUFTLEVBQUUsR0FBRyxvQkFBb0Isc0JBQXNCLENBQUM7S0FDcEUsQ0FBQztBQUNKLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUM3QixLQUFrQyxFQUNsQyxJQUFpQjtJQUVqQixNQUFNLE9BQU8sR0FBRyxpQ0FBaUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0QsTUFBTSxJQUFJLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekQsT0FBTztRQUNMLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtRQUNsQixJQUFJLEVBQUUsT0FBTztRQUNiLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSztRQUNwQixJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUk7UUFDbEIsR0FBRyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3hELEdBQUcsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLG1CQUFtQixDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDeEYsR0FBRyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ25GLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNyQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsRUFBRTtZQUNsRSxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07WUFDcEIsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRO1NBQ3pCLENBQUMsQ0FBQztRQUNILElBQUk7UUFDSixTQUFTLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNO1FBQ3pDLFlBQVksRUFBRSxHQUFHO1FBQ2pCLFNBQVMsRUFBRSxJQUFJO1FBQ2YsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLO1FBQ3BCLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVztRQUNoQyxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztLQUNoRixDQUFDO0FBQ0osQ0FBQztBQUVELHFEQUFxRDtBQUNyRCxNQUFNLFVBQVUsWUFBWSxDQUFDLFVBQXVDO0lBQ2xFLE9BQU87UUFDTCxJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUk7UUFDckIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxXQUFXO1FBQ25DLGVBQWUsRUFBRSxJQUFJO1FBQ3JCLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztLQUN4RSxDQUFDO0FBQ0osQ0FBQztBQUVELDREQUE0RDtBQUM1RCxNQUFNLFVBQVUsZ0JBQWdCLENBQzlCLE9BQWlDLEVBQ2pDLElBQWlCLEVBQ2pCLFdBQW1CO0lBRW5CLE1BQU0sRUFBRSxVQUFVLEVBQUUsR0FBRyxPQUFPLENBQUM7SUFDL0IsTUFBTSxJQUFJLEdBQUcsa0JBQWtCLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pFLE9BQU87UUFDTCxJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUk7UUFDckIsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJO1FBQ3JCLEdBQUcsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN4RCxHQUFHLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDakUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLO1FBQ3BCLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSTtRQUNyQixLQUFLLEVBQUUsVUFBVSxDQUFDLEtBQUs7UUFDdkIsSUFBSTtRQUNKLEdBQUcsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNuRSxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDbEQsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztLQUMzRCxDQUFDO0FBQ0osQ0FBQztBQUVELHFGQUFxRjtBQUNyRixNQUFNLFVBQVUsaUJBQWlCLENBQUMsT0FBdUIsRUFBRSxNQUFlO0lBQ3hFLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxJQUFJLENBQUMsTUFBTTtRQUFFLE9BQU8sT0FBTyxDQUFDO0lBQ2hELElBQUksQ0FBQztRQUNILE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzdCLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxPQUFPLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxRQUFRO1lBQUUsT0FBTyxPQUFPLENBQUM7UUFDNUUsT0FBTyxFQUFFLEdBQUcsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3RFLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0FBQ0gsQ0FBQztBQUVELHFGQUFxRjtBQUNyRixNQUFNLFVBQVUsa0JBQWtCLENBQ2hDLElBQStCLEVBQy9CLElBQWlCLEVBQ2pCLFdBQW1CO0lBRW5CLE9BQU8sZ0JBQWdCLENBQ3JCLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxFQUNyRSxJQUFJLEVBQ0osV0FBVyxDQUNaLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxPQUFPLENBQUMsVUFBdUMsRUFBRSxJQUFZO0lBQ3BFLElBQUksVUFBVSxDQUFDLElBQUksS0FBSyxTQUFTO1FBQUUsT0FBTyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0QsT0FBTyxHQUFHLElBQUksSUFBSSxVQUFVLENBQUMsUUFBUSxJQUFJLEVBQUUsRUFBRSxDQUFDO0FBQ2hELENBQUM7QUFFRCxTQUFTLG1CQUFtQixDQUMxQixJQUFpQixFQUNqQixJQUFZLEVBQ1osSUFBWSxFQUNaLEtBQUssR0FBRyxJQUFJO0lBRVosTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNCLE9BQU87UUFDTCxZQUFZLEVBQUUsSUFBSTtRQUNsQixZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDeEQsWUFBWSxFQUFFLEtBQUs7UUFDbkIsSUFBSSxFQUFFLEtBQUs7S0FDWixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGNyZWF0ZUxha2Vib3hTZXJ2aWNlUmVxdWVzdFNjaGVtYSxcbiAgbGFrZWJveFNlcnZpY2VLaW5kU2NoZW1hLFxuICBsYWtlYm94U2VydmljZVN0YXRlU2NoZW1hLFxuICB0eXBlIENyZWF0ZUxha2Vib3hTZXJ2aWNlUmVxdWVzdCxcbiAgdHlwZSBMYWtlYm94QnVpbHRJblNlcnZpY2VOYW1lLFxuICB0eXBlIExha2Vib3hTZXJ2aWNlLFxuICB0eXBlIExha2Vib3hVc2VyLFxufSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtbGFrZWJveFwiO1xuaW1wb3J0IHsgbGFrZWJveFNlcnZpY2VQYXRoIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWxha2Vib3gvY2xpZW50XCI7XG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuaW1wb3J0IHsgZGVza3RvcEVudmlyb25tZW50LCBkZXNrdG9wSHRtbEhlYWQsIGRlc2t0b3BPcGVuVXJsIH0gZnJvbSBcIi4vZGVza3RvcC50c1wiO1xuaW1wb3J0IHsgTEFLRUJPWF9SVU5USU1FX1JPT1QsIGxha2Vib3hTZXJ2aWNlUG9ydCB9IGZyb20gXCIuL3VzZXIudHNcIjtcblxuY29uc3QgVFRZRF9DTElFTlRfT1BUSU9OUyA9IFtcbiAgXCJ0ZXJtPXh0ZXJtLTI1NmNvbG9yXCIsXG4gIFwicmVuZGVyZXJUeXBlPXdlYmdsXCIsXG4gIFwiY3Vyc29yU3R5bGU9YmFyXCIsXG4gIFwiY29weU9uU2VsZWN0PXRydWVcIixcbiAgXCJyaWdodENsaWNrU2VsZWN0c1dvcmQ9dHJ1ZVwiLFxuICBcImRpc2FibGVMZWF2ZUFsZXJ0PXRydWVcIixcbiAgXCJkaXNhYmxlUmVzaXplT3ZlcmxheT10cnVlXCIsXG5dO1xuXG5leHBvcnQgY29uc3QgTGFrZWJveENvbnRyb2xsZXJEZWZpbml0aW9uU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBuYW1lOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiU2VydmljZSBuYW1lLlwiKSxcbiAgICBraW5kOiBsYWtlYm94U2VydmljZUtpbmRTY2hlbWEsXG4gICAgaW1hZ2U6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIk9DSSBpbWFnZSBmb3IgaW1hZ2Ugc2VydmljZXMuXCIpLFxuICAgIHB1bGw6IHouZW51bShbXCJtaXNzaW5nXCIsIFwiYWx3YXlzXCJdKS5kZWZhdWx0KFwibWlzc2luZ1wiKS5kZXNjcmliZShcIkltYWdlIHB1bGwgcG9saWN5LlwiKSxcbiAgICBjb21tYW5kOiB6XG4gICAgICAuYXJyYXkoei5zdHJpbmcoKSlcbiAgICAgIC5vcHRpb25hbCgpXG4gICAgICAuZGVzY3JpYmUoXCJBcmd2OyBvbWl0dGVkIHRvIHVzZSB0aGUgaW1hZ2UgZW50cnlwb2ludCBhbmQgY29tbWFuZC5cIiksXG4gICAgZW52OiB6XG4gICAgICAucmVjb3JkKHouc3RyaW5nKCksIHouc3RyaW5nKCkpXG4gICAgICAuZGVzY3JpYmUoXCJDb250YWluZXIgZW52aXJvbm1lbnQsIGluY2x1ZGluZyBpbmplY3RlZCB2YWx1ZXMuXCIpLFxuICAgIHdvcmtpbmdEaXJlY3Rvcnk6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIkNvbnRhaW5lciB3b3JraW5nIGRpcmVjdG9yeS5cIiksXG4gICAgbW91bnRzOiB6XG4gICAgICAuYXJyYXkoXG4gICAgICAgIHpcbiAgICAgICAgICAub2JqZWN0KHtcbiAgICAgICAgICAgIHNvdXJjZTogelxuICAgICAgICAgICAgICAuc3RyaW5nKClcbiAgICAgICAgICAgICAgLnN0YXJ0c1dpdGgoXCIvXCIpXG4gICAgICAgICAgICAgIC5kZXNjcmliZShcIkFic29sdXRlIGhvc3QgcGF0aCBiZW5lYXRoIHRoZSB1c2VyJ3MgaG9tZS5cIiksXG4gICAgICAgICAgICB0YXJnZXQ6IHouc3RyaW5nKCkuc3RhcnRzV2l0aChcIi9cIikuZGVzY3JpYmUoXCJDb250YWluZXIgcGF0aC5cIiksXG4gICAgICAgICAgICByZWFkT25seTogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJSZWFkLW9ubHkgYmluZC5cIiksXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuc3RyaWN0KCksXG4gICAgICApXG4gICAgICAuZGVzY3JpYmUoXCJCaW5kIG1vdW50cy5cIiksXG4gICAgcG9ydDogei5udW1iZXIoKS5pbnQoKS5kZXNjcmliZShcIkRlcml2ZWQgbG9vcGJhY2sgcG9ydC5cIiksXG4gICAgcmVhZGluZXNzOiB6LmVudW0oW1widGNwXCIsIFwibm9uZVwiXSkuZGVzY3JpYmUoXCJSZWFkaW5lc3MgY2hlY2suXCIpLFxuICAgIHJlYWR5U2Vjb25kczogei5udW1iZXIoKS5pbnQoKS5wb3NpdGl2ZSgpLmRlc2NyaWJlKFwiTWF4aW11bSByZWFkaW5lc3Mgd2FpdC5cIiksXG4gICAgYXV0b3N0YXJ0OiB6LmJvb2xlYW4oKS5kZXNjcmliZShcIldoZXRoZXIgdGhlIHNlcnZpY2UgcmVzdGFydHMgd2hlbiB0aGUgTGFrZWJveCBzdGFydHMuXCIpLFxuICAgIHJvdXRlOiB6LmJvb2xlYW4oKS5kZXNjcmliZShcIldoZXRoZXIgQXBwS2l0IHJvdXRlcyB0aGUgc2VydmljZS5cIiksXG4gICAgc3RyaXBQcmVmaXg6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiV2hldGhlciB0aGUgcm91dGUgcHJlZml4IGlzIHJlbW92ZWQgYmVmb3JlIGZvcndhcmRpbmcuXCIpLFxuICAgIG9wZW5QYXRoOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJFbnRyeSBwYXRoIGFwcGVuZGVkIHRvIHRoZSByb3V0ZS5cIiksXG4gIH0pXG4gIC5zdHJpY3QoKVxuICAuZGVzY3JpYmUoXCJTZXJ2aWNlIGRlZmluaXRpb24gcGVyc2lzdGVkIGluIHRoZSB1c2VyJ3MgTGFrZWJveCBob21lIGFuZCByZWFkIGJ5IHRoZSBjb250cm9sbGVyLlwiKTtcbi8qKiBTZXJ2aWNlIGRlZmluaXRpb24gcGVyc2lzdGVkIGluIHRoZSB1c2VyJ3MgTGFrZWJveCBob21lLiAqL1xuZXhwb3J0IHR5cGUgTGFrZWJveENvbnRyb2xsZXJEZWZpbml0aW9uID0gei5vdXRwdXQ8dHlwZW9mIExha2Vib3hDb250cm9sbGVyRGVmaW5pdGlvblNjaGVtYT47XG5cbmV4cG9ydCBjb25zdCBMYWtlYm94Q29udHJvbGxlclNlcnZpY2VTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIG5hbWU6IHouc3RyaW5nKCksXG4gICAgc3RhdGU6IGxha2Vib3hTZXJ2aWNlU3RhdGVTY2hlbWEsXG4gICAgZGVmaW5pdGlvbjogTGFrZWJveENvbnRyb2xsZXJEZWZpbml0aW9uU2NoZW1hLFxuICAgIGVycm9yOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgbG9nOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIH0pXG4gIC5wYXNzdGhyb3VnaCgpXG4gIC5kZXNjcmliZShcIk9uZSBzZXJ2aWNlIGFzIHJlcG9ydGVkIGJ5IHRoZSByZW1vdGUgY29udHJvbGxlci5cIik7XG4vKiogT25lIHNlcnZpY2UgYXMgcmVwb3J0ZWQgYnkgdGhlIHJlbW90ZSBjb250cm9sbGVyLiAqL1xuZXhwb3J0IHR5cGUgTGFrZWJveENvbnRyb2xsZXJTZXJ2aWNlID0gei5pbmZlcjx0eXBlb2YgTGFrZWJveENvbnRyb2xsZXJTZXJ2aWNlU2NoZW1hPjtcblxuLyoqIFJvdXRpbmcgYmVoYXZpb3IgZGVyaXZlZCBmcm9tIGEgc2F2ZWQgZGVmaW5pdGlvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGFrZWJveFNlcnZpY2VSb3V0ZSB7XG4gIHBvcnQ6IG51bWJlcjtcbiAgc3RyaXBQcmVmaXg6IGJvb2xlYW47XG4gIHJlZGlyZWN0VG9TbGFzaDogYm9vbGVhbjtcbiAgaHRtbEhlYWQ/OiBzdHJpbmc7XG59XG5cbi8qKiBCdWlsZHMgdGhlIHBhY2thZ2Utb3duZWQgZGVmaW5pdGlvbiBmb3IgYSBidWlsdC1pbiBzZXJ2aWNlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWx0SW5EZWZpbml0aW9uKFxuICBuYW1lOiBMYWtlYm94QnVpbHRJblNlcnZpY2VOYW1lLFxuICB1c2VyOiBMYWtlYm94VXNlcixcbik6IExha2Vib3hDb250cm9sbGVyRGVmaW5pdGlvbiB7XG4gIGNvbnN0IHBvcnQgPSBsYWtlYm94U2VydmljZVBvcnQodXNlci5oYXNoLCBuYW1lKTtcbiAgY29uc3QgY29tbW9uID0ge1xuICAgIG5hbWUsXG4gICAga2luZDogbmFtZSxcbiAgICBwdWxsOiBcIm1pc3NpbmdcIiBhcyBjb25zdCxcbiAgICBtb3VudHM6IFtdLFxuICAgIHBvcnQsXG4gICAgcmVhZGluZXNzOiBcInRjcFwiIGFzIGNvbnN0LFxuICAgIGF1dG9zdGFydDogZmFsc2UsXG4gICAgcm91dGU6IHRydWUsXG4gICAgc3RyaXBQcmVmaXg6IHRydWUsXG4gIH07XG4gIGlmIChuYW1lID09PSBcInRlcm1pbmFsXCIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uY29tbW9uLFxuICAgICAgcmVhZHlTZWNvbmRzOiA2MCxcbiAgICAgIGVudjogaW5qZWN0ZWRFbnZpcm9ubWVudCh1c2VyLCBuYW1lLCBwb3J0KSxcbiAgICAgIGNvbW1hbmQ6IFtcbiAgICAgICAgYCR7TEFLRUJPWF9SVU5USU1FX1JPT1R9L2Jpbi90dHlkYCxcbiAgICAgICAgXCItLWludGVyZmFjZVwiLFxuICAgICAgICBcIjEyNy4wLjAuMVwiLFxuICAgICAgICBcIi0tcG9ydFwiLFxuICAgICAgICBTdHJpbmcocG9ydCksXG4gICAgICAgIFwiLS13cml0YWJsZVwiLFxuICAgICAgICAuLi5UVFlEX0NMSUVOVF9PUFRJT05TLmZsYXRNYXAoKG9wdGlvbikgPT4gW1wiLS1jbGllbnQtb3B0aW9uXCIsIG9wdGlvbl0pLFxuICAgICAgICBcIi9iaW4vYmFzaFwiLFxuICAgICAgICBcIi1sXCIsXG4gICAgICBdLFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5jb21tb24sXG4gICAgcmVhZHlTZWNvbmRzOiAxODAsXG4gICAgZW52OiB7IC4uLmRlc2t0b3BFbnZpcm9ubWVudCgpLCAuLi5pbmplY3RlZEVudmlyb25tZW50KHVzZXIsIG5hbWUsIHBvcnQpIH0sXG4gICAgY29tbWFuZDogW1wiL2Jpbi9zaFwiLCBgJHtMQUtFQk9YX1JVTlRJTUVfUk9PVH0vYmluL2Rlc2t0b3Atc2Vzc2lvbmBdLFxuICB9O1xufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBhbiBhZ2VudCBvciBSRVNUIHNlcnZpY2UgcmVxdWVzdCBhbmQgcmVzb2x2ZXMgaXQgdG8gYSBwZXJzaXN0ZWRcbiAqIGRlZmluaXRpb24gd2l0aCBpbmplY3RlZCB2YXJpYWJsZXMgYW5kIGhvbWUtcmVsYXRpdmUgbW91bnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaW1hZ2VEZWZpbml0aW9uKFxuICBpbnB1dDogQ3JlYXRlTGFrZWJveFNlcnZpY2VSZXF1ZXN0LFxuICB1c2VyOiBMYWtlYm94VXNlcixcbik6IExha2Vib3hDb250cm9sbGVyRGVmaW5pdGlvbiB7XG4gIGNvbnN0IHJlcXVlc3QgPSBjcmVhdGVMYWtlYm94U2VydmljZVJlcXVlc3RTY2hlbWEucGFyc2UoaW5wdXQpO1xuICBjb25zdCBwb3J0ID0gbGFrZWJveFNlcnZpY2VQb3J0KHVzZXIuaGFzaCwgcmVxdWVzdC5uYW1lKTtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiByZXF1ZXN0Lm5hbWUsXG4gICAga2luZDogXCJpbWFnZVwiLFxuICAgIGltYWdlOiByZXF1ZXN0LmltYWdlLFxuICAgIHB1bGw6IHJlcXVlc3QucHVsbCxcbiAgICAuLi4ocmVxdWVzdC5jb21tYW5kID8geyBjb21tYW5kOiByZXF1ZXN0LmNvbW1hbmQgfSA6IHt9KSxcbiAgICBlbnY6IHsgLi4ucmVxdWVzdC5lbnYsIC4uLmluamVjdGVkRW52aXJvbm1lbnQodXNlciwgcmVxdWVzdC5uYW1lLCBwb3J0LCByZXF1ZXN0LnJvdXRlKSB9LFxuICAgIC4uLihyZXF1ZXN0LndvcmtpbmdEaXJlY3RvcnkgPyB7IHdvcmtpbmdEaXJlY3Rvcnk6IHJlcXVlc3Qud29ya2luZ0RpcmVjdG9yeSB9IDoge30pLFxuICAgIG1vdW50czogcmVxdWVzdC5tb3VudHMubWFwKChtb3VudCkgPT4gKHtcbiAgICAgIHNvdXJjZTogYCR7dXNlci5ob21lfS8ke21vdW50LnNvdXJjZS5yZXBsYWNlKC9eXFwuXFwvK3xcXC8rJC9nLCBcIlwiKX1gLFxuICAgICAgdGFyZ2V0OiBtb3VudC50YXJnZXQsXG4gICAgICByZWFkT25seTogbW91bnQucmVhZE9ubHksXG4gICAgfSkpLFxuICAgIHBvcnQsXG4gICAgcmVhZGluZXNzOiByZXF1ZXN0LnJvdXRlID8gXCJ0Y3BcIiA6IFwibm9uZVwiLFxuICAgIHJlYWR5U2Vjb25kczogMzAwLFxuICAgIGF1dG9zdGFydDogdHJ1ZSxcbiAgICByb3V0ZTogcmVxdWVzdC5yb3V0ZSxcbiAgICBzdHJpcFByZWZpeDogcmVxdWVzdC5zdHJpcFByZWZpeCxcbiAgICAuLi4ocmVxdWVzdC5vcGVuUGF0aCA/IHsgb3BlblBhdGg6IHJlcXVlc3Qub3BlblBhdGgucmVwbGFjZSgvXlxcLysvLCBcIlwiKSB9IDoge30pLFxuICB9O1xufVxuXG4vKiogUmV0dXJucyByb3V0ZSBiZWhhdmlvciBmb3IgYSBzYXZlZCBkZWZpbml0aW9uLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcnZpY2VSb3V0ZShkZWZpbml0aW9uOiBMYWtlYm94Q29udHJvbGxlckRlZmluaXRpb24pOiBMYWtlYm94U2VydmljZVJvdXRlIHtcbiAgcmV0dXJuIHtcbiAgICBwb3J0OiBkZWZpbml0aW9uLnBvcnQsXG4gICAgc3RyaXBQcmVmaXg6IGRlZmluaXRpb24uc3RyaXBQcmVmaXgsXG4gICAgcmVkaXJlY3RUb1NsYXNoOiB0cnVlLFxuICAgIC4uLihkZWZpbml0aW9uLmtpbmQgPT09IFwiZGVza3RvcFwiID8geyBodG1sSGVhZDogZGVza3RvcEh0bWxIZWFkIH0gOiB7fSksXG4gIH07XG59XG5cbi8qKiBNYXBzIGEgY29udHJvbGxlciByZXBvcnQgdG8gdGhlIHNoYXJlZCBzZXJ2aWNlIHNoYXBlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvTGFrZWJveFNlcnZpY2UoXG4gIHNlcnZpY2U6IExha2Vib3hDb250cm9sbGVyU2VydmljZSxcbiAgdXNlcjogTGFrZWJveFVzZXIsXG4gIHJvdXRlUHJlZml4OiBzdHJpbmcsXG4pOiBMYWtlYm94U2VydmljZSB7XG4gIGNvbnN0IHsgZGVmaW5pdGlvbiB9ID0gc2VydmljZTtcbiAgY29uc3QgcGF0aCA9IGxha2Vib3hTZXJ2aWNlUGF0aChyb3V0ZVByZWZpeCwgdXNlci5oYXNoLCBkZWZpbml0aW9uLm5hbWUpO1xuICByZXR1cm4ge1xuICAgIG5hbWU6IGRlZmluaXRpb24ubmFtZSxcbiAgICBraW5kOiBkZWZpbml0aW9uLmtpbmQsXG4gICAgLi4uKGRlZmluaXRpb24uaW1hZ2UgPyB7IGltYWdlOiBkZWZpbml0aW9uLmltYWdlIH0gOiB7fSksXG4gICAgLi4uKGRlZmluaXRpb24ub3BlblBhdGggPyB7IG9wZW5QYXRoOiBkZWZpbml0aW9uLm9wZW5QYXRoIH0gOiB7fSksXG4gICAgc3RhdGU6IHNlcnZpY2Uuc3RhdGUsXG4gICAgcG9ydDogZGVmaW5pdGlvbi5wb3J0LFxuICAgIHJvdXRlOiBkZWZpbml0aW9uLnJvdXRlLFxuICAgIHBhdGgsXG4gICAgLi4uKGRlZmluaXRpb24ucm91dGUgPyB7IG9wZW5Vcmw6IG9wZW5VcmwoZGVmaW5pdGlvbiwgcGF0aCkgfSA6IHt9KSxcbiAgICAuLi4oc2VydmljZS5lcnJvciA/IHsgZXJyb3I6IHNlcnZpY2UuZXJyb3IgfSA6IHt9KSxcbiAgICAuLi4oc2VydmljZS5sb2cgIT09IHVuZGVmaW5lZCA/IHsgbG9nOiBzZXJ2aWNlLmxvZyB9IDoge30pLFxuICB9O1xufVxuXG4vKiogUmVzb2x2ZSBhIHJvdXRlZCBzZXJ2aWNlIHBhdGggYWdhaW5zdCB0aGUgYnJvd3NlciBhcHAgb3JpZ2luIGZvciBhZ2VudCBvdXRwdXQuICovXG5leHBvcnQgZnVuY3Rpb24gd2l0aFNlcnZpY2VPcmlnaW4oc2VydmljZTogTGFrZWJveFNlcnZpY2UsIG9yaWdpbj86IHN0cmluZyk6IExha2Vib3hTZXJ2aWNlIHtcbiAgaWYgKCFzZXJ2aWNlLm9wZW5VcmwgfHwgIW9yaWdpbikgcmV0dXJuIHNlcnZpY2U7XG4gIHRyeSB7XG4gICAgY29uc3QgYmFzZSA9IG5ldyBVUkwob3JpZ2luKTtcbiAgICBpZiAoYmFzZS5wcm90b2NvbCAhPT0gXCJodHRwOlwiICYmIGJhc2UucHJvdG9jb2wgIT09IFwiaHR0cHM6XCIpIHJldHVybiBzZXJ2aWNlO1xuICAgIHJldHVybiB7IC4uLnNlcnZpY2UsIG9wZW5Vcmw6IG5ldyBVUkwoc2VydmljZS5vcGVuVXJsLCBiYXNlKS5ocmVmIH07XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBzZXJ2aWNlO1xuICB9XG59XG5cbi8qKiBSZXR1cm5zIHRoZSBzdG9wcGVkIHBsYWNlaG9sZGVyIGZvciBhIGJ1aWx0LWluIHNlcnZpY2UgdGhhdCBoYXMgbmV2ZXIgc3RhcnRlZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpZGxlQnVpbHRJblNlcnZpY2UoXG4gIG5hbWU6IExha2Vib3hCdWlsdEluU2VydmljZU5hbWUsXG4gIHVzZXI6IExha2Vib3hVc2VyLFxuICByb3V0ZVByZWZpeDogc3RyaW5nLFxuKTogTGFrZWJveFNlcnZpY2Uge1xuICByZXR1cm4gdG9MYWtlYm94U2VydmljZShcbiAgICB7IG5hbWUsIHN0YXRlOiBcInN0b3BwZWRcIiwgZGVmaW5pdGlvbjogYnVpbHRJbkRlZmluaXRpb24obmFtZSwgdXNlcikgfSxcbiAgICB1c2VyLFxuICAgIHJvdXRlUHJlZml4LFxuICApO1xufVxuXG5mdW5jdGlvbiBvcGVuVXJsKGRlZmluaXRpb246IExha2Vib3hDb250cm9sbGVyRGVmaW5pdGlvbiwgcGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKGRlZmluaXRpb24ua2luZCA9PT0gXCJkZXNrdG9wXCIpIHJldHVybiBkZXNrdG9wT3BlblVybChwYXRoKTtcbiAgcmV0dXJuIGAke3BhdGh9LyR7ZGVmaW5pdGlvbi5vcGVuUGF0aCA/PyBcIlwifWA7XG59XG5cbmZ1bmN0aW9uIGluamVjdGVkRW52aXJvbm1lbnQoXG4gIHVzZXI6IExha2Vib3hVc2VyLFxuICBuYW1lOiBzdHJpbmcsXG4gIHBvcnQ6IG51bWJlcixcbiAgcm91dGUgPSB0cnVlLFxuKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gIGNvbnN0IHZhbHVlID0gU3RyaW5nKHBvcnQpO1xuICByZXR1cm4ge1xuICAgIFNFUlZJQ0VfTkFNRTogbmFtZSxcbiAgICBTRVJWSUNFX1BBVEg6IHJvdXRlID8gYCR7dXNlci5yb3V0ZVByZWZpeH0vJHtuYW1lfWAgOiBcIlwiLFxuICAgIFNFUlZJQ0VfUE9SVDogdmFsdWUsXG4gICAgUE9SVDogdmFsdWUsXG4gIH07XG59XG4iXX0=
188
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGlDQUFpQyxFQUNqQyx3QkFBd0IsRUFDeEIseUJBQXlCLEdBSzFCLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDL0QsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUN4QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNuRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFckUsTUFBTSxtQkFBbUIsR0FBRztJQUMxQixxQkFBcUI7SUFDckIsb0JBQW9CO0lBQ3BCLGlCQUFpQjtJQUNqQixtQkFBbUI7SUFDbkIsNEJBQTRCO0lBQzVCLHdCQUF3QjtJQUN4QiwyQkFBMkI7Q0FDNUIsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGlDQUFpQyxHQUFHLENBQUM7S0FDL0MsTUFBTSxDQUFDO0lBQ04sSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDO0lBQzFDLElBQUksRUFBRSx3QkFBd0I7SUFDOUIsS0FBSyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsK0JBQStCLENBQUM7SUFDdEUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLG9CQUFvQixDQUFDO0lBQ3JGLE9BQU8sRUFBRSxDQUFDO1NBQ1AsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FB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Z0JBQWdCLENBQ3JCLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxFQUNyRSxJQUFJLEVBQ0osV0FBVyxDQUNaLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxPQUFPLENBQUMsVUFBdUMsRUFBRSxJQUFZO0lBQ3BFLElBQUksVUFBVSxDQUFDLElBQUksS0FBSyxTQUFTO1FBQUUsT0FBTyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0QsT0FBTyxHQUFHLElBQUksSUFBSSxVQUFVLENBQUMsUUFBUSxJQUFJLEVBQUUsRUFBRSxDQUFDO0FBQ2hELENBQUM7QUFFRCxTQUFTLG1CQUFtQixDQUMxQixJQUFpQixFQUNqQixJQUFZLEVBQ1osSUFBWSxFQUNaLEtBQUssR0FBRyxJQUFJO0lBRVosTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNCLE9BQU87UUFDTCxZQUFZLEVBQUUsSUFBSTtRQUNsQixZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDeEQsWUFBWSxFQUFFLEtBQUs7UUFDbkIsSUFBSSxFQUFFLEtBQUs7S0FDWixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGNyZWF0ZUxha2Vib3hTZXJ2aWNlUmVxdWVzdFNjaGVtYSxcbiAgbGFrZWJveFNlcnZpY2VLaW5kU2NoZW1hLFxuICBsYWtlYm94U2VydmljZVN0YXRlU2NoZW1hLFxuICB0eXBlIENyZWF0ZUxha2Vib3hTZXJ2aWNlUmVxdWVzdCxcbiAgdHlwZSBMYWtlYm94QnVpbHRJblNlcnZpY2VOYW1lLFxuICB0eXBlIExha2Vib3hTZXJ2aWNlLFxuICB0eXBlIExha2Vib3hVc2VyLFxufSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtbGFrZWJveFwiO1xuaW1wb3J0IHsgbGFrZWJveFNlcnZpY2VQYXRoIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWxha2Vib3hcIjtcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5pbXBvcnQgeyBkZXNrdG9wRW52aXJvbm1lbnQsIGRlc2t0b3BIdG1sSGVhZCwgZGVza3RvcE9wZW5VcmwgfSBmcm9tIFwiLi9kZXNrdG9wLnRzXCI7XG5pbXBvcnQgeyBMQUtFQk9YX1JVTlRJTUVfUk9PVCwgbGFrZWJveFNlcnZpY2VQb3J0IH0gZnJvbSBcIi4vdXNlci50c1wiO1xuXG5jb25zdCBUVFlEX0NMSUVOVF9PUFRJT05TID0gW1xuICBcInRlcm09eHRlcm0tMjU2Y29sb3JcIixcbiAgXCJyZW5kZXJlclR5cGU9d2ViZ2xcIixcbiAgXCJjdXJzb3JTdHlsZT1iYXJcIixcbiAgXCJjb3B5T25TZWxlY3Q9dHJ1ZVwiLFxuICBcInJpZ2h0Q2xpY2tTZWxlY3RzV29yZD10cnVlXCIsXG4gIFwiZGlzYWJsZUxlYXZlQWxlcnQ9dHJ1ZVwiLFxuICBcImRpc2FibGVSZXNpemVPdmVybGF5PXRydWVcIixcbl07XG5cbmV4cG9ydCBjb25zdCBMYWtlYm94Q29udHJvbGxlckRlZmluaXRpb25TY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIG5hbWU6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJTZXJ2aWNlIG5hbWUuXCIpLFxuICAgIGtpbmQ6IGxha2Vib3hTZXJ2aWNlS2luZFNjaGVtYSxcbiAgICBpbWFnZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiT0NJIGltYWdlIGZvciBpbWFnZSBzZXJ2aWNlcy5cIiksXG4gICAgcHVsbDogei5lbnVtKFtcIm1pc3NpbmdcIiwgXCJhbHdheXNcIl0pLmRlZmF1bHQoXCJtaXNzaW5nXCIpLmRlc2NyaWJlKFwiSW1hZ2UgcHVsbCBwb2xpY3kuXCIpLFxuICAgIGNvbW1hbmQ6IHpcbiAgICAgIC5hcnJheSh6LnN0cmluZygpKVxuICAgICAgLm9wdGlvbmFsKClcbiAgICAgIC5kZXNjcmliZShcIkFyZ3Y7IG9taXR0ZWQgdG8gdXNlIHRoZSBpbWFnZSBlbnRyeXBvaW50IGFuZCBjb21tYW5kLlwiKSxcbiAgICBlbnY6IHpcbiAgICAgIC5yZWNvcmQoei5zdHJpbmcoKSwgei5zdHJpbmcoKSlcbiAgICAgIC5kZXNjcmliZShcIkNvbnRhaW5lciBlbnZpcm9ubWVudCwgaW5jbHVkaW5nIGluamVjdGVkIHZhbHVlcy5cIiksXG4gICAgd29ya2luZ0RpcmVjdG9yeTogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiQ29udGFpbmVyIHdvcmtpbmcgZGlyZWN0b3J5LlwiKSxcbiAgICBtb3VudHM6IHpcbiAgICAgIC5hcnJheShcbiAgICAgICAgelxuICAgICAgICAgIC5vYmplY3Qoe1xuICAgICAgICAgICAgc291cmNlOiB6XG4gICAgICAgICAgICAgIC5zdHJpbmcoKVxuICAgICAgICAgICAgICAuc3RhcnRzV2l0aChcIi9cIilcbiAgICAgICAgICAgICAgLmRlc2NyaWJlKFwiQWJzb2x1dGUgaG9zdCBwYXRoIGJlbmVhdGggdGhlIHVzZXIncyBob21lLlwiKSxcbiAgICAgICAgICAgIHRhcmdldDogei5zdHJpbmcoKS5zdGFydHNXaXRoKFwiL1wiKS5kZXNjcmliZShcIkNvbnRhaW5lciBwYXRoLlwiKSxcbiAgICAgICAgICAgIHJlYWRPbmx5OiB6LmJvb2xlYW4oKS5kZXNjcmliZShcIlJlYWQtb25seSBiaW5kLlwiKSxcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5zdHJpY3QoKSxcbiAgICAgIClcbiAgICAgIC5kZXNjcmliZShcIkJpbmQgbW91bnRzLlwiKSxcbiAgICBwb3J0OiB6Lm51bWJlcigpLmludCgpLmRlc2NyaWJlKFwiRGVyaXZlZCBsb29wYmFjayBwb3J0LlwiKSxcbiAgICByZWFkaW5lc3M6IHouZW51bShbXCJ0Y3BcIiwgXCJub25lXCJdKS5kZXNjcmliZShcIlJlYWRpbmVzcyBjaGVjay5cIiksXG4gICAgcmVhZHlTZWNvbmRzOiB6Lm51bWJlcigpLmludCgpLnBvc2l0aXZlKCkuZGVzY3JpYmUoXCJNYXhpbXVtIHJlYWRpbmVzcyB3YWl0LlwiKSxcbiAgICBhdXRvc3RhcnQ6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiV2hldGhlciB0aGUgc2VydmljZSByZXN0YXJ0cyB3aGVuIHRoZSBMYWtlYm94IHN0YXJ0cy5cIiksXG4gICAgcm91dGU6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiV2hldGhlciBBcHBLaXQgcm91dGVzIHRoZSBzZXJ2aWNlLlwiKSxcbiAgICBzdHJpcFByZWZpeDogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJXaGV0aGVyIHRoZSByb3V0ZSBwcmVmaXggaXMgcmVtb3ZlZCBiZWZvcmUgZm9yd2FyZGluZy5cIiksXG4gICAgb3BlblBhdGg6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIkVudHJ5IHBhdGggYXBwZW5kZWQgdG8gdGhlIHJvdXRlLlwiKSxcbiAgfSlcbiAgLnN0cmljdCgpXG4gIC5kZXNjcmliZShcIlNlcnZpY2UgZGVmaW5pdGlvbiBwZXJzaXN0ZWQgaW4gdGhlIHVzZXIncyBMYWtlYm94IGhvbWUgYW5kIHJlYWQgYnkgdGhlIGNvbnRyb2xsZXIuXCIpO1xuLyoqIFNlcnZpY2UgZGVmaW5pdGlvbiBwZXJzaXN0ZWQgaW4gdGhlIHVzZXIncyBMYWtlYm94IGhvbWUuICovXG5leHBvcnQgdHlwZSBMYWtlYm94Q29udHJvbGxlckRlZmluaXRpb24gPSB6Lm91dHB1dDx0eXBlb2YgTGFrZWJveENvbnRyb2xsZXJEZWZpbml0aW9uU2NoZW1hPjtcblxuZXhwb3J0IGNvbnN0IExha2Vib3hDb250cm9sbGVyU2VydmljZVNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgbmFtZTogei5zdHJpbmcoKSxcbiAgICBzdGF0ZTogbGFrZWJveFNlcnZpY2VTdGF0ZVNjaGVtYSxcbiAgICBkZWZpbml0aW9uOiBMYWtlYm94Q29udHJvbGxlckRlZmluaXRpb25TY2hlbWEsXG4gICAgZXJyb3I6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBsb2c6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgfSlcbiAgLnBhc3N0aHJvdWdoKClcbiAgLmRlc2NyaWJlKFwiT25lIHNlcnZpY2UgYXMgcmVwb3J0ZWQgYnkgdGhlIHJlbW90ZSBjb250cm9sbGVyLlwiKTtcbi8qKiBPbmUgc2VydmljZSBhcyByZXBvcnRlZCBieSB0aGUgcmVtb3RlIGNvbnRyb2xsZXIuICovXG5leHBvcnQgdHlwZSBMYWtlYm94Q29udHJvbGxlclNlcnZpY2UgPSB6LmluZmVyPHR5cGVvZiBMYWtlYm94Q29udHJvbGxlclNlcnZpY2VTY2hlbWE+O1xuXG4vKiogUm91dGluZyBiZWhhdmlvciBkZXJpdmVkIGZyb20gYSBzYXZlZCBkZWZpbml0aW9uLiAqL1xuZXhwb3J0IGludGVyZmFjZSBMYWtlYm94U2VydmljZVJvdXRlIHtcbiAgcG9ydDogbnVtYmVyO1xuICBzdHJpcFByZWZpeDogYm9vbGVhbjtcbiAgcmVkaXJlY3RUb1NsYXNoOiBib29sZWFuO1xuICBodG1sSGVhZD86IHN0cmluZztcbn1cblxuLyoqIEJ1aWxkcyB0aGUgcGFja2FnZS1vd25lZCBkZWZpbml0aW9uIGZvciBhIGJ1aWx0LWluIHNlcnZpY2UuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbHRJbkRlZmluaXRpb24oXG4gIG5hbWU6IExha2Vib3hCdWlsdEluU2VydmljZU5hbWUsXG4gIHVzZXI6IExha2Vib3hVc2VyLFxuKTogTGFrZWJveENvbnRyb2xsZXJEZWZpbml0aW9uIHtcbiAgY29uc3QgcG9ydCA9IGxha2Vib3hTZXJ2aWNlUG9ydCh1c2VyLmhhc2gsIG5hbWUpO1xuICBjb25zdCBjb21tb24gPSB7XG4gICAgbmFtZSxcbiAgICBraW5kOiBuYW1lLFxuICAgIHB1bGw6IFwibWlzc2luZ1wiIGFzIGNvbnN0LFxuICAgIG1vdW50czogW10sXG4gICAgcG9ydCxcbiAgICByZWFkaW5lc3M6IFwidGNwXCIgYXMgY29uc3QsXG4gICAgYXV0b3N0YXJ0OiBmYWxzZSxcbiAgICByb3V0ZTogdHJ1ZSxcbiAgICBzdHJpcFByZWZpeDogdHJ1ZSxcbiAgfTtcbiAgaWYgKG5hbWUgPT09IFwidGVybWluYWxcIikge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5jb21tb24sXG4gICAgICByZWFkeVNlY29uZHM6IDYwLFxuICAgICAgZW52OiBpbmplY3RlZEVudmlyb25tZW50KHVzZXIsIG5hbWUsIHBvcnQpLFxuICAgICAgY29tbWFuZDogW1xuICAgICAgICBgJHtMQUtFQk9YX1JVTlRJTUVfUk9PVH0vYmluL3R0eWRgLFxuICAgICAgICBcIi0taW50ZXJmYWNlXCIsXG4gICAgICAgIFwiMTI3LjAuMC4xXCIsXG4gICAgICAgIFwiLS1wb3J0XCIsXG4gICAgICAgIFN0cmluZyhwb3J0KSxcbiAgICAgICAgXCItLXdyaXRhYmxlXCIsXG4gICAgICAgIC4uLlRUWURfQ0xJRU5UX09QVElPTlMuZmxhdE1hcCgob3B0aW9uKSA9PiBbXCItLWNsaWVudC1vcHRpb25cIiwgb3B0aW9uXSksXG4gICAgICAgIFwiL2Jpbi9iYXNoXCIsXG4gICAgICAgIFwiLWxcIixcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLmNvbW1vbixcbiAgICByZWFkeVNlY29uZHM6IDE4MCxcbiAgICBlbnY6IHsgLi4uZGVza3RvcEVudmlyb25tZW50KCksIC4uLmluamVjdGVkRW52aXJvbm1lbnQodXNlciwgbmFtZSwgcG9ydCkgfSxcbiAgICBjb21tYW5kOiBbXCIvYmluL3NoXCIsIGAke0xBS0VCT1hfUlVOVElNRV9ST09UfS9iaW4vZGVza3RvcC1zZXNzaW9uYF0sXG4gIH07XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIGFuIGFnZW50IG9yIFJFU1Qgc2VydmljZSByZXF1ZXN0IGFuZCByZXNvbHZlcyBpdCB0byBhIHBlcnNpc3RlZFxuICogZGVmaW5pdGlvbiB3aXRoIGluamVjdGVkIHZhcmlhYmxlcyBhbmQgaG9tZS1yZWxhdGl2ZSBtb3VudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbWFnZURlZmluaXRpb24oXG4gIGlucHV0OiBDcmVhdGVMYWtlYm94U2VydmljZVJlcXVlc3QsXG4gIHVzZXI6IExha2Vib3hVc2VyLFxuKTogTGFrZWJveENvbnRyb2xsZXJEZWZpbml0aW9uIHtcbiAgY29uc3QgcmVxdWVzdCA9IGNyZWF0ZUxha2Vib3hTZXJ2aWNlUmVxdWVzdFNjaGVtYS5wYXJzZShpbnB1dCk7XG4gIGNvbnN0IHBvcnQgPSBsYWtlYm94U2VydmljZVBvcnQodXNlci5oYXNoLCByZXF1ZXN0Lm5hbWUpO1xuICByZXR1cm4ge1xuICAgIG5hbWU6IHJlcXVlc3QubmFtZSxcbiAgICBraW5kOiBcImltYWdlXCIsXG4gICAgaW1hZ2U6IHJlcXVlc3QuaW1hZ2UsXG4gICAgcHVsbDogcmVxdWVzdC5wdWxsLFxuICAgIC4uLihyZXF1ZXN0LmNvbW1hbmQgPyB7IGNvbW1hbmQ6IHJlcXVlc3QuY29tbWFuZCB9IDoge30pLFxuICAgIGVudjogeyAuLi5yZXF1ZXN0LmVudiwgLi4uaW5qZWN0ZWRFbnZpcm9ubWVudCh1c2VyLCByZXF1ZXN0Lm5hbWUsIHBvcnQsIHJlcXVlc3Qucm91dGUpIH0sXG4gICAgLi4uKHJlcXVlc3Qud29ya2luZ0RpcmVjdG9yeSA/IHsgd29ya2luZ0RpcmVjdG9yeTogcmVxdWVzdC53b3JraW5nRGlyZWN0b3J5IH0gOiB7fSksXG4gICAgbW91bnRzOiByZXF1ZXN0Lm1vdW50cy5tYXAoKG1vdW50KSA9PiAoe1xuICAgICAgc291cmNlOiBgJHt1c2VyLmhvbWV9LyR7bW91bnQuc291cmNlLnJlcGxhY2UoL15cXC5cXC8rfFxcLyskL2csIFwiXCIpfWAsXG4gICAgICB0YXJnZXQ6IG1vdW50LnRhcmdldCxcbiAgICAgIHJlYWRPbmx5OiBtb3VudC5yZWFkT25seSxcbiAgICB9KSksXG4gICAgcG9ydCxcbiAgICByZWFkaW5lc3M6IHJlcXVlc3Qucm91dGUgPyBcInRjcFwiIDogXCJub25lXCIsXG4gICAgcmVhZHlTZWNvbmRzOiAzMDAsXG4gICAgYXV0b3N0YXJ0OiB0cnVlLFxuICAgIHJvdXRlOiByZXF1ZXN0LnJvdXRlLFxuICAgIHN0cmlwUHJlZml4OiByZXF1ZXN0LnN0cmlwUHJlZml4LFxuICAgIC4uLihyZXF1ZXN0Lm9wZW5QYXRoID8geyBvcGVuUGF0aDogcmVxdWVzdC5vcGVuUGF0aC5yZXBsYWNlKC9eXFwvKy8sIFwiXCIpIH0gOiB7fSksXG4gIH07XG59XG5cbi8qKiBSZXR1cm5zIHJvdXRlIGJlaGF2aW9yIGZvciBhIHNhdmVkIGRlZmluaXRpb24uICovXG5leHBvcnQgZnVuY3Rpb24gc2VydmljZVJvdXRlKGRlZmluaXRpb246IExha2Vib3hDb250cm9sbGVyRGVmaW5pdGlvbik6IExha2Vib3hTZXJ2aWNlUm91dGUge1xuICByZXR1cm4ge1xuICAgIHBvcnQ6IGRlZmluaXRpb24ucG9ydCxcbiAgICBzdHJpcFByZWZpeDogZGVmaW5pdGlvbi5zdHJpcFByZWZpeCxcbiAgICByZWRpcmVjdFRvU2xhc2g6IHRydWUsXG4gICAgLi4uKGRlZmluaXRpb24ua2luZCA9PT0gXCJkZXNrdG9wXCIgPyB7IGh0bWxIZWFkOiBkZXNrdG9wSHRtbEhlYWQgfSA6IHt9KSxcbiAgfTtcbn1cblxuLyoqIE1hcHMgYSBjb250cm9sbGVyIHJlcG9ydCB0byB0aGUgc2hhcmVkIHNlcnZpY2Ugc2hhcGUuICovXG5leHBvcnQgZnVuY3Rpb24gdG9MYWtlYm94U2VydmljZShcbiAgc2VydmljZTogTGFrZWJveENvbnRyb2xsZXJTZXJ2aWNlLFxuICB1c2VyOiBMYWtlYm94VXNlcixcbiAgcm91dGVQcmVmaXg6IHN0cmluZyxcbik6IExha2Vib3hTZXJ2aWNlIHtcbiAgY29uc3QgeyBkZWZpbml0aW9uIH0gPSBzZXJ2aWNlO1xuICBjb25zdCBwYXRoID0gbGFrZWJveFNlcnZpY2VQYXRoKHJvdXRlUHJlZml4LCB1c2VyLmhhc2gsIGRlZmluaXRpb24ubmFtZSk7XG4gIHJldHVybiB7XG4gICAgbmFtZTogZGVmaW5pdGlvbi5uYW1lLFxuICAgIGtpbmQ6IGRlZmluaXRpb24ua2luZCxcbiAgICAuLi4oZGVmaW5pdGlvbi5pbWFnZSA/IHsgaW1hZ2U6IGRlZmluaXRpb24uaW1hZ2UgfSA6IHt9KSxcbiAgICAuLi4oZGVmaW5pdGlvbi5vcGVuUGF0aCA/IHsgb3BlblBhdGg6IGRlZmluaXRpb24ub3BlblBhdGggfSA6IHt9KSxcbiAgICBzdGF0ZTogc2VydmljZS5zdGF0ZSxcbiAgICBwb3J0OiBkZWZpbml0aW9uLnBvcnQsXG4gICAgcm91dGU6IGRlZmluaXRpb24ucm91dGUsXG4gICAgcGF0aCxcbiAgICAuLi4oZGVmaW5pdGlvbi5yb3V0ZSA/IHsgb3BlblVybDogb3BlblVybChkZWZpbml0aW9uLCBwYXRoKSB9IDoge30pLFxuICAgIC4uLihzZXJ2aWNlLmVycm9yID8geyBlcnJvcjogc2VydmljZS5lcnJvciB9IDoge30pLFxuICAgIC4uLihzZXJ2aWNlLmxvZyAhPT0gdW5kZWZpbmVkID8geyBsb2c6IHNlcnZpY2UubG9nIH0gOiB7fSksXG4gIH07XG59XG5cbi8qKiBSZXNvbHZlIGEgcm91dGVkIHNlcnZpY2UgcGF0aCBhZ2FpbnN0IHRoZSBicm93c2VyIGFwcCBvcmlnaW4gZm9yIGFnZW50IG91dHB1dC4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aXRoU2VydmljZU9yaWdpbihzZXJ2aWNlOiBMYWtlYm94U2VydmljZSwgb3JpZ2luPzogc3RyaW5nKTogTGFrZWJveFNlcnZpY2Uge1xuICBpZiAoIXNlcnZpY2Uub3BlblVybCB8fCAhb3JpZ2luKSByZXR1cm4gc2VydmljZTtcbiAgdHJ5IHtcbiAgICBjb25zdCBiYXNlID0gbmV3IFVSTChvcmlnaW4pO1xuICAgIGlmIChiYXNlLnByb3RvY29sICE9PSBcImh0dHA6XCIgJiYgYmFzZS5wcm90b2NvbCAhPT0gXCJodHRwczpcIikgcmV0dXJuIHNlcnZpY2U7XG4gICAgcmV0dXJuIHsgLi4uc2VydmljZSwgb3BlblVybDogbmV3IFVSTChzZXJ2aWNlLm9wZW5VcmwsIGJhc2UpLmhyZWYgfTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHNlcnZpY2U7XG4gIH1cbn1cblxuLyoqIFJldHVybnMgdGhlIHN0b3BwZWQgcGxhY2Vob2xkZXIgZm9yIGEgYnVpbHQtaW4gc2VydmljZSB0aGF0IGhhcyBuZXZlciBzdGFydGVkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlkbGVCdWlsdEluU2VydmljZShcbiAgbmFtZTogTGFrZWJveEJ1aWx0SW5TZXJ2aWNlTmFtZSxcbiAgdXNlcjogTGFrZWJveFVzZXIsXG4gIHJvdXRlUHJlZml4OiBzdHJpbmcsXG4pOiBMYWtlYm94U2VydmljZSB7XG4gIHJldHVybiB0b0xha2Vib3hTZXJ2aWNlKFxuICAgIHsgbmFtZSwgc3RhdGU6IFwic3RvcHBlZFwiLCBkZWZpbml0aW9uOiBidWlsdEluRGVmaW5pdGlvbihuYW1lLCB1c2VyKSB9LFxuICAgIHVzZXIsXG4gICAgcm91dGVQcmVmaXgsXG4gICk7XG59XG5cbmZ1bmN0aW9uIG9wZW5VcmwoZGVmaW5pdGlvbjogTGFrZWJveENvbnRyb2xsZXJEZWZpbml0aW9uLCBwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoZGVmaW5pdGlvbi5raW5kID09PSBcImRlc2t0b3BcIikgcmV0dXJuIGRlc2t0b3BPcGVuVXJsKHBhdGgpO1xuICByZXR1cm4gYCR7cGF0aH0vJHtkZWZpbml0aW9uLm9wZW5QYXRoID8/IFwiXCJ9YDtcbn1cblxuZnVuY3Rpb24gaW5qZWN0ZWRFbnZpcm9ubWVudChcbiAgdXNlcjogTGFrZWJveFVzZXIsXG4gIG5hbWU6IHN0cmluZyxcbiAgcG9ydDogbnVtYmVyLFxuICByb3V0ZSA9IHRydWUsXG4pOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgY29uc3QgdmFsdWUgPSBTdHJpbmcocG9ydCk7XG4gIHJldHVybiB7XG4gICAgU0VSVklDRV9OQU1FOiBuYW1lLFxuICAgIFNFUlZJQ0VfUEFUSDogcm91dGUgPyBgJHt1c2VyLnJvdXRlUHJlZml4fS8ke25hbWV9YCA6IFwiXCIsXG4gICAgU0VSVklDRV9QT1JUOiB2YWx1ZSxcbiAgICBQT1JUOiB2YWx1ZSxcbiAgfTtcbn1cbiJdfQ==