cdk-nextjs 0.7.10 → 0.7.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/.jsii +76 -22
  2. package/.jsii.tabl.json +1 -1
  3. package/API.md +59 -3
  4. package/README.md +2 -2
  5. package/docs/breaking-changes.md +32 -0
  6. package/docs/harness-coverage.md +1 -1
  7. package/docs/next-build-output-guide.md +1 -1
  8. package/docs/nextjs-private-apis.md +128 -0
  9. package/lib/adapter/adapter.mjs +276 -24
  10. package/lib/adapter/build-outputs.d.ts +1 -1
  11. package/lib/adapter/build-outputs.js +29 -13
  12. package/lib/adapter/build-outputs.test.js +35 -7
  13. package/lib/adapter/cache-handler.d.ts +1 -1
  14. package/lib/adapter/cache-handler.js +1 -1
  15. package/lib/adapter/cache-kinds.d.ts +12 -1
  16. package/lib/adapter/cache-kinds.js +16 -4
  17. package/lib/adapter/init-cache.js +7 -7
  18. package/lib/adapter/local-file-cache-handler.d.ts +1 -1
  19. package/lib/adapter/local-file-cache-handler.js +1 -1
  20. package/lib/adapter/memory-cache-handler.d.ts +2 -2
  21. package/lib/adapter/memory-cache-handler.js +1 -1
  22. package/lib/adapter/s3-cache-handler.d.ts +2 -2
  23. package/lib/adapter/s3-cache-handler.js +1 -1
  24. package/lib/adapter/use-cache-common.d.ts +1 -1
  25. package/lib/adapter/use-cache-common.js +1 -1
  26. package/lib/adapter/use-cache-common.test.js +1 -1
  27. package/lib/adapter/use-cache-default-handler.d.ts +1 -1
  28. package/lib/adapter/use-cache-default-handler.js +1 -1
  29. package/lib/adapter/use-cache-handlers.test.js +1 -1
  30. package/lib/adapter/use-cache-remote-handler.d.ts +1 -1
  31. package/lib/adapter/use-cache-remote-handler.js +1 -1
  32. package/lib/cdk-nextjs-version.d.ts +10 -0
  33. package/lib/cdk-nextjs-version.js +15 -0
  34. package/lib/nextjs-api.js +1 -1
  35. package/lib/nextjs-build/nextjs-build.js +7 -6
  36. package/lib/nextjs-build/nextjs-build.test.js +16 -3
  37. package/lib/nextjs-cache.js +1 -1
  38. package/lib/nextjs-compute/nextjs-containers.js +1 -1
  39. package/lib/nextjs-compute/nextjs-functions.js +1 -1
  40. package/lib/nextjs-distribution.js +5 -5
  41. package/lib/nextjs-post-deploy.js +1 -1
  42. package/lib/nextjs-static-assets.d.ts +74 -5
  43. package/lib/nextjs-static-assets.js +276 -41
  44. package/lib/nextjs-static-assets.test.js +286 -1
  45. package/lib/root-constructs/nextjs-base-construct.d.ts +5 -4
  46. package/lib/root-constructs/nextjs-base-construct.js +17 -8
  47. package/lib/root-constructs/nextjs-global-containers.js +1 -1
  48. package/lib/root-constructs/nextjs-global-functions.js +1 -1
  49. package/lib/root-constructs/nextjs-regional-containers.js +1 -1
  50. package/lib/root-constructs/nextjs-regional-functions.js +1 -1
  51. package/lib/runtime/core.test.js +17 -8
  52. package/lib/runtime/dispatch.js +4 -5
  53. package/lib/runtime/image-utils.d.ts +1 -0
  54. package/lib/runtime/image-utils.js +2 -1
  55. package/lib/runtime/image-utils.test.js +17 -1
  56. package/lib/runtime/image.js +47 -33
  57. package/lib/runtime/image.test.js +47 -26
  58. package/lib/runtime/lambda.mjs +281 -37
  59. package/lib/runtime/manifest.d.ts +34 -8
  60. package/lib/runtime/manifest.js +7 -5
  61. package/lib/runtime/server.mjs +281 -37
  62. package/package.json +1 -1
  63. package/scripts/capture-adapter-fixture.mjs +13 -1
  64. package/scripts/zero-config-build.mjs +5 -1
@@ -15,7 +15,7 @@ const base_path_1 = require("../utils/base-path");
15
15
  * Base class for all Next.js root constructs
16
16
  */
17
17
  class NextjsBaseConstruct extends constructs_1.Construct {
18
- static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsBaseConstruct", version: "0.7.10" };
18
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsBaseConstruct", version: "0.7.12" };
19
19
  nextjsBuild;
20
20
  nextjsStaticAssets;
21
21
  nextjsCache;
@@ -191,10 +191,11 @@ class NextjsBaseConstruct extends constructs_1.Construct {
191
191
  };
192
192
  }
193
193
  /**
194
- * Runs after the init cache upload: invalidating the CDN before the new
195
- * cache is in place would only re-cache the responses the invalidation was
196
- * meant to drop, and CloudFormation infers no ordering between the two
197
- * custom resources on its own.
194
+ * Runs after the init cache and static asset uploads: invalidating the CDN
195
+ * before the new files are in place would only re-cache the responses the
196
+ * invalidation was meant to drop, and pruning before them could delete an
197
+ * object the upload is about to re-tag with this build's ID. CloudFormation
198
+ * infers no ordering between these custom resources on its own.
198
199
  */
199
200
  createNextjsPostDeploy(distribution) {
200
201
  const postDeploy = new nextjs_post_deploy_1.NextjsPostDeploy(this, "NextjsPostDeploy", {
@@ -208,8 +209,16 @@ class NextjsBaseConstruct extends constructs_1.Construct {
208
209
  overrides: this.baseProps.overrides?.nextjsPostDeploy,
209
210
  ...this.constructOverrides?.nextjsPostDeployProps,
210
211
  });
211
- if (this.nextjsCache.bucketDeployment) {
212
- postDeploy.node.addDependency(this.nextjsCache.bucketDeployment);
212
+ const { staticDeployment, serviceWorkerDeployment, publicDeployment } = this.nextjsStaticAssets;
213
+ for (const upload of [
214
+ this.nextjsCache.bucketDeployment,
215
+ staticDeployment,
216
+ serviceWorkerDeployment,
217
+ publicDeployment,
218
+ ]) {
219
+ if (upload) {
220
+ postDeploy.node.addDependency(upload);
221
+ }
213
222
  }
214
223
  return postDeploy;
215
224
  }
@@ -278,4 +287,4 @@ class NextjsBaseConstruct extends constructs_1.Construct {
278
287
  }
279
288
  }
280
289
  exports.NextjsBaseConstruct = NextjsBaseConstruct;
281
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV4dGpzLWJhc2UtY29uc3RydWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Jvb3QtY29uc3RydWN0cy9uZXh0anMtYmFzZS1jb25zdHJ1Y3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLDZDQUFvQztBQUtwQywyQ0FBdUM7QUFDdkMsNENBQXNEO0FBS3RELCtEQUEyRDtBQUMzRCxrREFBb0U7QUFFcEUseUVBSTRDO0FBQzVDLDhEQUcrQjtBQUMvQixrRUFJaUM7QUFDakMsa0RBSzRCO0FBOEg1Qjs7R0FFRztBQUNILE1BQXNCLG1CQUFvQixTQUFRLHNCQUFTOztJQUN6RCxXQUFXLENBQWM7SUFDekIsa0JBQWtCLENBQXFCO0lBQ3ZDLFdBQVcsQ0FBYztJQUlOLFVBQVUsQ0FBYTtJQUMxQyxxRUFBcUU7SUFDbEQsU0FBUyxDQUEyQjtJQUN2RCw0RUFBNEU7SUFDNUUseUVBQXlFO0lBQ3RELGtCQUFrQixDQUFnQztJQUNyRTs7Ozs7T0FLRztJQUNnQixnQkFBZ0IsQ0FBVTtJQUU3QyxZQUNFLEtBQWdCLEVBQ2hCLEVBQVUsRUFDVixLQUErQixFQUMvQixVQUFzQjtRQUV0QixLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2pCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQzdCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFakUsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUM1Qyx5RUFBeUU7UUFDekUsMkVBQTJFO1FBQzNFLG9DQUFvQztRQUNwQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBQSwyQkFBZSxFQUNyQyxVQUFVLEVBQ1YsS0FBSyxDQUFDLFFBQVEsRUFDZCxJQUFJLENBQUMsV0FBVyxD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Q0FBQyxPQUFPO1lBQ2pDLFFBQVEsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO1lBQy9CLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxrQkFBa0I7WUFDdkQsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsdUJBQXVCO1NBQ3BELENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNPLHFCQUFxQjtRQUM3Qix1RUFBdUU7UUFDdkUsdUJBQXVCO1FBQ3ZCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztRQUMxQyxPQUFPLElBQUksa0NBQWUsQ0FBQyxJQUFJLEVBQUUsaUJBQWlCLEVBQUU7WUFDbEQsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDMUIsZUFBZSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZTtZQUNqRCxZQUFZLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZO1lBQzNDLGNBQWMsRUFBRSxJQUFJLENBQUMsY0FBYztZQUNuQyxTQUFTLEVBQUU7Z0JBQ1QsR0FBRyxTQUFTO2dCQUNaLGFBQWEsRUFBRTtvQkFDYixHQUFHLFNBQVMsRUFBRSxhQUFhO29CQUMzQiw4REFBOEQ7b0JBQzlELHVEQUF1RDtvQkFDdkQsdUVBQXVFO29CQUN2RSxtRUFBbUU7b0JBQ25FLGtFQUFrRTtvQkFDbEUsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7aUJBQzNEO2FBQ0Y7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDOztBQXJUSCxrREFzVEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUb2tlbiB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgSURpc3RyaWJ1dGlvbiB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY2xvdWRmcm9udFwiO1xuaW1wb3J0IHsgSVRhYmxlVjIgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWR5bmFtb2RiXCI7XG5pbXBvcnQgeyBJVnBjIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lYzJcIjtcbmltcG9ydCB7IElCdWNrZXQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXMzXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgTE9HX1BSRUZJWCwgTmV4dGpzVHlwZSB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IE9wdGlvbmFsTmV4dGpzQnVpbGRQcm9wcyB9IGZyb20gXCIuLi9nZW5lcmF0ZWQtc3RydWN0cy9PcHRpb25hbE5leHRqc0J1aWxkUHJvcHNcIjtcbmltcG9ydCB7IE9wdGlvbmFsTmV4dGpzQ2FjaGVQcm9wcyB9IGZyb20gXCIuLi9nZW5lcmF0ZWQtc3RydWN0cy9PcHRpb25hbE5leHRqc0NhY2hlUHJvcHNcIjtcbmltcG9ydCB7IE9wdGlvbmFsTmV4dGpzUG9zdERlcGxveVByb3BzIH0gZnJvbSBcIi4uL2dlbmVyYXRlZC1zdHJ1Y3RzL09wdGlvbmFsTmV4dGpzUG9zdERlcGxveVByb3BzXCI7XG5pbXBvcnQgeyBOZXh0anNBcGlPdmVycmlkZXMgfSBmcm9tIFwiLi4vbmV4dGpzLWFwaVwiO1xuaW1wb3J0IHsgTmV4dGpzQnVpbGQgfSBmcm9tIFwiLi4vbmV4dGpzLWJ1aWxkL25leHRqcy1idWlsZFwiO1xuaW1wb3J0IHsgTmV4dGpzQ2FjaGUsIE5leHRqc0NhY2hlT3ZlcnJpZGVzIH0gZnJvbSBcIi4uL25leHRqcy1jYWNoZVwiO1xuaW1wb3J0IHsgTmV4dGpzQ29tcHV0ZUJhc2VQcm9wcyB9IGZyb20gXCIuLi9uZXh0anMtY29tcHV0ZS9uZXh0anMtY29tcHV0ZS1iYXNlLXByb3BzXCI7XG5pbXBvcnQge1xuICBOZXh0anNGdW5jdGlvbkdyb3VwLFxuICBOZXh0anNGdW5jdGlvbnMsXG4gIE5leHRqc0Z1bmN0aW9uc092ZXJyaWRlcyxcbn0gZnJvbSBcIi4uL25leHRqcy1jb21wdXRlL25leHRqcy1mdW5jdGlvbnNcIjtcbmltcG9ydCB7XG4gIE5leHRqc1Bvc3REZXBsb3ksXG4gIE5leHRqc1Bvc3REZXBsb3lPdmVycmlkZXMsXG59IGZyb20gXCIuLi9uZXh0anMtcG9zdC1kZXBsb3lcIjtcbmltcG9ydCB7XG4gIE5leHRqc1N0YXRpY0Fzc2V0cyxcbiAgTmV4dGpzU3RhdGljQXNzZXRzT3ZlcnJpZGVzLFxuICBOZXh0anNTdGF0aWNBc3NldHNQcm9wcyxcbn0gZnJvbSBcIi4uL25leHRqcy1zdGF0aWMtYXNzZXRzXCI7XG5pbXBvcnQge1xuICBBcGlHYXRld2F5UHJlZml4LFxuICBpc0Fzc2V0UHJlZml4VW5zZXJ2ZWQsXG4gIHByZWZpeFdpdGhCYXNlUGF0aCxcbiAgcmVzb2x2ZUJhc2VQYXRoLFxufSBmcm9tIFwiLi4vdXRpbHMvYmFzZS1wYXRoXCI7XG5cbi8qKlxuICogQmFzZSBvdmVycmlkZXMgZm9yIHRoZSBwcm9wcyBwYXNzZWQgdG8gY29uc3RydWN0cyB3aXRoaW4gcm9vdC90b3AtbGV2ZWwgTmV4dC5qcyBjb25zdHJ1Y3RzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmV4dGpzQmFzZUNvbnN0cnVjdE92ZXJyaWRlcyB7XG4gIHJlYWRvbmx5IG5leHRqc0J1aWxkUHJvcHM/OiBPcHRpb25hbE5leHRqc0J1aWxkUHJvcHM7XG4gIHJlYWRvbmx5IG5leHRqc0NhY2hlUHJvcHM/OiBPcHRpb25hbE5leHRqc0NhY2hlUHJvcHM7XG4gIHJlYWRvbmx5IG5leHRqc1Bvc3REZXBsb3lQcm9wcz86IE9wdGlvbmFsTmV4dGpzUG9zdERlcGxveVByb3BzO1xuICByZWFkb25seSBuZXh0anNTdGF0aWNBc3NldHNQcm9wcz86IE5leHRqc1N0YXRpY0Fzc2V0c1Byb3BzO1xufVxuXG4vKipcbiAqIEJhc2Ugb3ZlcnJpZGVzIGZvciBjb25zdHJ1Y3RzIHNoYXJlZCBiZXR3ZWVuIGFsbCByb290L3RvcC1sZXZlbCBOZXh0LmpzIGNvbnN0cnVjdHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmV4dGpzQmFzZU92ZXJyaWRlcyB7XG4gIHJlYWRvbmx5IG5leHRqc0NhY2hlPzogTmV4dGpzQ2FjaGVPdmVycmlkZXM7XG4gIHJlYWRvbmx5IG5leHRqc1Bvc3REZXBsb3k/OiBOZXh0anNQb3N0RGVwbG95T3ZlcnJpZGVzO1xuICByZWFkb25seSBuZXh0anNTdGF0aWNBc3NldHM/OiBOZXh0anNTdGF0aWNBc3NldHNPdmVycmlkZXM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmV4dGpzQmFzZVByb3BzIHtcbiAgLyoqXG4gICAqIFByZWZpeCB0byB0aGUgVVJJIHBhdGggdGhlIGFwcCB3aWxsIGJlIHNlcnZlZCBhdC4gQWxzbyBuYW1lc3BhY2VzIHRoZVxuICAgKiBzdGF0aWMgYXNzZXRzIGluIFMzLCBzbyBpdCBkb3VibGVzIGFzIGEgd2F5IHRvIGhvc3QgbXVsdGlwbGUgYXBwcyBvclxuICAgKiBicmFuY2hlcyBvdXQgb2Ygb25lIGJ1Y2tldC5cbiAgICpcbiAgICogSG93IHRoaXMgcmVsYXRlcyB0byB0aGUgYGJhc2VQYXRoYCBpbiB5b3VyIGFwcCdzIGBuZXh0LmNvbmZpZy5qc2AgZGVwZW5kc1xuICAgKiBvbiB0aGUgY29uc3RydWN0LCBhbmQgc3ludGggZmFpbHMgb24gYSBjb21iaW5hdGlvbiB0aGF0IGNhbid0IHNlcnZlIHRoZVxuICAgKiBhcHA6XG4gICAqXG4gICAqIC0gYE5leHRqc0dsb2JhbEZ1bmN0aW9uc2AvYE5leHRqc0dsb2JhbENvbnRhaW5lcnNgOiBsZWF2ZSB0aGlzIHVuc2V0IGFuZCBpdFxuICAgKiAgIGZvbGxvd3MgeW91ciBhcHAncyBgYmFzZVBhdGhgLCB3aGljaCBpcyB3aGF0IHlvdSB3YW50IOKAlCBDbG91ZEZyb250IHNlcnZlc1xuICAgKiAgIHN0YXRpYyBhc3NldHMgZnJvbSBTMyB1c2luZyB0aGUgcmVxdWVzdCBwYXRoIGFzIHRoZSBvYmplY3Qga2V5LCBzbyB0aGUgdHdvXG4gICAqICAgaGF2ZSB0byBiZSBpZGVudGljYWwgYW5kIGEgbWlzbWF0Y2ggNDA0cyBhbGwgb2YgdGhlbS4gU2V0dGluZyBhIGRpZmZlcmVudFxuICAgKiAgIHZhbHVlIHRocm93cy5cbiAgICogLSBgTmV4dGpzUmVnaW9uYWxGdW5jdGlvbnNgOiBsZWF2ZSB0aGlzIHVuc2V0IGFuZCBpdCBmb2xsb3dzIHlvdXIgYXBwJ3NcbiAgICogICBgYmFzZVBhdGhgIG1pbnVzIHRoZSBwcmVmaXggQVBJIEdhdGV3YXkgc3RyaXBzIGJlZm9yZSBtYXRjaGluZyByZXNvdXJjZXMg4oCUXG4gICAqICAgdGhlIHN0YWdlIChgZGVwbG95T3B0aW9ucy5zdGFnZU5hbWVgLCBkZWZhdWx0IGBwcm9kYCksIG9yIHRoZSBiYXNlIHBhdGhcbiAgICogICBtYXBwaW5nIG9mIGEgY3VzdG9tIGRvbWFpbiBzZXQgaW4gYHJlc3RBcGlQcm9wcy5kb21haW5OYW1lYC4gU29cbiAgICogICBgYmFzZVBhdGg6IFwiL3Byb2RcImAgbW91bnRzIGF0IHRoZSByb290LCBgXCIvcHJvZC9iYXNlXCJgIHVuZGVyIGBiYXNlYCwgYW5kXG4gICAqICAgYFwiL2RvY3NcImAgYmVoaW5kIGEgY3VzdG9tIGRvbWFpbiBtYXBwZWQgYXQgdGhlIHJvb3QgdW5kZXIgYGRvY3NgLiBPbiB0aGVcbiAgICogICBleGVjdXRlLWFwaSBlbmRwb2ludCBhbiBhcHAgYGJhc2VQYXRoYCB0aGF0IGRvZXNuJ3Qgc3RhcnQgd2l0aCB0aGUgc3RhZ2VcbiAgICogICB3YXJucywgc2luY2UgaXRzIGxpbmtzIHdpbGwgbWlzcyB0aGUgc3RhZ2UuIElmIHlvdSBzZXQgdGhpcywgdGhlIGFwcCdzXG4gICAqICAgYGJhc2VQYXRoYCBtdXN0IGVuZCB3aXRoIGl0LiBBIGRvbWFpbiBhdHRhY2hlZCBsYXRlciB3aXRoXG4gICAqICAgYGFkZERvbWFpbk5hbWUoKWAgaXMgbm90IHNlZW4gYXQgc3ludGg7IHNldCB0aGlzIGV4cGxpY2l0bHkgdGhlbiDigJQgdG9cbiAgICogICBgXCIvXCJgIHdoZW4gdGhhdCBkb21haW4ncyBiYXNlIHBhdGggbWFwcGluZyBzdHJpcHMgeW91ciBhcHAncyB3aG9sZVxuICAgKiAgIGBiYXNlUGF0aGAsIHdoaWNoIG1vdW50cyBldmVyeSByZXNvdXJjZSBhdCB0aGUgcm9vdC5cbiAgICogLSBgTmV4dGpzUmVnaW9uYWxDb250YWluZXJzYDogb25seSBuYW1lc3BhY2VzIHRoZSBTMyBidWNrZXQuIFRoZSBBTEIgc2VuZHNcbiAgICogICBldmVyeSBwYXRoIHRvIHRoZSBjb250YWluZXIsIHdoaWNoIHNlcnZlcyBpdHMgb3duIHN0YXRpYyBhc3NldHMsIHNvIHRoaXNcbiAgICogICBpcyB1bmNvbnN0cmFpbmVkLlxuICAgKiBAZXhhbXBsZSBcIi9teS1iYXNlLXBhdGhcIlxuICAgKi9cbiAgcmVhZG9ubHkgYmFzZVBhdGg/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBDb21tYW5kIHRvIGdlbmVyYXRlIG9wdGltaXplZCB2ZXJzaW9uIG9mIHlvdXIgTmV4dC5qcyBhcHAgaW4gY29udGFpbmVyO1xuICAgKiBAZGVmYXVsdCBcIm5wbSBydW4gYnVpbGRcIlxuICAgKi9cbiAgcmVhZG9ubHkgYnVpbGRDb21tYW5kPzogc3RyaW5nO1xuICAvKipcbiAgICogRGlyZWN0b3J5IHdoZXJlIHRoZSBOZXh0LmpzIGFwcGxpY2F0aW9uIGlzIGxvY2F0ZWQgZm9yIGxvY2FsIGJ1aWxkcy5cbiAgICogVGhpcyBzaG91bGQgY29udGFpbiB0aGUgcGFja2FnZS5qc29uIGFuZCBOZXh0LmpzIGFwcGxpY2F0aW9uIGZpbGVzLlxuICAgKiBUaGlzIGlzIHdoZXJlIHtAbGluayBOZXh0anNCYXNlUHJvcHMuYnVpbGRDb21tYW5kfSBpcyBydW4uXG4gICAqIEBleGFtcGxlIGpvaW4oaW1wb3J0Lm1ldGEuZGlybmFtZSwgXCIuLlwiLCBcIndlYlwiKSBvciBcIi9wYXRoL3RvL25leHRqcy9hcHBcIlxuICAgKi9cbiAgcmVhZG9ubHkgYnVpbGREaXJlY3Rvcnk6IHN0cmluZztcbiAgLyoqXG4gICAqIEJyaW5nIHlvdXIgb3duIFMzIGJ1Y2tldCBmb3IgY2FjaGUgc3RvcmFnZS4gV2hlbiBwcm92aWRlZCwgY2RrLW5leHRqc1xuICAgKiB3aWxsIHVzZSB0aGlzIGJ1Y2tldCBpbnN0ZWFkIG9mIGNyZWF0aW5nIGEgbmV3IG9uZS5cbiAgICpcbiAgICogVGhlIGJ1Y2tldCBtdXN0IGJlIGRlZGljYXRlZCB0byB0aGlzIG9uZSBkZXBsb3ltZW50LiBEb24ndCBzaGFyZSBpdCB3aXRoXG4gICAqIGFub3RoZXIgZGVwbG95bWVudCAoYW5vdGhlciBicmFuY2gsIHN0YWdlLCBvciBhcHApOiBldmVyeSBkZXBsb3knc1xuICAgKiBwb3N0LWRlcGxveSBzdGVwIGRlbGV0ZXMgZXZlcnkgb2JqZWN0IHVuZGVyIGEgdG9wLWxldmVsIHByZWZpeCBvdGhlciB0aGFuXG4gICAqIHRoZSBjdXJyZW50IGBidWlsZElkL2AsIHdoaWNoIGluY2x1ZGVzIGV2ZXJ5IG90aGVyIGRlcGxveW1lbnQncyBjYWNoZS5cbiAgICovXG4gIHJlYWRvbmx5IGNhY2hlQnVja2V0PzogSUJ1Y2tldDtcbiAgLyoqXG4gICAqIEJyaW5nIHlvdXIgb3duIER5bmFtb0RCIHRhYmxlIGZvciByZXZhbGlkYXRpb24gbWV0YWRhdGEuIFdoZW4gcHJvdmlkZWQsXG4gICAqIGNkay1uZXh0anMgd2lsbCB1c2UgdGhpcyB0YWJsZSBpbnN0ZWFkIG9mIGNyZWF0aW5nIGEgbmV3IG9uZS4gVGhlIHRhYmxlXG4gICAqIG11c3QgaGF2ZSBgcGtgIChTdHJpbmcpIGFzIHBhcnRpdGlvbiBrZXkgYW5kIGBza2AgKFN0cmluZykgYXMgc29ydCBrZXkuXG4gICAqIEVuYWJsZSBUVEwgb24gaXRzIGB0dGxgIGF0dHJpYnV0ZSB0b286IGVhY2ggdGFnIHJldmFsaWRhdGlvbiB3cml0ZXMgYVxuICAgKiByZXZhbGlkYXRpb24gbG9nIHJvdyB0aGF0IGV4cGlyZXMgdGhyb3VnaCBpdCwgYW5kIHdpdGhvdXQgVFRMIHRob3NlIHJvd3NcbiAgICogYWNjdW11bGF0ZS5cbiAgICpcbiAgICogVGhlIHRhYmxlIG11c3QgYmUgZGVkaWNhdGVkIHRvIHRoaXMgb25lIGRlcGxveW1lbnQuIERvbid0IHNoYXJlIGl0IHdpdGhcbiAgICogYW5vdGhlciBkZXBsb3ltZW50IChhbm90aGVyIGJyYW5jaCwgc3RhZ2UsIG9yIGFwcCk6IGV2ZXJ5IGRlcGxveSdzXG4gICAqIHBvc3QtZGVwbG95IHN0ZXAgZGVsZXRlcyB0aGUgZW50cmllcyBvZiB0aGUgYnVpbGQgaXQgbGFzdCByZWNvcmRlZCBpbiB0aGVcbiAgICogdGFibGUsIHdoaWNoIHdpdGggYSBzaGFyZWQgdGFibGUgaXMgYW5vdGhlciBkZXBsb3ltZW50J3MgbGl2ZSBidWlsZC5cbiAgICovXG4gIHJlYWRvbmx5IHJldmFsaWRhdGlvblRhYmxlPzogSVRhYmxlVjI7XG4gIC8qKlxuICAgKiBTa2lwcyBydW5uaW5nIGBuZXh0IGJ1aWxkYC4gSWYgYHRydWVgLCB5b3UgYXJlIHJlc3BvbnNpYmxlIGZvciBydW5uaW5nXG4gICAqIGBuZXh0IGJ1aWxkYCBiZWZvcmUgdGhpcyBjb25zdHJ1Y3QgaXMgc3ludGhlc2l6ZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBza2lwQnVpbGQ/OiBib29sZWFuO1xuICAvKipcbiAgICogQnJpbmcgeW91ciBvd24gUzMgYnVja2V0IGZvciBzdGF0aWMgYXNzZXRzLiBXaGVuIHByb3ZpZGVkLCBjZGstbmV4dGpzXG4gICAqIHdpbGwgZGVwbG95IHN0YXRpYyBhc3NldHMgdG8gdGhpcyBidWNrZXQgaW5zdGVhZCBvZiBjcmVhdGluZyBhIG5ldyBvbmUuXG4gICAqXG4gICAqIFVubGlrZSBgY2FjaGVCdWNrZXRgLCB0aGlzIG9uZSBjYW4gYmUgc2hhcmVkLCBidXQgb25seSBiZXR3ZWVuIGRlcGxveW1lbnRzXG4gICAqIHdpdGggZGlmZmVyZW50IGBiYXNlUGF0aGBzIChzbyBkaWZmZXJlbnQgUzMga2V5IHByZWZpeGVzKS4gUHJ1bmluZyBvbmx5XG4gICAqIHRvdWNoZXMgYDxiYXNlUGF0aD4vX25leHQvYCwgc28gaXQgbGVhdmVzIHRoZSBvdGhlcnMnIGFzc2V0cyBhbG9uZS4gVHdvXG4gICAqIGRlcGxveW1lbnRzIHVuZGVyIHRoZSBzYW1lIHByZWZpeCBvdmVyd3JpdGUgZWFjaCBvdGhlcidzIGBwdWJsaWMvYCBmaWxlc1xuICAgKiBhbmQgcHJ1bmUgZWFjaCBvdGhlcidzIGBfbmV4dC9gIGFzc2V0cyBvbmNlIHRoZXkgYXJlIHBhc3QgdGhlIHBydW5lXG4gICAqIFRUTCAoMzAgZGF5cyBieSBkZWZhdWx0KS5cbiAgICovXG4gIHJlYWRvbmx5IHN0YXRpY0Fzc2V0c0J1Y2tldD86IElCdWNrZXQ7XG4gIC8qKlxuICAgKiBCcmluZyB5b3VyIG93biBWUEMuXG4gICAqIElmIHByb3ZpZGVkLCB3aWxsIGJlIHBhc3NlZCB2aWEgb3ZlcnJpZGVzIHRvIHRoZSBFQ1MgQ2x1c3RlciAoZm9yIGNvbnRhaW5lci1iYXNlZCBjb25zdHJ1Y3RzKVxuICAgKiBvciB0byB0aGUgTGFtYmRhIGZ1bmN0aW9uIChmb3IgZnVuY3Rpb24tYmFzZWQgY29uc3RydWN0cykuXG4gICAqIElmIG5vdCBwcm92aWRlZCwgRUNTIENsdXN0ZXIgd2lsbCBjcmVhdGUgYSBWUEMgYXV0b21hdGljYWxseSBmb3IgY29udGFpbmVycyxcbiAgICogYW5kIExhbWJkYSBmdW5jdGlvbnMgd2lsbCBydW4gb3V0c2lkZSBhIFZQQy5cbiAgICovXG4gIHJlYWRvbmx5IHZwYz86IElWcGM7XG59XG5cbi8qKlxuICogUmVxdWlyZWQgYmVjYXVzZSBpZiB3ZSBhZGQgYG92ZXJyaWRlc2Agb250byBgTmV4dGpzQmFzZVByb3BzYCB3ZSBnZXQganNpaVxuICogZXJyb3I6IGBJbnRlcmZhY2UgLi4uIHJlLWRlY2xhcmVzIG1lbWJlciBcIm92ZXJyaWRlc1wiYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5leHRqc0Jhc2VDb25zdHJ1Y3RQcm9wcyBleHRlbmRzIE5leHRqc0Jhc2VQcm9wcyB7XG4gIHJlYWRvbmx5IG92ZXJyaWRlcz86IE5leHRqc0Jhc2VPdmVycmlkZXM7XG59XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgYWxsIE5leHQuanMgcm9vdCBjb25zdHJ1Y3RzXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBOZXh0anNCYXNlQ29uc3RydWN0IGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgbmV4dGpzQnVpbGQ6IE5leHRqc0J1aWxkO1xuICBuZXh0anNTdGF0aWNBc3NldHM6IE5leHRqc1N0YXRpY0Fzc2V0cztcbiAgbmV4dGpzQ2FjaGU6IE5leHRqc0NhY2hlO1xuXG4gIGFic3RyYWN0IGdldCB1cmwoKTogc3RyaW5nO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBuZXh0anNUeXBlOiBOZXh0anNUeXBlO1xuICAvLyB1c2UgYmFzZVByb3BzIGluc3RlYWQgb2YgcHJvcHMgc28gdGhhdCBjaGlsZCBjbGFzc2VzIGNhbiB1c2UgcHJvcHNcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGJhc2VQcm9wczogTmV4dGpzQmFzZUNvbnN0cnVjdFByb3BzO1xuICAvLyBXaWRlc3Qgc2hhcGUgb2YgdGhlIHBlci1gTmV4dGpzVHlwZWAgb3ZlcnJpZGVzLiBUaGUgcHVibGljIGludGVyZmFjZSBlYWNoXG4gIC8vIHJvb3QgY29uc3RydWN0IGFjY2VwdHMgaXMgd2hhdCBhY3R1YWxseSBnYXRlcyB3aGljaCBrZXlzIGFyZSBzZXR0YWJsZS5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNvbnN0cnVjdE92ZXJyaWRlcz86IE5leHRqc0Jhc2VDb25zdHJ1Y3RPdmVycmlkZXM7XG4gIC8qKlxuICAgKiBUaGUgYGJhc2VQYXRoYCBldmVyeXRoaW5nIGRvd25zdHJlYW0gaXMgYnVpbHQgZnJvbTogdGhlIGBiYXNlUGF0aGAgcHJvcCB3aGVuXG4gICAqIHNldCwgb3RoZXJ3aXNlIHRoZSBhcHAncyBvd24gYGJhc2VQYXRoYCBmb3IgdGhlIGBOZXh0anNUeXBlYHMgd2hlcmUgdGhlIHR3b1xuICAgKiBhcmUgbmVjZXNzYXJpbHkgdGhlIHNhbWUuIE5vcm1hbGl6ZWQgdG8gYSBiYXJlIHBhdGggc2VnbWVudCwgYHVuZGVmaW5lZGAgZm9yXG4gICAqIG5vIGBiYXNlUGF0aGAuIFVzZSB0aGlzIGluc3RlYWQgb2YgYGJhc2VQcm9wcy5iYXNlUGF0aGAuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcmVzb2x2ZWRCYXNlUGF0aD86IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IE5leHRqc0Jhc2VDb25zdHJ1Y3RQcm9wcyxcbiAgICBuZXh0anNUeXBlOiBOZXh0anNUeXBlLFxuICApIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIHRoaXMuYmFzZVByb3BzID0gcHJvcHM7XG4gICAgdGhpcy5uZXh0anNUeXBlID0gbmV4dGpzVHlwZTtcbiAgICB0aGlzLmNvbnN0cnVjdE92ZXJyaWRlcyA9IHRoaXMuZ2V0Q29uc3RydWN0T3ZlcnJpZGVzKG5leHRqc1R5cGUpO1xuXG4gICAgdGhpcy5uZXh0anNCdWlsZCA9IHRoaXMuY3JlYXRlTmV4dGpzQnVpbGQoKTtcbiAgICAvLyBBIGJhc2VQYXRoIHRoYXQgZG9lc24ndCBsaW5lIHVwIHdpdGggdGhlIGFwcCdzIG93biBkZXBsb3lzIGNsZWFubHkgYW5kXG4gICAgLy8gdGhlbiA0MDRzIHN0YXRpYyBhc3NldHMsIHNvIHJlY29uY2lsZSB0aGUgdHdvIHVwIGZyb250IGFuZCBmYWlsIGF0IHN5bnRoXG4gICAgLy8gb24gYSBjb21iaW5hdGlvbiB0aGF0IGNhbid0IHdvcmsuXG4gICAgdGhpcy5yZXNvbHZlZEJhc2VQYXRoID0gcmVzb2x2ZUJhc2VQYXRoKFxuICAgICAgbmV4dGpzVHlwZSxcbiAgICAgIHByb3BzLmJhc2VQYXRoLFxuICAgICAgdGhpcy5uZXh0anNCdWlsZC5uZXh0Q29uZmlnQmFzZVBhdGgsXG4gICAgICB0aGlzLmFwaUdhdGV3YXlQcmVmaXgoKSxcbiAgICApO1xuICAgIHRoaXMubmV4dGpzQ2FjaGUgPSB0aGlzLmNyZWF0ZU5leHRqc0NhY2hlKCk7XG4gICAgdGhpcy5uZXh0anNTdGF0aWNBc3NldHMgPSB0aGlzLmNyZWF0ZU5leHRqc1N0YXRpY0Fzc2V0cygpO1xuICAgIHRoaXMudmFsaWRhdGVTdGF0aWNBc3NldHNLZXlQcmVmaXgoKTtcbiAgICB0aGlzLndhcm5VbnNlcnZlZEFzc2V0UHJlZml4KCk7XG4gIH1cblxuICAvKipcbiAgICogV2FybnMgd2hlbiBhIHBhdGgtc3R5bGUgYGFzc2V0UHJlZml4YCB3b3VsZCA0MDQgZXZlcnkgYnVuZGxlIG9uIHRoaXNcbiAgICogYE5leHRqc1R5cGVgIOKAlCBzZWUge0BsaW5rIGlzQXNzZXRQcmVmaXhVbnNlcnZlZH0gZm9yIHdoaWNoIGNvbWJpbmF0aW9ucyB0aG9zZVxuICAgKiBhcmUgYW5kIHdoeSBhIHByZWZpeCBlcXVhbCB0byB0aGUgYXBwJ3MgYGJhc2VQYXRoYCBpcyBub3Qgb25lIG9mIHRoZW0uXG4gICAqXG4gICAqIFdhcm4gcmF0aGVyIHRoYW4gdGhyb3c6IGl0IGlzIHRoZSBhcHAncyBjb25maWcsIHRoZSBkZXBsb3ltZW50IG90aGVyd2lzZVxuICAgKiB3b3JrcywgYW5kIGFuIGFic29sdXRlIGBhc3NldFByZWZpeGAgKGFscmVhZHkgcmVkdWNlZCB0byBgXCJcImAgYnlcbiAgICogYHJlbGF0aXZlQXNzZXRQcmVmaXhgKSBpcyB0aGUgc3VwcG9ydGVkIHdheSB0byBzZXJ2ZSBhc3NldHMgZnJvbVxuICAgKiBlbHNld2hlcmUuXG4gICAqL1xuICBwcml2YXRlIHdhcm5VbnNlcnZlZEFzc2V0UHJlZml4KCk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgICFpc0Fzc2V0UHJlZml4VW5zZXJ2ZWQoXG4gICAgICAgIHRoaXMubmV4dGpzVHlwZSxcbiAgICAgICAgdGhpcy5uZXh0anNCdWlsZC5uZXh0Q29uZmlnQXNzZXRQcmVmaXgsXG4gICAgICAgIHRoaXMubmV4dGpzQnVpbGQubmV4dENvbmZpZ0Jhc2VQYXRoLFxuICAgICAgKVxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBgJHtMT0dfUFJFRklYfSB5b3VyIE5leHQuanMgYXBwIHNldHMgXFxgYXNzZXRQcmVmaXg6IFwiJHt0aGlzLm5leHRqc0J1aWxkLm5leHRDb25maWdBc3NldFByZWZpeH1cIlxcYCwgYCArXG4gICAgICAgIGB3aGljaCBOZXh0anNUeXBlLiR7dGhpcy5uZXh0anNUeXBlfSBjYW5ub3Qgc2VydmU6IHlvdXIgYnVuZGxlcyB3aWxsIGJlIHJlcXVlc3RlZCBhdCBgICtcbiAgICAgICAgYFwiJHt0aGlzLm5leHRqc0J1aWxkLm5leHRDb25maWdBc3NldFByZWZpeH0vX25leHQvc3RhdGljLy4uLlwiIGFuZCBub3RoaW5nIGFuc3dlcnMgdGhlcmUsIHNvIHRoZXkgd2lsbCA0MDQuIGAgK1xuICAgICAgICBcIkRyb3AgYGFzc2V0UHJlZml4YCwgdXNlIGFuIGFic29sdXRlIG9uZSBwb2ludGluZyBhdCBhIENETiB5b3UgZnJvbnQgdGhlIGFzc2V0cyBidWNrZXQgd2l0aCwgXCIgK1xuICAgICAgICBcIm9yIGRlcGxveSB3aXRoIE5leHRqc0dsb2JhbEZ1bmN0aW9ucy9OZXh0anNHbG9iYWxDb250YWluZXJzLlwiLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRm9yIHRoZSBHbG9iYWwgYE5leHRqc1R5cGVgcyB0aGUga2V5IHByZWZpeCBpc24ndCBhIGZyZWUgY2hvaWNlOiBpdCBoYXMgdG8gYmVcbiAgICogYGJhc2VQYXRoYCAoc2VlIGByZXNvbHZlQmFzZVBhdGhgKS4gQSBgZGVzdGluYXRpb25LZXlQcmVmaXhgIG92ZXJyaWRlIHRoYXRcbiAgICogbW92ZXMgdGhlIG9iamVjdHMgZWxzZXdoZXJlIGhhcyBubyB3YXkgdG8gdGVsbCB0aGUgZGlzdHJpYnV0aW9uIGFib3V0IGl0IOKAlFxuICAgKiB1bmxpa2UgdGhlIGZ1bmN0aW9ucycgaW1hZ2Ugb3B0aW1pemVyIGFuZCBgTmV4dGpzQXBpYCwgd2hpY2ggcmVhZFxuICAgKiBgTmV4dGpzU3RhdGljQXNzZXRzLmtleVByZWZpeGAg4oCUIHNvIGZhaWwgYXQgc3ludGggcmF0aGVyIHRoYW4gNDA0IGV2ZXJ5XG4gICAqIHN0YXRpYyByZXF1ZXN0LlxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVN0YXRpY0Fzc2V0c0tleVByZWZpeCgpOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLm5leHRqc1R5cGUgIT09IE5leHRqc1R5cGUuR0xPQkFMX0ZVTkNUSU9OUyAmJlxuICAgICAgdGhpcy5uZXh0anNUeXBlICE9PSBOZXh0anNUeXBlLkdMT0JBTF9DT05UQUlORVJTXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGV4cGVjdGVkID0gdGhpcy5yZXNvbHZlZEJhc2VQYXRoID8/IFwiXCI7XG4gICAgY29uc3QgYWN0dWFsID0gdGhpcy5uZXh0anNTdGF0aWNBc3NldHMua2V5UHJlZml4O1xuICAgIGlmIChhY3R1YWwgIT09IGV4cGVjdGVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGAke0xPR19QUkVGSVh9IHN0YXRpYyBhc3NldHMga2V5IHByZWZpeCBtaXNtYXRjaCBmb3IgTmV4dGpzVHlwZS4ke3RoaXMubmV4dGpzVHlwZX06IGAgK1xuICAgICAgICAgIGB0aGUgYXNzZXRzIGFyZSB1cGxvYWRlZCB1bmRlciAke2FjdHVhbCA/IGBcIiR7YWN0dWFsfVwiYCA6IFwidGhlIGJ1Y2tldCByb290XCJ9IGAgK1xuICAgICAgICAgIGBidXQgQ2xvdWRGcm9udCB3aWxsIHJlcXVlc3QgdGhlbSB1bmRlciAke2V4cGVjdGVkID8gYFwiJHtleHBlY3RlZH1cImAgOiBcInRoZSBidWNrZXQgcm9vdFwifSwgYCArXG4gICAgICAgICAgXCJ1c2luZyB0aGUgcmVxdWVzdCBwYXRoIGFzIHRoZSBTMyBvYmplY3Qga2V5LCBzbyBldmVyeSBgX25leHQvc3RhdGljYCBhbmQgYHB1YmxpYy9gIHJlcXVlc3Qgd291bGQgNDA0LiBcIiArXG4gICAgICAgICAgXCJEcm9wIHRoZSBgZGVzdGluYXRpb25LZXlQcmVmaXhgIG92ZXJyaWRlLCBvciBzZXQgaXQgdG8gdGhlIHNhbWUgdmFsdWUgYXMgYGJhc2VQYXRoYC4gXCIgK1xuICAgICAgICAgIFwiVG8gbmFtZXNwYWNlIGEgc2hhcmVkIGJ1Y2tldCwgdXNlIGBiYXNlUGF0aGAg4oCUIGl0IHByZWZpeGVzIHRoZSBrZXlzIGFuZCB0aGUgVVJMcyB0b2dldGhlci5cIixcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBwcmVmaXggQVBJIEdhdGV3YXkgd2lsbCBzdHJpcCwgcmVhZCBmcm9tIHRoZSBzYW1lIGByZXN0QXBpUHJvcHNgXG4gICAqIG92ZXJyaWRlIGBOZXh0anNBcGlgIGJ1aWxkcyBpdHMgYFJlc3RBcGlgIGZyb20uIE9ubHkgbWVhbmluZ2Z1bCBmb3JcbiAgICogYFJFR0lPTkFMX0ZVTkNUSU9OU2AsIGFuZCByZWFkIGJlZm9yZSBgTmV4dGpzQXBpYCBleGlzdHMgYmVjYXVzZSB0aGVcbiAgICogcmVzb2x2ZWQgYGJhc2VQYXRoYCBhbHNvIGRlY2lkZXMgdGhlIHN0YXRpYyBhc3NldHMnIFMzIGtleSBwcmVmaXguXG4gICAqXG4gICAqIEEgZG9tYWluIGF0dGFjaGVkIGxhdGVyIHdpdGggYGFwaS5hZGREb21haW5OYW1lKClgIGlzIGludmlzaWJsZSBoZXJlLCB0aGVcbiAgICogc2FtZSBsaW1pdGF0aW9uIGBOZXh0anNBcGkudXJsYCBkb2N1bWVudHMuXG4gICAqL1xuICBwcml2YXRlIGFwaUdhdGV3YXlQcmVmaXgoKTogQXBpR2F0ZXdheVByZWZpeCB7XG4gICAgLy8gYG92ZXJyaWRlcy5uZXh0anNBcGlgIGlzIHRoZSBvbmx5IHR5cGVkIHdheSB0byByZWFjaCB0aGUgYFJlc3RBcGlgJ3NcbiAgICAvLyBwcm9wczogYG5leHRqc1JlZ2lvbmFsRnVuY3Rpb25zLm5leHRqc0FwaVByb3BzYCBpc1xuICAgIC8vIGBPcHRpb25hbE5leHRqc0FwaVByb3BzYCwgd2hpY2ggaGFzIG5vIGBvdmVycmlkZXNgLlxuICAgIGNvbnN0IGFwaU92ZXJyaWRlcyA9IChcbiAgICAgIHRoaXMuYmFzZVByb3BzLm92ZXJyaWRlcyBhcyB7IG5leHRqc0FwaT86IE5leHRqc0FwaU92ZXJyaWRlcyB9IHwgdW5kZWZpbmVkXG4gICAgKT8ubmV4dGpzQXBpO1xuICAgIGNvbnN0IHJlc3RBcGlQcm9wcyA9IGFwaU92ZXJyaWRlcz8ucmVzdEFwaVByb3BzO1xuICAgIGNvbnN0IGRvbWFpbk5hbWUgPSByZXN0QXBpUHJvcHM/LmRvbWFpbk5hbWU7XG4gICAgY29uc3Qgc3RyaXBwZWRQcmVmaXggPSBkb21haW5OYW1lXG4gICAgICA/IChkb21haW5OYW1lLmJhc2VQYXRoID8/IFwiXCIpXG4gICAgICA6IChyZXN0QXBpUHJvcHM/LmRlcGxveU9wdGlvbnM/LnN0YWdlTmFtZSA/PyBcInByb2RcIik7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0cmlwcGVkUHJlZml4OiBUb2tlbi5pc1VucmVzb2x2ZWQoc3RyaXBwZWRQcmVmaXgpXG4gICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgIDogc3RyaXBwZWRQcmVmaXgsXG4gICAgICBjdXN0b21Eb21haW46IGRvbWFpbk5hbWUgIT09IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIGNvbnN0cnVjdCBvdmVycmlkZXMgKGlmIHByZXNlbnQpIG9uIHByb3BzIGZvciBhbnkgYE5leHRqc1R5cGVgXG4gICAqL1xuICBwcml2YXRlIGdldENvbnN0cnVjdE92ZXJyaWRlcyhuZXh0anNUeXBlOiBOZXh0anNUeXBlKSB7XG4gICAgY29uc3QgbmV4dGpzVHlwZVRvS2V5OiBSZWNvcmQ8TmV4dGpzVHlwZSwgc3RyaW5nPiA9IHtcbiAgICAgIFtOZXh0anNUeXBlLkdMT0JBTF9DT05UQUlORVJTXTogXCJuZXh0anNHbG9iYWxDb250YWluZXJzXCIsXG4gICAgICBbTmV4dGpzVHlwZS5HTE9CQUxfRlVOQ1RJT05TXTogXCJuZXh0anNHbG9iYWxGdW5jdGlvbnNcIixcbiAgICAgIFtOZXh0anNUeXBlLlJFR0lPTkFMX0NPTlRBSU5FUlNdOiBcIm5leHRqc1JlZ2lvbmFsQ29udGFpbmVyc1wiLFxuICAgICAgW05leHRqc1R5cGUuUkVHSU9OQUxfRlVOQ1RJT05TXTogXCJuZXh0anNSZWdpb25hbEZ1bmN0aW9uc1wiLFxuICAgIH07XG4gICAgY29uc3Qga2V5ID0gbmV4dGpzVHlwZVRvS2V5W25leHRqc1R5cGVdO1xuICAgIGNvbnN0IG92ZXJyaWRlcyA9IHRoaXMuYmFzZVByb3BzLm92ZXJyaWRlcyBhc1xuICAgICAgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gICAgaWYgKG92ZXJyaWRlcyAmJiBrZXkgaW4gb3ZlcnJpZGVzKSB7XG4gICAgICByZXR1cm4gb3ZlcnJpZGVzW2tleV0gYXMgTmV4dGpzQmFzZUNvbnN0cnVjdE92ZXJyaWRlcztcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIGBvdmVycmlkZXMubmV4dGpzRnVuY3Rpb25zYCwgd2hpY2ggb25seSB0aGUgdHdvIEZ1bmN0aW9ucyByb290IGNvbnN0cnVjdHNcbiAgICogZGVjbGFyZS4gQ2FzdCBmb3IgdGhlIHNhbWUgcmVhc29uIGFzIHtAbGluayBmdW5jdGlvbkdyb3Vwc30uXG4gICAqL1xuICBwcml2YXRlIGdldCBmdW5jdGlvbnNPdmVycmlkZXMoKTogTmV4dGpzRnVuY3Rpb25zT3ZlcnJpZGVzIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBvdmVycmlkZXMgPSB0aGlzLmJhc2VQcm9wcy5vdmVycmlkZXMgYXNcbiAgICAgIHsgbmV4dGpzRnVuY3Rpb25zPzogTmV4dGpzRnVuY3Rpb25zT3ZlcnJpZGVzIH0gfCB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIG92ZXJyaWRlcz8ubmV4dGpzRnVuY3Rpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIGBmdW5jdGlvbkdyb3Vwc2AsIHdoaWNoIG9ubHkgdGhlIHR3byBGdW5jdGlvbnMgcm9vdCBjb25zdHJ1Y3RzIGFjY2VwdCDigJRcbiAgICogQ29udGFpbmVycyBkZXBsb3kgb25lIHRhc2sgZGVmaW5pdGlvbiBhbmQgaGF2ZSBubyAyNTAgTUIgcGFja2FnZSBsaW1pdCB0b1xuICAgKiBzcGxpdCBhcm91bmQuXG4gICAqXG4gICAqIFJlYWQgb2ZmIGBiYXNlUHJvcHNgIHdpdGggYSBjYXN0IGZvciB0aGUgc2FtZSByZWFzb24gYXNcbiAgICoge0BsaW5rIGdldENvbnN0cnVjdE92ZXJyaWRlc306IGBjcmVhdGVOZXh0anNCdWlsZGAgYW5kXG4gICAqIGBjcmVhdGVOZXh0anNGdW5jdGlvbnNgIGFyZSBzaGFyZWQgaGVyZSwgYnV0IHRoZSBwcm9wIGlzIGRlY2xhcmVkIG9uIHRoZVxuICAgKiBzdWJjbGFzc2VzLCBzbyBub3RoaW5nIHdlYWtlciB0aGFuIGEgY2FzdCBjYW4gc2VlIGl0LiBBZGRpbmcgaXQgdG9cbiAgICogYE5leHRqc0Jhc2VQcm9wc2Agd291bGQgb2ZmZXIgaXQgdG8gQ29udGFpbmVycywgd2hlcmUgaXQgZG9lcyBub3RoaW5nLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBmdW5jdGlvbkdyb3VwcygpOiBOZXh0anNGdW5jdGlvbkdyb3VwW10gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHByb3BzID0gdGhpcy5iYXNlUHJvcHMgYXMgeyBmdW5jdGlvbkdyb3Vwcz86IE5leHRqc0Z1bmN0aW9uR3JvdXBbXSB9O1xuICAgIHJldHVybiBwcm9wcy5mdW5jdGlvbkdyb3VwcztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgaGVhbHRoIGNoZWNrIHBhdGggYXMgdGhlIHJ1bm5pbmcgYXBwIGFjdHVhbGx5IHNlcnZlcyBpdC5cbiAgICpcbiAgICogQm90aCBjb25zdW1lcnMgb2YgdGhpcyBoaXQgdGhlIGFwcCBkaXJlY3RseSDigJQgdGhlIEFMQiB0YXJnZXQgZ3JvdXAgZm9yd2FyZHNcbiAgICogdGhlIHBhdGggdG8gdGhlIGNvbnRhaW5lciB1bmNoYW5nZWQsIGFuZCB0aGUgY29udGFpbmVyJ3MgYHdnZXRgIHByb2JlIHRhcmdldHNcbiAgICogdGhlIGxvY2FsIHNlcnZlciDigJQgc28gdGhlIHByZWZpeCB0aGF0IG1hdHRlcnMgaXMgdGhlIGFwcCdzIG93biBgYmFzZVBhdGhgLFxuICAgKiBub3QgYHJlc29sdmVkQmFzZVBhdGhgICh3aGljaCBmb3IgYFJFR0lPTkFMX0NPTlRBSU5FUlNgIGlzIG9ubHkgYW4gUzNcbiAgICogbmFtZXNwYWNlKS4gTGVmdCB1bnByZWZpeGVkLCBhbiBhcHAgd2l0aCBhIGBiYXNlUGF0aGAgNDA0cyBldmVyeSBoZWFsdGhcbiAgICogY2hlY2ssIHNvIHRoZSB0YXJnZXQgbmV2ZXIgdHVybnMgaGVhbHRoeSBhbmQgdGhlIGRlcGxveW1lbnQgcm9sbHMgYmFjay5cbiAgICogYGhlYWx0aENoZWNrUGF0aGAgaXMgdGhlcmVmb3JlIHRoZSBwYXRoIGFzIHRoZSBhcHAgcm91dGVzIGl0LCB3aXRob3V0XG4gICAqIGBiYXNlUGF0aGA7IG9uZSB0aGF0IGNhcnJpZXMgdGhlIHByZWZpeCBhbHJlYWR5IGdldHMgaXQgdHdpY2UsIHdoaWNoIGlzIHRoZVxuICAgKiAwLjYuMiBicmVha2luZyBjaGFuZ2UgZm9yIGFueW9uZSB3aG8gcHJlZml4ZWQgYnkgaGFuZCB0byB3b3JrIGFyb3VuZCB0aGlzLlxuICAgKlxuICAgKiBUYWtlcyB0aGUgcGF0aCBhcyBhbiBhcmd1bWVudCByYXRoZXIgdGhhbiByZWFkaW5nIGl0IG9mZiBgYmFzZVByb3BzYDogb25seVxuICAgKiB0aGUgdHdvIENvbnRhaW5lcnMgcm9vdCBjb25zdHJ1Y3RzIGRlY2xhcmUgYGhlYWx0aENoZWNrUGF0aGAsIHNpbmNlIHRoZXkncmVcbiAgICogdGhlIG9ubHkgb25lcyB3aXRoIHNvbWV0aGluZyB0byBoZWFsdGgtY2hlY2suXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVzb2x2ZWRIZWFsdGhDaGVja1BhdGgoaGVhbHRoQ2hlY2tQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBwcmVmaXhXaXRoQmFzZVBhdGgoXG4gICAgICB0aGlzLm5leHRqc0J1aWxkLm5leHRDb25maWdCYXNlUGF0aCxcbiAgICAgIGhlYWx0aENoZWNrUGF0aCxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjb21wdXRlIGJhc2UgcHJvcHMgZm9yIGJvdGggTGFtYmRhIGZ1bmN0aW9ucyBhbmQgY29udGFpbmVyc1xuICAgKi9cbiAgcHJvdGVjdGVkIGNvbXB1dGVCYXNlUHJvcHMoKTogTmV4dGpzQ29tcHV0ZUJhc2VQcm9wcyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNhY2hlQnVja2V0OiB0aGlzLm5leHRqc0NhY2hlLmNhY2hlQnVja2V0LFxuICAgICAgcmV2YWxpZGF0aW9uVGFibGU6IHRoaXMubmV4dGpzQ2FjaGUucmV2YWxpZGF0aW9uVGFibGUsXG4gICAgICBidWlsZElkOiB0aGlzLm5leHRqc0J1aWxkLmJ1aWxkSWQsXG4gICAgICBuZXh0anNUeXBlOiB0aGlzLm5leHRqc1R5cGUsXG4gICAgICBzdGF0aWNBc3NldHNCdWNrZXQ6IHRoaXMubmV4dGpzU3RhdGljQXNzZXRzLmJ1Y2tldCxcbiAgICAgIHN0YXRpY0Fzc2V0c0tleVByZWZpeDogdGhpcy5uZXh0anNTdGF0aWNBc3NldHMua2V5UHJlZml4LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUnVucyBhZnRlciB0aGUgaW5pdCBjYWNoZSB1cGxvYWQ6IGludmFsaWRhdGluZyB0aGUgQ0ROIGJlZm9yZSB0aGUgbmV3XG4gICAqIGNhY2hlIGlzIGluIHBsYWNlIHdvdWxkIG9ubHkgcmUtY2FjaGUgdGhlIHJlc3BvbnNlcyB0aGUgaW52YWxpZGF0aW9uIHdhc1xuICAgKiBtZWFudCB0byBkcm9wLCBhbmQgQ2xvdWRGb3JtYXRpb24gaW5mZXJzIG5vIG9yZGVyaW5nIGJldHdlZW4gdGhlIHR3b1xuICAgKiBjdXN0b20gcmVzb3VyY2VzIG9uIGl0cyBvd24uXG4gICAqL1xuICBwcm90ZWN0ZWQgY3JlYXRlTmV4dGpzUG9zdERlcGxveShcbiAgICBkaXN0cmlidXRpb24/OiBJRGlzdHJpYnV0aW9uLFxuICApOiBOZXh0anNQb3N0RGVwbG95IHtcbiAgICBjb25zdCBwb3N0RGVwbG95ID0gbmV3IE5leHRqc1Bvc3REZXBsb3kodGhpcywgXCJOZXh0anNQb3N0RGVwbG95XCIsIHtcbiAgICAgIGJhc2VQYXRoOiB0aGlzLnJlc29sdmVkQmFzZVBhdGgsXG4gICAgICBidWlsZElkOiB0aGlzLm5leHRqc0J1aWxkLmJ1aWxkSWQsXG4gICAgICBkaXN0cmlidXRpb24sXG4gICAgICBjYWNoZUJ1Y2tldDogdGhpcy5uZXh0anNDYWNoZS5jYWNoZUJ1Y2tldCxcbiAgICAgIHJldmFsaWRhdGlvblRhYmxlOiB0aGlzLm5leHRqc0NhY2hlLnJldmFsaWRhdGlvblRhYmxlLFxuICAgICAgc3RhdGljQXNzZXRzQnVja2V0OiB0aGlzLm5leHRqc1N0YXRpY0Fzc2V0cy5idWNrZXQsXG4gICAgICBzdGF0aWNBc3NldHNLZXlQcmVmaXg6IHRoaXMubmV4dGpzU3RhdGljQXNzZXRzLmtleVByZWZpeCxcbiAgICAgIG92ZXJyaWRlczogdGhpcy5iYXNlUHJvcHMub3ZlcnJpZGVzPy5uZXh0anNQb3N0RGVwbG95LFxuICAgICAgLi4udGhpcy5jb25zdHJ1Y3RPdmVycmlkZXM/Lm5leHRqc1Bvc3REZXBsb3lQcm9wcyxcbiAgICB9KTtcbiAgICBpZiAodGhpcy5uZXh0anNDYWNoZS5idWNrZXREZXBsb3ltZW50KSB7XG4gICAgICBwb3N0RGVwbG95Lm5vZGUuYWRkRGVwZW5kZW5jeSh0aGlzLm5leHRqc0NhY2hlLmJ1Y2tldERlcGxveW1lbnQpO1xuICAgIH1cbiAgICByZXR1cm4gcG9zdERlcGxveTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTmV4dGpzQnVpbGQoKTogTmV4dGpzQnVpbGQge1xuICAgIHJldHVybiBuZXcgTmV4dGpzQnVpbGQodGhpcywgXCJOZXh0anNCdWlsZFwiLCB7XG4gICAgICBidWlsZENvbW1hbmQ6IHRoaXMuYmFzZVByb3BzLmJ1aWxkQ29tbWFuZCxcbiAgICAgIGJ1aWxkRGlyZWN0b3J5OiB0aGlzLmJhc2VQcm9wcy5idWlsZERpcmVjdG9yeSxcbiAgICAgIG5leHRqc1R5cGU6IHRoaXMubmV4dGpzVHlwZSxcbiAgICAgIHNraXBCdWlsZDogdGhpcy5iYXNlUHJvcHMuc2tpcEJ1aWxkLFxuICAgICAgLy8gVGhlIGJ1aWxkIHJlc29sdmVzIHRoZSBzcGxpdCwgc2luY2Ugb25seSBpdCBrbm93cyB0aGUgcm91dGUgdGVtcGxhdGVzO1xuICAgICAgLy8gdGhlIGNvbnN0cnVjdHMgcmVhZCB0aGUgcmVzdWx0IGJhY2sgb2ZmIHRoZSBtYW5pZmVzdC5cbiAgICAgIGZ1bmN0aW9uR3JvdXBzOiB0aGlzLmZ1bmN0aW9uR3JvdXBzPy5tYXAoKHsgbmFtZSwgcm91dGVzIH0pID0+ICh7XG4gICAgICAgIG5hbWUsXG4gICAgICAgIHJvdXRlcyxcbiAgICAgIH0pKSxcbiAgICAgIC8vIFdoYXQgdGhlIExhbWJkYXMgd2lsbCBydW4gZGVjaWRlcyB0aGUgYHNoYXJwYCBiaW5hcmllcyBzdGFnZWQgZm9yIHRoZW0uXG4gICAgICBhcmNoaXRlY3R1cmU6IHRoaXMuZnVuY3Rpb25zT3ZlcnJpZGVzPy5mdW5jdGlvblByb3BzPy5hcmNoaXRlY3R1cmUsXG4gICAgICAuLi50aGlzLmNvbnN0cnVjdE92ZXJyaWRlcz8ubmV4dGpzQnVpbGRQcm9wcyxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTmV4dGpzQ2FjaGUoKTogTmV4dGpzQ2FjaGUge1xuICAgIHJldHVybiBuZXcgTmV4dGpzQ2FjaGUodGhpcywgXCJOZXh0anNDYWNoZVwiLCB7XG4gICAgICBidWlsZElkOiB0aGlzLm5leHRqc0J1aWxkLmJ1aWxkSWQsXG4gICAgICBjYWNoZUJ1Y2tldDogdGhpcy5iYXNlUHJvcHMuY2FjaGVCdWNrZXQsXG4gICAgICBpbml0Q2FjaGVEaXI6IHRoaXMubmV4dGpzQnVpbGQuaW5pdENhY2hlRGlyLFxuICAgICAgb3ZlcnJpZGVzOiB0aGlzLmJhc2VQcm9wcy5vdmVycmlkZXM/Lm5leHRqc0NhY2hlLFxuICAgICAgcmV2YWxpZGF0aW9uVGFibGU6IHRoaXMuYmFzZVByb3BzLnJldmFsaWRhdGlvblRhYmxlLFxuICAgICAgLi4udGhpcy5jb25zdHJ1Y3RPdmVycmlkZXM/Lm5leHRqc0NhY2hlUHJvcHMsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZU5leHRqc1N0YXRpY0Fzc2V0cygpOiBOZXh0anNTdGF0aWNBc3NldHMge1xuICAgIHJldHVybiBuZXcgTmV4dGpzU3RhdGljQXNzZXRzKHRoaXMsIFwiTmV4dGpzU3RhdGljQXNzZXRzXCIsIHtcbiAgICAgIGJ1Y2tldDogdGhpcy5iYXNlUHJvcHMuc3RhdGljQXNzZXRzQnVja2V0LFxuICAgICAgYnVpbGREaXJlY3Rvcnk6IHRoaXMuYmFzZVByb3BzLmJ1aWxkRGlyZWN0b3J5LFxuICAgICAgYnVpbGRJZDogdGhpcy5uZXh0anNCdWlsZC5idWlsZElkLFxuICAgICAgYmFzZVBhdGg6IHRoaXMucmVzb2x2ZWRCYXNlUGF0aCxcbiAgICAgIG92ZXJyaWRlczogdGhpcy5iYXNlUHJvcHMub3ZlcnJpZGVzPy5uZXh0anNTdGF0aWNBc3NldHMsXG4gICAgICAuLi50aGlzLmNvbnN0cnVjdE92ZXJyaWRlcz8ubmV4dGpzU3RhdGljQXNzZXRzUHJvcHMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU2hhcmVkIGJ5IGBOZXh0anNHbG9iYWxGdW5jdGlvbnNgIGFuZCBgTmV4dGpzUmVnaW9uYWxGdW5jdGlvbnNgLlxuICAgKi9cbiAgcHJvdGVjdGVkIGNyZWF0ZU5leHRqc0Z1bmN0aW9ucygpOiBOZXh0anNGdW5jdGlvbnMge1xuICAgIC8vIFRoZSBnZXR0ZXIsIG5vdCBhIHBhcmFtZXRlciwgc28gdGhlIGJ1aWxkIGFuZCB0aGUgZnVuY3Rpb25zIHJlYWQgdGhlXG4gICAgLy8gc2FtZSBgYXJjaGl0ZWN0dXJlYC5cbiAgICBjb25zdCBvdmVycmlkZXMgPSB0aGlzLmZ1bmN0aW9uc092ZXJyaWRlcztcbiAgICByZXR1cm4gbmV3IE5leHRqc0Z1bmN0aW9ucyh0aGlzLCBcIk5leHRqc0Z1bmN0aW9uc1wiLCB7XG4gICAgICAuLi50aGlzLmNvbXB1dGVCYXNlUHJvcHMoKSxcbiAgICAgIGRlcGxveW1lbnRSb290czogdGhpcy5uZXh0anNCdWlsZC5kZXBsb3ltZW50Um9vdHMsXG4gICAgICBhcmNoaXRlY3R1cmU6IHRoaXMubmV4dGpzQnVpbGQuYXJjaGl0ZWN0dXJlLFxuICAgICAgZnVuY3Rpb25Hcm91cHM6IHRoaXMuZnVuY3Rpb25Hcm91cHMsXG4gICAgICBvdmVycmlkZXM6IHtcbiAgICAgICAgLi4ub3ZlcnJpZGVzLFxuICAgICAgICBmdW5jdGlvblByb3BzOiB7XG4gICAgICAgICAgLi4ub3ZlcnJpZGVzPy5mdW5jdGlvblByb3BzLFxuICAgICAgICAgIC8vIFNwcmVhZCBjb25kaXRpb25hbGx5IHJhdGhlciB0aGFuIGFzc2lnbmVkOiBhbiB1bmNvbmRpdGlvbmFsXG4gICAgICAgICAgLy8gYHZwYzogdGhpcy5iYXNlUHJvcHMudnBjYCB3cml0ZXMgYHVuZGVmaW5lZGAgb3ZlciBhblxuICAgICAgICAgIC8vIGBvdmVycmlkZXMubmV4dGpzRnVuY3Rpb25zLmZ1bmN0aW9uUHJvcHMudnBjYCB0aGUgY29uc3VtZXIgc3VwcGxpZWQsXG4gICAgICAgICAgLy8gc28gdGhlIExhbWJkYXMgZGVwbG95IG91dHNpZGUgdGhlIFZQQyBhbmQgY2Fubm90IHJlYWNoIGEgcHJpdmF0ZVxuICAgICAgICAgIC8vIFJEUywgRWxhc3RpQ2FjaGUsIG9yIFZQQyBlbmRwb2ludCAtIHdpdGggbm90aGluZyBzYWlkIGF0IHN5bnRoLlxuICAgICAgICAgIC4uLih0aGlzLmJhc2VQcm9wcy52cGMgPyB7IHZwYzogdGhpcy5iYXNlUHJvcHMudnBjIH0gOiB7fSksXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG4iXX0=
290
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV4dGpzLWJhc2UtY29uc3RydWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Jvb3QtY29uc3RydWN0cy9uZXh0anMtYmFzZS1jb25zdHJ1Y3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLDZDQUFvQztBQUtwQywyQ0FBdUM7QUFDdkMsNENBQXNEO0FBS3RELCtEQUEyRDtBQUMzRCxrREFBb0U7QUFFcEUseUVBSTRDO0FBQzVDLDhEQUcrQjtBQUMvQixrRUFJaUM7QUFDakMsa0RBSzRCO0FBOEg1Qjs7R0FFRztBQUNILE1BQXNCLG1CQUFvQixTQUFRLHNCQUFTOztJQUN6RCxXQUFXLENBQWM7SUFDekIsa0JBQWtCLENBQXFCO0lBQ3ZDLFdBQVcsQ0FBYztJQUlOLFVBQVUsQ0FBYTtJQUMxQyxxRUFBcUU7SUFDbEQsU0FBUyxDQUEyQjtJQUN2RCw0RUFBNEU7SUFDNUUseUVBQXlFO0lBQ3RELGtCQUFrQixDQUFnQztJQUNyRTs7Ozs7T0FLRztJQUNnQixnQkFBZ0IsQ0FBVTtJQUU3QyxZQUNFLEtBQWdCLEVBQ2hCLEVBQVUsRUFDVixLQUErQixFQUMvQixVQUFzQjtRQUV0QixLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2pCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQzdCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFakUsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUM1Qyx5RUFBeUU7UUFDekUsMkVBQTJFO1FBQzNFLG9DQUFvQztRQUNwQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBQSwyQkFBZSxFQUNyQyxVQUFVLEVBQ1YsS0FBSyxDQUFDLFFBQVEsRUFDZCxJQUFJLENBQUMsV0FBVyxD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QyxDQUFDO0lBQ0wsQ0FBQzs7QUEvVEgsa0RBZ1VDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVG9rZW4gfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IElEaXN0cmlidXRpb24gfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNsb3VkZnJvbnRcIjtcbmltcG9ydCB7IElUYWJsZVYyIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1keW5hbW9kYlwiO1xuaW1wb3J0IHsgSVZwYyB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWMyXCI7XG5pbXBvcnQgeyBJQnVja2V0IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zM1wiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IExPR19QUkVGSVgsIE5leHRqc1R5cGUgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBPcHRpb25hbE5leHRqc0J1aWxkUHJvcHMgfSBmcm9tIFwiLi4vZ2VuZXJhdGVkLXN0cnVjdHMvT3B0aW9uYWxOZXh0anNCdWlsZFByb3BzXCI7XG5pbXBvcnQgeyBPcHRpb25hbE5leHRqc0NhY2hlUHJvcHMgfSBmcm9tIFwiLi4vZ2VuZXJhdGVkLXN0cnVjdHMvT3B0aW9uYWxOZXh0anNDYWNoZVByb3BzXCI7XG5pbXBvcnQgeyBPcHRpb25hbE5leHRqc1Bvc3REZXBsb3lQcm9wcyB9IGZyb20gXCIuLi9nZW5lcmF0ZWQtc3RydWN0cy9PcHRpb25hbE5leHRqc1Bvc3REZXBsb3lQcm9wc1wiO1xuaW1wb3J0IHsgTmV4dGpzQXBpT3ZlcnJpZGVzIH0gZnJvbSBcIi4uL25leHRqcy1hcGlcIjtcbmltcG9ydCB7IE5leHRqc0J1aWxkIH0gZnJvbSBcIi4uL25leHRqcy1idWlsZC9uZXh0anMtYnVpbGRcIjtcbmltcG9ydCB7IE5leHRqc0NhY2hlLCBOZXh0anNDYWNoZU92ZXJyaWRlcyB9IGZyb20gXCIuLi9uZXh0anMtY2FjaGVcIjtcbmltcG9ydCB7IE5leHRqc0NvbXB1dGVCYXNlUHJvcHMgfSBmcm9tIFwiLi4vbmV4dGpzLWNvbXB1dGUvbmV4dGpzLWNvbXB1dGUtYmFzZS1wcm9wc1wiO1xuaW1wb3J0IHtcbiAgTmV4dGpzRnVuY3Rpb25Hcm91cCxcbiAgTmV4dGpzRnVuY3Rpb25zLFxuICBOZXh0anNGdW5jdGlvbnNPdmVycmlkZXMsXG59IGZyb20gXCIuLi9uZXh0anMtY29tcHV0ZS9uZXh0anMtZnVuY3Rpb25zXCI7XG5pbXBvcnQge1xuICBOZXh0anNQb3N0RGVwbG95LFxuICBOZXh0anNQb3N0RGVwbG95T3ZlcnJpZGVzLFxufSBmcm9tIFwiLi4vbmV4dGpzLXBvc3QtZGVwbG95XCI7XG5pbXBvcnQge1xuICBOZXh0anNTdGF0aWNBc3NldHMsXG4gIE5leHRqc1N0YXRpY0Fzc2V0c092ZXJyaWRlcyxcbiAgTmV4dGpzU3RhdGljQXNzZXRzUHJvcHMsXG59IGZyb20gXCIuLi9uZXh0anMtc3RhdGljLWFzc2V0c1wiO1xuaW1wb3J0IHtcbiAgQXBpR2F0ZXdheVByZWZpeCxcbiAgaXNBc3NldFByZWZpeFVuc2VydmVkLFxuICBwcmVmaXhXaXRoQmFzZVBhdGgsXG4gIHJlc29sdmVCYXNlUGF0aCxcbn0gZnJvbSBcIi4uL3V0aWxzL2Jhc2UtcGF0aFwiO1xuXG4vKipcbiAqIEJhc2Ugb3ZlcnJpZGVzIGZvciB0aGUgcHJvcHMgcGFzc2VkIHRvIGNvbnN0cnVjdHMgd2l0aGluIHJvb3QvdG9wLWxldmVsIE5leHQuanMgY29uc3RydWN0c1xuICovXG5leHBvcnQgaW50ZXJmYWNlIE5leHRqc0Jhc2VDb25zdHJ1Y3RPdmVycmlkZXMge1xuICByZWFkb25seSBuZXh0anNCdWlsZFByb3BzPzogT3B0aW9uYWxOZXh0anNCdWlsZFByb3BzO1xuICByZWFkb25seSBuZXh0anNDYWNoZVByb3BzPzogT3B0aW9uYWxOZXh0anNDYWNoZVByb3BzO1xuICByZWFkb25seSBuZXh0anNQb3N0RGVwbG95UHJvcHM/OiBPcHRpb25hbE5leHRqc1Bvc3REZXBsb3lQcm9wcztcbiAgcmVhZG9ubHkgbmV4dGpzU3RhdGljQXNzZXRzUHJvcHM/OiBOZXh0anNTdGF0aWNBc3NldHNQcm9wcztcbn1cblxuLyoqXG4gKiBCYXNlIG92ZXJyaWRlcyBmb3IgY29uc3RydWN0cyBzaGFyZWQgYmV0d2VlbiBhbGwgcm9vdC90b3AtbGV2ZWwgTmV4dC5qcyBjb25zdHJ1Y3RzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5leHRqc0Jhc2VPdmVycmlkZXMge1xuICByZWFkb25seSBuZXh0anNDYWNoZT86IE5leHRqc0NhY2hlT3ZlcnJpZGVzO1xuICByZWFkb25seSBuZXh0anNQb3N0RGVwbG95PzogTmV4dGpzUG9zdERlcGxveU92ZXJyaWRlcztcbiAgcmVhZG9ubHkgbmV4dGpzU3RhdGljQXNzZXRzPzogTmV4dGpzU3RhdGljQXNzZXRzT3ZlcnJpZGVzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5leHRqc0Jhc2VQcm9wcyB7XG4gIC8qKlxuICAgKiBQcmVmaXggdG8gdGhlIFVSSSBwYXRoIHRoZSBhcHAgd2lsbCBiZSBzZXJ2ZWQgYXQuIEFsc28gbmFtZXNwYWNlcyB0aGVcbiAgICogc3RhdGljIGFzc2V0cyBpbiBTMywgc28gaXQgZG91YmxlcyBhcyBhIHdheSB0byBob3N0IG11bHRpcGxlIGFwcHMgb3JcbiAgICogYnJhbmNoZXMgb3V0IG9mIG9uZSBidWNrZXQuXG4gICAqXG4gICAqIEhvdyB0aGlzIHJlbGF0ZXMgdG8gdGhlIGBiYXNlUGF0aGAgaW4geW91ciBhcHAncyBgbmV4dC5jb25maWcuanNgIGRlcGVuZHNcbiAgICogb24gdGhlIGNvbnN0cnVjdCwgYW5kIHN5bnRoIGZhaWxzIG9uIGEgY29tYmluYXRpb24gdGhhdCBjYW4ndCBzZXJ2ZSB0aGVcbiAgICogYXBwOlxuICAgKlxuICAgKiAtIGBOZXh0anNHbG9iYWxGdW5jdGlvbnNgL2BOZXh0anNHbG9iYWxDb250YWluZXJzYDogbGVhdmUgdGhpcyB1bnNldCBhbmQgaXRcbiAgICogICBmb2xsb3dzIHlvdXIgYXBwJ3MgYGJhc2VQYXRoYCwgd2hpY2ggaXMgd2hhdCB5b3Ugd2FudCDigJQgQ2xvdWRGcm9udCBzZXJ2ZXNcbiAgICogICBzdGF0aWMgYXNzZXRzIGZyb20gUzMgdXNpbmcgdGhlIHJlcXVlc3QgcGF0aCBhcyB0aGUgb2JqZWN0IGtleSwgc28gdGhlIHR3b1xuICAgKiAgIGhhdmUgdG8gYmUgaWRlbnRpY2FsIGFuZCBhIG1pc21hdGNoIDQwNHMgYWxsIG9mIHRoZW0uIFNldHRpbmcgYSBkaWZmZXJlbnRcbiAgICogICB2YWx1ZSB0aHJvd3MuXG4gICAqIC0gYE5leHRqc1JlZ2lvbmFsRnVuY3Rpb25zYDogbGVhdmUgdGhpcyB1bnNldCBhbmQgaXQgZm9sbG93cyB5b3VyIGFwcCdzXG4gICAqICAgYGJhc2VQYXRoYCBtaW51cyB0aGUgcHJlZml4IEFQSSBHYXRld2F5IHN0cmlwcyBiZWZvcmUgbWF0Y2hpbmcgcmVzb3VyY2VzIOKAlFxuICAgKiAgIHRoZSBzdGFnZSAoYGRlcGxveU9wdGlvbnMuc3RhZ2VOYW1lYCwgZGVmYXVsdCBgcHJvZGApLCBvciB0aGUgYmFzZSBwYXRoXG4gICAqICAgbWFwcGluZyBvZiBhIGN1c3RvbSBkb21haW4gc2V0IGluIGByZXN0QXBpUHJvcHMuZG9tYWluTmFtZWAuIFNvXG4gICAqICAgYGJhc2VQYXRoOiBcIi9wcm9kXCJgIG1vdW50cyBhdCB0aGUgcm9vdCwgYFwiL3Byb2QvYmFzZVwiYCB1bmRlciBgYmFzZWAsIGFuZFxuICAgKiAgIGBcIi9kb2NzXCJgIGJlaGluZCBhIGN1c3RvbSBkb21haW4gbWFwcGVkIGF0IHRoZSByb290IHVuZGVyIGBkb2NzYC4gT24gdGhlXG4gICAqICAgZXhlY3V0ZS1hcGkgZW5kcG9pbnQgYW4gYXBwIGBiYXNlUGF0aGAgdGhhdCBkb2Vzbid0IHN0YXJ0IHdpdGggdGhlIHN0YWdlXG4gICAqICAgd2FybnMsIHNpbmNlIGl0cyBsaW5rcyB3aWxsIG1pc3MgdGhlIHN0YWdlLiBJZiB5b3Ugc2V0IHRoaXMsIHRoZSBhcHAnc1xuICAgKiAgIGBiYXNlUGF0aGAgbXVzdCBlbmQgd2l0aCBpdC4gQSBkb21haW4gYXR0YWNoZWQgbGF0ZXIgd2l0aFxuICAgKiAgIGBhZGREb21haW5OYW1lKClgIGlzIG5vdCBzZWVuIGF0IHN5bnRoOyBzZXQgdGhpcyBleHBsaWNpdGx5IHRoZW4g4oCUIHRvXG4gICAqICAgYFwiL1wiYCB3aGVuIHRoYXQgZG9tYWluJ3MgYmFzZSBwYXRoIG1hcHBpbmcgc3RyaXBzIHlvdXIgYXBwJ3Mgd2hvbGVcbiAgICogICBgYmFzZVBhdGhgLCB3aGljaCBtb3VudHMgZXZlcnkgcmVzb3VyY2UgYXQgdGhlIHJvb3QuXG4gICAqIC0gYE5leHRqc1JlZ2lvbmFsQ29udGFpbmVyc2A6IG9ubHkgbmFtZXNwYWNlcyB0aGUgUzMgYnVja2V0LiBUaGUgQUxCIHNlbmRzXG4gICAqICAgZXZlcnkgcGF0aCB0byB0aGUgY29udGFpbmVyLCB3aGljaCBzZXJ2ZXMgaXRzIG93biBzdGF0aWMgYXNzZXRzLCBzbyB0aGlzXG4gICAqICAgaXMgdW5jb25zdHJhaW5lZC5cbiAgICogQGV4YW1wbGUgXCIvbXktYmFzZS1wYXRoXCJcbiAgICovXG4gIHJlYWRvbmx5IGJhc2VQYXRoPzogc3RyaW5nO1xuICAvKipcbiAgICogQ29tbWFuZCB0byBnZW5lcmF0ZSBvcHRpbWl6ZWQgdmVyc2lvbiBvZiB5b3VyIE5leHQuanMgYXBwIGluIGNvbnRhaW5lcjtcbiAgICogQGRlZmF1bHQgXCJucG0gcnVuIGJ1aWxkXCJcbiAgICovXG4gIHJlYWRvbmx5IGJ1aWxkQ29tbWFuZD86IHN0cmluZztcbiAgLyoqXG4gICAqIERpcmVjdG9yeSB3aGVyZSB0aGUgTmV4dC5qcyBhcHBsaWNhdGlvbiBpcyBsb2NhdGVkIGZvciBsb2NhbCBidWlsZHMuXG4gICAqIFRoaXMgc2hvdWxkIGNvbnRhaW4gdGhlIHBhY2thZ2UuanNvbiBhbmQgTmV4dC5qcyBhcHBsaWNhdGlvbiBmaWxlcy5cbiAgICogVGhpcyBpcyB3aGVyZSB7QGxpbmsgTmV4dGpzQmFzZVByb3BzLmJ1aWxkQ29tbWFuZH0gaXMgcnVuLlxuICAgKiBAZXhhbXBsZSBqb2luKGltcG9ydC5tZXRhLmRpcm5hbWUsIFwiLi5cIiwgXCJ3ZWJcIikgb3IgXCIvcGF0aC90by9uZXh0anMvYXBwXCJcbiAgICovXG4gIHJlYWRvbmx5IGJ1aWxkRGlyZWN0b3J5OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBCcmluZyB5b3VyIG93biBTMyBidWNrZXQgZm9yIGNhY2hlIHN0b3JhZ2UuIFdoZW4gcHJvdmlkZWQsIGNkay1uZXh0anNcbiAgICogd2lsbCB1c2UgdGhpcyBidWNrZXQgaW5zdGVhZCBvZiBjcmVhdGluZyBhIG5ldyBvbmUuXG4gICAqXG4gICAqIFRoZSBidWNrZXQgbXVzdCBiZSBkZWRpY2F0ZWQgdG8gdGhpcyBvbmUgZGVwbG95bWVudC4gRG9uJ3Qgc2hhcmUgaXQgd2l0aFxuICAgKiBhbm90aGVyIGRlcGxveW1lbnQgKGFub3RoZXIgYnJhbmNoLCBzdGFnZSwgb3IgYXBwKTogZXZlcnkgZGVwbG95J3NcbiAgICogcG9zdC1kZXBsb3kgc3RlcCBkZWxldGVzIGV2ZXJ5IG9iamVjdCB1bmRlciBhIHRvcC1sZXZlbCBwcmVmaXggb3RoZXIgdGhhblxuICAgKiB0aGUgY3VycmVudCBgYnVpbGRJZC9gLCB3aGljaCBpbmNsdWRlcyBldmVyeSBvdGhlciBkZXBsb3ltZW50J3MgY2FjaGUuXG4gICAqL1xuICByZWFkb25seSBjYWNoZUJ1Y2tldD86IElCdWNrZXQ7XG4gIC8qKlxuICAgKiBCcmluZyB5b3VyIG93biBEeW5hbW9EQiB0YWJsZSBmb3IgcmV2YWxpZGF0aW9uIG1ldGFkYXRhLiBXaGVuIHByb3ZpZGVkLFxuICAgKiBjZGstbmV4dGpzIHdpbGwgdXNlIHRoaXMgdGFibGUgaW5zdGVhZCBvZiBjcmVhdGluZyBhIG5ldyBvbmUuIFRoZSB0YWJsZVxuICAgKiBtdXN0IGhhdmUgYHBrYCAoU3RyaW5nKSBhcyBwYXJ0aXRpb24ga2V5IGFuZCBgc2tgIChTdHJpbmcpIGFzIHNvcnQga2V5LlxuICAgKiBFbmFibGUgVFRMIG9uIGl0cyBgdHRsYCBhdHRyaWJ1dGUgdG9vOiBlYWNoIHRhZyByZXZhbGlkYXRpb24gd3JpdGVzIGFcbiAgICogcmV2YWxpZGF0aW9uIGxvZyByb3cgdGhhdCBleHBpcmVzIHRocm91Z2ggaXQsIGFuZCB3aXRob3V0IFRUTCB0aG9zZSByb3dzXG4gICAqIGFjY3VtdWxhdGUuXG4gICAqXG4gICAqIFRoZSB0YWJsZSBtdXN0IGJlIGRlZGljYXRlZCB0byB0aGlzIG9uZSBkZXBsb3ltZW50LiBEb24ndCBzaGFyZSBpdCB3aXRoXG4gICAqIGFub3RoZXIgZGVwbG95bWVudCAoYW5vdGhlciBicmFuY2gsIHN0YWdlLCBvciBhcHApOiBldmVyeSBkZXBsb3knc1xuICAgKiBwb3N0LWRlcGxveSBzdGVwIGRlbGV0ZXMgdGhlIGVudHJpZXMgb2YgdGhlIGJ1aWxkIGl0IGxhc3QgcmVjb3JkZWQgaW4gdGhlXG4gICAqIHRhYmxlLCB3aGljaCB3aXRoIGEgc2hhcmVkIHRhYmxlIGlzIGFub3RoZXIgZGVwbG95bWVudCdzIGxpdmUgYnVpbGQuXG4gICAqL1xuICByZWFkb25seSByZXZhbGlkYXRpb25UYWJsZT86IElUYWJsZVYyO1xuICAvKipcbiAgICogU2tpcHMgcnVubmluZyBgbmV4dCBidWlsZGAuIElmIGB0cnVlYCwgeW91IGFyZSByZXNwb25zaWJsZSBmb3IgcnVubmluZ1xuICAgKiBgbmV4dCBidWlsZGAgYmVmb3JlIHRoaXMgY29uc3RydWN0IGlzIHN5bnRoZXNpemVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgc2tpcEJ1aWxkPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEJyaW5nIHlvdXIgb3duIFMzIGJ1Y2tldCBmb3Igc3RhdGljIGFzc2V0cy4gV2hlbiBwcm92aWRlZCwgY2RrLW5leHRqc1xuICAgKiB3aWxsIGRlcGxveSBzdGF0aWMgYXNzZXRzIHRvIHRoaXMgYnVja2V0IGluc3RlYWQgb2YgY3JlYXRpbmcgYSBuZXcgb25lLlxuICAgKlxuICAgKiBVbmxpa2UgYGNhY2hlQnVja2V0YCwgdGhpcyBvbmUgY2FuIGJlIHNoYXJlZCwgYnV0IG9ubHkgYmV0d2VlbiBkZXBsb3ltZW50c1xuICAgKiB3aXRoIGRpZmZlcmVudCBgYmFzZVBhdGhgcyAoc28gZGlmZmVyZW50IFMzIGtleSBwcmVmaXhlcykuIFBydW5pbmcgb25seVxuICAgKiB0b3VjaGVzIGA8YmFzZVBhdGg+L19uZXh0L2AsIHNvIGl0IGxlYXZlcyB0aGUgb3RoZXJzJyBhc3NldHMgYWxvbmUuIFR3b1xuICAgKiBkZXBsb3ltZW50cyB1bmRlciB0aGUgc2FtZSBwcmVmaXggb3ZlcndyaXRlIGVhY2ggb3RoZXIncyBgcHVibGljL2AgZmlsZXNcbiAgICogYW5kIHBydW5lIGVhY2ggb3RoZXIncyBgX25leHQvYCBhc3NldHMgb25jZSB0aGV5IGFyZSBwYXN0IHRoZSBwcnVuZVxuICAgKiBUVEwgKDMwIGRheXMgYnkgZGVmYXVsdCkuXG4gICAqL1xuICByZWFkb25seSBzdGF0aWNBc3NldHNCdWNrZXQ/OiBJQnVja2V0O1xuICAvKipcbiAgICogQnJpbmcgeW91ciBvd24gVlBDLlxuICAgKiBJZiBwcm92aWRlZCwgd2lsbCBiZSBwYXNzZWQgdmlhIG92ZXJyaWRlcyB0byB0aGUgRUNTIENsdXN0ZXIgKGZvciBjb250YWluZXItYmFzZWQgY29uc3RydWN0cylcbiAgICogb3IgdG8gdGhlIExhbWJkYSBmdW5jdGlvbiAoZm9yIGZ1bmN0aW9uLWJhc2VkIGNvbnN0cnVjdHMpLlxuICAgKiBJZiBub3QgcHJvdmlkZWQsIEVDUyBDbHVzdGVyIHdpbGwgY3JlYXRlIGEgVlBDIGF1dG9tYXRpY2FsbHkgZm9yIGNvbnRhaW5lcnMsXG4gICAqIGFuZCBMYW1iZGEgZnVuY3Rpb25zIHdpbGwgcnVuIG91dHNpZGUgYSBWUEMuXG4gICAqL1xuICByZWFkb25seSB2cGM/OiBJVnBjO1xufVxuXG4vKipcbiAqIFJlcXVpcmVkIGJlY2F1c2UgaWYgd2UgYWRkIGBvdmVycmlkZXNgIG9udG8gYE5leHRqc0Jhc2VQcm9wc2Agd2UgZ2V0IGpzaWlcbiAqIGVycm9yOiBgSW50ZXJmYWNlIC4uLiByZS1kZWNsYXJlcyBtZW1iZXIgXCJvdmVycmlkZXNcImBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZXh0anNCYXNlQ29uc3RydWN0UHJvcHMgZXh0ZW5kcyBOZXh0anNCYXNlUHJvcHMge1xuICByZWFkb25seSBvdmVycmlkZXM/OiBOZXh0anNCYXNlT3ZlcnJpZGVzO1xufVxuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIGFsbCBOZXh0LmpzIHJvb3QgY29uc3RydWN0c1xuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTmV4dGpzQmFzZUNvbnN0cnVjdCBleHRlbmRzIENvbnN0cnVjdCB7XG4gIG5leHRqc0J1aWxkOiBOZXh0anNCdWlsZDtcbiAgbmV4dGpzU3RhdGljQXNzZXRzOiBOZXh0anNTdGF0aWNBc3NldHM7XG4gIG5leHRqc0NhY2hlOiBOZXh0anNDYWNoZTtcblxuICBhYnN0cmFjdCBnZXQgdXJsKCk6IHN0cmluZztcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgbmV4dGpzVHlwZTogTmV4dGpzVHlwZTtcbiAgLy8gdXNlIGJhc2VQcm9wcyBpbnN0ZWFkIG9mIHByb3BzIHNvIHRoYXQgY2hpbGQgY2xhc3NlcyBjYW4gdXNlIHByb3BzXG4gIHByb3RlY3RlZCByZWFkb25seSBiYXNlUHJvcHM6IE5leHRqc0Jhc2VDb25zdHJ1Y3RQcm9wcztcbiAgLy8gV2lkZXN0IHNoYXBlIG9mIHRoZSBwZXItYE5leHRqc1R5cGVgIG92ZXJyaWRlcy4gVGhlIHB1YmxpYyBpbnRlcmZhY2UgZWFjaFxuICAvLyByb290IGNvbnN0cnVjdCBhY2NlcHRzIGlzIHdoYXQgYWN0dWFsbHkgZ2F0ZXMgd2hpY2gga2V5cyBhcmUgc2V0dGFibGUuXG4gIHByb3RlY3RlZCByZWFkb25seSBjb25zdHJ1Y3RPdmVycmlkZXM/OiBOZXh0anNCYXNlQ29uc3RydWN0T3ZlcnJpZGVzO1xuICAvKipcbiAgICogVGhlIGBiYXNlUGF0aGAgZXZlcnl0aGluZyBkb3duc3RyZWFtIGlzIGJ1aWx0IGZyb206IHRoZSBgYmFzZVBhdGhgIHByb3Agd2hlblxuICAgKiBzZXQsIG90aGVyd2lzZSB0aGUgYXBwJ3Mgb3duIGBiYXNlUGF0aGAgZm9yIHRoZSBgTmV4dGpzVHlwZWBzIHdoZXJlIHRoZSB0d29cbiAgICogYXJlIG5lY2Vzc2FyaWx5IHRoZSBzYW1lLiBOb3JtYWxpemVkIHRvIGEgYmFyZSBwYXRoIHNlZ21lbnQsIGB1bmRlZmluZWRgIGZvclxuICAgKiBubyBgYmFzZVBhdGhgLiBVc2UgdGhpcyBpbnN0ZWFkIG9mIGBiYXNlUHJvcHMuYmFzZVBhdGhgLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHJlc29sdmVkQmFzZVBhdGg/OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBOZXh0anNCYXNlQ29uc3RydWN0UHJvcHMsXG4gICAgbmV4dGpzVHlwZTogTmV4dGpzVHlwZSxcbiAgKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICB0aGlzLmJhc2VQcm9wcyA9IHByb3BzO1xuICAgIHRoaXMubmV4dGpzVHlwZSA9IG5leHRqc1R5cGU7XG4gICAgdGhpcy5jb25zdHJ1Y3RPdmVycmlkZXMgPSB0aGlzLmdldENvbnN0cnVjdE92ZXJyaWRlcyhuZXh0anNUeXBlKTtcblxuICAgIHRoaXMubmV4dGpzQnVpbGQgPSB0aGlzLmNyZWF0ZU5leHRqc0J1aWxkKCk7XG4gICAgLy8gQSBiYXNlUGF0aCB0aGF0IGRvZXNuJ3QgbGluZSB1cCB3aXRoIHRoZSBhcHAncyBvd24gZGVwbG95cyBjbGVhbmx5IGFuZFxuICAgIC8vIHRoZW4gNDA0cyBzdGF0aWMgYXNzZXRzLCBzbyByZWNvbmNpbGUgdGhlIHR3byB1cCBmcm9udCBhbmQgZmFpbCBhdCBzeW50aFxuICAgIC8vIG9uIGEgY29tYmluYXRpb24gdGhhdCBjYW4ndCB3b3JrLlxuICAgIHRoaXMucmVzb2x2ZWRCYXNlUGF0aCA9IHJlc29sdmVCYXNlUGF0aChcbiAgICAgIG5leHRqc1R5cGUsXG4gICAgICBwcm9wcy5iYXNlUGF0aCxcbiAgICAgIHRoaXMubmV4dGpzQnVpbGQubmV4dENvbmZpZ0Jhc2VQYXRoLFxuICAgICAgdGhpcy5hcGlHYXRld2F5UHJlZml4KCksXG4gICAgKTtcbiAgICB0aGlzLm5leHRqc0NhY2hlID0gdGhpcy5jcmVhdGVOZXh0anNDYWNoZSgpO1xuICAgIHRoaXMubmV4dGpzU3RhdGljQXNzZXRzID0gdGhpcy5jcmVhdGVOZXh0anNTdGF0aWNBc3NldHMoKTtcbiAgICB0aGlzLnZhbGlkYXRlU3RhdGljQXNzZXRzS2V5UHJlZml4KCk7XG4gICAgdGhpcy53YXJuVW5zZXJ2ZWRBc3NldFByZWZpeCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdhcm5zIHdoZW4gYSBwYXRoLXN0eWxlIGBhc3NldFByZWZpeGAgd291bGQgNDA0IGV2ZXJ5IGJ1bmRsZSBvbiB0aGlzXG4gICAqIGBOZXh0anNUeXBlYCDigJQgc2VlIHtAbGluayBpc0Fzc2V0UHJlZml4VW5zZXJ2ZWR9IGZvciB3aGljaCBjb21iaW5hdGlvbnMgdGhvc2VcbiAgICogYXJlIGFuZCB3aHkgYSBwcmVmaXggZXF1YWwgdG8gdGhlIGFwcCdzIGBiYXNlUGF0aGAgaXMgbm90IG9uZSBvZiB0aGVtLlxuICAgKlxuICAgKiBXYXJuIHJhdGhlciB0aGFuIHRocm93OiBpdCBpcyB0aGUgYXBwJ3MgY29uZmlnLCB0aGUgZGVwbG95bWVudCBvdGhlcndpc2VcbiAgICogd29ya3MsIGFuZCBhbiBhYnNvbHV0ZSBgYXNzZXRQcmVmaXhgIChhbHJlYWR5IHJlZHVjZWQgdG8gYFwiXCJgIGJ5XG4gICAqIGByZWxhdGl2ZUFzc2V0UHJlZml4YCkgaXMgdGhlIHN1cHBvcnRlZCB3YXkgdG8gc2VydmUgYXNzZXRzIGZyb21cbiAgICogZWxzZXdoZXJlLlxuICAgKi9cbiAgcHJpdmF0ZSB3YXJuVW5zZXJ2ZWRBc3NldFByZWZpeCgpOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICAhaXNBc3NldFByZWZpeFVuc2VydmVkKFxuICAgICAgICB0aGlzLm5leHRqc1R5cGUsXG4gICAgICAgIHRoaXMubmV4dGpzQnVpbGQubmV4dENvbmZpZ0Fzc2V0UHJlZml4LFxuICAgICAgICB0aGlzLm5leHRqc0J1aWxkLm5leHRDb25maWdCYXNlUGF0aCxcbiAgICAgIClcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgYCR7TE9HX1BSRUZJWH0geW91ciBOZXh0LmpzIGFwcCBzZXRzIFxcYGFzc2V0UHJlZml4OiBcIiR7dGhpcy5uZXh0anNCdWlsZC5uZXh0Q29uZmlnQXNzZXRQcmVmaXh9XCJcXGAsIGAgK1xuICAgICAgICBgd2hpY2ggTmV4dGpzVHlwZS4ke3RoaXMubmV4dGpzVHlwZX0gY2Fubm90IHNlcnZlOiB5b3VyIGJ1bmRsZXMgd2lsbCBiZSByZXF1ZXN0ZWQgYXQgYCArXG4gICAgICAgIGBcIiR7dGhpcy5uZXh0anNCdWlsZC5uZXh0Q29uZmlnQXNzZXRQcmVmaXh9L19uZXh0L3N0YXRpYy8uLi5cIiBhbmQgbm90aGluZyBhbnN3ZXJzIHRoZXJlLCBzbyB0aGV5IHdpbGwgNDA0LiBgICtcbiAgICAgICAgXCJEcm9wIGBhc3NldFByZWZpeGAsIHVzZSBhbiBhYnNvbHV0ZSBvbmUgcG9pbnRpbmcgYXQgYSBDRE4geW91IGZyb250IHRoZSBhc3NldHMgYnVja2V0IHdpdGgsIFwiICtcbiAgICAgICAgXCJvciBkZXBsb3kgd2l0aCBOZXh0anNHbG9iYWxGdW5jdGlvbnMvTmV4dGpzR2xvYmFsQ29udGFpbmVycy5cIixcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvciB0aGUgR2xvYmFsIGBOZXh0anNUeXBlYHMgdGhlIGtleSBwcmVmaXggaXNuJ3QgYSBmcmVlIGNob2ljZTogaXQgaGFzIHRvIGJlXG4gICAqIGBiYXNlUGF0aGAgKHNlZSBgcmVzb2x2ZUJhc2VQYXRoYCkuIEEgYGRlc3RpbmF0aW9uS2V5UHJlZml4YCBvdmVycmlkZSB0aGF0XG4gICAqIG1vdmVzIHRoZSBvYmplY3RzIGVsc2V3aGVyZSBoYXMgbm8gd2F5IHRvIHRlbGwgdGhlIGRpc3RyaWJ1dGlvbiBhYm91dCBpdCDigJRcbiAgICogdW5saWtlIHRoZSBmdW5jdGlvbnMnIGltYWdlIG9wdGltaXplciBhbmQgYE5leHRqc0FwaWAsIHdoaWNoIHJlYWRcbiAgICogYE5leHRqc1N0YXRpY0Fzc2V0cy5rZXlQcmVmaXhgIOKAlCBzbyBmYWlsIGF0IHN5bnRoIHJhdGhlciB0aGFuIDQwNCBldmVyeVxuICAgKiBzdGF0aWMgcmVxdWVzdC5cbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVTdGF0aWNBc3NldHNLZXlQcmVmaXgoKTogdm9pZCB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5uZXh0anNUeXBlICE9PSBOZXh0anNUeXBlLkdMT0JBTF9GVU5DVElPTlMgJiZcbiAgICAgIHRoaXMubmV4dGpzVHlwZSAhPT0gTmV4dGpzVHlwZS5HTE9CQUxfQ09OVEFJTkVSU1xuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBleHBlY3RlZCA9IHRoaXMucmVzb2x2ZWRCYXNlUGF0aCA/PyBcIlwiO1xuICAgIGNvbnN0IGFjdHVhbCA9IHRoaXMubmV4dGpzU3RhdGljQXNzZXRzLmtleVByZWZpeDtcbiAgICBpZiAoYWN0dWFsICE9PSBleHBlY3RlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgJHtMT0dfUFJFRklYfSBzdGF0aWMgYXNzZXRzIGtleSBwcmVmaXggbWlzbWF0Y2ggZm9yIE5leHRqc1R5cGUuJHt0aGlzLm5leHRqc1R5cGV9OiBgICtcbiAgICAgICAgICBgdGhlIGFzc2V0cyBhcmUgdXBsb2FkZWQgdW5kZXIgJHthY3R1YWwgPyBgXCIke2FjdHVhbH1cImAgOiBcInRoZSBidWNrZXQgcm9vdFwifSBgICtcbiAgICAgICAgICBgYnV0IENsb3VkRnJvbnQgd2lsbCByZXF1ZXN0IHRoZW0gdW5kZXIgJHtleHBlY3RlZCA/IGBcIiR7ZXhwZWN0ZWR9XCJgIDogXCJ0aGUgYnVja2V0IHJvb3RcIn0sIGAgK1xuICAgICAgICAgIFwidXNpbmcgdGhlIHJlcXVlc3QgcGF0aCBhcyB0aGUgUzMgb2JqZWN0IGtleSwgc28gZXZlcnkgYF9uZXh0L3N0YXRpY2AgYW5kIGBwdWJsaWMvYCByZXF1ZXN0IHdvdWxkIDQwNC4gXCIgK1xuICAgICAgICAgIFwiRHJvcCB0aGUgYGRlc3RpbmF0aW9uS2V5UHJlZml4YCBvdmVycmlkZSwgb3Igc2V0IGl0IHRvIHRoZSBzYW1lIHZhbHVlIGFzIGBiYXNlUGF0aGAuIFwiICtcbiAgICAgICAgICBcIlRvIG5hbWVzcGFjZSBhIHNoYXJlZCBidWNrZXQsIHVzZSBgYmFzZVBhdGhgIOKAlCBpdCBwcmVmaXhlcyB0aGUga2V5cyBhbmQgdGhlIFVSTHMgdG9nZXRoZXIuXCIsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcHJlZml4IEFQSSBHYXRld2F5IHdpbGwgc3RyaXAsIHJlYWQgZnJvbSB0aGUgc2FtZSBgcmVzdEFwaVByb3BzYFxuICAgKiBvdmVycmlkZSBgTmV4dGpzQXBpYCBidWlsZHMgaXRzIGBSZXN0QXBpYCBmcm9tLiBPbmx5IG1lYW5pbmdmdWwgZm9yXG4gICAqIGBSRUdJT05BTF9GVU5DVElPTlNgLCBhbmQgcmVhZCBiZWZvcmUgYE5leHRqc0FwaWAgZXhpc3RzIGJlY2F1c2UgdGhlXG4gICAqIHJlc29sdmVkIGBiYXNlUGF0aGAgYWxzbyBkZWNpZGVzIHRoZSBzdGF0aWMgYXNzZXRzJyBTMyBrZXkgcHJlZml4LlxuICAgKlxuICAgKiBBIGRvbWFpbiBhdHRhY2hlZCBsYXRlciB3aXRoIGBhcGkuYWRkRG9tYWluTmFtZSgpYCBpcyBpbnZpc2libGUgaGVyZSwgdGhlXG4gICAqIHNhbWUgbGltaXRhdGlvbiBgTmV4dGpzQXBpLnVybGAgZG9jdW1lbnRzLlxuICAgKi9cbiAgcHJpdmF0ZSBhcGlHYXRld2F5UHJlZml4KCk6IEFwaUdhdGV3YXlQcmVmaXgge1xuICAgIC8vIGBvdmVycmlkZXMubmV4dGpzQXBpYCBpcyB0aGUgb25seSB0eXBlZCB3YXkgdG8gcmVhY2ggdGhlIGBSZXN0QXBpYCdzXG4gICAgLy8gcHJvcHM6IGBuZXh0anNSZWdpb25hbEZ1bmN0aW9ucy5uZXh0anNBcGlQcm9wc2AgaXNcbiAgICAvLyBgT3B0aW9uYWxOZXh0anNBcGlQcm9wc2AsIHdoaWNoIGhhcyBubyBgb3ZlcnJpZGVzYC5cbiAgICBjb25zdCBhcGlPdmVycmlkZXMgPSAoXG4gICAgICB0aGlzLmJhc2VQcm9wcy5vdmVycmlkZXMgYXMgeyBuZXh0anNBcGk/OiBOZXh0anNBcGlPdmVycmlkZXMgfSB8IHVuZGVmaW5lZFxuICAgICk/Lm5leHRqc0FwaTtcbiAgICBjb25zdCByZXN0QXBpUHJvcHMgPSBhcGlPdmVycmlkZXM/LnJlc3RBcGlQcm9wcztcbiAgICBjb25zdCBkb21haW5OYW1lID0gcmVzdEFwaVByb3BzPy5kb21haW5OYW1lO1xuICAgIGNvbnN0IHN0cmlwcGVkUHJlZml4ID0gZG9tYWluTmFtZVxuICAgICAgPyAoZG9tYWluTmFtZS5iYXNlUGF0aCA/PyBcIlwiKVxuICAgICAgOiAocmVzdEFwaVByb3BzPy5kZXBsb3lPcHRpb25zPy5zdGFnZU5hbWUgPz8gXCJwcm9kXCIpO1xuICAgIHJldHVybiB7XG4gICAgICBzdHJpcHBlZFByZWZpeDogVG9rZW4uaXNVbnJlc29sdmVkKHN0cmlwcGVkUHJlZml4KVxuICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICA6IHN0cmlwcGVkUHJlZml4LFxuICAgICAgY3VzdG9tRG9tYWluOiBkb21haW5OYW1lICE9PSB1bmRlZmluZWQsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kcyBjb25zdHJ1Y3Qgb3ZlcnJpZGVzIChpZiBwcmVzZW50KSBvbiBwcm9wcyBmb3IgYW55IGBOZXh0anNUeXBlYFxuICAgKi9cbiAgcHJpdmF0ZSBnZXRDb25zdHJ1Y3RPdmVycmlkZXMobmV4dGpzVHlwZTogTmV4dGpzVHlwZSkge1xuICAgIGNvbnN0IG5leHRqc1R5cGVUb0tleTogUmVjb3JkPE5leHRqc1R5cGUsIHN0cmluZz4gPSB7XG4gICAgICBbTmV4dGpzVHlwZS5HTE9CQUxfQ09OVEFJTkVSU106IFwibmV4dGpzR2xvYmFsQ29udGFpbmVyc1wiLFxuICAgICAgW05leHRqc1R5cGUuR0xPQkFMX0ZVTkNUSU9OU106IFwibmV4dGpzR2xvYmFsRnVuY3Rpb25zXCIsXG4gICAgICBbTmV4dGpzVHlwZS5SRUdJT05BTF9DT05UQUlORVJTXTogXCJuZXh0anNSZWdpb25hbENvbnRhaW5lcnNcIixcbiAgICAgIFtOZXh0anNUeXBlLlJFR0lPTkFMX0ZVTkNUSU9OU106IFwibmV4dGpzUmVnaW9uYWxGdW5jdGlvbnNcIixcbiAgICB9O1xuICAgIGNvbnN0IGtleSA9IG5leHRqc1R5cGVUb0tleVtuZXh0anNUeXBlXTtcbiAgICBjb25zdCBvdmVycmlkZXMgPSB0aGlzLmJhc2VQcm9wcy5vdmVycmlkZXMgYXNcbiAgICAgIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICAgIGlmIChvdmVycmlkZXMgJiYga2V5IGluIG92ZXJyaWRlcykge1xuICAgICAgcmV0dXJuIG92ZXJyaWRlc1trZXldIGFzIE5leHRqc0Jhc2VDb25zdHJ1Y3RPdmVycmlkZXM7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBgb3ZlcnJpZGVzLm5leHRqc0Z1bmN0aW9uc2AsIHdoaWNoIG9ubHkgdGhlIHR3byBGdW5jdGlvbnMgcm9vdCBjb25zdHJ1Y3RzXG4gICAqIGRlY2xhcmUuIENhc3QgZm9yIHRoZSBzYW1lIHJlYXNvbiBhcyB7QGxpbmsgZnVuY3Rpb25Hcm91cHN9LlxuICAgKi9cbiAgcHJpdmF0ZSBnZXQgZnVuY3Rpb25zT3ZlcnJpZGVzKCk6IE5leHRqc0Z1bmN0aW9uc092ZXJyaWRlcyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgb3ZlcnJpZGVzID0gdGhpcy5iYXNlUHJvcHMub3ZlcnJpZGVzIGFzXG4gICAgICB7IG5leHRqc0Z1bmN0aW9ucz86IE5leHRqc0Z1bmN0aW9uc092ZXJyaWRlcyB9IHwgdW5kZWZpbmVkO1xuICAgIHJldHVybiBvdmVycmlkZXM/Lm5leHRqc0Z1bmN0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBgZnVuY3Rpb25Hcm91cHNgLCB3aGljaCBvbmx5IHRoZSB0d28gRnVuY3Rpb25zIHJvb3QgY29uc3RydWN0cyBhY2NlcHQg4oCUXG4gICAqIENvbnRhaW5lcnMgZGVwbG95IG9uZSB0YXNrIGRlZmluaXRpb24gYW5kIGhhdmUgbm8gMjUwIE1CIHBhY2thZ2UgbGltaXQgdG9cbiAgICogc3BsaXQgYXJvdW5kLlxuICAgKlxuICAgKiBSZWFkIG9mZiBgYmFzZVByb3BzYCB3aXRoIGEgY2FzdCBmb3IgdGhlIHNhbWUgcmVhc29uIGFzXG4gICAqIHtAbGluayBnZXRDb25zdHJ1Y3RPdmVycmlkZXN9OiBgY3JlYXRlTmV4dGpzQnVpbGRgIGFuZFxuICAgKiBgY3JlYXRlTmV4dGpzRnVuY3Rpb25zYCBhcmUgc2hhcmVkIGhlcmUsIGJ1dCB0aGUgcHJvcCBpcyBkZWNsYXJlZCBvbiB0aGVcbiAgICogc3ViY2xhc3Nlcywgc28gbm90aGluZyB3ZWFrZXIgdGhhbiBhIGNhc3QgY2FuIHNlZSBpdC4gQWRkaW5nIGl0IHRvXG4gICAqIGBOZXh0anNCYXNlUHJvcHNgIHdvdWxkIG9mZmVyIGl0IHRvIENvbnRhaW5lcnMsIHdoZXJlIGl0IGRvZXMgbm90aGluZy5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgZnVuY3Rpb25Hcm91cHMoKTogTmV4dGpzRnVuY3Rpb25Hcm91cFtdIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBwcm9wcyA9IHRoaXMuYmFzZVByb3BzIGFzIHsgZnVuY3Rpb25Hcm91cHM/OiBOZXh0anNGdW5jdGlvbkdyb3VwW10gfTtcbiAgICByZXR1cm4gcHJvcHMuZnVuY3Rpb25Hcm91cHM7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGhlYWx0aCBjaGVjayBwYXRoIGFzIHRoZSBydW5uaW5nIGFwcCBhY3R1YWxseSBzZXJ2ZXMgaXQuXG4gICAqXG4gICAqIEJvdGggY29uc3VtZXJzIG9mIHRoaXMgaGl0IHRoZSBhcHAgZGlyZWN0bHkg4oCUIHRoZSBBTEIgdGFyZ2V0IGdyb3VwIGZvcndhcmRzXG4gICAqIHRoZSBwYXRoIHRvIHRoZSBjb250YWluZXIgdW5jaGFuZ2VkLCBhbmQgdGhlIGNvbnRhaW5lcidzIGB3Z2V0YCBwcm9iZSB0YXJnZXRzXG4gICAqIHRoZSBsb2NhbCBzZXJ2ZXIg4oCUIHNvIHRoZSBwcmVmaXggdGhhdCBtYXR0ZXJzIGlzIHRoZSBhcHAncyBvd24gYGJhc2VQYXRoYCxcbiAgICogbm90IGByZXNvbHZlZEJhc2VQYXRoYCAod2hpY2ggZm9yIGBSRUdJT05BTF9DT05UQUlORVJTYCBpcyBvbmx5IGFuIFMzXG4gICAqIG5hbWVzcGFjZSkuIExlZnQgdW5wcmVmaXhlZCwgYW4gYXBwIHdpdGggYSBgYmFzZVBhdGhgIDQwNHMgZXZlcnkgaGVhbHRoXG4gICAqIGNoZWNrLCBzbyB0aGUgdGFyZ2V0IG5ldmVyIHR1cm5zIGhlYWx0aHkgYW5kIHRoZSBkZXBsb3ltZW50IHJvbGxzIGJhY2suXG4gICAqIGBoZWFsdGhDaGVja1BhdGhgIGlzIHRoZXJlZm9yZSB0aGUgcGF0aCBhcyB0aGUgYXBwIHJvdXRlcyBpdCwgd2l0aG91dFxuICAgKiBgYmFzZVBhdGhgOyBvbmUgdGhhdCBjYXJyaWVzIHRoZSBwcmVmaXggYWxyZWFkeSBnZXRzIGl0IHR3aWNlLCB3aGljaCBpcyB0aGVcbiAgICogMC42LjIgYnJlYWtpbmcgY2hhbmdlIGZvciBhbnlvbmUgd2hvIHByZWZpeGVkIGJ5IGhhbmQgdG8gd29yayBhcm91bmQgdGhpcy5cbiAgICpcbiAgICogVGFrZXMgdGhlIHBhdGggYXMgYW4gYXJndW1lbnQgcmF0aGVyIHRoYW4gcmVhZGluZyBpdCBvZmYgYGJhc2VQcm9wc2A6IG9ubHlcbiAgICogdGhlIHR3byBDb250YWluZXJzIHJvb3QgY29uc3RydWN0cyBkZWNsYXJlIGBoZWFsdGhDaGVja1BhdGhgLCBzaW5jZSB0aGV5J3JlXG4gICAqIHRoZSBvbmx5IG9uZXMgd2l0aCBzb21ldGhpbmcgdG8gaGVhbHRoLWNoZWNrLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlc29sdmVkSGVhbHRoQ2hlY2tQYXRoKGhlYWx0aENoZWNrUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcHJlZml4V2l0aEJhc2VQYXRoKFxuICAgICAgdGhpcy5uZXh0anNCdWlsZC5uZXh0Q29uZmlnQmFzZVBhdGgsXG4gICAgICBoZWFsdGhDaGVja1BhdGgsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY29tcHV0ZSBiYXNlIHByb3BzIGZvciBib3RoIExhbWJkYSBmdW5jdGlvbnMgYW5kIGNvbnRhaW5lcnNcbiAgICovXG4gIHByb3RlY3RlZCBjb21wdXRlQmFzZVByb3BzKCk6IE5leHRqc0NvbXB1dGVCYXNlUHJvcHMge1xuICAgIHJldHVybiB7XG4gICAgICBjYWNoZUJ1Y2tldDogdGhpcy5uZXh0anNDYWNoZS5jYWNoZUJ1Y2tldCxcbiAgICAgIHJldmFsaWRhdGlvblRhYmxlOiB0aGlzLm5leHRqc0NhY2hlLnJldmFsaWRhdGlvblRhYmxlLFxuICAgICAgYnVpbGRJZDogdGhpcy5uZXh0anNCdWlsZC5idWlsZElkLFxuICAgICAgbmV4dGpzVHlwZTogdGhpcy5uZXh0anNUeXBlLFxuICAgICAgc3RhdGljQXNzZXRzQnVja2V0OiB0aGlzLm5leHRqc1N0YXRpY0Fzc2V0cy5idWNrZXQsXG4gICAgICBzdGF0aWNBc3NldHNLZXlQcmVmaXg6IHRoaXMubmV4dGpzU3RhdGljQXNzZXRzLmtleVByZWZpeCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgYWZ0ZXIgdGhlIGluaXQgY2FjaGUgYW5kIHN0YXRpYyBhc3NldCB1cGxvYWRzOiBpbnZhbGlkYXRpbmcgdGhlIENETlxuICAgKiBiZWZvcmUgdGhlIG5ldyBmaWxlcyBhcmUgaW4gcGxhY2Ugd291bGQgb25seSByZS1jYWNoZSB0aGUgcmVzcG9uc2VzIHRoZVxuICAgKiBpbnZhbGlkYXRpb24gd2FzIG1lYW50IHRvIGRyb3AsIGFuZCBwcnVuaW5nIGJlZm9yZSB0aGVtIGNvdWxkIGRlbGV0ZSBhblxuICAgKiBvYmplY3QgdGhlIHVwbG9hZCBpcyBhYm91dCB0byByZS10YWcgd2l0aCB0aGlzIGJ1aWxkJ3MgSUQuIENsb3VkRm9ybWF0aW9uXG4gICAqIGluZmVycyBubyBvcmRlcmluZyBiZXR3ZWVuIHRoZXNlIGN1c3RvbSByZXNvdXJjZXMgb24gaXRzIG93bi5cbiAgICovXG4gIHByb3RlY3RlZCBjcmVhdGVOZXh0anNQb3N0RGVwbG95KFxuICAgIGRpc3RyaWJ1dGlvbj86IElEaXN0cmlidXRpb24sXG4gICk6IE5leHRqc1Bvc3REZXBsb3kge1xuICAgIGNvbnN0IHBvc3REZXBsb3kgPSBuZXcgTmV4dGpzUG9zdERlcGxveSh0aGlzLCBcIk5leHRqc1Bvc3REZXBsb3lcIiwge1xuICAgICAgYmFzZVBhdGg6IHRoaXMucmVzb2x2ZWRCYXNlUGF0aCxcbiAgICAgIGJ1aWxkSWQ6IHRoaXMubmV4dGpzQnVpbGQuYnVpbGRJZCxcbiAgICAgIGRpc3RyaWJ1dGlvbixcbiAgICAgIGNhY2hlQnVja2V0OiB0aGlzLm5leHRqc0NhY2hlLmNhY2hlQnVja2V0LFxuICAgICAgcmV2YWxpZGF0aW9uVGFibGU6IHRoaXMubmV4dGpzQ2FjaGUucmV2YWxpZGF0aW9uVGFibGUsXG4gICAgICBzdGF0aWNBc3NldHNCdWNrZXQ6IHRoaXMubmV4dGpzU3RhdGljQXNzZXRzLmJ1Y2tldCxcbiAgICAgIHN0YXRpY0Fzc2V0c0tleVByZWZpeDogdGhpcy5uZXh0anNTdGF0aWNBc3NldHMua2V5UHJlZml4LFxuICAgICAgb3ZlcnJpZGVzOiB0aGlzLmJhc2VQcm9wcy5vdmVycmlkZXM/Lm5leHRqc1Bvc3REZXBsb3ksXG4gICAgICAuLi50aGlzLmNvbnN0cnVjdE92ZXJyaWRlcz8ubmV4dGpzUG9zdERlcGxveVByb3BzLFxuICAgIH0pO1xuICAgIGNvbnN0IHsgc3RhdGljRGVwbG95bWVudCwgc2VydmljZVdvcmtlckRlcGxveW1lbnQsIHB1YmxpY0RlcGxveW1lbnQgfSA9XG4gICAgICB0aGlzLm5leHRqc1N0YXRpY0Fzc2V0cztcbiAgICBmb3IgKGNvbnN0IHVwbG9hZCBvZiBbXG4gICAgICB0aGlzLm5leHRqc0NhY2hlLmJ1Y2tldERlcGxveW1lbnQsXG4gICAgICBzdGF0aWNEZXBsb3ltZW50LFxuICAgICAgc2VydmljZVdvcmtlckRlcGxveW1lbnQsXG4gICAgICBwdWJsaWNEZXBsb3ltZW50LFxuICAgIF0pIHtcbiAgICAgIGlmICh1cGxvYWQpIHtcbiAgICAgICAgcG9zdERlcGxveS5ub2RlLmFkZERlcGVuZGVuY3kodXBsb2FkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHBvc3REZXBsb3k7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZU5leHRqc0J1aWxkKCk6IE5leHRqc0J1aWxkIHtcbiAgICByZXR1cm4gbmV3IE5leHRqc0J1aWxkKHRoaXMsIFwiTmV4dGpzQnVpbGRcIiwge1xuICAgICAgYnVpbGRDb21tYW5kOiB0aGlzLmJhc2VQcm9wcy5idWlsZENvbW1hbmQsXG4gICAgICBidWlsZERpcmVjdG9yeTogdGhpcy5iYXNlUHJvcHMuYnVpbGREaXJlY3RvcnksXG4gICAgICBuZXh0anNUeXBlOiB0aGlzLm5leHRqc1R5cGUsXG4gICAgICBza2lwQnVpbGQ6IHRoaXMuYmFzZVByb3BzLnNraXBCdWlsZCxcbiAgICAgIC8vIFRoZSBidWlsZCByZXNvbHZlcyB0aGUgc3BsaXQsIHNpbmNlIG9ubHkgaXQga25vd3MgdGhlIHJvdXRlIHRlbXBsYXRlcztcbiAgICAgIC8vIHRoZSBjb25zdHJ1Y3RzIHJlYWQgdGhlIHJlc3VsdCBiYWNrIG9mZiB0aGUgbWFuaWZlc3QuXG4gICAgICBmdW5jdGlvbkdyb3VwczogdGhpcy5mdW5jdGlvbkdyb3Vwcz8ubWFwKCh7IG5hbWUsIHJvdXRlcyB9KSA9PiAoe1xuICAgICAgICBuYW1lLFxuICAgICAgICByb3V0ZXMsXG4gICAgICB9KSksXG4gICAgICAvLyBXaGF0IHRoZSBMYW1iZGFzIHdpbGwgcnVuIGRlY2lkZXMgdGhlIGBzaGFycGAgYmluYXJpZXMgc3RhZ2VkIGZvciB0aGVtLlxuICAgICAgYXJjaGl0ZWN0dXJlOiB0aGlzLmZ1bmN0aW9uc092ZXJyaWRlcz8uZnVuY3Rpb25Qcm9wcz8uYXJjaGl0ZWN0dXJlLFxuICAgICAgLi4udGhpcy5jb25zdHJ1Y3RPdmVycmlkZXM/Lm5leHRqc0J1aWxkUHJvcHMsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZU5leHRqc0NhY2hlKCk6IE5leHRqc0NhY2hlIHtcbiAgICByZXR1cm4gbmV3IE5leHRqc0NhY2hlKHRoaXMsIFwiTmV4dGpzQ2FjaGVcIiwge1xuICAgICAgYnVpbGRJZDogdGhpcy5uZXh0anNCdWlsZC5idWlsZElkLFxuICAgICAgY2FjaGVCdWNrZXQ6IHRoaXMuYmFzZVByb3BzLmNhY2hlQnVja2V0LFxuICAgICAgaW5pdENhY2hlRGlyOiB0aGlzLm5leHRqc0J1aWxkLmluaXRDYWNoZURpcixcbiAgICAgIG92ZXJyaWRlczogdGhpcy5iYXNlUHJvcHMub3ZlcnJpZGVzPy5uZXh0anNDYWNoZSxcbiAgICAgIHJldmFsaWRhdGlvblRhYmxlOiB0aGlzLmJhc2VQcm9wcy5yZXZhbGlkYXRpb25UYWJsZSxcbiAgICAgIC4uLnRoaXMuY29uc3RydWN0T3ZlcnJpZGVzPy5uZXh0anNDYWNoZVByb3BzLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVOZXh0anNTdGF0aWNBc3NldHMoKTogTmV4dGpzU3RhdGljQXNzZXRzIHtcbiAgICByZXR1cm4gbmV3IE5leHRqc1N0YXRpY0Fzc2V0cyh0aGlzLCBcIk5leHRqc1N0YXRpY0Fzc2V0c1wiLCB7XG4gICAgICBidWNrZXQ6IHRoaXMuYmFzZVByb3BzLnN0YXRpY0Fzc2V0c0J1Y2tldCxcbiAgICAgIGJ1aWxkRGlyZWN0b3J5OiB0aGlzLmJhc2VQcm9wcy5idWlsZERpcmVjdG9yeSxcbiAgICAgIGJ1aWxkSWQ6IHRoaXMubmV4dGpzQnVpbGQuYnVpbGRJZCxcbiAgICAgIGJhc2VQYXRoOiB0aGlzLnJlc29sdmVkQmFzZVBhdGgsXG4gICAgICBvdmVycmlkZXM6IHRoaXMuYmFzZVByb3BzLm92ZXJyaWRlcz8ubmV4dGpzU3RhdGljQXNzZXRzLFxuICAgICAgLi4udGhpcy5jb25zdHJ1Y3RPdmVycmlkZXM/Lm5leHRqc1N0YXRpY0Fzc2V0c1Byb3BzLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNoYXJlZCBieSBgTmV4dGpzR2xvYmFsRnVuY3Rpb25zYCBhbmQgYE5leHRqc1JlZ2lvbmFsRnVuY3Rpb25zYC5cbiAgICovXG4gIHByb3RlY3RlZCBjcmVhdGVOZXh0anNGdW5jdGlvbnMoKTogTmV4dGpzRnVuY3Rpb25zIHtcbiAgICAvLyBUaGUgZ2V0dGVyLCBub3QgYSBwYXJhbWV0ZXIsIHNvIHRoZSBidWlsZCBhbmQgdGhlIGZ1bmN0aW9ucyByZWFkIHRoZVxuICAgIC8vIHNhbWUgYGFyY2hpdGVjdHVyZWAuXG4gICAgY29uc3Qgb3ZlcnJpZGVzID0gdGhpcy5mdW5jdGlvbnNPdmVycmlkZXM7XG4gICAgcmV0dXJuIG5ldyBOZXh0anNGdW5jdGlvbnModGhpcywgXCJOZXh0anNGdW5jdGlvbnNcIiwge1xuICAgICAgLi4udGhpcy5jb21wdXRlQmFzZVByb3BzKCksXG4gICAgICBkZXBsb3ltZW50Um9vdHM6IHRoaXMubmV4dGpzQnVpbGQuZGVwbG95bWVudFJvb3RzLFxuICAgICAgYXJjaGl0ZWN0dXJlOiB0aGlzLm5leHRqc0J1aWxkLmFyY2hpdGVjdHVyZSxcbiAgICAgIGZ1bmN0aW9uR3JvdXBzOiB0aGlzLmZ1bmN0aW9uR3JvdXBzLFxuICAgICAgb3ZlcnJpZGVzOiB7XG4gICAgICAgIC4uLm92ZXJyaWRlcyxcbiAgICAgICAgZnVuY3Rpb25Qcm9wczoge1xuICAgICAgICAgIC4uLm92ZXJyaWRlcz8uZnVuY3Rpb25Qcm9wcyxcbiAgICAgICAgICAvLyBTcHJlYWQgY29uZGl0aW9uYWxseSByYXRoZXIgdGhhbiBhc3NpZ25lZDogYW4gdW5jb25kaXRpb25hbFxuICAgICAgICAgIC8vIGB2cGM6IHRoaXMuYmFzZVByb3BzLnZwY2Agd3JpdGVzIGB1bmRlZmluZWRgIG92ZXIgYW5cbiAgICAgICAgICAvLyBgb3ZlcnJpZGVzLm5leHRqc0Z1bmN0aW9ucy5mdW5jdGlvblByb3BzLnZwY2AgdGhlIGNvbnN1bWVyIHN1cHBsaWVkLFxuICAgICAgICAgIC8vIHNvIHRoZSBMYW1iZGFzIGRlcGxveSBvdXRzaWRlIHRoZSBWUEMgYW5kIGNhbm5vdCByZWFjaCBhIHByaXZhdGVcbiAgICAgICAgICAvLyBSRFMsIEVsYXN0aUNhY2hlLCBvciBWUEMgZW5kcG9pbnQgLSB3aXRoIG5vdGhpbmcgc2FpZCBhdCBzeW50aC5cbiAgICAgICAgICAuLi4odGhpcy5iYXNlUHJvcHMudnBjID8geyB2cGM6IHRoaXMuYmFzZVByb3BzLnZwYyB9IDoge30pLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -14,7 +14,7 @@ const base_path_1 = require("../utils/base-path");
14
14
  * for containers.
15
15
  */
16
16
  class NextjsGlobalContainers extends nextjs_base_construct_1.NextjsBaseConstruct {
17
- static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsGlobalContainers", version: "0.7.10" };
17
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsGlobalContainers", version: "0.7.12" };
18
18
  nextjsContainers;
19
19
  nextjsDistribution;
20
20
  nextjsPostDeploy;
@@ -17,7 +17,7 @@ const base_path_1 = require("../utils/base-path");
17
17
  * for functions.
18
18
  */
19
19
  class NextjsGlobalFunctions extends nextjs_base_construct_1.NextjsBaseConstruct {
20
- static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsGlobalFunctions", version: "0.7.10" };
20
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsGlobalFunctions", version: "0.7.12" };
21
21
  nextjsFunctions;
22
22
  nextjsDistribution;
23
23
  nextjsPostDeploy;
@@ -13,7 +13,7 @@ const base_path_1 = require("../utils/base-path");
13
13
  * for containers.
14
14
  */
15
15
  class NextjsRegionalContainers extends nextjs_base_construct_1.NextjsBaseConstruct {
16
- static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsRegionalContainers", version: "0.7.10" };
16
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsRegionalContainers", version: "0.7.12" };
17
17
  nextjsContainers;
18
18
  nextjsPostDeploy;
19
19
  /**
@@ -11,7 +11,7 @@ const nextjs_base_construct_1 = require("./nextjs-base-construct");
11
11
  * for routing requests and AWS Lambda Functions for server-side rendering.
12
12
  */
13
13
  class NextjsRegionalFunctions extends nextjs_base_construct_1.NextjsBaseConstruct {
14
- static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsRegionalFunctions", version: "0.7.10" };
14
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsRegionalFunctions", version: "0.7.12" };
15
15
  nextjsFunctions;
16
16
  nextjsApi;
17
17
  nextjsPostDeploy;