cdk-nextjs 0.5.16 → 0.6.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 (45) hide show
  1. package/.jsii +290 -183
  2. package/.jsii.tabl.json +1 -1
  3. package/API.md +244 -4
  4. package/README.md +2 -2
  5. package/docs/breaking-changes.md +53 -0
  6. package/docs/development-guide.md +6 -4
  7. package/lib/adapter/adapter.mjs +1 -1
  8. package/lib/adapter/cache-handler.mjs +1 -1
  9. package/lib/generated-structs/OptionalNextjsDistributionProps.d.ts +3 -0
  10. package/lib/generated-structs/OptionalNextjsDistributionProps.js +1 -1
  11. package/lib/image-optimization/handler-utils.d.ts +7 -5
  12. package/lib/image-optimization/handler-utils.js +17 -11
  13. package/lib/image-optimization/handler-utils.test.js +42 -6
  14. package/lib/image-optimization/handler.mjs +20 -6
  15. package/lib/nextjs-api.d.ts +26 -0
  16. package/lib/nextjs-api.js +41 -13
  17. package/lib/nextjs-api.test.d.ts +1 -0
  18. package/lib/nextjs-api.test.js +144 -0
  19. package/lib/nextjs-build/nextjs-build.d.ts +8 -0
  20. package/lib/nextjs-build/nextjs-build.js +12 -2
  21. package/lib/nextjs-cache.js +1 -1
  22. package/lib/nextjs-compute/nextjs-containers.js +1 -1
  23. package/lib/nextjs-compute/nextjs-functions.js +1 -1
  24. package/lib/nextjs-compute/nextjs-image-function.d.ts +10 -0
  25. package/lib/nextjs-compute/nextjs-image-function.js +3 -2
  26. package/lib/nextjs-distribution.d.ts +11 -0
  27. package/lib/nextjs-distribution.js +16 -10
  28. package/lib/nextjs-post-deploy.js +1 -1
  29. package/lib/nextjs-static-assets.d.ts +18 -0
  30. package/lib/nextjs-static-assets.js +33 -6
  31. package/lib/nextjs-static-assets.test.d.ts +1 -0
  32. package/lib/nextjs-static-assets.test.js +58 -0
  33. package/lib/root-constructs/nextjs-base-construct.d.ts +38 -1
  34. package/lib/root-constructs/nextjs-base-construct.js +41 -3
  35. package/lib/root-constructs/nextjs-global-containers.d.ts +6 -1
  36. package/lib/root-constructs/nextjs-global-containers.js +11 -5
  37. package/lib/root-constructs/nextjs-global-functions.d.ts +5 -0
  38. package/lib/root-constructs/nextjs-global-functions.js +10 -4
  39. package/lib/root-constructs/nextjs-regional-containers.js +1 -1
  40. package/lib/root-constructs/nextjs-regional-functions.js +5 -5
  41. package/lib/utils/base-path.d.ts +40 -0
  42. package/lib/utils/base-path.js +123 -0
  43. package/lib/utils/base-path.test.d.ts +1 -0
  44. package/lib/utils/base-path.test.js +163 -0
  45. package/package.json +1 -1
@@ -0,0 +1,144 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ /* eslint-disable import/no-extraneous-dependencies */
4
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
5
+ const assertions_1 = require("aws-cdk-lib/assertions");
6
+ const aws_certificatemanager_1 = require("aws-cdk-lib/aws-certificatemanager");
7
+ const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
8
+ const aws_s3_1 = require("aws-cdk-lib/aws-s3");
9
+ const nextjs_api_1 = require("./nextjs-api");
10
+ describe("NextjsApi", () => {
11
+ let stack;
12
+ beforeEach(() => {
13
+ stack = new aws_cdk_lib_1.Stack(new aws_cdk_lib_1.App(), "TestStack", {
14
+ env: { account: "123456789012", region: "us-east-1" },
15
+ });
16
+ });
17
+ function createApi(staticAssetsKeyPrefix) {
18
+ return new nextjs_api_1.NextjsApi(stack, "NextjsApi", {
19
+ staticAssetsBucket: aws_s3_1.Bucket.fromBucketName(stack, "Bucket", "my-bucket"),
20
+ staticAssetsKeyPrefix,
21
+ serverFunction: new aws_lambda_1.Function(stack, "ServerFn", {
22
+ runtime: aws_lambda_1.Runtime.NODEJS_22_X,
23
+ handler: "index.handler",
24
+ code: aws_lambda_1.Code.fromInline("exports.handler = async () => {};"),
25
+ }),
26
+ publicDirEntries: [
27
+ { name: "favicon.ico", isDirectory: false },
28
+ { name: "images", isDirectory: true },
29
+ ],
30
+ });
31
+ }
32
+ /**
33
+ * The S3 integrations address objects by key, so the uploaded key prefix has
34
+ * to appear in the integration URI or every static request 404s.
35
+ */
36
+ function s3IntegrationKeys() {
37
+ const methods = assertions_1.Template.fromStack(stack).findResources("AWS::ApiGateway::Method");
38
+ const marker = "s3:path/my-bucket/";
39
+ return Object.values(methods)
40
+ .flatMap((method) => method.Properties.Integration.Uri["Fn::Join"][1])
41
+ .filter((part) => typeof part === "string" && part.includes(marker))
42
+ .map((part) => part.split(marker)[1]);
43
+ }
44
+ it("addresses objects at the bucket root when no key prefix is set", () => {
45
+ createApi();
46
+ expect(s3IntegrationKeys().sort()).toEqual([
47
+ "_next/static/{key}",
48
+ "favicon.ico",
49
+ "images/{key}",
50
+ ]);
51
+ });
52
+ it("prefixes every S3 integration key with the static assets key prefix", () => {
53
+ createApi("branch-x");
54
+ expect(s3IntegrationKeys().sort()).toEqual([
55
+ "branch-x/_next/static/{key}",
56
+ "branch-x/favicon.ico",
57
+ "branch-x/images/{key}",
58
+ ]);
59
+ });
60
+ it("normalizes surrounding slashes on the key prefix", () => {
61
+ createApi("/branch-x/");
62
+ expect(s3IntegrationKeys()).toContain("branch-x/_next/static/{key}");
63
+ });
64
+ it("keeps the key prefix independent of basePath, which is the URL prefix", () => {
65
+ // A NextjsRegionalFunctions app whose `basePath` matches the API Gateway
66
+ // stage still has its assets at the bucket root.
67
+ new nextjs_api_1.NextjsApi(stack, "NextjsApi", {
68
+ staticAssetsBucket: aws_s3_1.Bucket.fromBucketName(stack, "Bucket", "my-bucket"),
69
+ basePath: "/prod",
70
+ serverFunction: new aws_lambda_1.Function(stack, "ServerFn", {
71
+ runtime: aws_lambda_1.Runtime.NODEJS_22_X,
72
+ handler: "index.handler",
73
+ code: aws_lambda_1.Code.fromInline("exports.handler = async () => {};"),
74
+ }),
75
+ publicDirEntries: [],
76
+ });
77
+ expect(s3IntegrationKeys()).toEqual(["_next/static/{key}"]);
78
+ // ...served under the stage-matching URL prefix.
79
+ assertions_1.Template.fromStack(stack).hasResourceProperties("AWS::ApiGateway::Resource", { PathPart: "prod" });
80
+ });
81
+ describe("url", () => {
82
+ function createApiWithOverrides(props = {}) {
83
+ return new nextjs_api_1.NextjsApi(stack, "NextjsApi", {
84
+ staticAssetsBucket: aws_s3_1.Bucket.fromBucketName(stack, "Bucket", "my-bucket"),
85
+ serverFunction: new aws_lambda_1.Function(stack, "ServerFn", {
86
+ runtime: aws_lambda_1.Runtime.NODEJS_22_X,
87
+ handler: "index.handler",
88
+ code: aws_lambda_1.Code.fromInline("exports.handler = async () => {};"),
89
+ }),
90
+ publicDirEntries: [],
91
+ ...props,
92
+ });
93
+ }
94
+ function domainName(basePath) {
95
+ return {
96
+ domainName: "app.example.com",
97
+ certificate: aws_certificatemanager_1.Certificate.fromCertificateArn(stack, "Cert", "arn:aws:acm:us-east-1:123456789012:certificate/abc"),
98
+ basePath,
99
+ };
100
+ }
101
+ /**
102
+ * The REST API id, the stage name and the domain name are all tokens that
103
+ * only resolve at deploy time, so flatten the resolved `Fn::Join` and stand
104
+ * each reference in for the resource it points at (minus CDK's logical id
105
+ * hash suffix). That keeps the assertions about *which* resource supplies
106
+ * each part of the URL, which is the whole question here.
107
+ */
108
+ function resolveUrl(api) {
109
+ const resolved = stack.resolve(api.url);
110
+ if (typeof resolved === "string") {
111
+ return resolved;
112
+ }
113
+ return resolved["Fn::Join"][1]
114
+ .map((part) => typeof part === "string"
115
+ ? part
116
+ : `{${part.Ref.replace(/[0-9A-F]{8}$/, "")}}`)
117
+ .join("");
118
+ }
119
+ it("reports the execute-api endpoint with the stage appended when there's no custom domain", () => {
120
+ // The stage is in the path only here, which is the whole reason the
121
+ // regional-functions example sets an app basePath of "/prod".
122
+ expect(resolveUrl(createApiWithOverrides())).toBe("https://{NextjsApiRestApi}.execute-api.us-east-1.amazonaws.com/{NextjsApiRestApiDeploymentStageprod}");
123
+ });
124
+ it("appends basePath, which nests every resource a level down", () => {
125
+ expect(resolveUrl(createApiWithOverrides({ basePath: "/my-base-path" }))).toBe("https://{NextjsApiRestApi}.execute-api.us-east-1.amazonaws.com/{NextjsApiRestApiDeploymentStageprod}/my-base-path");
126
+ });
127
+ it("prefers a custom domain and drops the stage from the path", () => {
128
+ // A domain mapped at the root is the cleanest Regional setup: no stage in
129
+ // the URL means no basePath and no stage workarounds anywhere. The stage is
130
+ // reached through the domain's base path mapping instead.
131
+ expect(resolveUrl(createApiWithOverrides({
132
+ overrides: { restApiProps: { domainName: domainName() } },
133
+ }))).toBe("https://{NextjsApiRestApiCustomDomain}");
134
+ });
135
+ it("includes a custom domain's base path mapping", () => {
136
+ // CDK rejects surrounding slashes on a mapping, so it's always a bare
137
+ // segment by the time it gets here.
138
+ expect(resolveUrl(createApiWithOverrides({
139
+ overrides: { restApiProps: { domainName: domainName("team-a") } },
140
+ }))).toBe("https://{NextjsApiRestApiCustomDomain}/team-a");
141
+ });
142
+ });
143
+ });
144
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV4dGpzLWFwaS50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL25leHRqcy1hcGkudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHNEQUFzRDtBQUN0RCw2Q0FBeUM7QUFDekMsdURBQWtEO0FBQ2xELCtFQUFpRTtBQUNqRSx1REFJZ0M7QUFDaEMsK0NBQTRDO0FBQzVDLDZDQUF5RDtBQUV6RCxRQUFRLENBQUMsV0FBVyxFQUFFLEdBQUcsRUFBRTtJQUN6QixJQUFJLEtBQVksQ0FBQztJQUVqQixVQUFVLENBQUMsR0FBRyxFQUFFO1FBQ2QsS0FBSyxHQUFHLElBQUksbUJBQUssQ0FBQyxJQUFJLGlCQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUU7WUFDeEMsR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFO1NBQ3RELENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsU0FBUyxTQUFTLENBQUMscUJBQThCO1FBQy9DLE9BQU8sSUFBSSxzQkFBUyxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUU7WUFDdkMsa0JBQWtCLEVBQUUsZUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLFdBQVcsQ0FBQztZQUN2RSxxQkFBcUI7WUFDckIsY0FBYyxFQUFFLElBQUkscUJBQWMsQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFO2dCQUNwRCxPQUFPLEVBQUUsb0JBQU8sQ0FBQyxXQUFXO2dCQUM1QixPQUFPLEVBQUUsZUFBZTtnQkFDeEIsSUFBSSxFQUFFLGlCQUFJLENBQUMsVUFBVSxDQUFDLG1DQUFtQyxDQUFDO2FBQzNELENBQUM7WUFDRixnQkFBZ0IsRUFBRTtnQkFDaEIsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUU7Z0JBQzNDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFO2FBQ3RDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNILFNBQVMsaUJBQWlCO1FBQ3hCLE1BQU0sT0FBTyxHQUFHLHFCQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLGFBQWEsQ0FDckQseUJBQXlCLENBQzFCLENBQUM7UUFDRixNQUFNLE1BQU0sR0FBRyxvQkFBb0IsQ0FBQztRQUNwQyxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO2FBQzFCLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3JFLE1BQU0sQ0FDTCxDQUFDLElBQWEsRUFBa0IsRUFBRSxDQUNoQyxPQUFPLElBQUksS0FBSyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FDcEQ7YUFDQSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsRUFBRSxDQUFDLGdFQUFnRSxFQUFFLEdBQUcsRUFBRTtRQUN4RSxTQUFTLEVBQUUsQ0FBQztRQUVaLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQ3pDLG9CQUFvQjtZQUNwQixhQUFhO1lBQ2IsY0FBYztTQUNmLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHFFQUFxRSxFQUFFLEdBQUcsRUFBRTtRQUM3RSxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFdEIsTUFBTSxDQUFDLGlCQUFpQixFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDekMsNkJBQTZCO1lBQzdCLHNCQUFzQjtZQUN0Qix1QkFBdUI7U0FDeEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsa0RBQWtELEVBQUUsR0FBRyxFQUFFO1FBQzFELFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUV4QixNQUFNLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0lBQ3ZFLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHVFQUF1RSxFQUFFLEdBQUcsRUFBRTtRQUMvRSx5RUFBeUU7UUFDekUsaURBQWlEO1FBQ2pELElBQUksc0JBQVMsQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFO1lBQ2hDLGtCQUFrQixFQUFFLGVBQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxXQUFXLENBQUM7WUFDdkUsUUFBUSxFQUFFLE9BQU87WUFDakIsY0FBYyxFQUFFLElBQUkscUJBQWMsQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFO2dCQUNwRCxPQUFPLEVBQUUsb0JBQU8sQ0FBQyxXQUFXO2dCQUM1QixPQUFPLEVBQUUsZUFBZTtnQkFDeEIsSUFBSSxFQUFFLGlCQUFJLENBQUMsVUFBVSxDQUFDLG1DQUFtQyxDQUFDO2FBQzNELENBQUM7WUFDRixnQkFBZ0IsRUFBRSxFQUFFO1NBQ3JCLENBQUMsQ0FBQztRQUVILE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO1FBQzVELGlEQUFpRDtRQUNqRCxxQkFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxxQkFBcUIsQ0FDN0MsMkJBQTJCLEVBQzNCLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUNyQixDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRTtRQUNuQixTQUFTLHNCQUFzQixDQUM3QixRQUFpQyxFQUFFO1lBRW5DLE9BQU8sSUFBSSxzQkFBUyxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUU7Z0JBQ3ZDLGtCQUFrQixFQUFFLGVBQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxXQUFXLENBQUM7Z0JBQ3ZFLGNBQWMsRUFBRSxJQUFJLHFCQUFjLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRTtvQkFDcEQsT0FBTyxFQUFFLG9CQUFPLENBQUMsV0FBVztvQkFDNUIsT0FBTyxFQUFFLGVBQWU7b0JBQ3hCLElBQUksRUFBRSxpQkFBSSxDQUFDLFVBQVUsQ0FBQyxtQ0FBbUMsQ0FBQztpQkFDM0QsQ0FBQztnQkFDRixnQkFBZ0IsRUFBRSxFQUFFO2dCQUNwQixHQUFHLEtBQUs7YUFDVCxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsU0FBUyxVQUFVLENBQUMsUUFBaUI7WUFDbkMsT0FBTztnQkFDTCxVQUFVLEVBQUUsaUJBQWlCO2dCQUM3QixXQUFXLEVBQUUsb0NBQVcsQ0FBQyxrQkFBa0IsQ0FDekMsS0FBSyxFQUNMLE1BQU0sRUFDTixvREFBb0QsQ0FDckQ7Z0JBQ0QsUUFBUTthQUNULENBQUM7UUFDSixDQUFDO1FBRUQ7Ozs7OztXQU1HO1FBQ0gsU0FBUyxVQUFVLENBQUMsR0FBYztZQUNoQyxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN4QyxJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUNqQyxPQUFPLFFBQVEsQ0FBQztZQUNsQixDQUFDO1lBQ0QsT0FBTyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUMzQixHQUFHLENBQUMsQ0FBQyxJQUFhLEVBQUUsRUFBRSxDQUNyQixPQUFPLElBQUksS0FBSyxRQUFRO2dCQUN0QixDQUFDLENBQUMsSUFBSTtnQkFDTixDQUFDLENBQUMsSUFBSyxJQUF3QixDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQ3JFO2lCQUNBLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNkLENBQUM7UUFFRCxFQUFFLENBQUMsd0ZBQXdGLEVBQUUsR0FBRyxFQUFFO1lBQ2hHLG9FQUFvRTtZQUNwRSw4REFBOEQ7WUFDOUQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQy9DLHNHQUFzRyxDQUN2RyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsMkRBQTJELEVBQUUsR0FBRyxFQUFFO1lBQ25FLE1BQU0sQ0FDSixVQUFVLENBQUMsc0JBQXNCLENBQUMsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUNsRSxDQUFDLElBQUksQ0FDSixtSEFBbUgsQ0FDcEgsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDJEQUEyRCxFQUFFLEdBQUcsRUFBRTtZQUNuRSwwRUFBMEU7WUFDMUUsNEVBQTRFO1lBQzVFLDBEQUEwRDtZQUMxRCxNQUFNLENBQ0osVUFBVSxDQUNSLHNCQUFzQixDQUFDO2dCQUNyQixTQUFTLEVBQUUsRUFBRSxZQUFZLEVBQUUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRTthQUMxRCxDQUFDLENBQ0gsQ0FDRixDQUFDLElBQUksQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO1FBQ25ELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDhDQUE4QyxFQUFFLEdBQUcsRUFBRTtZQUN0RCxzRUFBc0U7WUFDdEUsb0NBQW9DO1lBQ3BDLE1BQU0sQ0FDSixVQUFVLENBQ1Isc0JBQXNCLENBQUM7Z0JBQ3JCLFNBQVMsRUFBRSxFQUFFLFlBQVksRUFBRSxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRTthQUNsRSxDQUFDLENBQ0gsQ0FDRixDQUFDLElBQUksQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDO1FBQzFELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcyAqL1xuaW1wb3J0IHsgQXBwLCBTdGFjayB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgVGVtcGxhdGUgfSBmcm9tIFwiYXdzLWNkay1saWIvYXNzZXJ0aW9uc1wiO1xuaW1wb3J0IHsgQ2VydGlmaWNhdGUgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNlcnRpZmljYXRlbWFuYWdlclwiO1xuaW1wb3J0IHtcbiAgQ29kZSxcbiAgRnVuY3Rpb24gYXMgTGFtYmRhRnVuY3Rpb24sXG4gIFJ1bnRpbWUsXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhXCI7XG5pbXBvcnQgeyBCdWNrZXQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXMzXCI7XG5pbXBvcnQgeyBOZXh0anNBcGksIE5leHRqc0FwaVByb3BzIH0gZnJvbSBcIi4vbmV4dGpzLWFwaVwiO1xuXG5kZXNjcmliZShcIk5leHRqc0FwaVwiLCAoKSA9PiB7XG4gIGxldCBzdGFjazogU3RhY2s7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgc3RhY2sgPSBuZXcgU3RhY2sobmV3IEFwcCgpLCBcIlRlc3RTdGFja1wiLCB7XG4gICAgICBlbnY6IHsgYWNjb3VudDogXCIxMjM0NTY3ODkwMTJcIiwgcmVnaW9uOiBcInVzLWVhc3QtMVwiIH0sXG4gICAgfSk7XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIGNyZWF0ZUFwaShzdGF0aWNBc3NldHNLZXlQcmVmaXg/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IE5leHRqc0FwaShzdGFjaywgXCJOZXh0anNBcGlcIiwge1xuICAgICAgc3RhdGljQXNzZXRzQnVja2V0OiBCdWNrZXQuZnJvbUJ1Y2tldE5hbWUoc3RhY2ssIFwiQnVja2V0XCIsIFwibXktYnVja2V0XCIpLFxuICAgICAgc3RhdGljQXNzZXRzS2V5UHJlZml4LFxuICAgICAgc2VydmVyRnVuY3Rpb246IG5ldyBMYW1iZGFGdW5jdGlvbihzdGFjaywgXCJTZXJ2ZXJGblwiLCB7XG4gICAgICAgIHJ1bnRpbWU6IFJ1bnRpbWUuTk9ERUpTXzIyX1gsXG4gICAgICAgIGhhbmRsZXI6IFwiaW5kZXguaGFuZGxlclwiLFxuICAgICAgICBjb2RlOiBDb2RlLmZyb21JbmxpbmUoXCJleHBvcnRzLmhhbmRsZXIgPSBhc3luYyAoKSA9PiB7fTtcIiksXG4gICAgICB9KSxcbiAgICAgIHB1YmxpY0RpckVudHJpZXM6IFtcbiAgICAgICAgeyBuYW1lOiBcImZhdmljb24uaWNvXCIsIGlzRGlyZWN0b3J5OiBmYWxzZSB9LFxuICAgICAgICB7IG5hbWU6IFwiaW1hZ2VzXCIsIGlzRGlyZWN0b3J5OiB0cnVlIH0sXG4gICAgICBdLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBTMyBpbnRlZ3JhdGlvbnMgYWRkcmVzcyBvYmplY3RzIGJ5IGtleSwgc28gdGhlIHVwbG9hZGVkIGtleSBwcmVmaXggaGFzXG4gICAqIHRvIGFwcGVhciBpbiB0aGUgaW50ZWdyYXRpb24gVVJJIG9yIGV2ZXJ5IHN0YXRpYyByZXF1ZXN0IDQwNHMuXG4gICAqL1xuICBmdW5jdGlvbiBzM0ludGVncmF0aW9uS2V5cygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgbWV0aG9kcyA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjaykuZmluZFJlc291cmNlcyhcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5OjpNZXRob2RcIixcbiAgICApO1xuICAgIGNvbnN0IG1hcmtlciA9IFwiczM6cGF0aC9teS1idWNrZXQvXCI7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXMobWV0aG9kcylcbiAgICAgIC5mbGF0TWFwKChtZXRob2QpID0+IG1ldGhvZC5Qcm9wZXJ0aWVzLkludGVncmF0aW9uLlVyaVtcIkZuOjpKb2luXCJdWzFdKVxuICAgICAgLmZpbHRlcihcbiAgICAgICAgKHBhcnQ6IHVua25vd24pOiBwYXJ0IGlzIHN0cmluZyA9PlxuICAgICAgICAgIHR5cGVvZiBwYXJ0ID09PSBcInN0cmluZ1wiICYmIHBhcnQuaW5jbHVkZXMobWFya2VyKSxcbiAgICAgIClcbiAgICAgIC5tYXAoKHBhcnQpID0+IHBhcnQuc3BsaXQobWFya2VyKVsxXSk7XG4gIH1cblxuICBpdChcImFkZHJlc3NlcyBvYmplY3RzIGF0IHRoZSBidWNrZXQgcm9vdCB3aGVuIG5vIGtleSBwcmVmaXggaXMgc2V0XCIsICgpID0+IHtcbiAgICBjcmVhdGVBcGkoKTtcblxuICAgIGV4cGVjdChzM0ludGVncmF0aW9uS2V5cygpLnNvcnQoKSkudG9FcXVhbChbXG4gICAgICBcIl9uZXh0L3N0YXRpYy97a2V5fVwiLFxuICAgICAgXCJmYXZpY29uLmljb1wiLFxuICAgICAgXCJpbWFnZXMve2tleX1cIixcbiAgICBdKTtcbiAgfSk7XG5cbiAgaXQoXCJwcmVmaXhlcyBldmVyeSBTMyBpbnRlZ3JhdGlvbiBrZXkgd2l0aCB0aGUgc3RhdGljIGFzc2V0cyBrZXkgcHJlZml4XCIsICgpID0+IHtcbiAgICBjcmVhdGVBcGkoXCJicmFuY2gteFwiKTtcblxuICAgIGV4cGVjdChzM0ludGVncmF0aW9uS2V5cygpLnNvcnQoKSkudG9FcXVhbChbXG4gICAgICBcImJyYW5jaC14L19uZXh0L3N0YXRpYy97a2V5fVwiLFxuICAgICAgXCJicmFuY2gteC9mYXZpY29uLmljb1wiLFxuICAgICAgXCJicmFuY2gteC9pbWFnZXMve2tleX1cIixcbiAgICBdKTtcbiAgfSk7XG5cbiAgaXQoXCJub3JtYWxpemVzIHN1cnJvdW5kaW5nIHNsYXNoZXMgb24gdGhlIGtleSBwcmVmaXhcIiwgKCkgPT4ge1xuICAgIGNyZWF0ZUFwaShcIi9icmFuY2gteC9cIik7XG5cbiAgICBleHBlY3QoczNJbnRlZ3JhdGlvbktleXMoKSkudG9Db250YWluKFwiYnJhbmNoLXgvX25leHQvc3RhdGljL3trZXl9XCIpO1xuICB9KTtcblxuICBpdChcImtlZXBzIHRoZSBrZXkgcHJlZml4IGluZGVwZW5kZW50IG9mIGJhc2VQYXRoLCB3aGljaCBpcyB0aGUgVVJMIHByZWZpeFwiLCAoKSA9PiB7XG4gICAgLy8gQSBOZXh0anNSZWdpb25hbEZ1bmN0aW9ucyBhcHAgd2hvc2UgYGJhc2VQYXRoYCBtYXRjaGVzIHRoZSBBUEkgR2F0ZXdheVxuICAgIC8vIHN0YWdlIHN0aWxsIGhhcyBpdHMgYXNzZXRzIGF0IHRoZSBidWNrZXQgcm9vdC5cbiAgICBuZXcgTmV4dGpzQXBpKHN0YWNrLCBcIk5leHRqc0FwaVwiLCB7XG4gICAgICBzdGF0aWNBc3NldHNCdWNrZXQ6IEJ1Y2tldC5mcm9tQnVja2V0TmFtZShzdGFjaywgXCJCdWNrZXRcIiwgXCJteS1idWNrZXRcIiksXG4gICAgICBiYXNlUGF0aDogXCIvcHJvZFwiLFxuICAgICAgc2VydmVyRnVuY3Rpb246IG5ldyBMYW1iZGFGdW5jdGlvbihzdGFjaywgXCJTZXJ2ZXJGblwiLCB7XG4gICAgICAgIHJ1bnRpbWU6IFJ1bnRpbWUuTk9ERUpTXzIyX1gsXG4gICAgICAgIGhhbmRsZXI6IFwiaW5kZXguaGFuZGxlclwiLFxuICAgICAgICBjb2RlOiBDb2RlLmZyb21JbmxpbmUoXCJleHBvcnRzLmhhbmRsZXIgPSBhc3luYyAoKSA9PiB7fTtcIiksXG4gICAgICB9KSxcbiAgICAgIHB1YmxpY0RpckVudHJpZXM6IFtdLFxuICAgIH0pO1xuXG4gICAgZXhwZWN0KHMzSW50ZWdyYXRpb25LZXlzKCkpLnRvRXF1YWwoW1wiX25leHQvc3RhdGljL3trZXl9XCJdKTtcbiAgICAvLyAuLi5zZXJ2ZWQgdW5kZXIgdGhlIHN0YWdlLW1hdGNoaW5nIFVSTCBwcmVmaXguXG4gICAgVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheTo6UmVzb3VyY2VcIixcbiAgICAgIHsgUGF0aFBhcnQ6IFwicHJvZFwiIH0sXG4gICAgKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJ1cmxcIiwgKCkgPT4ge1xuICAgIGZ1bmN0aW9uIGNyZWF0ZUFwaVdpdGhPdmVycmlkZXMoXG4gICAgICBwcm9wczogUGFydGlhbDxOZXh0anNBcGlQcm9wcz4gPSB7fSxcbiAgICApOiBOZXh0anNBcGkge1xuICAgICAgcmV0dXJuIG5ldyBOZXh0anNBcGkoc3RhY2ssIFwiTmV4dGpzQXBpXCIsIHtcbiAgICAgICAgc3RhdGljQXNzZXRzQnVja2V0OiBCdWNrZXQuZnJvbUJ1Y2tldE5hbWUoc3RhY2ssIFwiQnVja2V0XCIsIFwibXktYnVja2V0XCIpLFxuICAgICAgICBzZXJ2ZXJGdW5jdGlvbjogbmV3IExhbWJkYUZ1bmN0aW9uKHN0YWNrLCBcIlNlcnZlckZuXCIsIHtcbiAgICAgICAgICBydW50aW1lOiBSdW50aW1lLk5PREVKU18yMl9YLFxuICAgICAgICAgIGhhbmRsZXI6IFwiaW5kZXguaGFuZGxlclwiLFxuICAgICAgICAgIGNvZGU6IENvZGUuZnJvbUlubGluZShcImV4cG9ydHMuaGFuZGxlciA9IGFzeW5jICgpID0+IHt9O1wiKSxcbiAgICAgICAgfSksXG4gICAgICAgIHB1YmxpY0RpckVudHJpZXM6IFtdLFxuICAgICAgICAuLi5wcm9wcyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRvbWFpbk5hbWUoYmFzZVBhdGg/OiBzdHJpbmcpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRvbWFpbk5hbWU6IFwiYXBwLmV4YW1wbGUuY29tXCIsXG4gICAgICAgIGNlcnRpZmljYXRlOiBDZXJ0aWZpY2F0ZS5mcm9tQ2VydGlmaWNhdGVBcm4oXG4gICAgICAgICAgc3RhY2ssXG4gICAgICAgICAgXCJDZXJ0XCIsXG4gICAgICAgICAgXCJhcm46YXdzOmFjbTp1cy1lYXN0LTE6MTIzNDU2Nzg5MDEyOmNlcnRpZmljYXRlL2FiY1wiLFxuICAgICAgICApLFxuICAgICAgICBiYXNlUGF0aCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIFJFU1QgQVBJIGlkLCB0aGUgc3RhZ2UgbmFtZSBhbmQgdGhlIGRvbWFpbiBuYW1lIGFyZSBhbGwgdG9rZW5zIHRoYXRcbiAgICAgKiBvbmx5IHJlc29sdmUgYXQgZGVwbG95IHRpbWUsIHNvIGZsYXR0ZW4gdGhlIHJlc29sdmVkIGBGbjo6Sm9pbmAgYW5kIHN0YW5kXG4gICAgICogZWFjaCByZWZlcmVuY2UgaW4gZm9yIHRoZSByZXNvdXJjZSBpdCBwb2ludHMgYXQgKG1pbnVzIENESydzIGxvZ2ljYWwgaWRcbiAgICAgKiBoYXNoIHN1ZmZpeCkuIFRoYXQga2VlcHMgdGhlIGFzc2VydGlvbnMgYWJvdXQgKndoaWNoKiByZXNvdXJjZSBzdXBwbGllc1xuICAgICAqIGVhY2ggcGFydCBvZiB0aGUgVVJMLCB3aGljaCBpcyB0aGUgd2hvbGUgcXVlc3Rpb24gaGVyZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiByZXNvbHZlVXJsKGFwaTogTmV4dGpzQXBpKTogc3RyaW5nIHtcbiAgICAgIGNvbnN0IHJlc29sdmVkID0gc3RhY2sucmVzb2x2ZShhcGkudXJsKTtcbiAgICAgIGlmICh0eXBlb2YgcmVzb2x2ZWQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIHJlc29sdmVkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc29sdmVkW1wiRm46OkpvaW5cIl1bMV1cbiAgICAgICAgLm1hcCgocGFydDogdW5rbm93bikgPT5cbiAgICAgICAgICB0eXBlb2YgcGFydCA9PT0gXCJzdHJpbmdcIlxuICAgICAgICAgICAgPyBwYXJ0XG4gICAgICAgICAgICA6IGB7JHsocGFydCBhcyB7IFJlZjogc3RyaW5nIH0pLlJlZi5yZXBsYWNlKC9bMC05QS1GXXs4fSQvLCBcIlwiKX19YCxcbiAgICAgICAgKVxuICAgICAgICAuam9pbihcIlwiKTtcbiAgICB9XG5cbiAgICBpdChcInJlcG9ydHMgdGhlIGV4ZWN1dGUtYXBpIGVuZHBvaW50IHdpdGggdGhlIHN0YWdlIGFwcGVuZGVkIHdoZW4gdGhlcmUncyBubyBjdXN0b20gZG9tYWluXCIsICgpID0+IHtcbiAgICAgIC8vIFRoZSBzdGFnZSBpcyBpbiB0aGUgcGF0aCBvbmx5IGhlcmUsIHdoaWNoIGlzIHRoZSB3aG9sZSByZWFzb24gdGhlXG4gICAgICAvLyByZWdpb25hbC1mdW5jdGlvbnMgZXhhbXBsZSBzZXRzIGFuIGFwcCBiYXNlUGF0aCBvZiBcIi9wcm9kXCIuXG4gICAgICBleHBlY3QocmVzb2x2ZVVybChjcmVhdGVBcGlXaXRoT3ZlcnJpZGVzKCkpKS50b0JlKFxuICAgICAgICBcImh0dHBzOi8ve05leHRqc0FwaVJlc3RBcGl9LmV4ZWN1dGUtYXBpLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tL3tOZXh0anNBcGlSZXN0QXBpRGVwbG95bWVudFN0YWdlcHJvZH1cIixcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdChcImFwcGVuZHMgYmFzZVBhdGgsIHdoaWNoIG5lc3RzIGV2ZXJ5IHJlc291cmNlIGEgbGV2ZWwgZG93blwiLCAoKSA9PiB7XG4gICAgICBleHBlY3QoXG4gICAgICAgIHJlc29sdmVVcmwoY3JlYXRlQXBpV2l0aE92ZXJyaWRlcyh7IGJhc2VQYXRoOiBcIi9teS1iYXNlLXBhdGhcIiB9KSksXG4gICAgICApLnRvQmUoXG4gICAgICAgIFwiaHR0cHM6Ly97TmV4dGpzQXBpUmVzdEFwaX0uZXhlY3V0ZS1hcGkudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20ve05leHRqc0FwaVJlc3RBcGlEZXBsb3ltZW50U3RhZ2Vwcm9kfS9teS1iYXNlLXBhdGhcIixcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdChcInByZWZlcnMgYSBjdXN0b20gZG9tYWluIGFuZCBkcm9wcyB0aGUgc3RhZ2UgZnJvbSB0aGUgcGF0aFwiLCAoKSA9PiB7XG4gICAgICAvLyBBIGRvbWFpbiBtYXBwZWQgYXQgdGhlIHJvb3QgaXMgdGhlIGNsZWFuZXN0IFJlZ2lvbmFsIHNldHVwOiBubyBzdGFnZSBpblxuICAgICAgLy8gdGhlIFVSTCBtZWFucyBubyBiYXNlUGF0aCBhbmQgbm8gc3RhZ2Ugd29ya2Fyb3VuZHMgYW55d2hlcmUuIFRoZSBzdGFnZSBpc1xuICAgICAgLy8gcmVhY2hlZCB0aHJvdWdoIHRoZSBkb21haW4ncyBiYXNlIHBhdGggbWFwcGluZyBpbnN0ZWFkLlxuICAgICAgZXhwZWN0KFxuICAgICAgICByZXNvbHZlVXJsKFxuICAgICAgICAgIGNyZWF0ZUFwaVdpdGhPdmVycmlkZXMoe1xuICAgICAgICAgICAgb3ZlcnJpZGVzOiB7IHJlc3RBcGlQcm9wczogeyBkb21haW5OYW1lOiBkb21haW5OYW1lKCkgfSB9LFxuICAgICAgICAgIH0pLFxuICAgICAgICApLFxuICAgICAgKS50b0JlKFwiaHR0cHM6Ly97TmV4dGpzQXBpUmVzdEFwaUN1c3RvbURvbWFpbn1cIik7XG4gICAgfSk7XG5cbiAgICBpdChcImluY2x1ZGVzIGEgY3VzdG9tIGRvbWFpbidzIGJhc2UgcGF0aCBtYXBwaW5nXCIsICgpID0+IHtcbiAgICAgIC8vIENESyByZWplY3RzIHN1cnJvdW5kaW5nIHNsYXNoZXMgb24gYSBtYXBwaW5nLCBzbyBpdCdzIGFsd2F5cyBhIGJhcmVcbiAgICAgIC8vIHNlZ21lbnQgYnkgdGhlIHRpbWUgaXQgZ2V0cyBoZXJlLlxuICAgICAgZXhwZWN0KFxuICAgICAgICByZXNvbHZlVXJsKFxuICAgICAgICAgIGNyZWF0ZUFwaVdpdGhPdmVycmlkZXMoe1xuICAgICAgICAgICAgb3ZlcnJpZGVzOiB7IHJlc3RBcGlQcm9wczogeyBkb21haW5OYW1lOiBkb21haW5OYW1lKFwidGVhbS1hXCIpIH0gfSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgKSxcbiAgICAgICkudG9CZShcImh0dHBzOi8ve05leHRqc0FwaVJlc3RBcGlDdXN0b21Eb21haW59L3RlYW0tYVwiKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -59,6 +59,14 @@ export declare class NextjsBuild extends Construct {
59
59
  * Absolute path to the .next directory containing Next.js build artifacts
60
60
  */
61
61
  dotNextPath: string;
62
+ /**
63
+ * The Next.js app's own `basePath` — the URL prefix it generates its links and
64
+ * asset hrefs under — read out of the build's `required-server-files.json`.
65
+ * Normalized to a bare path segment, empty when the app sets none. Exposed so
66
+ * root constructs can reconcile it with the CDK `basePath` prop, which is a
67
+ * distinct thing; see `resolveBasePath`.
68
+ */
69
+ nextConfigBasePath: string;
62
70
  /**
63
71
  * Absolute path to the directory prepared for the image optimization Lambda
64
72
  * asset: bundled handler, glibc `sharp` binaries, and `required-server-files.json`.
@@ -15,6 +15,7 @@ const constructs_1 = require("constructs");
15
15
  // eslint-disable-next-line import/no-extraneous-dependencies
16
16
  const debug_1 = __importDefault(require("debug"));
17
17
  const constants_1 = require("../constants");
18
+ const base_path_1 = require("../utils/base-path");
18
19
  const experimental_flags_1 = require("../utils/experimental-flags");
19
20
  const get_architecture_1 = require("../utils/get-architecture");
20
21
  const debug = (0, debug_1.default)("cdk-nextjs:nextjs-build");
@@ -23,7 +24,7 @@ const debug = (0, debug_1.default)("cdk-nextjs:nextjs-build");
23
24
  * @link https://nextjs.org/docs/pages/api-reference/next-config-js/output
24
25
  */
25
26
  class NextjsBuild extends constructs_1.Construct {
26
- static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsBuild", version: "0.5.16" };
27
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsBuild", version: "0.6.1" };
27
28
  /**
28
29
  * Unique id for Next.js build. Used to partition cache storage and as
29
30
  * metadata for static assets in S3 bucket.
@@ -57,6 +58,14 @@ class NextjsBuild extends constructs_1.Construct {
57
58
  * Absolute path to the .next directory containing Next.js build artifacts
58
59
  */
59
60
  dotNextPath;
61
+ /**
62
+ * The Next.js app's own `basePath` — the URL prefix it generates its links and
63
+ * asset hrefs under — read out of the build's `required-server-files.json`.
64
+ * Normalized to a bare path segment, empty when the app sets none. Exposed so
65
+ * root constructs can reconcile it with the CDK `basePath` prop, which is a
66
+ * distinct thing; see `resolveBasePath`.
67
+ */
68
+ nextConfigBasePath;
60
69
  /**
61
70
  * Absolute path to the directory prepared for the image optimization Lambda
62
71
  * asset: bundled handler, glibc `sharp` binaries, and `required-server-files.json`.
@@ -89,6 +98,7 @@ class NextjsBuild extends constructs_1.Construct {
89
98
  this.relativePathToEntrypoint = (0, posix_1.join)(this.relativePathToPackage === "." ? "" : this.relativePathToPackage, "server.js");
90
99
  this.buildId = this.getBuildId();
91
100
  this.publicDirEntries = this.getLocalPublicDirEntries();
101
+ this.nextConfigBasePath = (0, base_path_1.readNextConfigBasePath)(this.dotNextPath);
92
102
  const standalonePath = (0, node_path_1.join)(this.dotNextPath, "standalone");
93
103
  const isFunctions = props.nextjsType === constants_1.NextjsType.GLOBAL_FUNCTIONS ||
94
104
  props.nextjsType === constants_1.NextjsType.REGIONAL_FUNCTIONS;
@@ -508,4 +518,4 @@ class NextjsBuild extends constructs_1.Construct {
508
518
  }
509
519
  }
510
520
  exports.NextjsBuild = NextjsBuild;
511
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV4dGpzLWJ1aWxkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL25leHRqcy1idWlsZC9uZXh0anMtYnVpbGQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBLDJEQUE4QztBQUM5Qyw2Q0FBMEM7QUFDMUMscUNBVWlCO0FBQ2pCLHFDQUFpQztBQUNqQyx5Q0FBaUM7QUFDakMsMkNBQW9EO0FBQ3BELDJDQUF1QztBQUN2Qyw2REFBNkQ7QUFDN0Qsa0RBQTZCO0FBQzdCLDRDQUFzRDtBQUV0RCxvRUFBd0U7QUFDeEUsZ0VBQWdFO0FBRWhFLE1BQU0sS0FBSyxHQUFHLElBQUEsZUFBUSxFQUFDLHlCQUF5QixDQUFDLENBQUM7QUF3QmxEOzs7R0FHRztBQUNILE1BQWEsV0FBWSxTQUFRLHNCQUFTOztJQUN4Qzs7O09BR0c7SUFDSCxPQUFPLENBQVM7SUFDaEI7OztPQUdHO0lBQ0gsWUFBWSxDQUFTO0lBQ3JCOzs7T0FHRztJQUNILGdCQUFnQixDQUFtQjtJQUNuQzs7Ozs7T0FLRztJQUNILHdCQUF3QixDQUFTO0lBQ2pDOzs7OztPQUtHO0lBQ0gscUJBQXFCLENBQVM7SUFDOUI7O09BRUc7SUFDSCxXQUFXLENBQVM7SUFDcEI7Ozs7OztPQU1HO0lBQ0gsMEJBQTBCLENBQVU7SUFFNUIsS0FBSyxDQUFtQjtJQUN4QixZQUFZLENBQVM7SUFFN0IsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUF1QjtRQUMvRCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2pCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBQSxnQkFBSSxFQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFdkQsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsWUFBWSxJQUFJLGVBQWUsQ0FBQztRQUUxRCxnQ0FBZ0M7UUFDaEMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFBLGdCQUFJLEVBQ3RCLEtBQUssQ0FBQyxjQUFjLEVBQ3BCLE9BQU8sRUFDUCx1QkFBdUIsQ0FDeEIsQ0FBQztRQUVGLDhCQUE4QjtRQUM5QixJQUFJLEtBQUssQ0FBQyxTQUFTLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3RCLENBQUM7YUFBTSxDQUFDO1lBQ04sS0FBSyxDQUFDLEdBQUcsc0JBQVUsY0FBYyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUN4RCxDQUFDO1FBRUQsZ0RBQWdEO1FBQ2hELElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBRS9CLGlFQUFpRTtRQUNqRSxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFFL0QsMkRBQTJEO1FBQzNELElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFBLFlBQVMsRUFDdkMsSUFBSSxDQUFDLHFCQUFxQixLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQ3BFLFdBQVcsQ0FDWixDQUFDO1FBRUYsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDakMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBRXhELE1BQU0sY0FBYyxHQUFHLElBQUEsZ0JBQUksRUFBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQzVELE1BQU0sV0FBVyxHQUNmLEtBQUssQ0FBQyxVQUFVLEtBQUssc0JBQVUsQ0FBQyxnQkFBZ0I7WUFDaEQsS0FBSyxDQUFDLFVBQVUsS0FBSyxzQkFBVSxDQUFDLGtCQUFrQixDQUFDO1FBRXJELE1BQU0sc0JBQXNCLEdBQUcsV0FBVyxJQUFJLElBQUEsOENBQXlCLEdBQUUsQ0FBQztRQUUxRSx3RUFBd0U7UUFDeEUscUVBQXFFO1FBQ3JFLG9EQUFvRDtRQUNwRCxJQUFJLENBQUMsMkJBQTJCLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDakQsdUVBQXVFO1FBQ3ZFLGtFQUFrRTtRQUNsRSx1RUFBdUU7UUFDdkUsMEVBQTBFO1FBQzFFLHVFQUF1RTtRQUN2RSx1RUFBdUU7UUFDdkUsWUFBWTtRQUNaLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQywrQkFBK0IsRUFBRSxDQUFDO1FBQ3pDLENBQUM7UUFFRCxJQUFJLHNCQUFzQixFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLDBCQUEwQjtnQkFDN0IsSUFBSSxDQUFDLDhCQUE4QixDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3hELENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxZQUFZO1FBQ2xCLE9BQU8sQ0FBQyxHQUFHLENBQ1QsR0FBRyxzQkFBVSxjQUFjLElBQUksQ0FBQyxZQUFZLG1CQUFtQixJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUMzRixDQUFDO1FBRUYsMEVBQTBFO1FBQzFFLElBQUksSUFBQSxvQkFBVSxFQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1lBQ2xDLElBQUEsZ0JBQU0sRUFBQyxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUM1RCxLQUFLLENBQUMscUNBQXFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBQ2xFLENBQUM7UUFFRCxJQUFJLENBQUM7WUFDSCxJQUFBLDZCQUFRLEVBQUMsSUFBSSxDQUFDLFlBQVksRUFBRTtnQkFDMUIsS0FBSyxFQUFFLFNBQVM7Z0JBQ2hCLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWM7Z0JBQzlCLEdBQUcsRUFBRTtvQkFDSCxHQUFHLE9BQU8sQ0FBQyxHQUFHO29CQUNkLHlCQUF5QixFQUFFLElBQUksQ0FBQyxZQUFZO2lCQUM3QzthQUNGLENBQUMsQ0FBQztZQUVILHVGQUF1RjtZQUN2RixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxLQUFLLHNCQUFVLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztnQkFDMUQsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDOUIsQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNsRCxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNLLHVCQUF1QjtRQUM3QixNQUFNLGFBQWEsR0FBRyxJQUFBLGdCQUFJLEVBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUMzRCxvQ0FBb0M7UUFDcEMsSUFBSSxDQUFDLElBQUEsb0JBQVUsRUFBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1lBQy9CLE1BQU0sSUFBSSxLQUFLLENBQ2IseUNBQXlDLGFBQWEsSUFBSTtnQkFDeEQsdURBQXVEO2dCQUN2RCxvRUFBb0UsQ0FDdkUsQ0FBQztRQUNKLENBQUM7UUFDRCwrRkFBK0Y7SUFDakcsQ0FBQztJQUVEOztPQUVHO0lBQ0ssb0JBQW9CO1FBQzFCLE1BQU0sZ0JBQWdCLEdBQUcsSUFBQSxnQkFBSSxFQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sVUFBVSxHQUFHLElBQUEscUJBQVcsRUFBQyxnQkFBZ0IsQ0FBQyxDQUFDLE1BQU0sQ0FDckQsQ0FBQyxJQUFZLEVBQUUsRUFBRTtRQUNmLDhDQUE4QztRQUM5QyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQztZQUM1QixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUMxRCxDQUFDO1FBRUYsSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzVCLE1BQU0sSUFBSSxLQUFLLENBQUMsMENBQTBDLENBQUMsQ0FBQztRQUM5RCxDQUFDO1FBRUQsa0NBQWtDO1FBQ2xDLE1BQU0sY0FBYyxHQUFHLElBQUEsZ0JBQUksRUFBQyxTQUFTLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsSUFBQSxvQkFBVSxFQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7WUFDaEMsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQzlDLENBQUM7UUFFRCxNQUFNLGlCQUFpQixHQUFHLElBQUEsc0JBQVksRUFBQyxjQUFjLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFaEUsK0NBQStDO1FBQy9DLEtBQUssTUFBTSxTQUFTLElBQUksVUFBVSxFQUFFLENBQUM7WUFDbkMsTUFBTSxhQUFhLEdBQUcsSUFBQSxnQkFBSSxFQUFDLGdCQUFnQixFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ3hELE1BQU0sZUFBZSxHQUFHLElBQUEsc0JBQVksRUFBQyxhQUFhLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDN0QsTUFBTSxjQUFjLEdBQUcsaUJBQWlCLEdBQUcsSUFBSSxHQUFHLGVBQWUsQ0FBQztZQUNsRSxJQUFBLHVCQUFhLEVBQUMsYUFBYSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQy9DLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLDBCQUEwQjtRQUNoQyxNQUFNLGFBQWEsR0FBRyxJQUFBLGdCQUFJLEVBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUUzRCxJQUFJLENBQUMsSUFBQSxvQkFBVSxFQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7WUFDL0IsTUFBTSxJQUFJLEtBQUssQ0FDYiwwRUFBMEUsYUFBYSxFQUFFLENBQzFGLENBQUM7UUFDSixDQUFDO1FBRUQsTUFBTSxZQUFZLEdBQUcsQ0FDbkIsR0FBVyxFQUNYLGVBQXVCLEVBQUUsRUFDVixFQUFFO1lBQ2pCLE1BQU0sT0FBTyxHQUFHLElBQUEscUJBQVcsRUFBQyxHQUFHLEVBQUUsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUUxRCxLQUFLLE1BQU0sS0FBSyxJQUFJLE9BQU8sRUFBRSxDQUFDO2dCQUM1QixNQUFNLFFBQVEsR0FBRyxJQUFBLGdCQUFJLEVBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFFdkMsSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxjQUFjLEVBQUUsQ0FBQztvQkFDekQsbUVBQW1FO29CQUNuRSxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsUUFBUSxFQUFFLElBQUEsZ0JBQUksRUFBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7b0JBQ3RFLElBQUksTUFBTSxLQUFLLElBQUk7d0JBQUUsT0FBTyxNQUFNLENBQUM7Z0JBQ3JDLENBQUM7cUJBQU0sSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUUsQ0FBQztvQkFDeEQsd0RBQXdEO29CQUN4RCxNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUM7b0JBQ3RCLE1BQU0sV0FBVyxHQUFHLElBQUEsZ0JBQUksRUFBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7b0JBQzdDLElBQUksSUFBQSxvQkFBVSxFQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7d0JBQzVCLE9BQU8sWUFBWSxJQUFJLEdBQUcsQ0FBQztvQkFDN0IsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztZQUNELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUFDO1FBRUYsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzNDLElBQUksTUFBTSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ3BCLE1BQU0sSUFBSSxLQUFLLENBQ2IsdUZBQXVGLGFBQWEsSUFBSTtnQkFDdEcsK0ZBQStGLENBQ2xHLENBQUM7UUFDSixDQUFDO1FBRUQsS0FBSyxDQUFDLEdBQUcsc0JBQVUsMENBQTBDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDeEUsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVEOztPQUVHO0lBQ0ssVUFBVTtRQUNoQixNQUFNLFdBQVcsR0FBRyxJQUFBLGdCQUFJLEVBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN2RCx5REFBeUQ7UUFDekQsSUFBSSxDQUFDLElBQUEsb0JBQVUsRUFBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQzdCLE1BQU0sSUFBSSxLQUFLLENBQ2IsOEJBQThCLFdBQVcsSUFBSTtnQkFDM0MsOENBQThDLENBQ2pELENBQUM7UUFDSixDQUFDO1FBQ0QsdUVBQXVFO1FBQ3ZFLE9BQU8sSUFBQSxzQkFBWSxFQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNuRCxDQUFDO0lBRUQ7O09BRUc7SUFDSyx3QkFBd0I7UUFDOUIsTUFBTSxhQUFhLEdBQUcsSUFBQSxnQkFBSSxFQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ2hFLElBQUksQ0FBQyxJQUFBLG9CQUFVLEVBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztZQUMvQixPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFFRCxJQUFJLENBQUM7WUFDSCxPQUFPLElBQUEscUJBQVcsRUFBQyxhQUFhLEVBQUUsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQzVELENBQUMsS0FBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNmLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtnQkFDaEIsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXLEVBQUU7YUFDakMsQ0FBQyxDQUNILENBQUM7UUFDSixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxzQkFBVSxxQ0FBcUMsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUN4RSxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSywyQkFBMkIsQ0FBQyxjQUFzQjtRQUN4RCxNQUFNLGVBQWUsR0FBRyxJQUFBLGdCQUFJLEVBQUMsY0FBYyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxJQUFBLG9CQUFVLEVBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztZQUNqQyxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQztZQUNILDhFQUE4RTtZQUM5RSxNQUFNLFVBQVUsR0FBRyxJQUFBLHFCQUFXLEVBQUMsZUFBZSxFQUFFO2dCQUM5QyxTQUFTLEVBQUUsSUFBSTtnQkFDZixhQUFhLEVBQUUsSUFBSTthQUNwQixDQUFDLENBQUM7WUFFSCxNQUFNLGdCQUFnQixHQUFhLEVBQUUsQ0FBQztZQUV0QyxLQUFLLE1BQU0sS0FBSyxJQUFJLFVBQVUsRUFBRSxDQUFDO2dCQUMvQixrRUFBa0U7Z0JBQ2xFLElBQUksS0FBSyxDQUFDLFdBQVcsRUFBRSxJQUFJLEtBQUssQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDO29CQUNsRCwrREFBK0Q7b0JBQy9ELE1BQU0sYUFBYSxHQUNqQixLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7d0JBQzdCLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDO29CQUV2QyxJQUFJLGFBQWEsRUFBRSxDQUFDO3dCQUNsQix3RUFBd0U7d0JBQ3hFLE1BQU0sUUFBUSxHQUFHLElBQUEsZ0JBQUksRUFBQyxLQUFLLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDcEQsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUNsQyxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1lBRUQsS0FBSyxDQUNILEdBQUcsc0JBQVUsVUFBVSxnQkFBZ0IsQ0FBQyxNQUFNLDhDQUE4QyxDQUM3RixDQUFDO1lBRUYseURBQXlEO1lBQ3pELEtBQUssTUFBTSxJQUFJLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztnQkFDcEMsSUFBSSxDQUFDO29CQUNILElBQUEsZ0JBQU0sRUFBQyxJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO29CQUMvQyxLQUFLLENBQUMsR0FBRyxzQkFBVSxhQUFhLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBQzFDLENBQUM7Z0JBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztvQkFDZixPQUFPLENBQUMsSUFBSSxDQUNWLEdBQUcsc0JBQVUsOEJBQThCLElBQUksS0FBSyxLQUFLLEVBQUUsQ0FDNUQsQ0FBQztnQkFDSixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLElBQUksQ0FDVixHQUFHLHNCQUFVLG9EQUFvRCxLQUFLLEVBQUUsQ0FDekUsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSywrQkFBK0I7UUFDckMsTUFBTSxlQUFlLEdBQUcsSUFBQSxnQkFBSSxFQUMxQixJQUFJLENBQUMsV0FBVyxFQUNoQixZQUFZLEVBQ1osY0FBYyxDQUNmLENBQUM7UUFDRixNQUFNLE9BQU8sR0FBRyxJQUFBLGdCQUFJLEVBQUMsZUFBZSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzlDLE1BQU0sSUFBSSxHQUFHLElBQUEsc0NBQW1CLEdBQUUsQ0FBQztRQUVuQyxJQUFJLENBQUMsb0JBQW9CLENBQ3ZCLE9BQU8sRUFDUCxJQUFJLENBQUMsc0JBQXNCLENBQ3pCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsRUFDdEMsYUFBYSxJQUFJLEVBQUUsQ0FDcEIsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNLLDhCQUE4QixDQUFDLGNBQXNCO1FBQzNELE1BQU0sU0FBUyxHQUFHLElBQUEsZ0JBQUksRUFBQyxJQUFJLENBQUMsV0FBVyxFQUFFLCtCQUErQixDQUFDLENBQUM7UUFDMUUsTUFBTSxlQUFlLEdBQUcsSUFBQSxnQkFBSSxFQUFDLFNBQVMsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUN4RCxNQUFNLE9BQU8sR0FBRyxJQUFBLGdCQUFJLEVBQUMsZUFBZSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRTlDLElBQUEsZ0JBQU0sRUFBQyxTQUFTLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3BELElBQUEsbUJBQVMsRUFBQyxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUV4Qyw4REFBOEQ7UUFDOUQsSUFBQSxnQkFBTSxFQUFDLElBQUEsZ0JBQUksRUFBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLG9CQUFvQixDQUFDLEVBQUUsU0FBUyxFQUFFO1lBQzdELFNBQVMsRUFBRSxJQUFJO1NBQ2hCLENBQUMsQ0FBQztRQUVILE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FDdkMsSUFBQSxnQkFBSSxFQUFDLGNBQWMsRUFBRSxjQUFjLENBQUMsQ0FDckMsQ0FBQztRQUNGLElBQUksV0FBVyxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxlQUFlLENBQUMsQ0FBQztRQUN0RCxDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sQ0FBQyxJQUFJLENBQ1YsR0FBRyxzQkFBVSw4SEFBOEgsQ0FDNUksQ0FBQztRQUNKLENBQUM7UUFFRCxNQUFNLG1CQUFtQixHQUFHLElBQUEsZ0JBQUksRUFDOUIsSUFBSSxDQUFDLFdBQVcsRUFDaEIsNEJBQTRCLENBQzdCLENBQUM7UUFDRixJQUFJLENBQUMsSUFBQSxvQkFBVSxFQUFDLG1CQUFtQixDQUFDLEVBQUUsQ0FBQztZQUNyQyxNQUFNLElBQUksS0FBSyxDQUNiLEdBQUcsc0JBQVUsOENBQThDLG1CQUFtQixxRkFBcUYsQ0FDcEssQ0FBQztRQUNKLENBQUM7UUFDRCxJQUFBLGdCQUFNLEVBQUMsbUJBQW1CLEVBQUUsSUFBQSxnQkFBSSxFQUFDLFNBQVMsRUFBRSw0QkFBNEIsQ0FBQyxDQUFDLENBQUM7UUFFM0UsTUFBTSxJQUFJLEdBQUcsSUFBQSxzQ0FBbUIsR0FBRSxDQUFDO1FBQ25DLElBQUksQ0FBQyxvQkFBb0IsQ0FDdkIsT0FBTyxFQUNQLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxXQUFXLEVBQUUsU0FBUyxJQUFJLEVBQUUsQ0FBQyxDQUMxRCxDQUFDO1FBRUYsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNLLGdCQUFnQixDQUFDLGVBQXVCO1FBQzlDLE1BQU0sT0FBTyxHQUFHLElBQUEsZ0JBQUksRUFBQyxlQUFlLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDL0MsSUFBSSxJQUFBLG9CQUFVLEVBQUMsSUFBQSxnQkFBSSxFQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDOUMsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQztRQUVELE1BQU0sUUFBUSxHQUFHLElBQUEsZ0JBQUksRUFBQyxlQUFlLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLElBQUEsb0JBQVUsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQzFCLE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7UUFFRCxNQUFNLFVBQVUsR0FBRyxJQUFBLHFCQUFXLEVBQUMsUUFBUSxDQUFDO2FBQ3JDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUMzQyxJQUFJLEVBQUUsQ0FBQztRQUNWLEtBQUssTUFBTSxTQUFTLElBQUksVUFBVSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7WUFDN0MsTUFBTSxNQUFNLEdBQUcsSUFBQSxnQkFBSSxFQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ2xFLElBQUksSUFBQSxvQkFBVSxFQUFDLElBQUEsZ0JBQUksRUFBQyxNQUFNLEVBQUUsY0FBYyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUM3QyxPQUFPLE1BQU0sQ0FBQztZQUNoQixDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ssZ0JBQWdCLENBQUMsV0FBbUIsRUFBRSxVQUFrQjtRQUM5RCxxRUFBcUU7UUFDckUscUVBQXFFO1FBQ3JFLHdDQUF3QztRQUN4QyxNQUFNLFVBQVUsR0FBRyxJQUFBLGdCQUFJLEVBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzNDLE1BQU0sS0FBSyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDeEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztRQUVqQyxPQUFPLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDeEIsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRyxDQUFDO1lBQzVCLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNyQixTQUFTO1lBQ1gsQ0FBQztZQUVELE1BQU0sTUFBTSxHQUFHLElBQUksS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBQSxnQkFBSSxFQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUN2RSxJQUFJLENBQUMsSUFBQSxvQkFBVSxFQUFDLElBQUEsZ0JBQUksRUFBQyxNQUFNLEVBQUUsY0FBYyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUM5QyxPQUFPLENBQUMsSUFBSSxDQUNWLEdBQUcsc0JBQVUsd0JBQXdCLElBQUkseUdBQXlHLENBQ25KLENBQUM7Z0JBQ0YsU0FBUztZQUNYLENBQUM7WUFFRCxvRUFBb0U7WUFDcEUscUVBQXFFO1lBQ3JFLElBQUEsZ0JBQU0sRUFBQyxNQUFNLEVBQUUsSUFBQSxnQkFBSSxFQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsRUFBRTtnQkFDckMsU0FBUyxFQUFFLElBQUk7Z0JBQ2YsV0FBVyxFQUFFLElBQUk7YUFDbEIsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUVqQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUN6QixJQUFBLHNCQUFZLEVBQUMsSUFBQSxnQkFBSSxFQUFDLE1BQU0sRUFBRSxjQUFjLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FDcEQsQ0FBQztZQUNGLHNFQUFzRTtZQUN0RSxxRUFBcUU7WUFDckUsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzFELENBQUM7UUFFRCxLQUFLLENBQ0gsR0FBRyxzQkFBVSwwQkFBMEIsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUN2RSxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNLLHNCQUFzQixDQUM1QixXQUErQixFQUMvQixRQUFnQjtRQUVoQixNQUFNLFFBQVEsR0FBRztZQUNmLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixRQUFRLEVBQUUsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFO1lBQ3ZELEVBQUUsSUFBSSxFQUFFLFNBQVMsUUFBUSxFQUFFLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRTtTQUNqRCxDQUFDO1FBRUYsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2pCLE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUM7UUFFRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUN6QixJQUFBLHNCQUFZLEVBQUMsSUFBQSxnQkFBSSxFQUFDLFdBQVcsRUFBRSxjQUFjLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FDekQsQ0FBQztRQUNGLE1BQU0sb0JBQW9CLEdBQ3hCLFFBQVEsQ0FBQyxvQkFBb0IsSUFBSSxFQUFFLENBQUM7UUFFdEMsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDMUIsTUFBTSxPQUFPLEdBQUcsb0JBQW9CLENBQUMsUUFBUSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUN6RCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2IsT0FBTyxDQUFDLElBQUksQ0FDVixHQUFHLHNCQUFVLFVBQVUsUUFBUSxDQUFDLE9BQU8sdUJBQXVCLEdBQUcsQ0FBQyxJQUFJLHNCQUFzQixHQUFHLENBQUMsT0FBTyxHQUFHLENBQzNHLENBQUM7Z0JBQ0YsT0FBTyxHQUFHLENBQUM7WUFDYixDQUFDO1lBQ0QsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ3JDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNLLG9CQUFvQixDQUMxQixPQUFlLEVBQ2YsUUFBNkM7UUFFN0MsTUFBTSxRQUFRLEdBQUcsSUFBQSxnQkFBSSxFQUFDLElBQUEsZ0JBQU0sR0FBRSxFQUFFLHdCQUF3QixDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLElBQUEsb0JBQVUsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQzFCLElBQUEsbUJBQVMsRUFBQyxRQUFRLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUMzQyxDQUFDO1FBRUQsS0FBSyxNQUFNLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUM7Z0JBQ0gsTUFBTSxTQUFTLEdBQUcsSUFBQSxnQkFBSSxFQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzFDLE1BQU0sR0FBRyxHQUFHLG1DQUFtQyxHQUFHLENBQUMsSUFBSSxNQUFNLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLE9BQU8sTUFBTSxDQUFDO2dCQUUzRixpRUFBaUU7Z0JBQ2pFLE1BQU0sYUFBYSxHQUFHLEdBQUcsR0FBRyxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsT0FBTyxNQUFNLENBQUM7Z0JBQ3ZELE1BQU0sVUFBVSxHQUFHLElBQUEsZ0JBQUksRUFBQyxRQUFRLEVBQUUsYUFBYSxDQUFDLENBQUM7Z0JBRWpELGtFQUFrRTtnQkFDbEUsMERBQTBEO2dCQUMxRCxJQUFJLElBQUEsb0JBQVUsRUFBQyxVQUFVLENBQUMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztvQkFDakUsS0FBSyxDQUNILEdBQUcsc0JBQVUsaUJBQWlCLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLE9BQU8sU0FBUyxVQUFVLEVBQUUsQ0FDM0UsQ0FBQztnQkFDSixDQUFDO3FCQUFNLENBQUM7b0JBQ04sS0FBSyxDQUFDLEdBQUcsc0JBQVUsZ0JBQWdCLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLE9BQU8sS0FBSyxDQUFDLENBQUM7b0JBRWpFLGdFQUFnRTtvQkFDaEUsbUVBQW1FO29CQUNuRSxtRUFBbUU7b0JBQ25FLGtFQUFrRTtvQkFDbEUsa0VBQWtFO29CQUNsRSw0REFBNEQ7b0JBQzVELGtEQUFrRDtvQkFDbEQsTUFBTSxRQUFRLEdBQUcsSUFBQSxnQkFBSSxFQUNuQixRQUFRLEVBQ1IsR0FBRyxhQUFhLElBQUksT0FBTyxDQUFDLEdBQUcsSUFBSSxJQUFBLHlCQUFXLEVBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQ3hFLENBQUM7b0JBQ0YsSUFBSSxDQUFDO3dCQUNILDZEQUE2RDt3QkFDN0QsMkRBQTJEO3dCQUMzRCx5QkFBeUI7d0JBQ3pCLElBQUEsNkJBQVEsRUFDTixnREFBZ0QsUUFBUSxNQUFNLEdBQUcsR0FBRyxFQUNwRSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FDbEIsQ0FBQzt3QkFFRixJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7NEJBQ3RDLE1BQU0sSUFBSSxLQUFLLENBQ2IsdUJBQXVCLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLE9BQU8seUJBQXlCLFFBQVEsRUFBRSxDQUNsRixDQUFDO3dCQUNKLENBQUM7d0JBRUQsSUFBQSxvQkFBVSxFQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztvQkFDbkMsQ0FBQzs0QkFBUyxDQUFDO3dCQUNULElBQUksSUFBQSxvQkFBVSxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7NEJBQ3pCLElBQUEsZ0JBQU0sRUFBQyxRQUFRLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQzt3QkFDcEMsQ0FBQztvQkFDSCxDQUFDO29CQUVELEtBQUssQ0FDSCxHQUFHLHNCQUFVLFdBQVcsR0FBRyxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsT0FBTyxPQUFPLFVBQVUsRUFBRSxDQUNuRSxDQUFDO2dCQUNKLENBQUM7Z0JBRUQsSUFBQSxtQkFBUyxFQUFDLFNBQVMsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUMxQyxJQUFBLDZCQUFRLEVBQ04sYUFBYSxVQUFVLFNBQVMsU0FBUyx3QkFBd0IsRUFDakUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQ2xCLENBQUM7Z0JBRUYsS0FBSyxDQUFDLEdBQUcsc0JBQVUsY0FBYyxHQUFHLENBQUMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQzlELENBQUM7WUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO2dCQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxzQkFBVSxzQkFBc0IsR0FBRyxDQUFDLElBQUksS0FBSyxLQUFLLEVBQUUsQ0FBQyxDQUFDO2dCQUN2RSxNQUFNLEtBQUssQ0FBQztZQUNkLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxpQkFBaUIsQ0FBQyxRQUFnQjtRQUN4QyxJQUFJLENBQUM7WUFDSCxPQUFPLElBQUEsa0JBQVEsRUFBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ3JDLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDOztBQXRuQkgsa0NBdW5CQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4ZWNTeW5jIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgcmFuZG9tQnl0ZXMgfSBmcm9tIFwibm9kZTpjcnlwdG9cIjtcbmltcG9ydCB7XG4gIGV4aXN0c1N5bmMsXG4gIHJlYWRGaWxlU3luYyxcbiAgcmVhZGRpclN5bmMsXG4gIHdyaXRlRmlsZVN5bmMsXG4gIHJtU3luYyxcbiAgbWtkaXJTeW5jLFxuICBjcFN5bmMsXG4gIHJlbmFtZVN5bmMsXG4gIHN0YXRTeW5jLFxufSBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0IHsgdG1wZGlyIH0gZnJvbSBcIm5vZGU6b3NcIjtcbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBqb2luIGFzIGpvaW5Qb3NpeCB9IGZyb20gXCJub2RlOnBhdGgvcG9zaXhcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzXG5pbXBvcnQgZ2V0RGVidWcgZnJvbSBcImRlYnVnXCI7XG5pbXBvcnQgeyBMT0dfUFJFRklYLCBOZXh0anNUeXBlIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgTmV4dGpzQmFzZVByb3BzIH0gZnJvbSBcIi4uL3Jvb3QtY29uc3RydWN0cy9uZXh0anMtYmFzZS1jb25zdHJ1Y3RcIjtcbmltcG9ydCB7IHVzZURlZGljYXRlZEltYWdlRnVuY3Rpb24gfSBmcm9tIFwiLi4vdXRpbHMvZXhwZXJpbWVudGFsLWZsYWdzXCI7XG5pbXBvcnQgeyBnZXROb2RlQXJjaGl0ZWN0dXJlIH0gZnJvbSBcIi4uL3V0aWxzL2dldC1hcmNoaXRlY3R1cmVcIjtcblxuY29uc3QgZGVidWcgPSBnZXREZWJ1ZyhcImNkay1uZXh0anM6bmV4dGpzLWJ1aWxkXCIpO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5leHRqc0J1aWxkUHJvcHMge1xuICAvKipcbiAgICogQHNlZSB7QGxpbmsgTmV4dGpzQmFzZVByb3BzW1wiYnVpbGRDb21tYW5kXCJdfVxuICAgKi9cbiAgcmVhZG9ubHkgYnVpbGRDb21tYW5kOiBOZXh0anNCYXNlUHJvcHNbXCJidWlsZENvbW1hbmRcIl07XG4gIC8qKlxuICAgKiBEaXJlY3Rvcnkgd2hlcmUgdGhlIE5leHQuanMgYXBwbGljYXRpb24gaXMgbG9jYXRlZCBmb3IgbG9jYWwgYnVpbGRzLlxuICAgKiBUaGlzIHNob3VsZCBjb250YWluIHRoZSBwYWNrYWdlLmpzb24gYW5kIE5leHQuanMgYXBwbGljYXRpb24gZmlsZXMuXG4gICAqL1xuICByZWFkb25seSBidWlsZERpcmVjdG9yeTogc3RyaW5nO1xuICByZWFkb25seSBuZXh0anNUeXBlOiBOZXh0anNUeXBlO1xuICAvKipcbiAgICogQHNlZSB7QGxpbmsgTmV4dGpzQmFzZVByb3BzLnNraXBCdWlsZH1cbiAgICovXG4gIHJlYWRvbmx5IHNraXBCdWlsZD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHVibGljRGlyRW50cnkge1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGlzRGlyZWN0b3J5OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEJ1aWxkcyBOZXh0LmpzIGFzc2V0cy5cbiAqIEBsaW5rIGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL3BhZ2VzL2FwaS1yZWZlcmVuY2UvbmV4dC1jb25maWctanMvb3V0cHV0XG4gKi9cbmV4cG9ydCBjbGFzcyBOZXh0anNCdWlsZCBleHRlbmRzIENvbnN0cnVjdCB7XG4gIC8qKlxuICAgKiBVbmlxdWUgaWQgZm9yIE5leHQuanMgYnVpbGQuIFVzZWQgdG8gcGFydGl0aW9uIGNhY2hlIHN0b3JhZ2UgYW5kIGFzXG4gICAqIG1ldGFkYXRhIGZvciBzdGF0aWMgYXNzZXRzIGluIFMzIGJ1Y2tldC5cbiAgICovXG4gIGJ1aWxkSWQ6IHN0cmluZztcbiAgLyoqXG4gICAqIEFic29sdXRlIHBhdGggdG8gdGhlIGluaXQgY2FjaGUgZGlyZWN0b3J5XG4gICAqIEBleGFtcGxlIFwiL1VzZXJzL2pvaG4vbXlhcHAvLm5leHQvY2RrLW5leHRqcy1pbml0LWNhY2hlXCJcbiAgICovXG4gIGluaXRDYWNoZURpcjogc3RyaW5nO1xuICAvKipcbiAgICogQWJzb2x1dGUgcGF0aCB0byBwdWJsaWMuIFVzZSBieSBDbG91ZEZyb250L0FMQiB0byBjcmVhdGUgYmVoYXZpb3JzL3J1bGVzXG4gICAqIEBleGFtcGxlIFwiL1VzZXJzL2pvaG4vbXlhcHAvcHVibGljXCJcbiAgICovXG4gIHB1YmxpY0RpckVudHJpZXM6IFB1YmxpY0RpckVudHJ5W107XG4gIC8qKlxuICAgKiBUaGUgZW50cnlwb2ludCBKYXZhU2NyaXB0IGZpbGUgdXNlZCBhcyBhbiBhcmd1bWVudCBmb3IgTm9kZS5qcyB0byBydW4gdGhlXG4gICAqIE5leHQuanMgc3RhbmRhbG9uZSBzZXJ2ZXIgcmVsYXRpdmUgdG8gdGhlIHN0YW5kYWxvbmUgZGlyZWN0b3J5LlxuICAgKiBAZXhhbXBsZSBcIi4vc2VydmVyLmpzXCJcbiAgICogQGV4YW1wbGUgXCIuL3BhY2thZ2VzL3VpL3NlcnZlci5qc1wiIChtb25vcmVwbylcbiAgICovXG4gIHJlbGF0aXZlUGF0aFRvRW50cnlwb2ludDogc3RyaW5nO1xuICAvKipcbiAgICogUmVsYXRpdmUgcGF0aCBmcm9tIHRoZSBzdGFuZGFsb25lIGRpcmVjdG9yeSB0byB0aGUgcGFja2FnZSBjb250YWluaW5nIHRoZSBOZXh0LmpzIGFwcC5cbiAgICogVGhpcyBpcyBhdXRvbWF0aWNhbGx5IGRldGVjdGVkIGZyb20gdGhlIHN0YW5kYWxvbmUgYnVpbGQgb3V0cHV0LlxuICAgKiBAZXhhbXBsZSBcIi5cIiBmb3Igbm9uLW1vbm9yZXBvIGFwcHNcbiAgICogQGV4YW1wbGUgXCIuL2FwcHMvd2ViXCIgZm9yIG1vbm9yZXBvIGFwcHNcbiAgICovXG4gIHJlbGF0aXZlUGF0aFRvUGFja2FnZTogc3RyaW5nO1xuICAvKipcbiAgICogQWJzb2x1dGUgcGF0aCB0byB0aGUgLm5leHQgZGlyZWN0b3J5IGNvbnRhaW5pbmcgTmV4dC5qcyBidWlsZCBhcnRpZmFjdHNcbiAgICovXG4gIGRvdE5leHRQYXRoOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBBYnNvbHV0ZSBwYXRoIHRvIHRoZSBkaXJlY3RvcnkgcHJlcGFyZWQgZm9yIHRoZSBpbWFnZSBvcHRpbWl6YXRpb24gTGFtYmRhXG4gICAqIGFzc2V0OiBidW5kbGVkIGhhbmRsZXIsIGdsaWJjIGBzaGFycGAgYmluYXJpZXMsIGFuZCBgcmVxdWlyZWQtc2VydmVyLWZpbGVzLmpzb25gLlxuICAgKiBPbmx5IHNldCBmb3Ige0BsaW5rIE5leHRqc1R5cGUuR0xPQkFMX0ZVTkNUSU9OU30gYW5kXG4gICAqIHtAbGluayBOZXh0anNUeXBlLlJFR0lPTkFMX0ZVTkNUSU9OU30sIGFuZCBvbmx5IHdoZW4gdGhlIGRlZGljYXRlZCBpbWFnZVxuICAgKiBvcHRpbWl6YXRpb24gTGFtYmRhIGlzIGVuYWJsZWQuXG4gICAqL1xuICBpbWFnZU9wdGltaXphdGlvbkFzc2V0UGF0aD86IHN0cmluZztcblxuICBwcml2YXRlIHByb3BzOiBOZXh0anNCdWlsZFByb3BzO1xuICBwcml2YXRlIGJ1aWxkQ29tbWFuZDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBOZXh0anNCdWlsZFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICB0aGlzLnByb3BzID0gcHJvcHM7XG4gICAgdGhpcy5kb3ROZXh0UGF0aCA9IGpvaW4ocHJvcHMuYnVpbGREaXJlY3RvcnksIFwiLm5leHRcIik7XG5cbiAgICB0aGlzLmJ1aWxkQ29tbWFuZCA9IHByb3BzLmJ1aWxkQ29tbWFuZCB8fCBcIm5wbSBydW4gYnVpbGRcIjtcblxuICAgIC8vIFNldCBpbml0IGNhY2hlIGRpcmVjdG9yeSBwYXRoXG4gICAgdGhpcy5pbml0Q2FjaGVEaXIgPSBqb2luKFxuICAgICAgcHJvcHMuYnVpbGREaXJlY3RvcnksXG4gICAgICBcIi5uZXh0XCIsXG4gICAgICBcImNkay1uZXh0anMtaW5pdC1jYWNoZVwiLFxuICAgICk7XG5cbiAgICAvLyBFeGVjdXRlIGxvY2FsIGJ1aWxkIHByb2Nlc3NcbiAgICBpZiAocHJvcHMuc2tpcEJ1aWxkICE9PSB0cnVlKSB7XG4gICAgICB0aGlzLnJ1bk5leHRCdWlsZCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWJ1ZyhgJHtMT0dfUFJFRklYfSBTa2lwcGluZzogJHt0aGlzLmJ1aWxkQ29tbWFuZH1gKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBidWlsZCBvdXRwdXQgYW5kIHNldCB2YWxpZGF0ZWQgcGF0aHNcbiAgICB0aGlzLnZhbGlkYXRlTmV4dEJ1aWxkT3V0cHV0KCk7XG5cbiAgICAvLyBBdXRvLWRldGVjdCByZWxhdGl2ZVBhdGhUb1BhY2thZ2UgZnJvbSBzdGFuZGFsb25lIGJ1aWxkIG91dHB1dFxuICAgIHRoaXMucmVsYXRpdmVQYXRoVG9QYWNrYWdlID0gdGhpcy5maW5kUmVsYXRpdmVQYXRoVG9TZXJ2ZXJKcygpO1xuXG4gICAgLy8gU2V0IGVudHJ5cG9pbnQgcGF0aCB1c2luZyBkZXRlY3RlZCByZWxhdGl2ZVBhdGhUb1BhY2thZ2VcbiAgICB0aGlzLnJlbGF0aXZlUGF0aFRvRW50cnlwb2ludCA9IGpvaW5Qb3NpeChcbiAgICAgIHRoaXMucmVsYXRpdmVQYXRoVG9QYWNrYWdlID09PSBcIi5cIiA/IFwiXCIgOiB0aGlzLnJlbGF0aXZlUGF0aFRvUGFja2FnZSxcbiAgICAgIFwic2VydmVyLmpzXCIsXG4gICAgKTtcblxuICAgIHRoaXMuYnVpbGRJZCA9IHRoaXMuZ2V0QnVpbGRJZCgpO1xuICAgIHRoaXMucHVibGljRGlyRW50cmllcyA9IHRoaXMuZ2V0TG9jYWxQdWJsaWNEaXJFbnRyaWVzKCk7XG5cbiAgICBjb25zdCBzdGFuZGFsb25lUGF0aCA9IGpvaW4odGhpcy5kb3ROZXh0UGF0aCwgXCJzdGFuZGFsb25lXCIpO1xuICAgIGNvbnN0IGlzRnVuY3Rpb25zID1cbiAgICAgIHByb3BzLm5leHRqc1R5cGUgPT09IE5leHRqc1R5cGUuR0xPQkFMX0ZVTkNUSU9OUyB8fFxuICAgICAgcHJvcHMubmV4dGpzVHlwZSA9PT0gTmV4dGpzVHlwZS5SRUdJT05BTF9GVU5DVElPTlM7XG5cbiAgICBjb25zdCBkZWRpY2F0ZWRJbWFnZUZ1bmN0aW9uID0gaXNGdW5jdGlvbnMgJiYgdXNlRGVkaWNhdGVkSW1hZ2VGdW5jdGlvbigpO1xuXG4gICAgLy8gU3RyaXAgd2hhdGV2ZXIgcGxhdGZvcm0tc3BlY2lmaWMgU2hhcnAgYmluYXJpZXMgYG5leHQgYnVpbGRgJ3Mgb3V0cHV0XG4gICAgLy8gZmlsZSB0cmFjaW5nIGJ1bmRsZWQgaW4gZWl0aGVyIHdheSwgc2luY2UgdGhleSdyZSB0aGUgaG9zdCdzIChlLmcuXG4gICAgLy8gbWFjT1MvZ2xpYmMpIHJhdGhlciB0aGFuIHRoZSBkZXBsb3ltZW50IHRhcmdldCdzLlxuICAgIHRoaXMucmVtb3ZlRXhpc3RpbmdTaGFycEJpbmFyaWVzKHN0YW5kYWxvbmVQYXRoKTtcbiAgICAvLyBUaGUgc3RhbmRhbG9uZSBzZXJ2ZXIgc2VydmVzIGBfbmV4dC9pbWFnZWAgaXRzZWxmIHVubGVzcyBhIGRlZGljYXRlZFxuICAgIC8vIGltYWdlIG9wdGltaXphdGlvbiBMYW1iZGEgdGFrZXMgb3ZlciB0aGF0IHJvdXRlLCBhbmQgaXQgcnVucyBvblxuICAgIC8vIG5vZGU6MjQtYWxwaW5lIChzZWUgZnVuY3Rpb25zLkRvY2tlcmZpbGUpIC8gdGhlIHNhbWUgQWxwaW5lIGJhc2UgZm9yXG4gICAgLy8gQ29udGFpbmVycywgc28gaXQgbmVlZHMgbXVzbCBiaW5hcmllcy4gU2tpcHBpbmcgdGhpcyBpbnN0YWxsIHdoZW4gU2hhcnBcbiAgICAvLyAqaXMqIGludm9rZWQgZnJvbSB0aGUgc2VydmVyIGlzIHNpbGVudDogYGltYWdlT3B0aW1pemVyYCBjYXRjaGVzIHRoZVxuICAgIC8vIGxvYWQgZmFpbHVyZSBpbnRlcm5hbGx5IGFuZCByZXR1cm5zIHRoZSB1bm9wdGltaXplZCBvcmlnaW5hbCB3aXRoIGFuXG4gICAgLy8gSFRUUCAyMDAuXG4gICAgaWYgKCFkZWRpY2F0ZWRJbWFnZUZ1bmN0aW9uKSB7XG4gICAgICB0aGlzLmRvd25sb2FkQW5kSW5zdGFsbFNoYXJwQmluYXJpZXMoKTtcbiAgICB9XG5cbiAgICBpZiAoZGVkaWNhdGVkSW1hZ2VGdW5jdGlvbikge1xuICAgICAgdGhpcy5pbWFnZU9wdGltaXphdGlvbkFzc2V0UGF0aCA9XG4gICAgICAgIHRoaXMucHJlcGFyZUltYWdlT3B0aW1pemF0aW9uQXNzZXRzKHN0YW5kYWxvbmVQYXRoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZSBsb2NhbCBidWlsZCBjb21tYW5kIGluIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5XG4gICAqL1xuICBwcml2YXRlIHJ1bk5leHRCdWlsZCgpIHtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGAke0xPR19QUkVGSVh9IFJ1bm5pbmc6IFwiJHt0aGlzLmJ1aWxkQ29tbWFuZH1cIiBpbiBkaXJlY3Rvcnk6ICR7dGhpcy5wcm9wcy5idWlsZERpcmVjdG9yeX1gLFxuICAgICk7XG5cbiAgICAvLyBDbGVhbiBleGlzdGluZyBjYWNoZSBkaXJlY3RvcnkgdG8gYXZvaWQgc3RhbGUgZGF0YSBmcm9tIHByZXZpb3VzIGJ1aWxkc1xuICAgIGlmIChleGlzdHNTeW5jKHRoaXMuaW5pdENhY2hlRGlyKSkge1xuICAgICAgcm1TeW5jKHRoaXMuaW5pdENhY2hlRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gICAgICBkZWJ1ZyhgQ2xlYW5lZCBleGlzdGluZyBjYWNoZSBkaXJlY3Rvcnk6ICR7dGhpcy5pbml0Q2FjaGVEaXJ9YCk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGV4ZWNTeW5jKHRoaXMuYnVpbGRDb21tYW5kLCB7XG4gICAgICAgIHN0ZGlvOiBcImluaGVyaXRcIixcbiAgICAgICAgY3dkOiB0aGlzLnByb3BzLmJ1aWxkRGlyZWN0b3J5LFxuICAgICAgICBlbnY6IHtcbiAgICAgICAgICAuLi5wcm9jZXNzLmVudixcbiAgICAgICAgICBDREtfTkVYVEpTX0lOSVRfQ0FDSEVfRElSOiB0aGlzLmluaXRDYWNoZURpcixcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBDb3B5IHBhdGNoLWZldGNoLmpzIGludG8gY2xpZW50IEpTIGJ1bmRsZSBhZnRlciBidWlsZCBvbmx5IGZvciBOZXh0anNHbG9iYWxGdW5jdGlvbnNcbiAgICAgIGlmICh0aGlzLnByb3BzLm5leHRqc1R5cGUgPT09IE5leHRqc1R5cGUuR0xPQkFMX0ZVTkNUSU9OUykge1xuICAgICAgICB0aGlzLnBhdGNoRmV0Y2hJbkNsaWVudEpzKCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTG9jYWwgYnVpbGQgZmFpbGVkOiAke2Vycm9yfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBOZXh0LmpzIGJ1aWxkIG91dHB1dFxuICAgKiBBbGwgYnVpbGRzIG11c3QgYmUgc3RhbmRhbG9uZSAtIG5vIGZhbGxiYWNrIHRvIHJlZ3VsYXIgYnVpbGRzXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlTmV4dEJ1aWxkT3V0cHV0KCk6IHZvaWQge1xuICAgIGNvbnN0IHN0YW5kYWxvbmVEaXIgPSBqb2luKHRoaXMuZG90TmV4dFBhdGgsIFwic3RhbmRhbG9uZVwiKTtcbiAgICAvLyBTdGFuZGFsb25lIGRpcmVjdG9yeSBpcyBtYW5kYXRvcnlcbiAgICBpZiAoIWV4aXN0c1N5bmMoc3RhbmRhbG9uZURpcikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFN0YW5kYWxvbmUgYnVpbGQgZGlyZWN0b3J5IG5vdCBmb3VuZDogJHtzdGFuZGFsb25lRGlyfS4gYCArXG4gICAgICAgICAgYEFsbCBidWlsZHMgbXVzdCBiZSBjb25maWd1cmVkIGZvciBzdGFuZGFsb25lIG91dHB1dC4gYCArXG4gICAgICAgICAgYFBsZWFzZSBlbnN1cmUgeW91ciBuZXh0LmNvbmZpZy5qcyBpbmNsdWRlcyAnb3V0cHV0OiBcInN0YW5kYWxvbmVcIicuYCxcbiAgICAgICk7XG4gICAgfVxuICAgIC8vIEFkZGl0aW9uYWwgdmFsaWRhdGlvbiAoc2VydmVyLmpzIHdpdGggLm5leHQgc2libGluZykgaGFwcGVucyBpbiBmaW5kUmVsYXRpdmVQYXRoVG9TZXJ2ZXJKcygpXG4gIH1cblxuICAvKipcbiAgICogRmluZCBlbnRyeXBvaW50IGNsaWVudCBzaWRlIGpzIGZpbGVzIHRvIHBhdGNoIGBmZXRjaGAgb25seSBmb3IgTmV4dGpzR2xvYmFsRnVuY3Rpb25zXG4gICAqL1xuICBwcml2YXRlIHBhdGNoRmV0Y2hJbkNsaWVudEpzKCkge1xuICAgIGNvbnN0IHN0YXRpY0NodW5rc1BhdGggPSBqb2luKHRoaXMuZG90TmV4dFBhdGgsIFwic3RhdGljXCIsIFwiY2h1bmtzXCIpO1xuICAgIGNvbnN0IGNodW5rRmlsZXMgPSByZWFkZGlyU3luYyhzdGF0aWNDaHVua3NQYXRoKS5maWx0ZXIoXG4gICAgICAoZmlsZTogc3RyaW5nKSA9PlxuICAgICAgICAvLyBtYWluLWFwcC0gZm9yIHdlYnBhY2ssIHR1cmJvcGFjay0gZm9yIHR1cmJvXG4gICAgICAgIGZpbGUuc3RhcnRzV2l0aChcIm1haW4tYXBwLVwiKSB8fFxuICAgICAgICAoZmlsZS5zdGFydHNXaXRoKFwidHVyYm9wYWNrLVwiKSAmJiBmaWxlLmVuZHNXaXRoKFwiLmpzXCIpKSxcbiAgICApO1xuXG4gICAgaWYgKGNodW5rRmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBjbGllbnQgc2lkZSBqcyBlbnRyeXBvaW50IGZpbGVzIGZvdW5kXCIpO1xuICAgIH1cblxuICAgIC8vIFJlYWQgdGhlIHBhdGNoLWZldGNoLmpzIGNvbnRlbnRcbiAgICBjb25zdCBwYXRjaEZldGNoUGF0aCA9IGpvaW4oX19kaXJuYW1lLCBcInBhdGNoLWZldGNoLmpzXCIpO1xuICAgIGlmICghZXhpc3RzU3luYyhwYXRjaEZldGNoUGF0aCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcInBhdGNoLWZldGNoLmpzIG5vdCBmb3VuZFwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXRjaEZldGNoQ29udGVudCA9IHJlYWRGaWxlU3luYyhwYXRjaEZldGNoUGF0aCwgXCJ1dGYtOFwiKTtcblxuICAgIC8vIFByZXBlbmQgcGF0Y2gtZmV0Y2ggbG9naWMgdG8gZWFjaCBlbnRyeXBvaW50XG4gICAgZm9yIChjb25zdCBjaHVua0ZpbGUgb2YgY2h1bmtGaWxlcykge1xuICAgICAgY29uc3QgY2h1bmtGaWxlUGF0aCA9IGpvaW4oc3RhdGljQ2h1bmtzUGF0aCwgY2h1bmtGaWxlKTtcbiAgICAgIGNvbnN0IG9yaWdpbmFsQ29udGVudCA9IHJlYWRGaWxlU3luYyhjaHVua0ZpbGVQYXRoLCBcInV0Zi04XCIpO1xuICAgICAgY29uc3QgcGF0Y2hlZENvbnRlbnQgPSBwYXRjaEZldGNoQ29udGVudCArIFwiXFxuXCIgKyBvcmlnaW5hbENvbnRlbnQ7XG4gICAgICB3cml0ZUZpbGVTeW5jKGNodW5rRmlsZVBhdGgsIHBhdGNoZWRDb250ZW50KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQXV0b21hdGljYWxseSBmaW5kcyB0aGUgcmVsYXRpdmUgcGF0aCBmcm9tIHN0YW5kYWxvbmUgZGlyZWN0b3J5IHRvIHRoZVxuICAgKiBwYWNrYWdlIGNvbnRhaW5pbmcgc2VydmVyLmpzIGJ5IHNlYXJjaGluZyBmb3Igc2VydmVyLmpzIHdpdGggYSAubmV4dCBzaWJsaW5nLlxuICAgKiBAcmV0dXJucyBcIi5cIiBmb3Igbm9uLW1vbm9yZXBvIGFwcHMsIG9yIHJlbGF0aXZlIHBhdGggbGlrZSBcImFwcC1wbGF5Z3JvdW5kXCIgZm9yIG1vbm9yZXBvIGFwcHNcbiAgICovXG4gIHByaXZhdGUgZmluZFJlbGF0aXZlUGF0aFRvU2VydmVySnMoKTogc3RyaW5nIHtcbiAgICBjb25zdCBzdGFuZGFsb25lRGlyID0gam9pbih0aGlzLmRvdE5leHRQYXRoLCBcInN0YW5kYWxvbmVcIik7XG5cbiAgICBpZiAoIWV4aXN0c1N5bmMoc3RhbmRhbG9uZURpcikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbm5vdCBkZXRlY3QgcmVsYXRpdmVQYXRoVG9QYWNrYWdlOiBzdGFuZGFsb25lIGRpcmVjdG9yeSBub3QgZm91bmQgYXQgJHtzdGFuZGFsb25lRGlyfWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmRTZXJ2ZXJKcyA9IChcbiAgICAgIGRpcjogc3RyaW5nLFxuICAgICAgcmVsYXRpdmVQYXRoOiBzdHJpbmcgPSBcIlwiLFxuICAgICk6IHN0cmluZyB8IG51bGwgPT4ge1xuICAgICAgY29uc3QgZW50cmllcyA9IHJlYWRkaXJTeW5jKGRpciwgeyB3aXRoRmlsZVR5cGVzOiB0cnVlIH0pO1xuXG4gICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICAgICAgY29uc3QgZnVsbFBhdGggPSBqb2luKGRpciwgZW50cnkubmFtZSk7XG5cbiAgICAgICAgaWYgKGVudHJ5LmlzRGlyZWN0b3J5KCkgJiYgZW50cnkubmFtZSAhPT0gXCJub2RlX21vZHVsZXNcIikge1xuICAgICAgICAgIC8vIFJlY3Vyc2l2ZWx5IHNlYXJjaCBkaXJlY3RvcmllcyAoc2tpcCBub2RlX21vZHVsZXMgYXQgcm9vdCBsZXZlbClcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBmaW5kU2VydmVySnMoZnVsbFBhdGgsIGpvaW4ocmVsYXRpdmVQYXRoLCBlbnRyeS5uYW1lKSk7XG4gICAgICAgICAgaWYgKHJlc3VsdCAhPT0gbnVsbCkgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSBlbHNlIGlmIChlbnRyeS5pc0ZpbGUoKSAmJiBlbnRyeS5uYW1lID09PSBcInNlcnZlci5qc1wiKSB7XG4gICAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBzZXJ2ZXIuanMgaGFzIGEgLm5leHQgc2libGluZyBkaXJlY3RvcnlcbiAgICAgICAgICBjb25zdCBwYXJlbnREaXIgPSBkaXI7XG4gICAgICAgICAgY29uc3QgZG90TmV4dFBhdGggPSBqb2luKHBhcmVudERpciwgXCIubmV4dFwiKTtcbiAgICAgICAgICBpZiAoZXhpc3RzU3luYyhkb3ROZXh0UGF0aCkpIHtcbiAgICAgICAgICAgIHJldHVybiByZWxhdGl2ZVBhdGggfHwgXCIuXCI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzdWx0ID0gZmluZFNlcnZlckpzKHN0YW5kYWxvbmVEaXIpO1xuICAgIGlmIChyZXN1bHQgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbm5vdCBkZXRlY3QgcmVsYXRpdmVQYXRoVG9QYWNrYWdlOiBDb3VsZCBub3QgZmluZCBzZXJ2ZXIuanMgd2l0aCAubmV4dCBzaWJsaW5nIGluICR7c3RhbmRhbG9uZURpcn0uIGAgK1xuICAgICAgICAgIGBQbGVhc2UgZW5zdXJlIE5leHQuanMgYnVpbGQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBvciBwcm92aWRlIHJlbGF0aXZlUGF0aFRvUGFja2FnZSBtYW51YWxseS5gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBkZWJ1ZyhgJHtMT0dfUFJFRklYfSBBdXRvLWRldGVjdGVkIHJlbGF0aXZlUGF0aFRvUGFja2FnZTogXCIke3Jlc3VsdH1cImApO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGJ1aWxkIElEIGZyb20gLm5leHQgZGlyZWN0b3J5XG4gICAqL1xuICBwcml2YXRlIGdldEJ1aWxkSWQoKTogc3RyaW5nIHtcbiAgICBjb25zdCBidWlsZElkUGF0aCA9IGpvaW4odGhpcy5kb3ROZXh0UGF0aCwgXCJCVUlMRF9JRFwiKTtcbiAgICAvLyBWZXJpZnkgQlVJTERfSUQgZXhpc3RzIChuZWVkZWQgZm9yIGNhY2hlIHBhcnRpdGlvbmluZylcbiAgICBpZiAoIWV4aXN0c1N5bmMoYnVpbGRJZFBhdGgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBCVUlMRF9JRCBmaWxlIG5vdCBmb3VuZCBhdCAke2J1aWxkSWRQYXRofS4gYCArXG4gICAgICAgICAgYEVuc3VyZSBOZXh0LmpzIGJ1aWxkIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuYCxcbiAgICAgICk7XG4gICAgfVxuICAgIC8vIEJVSUxEX0lEIGV4aXN0ZW5jZSBpcyBhbHJlYWR5IHZhbGlkYXRlZCBpbiB2YWxpZGF0ZU5leHRCdWlsZE91dHB1dCgpXG4gICAgcmV0dXJuIHJlYWRGaWxlU3luYyhidWlsZElkUGF0aCwgXCJ1dGYtOFwiKS50cmltKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHB1YmxpYyBkaXJlY3RvcnkgZW50cmllcyBmcm9tIGxvY2FsIGZpbGVzeXN0ZW1cbiAgICovXG4gIHByaXZhdGUgZ2V0TG9jYWxQdWJsaWNEaXJFbnRyaWVzKCk6IFB1YmxpY0RpckVudHJ5W10ge1xuICAgIGNvbnN0IHB1YmxpY0RpclBhdGggPSBqb2luKHRoaXMucHJvcHMuYnVpbGREaXJlY3RvcnksIFwicHVibGljXCIpO1xuICAgIGlmICghZXhpc3RzU3luYyhwdWJsaWNEaXJQYXRoKSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gcmVhZGRpclN5bmMocHVibGljRGlyUGF0aCwgeyB3aXRoRmlsZVR5cGVzOiB0cnVlIH0pLm1hcChcbiAgICAgICAgKGVudHJ5OiBhbnkpID0+ICh7XG4gICAgICAgICAgbmFtZTogZW50cnkubmFtZSxcbiAgICAgICAgICBpc0RpcmVjdG9yeTogZW50cnkuaXNEaXJlY3RvcnkoKSxcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLndhcm4oYCR7TE9HX1BSRUZJWH0gRmFpbGVkIHRvIHJlYWQgcHVibGljIGRpcmVjdG9yeTogJHtlcnJvcn1gKTtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVjdXJzaXZlbHkgZmluZCBhbmQgcmVtb3ZlIGV4aXN0aW5nIFNoYXJwIHBsYXRmb3JtIGJpbmFyaWVzXG4gICAqL1xuICBwcml2YXRlIHJlbW92ZUV4aXN0aW5nU2hhcnBCaW5hcmllcyhzdGFuZGFsb25lUGF0aDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qgbm9kZU1vZHVsZXNQYXRoID0gam9pbihzdGFuZGFsb25lUGF0aCwgXCJub2RlX21vZHVsZXNcIik7XG4gICAgaWYgKCFleGlzdHNTeW5jKG5vZGVNb2R1bGVzUGF0aCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gVXNlIHJlY3Vyc2l2ZSByZWFkZGlyU3luYyB0byBmaW5kIGFsbCBTaGFycCBiaW5hcnkgZGlyZWN0b3JpZXMgYW5kIHN5bWxpbmtzXG4gICAgICBjb25zdCBhbGxFbnRyaWVzID0gcmVhZGRpclN5bmMobm9kZU1vZHVsZXNQYXRoLCB7XG4gICAgICAgIHJlY3Vyc2l2ZTogdHJ1ZSxcbiAgICAgICAgd2l0aEZpbGVUeXBlczogdHJ1ZSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBzaGFycEJpbmFyeVBhdGhzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGFsbEVudHJpZXMpIHtcbiAgICAgICAgLy8gQ2hlY2sgZm9yIGJvdGggZGlyZWN0b3JpZXMgYW5kIHN5bWxpbmtzIChwbnBtIGNyZWF0ZXMgc3ltbGlua3MpXG4gICAgICAgIGlmIChlbnRyeS5pc0RpcmVjdG9yeSgpIHx8IGVudHJ5LmlzU3ltYm9saWNMaW5rKCkpIHtcbiAgICAgICAgICAvLyBNYXRjaCBTaGFycCBiaW5hcnkgcGFja2FnZXMgd2l0aCBtb3JlIGNvbXByZWhlbnNpdmUgcGF0dGVybnNcbiAgICAgICAgICBjb25zdCBpc1NoYXJwQmluYXJ5ID1cbiAgICAgICAgICAgIGVudHJ5Lm5hbWUuaW5jbHVkZXMoXCJzaGFycC1cIikgfHxcbiAgICAgICAgICAgIGVudHJ5Lm5hbWUuaW5jbHVkZXMoXCJzaGFycC1saWJ2aXBzXCIpO1xuXG4gICAgICAgICAgaWYgKGlzU2hhcnBCaW5hcnkpIHtcbiAgICAgICAgICAgIC8vIEZvciByZWN1cnNpdmUgcmVhZGRpclN5bmMsIHBhcmVudFBhdGggY29udGFpbnMgdGhlIGZ1bGwgYWJzb2x1dGUgcGF0aFxuICAgICAgICAgICAgY29uc3QgZnVsbFBhdGggPSBqb2luKGVudHJ5LnBhcmVudFBhdGgsIGVudHJ5Lm5hbWUpO1xuICAgICAgICAgICAgc2hhcnBCaW5hcnlQYXRocy5wdXNoKGZ1bGxQYXRoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZGVidWcoXG4gICAgICAgIGAke0xPR19QUkVGSVh9IEZvdW5kICR7c2hhcnBCaW5hcnlQYXRocy5sZW5ndGh9IFNoYXJwIGJpbmFyeSBkaXJlY3Rvcmllcy9zeW1saW5rcyB0byByZW1vdmVgLFxuICAgICAgKTtcblxuICAgICAgLy8gUmVtb3ZlIGFsbCBmb3VuZCBTaGFycCBiaW5hcnkgZGlyZWN0b3JpZXMgYW5kIHN5bWxpbmtzXG4gICAgICBmb3IgKGNvbnN0IHBhdGggb2Ygc2hhcnBCaW5hcnlQYXRocykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJtU3luYyhwYXRoLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gICAgICAgICAgZGVidWcoYCR7TE9HX1BSRUZJWH0gUmVtb3ZlZDogJHtwYXRofWApO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgIGAke0xPR19QUkVGSVh9IFdhcm5pbmc6IENvdWxkIG5vdCByZW1vdmUgJHtwYXRofTogJHtlcnJvcn1gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgJHtMT0dfUFJFRklYfSBXYXJuaW5nOiBDb3VsZCBub3QgcmVhZCBub2RlX21vZHVsZXMgZGlyZWN0b3J5OiAke2Vycm9yfWAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEb3dubG9hZCBhbmQgaW5zdGFsbCBjb3JyZWN0IFNoYXJwIGJpbmFyaWVzIGZvciBMaW51eCBNVVNMXG4gICAqL1xuICBwcml2YXRlIGRvd25sb2FkQW5kSW5zdGFsbFNoYXJwQmluYXJpZXMoKTogdm9pZCB7XG4gICAgY29uc3Qgbm9kZU1vZHVsZXNQYXRoID0gam9pbihcbiAgICAgIHRoaXMuZG90TmV4dFBhdGgsXG4gICAgICBcInN0YW5kYWxvbmVcIixcbiAgICAgIFwibm9kZV9tb2R1bGVzXCIsXG4gICAgKTtcbiAgICBjb25zdCBpbWdQYXRoID0gam9pbihub2RlTW9kdWxlc1BhdGgsIFwiQGltZ1wiKTtcbiAgICBjb25zdCBhcmNoID0gZ2V0Tm9kZUFyY2hpdGVjdHVyZSgpO1xuXG4gICAgdGhpcy5pbnN0YWxsU2hhcnBQYWNrYWdlcyhcbiAgICAgIGltZ1BhdGgsXG4gICAgICB0aGlzLmdldFNoYXJwQmluYXJ5UGFja2FnZXMoXG4gICAgICAgIHRoaXMuZmluZFNoYXJwUGFja2FnZShub2RlTW9kdWxlc1BhdGgpLFxuICAgICAgICBgbGludXhtdXNsLSR7YXJjaH1gLFxuICAgICAgKSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEFzc2VtYmxlIHRoZSBkZXBsb3ltZW50IGFzc2V0IGZvciB0aGUgZGVkaWNhdGVkIGltYWdlIG9wdGltaXphdGlvblxuICAgKiBMYW1iZGE6IHRoZSBwcmUtYnVuZGxlZCBoYW5kbGVyIChmcm9tIHRoaXMgcGFja2FnZSdzIG93biBgbGliL2Agb3V0cHV0KSxcbiAgICogYHNoYXJwYCdzIEpTIHdyYXBwZXIgKGFscmVhZHkgZGVyZWZlcmVuY2VkIGZyb20gdGhlIHBucG0gc3RvcmUgYnkgTmV4dCdzXG4gICAqIG91dHB1dCBmaWxlIHRyYWNpbmcgaW50byB0aGUgc3RhbmRhbG9uZSBidWlsZCksIGdsaWJjIGBzaGFycGAgYmluYXJpZXNcbiAgICogKHRoZSBzdGFuZGFyZCBMYW1iZGEgbWFuYWdlZCBydW50aW1lIGlzIEFtYXpvbiBMaW51eCAyMDIzL2dsaWJjLCB1bmxpa2VcbiAgICogdGhlIG11c2wgYmluYXJpZXMgdGhlIERvY2tlci9MYW1iZGEgV2ViIEFkYXB0ZXIgc2VydmVyIGZ1bmN0aW9uIG5lZWRzKSxcbiAgICogYW5kIGByZXF1aXJlZC1zZXJ2ZXItZmlsZXMuanNvbmAgKHJlYWQgYnkgdGhlIGhhbmRsZXIgYXQgY29sZCBzdGFydCB0b1xuICAgKiBidWlsZCBgbmV4dENvbmZpZ2ApLlxuICAgKi9cbiAgcHJpdmF0ZSBwcmVwYXJlSW1hZ2VPcHRpbWl6YXRpb25Bc3NldHMoc3RhbmRhbG9uZVBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgYXNzZXRQYXRoID0gam9pbih0aGlzLmRvdE5leHRQYXRoLCBcImNkay1uZXh0anMtaW1hZ2Utb3B0aW1pemF0aW9uXCIpO1xuICAgIGNvbnN0IG5vZGVNb2R1bGVzUGF0aCA9IGpvaW4oYXNzZXRQYXRoLCBcIm5vZGVfbW9kdWxlc1wiKTtcbiAgICBjb25zdCBpbWdQYXRoID0gam9pbihub2RlTW9kdWxlc1BhdGgsIFwiQGltZ1wiKTtcblxuICAgIHJtU3luYyhhc3NldFBhdGgsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcbiAgICBta2RpclN5bmMoaW1nUGF0aCwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgICAvLyBQcmUtYnVuZGxlZCBieSBlc2J1aWxkIGludG8gdGhpcyBwYWNrYWdlJ3Mgb3duIGxpYi8gb3V0cHV0LlxuICAgIGNwU3luYyhqb2luKF9fZGlybmFtZSwgXCIuLlwiLCBcImltYWdlLW9wdGltaXphdGlvblwiKSwgYXNzZXRQYXRoLCB7XG4gICAgICByZWN1cnNpdmU6IHRydWUsXG4gICAgfSk7XG5cbiAgICBjb25zdCBzaGFycFNvdXJjZSA9IHRoaXMuZmluZFNoYXJwUGFja2FnZShcbiAgICAgIGpvaW4oc3RhbmRhbG9uZVBhdGgsIFwibm9kZV9tb2R1bGVzXCIpLFxuICAgICk7XG4gICAgaWYgKHNoYXJwU291cmNlKSB7XG4gICAgICB0aGlzLmNvcHlTaGFycFJ1bnRpbWUoc2hhcnBTb3VyY2UsIG5vZGVNb2R1bGVzUGF0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYCR7TE9HX1BSRUZJWH0gXCJzaGFycFwiIG5vdCBmb3VuZCBpbiBzdGFuZGFsb25lIGJ1aWxkIG91dHB1dC4gQWRkIFwic2hhcnBcIiBhcyBhIGRlcGVuZGVuY3kgb2YgeW91ciBOZXh0LmpzIGFwcCB0byBlbmFibGUgaW1hZ2Ugb3B0aW1pemF0aW9uLmAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcXVpcmVkU2VydmVyRmlsZXMgPSBqb2luKFxuICAgICAgdGhpcy5kb3ROZXh0UGF0aCxcbiAgICAgIFwicmVxdWlyZWQtc2VydmVyLWZpbGVzLmpzb25cIixcbiAgICApO1xuICAgIGlmICghZXhpc3RzU3luYyhyZXF1aXJlZFNlcnZlckZpbGVzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgJHtMT0dfUFJFRklYfSBcInJlcXVpcmVkLXNlcnZlci1maWxlcy5qc29uXCIgbm90IGZvdW5kIGF0ICR7cmVxdWlyZWRTZXJ2ZXJGaWxlc30uIFRoZSBpbWFnZSBvcHRpbWl6YXRpb24gTGFtYmRhIHJlYWRzIGl0IGF0IGNvbGQgc3RhcnQgdG8gYnVpbGQgaXRzIE5leHQuanMgY29uZmlnLmAsXG4gICAgICApO1xuICAgIH1cbiAgICBjcFN5bmMocmVxdWlyZWRTZXJ2ZXJGaWxlcywgam9pbihhc3NldFBhdGgsIFwicmVxdWlyZWQtc2VydmVyLWZpbGVzLmpzb25cIikpO1xuXG4gICAgY29uc3QgYXJjaCA9IGdldE5vZGVBcmNoaXRlY3R1cmUoKTtcbiAgICB0aGlzLmluc3RhbGxTaGFycFBhY2thZ2VzKFxuICAgICAgaW1nUGF0aCxcbiAgICAgIHRoaXMuZ2V0U2hhcnBCaW5hcnlQYWNrYWdlcyhzaGFycFNvdXJjZSwgYGxpbnV4LSR7YXJjaH1gKSxcbiAgICApO1xuXG4gICAgcmV0dXJuIGFzc2V0UGF0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2NhdGUgYHNoYXJwYCdzIEpTIHdyYXBwZXIgaW5zaWRlIGEgc3RhbmRhbG9uZSBgbm9kZV9tb2R1bGVzYC5cbiAgICpcbiAgICogTmV4dCdzIG91dHB1dCBmaWxlIHRyYWNpbmcgcHJlc2VydmVzIHRoZSBpbnN0YWxsZXIncyBvbi1kaXNrIGxheW91dCwgc29cbiAgICogbnBtL3lhcm4gcHJvZHVjZSBhIGhvaXN0ZWQgYG5vZGVfbW9kdWxlcy9zaGFycGAgd2hpbGUgcG5wbSBvbmx5XG4gICAqIG1hdGVyaWFsaXplcyBgbm9kZV9tb2R1bGVzLy5wbnBtL3NoYXJwQDx2ZXJzaW9uPi9ub2RlX21vZHVsZXMvc2hhcnBgLlxuICAgKi9cbiAgcHJpdmF0ZSBmaW5kU2hhcnBQYWNrYWdlKG5vZGVNb2R1bGVzUGF0aDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBob2lzdGVkID0gam9pbihub2RlTW9kdWxlc1BhdGgsIFwic2hhcnBcIik7XG4gICAgaWYgKGV4aXN0c1N5bmMoam9pbihob2lzdGVkLCBcInBhY2thZ2UuanNvblwiKSkpIHtcbiAgICAgIHJldHVybiBob2lzdGVkO1xuICAgIH1cblxuICAgIGNvbnN0IHBucG1QYXRoID0gam9pbihub2RlTW9kdWxlc1BhdGgsIFwiLnBucG1cIik7XG4gICAgaWYgKCFleGlzdHNTeW5jKHBucG1QYXRoKSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBjYW5kaWRhdGVzID0gcmVhZGRpclN5bmMocG5wbVBhdGgpXG4gICAgICAuZmlsdGVyKChuYW1lKSA9PiBuYW1lLnN0YXJ0c1dpdGgoXCJzaGFycEBcIikpXG4gICAgICAuc29ydCgpO1xuICAgIGZvciAoY29uc3QgY2FuZGlkYXRlIG9mIGNhbmRpZGF0ZXMucmV2ZXJzZSgpKSB7XG4gICAgICBjb25zdCBuZXN0ZWQgPSBqb2luKHBucG1QYXRoLCBjYW5kaWRhdGUsIFwibm9kZV9tb2R1bGVzXCIsIFwic2hhcnBcIik7XG4gICAgICBpZiAoZXhpc3RzU3luYyhqb2luKG5lc3RlZCwgXCJwYWNrYWdlLmpzb25cIikpKSB7XG4gICAgICAgIHJldHVybiBuZXN0ZWQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb3B5IGBzaGFycGAgcGx1cyB0aGUgdHJhbnNpdGl2ZSBgZGVwZW5kZW5jaWVzYCBjbG9zdXJlIGByZXF1aXJlKFwic2hhcnBcIilgXG4gICAqIHB1bGxzIGluIChgQGltZy9jb2xvdXJgLCBgZGV0ZWN0LWxpYmNgLCBgc2VtdmVyYCkgaW50byBgdGFyZ2V0UGF0aGAuXG4gICAqXG4gICAqIENvcHlpbmcgb25seSBgc2hhcnBgIGl0c2VsZiBsZWF2ZXMgdGhvc2UgcmVxdWlyZXMgdW5yZXNvbHZhYmxlLCBhbmRcbiAgICogYGltYWdlT3B0aW1pemVyYCBzd2FsbG93cyB0aGUgcmVzdWx0aW5nIGBNT0RVTEVfTk9UX0ZPVU5EYCBieSBmYWxsaW5nIGJhY2tcbiAgICogdG8gc2VydmluZyB0aGUgdW5vcHRpbWl6ZWQgb3JpZ2luYWwsIHNvIHRoZSBvbWlzc2lvbiBpcyBvdGhlcndpc2Ugc2lsZW50LlxuICAgKi9cbiAgcHJpdmF0ZSBjb3B5U2hhcnBSdW50aW1lKHNoYXJwU291cmNlOiBzdHJpbmcsIHRhcmdldFBhdGg6IHN0cmluZyk6IHZvaWQge1xuICAgIC8vIFVuZGVyIHBucG0gYSBwYWNrYWdlJ3MgZGVwZW5kZW5jaWVzIGFyZSBzeW1saW5rZWQgaW50byB0aGUgc2libGluZ1xuICAgIC8vIGRpcmVjdG9yeSBhbG9uZ3NpZGUgaXQsIHdoaWNoIGlzIGFsc28gd2hlcmUgYSBob2lzdGVkIGxheW91dCBrZWVwc1xuICAgIC8vIHRoZW0sIHNvIHRoZSBzYW1lIGxvb2t1cCBjb3ZlcnMgYm90aC5cbiAgICBjb25zdCBsb29rdXBQYXRoID0gam9pbihzaGFycFNvdXJjZSwgXCIuLlwiKTtcbiAgICBjb25zdCBxdWV1ZSA9IFtcInNoYXJwXCJdO1xuICAgIGNvbnN0IGNvcGllZCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gICAgd2hpbGUgKHF1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IG5hbWUgPSBxdWV1ZS5zaGlmdCgpITtcbiAgICAgIGlmIChjb3BpZWQuaGFzKG5hbWUpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzb3VyY2UgPSBuYW1lID09PSBcInNoYXJwXCIgPyBzaGFycFNvdXJjZSA6IGpvaW4obG9va3VwUGF0aCwgbmFtZSk7XG4gICAgICBpZiAoIWV4aXN0c1N5bmMoam9pbihzb3VyY2UsIFwicGFja2FnZS5qc29uXCIpKSkge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgYCR7TE9HX1BSRUZJWH0gXCJzaGFycFwiIGRlcGVuZGVuY3kgXCIke25hbWV9XCIgbm90IGZvdW5kIGluIHN0YW5kYWxvbmUgYnVpbGQgb3V0cHV0OyBpbWFnZSBvcHRpbWl6YXRpb24gbWF5IGZhbGwgYmFjayB0byBzZXJ2aW5nIHVub3B0aW1pemVkIGltYWdlcy5gLFxuICAgICAgICApO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gYGRlcmVmZXJlbmNlYCByZXNvbHZlcyBwbnBtJ3Mgc3ltbGlua3MgaW50byByZWFsIGZpbGVzLCBzaW5jZSB0aGVcbiAgICAgIC8vIExhbWJkYSBhc3NldCBpcyBhIHN0YW5kYWxvbmUgZGlyZWN0b3J5IHdpdGggbm8gc3RvcmUgdG8gbGluayBpbnRvLlxuICAgICAgY3BTeW5jKHNvdXJjZSwgam9pbih0YXJnZXRQYXRoLCBuYW1lKSwge1xuICAgICAgICByZWN1cnNpdmU6IHRydWUsXG4gICAgICAgIGRlcmVmZXJlbmNlOiB0cnVlLFxuICAgICAgfSk7XG4gICAgICBjb3BpZWQuYWRkKG5hbWUpO1xuXG4gICAgICBjb25zdCBtYW5pZmVzdCA9IEpTT04ucGFyc2UoXG4gICAgICAgIHJlYWRGaWxlU3luYyhqb2luKHNvdXJjZSwgXCJwYWNrYWdlLmpzb25cIiksIFwidXRmLThcIiksXG4gICAgICApO1xuICAgICAgLy8gUGxhdGZvcm0gYmluYXJpZXMgYXJlIG9wdGlvbmFsRGVwZW5kZW5jaWVzLCBpbnN0YWxsZWQgc2VwYXJhdGVseSBhdFxuICAgICAgLy8gdGhlIHZlcnNpb25zIHRoaXMgc2FtZSBtYW5pZmVzdCBwaW5zLCBzbyBvbmx5IGBkZXBlbmRlbmNpZXNgIGhlcmUuXG4gICAgICBxdWV1ZS5wdXNoKC4uLk9iamVjdC5rZXlzKG1hbmlmZXN0LmRlcGVuZGVuY2llcyA/PyB7fSkpO1xuICAgIH1cblxuICAgIGRlYnVnKFxuICAgICAgYCR7TE9HX1BSRUZJWH0gQ29waWVkIHNoYXJwIHJ1bnRpbWU6ICR7Wy4uLmNvcGllZF0uc29ydCgpLmpvaW4oXCIsIFwiKX1gLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSB0aGUgYEBpbWcvc2hhcnAtPHBsYXRmb3JtPmAgYW5kIGBAaW1nL3NoYXJwLWxpYnZpcHMtPHBsYXRmb3JtPmBcbiAgICogdmVyc2lvbnMgdG8gaW5zdGFsbCBmb3IgYSBnaXZlbiBwbGF0Zm9ybS5cbiAgICpcbiAgICogVGhlc2UgbXVzdCBtYXRjaCB0aGUgYHNoYXJwYCBKUyB3cmFwcGVyIHRoYXQgb3V0cHV0IGZpbGUgdHJhY2luZyBwdXQgaW5cbiAgICogdGhlIHN0YW5kYWxvbmUgYnVpbGQ6IGBzaGFycGAncyBgbGliL2xpYnZpcHMuanNgIGNvbXBhcmVzIHRoZSBiaW5hcnknc1xuICAgKiByZXBvcnRlZCBsaWJ2aXBzIHZlcnNpb24gYWdhaW5zdCBpdHMgb3duIGBtaW5pbXVtTGlidmlwc1ZlcnNpb25gIGFuZFxuICAgKiB0aHJvd3MgYXQgbG9hZCB3aGVuIHRoZXkgZGlzYWdyZWUuIGBzaGFycGAgcGlucyBib3RoIGluIGl0c1xuICAgKiBgb3B0aW9uYWxEZXBlbmRlbmNpZXNgLCBzbyB0aGF0IG1hbmlmZXN0IGlzIHRoZSBhdXRob3JpdGF0aXZlIHNvdXJjZS5cbiAgICovXG4gIHByaXZhdGUgZ2V0U2hhcnBCaW5hcnlQYWNrYWdlcyhcbiAgICBzaGFycFNvdXJjZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIHBsYXRmb3JtOiBzdHJpbmcsXG4gICk6IHsgbmFtZTogc3RyaW5nOyB2ZXJzaW9uOiBzdHJpbmcgfVtdIHtcbiAgICBjb25zdCBmYWxsYmFjayA9IFtcbiAgICAgIHsgbmFtZTogYHNoYXJwLWxpYnZpcHMtJHtwbGF0Zm9ybX1gLCB2ZXJzaW9uOiBcIjEuMi40XCIgfSxcbiAgICAgIHsgbmFtZTogYHNoYXJwLSR7cGxhdGZvcm19YCwgdmVyc2lvbjogXCIwLjM0LjVcIiB9LFxuICAgIF07XG5cbiAgICBpZiAoIXNoYXJwU291cmNlKSB7XG4gICAgICByZXR1cm4gZmFsbGJhY2s7XG4gICAgfVxuXG4gICAgY29uc3QgbWFuaWZlc3QgPSBKU09OLnBhcnNlKFxuICAgICAgcmVhZEZpbGVTeW5jKGpvaW4oc2hhcnBTb3VyY2UsIFwicGFja2FnZS5qc29uXCIpLCBcInV0Zi04XCIpLFxuICAgICk7XG4gICAgY29uc3Qgb3B0aW9uYWxEZXBlbmRlbmNpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPVxuICAgICAgbWFuaWZlc3Qub3B0aW9uYWxEZXBlbmRlbmNpZXMgPz8ge307XG5cbiAgICByZXR1cm4gZmFsbGJhY2subWFwKChwa2cpID0+IHtcbiAgICAgIGNvbnN0IHZlcnNpb24gPSBvcHRpb25hbERlcGVuZGVuY2llc1tgQGltZy8ke3BrZy5uYW1lfWBdO1xuICAgICAgaWYgKCF2ZXJzaW9uKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBgJHtMT0dfUFJFRklYfSBzaGFycEAke21hbmlmZXN0LnZlcnNpb259IGRvZXMgbm90IHBpbiBcIkBpbWcvJHtwa2cubmFtZX1cIjsgZmFsbGluZyBiYWNrIHRvICR7cGtnLnZlcnNpb259LmAsXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBwa2c7XG4gICAgICB9XG4gICAgICByZXR1cm4geyBuYW1lOiBwa2cubmFtZSwgdmVyc2lvbiB9O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERvd25sb2FkICh3aXRoIGNhY2hpbmcpIGFuZCBleHRyYWN0IFNoYXJwJ3MgcGxhdGZvcm0tc3BlY2lmaWMgYmluYXJ5XG4gICAqIHBhY2thZ2VzIGludG8gYGltZ1BhdGhgLlxuICAgKi9cbiAgcHJpdmF0ZSBpbnN0YWxsU2hhcnBQYWNrYWdlcyhcbiAgICBpbWdQYXRoOiBzdHJpbmcsXG4gICAgcGFja2FnZXM6IHsgbmFtZTogc3RyaW5nOyB2ZXJzaW9uOiBzdHJpbmcgfVtdLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBjYWNoZURpciA9IGpvaW4odG1wZGlyKCksIFwiY2RrLW5leHRqcy1zaGFycC1jYWNoZVwiKTtcbiAgICBpZiAoIWV4aXN0c1N5bmMoY2FjaGVEaXIpKSB7XG4gICAgICBta2RpclN5bmMoY2FjaGVEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgcGtnIG9mIHBhY2thZ2VzKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB0YXJnZXREaXIgPSBqb2luKGltZ1BhdGgsIHBrZy5uYW1lKTtcbiAgICAgICAgY29uc3QgdXJsID0gYGh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BpbWcvJHtwa2cubmFtZX0vLS8ke3BrZy5uYW1lfS0ke3BrZy52ZXJzaW9ufS50Z3pgO1xuXG4gICAgICAgIC8vIENyZWF0ZSBhIGNvbnNpc3RlbnQgZmlsZW5hbWUgYmFzZWQgb24gcGFja2FnZSBuYW1lIGFuZCB2ZXJzaW9uXG4gICAgICAgIGNvbnN0IGNhY2hlRmlsZU5hbWUgPSBgJHtwa2cubmFtZX0tJHtwa2cudmVyc2lvbn0udGd6YDtcbiAgICAgICAgY29uc3QgY2FjaGVkRmlsZSA9IGpvaW4oY2FjaGVEaXIsIGNhY2hlRmlsZU5hbWUpO1xuXG4gICAgICAgIC8vIENoZWNrIGlmIHdlIGFscmVhZHkgaGF2ZSBhIHZhbGlkIHBhY2thZ2UgY2FjaGVkOyByZS1kb3dubG9hZCBpZlxuICAgICAgICAvLyBhIHByZXZpb3VzIHJ1biBsZWZ0IGJlaGluZCBhIHRydW5jYXRlZC9jb3JydXB0IGRvd25sb2FkXG4gICAgICAgIGlmIChleGlzdHNTeW5jKGNhY2hlZEZpbGUpICYmIHRoaXMuaXNDYWNoZWRGaWxlVmFsaWQoY2FjaGVkRmlsZSkpIHtcbiAgICAgICAgICBkZWJ1ZyhcbiAgICAgICAgICAgIGAke0xPR19QUkVGSVh9IFVzaW5nIGNhY2hlZCAke3BrZy5uYW1lfUAke3BrZy52ZXJzaW9ufSBmcm9tICR7Y2FjaGVkRmlsZX1gLFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGVidWcoYCR7TE9HX1BSRUZJWH0gRG93bmxvYWRpbmcgJHtwa2cubmFtZX1AJHtwa2cudmVyc2lvbn0uLi5gKTtcblxuICAgICAgICAgIC8vIERvd25sb2FkIHRvIGEgcHJvY2Vzcy11bmlxdWUgdGVtcCBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeSxcbiAgICAgICAgICAvLyB0aGVuIGF0b21pY2FsbHkgcmVuYW1lIGl0IG9udG8gdGhlIHNoYXJlZCBjYWNoZSBwYXRoLiBDb25jdXJyZW50XG4gICAgICAgICAgLy8gc3ludGggcHJvY2Vzc2VzIChlLmcuIFR1cmJvcmVwbyBydW5uaW5nIG11bHRpcGxlIGBjZGtgIGNvbW1hbmRzKVxuICAgICAgICAgIC8vIHNoYXJlIHRoaXMgY2FjaGUgZGlyLCBzbyB3cml0aW5nIGRpcmVjdGx5IHRvIGBjYWNoZWRGaWxlYCByaXNrc1xuICAgICAgICAgIC8vIGFub3RoZXIgcHJvY2VzcyBleHRyYWN0aW5nIGEgaGFsZi13cml0dGVuIGZpbGUuIFJlbmFtaW5nIHdpdGhpblxuICAgICAgICAgIC8vIHRoZSBzYW1lIGZpbGVzeXN0ZW0gaXMgYXRvbWljLCBzbyByZWFkZXJzIG9ubHkgZXZlciBzZWUgYVxuICAgICAgICAgIC8vIGNvbXBsZXRlIGZpbGUsIHdoaWNoZXZlciBwcm9jZXNzIHdpbnMgdGhlIHJhY2UuXG4gICAgICAgICAgY29uc3QgdGVtcEZpbGUgPSBqb2luKFxuICAgICAgICAgICAgY2FjaGVEaXIsXG4gICAgICAgICAgICBgJHtjYWNoZUZpbGVOYW1lfS4ke3Byb2Nlc3MucGlkfS0ke3JhbmRvbUJ5dGVzKDYpLnRvU3RyaW5nKFwiaGV4XCIpfS50bXBgLFxuICAgICAgICAgICk7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIC0tZmFpbCBtYWtlcyBjdXJsIGV4aXQgbm9uLXplcm8gb24gSFRUUCBlcnJvcnMgYW5kIC0tcmV0cnlcbiAgICAgICAgICAgIC8vIGhhbmRsZXMgdHJhbnNpZW50IGNvbm5lY3Rpb24gZHJvcHMgc28gYSBwYXJ0aWFsIHRyYW5zZmVyXG4gICAgICAgICAgICAvLyBpc24ndCBjYWNoZWQgYXMgdmFsaWQuXG4gICAgICAgICAgICBleGVjU3luYyhcbiAgICAgICAgICAgICAgYGN1cmwgLUwgLS1mYWlsIC0tcmV0cnkgMyAtLXJldHJ5LWRlbGF5IDEgLW8gXCIke3RlbXBGaWxlfVwiIFwiJHt1cmx9XCJgLFxuICAgICAgICAgICAgICB7IHN0ZGlvOiBcInBpcGVcIiB9LFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLmlzQ2FjaGVkRmlsZVZhbGlkKHRlbXBGaWxlKSkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgYERvd25sb2FkZWQgZmlsZSBmb3IgJHtwa2cubmFtZX1AJHtwa2cudmVyc2lvbn0gaXMgZW1wdHkgb3IgbWlzc2luZzogJHt0ZW1wRmlsZX1gLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZW5hbWVTeW5jKHRlbXBGaWxlLCBjYWNoZWRGaWxlKTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgaWYgKGV4aXN0c1N5bmModGVtcEZpbGUpKSB7XG4gICAgICAgICAgICAgIHJtU3luYyh0ZW1wRmlsZSwgeyBmb3JjZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkZWJ1ZyhcbiAgICAgICAgICAgIGAke0xPR19QUkVGSVh9IENhY2hlZCAke3BrZy5uYW1lfUAke3BrZy52ZXJzaW9ufSB0byAke2NhY2hlZEZpbGV9YCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgbWtkaXJTeW5jKHRhcmdldERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgIGV4ZWNTeW5jKFxuICAgICAgICAgIGB0YXIgLXh6ZiBcIiR7Y2FjaGVkRmlsZX1cIiAtQyBcIiR7dGFyZ2V0RGlyfVwiIC0tc3RyaXAtY29tcG9uZW50cz0xYCxcbiAgICAgICAgICB7IHN0ZGlvOiBcInBpcGVcIiB9LFxuICAgICAgICApO1xuXG4gICAgICAgIGRlYnVnKGAke0xPR19QUkVGSVh9IEluc3RhbGxlZCAke3BrZy5uYW1lfUAke3BrZy52ZXJzaW9ufWApO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgJHtMT0dfUFJFRklYfSBGYWlsZWQgdG8gaW5zdGFsbCAke3BrZy5uYW1lfTogJHtlcnJvcn1gKTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB0aGF0IGEgY2FjaGVkIFNoYXJwIGJpbmFyeSBhcmNoaXZlIGlzIG5vbi1lbXB0eS4gR3VhcmRzIGFnYWluc3RcbiAgICogYSB0cnVuY2F0ZWQvY29ycnVwdCBkb3dubG9hZCAoZS5nLiBmcm9tIGEgZHJvcHBlZCBjb25uZWN0aW9uKSBiZWluZ1xuICAgKiByZXVzZWQgYWNyb3NzIHN5bnRoIG9wZXJhdGlvbnMuXG4gICAqL1xuICBwcml2YXRlIGlzQ2FjaGVkRmlsZVZhbGlkKGZpbGVQYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHN0YXRTeW5jKGZpbGVQYXRoKS5zaXplID4gMDtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
521
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV4dGpzLWJ1aWxkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL25leHRqcy1idWlsZC9uZXh0anMtYnVpbGQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBLDJEQUE4QztBQUM5Qyw2Q0FBMEM7QUFDMUMscUNBVWlCO0FBQ2pCLHFDQUFpQztBQUNqQyx5Q0FBaUM7QUFDakMsMkNBQW9EO0FBQ3BELDJDQUF1QztBQUN2Qyw2REFBNkQ7QUFDN0Qsa0RBQTZCO0FBQzdCLDRDQUFzRDtBQUV0RCxrREFBNEQ7QUFDNUQsb0VBQXdFO0FBQ3hFLGdFQUFnRTtBQUVoRSxNQUFNLEtBQUssR0FBRyxJQUFBLGVBQVEsRUFBQyx5QkFBeUIsQ0FBQyxDQUFDO0FBd0JsRDs7O0dBR0c7QUFDSCxNQUFhLFdBQVksU0FBUSxzQkFBUzs7SUFDeEM7OztPQUdHO0lBQ0gsT0FBTyxDQUFTO0lBQ2hCOzs7T0FHRztJQUNILFlBQVksQ0FBUztJQUNyQjs7O09BR0c7SUFDSCxnQkFBZ0IsQ0FBbUI7SUFDbkM7Ozs7O09BS0c7SUFDSCx3QkFBd0IsQ0FBUztJQUNqQzs7Ozs7T0FLRztJQUNILHFCQUFxQixDQUFTO0lBQzlCOztPQUVHO0lBQ0gsV0FBVyxDQUFTO0lBQ3BCOzs7Ozs7T0FNRztJQUNILGtCQUFrQixDQUFTO0lBQzNCOzs7Ozs7T0FNRztJQUNILDBCQUEwQixDQUFVO0lBRTVCLEtBQUssQ0FBbUI7SUFDeEIsWUFBWSxDQUFTO0lBRTdCLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBdUI7UUFDL0QsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUEsZ0JBQUksRUFBQyxLQUFLLENBQUMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRXZELElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLFlBQVksSUFBSSxlQUFlLENBQUM7UUFFMUQsZ0NBQWdDO1FBQ2hDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBQSxnQkFBSSxFQUN0QixLQUFLLENBQUMsY0FBYyxFQUNwQixPQUFPLEVBQ1AsdUJBQXVCLENBQ3hCLENBQUM7UUFFRiw4QkFBOEI7UUFDOUIsSUFBSSxLQUFLLENBQUMsU0FBUyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN0QixDQUFDO2FBQU0sQ0FBQztZQUNOLEtBQUssQ0FBQyxHQUFHLHNCQUFVLGNBQWMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7UUFDeEQsQ0FBQztRQUVELGdEQUFnRDtRQUNoRCxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUUvQixpRUFBaUU7UUFDakUsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1FBRS9ELDJEQUEyRDtRQUMzRCxJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBQSxZQUFTLEVBQ3ZDLElBQUksQ0FBQyxxQkFBcUIsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUNwRSxXQUFXLENBQ1osQ0FBQztRQUVGLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztRQUN4RCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBQSxrQ0FBc0IsRUFBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFbkUsTUFBTSxjQUFjLEdBQUcsSUFBQSxnQkFBSSxFQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDNUQsTUFBTSxXQUFXLEdBQ2YsS0FBSyxDQUFDLFVBQVUsS0FBSyxzQkFBVSxDQUFDLGdCQUFnQjtZQUNoRCxLQUFLLENBQUMsVUFBVSxLQUFLLHNCQUFVLENBQUMsa0JBQWtCLENBQUM7UUFFckQsTUFBTSxzQkFBc0IsR0FBRyxXQUFXLElBQUksSUFBQSw4Q0FBeUIsR0FBRSxDQUFDO1FBRTFFLHdFQUF3RTtRQUN4RSxxRUFBcUU7UUFDckUsb0RBQW9EO1FBQ3BELElBQUksQ0FBQywyQkFBMkIsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNqRCx1RUFBdUU7UUFDdkUsa0VBQWtFO1FBQ2xFLHVFQUF1RTtRQUN2RSwwRUFBMEU7UUFDMUUsdUVBQXVFO1FBQ3ZFLHVFQUF1RTtRQUN2RSxZQUFZO1FBQ1osSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLCtCQUErQixFQUFFLENBQUM7UUFDekMsQ0FBQztRQUVELElBQUksc0JBQXNCLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsMEJBQTBCO2dCQUM3QixJQUFJLENBQUMsOEJBQThCLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDeEQsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNLLFlBQVk7UUFDbEIsT0FBTyxDQUFDLEdBQUcsQ0FDVCxHQUFHLHNCQUFVLGNBQWMsSUFBSSxDQUFDLFlBQVksbUJBQW1CLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQzNGLENBQUM7UUFFRiwwRUFBMEU7UUFDMUUsSUFBSSxJQUFBLG9CQUFVLEVBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7WUFDbEMsSUFBQSxnQkFBTSxFQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQzVELEtBQUssQ0FBQyxxQ0FBcUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7UUFDbEUsQ0FBQztRQUVELElBQUksQ0FBQztZQUNILElBQUEsNkJBQVEsRUFBQyxJQUFJLENBQUMsWUFBWSxFQUFFO2dCQUMxQixLQUFLLEVBQUUsU0FBUztnQkFDaEIsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYztnQkFDOUIsR0FBRyxFQUFFO29CQUNILEdBQUcsT0FBTyxDQUFDLEdBQUc7b0JBQ2QseUJBQXlCLEVBQUUsSUFBSSxDQUFDLFlBQVk7aUJBQzdDO2FBQ0YsQ0FBQyxDQUFDO1lBRUgsdUZBQXVGO1lBQ3ZGLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEtBQUssc0JBQVUsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2dCQUMxRCxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUM5QixDQUFDO1FBQ0gsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixNQUFNLElBQUksS0FBSyxDQUFDLHVCQUF1QixLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ2xELENBQUM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssdUJBQXVCO1FBQzdCLE1BQU0sYUFBYSxHQUFHLElBQUEsZ0JBQUksRUFBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQzNELG9DQUFvQztRQUNwQyxJQUFJLENBQUMsSUFBQSxvQkFBVSxFQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7WUFDL0IsTUFBTSxJQUFJLEtBQUssQ0FDYix5Q0FBeUMsYUFBYSxJQUFJO2dCQUN4RCx1REFBdUQ7Z0JBQ3ZELG9FQUFvRSxDQUN2RSxDQUFDO1FBQ0osQ0FBQztRQUNELCtGQUErRjtJQUNqRyxDQUFDO0lBRUQ7O09BRUc7SUFDSyxvQkFBb0I7UUFDMUIsTUFBTSxnQkFBZ0IsR0FBRyxJQUFBLGdCQUFJLEVBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDcEUsTUFBTSxVQUFVLEdBQUcsSUFBQSxxQkFBVyxFQUFDLGdCQUFnQixDQUFDLENBQUMsTUFBTSxDQUNyRCxDQUFDLElBQVksRUFBRSxFQUFFO1FBQ2YsOENBQThDO1FBQzlDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDO1lBQzVCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQzFELENBQUM7UUFFRixJQUFJLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO1FBQzlELENBQUM7UUFFRCxrQ0FBa0M7UUFDbEMsTUFBTSxjQUFjLEdBQUcsSUFBQSxnQkFBSSxFQUFDLFNBQVMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxJQUFBLG9CQUFVLEVBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztZQUNoQyxNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDOUMsQ0FBQztRQUVELE1BQU0saUJBQWlCLEdBQUcsSUFBQSxzQkFBWSxFQUFDLGNBQWMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUVoRSwrQ0FBK0M7UUFDL0MsS0FBSyxNQUFNLFNBQVMsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNuQyxNQUFNLGFBQWEsR0FBRyxJQUFBLGdCQUFJLEVBQUMsZ0JBQWdCLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDeEQsTUFBTSxlQUFlLEdBQUcsSUFBQSxzQkFBWSxFQUFDLGFBQWEsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUM3RCxNQUFNLGNBQWMsR0FBRyxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsZUFBZSxDQUFDO1lBQ2xFLElBQUEsdUJBQWEsRUFBQyxhQUFhLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDL0MsQ0FBQztJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssMEJBQTBCO1FBQ2hDLE1BQU0sYUFBYSxHQUFHLElBQUEsZ0JBQUksRUFBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBRTNELElBQUksQ0FBQyxJQUFBLG9CQUFVLEVBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztZQUMvQixNQUFNLElBQUksS0FBSyxDQUNiLDBFQUEwRSxhQUFhLEVBQUUsQ0FDMUYsQ0FBQztRQUNKLENBQUM7UUFFRCxNQUFNLFlBQVksR0FBRyxDQUNuQixHQUFXLEVBQ1gsZUFBdUIsRUFBRSxFQUNWLEVBQUU7WUFDakIsTUFBTSxPQUFPLEdBQUcsSUFBQSxxQkFBVyxFQUFDLEdBQUcsRUFBRSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBRTFELEtBQUssTUFBTSxLQUFLLElBQUksT0FBTyxFQUFFLENBQUM7Z0JBQzVCLE1BQU0sUUFBUSxHQUFHLElBQUEsZ0JBQUksRUFBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUV2QyxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLGNBQWMsRUFBRSxDQUFDO29CQUN6RCxtRUFBbUU7b0JBQ25FLE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxRQUFRLEVBQUUsSUFBQSxnQkFBSSxFQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztvQkFDdEUsSUFBSSxNQUFNLEtBQUssSUFBSTt3QkFBRSxPQUFPLE1BQU0sQ0FBQztnQkFDckMsQ0FBQztxQkFBTSxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRSxDQUFDO29CQUN4RCx3REFBd0Q7b0JBQ3hELE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQztvQkFDdEIsTUFBTSxXQUFXLEdBQUcsSUFBQSxnQkFBSSxFQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztvQkFDN0MsSUFBSSxJQUFBLG9CQUFVLEVBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQzt3QkFDNUIsT0FBTyxZQUFZLElBQUksR0FBRyxDQUFDO29CQUM3QixDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUM7UUFFRixNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDM0MsSUFBSSxNQUFNLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDcEIsTUFBTSxJQUFJLEtBQUssQ0FDYix1RkFBdUYsYUFBYSxJQUFJO2dCQUN0RywrRkFBK0YsQ0FDbEcsQ0FBQztRQUNKLENBQUM7UUFFRCxLQUFLLENBQUMsR0FBRyxzQkFBVSwwQ0FBMEMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUN4RSxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQ7O09BRUc7SUFDSyxVQUFVO1FBQ2hCLE1BQU0sV0FBVyxHQUFHLElBQUEsZ0JBQUksRUFBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3ZELHlEQUF5RDtRQUN6RCxJQUFJLENBQUMsSUFBQSxvQkFBVSxFQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDN0IsTUFBTSxJQUFJLEtBQUssQ0FDYiw4QkFBOEIsV0FBVyxJQUFJO2dCQUMzQyw4Q0FBOEMsQ0FDakQsQ0FBQztRQUNKLENBQUM7UUFDRCx1RUFBdUU7UUFDdkUsT0FBTyxJQUFBLHNCQUFZLEVBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ25ELENBQUM7SUFFRDs7T0FFRztJQUNLLHdCQUF3QjtRQUM5QixNQUFNLGFBQWEsR0FBRyxJQUFBLGdCQUFJLEVBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLElBQUEsb0JBQVUsRUFBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1lBQy9CLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUVELElBQUksQ0FBQztZQUNILE9BQU8sSUFBQSxxQkFBVyxFQUFDLGFBQWEsRUFBRSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FDNUQsQ0FBQyxLQUFVLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ2YsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO2dCQUNoQixXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVcsRUFBRTthQUNqQyxDQUFDLENBQ0gsQ0FBQztRQUNKLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLHNCQUFVLHFDQUFxQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQ3hFLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNLLDJCQUEyQixDQUFDLGNBQXNCO1FBQ3hELE1BQU0sZUFBZSxHQUFHLElBQUEsZ0JBQUksRUFBQyxjQUFjLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLElBQUEsb0JBQVUsRUFBQyxlQUFlLENBQUMsRUFBRSxDQUFDO1lBQ2pDLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDO1lBQ0gsOEVBQThFO1lBQzlFLE1BQU0sVUFBVSxHQUFHLElBQUEscUJBQVcsRUFBQyxlQUFlLEVBQUU7Z0JBQzlDLFNBQVMsRUFBRSxJQUFJO2dCQUNmLGFBQWEsRUFBRSxJQUFJO2FBQ3BCLENBQUMsQ0FBQztZQUVILE1BQU0sZ0JBQWdCLEdBQWEsRUFBRSxDQUFDO1lBRXRDLEtBQUssTUFBTSxLQUFLLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQy9CLGtFQUFrRTtnQkFDbEUsSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLElBQUksS0FBSyxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUM7b0JBQ2xELCtEQUErRDtvQkFDL0QsTUFBTSxhQUFhLEdBQ2pCLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQzt3QkFDN0IsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUM7b0JBRXZDLElBQUksYUFBYSxFQUFFLENBQUM7d0JBQ2xCLHdFQUF3RTt3QkFDeEUsTUFBTSxRQUFRLEdBQUcsSUFBQSxnQkFBSSxFQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUNwRCxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ2xDLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7WUFFRCxLQUFLLENBQ0gsR0FBRyxzQkFBVSxVQUFVLGdCQUFnQixDQUFDLE1BQU0sOENBQThDLENBQzdGLENBQUM7WUFFRix5REFBeUQ7WUFDekQsS0FBSyxNQUFNLElBQUksSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO2dCQUNwQyxJQUFJLENBQUM7b0JBQ0gsSUFBQSxnQkFBTSxFQUFDLElBQUksRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7b0JBQy9DLEtBQUssQ0FBQyxHQUFHLHNCQUFVLGFBQWEsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDMUMsQ0FBQztnQkFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO29CQUNmLE9BQU8sQ0FBQyxJQUFJLENBQ1YsR0FBRyxzQkFBVSw4QkFBOEIsSUFBSSxLQUFLLEtBQUssRUFBRSxDQUM1RCxDQUFDO2dCQUNKLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsSUFBSSxDQUNWLEdBQUcsc0JBQVUsb0RBQW9ELEtBQUssRUFBRSxDQUN6RSxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNLLCtCQUErQjtRQUNyQyxNQUFNLGVBQWUsR0FBRyxJQUFBLGdCQUFJLEVBQzFCLElBQUksQ0FBQyxXQUFXLEVBQ2hCLFlBQVksRUFDWixjQUFjLENBQ2YsQ0FBQztRQUNGLE1BQU0sT0FBTyxHQUFHLElBQUEsZ0JBQUksRUFBQyxlQUFlLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDOUMsTUFBTSxJQUFJLEdBQUcsSUFBQSxzQ0FBbUIsR0FBRSxDQUFDO1FBRW5DLElBQUksQ0FBQyxvQkFBb0IsQ0FDdkIsT0FBTyxFQUNQLElBQUksQ0FBQyxzQkFBc0IsQ0FDekIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxFQUN0QyxhQUFhLElBQUksRUFBRSxDQUNwQixDQUNGLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0ssOEJBQThCLENBQUMsY0FBc0I7UUFDM0QsTUFBTSxTQUFTLEdBQUcsSUFBQSxnQkFBSSxFQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsK0JBQStCLENBQUMsQ0FBQztRQUMxRSxNQUFNLGVBQWUsR0FBRyxJQUFBLGdCQUFJLEVBQUMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQ3hELE1BQU0sT0FBTyxHQUFHLElBQUEsZ0JBQUksRUFBQyxlQUFlLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFOUMsSUFBQSxnQkFBTSxFQUFDLFNBQVMsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDcEQsSUFBQSxtQkFBUyxFQUFDLE9BQU8sRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRXhDLDhEQUE4RDtRQUM5RCxJQUFBLGdCQUFNLEVBQUMsSUFBQSxnQkFBSSxFQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsb0JBQW9CLENBQUMsRUFBRSxTQUFTLEVBQUU7WUFDN0QsU0FBUyxFQUFFLElBQUk7U0FDaEIsQ0FBQyxDQUFDO1FBRUgsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUN2QyxJQUFBLGdCQUFJLEVBQUMsY0FBYyxFQUFFLGNBQWMsQ0FBQyxDQUNyQyxDQUFDO1FBQ0YsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQ3RELENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxDQUFDLElBQUksQ0FDVixHQUFHLHNCQUFVLDhIQUE4SCxDQUM1SSxDQUFDO1FBQ0osQ0FBQztRQUVELE1BQU0sbUJBQW1CLEdBQUcsSUFBQSxnQkFBSSxFQUM5QixJQUFJLENBQUMsV0FBVyxFQUNoQiw0QkFBNEIsQ0FDN0IsQ0FBQztRQUNGLElBQUksQ0FBQyxJQUFBLG9CQUFVLEVBQUMsbUJBQW1CLENBQUMsRUFBRSxDQUFDO1lBQ3JDLE1BQU0sSUFBSSxLQUFLLENBQ2IsR0FBRyxzQkFBVSw4Q0FBOEMsbUJBQW1CLHFGQUFxRixDQUNwSyxDQUFDO1FBQ0osQ0FBQztRQUNELElBQUEsZ0JBQU0sRUFBQyxtQkFBbUIsRUFBRSxJQUFBLGdCQUFJLEVBQUMsU0FBUyxFQUFFLDRCQUE0QixDQUFDLENBQUMsQ0FBQztRQUUzRSxNQUFNLElBQUksR0FBRyxJQUFBLHNDQUFtQixHQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLG9CQUFvQixDQUN2QixPQUFPLEVBQ1AsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFdBQVcsRUFBRSxTQUFTLElBQUksRUFBRSxDQUFDLENBQzFELENBQUM7UUFFRixPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ssZ0JBQWdCLENBQUMsZUFBdUI7UUFDOUMsTUFBTSxPQUFPLEdBQUcsSUFBQSxnQkFBSSxFQUFDLGVBQWUsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUMvQyxJQUFJLElBQUEsb0JBQVUsRUFBQyxJQUFBLGdCQUFJLEVBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUM5QyxPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDO1FBRUQsTUFBTSxRQUFRLEdBQUcsSUFBQSxnQkFBSSxFQUFDLGVBQWUsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsSUFBQSxvQkFBVSxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDMUIsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztRQUVELE1BQU0sVUFBVSxHQUFHLElBQUEscUJBQVcsRUFBQyxRQUFRLENBQUM7YUFDckMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQzNDLElBQUksRUFBRSxDQUFDO1FBQ1YsS0FBSyxNQUFNLFNBQVMsSUFBSSxVQUFVLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztZQUM3QyxNQUFNLE1BQU0sR0FBRyxJQUFBLGdCQUFJLEVBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDbEUsSUFBSSxJQUFBLG9CQUFVLEVBQUMsSUFBQSxnQkFBSSxFQUFDLE1BQU0sRUFBRSxjQUFjLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQzdDLE9BQU8sTUFBTSxDQUFDO1lBQ2hCLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSyxnQkFBZ0IsQ0FBQyxXQUFtQixFQUFFLFVBQWtCO1FBQzlELHFFQUFxRTtRQUNyRSxxRUFBcUU7UUFDckUsd0NBQXdDO1FBQ3hDLE1BQU0sVUFBVSxHQUFHLElBQUEsZ0JBQUksRUFBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDM0MsTUFBTSxLQUFLLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN4QixNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO1FBRWpDLE9BQU8sS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN4QixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFHLENBQUM7WUFDNUIsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ3JCLFNBQVM7WUFDWCxDQUFDO1lBRUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFBLGdCQUFJLEVBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3ZFLElBQUksQ0FBQyxJQUFBLG9CQUFVLEVBQUMsSUFBQSxnQkFBSSxFQUFDLE1BQU0sRUFBRSxjQUFjLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQzlDLE9BQU8sQ0FBQyxJQUFJLENBQ1YsR0FBRyxzQkFBVSx3QkFBd0IsSUFBSSx5R0FBeUcsQ0FDbkosQ0FBQztnQkFDRixTQUFTO1lBQ1gsQ0FBQztZQUVELG9FQUFvRTtZQUNwRSxxRUFBcUU7WUFDckUsSUFBQSxnQkFBTSxFQUFDLE1BQU0sRUFBRSxJQUFBLGdCQUFJLEVBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxFQUFFO2dCQUNyQyxTQUFTLEVBQUUsSUFBSTtnQkFDZixXQUFXLEVBQUUsSUFBSTthQUNsQixDQUFDLENBQUM7WUFDSCxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRWpCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQ3pCLElBQUEsc0JBQVksRUFBQyxJQUFBLGdCQUFJLEVBQUMsTUFBTSxFQUFFLGNBQWMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUNwRCxDQUFDO1lBQ0Ysc0VBQXNFO1lBQ3RFLHFFQUFxRTtZQUNyRSxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDMUQsQ0FBQztRQUVELEtBQUssQ0FDSCxHQUFHLHNCQUFVLDBCQUEwQixDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQ3ZFLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0ssc0JBQXNCLENBQzVCLFdBQStCLEVBQy9CLFFBQWdCO1FBRWhCLE1BQU0sUUFBUSxHQUFHO1lBQ2YsRUFBRSxJQUFJLEVBQUUsaUJBQWlCLFFBQVEsRUFBRSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUU7WUFDdkQsRUFBRSxJQUFJLEVBQUUsU0FBUyxRQUFRLEVBQUUsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFO1NBQ2pELENBQUM7UUFFRixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDakIsT0FBTyxRQUFRLENBQUM7UUFDbEIsQ0FBQztRQUVELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQ3pCLElBQUEsc0JBQVksRUFBQyxJQUFBLGdCQUFJLEVBQUMsV0FBVyxFQUFFLGNBQWMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUN6RCxDQUFDO1FBQ0YsTUFBTSxvQkFBb0IsR0FDeEIsUUFBUSxDQUFDLG9CQUFvQixJQUFJLEVBQUUsQ0FBQztRQUV0QyxPQUFPLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUMxQixNQUFNLE9BQU8sR0FBRyxvQkFBb0IsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ3pELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDYixPQUFPLENBQUMsSUFBSSxDQUNWLEdBQUcsc0JBQVUsVUFBVSxRQUFRLENBQUMsT0FBTyx1QkFBdUIsR0FBRyxDQUFDLElBQUksc0JBQXNCLEdBQUcsQ0FBQyxPQUFPLEdBQUcsQ0FDM0csQ0FBQztnQkFDRixPQUFPLEdBQUcsQ0FBQztZQUNiLENBQUM7WUFDRCxPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFDckMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssb0JBQW9CLENBQzFCLE9BQWUsRUFDZixRQUE2QztRQUU3QyxNQUFNLFFBQVEsR0FBRyxJQUFBLGdCQUFJLEVBQUMsSUFBQSxnQkFBTSxHQUFFLEVBQUUsd0JBQXdCLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsSUFBQSxvQkFBVSxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDMUIsSUFBQSxtQkFBUyxFQUFDLFFBQVEsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzNDLENBQUM7UUFFRCxLQUFLLE1BQU0sR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQztnQkFDSCxNQUFNLFNBQVMsR0FBRyxJQUFBLGdCQUFJLEVBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDMUMsTUFBTSxHQUFHLEdBQUcsbUNBQW1DLEdBQUcsQ0FBQyxJQUFJLE1BQU0sR0FBRyxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsT0FBTyxNQUFNLENBQUM7Z0JBRTNGLGlFQUFpRTtnQkFDakUsTUFBTSxhQUFhLEdBQUcsR0FBRyxHQUFHLENBQUMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxPQUFPLE1BQU0sQ0FBQztnQkFDdkQsTUFBTSxVQUFVLEdBQUcsSUFBQSxnQkFBSSxFQUFDLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQztnQkFFakQsa0VBQWtFO2dCQUNsRSwwREFBMEQ7Z0JBQzFELElBQUksSUFBQSxvQkFBVSxFQUFDLFVBQVUsQ0FBQyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO29CQUNqRSxLQUFLLENBQ0gsR0FBRyxzQkFBVSxpQkFBaUIsR0FBRyxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsT0FBTyxTQUFTLFVBQVUsRUFBRSxDQUMzRSxDQUFDO2dCQUNKLENBQUM7cUJBQU0sQ0FBQztvQkFDTixLQUFLLENBQUMsR0FBRyxzQkFBVSxnQkFBZ0IsR0FBRyxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsT0FBTyxLQUFLLENBQUMsQ0FBQztvQkFFakUsZ0VBQWdFO29CQUNoRSxtRUFBbUU7b0JBQ25FLG1FQUFtRTtvQkFDbkUsa0VBQWtFO29CQUNsRSxrRUFBa0U7b0JBQ2xFLDREQUE0RDtvQkFDNUQsa0RBQWtEO29CQUNsRCxNQUFNLFFBQVEsR0FBRyxJQUFBLGdCQUFJLEVBQ25CLFFBQVEsRUFDUixHQUFHLGFBQWEsSUFBSSxPQUFPLENBQUMsR0FBRyxJQUFJLElBQUEseUJBQVcsRUFBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FDeEUsQ0FBQztvQkFDRixJQUFJLENBQUM7d0JBQ0gsNkRBQTZEO3dCQUM3RCwyREFBMkQ7d0JBQzNELHlCQUF5Qjt3QkFDekIsSUFBQSw2QkFBUSxFQUNOLGdEQUFnRCxRQUFRLE1BQU0sR0FBRyxHQUFHLEVBQ3BFLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUNsQixDQUFDO3dCQUVGLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQzs0QkFDdEMsTUFBTSxJQUFJLEtBQUssQ0FDYix1QkFBdUIsR0FBRyxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsT0FBTyx5QkFBeUIsUUFBUSxFQUFFLENBQ2xGLENBQUM7d0JBQ0osQ0FBQzt3QkFFRCxJQUFBLG9CQUFVLEVBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO29CQUNuQyxDQUFDOzRCQUFTLENBQUM7d0JBQ1QsSUFBSSxJQUFBLG9CQUFVLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQzs0QkFDekIsSUFBQSxnQkFBTSxFQUFDLFFBQVEsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO3dCQUNwQyxDQUFDO29CQUNILENBQUM7b0JBRUQsS0FBSyxDQUNILEdBQUcsc0JBQVUsV0FBVyxHQUFHLENBQUMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxPQUFPLE9BQU8sVUFBVSxFQUFFLENBQ25FLENBQUM7Z0JBQ0osQ0FBQztnQkFFRCxJQUFBLG1CQUFTLEVBQUMsU0FBUyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBQzFDLElBQUEsNkJBQVEsRUFDTixhQUFhLFVBQVUsU0FBUyxTQUFTLHdCQUF3QixFQUNqRSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FDbEIsQ0FBQztnQkFFRixLQUFLLENBQUMsR0FBRyxzQkFBVSxjQUFjLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDOUQsQ0FBQztZQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7Z0JBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLHNCQUFVLHNCQUFzQixHQUFHLENBQUMsSUFBSSxLQUFLLEtBQUssRUFBRSxDQUFDLENBQUM7Z0JBQ3ZFLE1BQU0sS0FBSyxDQUFDO1lBQ2QsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLGlCQUFpQixDQUFDLFFBQWdCO1FBQ3hDLElBQUksQ0FBQztZQUNILE9BQU8sSUFBQSxrQkFBUSxFQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7UUFDckMsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztJQUNILENBQUM7O0FBL25CSCxrQ0Fnb0JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhlY1N5bmMgfSBmcm9tIFwibm9kZTpjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyByYW5kb21CeXRlcyB9IGZyb20gXCJub2RlOmNyeXB0b1wiO1xuaW1wb3J0IHtcbiAgZXhpc3RzU3luYyxcbiAgcmVhZEZpbGVTeW5jLFxuICByZWFkZGlyU3luYyxcbiAgd3JpdGVGaWxlU3luYyxcbiAgcm1TeW5jLFxuICBta2RpclN5bmMsXG4gIGNwU3luYyxcbiAgcmVuYW1lU3luYyxcbiAgc3RhdFN5bmMsXG59IGZyb20gXCJub2RlOmZzXCI7XG5pbXBvcnQgeyB0bXBkaXIgfSBmcm9tIFwibm9kZTpvc1wiO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IGpvaW4gYXMgam9pblBvc2l4IH0gZnJvbSBcIm5vZGU6cGF0aC9wb3NpeFwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXNcbmltcG9ydCBnZXREZWJ1ZyBmcm9tIFwiZGVidWdcIjtcbmltcG9ydCB7IExPR19QUkVGSVgsIE5leHRqc1R5cGUgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBOZXh0anNCYXNlUHJvcHMgfSBmcm9tIFwiLi4vcm9vdC1jb25zdHJ1Y3RzL25leHRqcy1iYXNlLWNvbnN0cnVjdFwiO1xuaW1wb3J0IHsgcmVhZE5leHRDb25maWdCYXNlUGF0aCB9IGZyb20gXCIuLi91dGlscy9iYXNlLXBhdGhcIjtcbmltcG9ydCB7IHVzZURlZGljYXRlZEltYWdlRnVuY3Rpb24gfSBmcm9tIFwiLi4vdXRpbHMvZXhwZXJpbWVudGFsLWZsYWdzXCI7XG5pbXBvcnQgeyBnZXROb2RlQXJjaGl0ZWN0dXJlIH0gZnJvbSBcIi4uL3V0aWxzL2dldC1hcmNoaXRlY3R1cmVcIjtcblxuY29uc3QgZGVidWcgPSBnZXREZWJ1ZyhcImNkay1uZXh0anM6bmV4dGpzLWJ1aWxkXCIpO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5leHRqc0J1aWxkUHJvcHMge1xuICAvKipcbiAgICogQHNlZSB7QGxpbmsgTmV4dGpzQmFzZVByb3BzW1wiYnVpbGRDb21tYW5kXCJdfVxuICAgKi9cbiAgcmVhZG9ubHkgYnVpbGRDb21tYW5kOiBOZXh0anNCYXNlUHJvcHNbXCJidWlsZENvbW1hbmRcIl07XG4gIC8qKlxuICAgKiBEaXJlY3Rvcnkgd2hlcmUgdGhlIE5leHQuanMgYXBwbGljYXRpb24gaXMgbG9jYXRlZCBmb3IgbG9jYWwgYnVpbGRzLlxuICAgKiBUaGlzIHNob3VsZCBjb250YWluIHRoZSBwYWNrYWdlLmpzb24gYW5kIE5leHQuanMgYXBwbGljYXRpb24gZmlsZXMuXG4gICAqL1xuICByZWFkb25seSBidWlsZERpcmVjdG9yeTogc3RyaW5nO1xuICByZWFkb25seSBuZXh0anNUeXBlOiBOZXh0anNUeXBlO1xuICAvKipcbiAgICogQHNlZSB7QGxpbmsgTmV4dGpzQmFzZVByb3BzLnNraXBCdWlsZH1cbiAgICovXG4gIHJlYWRvbmx5IHNraXBCdWlsZD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHVibGljRGlyRW50cnkge1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGlzRGlyZWN0b3J5OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEJ1aWxkcyBOZXh0LmpzIGFzc2V0cy5cbiAqIEBsaW5rIGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL3BhZ2VzL2FwaS1yZWZlcmVuY2UvbmV4dC1jb25maWctanMvb3V0cHV0XG4gKi9cbmV4cG9ydCBjbGFzcyBOZXh0anNCdWlsZCBleHRlbmRzIENvbnN0cnVjdCB7XG4gIC8qKlxuICAgKiBVbmlxdWUgaWQgZm9yIE5leHQuanMgYnVpbGQuIFVzZWQgdG8gcGFydGl0aW9uIGNhY2hlIHN0b3JhZ2UgYW5kIGFzXG4gICAqIG1ldGFkYXRhIGZvciBzdGF0aWMgYXNzZXRzIGluIFMzIGJ1Y2tldC5cbiAgICovXG4gIGJ1aWxkSWQ6IHN0cmluZztcbiAgLyoqXG4gICAqIEFic29sdXRlIHBhdGggdG8gdGhlIGluaXQgY2FjaGUgZGlyZWN0b3J5XG4gICAqIEBleGFtcGxlIFwiL1VzZXJzL2pvaG4vbXlhcHAvLm5leHQvY2RrLW5leHRqcy1pbml0LWNhY2hlXCJcbiAgICovXG4gIGluaXRDYWNoZURpcjogc3RyaW5nO1xuICAvKipcbiAgICogQWJzb2x1dGUgcGF0aCB0byBwdWJsaWMuIFVzZSBieSBDbG91ZEZyb250L0FMQiB0byBjcmVhdGUgYmVoYXZpb3JzL3J1bGVzXG4gICAqIEBleGFtcGxlIFwiL1VzZXJzL2pvaG4vbXlhcHAvcHVibGljXCJcbiAgICovXG4gIHB1YmxpY0RpckVudHJpZXM6IFB1YmxpY0RpckVudHJ5W107XG4gIC8qKlxuICAgKiBUaGUgZW50cnlwb2ludCBKYXZhU2NyaXB0IGZpbGUgdXNlZCBhcyBhbiBhcmd1bWVudCBmb3IgTm9kZS5qcyB0byBydW4gdGhlXG4gICAqIE5leHQuanMgc3RhbmRhbG9uZSBzZXJ2ZXIgcmVsYXRpdmUgdG8gdGhlIHN0YW5kYWxvbmUgZGlyZWN0b3J5LlxuICAgKiBAZXhhbXBsZSBcIi4vc2VydmVyLmpzXCJcbiAgICogQGV4YW1wbGUgXCIuL3BhY2thZ2VzL3VpL3NlcnZlci5qc1wiIChtb25vcmVwbylcbiAgICovXG4gIHJlbGF0aXZlUGF0aFRvRW50cnlwb2ludDogc3RyaW5nO1xuICAvKipcbiAgICogUmVsYXRpdmUgcGF0aCBmcm9tIHRoZSBzdGFuZGFsb25lIGRpcmVjdG9yeSB0byB0aGUgcGFja2FnZSBjb250YWluaW5nIHRoZSBOZXh0LmpzIGFwcC5cbiAgICogVGhpcyBpcyBhdXRvbWF0aWNhbGx5IGRldGVjdGVkIGZyb20gdGhlIHN0YW5kYWxvbmUgYnVpbGQgb3V0cHV0LlxuICAgKiBAZXhhbXBsZSBcIi5cIiBmb3Igbm9uLW1vbm9yZXBvIGFwcHNcbiAgICogQGV4YW1wbGUgXCIuL2FwcHMvd2ViXCIgZm9yIG1vbm9yZXBvIGFwcHNcbiAgICovXG4gIHJlbGF0aXZlUGF0aFRvUGFja2FnZTogc3RyaW5nO1xuICAvKipcbiAgICogQWJzb2x1dGUgcGF0aCB0byB0aGUgLm5leHQgZGlyZWN0b3J5IGNvbnRhaW5pbmcgTmV4dC5qcyBidWlsZCBhcnRpZmFjdHNcbiAgICovXG4gIGRvdE5leHRQYXRoOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgTmV4dC5qcyBhcHAncyBvd24gYGJhc2VQYXRoYCDigJQgdGhlIFVSTCBwcmVmaXggaXQgZ2VuZXJhdGVzIGl0cyBsaW5rcyBhbmRcbiAgICogYXNzZXQgaHJlZnMgdW5kZXIg4oCUIHJlYWQgb3V0IG9mIHRoZSBidWlsZCdzIGByZXF1aXJlZC1zZXJ2ZXItZmlsZXMuanNvbmAuXG4gICAqIE5vcm1hbGl6ZWQgdG8gYSBiYXJlIHBhdGggc2VnbWVudCwgZW1wdHkgd2hlbiB0aGUgYXBwIHNldHMgbm9uZS4gRXhwb3NlZCBzb1xuICAgKiByb290IGNvbnN0cnVjdHMgY2FuIHJlY29uY2lsZSBpdCB3aXRoIHRoZSBDREsgYGJhc2VQYXRoYCBwcm9wLCB3aGljaCBpcyBhXG4gICAqIGRpc3RpbmN0IHRoaW5nOyBzZWUgYHJlc29sdmVCYXNlUGF0aGAuXG4gICAqL1xuICBuZXh0Q29uZmlnQmFzZVBhdGg6IHN0cmluZztcbiAgLyoqXG4gICAqIEFic29sdXRlIHBhdGggdG8gdGhlIGRpcmVjdG9yeSBwcmVwYXJlZCBmb3IgdGhlIGltYWdlIG9wdGltaXphdGlvbiBMYW1iZGFcbiAgICogYXNzZXQ6IGJ1bmRsZWQgaGFuZGxlciwgZ2xpYmMgYHNoYXJwYCBiaW5hcmllcywgYW5kIGByZXF1aXJlZC1zZXJ2ZXItZmlsZXMuanNvbmAuXG4gICAqIE9ubHkgc2V0IGZvciB7QGxpbmsgTmV4dGpzVHlwZS5HTE9CQUxfRlVOQ1RJT05TfSBhbmRcbiAgICoge0BsaW5rIE5leHRqc1R5cGUuUkVHSU9OQUxfRlVOQ1RJT05TfSwgYW5kIG9ubHkgd2hlbiB0aGUgZGVkaWNhdGVkIGltYWdlXG4gICAqIG9wdGltaXphdGlvbiBMYW1iZGEgaXMgZW5hYmxlZC5cbiAgICovXG4gIGltYWdlT3B0aW1pemF0aW9uQXNzZXRQYXRoPzogc3RyaW5nO1xuXG4gIHByaXZhdGUgcHJvcHM6IE5leHRqc0J1aWxkUHJvcHM7XG4gIHByaXZhdGUgYnVpbGRDb21tYW5kOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IE5leHRqc0J1aWxkUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgICB0aGlzLmRvdE5leHRQYXRoID0gam9pbihwcm9wcy5idWlsZERpcmVjdG9yeSwgXCIubmV4dFwiKTtcblxuICAgIHRoaXMuYnVpbGRDb21tYW5kID0gcHJvcHMuYnVpbGRDb21tYW5kIHx8IFwibnBtIHJ1biBidWlsZFwiO1xuXG4gICAgLy8gU2V0IGluaXQgY2FjaGUgZGlyZWN0b3J5IHBhdGhcbiAgICB0aGlzLmluaXRDYWNoZURpciA9IGpvaW4oXG4gICAgICBwcm9wcy5idWlsZERpcmVjdG9yeSxcbiAgICAgIFwiLm5leHRcIixcbiAgICAgIFwiY2RrLW5leHRqcy1pbml0LWNhY2hlXCIsXG4gICAgKTtcblxuICAgIC8vIEV4ZWN1dGUgbG9jYWwgYnVpbGQgcHJvY2Vzc1xuICAgIGlmIChwcm9wcy5za2lwQnVpbGQgIT09IHRydWUpIHtcbiAgICAgIHRoaXMucnVuTmV4dEJ1aWxkKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlYnVnKGAke0xPR19QUkVGSVh9IFNraXBwaW5nOiAke3RoaXMuYnVpbGRDb21tYW5kfWApO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIGJ1aWxkIG91dHB1dCBhbmQgc2V0IHZhbGlkYXRlZCBwYXRoc1xuICAgIHRoaXMudmFsaWRhdGVOZXh0QnVpbGRPdXRwdXQoKTtcblxuICAgIC8vIEF1dG8tZGV0ZWN0IHJlbGF0aXZlUGF0aFRvUGFja2FnZSBmcm9tIHN0YW5kYWxvbmUgYnVpbGQgb3V0cHV0XG4gICAgdGhpcy5yZWxhdGl2ZVBhdGhUb1BhY2thZ2UgPSB0aGlzLmZpbmRSZWxhdGl2ZVBhdGhUb1NlcnZlckpzKCk7XG5cbiAgICAvLyBTZXQgZW50cnlwb2ludCBwYXRoIHVzaW5nIGRldGVjdGVkIHJlbGF0aXZlUGF0aFRvUGFja2FnZVxuICAgIHRoaXMucmVsYXRpdmVQYXRoVG9FbnRyeXBvaW50ID0gam9pblBvc2l4KFxuICAgICAgdGhpcy5yZWxhdGl2ZVBhdGhUb1BhY2thZ2UgPT09IFwiLlwiID8gXCJcIiA6IHRoaXMucmVsYXRpdmVQYXRoVG9QYWNrYWdlLFxuICAgICAgXCJzZXJ2ZXIuanNcIixcbiAgICApO1xuXG4gICAgdGhpcy5idWlsZElkID0gdGhpcy5nZXRCdWlsZElkKCk7XG4gICAgdGhpcy5wdWJsaWNEaXJFbnRyaWVzID0gdGhpcy5nZXRMb2NhbFB1YmxpY0RpckVudHJpZXMoKTtcbiAgICB0aGlzLm5leHRDb25maWdCYXNlUGF0aCA9IHJlYWROZXh0Q29uZmlnQmFzZVBhdGgodGhpcy5kb3ROZXh0UGF0aCk7XG5cbiAgICBjb25zdCBzdGFuZGFsb25lUGF0aCA9IGpvaW4odGhpcy5kb3ROZXh0UGF0aCwgXCJzdGFuZGFsb25lXCIpO1xuICAgIGNvbnN0IGlzRnVuY3Rpb25zID1cbiAgICAgIHByb3BzLm5leHRqc1R5cGUgPT09IE5leHRqc1R5cGUuR0xPQkFMX0ZVTkNUSU9OUyB8fFxuICAgICAgcHJvcHMubmV4dGpzVHlwZSA9PT0gTmV4dGpzVHlwZS5SRUdJT05BTF9GVU5DVElPTlM7XG5cbiAgICBjb25zdCBkZWRpY2F0ZWRJbWFnZUZ1bmN0aW9uID0gaXNGdW5jdGlvbnMgJiYgdXNlRGVkaWNhdGVkSW1hZ2VGdW5jdGlvbigpO1xuXG4gICAgLy8gU3RyaXAgd2hhdGV2ZXIgcGxhdGZvcm0tc3BlY2lmaWMgU2hhcnAgYmluYXJpZXMgYG5leHQgYnVpbGRgJ3Mgb3V0cHV0XG4gICAgLy8gZmlsZSB0cmFjaW5nIGJ1bmRsZWQgaW4gZWl0aGVyIHdheSwgc2luY2UgdGhleSdyZSB0aGUgaG9zdCdzIChlLmcuXG4gICAgLy8gbWFjT1MvZ2xpYmMpIHJhdGhlciB0aGFuIHRoZSBkZXBsb3ltZW50IHRhcmdldCdzLlxuICAgIHRoaXMucmVtb3ZlRXhpc3RpbmdTaGFycEJpbmFyaWVzKHN0YW5kYWxvbmVQYXRoKTtcbiAgICAvLyBUaGUgc3RhbmRhbG9uZSBzZXJ2ZXIgc2VydmVzIGBfbmV4dC9pbWFnZWAgaXRzZWxmIHVubGVzcyBhIGRlZGljYXRlZFxuICAgIC8vIGltYWdlIG9wdGltaXphdGlvbiBMYW1iZGEgdGFrZXMgb3ZlciB0aGF0IHJvdXRlLCBhbmQgaXQgcnVucyBvblxuICAgIC8vIG5vZGU6MjQtYWxwaW5lIChzZWUgZnVuY3Rpb25zLkRvY2tlcmZpbGUpIC8gdGhlIHNhbWUgQWxwaW5lIGJhc2UgZm9yXG4gICAgLy8gQ29udGFpbmVycywgc28gaXQgbmVlZHMgbXVzbCBiaW5hcmllcy4gU2tpcHBpbmcgdGhpcyBpbnN0YWxsIHdoZW4gU2hhcnBcbiAgICAvLyAqaXMqIGludm9rZWQgZnJvbSB0aGUgc2VydmVyIGlzIHNpbGVudDogYGltYWdlT3B0aW1pemVyYCBjYXRjaGVzIHRoZVxuICAgIC8vIGxvYWQgZmFpbHVyZSBpbnRlcm5hbGx5IGFuZCByZXR1cm5zIHRoZSB1bm9wdGltaXplZCBvcmlnaW5hbCB3aXRoIGFuXG4gICAgLy8gSFRUUCAyMDAuXG4gICAgaWYgKCFkZWRpY2F0ZWRJbWFnZUZ1bmN0aW9uKSB7XG4gICAgICB0aGlzLmRvd25sb2FkQW5kSW5zdGFsbFNoYXJwQmluYXJpZXMoKTtcbiAgICB9XG5cbiAgICBpZiAoZGVkaWNhdGVkSW1hZ2VGdW5jdGlvbikge1xuICAgICAgdGhpcy5pbWFnZU9wdGltaXphdGlvbkFzc2V0UGF0aCA9XG4gICAgICAgIHRoaXMucHJlcGFyZUltYWdlT3B0aW1pemF0aW9uQXNzZXRzKHN0YW5kYWxvbmVQYXRoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZSBsb2NhbCBidWlsZCBjb21tYW5kIGluIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5XG4gICAqL1xuICBwcml2YXRlIHJ1bk5leHRCdWlsZCgpIHtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGAke0xPR19QUkVGSVh9IFJ1bm5pbmc6IFwiJHt0aGlzLmJ1aWxkQ29tbWFuZH1cIiBpbiBkaXJlY3Rvcnk6ICR7dGhpcy5wcm9wcy5idWlsZERpcmVjdG9yeX1gLFxuICAgICk7XG5cbiAgICAvLyBDbGVhbiBleGlzdGluZyBjYWNoZSBkaXJlY3RvcnkgdG8gYXZvaWQgc3RhbGUgZGF0YSBmcm9tIHByZXZpb3VzIGJ1aWxkc1xuICAgIGlmIChleGlzdHNTeW5jKHRoaXMuaW5pdENhY2hlRGlyKSkge1xuICAgICAgcm1TeW5jKHRoaXMuaW5pdENhY2hlRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gICAgICBkZWJ1ZyhgQ2xlYW5lZCBleGlzdGluZyBjYWNoZSBkaXJlY3Rvcnk6ICR7dGhpcy5pbml0Q2FjaGVEaXJ9YCk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGV4ZWNTeW5jKHRoaXMuYnVpbGRDb21tYW5kLCB7XG4gICAgICAgIHN0ZGlvOiBcImluaGVyaXRcIixcbiAgICAgICAgY3dkOiB0aGlzLnByb3BzLmJ1aWxkRGlyZWN0b3J5LFxuICAgICAgICBlbnY6IHtcbiAgICAgICAgICAuLi5wcm9jZXNzLmVudixcbiAgICAgICAgICBDREtfTkVYVEpTX0lOSVRfQ0FDSEVfRElSOiB0aGlzLmluaXRDYWNoZURpcixcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBDb3B5IHBhdGNoLWZldGNoLmpzIGludG8gY2xpZW50IEpTIGJ1bmRsZSBhZnRlciBidWlsZCBvbmx5IGZvciBOZXh0anNHbG9iYWxGdW5jdGlvbnNcbiAgICAgIGlmICh0aGlzLnByb3BzLm5leHRqc1R5cGUgPT09IE5leHRqc1R5cGUuR0xPQkFMX0ZVTkNUSU9OUykge1xuICAgICAgICB0aGlzLnBhdGNoRmV0Y2hJbkNsaWVudEpzKCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTG9jYWwgYnVpbGQgZmFpbGVkOiAke2Vycm9yfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBOZXh0LmpzIGJ1aWxkIG91dHB1dFxuICAgKiBBbGwgYnVpbGRzIG11c3QgYmUgc3RhbmRhbG9uZSAtIG5vIGZhbGxiYWNrIHRvIHJlZ3VsYXIgYnVpbGRzXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlTmV4dEJ1aWxkT3V0cHV0KCk6IHZvaWQge1xuICAgIGNvbnN0IHN0YW5kYWxvbmVEaXIgPSBqb2luKHRoaXMuZG90TmV4dFBhdGgsIFwic3RhbmRhbG9uZVwiKTtcbiAgICAvLyBTdGFuZGFsb25lIGRpcmVjdG9yeSBpcyBtYW5kYXRvcnlcbiAgICBpZiAoIWV4aXN0c1N5bmMoc3RhbmRhbG9uZURpcikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFN0YW5kYWxvbmUgYnVpbGQgZGlyZWN0b3J5IG5vdCBmb3VuZDogJHtzdGFuZGFsb25lRGlyfS4gYCArXG4gICAgICAgICAgYEFsbCBidWlsZHMgbXVzdCBiZSBjb25maWd1cmVkIGZvciBzdGFuZGFsb25lIG91dHB1dC4gYCArXG4gICAgICAgICAgYFBsZWFzZSBlbnN1cmUgeW91ciBuZXh0LmNvbmZpZy5qcyBpbmNsdWRlcyAnb3V0cHV0OiBcInN0YW5kYWxvbmVcIicuYCxcbiAgICAgICk7XG4gICAgfVxuICAgIC8vIEFkZGl0aW9uYWwgdmFsaWRhdGlvbiAoc2VydmVyLmpzIHdpdGggLm5leHQgc2libGluZykgaGFwcGVucyBpbiBmaW5kUmVsYXRpdmVQYXRoVG9TZXJ2ZXJKcygpXG4gIH1cblxuICAvKipcbiAgICogRmluZCBlbnRyeXBvaW50IGNsaWVudCBzaWRlIGpzIGZpbGVzIHRvIHBhdGNoIGBmZXRjaGAgb25seSBmb3IgTmV4dGpzR2xvYmFsRnVuY3Rpb25zXG4gICAqL1xuICBwcml2YXRlIHBhdGNoRmV0Y2hJbkNsaWVudEpzKCkge1xuICAgIGNvbnN0IHN0YXRpY0NodW5rc1BhdGggPSBqb2luKHRoaXMuZG90TmV4dFBhdGgsIFwic3RhdGljXCIsIFwiY2h1bmtzXCIpO1xuICAgIGNvbnN0IGNodW5rRmlsZXMgPSByZWFkZGlyU3luYyhzdGF0aWNDaHVua3NQYXRoKS5maWx0ZXIoXG4gICAgICAoZmlsZTogc3RyaW5nKSA9PlxuICAgICAgICAvLyBtYWluLWFwcC0gZm9yIHdlYnBhY2ssIHR1cmJvcGFjay0gZm9yIHR1cmJvXG4gICAgICAgIGZpbGUuc3RhcnRzV2l0aChcIm1haW4tYXBwLVwiKSB8fFxuICAgICAgICAoZmlsZS5zdGFydHNXaXRoKFwidHVyYm9wYWNrLVwiKSAmJiBmaWxlLmVuZHNXaXRoKFwiLmpzXCIpKSxcbiAgICApO1xuXG4gICAgaWYgKGNodW5rRmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBjbGllbnQgc2lkZSBqcyBlbnRyeXBvaW50IGZpbGVzIGZvdW5kXCIpO1xuICAgIH1cblxuICAgIC8vIFJlYWQgdGhlIHBhdGNoLWZldGNoLmpzIGNvbnRlbnRcbiAgICBjb25zdCBwYXRjaEZldGNoUGF0aCA9IGpvaW4oX19kaXJuYW1lLCBcInBhdGNoLWZldGNoLmpzXCIpO1xuICAgIGlmICghZXhpc3RzU3luYyhwYXRjaEZldGNoUGF0aCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcInBhdGNoLWZldGNoLmpzIG5vdCBmb3VuZFwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXRjaEZldGNoQ29udGVudCA9IHJlYWRGaWxlU3luYyhwYXRjaEZldGNoUGF0aCwgXCJ1dGYtOFwiKTtcblxuICAgIC8vIFByZXBlbmQgcGF0Y2gtZmV0Y2ggbG9naWMgdG8gZWFjaCBlbnRyeXBvaW50XG4gICAgZm9yIChjb25zdCBjaHVua0ZpbGUgb2YgY2h1bmtGaWxlcykge1xuICAgICAgY29uc3QgY2h1bmtGaWxlUGF0aCA9IGpvaW4oc3RhdGljQ2h1bmtzUGF0aCwgY2h1bmtGaWxlKTtcbiAgICAgIGNvbnN0IG9yaWdpbmFsQ29udGVudCA9IHJlYWRGaWxlU3luYyhjaHVua0ZpbGVQYXRoLCBcInV0Zi04XCIpO1xuICAgICAgY29uc3QgcGF0Y2hlZENvbnRlbnQgPSBwYXRjaEZldGNoQ29udGVudCArIFwiXFxuXCIgKyBvcmlnaW5hbENvbnRlbnQ7XG4gICAgICB3cml0ZUZpbGVTeW5jKGNodW5rRmlsZVBhdGgsIHBhdGNoZWRDb250ZW50KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQXV0b21hdGljYWxseSBmaW5kcyB0aGUgcmVsYXRpdmUgcGF0aCBmcm9tIHN0YW5kYWxvbmUgZGlyZWN0b3J5IHRvIHRoZVxuICAgKiBwYWNrYWdlIGNvbnRhaW5pbmcgc2VydmVyLmpzIGJ5IHNlYXJjaGluZyBmb3Igc2VydmVyLmpzIHdpdGggYSAubmV4dCBzaWJsaW5nLlxuICAgKiBAcmV0dXJucyBcIi5cIiBmb3Igbm9uLW1vbm9yZXBvIGFwcHMsIG9yIHJlbGF0aXZlIHBhdGggbGlrZSBcImFwcC1wbGF5Z3JvdW5kXCIgZm9yIG1vbm9yZXBvIGFwcHNcbiAgICovXG4gIHByaXZhdGUgZmluZFJlbGF0aXZlUGF0aFRvU2VydmVySnMoKTogc3RyaW5nIHtcbiAgICBjb25zdCBzdGFuZGFsb25lRGlyID0gam9pbih0aGlzLmRvdE5leHRQYXRoLCBcInN0YW5kYWxvbmVcIik7XG5cbiAgICBpZiAoIWV4aXN0c1N5bmMoc3RhbmRhbG9uZURpcikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbm5vdCBkZXRlY3QgcmVsYXRpdmVQYXRoVG9QYWNrYWdlOiBzdGFuZGFsb25lIGRpcmVjdG9yeSBub3QgZm91bmQgYXQgJHtzdGFuZGFsb25lRGlyfWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmRTZXJ2ZXJKcyA9IChcbiAgICAgIGRpcjogc3RyaW5nLFxuICAgICAgcmVsYXRpdmVQYXRoOiBzdHJpbmcgPSBcIlwiLFxuICAgICk6IHN0cmluZyB8IG51bGwgPT4ge1xuICAgICAgY29uc3QgZW50cmllcyA9IHJlYWRkaXJTeW5jKGRpciwgeyB3aXRoRmlsZVR5cGVzOiB0cnVlIH0pO1xuXG4gICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICAgICAgY29uc3QgZnVsbFBhdGggPSBqb2luKGRpciwgZW50cnkubmFtZSk7XG5cbiAgICAgICAgaWYgKGVudHJ5LmlzRGlyZWN0b3J5KCkgJiYgZW50cnkubmFtZSAhPT0gXCJub2RlX21vZHVsZXNcIikge1xuICAgICAgICAgIC8vIFJlY3Vyc2l2ZWx5IHNlYXJjaCBkaXJlY3RvcmllcyAoc2tpcCBub2RlX21vZHVsZXMgYXQgcm9vdCBsZXZlbClcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBmaW5kU2VydmVySnMoZnVsbFBhdGgsIGpvaW4ocmVsYXRpdmVQYXRoLCBlbnRyeS5uYW1lKSk7XG4gICAgICAgICAgaWYgKHJlc3VsdCAhPT0gbnVsbCkgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSBlbHNlIGlmIChlbnRyeS5pc0ZpbGUoKSAmJiBlbnRyeS5uYW1lID09PSBcInNlcnZlci5qc1wiKSB7XG4gICAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBzZXJ2ZXIuanMgaGFzIGEgLm5leHQgc2libGluZyBkaXJlY3RvcnlcbiAgICAgICAgICBjb25zdCBwYXJlbnREaXIgPSBkaXI7XG4gICAgICAgICAgY29uc3QgZG90TmV4dFBhdGggPSBqb2luKHBhcmVudERpciwgXCIubmV4dFwiKTtcbiAgICAgICAgICBpZiAoZXhpc3RzU3luYyhkb3ROZXh0UGF0aCkpIHtcbiAgICAgICAgICAgIHJldHVybiByZWxhdGl2ZVBhdGggfHwgXCIuXCI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzdWx0ID0gZmluZFNlcnZlckpzKHN0YW5kYWxvbmVEaXIpO1xuICAgIGlmIChyZXN1bHQgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbm5vdCBkZXRlY3QgcmVsYXRpdmVQYXRoVG9QYWNrYWdlOiBDb3VsZCBub3QgZmluZCBzZXJ2ZXIuanMgd2l0aCAubmV4dCBzaWJsaW5nIGluICR7c3RhbmRhbG9uZURpcn0uIGAgK1xuICAgICAgICAgIGBQbGVhc2UgZW5zdXJlIE5leHQuanMgYnVpbGQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBvciBwcm92aWRlIHJlbGF0aXZlUGF0aFRvUGFja2FnZSBtYW51YWxseS5gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBkZWJ1ZyhgJHtMT0dfUFJFRklYfSBBdXRvLWRldGVjdGVkIHJlbGF0aXZlUGF0aFRvUGFja2FnZTogXCIke3Jlc3VsdH1cImApO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGJ1aWxkIElEIGZyb20gLm5leHQgZGlyZWN0b3J5XG4gICAqL1xuICBwcml2YXRlIGdldEJ1aWxkSWQoKTogc3RyaW5nIHtcbiAgICBjb25zdCBidWlsZElkUGF0aCA9IGpvaW4odGhpcy5kb3ROZXh0UGF0aCwgXCJCVUlMRF9JRFwiKTtcbiAgICAvLyBWZXJpZnkgQlVJTERfSUQgZXhpc3RzIChuZWVkZWQgZm9yIGNhY2hlIHBhcnRpdGlvbmluZylcbiAgICBpZiAoIWV4aXN0c1N5bmMoYnVpbGRJZFBhdGgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBCVUlMRF9JRCBmaWxlIG5vdCBmb3VuZCBhdCAke2J1aWxkSWRQYXRofS4gYCArXG4gICAgICAgICAgYEVuc3VyZSBOZXh0LmpzIGJ1aWxkIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuYCxcbiAgICAgICk7XG4gICAgfVxuICAgIC8vIEJVSUxEX0lEIGV4aXN0ZW5jZSBpcyBhbHJlYWR5IHZhbGlkYXRlZCBpbiB2YWxpZGF0ZU5leHRCdWlsZE91dHB1dCgpXG4gICAgcmV0dXJuIHJlYWRGaWxlU3luYyhidWlsZElkUGF0aCwgXCJ1dGYtOFwiKS50cmltKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHB1YmxpYyBkaXJlY3RvcnkgZW50cmllcyBmcm9tIGxvY2FsIGZpbGVzeXN0ZW1cbiAgICovXG4gIHByaXZhdGUgZ2V0TG9jYWxQdWJsaWNEaXJFbnRyaWVzKCk6IFB1YmxpY0RpckVudHJ5W10ge1xuICAgIGNvbnN0IHB1YmxpY0RpclBhdGggPSBqb2luKHRoaXMucHJvcHMuYnVpbGREaXJlY3RvcnksIFwicHVibGljXCIpO1xuICAgIGlmICghZXhpc3RzU3luYyhwdWJsaWNEaXJQYXRoKSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gcmVhZGRpclN5bmMocHVibGljRGlyUGF0aCwgeyB3aXRoRmlsZVR5cGVzOiB0cnVlIH0pLm1hcChcbiAgICAgICAgKGVudHJ5OiBhbnkpID0+ICh7XG4gICAgICAgICAgbmFtZTogZW50cnkubmFtZSxcbiAgICAgICAgICBpc0RpcmVjdG9yeTogZW50cnkuaXNEaXJlY3RvcnkoKSxcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLndhcm4oYCR7TE9HX1BSRUZJWH0gRmFpbGVkIHRvIHJlYWQgcHVibGljIGRpcmVjdG9yeTogJHtlcnJvcn1gKTtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVjdXJzaXZlbHkgZmluZCBhbmQgcmVtb3ZlIGV4aXN0aW5nIFNoYXJwIHBsYXRmb3JtIGJpbmFyaWVzXG4gICAqL1xuICBwcml2YXRlIHJlbW92ZUV4aXN0aW5nU2hhcnBCaW5hcmllcyhzdGFuZGFsb25lUGF0aDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qgbm9kZU1vZHVsZXNQYXRoID0gam9pbihzdGFuZGFsb25lUGF0aCwgXCJub2RlX21vZHVsZXNcIik7XG4gICAgaWYgKCFleGlzdHNTeW5jKG5vZGVNb2R1bGVzUGF0aCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gVXNlIHJlY3Vyc2l2ZSByZWFkZGlyU3luYyB0byBmaW5kIGFsbCBTaGFycCBiaW5hcnkgZGlyZWN0b3JpZXMgYW5kIHN5bWxpbmtzXG4gICAgICBjb25zdCBhbGxFbnRyaWVzID0gcmVhZGRpclN5bmMobm9kZU1vZHVsZXNQYXRoLCB7XG4gICAgICAgIHJlY3Vyc2l2ZTogdHJ1ZSxcbiAgICAgICAgd2l0aEZpbGVUeXBlczogdHJ1ZSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBzaGFycEJpbmFyeVBhdGhzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGFsbEVudHJpZXMpIHtcbiAgICAgICAgLy8gQ2hlY2sgZm9yIGJvdGggZGlyZWN0b3JpZXMgYW5kIHN5bWxpbmtzIChwbnBtIGNyZWF0ZXMgc3ltbGlua3MpXG4gICAgICAgIGlmIChlbnRyeS5pc0RpcmVjdG9yeSgpIHx8IGVudHJ5LmlzU3ltYm9saWNMaW5rKCkpIHtcbiAgICAgICAgICAvLyBNYXRjaCBTaGFycCBiaW5hcnkgcGFja2FnZXMgd2l0aCBtb3JlIGNvbXByZWhlbnNpdmUgcGF0dGVybnNcbiAgICAgICAgICBjb25zdCBpc1NoYXJwQmluYXJ5ID1cbiAgICAgICAgICAgIGVudHJ5Lm5hbWUuaW5jbHVkZXMoXCJzaGFycC1cIikgfHxcbiAgICAgICAgICAgIGVudHJ5Lm5hbWUuaW5jbHVkZXMoXCJzaGFycC1saWJ2aXBzXCIpO1xuXG4gICAgICAgICAgaWYgKGlzU2hhcnBCaW5hcnkpIHtcbiAgICAgICAgICAgIC8vIEZvciByZWN1cnNpdmUgcmVhZGRpclN5bmMsIHBhcmVudFBhdGggY29udGFpbnMgdGhlIGZ1bGwgYWJzb2x1dGUgcGF0aFxuICAgICAgICAgICAgY29uc3QgZnVsbFBhdGggPSBqb2luKGVudHJ5LnBhcmVudFBhdGgsIGVudHJ5Lm5hbWUpO1xuICAgICAgICAgICAgc2hhcnBCaW5hcnlQYXRocy5wdXNoKGZ1bGxQYXRoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZGVidWcoXG4gICAgICAgIGAke0xPR19QUkVGSVh9IEZvdW5kICR7c2hhcnBCaW5hcnlQYXRocy5sZW5ndGh9IFNoYXJwIGJpbmFyeSBkaXJlY3Rvcmllcy9zeW1saW5rcyB0byByZW1vdmVgLFxuICAgICAgKTtcblxuICAgICAgLy8gUmVtb3ZlIGFsbCBmb3VuZCBTaGFycCBiaW5hcnkgZGlyZWN0b3JpZXMgYW5kIHN5bWxpbmtzXG4gICAgICBmb3IgKGNvbnN0IHBhdGggb2Ygc2hhcnBCaW5hcnlQYXRocykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJtU3luYyhwYXRoLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gICAgICAgICAgZGVidWcoYCR7TE9HX1BSRUZJWH0gUmVtb3ZlZDogJHtwYXRofWApO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgIGAke0xPR19QUkVGSVh9IFdhcm5pbmc6IENvdWxkIG5vdCByZW1vdmUgJHtwYXRofTogJHtlcnJvcn1gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgJHtMT0dfUFJFRklYfSBXYXJuaW5nOiBDb3VsZCBub3QgcmVhZCBub2RlX21vZHVsZXMgZGlyZWN0b3J5OiAke2Vycm9yfWAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEb3dubG9hZCBhbmQgaW5zdGFsbCBjb3JyZWN0IFNoYXJwIGJpbmFyaWVzIGZvciBMaW51eCBNVVNMXG4gICAqL1xuICBwcml2YXRlIGRvd25sb2FkQW5kSW5zdGFsbFNoYXJwQmluYXJpZXMoKTogdm9pZCB7XG4gICAgY29uc3Qgbm9kZU1vZHVsZXNQYXRoID0gam9pbihcbiAgICAgIHRoaXMuZG90TmV4dFBhdGgsXG4gICAgICBcInN0YW5kYWxvbmVcIixcbiAgICAgIFwibm9kZV9tb2R1bGVzXCIsXG4gICAgKTtcbiAgICBjb25zdCBpbWdQYXRoID0gam9pbihub2RlTW9kdWxlc1BhdGgsIFwiQGltZ1wiKTtcbiAgICBjb25zdCBhcmNoID0gZ2V0Tm9kZUFyY2hpdGVjdHVyZSgpO1xuXG4gICAgdGhpcy5pbnN0YWxsU2hhcnBQYWNrYWdlcyhcbiAgICAgIGltZ1BhdGgsXG4gICAgICB0aGlzLmdldFNoYXJwQmluYXJ5UGFja2FnZXMoXG4gICAgICAgIHRoaXMuZmluZFNoYXJwUGFja2FnZShub2RlTW9kdWxlc1BhdGgpLFxuICAgICAgICBgbGludXhtdXNsLSR7YXJjaH1gLFxuICAgICAgKSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEFzc2VtYmxlIHRoZSBkZXBsb3ltZW50IGFzc2V0IGZvciB0aGUgZGVkaWNhdGVkIGltYWdlIG9wdGltaXphdGlvblxuICAgKiBMYW1iZGE6IHRoZSBwcmUtYnVuZGxlZCBoYW5kbGVyIChmcm9tIHRoaXMgcGFja2FnZSdzIG93biBgbGliL2Agb3V0cHV0KSxcbiAgICogYHNoYXJwYCdzIEpTIHdyYXBwZXIgKGFscmVhZHkgZGVyZWZlcmVuY2VkIGZyb20gdGhlIHBucG0gc3RvcmUgYnkgTmV4dCdzXG4gICAqIG91dHB1dCBmaWxlIHRyYWNpbmcgaW50byB0aGUgc3RhbmRhbG9uZSBidWlsZCksIGdsaWJjIGBzaGFycGAgYmluYXJpZXNcbiAgICogKHRoZSBzdGFuZGFyZCBMYW1iZGEgbWFuYWdlZCBydW50aW1lIGlzIEFtYXpvbiBMaW51eCAyMDIzL2dsaWJjLCB1bmxpa2VcbiAgICogdGhlIG11c2wgYmluYXJpZXMgdGhlIERvY2tlci9MYW1iZGEgV2ViIEFkYXB0ZXIgc2VydmVyIGZ1bmN0aW9uIG5lZWRzKSxcbiAgICogYW5kIGByZXF1aXJlZC1zZXJ2ZXItZmlsZXMuanNvbmAgKHJlYWQgYnkgdGhlIGhhbmRsZXIgYXQgY29sZCBzdGFydCB0b1xuICAgKiBidWlsZCBgbmV4dENvbmZpZ2ApLlxuICAgKi9cbiAgcHJpdmF0ZSBwcmVwYXJlSW1hZ2VPcHRpbWl6YXRpb25Bc3NldHMoc3RhbmRhbG9uZVBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgYXNzZXRQYXRoID0gam9pbih0aGlzLmRvdE5leHRQYXRoLCBcImNkay1uZXh0anMtaW1hZ2Utb3B0aW1pemF0aW9uXCIpO1xuICAgIGNvbnN0IG5vZGVNb2R1bGVzUGF0aCA9IGpvaW4oYXNzZXRQYXRoLCBcIm5vZGVfbW9kdWxlc1wiKTtcbiAgICBjb25zdCBpbWdQYXRoID0gam9pbihub2RlTW9kdWxlc1BhdGgsIFwiQGltZ1wiKTtcblxuICAgIHJtU3luYyhhc3NldFBhdGgsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcbiAgICBta2RpclN5bmMoaW1nUGF0aCwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgICAvLyBQcmUtYnVuZGxlZCBieSBlc2J1aWxkIGludG8gdGhpcyBwYWNrYWdlJ3Mgb3duIGxpYi8gb3V0cHV0LlxuICAgIGNwU3luYyhqb2luKF9fZGlybmFtZSwgXCIuLlwiLCBcImltYWdlLW9wdGltaXphdGlvblwiKSwgYXNzZXRQYXRoLCB7XG4gICAgICByZWN1cnNpdmU6IHRydWUsXG4gICAgfSk7XG5cbiAgICBjb25zdCBzaGFycFNvdXJjZSA9IHRoaXMuZmluZFNoYXJwUGFja2FnZShcbiAgICAgIGpvaW4oc3RhbmRhbG9uZVBhdGgsIFwibm9kZV9tb2R1bGVzXCIpLFxuICAgICk7XG4gICAgaWYgKHNoYXJwU291cmNlKSB7XG4gICAgICB0aGlzLmNvcHlTaGFycFJ1bnRpbWUoc2hhcnBTb3VyY2UsIG5vZGVNb2R1bGVzUGF0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYCR7TE9HX1BSRUZJWH0gXCJzaGFycFwiIG5vdCBmb3VuZCBpbiBzdGFuZGFsb25lIGJ1aWxkIG91dHB1dC4gQWRkIFwic2hhcnBcIiBhcyBhIGRlcGVuZGVuY3kgb2YgeW91ciBOZXh0LmpzIGFwcCB0byBlbmFibGUgaW1hZ2Ugb3B0aW1pemF0aW9uLmAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcXVpcmVkU2VydmVyRmlsZXMgPSBqb2luKFxuICAgICAgdGhpcy5kb3ROZXh0UGF0aCxcbiAgICAgIFwicmVxdWlyZWQtc2VydmVyLWZpbGVzLmpzb25cIixcbiAgICApO1xuICAgIGlmICghZXhpc3RzU3luYyhyZXF1aXJlZFNlcnZlckZpbGVzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgJHtMT0dfUFJFRklYfSBcInJlcXVpcmVkLXNlcnZlci1maWxlcy5qc29uXCIgbm90IGZvdW5kIGF0ICR7cmVxdWlyZWRTZXJ2ZXJGaWxlc30uIFRoZSBpbWFnZSBvcHRpbWl6YXRpb24gTGFtYmRhIHJlYWRzIGl0IGF0IGNvbGQgc3RhcnQgdG8gYnVpbGQgaXRzIE5leHQuanMgY29uZmlnLmAsXG4gICAgICApO1xuICAgIH1cbiAgICBjcFN5bmMocmVxdWlyZWRTZXJ2ZXJGaWxlcywgam9pbihhc3NldFBhdGgsIFwicmVxdWlyZWQtc2VydmVyLWZpbGVzLmpzb25cIikpO1xuXG4gICAgY29uc3QgYXJjaCA9IGdldE5vZGVBcmNoaXRlY3R1cmUoKTtcbiAgICB0aGlzLmluc3RhbGxTaGFycFBhY2thZ2VzKFxuICAgICAgaW1nUGF0aCxcbiAgICAgIHRoaXMuZ2V0U2hhcnBCaW5hcnlQYWNrYWdlcyhzaGFycFNvdXJjZSwgYGxpbnV4LSR7YXJjaH1gKSxcbiAgICApO1xuXG4gICAgcmV0dXJuIGFzc2V0UGF0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2NhdGUgYHNoYXJwYCdzIEpTIHdyYXBwZXIgaW5zaWRlIGEgc3RhbmRhbG9uZSBgbm9kZV9tb2R1bGVzYC5cbiAgICpcbiAgICogTmV4dCdzIG91dHB1dCBmaWxlIHRyYWNpbmcgcHJlc2VydmVzIHRoZSBpbnN0YWxsZXIncyBvbi1kaXNrIGxheW91dCwgc29cbiAgICogbnBtL3lhcm4gcHJvZHVjZSBhIGhvaXN0ZWQgYG5vZGVfbW9kdWxlcy9zaGFycGAgd2hpbGUgcG5wbSBvbmx5XG4gICAqIG1hdGVyaWFsaXplcyBgbm9kZV9tb2R1bGVzLy5wbnBtL3NoYXJwQDx2ZXJzaW9uPi9ub2RlX21vZHVsZXMvc2hhcnBgLlxuICAgKi9cbiAgcHJpdmF0ZSBmaW5kU2hhcnBQYWNrYWdlKG5vZGVNb2R1bGVzUGF0aDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBob2lzdGVkID0gam9pbihub2RlTW9kdWxlc1BhdGgsIFwic2hhcnBcIik7XG4gICAgaWYgKGV4aXN0c1N5bmMoam9pbihob2lzdGVkLCBcInBhY2thZ2UuanNvblwiKSkpIHtcbiAgICAgIHJldHVybiBob2lzdGVkO1xuICAgIH1cblxuICAgIGNvbnN0IHBucG1QYXRoID0gam9pbihub2RlTW9kdWxlc1BhdGgsIFwiLnBucG1cIik7XG4gICAgaWYgKCFleGlzdHNTeW5jKHBucG1QYXRoKSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBjYW5kaWRhdGVzID0gcmVhZGRpclN5bmMocG5wbVBhdGgpXG4gICAgICAuZmlsdGVyKChuYW1lKSA9PiBuYW1lLnN0YXJ0c1dpdGgoXCJzaGFycEBcIikpXG4gICAgICAuc29ydCgpO1xuICAgIGZvciAoY29uc3QgY2FuZGlkYXRlIG9mIGNhbmRpZGF0ZXMucmV2ZXJzZSgpKSB7XG4gICAgICBjb25zdCBuZXN0ZWQgPSBqb2luKHBucG1QYXRoLCBjYW5kaWRhdGUsIFwibm9kZV9tb2R1bGVzXCIsIFwic2hhcnBcIik7XG4gICAgICBpZiAoZXhpc3RzU3luYyhqb2luKG5lc3RlZCwgXCJwYWNrYWdlLmpzb25cIikpKSB7XG4gICAgICAgIHJldHVybiBuZXN0ZWQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb3B5IGBzaGFycGAgcGx1cyB0aGUgdHJhbnNpdGl2ZSBgZGVwZW5kZW5jaWVzYCBjbG9zdXJlIGByZXF1aXJlKFwic2hhcnBcIilgXG4gICAqIHB1bGxzIGluIChgQGltZy9jb2xvdXJgLCBgZGV0ZWN0LWxpYmNgLCBgc2VtdmVyYCkgaW50byBgdGFyZ2V0UGF0aGAuXG4gICAqXG4gICAqIENvcHlpbmcgb25seSBgc2hhcnBgIGl0c2VsZiBsZWF2ZXMgdGhvc2UgcmVxdWlyZXMgdW5yZXNvbHZhYmxlLCBhbmRcbiAgICogYGltYWdlT3B0aW1pemVyYCBzd2FsbG93cyB0aGUgcmVzdWx0aW5nIGBNT0RVTEVfTk9UX0ZPVU5EYCBieSBmYWxsaW5nIGJhY2tcbiAgICogdG8gc2VydmluZyB0aGUgdW5vcHRpbWl6ZWQgb3JpZ2luYWwsIHNvIHRoZSBvbWlzc2lvbiBpcyBvdGhlcndpc2Ugc2lsZW50LlxuICAgKi9cbiAgcHJpdmF0ZSBjb3B5U2hhcnBSdW50aW1lKHNoYXJwU291cmNlOiBzdHJpbmcsIHRhcmdldFBhdGg6IHN0cmluZyk6IHZvaWQge1xuICAgIC8vIFVuZGVyIHBucG0gYSBwYWNrYWdlJ3MgZGVwZW5kZW5jaWVzIGFyZSBzeW1saW5rZWQgaW50byB0aGUgc2libGluZ1xuICAgIC8vIGRpcmVjdG9yeSBhbG9uZ3NpZGUgaXQsIHdoaWNoIGlzIGFsc28gd2hlcmUgYSBob2lzdGVkIGxheW91dCBrZWVwc1xuICAgIC8vIHRoZW0sIHNvIHRoZSBzYW1lIGxvb2t1cCBjb3ZlcnMgYm90aC5cbiAgICBjb25zdCBsb29rdXBQYXRoID0gam9pbihzaGFycFNvdXJjZSwgXCIuLlwiKTtcbiAgICBjb25zdCBxdWV1ZSA9IFtcInNoYXJwXCJdO1xuICAgIGNvbnN0IGNvcGllZCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gICAgd2hpbGUgKHF1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IG5hbWUgPSBxdWV1ZS5zaGlmdCgpITtcbiAgICAgIGlmIChjb3BpZWQuaGFzKG5hbWUpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzb3VyY2UgPSBuYW1lID09PSBcInNoYXJwXCIgPyBzaGFycFNvdXJjZSA6IGpvaW4obG9va3VwUGF0aCwgbmFtZSk7XG4gICAgICBpZiAoIWV4aXN0c1N5bmMoam9pbihzb3VyY2UsIFwicGFja2FnZS5qc29uXCIpKSkge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgYCR7TE9HX1BSRUZJWH0gXCJzaGFycFwiIGRlcGVuZGVuY3kgXCIke25hbWV9XCIgbm90IGZvdW5kIGluIHN0YW5kYWxvbmUgYnVpbGQgb3V0cHV0OyBpbWFnZSBvcHRpbWl6YXRpb24gbWF5IGZhbGwgYmFjayB0byBzZXJ2aW5nIHVub3B0aW1pemVkIGltYWdlcy5gLFxuICAgICAgICApO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gYGRlcmVmZXJlbmNlYCByZXNvbHZlcyBwbnBtJ3Mgc3ltbGlua3MgaW50byByZWFsIGZpbGVzLCBzaW5jZSB0aGVcbiAgICAgIC8vIExhbWJkYSBhc3NldCBpcyBhIHN0YW5kYWxvbmUgZGlyZWN0b3J5IHdpdGggbm8gc3RvcmUgdG8gbGluayBpbnRvLlxuICAgICAgY3BTeW5jKHNvdXJjZSwgam9pbih0YXJnZXRQYXRoLCBuYW1lKSwge1xuICAgICAgICByZWN1cnNpdmU6IHRydWUsXG4gICAgICAgIGRlcmVmZXJlbmNlOiB0cnVlLFxuICAgICAgfSk7XG4gICAgICBjb3BpZWQuYWRkKG5hbWUpO1xuXG4gICAgICBjb25zdCBtYW5pZmVzdCA9IEpTT04ucGFyc2UoXG4gICAgICAgIHJlYWRGaWxlU3luYyhqb2luKHNvdXJjZSwgXCJwYWNrYWdlLmpzb25cIiksIFwidXRmLThcIiksXG4gICAgICApO1xuICAgICAgLy8gUGxhdGZvcm0gYmluYXJpZXMgYXJlIG9wdGlvbmFsRGVwZW5kZW5jaWVzLCBpbnN0YWxsZWQgc2VwYXJhdGVseSBhdFxuICAgICAgLy8gdGhlIHZlcnNpb25zIHRoaXMgc2FtZSBtYW5pZmVzdCBwaW5zLCBzbyBvbmx5IGBkZXBlbmRlbmNpZXNgIGhlcmUuXG4gICAgICBxdWV1ZS5wdXNoKC4uLk9iamVjdC5rZXlzKG1hbmlmZXN0LmRlcGVuZGVuY2llcyA/PyB7fSkpO1xuICAgIH1cblxuICAgIGRlYnVnKFxuICAgICAgYCR7TE9HX1BSRUZJWH0gQ29waWVkIHNoYXJwIHJ1bnRpbWU6ICR7Wy4uLmNvcGllZF0uc29ydCgpLmpvaW4oXCIsIFwiKX1gLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSB0aGUgYEBpbWcvc2hhcnAtPHBsYXRmb3JtPmAgYW5kIGBAaW1nL3NoYXJwLWxpYnZpcHMtPHBsYXRmb3JtPmBcbiAgICogdmVyc2lvbnMgdG8gaW5zdGFsbCBmb3IgYSBnaXZlbiBwbGF0Zm9ybS5cbiAgICpcbiAgICogVGhlc2UgbXVzdCBtYXRjaCB0aGUgYHNoYXJwYCBKUyB3cmFwcGVyIHRoYXQgb3V0cHV0IGZpbGUgdHJhY2luZyBwdXQgaW5cbiAgICogdGhlIHN0YW5kYWxvbmUgYnVpbGQ6IGBzaGFycGAncyBgbGliL2xpYnZpcHMuanNgIGNvbXBhcmVzIHRoZSBiaW5hcnknc1xuICAgKiByZXBvcnRlZCBsaWJ2aXBzIHZlcnNpb24gYWdhaW5zdCBpdHMgb3duIGBtaW5pbXVtTGlidmlwc1ZlcnNpb25gIGFuZFxuICAgKiB0aHJvd3MgYXQgbG9hZCB3aGVuIHRoZXkgZGlzYWdyZWUuIGBzaGFycGAgcGlucyBib3RoIGluIGl0c1xuICAgKiBgb3B0aW9uYWxEZXBlbmRlbmNpZXNgLCBzbyB0aGF0IG1hbmlmZXN0IGlzIHRoZSBhdXRob3JpdGF0aXZlIHNvdXJjZS5cbiAgICovXG4gIHByaXZhdGUgZ2V0U2hhcnBCaW5hcnlQYWNrYWdlcyhcbiAgICBzaGFycFNvdXJjZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIHBsYXRmb3JtOiBzdHJpbmcsXG4gICk6IHsgbmFtZTogc3RyaW5nOyB2ZXJzaW9uOiBzdHJpbmcgfVtdIHtcbiAgICBjb25zdCBmYWxsYmFjayA9IFtcbiAgICAgIHsgbmFtZTogYHNoYXJwLWxpYnZpcHMtJHtwbGF0Zm9ybX1gLCB2ZXJzaW9uOiBcIjEuMi40XCIgfSxcbiAgICAgIHsgbmFtZTogYHNoYXJwLSR7cGxhdGZvcm19YCwgdmVyc2lvbjogXCIwLjM0LjVcIiB9LFxuICAgIF07XG5cbiAgICBpZiAoIXNoYXJwU291cmNlKSB7XG4gICAgICByZXR1cm4gZmFsbGJhY2s7XG4gICAgfVxuXG4gICAgY29uc3QgbWFuaWZlc3QgPSBKU09OLnBhcnNlKFxuICAgICAgcmVhZEZpbGVTeW5jKGpvaW4oc2hhcnBTb3VyY2UsIFwicGFja2FnZS5qc29uXCIpLCBcInV0Zi04XCIpLFxuICAgICk7XG4gICAgY29uc3Qgb3B0aW9uYWxEZXBlbmRlbmNpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPVxuICAgICAgbWFuaWZlc3Qub3B0aW9uYWxEZXBlbmRlbmNpZXMgPz8ge307XG5cbiAgICByZXR1cm4gZmFsbGJhY2subWFwKChwa2cpID0+IHtcbiAgICAgIGNvbnN0IHZlcnNpb24gPSBvcHRpb25hbERlcGVuZGVuY2llc1tgQGltZy8ke3BrZy5uYW1lfWBdO1xuICAgICAgaWYgKCF2ZXJzaW9uKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBgJHtMT0dfUFJFRklYfSBzaGFycEAke21hbmlmZXN0LnZlcnNpb259IGRvZXMgbm90IHBpbiBcIkBpbWcvJHtwa2cubmFtZX1cIjsgZmFsbGluZyBiYWNrIHRvICR7cGtnLnZlcnNpb259LmAsXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBwa2c7XG4gICAgICB9XG4gICAgICByZXR1cm4geyBuYW1lOiBwa2cubmFtZSwgdmVyc2lvbiB9O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERvd25sb2FkICh3aXRoIGNhY2hpbmcpIGFuZCBleHRyYWN0IFNoYXJwJ3MgcGxhdGZvcm0tc3BlY2lmaWMgYmluYXJ5XG4gICAqIHBhY2thZ2VzIGludG8gYGltZ1BhdGhgLlxuICAgKi9cbiAgcHJpdmF0ZSBpbnN0YWxsU2hhcnBQYWNrYWdlcyhcbiAgICBpbWdQYXRoOiBzdHJpbmcsXG4gICAgcGFja2FnZXM6IHsgbmFtZTogc3RyaW5nOyB2ZXJzaW9uOiBzdHJpbmcgfVtdLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBjYWNoZURpciA9IGpvaW4odG1wZGlyKCksIFwiY2RrLW5leHRqcy1zaGFycC1jYWNoZVwiKTtcbiAgICBpZiAoIWV4aXN0c1N5bmMoY2FjaGVEaXIpKSB7XG4gICAgICBta2RpclN5bmMoY2FjaGVEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgcGtnIG9mIHBhY2thZ2VzKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB0YXJnZXREaXIgPSBqb2luKGltZ1BhdGgsIHBrZy5uYW1lKTtcbiAgICAgICAgY29uc3QgdXJsID0gYGh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BpbWcvJHtwa2cubmFtZX0vLS8ke3BrZy5uYW1lfS0ke3BrZy52ZXJzaW9ufS50Z3pgO1xuXG4gICAgICAgIC8vIENyZWF0ZSBhIGNvbnNpc3RlbnQgZmlsZW5hbWUgYmFzZWQgb24gcGFja2FnZSBuYW1lIGFuZCB2ZXJzaW9uXG4gICAgICAgIGNvbnN0IGNhY2hlRmlsZU5hbWUgPSBgJHtwa2cubmFtZX0tJHtwa2cudmVyc2lvbn0udGd6YDtcbiAgICAgICAgY29uc3QgY2FjaGVkRmlsZSA9IGpvaW4oY2FjaGVEaXIsIGNhY2hlRmlsZU5hbWUpO1xuXG4gICAgICAgIC8vIENoZWNrIGlmIHdlIGFscmVhZHkgaGF2ZSBhIHZhbGlkIHBhY2thZ2UgY2FjaGVkOyByZS1kb3dubG9hZCBpZlxuICAgICAgICAvLyBhIHByZXZpb3VzIHJ1biBsZWZ0IGJlaGluZCBhIHRydW5jYXRlZC9jb3JydXB0IGRvd25sb2FkXG4gICAgICAgIGlmIChleGlzdHNTeW5jKGNhY2hlZEZpbGUpICYmIHRoaXMuaXNDYWNoZWRGaWxlVmFsaWQoY2FjaGVkRmlsZSkpIHtcbiAgICAgICAgICBkZWJ1ZyhcbiAgICAgICAgICAgIGAke0xPR19QUkVGSVh9IFVzaW5nIGNhY2hlZCAke3BrZy5uYW1lfUAke3BrZy52ZXJzaW9ufSBmcm9tICR7Y2FjaGVkRmlsZX1gLFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGVidWcoYCR7TE9HX1BSRUZJWH0gRG93bmxvYWRpbmcgJHtwa2cubmFtZX1AJHtwa2cudmVyc2lvbn0uLi5gKTtcblxuICAgICAgICAgIC8vIERvd25sb2FkIHRvIGEgcHJvY2Vzcy11bmlxdWUgdGVtcCBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeSxcbiAgICAgICAgICAvLyB0aGVuIGF0b21pY2FsbHkgcmVuYW1lIGl0IG9udG8gdGhlIHNoYXJlZCBjYWNoZSBwYXRoLiBDb25jdXJyZW50XG4gICAgICAgICAgLy8gc3ludGggcHJvY2Vzc2VzIChlLmcuIFR1cmJvcmVwbyBydW5uaW5nIG11bHRpcGxlIGBjZGtgIGNvbW1hbmRzKVxuICAgICAgICAgIC8vIHNoYXJlIHRoaXMgY2FjaGUgZGlyLCBzbyB3cml0aW5nIGRpcmVjdGx5IHRvIGBjYWNoZWRGaWxlYCByaXNrc1xuICAgICAgICAgIC8vIGFub3RoZXIgcHJvY2VzcyBleHRyYWN0aW5nIGEgaGFsZi13cml0dGVuIGZpbGUuIFJlbmFtaW5nIHdpdGhpblxuICAgICAgICAgIC8vIHRoZSBzYW1lIGZpbGVzeXN0ZW0gaXMgYXRvbWljLCBzbyByZWFkZXJzIG9ubHkgZXZlciBzZWUgYVxuICAgICAgICAgIC8vIGNvbXBsZXRlIGZpbGUsIHdoaWNoZXZlciBwcm9jZXNzIHdpbnMgdGhlIHJhY2UuXG4gICAgICAgICAgY29uc3QgdGVtcEZpbGUgPSBqb2luKFxuICAgICAgICAgICAgY2FjaGVEaXIsXG4gICAgICAgICAgICBgJHtjYWNoZUZpbGVOYW1lfS4ke3Byb2Nlc3MucGlkfS0ke3JhbmRvbUJ5dGVzKDYpLnRvU3RyaW5nKFwiaGV4XCIpfS50bXBgLFxuICAgICAgICAgICk7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIC0tZmFpbCBtYWtlcyBjdXJsIGV4aXQgbm9uLXplcm8gb24gSFRUUCBlcnJvcnMgYW5kIC0tcmV0cnlcbiAgICAgICAgICAgIC8vIGhhbmRsZXMgdHJhbnNpZW50IGNvbm5lY3Rpb24gZHJvcHMgc28gYSBwYXJ0aWFsIHRyYW5zZmVyXG4gICAgICAgICAgICAvLyBpc24ndCBjYWNoZWQgYXMgdmFsaWQuXG4gICAgICAgICAgICBleGVjU3luYyhcbiAgICAgICAgICAgICAgYGN1cmwgLUwgLS1mYWlsIC0tcmV0cnkgMyAtLXJldHJ5LWRlbGF5IDEgLW8gXCIke3RlbXBGaWxlfVwiIFwiJHt1cmx9XCJgLFxuICAgICAgICAgICAgICB7IHN0ZGlvOiBcInBpcGVcIiB9LFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLmlzQ2FjaGVkRmlsZVZhbGlkKHRlbXBGaWxlKSkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgYERvd25sb2FkZWQgZmlsZSBmb3IgJHtwa2cubmFtZX1AJHtwa2cudmVyc2lvbn0gaXMgZW1wdHkgb3IgbWlzc2luZzogJHt0ZW1wRmlsZX1gLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZW5hbWVTeW5jKHRlbXBGaWxlLCBjYWNoZWRGaWxlKTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgaWYgKGV4aXN0c1N5bmModGVtcEZpbGUpKSB7XG4gICAgICAgICAgICAgIHJtU3luYyh0ZW1wRmlsZSwgeyBmb3JjZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkZWJ1ZyhcbiAgICAgICAgICAgIGAke0xPR19QUkVGSVh9IENhY2hlZCAke3BrZy5uYW1lfUAke3BrZy52ZXJzaW9ufSB0byAke2NhY2hlZEZpbGV9YCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgbWtkaXJTeW5jKHRhcmdldERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgIGV4ZWNTeW5jKFxuICAgICAgICAgIGB0YXIgLXh6ZiBcIiR7Y2FjaGVkRmlsZX1cIiAtQyBcIiR7dGFyZ2V0RGlyfVwiIC0tc3RyaXAtY29tcG9uZW50cz0xYCxcbiAgICAgICAgICB7IHN0ZGlvOiBcInBpcGVcIiB9LFxuICAgICAgICApO1xuXG4gICAgICAgIGRlYnVnKGAke0xPR19QUkVGSVh9IEluc3RhbGxlZCAke3BrZy5uYW1lfUAke3BrZy52ZXJzaW9ufWApO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgJHtMT0dfUFJFRklYfSBGYWlsZWQgdG8gaW5zdGFsbCAke3BrZy5uYW1lfTogJHtlcnJvcn1gKTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB0aGF0IGEgY2FjaGVkIFNoYXJwIGJpbmFyeSBhcmNoaXZlIGlzIG5vbi1lbXB0eS4gR3VhcmRzIGFnYWluc3RcbiAgICogYSB0cnVuY2F0ZWQvY29ycnVwdCBkb3dubG9hZCAoZS5nLiBmcm9tIGEgZHJvcHBlZCBjb25uZWN0aW9uKSBiZWluZ1xuICAgKiByZXVzZWQgYWNyb3NzIHN5bnRoIG9wZXJhdGlvbnMuXG4gICAqL1xuICBwcml2YXRlIGlzQ2FjaGVkRmlsZVZhbGlkKGZpbGVQYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHN0YXRTeW5jKGZpbGVQYXRoKS5zaXplID4gMDtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -13,7 +13,7 @@ const constants_1 = require("./constants");
13
13
  * Next.js Cache construct providing unified S3 and DynamoDB cache management.
14
14
  */
15
15
  class NextjsCache extends constructs_1.Construct {
16
- static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsCache", version: "0.5.16" };
16
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsCache", version: "0.6.1" };
17
17
  cacheBucket;
18
18
  revalidationTable;
19
19
  buildId;
@@ -18,7 +18,7 @@ const constants_1 = require("../constants");
18
18
  * Fargate.
19
19
  */
20
20
  class NextjsContainers extends constructs_1.Construct {
21
- static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsContainers", version: "0.5.16" };
21
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsContainers", version: "0.6.1" };
22
22
  albFargateService;
23
23
  ecsCluster;
24
24
  url;
@@ -15,7 +15,7 @@ const get_architecture_1 = require("../utils/get-architecture");
15
15
  * Run Next.js in functions on AWS with AWS Lambda.
16
16
  */
17
17
  class NextjsFunctions extends constructs_1.Construct {
18
- static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsFunctions", version: "0.5.16" };
18
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsFunctions", version: "0.6.1" };
19
19
  function;
20
20
  functionUrl;
21
21
  props;
@@ -22,6 +22,16 @@ export interface NextjsImageFunctionProps {
22
22
  * non-absolute image URLs.
23
23
  */
24
24
  readonly staticAssetsBucket: IBucket;
25
+ /**
26
+ * S3 key prefix the static assets were uploaded under, i.e.
27
+ * `NextjsStaticAssets.keyPrefix`, which namespaces a shared bucket.
28
+ *
29
+ * Threaded through explicitly rather than read from the app's bundled config,
30
+ * because it's distinct from the app's own `basePath` (which next-image-loader
31
+ * bakes into hrefs) — the two diverge when the app's `basePath` comes from
32
+ * elsewhere, e.g. an API Gateway stage under `NextjsRegionalFunctions`.
33
+ */
34
+ readonly staticAssetsKeyPrefix?: string;
25
35
  readonly vpc?: IVpc;
26
36
  /**
27
37
  * Override props of any construct.
@@ -15,7 +15,7 @@ const get_architecture_1 = require("../utils/get-architecture");
15
15
  * Lambda instead of paying the Docker/Lambda Web Adapter cold-start cost.
16
16
  */
17
17
  class NextjsImageFunction extends constructs_1.Construct {
18
- static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsImageFunction", version: "0.5.16" };
18
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsImageFunction", version: "0.6.1" };
19
19
  function;
20
20
  functionUrl;
21
21
  props;
@@ -47,6 +47,7 @@ class NextjsImageFunction extends constructs_1.Construct {
47
47
  architecture: (0, get_architecture_1.getLambdaArchitecture)(),
48
48
  environment: {
49
49
  CDK_NEXTJS_STATIC_ASSETS_BUCKET_NAME: this.props.staticAssetsBucket.bucketName,
50
+ CDK_NEXTJS_STATIC_ASSETS_KEY_PREFIX: this.props.staticAssetsKeyPrefix ?? "",
50
51
  ...this.props.overrides?.functionProps?.environment,
51
52
  },
52
53
  });
@@ -55,4 +56,4 @@ class NextjsImageFunction extends constructs_1.Construct {
55
56
  }
56
57
  }
57
58
  exports.NextjsImageFunction = NextjsImageFunction;
58
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV4dGpzLWltYWdlLWZ1bmN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL25leHRqcy1jb21wdXRlL25leHRqcy1pbWFnZS1mdW5jdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsNkNBQXVDO0FBRXZDLGlEQUF1RDtBQUN2RCx1REFRZ0M7QUFFaEMsMkNBQXVDO0FBQ3ZDLDRDQUEwQztBQUcxQyxnRUFBa0U7QUEyQmxFOzs7OztHQUtHO0FBQ0gsTUFBYSxtQkFBb0IsU0FBUSxzQkFBUzs7SUFDaEQsUUFBUSxDQUFpQjtJQUN6QixXQUFXLENBQWU7SUFFbEIsS0FBSyxDQUEyQjtJQUV4QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQStCO1FBQ3ZFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDakIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFdEMsSUFBSSxLQUFLLENBQUMsVUFBVSxLQUFLLHNCQUFVLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUNyRCxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FDdkIsSUFBSSwwQkFBZ0IsQ0FBQywwQkFBMEIsQ0FBQyxDQUNqRCxDQUFDO1lBQ0YsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQztnQkFDOUMsUUFBUSxFQUFFLGdDQUFtQixDQUFDLE9BQU87Z0JBQ3JDLFVBQVUsRUFBRSx1QkFBVSxDQUFDLGVBQWU7Z0JBQ3RDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsZ0JBQWdCO2FBQzFDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRU8sY0FBYztRQUNwQixNQUFNLEVBQUUsR0FBRyxJQUFJLHFCQUFjLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRTtZQUN4QyxJQUFJLEVBQUUsaUJBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQywwQkFBMEIsQ0FBQztZQUMzRCxPQUFPLEVBQUUsaUJBQWlCO1lBQzFCLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLE9BQU8sRUFBRSxJQUFJLG9CQUFPLENBQUMsWUFBWSxFQUFFLDBCQUFhLENBQUMsTUFBTSxDQUFDO1lBQ3hELE9BQU8sRUFBRSxzQkFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDN0IsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRztZQUNuQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLGFBQWE7WUFDdEMsc0VBQXNFO1lBQ3RFLHNFQUFzRTtZQUN0RSxtREFBbUQ7WUFDbkQsWUFBWSxFQUFFLElBQUEsd0NBQXFCLEdBQUU7WUFDckMsV0FBVyxFQUFFO2dCQUNYLG9DQUFvQyxFQUNsQyxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLFVBQVU7Z0JBQzFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsYUFBYSxFQUFFLFdBQVc7YUFDcEQ7U0FDRixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUU1QyxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7O0FBOUNILGtEQStDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IER1cmF0aW9uIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBJVnBjIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lYzJcIjtcbmltcG9ydCB7IFNlcnZpY2VQcmluY2lwYWwgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuaW1wb3J0IHtcbiAgQ29kZSxcbiAgRnVuY3Rpb24gYXMgTGFtYmRhRnVuY3Rpb24sXG4gIEZ1bmN0aW9uVXJsLFxuICBGdW5jdGlvblVybEF1dGhUeXBlLFxuICBJbnZva2VNb2RlLFxuICBSdW50aW1lLFxuICBSdW50aW1lRmFtaWx5LFxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiO1xuaW1wb3J0IHsgSUJ1Y2tldCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtczNcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBOZXh0anNUeXBlIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgT3B0aW9uYWxGdW5jdGlvblByb3BzIH0gZnJvbSBcIi4uL2dlbmVyYXRlZC1zdHJ1Y3RzL09wdGlvbmFsRnVuY3Rpb25Qcm9wc1wiO1xuaW1wb3J0IHsgT3B0aW9uYWxGdW5jdGlvblVybFByb3BzIH0gZnJvbSBcIi4uL2dlbmVyYXRlZC1zdHJ1Y3RzL09wdGlvbmFsRnVuY3Rpb25VcmxQcm9wc1wiO1xuaW1wb3J0IHsgZ2V0TGFtYmRhQXJjaGl0ZWN0dXJlIH0gZnJvbSBcIi4uL3V0aWxzL2dldC1hcmNoaXRlY3R1cmVcIjtcblxuZXhwb3J0IGludGVyZmFjZSBOZXh0anNJbWFnZUZ1bmN0aW9uT3ZlcnJpZGVzIHtcbiAgcmVhZG9ubHkgZnVuY3Rpb25Qcm9wcz86IE9wdGlvbmFsRnVuY3Rpb25Qcm9wcztcbiAgcmVhZG9ubHkgZnVuY3Rpb25VcmxQcm9wcz86IE9wdGlvbmFsRnVuY3Rpb25VcmxQcm9wcztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOZXh0anNJbWFnZUZ1bmN0aW9uUHJvcHMge1xuICByZWFkb25seSBuZXh0anNUeXBlOiBOZXh0anNUeXBlO1xuICAvKipcbiAgICogQWJzb2x1dGUgcGF0aCB0byB0aGUgYXNzZXQgcHJlcGFyZWQgYnkgYE5leHRqc0J1aWxkYDogYnVuZGxlZCBoYW5kbGVyLFxuICAgKiBnbGliYyBgc2hhcnBgIGJpbmFyaWVzLCBhbmQgYHJlcXVpcmVkLXNlcnZlci1maWxlcy5qc29uYC5cbiAgICogQHNlZSB7QGxpbmsgTmV4dGpzQnVpbGQuaW1hZ2VPcHRpbWl6YXRpb25Bc3NldFBhdGh9XG4gICAqL1xuICByZWFkb25seSBpbWFnZU9wdGltaXphdGlvbkFzc2V0UGF0aDogc3RyaW5nO1xuICAvKipcbiAgICogUzMgYnVja2V0IGNvbnRhaW5pbmcgc3RhdGljIGFzc2V0cywgcmVhZCBieSB0aGUgaGFuZGxlciB0byBzZXJ2ZVxuICAgKiBub24tYWJzb2x1dGUgaW1hZ2UgVVJMcy5cbiAgICovXG4gIHJlYWRvbmx5IHN0YXRpY0Fzc2V0c0J1Y2tldDogSUJ1Y2tldDtcbiAgcmVhZG9ubHkgdnBjPzogSVZwYztcbiAgLyoqXG4gICAqIE92ZXJyaWRlIHByb3BzIG9mIGFueSBjb25zdHJ1Y3QuXG4gICAqL1xuICByZWFkb25seSBvdmVycmlkZXM/OiBOZXh0anNJbWFnZUZ1bmN0aW9uT3ZlcnJpZGVzO1xufVxuXG4vKipcbiAqIERlZGljYXRlZCBMYW1iZGEgZnVuY3Rpb24gZm9yIE5leHQuanMgaW1hZ2Ugb3B0aW1pemF0aW9uXG4gKiAoYHNyYy9pbWFnZS1vcHRpbWl6YXRpb24vaGFuZGxlci5tdHNgKS4gS2VwdCBzZXBhcmF0ZSBmcm9tIHRoZSBzZXJ2ZXJcbiAqIGZ1bmN0aW9uIHNvIGltYWdlIHJlcXVlc3RzIGdldCBhIGxpZ2h0d2VpZ2h0LCBuYXRpdmVseS1zdHJlYW1pbmcgemlwXG4gKiBMYW1iZGEgaW5zdGVhZCBvZiBwYXlpbmcgdGhlIERvY2tlci9MYW1iZGEgV2ViIEFkYXB0ZXIgY29sZC1zdGFydCBjb3N0LlxuICovXG5leHBvcnQgY2xhc3MgTmV4dGpzSW1hZ2VGdW5jdGlvbiBleHRlbmRzIENvbnN0cnVjdCB7XG4gIGZ1bmN0aW9uOiBMYW1iZGFGdW5jdGlvbjtcbiAgZnVuY3Rpb25Vcmw/OiBGdW5jdGlvblVybDtcblxuICBwcml2YXRlIHByb3BzOiBOZXh0anNJbWFnZUZ1bmN0aW9uUHJvcHM7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IE5leHRqc0ltYWdlRnVuY3Rpb25Qcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgdGhpcy5wcm9wcyA9IHByb3BzO1xuICAgIHRoaXMuZnVuY3Rpb24gPSB0aGlzLmNyZWF0ZUZ1bmN0aW9uKCk7XG5cbiAgICBpZiAocHJvcHMubmV4dGpzVHlwZSA9PT0gTmV4dGpzVHlwZS5HTE9CQUxfRlVOQ1RJT05TKSB7XG4gICAgICB0aGlzLmZ1bmN0aW9uLmdyYW50SW52b2tlKFxuICAgICAgICBuZXcgU2VydmljZVByaW5jaXBhbChcImNsb3VkZnJvbnQuYW1hem9uYXdzLmNvbVwiKSxcbiAgICAgICk7XG4gICAgICB0aGlzLmZ1bmN0aW9uVXJsID0gdGhpcy5mdW5jdGlvbi5hZGRGdW5jdGlvblVybCh7XG4gICAgICAgIGF1dGhUeXBlOiBGdW5jdGlvblVybEF1dGhUeXBlLkFXU19JQU0sXG4gICAgICAgIGludm9rZU1vZGU6IEludm9rZU1vZGUuUkVTUE9OU0VfU1RSRUFNLFxuICAgICAgICAuLi50aGlzLnByb3BzLm92ZXJyaWRlcz8uZnVuY3Rpb25VcmxQcm9wcyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRnVuY3Rpb24oKTogTGFtYmRhRnVuY3Rpb24ge1xuICAgIGNvbnN0IGZuID0gbmV3IExhbWJkYUZ1bmN0aW9uKHRoaXMsIFwiRm5cIiwge1xuICAgICAgY29kZTogQ29kZS5mcm9tQXNzZXQodGhpcy5wcm9wcy5pbWFnZU9wdGltaXphdGlvbkFzc2V0UGF0aCksXG4gICAgICBoYW5kbGVyOiBcImhhbmRsZXIuaGFuZGxlclwiLFxuICAgICAgbWVtb3J5U2l6ZTogMjA0OCxcbiAgICAgIHJ1bnRpbWU6IG5ldyBSdW50aW1lKFwibm9kZWpzMjQueFwiLCBSdW50aW1lRmFtaWx5Lk5PREVKUyksXG4gICAgICB0aW1lb3V0OiBEdXJhdGlvbi5zZWNvbmRzKDMwKSxcbiAgICAgIHZwYzogdGhpcy5wcm9wcy52cGMsXG4gICAgICAuLi50aGlzLnByb3BzLm92ZXJyaWRlcz8uZnVuY3Rpb25Qcm9wcyxcbiAgICAgIC8vIE11c3Qgbm90IGJlIG92ZXJyaWRhYmxlOiBOZXh0anNCdWlsZCBidW5kbGVzIGdsaWJjIGBzaGFycGAgYmluYXJpZXNcbiAgICAgIC8vIG1hdGNoaW5nIHRoZSBzeW50aCBtYWNoaW5lJ3MgYXJjaGl0ZWN0dXJlLCBzbyB0aGUgZGVwbG95ZWQgTGFtYmRhJ3NcbiAgICAgIC8vIGFyY2hpdGVjdHVyZSBtdXN0IGFsd2F5cyBtYXRjaCB3aGF0IHdhcyBidW5kbGVkLlxuICAgICAgYXJjaGl0ZWN0dXJlOiBnZXRMYW1iZGFBcmNoaXRlY3R1cmUoKSxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIENES19ORVhUSlNfU1RBVElDX0FTU0VUU19CVUNLRVRfTkFNRTpcbiAgICAgICAgICB0aGlzLnByb3BzLnN0YXRpY0Fzc2V0c0J1Y2tldC5idWNrZXROYW1lLFxuICAgICAgICAuLi50aGlzLnByb3BzLm92ZXJyaWRlcz8uZnVuY3Rpb25Qcm9wcz8uZW52aXJvbm1lbnQsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgdGhpcy5wcm9wcy5zdGF0aWNBc3NldHNCdWNrZXQuZ3JhbnRSZWFkKGZuKTtcblxuICAgIHJldHVybiBmbjtcbiAgfVxufVxuIl19
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV4dGpzLWltYWdlLWZ1bmN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL25leHRqcy1jb21wdXRlL25leHRqcy1pbWFnZS1mdW5jdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsNkNBQXVDO0FBRXZDLGlEQUF1RDtBQUN2RCx1REFRZ0M7QUFFaEMsMkNBQXVDO0FBQ3ZDLDRDQUEwQztBQUcxQyxnRUFBa0U7QUFxQ2xFOzs7OztHQUtHO0FBQ0gsTUFBYSxtQkFBb0IsU0FBUSxzQkFBUzs7SUFDaEQsUUFBUSxDQUFpQjtJQUN6QixXQUFXLENBQWU7SUFFbEIsS0FBSyxDQUEyQjtJQUV4QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQStCO1FBQ3ZFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDakIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFdEMsSUFBSSxLQUFLLENBQUMsVUFBVSxLQUFLLHNCQUFVLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUNyRCxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FDdkIsSUFBSSwwQkFBZ0IsQ0FBQywwQkFBMEIsQ0FBQyxDQUNqRCxDQUFDO1lBQ0YsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQztnQkFDOUMsUUFBUSxFQUFFLGdDQUFtQixDQUFDLE9BQU87Z0JBQ3JDLFVBQVUsRUFBRSx1QkFBVSxDQUFDLGVBQWU7Z0JBQ3RDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsZ0JBQWdCO2FBQzFDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRU8sY0FBYztRQUNwQixNQUFNLEVBQUUsR0FBRyxJQUFJLHFCQUFjLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRTtZQUN4QyxJQUFJLEVBQUUsaUJBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQywwQkFBMEIsQ0FBQztZQUMzRCxPQUFPLEVBQUUsaUJBQWlCO1lBQzFCLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLE9BQU8sRUFBRSxJQUFJLG9CQUFPLENBQUMsWUFBWSxFQUFFLDBCQUFhLENBQUMsTUFBTSxDQUFDO1lBQ3hELE9BQU8sRUFBRSxzQkFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDN0IsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRztZQUNuQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLGFBQWE7WUFDdEMsc0VBQXNFO1lBQ3RFLHNFQUFzRTtZQUN0RSxtREFBbUQ7WUFDbkQsWUFBWSxFQUFFLElBQUEsd0NBQXFCLEdBQUU7WUFDckMsV0FBVyxFQUFFO2dCQUNYLG9DQUFvQyxFQUNsQyxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLFVBQVU7Z0JBQzFDLG1DQUFtQyxFQUNqQyxJQUFJLENBQUMsS0FBSyxDQUFDLHFCQUFxQixJQUFJLEVBQUU7Z0JBQ3hDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsYUFBYSxFQUFFLFdBQVc7YUFDcEQ7U0FDRixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUU1QyxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7O0FBaERILGtEQWlEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IER1cmF0aW9uIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBJVnBjIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lYzJcIjtcbmltcG9ydCB7IFNlcnZpY2VQcmluY2lwYWwgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuaW1wb3J0IHtcbiAgQ29kZSxcbiAgRnVuY3Rpb24gYXMgTGFtYmRhRnVuY3Rpb24sXG4gIEZ1bmN0aW9uVXJsLFxuICBGdW5jdGlvblVybEF1dGhUeXBlLFxuICBJbnZva2VNb2RlLFxuICBSdW50aW1lLFxuICBSdW50aW1lRmFtaWx5LFxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiO1xuaW1wb3J0IHsgSUJ1Y2tldCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtczNcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBOZXh0anNUeXBlIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgT3B0aW9uYWxGdW5jdGlvblByb3BzIH0gZnJvbSBcIi4uL2dlbmVyYXRlZC1zdHJ1Y3RzL09wdGlvbmFsRnVuY3Rpb25Qcm9wc1wiO1xuaW1wb3J0IHsgT3B0aW9uYWxGdW5jdGlvblVybFByb3BzIH0gZnJvbSBcIi4uL2dlbmVyYXRlZC1zdHJ1Y3RzL09wdGlvbmFsRnVuY3Rpb25VcmxQcm9wc1wiO1xuaW1wb3J0IHsgZ2V0TGFtYmRhQXJjaGl0ZWN0dXJlIH0gZnJvbSBcIi4uL3V0aWxzL2dldC1hcmNoaXRlY3R1cmVcIjtcblxuZXhwb3J0IGludGVyZmFjZSBOZXh0anNJbWFnZUZ1bmN0aW9uT3ZlcnJpZGVzIHtcbiAgcmVhZG9ubHkgZnVuY3Rpb25Qcm9wcz86IE9wdGlvbmFsRnVuY3Rpb25Qcm9wcztcbiAgcmVhZG9ubHkgZnVuY3Rpb25VcmxQcm9wcz86IE9wdGlvbmFsRnVuY3Rpb25VcmxQcm9wcztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOZXh0anNJbWFnZUZ1bmN0aW9uUHJvcHMge1xuICByZWFkb25seSBuZXh0anNUeXBlOiBOZXh0anNUeXBlO1xuICAvKipcbiAgICogQWJzb2x1dGUgcGF0aCB0byB0aGUgYXNzZXQgcHJlcGFyZWQgYnkgYE5leHRqc0J1aWxkYDogYnVuZGxlZCBoYW5kbGVyLFxuICAgKiBnbGliYyBgc2hhcnBgIGJpbmFyaWVzLCBhbmQgYHJlcXVpcmVkLXNlcnZlci1maWxlcy5qc29uYC5cbiAgICogQHNlZSB7QGxpbmsgTmV4dGpzQnVpbGQuaW1hZ2VPcHRpbWl6YXRpb25Bc3NldFBhdGh9XG4gICAqL1xuICByZWFkb25seSBpbWFnZU9wdGltaXphdGlvbkFzc2V0UGF0aDogc3RyaW5nO1xuICAvKipcbiAgICogUzMgYnVja2V0IGNvbnRhaW5pbmcgc3RhdGljIGFzc2V0cywgcmVhZCBieSB0aGUgaGFuZGxlciB0byBzZXJ2ZVxuICAgKiBub24tYWJzb2x1dGUgaW1hZ2UgVVJMcy5cbiAgICovXG4gIHJlYWRvbmx5IHN0YXRpY0Fzc2V0c0J1Y2tldDogSUJ1Y2tldDtcbiAgLyoqXG4gICAqIFMzIGtleSBwcmVmaXggdGhlIHN0YXRpYyBhc3NldHMgd2VyZSB1cGxvYWRlZCB1bmRlciwgaS5lLlxuICAgKiBgTmV4dGpzU3RhdGljQXNzZXRzLmtleVByZWZpeGAsIHdoaWNoIG5hbWVzcGFjZXMgYSBzaGFyZWQgYnVja2V0LlxuICAgKlxuICAgKiBUaHJlYWRlZCB0aHJvdWdoIGV4cGxpY2l0bHkgcmF0aGVyIHRoYW4gcmVhZCBmcm9tIHRoZSBhcHAncyBidW5kbGVkIGNvbmZpZyxcbiAgICogYmVjYXVzZSBpdCdzIGRpc3RpbmN0IGZyb20gdGhlIGFwcCdzIG93biBgYmFzZVBhdGhgICh3aGljaCBuZXh0LWltYWdlLWxvYWRlclxuICAgKiBiYWtlcyBpbnRvIGhyZWZzKSDigJQgdGhlIHR3byBkaXZlcmdlIHdoZW4gdGhlIGFwcCdzIGBiYXNlUGF0aGAgY29tZXMgZnJvbVxuICAgKiBlbHNld2hlcmUsIGUuZy4gYW4gQVBJIEdhdGV3YXkgc3RhZ2UgdW5kZXIgYE5leHRqc1JlZ2lvbmFsRnVuY3Rpb25zYC5cbiAgICovXG4gIHJlYWRvbmx5IHN0YXRpY0Fzc2V0c0tleVByZWZpeD86IHN0cmluZztcbiAgcmVhZG9ubHkgdnBjPzogSVZwYztcbiAgLyoqXG4gICAqIE92ZXJyaWRlIHByb3BzIG9mIGFueSBjb25zdHJ1Y3QuXG4gICAqL1xuICByZWFkb25seSBvdmVycmlkZXM/OiBOZXh0anNJbWFnZUZ1bmN0aW9uT3ZlcnJpZGVzO1xufVxuXG4vKipcbiAqIERlZGljYXRlZCBMYW1iZGEgZnVuY3Rpb24gZm9yIE5leHQuanMgaW1hZ2Ugb3B0aW1pemF0aW9uXG4gKiAoYHNyYy9pbWFnZS1vcHRpbWl6YXRpb24vaGFuZGxlci5tdHNgKS4gS2VwdCBzZXBhcmF0ZSBmcm9tIHRoZSBzZXJ2ZXJcbiAqIGZ1bmN0aW9uIHNvIGltYWdlIHJlcXVlc3RzIGdldCBhIGxpZ2h0d2VpZ2h0LCBuYXRpdmVseS1zdHJlYW1pbmcgemlwXG4gKiBMYW1iZGEgaW5zdGVhZCBvZiBwYXlpbmcgdGhlIERvY2tlci9MYW1iZGEgV2ViIEFkYXB0ZXIgY29sZC1zdGFydCBjb3N0LlxuICovXG5leHBvcnQgY2xhc3MgTmV4dGpzSW1hZ2VGdW5jdGlvbiBleHRlbmRzIENvbnN0cnVjdCB7XG4gIGZ1bmN0aW9uOiBMYW1iZGFGdW5jdGlvbjtcbiAgZnVuY3Rpb25Vcmw/OiBGdW5jdGlvblVybDtcblxuICBwcml2YXRlIHByb3BzOiBOZXh0anNJbWFnZUZ1bmN0aW9uUHJvcHM7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IE5leHRqc0ltYWdlRnVuY3Rpb25Qcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgdGhpcy5wcm9wcyA9IHByb3BzO1xuICAgIHRoaXMuZnVuY3Rpb24gPSB0aGlzLmNyZWF0ZUZ1bmN0aW9uKCk7XG5cbiAgICBpZiAocHJvcHMubmV4dGpzVHlwZSA9PT0gTmV4dGpzVHlwZS5HTE9CQUxfRlVOQ1RJT05TKSB7XG4gICAgICB0aGlzLmZ1bmN0aW9uLmdyYW50SW52b2tlKFxuICAgICAgICBuZXcgU2VydmljZVByaW5jaXBhbChcImNsb3VkZnJvbnQuYW1hem9uYXdzLmNvbVwiKSxcbiAgICAgICk7XG4gICAgICB0aGlzLmZ1bmN0aW9uVXJsID0gdGhpcy5mdW5jdGlvbi5hZGRGdW5jdGlvblVybCh7XG4gICAgICAgIGF1dGhUeXBlOiBGdW5jdGlvblVybEF1dGhUeXBlLkFXU19JQU0sXG4gICAgICAgIGludm9rZU1vZGU6IEludm9rZU1vZGUuUkVTUE9OU0VfU1RSRUFNLFxuICAgICAgICAuLi50aGlzLnByb3BzLm92ZXJyaWRlcz8uZnVuY3Rpb25VcmxQcm9wcyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRnVuY3Rpb24oKTogTGFtYmRhRnVuY3Rpb24ge1xuICAgIGNvbnN0IGZuID0gbmV3IExhbWJkYUZ1bmN0aW9uKHRoaXMsIFwiRm5cIiwge1xuICAgICAgY29kZTogQ29kZS5mcm9tQXNzZXQodGhpcy5wcm9wcy5pbWFnZU9wdGltaXphdGlvbkFzc2V0UGF0aCksXG4gICAgICBoYW5kbGVyOiBcImhhbmRsZXIuaGFuZGxlclwiLFxuICAgICAgbWVtb3J5U2l6ZTogMjA0OCxcbiAgICAgIHJ1bnRpbWU6IG5ldyBSdW50aW1lKFwibm9kZWpzMjQueFwiLCBSdW50aW1lRmFtaWx5Lk5PREVKUyksXG4gICAgICB0aW1lb3V0OiBEdXJhdGlvbi5zZWNvbmRzKDMwKSxcbiAgICAgIHZwYzogdGhpcy5wcm9wcy52cGMsXG4gICAgICAuLi50aGlzLnByb3BzLm92ZXJyaWRlcz8uZnVuY3Rpb25Qcm9wcyxcbiAgICAgIC8vIE11c3Qgbm90IGJlIG92ZXJyaWRhYmxlOiBOZXh0anNCdWlsZCBidW5kbGVzIGdsaWJjIGBzaGFycGAgYmluYXJpZXNcbiAgICAgIC8vIG1hdGNoaW5nIHRoZSBzeW50aCBtYWNoaW5lJ3MgYXJjaGl0ZWN0dXJlLCBzbyB0aGUgZGVwbG95ZWQgTGFtYmRhJ3NcbiAgICAgIC8vIGFyY2hpdGVjdHVyZSBtdXN0IGFsd2F5cyBtYXRjaCB3aGF0IHdhcyBidW5kbGVkLlxuICAgICAgYXJjaGl0ZWN0dXJlOiBnZXRMYW1iZGFBcmNoaXRlY3R1cmUoKSxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIENES19ORVhUSlNfU1RBVElDX0FTU0VUU19CVUNLRVRfTkFNRTpcbiAgICAgICAgICB0aGlzLnByb3BzLnN0YXRpY0Fzc2V0c0J1Y2tldC5idWNrZXROYW1lLFxuICAgICAgICBDREtfTkVYVEpTX1NUQVRJQ19BU1NFVFNfS0VZX1BSRUZJWDpcbiAgICAgICAgICB0aGlzLnByb3BzLnN0YXRpY0Fzc2V0c0tleVByZWZpeCA/PyBcIlwiLFxuICAgICAgICAuLi50aGlzLnByb3BzLm92ZXJyaWRlcz8uZnVuY3Rpb25Qcm9wcz8uZW52aXJvbm1lbnQsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgdGhpcy5wcm9wcy5zdGF0aWNBc3NldHNCdWNrZXQuZ3JhbnRSZWFkKGZuKTtcblxuICAgIHJldHVybiBmbjtcbiAgfVxufVxuIl19
@@ -30,6 +30,10 @@ export interface NextjsDistributionProps {
30
30
  * Must be provided if you want to serve static files.
31
31
  */
32
32
  readonly assetsBucket: IBucket;
33
+ /**
34
+ * URI path prefix the app is served at. Surrounding slashes are normalized
35
+ * away, so "/base", "base" and "/base/" all produce the same cache behaviors.
36
+ */
33
37
  readonly basePath?: string;
34
38
  /**
35
39
  * Optional but only applicable for `NextjsType.GLOBAL_CONTAINERS`
@@ -66,6 +70,13 @@ export interface NextjsDistributionProps {
66
70
  export declare class NextjsDistribution extends Construct {
67
71
  distribution: Distribution;
68
72
  private props;
73
+ /**
74
+ * `props.basePath` normalized to a bare path segment. This construct is the
75
+ * one place that needs it with a leading slash — CloudFront path patterns are
76
+ * written against the request path — so it prepends its own rather than
77
+ * relying on the caller having passed one.
78
+ */
79
+ private basePath;
69
80
  /**
70
81
  * Common security headers applied by default to all origins
71
82
  * @see https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-managed-response-headers-policies.html#managed-response-headers-policies-security