cdk-nextjs 0.6.2 → 0.7.1

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 (263) hide show
  1. package/.jsii +2404 -2723
  2. package/.jsii.tabl.json +1 -1
  3. package/API.md +1681 -1930
  4. package/CLAUDE.md +2 -1
  5. package/README.md +429 -130
  6. package/assets/lambdas/post-deploy/post-deploy.lambda/index.js +148 -169
  7. package/assets/lambdas/redeploy-stage/redeploy-stage.lambda/index.js +875 -0
  8. package/docs/adapter-runtime.md +185 -0
  9. package/docs/breaking-changes.md +667 -4
  10. package/docs/caching-guide.md +156 -112
  11. package/docs/cdk-nextjs-cfn-exec-policy.json +2 -1
  12. package/docs/development-guide.md +1 -1
  13. package/docs/harness-coverage.md +598 -0
  14. package/docs/init-cache-deployment.md +32 -1
  15. package/docs/next-build-output-guide.md +30 -20
  16. package/examples/README.md +5 -1
  17. package/lib/adapter/__fixtures__/app-playground-base-path.json +4926 -0
  18. package/lib/adapter/__fixtures__/app-playground.json +4917 -0
  19. package/lib/adapter/__fixtures__/pages-i18n.json +1728 -0
  20. package/lib/adapter/adapter.mjs +1551 -185
  21. package/lib/adapter/adapter.test.js +106 -0
  22. package/lib/adapter/aws-cache-store.d.ts +489 -0
  23. package/lib/adapter/aws-cache-store.js +1004 -0
  24. package/lib/adapter/aws-cache-store.test.d.ts +1 -0
  25. package/lib/adapter/aws-cache-store.test.js +361 -0
  26. package/lib/adapter/build-outputs.d.ts +80 -0
  27. package/lib/adapter/build-outputs.js +857 -0
  28. package/lib/adapter/build-outputs.test.d.ts +1 -0
  29. package/lib/adapter/build-outputs.test.js +863 -0
  30. package/lib/adapter/cache-handler.d.ts +9 -2
  31. package/lib/adapter/cache-handler.js +72 -96
  32. package/lib/adapter/cache-handler.mjs +18956 -17774
  33. package/lib/adapter/cache-handler.test.js +263 -31
  34. package/lib/adapter/cache-kinds.d.ts +32 -0
  35. package/lib/adapter/cache-kinds.js +35 -0
  36. package/lib/adapter/cache-kinds.test.d.ts +1 -0
  37. package/lib/adapter/cache-kinds.test.js +69 -0
  38. package/lib/adapter/cache-utils.d.ts +90 -0
  39. package/lib/adapter/cache-utils.js +199 -4
  40. package/lib/adapter/cache-utils.test.d.ts +1 -0
  41. package/lib/adapter/cache-utils.test.js +179 -0
  42. package/lib/adapter/function-groups.d.ts +215 -0
  43. package/lib/adapter/function-groups.js +1099 -0
  44. package/lib/adapter/function-groups.test.d.ts +1 -0
  45. package/lib/adapter/function-groups.test.js +743 -0
  46. package/lib/adapter/init-cache.d.ts +6 -0
  47. package/lib/adapter/init-cache.js +245 -0
  48. package/lib/adapter/init-cache.test.d.ts +1 -0
  49. package/lib/adapter/init-cache.test.js +137 -0
  50. package/lib/adapter/local-file-cache-handler.d.ts +23 -0
  51. package/lib/adapter/local-file-cache-handler.js +52 -1
  52. package/lib/adapter/memory-cache-handler.d.ts +26 -17
  53. package/lib/adapter/memory-cache-handler.js +32 -50
  54. package/lib/adapter/memory-cache-handler.test.js +105 -85
  55. package/lib/adapter/s3-cache-handler.d.ts +179 -40
  56. package/lib/adapter/s3-cache-handler.js +807 -277
  57. package/lib/adapter/s3-cache-handler.test.js +1186 -31
  58. package/lib/adapter/use-cache-common.d.ts +90 -0
  59. package/lib/adapter/use-cache-common.js +250 -0
  60. package/lib/adapter/use-cache-common.test.d.ts +1 -0
  61. package/lib/adapter/use-cache-common.test.js +646 -0
  62. package/lib/adapter/use-cache-default-handler.d.ts +24 -0
  63. package/lib/adapter/use-cache-default-handler.js +90 -0
  64. package/lib/adapter/use-cache-default-handler.mjs +38645 -0
  65. package/lib/adapter/use-cache-handlers.test.d.ts +1 -0
  66. package/lib/adapter/use-cache-handlers.test.js +349 -0
  67. package/lib/adapter/use-cache-remote-handler.d.ts +26 -0
  68. package/lib/adapter/use-cache-remote-handler.js +186 -0
  69. package/lib/{image-optimization/handler.mjs → adapter/use-cache-remote-handler.mjs} +33572 -38798
  70. package/lib/generated-structs/OptionalNextjsApiProps.d.ts +59 -0
  71. package/lib/generated-structs/OptionalNextjsApiProps.js +3 -0
  72. package/lib/generated-structs/OptionalNextjsCacheProps.d.ts +15 -6
  73. package/lib/generated-structs/OptionalNextjsCacheProps.js +1 -1
  74. package/lib/generated-structs/OptionalNextjsContainersProps.d.ts +25 -11
  75. package/lib/generated-structs/OptionalNextjsContainersProps.js +1 -1
  76. package/lib/generated-structs/OptionalNextjsDistributionProps.d.ts +31 -9
  77. package/lib/generated-structs/OptionalNextjsDistributionProps.js +1 -1
  78. package/lib/generated-structs/OptionalNextjsPostDeployProps.d.ts +8 -0
  79. package/lib/generated-structs/OptionalNextjsPostDeployProps.js +1 -1
  80. package/lib/generated-structs/OptionalPostDeployCustomResourceProperties.d.ts +6 -4
  81. package/lib/generated-structs/OptionalPostDeployCustomResourceProperties.js +1 -1
  82. package/lib/index.d.ts +6 -7
  83. package/lib/index.js +2 -4
  84. package/lib/lambdas/post-deploy/prune-cache-bucket.d.ts +7 -3
  85. package/lib/lambdas/post-deploy/prune-cache-bucket.js +57 -71
  86. package/lib/lambdas/post-deploy/prune-cache-bucket.test.d.ts +1 -0
  87. package/lib/lambdas/post-deploy/prune-cache-bucket.test.js +114 -0
  88. package/lib/lambdas/post-deploy/prune-revalidation-table.d.ts +1 -0
  89. package/lib/lambdas/post-deploy/prune-revalidation-table.js +23 -31
  90. package/lib/lambdas/post-deploy/prune-revalidation-table.test.d.ts +1 -0
  91. package/lib/lambdas/post-deploy/prune-revalidation-table.test.js +71 -0
  92. package/lib/lambdas/post-deploy/prune-s3.d.ts +14 -5
  93. package/lib/lambdas/post-deploy/prune-s3.js +41 -12
  94. package/lib/lambdas/post-deploy/prune-s3.test.js +97 -18
  95. package/lib/lambdas/redeploy-stage/redeploy-stage-function.d.ts +13 -0
  96. package/lib/lambdas/redeploy-stage/redeploy-stage-function.js +55 -0
  97. package/lib/lambdas/redeploy-stage/redeploy-stage.d.ts +24 -0
  98. package/lib/lambdas/redeploy-stage/redeploy-stage.js +68 -0
  99. package/lib/lambdas/redeploy-stage/redeploy-stage.lambda.d.ts +20 -0
  100. package/lib/lambdas/redeploy-stage/redeploy-stage.lambda.js +24 -0
  101. package/lib/lambdas/redeploy-stage/redeploy-stage.test.d.ts +1 -0
  102. package/lib/lambdas/redeploy-stage/redeploy-stage.test.js +93 -0
  103. package/lib/nextjs-api.d.ts +102 -18
  104. package/lib/nextjs-api.js +338 -38
  105. package/lib/nextjs-api.test.js +537 -1
  106. package/lib/nextjs-build/global-containers.Dockerfile +15 -10
  107. package/lib/nextjs-build/nextjs-build.d.ts +339 -63
  108. package/lib/nextjs-build/nextjs-build.js +684 -327
  109. package/lib/nextjs-build/nextjs-build.test.d.ts +1 -0
  110. package/lib/nextjs-build/nextjs-build.test.js +412 -0
  111. package/lib/nextjs-build/patch-fetch.js +1 -1
  112. package/lib/nextjs-build/patch-fetch.test.js +166 -11
  113. package/lib/nextjs-build/regional-containers.Dockerfile +17 -10
  114. package/lib/nextjs-cache.d.ts +82 -4
  115. package/lib/nextjs-cache.js +186 -10
  116. package/lib/nextjs-cache.test.js +176 -1
  117. package/lib/nextjs-compute/nextjs-compute-base-props.d.ts +21 -8
  118. package/lib/nextjs-compute/nextjs-compute-base-props.js +41 -1
  119. package/lib/nextjs-compute/nextjs-compute-base-props.test.d.ts +1 -0
  120. package/lib/nextjs-compute/nextjs-compute-base-props.test.js +44 -0
  121. package/lib/nextjs-compute/nextjs-containers.d.ts +19 -0
  122. package/lib/nextjs-compute/nextjs-containers.js +57 -20
  123. package/lib/nextjs-compute/nextjs-functions.d.ts +122 -7
  124. package/lib/nextjs-compute/nextjs-functions.js +113 -67
  125. package/lib/nextjs-compute/nextjs-functions.test.d.ts +1 -0
  126. package/lib/nextjs-compute/nextjs-functions.test.js +99 -0
  127. package/lib/nextjs-distribution.d.ts +194 -23
  128. package/lib/nextjs-distribution.js +535 -62
  129. package/lib/nextjs-distribution.test.d.ts +1 -0
  130. package/lib/nextjs-distribution.test.js +697 -0
  131. package/lib/nextjs-post-deploy.d.ts +13 -5
  132. package/lib/nextjs-post-deploy.js +13 -10
  133. package/lib/nextjs-post-deploy.test.d.ts +1 -0
  134. package/lib/nextjs-post-deploy.test.js +34 -0
  135. package/lib/nextjs-static-assets.d.ts +17 -4
  136. package/lib/nextjs-static-assets.js +22 -5
  137. package/lib/root-constructs/nextjs-base-construct.d.ts +102 -58
  138. package/lib/root-constructs/nextjs-base-construct.js +139 -47
  139. package/lib/root-constructs/nextjs-global-containers.d.ts +18 -20
  140. package/lib/root-constructs/nextjs-global-containers.js +20 -71
  141. package/lib/root-constructs/nextjs-global-functions.d.ts +26 -28
  142. package/lib/root-constructs/nextjs-global-functions.js +52 -70
  143. package/lib/root-constructs/nextjs-regional-containers.d.ts +18 -5
  144. package/lib/root-constructs/nextjs-regional-containers.js +8 -15
  145. package/lib/root-constructs/nextjs-regional-functions.d.ts +22 -18
  146. package/lib/root-constructs/nextjs-regional-functions.js +8 -26
  147. package/lib/runtime/api-gateway-path.d.ts +34 -0
  148. package/lib/runtime/api-gateway-path.js +71 -0
  149. package/lib/runtime/api-gateway-path.test.d.ts +1 -0
  150. package/lib/runtime/api-gateway-path.test.js +65 -0
  151. package/lib/runtime/case-redirect.d.ts +22 -0
  152. package/lib/runtime/case-redirect.js +63 -0
  153. package/lib/runtime/case-redirect.test.d.ts +1 -0
  154. package/lib/runtime/case-redirect.test.js +32 -0
  155. package/lib/runtime/core.d.ts +234 -0
  156. package/lib/runtime/core.js +1216 -0
  157. package/lib/runtime/core.test.d.ts +1 -0
  158. package/lib/runtime/core.test.js +1686 -0
  159. package/lib/runtime/deployment-root.d.ts +13 -0
  160. package/lib/runtime/deployment-root.js +29 -0
  161. package/lib/runtime/dispatch.d.ts +331 -0
  162. package/lib/runtime/dispatch.js +751 -0
  163. package/lib/runtime/dispatch.test.d.ts +1 -0
  164. package/lib/runtime/dispatch.test.js +853 -0
  165. package/lib/runtime/entrypoints.d.ts +57 -0
  166. package/lib/runtime/entrypoints.js +115 -0
  167. package/lib/runtime/http/abort-signal.d.ts +6 -0
  168. package/lib/runtime/http/abort-signal.js +19 -0
  169. package/lib/runtime/http/abort-signal.test.d.ts +1 -0
  170. package/lib/runtime/http/abort-signal.test.js +49 -0
  171. package/lib/runtime/http/node-server.d.ts +38 -0
  172. package/lib/runtime/http/node-server.js +99 -0
  173. package/lib/runtime/http/node-server.test.d.ts +1 -0
  174. package/lib/runtime/http/node-server.test.js +96 -0
  175. package/lib/runtime/http/node-sink.d.ts +16 -0
  176. package/lib/runtime/http/node-sink.js +48 -0
  177. package/lib/runtime/http/node-sink.test.d.ts +1 -0
  178. package/lib/runtime/http/node-sink.test.js +66 -0
  179. package/lib/runtime/http/request.d.ts +62 -0
  180. package/lib/runtime/http/request.js +134 -0
  181. package/lib/runtime/http/request.test.d.ts +1 -0
  182. package/lib/runtime/http/request.test.js +103 -0
  183. package/lib/runtime/http/response.d.ts +77 -0
  184. package/lib/runtime/http/response.js +229 -0
  185. package/lib/runtime/http/response.test.d.ts +1 -0
  186. package/lib/runtime/http/response.test.js +178 -0
  187. package/lib/runtime/http/sink.d.ts +73 -0
  188. package/lib/runtime/http/sink.js +188 -0
  189. package/lib/runtime/http/sink.test.d.ts +1 -0
  190. package/lib/runtime/http/sink.test.js +257 -0
  191. package/lib/runtime/image-utils.d.ts +78 -0
  192. package/lib/runtime/image-utils.js +129 -0
  193. package/lib/runtime/image-utils.test.d.ts +1 -0
  194. package/lib/runtime/image-utils.test.js +237 -0
  195. package/lib/runtime/image.d.ts +76 -0
  196. package/lib/runtime/image.js +296 -0
  197. package/lib/runtime/image.test.d.ts +1 -0
  198. package/lib/runtime/image.test.js +405 -0
  199. package/lib/runtime/lambda-event.d.ts +4 -0
  200. package/lib/runtime/lambda-event.js +113 -0
  201. package/lib/runtime/lambda-event.test.d.ts +1 -0
  202. package/lib/runtime/lambda-event.test.js +119 -0
  203. package/lib/runtime/lambda.mjs +41600 -0
  204. package/lib/runtime/load-module.d.ts +8 -0
  205. package/lib/runtime/load-module.js +35 -0
  206. package/lib/runtime/manifest.d.ts +215 -0
  207. package/lib/runtime/manifest.js +118 -0
  208. package/lib/runtime/middleware.d.ts +43 -0
  209. package/lib/runtime/middleware.js +113 -0
  210. package/lib/runtime/middleware.test.d.ts +1 -0
  211. package/lib/runtime/middleware.test.js +259 -0
  212. package/lib/runtime/next-modules.d.ts +71 -0
  213. package/lib/runtime/next-modules.js +144 -0
  214. package/lib/runtime/next-modules.test.d.ts +1 -0
  215. package/lib/runtime/next-modules.test.js +34 -0
  216. package/lib/runtime/public-files.d.ts +32 -0
  217. package/lib/runtime/public-files.js +117 -0
  218. package/lib/runtime/public-files.test.d.ts +1 -0
  219. package/lib/runtime/public-files.test.js +97 -0
  220. package/lib/runtime/server.mjs +41593 -0
  221. package/lib/runtime/static-files.d.ts +50 -0
  222. package/lib/runtime/static-files.js +266 -0
  223. package/lib/runtime/static-files.test.d.ts +1 -0
  224. package/lib/runtime/static-files.test.js +118 -0
  225. package/lib/runtime/util.d.ts +28 -0
  226. package/lib/runtime/util.js +79 -0
  227. package/lib/utils/base-path.d.ts +106 -13
  228. package/lib/utils/base-path.js +254 -41
  229. package/lib/utils/base-path.test.js +219 -51
  230. package/lib/utils/get-architecture.d.ts +7 -8
  231. package/lib/utils/get-architecture.js +12 -13
  232. package/lib/utils/zip-directory.d.ts +14 -0
  233. package/lib/utils/zip-directory.js +121 -0
  234. package/lib/utils/zip-directory.test.d.ts +1 -0
  235. package/lib/utils/zip-directory.test.js +99 -0
  236. package/package.json +22 -3
  237. package/scripts/capture-adapter-fixture.mjs +325 -0
  238. package/scripts/e2e-deploy.sh +398 -0
  239. package/scripts/e2e-harness/README.md +707 -0
  240. package/scripts/e2e-harness/app.js +370 -0
  241. package/scripts/e2e-harness/common.sh +249 -0
  242. package/scripts/e2e-harness/screen.mjs +302 -0
  243. package/scripts/e2e-harness/stage-proxy.mjs +145 -0
  244. package/scripts/e2e-harness/type-filters.mjs +47 -0
  245. package/scripts/e2e-logs.sh +75 -0
  246. package/scripts/e2e-offline.sh +91 -0
  247. package/scripts/e2e-sweep.sh +370 -0
  248. package/scripts/e2e-warm.sh +114 -0
  249. package/scripts/zero-config-build.mjs +418 -0
  250. package/docs/1k-concurrent-users-executions.png +0 -0
  251. package/docs/plans/adapter-runtime-release.md +0 -362
  252. package/docs/plans/phase-0-image-function-opt-in.md +0 -295
  253. package/lib/generated-structs/OptionalDockerImageFunctionProps.d.ts +0 -425
  254. package/lib/generated-structs/OptionalDockerImageFunctionProps.js +0 -3
  255. package/lib/image-optimization/handler-utils.d.ts +0 -34
  256. package/lib/image-optimization/handler-utils.js +0 -83
  257. package/lib/image-optimization/handler-utils.test.js +0 -178
  258. package/lib/nextjs-build/functions.Dockerfile +0 -31
  259. package/lib/nextjs-compute/nextjs-image-function.d.ts +0 -53
  260. package/lib/nextjs-compute/nextjs-image-function.js +0 -59
  261. package/lib/utils/experimental-flags.d.ts +0 -24
  262. package/lib/utils/experimental-flags.js +0 -30
  263. /package/lib/{image-optimization/handler-utils.test.d.ts → adapter/adapter.test.d.ts} +0 -0
@@ -19,6 +19,12 @@ export interface NextjsPostDeployOverrides {
19
19
  readonly customResourceProperties?: OptionalPostDeployCustomResourceProperties;
20
20
  }
21
21
  export interface NextjsPostDeployProps {
22
+ /**
23
+ * The app's `basePath`. Scopes the deploy's CloudFront invalidation to the
24
+ * app's URIs, so a deploy doesn't flush other apps on the same distribution.
25
+ * @default - the whole distribution (`/*`)
26
+ */
27
+ readonly basePath?: string;
22
28
  readonly buildId: string;
23
29
  /**
24
30
  * Cache bucket for cleaning up old BUILD_ID prefixed objects
@@ -76,8 +82,8 @@ export interface PostDeployCustomResourceProperties {
76
82
  invalidationBatch: {
77
83
  callerReference: new Date().toISOString(),
78
84
  paths: {
79
- quantity: 1,
80
- items: ["/*"], // invalidate all paths
85
+ quantity: paths.length,
86
+ items: paths, // wholeAppInvalidationPaths(basePath)
81
87
  },
82
88
  },
83
89
  }
@@ -92,15 +98,17 @@ export interface PostDeployCustomResourceProperties {
92
98
  readonly msTtl: string;
93
99
  readonly staticAssetsBucketName?: string;
94
100
  /**
95
- * S3 key prefix to scope static asset pruning to. Empty or absent prunes the
96
- * whole bucket.
101
+ * S3 key prefix to scope static asset pruning to. Only `<prefix>/_next/` is
102
+ * pruned, where every build-hashed asset lives, so `public/` files and other
103
+ * apps' prefixes are never touched. Empty or absent prunes `_next/` at the
104
+ * bucket root.
97
105
  */
98
106
  readonly staticAssetsKeyPrefix?: string;
99
107
  }
100
108
  /**
101
109
  * Performs post deployment tasks in custom resource.
102
110
  *
103
- * 1. CloudFront Invalidation (defaults to /*)
111
+ * 1. CloudFront Invalidation of every URI of the app (`/*` without a `basePath`)
104
112
  * 2. Prune cache bucket by removing objects with old BUILD_ID prefixes
105
113
  * 3. Prune DynamoDB revalidation table by removing entries with old BUILD_ID prefixes
106
114
  * 4. Prune static assets S3 by removing objects that don't have next-build-id metadata of
@@ -6,18 +6,19 @@ const node_path_1 = require("node:path");
6
6
  const aws_cdk_lib_1 = require("aws-cdk-lib");
7
7
  const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
8
8
  const constructs_1 = require("constructs");
9
- const get_architecture_1 = require("./utils/get-architecture");
9
+ const nextjs_static_assets_1 = require("./nextjs-static-assets");
10
+ const base_path_1 = require("./utils/base-path");
10
11
  /**
11
12
  * Performs post deployment tasks in custom resource.
12
13
  *
13
- * 1. CloudFront Invalidation (defaults to /*)
14
+ * 1. CloudFront Invalidation of every URI of the app (`/*` without a `basePath`)
14
15
  * 2. Prune cache bucket by removing objects with old BUILD_ID prefixes
15
16
  * 3. Prune DynamoDB revalidation table by removing entries with old BUILD_ID prefixes
16
17
  * 4. Prune static assets S3 by removing objects that don't have next-build-id metadata of
17
18
  * current build id AND are older than `msTtl`
18
19
  */
19
20
  class NextjsPostDeploy extends constructs_1.Construct {
20
- static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsPostDeploy", version: "0.6.2" };
21
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsPostDeploy", version: "0.7.1" };
21
22
  customResource;
22
23
  lambdaFunction;
23
24
  props;
@@ -29,7 +30,9 @@ class NextjsPostDeploy extends constructs_1.Construct {
29
30
  }
30
31
  createFunction() {
31
32
  const fn = new aws_lambda_1.Function(this, "Fn", {
32
- architecture: (0, get_architecture_1.getLambdaArchitecture)(),
33
+ // Plain bundled JS with no native dependencies, so nothing ties it to the
34
+ // synth machine: always arm64, the cheaper of the two.
35
+ architecture: aws_lambda_1.Architecture.ARM_64,
33
36
  code: aws_lambda_1.Code.fromAsset((0, node_path_1.join)(__dirname, "../assets/lambdas/post-deploy/post-deploy.lambda")),
34
37
  handler: "index.handler",
35
38
  memorySize: 2048,
@@ -41,12 +44,15 @@ class NextjsPostDeploy extends constructs_1.Construct {
41
44
  if (this.props.debug !== false) {
42
45
  fn.addEnvironment("DEBUG", "1");
43
46
  }
44
- this.props.staticAssetsBucket?.grantReadWrite(fn);
47
+ // Only this app's prefix: pruning stays inside it, and a shared bucket's
48
+ // other apps are out of reach.
49
+ this.props.staticAssetsBucket?.grantReadWrite(fn, (0, nextjs_static_assets_1.staticAssetsObjectsPattern)(this.props.staticAssetsKeyPrefix));
45
50
  this.props.cacheBucket?.grantReadWrite(fn);
46
51
  this.props.revalidationTable?.grantReadWriteData(fn);
47
52
  return fn;
48
53
  }
49
54
  createCustomResource() {
55
+ const paths = (0, base_path_1.wholeAppInvalidationPaths)(this.props.basePath);
50
56
  const properties = {
51
57
  // ensures this CR runs each time new build
52
58
  buildId: this.props.buildId,
@@ -60,10 +66,7 @@ class NextjsPostDeploy extends constructs_1.Construct {
60
66
  distributionId: this.props.distribution.distributionId,
61
67
  invalidationBatch: {
62
68
  callerReference: new Date().toISOString(),
63
- paths: {
64
- quantity: 1,
65
- items: ["/*"],
66
- },
69
+ paths: { quantity: paths.length, items: paths },
67
70
  },
68
71
  }
69
72
  : undefined,
@@ -78,4 +81,4 @@ class NextjsPostDeploy extends constructs_1.Construct {
78
81
  }
79
82
  }
80
83
  exports.NextjsPostDeploy = NextjsPostDeploy;
81
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV4dGpzLXBvc3QtZGVwbG95LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL25leHRqcy1wb3N0LWRlcGxveS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEseUNBQWlDO0FBQ2pDLDZDQUF1RDtBQUd2RCx1REFLZ0M7QUFFaEMsMkNBQXVDO0FBSXZDLCtEQUFpRTtBQStGakU7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFhLGdCQUFpQixTQUFRLHNCQUFTOztJQUM3QyxjQUFjLENBQWlCO0lBQy9CLGNBQWMsQ0FBaUI7SUFFdkIsS0FBSyxDQUF3QjtJQUVyQyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTRCO1FBQ3BFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDakIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDNUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUNwRCxDQUFDO0lBRU8sY0FBYztRQUNwQixNQUFNLEVBQUUsR0FBRyxJQUFJLHFCQUFjLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRTtZQUN4QyxZQUFZLEVBQUUsSUFBQSx3Q0FBcUIsR0FBRTtZQUNyQyxJQUFJLEVBQUUsaUJBQUksQ0FBQyxTQUFTLENBQ2xCLElBQUEsZ0JBQUksRUFBQyxTQUFTLEVBQUUsa0RBQWtELENBQUMsQ0FDcEU7WUFDRCxPQUFPLEVBQUUsZUFBZTtZQUN4QixVQUFVLEVBQUUsSUFBSTtZQUNoQixPQUFPLEVBQUUsSUFBSSxvQkFBTyxDQUFDLFlBQVksRUFBRSwwQkFBYSxDQUFDLE1BQU0sQ0FBQztZQUN4RCxPQUFPLEVBQUUsc0JBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQzVCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsYUFBYTtTQUN2QyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSx1QkFBdUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNyRCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQy9CLEVBQUUsQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLENBQUM7UUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixFQUFFLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNyRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFTyxvQkFBb0I7UUFDMUIsTUFBTSxVQUFVLEdBQXVDO1lBQ3JELDJDQUEyQztZQUMzQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPO1lBQzNCLGVBQWUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxVQUFVO1lBQ25ELHFCQUFxQixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEVBQUUsU0FBUztZQUM5RCxLQUFLLEVBQUUsQ0FBQyxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsVUFBVTtZQUN4RCxzQkFBc0IsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixFQUFFLFVBQVU7WUFDakUscUJBQXFCLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsSUFBSSxTQUFTO1lBQ3BFLDhCQUE4QixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWTtnQkFDckQsQ0FBQyxDQUFDO29CQUNFLGNBQWMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxjQUFjO29CQUN0RCxpQkFBaUIsRUFBRTt3QkFDakIsZUFBZSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO3dCQUN6QyxLQUFLLEVBQUU7NEJBQ0wsUUFBUSxFQUFFLENBQUM7NEJBQ1gsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDO3lCQUNkO3FCQUNGO2lCQUNGO2dCQUNILENBQUMsQ0FBQyxTQUFTO1lBQ2IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSx3QkFBd0I7U0FDbEQsQ0FBQztRQUNGLE9BQU8sSUFBSSw0QkFBYyxDQUFDLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtZQUNoRCxVQUFVO1lBQ1YsWUFBWSxFQUFFLDBCQUEwQjtZQUN4QyxZQUFZLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXO1lBQzdDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsbUJBQW1CO1NBQzdDLENBQUMsQ0FBQztJQUNMLENBQUM7O0FBaEVILDRDQWlFQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBDdXN0b21SZXNvdXJjZSwgRHVyYXRpb24gfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IElEaXN0cmlidXRpb24gfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNsb3VkZnJvbnRcIjtcbmltcG9ydCB7IElUYWJsZVYyIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1keW5hbW9kYlwiO1xuaW1wb3J0IHtcbiAgQ29kZSxcbiAgRnVuY3Rpb24gYXMgTGFtYmRhRnVuY3Rpb24sXG4gIFJ1bnRpbWUsXG4gIFJ1bnRpbWVGYW1pbHksXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhXCI7XG5pbXBvcnQgeyBJQnVja2V0IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zM1wiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IE9wdGlvbmFsQ3VzdG9tUmVzb3VyY2VQcm9wcyB9IGZyb20gXCIuL2dlbmVyYXRlZC1zdHJ1Y3RzL09wdGlvbmFsQ3VzdG9tUmVzb3VyY2VQcm9wc1wiO1xuaW1wb3J0IHsgT3B0aW9uYWxGdW5jdGlvblByb3BzIH0gZnJvbSBcIi4vZ2VuZXJhdGVkLXN0cnVjdHMvT3B0aW9uYWxGdW5jdGlvblByb3BzXCI7XG5pbXBvcnQgeyBPcHRpb25hbFBvc3REZXBsb3lDdXN0b21SZXNvdXJjZVByb3BlcnRpZXMgfSBmcm9tIFwiLi9nZW5lcmF0ZWQtc3RydWN0cy9PcHRpb25hbFBvc3REZXBsb3lDdXN0b21SZXNvdXJjZVByb3BlcnRpZXNcIjtcbmltcG9ydCB7IGdldExhbWJkYUFyY2hpdGVjdHVyZSB9IGZyb20gXCIuL3V0aWxzL2dldC1hcmNoaXRlY3R1cmVcIjtcblxuZXhwb3J0IGludGVyZmFjZSBOZXh0anNQb3N0RGVwbG95T3ZlcnJpZGVzIHtcbiAgcmVhZG9ubHkgZnVuY3Rpb25Qcm9wcz86IE9wdGlvbmFsRnVuY3Rpb25Qcm9wcztcbiAgLyoqXG4gICAqIFByb3BzIHRoYXQgZGVmaW5lIHRoZSBjdXN0b20gcmVzb3VyY2VcbiAgICovXG4gIHJlYWRvbmx5IGN1c3RvbVJlc291cmNlUHJvcHM/OiBPcHRpb25hbEN1c3RvbVJlc291cmNlUHJvcHM7XG4gIC8qKlxuICAgKiBQcm9wZXJ0aWVzIHBhc3NlZCBpbnRvIGN1c3RvbSByZXNvdXJjZSB0aGF0IGFyZSBwYXNzZWQgdG8gTGFtYmRhIGV2ZW50IGhhbmRsZXIuXG4gICAqL1xuICByZWFkb25seSBjdXN0b21SZXNvdXJjZVByb3BlcnRpZXM/OiBPcHRpb25hbFBvc3REZXBsb3lDdXN0b21SZXNvdXJjZVByb3BlcnRpZXM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmV4dGpzUG9zdERlcGxveVByb3BzIHtcbiAgcmVhZG9ubHkgYnVpbGRJZDogc3RyaW5nO1xuICAvKipcbiAgICogQ2FjaGUgYnVja2V0IGZvciBjbGVhbmluZyB1cCBvbGQgQlVJTERfSUQgcHJlZml4ZWQgb2JqZWN0c1xuICAgKi9cbiAgcmVhZG9ubHkgY2FjaGVCdWNrZXQ/OiBJQnVja2V0O1xuICAvKipcbiAgICogRHluYW1vREIgdGFibGUgZm9yIGNsZWFuaW5nIHVwIG9sZCBCVUlMRF9JRCBwcmVmaXhlZCByZXZhbGlkYXRpb24gZW50cmllc1xuICAgKi9cbiAgcmVhZG9ubHkgcmV2YWxpZGF0aW9uVGFibGU/OiBJVGFibGVWMjtcbiAgLyoqXG4gICAqIElmIHRydWUsIGxvZ3MgZGV0YWlscyBpbiBjdXN0b20gcmVzb3VyY2UgbGFtYmRhXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGRlYnVnPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIENsb3VkRnJvbnQgRGlzdHJpYnV0aW9uIHRvIGludmFsaWRhdGVcbiAgICovXG4gIHJlYWRvbmx5IGRpc3RyaWJ1dGlvbj86IElEaXN0cmlidXRpb247XG4gIC8qKlxuICAgKiBPdmVycmlkZSBwcm9wcyBmb3IgZXZlcnkgY29uc3RydWN0LlxuICAgKi9cbiAgcmVhZG9ubHkgb3ZlcnJpZGVzPzogTmV4dGpzUG9zdERlcGxveU92ZXJyaWRlcztcbiAgLyoqXG4gICAqIFJlcXVpcmVkIGZvciBgTmV4dGpzVHlwZS5HbG9iYWxGdW5jdGlvbnNgIGFuZCBgTmV4dGpzVHlwZS5HbG9iYWxDb250YWluZXJzYFxuICAgKi9cbiAgcmVhZG9ubHkgc3RhdGljQXNzZXRzQnVja2V0PzogSUJ1Y2tldDtcbiAgLyoqXG4gICAqIFMzIGtleSBwcmVmaXggdGhlIHN0YXRpYyBhc3NldHMgd2VyZSB1cGxvYWRlZCB1bmRlclxuICAgKiAoYE5leHRqc1N0YXRpY0Fzc2V0cy5rZXlQcmVmaXhgKS4gU2NvcGVzIHBydW5pbmcgdG8gdGhpcyBhcHAncyBvYmplY3RzLCBzb1xuICAgKiB0aGF0IGFwcHMgb3IgYnJhbmNoZXMgc2hhcmluZyBvbmUgYnVja2V0IHVuZGVyIGRpZmZlcmVudCBgYmFzZVBhdGhgcyBkb24ndFxuICAgKiBwcnVuZSBlYWNoIG90aGVyJ3MgYXNzZXRzLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhdGljQXNzZXRzS2V5UHJlZml4Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBvc3REZXBsb3lDdXN0b21SZXNvdXJjZVByb3BlcnRpZXMge1xuICAvKipcbiAgICogQnVpbGQgSUQgb2YgY3VycmVudCBkZXBsb3ltZW50LiBVc2VkIHRvIHBydW5lIGNhY2hlIGJ1Y2tldCBvZiBvYmplY3RzXG4gICAqIHdpdGggb2xkIGJ1aWxkIGlkcywgcHJ1bmUgRHluYW1vREIgcmV2YWxpZGF0aW9uIGVudHJpZXMgd2l0aCBvbGQgYnVpbGQgaWRzLFxuICAgKiBhbmQgcHJ1bmUgUzMgc3RhdGljIGFzc2V0cyBiYXNlZCBvbiBtZXRhZGF0YSBhbmQgYG1zVHRsYFxuICAgKi9cbiAgcmVhZG9ubHkgYnVpbGRJZDogc3RyaW5nO1xuICAvKipcbiAgICogQ2FjaGUgYnVja2V0IG5hbWUgZm9yIGNsZWFuaW5nIHVwIG9sZCBCVUlMRF9JRCBwcmVmaXhlZCBvYmplY3RzXG4gICAqL1xuICByZWFkb25seSBjYWNoZUJ1Y2tldE5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBEeW5hbW9EQiByZXZhbGlkYXRpb24gdGFibGUgbmFtZSBmb3IgY2xlYW5pbmcgdXAgb2xkIEJVSUxEX0lEIHByZWZpeGVkIGVudHJpZXNcbiAgICovXG4gIHJlYWRvbmx5IHJldmFsaWRhdGlvblRhYmxlTmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0phdmFTY3JpcHRTREsvdjMvbGF0ZXN0L2NsaWVudC9jbG91ZGZyb250L2NvbW1hbmQvQ3JlYXRlSW52YWxpZGF0aW9uQ29tbWFuZC9cbiAgICogQGRlZmF1bHRcbiAgICoge1xuICAgICAgICBkaXN0cmlidXRpb25JZDogdGhpcy5wcm9wcy5kaXN0cmlidXRpb24/LmRpc3RyaWJ1dGlvbklkLFxuICAgICAgICBpbnZhbGlkYXRpb25CYXRjaDoge1xuICAgICAgICAgIGNhbGxlclJlZmVyZW5jZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgIHBhdGhzOiB7XG4gICAgICAgICAgICBxdWFudGl0eTogMSxcbiAgICAgICAgICAgIGl0ZW1zOiBbXCIvKlwiXSwgLy8gaW52YWxpZGF0ZSBhbGwgcGF0aHNcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfVxuICAgKi9cbiAgcmVhZG9ubHkgY3JlYXRlSW52YWxpZGF0aW9uQ29tbWFuZElucHV0PzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgLyoqXG4gICAqIFRpbWUgdG8gbGl2ZSBpbiBtaWxsaXNlY29uZHNcbiAgICpcbiAgICogTXVzdCBiZSBzdHJpbmcgYmVjYXVzZSBvZiBDbG91ZEZvcm1hdGlvbiBDdXN0b20gUmVzb3VyY2UgbGltaXRhdGlvblxuICAgKiBAZGVmYXVsdCAoMTAwMCAqIDYwICogNjAgKiAyNCAqIDMwKS50b1N0cmluZygpXG4gICAqL1xuICByZWFkb25seSBtc1R0bDogc3RyaW5nO1xuICByZWFkb25seSBzdGF0aWNBc3NldHNCdWNrZXROYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICogUzMga2V5IHByZWZpeCB0byBzY29wZSBzdGF0aWMgYXNzZXQgcHJ1bmluZyB0by4gRW1wdHkgb3IgYWJzZW50IHBydW5lcyB0aGVcbiAgICogd2hvbGUgYnVja2V0LlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhdGljQXNzZXRzS2V5UHJlZml4Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBlcmZvcm1zIHBvc3QgZGVwbG95bWVudCB0YXNrcyBpbiBjdXN0b20gcmVzb3VyY2UuXG4gKlxuICogMS4gQ2xvdWRGcm9udCBJbnZhbGlkYXRpb24gKGRlZmF1bHRzIHRvIC8qKVxuICogMi4gUHJ1bmUgY2FjaGUgYnVja2V0IGJ5IHJlbW92aW5nIG9iamVjdHMgd2l0aCBvbGQgQlVJTERfSUQgcHJlZml4ZXNcbiAqIDMuIFBydW5lIER5bmFtb0RCIHJldmFsaWRhdGlvbiB0YWJsZSBieSByZW1vdmluZyBlbnRyaWVzIHdpdGggb2xkIEJVSUxEX0lEIHByZWZpeGVzXG4gKiA0LiBQcnVuZSBzdGF0aWMgYXNzZXRzIFMzIGJ5IHJlbW92aW5nIG9iamVjdHMgdGhhdCBkb24ndCBoYXZlIG5leHQtYnVpbGQtaWQgbWV0YWRhdGEgb2ZcbiAqIGN1cnJlbnQgYnVpbGQgaWQgQU5EIGFyZSBvbGRlciB0aGFuIGBtc1R0bGBcbiAqL1xuZXhwb3J0IGNsYXNzIE5leHRqc1Bvc3REZXBsb3kgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBjdXN0b21SZXNvdXJjZTogQ3VzdG9tUmVzb3VyY2U7XG4gIGxhbWJkYUZ1bmN0aW9uOiBMYW1iZGFGdW5jdGlvbjtcblxuICBwcml2YXRlIHByb3BzOiBOZXh0anNQb3N0RGVwbG95UHJvcHM7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IE5leHRqc1Bvc3REZXBsb3lQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgdGhpcy5wcm9wcyA9IHByb3BzO1xuICAgIHRoaXMubGFtYmRhRnVuY3Rpb24gPSB0aGlzLmNyZWF0ZUZ1bmN0aW9uKCk7XG4gICAgdGhpcy5jdXN0b21SZXNvdXJjZSA9IHRoaXMuY3JlYXRlQ3VzdG9tUmVzb3VyY2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRnVuY3Rpb24oKSB7XG4gICAgY29uc3QgZm4gPSBuZXcgTGFtYmRhRnVuY3Rpb24odGhpcywgXCJGblwiLCB7XG4gICAgICBhcmNoaXRlY3R1cmU6IGdldExhbWJkYUFyY2hpdGVjdHVyZSgpLFxuICAgICAgY29kZTogQ29kZS5mcm9tQXNzZXQoXG4gICAgICAgIGpvaW4oX19kaXJuYW1lLCBcIi4uL2Fzc2V0cy9sYW1iZGFzL3Bvc3QtZGVwbG95L3Bvc3QtZGVwbG95LmxhbWJkYVwiKSxcbiAgICAgICksXG4gICAgICBoYW5kbGVyOiBcImluZGV4LmhhbmRsZXJcIixcbiAgICAgIG1lbW9yeVNpemU6IDIwNDgsXG4gICAgICBydW50aW1lOiBuZXcgUnVudGltZShcIm5vZGVqczI0LnhcIiwgUnVudGltZUZhbWlseS5OT0RFSlMpLFxuICAgICAgdGltZW91dDogRHVyYXRpb24ubWludXRlcyg1KSxcbiAgICAgIC4uLnRoaXMucHJvcHMub3ZlcnJpZGVzPy5mdW5jdGlvblByb3BzLFxuICAgIH0pO1xuICAgIHRoaXMucHJvcHMuZGlzdHJpYnV0aW9uPy5ncmFudENyZWF0ZUludmFsaWRhdGlvbihmbik7XG4gICAgaWYgKHRoaXMucHJvcHMuZGVidWcgIT09IGZhbHNlKSB7XG4gICAgICBmbi5hZGRFbnZpcm9ubWVudChcIkRFQlVHXCIsIFwiMVwiKTtcbiAgICB9XG4gICAgdGhpcy5wcm9wcy5zdGF0aWNBc3NldHNCdWNrZXQ/LmdyYW50UmVhZFdyaXRlKGZuKTtcbiAgICB0aGlzLnByb3BzLmNhY2hlQnVja2V0Py5ncmFudFJlYWRXcml0ZShmbik7XG4gICAgdGhpcy5wcm9wcy5yZXZhbGlkYXRpb25UYWJsZT8uZ3JhbnRSZWFkV3JpdGVEYXRhKGZuKTtcbiAgICByZXR1cm4gZm47XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUN1c3RvbVJlc291cmNlKCkge1xuICAgIGNvbnN0IHByb3BlcnRpZXM6IFBvc3REZXBsb3lDdXN0b21SZXNvdXJjZVByb3BlcnRpZXMgPSB7XG4gICAgICAvLyBlbnN1cmVzIHRoaXMgQ1IgcnVucyBlYWNoIHRpbWUgbmV3IGJ1aWxkXG4gICAgICBidWlsZElkOiB0aGlzLnByb3BzLmJ1aWxkSWQsXG4gICAgICBjYWNoZUJ1Y2tldE5hbWU6IHRoaXMucHJvcHMuY2FjaGVCdWNrZXQ/LmJ1Y2tldE5hbWUsXG4gICAgICByZXZhbGlkYXRpb25UYWJsZU5hbWU6IHRoaXMucHJvcHMucmV2YWxpZGF0aW9uVGFibGU/LnRhYmxlTmFtZSxcbiAgICAgIG1zVHRsOiAoMTAwMCAqIDYwICogNjAgKiAyNCAqIDMwKS50b1N0cmluZygpLCAvLyAxIG1vbnRoXG4gICAgICBzdGF0aWNBc3NldHNCdWNrZXROYW1lOiB0aGlzLnByb3BzLnN0YXRpY0Fzc2V0c0J1Y2tldD8uYnVja2V0TmFtZSxcbiAgICAgIHN0YXRpY0Fzc2V0c0tleVByZWZpeDogdGhpcy5wcm9wcy5zdGF0aWNBc3NldHNLZXlQcmVmaXggfHwgdW5kZWZpbmVkLFxuICAgICAgY3JlYXRlSW52YWxpZGF0aW9uQ29tbWFuZElucHV0OiB0aGlzLnByb3BzLmRpc3RyaWJ1dGlvblxuICAgICAgICA/IHtcbiAgICAgICAgICAgIGRpc3RyaWJ1dGlvbklkOiB0aGlzLnByb3BzLmRpc3RyaWJ1dGlvbi5kaXN0cmlidXRpb25JZCxcbiAgICAgICAgICAgIGludmFsaWRhdGlvbkJhdGNoOiB7XG4gICAgICAgICAgICAgIGNhbGxlclJlZmVyZW5jZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgICAgICBwYXRoczoge1xuICAgICAgICAgICAgICAgIHF1YW50aXR5OiAxLFxuICAgICAgICAgICAgICAgIGl0ZW1zOiBbXCIvKlwiXSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIC4uLnRoaXMucHJvcHMub3ZlcnJpZGVzPy5jdXN0b21SZXNvdXJjZVByb3BlcnRpZXMsXG4gICAgfTtcbiAgICByZXR1cm4gbmV3IEN1c3RvbVJlc291cmNlKHRoaXMsIFwiQ3VzdG9tUmVzb3VyY2VcIiwge1xuICAgICAgcHJvcGVydGllcyxcbiAgICAgIHJlc291cmNlVHlwZTogXCJDdXN0b206Ok5leHRqc1Bvc3REZXBsb3lcIixcbiAgICAgIHNlcnZpY2VUb2tlbjogdGhpcy5sYW1iZGFGdW5jdGlvbi5mdW5jdGlvbkFybixcbiAgICAgIC4uLnRoaXMucHJvcHMub3ZlcnJpZGVzPy5jdXN0b21SZXNvdXJjZVByb3BzLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
84
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV4dGpzLXBvc3QtZGVwbG95LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL25leHRqcy1wb3N0LWRlcGxveS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEseUNBQWlDO0FBQ2pDLDZDQUF1RDtBQUd2RCx1REFNZ0M7QUFFaEMsMkNBQXVDO0FBSXZDLGlFQUFvRTtBQUNwRSxpREFBOEQ7QUF1RzlEOzs7Ozs7OztHQVFHO0FBQ0gsTUFBYSxnQkFBaUIsU0FBUSxzQkFBUzs7SUFDN0MsY0FBYyxDQUFpQjtJQUMvQixjQUFjLENBQWlCO0lBRXZCLEtBQUssQ0FBd0I7SUFFckMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUE0QjtRQUNwRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2pCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzVDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7SUFDcEQsQ0FBQztJQUVPLGNBQWM7UUFDcEIsTUFBTSxFQUFFLEdBQUcsSUFBSSxxQkFBYyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUU7WUFDeEMsMEVBQTBFO1lBQzFFLHVEQUF1RDtZQUN2RCxZQUFZLEVBQUUseUJBQVksQ0FBQyxNQUFNO1lBQ2pDLElBQUksRUFBRSxpQkFBSSxDQUFDLFNBQVMsQ0FDbEIsSUFBQSxnQkFBSSxFQUFDLFNBQVMsRUFBRSxrREFBa0QsQ0FBQyxDQUNwRTtZQUNELE9BQU8sRUFBRSxlQUFlO1lBQ3hCLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLE9BQU8sRUFBRSxJQUFJLG9CQUFPLENBQUMsWUFBWSxFQUFFLDBCQUFhLENBQUMsTUFBTSxDQUFDO1lBQ3hELE9BQU8sRUFBRSxzQkFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDNUIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxhQUFhO1NBQ3ZDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLHVCQUF1QixDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3JELElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDL0IsRUFBRSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDbEMsQ0FBQztRQUNELHlFQUF5RTtRQUN6RSwrQkFBK0I7UUFDL0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxjQUFjLENBQzNDLEVBQUUsRUFDRixJQUFBLGlEQUEwQixFQUFDLElBQUksQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FDN0QsQ0FBQztRQUNGLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixFQUFFLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3JELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVPLG9CQUFvQjtRQUMxQixNQUFNLEtBQUssR0FBRyxJQUFBLHFDQUF5QixFQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDN0QsTUFBTSxVQUFVLEdBQXVDO1lBQ3JELDJDQUEyQztZQUMzQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPO1lBQzNCLGVBQWUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxVQUFVO1lBQ25ELHFCQUFxQixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEVBQUUsU0FBUztZQUM5RCxLQUFLLEVBQUUsQ0FBQyxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsVUFBVTtZQUN4RCxzQkFBc0IsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixFQUFFLFVBQVU7WUFDakUscUJBQXFCLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsSUFBSSxTQUFTO1lBQ3BFLDhCQUE4QixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWTtnQkFDckQsQ0FBQyxDQUFDO29CQUNFLGNBQWMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxjQUFjO29CQUN0RCxpQkFBaUIsRUFBRTt3QkFDakIsZUFBZSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO3dCQUN6QyxLQUFLLEVBQUUsRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFO3FCQUNoRDtpQkFDRjtnQkFDSCxDQUFDLENBQUMsU0FBUztZQUNiLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsd0JBQXdCO1NBQ2xELENBQUM7UUFDRixPQUFPLElBQUksNEJBQWMsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7WUFDaEQsVUFBVTtZQUNWLFlBQVksRUFBRSwwQkFBMEI7WUFDeEMsWUFBWSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVztZQUM3QyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLG1CQUFtQjtTQUM3QyxDQUFDLENBQUM7SUFDTCxDQUFDOztBQXJFSCw0Q0FzRUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgQ3VzdG9tUmVzb3VyY2UsIER1cmF0aW9uIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBJRGlzdHJpYnV0aW9uIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1jbG91ZGZyb250XCI7XG5pbXBvcnQgeyBJVGFibGVWMiB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZHluYW1vZGJcIjtcbmltcG9ydCB7XG4gIEFyY2hpdGVjdHVyZSxcbiAgQ29kZSxcbiAgRnVuY3Rpb24gYXMgTGFtYmRhRnVuY3Rpb24sXG4gIFJ1bnRpbWUsXG4gIFJ1bnRpbWVGYW1pbHksXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhXCI7XG5pbXBvcnQgeyBJQnVja2V0IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zM1wiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IE9wdGlvbmFsQ3VzdG9tUmVzb3VyY2VQcm9wcyB9IGZyb20gXCIuL2dlbmVyYXRlZC1zdHJ1Y3RzL09wdGlvbmFsQ3VzdG9tUmVzb3VyY2VQcm9wc1wiO1xuaW1wb3J0IHsgT3B0aW9uYWxGdW5jdGlvblByb3BzIH0gZnJvbSBcIi4vZ2VuZXJhdGVkLXN0cnVjdHMvT3B0aW9uYWxGdW5jdGlvblByb3BzXCI7XG5pbXBvcnQgeyBPcHRpb25hbFBvc3REZXBsb3lDdXN0b21SZXNvdXJjZVByb3BlcnRpZXMgfSBmcm9tIFwiLi9nZW5lcmF0ZWQtc3RydWN0cy9PcHRpb25hbFBvc3REZXBsb3lDdXN0b21SZXNvdXJjZVByb3BlcnRpZXNcIjtcbmltcG9ydCB7IHN0YXRpY0Fzc2V0c09iamVjdHNQYXR0ZXJuIH0gZnJvbSBcIi4vbmV4dGpzLXN0YXRpYy1hc3NldHNcIjtcbmltcG9ydCB7IHdob2xlQXBwSW52YWxpZGF0aW9uUGF0aHMgfSBmcm9tIFwiLi91dGlscy9iYXNlLXBhdGhcIjtcblxuZXhwb3J0IGludGVyZmFjZSBOZXh0anNQb3N0RGVwbG95T3ZlcnJpZGVzIHtcbiAgcmVhZG9ubHkgZnVuY3Rpb25Qcm9wcz86IE9wdGlvbmFsRnVuY3Rpb25Qcm9wcztcbiAgLyoqXG4gICAqIFByb3BzIHRoYXQgZGVmaW5lIHRoZSBjdXN0b20gcmVzb3VyY2VcbiAgICovXG4gIHJlYWRvbmx5IGN1c3RvbVJlc291cmNlUHJvcHM/OiBPcHRpb25hbEN1c3RvbVJlc291cmNlUHJvcHM7XG4gIC8qKlxuICAgKiBQcm9wZXJ0aWVzIHBhc3NlZCBpbnRvIGN1c3RvbSByZXNvdXJjZSB0aGF0IGFyZSBwYXNzZWQgdG8gTGFtYmRhIGV2ZW50IGhhbmRsZXIuXG4gICAqL1xuICByZWFkb25seSBjdXN0b21SZXNvdXJjZVByb3BlcnRpZXM/OiBPcHRpb25hbFBvc3REZXBsb3lDdXN0b21SZXNvdXJjZVByb3BlcnRpZXM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmV4dGpzUG9zdERlcGxveVByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBhcHAncyBgYmFzZVBhdGhgLiBTY29wZXMgdGhlIGRlcGxveSdzIENsb3VkRnJvbnQgaW52YWxpZGF0aW9uIHRvIHRoZVxuICAgKiBhcHAncyBVUklzLCBzbyBhIGRlcGxveSBkb2Vzbid0IGZsdXNoIG90aGVyIGFwcHMgb24gdGhlIHNhbWUgZGlzdHJpYnV0aW9uLlxuICAgKiBAZGVmYXVsdCAtIHRoZSB3aG9sZSBkaXN0cmlidXRpb24gKGAvKmApXG4gICAqL1xuICByZWFkb25seSBiYXNlUGF0aD86IHN0cmluZztcbiAgcmVhZG9ubHkgYnVpbGRJZDogc3RyaW5nO1xuICAvKipcbiAgICogQ2FjaGUgYnVja2V0IGZvciBjbGVhbmluZyB1cCBvbGQgQlVJTERfSUQgcHJlZml4ZWQgb2JqZWN0c1xuICAgKi9cbiAgcmVhZG9ubHkgY2FjaGVCdWNrZXQ/OiBJQnVja2V0O1xuICAvKipcbiAgICogRHluYW1vREIgdGFibGUgZm9yIGNsZWFuaW5nIHVwIG9sZCBCVUlMRF9JRCBwcmVmaXhlZCByZXZhbGlkYXRpb24gZW50cmllc1xuICAgKi9cbiAgcmVhZG9ubHkgcmV2YWxpZGF0aW9uVGFibGU/OiBJVGFibGVWMjtcbiAgLyoqXG4gICAqIElmIHRydWUsIGxvZ3MgZGV0YWlscyBpbiBjdXN0b20gcmVzb3VyY2UgbGFtYmRhXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGRlYnVnPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIENsb3VkRnJvbnQgRGlzdHJpYnV0aW9uIHRvIGludmFsaWRhdGVcbiAgICovXG4gIHJlYWRvbmx5IGRpc3RyaWJ1dGlvbj86IElEaXN0cmlidXRpb247XG4gIC8qKlxuICAgKiBPdmVycmlkZSBwcm9wcyBmb3IgZXZlcnkgY29uc3RydWN0LlxuICAgKi9cbiAgcmVhZG9ubHkgb3ZlcnJpZGVzPzogTmV4dGpzUG9zdERlcGxveU92ZXJyaWRlcztcbiAgLyoqXG4gICAqIFJlcXVpcmVkIGZvciBgTmV4dGpzVHlwZS5HbG9iYWxGdW5jdGlvbnNgIGFuZCBgTmV4dGpzVHlwZS5HbG9iYWxDb250YWluZXJzYFxuICAgKi9cbiAgcmVhZG9ubHkgc3RhdGljQXNzZXRzQnVja2V0PzogSUJ1Y2tldDtcbiAgLyoqXG4gICAqIFMzIGtleSBwcmVmaXggdGhlIHN0YXRpYyBhc3NldHMgd2VyZSB1cGxvYWRlZCB1bmRlclxuICAgKiAoYE5leHRqc1N0YXRpY0Fzc2V0cy5rZXlQcmVmaXhgKS4gU2NvcGVzIHBydW5pbmcgdG8gdGhpcyBhcHAncyBvYmplY3RzLCBzb1xuICAgKiB0aGF0IGFwcHMgb3IgYnJhbmNoZXMgc2hhcmluZyBvbmUgYnVja2V0IHVuZGVyIGRpZmZlcmVudCBgYmFzZVBhdGhgcyBkb24ndFxuICAgKiBwcnVuZSBlYWNoIG90aGVyJ3MgYXNzZXRzLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhdGljQXNzZXRzS2V5UHJlZml4Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBvc3REZXBsb3lDdXN0b21SZXNvdXJjZVByb3BlcnRpZXMge1xuICAvKipcbiAgICogQnVpbGQgSUQgb2YgY3VycmVudCBkZXBsb3ltZW50LiBVc2VkIHRvIHBydW5lIGNhY2hlIGJ1Y2tldCBvZiBvYmplY3RzXG4gICAqIHdpdGggb2xkIGJ1aWxkIGlkcywgcHJ1bmUgRHluYW1vREIgcmV2YWxpZGF0aW9uIGVudHJpZXMgd2l0aCBvbGQgYnVpbGQgaWRzLFxuICAgKiBhbmQgcHJ1bmUgUzMgc3RhdGljIGFzc2V0cyBiYXNlZCBvbiBtZXRhZGF0YSBhbmQgYG1zVHRsYFxuICAgKi9cbiAgcmVhZG9ubHkgYnVpbGRJZDogc3RyaW5nO1xuICAvKipcbiAgICogQ2FjaGUgYnVja2V0IG5hbWUgZm9yIGNsZWFuaW5nIHVwIG9sZCBCVUlMRF9JRCBwcmVmaXhlZCBvYmplY3RzXG4gICAqL1xuICByZWFkb25seSBjYWNoZUJ1Y2tldE5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBEeW5hbW9EQiByZXZhbGlkYXRpb24gdGFibGUgbmFtZSBmb3IgY2xlYW5pbmcgdXAgb2xkIEJVSUxEX0lEIHByZWZpeGVkIGVudHJpZXNcbiAgICovXG4gIHJlYWRvbmx5IHJldmFsaWRhdGlvblRhYmxlTmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0phdmFTY3JpcHRTREsvdjMvbGF0ZXN0L2NsaWVudC9jbG91ZGZyb250L2NvbW1hbmQvQ3JlYXRlSW52YWxpZGF0aW9uQ29tbWFuZC9cbiAgICogQGRlZmF1bHRcbiAgICoge1xuICAgICAgICBkaXN0cmlidXRpb25JZDogdGhpcy5wcm9wcy5kaXN0cmlidXRpb24/LmRpc3RyaWJ1dGlvbklkLFxuICAgICAgICBpbnZhbGlkYXRpb25CYXRjaDoge1xuICAgICAgICAgIGNhbGxlclJlZmVyZW5jZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgIHBhdGhzOiB7XG4gICAgICAgICAgICBxdWFudGl0eTogcGF0aHMubGVuZ3RoLFxuICAgICAgICAgICAgaXRlbXM6IHBhdGhzLCAvLyB3aG9sZUFwcEludmFsaWRhdGlvblBhdGhzKGJhc2VQYXRoKVxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9XG4gICAqL1xuICByZWFkb25seSBjcmVhdGVJbnZhbGlkYXRpb25Db21tYW5kSW5wdXQ/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAvKipcbiAgICogVGltZSB0byBsaXZlIGluIG1pbGxpc2Vjb25kc1xuICAgKlxuICAgKiBNdXN0IGJlIHN0cmluZyBiZWNhdXNlIG9mIENsb3VkRm9ybWF0aW9uIEN1c3RvbSBSZXNvdXJjZSBsaW1pdGF0aW9uXG4gICAqIEBkZWZhdWx0ICgxMDAwICogNjAgKiA2MCAqIDI0ICogMzApLnRvU3RyaW5nKClcbiAgICovXG4gIHJlYWRvbmx5IG1zVHRsOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHN0YXRpY0Fzc2V0c0J1Y2tldE5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBTMyBrZXkgcHJlZml4IHRvIHNjb3BlIHN0YXRpYyBhc3NldCBwcnVuaW5nIHRvLiBPbmx5IGA8cHJlZml4Pi9fbmV4dC9gIGlzXG4gICAqIHBydW5lZCwgd2hlcmUgZXZlcnkgYnVpbGQtaGFzaGVkIGFzc2V0IGxpdmVzLCBzbyBgcHVibGljL2AgZmlsZXMgYW5kIG90aGVyXG4gICAqIGFwcHMnIHByZWZpeGVzIGFyZSBuZXZlciB0b3VjaGVkLiBFbXB0eSBvciBhYnNlbnQgcHJ1bmVzIGBfbmV4dC9gIGF0IHRoZVxuICAgKiBidWNrZXQgcm9vdC5cbiAgICovXG4gIHJlYWRvbmx5IHN0YXRpY0Fzc2V0c0tleVByZWZpeD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQZXJmb3JtcyBwb3N0IGRlcGxveW1lbnQgdGFza3MgaW4gY3VzdG9tIHJlc291cmNlLlxuICpcbiAqIDEuIENsb3VkRnJvbnQgSW52YWxpZGF0aW9uIG9mIGV2ZXJ5IFVSSSBvZiB0aGUgYXBwIChgLypgIHdpdGhvdXQgYSBgYmFzZVBhdGhgKVxuICogMi4gUHJ1bmUgY2FjaGUgYnVja2V0IGJ5IHJlbW92aW5nIG9iamVjdHMgd2l0aCBvbGQgQlVJTERfSUQgcHJlZml4ZXNcbiAqIDMuIFBydW5lIER5bmFtb0RCIHJldmFsaWRhdGlvbiB0YWJsZSBieSByZW1vdmluZyBlbnRyaWVzIHdpdGggb2xkIEJVSUxEX0lEIHByZWZpeGVzXG4gKiA0LiBQcnVuZSBzdGF0aWMgYXNzZXRzIFMzIGJ5IHJlbW92aW5nIG9iamVjdHMgdGhhdCBkb24ndCBoYXZlIG5leHQtYnVpbGQtaWQgbWV0YWRhdGEgb2ZcbiAqIGN1cnJlbnQgYnVpbGQgaWQgQU5EIGFyZSBvbGRlciB0aGFuIGBtc1R0bGBcbiAqL1xuZXhwb3J0IGNsYXNzIE5leHRqc1Bvc3REZXBsb3kgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBjdXN0b21SZXNvdXJjZTogQ3VzdG9tUmVzb3VyY2U7XG4gIGxhbWJkYUZ1bmN0aW9uOiBMYW1iZGFGdW5jdGlvbjtcblxuICBwcml2YXRlIHByb3BzOiBOZXh0anNQb3N0RGVwbG95UHJvcHM7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IE5leHRqc1Bvc3REZXBsb3lQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgdGhpcy5wcm9wcyA9IHByb3BzO1xuICAgIHRoaXMubGFtYmRhRnVuY3Rpb24gPSB0aGlzLmNyZWF0ZUZ1bmN0aW9uKCk7XG4gICAgdGhpcy5jdXN0b21SZXNvdXJjZSA9IHRoaXMuY3JlYXRlQ3VzdG9tUmVzb3VyY2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRnVuY3Rpb24oKSB7XG4gICAgY29uc3QgZm4gPSBuZXcgTGFtYmRhRnVuY3Rpb24odGhpcywgXCJGblwiLCB7XG4gICAgICAvLyBQbGFpbiBidW5kbGVkIEpTIHdpdGggbm8gbmF0aXZlIGRlcGVuZGVuY2llcywgc28gbm90aGluZyB0aWVzIGl0IHRvIHRoZVxuICAgICAgLy8gc3ludGggbWFjaGluZTogYWx3YXlzIGFybTY0LCB0aGUgY2hlYXBlciBvZiB0aGUgdHdvLlxuICAgICAgYXJjaGl0ZWN0dXJlOiBBcmNoaXRlY3R1cmUuQVJNXzY0LFxuICAgICAgY29kZTogQ29kZS5mcm9tQXNzZXQoXG4gICAgICAgIGpvaW4oX19kaXJuYW1lLCBcIi4uL2Fzc2V0cy9sYW1iZGFzL3Bvc3QtZGVwbG95L3Bvc3QtZGVwbG95LmxhbWJkYVwiKSxcbiAgICAgICksXG4gICAgICBoYW5kbGVyOiBcImluZGV4LmhhbmRsZXJcIixcbiAgICAgIG1lbW9yeVNpemU6IDIwNDgsXG4gICAgICBydW50aW1lOiBuZXcgUnVudGltZShcIm5vZGVqczI0LnhcIiwgUnVudGltZUZhbWlseS5OT0RFSlMpLFxuICAgICAgdGltZW91dDogRHVyYXRpb24ubWludXRlcyg1KSxcbiAgICAgIC4uLnRoaXMucHJvcHMub3ZlcnJpZGVzPy5mdW5jdGlvblByb3BzLFxuICAgIH0pO1xuICAgIHRoaXMucHJvcHMuZGlzdHJpYnV0aW9uPy5ncmFudENyZWF0ZUludmFsaWRhdGlvbihmbik7XG4gICAgaWYgKHRoaXMucHJvcHMuZGVidWcgIT09IGZhbHNlKSB7XG4gICAgICBmbi5hZGRFbnZpcm9ubWVudChcIkRFQlVHXCIsIFwiMVwiKTtcbiAgICB9XG4gICAgLy8gT25seSB0aGlzIGFwcCdzIHByZWZpeDogcHJ1bmluZyBzdGF5cyBpbnNpZGUgaXQsIGFuZCBhIHNoYXJlZCBidWNrZXQnc1xuICAgIC8vIG90aGVyIGFwcHMgYXJlIG91dCBvZiByZWFjaC5cbiAgICB0aGlzLnByb3BzLnN0YXRpY0Fzc2V0c0J1Y2tldD8uZ3JhbnRSZWFkV3JpdGUoXG4gICAgICBmbixcbiAgICAgIHN0YXRpY0Fzc2V0c09iamVjdHNQYXR0ZXJuKHRoaXMucHJvcHMuc3RhdGljQXNzZXRzS2V5UHJlZml4KSxcbiAgICApO1xuICAgIHRoaXMucHJvcHMuY2FjaGVCdWNrZXQ/LmdyYW50UmVhZFdyaXRlKGZuKTtcbiAgICB0aGlzLnByb3BzLnJldmFsaWRhdGlvblRhYmxlPy5ncmFudFJlYWRXcml0ZURhdGEoZm4pO1xuICAgIHJldHVybiBmbjtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQ3VzdG9tUmVzb3VyY2UoKSB7XG4gICAgY29uc3QgcGF0aHMgPSB3aG9sZUFwcEludmFsaWRhdGlvblBhdGhzKHRoaXMucHJvcHMuYmFzZVBhdGgpO1xuICAgIGNvbnN0IHByb3BlcnRpZXM6IFBvc3REZXBsb3lDdXN0b21SZXNvdXJjZVByb3BlcnRpZXMgPSB7XG4gICAgICAvLyBlbnN1cmVzIHRoaXMgQ1IgcnVucyBlYWNoIHRpbWUgbmV3IGJ1aWxkXG4gICAgICBidWlsZElkOiB0aGlzLnByb3BzLmJ1aWxkSWQsXG4gICAgICBjYWNoZUJ1Y2tldE5hbWU6IHRoaXMucHJvcHMuY2FjaGVCdWNrZXQ/LmJ1Y2tldE5hbWUsXG4gICAgICByZXZhbGlkYXRpb25UYWJsZU5hbWU6IHRoaXMucHJvcHMucmV2YWxpZGF0aW9uVGFibGU/LnRhYmxlTmFtZSxcbiAgICAgIG1zVHRsOiAoMTAwMCAqIDYwICogNjAgKiAyNCAqIDMwKS50b1N0cmluZygpLCAvLyAxIG1vbnRoXG4gICAgICBzdGF0aWNBc3NldHNCdWNrZXROYW1lOiB0aGlzLnByb3BzLnN0YXRpY0Fzc2V0c0J1Y2tldD8uYnVja2V0TmFtZSxcbiAgICAgIHN0YXRpY0Fzc2V0c0tleVByZWZpeDogdGhpcy5wcm9wcy5zdGF0aWNBc3NldHNLZXlQcmVmaXggfHwgdW5kZWZpbmVkLFxuICAgICAgY3JlYXRlSW52YWxpZGF0aW9uQ29tbWFuZElucHV0OiB0aGlzLnByb3BzLmRpc3RyaWJ1dGlvblxuICAgICAgICA/IHtcbiAgICAgICAgICAgIGRpc3RyaWJ1dGlvbklkOiB0aGlzLnByb3BzLmRpc3RyaWJ1dGlvbi5kaXN0cmlidXRpb25JZCxcbiAgICAgICAgICAgIGludmFsaWRhdGlvbkJhdGNoOiB7XG4gICAgICAgICAgICAgIGNhbGxlclJlZmVyZW5jZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgICAgICBwYXRoczogeyBxdWFudGl0eTogcGF0aHMubGVuZ3RoLCBpdGVtczogcGF0aHMgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIC4uLnRoaXMucHJvcHMub3ZlcnJpZGVzPy5jdXN0b21SZXNvdXJjZVByb3BlcnRpZXMsXG4gICAgfTtcbiAgICByZXR1cm4gbmV3IEN1c3RvbVJlc291cmNlKHRoaXMsIFwiQ3VzdG9tUmVzb3VyY2VcIiwge1xuICAgICAgcHJvcGVydGllcyxcbiAgICAgIHJlc291cmNlVHlwZTogXCJDdXN0b206Ok5leHRqc1Bvc3REZXBsb3lcIixcbiAgICAgIHNlcnZpY2VUb2tlbjogdGhpcy5sYW1iZGFGdW5jdGlvbi5mdW5jdGlvbkFybixcbiAgICAgIC4uLnRoaXMucHJvcHMub3ZlcnJpZGVzPy5jdXN0b21SZXNvdXJjZVByb3BzLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
4
+ const assertions_1 = require("aws-cdk-lib/assertions");
5
+ const aws_cloudfront_1 = require("aws-cdk-lib/aws-cloudfront");
6
+ const nextjs_post_deploy_1 = require("./nextjs-post-deploy");
7
+ /** The paths the deploy's CloudFront invalidation names. */
8
+ function invalidatedPaths(basePath) {
9
+ const stack = new aws_cdk_lib_1.Stack(new aws_cdk_lib_1.App(), "Stack");
10
+ new nextjs_post_deploy_1.NextjsPostDeploy(stack, "PostDeploy", {
11
+ basePath,
12
+ buildId: "build",
13
+ distribution: aws_cloudfront_1.Distribution.fromDistributionAttributes(stack, "Dist", {
14
+ distributionId: "DIST",
15
+ domainName: "d.cloudfront.net",
16
+ }),
17
+ });
18
+ const [resource] = Object.values(assertions_1.Template.fromStack(stack).findResources("Custom::NextjsPostDeploy"));
19
+ return resource.Properties.createInvalidationCommandInput.invalidationBatch
20
+ .paths;
21
+ }
22
+ describe("NextjsPostDeploy", () => {
23
+ it("invalidates the whole distribution without a basePath", () => {
24
+ expect(invalidatedPaths()).toEqual({ quantity: 1, items: ["/*"] });
25
+ });
26
+ it("invalidates only the app's URIs under a basePath", () => {
27
+ // `/*` would flush every other app on a shared distribution too.
28
+ expect(invalidatedPaths("/docs")).toEqual({
29
+ quantity: 3,
30
+ items: ["/docs", "/docs?*", "/docs/*"],
31
+ });
32
+ });
33
+ });
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV4dGpzLXBvc3QtZGVwbG95LnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbmV4dGpzLXBvc3QtZGVwbG95LnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSw2Q0FBeUM7QUFDekMsdURBQWtEO0FBQ2xELCtEQUEwRDtBQUMxRCw2REFBd0Q7QUFFeEQsNERBQTREO0FBQzVELFNBQVMsZ0JBQWdCLENBQUMsUUFBaUI7SUFDekMsTUFBTSxLQUFLLEdBQUcsSUFBSSxtQkFBSyxDQUFDLElBQUksaUJBQUcsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzVDLElBQUkscUNBQWdCLENBQUMsS0FBSyxFQUFFLFlBQVksRUFBRTtRQUN4QyxRQUFRO1FBQ1IsT0FBTyxFQUFFLE9BQU87UUFDaEIsWUFBWSxFQUFFLDZCQUFZLENBQUMsMEJBQTBCLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRTtZQUNuRSxjQUFjLEVBQUUsTUFBTTtZQUN0QixVQUFVLEVBQUUsa0JBQWtCO1NBQy9CLENBQUM7S0FDSCxDQUFDLENBQUM7SUFDSCxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FDOUIscUJBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsYUFBYSxDQUFDLDBCQUEwQixDQUFDLENBQ3BFLENBQUM7SUFDRixPQUFPLFFBQVEsQ0FBQyxVQUFVLENBQUMsOEJBQThCLENBQUMsaUJBQWlCO1NBQ3hFLEtBQUssQ0FBQztBQUNYLENBQUM7QUFFRCxRQUFRLENBQUMsa0JBQWtCLEVBQUUsR0FBRyxFQUFFO0lBQ2hDLEVBQUUsQ0FBQyx1REFBdUQsRUFBRSxHQUFHLEVBQUU7UUFDL0QsTUFBTSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNyRSxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxrREFBa0QsRUFBRSxHQUFHLEVBQUU7UUFDMUQsaUVBQWlFO1FBQ2pFLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUN4QyxRQUFRLEVBQUUsQ0FBQztZQUNYLEtBQUssRUFBRSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDO1NBQ3ZDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcHAsIFN0YWNrIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hc3NlcnRpb25zXCI7XG5pbXBvcnQgeyBEaXN0cmlidXRpb24gfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNsb3VkZnJvbnRcIjtcbmltcG9ydCB7IE5leHRqc1Bvc3REZXBsb3kgfSBmcm9tIFwiLi9uZXh0anMtcG9zdC1kZXBsb3lcIjtcblxuLyoqIFRoZSBwYXRocyB0aGUgZGVwbG95J3MgQ2xvdWRGcm9udCBpbnZhbGlkYXRpb24gbmFtZXMuICovXG5mdW5jdGlvbiBpbnZhbGlkYXRlZFBhdGhzKGJhc2VQYXRoPzogc3RyaW5nKTogdW5rbm93biB7XG4gIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKG5ldyBBcHAoKSwgXCJTdGFja1wiKTtcbiAgbmV3IE5leHRqc1Bvc3REZXBsb3koc3RhY2ssIFwiUG9zdERlcGxveVwiLCB7XG4gICAgYmFzZVBhdGgsXG4gICAgYnVpbGRJZDogXCJidWlsZFwiLFxuICAgIGRpc3RyaWJ1dGlvbjogRGlzdHJpYnV0aW9uLmZyb21EaXN0cmlidXRpb25BdHRyaWJ1dGVzKHN0YWNrLCBcIkRpc3RcIiwge1xuICAgICAgZGlzdHJpYnV0aW9uSWQ6IFwiRElTVFwiLFxuICAgICAgZG9tYWluTmFtZTogXCJkLmNsb3VkZnJvbnQubmV0XCIsXG4gICAgfSksXG4gIH0pO1xuICBjb25zdCBbcmVzb3VyY2VdID0gT2JqZWN0LnZhbHVlcyhcbiAgICBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spLmZpbmRSZXNvdXJjZXMoXCJDdXN0b206Ok5leHRqc1Bvc3REZXBsb3lcIiksXG4gICk7XG4gIHJldHVybiByZXNvdXJjZS5Qcm9wZXJ0aWVzLmNyZWF0ZUludmFsaWRhdGlvbkNvbW1hbmRJbnB1dC5pbnZhbGlkYXRpb25CYXRjaFxuICAgIC5wYXRocztcbn1cblxuZGVzY3JpYmUoXCJOZXh0anNQb3N0RGVwbG95XCIsICgpID0+IHtcbiAgaXQoXCJpbnZhbGlkYXRlcyB0aGUgd2hvbGUgZGlzdHJpYnV0aW9uIHdpdGhvdXQgYSBiYXNlUGF0aFwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KGludmFsaWRhdGVkUGF0aHMoKSkudG9FcXVhbCh7IHF1YW50aXR5OiAxLCBpdGVtczogW1wiLypcIl0gfSk7XG4gIH0pO1xuXG4gIGl0KFwiaW52YWxpZGF0ZXMgb25seSB0aGUgYXBwJ3MgVVJJcyB1bmRlciBhIGJhc2VQYXRoXCIsICgpID0+IHtcbiAgICAvLyBgLypgIHdvdWxkIGZsdXNoIGV2ZXJ5IG90aGVyIGFwcCBvbiBhIHNoYXJlZCBkaXN0cmlidXRpb24gdG9vLlxuICAgIGV4cGVjdChpbnZhbGlkYXRlZFBhdGhzKFwiL2RvY3NcIikpLnRvRXF1YWwoe1xuICAgICAgcXVhbnRpdHk6IDMsXG4gICAgICBpdGVtczogW1wiL2RvY3NcIiwgXCIvZG9jcz8qXCIsIFwiL2RvY3MvKlwiXSxcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -1,6 +1,13 @@
1
1
  import { BucketProps, IBucket } from "aws-cdk-lib/aws-s3";
2
2
  import { BucketDeployment, BucketDeploymentProps } from "aws-cdk-lib/aws-s3-deployment";
3
3
  import { Construct } from "constructs";
4
+ /**
5
+ * The S3 object key pattern covering every static asset uploaded under
6
+ * `keyPrefix` (`NextjsStaticAssets.keyPrefix`): `"base/*"`, or `"*"` at the
7
+ * bucket root. For scoping the compute's read grant to the app's own objects
8
+ * when several apps share one bucket.
9
+ */
10
+ export declare function staticAssetsObjectsPattern(keyPrefix?: string): string;
4
11
  export interface NextjsStaticAssetsOverrides {
5
12
  readonly bucketProps?: BucketProps;
6
13
  readonly bucketDeploymentProps?: BucketDeploymentProps;
@@ -9,7 +16,10 @@ export interface NextjsStaticAssetsProps {
9
16
  /**
10
17
  * Bring your own S3 bucket for static assets. When provided, cdk-nextjs
11
18
  * will skip creating a new bucket and deploy assets to this bucket instead.
12
- * Use with `basePath` to isolate assets per branch when sharing a bucket.
19
+ * Can be shared only between deployments with different `basePath`s (S3 key
20
+ * prefixes): pruning is scoped to `<basePath>/_next/`, but two deployments
21
+ * under the same prefix overwrite each other's `public/` files and prune each
22
+ * other's older `_next/` assets.
13
23
  */
14
24
  readonly bucket?: IBucket;
15
25
  /**
@@ -38,10 +48,13 @@ export declare class NextjsStaticAssets extends Construct {
38
48
  * S3 key prefix the assets are actually uploaded under, normalized to a bare
39
49
  * path segment (empty when they live at the bucket root).
40
50
  *
41
- * Consumers that read assets back out of the bucket (the image optimization
42
- * Lambda, `NextjsApi`'s S3 integrations) must use this rather than the
51
+ * Consumers that read assets back out of the bucket (the runtime's image
52
+ * optimizer, `NextjsApi`'s S3 integrations) must use this rather than the
43
53
  * `basePath` prop, since `overrides.bucketDeploymentProps` can replace the
44
- * prefix outright.
54
+ * prefix outright. Nor can they derive it from the app's own `basePath`: that
55
+ * is the prefix of the *URL* the app is served at, which for the API Gateway
56
+ * deployment types is the stage name and has nothing to do with where the
57
+ * bytes were uploaded.
45
58
  */
46
59
  readonly keyPrefix: string;
47
60
  private stagingDir?;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.NextjsStaticAssets = void 0;
4
+ exports.staticAssetsObjectsPattern = staticAssetsObjectsPattern;
4
5
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
5
6
  const node_fs_1 = require("node:fs");
6
7
  const node_os_1 = require("node:os");
@@ -11,21 +12,37 @@ const aws_s3_deployment_1 = require("aws-cdk-lib/aws-s3-deployment");
11
12
  const constructs_1 = require("constructs");
12
13
  const constants_1 = require("./constants");
13
14
  const base_path_1 = require("./utils/base-path");
15
+ /**
16
+ * The S3 object key pattern covering every static asset uploaded under
17
+ * `keyPrefix` (`NextjsStaticAssets.keyPrefix`): `"base/*"`, or `"*"` at the
18
+ * bucket root. For scoping the compute's read grant to the app's own objects
19
+ * when several apps share one bucket.
20
+ */
21
+ function staticAssetsObjectsPattern(keyPrefix) {
22
+ if (keyPrefix && aws_cdk_lib_1.Token.isUnresolved(keyPrefix)) {
23
+ return "*";
24
+ }
25
+ const prefix = (0, base_path_1.normalizeBasePath)(keyPrefix);
26
+ return prefix ? `${prefix}/*` : "*";
27
+ }
14
28
  /**
15
29
  * Creates S3 Bucket for public and _next/static assets and deploys them using S3Deployment.
16
30
  */
17
31
  class NextjsStaticAssets extends constructs_1.Construct {
18
- static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsStaticAssets", version: "0.6.2" };
32
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsStaticAssets", version: "0.7.1" };
19
33
  bucket;
20
34
  deployment;
21
35
  /**
22
36
  * S3 key prefix the assets are actually uploaded under, normalized to a bare
23
37
  * path segment (empty when they live at the bucket root).
24
38
  *
25
- * Consumers that read assets back out of the bucket (the image optimization
26
- * Lambda, `NextjsApi`'s S3 integrations) must use this rather than the
39
+ * Consumers that read assets back out of the bucket (the runtime's image
40
+ * optimizer, `NextjsApi`'s S3 integrations) must use this rather than the
27
41
  * `basePath` prop, since `overrides.bucketDeploymentProps` can replace the
28
- * prefix outright.
42
+ * prefix outright. Nor can they derive it from the app's own `basePath`: that
43
+ * is the prefix of the *URL* the app is served at, which for the API Gateway
44
+ * deployment types is the stage name and has nothing to do with where the
45
+ * bytes were uploaded.
29
46
  */
30
47
  keyPrefix;
31
48
  stagingDir;
@@ -146,4 +163,4 @@ class NextjsStaticAssets extends constructs_1.Construct {
146
163
  }
147
164
  }
148
165
  exports.NextjsStaticAssets = NextjsStaticAssets;
149
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV4dGpzLXN0YXRpYy1hc3NldHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbmV4dGpzLXN0YXRpYy1hc3NldHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLHFDQU9pQjtBQUNqQixxQ0FBaUM7QUFDakMseUNBQWlDO0FBQ2pDLDZDQUE0QztBQUM1QywrQ0FNNEI7QUFDNUIscUVBSXVDO0FBQ3ZDLDJDQUF1QztBQUN2QywyQ0FBeUM7QUFDekMsaURBQXNEO0FBK0J0RDs7R0FFRztBQUNILE1BQWEsa0JBQW1CLFNBQVEsc0JBQVM7O0lBQy9DLE1BQU0sQ0FBVTtJQUNoQixVQUFVLENBQW1CO0lBQzdCOzs7Ozs7OztPQVFHO0lBQ00sU0FBUyxDQUFTO0lBQ25CLFVBQVUsQ0FBVTtJQUVwQixLQUFLLENBQTBCO0lBRXZDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBOEI7UUFDdEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDbEQsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUM1QyxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7OztPQVlHO0lBQ0ssZ0JBQWdCO1FBQ3RCLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUscUJBQXFCLENBQUM7UUFDeEUsTUFBTSxNQUFNLEdBQ1YsbUJBQW1CLEVBQUUsb0JBQW9CLEtBQUssU0FBUztZQUNyRCxDQUFDLENBQUMsbUJBQW1CLENBQUMsb0JBQW9CO1lBQzFDLENBQUMsQ0FBQyxJQUFJLENB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LE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFFOUMseUJBQXlCO2dCQUN6QixJQUFBLG1CQUFTLEVBQUMsT0FBTyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBRXhDLHFCQUFxQjtnQkFDckIsSUFBQSxnQkFBTSxFQUFDLFVBQVUsRUFBRSxhQUFhLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDdkQsU0FBUyxHQUFHLElBQUksQ0FBQztZQUNuQixDQUFDO1lBRUQsT0FBTyxTQUFTLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQzVDLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLHNCQUFVLG9DQUFvQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3hFLG9CQUFvQjtZQUNwQixJQUFJLENBQUM7Z0JBQ0gsSUFBQSxnQkFBTSxFQUFDLFVBQVUsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDdkQsQ0FBQztZQUFDLE1BQU0sQ0FBQztnQkFDUCx3QkFBd0I7WUFDMUIsQ0FBQztZQUNELE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxlQUFlLENBQUMsT0FBZTtRQUNyQyxJQUFJLENBQUM7WUFDSCxPQUFPLElBQUEsb0JBQVUsRUFBQyxPQUFPLENBQUMsSUFBSSxJQUFBLGtCQUFRLEVBQUMsT0FBTyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDaEUsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztJQUNILENBQUM7O0FBOUlILGdEQStJQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGNwU3luYyxcbiAgZXhpc3RzU3luYyxcbiAgbWtkaXJTeW5jLFxuICBta2R0ZW1wU3luYyxcbiAgcm1TeW5jLFxuICBzdGF0U3luYyxcbn0gZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gXCJub2RlOm9zXCI7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgUmVtb3ZhbFBvbGljeSB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHtcbiAgQmxvY2tQdWJsaWNBY2Nlc3MsXG4gIEJ1Y2tldCxcbiAgQnVja2V0RW5jcnlwdGlvbixcbiAgQnVja2V0UHJvcHMsXG4gIElCdWNrZXQsXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtczNcIjtcbmltcG9ydCB7XG4gIEJ1Y2tldERlcGxveW1lbnQsXG4gIEJ1Y2tldERlcGxveW1lbnRQcm9wcyxcbiAgU291cmNlLFxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXMzLWRlcGxveW1lbnRcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBMT0dfUFJFRklYIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBub3JtYWxpemVCYXNlUGF0aCB9IGZyb20gXCIuL3V0aWxzL2Jhc2UtcGF0aFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5leHRqc1N0YXRpY0Fzc2V0c092ZXJyaWRlcyB7XG4gIHJlYWRvbmx5IGJ1Y2tldFByb3BzPzogQnVja2V0UHJvcHM7XG4gIHJlYWRvbmx5IGJ1Y2tldERlcGxveW1lbnRQcm9wcz86IEJ1Y2tldERlcGxveW1lbnRQcm9wcztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOZXh0anNTdGF0aWNBc3NldHNQcm9wcyB7XG4gIC8qKlxuICAgKiBCcmluZyB5b3VyIG93biBTMyBidWNrZXQgZm9yIHN0YXRpYyBhc3NldHMuIFdoZW4gcHJvdmlkZWQsIGNkay1uZXh0anNcbiAgICogd2lsbCBza2lwIGNyZWF0aW5nIGEgbmV3IGJ1Y2tldCBhbmQgZGVwbG95IGFzc2V0cyB0byB0aGlzIGJ1Y2tldCBpbnN0ZWFkLlxuICAgKiBVc2Ugd2l0aCBgYmFzZVBhdGhgIHRvIGlzb2xhdGUgYXNzZXRzIHBlciBicmFuY2ggd2hlbiBzaGFyaW5nIGEgYnVja2V0LlxuICAgKi9cbiAgcmVhZG9ubHkgYnVja2V0PzogSUJ1Y2tldDtcbiAgLyoqXG4gICAqIERpcmVjdG9yeSB3aGVyZSB0aGUgTmV4dC5qcyBhcHBsaWNhdGlvbiBpcyBsb2NhdGVkLlxuICAgKiBUaGlzIHNob3VsZCBjb250YWluIHRoZSAubmV4dCBkaXJlY3RvcnkgYW5kIG90aGVyIGJ1aWxkIGFydGlmYWN0cy5cbiAgICovXG4gIHJlYWRvbmx5IGJ1aWxkRGlyZWN0b3J5OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBCdWlsZCBJRCBmcm9tIE5leHRqc0J1aWxkIHRvIHRyYWNrIGFzc2V0IHZlcnNpb25zXG4gICAqL1xuICByZWFkb25seSBidWlsZElkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBQcmVmaXggdG8gdGhlIFVSSSBwYXRoIHRoZSBhcHAgd2lsbCBiZSBzZXJ2ZWQgYXQuXG4gICAqIEBleGFtcGxlIFwiL215LWJhc2UtcGF0aFwiXG4gICAqL1xuICByZWFkb25seSBiYXNlUGF0aD86IHN0cmluZztcbiAgcmVhZG9ubHkgb3ZlcnJpZGVzPzogTmV4dGpzU3RhdGljQXNzZXRzT3ZlcnJpZGVzO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgUzMgQnVja2V0IGZvciBwdWJsaWMgYW5kIF9uZXh0L3N0YXRpYyBhc3NldHMgYW5kIGRlcGxveXMgdGhlbSB1c2luZyBTM0RlcGxveW1lbnQuXG4gKi9cbmV4cG9ydCBjbGFzcyBOZXh0anNTdGF0aWNBc3NldHMgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBidWNrZXQ6IElCdWNrZXQ7XG4gIGRlcGxveW1lbnQ6IEJ1Y2tldERlcGxveW1lbnQ7XG4gIC8qKlxuICAgKiBTMyBrZXkgcHJlZml4IHRoZSBhc3NldHMgYXJlIGFjdHVhbGx5IHVwbG9hZGVkIHVuZGVyLCBub3JtYWxpemVkIHRvIGEgYmFyZVxuICAgKiBwYXRoIHNlZ21lbnQgKGVtcHR5IHdoZW4gdGhleSBsaXZlIGF0IHRoZSBidWNrZXQgcm9vdCkuXG4gICAqXG4gICAqIENvbnN1bWVycyB0aGF0IHJlYWQgYXNzZXRzIGJhY2sgb3V0IG9mIHRoZSBidWNrZXQgKHRoZSBpbWFnZSBvcHRpbWl6YXRpb25cbiAgICogTGFtYmRhLCBgTmV4dGpzQXBpYCdzIFMzIGludGVncmF0aW9ucykgbXVzdCB1c2UgdGhpcyByYXRoZXIgdGhhbiB0aGVcbiAgICogYGJhc2VQYXRoYCBwcm9wLCBzaW5jZSBgb3ZlcnJpZGVzLmJ1Y2tldERlcGxveW1lbnRQcm9wc2AgY2FuIHJlcGxhY2UgdGhlXG4gICAqIHByZWZpeCBvdXRyaWdodC5cbiAgICovXG4gIHJlYWRvbmx5IGtleVByZWZpeDogc3RyaW5nO1xuICBwcml2YXRlIHN0YWdpbmdEaXI/OiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBwcm9wczogTmV4dGpzU3RhdGljQXNzZXRzUHJvcHM7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IE5leHRqc1N0YXRpY0Fzc2V0c1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICB0aGlzLnByb3BzID0gcHJvcHM7XG4gICAgdGhpcy5rZXlQcmVmaXggPSB0aGlzLnJlc29sdmVLZXlQcmVmaXgoKTtcbiAgICB0aGlzLmJ1Y2tldCA9IHByb3BzLmJ1Y2tldCA/PyB0aGlzLmNyZWF0ZUJ1Y2tldCgpO1xuICAgIHRoaXMuZGVwbG95bWVudCA9IHRoaXMuY3JlYXRlRGVwbG95bWVudCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIHRoZSBzaW5nbGUgcHJlZml4IGJvdGggdGhlIHVwbG9hZCBhbmQgdGhlIFVSTHMgdXNlLiBBXG4gICAqIGBidWNrZXREZXBsb3ltZW50UHJvcHMuZGVzdGluYXRpb25LZXlQcmVmaXhgIG92ZXJyaWRlIHdpbnMgb3ZlciBgYmFzZVBhdGhgLFxuICAgKiBidXQgaXQncyBub3JtYWxpemVkIGhlcmUgYW5kIGBjcmVhdGVEZXBsb3ltZW50YCBzZXRzIHRoZSBub3JtYWxpemVkIHZhbHVlXG4gICAqIGFmdGVyIHRoZSBvdmVycmlkZSBzcHJlYWQsIHNvIGBrZXlQcmVmaXhgIGNhbid0IGRyaWZ0IGZyb20gd2hlcmUgdGhlIGFzc2V0c1xuICAgKiBsYW5kLlxuICAgKlxuICAgKiBDb21wYXJlZCBhZ2FpbnN0IGB1bmRlZmluZWRgIHJhdGhlciB0aGFuIHRlc3RlZCB3aXRoIGBpbmAsIGJlY2F1c2UgYSBKU0lJXG4gICAqIGxhbmd1YWdlIGJpbmRpbmcgKG9yIGEgcHJvZ3JhbW1hdGljYWxseSBidWlsdCBwcm9wcyBvYmplY3QpIGNhbiBtYXRlcmlhbGl6ZVxuICAgKiBhbiB1bnNldCBvcHRpb25hbCBmaWVsZCBhcyBhbiBleHBsaWNpdCBgdW5kZWZpbmVkYC4gVHJlYXRpbmcgdGhhdCBhcyBhblxuICAgKiBpbnRlbnRpb25hbCBcIm1vdmUgdGhlIGFzc2V0cyB0byB0aGUgYnVja2V0IHJvb3RcIiBvdmVycmlkZSB3b3VsZCBzaWxlbnRseVxuICAgKiBkcm9wIGBiYXNlUGF0aGAgZnJvbSB0aGUgcHJlZml4LlxuICAgKi9cbiAgcHJpdmF0ZSByZXNvbHZlS2V5UHJlZml4KCk6IHN0cmluZyB7XG4gICAgY29uc3QgZGVwbG95bWVudE92ZXJyaWRlcyA9IHRoaXMucHJvcHMub3ZlcnJpZGVzPy5idWNrZXREZXBsb3ltZW50UHJvcHM7XG4gICAgY29uc3QgcHJlZml4ID1cbiAgICAgIGRlcGxveW1lbnRPdmVycmlkZXM/LmRlc3RpbmF0aW9uS2V5UHJlZml4ICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBkZXBsb3ltZW50T3ZlcnJpZGVzLmRlc3RpbmF0aW9uS2V5UHJlZml4XG4gICAgICAgIDogdGhpcy5wcm9wcy5iYXNlUGF0aDtcbiAgICByZXR1cm4gbm9ybWFsaXplQmFzZVBhdGgocHJlZml4KTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQnVja2V0KCkge1xuICAgIHJldHVybiBuZXcgQnVja2V0KHRoaXMsIFwiQnVja2V0XCIsIHtcbiAgICAgIHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgICAgIGF1dG9EZWxldGVPYmplY3RzOiB0cnVlLFxuICAgICAgZW5mb3JjZVNTTDogdHJ1ZSxcbiAgICAgIGJsb2NrUHVibGljQWNjZXNzOiBCbG9ja1B1YmxpY0FjY2Vzcy5CTE9DS19BTEwsXG4gICAgICBlbmNyeXB0aW9uOiBCdWNrZXRFbmNyeXB0aW9uLlMzX01BTkFHRUQsXG4gICAgICBtaW5pbXVtVExTVmVyc2lvbjogMS4yLFxuICAgICAgLi4udGhpcy5wcm9wcy5vdmVycmlkZXM/LmJ1Y2tldFByb3BzLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVEZXBsb3ltZW50KCkge1xuICAgIC8vIENyZWF0ZSBhIHN0YWdpbmcgZGlyZWN0b3J5IHdpdGggdGhlIGNvcnJlY3Qgc3RydWN0dXJlXG4gICAgdGhpcy5zdGFnaW5nRGlyID0gdGhpcy5jcmVhdGVTdGFnaW5nRGlyZWN0b3J5KCk7XG5cbiAgICBpZiAoIXRoaXMuc3RhZ2luZ0Rpcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgTm8gc3RhdGljIGFzc2V0cyBmb3VuZCB0byBkZXBsb3kuIEVuc3VyZSB5b3VyIE5leHQuanMgYnVpbGQgb3V0cHV0IGNvbnRhaW5zIGVpdGhlcjpcbiAgICAgICAgLSBBICdwdWJsaWMnIGRpcmVjdG9yeSBhdDogJHtqb2luKHRoaXMucHJvcHMuYnVpbGREaXJlY3RvcnksIFwicHVibGljXCIpfVxuICAgICAgICAtIEEgJy5uZXh0L3N0YXRpYycgZGlyZWN0b3J5IGF0OiAke2pvaW4odGhpcy5wcm9wcy5idWlsZERpcmVjdG9yeSwgXCIubmV4dFwiLCBcInN0YXRpY1wiKX1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEJ1Y2tldERlcGxveW1lbnQodGhpcywgXCJEZXBsb3ltZW50XCIsIHtcbiAgICAgIHNvdXJjZXM6IFtTb3VyY2UuYXNzZXQodGhpcy5zdGFnaW5nRGlyKV0sXG4gICAgICBkZXN0aW5hdGlvbkJ1Y2tldDogdGhpcy5idWNrZXQsXG4gICAgICAvLyBBZGQgQlVJTERfSUQgYXMgbWV0YWRhdGEgdG8gYWxsIG9iamVjdHMgZm9yIHZlcnNpb24gdHJhY2tpbmdcbiAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgIEJVSUxEX0lEOiB0aGlzLnByb3BzLmJ1aWxkSWQsXG4gICAgICB9LFxuICAgICAgcHJ1bmU6IGZhbHNlLCAvLyBEb24ndCBkZWxldGUgZXhpc3RpbmcgYXNzZXRzIHRvIHByZXZlbnQgNDA0cyBkdXJpbmcgZGVwbG95bWVudCwgcHJ1bmluZyB3aWxsIGJlIGhhbmRsZWQgYnkgcG9zdC1kZXBsb3lcbiAgICAgIC8vIFMzRGVwbG95bWVudCBhdXRvbWF0aWNhbGx5IGRldGVjdHMgY29udGVudCB0eXBlcyBiYXNlZCBvbiBmaWxlIGV4dGVuc2lvbnNcbiAgICAgIC4uLnRoaXMucHJvcHMub3ZlcnJpZGVzPy5idWNrZXREZXBsb3ltZW50UHJvcHMsXG4gICAgICAvLyBTZXQgYWZ0ZXIgdGhlIHNwcmVhZDogYHJlc29sdmVLZXlQcmVmaXhgIGFscmVhZHkgZm9sZGVkIGluIGFueVxuICAgICAgLy8gYGRlc3RpbmF0aW9uS2V5UHJlZml4YCBvdmVycmlkZSwgc28gdGhpcyBpcyB0aGUgbm9ybWFsaXplZCBmb3JtIG9mIGl0LlxuICAgICAgLy8gTGV0dGluZyB0aGUgcmF3IG92ZXJyaWRlIHRocm91Z2ggaGVyZSB3b3VsZCB1cGxvYWQgdGhlIGFzc2V0cyBzb21ld2hlcmVcbiAgICAgIC8vIG90aGVyIHRoYW4gdGhlIGBrZXlQcmVmaXhgIHVzZWQgdG8gYnVpbGQgdGhlaXIgVVJMcy5cbiAgICAgIGRlc3RpbmF0aW9uS2V5UHJlZml4OiB0aGlzLmtleVByZWZpeCB8fCB1bmRlZmluZWQsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgc3RhZ2luZyBkaXJlY3Rvcnkgd2l0aCB0aGUgY29ycmVjdCBzdHJ1Y3R1cmU6XG4gICAqIC0gcHVibGljLyBmaWxlcyBnbyB0byByb290XG4gICAqIC0gLm5leHQvc3RhdGljLyBmaWxlcyBnbyB0byBfbmV4dC9zdGF0aWMvXG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZVN0YWdpbmdEaXJlY3RvcnkoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBzdGFnaW5nRGlyID0gbWtkdGVtcFN5bmMoam9pbih0bXBkaXIoKSwgXCJuZXh0anMtYXNzZXRzLVwiKSk7XG4gICAgbGV0IGhhc0Fzc2V0cyA9IGZhbHNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIENvcHkgcHVibGljIGRpcmVjdG9yeSBjb250ZW50cyB0byBzdGFnaW5nIHJvb3RcbiAgICAgIGNvbnN0IHB1YmxpY1BhdGggPSBqb2luKHRoaXMucHJvcHMuYnVpbGREaXJlY3RvcnksIFwicHVibGljXCIpO1xuICAgICAgaWYgKHRoaXMuZGlyZWN0b3J5RXhpc3RzKHB1YmxpY1BhdGgpKSB7XG4gICAgICAgIGNwU3luYyhwdWJsaWNQYXRoLCBzdGFnaW5nRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgaGFzQXNzZXRzID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgLy8gQ29weSAubmV4dC9zdGF0aWMgdG8gc3RhZ2luZy9fbmV4dC9zdGF0aWNcbiAgICAgIGNvbnN0IHN0YXRpY1BhdGggPSBqb2luKHRoaXMucHJvcHMuYnVpbGREaXJlY3RvcnksIFwiLm5leHRcIiwgXCJzdGF0aWNcIik7XG4gICAgICBpZiAodGhpcy5kaXJlY3RvcnlFeGlzdHMoc3RhdGljUGF0aCkpIHtcbiAgICAgICAgY29uc3QgbmV4dERpciA9IGpvaW4oc3RhZ2luZ0RpciwgXCJfbmV4dFwiKTtcbiAgICAgICAgY29uc3Qgc3RhdGljRGVzdERpciA9IGpvaW4obmV4dERpciwgXCJzdGF0aWNcIik7XG5cbiAgICAgICAgLy8gQ3JlYXRlIF9uZXh0IGRpcmVjdG9yeVxuICAgICAgICBta2RpclN5bmMobmV4dERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgICAgICAgLy8gQ29weSBzdGF0aWMgYXNzZXRzXG4gICAgICAgIGNwU3luYyhzdGF0aWNQYXRoLCBzdGF0aWNEZXN0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgaGFzQXNzZXRzID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGhhc0Fzc2V0cyA/IHN0YWdpbmdEaXIgOiB1bmRlZmluZWQ7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYCR7TE9HX1BSRUZJWH0gRXJyb3IgY3JlYXRpbmcgc3RhZ2luZyBkaXJlY3Rvcnk6YCwgZXJyb3IpO1xuICAgICAgLy8gQ2xlYW4gdXAgb24gZXJyb3JcbiAgICAgIHRyeSB7XG4gICAgICAgIHJtU3luYyhzdGFnaW5nRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gSWdub3JlIGNsZWFudXAgZXJyb3JzXG4gICAgICB9XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhIGRpcmVjdG9yeSBleGlzdHNcbiAgICovXG4gIHByaXZhdGUgZGlyZWN0b3J5RXhpc3RzKGRpclBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZXhpc3RzU3luYyhkaXJQYXRoKSAmJiBzdGF0U3luYyhkaXJQYXRoKS5pc0RpcmVjdG9yeSgpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufVxuIl19
166
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV4dGpzLXN0YXRpYy1hc3NldHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbmV4dGpzLXN0YXRpYy1hc3NldHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBaUNBLGdFQU1DOztBQXZDRCxxQ0FPaUI7QUFDakIscUNBQWlDO0FBQ2pDLHlDQUFpQztBQUNqQyw2Q0FBbUQ7QUFDbkQsK0NBTTRCO0FBQzVCLHFFQUl1QztBQUN2QywyQ0FBdUM7QUFDdkMsMkNBQXlDO0FBQ3pDLGlEQUFzRDtBQUV0RDs7Ozs7R0FLRztBQUNILFNBQWdCLDBCQUEwQixDQUFDLFNBQWtCO0lBQzNELElBQUksU0FBUyxJQUFJLG1CQUFLLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDL0MsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBQ0QsTUFBTSxNQUFNLEdBQUcsSUFBQSw2QkFBaUIsRUFBQyxTQUFTLENBQUMsQ0FBQztJQUM1QyxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQ3RDLENBQUM7QUFrQ0Q7O0dBRUc7QUFDSCxNQUFhLGtCQUFtQixTQUFRLHNCQUFTOztJQUMvQyxNQUFNLENBQVU7SUFDaEIsVUFBVSxDQUFtQjtJQUM3Qjs7Ozs7Ozs7Ozs7T0FXRztJQUNNLFNBQVMsQ0FBUztJQUNuQixVQUFVLENBQVU7SUFFcEIsS0FBSyxDQUEwQjtJQUV2QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQThCO1FBQ3RFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDakIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN6QyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFD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O0lBQ0ssZUFBZSxDQUFDLE9BQWU7UUFDckMsSUFBSSxDQUFDO1lBQ0gsT0FBTyxJQUFBLG9CQUFVLEVBQUMsT0FBTyxDQUFDLElBQUksSUFBQSxrQkFBUSxFQUFDLE9BQU8sQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2hFLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDOztBQWpKSCxnREFrSkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBjcFN5bmMsXG4gIGV4aXN0c1N5bmMsXG4gIG1rZGlyU3luYyxcbiAgbWtkdGVtcFN5bmMsXG4gIHJtU3luYyxcbiAgc3RhdFN5bmMsXG59IGZyb20gXCJub2RlOmZzXCI7XG5pbXBvcnQgeyB0bXBkaXIgfSBmcm9tIFwibm9kZTpvc1wiO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IFJlbW92YWxQb2xpY3ksIFRva2VuIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQge1xuICBCbG9ja1B1YmxpY0FjY2VzcyxcbiAgQnVja2V0LFxuICBCdWNrZXRFbmNyeXB0aW9uLFxuICBCdWNrZXRQcm9wcyxcbiAgSUJ1Y2tldCxcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zM1wiO1xuaW1wb3J0IHtcbiAgQnVja2V0RGVwbG95bWVudCxcbiAgQnVja2V0RGVwbG95bWVudFByb3BzLFxuICBTb3VyY2UsXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtczMtZGVwbG95bWVudFwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IExPR19QUkVGSVggfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IG5vcm1hbGl6ZUJhc2VQYXRoIH0gZnJvbSBcIi4vdXRpbHMvYmFzZS1wYXRoXCI7XG5cbi8qKlxuICogVGhlIFMzIG9iamVjdCBrZXkgcGF0dGVybiBjb3ZlcmluZyBldmVyeSBzdGF0aWMgYXNzZXQgdXBsb2FkZWQgdW5kZXJcbiAqIGBrZXlQcmVmaXhgIChgTmV4dGpzU3RhdGljQXNzZXRzLmtleVByZWZpeGApOiBgXCJiYXNlLypcImAsIG9yIGBcIipcImAgYXQgdGhlXG4gKiBidWNrZXQgcm9vdC4gRm9yIHNjb3BpbmcgdGhlIGNvbXB1dGUncyByZWFkIGdyYW50IHRvIHRoZSBhcHAncyBvd24gb2JqZWN0c1xuICogd2hlbiBzZXZlcmFsIGFwcHMgc2hhcmUgb25lIGJ1Y2tldC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0YXRpY0Fzc2V0c09iamVjdHNQYXR0ZXJuKGtleVByZWZpeD86IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmIChrZXlQcmVmaXggJiYgVG9rZW4uaXNVbnJlc29sdmVkKGtleVByZWZpeCkpIHtcbiAgICByZXR1cm4gXCIqXCI7XG4gIH1cbiAgY29uc3QgcHJlZml4ID0gbm9ybWFsaXplQmFzZVBhdGgoa2V5UHJlZml4KTtcbiAgcmV0dXJuIHByZWZpeCA/IGAke3ByZWZpeH0vKmAgOiBcIipcIjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOZXh0anNTdGF0aWNBc3NldHNPdmVycmlkZXMge1xuICByZWFkb25seSBidWNrZXRQcm9wcz86IEJ1Y2tldFByb3BzO1xuICByZWFkb25seSBidWNrZXREZXBsb3ltZW50UHJvcHM/OiBCdWNrZXREZXBsb3ltZW50UHJvcHM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmV4dGpzU3RhdGljQXNzZXRzUHJvcHMge1xuICAvKipcbiAgICogQnJpbmcgeW91ciBvd24gUzMgYnVja2V0IGZvciBzdGF0aWMgYXNzZXRzLiBXaGVuIHByb3ZpZGVkLCBjZGstbmV4dGpzXG4gICAqIHdpbGwgc2tpcCBjcmVhdGluZyBhIG5ldyBidWNrZXQgYW5kIGRlcGxveSBhc3NldHMgdG8gdGhpcyBidWNrZXQgaW5zdGVhZC5cbiAgICogQ2FuIGJlIHNoYXJlZCBvbmx5IGJldHdlZW4gZGVwbG95bWVudHMgd2l0aCBkaWZmZXJlbnQgYGJhc2VQYXRoYHMgKFMzIGtleVxuICAgKiBwcmVmaXhlcyk6IHBydW5pbmcgaXMgc2NvcGVkIHRvIGA8YmFzZVBhdGg+L19uZXh0L2AsIGJ1dCB0d28gZGVwbG95bWVudHNcbiAgICogdW5kZXIgdGhlIHNhbWUgcHJlZml4IG92ZXJ3cml0ZSBlYWNoIG90aGVyJ3MgYHB1YmxpYy9gIGZpbGVzIGFuZCBwcnVuZSBlYWNoXG4gICAqIG90aGVyJ3Mgb2xkZXIgYF9uZXh0L2AgYXNzZXRzLlxuICAgKi9cbiAgcmVhZG9ubHkgYnVja2V0PzogSUJ1Y2tldDtcbiAgLyoqXG4gICAqIERpcmVjdG9yeSB3aGVyZSB0aGUgTmV4dC5qcyBhcHBsaWNhdGlvbiBpcyBsb2NhdGVkLlxuICAgKiBUaGlzIHNob3VsZCBjb250YWluIHRoZSAubmV4dCBkaXJlY3RvcnkgYW5kIG90aGVyIGJ1aWxkIGFydGlmYWN0cy5cbiAgICovXG4gIHJlYWRvbmx5IGJ1aWxkRGlyZWN0b3J5OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBCdWlsZCBJRCBmcm9tIE5leHRqc0J1aWxkIHRvIHRyYWNrIGFzc2V0IHZlcnNpb25zXG4gICAqL1xuICByZWFkb25seSBidWlsZElkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBQcmVmaXggdG8gdGhlIFVSSSBwYXRoIHRoZSBhcHAgd2lsbCBiZSBzZXJ2ZWQgYXQuXG4gICAqIEBleGFtcGxlIFwiL215LWJhc2UtcGF0aFwiXG4gICAqL1xuICByZWFkb25seSBiYXNlUGF0aD86IHN0cmluZztcbiAgcmVhZG9ubHkgb3ZlcnJpZGVzPzogTmV4dGpzU3RhdGljQXNzZXRzT3ZlcnJpZGVzO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgUzMgQnVja2V0IGZvciBwdWJsaWMgYW5kIF9uZXh0L3N0YXRpYyBhc3NldHMgYW5kIGRlcGxveXMgdGhlbSB1c2luZyBTM0RlcGxveW1lbnQuXG4gKi9cbmV4cG9ydCBjbGFzcyBOZXh0anNTdGF0aWNBc3NldHMgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBidWNrZXQ6IElCdWNrZXQ7XG4gIGRlcGxveW1lbnQ6IEJ1Y2tldERlcGxveW1lbnQ7XG4gIC8qKlxuICAgKiBTMyBrZXkgcHJlZml4IHRoZSBhc3NldHMgYXJlIGFjdHVhbGx5IHVwbG9hZGVkIHVuZGVyLCBub3JtYWxpemVkIHRvIGEgYmFyZVxuICAgKiBwYXRoIHNlZ21lbnQgKGVtcHR5IHdoZW4gdGhleSBsaXZlIGF0IHRoZSBidWNrZXQgcm9vdCkuXG4gICAqXG4gICAqIENvbnN1bWVycyB0aGF0IHJlYWQgYXNzZXRzIGJhY2sgb3V0IG9mIHRoZSBidWNrZXQgKHRoZSBydW50aW1lJ3MgaW1hZ2VcbiAgICogb3B0aW1pemVyLCBgTmV4dGpzQXBpYCdzIFMzIGludGVncmF0aW9ucykgbXVzdCB1c2UgdGhpcyByYXRoZXIgdGhhbiB0aGVcbiAgICogYGJhc2VQYXRoYCBwcm9wLCBzaW5jZSBgb3ZlcnJpZGVzLmJ1Y2tldERlcGxveW1lbnRQcm9wc2AgY2FuIHJlcGxhY2UgdGhlXG4gICAqIHByZWZpeCBvdXRyaWdodC4gTm9yIGNhbiB0aGV5IGRlcml2ZSBpdCBmcm9tIHRoZSBhcHAncyBvd24gYGJhc2VQYXRoYDogdGhhdFxuICAgKiBpcyB0aGUgcHJlZml4IG9mIHRoZSAqVVJMKiB0aGUgYXBwIGlzIHNlcnZlZCBhdCwgd2hpY2ggZm9yIHRoZSBBUEkgR2F0ZXdheVxuICAgKiBkZXBsb3ltZW50IHR5cGVzIGlzIHRoZSBzdGFnZSBuYW1lIGFuZCBoYXMgbm90aGluZyB0byBkbyB3aXRoIHdoZXJlIHRoZVxuICAgKiBieXRlcyB3ZXJlIHVwbG9hZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkga2V5UHJlZml4OiBzdHJpbmc7XG4gIHByaXZhdGUgc3RhZ2luZ0Rpcj86IHN0cmluZztcblxuICBwcml2YXRlIHByb3BzOiBOZXh0anNTdGF0aWNBc3NldHNQcm9wcztcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogTmV4dGpzU3RhdGljQXNzZXRzUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgICB0aGlzLmtleVByZWZpeCA9IHRoaXMucmVzb2x2ZUtleVByZWZpeCgpO1xuICAgIHRoaXMuYnVja2V0ID0gcHJvcHMuYnVja2V0ID8/IHRoaXMuY3JlYXRlQnVja2V0KCk7XG4gICAgdGhpcy5kZXBsb3ltZW50ID0gdGhpcy5jcmVhdGVEZXBsb3ltZW50KCk7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgdGhlIHNpbmdsZSBwcmVmaXggYm90aCB0aGUgdXBsb2FkIGFuZCB0aGUgVVJMcyB1c2UuIEFcbiAgICogYGJ1Y2tldERlcGxveW1lbnRQcm9wcy5kZXN0aW5hdGlvbktleVByZWZpeGAgb3ZlcnJpZGUgd2lucyBvdmVyIGBiYXNlUGF0aGAsXG4gICAqIGJ1dCBpdCdzIG5vcm1hbGl6ZWQgaGVyZSBhbmQgYGNyZWF0ZURlcGxveW1lbnRgIHNldHMgdGhlIG5vcm1hbGl6ZWQgdmFsdWVcbiAgICogYWZ0ZXIgdGhlIG92ZXJyaWRlIHNwcmVhZCwgc28gYGtleVByZWZpeGAgY2FuJ3QgZHJpZnQgZnJvbSB3aGVyZSB0aGUgYXNzZXRzXG4gICAqIGxhbmQuXG4gICAqXG4gICAqIENvbXBhcmVkIGFnYWluc3QgYHVuZGVmaW5lZGAgcmF0aGVyIHRoYW4gdGVzdGVkIHdpdGggYGluYCwgYmVjYXVzZSBhIEpTSUlcbiAgICogbGFuZ3VhZ2UgYmluZGluZyAob3IgYSBwcm9ncmFtbWF0aWNhbGx5IGJ1aWx0IHByb3BzIG9iamVjdCkgY2FuIG1hdGVyaWFsaXplXG4gICAqIGFuIHVuc2V0IG9wdGlvbmFsIGZpZWxkIGFzIGFuIGV4cGxpY2l0IGB1bmRlZmluZWRgLiBUcmVhdGluZyB0aGF0IGFzIGFuXG4gICAqIGludGVudGlvbmFsIFwibW92ZSB0aGUgYXNzZXRzIHRvIHRoZSBidWNrZXQgcm9vdFwiIG92ZXJyaWRlIHdvdWxkIHNpbGVudGx5XG4gICAqIGRyb3AgYGJhc2VQYXRoYCBmcm9tIHRoZSBwcmVmaXguXG4gICAqL1xuICBwcml2YXRlIHJlc29sdmVLZXlQcmVmaXgoKTogc3RyaW5nIHtcbiAgICBjb25zdCBkZXBsb3ltZW50T3ZlcnJpZGVzID0gdGhpcy5wcm9wcy5vdmVycmlkZXM/LmJ1Y2tldERlcGxveW1lbnRQcm9wcztcbiAgICBjb25zdCBwcmVmaXggPVxuICAgICAgZGVwbG95bWVudE92ZXJyaWRlcz8uZGVzdGluYXRpb25LZXlQcmVmaXggIT09IHVuZGVmaW5lZFxuICAgICAgICA/IGRlcGxveW1lbnRPdmVycmlkZXMuZGVzdGluYXRpb25LZXlQcmVmaXhcbiAgICAgICAgOiB0aGlzLnByb3BzLmJhc2VQYXRoO1xuICAgIHJldHVybiBub3JtYWxpemVCYXNlUGF0aChwcmVmaXgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVCdWNrZXQoKSB7XG4gICAgcmV0dXJuIG5ldyBCdWNrZXQodGhpcywgXCJCdWNrZXRcIiwge1xuICAgICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgICAgYXV0b0RlbGV0ZU9iamVjdHM6IHRydWUsXG4gICAgICBlbmZvcmNlU1NMOiB0cnVlLFxuICAgICAgYmxvY2tQdWJsaWNBY2Nlc3M6IEJsb2NrUHVibGljQWNjZXNzLkJMT0NLX0FMTCxcbiAgICAgIGVuY3J5cHRpb246IEJ1Y2tldEVuY3J5cHRpb24uUzNfTUFOQUdFRCxcbiAgICAgIG1pbmltdW1UTFNWZXJzaW9uOiAxLjIsXG4gICAgICAuLi50aGlzLnByb3BzLm92ZXJyaWRlcz8uYnVja2V0UHJvcHMsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZURlcGxveW1lbnQoKSB7XG4gICAgLy8gQ3JlYXRlIGEgc3RhZ2luZyBkaXJlY3Rvcnkgd2l0aCB0aGUgY29ycmVjdCBzdHJ1Y3R1cmVcbiAgICB0aGlzLnN0YWdpbmdEaXIgPSB0aGlzLmNyZWF0ZVN0YWdpbmdEaXJlY3RvcnkoKTtcblxuICAgIGlmICghdGhpcy5zdGFnaW5nRGlyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBObyBzdGF0aWMgYXNzZXRzIGZvdW5kIHRvIGRlcGxveS4gRW5zdXJlIHlvdXIgTmV4dC5qcyBidWlsZCBvdXRwdXQgY29udGFpbnMgZWl0aGVyOlxuICAgICAgICAtIEEgJ3B1YmxpYycgZGlyZWN0b3J5IGF0OiAke2pvaW4odGhpcy5wcm9wcy5idWlsZERpcmVjdG9yeSwgXCJwdWJsaWNcIil9XG4gICAgICAgIC0gQSAnLm5leHQvc3RhdGljJyBkaXJlY3RvcnkgYXQ6ICR7am9pbih0aGlzLnByb3BzLmJ1aWxkRGlyZWN0b3J5LCBcIi5uZXh0XCIsIFwic3RhdGljXCIpfWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgQnVja2V0RGVwbG95bWVudCh0aGlzLCBcIkRlcGxveW1lbnRcIiwge1xuICAgICAgc291cmNlczogW1NvdXJjZS5hc3NldCh0aGlzLnN0YWdpbmdEaXIpXSxcbiAgICAgIGRlc3RpbmF0aW9uQnVja2V0OiB0aGlzLmJ1Y2tldCxcbiAgICAgIC8vIEFkZCBCVUlMRF9JRCBhcyBtZXRhZGF0YSB0byBhbGwgb2JqZWN0cyBmb3IgdmVyc2lvbiB0cmFja2luZ1xuICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgQlVJTERfSUQ6IHRoaXMucHJvcHMuYnVpbGRJZCxcbiAgICAgIH0sXG4gICAgICBwcnVuZTogZmFsc2UsIC8vIERvbid0IGRlbGV0ZSBleGlzdGluZyBhc3NldHMgdG8gcHJldmVudCA0MDRzIGR1cmluZyBkZXBsb3ltZW50LCBwcnVuaW5nIHdpbGwgYmUgaGFuZGxlZCBieSBwb3N0LWRlcGxveVxuICAgICAgLy8gUzNEZXBsb3ltZW50IGF1dG9tYXRpY2FsbHkgZGV0ZWN0cyBjb250ZW50IHR5cGVzIGJhc2VkIG9uIGZpbGUgZXh0ZW5zaW9uc1xuICAgICAgLi4udGhpcy5wcm9wcy5vdmVycmlkZXM/LmJ1Y2tldERlcGxveW1lbnRQcm9wcyxcbiAgICAgIC8vIFNldCBhZnRlciB0aGUgc3ByZWFkOiBgcmVzb2x2ZUtleVByZWZpeGAgYWxyZWFkeSBmb2xkZWQgaW4gYW55XG4gICAgICAvLyBgZGVzdGluYXRpb25LZXlQcmVmaXhgIG92ZXJyaWRlLCBzbyB0aGlzIGlzIHRoZSBub3JtYWxpemVkIGZvcm0gb2YgaXQuXG4gICAgICAvLyBMZXR0aW5nIHRoZSByYXcgb3ZlcnJpZGUgdGhyb3VnaCBoZXJlIHdvdWxkIHVwbG9hZCB0aGUgYXNzZXRzIHNvbWV3aGVyZVxuICAgICAgLy8gb3RoZXIgdGhhbiB0aGUgYGtleVByZWZpeGAgdXNlZCB0byBidWlsZCB0aGVpciBVUkxzLlxuICAgICAgZGVzdGluYXRpb25LZXlQcmVmaXg6IHRoaXMua2V5UHJlZml4IHx8IHVuZGVmaW5lZCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBzdGFnaW5nIGRpcmVjdG9yeSB3aXRoIHRoZSBjb3JyZWN0IHN0cnVjdHVyZTpcbiAgICogLSBwdWJsaWMvIGZpbGVzIGdvIHRvIHJvb3RcbiAgICogLSAubmV4dC9zdGF0aWMvIGZpbGVzIGdvIHRvIF9uZXh0L3N0YXRpYy9cbiAgICovXG4gIHByaXZhdGUgY3JlYXRlU3RhZ2luZ0RpcmVjdG9yeSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHN0YWdpbmdEaXIgPSBta2R0ZW1wU3luYyhqb2luKHRtcGRpcigpLCBcIm5leHRqcy1hc3NldHMtXCIpKTtcbiAgICBsZXQgaGFzQXNzZXRzID0gZmFsc2U7XG5cbiAgICB0cnkge1xuICAgICAgLy8gQ29weSBwdWJsaWMgZGlyZWN0b3J5IGNvbnRlbnRzIHRvIHN0YWdpbmcgcm9vdFxuICAgICAgY29uc3QgcHVibGljUGF0aCA9IGpvaW4odGhpcy5wcm9wcy5idWlsZERpcmVjdG9yeSwgXCJwdWJsaWNcIik7XG4gICAgICBpZiAodGhpcy5kaXJlY3RvcnlFeGlzdHMocHVibGljUGF0aCkpIHtcbiAgICAgICAgY3BTeW5jKHB1YmxpY1BhdGgsIHN0YWdpbmdEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICBoYXNBc3NldHMgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBDb3B5IC5uZXh0L3N0YXRpYyB0byBzdGFnaW5nL19uZXh0L3N0YXRpY1xuICAgICAgY29uc3Qgc3RhdGljUGF0aCA9IGpvaW4odGhpcy5wcm9wcy5idWlsZERpcmVjdG9yeSwgXCIubmV4dFwiLCBcInN0YXRpY1wiKTtcbiAgICAgIGlmICh0aGlzLmRpcmVjdG9yeUV4aXN0cyhzdGF0aWNQYXRoKSkge1xuICAgICAgICBjb25zdCBuZXh0RGlyID0gam9pbihzdGFnaW5nRGlyLCBcIl9uZXh0XCIpO1xuICAgICAgICBjb25zdCBzdGF0aWNEZXN0RGlyID0gam9pbihuZXh0RGlyLCBcInN0YXRpY1wiKTtcblxuICAgICAgICAvLyBDcmVhdGUgX25leHQgZGlyZWN0b3J5XG4gICAgICAgIG1rZGlyU3luYyhuZXh0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICAgICAgICAvLyBDb3B5IHN0YXRpYyBhc3NldHNcbiAgICAgICAgY3BTeW5jKHN0YXRpY1BhdGgsIHN0YXRpY0Rlc3REaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICBoYXNBc3NldHMgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaGFzQXNzZXRzID8gc3RhZ2luZ0RpciA6IHVuZGVmaW5lZDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihgJHtMT0dfUFJFRklYfSBFcnJvciBjcmVhdGluZyBzdGFnaW5nIGRpcmVjdG9yeTpgLCBlcnJvcik7XG4gICAgICAvLyBDbGVhbiB1cCBvbiBlcnJvclxuICAgICAgdHJ5IHtcbiAgICAgICAgcm1TeW5jKHN0YWdpbmdEaXIsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBJZ25vcmUgY2xlYW51cCBlcnJvcnNcbiAgICAgIH1cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgZGlyZWN0b3J5IGV4aXN0c1xuICAgKi9cbiAgcHJpdmF0ZSBkaXJlY3RvcnlFeGlzdHMoZGlyUGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBleGlzdHNTeW5jKGRpclBhdGgpICYmIHN0YXRTeW5jKGRpclBhdGgpLmlzRGlyZWN0b3J5KCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59XG4iXX0=