@fjall/components-infrastructure 0.1.46 → 0.1.48
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.
- package/dist/lib/config/aws/organisationsAccess.js +12 -2
- package/dist/lib/patterns/aws/basicApp.d.ts +0 -47
- package/dist/lib/patterns/aws/basicApp.js +149 -89
- package/dist/lib/patterns/aws/compute.d.ts +2 -0
- package/dist/lib/patterns/aws/compute.js +2 -3
- package/dist/lib/patterns/aws/hostedZone.d.ts +10 -3
- package/dist/lib/patterns/aws/hostedZone.js +32 -12
- package/dist/lib/patterns/aws/index.d.ts +1 -1
- package/dist/lib/patterns/aws/index.js +2 -2
- package/dist/lib/resources/aws/compute/ecs.d.ts +15 -1
- package/dist/lib/resources/aws/compute/ecs.js +26 -13
- package/package.json +3 -24
- package/dist/lib/patterns/aws/ec2.d.ts +0 -43
- package/dist/lib/patterns/aws/ec2.js +0 -123
|
@@ -19,7 +19,17 @@ class ActivateOrganisationsAccess extends constructs_1.Construct {
|
|
|
19
19
|
resourceType: "Custom::ActivateOrganisationsAccess",
|
|
20
20
|
policy: customResources.AwsCustomResourcePolicy.fromStatements([
|
|
21
21
|
new aws_iam_1.PolicyStatement({
|
|
22
|
-
actions: [
|
|
22
|
+
actions: [
|
|
23
|
+
"cloudformation:ActivateOrganizationsAccess",
|
|
24
|
+
"cloudformation:DescribeOrganizationsAccess",
|
|
25
|
+
"organizations:EnableAWSServiceAccess",
|
|
26
|
+
"organizations:DescribeOrganization",
|
|
27
|
+
"organizations:ListRoots",
|
|
28
|
+
"organizations:ListAWSServiceAccessForOrganization",
|
|
29
|
+
"organizations:DisableAWSServiceAccess",
|
|
30
|
+
"iam:CreateServiceLinkedRole",
|
|
31
|
+
"iam:GetRole"
|
|
32
|
+
],
|
|
23
33
|
resources: [
|
|
24
34
|
"*" // TODO: Figure out what access is required here
|
|
25
35
|
],
|
|
@@ -37,4 +47,4 @@ class ActivateOrganisationsAccess extends constructs_1.Construct {
|
|
|
37
47
|
}
|
|
38
48
|
}
|
|
39
49
|
exports.ActivateOrganisationsAccess = ActivateOrganisationsAccess;
|
|
40
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnYW5pc2F0aW9uc0FjY2Vzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9jb25maWcvYXdzL29yZ2FuaXNhdGlvbnNBY2Nlc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsZ0VBQWdFO0FBQ2hFLDJDQUF1QztBQUV2Qyx1RkFBb0Y7QUFDcEYsaURBQThEO0FBUTlELE1BQWEsMkJBQTRCLFNBQVEsc0JBQVM7SUFDeEQsWUFDRSxLQUFnQixFQUNoQixFQUFVLEVBQ1YsS0FBdUM7UUFFdkMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLHFDQUFpQixDQUFDLElBQUksRUFBRSw2QkFBNkIsRUFBRTtZQUN6RCxZQUFZLEVBQUUsNkJBQTZCO1lBQzNDLFFBQVEsRUFBRTtnQkFDUixPQUFPLEVBQUUsZ0JBQWdCO2dCQUN6QixNQUFNLEVBQUUsb0NBQW9DLEVBQUUsMkhBQTJIO2dCQUN6SyxVQUFVLEVBQUUsRUFBRTtnQkFDZCxrQkFBa0IsRUFBRSxlQUFlLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUN2RCw2QkFBNkIsQ0FDOUI7YUFDRjtZQUNELFlBQVksRUFBRSxxQ0FBcUM7WUFDbkQsTUFBTSxFQUFFLGVBQWUsQ0FBQyx1QkFBdUIsQ0FBQyxjQUFjLENBQUM7Z0JBQzdELElBQUkseUJBQWUsQ0FBQztvQkFDbEIsT0FBTyxFQUFFO3dCQUNQLDRDQUE0Qzt3QkFDNUMsNENBQTRDO3dCQUM1QyxzQ0FBc0M7d0JBQ3RDLG9DQUFvQzt3QkFDcEMseUJBQXlCO3dCQUN6QixtREFBbUQ7d0JBQ25ELHVDQUF1Qzt3QkFDdkMsNkJBQTZCO3dCQUM3QixhQUFhO3FCQUNkO29CQUNELFNBQVMsRUFBRTt3QkFDVCxHQUFHLENBQUMsZ0RBQWdEO3FCQUNyRDtvQkFDRCxNQUFNLEVBQUUsZ0JBQU0sQ0FBQyxLQUFLO2lCQUNyQixDQUFDO2dCQUNGLElBQUkseUJBQWUsQ0FBQztvQkFDbEIsT0FBTyxFQUFFLENBQUMsNENBQTRDLENBQUM7b0JBQ3ZELFNBQVMsRUFBRTt3QkFDVCwwQkFBMEIsS0FBSyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxhQUFhO3FCQUNyRTtvQkFDRCxNQUFNLEVBQUUsZ0JBQU0sQ0FBQyxLQUFLO2lCQUNyQixDQUFDO2FBQ0gsQ0FBQztTQUNILENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQS9DRCxrRUErQ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjdXN0b21SZXNvdXJjZXMgZnJvbSBcImF3cy1jZGstbGliL2N1c3RvbS1yZXNvdXJjZXNcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5cbmltcG9ydCB7IEF3c0N1c3RvbVJlc291cmNlIH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3MvdXRpbGl0aWVzL2F3c0N1c3RvbVJlc291cmNlXCI7XG5pbXBvcnQgeyBFZmZlY3QsIFBvbGljeVN0YXRlbWVudCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQgeyBTdGFja1Byb3BzIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5cbmludGVyZmFjZSBBY3RpdmF0ZU9yZ2FuaXNhdGlvbnNBY2Nlc3NQcm9wcyBleHRlbmRzIFN0YWNrUHJvcHMge1xuICBhY2NvdW50OiBzdHJpbmc7XG4gIHJlZ2lvbjogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgQWN0aXZhdGVPcmdhbmlzYXRpb25zQWNjZXNzIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgY29uc3RydWN0b3IoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBBY3RpdmF0ZU9yZ2FuaXNhdGlvbnNBY2Nlc3NQcm9wc1xuICApIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgbmV3IEF3c0N1c3RvbVJlc291cmNlKHRoaXMsIFwiYWN0aXZhdGVPcmdhbmlzYXRpb25zQWNjZXNzXCIsIHtcbiAgICAgIGZ1bmN0aW9uTmFtZTogXCJhY3RpdmF0ZU9yZ2FuaXNhdGlvbnNBY2Nlc3NcIixcbiAgICAgIG9uQ3JlYXRlOiB7XG4gICAgICAgIHNlcnZpY2U6IFwiY2xvdWRmb3JtYXRpb25cIixcbiAgICAgICAgYWN0aW9uOiBcIkFjdGl2YXRlT3JnYW5pemF0aW9uc0FjY2Vzc0NvbW1hbmRcIiwgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0phdmFTY3JpcHRTREsvdjMvbGF0ZXN0L2NsaWVudC9jbG91ZGZvcm1hdGlvbi9jb21tYW5kL0FjdGl2YXRlT3JnYW5pemF0aW9uc0FjY2Vzc0NvbW1hbmQvXG4gICAgICAgIHBhcmFtZXRlcnM6IHt9LFxuICAgICAgICBwaHlzaWNhbFJlc291cmNlSWQ6IGN1c3RvbVJlc291cmNlcy5QaHlzaWNhbFJlc291cmNlSWQub2YoXG4gICAgICAgICAgXCJhY3RpdmF0ZU9yZ2FuaXNhdGlvbnNBY2Nlc3NcIlxuICAgICAgICApXG4gICAgICB9LFxuICAgICAgcmVzb3VyY2VUeXBlOiBcIkN1c3RvbTo6QWN0aXZhdGVPcmdhbmlzYXRpb25zQWNjZXNzXCIsXG4gICAgICBwb2xpY3k6IGN1c3RvbVJlc291cmNlcy5Bd3NDdXN0b21SZXNvdXJjZVBvbGljeS5mcm9tU3RhdGVtZW50cyhbXG4gICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgIFwiY2xvdWRmb3JtYXRpb246QWN0aXZhdGVPcmdhbml6YXRpb25zQWNjZXNzXCIsXG4gICAgICAgICAgICBcImNsb3VkZm9ybWF0aW9uOkRlc2NyaWJlT3JnYW5pemF0aW9uc0FjY2Vzc1wiLFxuICAgICAgICAgICAgXCJvcmdhbml6YXRpb25zOkVuYWJsZUFXU1NlcnZpY2VBY2Nlc3NcIixcbiAgICAgICAgICAgIFwib3JnYW5pemF0aW9uczpEZXNjcmliZU9yZ2FuaXphdGlvblwiLFxuICAgICAgICAgICAgXCJvcmdhbml6YXRpb25zOkxpc3RSb290c1wiLFxuICAgICAgICAgICAgXCJvcmdhbml6YXRpb25zOkxpc3RBV1NTZXJ2aWNlQWNjZXNzRm9yT3JnYW5pemF0aW9uXCIsXG4gICAgICAgICAgICBcIm9yZ2FuaXphdGlvbnM6RGlzYWJsZUFXU1NlcnZpY2VBY2Nlc3NcIixcbiAgICAgICAgICAgIFwiaWFtOkNyZWF0ZVNlcnZpY2VMaW5rZWRSb2xlXCIsXG4gICAgICAgICAgICBcImlhbTpHZXRSb2xlXCJcbiAgICAgICAgICBdLFxuICAgICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgICAgXCIqXCIgLy8gVE9ETzogRmlndXJlIG91dCB3aGF0IGFjY2VzcyBpcyByZXF1aXJlZCBoZXJlXG4gICAgICAgICAgXSxcbiAgICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPV1xuICAgICAgICB9KSxcbiAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgYWN0aW9uczogW1wiY2xvdWRmb3JtYXRpb246QWN0aXZhdGVPcmdhbml6YXRpb25zQWNjZXNzXCJdLFxuICAgICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgICAgYGFybjphd3M6Y2xvdWRmb3JtYXRpb246JHtwcm9wcy5yZWdpb259OiR7cHJvcHMuYWNjb3VudH06c3RhY2tzZXQvKmBcbiAgICAgICAgICBdLFxuICAgICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XXG4gICAgICAgIH0pXG4gICAgICBdKVxuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import { AwsStackProps } from "../../resources/aws/base/awsStack";
|
|
2
|
-
import { ScalingType, Protocol } from "../../resources/aws/compute/ecs";
|
|
3
|
-
import { IManagedPolicy, PolicyDocument } from "aws-cdk-lib/aws-iam";
|
|
4
|
-
import { KeyValue } from "../../types";
|
|
5
|
-
/**
|
|
6
|
-
* Intersected with BasicAppProps in the getProps method. This allows the BasicApp construct
|
|
7
|
-
* to treat these as required properties and avoid constant null checking.
|
|
8
|
-
*/
|
|
9
|
-
export interface BasicAppPropDefaults {
|
|
10
|
-
tags: KeyValue;
|
|
11
|
-
serviceName: string;
|
|
12
|
-
clusterName: string;
|
|
13
|
-
protocol: Protocol;
|
|
14
|
-
scalingType: ScalingType;
|
|
15
|
-
containerPort: number;
|
|
16
|
-
}
|
|
17
|
-
export interface BasicAppProps {
|
|
18
|
-
accountId?: string;
|
|
19
|
-
clusterName?: string;
|
|
20
|
-
containerCommand?: string[];
|
|
21
|
-
containerEnvironment?: KeyValue;
|
|
22
|
-
containerPort?: number;
|
|
23
|
-
containerSecrets?: string[];
|
|
24
|
-
environment: string;
|
|
25
|
-
owner?: string;
|
|
26
|
-
parentDomain?: string;
|
|
27
|
-
listenerPort?: number;
|
|
28
|
-
protocol?: Protocol;
|
|
29
|
-
region?: string;
|
|
30
|
-
scalingType?: ScalingType;
|
|
31
|
-
serviceName?: string;
|
|
32
|
-
taskRoleInlinePolicies?: {
|
|
33
|
-
[name: string]: PolicyDocument;
|
|
34
|
-
};
|
|
35
|
-
taskRoleManagedPolicies?: IManagedPolicy[];
|
|
36
|
-
tags?: KeyValue;
|
|
37
|
-
}
|
|
38
|
-
export declare class BasicApp {
|
|
39
|
-
private vpcStack;
|
|
40
|
-
private databaseStack;
|
|
41
|
-
private secretStack;
|
|
42
|
-
private computeStack;
|
|
43
|
-
constructor(id: string, rawProps: BasicAppProps);
|
|
44
|
-
getStackProps(props: BasicAppProps): AwsStackProps | undefined;
|
|
45
|
-
getProps(id: string, rawProps: BasicAppProps): BasicAppProps & BasicAppPropDefaults;
|
|
46
|
-
}
|
|
47
|
-
export default BasicApp;
|
|
@@ -1,90 +1,150 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzaWNBcHAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvcGF0dGVybnMvYXdzL2Jhc2ljQXBwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGdFQUE0RTtBQUM1RSw0REFBeUQ7QUFDekQseURBSXlDO0FBQ3pDLG9FQUE2RDtBQUM3RCx5REFBcUQ7QUFDckQseURBQWtEO0FBQ2xELDZDQUE4QztBQXdDOUMsTUFBYSxRQUFRO0lBTW5CLFlBQVksRUFBVSxFQUFFLFFBQXVCO1FBQzdDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzFDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFN0MsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLGtCQUFRLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsVUFBVSxDQUFDO2FBQ3pELFVBQVUsQ0FDVCxTQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUU7WUFDcEIsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO1lBQzFCLGNBQWMsRUFBRSxnQkFBRSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEtBQUssRUFBRSxTQUFTLEVBQUUsQ0FBQztZQUMvRCxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07WUFDcEIsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO1NBQ2pCLENBQUMsQ0FDSDthQUNBLG9CQUFvQixDQUFDLGFBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFFL0MsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLGtCQUFRLENBQy9CLEdBQUcsRUFBRSxVQUFVLEVBQ2YsSUFBSSxDQUFDLFFBQVEsRUFDYixVQUFVLENBQ1g7YUFDRSxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFV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QUksWUFBWTtnQkFDdEMsNEJBQTRCLEVBQUUsUUFBUSxDQUFDLEtBQUssSUFBSSxVQUFVO2FBQzNEO1lBQ0QsV0FBVyxFQUFFLGlCQUFXLENBQUMsR0FBRztZQUM1QixRQUFRLEVBQUUsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsY0FBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsY0FBUSxDQUFDLElBQUk7WUFDaEUsYUFBYSxFQUFFLElBQUk7WUFDbkIsV0FBVyxFQUFFLEdBQUcsRUFBRSxTQUFTO1lBQzNCLFdBQVcsRUFBRSxHQUFHLEVBQUUsU0FBUztTQUM1QixDQUFDO1FBRUYsT0FBTztZQUNMLEdBQUcsWUFBWTtZQUNmLEdBQUcsUUFBUTtTQUNaLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUEvR0QsNEJBK0dDO0FBQ0Qsa0JBQWUsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEF3c1N0YWNrLCB7IEF3c1N0YWNrUHJvcHMgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9iYXNlL2F3c1N0YWNrXCI7XG5pbXBvcnQgeyBWcGMgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9uZXR3b3JraW5nL3ZwY1wiO1xuaW1wb3J0IEZhcmdhdGUsIHtcbiAgQ29udGFpbmVyU2VjcmV0LFxuICBTY2FsaW5nVHlwZSxcbiAgUHJvdG9jb2xcbn0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3MvY29tcHV0ZS9lY3NcIjtcbmltcG9ydCBEYXRhYmFzZSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9kYXRhYmFzZS9kYXRhYmFzZVwiO1xuaW1wb3J0IHsgU2VjcmV0IH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3Mvc2VjcmV0c1wiO1xuaW1wb3J0IHsgRWNyIH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3Mvc3RvcmFnZVwiO1xuaW1wb3J0IHsgRm4sIFNlY3JldFZhbHVlIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBJTWFuYWdlZFBvbGljeSwgUG9saWN5RG9jdW1lbnQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuaW1wb3J0IHsgS2V5VmFsdWUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxuLyoqXG4gKiBJbnRlcnNlY3RlZCB3aXRoIEJhc2ljQXBwUHJvcHMgaW4gdGhlIGdldFByb3BzIG1ldGhvZC4gVGhpcyBhbGxvd3MgdGhlIEJhc2ljQXBwIGNvbnN0cnVjdFxuICogdG8gdHJlYXQgdGhlc2UgYXMgcmVxdWlyZWQgcHJvcGVydGllcyBhbmQgYXZvaWQgY29uc3RhbnQgbnVsbCBjaGVja2luZy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCYXNpY0FwcFByb3BEZWZhdWx0cyB7XG4gIHRhZ3M6IEtleVZhbHVlO1xuICBzZXJ2aWNlTmFtZTogc3RyaW5nO1xuICBjbHVzdGVyTmFtZTogc3RyaW5nO1xuICBwcm90b2NvbDogUHJvdG9jb2w7XG4gIHNjYWxpbmdUeXBlOiBTY2FsaW5nVHlwZTtcbiAgY29udGFpbmVyUG9ydDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJhc2ljQXBwUHJvcHMge1xuICBhY2NvdW50SWQ/OiBzdHJpbmc7XG4gIGNsdXN0ZXJOYW1lPzogc3RyaW5nO1xuICBjb250YWluZXJDb21tYW5kPzogc3RyaW5nW107XG4gIGNvbnRhaW5lckVudmlyb25tZW50PzogS2V5VmFsdWU7XG4gIGNvbnRhaW5lclBvcnQ/OiBudW1iZXI7XG4gIGNvbnRhaW5lclNlY3JldHM/OiBzdHJpbmdbXTtcbiAgZW52aXJvbm1lbnQ6IHN0cmluZztcbiAgLy8gVGhlIHRlYW0vZG9tYWluL2J1c2luZXNzLXVuaXQgdGhhdCBpcyByZXNwb25zaWJsZSBmb3IgdGhpcyBzZXJ2aWNlXG4gIG93bmVyPzogc3RyaW5nO1xuICBwYXJlbnREb21haW4/OiBzdHJpbmc7IC8vIEZpeCB0byBtYWtlIGEgZGVwZW5kZW5jeSBvZiBwcm90b2NvbFxuICBsaXN0ZW5lclBvcnQ/OiBudW1iZXI7XG4gIHByb3RvY29sPzogUHJvdG9jb2w7XG4gIHJlZ2lvbj86IHN0cmluZztcbiAgc2NhbGluZ1R5cGU/OiBTY2FsaW5nVHlwZTtcbiAgc2VydmljZU5hbWU/OiBzdHJpbmc7XG4gIHRhc2tSb2xlSW5saW5lUG9saWNpZXM/OiB7XG4gICAgW25hbWU6IHN0cmluZ106IFBvbGljeURvY3VtZW50O1xuICB9O1xuICB0YXNrUm9sZU1hbmFnZWRQb2xpY2llcz86IElNYW5hZ2VkUG9saWN5W107XG4gIHRhZ3M/OiBLZXlWYWx1ZTtcbn1cblxuZXhwb3J0IGNsYXNzIEJhc2ljQXBwIHtcbiAgcHJpdmF0ZSB2cGNTdGFjazogQXdzU3RhY2s7XG4gIHByaXZhdGUgZGF0YWJhc2VTdGFjazogQXdzU3RhY2s7XG4gIHByaXZhdGUgc2VjcmV0U3RhY2s6IEF3c1N0YWNrO1xuICBwcml2YXRlIGNvbXB1dGVTdGFjazogQXdzU3RhY2s7XG5cbiAgY29uc3RydWN0b3IoaWQ6IHN0cmluZywgcmF3UHJvcHM6IEJhc2ljQXBwUHJvcHMpIHtcbiAgICBjb25zdCBwcm9wcyA9IHRoaXMuZ2V0UHJvcHMoaWQsIHJhd1Byb3BzKTtcbiAgICBjb25zdCBzdGFja1Byb3BzID0gdGhpcy5nZXRTdGFja1Byb3BzKHByb3BzKTtcblxuICAgIHRoaXMudnBjU3RhY2sgPSBuZXcgQXdzU3RhY2soYCR7aWR9TmV0d29ya2AsIFtdLCBzdGFja1Byb3BzKVxuICAgICAgLmFkZE5ldHdvcmsoXG4gICAgICAgIFZwYy5idWlsZChgJHtpZH1WcGNgLCB7XG4gICAgICAgICAgYWNjb3VudElkOiBwcm9wcy5hY2NvdW50SWQsXG4gICAgICAgICAgaXB2NElwYW1Qb29sSWQ6IEZuLmltcG9ydFZhbHVlKGBJcGFtUG9vbElkJHtwcm9wcz8uYWNjb3VudElkfWApLFxuICAgICAgICAgIHJlZ2lvbjogcHJvcHMucmVnaW9uLFxuICAgICAgICAgIHRhZ3M6IHByb3BzLnRhZ3NcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5hZGRDb250YWluZXJSZWdpc3RyeShFY3IuYnVpbGQoYCR7aWR9RWNyYCkpO1xuXG4gICAgdGhpcy5kYXRhYmFzZVN0YWNrID0gbmV3IEF3c1N0YWNrKFxuICAgICAgYCR7aWR9RGF0YWJhc2VgLFxuICAgICAgdGhpcy52cGNTdGFjayxcbiAgICAgIHN0YWNrUHJvcHNcbiAgICApXG4gICAgICAuYWRkTmV0d29yayh0aGlzLnZwY1N0YWNrLmdldE5ldHdvcmsoKSlcbiAgICAgIC5hZGRSZXNvdXJjZShEYXRhYmFzZS5idWlsZChgJHtpZH1EYXRhYmFzZWApKTtcblxuICAgIC8vVE9ETzogdmFsaWRhdGUgaWQgZG9lcyBub3QgY29udGFpbiBzcGVjaWFsIGNoYXJhY3RlcnMgKG5vIGh5cGhlbnMgLSBubyBzbGFzaGVzIGV0YykgZGF0YWJhc2UgaW5zdGFuY2VzIHdvbid0IGFsbG93IGl0XG5cbiAgICBjb25zdCBkYlJlc291cmNlID0gdGhpcy5kYXRhYmFzZVN0YWNrLmdldFJlc291cmNlKFxuICAgICAgYCR7aWR9RGF0YWJhc2VgXG4gICAgKSBhcyBEYXRhYmFzZTtcblxuICAgIGNvbnN0IHNlY3JldE9iamVjdFZhbHVlOiBDb250YWluZXJTZWNyZXQgPSB7fTtcbiAgICBpZiAocHJvcHMuY29udGFpbmVyU2VjcmV0cykge1xuICAgICAgZm9yIChjb25zdCBzZWNyZXRPYmplY3Qgb2YgcHJvcHMuY29udGFpbmVyU2VjcmV0cykge1xuICAgICAgICBzZWNyZXRPYmplY3RWYWx1ZVtzZWNyZXRPYmplY3RdID0gU2VjcmV0VmFsdWUudW5zYWZlUGxhaW5UZXh0KFwiXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuc2VjcmV0U3RhY2sgPSBuZXcgQXdzU3RhY2soYCR7aWR9U2VjcmV0YCwgW10sIHN0YWNrUHJvcHMpLmFkZFJlc291cmNlKFxuICAgICAgU2VjcmV0LmJ1aWxkKGAke2lkfVNlY3JldGAsIHtcbiAgICAgICAgc2VjcmV0TmFtZTogYC8ke3Byb3BzLmNsdXN0ZXJOYW1lfS8ke3Byb3BzLnNlcnZpY2VOYW1lfWAsXG4gICAgICAgIHNlY3JldE9iamVjdFZhbHVlOiBzZWNyZXRPYmplY3RWYWx1ZSxcbiAgICAgICAgdGFnczogcHJvcHMudGFnc1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5jb21wdXRlU3RhY2sgPSBuZXcgQXdzU3RhY2soXG4gICAgICBgJHtpZH1Db21wdXRlYCxcbiAgICAgIFt0aGlzLnZwY1N0YWNrLCB0aGlzLmRhdGFiYXNlU3RhY2ssIHRoaXMuc2VjcmV0U3RhY2tdLFxuICAgICAgc3RhY2tQcm9wc1xuICAgIClcbiAgICAgIC5hZGROZXR3b3JrKHRoaXMudnBjU3RhY2suZ2V0TmV0d29yaygpKVxuICAgICAgLmFkZFJlc291cmNlKFxuICAgICAgICBGYXJnYXRlLmJ1aWxkKGAke2lkfUZhcmdhdGVgLCB7XG4gICAgICAgICAgY2x1c3Rlck5hbWU6IHByb3BzLmNsdXN0ZXJOYW1lLFxuICAgICAgICAgIHByb3RvY29sOiBwcm9wcy5wcm90b2NvbCxcbiAgICAgICAgICAvL1RPRE86IFRoaXMgc2hvdWxkIHdvcmsgdmlhIGxpbmUgMTI2LCBidXQgZG9lc24ndCB3b3JrIChhdCBsZWFzdCBvbiB1cGRhdGUpXG4gICAgICAgICAgZGF0YWJhc2VDb25uZWN0aW9uOiBkYlJlc291cmNlLmNvbm5lY3Rpb25zLFxuICAgICAgICAgIGNvbnRhaW5lckNvbW1hbmQ6IHByb3BzLmNvbnRhaW5lckNvbW1hbmQsXG4gICAgICAgICAgY29udGFpbmVyRW52aXJvbm1lbnQ6IHByb3BzLmNvbnRhaW5lckVudmlyb25tZW50LFxuICAgICAgICAgIGNvbnRhaW5lclBvcnQ6IHByb3BzLmNvbnRhaW5lclBvcnQsXG4gICAgICAgICAgY29udGFpbmVyU2VjcmV0czogc2VjcmV0T2JqZWN0VmFsdWUsXG4gICAgICAgICAgZWNyUmVwb3NpdG9yeTogdGhpcy52cGNTdGFjay5nZXRDb250YWluZXJSZWdpc3RyeSgpLFxuICAgICAgICAgIHBhcmVudERvbWFpbjogcHJvcHMucGFyZW50RG9tYWluPy50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgIGxpc3RlbmVyUG9ydDogcHJvcHMubGlzdGVuZXJQb3J0LFxuICAgICAgICAgIHNjYWxpbmdUeXBlOiBwcm9wcy5zY2FsaW5nVHlwZSxcbiAgICAgICAgICBzZXJ2aWNlTmFtZTogcHJvcHMuc2VydmljZU5hbWUsXG4gICAgICAgICAgdGFza1JvbGVJbmxpbmVQb2xpY2llczogcHJvcHMudGFza1JvbGVJbmxpbmVQb2xpY2llcyxcbiAgICAgICAgICB0YXNrUm9sZU1hbmFnZWRQb2xpY2llczogcHJvcHMudGFza1JvbGVNYW5hZ2VkUG9saWNpZXMsXG4gICAgICAgICAgdGFnczogcHJvcHMudGFnc1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLmNvbm5lY3QoYCR7aWR9RmFyZ2F0ZWAsIGAke2lkfURhdGFiYXNlYCwgNTQzMik7XG4gIH1cblxuICBnZXRTdGFja1Byb3BzKHByb3BzOiBCYXNpY0FwcFByb3BzKTogQXdzU3RhY2tQcm9wcyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCFwcm9wcykgcmV0dXJuO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGFjY291bnRJZDogcHJvcHMuYWNjb3VudElkLFxuICAgICAgcmVnaW9uOiBwcm9wcy5yZWdpb25cbiAgICB9O1xuICB9XG5cbiAgZ2V0UHJvcHMoXG4gICAgaWQ6IHN0cmluZyxcbiAgICByYXdQcm9wczogQmFzaWNBcHBQcm9wc1xuICApOiBCYXNpY0FwcFByb3BzICYgQmFzaWNBcHBQcm9wRGVmYXVsdHMge1xuICAgIGNvbnN0IGRlZmF1bHRQcm9wcyA9IHtcbiAgICAgIHRhZ3M6IHtcbiAgICAgICAgXCJmamFsbDpjb3N0QWxsb2NhdGlvbjpzZXJ2aWNlXCI6IFwiYXBwXCIsXG4gICAgICAgIFwiZmphbGw6Y29zdEFsbG9jYXRpb246ZW52aXJvbm1lbnRcIjpcbiAgICAgICAgICByYXdQcm9wcy5lbnZpcm9ubWVudCB8fCBcInByb2R1Y3Rpb25cIixcbiAgICAgICAgXCJmamFsbDpjb3N0QWxsb2NhdGlvbjpvd25lclwiOiByYXdQcm9wcy5vd25lciB8fCBcImVuZ2luZWVyXCJcbiAgICAgIH0sXG4gICAgICBzY2FsaW5nVHlwZTogU2NhbGluZ1R5cGUuQ1BVLFxuICAgICAgcHJvdG9jb2w6IHJhd1Byb3BzLnBhcmVudERvbWFpbiA/IFByb3RvY29sLkhUVFBTIDogUHJvdG9jb2wuSFRUUCxcbiAgICAgIGNvbnRhaW5lclBvcnQ6IDMwMDAsXG4gICAgICBzZXJ2aWNlTmFtZTogYCR7aWR9U2VydmljZWAsXG4gICAgICBjbHVzdGVyTmFtZTogYCR7aWR9Q2x1c3RlcmBcbiAgICB9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmRlZmF1bHRQcm9wcyxcbiAgICAgIC4uLnJhd1Byb3BzXG4gICAgfTtcbiAgfVxufVxuZXhwb3J0IGRlZmF1bHQgQmFzaWNBcHA7XG4iXX0=
|
|
2
|
+
// import AwsStack, { AwsStackProps } from "../../resources/aws/base/awsStack";
|
|
3
|
+
// import { Vpc } from "../../resources/aws/networking/vpc";
|
|
4
|
+
// import Fargate, {
|
|
5
|
+
// ContainerSecret,
|
|
6
|
+
// ScalingType,
|
|
7
|
+
// Protocol
|
|
8
|
+
// } from "../../resources/aws/compute/ecs";
|
|
9
|
+
// import Database from "../../resources/aws/database/database";
|
|
10
|
+
// import { Secret } from "../../resources/aws/secrets";
|
|
11
|
+
// import { Ecr } from "../../resources/aws/storage";
|
|
12
|
+
// import { Fn, SecretValue } from "aws-cdk-lib";
|
|
13
|
+
// import { IManagedPolicy, PolicyDocument } from "aws-cdk-lib/aws-iam";
|
|
14
|
+
// import { KeyValue } from "../../types";
|
|
15
|
+
// /**
|
|
16
|
+
// * Intersected with BasicAppProps in the getProps method. This allows the BasicApp construct
|
|
17
|
+
// * to treat these as required properties and avoid constant null checking.
|
|
18
|
+
// */
|
|
19
|
+
// export interface BasicAppPropDefaults {
|
|
20
|
+
// tags: KeyValue;
|
|
21
|
+
// serviceName: string;
|
|
22
|
+
// clusterName: string;
|
|
23
|
+
// protocol: Protocol;
|
|
24
|
+
// scalingType: ScalingType;
|
|
25
|
+
// containerPort: number;
|
|
26
|
+
// }
|
|
27
|
+
// export interface BasicAppProps {
|
|
28
|
+
// accountId?: string;
|
|
29
|
+
// clusterName?: string;
|
|
30
|
+
// containerCommand?: string[];
|
|
31
|
+
// containerEnvironment?: KeyValue;
|
|
32
|
+
// containerPort?: number;
|
|
33
|
+
// containerSecrets?: string[];
|
|
34
|
+
// environment: string;
|
|
35
|
+
// // The team/domain/business-unit that is responsible for this service
|
|
36
|
+
// owner?: string;
|
|
37
|
+
// parentDomain?: string; // Fix to make a dependency of protocol
|
|
38
|
+
// listenerPort?: number;
|
|
39
|
+
// protocol?: Protocol;
|
|
40
|
+
// region?: string;
|
|
41
|
+
// scalingType?: ScalingType;
|
|
42
|
+
// serviceName?: string;
|
|
43
|
+
// taskRoleInlinePolicies?: {
|
|
44
|
+
// [name: string]: PolicyDocument;
|
|
45
|
+
// };
|
|
46
|
+
// taskRoleManagedPolicies?: IManagedPolicy[];
|
|
47
|
+
// tags?: KeyValue;
|
|
48
|
+
// }
|
|
49
|
+
// export class BasicApp {
|
|
50
|
+
// private vpcStack: AwsStack;
|
|
51
|
+
// private databaseStack: AwsStack;
|
|
52
|
+
// private secretStack: AwsStack;
|
|
53
|
+
// private computeStack: AwsStack;
|
|
54
|
+
// constructor(id: string, rawProps: BasicAppProps) {
|
|
55
|
+
// const props = this.getProps(id, rawProps);
|
|
56
|
+
// const stackProps = this.getStackProps(props);
|
|
57
|
+
// this.vpcStack = new AwsStack(`${id}Network`, [], stackProps)
|
|
58
|
+
// .addNetwork(
|
|
59
|
+
// Vpc.build(`${id}Vpc`, {
|
|
60
|
+
// accountId: props.accountId,
|
|
61
|
+
// ipv4IpamPoolId: Fn.importValue(`IpamPoolId${props?.accountId}`),
|
|
62
|
+
// region: props.region,
|
|
63
|
+
// tags: props.tags
|
|
64
|
+
// })
|
|
65
|
+
// )
|
|
66
|
+
// .addContainerRegistry(Ecr.build(`${id}Ecr`));
|
|
67
|
+
// this.databaseStack = new AwsStack(
|
|
68
|
+
// `${id}Database`,
|
|
69
|
+
// this.vpcStack,
|
|
70
|
+
// stackProps
|
|
71
|
+
// )
|
|
72
|
+
// .addNetwork(this.vpcStack.getNetwork())
|
|
73
|
+
// .addResource(Database.build(`${id}Database`));
|
|
74
|
+
// //TODO: validate id does not contain special characters (no hyphens - no slashes etc) database instances won't allow it
|
|
75
|
+
// const dbResource = this.databaseStack.getResource(
|
|
76
|
+
// `${id}Database`
|
|
77
|
+
// ) as Database;
|
|
78
|
+
// const secretObjectValue: ContainerSecret = {};
|
|
79
|
+
// if (props.containerSecrets) {
|
|
80
|
+
// for (const secretObject of props.containerSecrets) {
|
|
81
|
+
// secretObjectValue[secretObject] = SecretValue.unsafePlainText("");
|
|
82
|
+
// }
|
|
83
|
+
// }
|
|
84
|
+
// this.secretStack = new AwsStack(`${id}Secret`, [], stackProps).addResource(
|
|
85
|
+
// Secret.build(`${id}Secret`, {
|
|
86
|
+
// secretName: `/${props.clusterName}/${props.serviceName}`,
|
|
87
|
+
// secretObjectValue: secretObjectValue,
|
|
88
|
+
// tags: props.tags
|
|
89
|
+
// })
|
|
90
|
+
// );
|
|
91
|
+
// this.computeStack = new AwsStack(
|
|
92
|
+
// `${id}Compute`,
|
|
93
|
+
// [this.vpcStack, this.databaseStack, this.secretStack],
|
|
94
|
+
// stackProps
|
|
95
|
+
// )
|
|
96
|
+
// .addNetwork(this.vpcStack.getNetwork())
|
|
97
|
+
// .addResource(
|
|
98
|
+
// Fargate.build(`${id}Fargate`, {
|
|
99
|
+
// clusterName: props.clusterName,
|
|
100
|
+
// protocol: props.protocol,
|
|
101
|
+
// //TODO: This should work via line 126, but doesn't work (at least on update)
|
|
102
|
+
// databaseConnection: dbResource.connections,
|
|
103
|
+
// containerCommand: props.containerCommand,
|
|
104
|
+
// containerEnvironment: props.containerEnvironment,
|
|
105
|
+
// containerPort: props.containerPort,
|
|
106
|
+
// containerSecrets: secretObjectValue,
|
|
107
|
+
// ecrRepository: this.vpcStack.getContainerRegistry(),
|
|
108
|
+
// parentDomain: props.parentDomain?.toLowerCase(),
|
|
109
|
+
// listenerPort: props.listenerPort,
|
|
110
|
+
// scalingType: props.scalingType,
|
|
111
|
+
// serviceName: props.serviceName,
|
|
112
|
+
// taskRoleInlinePolicies: props.taskRoleInlinePolicies,
|
|
113
|
+
// taskRoleManagedPolicies: props.taskRoleManagedPolicies,
|
|
114
|
+
// tags: props.tags
|
|
115
|
+
// })
|
|
116
|
+
// )
|
|
117
|
+
// .connect(`${id}Fargate`, `${id}Database`, 5432);
|
|
118
|
+
// }
|
|
119
|
+
// getStackProps(props: BasicAppProps): AwsStackProps | undefined {
|
|
120
|
+
// if (!props) return;
|
|
121
|
+
// return {
|
|
122
|
+
// accountId: props.accountId,
|
|
123
|
+
// region: props.region
|
|
124
|
+
// };
|
|
125
|
+
// }
|
|
126
|
+
// getProps(
|
|
127
|
+
// id: string,
|
|
128
|
+
// rawProps: BasicAppProps
|
|
129
|
+
// ): BasicAppProps & BasicAppPropDefaults {
|
|
130
|
+
// const defaultProps = {
|
|
131
|
+
// tags: {
|
|
132
|
+
// "fjall:costAllocation:service": "app",
|
|
133
|
+
// "fjall:costAllocation:environment":
|
|
134
|
+
// rawProps.environment || "production",
|
|
135
|
+
// "fjall:costAllocation:owner": rawProps.owner || "engineer"
|
|
136
|
+
// },
|
|
137
|
+
// scalingType: ScalingType.CPU,
|
|
138
|
+
// protocol: rawProps.parentDomain ? Protocol.HTTPS : Protocol.HTTP,
|
|
139
|
+
// containerPort: 3000,
|
|
140
|
+
// serviceName: `${id}Service`,
|
|
141
|
+
// clusterName: `${id}Cluster`
|
|
142
|
+
// };
|
|
143
|
+
// return {
|
|
144
|
+
// ...defaultProps,
|
|
145
|
+
// ...rawProps
|
|
146
|
+
// };
|
|
147
|
+
// }
|
|
148
|
+
// }
|
|
149
|
+
// export default BasicApp;
|
|
150
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzaWNBcHAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvcGF0dGVybnMvYXdzL2Jhc2ljQXBwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSwrRUFBK0U7QUFDL0UsNERBQTREO0FBQzVELG9CQUFvQjtBQUNwQixxQkFBcUI7QUFDckIsaUJBQWlCO0FBQ2pCLGFBQWE7QUFDYiw0Q0FBNEM7QUFDNUMsZ0VBQWdFO0FBQ2hFLHdEQUF3RDtBQUN4RCxxREFBcUQ7QUFDckQsaURBQWlEO0FBQ2pELHdFQUF3RTtBQUN4RSwwQ0FBMEM7QUFFMUMsTUFBTTtBQUNOLCtGQUErRjtBQUMvRiw2RUFBNkU7QUFDN0UsTUFBTTtBQUNOLDBDQUEwQztBQUMxQyxvQkFBb0I7QUFDcEIseUJBQXlCO0FBQ3pCLHlCQUF5QjtBQUN6Qix3QkFBd0I7QUFDeEIsOEJBQThCO0FBQzlCLDJCQUEyQjtBQUMzQixJQUFJO0FBRUosbUNBQW1DO0FBQ25DLHdCQUF3QjtBQUN4QiwwQkFBMEI7QUFDMUIsaUNBQWlDO0FBQ2pDLHFDQUFxQztBQUNyQyw0QkFBNEI7QUFDNUIsaUNBQWlDO0FBQ2pDLHlCQUF5QjtBQUN6QiwwRUFBMEU7QUFDMUUsb0JBQW9CO0FBQ3BCLG1FQUFtRTtBQUNuRSwyQkFBMkI7QUFDM0IseUJBQXlCO0FBQ3pCLHFCQUFxQjtBQUNyQiwrQkFBK0I7QUFDL0IsMEJBQTBCO0FBQzFCLCtCQUErQjtBQUMvQixzQ0FBc0M7QUFDdEMsT0FBTztBQUNQLGdEQUFnRDtBQUNoRCxxQkFBcUI7QUFDckIsSUFBSTtBQUVKLDBCQUEwQjtBQUMxQixnQ0FBZ0M7QUFDaEMscUNBQXFDO0FBQ3JDLG1DQUFtQztBQUNuQyxvQ0FBb0M7QUFFcEMsdURBQXVEO0FBQ3ZELGlEQUFpRDtBQUNqRCxvREFBb0Q7QUFFcEQsbUVBQW1FO0FBQ25FLHFCQUFxQjtBQUNyQixrQ0FBa0M7QUFDbEMsd0NBQXdDO0FBQ3hDLDZFQUE2RTtBQUM3RSxrQ0FBa0M7QUFDbEMsNkJBQTZCO0FBQzdCLGFBQWE7QUFDYixVQUFVO0FBQ1Ysc0RBQXNEO0FBRXRELHlDQUF5QztBQUN6Qyx5QkFBeUI7QUFDekIsdUJBQXVCO0FBQ3ZCLG1CQUFtQjtBQUNuQixRQUFRO0FBQ1IsZ0RBQWdEO0FBQ2hELHVEQUF1RDtBQUV2RCw4SEFBOEg7QUFFOUgseURBQXlEO0FBQ3pELHdCQUF3QjtBQUN4QixxQkFBcUI7QUFFckIscURBQXFEO0FBQ3JELG9DQUFvQztBQUNwQyw2REFBNkQ7QUFDN0QsNkVBQTZFO0FBQzdFLFVBQVU7QUFDVixRQUFRO0FBRVIsa0ZBQWtGO0FBQ2xGLHNDQUFzQztBQUN0QyxvRUFBb0U7QUFDcEUsZ0RBQWdEO0FBQ2hELDJCQUEyQjtBQUMzQixXQUFXO0FBQ1gsU0FBUztBQUVULHdDQUF3QztBQUN4Qyx3QkFBd0I7QUFDeEIsK0RBQStEO0FBQy9ELG1CQUFtQjtBQUNuQixRQUFRO0FBQ1IsZ0RBQWdEO0FBQ2hELHNCQUFzQjtBQUN0QiwwQ0FBMEM7QUFDMUMsNENBQTRDO0FBQzVDLHNDQUFzQztBQUN0Qyx5RkFBeUY7QUFDekYsd0RBQXdEO0FBQ3hELHNEQUFzRDtBQUN0RCw4REFBOEQ7QUFDOUQsZ0RBQWdEO0FBQ2hELGlEQUFpRDtBQUNqRCxpRUFBaUU7QUFDakUsNkRBQTZEO0FBQzdELDhDQUE4QztBQUM5Qyw0Q0FBNEM7QUFDNUMsNENBQTRDO0FBQzVDLGtFQUFrRTtBQUNsRSxvRUFBb0U7QUFDcEUsNkJBQTZCO0FBQzdCLGFBQWE7QUFDYixVQUFVO0FBQ1YseURBQXlEO0FBQ3pELE1BQU07QUFFTixxRUFBcUU7QUFDckUsMEJBQTBCO0FBRTFCLGVBQWU7QUFDZixvQ0FBb0M7QUFDcEMsNkJBQTZCO0FBQzdCLFNBQVM7QUFDVCxNQUFNO0FBRU4sY0FBYztBQUNkLGtCQUFrQjtBQUNsQiw4QkFBOEI7QUFDOUIsOENBQThDO0FBQzlDLDZCQUE2QjtBQUM3QixnQkFBZ0I7QUFDaEIsaURBQWlEO0FBQ2pELDhDQUE4QztBQUM5QyxrREFBa0Q7QUFDbEQscUVBQXFFO0FBQ3JFLFdBQVc7QUFDWCxzQ0FBc0M7QUFDdEMsMEVBQTBFO0FBQzFFLDZCQUE2QjtBQUM3QixxQ0FBcUM7QUFDckMsb0NBQW9DO0FBQ3BDLFNBQVM7QUFFVCxlQUFlO0FBQ2YseUJBQXlCO0FBQ3pCLG9CQUFvQjtBQUNwQixTQUFTO0FBQ1QsTUFBTTtBQUNOLElBQUk7QUFDSiwyQkFBMkIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBpbXBvcnQgQXdzU3RhY2ssIHsgQXdzU3RhY2tQcm9wcyB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL2Jhc2UvYXdzU3RhY2tcIjtcbi8vIGltcG9ydCB7IFZwYyB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL25ldHdvcmtpbmcvdnBjXCI7XG4vLyBpbXBvcnQgRmFyZ2F0ZSwge1xuLy8gICBDb250YWluZXJTZWNyZXQsXG4vLyAgIFNjYWxpbmdUeXBlLFxuLy8gICBQcm90b2NvbFxuLy8gfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9jb21wdXRlL2Vjc1wiO1xuLy8gaW1wb3J0IERhdGFiYXNlIGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL2RhdGFiYXNlL2RhdGFiYXNlXCI7XG4vLyBpbXBvcnQgeyBTZWNyZXQgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9zZWNyZXRzXCI7XG4vLyBpbXBvcnQgeyBFY3IgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9zdG9yYWdlXCI7XG4vLyBpbXBvcnQgeyBGbiwgU2VjcmV0VmFsdWUgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbi8vIGltcG9ydCB7IElNYW5hZ2VkUG9saWN5LCBQb2xpY3lEb2N1bWVudCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG4vLyBpbXBvcnQgeyBLZXlWYWx1ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG4vLyAvKipcbi8vICAqIEludGVyc2VjdGVkIHdpdGggQmFzaWNBcHBQcm9wcyBpbiB0aGUgZ2V0UHJvcHMgbWV0aG9kLiBUaGlzIGFsbG93cyB0aGUgQmFzaWNBcHAgY29uc3RydWN0XG4vLyAgKiB0byB0cmVhdCB0aGVzZSBhcyByZXF1aXJlZCBwcm9wZXJ0aWVzIGFuZCBhdm9pZCBjb25zdGFudCBudWxsIGNoZWNraW5nLlxuLy8gICovXG4vLyBleHBvcnQgaW50ZXJmYWNlIEJhc2ljQXBwUHJvcERlZmF1bHRzIHtcbi8vICAgdGFnczogS2V5VmFsdWU7XG4vLyAgIHNlcnZpY2VOYW1lOiBzdHJpbmc7XG4vLyAgIGNsdXN0ZXJOYW1lOiBzdHJpbmc7XG4vLyAgIHByb3RvY29sOiBQcm90b2NvbDtcbi8vICAgc2NhbGluZ1R5cGU6IFNjYWxpbmdUeXBlO1xuLy8gICBjb250YWluZXJQb3J0OiBudW1iZXI7XG4vLyB9XG5cbi8vIGV4cG9ydCBpbnRlcmZhY2UgQmFzaWNBcHBQcm9wcyB7XG4vLyAgIGFjY291bnRJZD86IHN0cmluZztcbi8vICAgY2x1c3Rlck5hbWU/OiBzdHJpbmc7XG4vLyAgIGNvbnRhaW5lckNvbW1hbmQ/OiBzdHJpbmdbXTtcbi8vICAgY29udGFpbmVyRW52aXJvbm1lbnQ/OiBLZXlWYWx1ZTtcbi8vICAgY29udGFpbmVyUG9ydD86IG51bWJlcjtcbi8vICAgY29udGFpbmVyU2VjcmV0cz86IHN0cmluZ1tdO1xuLy8gICBlbnZpcm9ubWVudDogc3RyaW5nO1xuLy8gICAvLyBUaGUgdGVhbS9kb21haW4vYnVzaW5lc3MtdW5pdCB0aGF0IGlzIHJlc3BvbnNpYmxlIGZvciB0aGlzIHNlcnZpY2Vcbi8vICAgb3duZXI/OiBzdHJpbmc7XG4vLyAgIHBhcmVudERvbWFpbj86IHN0cmluZzsgLy8gRml4IHRvIG1ha2UgYSBkZXBlbmRlbmN5IG9mIHByb3RvY29sXG4vLyAgIGxpc3RlbmVyUG9ydD86IG51bWJlcjtcbi8vICAgcHJvdG9jb2w/OiBQcm90b2NvbDtcbi8vICAgcmVnaW9uPzogc3RyaW5nO1xuLy8gICBzY2FsaW5nVHlwZT86IFNjYWxpbmdUeXBlO1xuLy8gICBzZXJ2aWNlTmFtZT86IHN0cmluZztcbi8vICAgdGFza1JvbGVJbmxpbmVQb2xpY2llcz86IHtcbi8vICAgICBbbmFtZTogc3RyaW5nXTogUG9saWN5RG9jdW1lbnQ7XG4vLyAgIH07XG4vLyAgIHRhc2tSb2xlTWFuYWdlZFBvbGljaWVzPzogSU1hbmFnZWRQb2xpY3lbXTtcbi8vICAgdGFncz86IEtleVZhbHVlO1xuLy8gfVxuXG4vLyBleHBvcnQgY2xhc3MgQmFzaWNBcHAge1xuLy8gICBwcml2YXRlIHZwY1N0YWNrOiBBd3NTdGFjaztcbi8vICAgcHJpdmF0ZSBkYXRhYmFzZVN0YWNrOiBBd3NTdGFjaztcbi8vICAgcHJpdmF0ZSBzZWNyZXRTdGFjazogQXdzU3RhY2s7XG4vLyAgIHByaXZhdGUgY29tcHV0ZVN0YWNrOiBBd3NTdGFjaztcblxuLy8gICBjb25zdHJ1Y3RvcihpZDogc3RyaW5nLCByYXdQcm9wczogQmFzaWNBcHBQcm9wcykge1xuLy8gICAgIGNvbnN0IHByb3BzID0gdGhpcy5nZXRQcm9wcyhpZCwgcmF3UHJvcHMpO1xuLy8gICAgIGNvbnN0IHN0YWNrUHJvcHMgPSB0aGlzLmdldFN0YWNrUHJvcHMocHJvcHMpO1xuXG4vLyAgICAgdGhpcy52cGNTdGFjayA9IG5ldyBBd3NTdGFjayhgJHtpZH1OZXR3b3JrYCwgW10sIHN0YWNrUHJvcHMpXG4vLyAgICAgICAuYWRkTmV0d29yayhcbi8vICAgICAgICAgVnBjLmJ1aWxkKGAke2lkfVZwY2AsIHtcbi8vICAgICAgICAgICBhY2NvdW50SWQ6IHByb3BzLmFjY291bnRJZCxcbi8vICAgICAgICAgICBpcHY0SXBhbVBvb2xJZDogRm4uaW1wb3J0VmFsdWUoYElwYW1Qb29sSWQke3Byb3BzPy5hY2NvdW50SWR9YCksXG4vLyAgICAgICAgICAgcmVnaW9uOiBwcm9wcy5yZWdpb24sXG4vLyAgICAgICAgICAgdGFnczogcHJvcHMudGFnc1xuLy8gICAgICAgICB9KVxuLy8gICAgICAgKVxuLy8gICAgICAgLmFkZENvbnRhaW5lclJlZ2lzdHJ5KEVjci5idWlsZChgJHtpZH1FY3JgKSk7XG5cbi8vICAgICB0aGlzLmRhdGFiYXNlU3RhY2sgPSBuZXcgQXdzU3RhY2soXG4vLyAgICAgICBgJHtpZH1EYXRhYmFzZWAsXG4vLyAgICAgICB0aGlzLnZwY1N0YWNrLFxuLy8gICAgICAgc3RhY2tQcm9wc1xuLy8gICAgIClcbi8vICAgICAgIC5hZGROZXR3b3JrKHRoaXMudnBjU3RhY2suZ2V0TmV0d29yaygpKVxuLy8gICAgICAgLmFkZFJlc291cmNlKERhdGFiYXNlLmJ1aWxkKGAke2lkfURhdGFiYXNlYCkpO1xuXG4vLyAgICAgLy9UT0RPOiB2YWxpZGF0ZSBpZCBkb2VzIG5vdCBjb250YWluIHNwZWNpYWwgY2hhcmFjdGVycyAobm8gaHlwaGVucyAtIG5vIHNsYXNoZXMgZXRjKSBkYXRhYmFzZSBpbnN0YW5jZXMgd29uJ3QgYWxsb3cgaXRcblxuLy8gICAgIGNvbnN0IGRiUmVzb3VyY2UgPSB0aGlzLmRhdGFiYXNlU3RhY2suZ2V0UmVzb3VyY2UoXG4vLyAgICAgICBgJHtpZH1EYXRhYmFzZWBcbi8vICAgICApIGFzIERhdGFiYXNlO1xuXG4vLyAgICAgY29uc3Qgc2VjcmV0T2JqZWN0VmFsdWU6IENvbnRhaW5lclNlY3JldCA9IHt9O1xuLy8gICAgIGlmIChwcm9wcy5jb250YWluZXJTZWNyZXRzKSB7XG4vLyAgICAgICBmb3IgKGNvbnN0IHNlY3JldE9iamVjdCBvZiBwcm9wcy5jb250YWluZXJTZWNyZXRzKSB7XG4vLyAgICAgICAgIHNlY3JldE9iamVjdFZhbHVlW3NlY3JldE9iamVjdF0gPSBTZWNyZXRWYWx1ZS51bnNhZmVQbGFpblRleHQoXCJcIik7XG4vLyAgICAgICB9XG4vLyAgICAgfVxuXG4vLyAgICAgdGhpcy5zZWNyZXRTdGFjayA9IG5ldyBBd3NTdGFjayhgJHtpZH1TZWNyZXRgLCBbXSwgc3RhY2tQcm9wcykuYWRkUmVzb3VyY2UoXG4vLyAgICAgICBTZWNyZXQuYnVpbGQoYCR7aWR9U2VjcmV0YCwge1xuLy8gICAgICAgICBzZWNyZXROYW1lOiBgLyR7cHJvcHMuY2x1c3Rlck5hbWV9LyR7cHJvcHMuc2VydmljZU5hbWV9YCxcbi8vICAgICAgICAgc2VjcmV0T2JqZWN0VmFsdWU6IHNlY3JldE9iamVjdFZhbHVlLFxuLy8gICAgICAgICB0YWdzOiBwcm9wcy50YWdzXG4vLyAgICAgICB9KVxuLy8gICAgICk7XG5cbi8vICAgICB0aGlzLmNvbXB1dGVTdGFjayA9IG5ldyBBd3NTdGFjayhcbi8vICAgICAgIGAke2lkfUNvbXB1dGVgLFxuLy8gICAgICAgW3RoaXMudnBjU3RhY2ssIHRoaXMuZGF0YWJhc2VTdGFjaywgdGhpcy5zZWNyZXRTdGFja10sXG4vLyAgICAgICBzdGFja1Byb3BzXG4vLyAgICAgKVxuLy8gICAgICAgLmFkZE5ldHdvcmsodGhpcy52cGNTdGFjay5nZXROZXR3b3JrKCkpXG4vLyAgICAgICAuYWRkUmVzb3VyY2UoXG4vLyAgICAgICAgIEZhcmdhdGUuYnVpbGQoYCR7aWR9RmFyZ2F0ZWAsIHtcbi8vICAgICAgICAgICBjbHVzdGVyTmFtZTogcHJvcHMuY2x1c3Rlck5hbWUsXG4vLyAgICAgICAgICAgcHJvdG9jb2w6IHByb3BzLnByb3RvY29sLFxuLy8gICAgICAgICAgIC8vVE9ETzogVGhpcyBzaG91bGQgd29yayB2aWEgbGluZSAxMjYsIGJ1dCBkb2Vzbid0IHdvcmsgKGF0IGxlYXN0IG9uIHVwZGF0ZSlcbi8vICAgICAgICAgICBkYXRhYmFzZUNvbm5lY3Rpb246IGRiUmVzb3VyY2UuY29ubmVjdGlvbnMsXG4vLyAgICAgICAgICAgY29udGFpbmVyQ29tbWFuZDogcHJvcHMuY29udGFpbmVyQ29tbWFuZCxcbi8vICAgICAgICAgICBjb250YWluZXJFbnZpcm9ubWVudDogcHJvcHMuY29udGFpbmVyRW52aXJvbm1lbnQsXG4vLyAgICAgICAgICAgY29udGFpbmVyUG9ydDogcHJvcHMuY29udGFpbmVyUG9ydCxcbi8vICAgICAgICAgICBjb250YWluZXJTZWNyZXRzOiBzZWNyZXRPYmplY3RWYWx1ZSxcbi8vICAgICAgICAgICBlY3JSZXBvc2l0b3J5OiB0aGlzLnZwY1N0YWNrLmdldENvbnRhaW5lclJlZ2lzdHJ5KCksXG4vLyAgICAgICAgICAgcGFyZW50RG9tYWluOiBwcm9wcy5wYXJlbnREb21haW4/LnRvTG93ZXJDYXNlKCksXG4vLyAgICAgICAgICAgbGlzdGVuZXJQb3J0OiBwcm9wcy5saXN0ZW5lclBvcnQsXG4vLyAgICAgICAgICAgc2NhbGluZ1R5cGU6IHByb3BzLnNjYWxpbmdUeXBlLFxuLy8gICAgICAgICAgIHNlcnZpY2VOYW1lOiBwcm9wcy5zZXJ2aWNlTmFtZSxcbi8vICAgICAgICAgICB0YXNrUm9sZUlubGluZVBvbGljaWVzOiBwcm9wcy50YXNrUm9sZUlubGluZVBvbGljaWVzLFxuLy8gICAgICAgICAgIHRhc2tSb2xlTWFuYWdlZFBvbGljaWVzOiBwcm9wcy50YXNrUm9sZU1hbmFnZWRQb2xpY2llcyxcbi8vICAgICAgICAgICB0YWdzOiBwcm9wcy50YWdzXG4vLyAgICAgICAgIH0pXG4vLyAgICAgICApXG4vLyAgICAgICAuY29ubmVjdChgJHtpZH1GYXJnYXRlYCwgYCR7aWR9RGF0YWJhc2VgLCA1NDMyKTtcbi8vICAgfVxuXG4vLyAgIGdldFN0YWNrUHJvcHMocHJvcHM6IEJhc2ljQXBwUHJvcHMpOiBBd3NTdGFja1Byb3BzIHwgdW5kZWZpbmVkIHtcbi8vICAgICBpZiAoIXByb3BzKSByZXR1cm47XG5cbi8vICAgICByZXR1cm4ge1xuLy8gICAgICAgYWNjb3VudElkOiBwcm9wcy5hY2NvdW50SWQsXG4vLyAgICAgICByZWdpb246IHByb3BzLnJlZ2lvblxuLy8gICAgIH07XG4vLyAgIH1cblxuLy8gICBnZXRQcm9wcyhcbi8vICAgICBpZDogc3RyaW5nLFxuLy8gICAgIHJhd1Byb3BzOiBCYXNpY0FwcFByb3BzXG4vLyAgICk6IEJhc2ljQXBwUHJvcHMgJiBCYXNpY0FwcFByb3BEZWZhdWx0cyB7XG4vLyAgICAgY29uc3QgZGVmYXVsdFByb3BzID0ge1xuLy8gICAgICAgdGFnczoge1xuLy8gICAgICAgICBcImZqYWxsOmNvc3RBbGxvY2F0aW9uOnNlcnZpY2VcIjogXCJhcHBcIixcbi8vICAgICAgICAgXCJmamFsbDpjb3N0QWxsb2NhdGlvbjplbnZpcm9ubWVudFwiOlxuLy8gICAgICAgICAgIHJhd1Byb3BzLmVudmlyb25tZW50IHx8IFwicHJvZHVjdGlvblwiLFxuLy8gICAgICAgICBcImZqYWxsOmNvc3RBbGxvY2F0aW9uOm93bmVyXCI6IHJhd1Byb3BzLm93bmVyIHx8IFwiZW5naW5lZXJcIlxuLy8gICAgICAgfSxcbi8vICAgICAgIHNjYWxpbmdUeXBlOiBTY2FsaW5nVHlwZS5DUFUsXG4vLyAgICAgICBwcm90b2NvbDogcmF3UHJvcHMucGFyZW50RG9tYWluID8gUHJvdG9jb2wuSFRUUFMgOiBQcm90b2NvbC5IVFRQLFxuLy8gICAgICAgY29udGFpbmVyUG9ydDogMzAwMCxcbi8vICAgICAgIHNlcnZpY2VOYW1lOiBgJHtpZH1TZXJ2aWNlYCxcbi8vICAgICAgIGNsdXN0ZXJOYW1lOiBgJHtpZH1DbHVzdGVyYFxuLy8gICAgIH07XG5cbi8vICAgICByZXR1cm4ge1xuLy8gICAgICAgLi4uZGVmYXVsdFByb3BzLFxuLy8gICAgICAgLi4ucmF3UHJvcHNcbi8vICAgICB9O1xuLy8gICB9XG4vLyB9XG4vLyBleHBvcnQgZGVmYXVsdCBCYXNpY0FwcDtcbiJdfQ==
|
|
@@ -3,11 +3,13 @@ import { Repository } from "aws-cdk-lib/aws-ecr";
|
|
|
3
3
|
import { Connections, IConnectable, IVpc } from "aws-cdk-lib/aws-ec2";
|
|
4
4
|
import { Construct } from "constructs";
|
|
5
5
|
import App from "../../app";
|
|
6
|
+
import { DomainConfig } from "../../resources/aws/compute/ecs";
|
|
6
7
|
import { SecretImport } from "../../resources/aws/secrets";
|
|
7
8
|
interface IComputeProps {
|
|
8
9
|
vpc?: IVpc;
|
|
9
10
|
ecrRepository?: Repository | RepositoryImage;
|
|
10
11
|
parentDomain?: string;
|
|
12
|
+
domainConfig?: DomainConfig;
|
|
11
13
|
/**
|
|
12
14
|
* Port the container listens on (default: 80)
|
|
13
15
|
*/
|
|
@@ -34,8 +34,7 @@ class Compute extends constructs_1.Construct {
|
|
|
34
34
|
},
|
|
35
35
|
...{
|
|
36
36
|
scalingType: ecs_1.ScalingType.CPU,
|
|
37
|
-
|
|
38
|
-
protocol: props.parentDomain ? ecs_1.Protocol.HTTPS : ecs_1.Protocol.HTTP,
|
|
37
|
+
protocol: props.domainConfig ? ecs_1.Protocol.HTTPS : ecs_1.Protocol.HTTP,
|
|
39
38
|
containerPort: props.containerPort || 80,
|
|
40
39
|
serviceName: `${this.id}Service`,
|
|
41
40
|
clusterName: `${this.id}Cluster`
|
|
@@ -51,4 +50,4 @@ class Compute extends constructs_1.Construct {
|
|
|
51
50
|
}
|
|
52
51
|
}
|
|
53
52
|
exports.Compute = Compute;
|
|
54
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcHV0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9wYXR0ZXJucy9hd3MvY29tcHV0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSxpREFNNkI7QUFFN0IsMkNBQXVDO0FBSXZDLHlEQU15QztBQW9DekMsTUFBYSxjQUFjO0lBQ3pCLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBVSxFQUFFLEtBQW9CO1FBQzNDLE9BQU8sQ0FBQyxHQUFRLEVBQUUsS0FBZ0IsRUFBRSxFQUFFO1lBQ3BDLE1BQU0sWUFBWSxHQUFHO2dCQUNuQixHQUFHO29CQUNELEdBQUcsRUFBRSxHQUFHLENBQUMsYUFBYSxFQUFFO29CQUN4QixhQUFhLEVBQUUsR0FBRyxDQUFDLDJCQUEyQixFQUFFO2lCQUNqRDtnQkFDRCxHQUFHLEtBQUs7YUFDVCxDQUFDO1lBRUYsT0FBTyxJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQzlDLENBQUMsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQWRELHdDQWNDO0FBRUQsTUFBYSxPQUFRLFNBQVEsc0JBQVM7SUFTcEMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFvQjtRQUM1RCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2pCLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ2IsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFFbkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQW9CO1FBQzdCLE1BQU0sWUFBWSxHQUFHO1lBQ25CLEdBQUcsS0FBSztZQUNSLEdBQUc7Z0JBQ0QsSUFBSSxFQUFFLEVBQUU7YUFDVDtZQUNELEdBQUc7Z0JBQ0QsV0FBVyxFQUFFLGlCQUFXLENBQUMsR0FBRztnQkFDNUIsUUFBUSxFQUFFLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLGNBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLGNBQVEsQ0FBQyxJQUFJO2dCQUM3RCxhQUFhLEVBQUUsS0FBSyxDQUFDLGFBQWEsSUFBSSxFQUFFO2dCQUN4QyxXQUFXLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxTQUFTO2dCQUNoQyxXQUFXLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxTQUFTO2FBQ2pDO1NBQ3FCLENBQUM7UUFFekIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLGFBQWMsQ0FDL0IsSUFBSSxDQUFDLEtBQUssRUFDVixHQUFHLElBQUksQ0FBQyxFQUFFLFNBQVMsRUFDbkIsWUFBWSxDQUNiLENBQUM7UUFFRixJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN0QixLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDbkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxjQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUN4RCxDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7SUFDOUMsQ0FBQztDQUNGO0FBOUNELDBCQThDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlcG9zaXRvcnlJbWFnZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWNzXCI7XG5pbXBvcnQgeyBSZXBvc2l0b3J5IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lY3JcIjtcbmltcG9ydCB7XG4gIENvbm5lY3Rpb25zLFxuICBJQ29ubmVjdGFibGUsXG4gIElWcGMsXG4gIFBvcnQsXG4gIFN1Ym5ldFR5cGVcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lYzJcIjtcblxuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcblxuaW1wb3J0IEFwcCBmcm9tIFwiLi4vLi4vYXBwXCI7XG5cbmltcG9ydCBGYXJnYXRlQ2x1c3Rlciwge1xuICBDb250YWluZXJTZWNyZXQsXG4gIEZhcmdhdGVDbHVzdGVyUHJvcHMsXG4gIFByb3RvY29sLFxuICBTY2FsaW5nVHlwZSxcbiAgRG9tYWluQ29uZmlnXG59IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL2NvbXB1dGUvZWNzXCI7XG5pbXBvcnQgeyBLZXlWYWx1ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuaW1wb3J0IHsgU2VjcmV0SW1wb3J0IH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3Mvc2VjcmV0c1wiO1xuXG5pbnRlcmZhY2UgSUNvbXB1dGVQcm9wcyB7XG4gIHZwYz86IElWcGM7XG4gIGVjclJlcG9zaXRvcnk/OiBSZXBvc2l0b3J5IHwgUmVwb3NpdG9yeUltYWdlO1xuXG4gIC8vIE92ZXJyaWRhYmxlIHByb3BlcnRpZXMgdG8gY29uZmlndXJlIHRoZSBjcmVhdGVkIGNvbXB1dGUgcmVzb3VyY2VcbiAgcGFyZW50RG9tYWluPzogc3RyaW5nO1xuXG4gIGRvbWFpbkNvbmZpZz86IERvbWFpbkNvbmZpZztcblxuICAvKipcbiAgICogUG9ydCB0aGUgY29udGFpbmVyIGxpc3RlbnMgb24gKGRlZmF1bHQ6IDgwKVxuICAgKi9cbiAgY29udGFpbmVyUG9ydD86IG51bWJlcjtcblxuICAvKipcbiAgICogRW52aXJvbm1uZXQgdmFyaWFibGVzIHRvIHBhc3MgdG8gdGhlIGNvbnRhaW5lclxuICAgKi9cbiAgY29udGFpbmVyRW52aXJvbm1lbnQ/OiB7XG4gICAgW2tleTogc3RyaW5nXTogc3RyaW5nO1xuICB9O1xuXG4gIC8qKlxuICAgKiBTYWZlbHkgaW1wb3J0IHNlY3JldHMgZnJvbSBhbm90aGVyIHJlc291cmNlLFxuICAgKiAgb2JqZWN0IGtleSBpcyB1c2VkIGFzIG5hbWUgd2hlbiBwYXNzaW5nIHRvIGNvbnRhaW5lclxuICAgKi9cbiAgY29udGFpbmVyU2VjcmV0c0ltcG9ydD86IHtcbiAgICBba2V5OiBzdHJpbmddOiBTZWNyZXRJbXBvcnQ7XG4gIH07XG5cbiAgY29ubmVjdGlvbnM/OiBJQ29ubmVjdGFibGVbXTtcbn1cblxuZXhwb3J0IGNsYXNzIENvbXB1dGVGYWN0b3J5IHtcbiAgc3RhdGljIGJ1aWxkKGlkOiBzdHJpbmcsIHByb3BzOiBJQ29tcHV0ZVByb3BzKSB7XG4gICAgcmV0dXJuIChhcHA6IEFwcCwgc2NvcGU6IENvbnN0cnVjdCkgPT4ge1xuICAgICAgY29uc3QgY29tcHV0ZVByb3BzID0ge1xuICAgICAgICAuLi57XG4gICAgICAgICAgdnBjOiBhcHAuZ2V0RGVmYXVsdFZwYygpLFxuICAgICAgICAgIGVjclJlcG9zaXRvcnk6IGFwcC5nZXREZWZhdWx0Q29udGFpbmVyUmVnaXN0cnkoKVxuICAgICAgICB9LFxuICAgICAgICAuLi5wcm9wc1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIG5ldyBDb21wdXRlKHNjb3BlLCBpZCwgY29tcHV0ZVByb3BzKTtcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb21wdXRlIGV4dGVuZHMgQ29uc3RydWN0IGltcGxlbWVudHMgSUNvbm5lY3RhYmxlIHtcbiAgcHVibGljIGlkOiBzdHJpbmc7XG4gIHB1YmxpYyBzY29wZTogQ29uc3RydWN0O1xuICBwdWJsaWMgdnBjOiBJVnBjO1xuXG4gIHB1YmxpYyBjb25uZWN0aW9uczogQ29ubmVjdGlvbnM7XG5cbiAgcHJpdmF0ZSBjb21wdXRlOiBGYXJnYXRlQ2x1c3RlcjtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogSUNvbXB1dGVQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgdGhpcy5pZCA9IGlkO1xuICAgIHRoaXMuc2NvcGUgPSBzY29wZTtcblxuICAgIHRoaXMuYWRkQ29tcHV0ZShwcm9wcyk7XG4gIH1cblxuICBhZGRDb21wdXRlKHByb3BzOiBJQ29tcHV0ZVByb3BzKSB7XG4gICAgY29uc3QgZmFyZ2F0ZVByb3BzID0ge1xuICAgICAgLi4ucHJvcHMsXG4gICAgICAuLi57XG4gICAgICAgIHRhZ3M6IHt9XG4gICAgICB9LFxuICAgICAgLi4ue1xuICAgICAgICBzY2FsaW5nVHlwZTogU2NhbGluZ1R5cGUuQ1BVLFxuICAgICAgICBwcm90b2NvbDogcHJvcHMuZG9tYWluQ29uZmlnID8gUHJvdG9jb2wuSFRUUFMgOiBQcm90b2NvbC5IVFRQLFxuICAgICAgICBjb250YWluZXJQb3J0OiBwcm9wcy5jb250YWluZXJQb3J0IHx8IDgwLFxuICAgICAgICBzZXJ2aWNlTmFtZTogYCR7dGhpcy5pZH1TZXJ2aWNlYCxcbiAgICAgICAgY2x1c3Rlck5hbWU6IGAke3RoaXMuaWR9Q2x1c3RlcmBcbiAgICAgIH1cbiAgICB9IGFzIEZhcmdhdGVDbHVzdGVyUHJvcHM7XG5cbiAgICB0aGlzLmNvbXB1dGUgPSBuZXcgRmFyZ2F0ZUNsdXN0ZXIoXG4gICAgICB0aGlzLnNjb3BlLFxuICAgICAgYCR7dGhpcy5pZH1GYXJnYXRlYCxcbiAgICAgIGZhcmdhdGVQcm9wc1xuICAgICk7XG5cbiAgICBpZiAocHJvcHMuY29ubmVjdGlvbnMpIHtcbiAgICAgIGZvciAodmFyIGNvbm4gb2YgcHJvcHMuY29ubmVjdGlvbnMpIHtcbiAgICAgICAgdGhpcy5jb21wdXRlLmNvbm5lY3Rpb25zLmFsbG93VG8oY29ubiwgUG9ydC5hbGxUY3AoKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5jb25uZWN0aW9ucyA9IHRoaXMuY29tcHV0ZS5jb25uZWN0aW9ucztcbiAgfVxufVxuIl19
|
|
@@ -1,15 +1,22 @@
|
|
|
1
1
|
import { Construct } from "constructs";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { ARecordProps, CnameRecordProps, HostedZone as AWSHostedZone, MxRecordProps, NsRecordProps, TxtRecordProps } from "aws-cdk-lib/aws-route53";
|
|
3
|
+
import { AwsStack } from "../../resources";
|
|
4
4
|
export interface HostedZoneProps {
|
|
5
5
|
zoneName: string;
|
|
6
6
|
hostedZoneId?: string;
|
|
7
7
|
}
|
|
8
|
-
export declare class
|
|
8
|
+
export declare class HostedZoneFactory {
|
|
9
|
+
static import(stack: AwsStack, hostedZoneId: string, zoneName: string): HostedZone;
|
|
10
|
+
}
|
|
11
|
+
export declare class HostedZone extends Construct {
|
|
9
12
|
private hostedZone;
|
|
10
13
|
private hostedZoneId;
|
|
11
14
|
private importedHostedZone;
|
|
15
|
+
private zoneName;
|
|
16
|
+
private scope;
|
|
12
17
|
constructor(scope: Construct, id: string, props: HostedZoneProps);
|
|
18
|
+
getInternalHostedZone(): AWSHostedZone;
|
|
19
|
+
safeZoneName(): string;
|
|
13
20
|
addHostedZone(zoneName: string): void;
|
|
14
21
|
importHostedZone(zoneName: string): void;
|
|
15
22
|
delegateHostedZone(): void;
|
|
@@ -1,27 +1,45 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.HostedZone = void 0;
|
|
3
|
+
exports.HostedZone = exports.HostedZoneFactory = void 0;
|
|
4
|
+
const constructs_1 = require("constructs");
|
|
4
5
|
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
5
6
|
const iam_1 = require("../../resources/aws/iam");
|
|
6
7
|
const aws_iam_1 = require("aws-cdk-lib/aws-iam");
|
|
7
8
|
const aws_route53_1 = require("aws-cdk-lib/aws-route53");
|
|
8
9
|
const tagResource_1 = require("../../utils/tagResource");
|
|
9
|
-
class
|
|
10
|
+
class HostedZoneFactory {
|
|
11
|
+
static import(stack, hostedZoneId, zoneName) {
|
|
12
|
+
return new HostedZone(stack.getStack(), "HostedZone", {
|
|
13
|
+
hostedZoneId: hostedZoneId,
|
|
14
|
+
zoneName: zoneName
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
exports.HostedZoneFactory = HostedZoneFactory;
|
|
19
|
+
class HostedZone extends constructs_1.Construct {
|
|
10
20
|
constructor(scope, id, props) {
|
|
11
21
|
super(scope, id);
|
|
22
|
+
this.scope = scope;
|
|
23
|
+
this.zoneName = props.zoneName;
|
|
12
24
|
// If a hostedZoneId is provided import it, unless create a new hosted zone
|
|
13
25
|
if (!props.hostedZoneId) {
|
|
14
26
|
this.addHostedZone(props.zoneName);
|
|
15
27
|
this.hostedZoneId = this.hostedZone.hostedZoneId;
|
|
28
|
+
this.delegateHostedZone();
|
|
16
29
|
}
|
|
17
30
|
else {
|
|
18
31
|
this.hostedZoneId = props.hostedZoneId;
|
|
32
|
+
this.importHostedZone(props.zoneName);
|
|
19
33
|
}
|
|
20
|
-
|
|
21
|
-
|
|
34
|
+
}
|
|
35
|
+
getInternalHostedZone() {
|
|
36
|
+
return this.hostedZone || this.importedHostedZone;
|
|
37
|
+
}
|
|
38
|
+
safeZoneName() {
|
|
39
|
+
return this.zoneName.split(".").join("");
|
|
22
40
|
}
|
|
23
41
|
addHostedZone(zoneName) {
|
|
24
|
-
this.hostedZone = new aws_route53_1.HostedZone(this,
|
|
42
|
+
this.hostedZone = new aws_route53_1.HostedZone(this, `${this.safeZoneName}HostedZone`, {
|
|
25
43
|
zoneName: zoneName,
|
|
26
44
|
comment: `Hosted Zone for ${zoneName}`
|
|
27
45
|
});
|
|
@@ -32,7 +50,9 @@ class HostedZone extends aws_cdk_lib_1.Stack {
|
|
|
32
50
|
});
|
|
33
51
|
}
|
|
34
52
|
importHostedZone(zoneName) {
|
|
35
|
-
this.importedHostedZone = aws_route53_1.HostedZone.fromHostedZoneAttributes(
|
|
53
|
+
this.importedHostedZone = aws_route53_1.HostedZone.fromHostedZoneAttributes(
|
|
54
|
+
// HostedZone.fromHostedZoneAttributes explicitly must be passed a stack as parent scope
|
|
55
|
+
this.scope, "importedHostedZone", {
|
|
36
56
|
hostedZoneId: this.hostedZoneId,
|
|
37
57
|
zoneName: zoneName
|
|
38
58
|
});
|
|
@@ -41,14 +61,14 @@ class HostedZone extends aws_cdk_lib_1.Stack {
|
|
|
41
61
|
"fjall:costAllocation:service": "hostedZone",
|
|
42
62
|
"fjall:costAllocation:domain": `${zoneName}`
|
|
43
63
|
});
|
|
44
|
-
new aws_cdk_lib_1.CfnOutput(this, `${
|
|
64
|
+
new aws_cdk_lib_1.CfnOutput(this, `${this.safeZoneName()}HostedZoneId`, {
|
|
45
65
|
key: "HostedZoneId",
|
|
46
66
|
value: this.hostedZoneId,
|
|
47
|
-
exportName: `${
|
|
67
|
+
exportName: `${this.safeZoneName()}HostedZoneId`
|
|
48
68
|
});
|
|
49
69
|
}
|
|
50
70
|
delegateHostedZone() {
|
|
51
|
-
const domainName = this.
|
|
71
|
+
const domainName = this.hostedZone.zoneName.split(".", 1);
|
|
52
72
|
const role = new iam_1.Role(this, `${domainName}DelegateHostedZoneRole`, {
|
|
53
73
|
assumedBy: new aws_iam_1.OrganizationPrincipal(aws_cdk_lib_1.Fn.importValue("OrganisationId")),
|
|
54
74
|
roleName: `${domainName}DelegateHostedZoneRole`,
|
|
@@ -66,14 +86,14 @@ class HostedZone extends aws_cdk_lib_1.Stack {
|
|
|
66
86
|
new aws_iam_1.PolicyStatement({
|
|
67
87
|
actions: ["route53:ChangeResourceRecordSets"],
|
|
68
88
|
resources: [
|
|
69
|
-
`arn:aws:route53:::hostedzone/${this.
|
|
89
|
+
`arn:aws:route53:::hostedzone/${this.hostedZone.hostedZoneId}`
|
|
70
90
|
]
|
|
71
91
|
})
|
|
72
92
|
]
|
|
73
93
|
})
|
|
74
94
|
}
|
|
75
95
|
});
|
|
76
|
-
this.
|
|
96
|
+
this.hostedZone.grantDelegation(role);
|
|
77
97
|
new aws_cdk_lib_1.CfnOutput(this, "DelegateHostedZoneRoleArn", {
|
|
78
98
|
key: `${domainName}DelegateHostedZoneRoleArn`,
|
|
79
99
|
value: role.roleArn,
|
|
@@ -123,4 +143,4 @@ class HostedZone extends aws_cdk_lib_1.Stack {
|
|
|
123
143
|
}
|
|
124
144
|
}
|
|
125
145
|
exports.HostedZone = HostedZone;
|
|
126
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9zdGVkWm9uZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9wYXR0ZXJucy9hd3MvaG9zdGVkWm9uZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSw2Q0FBbUQ7QUFDbkQsaURBQStDO0FBQy9DLGlEQUk2QjtBQUM3Qix5REFhaUM7QUFDakMseURBQWtEO0FBTWxELE1BQWEsVUFBVyxTQUFRLG1CQUFLO0lBSW5DLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBc0I7UUFDOUQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQiwyRUFBMkU7UUFDM0UsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNuQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDO1FBQ25ELENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDO1FBQ3pDLENBQUM7UUFFRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCxhQUFhLENBQUMsUUFBZ0I7UUFDNUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLHdCQUFVLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRTtZQUNuRCxRQUFRLEVBQUUsUUFBUTtZQUNsQixPQUFPLEVBQUUsbUJBQW1CLFFBQVEsRUFBRTtTQUN2QyxDQUFDLENBQUM7UUFDSCxJQUFBLHFCQUFXLEVBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUMzQixrQ0FBa0MsRUFBRSxZQUFZO1lBQ2hELDhCQUE4QixFQUFFLFlBQVk7WUFDNUMsNkJBQTZCLEVBQUUsR0FB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Q0FBQyxPQUFPLElBQUksa0JBQWtCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUU7WUFDdkUsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNO1lBQ3BCLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRztTQUNmLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQTNJRCxnQ0EySUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgQ2ZuT3V0cHV0LCBGbiwgU3RhY2sgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IFJvbGUgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9pYW1cIjtcbmltcG9ydCB7XG4gIE9yZ2FuaXphdGlvblByaW5jaXBhbCxcbiAgUG9saWN5RG9jdW1lbnQsXG4gIFBvbGljeVN0YXRlbWVudFxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuaW1wb3J0IHtcbiAgQVJlY29yZCxcbiAgQVJlY29yZFByb3BzLFxuICBDbmFtZVJlY29yZCxcbiAgQ25hbWVSZWNvcmRQcm9wcyxcbiAgSG9zdGVkWm9uZSBhcyBob3N0ZWRab25lLFxuICBJSG9zdGVkWm9uZSxcbiAgTXhSZWNvcmQsXG4gIE14UmVjb3JkUHJvcHMsXG4gIE5zUmVjb3JkLFxuICBOc1JlY29yZFByb3BzLFxuICBUeHRSZWNvcmQsXG4gIFR4dFJlY29yZFByb3BzXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtcm91dGU1M1wiO1xuaW1wb3J0IHRhZ1Jlc291cmNlIGZyb20gXCIuLi8uLi91dGlscy90YWdSZXNvdXJjZVwiO1xuZXhwb3J0IGludGVyZmFjZSBIb3N0ZWRab25lUHJvcHMge1xuICB6b25lTmFtZTogc3RyaW5nO1xuICBob3N0ZWRab25lSWQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBIb3N0ZWRab25lIGV4dGVuZHMgU3RhY2sge1xuICBwcml2YXRlIGhvc3RlZFpvbmU6IGhvc3RlZFpvbmU7XG4gIHByaXZhdGUgaG9zdGVkWm9uZUlkOiBzdHJpbmc7XG4gIHByaXZhdGUgaW1wb3J0ZWRIb3N0ZWRab25lOiBJSG9zdGVkWm9uZTtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEhvc3RlZFpvbmVQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICAvLyBJZiBhIGhvc3RlZFpvbmVJZCBpcyBwcm92aWRlZCBpbXBvcnQgaXQsIHVubGVzcyBjcmVhdGUgYSBuZXcgaG9zdGVkIHpvbmVcbiAgICBpZiAoIXByb3BzLmhvc3RlZFpvbmVJZCkge1xuICAgICAgdGhpcy5hZGRIb3N0ZWRab25lKHByb3BzLnpvbmVOYW1lKTtcbiAgICAgIHRoaXMuaG9zdGVkWm9uZUlkID0gdGhpcy5ob3N0ZWRab25lLmhvc3RlZFpvbmVJZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5ob3N0ZWRab25lSWQgPSBwcm9wcy5ob3N0ZWRab25lSWQ7XG4gICAgfVxuXG4gICAgdGhpcy5pbXBvcnRIb3N0ZWRab25lKHByb3BzLnpvbmVOYW1lKTtcbiAgICB0aGlzLmRlbGVnYXRlSG9zdGVkWm9uZSgpO1xuICB9XG5cbiAgYWRkSG9zdGVkWm9uZSh6b25lTmFtZTogc3RyaW5nKSB7XG4gICAgdGhpcy5ob3N0ZWRab25lID0gbmV3IGhvc3RlZFpvbmUodGhpcywgXCJIb3N0ZWRab25lXCIsIHtcbiAgICAgIHpvbmVOYW1lOiB6b25lTmFtZSxcbiAgICAgIGNvbW1lbnQ6IGBIb3N0ZWQgWm9uZSBmb3IgJHt6b25lTmFtZX1gXG4gICAgfSk7XG4gICAgdGFnUmVzb3VyY2UodGhpcy5ob3N0ZWRab25lLCB7XG4gICAgICBcImZqYWxsOmNvc3RBbGxvY2F0aW9uOmVudmlyb25tZW50XCI6IFwibWFuYWdlbWVudFwiLFxuICAgICAgXCJmamFsbDpjb3N0QWxsb2NhdGlvbjpzZXJ2aWNlXCI6IFwiaG9zdGVkWm9uZVwiLFxuICAgICAgXCJmamFsbDpjb3N0QWxsb2NhdGlvbjpkb21haW5cIjogYCR7em9uZU5hbWV9YFxuICAgIH0pO1xuICB9XG5cbiAgaW1wb3J0SG9zdGVkWm9uZSh6b25lTmFtZTogc3RyaW5nKSB7XG4gICAgdGhpcy5pbXBvcnRlZEhvc3RlZFpvbmUgPSBob3N0ZWRab25lLmZyb21Ib3N0ZWRab25lQXR0cmlidXRlcyhcbiAgICAgIHRoaXMsXG4gICAgICBcImltcG9ydGVkSG9zdGVkWm9uZVwiLFxuICAgICAge1xuICAgICAgICBob3N0ZWRab25lSWQ6IHRoaXMuaG9zdGVkWm9uZUlkLFxuICAgICAgICB6b25lTmFtZTogem9uZU5hbWVcbiAgICAgIH1cbiAgICApO1xuICAgIHRhZ1Jlc291cmNlKHRoaXMuaW1wb3J0ZWRIb3N0ZWRab25lLCB7XG4gICAgICBcImZqYWxsOmNvc3RBbGxvY2F0aW9uOmVudmlyb25tZW50XCI6IFwibWFuYWdlbWVudFwiLFxuICAgICAgXCJmamFsbDpjb3N0QWxsb2NhdGlvbjpzZXJ2aWNlXCI6IFwiaG9zdGVkWm9uZVwiLFxuICAgICAgXCJmamFsbDpjb3N0QWxsb2NhdGlvbjpkb21haW5cIjogYCR7em9uZU5hbWV9YFxuICAgIH0pO1xuXG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCBgJHt6b25lTmFtZS5zcGxpdChcIi5cIikuam9pbihcIlwiKX1Ib3N0ZWRab25lSWRgLCB7XG4gICAgICBrZXk6IFwiSG9zdGVkWm9uZUlkXCIsXG4gICAgICB2YWx1ZTogdGhpcy5ob3N0ZWRab25lSWQsXG4gICAgICBleHBvcnROYW1lOiBgJHt6b25lTmFtZS5zcGxpdChcIi5cIikuam9pbihcIlwiKX1Ib3N0ZWRab25lSWRgXG4gICAgfSk7XG4gIH1cblxuICBkZWxlZ2F0ZUhvc3RlZFpvbmUoKSB7XG4gICAgY29uc3QgZG9tYWluTmFtZSA9IHRoaXMuaW1wb3J0ZWRIb3N0ZWRab25lLnpvbmVOYW1lLnNwbGl0KFwiLlwiLCAxKTtcbiAgICBjb25zdCByb2xlID0gbmV3IFJvbGUodGhpcywgYCR7ZG9tYWluTmFtZX1EZWxlZ2F0ZUhvc3RlZFpvbmVSb2xlYCwge1xuICAgICAgYXNzdW1lZEJ5OiBuZXcgT3JnYW5pemF0aW9uUHJpbmNpcGFsKEZuLmltcG9ydFZhbHVlKFwiT3JnYW5pc2F0aW9uSWRcIikpLFxuICAgICAgcm9sZU5hbWU6IGAke2RvbWFpbk5hbWV9RGVsZWdhdGVIb3N0ZWRab25lUm9sZWAsXG4gICAgICBpbmxpbmVQb2xpY2llczoge1xuICAgICAgICBbXCJsaXN0SG9zdGVkWm9uZXNcIl06IG5ldyBQb2xpY3lEb2N1bWVudCh7XG4gICAgICAgICAgc3RhdGVtZW50czogW1xuICAgICAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgIGFjdGlvbnM6IFtcInJvdXRlNTM6TGlzdEhvc3RlZFpvbmVzQnlOYW1lXCJdLFxuICAgICAgICAgICAgICByZXNvdXJjZXM6IFtcIipcIl1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgXVxuICAgICAgICB9KSxcbiAgICAgICAgW1wiY2hhbmdlUmVzb3VyY2VSZWNvcmRTZXRzXCJdOiBuZXcgUG9saWN5RG9jdW1lbnQoe1xuICAgICAgICAgIHN0YXRlbWVudHM6IFtcbiAgICAgICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgICBhY3Rpb25zOiBbXCJyb3V0ZTUzOkNoYW5nZVJlc291cmNlUmVjb3JkU2V0c1wiXSxcbiAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgICAgICAgYGFybjphd3M6cm91dGU1Mzo6Omhvc3RlZHpvbmUvJHt0aGlzLmltcG9ydGVkSG9zdGVkWm9uZS5ob3N0ZWRab25lSWR9YFxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuaW1wb3J0ZWRIb3N0ZWRab25lLmdyYW50RGVsZWdhdGlvbihyb2xlKTtcblxuICAgIG5ldyBDZm5PdXRwdXQodGhpcywgXCJEZWxlZ2F0ZUhvc3RlZFpvbmVSb2xlQXJuXCIsIHtcbiAgICAgIGtleTogYCR7ZG9tYWluTmFtZX1EZWxlZ2F0ZUhvc3RlZFpvbmVSb2xlQXJuYCxcbiAgICAgIHZhbHVlOiByb2xlLnJvbGVBcm4sXG4gICAgICBleHBvcnROYW1lOiBgJHtkb21haW5OYW1lfURlbGVnYXRlSG9zdGVkWm9uZVJvbGVBcm5gXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYWRkQVJlY29yZChwcm9wczogT21pdDxBUmVjb3JkUHJvcHMsIFwiem9uZVwiPikge1xuICAgIG5ldyBBUmVjb3JkKHRoaXMsIFwiQVJlY29yZFwiLCB7XG4gICAgICB6b25lOiB0aGlzLmltcG9ydGVkSG9zdGVkWm9uZSxcbiAgICAgIHJlY29yZE5hbWU6IHByb3BzLnJlY29yZE5hbWUsXG4gICAgICBjb21tZW50OlxuICAgICAgICBwcm9wcy5jb21tZW50IHx8IGBBIFJlY29yZCBmb3IgJHt0aGlzLmltcG9ydGVkSG9zdGVkWm9uZS56b25lTmFtZX1gLFxuICAgICAgdGFyZ2V0OiBwcm9wcy50YXJnZXQsXG4gICAgICB0dGw6IHByb3BzLnR0bFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFkZENuYW1lKHByb3BzOiBPbWl0PENuYW1lUmVjb3JkUHJvcHMsIFwiem9uZVwiPikge1xuICAgIG5ldyBDbmFtZVJlY29yZCh0aGlzLCBgYCwge1xuICAgICAgZG9tYWluTmFtZTogcHJvcHMuZG9tYWluTmFtZSxcbiAgICAgIHpvbmU6IHRoaXMuaW1wb3J0ZWRIb3N0ZWRab25lLFxuICAgICAgY29tbWVudDpcbiAgICAgICAgcHJvcHMuY29tbWVudCB8fCBgQ05BTUUgUmVjb3JkIGZvciAke3RoaXMuaW1wb3J0ZWRIb3N0ZWRab25lLnpvbmVOYW1lfWAsXG4gICAgICB0dGw6IHByb3BzLnR0bFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFkZE14KHByb3BzOiBPbWl0PE14UmVjb3JkUHJvcHMsIFwiem9uZVwiPikge1xuICAgIG5ldyBNeFJlY29yZCh0aGlzLCBgYCwge1xuICAgICAgem9uZTogdGhpcy5pbXBvcnRlZEhvc3RlZFpvbmUsXG4gICAgICBjb21tZW50OlxuICAgICAgICBwcm9wcy5jb21tZW50IHx8IGBNWCBSZWNvcmQgZm9yICR7dGhpcy5pbXBvcnRlZEhvc3RlZFpvbmUuem9uZU5hbWV9YCxcbiAgICAgIHZhbHVlczogcHJvcHMudmFsdWVzLFxuICAgICAgdHRsOiBwcm9wcy50dGxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhZGROUyhwcm9wczogT21pdDxOc1JlY29yZFByb3BzLCBcInpvbmVcIj4pIHtcbiAgICBuZXcgTnNSZWNvcmQodGhpcywgYGAsIHtcbiAgICAgIHpvbmU6IHRoaXMuaW1wb3J0ZWRIb3N0ZWRab25lLFxuICAgICAgY29tbWVudDpcbiAgICAgICAgcHJvcHMuY29tbWVudCB8fCBgTlMgUmVjb3JkIGZvciAke3RoaXMuaW1wb3J0ZWRIb3N0ZWRab25lLnpvbmVOYW1lfWAsXG4gICAgICB2YWx1ZXM6IHByb3BzLnZhbHVlcyxcbiAgICAgIHR0bDogcHJvcHMudHRsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYWRkVHh0KHByb3BzOiBPbWl0PFR4dFJlY29yZFByb3BzLCBcInpvbmVcIj4pIHtcbiAgICBuZXcgVHh0UmVjb3JkKHRoaXMsIGBgLCB7XG4gICAgICB6b25lOiB0aGlzLmltcG9ydGVkSG9zdGVkWm9uZSxcbiAgICAgIGNvbW1lbnQ6XG4gICAgICAgIHByb3BzLmNvbW1lbnQgfHwgYFRYVCBSZWNvcmQgZm9yICR7dGhpcy5pbXBvcnRlZEhvc3RlZFpvbmUuem9uZU5hbWV9YCxcbiAgICAgIHZhbHVlczogcHJvcHMudmFsdWVzLFxuICAgICAgdHRsOiBwcm9wcy50dGxcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
146
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9zdGVkWm9uZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9wYXR0ZXJucy9hd3MvaG9zdGVkWm9uZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwyQ0FBdUM7QUFDdkMsNkNBQTZEO0FBQzdELGlEQUErQztBQUMvQyxpREFJNkI7QUFDN0IseURBYWlDO0FBQ2pDLHlEQUFrRDtBQVVsRCxNQUFhLGlCQUFpQjtJQUM1QixNQUFNLENBQUMsTUFBTSxDQUFDLEtBQWUsRUFBRSxZQUFvQixFQUFFLFFBQWdCO1FBQ25FLE9BQU8sSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxFQUFFLFlBQVksRUFBRTtZQUNwRCxZQUFZLEVBQUUsWUFBWTtZQUMxQixRQUFRLEVBQUUsUUFBUTtTQUNuQixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFQRCw4Q0FPQztBQUVELE1BQWEsVUFBVyxTQUFRLHNCQUFTO0lBUXZDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBc0I7UUFDOUQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7UUFFL0IsMkVBQTJFO1FBQzNFLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbkMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQztZQUNqRCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUM1QixDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQztZQUN2QyxJQUFJLENBQUMsZ0JBQWdCLENB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QUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07WUFDcEIsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHO1NBQ2YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLEtBQUssQ0FBQyxLQUFrQztRQUM3QyxJQUFJLHNCQUFRLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRTtZQUNyQixJQUFJLEVBQUUsSUFBSSxDQUFDLGtCQUFrQjtZQUM3QixPQUFPLEVBQ0wsS0FBSyxDQUFDLE9BQU8sSUFBSSxpQkFBaUIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRTtZQUN0RSxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07WUFDcEIsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHO1NBQ2YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLE1BQU0sQ0FBQyxLQUFtQztRQUMvQyxJQUFJLHVCQUFTLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRTtZQUN0QixJQUFJLEVBQUUsSUFBSSxDQUFDLGtCQUFrQjtZQUM3QixPQUFPLEVBQ0wsS0FBSyxDQUFDLE9BQU8sSUFBSSxrQkFBa0IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRTtZQUN2RSxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07WUFDcEIsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHO1NBQ2YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBaEtELGdDQWdLQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBDZm5PdXRwdXQsIEZuLCBSZXNvdXJjZSwgU3RhY2sgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IFJvbGUgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9pYW1cIjtcbmltcG9ydCB7XG4gIE9yZ2FuaXphdGlvblByaW5jaXBhbCxcbiAgUG9saWN5RG9jdW1lbnQsXG4gIFBvbGljeVN0YXRlbWVudFxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuaW1wb3J0IHtcbiAgQVJlY29yZCxcbiAgQVJlY29yZFByb3BzLFxuICBDbmFtZVJlY29yZCxcbiAgQ25hbWVSZWNvcmRQcm9wcyxcbiAgSG9zdGVkWm9uZSBhcyBBV1NIb3N0ZWRab25lLFxuICBJSG9zdGVkWm9uZSxcbiAgTXhSZWNvcmQsXG4gIE14UmVjb3JkUHJvcHMsXG4gIE5zUmVjb3JkLFxuICBOc1JlY29yZFByb3BzLFxuICBUeHRSZWNvcmQsXG4gIFR4dFJlY29yZFByb3BzXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtcm91dGU1M1wiO1xuaW1wb3J0IHRhZ1Jlc291cmNlIGZyb20gXCIuLi8uLi91dGlscy90YWdSZXNvdXJjZVwiO1xuXG5pbXBvcnQgQXBwIGZyb20gXCIuLi8uLi9hcHBcIjtcbmltcG9ydCB7IEF3c1N0YWNrIH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEhvc3RlZFpvbmVQcm9wcyB7XG4gIHpvbmVOYW1lOiBzdHJpbmc7XG4gIGhvc3RlZFpvbmVJZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIEhvc3RlZFpvbmVGYWN0b3J5IHtcbiAgc3RhdGljIGltcG9ydChzdGFjazogQXdzU3RhY2ssIGhvc3RlZFpvbmVJZDogc3RyaW5nLCB6b25lTmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBIb3N0ZWRab25lKHN0YWNrLmdldFN0YWNrKCksIFwiSG9zdGVkWm9uZVwiLCB7XG4gICAgICBob3N0ZWRab25lSWQ6IGhvc3RlZFpvbmVJZCxcbiAgICAgIHpvbmVOYW1lOiB6b25lTmFtZVxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBIb3N0ZWRab25lIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHJpdmF0ZSBob3N0ZWRab25lOiBBV1NIb3N0ZWRab25lO1xuICBwcml2YXRlIGhvc3RlZFpvbmVJZDogc3RyaW5nO1xuICBwcml2YXRlIGltcG9ydGVkSG9zdGVkWm9uZTogSUhvc3RlZFpvbmU7XG4gIHByaXZhdGUgem9uZU5hbWU6IHN0cmluZztcblxuICBwcml2YXRlIHNjb3BlOiBDb25zdHJ1Y3Q7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEhvc3RlZFpvbmVQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICB0aGlzLnNjb3BlID0gc2NvcGU7XG4gICAgdGhpcy56b25lTmFtZSA9IHByb3BzLnpvbmVOYW1lO1xuXG4gICAgLy8gSWYgYSBob3N0ZWRab25lSWQgaXMgcHJvdmlkZWQgaW1wb3J0IGl0LCB1bmxlc3MgY3JlYXRlIGEgbmV3IGhvc3RlZCB6b25lXG4gICAgaWYgKCFwcm9wcy5ob3N0ZWRab25lSWQpIHtcbiAgICAgIHRoaXMuYWRkSG9zdGVkWm9uZShwcm9wcy56b25lTmFtZSk7XG4gICAgICB0aGlzLmhvc3RlZFpvbmVJZCA9IHRoaXMuaG9zdGVkWm9uZS5ob3N0ZWRab25lSWQ7XG4gICAgICB0aGlzLmRlbGVnYXRlSG9zdGVkWm9uZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhvc3RlZFpvbmVJZCA9IHByb3BzLmhvc3RlZFpvbmVJZDtcbiAgICAgIHRoaXMuaW1wb3J0SG9zdGVkWm9uZShwcm9wcy56b25lTmFtZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0SW50ZXJuYWxIb3N0ZWRab25lKCkge1xuICAgIHJldHVybiB0aGlzLmhvc3RlZFpvbmUgfHwgdGhpcy5pbXBvcnRlZEhvc3RlZFpvbmU7XG4gIH1cblxuICBzYWZlWm9uZU5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuem9uZU5hbWUuc3BsaXQoXCIuXCIpLmpvaW4oXCJcIik7XG4gIH1cblxuICBhZGRIb3N0ZWRab25lKHpvbmVOYW1lOiBzdHJpbmcpIHtcbiAgICB0aGlzLmhvc3RlZFpvbmUgPSBuZXcgQVdTSG9zdGVkWm9uZShcbiAgICAgIHRoaXMsXG4gICAgICBgJHt0aGlzLnNhZmVab25lTmFtZX1Ib3N0ZWRab25lYCxcbiAgICAgIHtcbiAgICAgICAgem9uZU5hbWU6IHpvbmVOYW1lLFxuICAgICAgICBjb21tZW50OiBgSG9zdGVkIFpvbmUgZm9yICR7em9uZU5hbWV9YFxuICAgICAgfVxuICAgICk7XG5cbiAgICB0YWdSZXNvdXJjZSh0aGlzLmhvc3RlZFpvbmUsIHtcbiAgICAgIFwiZmphbGw6Y29zdEFsbG9jYXRpb246ZW52aXJvbm1lbnRcIjogXCJtYW5hZ2VtZW50XCIsXG4gICAgICBcImZqYWxsOmNvc3RBbGxvY2F0aW9uOnNlcnZpY2VcIjogXCJob3N0ZWRab25lXCIsXG4gICAgICBcImZqYWxsOmNvc3RBbGxvY2F0aW9uOmRvbWFpblwiOiBgJHt6b25lTmFtZX1gXG4gICAgfSk7XG4gIH1cblxuICBpbXBvcnRIb3N0ZWRab25lKHpvbmVOYW1lOiBzdHJpbmcpIHtcbiAgICB0aGlzLmltcG9ydGVkSG9zdGVkWm9uZSA9IEFXU0hvc3RlZFpvbmUuZnJvbUhvc3RlZFpvbmVBdHRyaWJ1dGVzKFxuICAgICAgLy8gSG9zdGVkWm9uZS5mcm9tSG9zdGVkWm9uZUF0dHJpYnV0ZXMgZXhwbGljaXRseSBtdXN0IGJlIHBhc3NlZCBhIHN0YWNrIGFzIHBhcmVudCBzY29wZVxuICAgICAgdGhpcy5zY29wZSxcbiAgICAgIFwiaW1wb3J0ZWRIb3N0ZWRab25lXCIsXG4gICAgICB7XG4gICAgICAgIGhvc3RlZFpvbmVJZDogdGhpcy5ob3N0ZWRab25lSWQsXG4gICAgICAgIHpvbmVOYW1lOiB6b25lTmFtZVxuICAgICAgfVxuICAgICk7XG5cbiAgICB0YWdSZXNvdXJjZSh0aGlzLmltcG9ydGVkSG9zdGVkWm9uZSwge1xuICAgICAgXCJmamFsbDpjb3N0QWxsb2NhdGlvbjplbnZpcm9ubWVudFwiOiBcIm1hbmFnZW1lbnRcIixcbiAgICAgIFwiZmphbGw6Y29zdEFsbG9jYXRpb246c2VydmljZVwiOiBcImhvc3RlZFpvbmVcIixcbiAgICAgIFwiZmphbGw6Y29zdEFsbG9jYXRpb246ZG9tYWluXCI6IGAke3pvbmVOYW1lfWBcbiAgICB9KTtcblxuICAgIG5ldyBDZm5PdXRwdXQodGhpcywgYCR7dGhpcy5zYWZlWm9uZU5hbWUoKX1Ib3N0ZWRab25lSWRgLCB7XG4gICAgICBrZXk6IFwiSG9zdGVkWm9uZUlkXCIsXG4gICAgICB2YWx1ZTogdGhpcy5ob3N0ZWRab25lSWQsXG4gICAgICBleHBvcnROYW1lOiBgJHt0aGlzLnNhZmVab25lTmFtZSgpfUhvc3RlZFpvbmVJZGBcbiAgICB9KTtcbiAgfVxuXG4gIGRlbGVnYXRlSG9zdGVkWm9uZSgpIHtcbiAgICBjb25zdCBkb21haW5OYW1lID0gdGhpcy5ob3N0ZWRab25lLnpvbmVOYW1lLnNwbGl0KFwiLlwiLCAxKTtcbiAgICBjb25zdCByb2xlID0gbmV3IFJvbGUodGhpcywgYCR7ZG9tYWluTmFtZX1EZWxlZ2F0ZUhvc3RlZFpvbmVSb2xlYCwge1xuICAgICAgYXNzdW1lZEJ5OiBuZXcgT3JnYW5pemF0aW9uUHJpbmNpcGFsKEZuLmltcG9ydFZhbHVlKFwiT3JnYW5pc2F0aW9uSWRcIikpLFxuICAgICAgcm9sZU5hbWU6IGAke2RvbWFpbk5hbWV9RGVsZWdhdGVIb3N0ZWRab25lUm9sZWAsXG4gICAgICBpbmxpbmVQb2xpY2llczoge1xuICAgICAgICBbXCJsaXN0SG9zdGVkWm9uZXNcIl06IG5ldyBQb2xpY3lEb2N1bWVudCh7XG4gICAgICAgICAgc3RhdGVtZW50czogW1xuICAgICAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgIGFjdGlvbnM6IFtcInJvdXRlNTM6TGlzdEhvc3RlZFpvbmVzQnlOYW1lXCJdLFxuICAgICAgICAgICAgICByZXNvdXJjZXM6IFtcIipcIl1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgXVxuICAgICAgICB9KSxcbiAgICAgICAgW1wiY2hhbmdlUmVzb3VyY2VSZWNvcmRTZXRzXCJdOiBuZXcgUG9saWN5RG9jdW1lbnQoe1xuICAgICAgICAgIHN0YXRlbWVudHM6IFtcbiAgICAgICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgICBhY3Rpb25zOiBbXCJyb3V0ZTUzOkNoYW5nZVJlc291cmNlUmVjb3JkU2V0c1wiXSxcbiAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgICAgICAgYGFybjphd3M6cm91dGU1Mzo6Omhvc3RlZHpvbmUvJHt0aGlzLmhvc3RlZFpvbmUuaG9zdGVkWm9uZUlkfWBcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICBdXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLmhvc3RlZFpvbmUuZ3JhbnREZWxlZ2F0aW9uKHJvbGUpO1xuXG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCBcIkRlbGVnYXRlSG9zdGVkWm9uZVJvbGVBcm5cIiwge1xuICAgICAga2V5OiBgJHtkb21haW5OYW1lfURlbGVnYXRlSG9zdGVkWm9uZVJvbGVBcm5gLFxuICAgICAgdmFsdWU6IHJvbGUucm9sZUFybixcbiAgICAgIGV4cG9ydE5hbWU6IGAke2RvbWFpbk5hbWV9RGVsZWdhdGVIb3N0ZWRab25lUm9sZUFybmBcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRBUmVjb3JkKHByb3BzOiBPbWl0PEFSZWNvcmRQcm9wcywgXCJ6b25lXCI+KSB7XG4gICAgbmV3IEFSZWNvcmQodGhpcywgXCJBUmVjb3JkXCIsIHtcbiAgICAgIHpvbmU6IHRoaXMuaW1wb3J0ZWRIb3N0ZWRab25lLFxuICAgICAgcmVjb3JkTmFtZTogcHJvcHMucmVjb3JkTmFtZSxcbiAgICAgIGNvbW1lbnQ6XG4gICAgICAgIHByb3BzLmNvbW1lbnQgfHwgYEEgUmVjb3JkIGZvciAke3RoaXMuaW1wb3J0ZWRIb3N0ZWRab25lLnpvbmVOYW1lfWAsXG4gICAgICB0YXJnZXQ6IHByb3BzLnRhcmdldCxcbiAgICAgIHR0bDogcHJvcHMudHRsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYWRkQ25hbWUocHJvcHM6IE9taXQ8Q25hbWVSZWNvcmRQcm9wcywgXCJ6b25lXCI+KSB7XG4gICAgbmV3IENuYW1lUmVjb3JkKHRoaXMsIGBgLCB7XG4gICAgICBkb21haW5OYW1lOiBwcm9wcy5kb21haW5OYW1lLFxuICAgICAgem9uZTogdGhpcy5pbXBvcnRlZEhvc3RlZFpvbmUsXG4gICAgICBjb21tZW50OlxuICAgICAgICBwcm9wcy5jb21tZW50IHx8IGBDTkFNRSBSZWNvcmQgZm9yICR7dGhpcy5pbXBvcnRlZEhvc3RlZFpvbmUuem9uZU5hbWV9YCxcbiAgICAgIHR0bDogcHJvcHMudHRsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYWRkTXgocHJvcHM6IE9taXQ8TXhSZWNvcmRQcm9wcywgXCJ6b25lXCI+KSB7XG4gICAgbmV3IE14UmVjb3JkKHRoaXMsIGBgLCB7XG4gICAgICB6b25lOiB0aGlzLmltcG9ydGVkSG9zdGVkWm9uZSxcbiAgICAgIGNvbW1lbnQ6XG4gICAgICAgIHByb3BzLmNvbW1lbnQgfHwgYE1YIFJlY29yZCBmb3IgJHt0aGlzLmltcG9ydGVkSG9zdGVkWm9uZS56b25lTmFtZX1gLFxuICAgICAgdmFsdWVzOiBwcm9wcy52YWx1ZXMsXG4gICAgICB0dGw6IHByb3BzLnR0bFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFkZE5TKHByb3BzOiBPbWl0PE5zUmVjb3JkUHJvcHMsIFwiem9uZVwiPikge1xuICAgIG5ldyBOc1JlY29yZCh0aGlzLCBgYCwge1xuICAgICAgem9uZTogdGhpcy5pbXBvcnRlZEhvc3RlZFpvbmUsXG4gICAgICBjb21tZW50OlxuICAgICAgICBwcm9wcy5jb21tZW50IHx8IGBOUyBSZWNvcmQgZm9yICR7dGhpcy5pbXBvcnRlZEhvc3RlZFpvbmUuem9uZU5hbWV9YCxcbiAgICAgIHZhbHVlczogcHJvcHMudmFsdWVzLFxuICAgICAgdHRsOiBwcm9wcy50dGxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRUeHQocHJvcHM6IE9taXQ8VHh0UmVjb3JkUHJvcHMsIFwiem9uZVwiPikge1xuICAgIG5ldyBUeHRSZWNvcmQodGhpcywgYGAsIHtcbiAgICAgIHpvbmU6IHRoaXMuaW1wb3J0ZWRIb3N0ZWRab25lLFxuICAgICAgY29tbWVudDpcbiAgICAgICAgcHJvcHMuY29tbWVudCB8fCBgVFhUIFJlY29yZCBmb3IgJHt0aGlzLmltcG9ydGVkSG9zdGVkWm9uZS56b25lTmFtZX1gLFxuICAgICAgdmFsdWVzOiBwcm9wcy52YWx1ZXMsXG4gICAgICB0dGw6IHByb3BzLnR0bFxuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
export * from "./managedOrganisation";
|
|
2
2
|
export * from "./managedPlatform";
|
|
3
3
|
export * from "./managedAccount";
|
|
4
|
-
export * from "./basicApp";
|
|
5
4
|
export * from "./buildkite";
|
|
6
5
|
export * from "../../resources/aws/compute/ec2";
|
|
7
6
|
export * from "./fivetranProxy";
|
|
8
7
|
export * from "./database";
|
|
8
|
+
export * from "./hostedZone";
|
|
9
9
|
export * from "./compute";
|
|
10
10
|
export * from "./storage";
|
|
@@ -17,12 +17,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
17
17
|
__exportStar(require("./managedOrganisation"), exports);
|
|
18
18
|
__exportStar(require("./managedPlatform"), exports);
|
|
19
19
|
__exportStar(require("./managedAccount"), exports);
|
|
20
|
-
__exportStar(require("./basicApp"), exports);
|
|
21
20
|
__exportStar(require("./buildkite"), exports);
|
|
22
21
|
__exportStar(require("../../resources/aws/compute/ec2"), exports);
|
|
23
22
|
__exportStar(require("./fivetranProxy"), exports);
|
|
24
23
|
__exportStar(require("./database"), exports);
|
|
24
|
+
__exportStar(require("./hostedZone"), exports);
|
|
25
25
|
// Patterns
|
|
26
26
|
__exportStar(require("./compute"), exports);
|
|
27
27
|
__exportStar(require("./storage"), exports);
|
|
28
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvcGF0dGVybnMvYXdzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx3REFBc0M7QUFDdEMsb0RBQWtDO0FBQ2xDLG1EQUFpQztBQUNqQyw4Q0FBNEI7QUFDNUIsa0VBQWdEO0FBQ2hELGtEQUFnQztBQUNoQyw2Q0FBMkI7QUFDM0IsK0NBQTZCO0FBRTdCLFdBQVc7QUFDWCw0Q0FBMEI7QUFDMUIsNENBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vbWFuYWdlZE9yZ2FuaXNhdGlvblwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbWFuYWdlZFBsYXRmb3JtXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9tYW5hZ2VkQWNjb3VudFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vYnVpbGRraXRlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9jb21wdXRlL2VjMlwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZml2ZXRyYW5Qcm94eVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZGF0YWJhc2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2hvc3RlZFpvbmVcIjtcblxuLy8gUGF0dGVybnNcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXB1dGVcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3N0b3JhZ2VcIjtcbiJdfQ==
|
|
@@ -4,8 +4,10 @@ import { Construct } from "constructs";
|
|
|
4
4
|
import { StackBuilder } from "../base/awsStack";
|
|
5
5
|
import { SecretValue } from "aws-cdk-lib";
|
|
6
6
|
import { IManagedPolicy, PolicyDocument } from "aws-cdk-lib/aws-iam";
|
|
7
|
+
import { Certificate } from "aws-cdk-lib/aws-certificatemanager";
|
|
7
8
|
import { Repository } from "aws-cdk-lib/aws-ecr";
|
|
8
9
|
import { KeyValue } from "../../../types";
|
|
10
|
+
import { HostedZone as FjallHostedZone } from "../../../patterns/aws/hostedZone";
|
|
9
11
|
import { SecretImport } from "../secrets";
|
|
10
12
|
export declare enum Protocol {
|
|
11
13
|
HTTP = 0,
|
|
@@ -18,6 +20,17 @@ export declare enum ScalingType {
|
|
|
18
20
|
export interface ContainerSecret {
|
|
19
21
|
[key: string]: SecretValue;
|
|
20
22
|
}
|
|
23
|
+
/**
|
|
24
|
+
* DomainConfiguration
|
|
25
|
+
* - When supplied a domain name, a hosted zone, certificate and ARecord will be created
|
|
26
|
+
* - When supplied a domain name and hosted zone, a certificate and ARecord will be created
|
|
27
|
+
* - When all properties are supplied only a target will be created
|
|
28
|
+
*/
|
|
29
|
+
export type DomainConfig = {
|
|
30
|
+
domainName: string;
|
|
31
|
+
hostedZone?: FjallHostedZone;
|
|
32
|
+
certificate?: Certificate;
|
|
33
|
+
};
|
|
21
34
|
export type FargateClusterProps = {
|
|
22
35
|
ecrRepository: Repository | RepositoryImage;
|
|
23
36
|
clusterName: string;
|
|
@@ -30,7 +43,7 @@ export type FargateClusterProps = {
|
|
|
30
43
|
containerPort?: number;
|
|
31
44
|
cpu?: number;
|
|
32
45
|
databaseConnection?: IConnectable;
|
|
33
|
-
|
|
46
|
+
domainConfig?: DomainConfig;
|
|
34
47
|
desiredCount?: number;
|
|
35
48
|
healthCheckPath?: string;
|
|
36
49
|
listenerPort?: number;
|
|
@@ -60,6 +73,7 @@ export default class FargateCluster extends Construct implements IConnectable {
|
|
|
60
73
|
private aRecord;
|
|
61
74
|
private loadBalancerListener;
|
|
62
75
|
private secrets;
|
|
76
|
+
private scope;
|
|
63
77
|
constructor(scope: Construct, id: string, props: FargateClusterProps);
|
|
64
78
|
addCluster(props: FargateClusterProps): void;
|
|
65
79
|
/**
|
|
@@ -16,6 +16,7 @@ const aws_route53_1 = require("aws-cdk-lib/aws-route53");
|
|
|
16
16
|
const aws_route53_targets_1 = require("aws-cdk-lib/aws-route53-targets");
|
|
17
17
|
const aws_ecr_1 = require("aws-cdk-lib/aws-ecr");
|
|
18
18
|
const cfnOutput_1 = require("../utilities/cfnOutput");
|
|
19
|
+
const hostedZone_1 = require("../../../patterns/aws/hostedZone");
|
|
19
20
|
var Protocol;
|
|
20
21
|
(function (Protocol) {
|
|
21
22
|
Protocol[Protocol["HTTP"] = 0] = "HTTP";
|
|
@@ -30,6 +31,7 @@ class FargateCluster extends constructs_1.Construct {
|
|
|
30
31
|
constructor(scope, id, props) {
|
|
31
32
|
super(scope, id);
|
|
32
33
|
this.secrets = {};
|
|
34
|
+
this.scope = scope;
|
|
33
35
|
this.addCluster(props);
|
|
34
36
|
this.addSecrets(props);
|
|
35
37
|
this.importSecrets(props);
|
|
@@ -38,7 +40,7 @@ class FargateCluster extends constructs_1.Construct {
|
|
|
38
40
|
this.addContainerDefinition(props);
|
|
39
41
|
this.addFargateService(props);
|
|
40
42
|
this.addLoadBalancer(props);
|
|
41
|
-
if (!!props.
|
|
43
|
+
if (!!props.domainConfig)
|
|
42
44
|
this.addHostedZone(props);
|
|
43
45
|
this.addLoadBalancerListener(props);
|
|
44
46
|
this.registerLoadBalancerTargets(props);
|
|
@@ -251,18 +253,29 @@ class FargateCluster extends constructs_1.Construct {
|
|
|
251
253
|
(0, tagResource_1.default)(this.loadBalancerListener, props.tags);
|
|
252
254
|
}
|
|
253
255
|
addHostedZone(props) {
|
|
254
|
-
if (!props.
|
|
256
|
+
if (!props.domainConfig)
|
|
255
257
|
return;
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
258
|
+
if (!props.domainConfig.hostedZone) {
|
|
259
|
+
// Create a new hosted zone if one is not provided
|
|
260
|
+
var hostedZone = new hostedZone_1.HostedZone(this, `${props.serviceName}HostedZone`, {
|
|
261
|
+
zoneName: props.domainConfig.domainName
|
|
262
|
+
});
|
|
263
|
+
this.hostedZone = hostedZone.getInternalHostedZone();
|
|
264
|
+
}
|
|
265
|
+
else {
|
|
266
|
+
// Otherwise use the provided hosted zone
|
|
267
|
+
this.hostedZone = props.domainConfig.hostedZone.getInternalHostedZone();
|
|
268
|
+
}
|
|
269
|
+
if (!props.domainConfig.certificate) {
|
|
270
|
+
// If no certificate is provided - create a new one
|
|
271
|
+
this.certificate = new aws_certificatemanager_1.Certificate(this, `${props.serviceName}Certificate`, {
|
|
272
|
+
domainName: props.domainConfig.domainName,
|
|
273
|
+
validation: aws_certificatemanager_1.CertificateValidation.fromDns(this.hostedZone)
|
|
274
|
+
});
|
|
275
|
+
}
|
|
276
|
+
// Always create a new ARecord for this domain and attach it to the load balancer
|
|
277
|
+
this.aRecord = new aws_route53_1.ARecord(this, `${props.serviceName}.${props.clusterName}.${props.domainConfig.domainName}ARecord`, {
|
|
278
|
+
recordName: props.domainConfig.domainName,
|
|
266
279
|
zone: this.hostedZone,
|
|
267
280
|
target: aws_route53_1.RecordTarget.fromAlias(new aws_route53_targets_1.LoadBalancerTarget(this.loadBalancer))
|
|
268
281
|
});
|
|
@@ -291,4 +304,4 @@ class FargateCluster extends constructs_1.Construct {
|
|
|
291
304
|
}
|
|
292
305
|
}
|
|
293
306
|
exports.default = FargateCluster;
|
|
294
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3Jlc291cmNlcy9hd3MvY29tcHV0ZS9lY3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaURBVzZCO0FBQzdCLGlEQU02QjtBQUM3QiwyQ0FBdUM7QUFFdkMsNkNBQXdEO0FBQ3hELHVGQUlnRDtBQUNoRCw0REFBcUQ7QUFDckQsaURBUTZCO0FBQzdCLHVGQUtnRDtBQUNoRCxpREFBMEQ7QUFDMUQsdUVBQXdEO0FBQ3hELCtFQUc0QztBQUM1Qyx5REFLaUM7QUFDakMseUVBQXFFO0FBQ3JFLGlEQUFpRDtBQUVqRCxzREFBbUQ7QUFJbkQsSUFBWSxRQUdYO0FBSEQsV0FBWSxRQUFRO0lBQ2xCLHVDQUFJLENBQUE7SUFDSix5Q0FBSyxDQUFBO0FBQ1AsQ0FBQyxFQUhXLFFBQVEsd0JBQVIsUUFBUSxRQUduQjtBQUVELElBQVksV0FHWDtBQUhELFdBQVksV0FBVztJQUNyQixzREFBMEQsQ0FBQTtJQUMxRCw0REFBZ0UsQ0FBQTtBQUNsRSxDQUFDLEVBSFcsV0FBVywyQkFBWCxXQUFXLFFBR3RCO0FBbUNELE1BQXFCLGNBQWUsU0FBUSxzQkFBUztJQW1CbkQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUEwQjtRQUNsRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBTFgsWUFBTyxHQUVYLEVBQUUsQ0FBQztRQUtMLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2QixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QixJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLHNCQUFzQixDQUFD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LENBQUM7UUFDRCxPQUFPLHdCQUFjLENBQUMsWUFBWSxDQUFDLDBCQUEwQixDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFLLENBQ1YsRUFBVSxFQUNWLEtBQTBCO1FBRTFCLE9BQU8sQ0FBQyxFQUFnQixFQUFFLEVBQUU7WUFDMUIsTUFBTSxRQUFRLEdBQXdCO2dCQUNwQyxHQUFHLEtBQUs7Z0JBQ1IsR0FBRztvQkFDRCxHQUFHLEVBQUcsRUFBRSxDQUFDLFVBQVUsRUFBVyxJQUFJLEtBQUssQ0FBQyxHQUFHO2lCQUM1QzthQUNGLENBQUM7WUFDRixPQUFPLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDL0MsQ0FBQyxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBclhELGlDQXFYQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEF3c0xvZ0RyaXZlcixcbiAgQ2x1c3RlciBhcyBDZGtDbHVzdGVyLFxuICBDb250YWluZXJJbWFnZSxcbiAgRmFyZ2F0ZVNlcnZpY2UsXG4gIEZhcmdhdGVUYXNrRGVmaW5pdGlvbixcbiAgTGlzdGVuZXJDb25maWcsXG4gIFByb3BhZ2F0ZWRUYWdTb3VyY2UsXG4gIFJlcG9zaXRvcnlJbWFnZSxcbiAgQ29udGFpbmVyRGVmaW5pdGlvbixcbiAgQ29udGFpbmVySW5zaWdodHNcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lY3NcIjtcbmltcG9ydCB7XG4gIENvbm5lY3Rpb25zLFxuICBJQ29ubmVjdGFibGUsXG4gIElWcGMsXG4gIFBvcnQsXG4gIFN1Ym5ldFR5cGVcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lYzJcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBTdGFja0J1aWxkZXIgfSBmcm9tIFwiLi4vYmFzZS9hd3NTdGFja1wiO1xuaW1wb3J0IHsgRHVyYXRpb24sIEZuLCBTZWNyZXRWYWx1ZSB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHtcbiAgQXBwbGljYXRpb25MaXN0ZW5lcixcbiAgQXBwbGljYXRpb25Mb2FkQmFsYW5jZXIsXG4gIEFwcGxpY2F0aW9uUHJvdG9jb2xcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lbGFzdGljbG9hZGJhbGFuY2luZ3YyXCI7XG5pbXBvcnQgdGFnUmVzb3VyY2UgZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3RhZ1Jlc291cmNlXCI7XG5pbXBvcnQge1xuICBDb21wb3NpdGVQcmluY2lwYWwsXG4gIEVmZmVjdCxcbiAgSU1hbmFnZWRQb2xpY3ksXG4gIFBvbGljeURvY3VtZW50LFxuICBQb2xpY3lTdGF0ZW1lbnQsXG4gIFJvbGUsXG4gIFNlcnZpY2VQcmluY2lwYWxcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcbmltcG9ydCB7XG4gIFByZWRlZmluZWRNZXRyaWMsXG4gIFNjYWxhYmxlVGFyZ2V0LFxuICBTZXJ2aWNlTmFtZXNwYWNlLFxuICBUYXJnZXRUcmFja2luZ1NjYWxpbmdQb2xpY3lcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1hcHBsaWNhdGlvbmF1dG9zY2FsaW5nXCI7XG5pbXBvcnQgeyBTZWNyZXQgYXMgRWNzU2VjcmV0IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lY3NcIjtcbmltcG9ydCB7IFNlY3JldCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtc2VjcmV0c21hbmFnZXJcIjtcbmltcG9ydCB7XG4gIENlcnRpZmljYXRlLFxuICBDZXJ0aWZpY2F0ZVZhbGlkYXRpb25cbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1jZXJ0aWZpY2F0ZW1hbmFnZXJcIjtcbmltcG9ydCB7XG4gIEFSZWNvcmQsXG4gIEhvc3RlZFpvbmUsXG4gIFJlY29yZFRhcmdldCxcbiAgSUhvc3RlZFpvbmVcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1yb3V0ZTUzXCI7XG5pbXBvcnQgeyBMb2FkQmFsYW5jZXJUYXJnZXQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXJvdXRlNTMtdGFyZ2V0c1wiO1xuaW1wb3J0IHsgUmVwb3NpdG9yeSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWNyXCI7XG5pbXBvcnQgeyBLZXlWYWx1ZSB9IGZyb20gXCIuLi8uLi8uLi90eXBlc1wiO1xuaW1wb3J0IHsgQ2ZuT3V0cHV0IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jZm5PdXRwdXRcIjtcblxuaW1wb3J0IHsgU2VjcmV0SW1wb3J0IH0gZnJvbSBcIi4uL3NlY3JldHNcIjtcblxuZXhwb3J0IGVudW0gUHJvdG9jb2wge1xuICBIVFRQLFxuICBIVFRQU1xufVxuXG5leHBvcnQgZW51bSBTY2FsaW5nVHlwZSB7XG4gIENQVSA9IFByZWRlZmluZWRNZXRyaWMuRUNTX1NFUlZJQ0VfQVZFUkFHRV9DUFVfVVRJTElaQVRJT04sXG4gIE1FTU9SWSA9IFByZWRlZmluZWRNZXRyaWMuRUNTX1NFUlZJQ0VfQVZFUkFHRV9NRU1PUllfVVRJTElaQVRJT05cbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb250YWluZXJTZWNyZXQge1xuICBba2V5OiBzdHJpbmddOiBTZWNyZXRWYWx1ZTtcbn1cblxuZXhwb3J0IHR5cGUgRmFyZ2F0ZUNsdXN0ZXJQcm9wcyA9IHtcbiAgZWNyUmVwb3NpdG9yeTogUmVwb3NpdG9yeSB8IFJlcG9zaXRvcnlJbWFnZTtcbiAgY2x1c3Rlck5hbWU6IHN0cmluZztcbiAgY29udGFpbmVyQ29tbWFuZD86IHN0cmluZ1tdO1xuICBjb250YWluZXJFbnZpcm9ubWVudD86IEtleVZhbHVlO1xuICBjb250YWluZXJTZWNyZXRzPzogQ29udGFpbmVyU2VjcmV0O1xuICBjb250YWluZXJTZWNyZXRzSW1wb3J0Pzoge1xuICAgIFtrZXk6IHN0cmluZ106IFNlY3JldEltcG9ydDtcbiAgfTtcbiAgY29udGFpbmVyUG9ydD86IG51bWJlcjtcbiAgY3B1PzogbnVtYmVyO1xuICBkYXRhYmFzZUNvbm5lY3Rpb24/OiBJQ29ubmVjdGFibGU7XG4gIHBhcmVudERvbWFpbj86IHN0cmluZzsgLy8gVE9ETzogQnJlYWsgb3V0IGEgSFRUUCBhbmQgSFRUUFMgc2VydmljZSB3aGVyZSB0aGlzIGlzIG9wdGlvbmFsXG4gIGRlc2lyZWRDb3VudD86IG51bWJlcjtcbiAgaGVhbHRoQ2hlY2tQYXRoPzogc3RyaW5nO1xuICBsaXN0ZW5lclBvcnQ/OiBudW1iZXI7XG4gIG1lbW9yeUxpbWl0TWlCPzogbnVtYmVyO1xuICBwdWJsaWNMb2FkQmFsYW5jZXI/OiBib29sZWFuO1xuICBwcm90b2NvbDogUHJvdG9jb2w7XG4gIHNjYWxpbmdUeXBlPzogU2NhbGluZ1R5cGU7XG4gIHNlcnZpY2VOYW1lOiBzdHJpbmc7XG4gIHRhZ3M6IEtleVZhbHVlO1xuICB0YXNrUm9sZUlubGluZVBvbGljaWVzPzoge1xuICAgIFtuYW1lOiBzdHJpbmddOiBQb2xpY3lEb2N1bWVudDtcbiAgfTtcbiAgdGFza1JvbGVNYW5hZ2VkUG9saWNpZXM/OiBJTWFuYWdlZFBvbGljeVtdO1xuICB2cGM/OiBJVnBjO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRmFyZ2F0ZUNsdXN0ZXIgZXh0ZW5kcyBDb25zdHJ1Y3QgaW1wbGVtZW50cyBJQ29ubmVjdGFibGUge1xuICBwdWJsaWMgY29ubmVjdGlvbnM6IENvbm5lY3Rpb25zO1xuXG4gIHByaXZhdGUgY2x1c3RlcjogQ2RrQ2x1c3RlcjtcbiAgcHJpdmF0ZSBsb2FkQmFsYW5jZXI6IEFwcGxpY2F0aW9uTG9hZEJhbGFuY2VyO1xuICBwcml2YXRlIGV4ZWN1dGlvblJvbGU6IFJvbGU7XG4gIHByaXZhdGUgdGFza0RlZmluaXRpb246IEZhcmdhdGVUYXNrRGVmaW5pdGlvbjtcbiAgcHJpdmF0ZSBjb250YWluZXJEZWZpbml0aW9uOiBDb250YWluZXJEZWZpbml0aW9uO1xuICBwcml2YXRlIGZhcmdhdGVTZXJ2aWNlOiBGYXJnYXRlU2VydmljZTtcbiAgcHJpdmF0ZSBzY2FsaW5nUG9saWN5OiBUYXJnZXRUcmFja2luZ1NjYWxpbmdQb2xpY3k7XG4gIHByaXZhdGUgaG9zdGVkWm9uZTogSUhvc3RlZFpvbmU7XG4gIHByaXZhdGUgY2VydGlmaWNhdGU6IENlcnRpZmljYXRlO1xuICBwcml2YXRlIGFSZWNvcmQ6IEFSZWNvcmQ7XG4gIHByaXZhdGUgbG9hZEJhbGFuY2VyTGlzdGVuZXI6IEFwcGxpY2F0aW9uTGlzdGVuZXI7XG5cbiAgcHJpdmF0ZSBzZWNyZXRzOiB7XG4gICAgW2tleTogc3RyaW5nXTogRWNzU2VjcmV0O1xuICB9ID0ge307XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEZhcmdhdGVDbHVzdGVyUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgdGhpcy5hZGRDbHVzdGVyKHByb3BzKTtcbiAgICB0aGlzLmFkZFNlY3JldHMocHJvcHMpO1xuICAgIHRoaXMuaW1wb3J0U2VjcmV0cyhwcm9wcyk7XG4gICAgdGhpcy5hZGRFeGVjdXRpb25Sb2xlKHByb3BzKTtcbiAgICB0aGlzLmFkZFRhc2tEZWZpbml0aW9uKHByb3BzKTtcbiAgICB0aGlzLmFkZENvbnRhaW5lckRlZmluaXRpb24ocHJvcHMpO1xuICAgIHRoaXMuYWRkRmFyZ2F0ZVNlcnZpY2UocHJvcHMpO1xuICAgIHRoaXMuYWRkTG9hZEJhbGFuY2VyKHByb3BzKTtcblxuICAgIGlmICghIXByb3BzLnBhcmVudERvbWFpbikgdGhpcy5hZGRIb3N0ZWRab25lKHByb3BzKTtcblxuICAgIHRoaXMuYWRkTG9hZEJhbGFuY2VyTGlzdGVuZXIocHJvcHMpO1xuICAgIHRoaXMucmVnaXN0ZXJMb2FkQmFsYW5jZXJUYXJnZXRzKHByb3BzKTtcblxuICAgIHRoaXMuY29ubmVjdGlvbnMgPSB0aGlzLmZhcmdhdGVTZXJ2aWNlLmNvbm5lY3Rpb25zO1xuXG4gICAgLy90b2RvOiBmaXggY29ubmVjdGlvbnMgbm90IHdvcmtpbmcgYXV0b21hdGljYWxseVxuICAgIGlmIChwcm9wcy5kYXRhYmFzZUNvbm5lY3Rpb24pIHtcbiAgICAgIHRoaXMuZmFyZ2F0ZVNlcnZpY2UuY29ubmVjdGlvbnMuYWxsb3dUbyhcbiAgICAgICAgcHJvcHMuZGF0YWJhc2VDb25uZWN0aW9uLFxuICAgICAgICBQb3J0LlBPU1RHUkVTXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGFkZENsdXN0ZXIocHJvcHM6IEZhcmdhdGVDbHVzdGVyUHJvcHMpIHtcbiAgICB0aGlzLmNsdXN0ZXIgPSBuZXcgQ2RrQ2x1c3Rlcih0aGlzLCBgJHtwcm9wcy5jbHVzdGVyTmFtZX1gLCB7XG4gICAgICB2cGM6IHByb3BzLnZwYyxcbiAgICAgIGNsdXN0ZXJOYW1lOiBwcm9wcy5jbHVzdGVyTmFtZSxcbiAgICAgIGNvbnRhaW5lckluc2lnaHRzVjI6IENvbnRhaW5lckluc2lnaHRzLkVOQUJMRUQsXG4gICAgICBlbmFibGVGYXJnYXRlQ2FwYWNpdHlQcm92aWRlcnM6IHRydWVcbiAgICB9KTtcbiAgICB0YWdSZXNvdXJjZSh0aGlzLmNsdXN0ZXIsIHByb3BzLnRhZ3MpO1xuICB9XG5cbiAgLyoqXG4gICAqICN0b2RvOiBjaGFuZ2UgdGhpcyB0byBjcmVhdGUgbmV3IHNlY3JldHMgaW5zdGVhZFxuICAgKiBAZGVwcmVjYXRlZCB1c2UgaW1wb3J0U2VjcmV0cyBpbnN0ZWFkXG4gICAqL1xuICBhZGRTZWNyZXRzKHByb3BzOiBGYXJnYXRlQ2x1c3RlclByb3BzKSB7XG4gICAgLy8gQ29udGFpbmVyIFNlY3JldHNcbiAgICBjb25zdCBjb250YWluZXJTZWNyZXQgPSBTZWNyZXQuZnJvbVNlY3JldE5hbWVWMihcbiAgICAgIHRoaXMsXG4gICAgICBgJHtwcm9wcy5jbHVzdGVyTmFtZX1TZWNyZXRgLFxuICAgICAgYC8ke3Byb3BzLmNsdXN0ZXJOYW1lfS8ke3Byb3BzLnNlcnZpY2VOYW1lfWBcbiAgICApO1xuXG4gICAgZm9yIChjb25zdCBzZWNyZXRGaWVsZCBpbiBwcm9wcy5jb250YWluZXJTZWNyZXRzKSB7XG4gICAgICB0aGlzLnNlY3JldHNbc2VjcmV0RmllbGRdID0gRWNzU2VjcmV0LmZyb21TZWNyZXRzTWFuYWdlcihcbiAgICAgICAgY29udGFpbmVyU2VjcmV0LFxuICAgICAgICBzZWNyZXRGaWVsZFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQXV0b21hdGljYWxseSBpbXBvcnQgc2VjcmV0cyBmcm9tIGFub3RoZXIgcmVzb3VyY2Ugb3Igc3RhY2tcbiAgICovXG4gIGltcG9ydFNlY3JldHMocHJvcHM6IEZhcmdhdGVDbHVzdGVyUHJvcHMpIHtcbiAgICBpZiAoIXByb3BzLmNvbnRhaW5lclNlY3JldHNJbXBvcnQpIHJldHVybjtcblxuICAgIGZvciAoY29uc3Qga2V5IGluIHByb3BzLmNvbnRhaW5lclNlY3JldHNJbXBvcnQpIHtcbiAgICAgIGNvbnN0IGltcG9ydFNlY3JldCA9IHByb3BzLmNvbnRhaW5lclNlY3JldHNJbXBvcnRba2V5XTtcblxuICAgICAgLy8gdG9kbzogSSB0aGluayBJRCBuZWVkcyB0byBiZSBhIG5ldyB2YWx1ZSBhcyBpdCBJRCdzIHRoZSBJTVBPUlQgbm90IHRoZSBzZWNyZXQgaXRzZWxmP1xuXG4gICAgICAvLyBDb25zdHJ1Y3QgdGhlIEFXUyBJU2VjcmV0IG9iamVjdFxuICAgICAgY29uc3QgaVNlY3JldCA9IFNlY3JldC5mcm9tU2VjcmV0TmFtZVYyKFxuICAgICAgICB0aGlzLFxuICAgICAgICBpbXBvcnRTZWNyZXQuaWQsXG4gICAgICAgIGltcG9ydFNlY3JldC5uYW1lXG4gICAgICApO1xuXG4gICAgICB0aGlzLnNlY3JldHNba2V5XSA9IEVjc1NlY3JldC5mcm9tU2VjcmV0c01hbmFnZXIoXG4gICAgICAgIGlTZWNyZXQsXG4gICAgICAgIGltcG9ydFNlY3JldC5maWVsZFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBhZGRFeGVjdXRpb25Sb2xlKHByb3BzOiBGYXJnYXRlQ2x1c3RlclByb3BzKSB7XG4gICAgdGhpcy5leGVjdXRpb25Sb2xlID0gbmV3IFJvbGUodGhpcywgYCR7cHJvcHMuc2VydmljZU5hbWV9RXhlY3V0aW9uUm9sZWAsIHtcbiAgICAgIHJvbGVOYW1lOiBgJHtwcm9wcy5zZXJ2aWNlTmFtZX1FeGVjdXRpb25Sb2xlYCxcbiAgICAgIGRlc2NyaXB0aW9uOiBgJHtwcm9wcy5zZXJ2aWNlTmFtZX0gRXhlY3V0aW9uIFJvbGVgLFxuICAgICAgbWFuYWdlZFBvbGljaWVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBtYW5hZ2VkUG9saWN5QXJuOlxuICAgICAgICAgICAgXCJhcm46YXdzOmlhbTo6YXdzOnBvbGljeS9zZXJ2aWNlLXJvbGUvQW1hem9uRUNTVGFza0V4ZWN1dGlvblJvbGVQb2xpY3lcIlxuICAgICAgICB9XG4gICAgICBdLFxuICAgICAgaW5saW5lUG9saWNpZXM6IHtcbiAgICAgICAgW1wicmVhZFNlY3JldHNcIl06IG5ldyBQb2xpY3lEb2N1bWVudCh7XG4gICAgICAgICAgc3RhdGVtZW50czogW1xuICAgICAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgICAgICBcInNlY3JldHNtYW5hZ2VyOkdldFNlY3JldFZhbHVlXCIsXG4gICAgICAgICAgICAgICAgXCJzZWNyZXRzbWFuYWdlcjpEZXNjcmliZVNlY3JldFwiXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIHJlc291cmNlczogW1wiKlwiXSAvLyBUT0RPOiBTZXQgdGhpcyB0byB0aGUgc2VjcmV0IEFSTlxuICAgICAgICAgICAgfSlcbiAgICAgICAgICBdXG4gICAgICAgIH0pLFxuICAgICAgICBbXCJkZWNyeXB0U2VjcmV0c1wiXTogbmV3IFBvbGljeURvY3VtZW50KHtcbiAgICAgICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgYWN0aW9uczogW1wia21zOkRlY3J5cHRcIl0sXG4gICAgICAgICAgICAgIHJlc291cmNlczogW1wiKlwiXSAvLyBUT0RPOiBTZXQgdGhpcyB0byB0aGUgS01TIEFyblxuICAgICAgICAgICAgfSlcbiAgICAgICAgICBdXG4gICAgICAgIH0pLFxuICAgICAgICBbXCJlY3NFeGVjdXRlQ29tbWFuZFwiXTogbmV3IFBvbGljeURvY3VtZW50KHtcbiAgICAgICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICAgIFwic3NtbWVzc2FnZXM6Q3JlYXRlQ29udHJvbENoYW5uZWxcIixcbiAgICAgICAgICAgICAgICBcInNzbW1lc3NhZ2VzOkNyZWF0ZURhdGFDaGFubmVsXCIsXG4gICAgICAgICAgICAgICAgXCJzc21tZXNzYWdlczpPcGVuQ29udHJvbENoYW5uZWxcIixcbiAgICAgICAgICAgICAgICBcInNzbW1lc3NhZ2VzOk9wZW5EYXRhQ2hhbm5lbFwiXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgICAgICAgICByZXNvdXJjZXM6IFtcIipcIl1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgXVxuICAgICAgICB9KVxuICAgICAgfSxcbiAgICAgIGFzc3VtZWRCeTogbmV3IENvbXBvc2l0ZVByaW5jaXBhbChcbiAgICAgICAgbmV3IFNlcnZpY2VQcmluY2lwYWwoXCJlY3MtdGFza3MuYW1hem9uYXdzLmNvbVwiKVxuICAgICAgKVxuICAgIH0pO1xuICB9XG5cbiAgYWRkVGFza0RlZmluaXRpb24ocHJvcHM6IEZhcmdhdGVDbHVzdGVyUHJvcHMpIHtcbiAgICB0aGlzLnRhc2tEZWZpbml0aW9uID0gbmV3IEZhcmdhdGVUYXNrRGVmaW5pdGlvbihcbiAgICAgIHRoaXMsXG4gICAgICBgJHtwcm9wcy5zZXJ2aWNlTmFtZX1UYXNrRGVmaW5pdGlvbmAsXG4gICAgICB7XG4gICAgICAgIGNwdTogcHJvcHMuY3B1IHx8IDI1NixcbiAgICAgICAgZXhlY3V0aW9uUm9sZTogdGhpcy5leGVjdXRpb25Sb2xlLFxuICAgICAgICB0YXNrUm9sZTogbmV3IFJvbGUodGhpcywgYCR7cHJvcHMuc2VydmljZU5hbWV9VGFza1JvbGVgLCB7XG4gICAgICAgICAgcm9sZU5hbWU6IGAke3Byb3BzLnNlcnZpY2VOYW1lfVRhc2tSb2xlYCxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogYCR7cHJvcHMuc2VydmljZU5hbWV9IFRhc2sgUm9sZWAsXG4gICAgICAgICAgaW5saW5lUG9saWNpZXM6IHByb3BzLnRhc2tSb2xlSW5saW5lUG9saWNpZXMsXG4gICAgICAgICAgbWFuYWdlZFBvbGljaWVzOiBwcm9wcy50YXNrUm9sZU1hbmFnZWRQb2xpY2llcyxcbiAgICAgICAgICBhc3N1bWVkQnk6IG5ldyBDb21wb3NpdGVQcmluY2lwYWwoXG4gICAgICAgICAgICBuZXcgU2VydmljZVByaW5jaXBhbChcImVjcy10YXNrcy5hbWF6b25hd3MuY29tXCIpXG4gICAgICAgICAgKVxuICAgICAgICB9KSxcbiAgICAgICAgbWVtb3J5TGltaXRNaUI6IHByb3BzLm1lbW9yeUxpbWl0TWlCIHx8IDUxMlxuICAgICAgfVxuICAgICk7XG4gICAgdGFnUmVzb3VyY2UodGhpcy50YXNrRGVmaW5pdGlvbiwgcHJvcHMudGFncyk7XG4gIH1cblxuICBhZGRDb250YWluZXJEZWZpbml0aW9uKHByb3BzOiBGYXJnYXRlQ2x1c3RlclByb3BzKSB7XG4gICAgdGhpcy5jb250YWluZXJEZWZpbml0aW9uID0gdGhpcy50YXNrRGVmaW5pdGlvbi5hZGRDb250YWluZXIoXG4gICAgICBgJHtwcm9wcy5zZXJ2aWNlTmFtZX1Db250YWluZXJEZWZpbml0aW9uYCxcbiAgICAgIHtcbiAgICAgICAgaW1hZ2U6IHRoaXMuZ2V0SW1hZ2UocHJvcHMpLFxuICAgICAgICBjb250YWluZXJOYW1lOiBwcm9wcy5zZXJ2aWNlTmFtZSxcbiAgICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgICAuLi5wcm9wcy5jb250YWluZXJFbnZpcm9ubWVudFxuICAgICAgICB9LFxuICAgICAgICBjb21tYW5kOiBwcm9wcy5jb250YWluZXJDb21tYW5kLFxuICAgICAgICBzZWNyZXRzOiB7XG4gICAgICAgICAgLi4udGhpcy5zZWNyZXRzXG4gICAgICAgIH0sXG4gICAgICAgIC8vdG9kbzogcHJvdmlkZSBoZWFsdGggY2hlY2sgb3B0aW9uc1xuICAgICAgICAvLyBoZWFsdGhDaGVjazoge1xuICAgICAgICAvLyAgIGNvbW1hbmQ6IFtcbiAgICAgICAgLy8gICAgIFwiQ01ELVNIRUxMXCIsXG4gICAgICAgIC8vICAgICBgdGltZW91dCAxMHMgL2Jpbi9zaCAtYyAnOj4gL2Rldi90Y3AvMTI3LjAuMC4xLyR7cHJvcHMuY29udGFpbmVyUG9ydH0nIHx8IGV4aXQgMWBcbiAgICAgICAgLy8gICBdXG4gICAgICAgIC8vIH0sXG4gICAgICAgIGxvZ2dpbmc6IG5ldyBBd3NMb2dEcml2ZXIoe1xuICAgICAgICAgIHN0cmVhbVByZWZpeDogYC9lY3MvJHtwcm9wcy5jbHVzdGVyTmFtZX0vJHtwcm9wcy5zZXJ2aWNlTmFtZX1gLFxuICAgICAgICAgIGxvZ1JldGVudGlvbjogMTRcbiAgICAgICAgfSksXG4gICAgICAgIHBvcnRNYXBwaW5nczogcHJvcHMuY29udGFpbmVyUG9ydFxuICAgICAgICAgID8gW3sgY29udGFpbmVyUG9ydDogcHJvcHMuY29udGFpbmVyUG9ydCB9XVxuICAgICAgICAgIDogW3sgY29udGFpbmVyUG9ydDogODAgfV1cbiAgICAgIH1cbiAgICApO1xuICAgIHRhZ1Jlc291cmNlKHRoaXMuY29udGFpbmVyRGVmaW5pdGlvbiwgcHJvcHMudGFncyk7XG4gIH1cblxuICBhZGRGYXJnYXRlU2VydmljZShwcm9wczogRmFyZ2F0ZUNsdXN0ZXJQcm9wcykge1xuICAgIHRoaXMuZmFyZ2F0ZVNlcnZpY2UgPSBuZXcgRmFyZ2F0ZVNlcnZpY2UoXG4gICAgICB0aGlzLFxuICAgICAgYCR7cHJvcHMuc2VydmljZU5hbWV9RmFyZ2F0ZVNlcnZpY2VgLFxuICAgICAge1xuICAgICAgICBjaXJjdWl0QnJlYWtlcjogeyByb2xsYmFjazogdHJ1ZSB9LFxuICAgICAgICBjbHVzdGVyOiB0aGlzLmNsdXN0ZXIsXG4gICAgICAgIGRlc2lyZWRDb3VudDogMixcbiAgICAgICAgZW5hYmxlRUNTTWFuYWdlZFRhZ3M6IHRydWUsXG4gICAgICAgIGVuYWJsZUV4ZWN1dGVDb21tYW5kOiB0cnVlLFxuICAgICAgICBwcm9wYWdhdGVUYWdzOiBQcm9wYWdhdGVkVGFnU291cmNlLlNFUlZJQ0UsXG4gICAgICAgIHNlcnZpY2VOYW1lOiBgJHtwcm9wcy5zZXJ2aWNlTmFtZX1gLFxuICAgICAgICB0YXNrRGVmaW5pdGlvbjogdGhpcy50YXNrRGVmaW5pdGlvblxuICAgICAgfVxuICAgICk7XG4gICAgdGFnUmVzb3VyY2UodGhpcy5mYXJnYXRlU2VydmljZSwgcHJvcHMudGFncyk7XG4gIH1cblxuICBhZGRTY2FsaW5nUG9saWN5KHByb3BzOiBGYXJnYXRlQ2x1c3RlclByb3BzKSB7XG4gICAgdGhpcy5zY2FsaW5nUG9saWN5ID0gbmV3IFRhcmdldFRyYWNraW5nU2NhbGluZ1BvbGljeShcbiAgICAgIHRoaXMsXG4gICAgICBgJHtwcm9wcy5zZXJ2aWNlTmFtZX1TY2FsaW5nUG9saWN5YCxcbiAgICAgIHtcbiAgICAgICAgcG9saWN5TmFtZTogYCR7cHJvcHMuc2VydmljZU5hbWV9U2NhbGluZ1BvbGljeWAsXG4gICAgICAgIHNjYWxpbmdUYXJnZXQ6IG5ldyBTY2FsYWJsZVRhcmdldChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIGAke3Byb3BzLnNlcnZpY2VOYW1lfXNjYWxhYmxlVGFyZ2V0YCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBtYXhDYXBhY2l0eTogMTAsXG4gICAgICAgICAgICBtaW5DYXBhY2l0eTogMixcbiAgICAgICAgICAgIHJlc291cmNlSWQ6IGBzZXJ2aWNlLyR7dGhpcy5jbHVzdGVyLmNsdXN0ZXJOYW1lfS8ke3RoaXMuZmFyZ2F0ZVNlcnZpY2Uuc2VydmljZU5hbWV9YCxcbiAgICAgICAgICAgIHNjYWxhYmxlRGltZW5zaW9uOiBcImVjczpzZXJ2aWNlOkRlc2lyZWRDb3VudFwiLFxuICAgICAgICAgICAgc2VydmljZU5hbWVzcGFjZTogU2VydmljZU5hbWVzcGFjZS5FQ1NcbiAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIHRhcmdldFZhbHVlOiA1MCxcbiAgICAgICAgc2NhbGVPdXRDb29sZG93bjogRHVyYXRpb24uc2Vjb25kcyg2MCksXG4gICAgICAgIHNjYWxlSW5Db29sZG93bjogRHVyYXRpb24uc2Vjb25kcyg2MCksXG4gICAgICAgIHByZWRlZmluZWRNZXRyaWM6XG4gICAgICAgICAgcHJvcHMuc2NhbGluZ1R5cGUgPT0gU2NhbGluZ1R5cGUuTUVNT1JZXG4gICAgICAgICAgICA/IFByZWRlZmluZWRNZXRyaWMuRUNTX1NFUlZJQ0VfQVZFUkFHRV9NRU1PUllfVVRJTElaQVRJT05cbiAgICAgICAgICAgIDogUHJlZGVmaW5lZE1ldHJpYy5FQ1NfU0VSVklDRV9BVkVSQUdFX0NQVV9VVElMSVpBVElPTlxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICByZWdpc3RlckxvYWRCYWxhbmNlclRhcmdldHMocHJvcHM6IEZhcmdhdGVDbHVzdGVyUHJvcHMpIHtcbiAgICB0aGlzLmZhcmdhdGVTZXJ2aWNlLnJlZ2lzdGVyTG9hZEJhbGFuY2VyVGFyZ2V0cyh7XG4gICAgICBjb250YWluZXJOYW1lOiB0aGlzLmNvbnRhaW5lckRlZmluaXRpb24uY29udGFpbmVyTmFtZSxcbiAgICAgIGNvbnRhaW5lclBvcnQ6IHRoaXMuY29udGFpbmVyRGVmaW5pdGlvbi5jb250YWluZXJQb3J0LFxuICAgICAgbmV3VGFyZ2V0R3JvdXBJZDogYCR7cHJvcHMuc2VydmljZU5hbWV9VGFyZ2V0R3JvdXBgLFxuICAgICAgbGlzdGVuZXI6IExpc3RlbmVyQ29uZmlnLmFwcGxpY2F0aW9uTGlzdGVuZXIodGhpcy5sb2FkQmFsYW5jZXJMaXN0ZW5lciwge1xuICAgICAgICBwb3J0OiBwcm9wcy5jb250YWluZXJQb3J0LFxuICAgICAgICBwcm90b2NvbDogQXBwbGljYXRpb25Qcm90b2NvbC5IVFRQLFxuICAgICAgICBoZWFsdGhDaGVjazoge1xuICAgICAgICAgIGludGVydmFsOiBEdXJhdGlvbi5zZWNvbmRzKDEyMCksXG4gICAgICAgICAgcGF0aDogcHJvcHMuaGVhbHRoQ2hlY2tQYXRoIHx8IFwiL1wiLFxuICAgICAgICAgIHBvcnQ6IHByb3BzLmNvbnRhaW5lclBvcnQgPyBgJHtwcm9wcy5jb250YWluZXJQb3J0fWAgOiBcInRyYWZmaWMtcG9ydFwiLFxuICAgICAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLnNlY29uZHMoMTApXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSk7XG4gIH1cblxuICBhZGRMb2FkQmFsYW5jZXIocHJvcHM6IEZhcmdhdGVDbHVzdGVyUHJvcHMpIHtcbiAgICB0aGlzLmxvYWRCYWxhbmNlciA9IG5ldyBBcHBsaWNhdGlvbkxvYWRCYWxhbmNlcihcbiAgICAgIHRoaXMsXG4gICAgICBgJHtwcm9wcy5jbHVzdGVyTmFtZX1Mb2FkQmFsYW5jZXJgLFxuICAgICAge1xuICAgICAgICB2cGM6IHRoaXMuY2x1c3Rlci52cGMsXG4gICAgICAgIGludGVybmV0RmFjaW5nOiB0cnVlLFxuICAgICAgICBsb2FkQmFsYW5jZXJOYW1lOiBgJHtwcm9wcy5zZXJ2aWNlTmFtZX1Mb2FkQmFsYW5jZXJgLFxuICAgICAgICB2cGNTdWJuZXRzOiB7XG4gICAgICAgICAgc3VibmV0VHlwZTogU3VibmV0VHlwZS5QVUJMSUNcbiAgICAgICAgfVxuICAgICAgfVxuICAgICk7XG4gICAgdGFnUmVzb3VyY2UodGhpcy5sb2FkQmFsYW5jZXIsIHByb3BzLnRhZ3MpO1xuXG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCBgJHtwcm9wcy5jbHVzdGVyTmFtZX1Mb2FkQmFsYW5jZXJEbnNOYW1lYCwge1xuICAgICAga2V5OiBgJHtwcm9wcy5jbHVzdGVyTmFtZX1Mb2FkQmFsYW5jZXJEbnNOYW1lYCxcbiAgICAgIGV4cG9ydE5hbWU6IGAke3Byb3BzLmNsdXN0ZXJOYW1lfUxvYWRCYWxhbmNlckRuc05hbWVgLFxuICAgICAgdmFsdWU6IHRoaXMubG9hZEJhbGFuY2VyLmxvYWRCYWxhbmNlckRuc05hbWVcbiAgICB9KTtcbiAgfVxuXG4gIGFkZExvYWRCYWxhbmNlckxpc3RlbmVyKHByb3BzOiBGYXJnYXRlQ2x1c3RlclByb3BzKSB7XG4gICAgaWYgKCEhdGhpcy5jZXJ0aWZpY2F0ZSkge1xuICAgICAgdGhpcy5sb2FkQmFsYW5jZXJMaXN0ZW5lciA9IHRoaXMubG9hZEJhbGFuY2VyLmFkZExpc3RlbmVyKFxuICAgICAgICBgJHtwcm9wcy5zZXJ2aWNlTmFtZX1MaXN0ZW5lcmAsXG4gICAgICAgIHtcbiAgICAgICAgICBwb3J0OiBwcm9wcy5wcm90b2NvbCA9PSBQcm90b2NvbC5IVFRQID8gODAgOiA0NDMsXG4gICAgICAgICAgY2VydGlmaWNhdGVzOiBbdGhpcy5jZXJ0aWZpY2F0ZV1cbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sb2FkQmFsYW5jZXJMaXN0ZW5lciA9IHRoaXMubG9hZEJhbGFuY2VyLmFkZExpc3RlbmVyKFxuICAgICAgICBgJHtwcm9wcy5zZXJ2aWNlTmFtZX1MaXN0ZW5lcmAsXG4gICAgICAgIHtcbiAgICAgICAgICBwb3J0OiBwcm9wcy5wcm90b2NvbCA9PSBQcm90b2NvbC5IVFRQID8gODAgOiA0NDNcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0YWdSZXNvdXJjZSh0aGlzLmxvYWRCYWxhbmNlckxpc3RlbmVyLCBwcm9wcy50YWdzKTtcbiAgfVxuXG4gIGFkZEhvc3RlZFpvbmUocHJvcHM6IEZhcmdhdGVDbHVzdGVyUHJvcHMpIHtcbiAgICBpZiAoIXByb3BzLnBhcmVudERvbWFpbikgcmV0dXJuO1xuXG4gICAgdGhpcy5ob3N0ZWRab25lID0gSG9zdGVkWm9uZS5mcm9tSG9zdGVkWm9uZUF0dHJpYnV0ZXModGhpcywgXCJob3N0ZWRab25lXCIsIHtcbiAgICAgIGhvc3RlZFpvbmVJZDogRm4uaW1wb3J0VmFsdWUoXG4gICAgICAgIGAke3Byb3BzLnBhcmVudERvbWFpbi5zcGxpdChcIi5cIikuam9pbihcIlwiKX1Ib3N0ZWRab25lSWRgXG4gICAgICApLFxuICAgICAgem9uZU5hbWU6IHByb3BzLnBhcmVudERvbWFpblxuICAgIH0pO1xuXG4gICAgdGhpcy5jZXJ0aWZpY2F0ZSA9IG5ldyBDZXJ0aWZpY2F0ZShcbiAgICAgIHRoaXMsXG4gICAgICBgJHtwcm9wcy5zZXJ2aWNlTmFtZX1DZXJ0aWZpY2F0ZWAsXG4gICAgICB7XG4gICAgICAgIGRvbWFpbk5hbWU6IGAke3Byb3BzLnNlcnZpY2VOYW1lfS4ke3Byb3BzLmNsdXN0ZXJOYW1lfS4ke3Byb3BzLnBhcmVudERvbWFpbn1gLFxuICAgICAgICB2YWxpZGF0aW9uOiBDZXJ0aWZpY2F0ZVZhbGlkYXRpb24uZnJvbURucyh0aGlzLmhvc3RlZFpvbmUpXG4gICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMuYVJlY29yZCA9IG5ldyBBUmVjb3JkKFxuICAgICAgdGhpcyxcbiAgICAgIGAke3Byb3BzLnNlcnZpY2VOYW1lfS4ke3Byb3BzLmNsdXN0ZXJOYW1lfS4ke3Byb3BzLnBhcmVudERvbWFpbn1BUmVjb3JkYCxcbiAgICAgIHtcbiAgICAgICAgcmVjb3JkTmFtZTogYCR7cHJvcHMuc2VydmljZU5hbWV9LiR7cHJvcHMuY2x1c3Rlck5hbWV9LiR7cHJvcHMucGFyZW50RG9tYWlufWAsXG4gICAgICAgIHpvbmU6IHRoaXMuaG9zdGVkWm9uZSxcbiAgICAgICAgdGFyZ2V0OiBSZWNvcmRUYXJnZXQuZnJvbUFsaWFzKFxuICAgICAgICAgIG5ldyBMb2FkQmFsYW5jZXJUYXJnZXQodGhpcy5sb2FkQmFsYW5jZXIpXG4gICAgICAgIClcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgZ2V0SW1hZ2UocHJvcHM6IEZhcmdhdGVDbHVzdGVyUHJvcHMpOiBDb250YWluZXJJbWFnZSB7XG4gICAgY29uc29sZS5sb2coXCJHRVQgSU1BR0U6XCIsIHByb3BzKTtcblxuICAgIGlmICghcHJvcHMuZWNyUmVwb3NpdG9yeSlcbiAgICAgIHJldHVybiBDb250YWluZXJJbWFnZS5mcm9tUmVnaXN0cnkoXCJhbWF6b24vYW1hem9uLWVjcy1zYW1wbGVcIik7XG4gICAgaWYgKHByb3BzLmVjclJlcG9zaXRvcnkgaW5zdGFuY2VvZiBDb250YWluZXJJbWFnZSlcbiAgICAgIHJldHVybiBwcm9wcy5lY3JSZXBvc2l0b3J5O1xuICAgIGlmIChwcm9wcy5lY3JSZXBvc2l0b3J5IGluc3RhbmNlb2YgUmVwb3NpdG9yeSkge1xuICAgICAgcmV0dXJuIENvbnRhaW5lckltYWdlLmZyb21FY3JSZXBvc2l0b3J5KHByb3BzLmVjclJlcG9zaXRvcnksIFwibGF0ZXN0XCIpO1xuICAgIH1cbiAgICByZXR1cm4gQ29udGFpbmVySW1hZ2UuZnJvbVJlZ2lzdHJ5KFwiYW1hem9uL2FtYXpvbi1lY3Mtc2FtcGxlXCIpO1xuICB9XG5cbiAgc3RhdGljIGJ1aWxkKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IEZhcmdhdGVDbHVzdGVyUHJvcHNcbiAgKTogKHNiOiBTdGFja0J1aWxkZXIpID0+IENvbnN0cnVjdCB7XG4gICAgcmV0dXJuIChzYjogU3RhY2tCdWlsZGVyKSA9PiB7XG4gICAgICBjb25zdCBuZXdQcm9wczogRmFyZ2F0ZUNsdXN0ZXJQcm9wcyA9IHtcbiAgICAgICAgLi4ucHJvcHMsXG4gICAgICAgIC4uLntcbiAgICAgICAgICB2cGM6IChzYi5nZXROZXR3b3JrKCkgYXMgSVZwYykgfHwgcHJvcHMudnBjXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICByZXR1cm4gbmV3IHRoaXMoc2IuZ2V0U3RhY2soKSwgaWQsIG5ld1Byb3BzKTtcbiAgICB9O1xuICB9XG59XG4iXX0=
|
|
307
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3Jlc291cmNlcy9hd3MvY29tcHV0ZS9lY3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaURBVzZCO0FBQzdCLGlEQU02QjtBQUM3QiwyQ0FBdUM7QUFFdkMsNkNBQXdEO0FBQ3hELHVGQUlnRDtBQUNoRCw0REFBcUQ7QUFDckQsaURBUTZCO0FBQzdCLHVGQUtnRDtBQUNoRCxpREFBMEQ7QUFDMUQsdUVBQXdEO0FBQ3hELCtFQUc0QztBQUM1Qyx5REFLaUM7QUFDakMseUVBQXFFO0FBQ3JFLGlEQUFpRDtBQUdqRCxzREFBbUQ7QUFDbkQsaUVBQWlGO0FBSWpGLElBQVksUUFHWDtBQUhELFdBQVksUUFBUTtJQUNsQix1Q0FBSSxDQUFBO0lBQ0oseUNBQUssQ0FBQTtBQUNQLENBQUMsRUFIVyxRQUFRLHdCQUFSLFFBQVEsUUFHbkI7QUFFRCxJQUFZLFdBR1g7QUFIRCxXQUFZLFdBQVc7SUFDckIsc0RBQTBELENBQUE7SUFDMUQsNERBQWdFLENBQUE7QUFDbEUsQ0FBQyxFQUhXLFdBQVcsMkJBQVgsV0FBVyxRQUd0QjtBQStDRCxNQUFxQixjQUFlLFNBQVEsc0JBQVM7SUFxQm5ELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBMEI7UUFDbEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQVBYLFlBQU8sR0FFWCxFQUFFLENBQUM7UUFPTCxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUVuQixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU1QixJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWTtZQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFcEQsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV4QyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDO1FBRW5ELGlEQUFpRDtRQUNqRCxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FDckMsS0FBSyxDQUFDLGtCQUFrQixFQUN4QixjQUFJLENBQUMsUUFBUSxDQUNkLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUEwQjtRQUNuQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksaUJBQVUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsV0FBVyxFQUFFLEVBQUU7WUFDMUQsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHO1lBQ2QsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXO1lBQzlCLG1CQUFtQixFQUFFLDJCQUFpQixDQUFDLE9BQU87WUFDOUMsOEJBQThCLEVBQUUsSUFBSTtTQUNyQyxDQUFDLENBQUM7UUFDSCxJQUFBLHFCQUFXLEVBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVEOzs7T0FHRztJQUNILFVBQVUsQ0FBQyxLQUEwQjtRQUNuQyxvQkFBb0I7UUFDcEIsTUFBTSxlQUFlLEdBQUcsMkJBQU0sQ0FBQyxnQkFBZ0IsQ0FDN0MsSUFBSSxFQUNKLEdBQUcsS0FBSyxDQUFDLFdBQVcsUUFBUSxFQUM1QixJQUFJLEtBQUssQ0FBQyxXQUFXLElBQUksS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUM3QyxDQUFDO1FBRUYsS0FBSyxNQUFNLFdBQVcsSUFBSSxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUNqRCxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxHQUFHLGdCQUFTLENBQUMsa0JBQWtCLENBQ3RELGVBQWUsRUFDZixXQUFXLENBQ1osQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxhQUFhLENBQUMsS0FBMEI7UUFDdEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxzQkFBc0I7WUFBRSxPQUFPO1FBRTFDLEtBQUssTUFBTSxHQUFHLElBQUksS0FBSyxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDL0MsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRXZELHdGQUF3RjtZQUV4RixtQ0FBbUM7WUFDbkMsTUFBTSxPQUFPLEdBQUcsMkJBQU0sQ0FBQyxnQkFBZ0IsQ0FDckMsSUFBSSxFQUNKLFlBQVksQ0FBQyxFQUFFLEVBQ2YsWUFBWSxDQUFDLElBQUksQ0FDbEIsQ0FBQztZQUVGLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsZ0JBQVMsQ0FBQyxrQkFBa0IsQ0FDOUMsT0FBTyxFQUNQLFlBQVksQ0FBQyxLQUFLLENBQ25CLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVELGdCQUFnQixDQUFDLEtBQTBCO1FBQ3pDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxjQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLFdBQVcsZUFBZSxFQUFFO1lBQ3ZFLFFBQVEsRUFBRSxHQUFHLEtBQUssQ0FBQyxXQUFXLGVBQWU7WUFDN0MsV0FBVyxFQUFFLEdBQUcsS0FBSyxDQUFDLFdBQVcsaUJBQWlCO1lBQ2xELGVBQWUsRUFBRTtnQkFDZjtvQkFDRSxnQkFBZ0IsRUFDZCx1RUFBdUU7aUJBQzFFO2FBQ0Y7WUFDRCxjQUFjLEVBQUU7Z0JBQ2QsQ0FBQyxhQUFhLENBQUMsRUFBRSxJQUFJLHdCQUFjLENBQUM7b0JBQ2xDLFVBQVUsRUFBRTt3QkFDVixJQUFJLHlCQUFlLENBQUM7NEJBQ2xCLE9BQU8sRUFBRTtnQ0FDUCwrQkFBK0I7Z0NBQy9CLCtCQUErQjs2QkFDaEM7NEJBQ0QsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsbUNBQW1DO3lCQUNyRCxDQUFDO3FCQUNIO2lCQUNGLENBQUM7Z0JBQ0YsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLElBQUksd0JBQWMsQ0FBQztvQkFDckMsVUFBVSxFQUFFO3dCQUNWLElBQUkseUJBQWUsQ0FBQzs0QkFDbEIsT0FBTyxFQUFFLENBQUMsYUFBYSxDQUFDOzRCQUN4QixTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxnQ0FBZ0M7eUJBQ2xELENBQUM7cUJBQ0g7aUJBQ0YsQ0FBQztnQkFDRixDQUFDLG1CQUFtQixDQUFDLEVBQUUsSUFBSSx3QkFBYyxDQUFDO29CQUN4QyxVQUFVLEVBQUU7d0JBQ1YsSUFBSSx5QkFBZSxDQUFDOzRCQUNsQixPQUFPLEVBQUU7Z0NBQ1Asa0NBQWtDO2dDQUNsQywrQkFBK0I7Z0NBQy9CLGdDQUFnQztnQ0FDaEMsNkJBQTZCOzZCQUM5Qjs0QkFDRCxNQUFNLEVBQUUsZ0JBQU0sQ0FBQyxLQUFLOzRCQUNwQixTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUM7eUJBQ2pCLENBQUM7cUJBQ0g7aUJBQ0YsQ0FBQzthQUNIO1lBQ0QsU0FBUyxFQUFFLElBQUksNEJBQWtCLENBQy9CLElBQUksMEJBQWdCLENBQUMseUJBQXlCLENBQUMsQ0FDaEQ7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsS0FBMEI7UUFDMUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLCtCQUFxQixDQUM3QyxJQUFJLEVBQ0osR0FBRyxLQUFLLENBQUMsV0FBVyxnQkFBZ0IsRUFDcEM7WUFDRSxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUcsSUFBSSxHQUFHO1lBQ3JCLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYTtZQUNqQyxRQUFRLEVBQUUsSUFBSSxjQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLFdBQVcsVUFBVSxFQUFFO2dCQUN2RCxRQUFRLEVBQUUsR0FBRyxLQUFLLENBQUMsV0FBVyxVQUFVO2dCQUN4QyxXQUFXLEVBQUUsR0FBRyxLQUFLLENBQUMsV0FBVyxZQUFZO2dCQUM3QyxjQUFjLEVBQUUsS0FBSyxDQUFDLHNCQUFzQjtnQkFDNUMsZUFBZSxFQUFFLEtBQUssQ0FBQyx1QkFBdUI7Z0JBQzlDLFNBQVMsRUFBRSxJQUFJLDRCQUFrQixDQUMvQixJQUFJLDBCQUFnQixDQUFDLHlCQUF5QixDQUFDLENBQ2hEO2FBQ0YsQ0FBQztZQUNGLGNBQWMsRUFBRSxLQUFLLENBQUMsY0FBYyxJQUFJLEdBQUc7U0FDNUMsQ0FDRixDQUFDO1FBQ0YsSUFBQSxxQkFBVyxFQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxLQUEwQjtRQUMvQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQ3pELEdBQUcsS0FBSyxDQUFDLFdBQVcscUJBQXFCLEVBQ3pDO1lBQ0UsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO1lBQzNCLGFBQWEsRUFBRSxLQUFLLENBQUMsV0FBVztZQUNoQyxXQUFXLEVBQUU7Z0JBQ1gsR0FBRyxLQUFLLENBQUMsb0JBQW9CO2FBQzlCO1lBQ0QsT0FBTyxFQUFFLEtBQUssQ0FBQyxnQkFBZ0I7WUFDL0IsT0FBTyxFQUFFO2dCQUNQLEdBQUcsSUFBSSxDQUFDLE9BQU87YUFDaEI7WUFDRCxvQ0FBb0M7WUFDcEMsaUJBQWlCO1lBQ2pCLGVBQWU7WUFDZixtQkFBbUI7WUFDbkIsd0ZBQXdGO1lBQ3hGLE1BQU07WUFDTixLQUFLO1lBQ0wsT0FBTyxFQUFFLElBQUksc0JBQVksQ0FBQztnQkFDeEIsWUFBWSxFQUFFLFFBQVEsS0FBSyxDQUFDLFdBQVcsSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFO2dCQUM5RCxZQUFZLEVBQUUsRUFBRTthQUNqQixDQUFDO1lBQ0YsWUFBWSxFQUFFLEtBQUssQ0FBQyxhQUFhO2dCQUMvQixDQUFDLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQzFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsYUFBYSxFQUFFLEVBQUUsRUFBRSxDQUFDO1NBQzVCLENBQ0YsQ0FBQztRQUNGLElBQUEscUJBQVcsRUFBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxLQUEwQjtRQUMxQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksd0JBQWMsQ0FDdEMsSUFBSSxFQUNKLEdBQUcsS0FBSyxDQUFDLFdBQVcsZ0JBQWdCLEVBQ3BDO1lBQ0UsY0FBYyxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtZQUNsQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDckIsWUFBWSxFQUFFLENBQUM7WUFDZixvQkFBb0IsRUFBRSxJQUFJO1lBQzFCLG9CQUFvQixFQUFFLElBQUk7WUFDMUIsYUFBYSxFQUFFLDZCQUFtQixDQUFDLE9BQU87WUFDMUMsV0FBVyxFQUFFLEdBQUcsS0FBSyxDQUFDLFdBQVcsRUFBRTtZQUNuQyxjQUFjLEVBQUUsSUFBSSxDQUFDLGNBQWM7U0FDcEMsQ0FDRixDQUFDO1FBQ0YsSUFBQSxxQkFBVyxFQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUEwQjtRQUN6QyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksd0RBQTJCLENBQ2xELElBQUksRUFDSixHQUFHLEtBQUssQ0FBQyxXQUFXLGVBQWUsRUFDbkM7WUFDRSxVQUFVLEVBQUUsR0FBRyxLQUFLLENBQUMsV0FBVyxlQUFlO1lBQy9DLGFBQWEsRUFBRSxJQUFJLDJDQUFjLENBQy9CLElBQUksRUFDSixHQUFHLEtBQUssQ0FBQyxXQUFXLGdCQUFnQixFQUNwQztnQkFDRSxXQUFXLEVBQUUsRUFBRTtnQkFDZixXQUFXLEVBQUUsQ0FBQztnQkFDZCxVQUFVLEVBQUUsV0FBVyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRTtnQkFDcEYsaUJBQWlCLEVBQUUsMEJBQTBCO2dCQUM3QyxnQkFBZ0IsRUFBRSw2Q0FBZ0IsQ0FBQyxHQUFHO2FBQ3ZDLENBQ0Y7WUFDRCxXQUFXLEVBQUUsRUFBRTtZQUNmLGdCQUFnQixFQUFFLHNCQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUN0QyxlQUFlLEVBQUUsc0JBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ3JDLGdCQUFnQixFQUNkLEtBQUssQ0FBQyxXQUFXLElBQUksV0FBVyxDQUFDLE1BQU07Z0JBQ3JDLENBQUMsQ0FBQyw2Q0FBZ0IsQ0FBQyxzQ0FBc0M7Z0JBQ3pELENBQUMsQ0FBQyw2Q0FBZ0IsQ0FBQyxtQ0FBbUM7U0FDM0QsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELDJCQUEyQixDQUFDLEtBQTBCO1FBQ3BELElBQUksQ0FBQyxjQUFjLENBQUMsMkJBQTJCLENBQUM7WUFDOUMsYUFBYSxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhO1lBQ3JELGFBQWEsRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYTtZQUNyRCxnQkFBZ0IsRUFBRSxHQUFHLEtBQUssQ0FBQyxXQUFXLGFBQWE7WUFDbkQsUUFBUSxFQUFFLHdCQUFjLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFO2dCQUN0RSxJQUFJLEVBQUUsS0FBSyxDQUFDLGFBQWE7Z0JBQ3pCLFFBQVEsRUFBRSxnREFBbUIsQ0FBQyxJQUFJO2dCQUNsQyxXQUFXLEVBQUU7b0JBQ1gsUUFBUSxFQUFFLHNCQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztvQkFDL0IsSUFBSSxFQUFFLEtBQUssQ0FBQyxlQUFlLElBQUksR0FBRztvQkFDbEMsSUFBSSxFQUFFLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQyxjQUFjO29CQUNyRSxPQUFPLEVBQUUsc0JBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2lCQUM5QjthQUNGLENBQUM7U0FDSCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQTBCO1FBQ3hDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxvREFBdUIsQ0FDN0MsSUFBSSxFQUNKLEdBQUcsS0FBSyxDQUFDLFdBQVcsY0FBYyxFQUNsQztZQUNFLEdBQUcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUc7WUFDckIsY0FBYyxFQUFFLElBQUk7WUFDcEIsZ0JBQWdCLEVBQUUsR0FBRyxLQUFLLENBQUMsV0FBVyxjQUFjO1lBQ3BELFVBQVUsRUFBRTtnQkFDVixVQUFVLEVBQUUsb0JBQVUsQ0FBQyxNQUFNO2FBQzlCO1NBQ0YsQ0FDRixDQUFDO1FBQ0YsSUFBQSxxQkFBVyxFQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTNDLElBQUkscUJBQVMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsV0FBVyxxQkFBcUIsRUFBRTtZQUM3RCxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsV0FBVyxxQkFBcUI7WUFDOUMsVUFBVSxFQUFFLEdBQUcsS0FBSyxDQUFDLFdBQVcscUJBQXFCO1lBQ3JELEtBQUssRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLG1CQUFtQjtTQUM3QyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsdUJBQXVCLENBQUMsS0FBMEI7UUFDaEQsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FDdkQsR0FBRyxLQUFLLENBQUMsV0FBVyxVQUFVLEVBQzlCO2dCQUNFLElBQUksRUFBRSxLQUFLLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRztnQkFDaEQsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQzthQUNqQyxDQUNGLENBQUM7UUFDSixDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FDdkQsR0FBRyxLQUFLLENBQUMsV0FBVyxVQUFVLEVBQzlCO2dCQUNFLElBQUksRUFBRSxLQUFLLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRzthQUNqRCxDQUNGLENBQUM7UUFDSixDQUFDO1FBRUQsSUFBQSxxQkFBVyxFQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVELGFBQWEsQ0FBQyxLQUEwQjtRQUN0QyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVk7WUFBRSxPQUFPO1FBRWhDLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ25DLGtEQUFrRDtZQUNsRCxJQUFJLFVBQVUsR0FBRyxJQUFJLHVCQUFlLENBQ2xDLElBQUksRUFDSixHQUFHLEtBQUssQ0FBQyxXQUFXLFlBQVksRUFDaEM7Z0JBQ0UsUUFBUSxFQUFFLEtBQUssQ0FBQyxZQUFZLENBQUMsVUFBVTthQUN4QyxDQUNGLENBQUM7WUFFRixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQ3ZELENBQUM7YUFBTSxDQUFDO1lBQ04seUNBQXlDO1lBQ3pDLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUMxRSxDQUFDO1FBRUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDcEMsbURBQW1EO1lBQ25ELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxvQ0FBVyxDQUNoQyxJQUFJLEVBQ0osR0FBRyxLQUFLLENBQUMsV0FBVyxhQUFhLEVBQ2pDO2dCQUNFLFVBQVUsRUFBRSxLQUFLLENBQUMsWUFBWSxDQUFDLFVBQVU7Z0JBQ3pDLFVBQVUsRUFBRSw4Q0FBcUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQzthQUMzRCxDQUNGLENBQUM7UUFDSixDQUFDO1FBRUQsaUZBQWlGO1FBQ2pGLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxxQkFBTyxDQUN4QixJQUFJLEVBQ0osR0FBRyxLQUFLLENBQUMsV0FBVyxJQUFJLEtBQUssQ0FBQyxXQUFXLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxVQUFVLFNBQVMsRUFDbkY7WUFDRSxVQUFVLEVBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxVQUFVO1lBQ3pDLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVTtZQUNyQixNQUFNLEVBQUUsMEJBQVksQ0FBQyxTQUFTLENBQzVCLElBQUksd0NBQWtCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUMxQztTQUNGLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCxRQUFRLENBQUMsS0FBMEI7UUFDakMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFakMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhO1lBQ3RCLE9BQU8sd0JBQWMsQ0FBQyxZQUFZLENBQUMsMEJBQTBCLENBQUMsQ0FBQztRQUNqRSxJQUFJLEtBQUssQ0FBQyxhQUFhLFlBQVksd0JBQWM7WUFDL0MsT0FBTyxLQUFLLENBQUMsYUFBYSxDQUFDO1FBQzdCLElBQUksS0FBSyxDQUFDLGFBQWEsWUFBWSxvQkFBVSxFQUFFLENBQUM7WUFDOUMsT0FBTyx3QkFBYyxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDekUsQ0FBQztRQUNELE9BQU8sd0JBQWMsQ0FBQyxZQUFZLENBQUMsMEJBQTBCLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQUssQ0FDVixFQUFVLEVBQ1YsS0FBMEI7UUFFMUIsT0FBTyxDQUFDLEVBQWdCLEVBQUUsRUFBRTtZQUMxQixNQUFNLFFBQVEsR0FBd0I7Z0JBQ3BDLEdBQUcsS0FBSztnQkFDUixHQUFHO29CQUNELEdBQUcsRUFBRyxFQUFFLENBQUMsVUFBVSxFQUFXLElBQUksS0FBSyxDQUFDLEdBQUc7aUJBQzVDO2FBQ0YsQ0FBQztZQUNGLE9BQU8sSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMvQyxDQUFDLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUF0WUQsaUNBc1lDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQXdzTG9nRHJpdmVyLFxuICBDbHVzdGVyIGFzIENka0NsdXN0ZXIsXG4gIENvbnRhaW5lckltYWdlLFxuICBGYXJnYXRlU2VydmljZSxcbiAgRmFyZ2F0ZVRhc2tEZWZpbml0aW9uLFxuICBMaXN0ZW5lckNvbmZpZyxcbiAgUHJvcGFnYXRlZFRhZ1NvdXJjZSxcbiAgUmVwb3NpdG9yeUltYWdlLFxuICBDb250YWluZXJEZWZpbml0aW9uLFxuICBDb250YWluZXJJbnNpZ2h0c1xufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjc1wiO1xuaW1wb3J0IHtcbiAgQ29ubmVjdGlvbnMsXG4gIElDb25uZWN0YWJsZSxcbiAgSVZwYyxcbiAgUG9ydCxcbiAgU3VibmV0VHlwZVxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IFN0YWNrQnVpbGRlciB9IGZyb20gXCIuLi9iYXNlL2F3c1N0YWNrXCI7XG5pbXBvcnQgeyBEdXJhdGlvbiwgRm4sIFNlY3JldFZhbHVlIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQge1xuICBBcHBsaWNhdGlvbkxpc3RlbmVyLFxuICBBcHBsaWNhdGlvbkxvYWRCYWxhbmNlcixcbiAgQXBwbGljYXRpb25Qcm90b2NvbFxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVsYXN0aWNsb2FkYmFsYW5jaW5ndjJcIjtcbmltcG9ydCB0YWdSZXNvdXJjZSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvdGFnUmVzb3VyY2VcIjtcbmltcG9ydCB7XG4gIENvbXBvc2l0ZVByaW5jaXBhbCxcbiAgRWZmZWN0LFxuICBJTWFuYWdlZFBvbGljeSxcbiAgUG9saWN5RG9jdW1lbnQsXG4gIFBvbGljeVN0YXRlbWVudCxcbiAgUm9sZSxcbiAgU2VydmljZVByaW5jaXBhbFxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuaW1wb3J0IHtcbiAgUHJlZGVmaW5lZE1ldHJpYyxcbiAgU2NhbGFibGVUYXJnZXQsXG4gIFNlcnZpY2VOYW1lc3BhY2UsXG4gIFRhcmdldFRyYWNraW5nU2NhbGluZ1BvbGljeVxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWFwcGxpY2F0aW9uYXV0b3NjYWxpbmdcIjtcbmltcG9ydCB7IFNlY3JldCBhcyBFY3NTZWNyZXQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjc1wiO1xuaW1wb3J0IHsgU2VjcmV0IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zZWNyZXRzbWFuYWdlclwiO1xuaW1wb3J0IHtcbiAgQ2VydGlmaWNhdGUsXG4gIENlcnRpZmljYXRlVmFsaWRhdGlvblxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNlcnRpZmljYXRlbWFuYWdlclwiO1xuaW1wb3J0IHtcbiAgQVJlY29yZCxcbiAgSG9zdGVkWm9uZSxcbiAgUmVjb3JkVGFyZ2V0LFxuICBJSG9zdGVkWm9uZVxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXJvdXRlNTNcIjtcbmltcG9ydCB7IExvYWRCYWxhbmNlclRhcmdldCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtcm91dGU1My10YXJnZXRzXCI7XG5pbXBvcnQgeyBSZXBvc2l0b3J5IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lY3JcIjtcblxuaW1wb3J0IHsgS2V5VmFsdWUgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXNcIjtcbmltcG9ydCB7IENmbk91dHB1dCB9IGZyb20gXCIuLi91dGlsaXRpZXMvY2ZuT3V0cHV0XCI7XG5pbXBvcnQgeyBIb3N0ZWRab25lIGFzIEZqYWxsSG9zdGVkWm9uZSB9IGZyb20gXCIuLi8uLi8uLi9wYXR0ZXJucy9hd3MvaG9zdGVkWm9uZVwiO1xuXG5pbXBvcnQgeyBTZWNyZXRJbXBvcnQgfSBmcm9tIFwiLi4vc2VjcmV0c1wiO1xuXG5leHBvcnQgZW51bSBQcm90b2NvbCB7XG4gIEhUVFAsXG4gIEhUVFBTXG59XG5cbmV4cG9ydCBlbnVtIFNjYWxpbmdUeXBlIHtcbiAgQ1BVID0gUHJlZGVmaW5lZE1ldHJpYy5FQ1NfU0VSVklDRV9BVkVSQUdFX0NQVV9VVElMSVpBVElPTixcbiAgTUVNT1JZID0gUHJlZGVmaW5lZE1ldHJpYy5FQ1NfU0VSVklDRV9BVkVSQUdFX01FTU9SWV9VVElMSVpBVElPTlxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbnRhaW5lclNlY3JldCB7XG4gIFtrZXk6IHN0cmluZ106IFNlY3JldFZhbHVlO1xufVxuXG4vKipcbiAqIERvbWFpbkNvbmZpZ3VyYXRpb25cbiAqIC0gV2hlbiBzdXBwbGllZCBhIGRvbWFpbiBuYW1lLCBhIGhvc3RlZCB6b25lLCBjZXJ0aWZpY2F0ZSBhbmQgQVJlY29yZCB3aWxsIGJlIGNyZWF0ZWRcbiAqIC0gV2hlbiBzdXBwbGllZCBhIGRvbWFpbiBuYW1lIGFuZCBob3N0ZWQgem9uZSwgYSBjZXJ0aWZpY2F0ZSBhbmQgQVJlY29yZCB3aWxsIGJlIGNyZWF0ZWRcbiAqIC0gV2hlbiBhbGwgcHJvcGVydGllcyBhcmUgc3VwcGxpZWQgb25seSBhIHRhcmdldCB3aWxsIGJlIGNyZWF0ZWRcbiAqL1xuZXhwb3J0IHR5cGUgRG9tYWluQ29uZmlnID0ge1xuICBkb21haW5OYW1lOiBzdHJpbmc7XG4gIGhvc3RlZFpvbmU/OiBGamFsbEhvc3RlZFpvbmU7XG4gIGNlcnRpZmljYXRlPzogQ2VydGlmaWNhdGU7XG59O1xuXG5leHBvcnQgdHlwZSBGYXJnYXRlQ2x1c3RlclByb3BzID0ge1xuICBlY3JSZXBvc2l0b3J5OiBSZXBvc2l0b3J5IHwgUmVwb3NpdG9yeUltYWdlO1xuICBjbHVzdGVyTmFtZTogc3RyaW5nO1xuICBjb250YWluZXJDb21tYW5kPzogc3RyaW5nW107XG4gIGNvbnRhaW5lckVudmlyb25tZW50PzogS2V5VmFsdWU7XG4gIGNvbnRhaW5lclNlY3JldHM/OiBDb250YWluZXJTZWNyZXQ7XG4gIGNvbnRhaW5lclNlY3JldHNJbXBvcnQ/OiB7XG4gICAgW2tleTogc3RyaW5nXTogU2VjcmV0SW1wb3J0O1xuICB9O1xuICBjb250YWluZXJQb3J0PzogbnVtYmVyO1xuICBjcHU/OiBudW1iZXI7XG4gIGRhdGFiYXNlQ29ubmVjdGlvbj86IElDb25uZWN0YWJsZTtcbiAgZG9tYWluQ29uZmlnPzogRG9tYWluQ29uZmlnO1xuICBkZXNpcmVkQ291bnQ/OiBudW1iZXI7XG4gIGhlYWx0aENoZWNrUGF0aD86IHN0cmluZztcbiAgbGlzdGVuZXJQb3J0PzogbnVtYmVyO1xuICBtZW1vcnlMaW1pdE1pQj86IG51bWJlcjtcbiAgcHVibGljTG9hZEJhbGFuY2VyPzogYm9vbGVhbjtcbiAgcHJvdG9jb2w6IFByb3RvY29sO1xuICBzY2FsaW5nVHlwZT86IFNjYWxpbmdUeXBlO1xuICBzZXJ2aWNlTmFtZTogc3RyaW5nO1xuICB0YWdzOiBLZXlWYWx1ZTtcbiAgdGFza1JvbGVJbmxpbmVQb2xpY2llcz86IHtcbiAgICBbbmFtZTogc3RyaW5nXTogUG9saWN5RG9jdW1lbnQ7XG4gIH07XG4gIHRhc2tSb2xlTWFuYWdlZFBvbGljaWVzPzogSU1hbmFnZWRQb2xpY3lbXTtcbiAgdnBjPzogSVZwYztcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZhcmdhdGVDbHVzdGVyIGV4dGVuZHMgQ29uc3RydWN0IGltcGxlbWVudHMgSUNvbm5lY3RhYmxlIHtcbiAgcHVibGljIGNvbm5lY3Rpb25zOiBDb25uZWN0aW9ucztcblxuICBwcml2YXRlIGNsdXN0ZXI6IENka0NsdXN0ZXI7XG4gIHByaXZhdGUgbG9hZEJhbGFuY2VyOiBBcHBsaWNhdGlvbkxvYWRCYWxhbmNlcjtcbiAgcHJpdmF0ZSBleGVjdXRpb25Sb2xlOiBSb2xlO1xuICBwcml2YXRlIHRhc2tEZWZpbml0aW9uOiBGYXJnYXRlVGFza0RlZmluaXRpb247XG4gIHByaXZhdGUgY29udGFpbmVyRGVmaW5pdGlvbjogQ29udGFpbmVyRGVmaW5pdGlvbjtcbiAgcHJpdmF0ZSBmYXJnYXRlU2VydmljZTogRmFyZ2F0ZVNlcnZpY2U7XG4gIHByaXZhdGUgc2NhbGluZ1BvbGljeTogVGFyZ2V0VHJhY2tpbmdTY2FsaW5nUG9saWN5O1xuICBwcml2YXRlIGhvc3RlZFpvbmU6IElIb3N0ZWRab25lO1xuICBwcml2YXRlIGNlcnRpZmljYXRlOiBDZXJ0aWZpY2F0ZTtcbiAgcHJpdmF0ZSBhUmVjb3JkOiBBUmVjb3JkO1xuICBwcml2YXRlIGxvYWRCYWxhbmNlckxpc3RlbmVyOiBBcHBsaWNhdGlvbkxpc3RlbmVyO1xuXG4gIHByaXZhdGUgc2VjcmV0czoge1xuICAgIFtrZXk6IHN0cmluZ106IEVjc1NlY3JldDtcbiAgfSA9IHt9O1xuXG4gIHByaXZhdGUgc2NvcGU6IENvbnN0cnVjdDtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRmFyZ2F0ZUNsdXN0ZXJQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICB0aGlzLnNjb3BlID0gc2NvcGU7XG5cbiAgICB0aGlzLmFkZENsdXN0ZXIocHJvcHMpO1xuICAgIHRoaXMuYWRkU2VjcmV0cyhwcm9wcyk7XG4gICAgdGhpcy5pbXBvcnRTZWNyZXRzKHByb3BzKTtcbiAgICB0aGlzLmFkZEV4ZWN1dGlvblJvbGUocHJvcHMpO1xuICAgIHRoaXMuYWRkVGFza0RlZmluaXRpb24ocHJvcHMpO1xuICAgIHRoaXMuYWRkQ29udGFpbmVyRGVmaW5pdGlvbihwcm9wcyk7XG4gICAgdGhpcy5hZGRGYXJnYXRlU2VydmljZShwcm9wcyk7XG4gICAgdGhpcy5hZGRMb2FkQmFsYW5jZXIocHJvcHMpO1xuXG4gICAgaWYgKCEhcHJvcHMuZG9tYWluQ29uZmlnKSB0aGlzLmFkZEhvc3RlZFpvbmUocHJvcHMpO1xuXG4gICAgdGhpcy5hZGRMb2FkQmFsYW5jZXJMaXN0ZW5lcihwcm9wcyk7XG4gICAgdGhpcy5yZWdpc3RlckxvYWRCYWxhbmNlclRhcmdldHMocHJvcHMpO1xuXG4gICAgdGhpcy5jb25uZWN0aW9ucyA9IHRoaXMuZmFyZ2F0ZVNlcnZpY2UuY29ubmVjdGlvbnM7XG5cbiAgICAvL3RvZG86IGZpeCBjb25uZWN0aW9ucyBub3Qgd29ya2luZyBhdXRvbWF0aWNhbGx5XG4gICAgaWYgKHByb3BzLmRhdGFiYXNlQ29ubmVjdGlvbikge1xuICAgICAgdGhpcy5mYXJnYXRlU2VydmljZS5jb25uZWN0aW9ucy5hbGxvd1RvKFxuICAgICAgICBwcm9wcy5kYXRhYmFzZUNvbm5lY3Rpb24sXG4gICAgICAgIFBvcnQuUE9TVEdSRVNcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgYWRkQ2x1c3Rlcihwcm9wczogRmFyZ2F0ZUNsdXN0ZXJQcm9wcykge1xuICAgIHRoaXMuY2x1c3RlciA9IG5ldyBDZGtDbHVzdGVyKHRoaXMsIGAke3Byb3BzLmNsdXN0ZXJOYW1lfWAsIHtcbiAgICAgIHZwYzogcHJvcHMudnBjLFxuICAgICAgY2x1c3Rlck5hbWU6IHByb3BzLmNsdXN0ZXJOYW1lLFxuICAgICAgY29udGFpbmVySW5zaWdodHNWMjogQ29udGFpbmVySW5zaWdodHMuRU5BQkxFRCxcbiAgICAgIGVuYWJsZUZhcmdhdGVDYXBhY2l0eVByb3ZpZGVyczogdHJ1ZVxuICAgIH0pO1xuICAgIHRhZ1Jlc291cmNlKHRoaXMuY2x1c3RlciwgcHJvcHMudGFncyk7XG4gIH1cblxuICAvKipcbiAgICogI3RvZG86IGNoYW5nZSB0aGlzIHRvIGNyZWF0ZSBuZXcgc2VjcmV0cyBpbnN0ZWFkXG4gICAqIEBkZXByZWNhdGVkIHVzZSBpbXBvcnRTZWNyZXRzIGluc3RlYWRcbiAgICovXG4gIGFkZFNlY3JldHMocHJvcHM6IEZhcmdhdGVDbHVzdGVyUHJvcHMpIHtcbiAgICAvLyBDb250YWluZXIgU2VjcmV0c1xuICAgIGNvbnN0IGNvbnRhaW5lclNlY3JldCA9IFNlY3JldC5mcm9tU2VjcmV0TmFtZVYyKFxuICAgICAgdGhpcyxcbiAgICAgIGAke3Byb3BzLmNsdXN0ZXJOYW1lfVNlY3JldGAsXG4gICAgICBgLyR7cHJvcHMuY2x1c3Rlck5hbWV9LyR7cHJvcHMuc2VydmljZU5hbWV9YFxuICAgICk7XG5cbiAgICBmb3IgKGNvbnN0IHNlY3JldEZpZWxkIGluIHByb3BzLmNvbnRhaW5lclNlY3JldHMpIHtcbiAgICAgIHRoaXMuc2VjcmV0c1tzZWNyZXRGaWVsZF0gPSBFY3NTZWNyZXQuZnJvbVNlY3JldHNNYW5hZ2VyKFxuICAgICAgICBjb250YWluZXJTZWNyZXQsXG4gICAgICAgIHNlY3JldEZpZWxkXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBdXRvbWF0aWNhbGx5IGltcG9ydCBzZWNyZXRzIGZyb20gYW5vdGhlciByZXNvdXJjZSBvciBzdGFja1xuICAgKi9cbiAgaW1wb3J0U2VjcmV0cyhwcm9wczogRmFyZ2F0ZUNsdXN0ZXJQcm9wcykge1xuICAgIGlmICghcHJvcHMuY29udGFpbmVyU2VjcmV0c0ltcG9ydCkgcmV0dXJuO1xuXG4gICAgZm9yIChjb25zdCBrZXkgaW4gcHJvcHMuY29udGFpbmVyU2VjcmV0c0ltcG9ydCkge1xuICAgICAgY29uc3QgaW1wb3J0U2VjcmV0ID0gcHJvcHMuY29udGFpbmVyU2VjcmV0c0ltcG9ydFtrZXldO1xuXG4gICAgICAvLyB0b2RvOiBJIHRoaW5rIElEIG5lZWRzIHRvIGJlIGEgbmV3IHZhbHVlIGFzIGl0IElEJ3MgdGhlIElNUE9SVCBub3QgdGhlIHNlY3JldCBpdHNlbGY/XG5cbiAgICAgIC8vIENvbnN0cnVjdCB0aGUgQVdTIElTZWNyZXQgb2JqZWN0XG4gICAgICBjb25zdCBpU2VjcmV0ID0gU2VjcmV0LmZyb21TZWNyZXROYW1lVjIoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIGltcG9ydFNlY3JldC5pZCxcbiAgICAgICAgaW1wb3J0U2VjcmV0Lm5hbWVcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuc2VjcmV0c1trZXldID0gRWNzU2VjcmV0LmZyb21TZWNyZXRzTWFuYWdlcihcbiAgICAgICAgaVNlY3JldCxcbiAgICAgICAgaW1wb3J0U2VjcmV0LmZpZWxkXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGFkZEV4ZWN1dGlvblJvbGUocHJvcHM6IEZhcmdhdGVDbHVzdGVyUHJvcHMpIHtcbiAgICB0aGlzLmV4ZWN1dGlvblJvbGUgPSBuZXcgUm9sZSh0aGlzLCBgJHtwcm9wcy5zZXJ2aWNlTmFtZX1FeGVjdXRpb25Sb2xlYCwge1xuICAgICAgcm9sZU5hbWU6IGAke3Byb3BzLnNlcnZpY2VOYW1lfUV4ZWN1dGlvblJvbGVgLFxuICAgICAgZGVzY3JpcHRpb246IGAke3Byb3BzLnNlcnZpY2VOYW1lfSBFeGVjdXRpb24gUm9sZWAsXG4gICAgICBtYW5hZ2VkUG9saWNpZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG1hbmFnZWRQb2xpY3lBcm46XG4gICAgICAgICAgICBcImFybjphd3M6aWFtOjphd3M6cG9saWN5L3NlcnZpY2Utcm9sZS9BbWF6b25FQ1NUYXNrRXhlY3V0aW9uUm9sZVBvbGljeVwiXG4gICAgICAgIH1cbiAgICAgIF0sXG4gICAgICBpbmxpbmVQb2xpY2llczoge1xuICAgICAgICBbXCJyZWFkU2VjcmV0c1wiXTogbmV3IFBvbGljeURvY3VtZW50KHtcbiAgICAgICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICAgIFwic2VjcmV0c21hbmFnZXI6R2V0U2VjcmV0VmFsdWVcIixcbiAgICAgICAgICAgICAgICBcInNlY3JldHNtYW5hZ2VyOkRlc2NyaWJlU2VjcmV0XCJcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbXCIqXCJdIC8vIFRPRE86IFNldCB0aGlzIHRvIHRoZSBzZWNyZXQgQVJOXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF1cbiAgICAgICAgfSksXG4gICAgICAgIFtcImRlY3J5cHRTZWNyZXRzXCJdOiBuZXcgUG9saWN5RG9jdW1lbnQoe1xuICAgICAgICAgIHN0YXRlbWVudHM6IFtcbiAgICAgICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgICBhY3Rpb25zOiBbXCJrbXM6RGVjcnlwdFwiXSxcbiAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbXCIqXCJdIC8vIFRPRE86IFNldCB0aGlzIHRvIHRoZSBLTVMgQXJuXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF1cbiAgICAgICAgfSksXG4gICAgICAgIFtcImVjc0V4ZWN1dGVDb21tYW5kXCJdOiBuZXcgUG9saWN5RG9jdW1lbnQoe1xuICAgICAgICAgIHN0YXRlbWVudHM6IFtcbiAgICAgICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgXCJzc21tZXNzYWdlczpDcmVhdGVDb250cm9sQ2hhbm5lbFwiLFxuICAgICAgICAgICAgICAgIFwic3NtbWVzc2FnZXM6Q3JlYXRlRGF0YUNoYW5uZWxcIixcbiAgICAgICAgICAgICAgICBcInNzbW1lc3NhZ2VzOk9wZW5Db250cm9sQ2hhbm5lbFwiLFxuICAgICAgICAgICAgICAgIFwic3NtbWVzc2FnZXM6T3BlbkRhdGFDaGFubmVsXCJcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgZWZmZWN0OiBFZmZlY3QuQUxMT1csXG4gICAgICAgICAgICAgIHJlc291cmNlczogW1wiKlwiXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICBdXG4gICAgICAgIH0pXG4gICAgICB9LFxuICAgICAgYXNzdW1lZEJ5OiBuZXcgQ29tcG9zaXRlUHJpbmNpcGFsKFxuICAgICAgICBuZXcgU2VydmljZVByaW5jaXBhbChcImVjcy10YXNrcy5hbWF6b25hd3MuY29tXCIpXG4gICAgICApXG4gICAgfSk7XG4gIH1cblxuICBhZGRUYXNrRGVmaW5pdGlvbihwcm9wczogRmFyZ2F0ZUNsdXN0ZXJQcm9wcykge1xuICAgIHRoaXMudGFza0RlZmluaXRpb24gPSBuZXcgRmFyZ2F0ZVRhc2tEZWZpbml0aW9uKFxuICAgICAgdGhpcyxcbiAgICAgIGAke3Byb3BzLnNlcnZpY2VOYW1lfVRhc2tEZWZpbml0aW9uYCxcbiAgICAgIHtcbiAgICAgICAgY3B1OiBwcm9wcy5jcHUgfHwgMjU2LFxuICAgICAgICBleGVjdXRpb25Sb2xlOiB0aGlzLmV4ZWN1dGlvblJvbGUsXG4gICAgICAgIHRhc2tSb2xlOiBuZXcgUm9sZSh0aGlzLCBgJHtwcm9wcy5zZXJ2aWNlTmFtZX1UYXNrUm9sZWAsIHtcbiAgICAgICAgICByb2xlTmFtZTogYCR7cHJvcHMuc2VydmljZU5hbWV9VGFza1JvbGVgLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBgJHtwcm9wcy5zZXJ2aWNlTmFtZX0gVGFzayBSb2xlYCxcbiAgICAgICAgICBpbmxpbmVQb2xpY2llczogcHJvcHMudGFza1JvbGVJbmxpbmVQb2xpY2llcyxcbiAgICAgICAgICBtYW5hZ2VkUG9saWNpZXM6IHByb3BzLnRhc2tSb2xlTWFuYWdlZFBvbGljaWVzLFxuICAgICAgICAgIGFzc3VtZWRCeTogbmV3IENvbXBvc2l0ZVByaW5jaXBhbChcbiAgICAgICAgICAgIG5ldyBTZXJ2aWNlUHJpbmNpcGFsKFwiZWNzLXRhc2tzLmFtYXpvbmF3cy5jb21cIilcbiAgICAgICAgICApXG4gICAgICAgIH0pLFxuICAgICAgICBtZW1vcnlMaW1pdE1pQjogcHJvcHMubWVtb3J5TGltaXRNaUIgfHwgNTEyXG4gICAgICB9XG4gICAgKTtcbiAgICB0YWdSZXNvdXJjZSh0aGlzLnRhc2tEZWZpbml0aW9uLCBwcm9wcy50YWdzKTtcbiAgfVxuXG4gIGFkZENvbnRhaW5lckRlZmluaXRpb24ocHJvcHM6IEZhcmdhdGVDbHVzdGVyUHJvcHMpIHtcbiAgICB0aGlzLmNvbnRhaW5lckRlZmluaXRpb24gPSB0aGlzLnRhc2tEZWZpbml0aW9uLmFkZENvbnRhaW5lcihcbiAgICAgIGAke3Byb3BzLnNlcnZpY2VOYW1lfUNvbnRhaW5lckRlZmluaXRpb25gLFxuICAgICAge1xuICAgICAgICBpbWFnZTogdGhpcy5nZXRJbWFnZShwcm9wcyksXG4gICAgICAgIGNvbnRhaW5lck5hbWU6IHByb3BzLnNlcnZpY2VOYW1lLFxuICAgICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICAgIC4uLnByb3BzLmNvbnRhaW5lckVudmlyb25tZW50XG4gICAgICAgIH0sXG4gICAgICAgIGNvbW1hbmQ6IHByb3BzLmNvbnRhaW5lckNvbW1hbmQsXG4gICAgICAgIHNlY3JldHM6IHtcbiAgICAgICAgICAuLi50aGlzLnNlY3JldHNcbiAgICAgICAgfSxcbiAgICAgICAgLy90b2RvOiBwcm92aWRlIGhlYWx0aCBjaGVjayBvcHRpb25zXG4gICAgICAgIC8vIGhlYWx0aENoZWNrOiB7XG4gICAgICAgIC8vICAgY29tbWFuZDogW1xuICAgICAgICAvLyAgICAgXCJDTUQtU0hFTExcIixcbiAgICAgICAgLy8gICAgIGB0aW1lb3V0IDEwcyAvYmluL3NoIC1jICc6PiAvZGV2L3RjcC8xMjcuMC4wLjEvJHtwcm9wcy5jb250YWluZXJQb3J0fScgfHwgZXhpdCAxYFxuICAgICAgICAvLyAgIF1cbiAgICAgICAgLy8gfSxcbiAgICAgICAgbG9nZ2luZzogbmV3IEF3c0xvZ0RyaXZlcih7XG4gICAgICAgICAgc3RyZWFtUHJlZml4OiBgL2Vjcy8ke3Byb3BzLmNsdXN0ZXJOYW1lfS8ke3Byb3BzLnNlcnZpY2VOYW1lfWAsXG4gICAgICAgICAgbG9nUmV0ZW50aW9uOiAxNFxuICAgICAgICB9KSxcbiAgICAgICAgcG9ydE1hcHBpbmdzOiBwcm9wcy5jb250YWluZXJQb3J0XG4gICAgICAgICAgPyBbeyBjb250YWluZXJQb3J0OiBwcm9wcy5jb250YWluZXJQb3J0IH1dXG4gICAgICAgICAgOiBbeyBjb250YWluZXJQb3J0OiA4MCB9XVxuICAgICAgfVxuICAgICk7XG4gICAgdGFnUmVzb3VyY2UodGhpcy5jb250YWluZXJEZWZpbml0aW9uLCBwcm9wcy50YWdzKTtcbiAgfVxuXG4gIGFkZEZhcmdhdGVTZXJ2aWNlKHByb3BzOiBGYXJnYXRlQ2x1c3RlclByb3BzKSB7XG4gICAgdGhpcy5mYXJnYXRlU2VydmljZSA9IG5ldyBGYXJnYXRlU2VydmljZShcbiAgICAgIHRoaXMsXG4gICAgICBgJHtwcm9wcy5zZXJ2aWNlTmFtZX1GYXJnYXRlU2VydmljZWAsXG4gICAgICB7XG4gICAgICAgIGNpcmN1aXRCcmVha2VyOiB7IHJvbGxiYWNrOiB0cnVlIH0sXG4gICAgICAgIGNsdXN0ZXI6IHRoaXMuY2x1c3RlcixcbiAgICAgICAgZGVzaXJlZENvdW50OiAyLFxuICAgICAgICBlbmFibGVFQ1NNYW5hZ2VkVGFnczogdHJ1ZSxcbiAgICAgICAgZW5hYmxlRXhlY3V0ZUNvbW1hbmQ6IHRydWUsXG4gICAgICAgIHByb3BhZ2F0ZVRhZ3M6IFByb3BhZ2F0ZWRUYWdTb3VyY2UuU0VSVklDRSxcbiAgICAgICAgc2VydmljZU5hbWU6IGAke3Byb3BzLnNlcnZpY2VOYW1lfWAsXG4gICAgICAgIHRhc2tEZWZpbml0aW9uOiB0aGlzLnRhc2tEZWZpbml0aW9uXG4gICAgICB9XG4gICAgKTtcbiAgICB0YWdSZXNvdXJjZSh0aGlzLmZhcmdhdGVTZXJ2aWNlLCBwcm9wcy50YWdzKTtcbiAgfVxuXG4gIGFkZFNjYWxpbmdQb2xpY3kocHJvcHM6IEZhcmdhdGVDbHVzdGVyUHJvcHMpIHtcbiAgICB0aGlzLnNjYWxpbmdQb2xpY3kgPSBuZXcgVGFyZ2V0VHJhY2tpbmdTY2FsaW5nUG9saWN5KFxuICAgICAgdGhpcyxcbiAgICAgIGAke3Byb3BzLnNlcnZpY2VOYW1lfVNjYWxpbmdQb2xpY3lgLFxuICAgICAge1xuICAgICAgICBwb2xpY3lOYW1lOiBgJHtwcm9wcy5zZXJ2aWNlTmFtZX1TY2FsaW5nUG9saWN5YCxcbiAgICAgICAgc2NhbGluZ1RhcmdldDogbmV3IFNjYWxhYmxlVGFyZ2V0KFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgYCR7cHJvcHMuc2VydmljZU5hbWV9c2NhbGFibGVUYXJnZXRgLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG1heENhcGFjaXR5OiAxMCxcbiAgICAgICAgICAgIG1pbkNhcGFjaXR5OiAyLFxuICAgICAgICAgICAgcmVzb3VyY2VJZDogYHNlcnZpY2UvJHt0aGlzLmNsdXN0ZXIuY2x1c3Rlck5hbWV9LyR7dGhpcy5mYXJnYXRlU2VydmljZS5zZXJ2aWNlTmFtZX1gLFxuICAgICAgICAgICAgc2NhbGFibGVEaW1lbnNpb246IFwiZWNzOnNlcnZpY2U6RGVzaXJlZENvdW50XCIsXG4gICAgICAgICAgICBzZXJ2aWNlTmFtZXNwYWNlOiBTZXJ2aWNlTmFtZXNwYWNlLkVDU1xuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgdGFyZ2V0VmFsdWU6IDUwLFxuICAgICAgICBzY2FsZU91dENvb2xkb3duOiBEdXJhdGlvbi5zZWNvbmRzKDYwKSxcbiAgICAgICAgc2NhbGVJbkNvb2xkb3duOiBEdXJhdGlvbi5zZWNvbmRzKDYwKSxcbiAgICAgICAgcHJlZGVmaW5lZE1ldHJpYzpcbiAgICAgICAgICBwcm9wcy5zY2FsaW5nVHlwZSA9PSBTY2FsaW5nVHlwZS5NRU1PUllcbiAgICAgICAgICAgID8gUHJlZGVmaW5lZE1ldHJpYy5FQ1NfU0VSVklDRV9BVkVSQUdFX01FTU9SWV9VVElMSVpBVElPTlxuICAgICAgICAgICAgOiBQcmVkZWZpbmVkTWV0cmljLkVDU19TRVJWSUNFX0FWRVJBR0VfQ1BVX1VUSUxJWkFUSU9OXG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHJlZ2lzdGVyTG9hZEJhbGFuY2VyVGFyZ2V0cyhwcm9wczogRmFyZ2F0ZUNsdXN0ZXJQcm9wcykge1xuICAgIHRoaXMuZmFyZ2F0ZVNlcnZpY2UucmVnaXN0ZXJMb2FkQmFsYW5jZXJUYXJnZXRzKHtcbiAgICAgIGNvbnRhaW5lck5hbWU6IHRoaXMuY29udGFpbmVyRGVmaW5pdGlvbi5jb250YWluZXJOYW1lLFxuICAgICAgY29udGFpbmVyUG9ydDogdGhpcy5jb250YWluZXJEZWZpbml0aW9uLmNvbnRhaW5lclBvcnQsXG4gICAgICBuZXdUYXJnZXRHcm91cElkOiBgJHtwcm9wcy5zZXJ2aWNlTmFtZX1UYXJnZXRHcm91cGAsXG4gICAgICBsaXN0ZW5lcjogTGlzdGVuZXJDb25maWcuYXBwbGljYXRpb25MaXN0ZW5lcih0aGlzLmxvYWRCYWxhbmNlckxpc3RlbmVyLCB7XG4gICAgICAgIHBvcnQ6IHByb3BzLmNvbnRhaW5lclBvcnQsXG4gICAgICAgIHByb3RvY29sOiBBcHBsaWNhdGlvblByb3RvY29sLkhUVFAsXG4gICAgICAgIGhlYWx0aENoZWNrOiB7XG4gICAgICAgICAgaW50ZXJ2YWw6IER1cmF0aW9uLnNlY29uZHMoMTIwKSxcbiAgICAgICAgICBwYXRoOiBwcm9wcy5oZWFsdGhDaGVja1BhdGggfHwgXCIvXCIsXG4gICAgICAgICAgcG9ydDogcHJvcHMuY29udGFpbmVyUG9ydCA/IGAke3Byb3BzLmNvbnRhaW5lclBvcnR9YCA6IFwidHJhZmZpYy1wb3J0XCIsXG4gICAgICAgICAgdGltZW91dDogRHVyYXRpb24uc2Vjb25kcygxMClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9KTtcbiAgfVxuXG4gIGFkZExvYWRCYWxhbmNlcihwcm9wczogRmFyZ2F0ZUNsdXN0ZXJQcm9wcykge1xuICAgIHRoaXMubG9hZEJhbGFuY2VyID0gbmV3IEFwcGxpY2F0aW9uTG9hZEJhbGFuY2VyKFxuICAgICAgdGhpcyxcbiAgICAgIGAke3Byb3BzLmNsdXN0ZXJOYW1lfUxvYWRCYWxhbmNlcmAsXG4gICAgICB7XG4gICAgICAgIHZwYzogdGhpcy5jbHVzdGVyLnZwYyxcbiAgICAgICAgaW50ZXJuZXRGYWNpbmc6IHRydWUsXG4gICAgICAgIGxvYWRCYWxhbmNlck5hbWU6IGAke3Byb3BzLnNlcnZpY2VOYW1lfUxvYWRCYWxhbmNlcmAsXG4gICAgICAgIHZwY1N1Ym5ldHM6IHtcbiAgICAgICAgICBzdWJuZXRUeXBlOiBTdWJuZXRUeXBlLlBVQkxJQ1xuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcbiAgICB0YWdSZXNvdXJjZSh0aGlzLmxvYWRCYWxhbmNlciwgcHJvcHMudGFncyk7XG5cbiAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIGAke3Byb3BzLmNsdXN0ZXJOYW1lfUxvYWRCYWxhbmNlckRuc05hbWVgLCB7XG4gICAgICBrZXk6IGAke3Byb3BzLmNsdXN0ZXJOYW1lfUxvYWRCYWxhbmNlckRuc05hbWVgLFxuICAgICAgZXhwb3J0TmFtZTogYCR7cHJvcHMuY2x1c3Rlck5hbWV9TG9hZEJhbGFuY2VyRG5zTmFtZWAsXG4gICAgICB2YWx1ZTogdGhpcy5sb2FkQmFsYW5jZXIubG9hZEJhbGFuY2VyRG5zTmFtZVxuICAgIH0pO1xuICB9XG5cbiAgYWRkTG9hZEJhbGFuY2VyTGlzdGVuZXIocHJvcHM6IEZhcmdhdGVDbHVzdGVyUHJvcHMpIHtcbiAgICBpZiAoISF0aGlzLmNlcnRpZmljYXRlKSB7XG4gICAgICB0aGlzLmxvYWRCYWxhbmNlckxpc3RlbmVyID0gdGhpcy5sb2FkQmFsYW5jZXIuYWRkTGlzdGVuZXIoXG4gICAgICAgIGAke3Byb3BzLnNlcnZpY2VOYW1lfUxpc3RlbmVyYCxcbiAgICAgICAge1xuICAgICAgICAgIHBvcnQ6IHByb3BzLnByb3RvY29sID09IFByb3RvY29sLkhUVFAgPyA4MCA6IDQ0MyxcbiAgICAgICAgICBjZXJ0aWZpY2F0ZXM6IFt0aGlzLmNlcnRpZmljYXRlXVxuICAgICAgICB9XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvYWRCYWxhbmNlckxpc3RlbmVyID0gdGhpcy5sb2FkQmFsYW5jZXIuYWRkTGlzdGVuZXIoXG4gICAgICAgIGAke3Byb3BzLnNlcnZpY2VOYW1lfUxpc3RlbmVyYCxcbiAgICAgICAge1xuICAgICAgICAgIHBvcnQ6IHByb3BzLnByb3RvY29sID09IFByb3RvY29sLkhUVFAgPyA4MCA6IDQ0M1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cblxuICAgIHRhZ1Jlc291cmNlKHRoaXMubG9hZEJhbGFuY2VyTGlzdGVuZXIsIHByb3BzLnRhZ3MpO1xuICB9XG5cbiAgYWRkSG9zdGVkWm9uZShwcm9wczogRmFyZ2F0ZUNsdXN0ZXJQcm9wcykge1xuICAgIGlmICghcHJvcHMuZG9tYWluQ29uZmlnKSByZXR1cm47XG5cbiAgICBpZiAoIXByb3BzLmRvbWFpbkNvbmZpZy5ob3N0ZWRab25lKSB7XG4gICAgICAvLyBDcmVhdGUgYSBuZXcgaG9zdGVkIHpvbmUgaWYgb25lIGlzIG5vdCBwcm92aWRlZFxuICAgICAgdmFyIGhvc3RlZFpvbmUgPSBuZXcgRmphbGxIb3N0ZWRab25lKFxuICAgICAgICB0aGlzLFxuICAgICAgICBgJHtwcm9wcy5zZXJ2aWNlTmFtZX1Ib3N0ZWRab25lYCxcbiAgICAgICAge1xuICAgICAgICAgIHpvbmVOYW1lOiBwcm9wcy5kb21haW5Db25maWcuZG9tYWluTmFtZVxuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgICB0aGlzLmhvc3RlZFpvbmUgPSBob3N0ZWRab25lLmdldEludGVybmFsSG9zdGVkWm9uZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBPdGhlcndpc2UgdXNlIHRoZSBwcm92aWRlZCBob3N0ZWQgem9uZVxuICAgICAgdGhpcy5ob3N0ZWRab25lID0gcHJvcHMuZG9tYWluQ29uZmlnLmhvc3RlZFpvbmUuZ2V0SW50ZXJuYWxIb3N0ZWRab25lKCk7XG4gICAgfVxuXG4gICAgaWYgKCFwcm9wcy5kb21haW5Db25maWcuY2VydGlmaWNhdGUpIHtcbiAgICAgIC8vIElmIG5vIGNlcnRpZmljYXRlIGlzIHByb3ZpZGVkIC0gY3JlYXRlIGEgbmV3IG9uZVxuICAgICAgdGhpcy5jZXJ0aWZpY2F0ZSA9IG5ldyBDZXJ0aWZpY2F0ZShcbiAgICAgICAgdGhpcyxcbiAgICAgICAgYCR7cHJvcHMuc2VydmljZU5hbWV9Q2VydGlmaWNhdGVgLFxuICAgICAgICB7XG4gICAgICAgICAgZG9tYWluTmFtZTogcHJvcHMuZG9tYWluQ29uZmlnLmRvbWFpbk5hbWUsXG4gICAgICAgICAgdmFsaWRhdGlvbjogQ2VydGlmaWNhdGVWYWxpZGF0aW9uLmZyb21EbnModGhpcy5ob3N0ZWRab25lKVxuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEFsd2F5cyBjcmVhdGUgYSBuZXcgQVJlY29yZCBmb3IgdGhpcyBkb21haW4gYW5kIGF0dGFjaCBpdCB0byB0aGUgbG9hZCBiYWxhbmNlclxuICAgIHRoaXMuYVJlY29yZCA9IG5ldyBBUmVjb3JkKFxuICAgICAgdGhpcyxcbiAgICAgIGAke3Byb3BzLnNlcnZpY2VOYW1lfS4ke3Byb3BzLmNsdXN0ZXJOYW1lfS4ke3Byb3BzLmRvbWFpbkNvbmZpZy5kb21haW5OYW1lfUFSZWNvcmRgLFxuICAgICAge1xuICAgICAgICByZWNvcmROYW1lOiBwcm9wcy5kb21haW5Db25maWcuZG9tYWluTmFtZSxcbiAgICAgICAgem9uZTogdGhpcy5ob3N0ZWRab25lLFxuICAgICAgICB0YXJnZXQ6IFJlY29yZFRhcmdldC5mcm9tQWxpYXMoXG4gICAgICAgICAgbmV3IExvYWRCYWxhbmNlclRhcmdldCh0aGlzLmxvYWRCYWxhbmNlcilcbiAgICAgICAgKVxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBnZXRJbWFnZShwcm9wczogRmFyZ2F0ZUNsdXN0ZXJQcm9wcyk6IENvbnRhaW5lckltYWdlIHtcbiAgICBjb25zb2xlLmxvZyhcIkdFVCBJTUFHRTpcIiwgcHJvcHMpO1xuXG4gICAgaWYgKCFwcm9wcy5lY3JSZXBvc2l0b3J5KVxuICAgICAgcmV0dXJuIENvbnRhaW5lckltYWdlLmZyb21SZWdpc3RyeShcImFtYXpvbi9hbWF6b24tZWNzLXNhbXBsZVwiKTtcbiAgICBpZiAocHJvcHMuZWNyUmVwb3NpdG9yeSBpbnN0YW5jZW9mIENvbnRhaW5lckltYWdlKVxuICAgICAgcmV0dXJuIHByb3BzLmVjclJlcG9zaXRvcnk7XG4gICAgaWYgKHByb3BzLmVjclJlcG9zaXRvcnkgaW5zdGFuY2VvZiBSZXBvc2l0b3J5KSB7XG4gICAgICByZXR1cm4gQ29udGFpbmVySW1hZ2UuZnJvbUVjclJlcG9zaXRvcnkocHJvcHMuZWNyUmVwb3NpdG9yeSwgXCJsYXRlc3RcIik7XG4gICAgfVxuICAgIHJldHVybiBDb250YWluZXJJbWFnZS5mcm9tUmVnaXN0cnkoXCJhbWF6b24vYW1hem9uLWVjcy1zYW1wbGVcIik7XG4gIH1cblxuICBzdGF0aWMgYnVpbGQoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogRmFyZ2F0ZUNsdXN0ZXJQcm9wc1xuICApOiAoc2I6IFN0YWNrQnVpbGRlcikgPT4gQ29uc3RydWN0IHtcbiAgICByZXR1cm4gKHNiOiBTdGFja0J1aWxkZXIpID0+IHtcbiAgICAgIGNvbnN0IG5ld1Byb3BzOiBGYXJnYXRlQ2x1c3RlclByb3BzID0ge1xuICAgICAgICAuLi5wcm9wcyxcbiAgICAgICAgLi4ue1xuICAgICAgICAgIHZwYzogKHNiLmdldE5ldHdvcmsoKSBhcyBJVnBjKSB8fCBwcm9wcy52cGNcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHJldHVybiBuZXcgdGhpcyhzYi5nZXRTdGFjaygpLCBpZCwgbmV3UHJvcHMpO1xuICAgIH07XG4gIH1cbn1cbiJdfQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fjall/components-infrastructure",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.48",
|
|
4
4
|
"bin": {
|
|
5
5
|
"infrastructure": "bin/infrastructure.js"
|
|
6
6
|
},
|
|
@@ -12,27 +12,6 @@
|
|
|
12
12
|
"dist/lib"
|
|
13
13
|
],
|
|
14
14
|
"scripts": {
|
|
15
|
-
"deploy:fjall": "npx cdk deploy -c accountName=fjall",
|
|
16
|
-
"list:fjall": "npx cdk list -c accountName=fjall",
|
|
17
|
-
"destroy:fjall": "npx cdk destroy -c accountName=fjall",
|
|
18
|
-
"synth:fjall": "npx cdk synthesize -c accountName=fjall",
|
|
19
|
-
"diff:fjall": "npx cdk diff -c accountName=fjall",
|
|
20
|
-
"deploy:dev": "npx cdk deploy -c accountName=development",
|
|
21
|
-
"list:dev": "npx cdk list -c accountName=development",
|
|
22
|
-
"destroy:dev": "npx cdk destroy -c accountName=development",
|
|
23
|
-
"synth:dev": "npx cdk synthesize -c accountName=development",
|
|
24
|
-
"deploy:stag": "npx cdk deploy -c accountName=staging",
|
|
25
|
-
"list:stag": "npx cdk list -c accountName=staging",
|
|
26
|
-
"destroy:stag": "npx cdk destroy -c accountName=staging",
|
|
27
|
-
"synth:stag": "npx cdk synthesize -c accountName=staging",
|
|
28
|
-
"deploy:prod": "npx cdk deploy -c accountName=production",
|
|
29
|
-
"list:prod": "npx cdk list -c accountName=production",
|
|
30
|
-
"destroy:prod": "npx cdk destroy -c accountName=production",
|
|
31
|
-
"synth:prod": "npx cdk synthesize -c accountName=production",
|
|
32
|
-
"deploy:plat": "npx cdk deploy -c accountName=platform",
|
|
33
|
-
"list:plat": "npx cdk list -c accountName=platform",
|
|
34
|
-
"destroy:plat": "npx cdk destroy -c accountName=platform",
|
|
35
|
-
"synth:plat": "npx cdk synthesize -c accountName=platform",
|
|
36
15
|
"clean": "rm -rf ./dist",
|
|
37
16
|
"clean:node": "rm -rf ./node_modules",
|
|
38
17
|
"build": "tsc",
|
|
@@ -56,7 +35,7 @@
|
|
|
56
35
|
"dependencies": {
|
|
57
36
|
"@aws-sdk/client-cost-explorer": "^3.717.0",
|
|
58
37
|
"@aws-sdk/client-organizations": "^3.716.0",
|
|
59
|
-
"@fjall/util": "^0.1.
|
|
38
|
+
"@fjall/util": "^0.1.47",
|
|
60
39
|
"@pepperize/cdk-organizations": "^0.7.135",
|
|
61
40
|
"aws-cdk": "^2.146.0",
|
|
62
41
|
"aws-cdk-lib": "^2.146.0",
|
|
@@ -68,5 +47,5 @@
|
|
|
68
47
|
"overrides": {
|
|
69
48
|
"@smithy/core": "2.5.5"
|
|
70
49
|
},
|
|
71
|
-
"gitHead": "
|
|
50
|
+
"gitHead": "25268309ba9c316f8f6d6ac082c78dbff257cd35"
|
|
72
51
|
}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import { BlockDevice, IMachineImage, IVpc, SubnetType, UserData, SecurityGroup, IConnectable, Connections } from "aws-cdk-lib/aws-ec2";
|
|
2
|
-
import { Construct } from "constructs";
|
|
3
|
-
import { StackProps } from "aws-cdk-lib";
|
|
4
|
-
import { Role } from "aws-cdk-lib/aws-iam";
|
|
5
|
-
import { KeyValue } from "../../types";
|
|
6
|
-
interface ExistingVpcConfig {
|
|
7
|
-
vpcId?: string;
|
|
8
|
-
subnetType?: SubnetType;
|
|
9
|
-
}
|
|
10
|
-
interface NewVpcConfig {
|
|
11
|
-
subnetType: SubnetType;
|
|
12
|
-
}
|
|
13
|
-
export type VpcProps = ExistingVpcConfig | NewVpcConfig;
|
|
14
|
-
interface Ec2InstanceProps extends StackProps {
|
|
15
|
-
spotCapacityPercentage?: number;
|
|
16
|
-
blockDevices?: BlockDevice[];
|
|
17
|
-
accountId?: string;
|
|
18
|
-
serviceName: string;
|
|
19
|
-
vpc: VpcProps;
|
|
20
|
-
minCapcity?: number;
|
|
21
|
-
maxCapacity?: number;
|
|
22
|
-
instanceType: string;
|
|
23
|
-
machineImage?: IMachineImage;
|
|
24
|
-
userData?: UserData;
|
|
25
|
-
role?: Role;
|
|
26
|
-
enableSSH?: boolean;
|
|
27
|
-
tags: KeyValue;
|
|
28
|
-
}
|
|
29
|
-
export declare class Ec2Instance extends Construct implements IConnectable {
|
|
30
|
-
private launchTemplate;
|
|
31
|
-
vpc: IVpc;
|
|
32
|
-
asgSecurityGroup: SecurityGroup;
|
|
33
|
-
private autoScalingGroup;
|
|
34
|
-
private keyPair;
|
|
35
|
-
constructor(scope: Construct, id: string, props: Ec2InstanceProps);
|
|
36
|
-
connections: Connections;
|
|
37
|
-
addVpc(props: Ec2InstanceProps): void;
|
|
38
|
-
addKeyPair(props: Ec2InstanceProps): void;
|
|
39
|
-
addLaunchTemplate(props: Ec2InstanceProps): void;
|
|
40
|
-
addAutoScalingGroup(props: Ec2InstanceProps): void;
|
|
41
|
-
suspendAutoScaling(): void;
|
|
42
|
-
}
|
|
43
|
-
export {};
|
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Ec2Instance = void 0;
|
|
4
|
-
const aws_ec2_1 = require("aws-cdk-lib/aws-ec2");
|
|
5
|
-
const constructs_1 = require("constructs");
|
|
6
|
-
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
7
|
-
const tagResource_1 = require("../../utils/tagResource");
|
|
8
|
-
const aws_autoscaling_1 = require("aws-cdk-lib/aws-autoscaling");
|
|
9
|
-
const awsCustomResource_1 = require("../../resources/aws/utilities/awsCustomResource");
|
|
10
|
-
const custom_resources_1 = require("aws-cdk-lib/custom-resources");
|
|
11
|
-
const vpc_1 = require("../../resources/aws/networking/vpc");
|
|
12
|
-
class Ec2Instance extends constructs_1.Construct {
|
|
13
|
-
constructor(scope, id, props) {
|
|
14
|
-
super(scope, id);
|
|
15
|
-
this.addVpc(props);
|
|
16
|
-
if (props.enableSSH) {
|
|
17
|
-
this.addKeyPair(props);
|
|
18
|
-
}
|
|
19
|
-
this.addLaunchTemplate(props);
|
|
20
|
-
this.addAutoScalingGroup(props);
|
|
21
|
-
this.suspendAutoScaling();
|
|
22
|
-
//TODO: Add load balancer as boolean prop, then configure load balancer
|
|
23
|
-
}
|
|
24
|
-
addVpc(props) {
|
|
25
|
-
if ("vpcId" in props.vpc) {
|
|
26
|
-
this.vpc = vpc_1.Vpc.fromLookup(this, `${props.serviceName}Vpc`, {
|
|
27
|
-
vpcId: props.vpc.vpcId
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
else {
|
|
31
|
-
this.vpc = new vpc_1.Vpc(this, `${props.serviceName}Vpc`, {
|
|
32
|
-
accountId: props.accountId,
|
|
33
|
-
tags: props.tags,
|
|
34
|
-
subnetConfiguration: [
|
|
35
|
-
{
|
|
36
|
-
name: `${props.serviceName}`,
|
|
37
|
-
subnetType: props.vpc.subnetType || aws_ec2_1.SubnetType.PRIVATE_WITH_EGRESS
|
|
38
|
-
}
|
|
39
|
-
]
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
addKeyPair(props) {
|
|
44
|
-
// TODO: Breakout into a seperate construct for use with better prop handling
|
|
45
|
-
this.keyPair = new aws_ec2_1.KeyPair(this, "KeyPair", {
|
|
46
|
-
keyPairName: `${props.serviceName}KeyPair`
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
addLaunchTemplate(props) {
|
|
50
|
-
this.asgSecurityGroup = new aws_ec2_1.SecurityGroup(this, `AsgSecurityGroup`, {
|
|
51
|
-
vpc: this.vpc,
|
|
52
|
-
description: `Security group for the ${props.serviceName} auto scaling group`
|
|
53
|
-
});
|
|
54
|
-
if (props.enableSSH) {
|
|
55
|
-
this.asgSecurityGroup.addIngressRule(aws_ec2_1.Peer.anyIpv4(), aws_ec2_1.Port.tcp(22), "Allow SSH");
|
|
56
|
-
}
|
|
57
|
-
this.launchTemplate = new aws_ec2_1.LaunchTemplate(this, "LaunchTemplate", {
|
|
58
|
-
launchTemplateName: `${props.serviceName}LaunchTemplate`,
|
|
59
|
-
instanceType: new aws_ec2_1.InstanceType(`${props.instanceType}`),
|
|
60
|
-
machineImage: props.machineImage || aws_ec2_1.MachineImage.latestAmazonLinux2(),
|
|
61
|
-
userData: props.userData,
|
|
62
|
-
role: props.role,
|
|
63
|
-
blockDevices: props?.blockDevices,
|
|
64
|
-
securityGroup: this.asgSecurityGroup,
|
|
65
|
-
detailedMonitoring: true,
|
|
66
|
-
requireImdsv2: true,
|
|
67
|
-
httpPutResponseHopLimit: 2,
|
|
68
|
-
httpTokens: aws_ec2_1.LaunchTemplateHttpTokens.REQUIRED,
|
|
69
|
-
instanceMetadataTags: true,
|
|
70
|
-
keyPair: this.keyPair
|
|
71
|
-
});
|
|
72
|
-
}
|
|
73
|
-
addAutoScalingGroup(props) {
|
|
74
|
-
// TODO: Support spot instances
|
|
75
|
-
// TODO: Handle terminating EC2 instances when updating, currently hangs.
|
|
76
|
-
this.autoScalingGroup = new aws_autoscaling_1.AutoScalingGroup(this, "AutoScalingGroup", {
|
|
77
|
-
vpc: this.vpc,
|
|
78
|
-
vpcSubnets: {
|
|
79
|
-
subnetType: props.enableSSH ? aws_ec2_1.SubnetType.PUBLIC : undefined
|
|
80
|
-
},
|
|
81
|
-
minCapacity: props.minCapcity,
|
|
82
|
-
maxCapacity: props.maxCapacity,
|
|
83
|
-
launchTemplate: this.launchTemplate,
|
|
84
|
-
cooldown: aws_cdk_lib_1.Duration.seconds(60),
|
|
85
|
-
groupMetrics: [aws_autoscaling_1.GroupMetrics.all()],
|
|
86
|
-
updatePolicy: aws_autoscaling_1.UpdatePolicy.replacingUpdate(),
|
|
87
|
-
newInstancesProtectedFromScaleIn: true,
|
|
88
|
-
// securityGroup: this.asgSecurityGroup,
|
|
89
|
-
terminationPolicies: [
|
|
90
|
-
aws_autoscaling_1.TerminationPolicy.OLDEST_LAUNCH_CONFIGURATION,
|
|
91
|
-
aws_autoscaling_1.TerminationPolicy.CLOSEST_TO_NEXT_INSTANCE_HOUR
|
|
92
|
-
],
|
|
93
|
-
ssmSessionPermissions: true
|
|
94
|
-
});
|
|
95
|
-
(0, tagResource_1.default)(this.autoScalingGroup, props.tags);
|
|
96
|
-
}
|
|
97
|
-
suspendAutoScaling() {
|
|
98
|
-
new awsCustomResource_1.AwsCustomResource(this, "SuspendAutoscaling", {
|
|
99
|
-
functionName: "suspendAutoScaling",
|
|
100
|
-
onCreate: {
|
|
101
|
-
service: "AutoScaling",
|
|
102
|
-
action: "suspendProcesses",
|
|
103
|
-
parameters: {
|
|
104
|
-
AutoScalingGroupName: this.autoScalingGroup.autoScalingGroupName,
|
|
105
|
-
ScalingProcesses: ["AZRebalance"]
|
|
106
|
-
},
|
|
107
|
-
physicalResourceId: custom_resources_1.PhysicalResourceId.of("suspendAutoScaling")
|
|
108
|
-
},
|
|
109
|
-
onUpdate: {
|
|
110
|
-
service: "AutoScaling",
|
|
111
|
-
action: "suspendProcesses",
|
|
112
|
-
parameters: {
|
|
113
|
-
AutoScalingGroupName: this.autoScalingGroup.autoScalingGroupName,
|
|
114
|
-
ScalingProcesses: ["AZRebalance"]
|
|
115
|
-
},
|
|
116
|
-
physicalResourceId: custom_resources_1.PhysicalResourceId.of("suspendAutoScaling")
|
|
117
|
-
},
|
|
118
|
-
resourceType: "Custom::suspendAutoscaling"
|
|
119
|
-
});
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
exports.Ec2Instance = Ec2Instance;
|
|
123
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWMyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGliL3BhdHRlcm5zL2F3cy9lYzIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaURBaUI2QjtBQUM3QiwyQ0FBdUM7QUFDdkMsNkNBQW1EO0FBQ25ELHlEQUFrRDtBQUVsRCxpRUFLcUM7QUFFckMsdUZBQW9GO0FBQ3BGLG1FQUFrRTtBQUNsRSw0REFBeUQ7QUE2QnpELE1BQWEsV0FBWSxTQUFRLHNCQUFTO0lBT3hDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBdUI7UUFDL0QsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25CLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekIsQ0FBQztRQUNELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFFMUIsdUVBQXVFO0lBQ3pFLENBQUM7SUFHRCxNQUFNLENBQUMsS0FBdUI7UUFDNUIsSUFBSSxPQUFPLElBQUksS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxHQUFHLEdBQUcsU0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsV0FBVyxLQUFLLEVBQUU7Z0JBQ3pELEtBQUssRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUs7YUFDdkIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksU0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxX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QXdDO1lBQ3hDLG1CQUFtQixFQUFFO2dCQUNuQixtQ0FBaUIsQ0FBQywyQkFBMkI7Z0JBQzdDLG1DQUFpQixDQUFDLDZCQUE2QjthQUNoRDtZQUNELHFCQUFxQixFQUFFLElBQUk7U0FDNUIsQ0FBQyxDQUFDO1FBQ0gsSUFBQSxxQkFBVyxFQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixJQUFJLHFDQUFpQixDQUFDLElBQUksRUFBRSxvQkFBb0IsRUFBRTtZQUNoRCxZQUFZLEVBQUUsb0JBQW9CO1lBQ2xDLFFBQVEsRUFBRTtnQkFDUixPQUFPLEVBQUUsYUFBYTtnQkFDdEIsTUFBTSxFQUFFLGtCQUFrQjtnQkFDMUIsVUFBVSxFQUFFO29CQUNWLG9CQUFvQixFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxvQkFBb0I7b0JBQ2hFLGdCQUFnQixFQUFFLENBQUMsYUFBYSxDQUFDO2lCQUNsQztnQkFDRCxrQkFBa0IsRUFBRSxxQ0FBa0IsQ0FBQyxFQUFFLENBQUMsb0JBQW9CLENBQUM7YUFDaEU7WUFDRCxRQUFRLEVBQUU7Z0JBQ1IsT0FBTyxFQUFFLGFBQWE7Z0JBQ3RCLE1BQU0sRUFBRSxrQkFBa0I7Z0JBQzFCLFVBQVUsRUFBRTtvQkFDVixvQkFBb0IsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsb0JBQW9CO29CQUNoRSxnQkFBZ0IsRUFBRSxDQUFDLGFBQWEsQ0FBQztpQkFDbEM7Z0JBQ0Qsa0JBQWtCLEVBQUUscUNBQWtCLENBQUMsRUFBRSxDQUFDLG9CQUFvQixDQUFDO2FBQ2hFO1lBQ0QsWUFBWSxFQUFFLDRCQUE0QjtTQUMzQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFoSUQsa0NBZ0lDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQmxvY2tEZXZpY2UsXG4gIElNYWNoaW5lSW1hZ2UsXG4gIEluc3RhbmNlVHlwZSxcbiAgSVZwYyxcbiAgTGF1bmNoVGVtcGxhdGUsXG4gIFN1Ym5ldFR5cGUsXG4gIFVzZXJEYXRhLFxuICBNYWNoaW5lSW1hZ2UsXG4gIExhdW5jaFRlbXBsYXRlSHR0cFRva2VucyxcbiAgS2V5UGFpcixcbiAgSUtleVBhaXIsXG4gIFNlY3VyaXR5R3JvdXAsXG4gIFBlZXIsXG4gIFBvcnQsXG4gIElDb25uZWN0YWJsZSxcbiAgQ29ubmVjdGlvbnNcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lYzJcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBEdXJhdGlvbiwgU3RhY2tQcm9wcyB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHRhZ1Jlc291cmNlIGZyb20gXCIuLi8uLi91dGlscy90YWdSZXNvdXJjZVwiO1xuaW1wb3J0IHsgUm9sZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQge1xuICBBdXRvU2NhbGluZ0dyb3VwLFxuICBHcm91cE1ldHJpY3MsXG4gIFRlcm1pbmF0aW9uUG9saWN5LFxuICBVcGRhdGVQb2xpY3lcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1hdXRvc2NhbGluZ1wiO1xuaW1wb3J0IHsgS2V5VmFsdWUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcbmltcG9ydCB7IEF3c0N1c3RvbVJlc291cmNlIH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3MvdXRpbGl0aWVzL2F3c0N1c3RvbVJlc291cmNlXCI7XG5pbXBvcnQgeyBQaHlzaWNhbFJlc291cmNlSWQgfSBmcm9tIFwiYXdzLWNkay1saWIvY3VzdG9tLXJlc291cmNlc1wiO1xuaW1wb3J0IHsgVnBjIH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3MvbmV0d29ya2luZy92cGNcIjtcblxuaW50ZXJmYWNlIEV4aXN0aW5nVnBjQ29uZmlnIHtcbiAgdnBjSWQ/OiBzdHJpbmc7XG4gIHN1Ym5ldFR5cGU/OiBTdWJuZXRUeXBlO1xufVxuXG5pbnRlcmZhY2UgTmV3VnBjQ29uZmlnIHtcbiAgc3VibmV0VHlwZTogU3VibmV0VHlwZTtcbn1cblxuZXhwb3J0IHR5cGUgVnBjUHJvcHMgPSBFeGlzdGluZ1ZwY0NvbmZpZyB8IE5ld1ZwY0NvbmZpZztcblxuaW50ZXJmYWNlIEVjMkluc3RhbmNlUHJvcHMgZXh0ZW5kcyBTdGFja1Byb3BzIHtcbiAgc3BvdENhcGFjaXR5UGVyY2VudGFnZT86IG51bWJlcjtcbiAgYmxvY2tEZXZpY2VzPzogQmxvY2tEZXZpY2VbXTtcbiAgYWNjb3VudElkPzogc3RyaW5nO1xuICBzZXJ2aWNlTmFtZTogc3RyaW5nO1xuICB2cGM6IFZwY1Byb3BzO1xuICBtaW5DYXBjaXR5PzogbnVtYmVyO1xuICBtYXhDYXBhY2l0eT86IG51bWJlcjtcbiAgaW5zdGFuY2VUeXBlOiBzdHJpbmc7XG4gIG1hY2hpbmVJbWFnZT86IElNYWNoaW5lSW1hZ2U7XG4gIHVzZXJEYXRhPzogVXNlckRhdGE7XG4gIHJvbGU/OiBSb2xlO1xuICBlbmFibGVTU0g/OiBib29sZWFuO1xuICB0YWdzOiBLZXlWYWx1ZTtcbn1cblxuZXhwb3J0IGNsYXNzIEVjMkluc3RhbmNlIGV4dGVuZHMgQ29uc3RydWN0IGltcGxlbWVudHMgSUNvbm5lY3RhYmxlIHtcbiAgcHJpdmF0ZSBsYXVuY2hUZW1wbGF0ZTogTGF1bmNoVGVtcGxhdGU7XG4gIHB1YmxpYyB2cGM6IElWcGM7XG4gIHB1YmxpYyBhc2dTZWN1cml0eUdyb3VwOiBTZWN1cml0eUdyb3VwO1xuICBwcml2YXRlIGF1dG9TY2FsaW5nR3JvdXA6IEF1dG9TY2FsaW5nR3JvdXA7XG4gIHByaXZhdGUga2V5UGFpcjogSUtleVBhaXI7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEVjMkluc3RhbmNlUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgdGhpcy5hZGRWcGMocHJvcHMpO1xuICAgIGlmIChwcm9wcy5lbmFibGVTU0gpIHtcbiAgICAgIHRoaXMuYWRkS2V5UGFpcihwcm9wcyk7XG4gICAgfVxuICAgIHRoaXMuYWRkTGF1bmNoVGVtcGxhdGUocHJvcHMpO1xuICAgIHRoaXMuYWRkQXV0b1NjYWxpbmdHcm91cChwcm9wcyk7XG4gICAgdGhpcy5zdXNwZW5kQXV0b1NjYWxpbmcoKTtcblxuICAgIC8vVE9ETzogQWRkIGxvYWQgYmFsYW5jZXIgYXMgYm9vbGVhbiBwcm9wLCB0aGVuIGNvbmZpZ3VyZSBsb2FkIGJhbGFuY2VyXG4gIH1cbiAgY29ubmVjdGlvbnM6IENvbm5lY3Rpb25zO1xuXG4gIGFkZFZwYyhwcm9wczogRWMySW5zdGFuY2VQcm9wcykge1xuICAgIGlmIChcInZwY0lkXCIgaW4gcHJvcHMudnBjKSB7XG4gICAgICB0aGlzLnZwYyA9IFZwYy5mcm9tTG9va3VwKHRoaXMsIGAke3Byb3BzLnNlcnZpY2VOYW1lfVZwY2AsIHtcbiAgICAgICAgdnBjSWQ6IHByb3BzLnZwYy52cGNJZFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudnBjID0gbmV3IFZwYyh0aGlzLCBgJHtwcm9wcy5zZXJ2aWNlTmFtZX1WcGNgLCB7XG4gICAgICAgIGFjY291bnRJZDogcHJvcHMuYWNjb3VudElkLFxuICAgICAgICB0YWdzOiBwcm9wcy50YWdzLFxuICAgICAgICBzdWJuZXRDb25maWd1cmF0aW9uOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogYCR7cHJvcHMuc2VydmljZU5hbWV9YCxcbiAgICAgICAgICAgIHN1Ym5ldFR5cGU6IHByb3BzLnZwYy5zdWJuZXRUeXBlIHx8IFN1Ym5ldFR5cGUuUFJJVkFURV9XSVRIX0VHUkVTU1xuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgYWRkS2V5UGFpcihwcm9wczogRWMySW5zdGFuY2VQcm9wcykge1xuICAgIC8vIFRPRE86IEJyZWFrb3V0IGludG8gYSBzZXBlcmF0ZSBjb25zdHJ1Y3QgZm9yIHVzZSB3aXRoIGJldHRlciBwcm9wIGhhbmRsaW5nXG4gICAgdGhpcy5rZXlQYWlyID0gbmV3IEtleVBhaXIodGhpcywgXCJLZXlQYWlyXCIsIHtcbiAgICAgIGtleVBhaXJOYW1lOiBgJHtwcm9wcy5zZXJ2aWNlTmFtZX1LZXlQYWlyYFxuICAgIH0pO1xuICB9XG5cbiAgYWRkTGF1bmNoVGVtcGxhdGUocHJvcHM6IEVjMkluc3RhbmNlUHJvcHMpIHtcbiAgICB0aGlzLmFzZ1NlY3VyaXR5R3JvdXAgPSBuZXcgU2VjdXJpdHlHcm91cCh0aGlzLCBgQXNnU2VjdXJpdHlHcm91cGAsIHtcbiAgICAgIHZwYzogdGhpcy52cGMsXG4gICAgICBkZXNjcmlwdGlvbjogYFNlY3VyaXR5IGdyb3VwIGZvciB0aGUgJHtwcm9wcy5zZXJ2aWNlTmFtZX0gYXV0byBzY2FsaW5nIGdyb3VwYFxuICAgIH0pO1xuXG4gICAgaWYgKHByb3BzLmVuYWJsZVNTSCkge1xuICAgICAgdGhpcy5hc2dTZWN1cml0eUdyb3VwLmFkZEluZ3Jlc3NSdWxlKFxuICAgICAgICBQZWVyLmFueUlwdjQoKSxcbiAgICAgICAgUG9ydC50Y3AoMjIpLFxuICAgICAgICBcIkFsbG93IFNTSFwiXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMubGF1bmNoVGVtcGxhdGUgPSBuZXcgTGF1bmNoVGVtcGxhdGUodGhpcywgXCJMYXVuY2hUZW1wbGF0ZVwiLCB7XG4gICAgICBsYXVuY2hUZW1wbGF0ZU5hbWU6IGAke3Byb3BzLnNlcnZpY2VOYW1lfUxhdW5jaFRlbXBsYXRlYCxcbiAgICAgIGluc3RhbmNlVHlwZTogbmV3IEluc3RhbmNlVHlwZShgJHtwcm9wcy5pbnN0YW5jZVR5cGV9YCksXG4gICAgICBtYWNoaW5lSW1hZ2U6IHByb3BzLm1hY2hpbmVJbWFnZSB8fCBNYWNoaW5lSW1hZ2UubGF0ZXN0QW1hem9uTGludXgyKCksXG4gICAgICB1c2VyRGF0YTogcHJvcHMudXNlckRhdGEsXG4gICAgICByb2xlOiBwcm9wcy5yb2xlLFxuICAgICAgYmxvY2tEZXZpY2VzOiBwcm9wcz8uYmxvY2tEZXZpY2VzLFxuICAgICAgc2VjdXJpdHlHcm91cDogdGhpcy5hc2dTZWN1cml0eUdyb3VwLFxuICAgICAgZGV0YWlsZWRNb25pdG9yaW5nOiB0cnVlLFxuICAgICAgcmVxdWlyZUltZHN2MjogdHJ1ZSxcbiAgICAgIGh0dHBQdXRSZXNwb25zZUhvcExpbWl0OiAyLFxuICAgICAgaHR0cFRva2VuczogTGF1bmNoVGVtcGxhdGVIdHRwVG9rZW5zLlJFUVVJUkVELFxuICAgICAgaW5zdGFuY2VNZXRhZGF0YVRhZ3M6IHRydWUsXG4gICAgICBrZXlQYWlyOiB0aGlzLmtleVBhaXJcbiAgICB9KTtcbiAgfVxuXG4gIGFkZEF1dG9TY2FsaW5nR3JvdXAocHJvcHM6IEVjMkluc3RhbmNlUHJvcHMpIHtcbiAgICAvLyBUT0RPOiBTdXBwb3J0IHNwb3QgaW5zdGFuY2VzXG4gICAgLy8gVE9ETzogSGFuZGxlIHRlcm1pbmF0aW5nIEVDMiBpbnN0YW5jZXMgd2hlbiB1cGRhdGluZywgY3VycmVudGx5IGhhbmdzLlxuICAgIHRoaXMuYXV0b1NjYWxpbmdHcm91cCA9IG5ldyBBdXRvU2NhbGluZ0dyb3VwKHRoaXMsIFwiQXV0b1NjYWxpbmdHcm91cFwiLCB7XG4gICAgICB2cGM6IHRoaXMudnBjLFxuICAgICAgdnBjU3VibmV0czoge1xuICAgICAgICBzdWJuZXRUeXBlOiBwcm9wcy5lbmFibGVTU0ggPyBTdWJuZXRUeXBlLlBVQkxJQyA6IHVuZGVmaW5lZFxuICAgICAgfSxcbiAgICAgIG1pbkNhcGFjaXR5OiBwcm9wcy5taW5DYXBjaXR5LFxuICAgICAgbWF4Q2FwYWNpdHk6IHByb3BzLm1heENhcGFjaXR5LFxuICAgICAgbGF1bmNoVGVtcGxhdGU6IHRoaXMubGF1bmNoVGVtcGxhdGUsXG4gICAgICBjb29sZG93bjogRHVyYXRpb24uc2Vjb25kcyg2MCksXG4gICAgICBncm91cE1ldHJpY3M6IFtHcm91cE1ldHJpY3MuYWxsKCldLFxuICAgICAgdXBkYXRlUG9saWN5OiBVcGRhdGVQb2xpY3kucmVwbGFjaW5nVXBkYXRlKCksXG4gICAgICBuZXdJbnN0YW5jZXNQcm90ZWN0ZWRGcm9tU2NhbGVJbjogdHJ1ZSxcbiAgICAgIC8vIHNlY3VyaXR5R3JvdXA6IHRoaXMuYXNnU2VjdXJpdHlHcm91cCxcbiAgICAgIHRlcm1pbmF0aW9uUG9saWNpZXM6IFtcbiAgICAgICAgVGVybWluYXRpb25Qb2xpY3kuT0xERVNUX0xBVU5DSF9DT05GSUdVUkFUSU9OLFxuICAgICAgICBUZXJtaW5hdGlvblBvbGljeS5DTE9TRVNUX1RPX05FWFRfSU5TVEFOQ0VfSE9VUlxuICAgICAgXSxcbiAgICAgIHNzbVNlc3Npb25QZXJtaXNzaW9uczogdHJ1ZVxuICAgIH0pO1xuICAgIHRhZ1Jlc291cmNlKHRoaXMuYXV0b1NjYWxpbmdHcm91cCwgcHJvcHMudGFncyk7XG4gIH1cblxuICBzdXNwZW5kQXV0b1NjYWxpbmcoKSB7XG4gICAgbmV3IEF3c0N1c3RvbVJlc291cmNlKHRoaXMsIFwiU3VzcGVuZEF1dG9zY2FsaW5nXCIsIHtcbiAgICAgIGZ1bmN0aW9uTmFtZTogXCJzdXNwZW5kQXV0b1NjYWxpbmdcIixcbiAgICAgIG9uQ3JlYXRlOiB7XG4gICAgICAgIHNlcnZpY2U6IFwiQXV0b1NjYWxpbmdcIixcbiAgICAgICAgYWN0aW9uOiBcInN1c3BlbmRQcm9jZXNzZXNcIixcbiAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgIEF1dG9TY2FsaW5nR3JvdXBOYW1lOiB0aGlzLmF1dG9TY2FsaW5nR3JvdXAuYXV0b1NjYWxpbmdHcm91cE5hbWUsXG4gICAgICAgICAgU2NhbGluZ1Byb2Nlc3NlczogW1wiQVpSZWJhbGFuY2VcIl1cbiAgICAgICAgfSxcbiAgICAgICAgcGh5c2ljYWxSZXNvdXJjZUlkOiBQaHlzaWNhbFJlc291cmNlSWQub2YoXCJzdXNwZW5kQXV0b1NjYWxpbmdcIilcbiAgICAgIH0sXG4gICAgICBvblVwZGF0ZToge1xuICAgICAgICBzZXJ2aWNlOiBcIkF1dG9TY2FsaW5nXCIsXG4gICAgICAgIGFjdGlvbjogXCJzdXNwZW5kUHJvY2Vzc2VzXCIsXG4gICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICBBdXRvU2NhbGluZ0dyb3VwTmFtZTogdGhpcy5hdXRvU2NhbGluZ0dyb3VwLmF1dG9TY2FsaW5nR3JvdXBOYW1lLFxuICAgICAgICAgIFNjYWxpbmdQcm9jZXNzZXM6IFtcIkFaUmViYWxhbmNlXCJdXG4gICAgICAgIH0sXG4gICAgICAgIHBoeXNpY2FsUmVzb3VyY2VJZDogUGh5c2ljYWxSZXNvdXJjZUlkLm9mKFwic3VzcGVuZEF1dG9TY2FsaW5nXCIpXG4gICAgICB9LFxuICAgICAgcmVzb3VyY2VUeXBlOiBcIkN1c3RvbTo6c3VzcGVuZEF1dG9zY2FsaW5nXCJcbiAgICB9KTtcbiAgfVxufVxuIl19
|