@aws-mdaa/datawarehouse 1.2.0

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.
@@ -0,0 +1,329 @@
1
+ /*!
2
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ import { MdaaAppConfigParser, MdaaAppConfigParserProps, MdaaBaseConfigContents } from '@aws-mdaa/app';
6
+ import { FederationProps, ScheduledActionProps, DatabaseUsersProps, EventNotificationsProps } from '@aws-mdaa/datawarehouse-l3-construct';
7
+ import { MdaaRoleRef } from '@aws-mdaa/iam-role-helper';
8
+ import { Stack } from 'aws-cdk-lib';
9
+ import { ConfigurationElement } from '@aws-mdaa/config';
10
+ export interface DataWarehouseConfigContents extends MdaaBaseConfigContents {
11
+ /**
12
+ * Q-ENHANCED-PROPERTY
13
+ * Required admin username for the Redshift cluster providing administrative access to the data warehouse. Defines the master user account for cluster administration, database management, and initial user provisioning.
14
+ *
15
+ * Use cases: Cluster administration; Database management; Initial user provisioning
16
+ *
17
+ * AWS: Amazon Redshift cluster master username for administrative access and database management
18
+ *
19
+ * Validation: Must be valid Redshift username; required; used for cluster administrative access
20
+ **/
21
+ readonly adminUsername: string;
22
+ /**
23
+ * Q-ENHANCED-PROPERTY
24
+ * Required number of days between automatic admin password rotations for enhanced security compliance. Enables automated credential management and compliance with password rotation policies for improved cluster security posture.
25
+ *
26
+ * Use cases: Automated credential rotation; Security policy compliance; Password management automation
27
+ *
28
+ * AWS: Amazon Redshift automatic password rotation configuration for security management
29
+ *
30
+ * Validation: Must be positive integer; required; defines password rotation frequency for security compliance
31
+ **/
32
+ readonly adminPasswordRotationDays: number;
33
+ /**
34
+ * Q-ENHANCED-PROPERTY
35
+ * Optional array of federation configurations for SAML or OIDC identity provider integration with the data warehouse. Enables federated access to Redshift through external identity providers for centralized identity management and SSO capabilities.
36
+ *
37
+ * Use cases: SAML federation setup; OIDC provider integration; Centralized identity management for data warehouse access
38
+ *
39
+ * AWS: AWS IAM identity provider configuration for federated Redshift access and SSO integration
40
+ *
41
+ * Validation: Must be array of valid FederationProps if provided; enables federated authentication when specified
42
+ **/
43
+ readonly federations?: FederationProps[];
44
+ /**
45
+ * Q-ENHANCED-PROPERTY
46
+ * Required array of admin role references with full access to cluster resources including KMS keys and S3 buckets. Provides administrative permissions for data warehouse management, security administration, and resource access control.
47
+ *
48
+ * Use cases: Administrative access control; Security management; Resource administration
49
+ *
50
+ * AWS: AWS IAM roles with full Redshift cluster and resource access permissions
51
+ *
52
+ * Validation: Must be array of valid MdaaRoleRef objects; required; roles receive full cluster access
53
+ **/
54
+ readonly dataAdminRoles: MdaaRoleRef[];
55
+ /**
56
+ * Q-ENHANCED-PROPERTY
57
+ * Optional array of user role references with access to data warehouse S3 buckets for data loading and unloading operations. Enables controlled access to warehouse storage resources for ETL operations and data management workflows.
58
+ *
59
+ * Use cases: Data loading operations; ETL workflow access; Controlled storage access
60
+ *
61
+ * AWS: AWS IAM roles with S3 bucket access for Redshift data operations
62
+ *
63
+ * Validation: Must be array of valid MdaaRoleRef objects if provided; roles receive bucket access permissions
64
+ **/
65
+ readonly warehouseBucketUserRoles?: MdaaRoleRef[];
66
+ /**
67
+ * Q-ENHANCED-PROPERTY
68
+ * Optional array of external execution role references for Redshift cluster operations and integrations. Enables cluster to assume external roles for cross-service operations, data access, and integration with other AWS services.
69
+ *
70
+ * Use cases: Cross-service operations; External data access; Service integration workflows
71
+ *
72
+ * AWS: AWS IAM roles for Redshift cluster cross-service operations and integrations
73
+ *
74
+ * Validation: Must be array of valid MdaaRoleRef objects if provided; roles must be assumable by Redshift service
75
+ **/
76
+ readonly executionRoles?: MdaaRoleRef[];
77
+ /**
78
+ * Q-ENHANCED-PROPERTY
79
+ * Required VPC ID for Redshift cluster deployment providing network isolation and security controls. Ensures cluster operates within the specified VPC for secure networking and integration with other VPC resources.
80
+ *
81
+ * Use cases: VPC network isolation; Secure networking; VPC resource integration
82
+ *
83
+ * AWS: Amazon VPC for Redshift cluster network isolation and security controls
84
+ *
85
+ * Validation: Must be valid VPC ID; required; VPC must exist and be accessible
86
+ **/
87
+ readonly vpcId: string;
88
+ /**
89
+ * Q-ENHANCED-PROPERTY
90
+ * Required array of subnet IDs for Redshift cluster node placement within the VPC. Defines the network subnets where cluster nodes will be deployed for secure VPC connectivity and availability zone distribution.
91
+ *
92
+ * Use cases: VPC network placement; Subnet-specific deployment; Multi-AZ cluster distribution
93
+ *
94
+ * AWS: Amazon VPC subnets for Redshift cluster node placement and network configuration
95
+ *
96
+ * Validation: Must be array of valid subnet IDs; required; subnets must exist in specified VPC
97
+ **/
98
+ readonly subnetIds: string[];
99
+ /**
100
+ * Q-ENHANCED-PROPERTY
101
+ * Required security group ingress configuration defining allowed inbound connections to the cluster. Specifies IPv4 CIDR blocks and security group IDs that can connect to the cluster port for controlled network access.
102
+ *
103
+ * Use cases: Network access control; Client connectivity; Security group management
104
+ *
105
+ * AWS: Amazon VPC security group ingress rules for Redshift cluster access control
106
+ *
107
+ * Validation: Must be object with ipv4 and/or sg arrays; required; defines allowed inbound connections
108
+ * **/
109
+ readonly securityGroupIngress: {
110
+ ipv4?: string[];
111
+ sg?: string[];
112
+ };
113
+ /**
114
+ * Q-ENHANCED-PROPERTY
115
+ * Required node type specification determining compute and storage capacity for cluster nodes. Controls the underlying EC2 instance type and affects performance, storage, and cost characteristics of the data warehouse.
116
+ *
117
+ * Use cases: Performance optimization; Cost management; Workload-specific sizing
118
+ *
119
+ * AWS: Amazon Redshift node type for compute and storage capacity configuration
120
+ *
121
+ * Validation: Must be valid Redshift node type; required; determines cluster compute and storage capacity
122
+ **/
123
+ readonly nodeType: string;
124
+ /**
125
+ * Q-ENHANCED-PROPERTY
126
+ * Required number of nodes for the Redshift cluster determining total compute capacity and parallel processing capability. Controls cluster size and affects performance, cost, and data distribution characteristics.
127
+ *
128
+ * Use cases: Cluster sizing; Performance scaling; Cost optimization
129
+ *
130
+ * AWS: Amazon Redshift cluster node count for compute capacity and parallel processing
131
+ *
132
+ * Validation: Must be positive integer; required; determines cluster size and processing capacity
133
+ **/
134
+ readonly numberOfNodes: number;
135
+ /**
136
+ * Q-ENHANCED-PROPERTY
137
+ * Required flag enabling audit logging to S3 for compliance and security monitoring. When enabled, creates dedicated S3 bucket for Redshift audit logs with SSE-S3 encryption as required by Redshift audit logging constraints.
138
+ *
139
+ * Use cases: Compliance auditing; Security monitoring; Audit trail management
140
+ *
141
+ * AWS: Amazon Redshift audit logging to S3 for compliance and security monitoring
142
+ *
143
+ * Validation: Boolean value; required; creates SSE-S3 encrypted audit bucket when enabled
144
+ **/
145
+ readonly enableAuditLoggingToS3: boolean;
146
+ /**
147
+ * Q-ENHANCED-PROPERTY
148
+ * Optional cluster port number for client connections enabling custom port configuration and network security. Defines the TCP port on which the Redshift cluster accepts client connections, supporting custom networking requirements and security configurations.
149
+ *
150
+ * Use cases: Custom port configuration; Network security; Client connection management; Port standardization
151
+ *
152
+ * AWS: Amazon Redshift cluster port configuration for client connection management
153
+ *
154
+ * Validation: Must be valid port number if specified; defaults to 54390; must be accessible through security groups
155
+ **/
156
+ readonly clusterPort?: number;
157
+ /**
158
+ * Q-ENHANCED-PROPERTY
159
+ * Optional flag controlling cluster node configuration for single-node or multi-node deployment. When true, creates multi-node cluster for distributed processing; when false, creates single-node cluster for development or small workloads.
160
+ *
161
+ * Use cases: Cluster architecture selection; Development vs production deployment; Cost optimization; Performance scaling
162
+ *
163
+ * AWS: Amazon Redshift cluster type configuration for single-node or multi-node deployment
164
+ *
165
+ * Validation: Boolean value; determines cluster architecture and node distribution; affects performance and cost
166
+ **/
167
+ readonly multiNode?: boolean;
168
+ /**
169
+ * Q-ENHANCED-PROPERTY
170
+ * Required preferred maintenance window for automated cluster maintenance operations. Specifies the weekly time range during which system maintenance can occur, minimizing impact on business operations and ensuring predictable maintenance scheduling.
171
+ *
172
+ * Use cases: Maintenance scheduling; Business continuity; Operational planning; Downtime management
173
+ *
174
+ * AWS: Amazon Redshift preferred maintenance window for automated system maintenance
175
+ *
176
+ * Validation: Must be valid time window format (e.g., 'Sun:23:45-Mon:00:15'); required; defines maintenance scheduling
177
+ **/
178
+ readonly preferredMaintenanceWindow: string;
179
+ /**
180
+ * Q-ENHANCED-PROPERTY
181
+ * Optional parameter group parameters for cluster configuration customization enabling performance tuning and operational optimization. Provides additional cluster parameters while security-sensitive values are automatically overridden for compliance and security.
182
+ *
183
+ * Use cases: Performance tuning; Operational optimization; Custom cluster configuration; Workload-specific settings
184
+ *
185
+ * AWS: Amazon Redshift parameter group configuration for cluster customization and optimization
186
+ *
187
+ * Validation: Must be object with string key-value pairs if provided; security-sensitive values will be overridden
188
+ * **/
189
+ readonly parameterGroupParams?: Record<string, string>;
190
+ /**
191
+ * Q-ENHANCED-PROPERTY
192
+ * Optional workload management configuration for query performance optimization and resource allocation. Defines WLM configuration elements for managing query queues, memory allocation, and concurrency for optimal cluster performance.
193
+ *
194
+ * Use cases: Query performance optimization; Resource allocation; Workload management; Concurrency control
195
+ *
196
+ * AWS: Amazon Redshift workload management configuration for query optimization and resource control
197
+ *
198
+ * Validation: Must be array of valid ConfigurationElement objects if provided; defines WLM configuration
199
+ **/
200
+ readonly workloadManagement?: ConfigurationElement[];
201
+ /**
202
+ * Q-ENHANCED-PROPERTY
203
+ * Optional additional KMS key ARNs for cluster bucket encryption enabling multi-key encryption scenarios and cross-account access. Provides additional KMS keys that can be used for writing to the cluster bucket beyond the default cluster encryption key.
204
+ *
205
+ * Use cases: Multi-key encryption; Cross-account access; Additional encryption keys; Flexible key management
206
+ *
207
+ * AWS: AWS KMS key ARNs for additional cluster bucket encryption and access control
208
+ *
209
+ * Validation: Must be array of valid KMS key ARNs if provided; keys must be accessible for bucket operations
210
+ **/
211
+ readonly additionalBucketKmsKeyArns?: string[];
212
+ /**
213
+ * Q-ENHANCED-PROPERTY
214
+ * Optional scheduled actions for automated cluster pause and resume operations enabling cost optimization and operational automation. Defines scheduled pause and resume actions for the cluster to optimize costs during non-business hours.
215
+ *
216
+ * Use cases: Cost optimization; Automated operations; Scheduled maintenance; Resource management
217
+ *
218
+ * AWS: Amazon Redshift scheduled actions for automated cluster pause and resume operations
219
+ *
220
+ * Validation: Must be array of valid ScheduledActionProps if provided; defines automated cluster operations
221
+ **/
222
+ readonly scheduledActions?: ScheduledActionProps[];
223
+ /**
224
+ * Q-ENHANCED-PROPERTY
225
+ * Optional database users for automated user creation and credential management enabling secure user provisioning and rotation. Creates database users in Redshift with automated credential storage and rotation through Secrets Manager and SSM.
226
+ *
227
+ * Use cases: Automated user provisioning; Credential management; Security automation; User lifecycle management
228
+ *
229
+ * AWS: Amazon Redshift database users with Secrets Manager and SSM integration for credential management
230
+ *
231
+ * Validation: Must be array of valid DatabaseUsersProps if provided; enables automated user and credential management
232
+ * **/
233
+ readonly databaseUsers?: DatabaseUsersProps[];
234
+ /**
235
+ * Q-ENHANCED-PROPERTY
236
+ * Optional flag controlling data warehouse bucket creation for cluster storage operations. When enabled (default), creates dedicated S3 bucket for data warehouse operations including data loading, unloading, and backup storage.
237
+ *
238
+ * Use cases: Storage resource management; Data operations; Backup storage; ETL operations
239
+ *
240
+ * AWS: Amazon S3 bucket creation for Redshift data warehouse storage operations
241
+ *
242
+ * Validation: Boolean value; defaults to true; creates dedicated warehouse bucket when enabled
243
+ **/
244
+ readonly createWarehouseBucket?: boolean;
245
+ /**
246
+ * Q-ENHANCED-PROPERTY
247
+ * Optional retention period for automated snapshots enabling backup management and data protection. Specifies the number of days automated snapshots are retained for point-in-time recovery and data protection requirements.
248
+ *
249
+ * Use cases: Backup management; Data protection; Point-in-time recovery; Compliance requirements
250
+ *
251
+ * AWS: Amazon Redshift automated snapshot retention for backup management and data protection
252
+ *
253
+ * Validation: Must be positive integer if specified; defines snapshot retention period for backup management
254
+ **/
255
+ readonly automatedSnapshotRetentionDays?: number;
256
+ /**
257
+ * Q-ENHANCED-PROPERTY
258
+ * Optional event notification configuration for cluster and scheduled action monitoring enabling operational awareness and alerting. Configures SNS notifications for cluster events and scheduled action status for operational monitoring.
259
+ *
260
+ * Use cases: Operational monitoring; Event alerting; Cluster status tracking; Automated notifications
261
+ *
262
+ * AWS: Amazon SNS notifications for Redshift cluster events and operational monitoring
263
+ *
264
+ * Validation: Must be valid EventNotificationsProps if provided; enables cluster event monitoring and alerting
265
+ **/
266
+ readonly eventNotifications?: EventNotificationsProps;
267
+ /**
268
+ * Q-ENHANCED-PROPERTY
269
+ * Optional database name for initial database creation enabling custom database naming and organization. Specifies the name of the initial database created in the cluster, supporting custom naming conventions and database organization.
270
+ *
271
+ * Use cases: Custom database naming; Database organization; Initial database setup; Naming conventions
272
+ *
273
+ * AWS: Amazon Redshift initial database name for cluster database creation and organization
274
+ *
275
+ * Validation: Must be valid database name if specified; defaults to "default_db"; used for initial database creation
276
+ **/
277
+ readonly dbName?: string;
278
+ /**
279
+ * Q-ENHANCED-PROPERTY
280
+ * Optional snapshot identifier for cluster restoration from existing snapshot enabling disaster recovery and data migration. Specifies the snapshot ID to restore the cluster from, supporting disaster recovery scenarios and data migration operations.
281
+ *
282
+ * Use cases: Disaster recovery; Data migration; Cluster restoration; Backup recovery
283
+ *
284
+ * AWS: Amazon Redshift snapshot identifier for cluster restoration and disaster recovery
285
+ *
286
+ * Validation: Must be valid snapshot identifier if specified; only provide when restoring from snapshot
287
+ **/
288
+ readonly snapshotIdentifier?: string;
289
+ /**
290
+ * ownerAccount Refers to snapshot owner account. Applicable if restoring the cluster from snapshot and snapshot belongs to another account
291
+ * Optional - By default, snapshots are searched within current account
292
+ */
293
+ readonly snapshotOwnerAccount?: number;
294
+ readonly redshiftManageMasterPassword?: boolean;
295
+ }
296
+ export declare class DataWarehouseConfigParser extends MdaaAppConfigParser<DataWarehouseConfigContents> {
297
+ readonly adminUsername: string;
298
+ readonly adminPasswordRotationDays: number;
299
+ readonly federations: FederationProps[];
300
+ readonly databaseUsers: DatabaseUsersProps[];
301
+ readonly dataAdminRoleRefs: MdaaRoleRef[];
302
+ readonly warehouseBucketUserRoleRefs?: MdaaRoleRef[];
303
+ readonly executionRoleRefs?: MdaaRoleRef[];
304
+ readonly vpcId: string;
305
+ readonly clusterPort: number;
306
+ readonly subnetIds: string[];
307
+ readonly nodeType: string;
308
+ readonly enableAuditLoggingToS3: boolean;
309
+ readonly numberOfNodes: number;
310
+ readonly multiNode?: boolean;
311
+ readonly preferredMaintenanceWindow: string;
312
+ readonly securityGroupIngress: {
313
+ ipv4?: string[];
314
+ sg?: string[];
315
+ };
316
+ readonly parameterGroupParams: Record<string, string>;
317
+ readonly workloadManagement: ConfigurationElement[];
318
+ readonly additionalBucketKmsKeyArns?: string[];
319
+ static readonly defaultClusterPort = 54390;
320
+ readonly scheduledActions: ScheduledActionProps[];
321
+ readonly createWarehouseBucket?: boolean;
322
+ readonly automatedSnapshotRetentionDays?: number;
323
+ readonly eventNotifications?: EventNotificationsProps;
324
+ readonly dbName?: string;
325
+ readonly snapshotIdentifier?: string;
326
+ readonly snapshotOwnerAccount?: number;
327
+ readonly redshiftManageMasterPassword?: boolean;
328
+ constructor(stack: Stack, props: MdaaAppConfigParserProps);
329
+ }
@@ -0,0 +1,50 @@
1
+ /*!
2
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+
6
+ "use strict";
7
+
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.DataWarehouseConfigParser = void 0;
10
+ const app_1 = require("@aws-mdaa/app");
11
+ const configSchema = require("./config-schema.json");
12
+ class DataWarehouseConfigParser extends app_1.MdaaAppConfigParser {
13
+ constructor(stack, props) {
14
+ super(stack, props, configSchema);
15
+ this.adminUsername = this.configContents.adminUsername;
16
+ this.adminPasswordRotationDays = this.configContents.adminPasswordRotationDays;
17
+ this.federations = this.configContents.federations ? this.configContents.federations : [];
18
+ this.dataAdminRoleRefs = this.configContents.dataAdminRoles;
19
+ this.warehouseBucketUserRoleRefs = this.configContents.warehouseBucketUserRoles;
20
+ this.executionRoleRefs = this.configContents.executionRoles;
21
+ this.vpcId = this.configContents.vpcId;
22
+ this.subnetIds = this.configContents.subnetIds;
23
+ this.securityGroupIngress = this.configContents.securityGroupIngress;
24
+ this.nodeType = this.configContents.nodeType;
25
+ this.numberOfNodes = this.configContents.numberOfNodes;
26
+ this.enableAuditLoggingToS3 = this.configContents.enableAuditLoggingToS3;
27
+ this.clusterPort = this.configContents.clusterPort
28
+ ? this.configContents.clusterPort
29
+ : DataWarehouseConfigParser.defaultClusterPort;
30
+ this.multiNode = this.configContents.multiNode;
31
+ this.preferredMaintenanceWindow = this.configContents.preferredMaintenanceWindow;
32
+ this.parameterGroupParams = this.configContents.parameterGroupParams
33
+ ? this.configContents.parameterGroupParams
34
+ : {};
35
+ this.workloadManagement = this.configContents.workloadManagement ? this.configContents.workloadManagement : [];
36
+ this.additionalBucketKmsKeyArns = this.configContents.additionalBucketKmsKeyArns;
37
+ this.scheduledActions = this.configContents.scheduledActions ? this.configContents.scheduledActions : [];
38
+ this.databaseUsers = this.configContents.databaseUsers ? this.configContents.databaseUsers : [];
39
+ this.createWarehouseBucket = this.configContents.createWarehouseBucket;
40
+ this.automatedSnapshotRetentionDays = this.configContents.automatedSnapshotRetentionDays;
41
+ this.eventNotifications = this.configContents.eventNotifications;
42
+ this.dbName = this.configContents.dbName;
43
+ this.snapshotIdentifier = this.configContents.snapshotIdentifier;
44
+ this.snapshotOwnerAccount = this.configContents.snapshotOwnerAccount;
45
+ this.redshiftManageMasterPassword = this.configContents.redshiftManageMasterPassword;
46
+ }
47
+ }
48
+ exports.DataWarehouseConfigParser = DataWarehouseConfigParser;
49
+ DataWarehouseConfigParser.defaultClusterPort = 54390;
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXdhcmVob3VzZS1jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJkYXRhd2FyZWhvdXNlLWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHOzs7QUFFSCx1Q0FBc0c7QUFVdEcscURBQXFEO0FBZ1NyRCxNQUFhLHlCQUEwQixTQUFRLHlCQUFnRDtJQThCN0YsWUFBWSxLQUFZLEVBQUUsS0FBK0I7UUFDdkQsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsWUFBc0IsQ0FBQyxDQUFDO1FBRTVDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUM7UUFDdkQsSUFBSSxDQUFDLHlCQUF5QixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMseUJBQXlCLENBQUM7UUFDL0UsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMxRixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUM7UUFDNUQsSUFBSSxDQUFDLDJCQUEyQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsd0JBQXdCLENBQUM7UUFDaEYsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDO1FBQzVELElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUM7UUFDdkMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQztRQUMvQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQztRQUNyRSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO1FBQzdDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUM7UUFDdkQsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsc0JBQXNCLENBQUM7UUFDekUsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVc7WUFDaEQsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVztZQUNqQyxDQUFDLENBQUMseUJBQXlCLENBQUMsa0JBQWtCLENBQUM7UUFDakQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQztRQUMvQyxJQUFJLENBQUMsMEJBQTBCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQywwQkFBMEIsQ0FBQztRQUNqRixJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxvQkFBb0I7WUFDbEUsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsb0JBQW9CO1lBQzFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDUCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQy9HLElBQUksQ0FBQywwQkFBMEIsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLDBCQUEwQixDQUFDO1FBQ2pGLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDekcsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNoRyxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxxQkFBcUIsQ0FBQztRQUN2RSxJQUFJLENBQUMsOEJBQThCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyw4QkFBOEIsQ0FBQztRQUN6RixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQztRQUNqRSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGtCQUFrQixDQUFDO1FBQ2pFLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLG9CQUFvQixDQUFDO1FBQ3JFLElBQUksQ0FBQyw0QkFBNEIsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLDRCQUE0QixDQUFDO0lBQ3ZGLENBQUM7O0FBaEVILDhEQWlFQztBQTdDd0IsNENBQWtCLEdBQUcsS0FBSyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG4gKi9cblxuaW1wb3J0IHsgTWRhYUFwcENvbmZpZ1BhcnNlciwgTWRhYUFwcENvbmZpZ1BhcnNlclByb3BzLCBNZGFhQmFzZUNvbmZpZ0NvbnRlbnRzIH0gZnJvbSAnQGF3cy1tZGFhL2FwcCc7XG5pbXBvcnQge1xuICBGZWRlcmF0aW9uUHJvcHMsXG4gIFNjaGVkdWxlZEFjdGlvblByb3BzLFxuICBEYXRhYmFzZVVzZXJzUHJvcHMsXG4gIEV2ZW50Tm90aWZpY2F0aW9uc1Byb3BzLFxufSBmcm9tICdAYXdzLW1kYWEvZGF0YXdhcmVob3VzZS1sMy1jb25zdHJ1Y3QnO1xuaW1wb3J0IHsgTWRhYVJvbGVSZWYgfSBmcm9tICdAYXdzLW1kYWEvaWFtLXJvbGUtaGVscGVyJztcbmltcG9ydCB7IFNjaGVtYSB9IGZyb20gJ2Fqdic7XG5pbXBvcnQgeyBTdGFjayB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGNvbmZpZ1NjaGVtYSBmcm9tICcuL2NvbmZpZy1zY2hlbWEuanNvbic7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uRWxlbWVudCB9IGZyb20gJ0Bhd3MtbWRhYS9jb25maWcnO1xuXG5leHBvcnQgaW50ZXJmYWNlIERhdGFXYXJlaG91c2VDb25maWdDb250ZW50cyBleHRlbmRzIE1kYWFCYXNlQ29uZmlnQ29udGVudHMge1xuICAvKipcbiAgICogUS1FTkhBTkNFRC1QUk9QRVJUWVxuICAgKiBSZXF1aXJlZCBhZG1pbiB1c2VybmFtZSBmb3IgdGhlIFJlZHNoaWZ0IGNsdXN0ZXIgcHJvdmlkaW5nIGFkbWluaXN0cmF0aXZlIGFjY2VzcyB0byB0aGUgZGF0YSB3YXJlaG91c2UuIERlZmluZXMgdGhlIG1hc3RlciB1c2VyIGFjY291bnQgZm9yIGNsdXN0ZXIgYWRtaW5pc3RyYXRpb24sIGRhdGFiYXNlIG1hbmFnZW1lbnQsIGFuZCBpbml0aWFsIHVzZXIgcHJvdmlzaW9uaW5nLlxuICAgKlxuICAgKiBVc2UgY2FzZXM6IENsdXN0ZXIgYWRtaW5pc3RyYXRpb247IERhdGFiYXNlIG1hbmFnZW1lbnQ7IEluaXRpYWwgdXNlciBwcm92aXNpb25pbmdcbiAgICpcbiAgICogQVdTOiBBbWF6b24gUmVkc2hpZnQgY2x1c3RlciBtYXN0ZXIgdXNlcm5hbWUgZm9yIGFkbWluaXN0cmF0aXZlIGFjY2VzcyBhbmQgZGF0YWJhc2UgbWFuYWdlbWVudFxuICAgKlxuICAgKiBWYWxpZGF0aW9uOiBNdXN0IGJlIHZhbGlkIFJlZHNoaWZ0IHVzZXJuYW1lOyByZXF1aXJlZDsgdXNlZCBmb3IgY2x1c3RlciBhZG1pbmlzdHJhdGl2ZSBhY2Nlc3NcbiAgICoqL1xuICByZWFkb25seSBhZG1pblVzZXJuYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBRLUVOSEFOQ0VELVBST1BFUlRZXG4gICAqIFJlcXVpcmVkIG51bWJlciBvZiBkYXlzIGJldHdlZW4gYXV0b21hdGljIGFkbWluIHBhc3N3b3JkIHJvdGF0aW9ucyBmb3IgZW5oYW5jZWQgc2VjdXJpdHkgY29tcGxpYW5jZS4gRW5hYmxlcyBhdXRvbWF0ZWQgY3JlZGVudGlhbCBtYW5hZ2VtZW50IGFuZCBjb21wbGlhbmNlIHdpdGggcGFzc3dvcmQgcm90YXRpb24gcG9saWNpZXMgZm9yIGltcHJvdmVkIGNsdXN0ZXIgc2VjdXJpdHkgcG9zdHVyZS5cbiAgICpcbiAgICogVXNlIGNhc2VzOiBBdXRvbWF0ZWQgY3JlZGVudGlhbCByb3RhdGlvbjsgU2VjdXJpdHkgcG9saWN5IGNvbXBsaWFuY2U7IFBhc3N3b3JkIG1hbmFnZW1lbnQgYXV0b21hdGlvblxuICAgKlxuICAgKiBBV1M6IEFtYXpvbiBSZWRzaGlmdCBhdXRvbWF0aWMgcGFzc3dvcmQgcm90YXRpb24gY29uZmlndXJhdGlvbiBmb3Igc2VjdXJpdHkgbWFuYWdlbWVudFxuICAgKlxuICAgKiBWYWxpZGF0aW9uOiBNdXN0IGJlIHBvc2l0aXZlIGludGVnZXI7IHJlcXVpcmVkOyBkZWZpbmVzIHBhc3N3b3JkIHJvdGF0aW9uIGZyZXF1ZW5jeSBmb3Igc2VjdXJpdHkgY29tcGxpYW5jZVxuICAgKiovXG4gIHJlYWRvbmx5IGFkbWluUGFzc3dvcmRSb3RhdGlvbkRheXM6IG51bWJlcjtcbiAgLyoqXG4gICAqIFEtRU5IQU5DRUQtUFJPUEVSVFlcbiAgICogT3B0aW9uYWwgYXJyYXkgb2YgZmVkZXJhdGlvbiBjb25maWd1cmF0aW9ucyBmb3IgU0FNTCBvciBPSURDIGlkZW50aXR5IHByb3ZpZGVyIGludGVncmF0aW9uIHdpdGggdGhlIGRhdGEgd2FyZWhvdXNlLiBFbmFibGVzIGZlZGVyYXRlZCBhY2Nlc3MgdG8gUmVkc2hpZnQgdGhyb3VnaCBleHRlcm5hbCBpZGVudGl0eSBwcm92aWRlcnMgZm9yIGNlbnRyYWxpemVkIGlkZW50aXR5IG1hbmFnZW1lbnQgYW5kIFNTTyBjYXBhYmlsaXRpZXMuXG4gICAqXG4gICAqIFVzZSBjYXNlczogU0FNTCBmZWRlcmF0aW9uIHNldHVwOyBPSURDIHByb3ZpZGVyIGludGVncmF0aW9uOyBDZW50cmFsaXplZCBpZGVudGl0eSBtYW5hZ2VtZW50IGZvciBkYXRhIHdhcmVob3VzZSBhY2Nlc3NcbiAgICpcbiAgICogQVdTOiBBV1MgSUFNIGlkZW50aXR5IHByb3ZpZGVyIGNvbmZpZ3VyYXRpb24gZm9yIGZlZGVyYXRlZCBSZWRzaGlmdCBhY2Nlc3MgYW5kIFNTTyBpbnRlZ3JhdGlvblxuICAgKlxuICAgKiBWYWxpZGF0aW9uOiBNdXN0IGJlIGFycmF5IG9mIHZhbGlkIEZlZGVyYXRpb25Qcm9wcyBpZiBwcm92aWRlZDsgZW5hYmxlcyBmZWRlcmF0ZWQgYXV0aGVudGljYXRpb24gd2hlbiBzcGVjaWZpZWRcbiAgICoqL1xuICByZWFkb25seSBmZWRlcmF0aW9ucz86IEZlZGVyYXRpb25Qcm9wc1tdO1xuICAvKipcbiAgICogUS1FTkhBTkNFRC1QUk9QRVJUWVxuICAgKiBSZXF1aXJlZCBhcnJheSBvZiBhZG1pbiByb2xlIHJlZmVyZW5jZXMgd2l0aCBmdWxsIGFjY2VzcyB0byBjbHVzdGVyIHJlc291cmNlcyBpbmNsdWRpbmcgS01TIGtleXMgYW5kIFMzIGJ1Y2tldHMuIFByb3ZpZGVzIGFkbWluaXN0cmF0aXZlIHBlcm1pc3Npb25zIGZvciBkYXRhIHdhcmVob3VzZSBtYW5hZ2VtZW50LCBzZWN1cml0eSBhZG1pbmlzdHJhdGlvbiwgYW5kIHJlc291cmNlIGFjY2VzcyBjb250cm9sLlxuICAgKlxuICAgKiBVc2UgY2FzZXM6IEFkbWluaXN0cmF0aXZlIGFjY2VzcyBjb250cm9sOyBTZWN1cml0eSBtYW5hZ2VtZW50OyBSZXNvdXJjZSBhZG1pbmlzdHJhdGlvblxuICAgKlxuICAgKiBBV1M6IEFXUyBJQU0gcm9sZXMgd2l0aCBmdWxsIFJlZHNoaWZ0IGNsdXN0ZXIgYW5kIHJlc291cmNlIGFjY2VzcyBwZXJtaXNzaW9uc1xuICAgKlxuICAgKiBWYWxpZGF0aW9uOiBNdXN0IGJlIGFycmF5IG9mIHZhbGlkIE1kYWFSb2xlUmVmIG9iamVjdHM7IHJlcXVpcmVkOyByb2xlcyByZWNlaXZlIGZ1bGwgY2x1c3RlciBhY2Nlc3NcbiAgICoqL1xuICByZWFkb25seSBkYXRhQWRtaW5Sb2xlczogTWRhYVJvbGVSZWZbXTtcbiAgLyoqXG4gICAqIFEtRU5IQU5DRUQtUFJPUEVSVFlcbiAgICogT3B0aW9uYWwgYXJyYXkgb2YgdXNlciByb2xlIHJlZmVyZW5jZXMgd2l0aCBhY2Nlc3MgdG8gZGF0YSB3YXJlaG91c2UgUzMgYnVja2V0cyBmb3IgZGF0YSBsb2FkaW5nIGFuZCB1bmxvYWRpbmcgb3BlcmF0aW9ucy4gRW5hYmxlcyBjb250cm9sbGVkIGFjY2VzcyB0byB3YXJlaG91c2Ugc3RvcmFnZSByZXNvdXJjZXMgZm9yIEVUTCBvcGVyYXRpb25zIGFuZCBkYXRhIG1hbmFnZW1lbnQgd29ya2Zsb3dzLlxuICAgKlxuICAgKiBVc2UgY2FzZXM6IERhdGEgbG9hZGluZyBvcGVyYXRpb25zOyBFVEwgd29ya2Zsb3cgYWNjZXNzOyBDb250cm9sbGVkIHN0b3JhZ2UgYWNjZXNzXG4gICAqXG4gICAqIEFXUzogQVdTIElBTSByb2xlcyB3aXRoIFMzIGJ1Y2tldCBhY2Nlc3MgZm9yIFJlZHNoaWZ0IGRhdGEgb3BlcmF0aW9uc1xuICAgKlxuICAgKiBWYWxpZGF0aW9uOiBNdXN0IGJlIGFycmF5IG9mIHZhbGlkIE1kYWFSb2xlUmVmIG9iamVjdHMgaWYgcHJvdmlkZWQ7IHJvbGVzIHJlY2VpdmUgYnVja2V0IGFjY2VzcyBwZXJtaXNzaW9uc1xuICAgKiovXG4gIHJlYWRvbmx5IHdhcmVob3VzZUJ1Y2tldFVzZXJSb2xlcz86IE1kYWFSb2xlUmVmW107XG4gIC8qKlxuICAgKiBRLUVOSEFOQ0VELVBST1BFUlRZXG4gICAqIE9wdGlvbmFsIGFycmF5IG9mIGV4dGVybmFsIGV4ZWN1dGlvbiByb2xlIHJlZmVyZW5jZXMgZm9yIFJlZHNoaWZ0IGNsdXN0ZXIgb3BlcmF0aW9ucyBhbmQgaW50ZWdyYXRpb25zLiBFbmFibGVzIGNsdXN0ZXIgdG8gYXNzdW1lIGV4dGVybmFsIHJvbGVzIGZvciBjcm9zcy1zZXJ2aWNlIG9wZXJhdGlvbnMsIGRhdGEgYWNjZXNzLCBhbmQgaW50ZWdyYXRpb24gd2l0aCBvdGhlciBBV1Mgc2VydmljZXMuXG4gICAqXG4gICAqIFVzZSBjYXNlczogQ3Jvc3Mtc2VydmljZSBvcGVyYXRpb25zOyBFeHRlcm5hbCBkYXRhIGFjY2VzczsgU2VydmljZSBpbnRlZ3JhdGlvbiB3b3JrZmxvd3NcbiAgICpcbiAgICogQVdTOiBBV1MgSUFNIHJvbGVzIGZvciBSZWRzaGlmdCBjbHVzdGVyIGNyb3NzLXNlcnZpY2Ugb3BlcmF0aW9ucyBhbmQgaW50ZWdyYXRpb25zXG4gICAqXG4gICAqIFZhbGlkYXRpb246IE11c3QgYmUgYXJyYXkgb2YgdmFsaWQgTWRhYVJvbGVSZWYgb2JqZWN0cyBpZiBwcm92aWRlZDsgcm9sZXMgbXVzdCBiZSBhc3N1bWFibGUgYnkgUmVkc2hpZnQgc2VydmljZVxuICAgKiovXG4gIHJlYWRvbmx5IGV4ZWN1dGlvblJvbGVzPzogTWRhYVJvbGVSZWZbXTtcbiAgLyoqXG4gICAqIFEtRU5IQU5DRUQtUFJPUEVSVFlcbiAgICogUmVxdWlyZWQgVlBDIElEIGZvciBSZWRzaGlmdCBjbHVzdGVyIGRlcGxveW1lbnQgcHJvdmlkaW5nIG5ldHdvcmsgaXNvbGF0aW9uIGFuZCBzZWN1cml0eSBjb250cm9scy4gRW5zdXJlcyBjbHVzdGVyIG9wZXJhdGVzIHdpdGhpbiB0aGUgc3BlY2lmaWVkIFZQQyBmb3Igc2VjdXJlIG5ldHdvcmtpbmcgYW5kIGludGVncmF0aW9uIHdpdGggb3RoZXIgVlBDIHJlc291cmNlcy5cbiAgICpcbiAgICogVXNlIGNhc2VzOiBWUEMgbmV0d29yayBpc29sYXRpb247IFNlY3VyZSBuZXR3b3JraW5nOyBWUEMgcmVzb3VyY2UgaW50ZWdyYXRpb25cbiAgICpcbiAgICogQVdTOiBBbWF6b24gVlBDIGZvciBSZWRzaGlmdCBjbHVzdGVyIG5ldHdvcmsgaXNvbGF0aW9uIGFuZCBzZWN1cml0eSBjb250cm9sc1xuICAgKlxuICAgKiBWYWxpZGF0aW9uOiBNdXN0IGJlIHZhbGlkIFZQQyBJRDsgcmVxdWlyZWQ7IFZQQyBtdXN0IGV4aXN0IGFuZCBiZSBhY2Nlc3NpYmxlXG4gICAqKi9cbiAgcmVhZG9ubHkgdnBjSWQ6IHN0cmluZztcbiAgLyoqXG4gICAqIFEtRU5IQU5DRUQtUFJPUEVSVFlcbiAgICogUmVxdWlyZWQgYXJyYXkgb2Ygc3VibmV0IElEcyBmb3IgUmVkc2hpZnQgY2x1c3RlciBub2RlIHBsYWNlbWVudCB3aXRoaW4gdGhlIFZQQy4gRGVmaW5lcyB0aGUgbmV0d29yayBzdWJuZXRzIHdoZXJlIGNsdXN0ZXIgbm9kZXMgd2lsbCBiZSBkZXBsb3llZCBmb3Igc2VjdXJlIFZQQyBjb25uZWN0aXZpdHkgYW5kIGF2YWlsYWJpbGl0eSB6b25lIGRpc3RyaWJ1dGlvbi5cbiAgICpcbiAgICogVXNlIGNhc2VzOiBWUEMgbmV0d29yayBwbGFjZW1lbnQ7IFN1Ym5ldC1zcGVjaWZpYyBkZXBsb3ltZW50OyBNdWx0aS1BWiBjbHVzdGVyIGRpc3RyaWJ1dGlvblxuICAgKlxuICAgKiBBV1M6IEFtYXpvbiBWUEMgc3VibmV0cyBmb3IgUmVkc2hpZnQgY2x1c3RlciBub2RlIHBsYWNlbWVudCBhbmQgbmV0d29yayBjb25maWd1cmF0aW9uXG4gICAqXG4gICAqIFZhbGlkYXRpb246IE11c3QgYmUgYXJyYXkgb2YgdmFsaWQgc3VibmV0IElEczsgcmVxdWlyZWQ7IHN1Ym5ldHMgbXVzdCBleGlzdCBpbiBzcGVjaWZpZWQgVlBDXG4gICAqKi9cbiAgcmVhZG9ubHkgc3VibmV0SWRzOiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFEtRU5IQU5DRUQtUFJPUEVSVFlcbiAgICogUmVxdWlyZWQgc2VjdXJpdHkgZ3JvdXAgaW5ncmVzcyBjb25maWd1cmF0aW9uIGRlZmluaW5nIGFsbG93ZWQgaW5ib3VuZCBjb25uZWN0aW9ucyB0byB0aGUgY2x1c3Rlci4gU3BlY2lmaWVzIElQdjQgQ0lEUiBibG9ja3MgYW5kIHNlY3VyaXR5IGdyb3VwIElEcyB0aGF0IGNhbiBjb25uZWN0IHRvIHRoZSBjbHVzdGVyIHBvcnQgZm9yIGNvbnRyb2xsZWQgbmV0d29yayBhY2Nlc3MuXG4gICAqXG4gICAqIFVzZSBjYXNlczogTmV0d29yayBhY2Nlc3MgY29udHJvbDsgQ2xpZW50IGNvbm5lY3Rpdml0eTsgU2VjdXJpdHkgZ3JvdXAgbWFuYWdlbWVudFxuICAgKlxuICAgKiBBV1M6IEFtYXpvbiBWUEMgc2VjdXJpdHkgZ3JvdXAgaW5ncmVzcyBydWxlcyBmb3IgUmVkc2hpZnQgY2x1c3RlciBhY2Nlc3MgY29udHJvbFxuICAgKlxuICAgKiBWYWxpZGF0aW9uOiBNdXN0IGJlIG9iamVjdCB3aXRoIGlwdjQgYW5kL29yIHNnIGFycmF5czsgcmVxdWlyZWQ7IGRlZmluZXMgYWxsb3dlZCBpbmJvdW5kIGNvbm5lY3Rpb25zXG4gICAqICAgKiovXG4gIHJlYWRvbmx5IHNlY3VyaXR5R3JvdXBJbmdyZXNzOiB7IGlwdjQ/OiBzdHJpbmdbXTsgc2c/OiBzdHJpbmdbXSB9O1xuICAvKipcbiAgICogUS1FTkhBTkNFRC1QUk9QRVJUWVxuICAgKiBSZXF1aXJlZCBub2RlIHR5cGUgc3BlY2lmaWNhdGlvbiBkZXRlcm1pbmluZyBjb21wdXRlIGFuZCBzdG9yYWdlIGNhcGFjaXR5IGZvciBjbHVzdGVyIG5vZGVzLiBDb250cm9scyB0aGUgdW5kZXJseWluZyBFQzIgaW5zdGFuY2UgdHlwZSBhbmQgYWZmZWN0cyBwZXJmb3JtYW5jZSwgc3RvcmFnZSwgYW5kIGNvc3QgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBkYXRhIHdhcmVob3VzZS5cbiAgICpcbiAgICogVXNlIGNhc2VzOiBQZXJmb3JtYW5jZSBvcHRpbWl6YXRpb247IENvc3QgbWFuYWdlbWVudDsgV29ya2xvYWQtc3BlY2lmaWMgc2l6aW5nXG4gICAqXG4gICAqIEFXUzogQW1hem9uIFJlZHNoaWZ0IG5vZGUgdHlwZSBmb3IgY29tcHV0ZSBhbmQgc3RvcmFnZSBjYXBhY2l0eSBjb25maWd1cmF0aW9uXG4gICAqXG4gICAqIFZhbGlkYXRpb246IE11c3QgYmUgdmFsaWQgUmVkc2hpZnQgbm9kZSB0eXBlOyByZXF1aXJlZDsgZGV0ZXJtaW5lcyBjbHVzdGVyIGNvbXB1dGUgYW5kIHN0b3JhZ2UgY2FwYWNpdHlcbiAgICoqL1xuICByZWFkb25seSBub2RlVHlwZTogc3RyaW5nO1xuICAvKipcbiAgICogUS1FTkhBTkNFRC1QUk9QRVJUWVxuICAgKiBSZXF1aXJlZCBudW1iZXIgb2Ygbm9kZXMgZm9yIHRoZSBSZWRzaGlmdCBjbHVzdGVyIGRldGVybWluaW5nIHRvdGFsIGNvbXB1dGUgY2FwYWNpdHkgYW5kIHBhcmFsbGVsIHByb2Nlc3NpbmcgY2FwYWJpbGl0eS4gQ29udHJvbHMgY2x1c3RlciBzaXplIGFuZCBhZmZlY3RzIHBlcmZvcm1hbmNlLCBjb3N0LCBhbmQgZGF0YSBkaXN0cmlidXRpb24gY2hhcmFjdGVyaXN0aWNzLlxuICAgKlxuICAgKiBVc2UgY2FzZXM6IENsdXN0ZXIgc2l6aW5nOyBQZXJmb3JtYW5jZSBzY2FsaW5nOyBDb3N0IG9wdGltaXphdGlvblxuICAgKlxuICAgKiBBV1M6IEFtYXpvbiBSZWRzaGlmdCBjbHVzdGVyIG5vZGUgY291bnQgZm9yIGNvbXB1dGUgY2FwYWNpdHkgYW5kIHBhcmFsbGVsIHByb2Nlc3NpbmdcbiAgICpcbiAgICogVmFsaWRhdGlvbjogTXVzdCBiZSBwb3NpdGl2ZSBpbnRlZ2VyOyByZXF1aXJlZDsgZGV0ZXJtaW5lcyBjbHVzdGVyIHNpemUgYW5kIHByb2Nlc3NpbmcgY2FwYWNpdHlcbiAgICoqL1xuICByZWFkb25seSBudW1iZXJPZk5vZGVzOiBudW1iZXI7XG4gIC8qKlxuICAgKiBRLUVOSEFOQ0VELVBST1BFUlRZXG4gICAqIFJlcXVpcmVkIGZsYWcgZW5hYmxpbmcgYXVkaXQgbG9nZ2luZyB0byBTMyBmb3IgY29tcGxpYW5jZSBhbmQgc2VjdXJpdHkgbW9uaXRvcmluZy4gV2hlbiBlbmFibGVkLCBjcmVhdGVzIGRlZGljYXRlZCBTMyBidWNrZXQgZm9yIFJlZHNoaWZ0IGF1ZGl0IGxvZ3Mgd2l0aCBTU0UtUzMgZW5jcnlwdGlvbiBhcyByZXF1aXJlZCBieSBSZWRzaGlmdCBhdWRpdCBsb2dnaW5nIGNvbnN0cmFpbnRzLlxuICAgKlxuICAgKiBVc2UgY2FzZXM6IENvbXBsaWFuY2UgYXVkaXRpbmc7IFNlY3VyaXR5IG1vbml0b3Jpbmc7IEF1ZGl0IHRyYWlsIG1hbmFnZW1lbnRcbiAgICpcbiAgICogQVdTOiBBbWF6b24gUmVkc2hpZnQgYXVkaXQgbG9nZ2luZyB0byBTMyBmb3IgY29tcGxpYW5jZSBhbmQgc2VjdXJpdHkgbW9uaXRvcmluZ1xuICAgKlxuICAgKiBWYWxpZGF0aW9uOiBCb29sZWFuIHZhbHVlOyByZXF1aXJlZDsgY3JlYXRlcyBTU0UtUzMgZW5jcnlwdGVkIGF1ZGl0IGJ1Y2tldCB3aGVuIGVuYWJsZWRcbiAgICoqL1xuICByZWFkb25seSBlbmFibGVBdWRpdExvZ2dpbmdUb1MzOiBib29sZWFuO1xuICAvKipcbiAgICogUS1FTkhBTkNFRC1QUk9QRVJUWVxuICAgKiBPcHRpb25hbCBjbHVzdGVyIHBvcnQgbnVtYmVyIGZvciBjbGllbnQgY29ubmVjdGlvbnMgZW5hYmxpbmcgY3VzdG9tIHBvcnQgY29uZmlndXJhdGlvbiBhbmQgbmV0d29yayBzZWN1cml0eS4gRGVmaW5lcyB0aGUgVENQIHBvcnQgb24gd2hpY2ggdGhlIFJlZHNoaWZ0IGNsdXN0ZXIgYWNjZXB0cyBjbGllbnQgY29ubmVjdGlvbnMsIHN1cHBvcnRpbmcgY3VzdG9tIG5ldHdvcmtpbmcgcmVxdWlyZW1lbnRzIGFuZCBzZWN1cml0eSBjb25maWd1cmF0aW9ucy5cbiAgICpcbiAgICogVXNlIGNhc2VzOiBDdXN0b20gcG9ydCBjb25maWd1cmF0aW9uOyBOZXR3b3JrIHNlY3VyaXR5OyBDbGllbnQgY29ubmVjdGlvbiBtYW5hZ2VtZW50OyBQb3J0IHN0YW5kYXJkaXphdGlvblxuICAgKlxuICAgKiBBV1M6IEFtYXpvbiBSZWRzaGlmdCBjbHVzdGVyIHBvcnQgY29uZmlndXJhdGlvbiBmb3IgY2xpZW50IGNvbm5lY3Rpb24gbWFuYWdlbWVudFxuICAgKlxuICAgKiBWYWxpZGF0aW9uOiBNdXN0IGJlIHZhbGlkIHBvcnQgbnVtYmVyIGlmIHNwZWNpZmllZDsgZGVmYXVsdHMgdG8gNTQzOTA7IG11c3QgYmUgYWNjZXNzaWJsZSB0aHJvdWdoIHNlY3VyaXR5IGdyb3Vwc1xuICAgKiovXG4gIHJlYWRvbmx5IGNsdXN0ZXJQb3J0PzogbnVtYmVyO1xuICAvKipcbiAgICogUS1FTkhBTkNFRC1QUk9QRVJUWVxuICAgKiBPcHRpb25hbCBmbGFnIGNvbnRyb2xsaW5nIGNsdXN0ZXIgbm9kZSBjb25maWd1cmF0aW9uIGZvciBzaW5nbGUtbm9kZSBvciBtdWx0aS1ub2RlIGRlcGxveW1lbnQuIFdoZW4gdHJ1ZSwgY3JlYXRlcyBtdWx0aS1ub2RlIGNsdXN0ZXIgZm9yIGRpc3RyaWJ1dGVkIHByb2Nlc3Npbmc7IHdoZW4gZmFsc2UsIGNyZWF0ZXMgc2luZ2xlLW5vZGUgY2x1c3RlciBmb3IgZGV2ZWxvcG1lbnQgb3Igc21hbGwgd29ya2xvYWRzLlxuICAgKlxuICAgKiBVc2UgY2FzZXM6IENsdXN0ZXIgYXJjaGl0ZWN0dXJlIHNlbGVjdGlvbjsgRGV2ZWxvcG1lbnQgdnMgcHJvZHVjdGlvbiBkZXBsb3ltZW50OyBDb3N0IG9wdGltaXphdGlvbjsgUGVyZm9ybWFuY2Ugc2NhbGluZ1xuICAgKlxuICAgKiBBV1M6IEFtYXpvbiBSZWRzaGlmdCBjbHVzdGVyIHR5cGUgY29uZmlndXJhdGlvbiBmb3Igc2luZ2xlLW5vZGUgb3IgbXVsdGktbm9kZSBkZXBsb3ltZW50XG4gICAqXG4gICAqIFZhbGlkYXRpb246IEJvb2xlYW4gdmFsdWU7IGRldGVybWluZXMgY2x1c3RlciBhcmNoaXRlY3R1cmUgYW5kIG5vZGUgZGlzdHJpYnV0aW9uOyBhZmZlY3RzIHBlcmZvcm1hbmNlIGFuZCBjb3N0XG4gICAqKi9cbiAgcmVhZG9ubHkgbXVsdGlOb2RlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFEtRU5IQU5DRUQtUFJPUEVSVFlcbiAgICogUmVxdWlyZWQgcHJlZmVycmVkIG1haW50ZW5hbmNlIHdpbmRvdyBmb3IgYXV0b21hdGVkIGNsdXN0ZXIgbWFpbnRlbmFuY2Ugb3BlcmF0aW9ucy4gU3BlY2lmaWVzIHRoZSB3ZWVrbHkgdGltZSByYW5nZSBkdXJpbmcgd2hpY2ggc3lzdGVtIG1haW50ZW5hbmNlIGNhbiBvY2N1ciwgbWluaW1pemluZyBpbXBhY3Qgb24gYnVzaW5lc3Mgb3BlcmF0aW9ucyBhbmQgZW5zdXJpbmcgcHJlZGljdGFibGUgbWFpbnRlbmFuY2Ugc2NoZWR1bGluZy5cbiAgICpcbiAgICogVXNlIGNhc2VzOiBNYWludGVuYW5jZSBzY2hlZHVsaW5nOyBCdXNpbmVzcyBjb250aW51aXR5OyBPcGVyYXRpb25hbCBwbGFubmluZzsgRG93bnRpbWUgbWFuYWdlbWVudFxuICAgKlxuICAgKiBBV1M6IEFtYXpvbiBSZWRzaGlmdCBwcmVmZXJyZWQgbWFpbnRlbmFuY2Ugd2luZG93IGZvciBhdXRvbWF0ZWQgc3lzdGVtIG1haW50ZW5hbmNlXG4gICAqXG4gICAqIFZhbGlkYXRpb246IE11c3QgYmUgdmFsaWQgdGltZSB3aW5kb3cgZm9ybWF0IChlLmcuLCAnU3VuOjIzOjQ1LU1vbjowMDoxNScpOyByZXF1aXJlZDsgZGVmaW5lcyBtYWludGVuYW5jZSBzY2hlZHVsaW5nXG4gICAqKi9cbiAgcmVhZG9ubHkgcHJlZmVycmVkTWFpbnRlbmFuY2VXaW5kb3c6IHN0cmluZztcbiAgLyoqXG4gICAqIFEtRU5IQU5DRUQtUFJPUEVSVFlcbiAgICogT3B0aW9uYWwgcGFyYW1ldGVyIGdyb3VwIHBhcmFtZXRlcnMgZm9yIGNsdXN0ZXIgY29uZmlndXJhdGlvbiBjdXN0b21pemF0aW9uIGVuYWJsaW5nIHBlcmZvcm1hbmNlIHR1bmluZyBhbmQgb3BlcmF0aW9uYWwgb3B0aW1pemF0aW9uLiBQcm92aWRlcyBhZGRpdGlvbmFsIGNsdXN0ZXIgcGFyYW1ldGVycyB3aGlsZSBzZWN1cml0eS1zZW5zaXRpdmUgdmFsdWVzIGFyZSBhdXRvbWF0aWNhbGx5IG92ZXJyaWRkZW4gZm9yIGNvbXBsaWFuY2UgYW5kIHNlY3VyaXR5LlxuICAgKlxuICAgKiBVc2UgY2FzZXM6IFBlcmZvcm1hbmNlIHR1bmluZzsgT3BlcmF0aW9uYWwgb3B0aW1pemF0aW9uOyBDdXN0b20gY2x1c3RlciBjb25maWd1cmF0aW9uOyBXb3JrbG9hZC1zcGVjaWZpYyBzZXR0aW5nc1xuICAgKlxuICAgKiBBV1M6IEFtYXpvbiBSZWRzaGlmdCBwYXJhbWV0ZXIgZ3JvdXAgY29uZmlndXJhdGlvbiBmb3IgY2x1c3RlciBjdXN0b21pemF0aW9uIGFuZCBvcHRpbWl6YXRpb25cbiAgICpcbiAgICogVmFsaWRhdGlvbjogTXVzdCBiZSBvYmplY3Qgd2l0aCBzdHJpbmcga2V5LXZhbHVlIHBhaXJzIGlmIHByb3ZpZGVkOyBzZWN1cml0eS1zZW5zaXRpdmUgdmFsdWVzIHdpbGwgYmUgb3ZlcnJpZGRlblxuICAgKiAgICoqL1xuICByZWFkb25seSBwYXJhbWV0ZXJHcm91cFBhcmFtcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIC8qKlxuICAgKiBRLUVOSEFOQ0VELVBST1BFUlRZXG4gICAqIE9wdGlvbmFsIHdvcmtsb2FkIG1hbmFnZW1lbnQgY29uZmlndXJhdGlvbiBmb3IgcXVlcnkgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIGFuZCByZXNvdXJjZSBhbGxvY2F0aW9uLiBEZWZpbmVzIFdMTSBjb25maWd1cmF0aW9uIGVsZW1lbnRzIGZvciBtYW5hZ2luZyBxdWVyeSBxdWV1ZXMsIG1lbW9yeSBhbGxvY2F0aW9uLCBhbmQgY29uY3VycmVuY3kgZm9yIG9wdGltYWwgY2x1c3RlciBwZXJmb3JtYW5jZS5cbiAgICpcbiAgICogVXNlIGNhc2VzOiBRdWVyeSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb247IFJlc291cmNlIGFsbG9jYXRpb247IFdvcmtsb2FkIG1hbmFnZW1lbnQ7IENvbmN1cnJlbmN5IGNvbnRyb2xcbiAgICpcbiAgICogQVdTOiBBbWF6b24gUmVkc2hpZnQgd29ya2xvYWQgbWFuYWdlbWVudCBjb25maWd1cmF0aW9uIGZvciBxdWVyeSBvcHRpbWl6YXRpb24gYW5kIHJlc291cmNlIGNvbnRyb2xcbiAgICpcbiAgICogVmFsaWRhdGlvbjogTXVzdCBiZSBhcnJheSBvZiB2YWxpZCBDb25maWd1cmF0aW9uRWxlbWVudCBvYmplY3RzIGlmIHByb3ZpZGVkOyBkZWZpbmVzIFdMTSBjb25maWd1cmF0aW9uXG4gICAqKi9cbiAgcmVhZG9ubHkgd29ya2xvYWRNYW5hZ2VtZW50PzogQ29uZmlndXJhdGlvbkVsZW1lbnRbXTtcbiAgLyoqXG4gICAqIFEtRU5IQU5DRUQtUFJPUEVSVFlcbiAgICogT3B0aW9uYWwgYWRkaXRpb25hbCBLTVMga2V5IEFSTnMgZm9yIGNsdXN0ZXIgYnVja2V0IGVuY3J5cHRpb24gZW5hYmxpbmcgbXVsdGkta2V5IGVuY3J5cHRpb24gc2NlbmFyaW9zIGFuZCBjcm9zcy1hY2NvdW50IGFjY2Vzcy4gUHJvdmlkZXMgYWRkaXRpb25hbCBLTVMga2V5cyB0aGF0IGNhbiBiZSB1c2VkIGZvciB3cml0aW5nIHRvIHRoZSBjbHVzdGVyIGJ1Y2tldCBiZXlvbmQgdGhlIGRlZmF1bHQgY2x1c3RlciBlbmNyeXB0aW9uIGtleS5cbiAgICpcbiAgICogVXNlIGNhc2VzOiBNdWx0aS1rZXkgZW5jcnlwdGlvbjsgQ3Jvc3MtYWNjb3VudCBhY2Nlc3M7IEFkZGl0aW9uYWwgZW5jcnlwdGlvbiBrZXlzOyBGbGV4aWJsZSBrZXkgbWFuYWdlbWVudFxuICAgKlxuICAgKiBBV1M6IEFXUyBLTVMga2V5IEFSTnMgZm9yIGFkZGl0aW9uYWwgY2x1c3RlciBidWNrZXQgZW5jcnlwdGlvbiBhbmQgYWNjZXNzIGNvbnRyb2xcbiAgICpcbiAgICogVmFsaWRhdGlvbjogTXVzdCBiZSBhcnJheSBvZiB2YWxpZCBLTVMga2V5IEFSTnMgaWYgcHJvdmlkZWQ7IGtleXMgbXVzdCBiZSBhY2Nlc3NpYmxlIGZvciBidWNrZXQgb3BlcmF0aW9uc1xuICAgKiovXG4gIHJlYWRvbmx5IGFkZGl0aW9uYWxCdWNrZXRLbXNLZXlBcm5zPzogc3RyaW5nW107XG4gIC8qKlxuICAgKiBRLUVOSEFOQ0VELVBST1BFUlRZXG4gICAqIE9wdGlvbmFsIHNjaGVkdWxlZCBhY3Rpb25zIGZvciBhdXRvbWF0ZWQgY2x1c3RlciBwYXVzZSBhbmQgcmVzdW1lIG9wZXJhdGlvbnMgZW5hYmxpbmcgY29zdCBvcHRpbWl6YXRpb24gYW5kIG9wZXJhdGlvbmFsIGF1dG9tYXRpb24uIERlZmluZXMgc2NoZWR1bGVkIHBhdXNlIGFuZCByZXN1bWUgYWN0aW9ucyBmb3IgdGhlIGNsdXN0ZXIgdG8gb3B0aW1pemUgY29zdHMgZHVyaW5nIG5vbi1idXNpbmVzcyBob3Vycy5cbiAgICpcbiAgICogVXNlIGNhc2VzOiBDb3N0IG9wdGltaXphdGlvbjsgQXV0b21hdGVkIG9wZXJhdGlvbnM7IFNjaGVkdWxlZCBtYWludGVuYW5jZTsgUmVzb3VyY2UgbWFuYWdlbWVudFxuICAgKlxuICAgKiBBV1M6IEFtYXpvbiBSZWRzaGlmdCBzY2hlZHVsZWQgYWN0aW9ucyBmb3IgYXV0b21hdGVkIGNsdXN0ZXIgcGF1c2UgYW5kIHJlc3VtZSBvcGVyYXRpb25zXG4gICAqXG4gICAqIFZhbGlkYXRpb246IE11c3QgYmUgYXJyYXkgb2YgdmFsaWQgU2NoZWR1bGVkQWN0aW9uUHJvcHMgaWYgcHJvdmlkZWQ7IGRlZmluZXMgYXV0b21hdGVkIGNsdXN0ZXIgb3BlcmF0aW9uc1xuICAgKiovXG4gIHJlYWRvbmx5IHNjaGVkdWxlZEFjdGlvbnM/OiBTY2hlZHVsZWRBY3Rpb25Qcm9wc1tdO1xuICAvKipcbiAgICogUS1FTkhBTkNFRC1QUk9QRVJUWVxuICAgKiBPcHRpb25hbCBkYXRhYmFzZSB1c2VycyBmb3IgYXV0b21hdGVkIHVzZXIgY3JlYXRpb24gYW5kIGNyZWRlbnRpYWwgbWFuYWdlbWVudCBlbmFibGluZyBzZWN1cmUgdXNlciBwcm92aXNpb25pbmcgYW5kIHJvdGF0aW9uLiBDcmVhdGVzIGRhdGFiYXNlIHVzZXJzIGluIFJlZHNoaWZ0IHdpdGggYXV0b21hdGVkIGNyZWRlbnRpYWwgc3RvcmFnZSBhbmQgcm90YXRpb24gdGhyb3VnaCBTZWNyZXRzIE1hbmFnZXIgYW5kIFNTTS5cbiAgICpcbiAgICogVXNlIGNhc2VzOiBBdXRvbWF0ZWQgdXNlciBwcm92aXNpb25pbmc7IENyZWRlbnRpYWwgbWFuYWdlbWVudDsgU2VjdXJpdHkgYXV0b21hdGlvbjsgVXNlciBsaWZlY3ljbGUgbWFuYWdlbWVudFxuICAgKlxuICAgKiBBV1M6IEFtYXpvbiBSZWRzaGlmdCBkYXRhYmFzZSB1c2VycyB3aXRoIFNlY3JldHMgTWFuYWdlciBhbmQgU1NNIGludGVncmF0aW9uIGZvciBjcmVkZW50aWFsIG1hbmFnZW1lbnRcbiAgICpcbiAgICogVmFsaWRhdGlvbjogTXVzdCBiZSBhcnJheSBvZiB2YWxpZCBEYXRhYmFzZVVzZXJzUHJvcHMgaWYgcHJvdmlkZWQ7IGVuYWJsZXMgYXV0b21hdGVkIHVzZXIgYW5kIGNyZWRlbnRpYWwgbWFuYWdlbWVudFxuICAgKiAgICoqL1xuICByZWFkb25seSBkYXRhYmFzZVVzZXJzPzogRGF0YWJhc2VVc2Vyc1Byb3BzW107XG4gIC8qKlxuICAgKiBRLUVOSEFOQ0VELVBST1BFUlRZXG4gICAqIE9wdGlvbmFsIGZsYWcgY29udHJvbGxpbmcgZGF0YSB3YXJlaG91c2UgYnVja2V0IGNyZWF0aW9uIGZvciBjbHVzdGVyIHN0b3JhZ2Ugb3BlcmF0aW9ucy4gV2hlbiBlbmFibGVkIChkZWZhdWx0KSwgY3JlYXRlcyBkZWRpY2F0ZWQgUzMgYnVja2V0IGZvciBkYXRhIHdhcmVob3VzZSBvcGVyYXRpb25zIGluY2x1ZGluZyBkYXRhIGxvYWRpbmcsIHVubG9hZGluZywgYW5kIGJhY2t1cCBzdG9yYWdlLlxuICAgKlxuICAgKiBVc2UgY2FzZXM6IFN0b3JhZ2UgcmVzb3VyY2UgbWFuYWdlbWVudDsgRGF0YSBvcGVyYXRpb25zOyBCYWNrdXAgc3RvcmFnZTsgRVRMIG9wZXJhdGlvbnNcbiAgICpcbiAgICogQVdTOiBBbWF6b24gUzMgYnVja2V0IGNyZWF0aW9uIGZvciBSZWRzaGlmdCBkYXRhIHdhcmVob3VzZSBzdG9yYWdlIG9wZXJhdGlvbnNcbiAgICpcbiAgICogVmFsaWRhdGlvbjogQm9vbGVhbiB2YWx1ZTsgZGVmYXVsdHMgdG8gdHJ1ZTsgY3JlYXRlcyBkZWRpY2F0ZWQgd2FyZWhvdXNlIGJ1Y2tldCB3aGVuIGVuYWJsZWRcbiAgICoqL1xuICByZWFkb25seSBjcmVhdGVXYXJlaG91c2VCdWNrZXQ/OiBib29sZWFuO1xuICAvKipcbiAgICogUS1FTkhBTkNFRC1QUk9QRVJUWVxuICAgKiBPcHRpb25hbCByZXRlbnRpb24gcGVyaW9kIGZvciBhdXRvbWF0ZWQgc25hcHNob3RzIGVuYWJsaW5nIGJhY2t1cCBtYW5hZ2VtZW50IGFuZCBkYXRhIHByb3RlY3Rpb24uIFNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGRheXMgYXV0b21hdGVkIHNuYXBzaG90cyBhcmUgcmV0YWluZWQgZm9yIHBvaW50LWluLXRpbWUgcmVjb3ZlcnkgYW5kIGRhdGEgcHJvdGVjdGlvbiByZXF1aXJlbWVudHMuXG4gICAqXG4gICAqIFVzZSBjYXNlczogQmFja3VwIG1hbmFnZW1lbnQ7IERhdGEgcHJvdGVjdGlvbjsgUG9pbnQtaW4tdGltZSByZWNvdmVyeTsgQ29tcGxpYW5jZSByZXF1aXJlbWVudHNcbiAgICpcbiAgICogQVdTOiBBbWF6b24gUmVkc2hpZnQgYXV0b21hdGVkIHNuYXBzaG90IHJldGVudGlvbiBmb3IgYmFja3VwIG1hbmFnZW1lbnQgYW5kIGRhdGEgcHJvdGVjdGlvblxuICAgKlxuICAgKiBWYWxpZGF0aW9uOiBNdXN0IGJlIHBvc2l0aXZlIGludGVnZXIgaWYgc3BlY2lmaWVkOyBkZWZpbmVzIHNuYXBzaG90IHJldGVudGlvbiBwZXJpb2QgZm9yIGJhY2t1cCBtYW5hZ2VtZW50XG4gICAqKi9cbiAgcmVhZG9ubHkgYXV0b21hdGVkU25hcHNob3RSZXRlbnRpb25EYXlzPzogbnVtYmVyO1xuICAvKipcbiAgICogUS1FTkhBTkNFRC1QUk9QRVJUWVxuICAgKiBPcHRpb25hbCBldmVudCBub3RpZmljYXRpb24gY29uZmlndXJhdGlvbiBmb3IgY2x1c3RlciBhbmQgc2NoZWR1bGVkIGFjdGlvbiBtb25pdG9yaW5nIGVuYWJsaW5nIG9wZXJhdGlvbmFsIGF3YXJlbmVzcyBhbmQgYWxlcnRpbmcuIENvbmZpZ3VyZXMgU05TIG5vdGlmaWNhdGlvbnMgZm9yIGNsdXN0ZXIgZXZlbnRzIGFuZCBzY2hlZHVsZWQgYWN0aW9uIHN0YXR1cyBmb3Igb3BlcmF0aW9uYWwgbW9uaXRvcmluZy5cbiAgICpcbiAgICogVXNlIGNhc2VzOiBPcGVyYXRpb25hbCBtb25pdG9yaW5nOyBFdmVudCBhbGVydGluZzsgQ2x1c3RlciBzdGF0dXMgdHJhY2tpbmc7IEF1dG9tYXRlZCBub3RpZmljYXRpb25zXG4gICAqXG4gICAqIEFXUzogQW1hem9uIFNOUyBub3RpZmljYXRpb25zIGZvciBSZWRzaGlmdCBjbHVzdGVyIGV2ZW50cyBhbmQgb3BlcmF0aW9uYWwgbW9uaXRvcmluZ1xuICAgKlxuICAgKiBWYWxpZGF0aW9uOiBNdXN0IGJlIHZhbGlkIEV2ZW50Tm90aWZpY2F0aW9uc1Byb3BzIGlmIHByb3ZpZGVkOyBlbmFibGVzIGNsdXN0ZXIgZXZlbnQgbW9uaXRvcmluZyBhbmQgYWxlcnRpbmdcbiAgICoqL1xuICByZWFkb25seSBldmVudE5vdGlmaWNhdGlvbnM/OiBFdmVudE5vdGlmaWNhdGlvbnNQcm9wcztcbiAgLyoqXG4gICAqIFEtRU5IQU5DRUQtUFJPUEVSVFlcbiAgICogT3B0aW9uYWwgZGF0YWJhc2UgbmFtZSBmb3IgaW5pdGlhbCBkYXRhYmFzZSBjcmVhdGlvbiBlbmFibGluZyBjdXN0b20gZGF0YWJhc2UgbmFtaW5nIGFuZCBvcmdhbml6YXRpb24uIFNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgaW5pdGlhbCBkYXRhYmFzZSBjcmVhdGVkIGluIHRoZSBjbHVzdGVyLCBzdXBwb3J0aW5nIGN1c3RvbSBuYW1pbmcgY29udmVudGlvbnMgYW5kIGRhdGFiYXNlIG9yZ2FuaXphdGlvbi5cbiAgICpcbiAgICogVXNlIGNhc2VzOiBDdXN0b20gZGF0YWJhc2UgbmFtaW5nOyBEYXRhYmFzZSBvcmdhbml6YXRpb247IEluaXRpYWwgZGF0YWJhc2Ugc2V0dXA7IE5hbWluZyBjb252ZW50aW9uc1xuICAgKlxuICAgKiBBV1M6IEFtYXpvbiBSZWRzaGlmdCBpbml0aWFsIGRhdGFiYXNlIG5hbWUgZm9yIGNsdXN0ZXIgZGF0YWJhc2UgY3JlYXRpb24gYW5kIG9yZ2FuaXphdGlvblxuICAgKlxuICAgKiBWYWxpZGF0aW9uOiBNdXN0IGJlIHZhbGlkIGRhdGFiYXNlIG5hbWUgaWYgc3BlY2lmaWVkOyBkZWZhdWx0cyB0byBcImRlZmF1bHRfZGJcIjsgdXNlZCBmb3IgaW5pdGlhbCBkYXRhYmFzZSBjcmVhdGlvblxuICAgKiovXG4gIHJlYWRvbmx5IGRiTmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIFEtRU5IQU5DRUQtUFJPUEVSVFlcbiAgICogT3B0aW9uYWwgc25hcHNob3QgaWRlbnRpZmllciBmb3IgY2x1c3RlciByZXN0b3JhdGlvbiBmcm9tIGV4aXN0aW5nIHNuYXBzaG90IGVuYWJsaW5nIGRpc2FzdGVyIHJlY292ZXJ5IGFuZCBkYXRhIG1pZ3JhdGlvbi4gU3BlY2lmaWVzIHRoZSBzbmFwc2hvdCBJRCB0byByZXN0b3JlIHRoZSBjbHVzdGVyIGZyb20sIHN1cHBvcnRpbmcgZGlzYXN0ZXIgcmVjb3Zlcnkgc2NlbmFyaW9zIGFuZCBkYXRhIG1pZ3JhdGlvbiBvcGVyYXRpb25zLlxuICAgKlxuICAgKiBVc2UgY2FzZXM6IERpc2FzdGVyIHJlY292ZXJ5OyBEYXRhIG1pZ3JhdGlvbjsgQ2x1c3RlciByZXN0b3JhdGlvbjsgQmFja3VwIHJlY292ZXJ5XG4gICAqXG4gICAqIEFXUzogQW1hem9uIFJlZHNoaWZ0IHNuYXBzaG90IGlkZW50aWZpZXIgZm9yIGNsdXN0ZXIgcmVzdG9yYXRpb24gYW5kIGRpc2FzdGVyIHJlY292ZXJ5XG4gICAqXG4gICAqIFZhbGlkYXRpb246IE11c3QgYmUgdmFsaWQgc25hcHNob3QgaWRlbnRpZmllciBpZiBzcGVjaWZpZWQ7IG9ubHkgcHJvdmlkZSB3aGVuIHJlc3RvcmluZyBmcm9tIHNuYXBzaG90XG4gICAqKi9cbiAgcmVhZG9ubHkgc25hcHNob3RJZGVudGlmaWVyPzogc3RyaW5nO1xuICAvKipcbiAgICogb3duZXJBY2NvdW50IFJlZmVycyB0byBzbmFwc2hvdCBvd25lciBhY2NvdW50LiBBcHBsaWNhYmxlIGlmIHJlc3RvcmluZyB0aGUgY2x1c3RlciBmcm9tIHNuYXBzaG90IGFuZCBzbmFwc2hvdCBiZWxvbmdzIHRvIGFub3RoZXIgYWNjb3VudFxuICAgKiBPcHRpb25hbCAtIEJ5IGRlZmF1bHQsIHNuYXBzaG90cyBhcmUgc2VhcmNoZWQgd2l0aGluIGN1cnJlbnQgYWNjb3VudFxuICAgKi9cbiAgcmVhZG9ubHkgc25hcHNob3RPd25lckFjY291bnQ/OiBudW1iZXI7XG5cbiAgcmVhZG9ubHkgcmVkc2hpZnRNYW5hZ2VNYXN0ZXJQYXNzd29yZD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBEYXRhV2FyZWhvdXNlQ29uZmlnUGFyc2VyIGV4dGVuZHMgTWRhYUFwcENvbmZpZ1BhcnNlcjxEYXRhV2FyZWhvdXNlQ29uZmlnQ29udGVudHM+IHtcbiAgcHVibGljIHJlYWRvbmx5IGFkbWluVXNlcm5hbWU6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGFkbWluUGFzc3dvcmRSb3RhdGlvbkRheXM6IG51bWJlcjtcbiAgcHVibGljIHJlYWRvbmx5IGZlZGVyYXRpb25zOiBGZWRlcmF0aW9uUHJvcHNbXTtcbiAgcHVibGljIHJlYWRvbmx5IGRhdGFiYXNlVXNlcnM6IERhdGFiYXNlVXNlcnNQcm9wc1tdO1xuICBwdWJsaWMgcmVhZG9ubHkgZGF0YUFkbWluUm9sZVJlZnM6IE1kYWFSb2xlUmVmW107XG4gIHB1YmxpYyByZWFkb25seSB3YXJlaG91c2VCdWNrZXRVc2VyUm9sZVJlZnM/OiBNZGFhUm9sZVJlZltdO1xuICBwdWJsaWMgcmVhZG9ubHkgZXhlY3V0aW9uUm9sZVJlZnM/OiBNZGFhUm9sZVJlZltdO1xuICBwdWJsaWMgcmVhZG9ubHkgdnBjSWQ6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGNsdXN0ZXJQb3J0OiBudW1iZXI7XG4gIHB1YmxpYyByZWFkb25seSBzdWJuZXRJZHM6IHN0cmluZ1tdO1xuICBwdWJsaWMgcmVhZG9ubHkgbm9kZVR5cGU6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGVuYWJsZUF1ZGl0TG9nZ2luZ1RvUzM6IGJvb2xlYW47XG4gIHB1YmxpYyByZWFkb25seSBudW1iZXJPZk5vZGVzOiBudW1iZXI7XG4gIHB1YmxpYyByZWFkb25seSBtdWx0aU5vZGU/OiBib29sZWFuO1xuICBwdWJsaWMgcmVhZG9ubHkgcHJlZmVycmVkTWFpbnRlbmFuY2VXaW5kb3c6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHNlY3VyaXR5R3JvdXBJbmdyZXNzOiB7IGlwdjQ/OiBzdHJpbmdbXTsgc2c/OiBzdHJpbmdbXSB9O1xuICBwdWJsaWMgcmVhZG9ubHkgcGFyYW1ldGVyR3JvdXBQYXJhbXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIHB1YmxpYyByZWFkb25seSB3b3JrbG9hZE1hbmFnZW1lbnQ6IENvbmZpZ3VyYXRpb25FbGVtZW50W107XG4gIHB1YmxpYyByZWFkb25seSBhZGRpdGlvbmFsQnVja2V0S21zS2V5QXJucz86IHN0cmluZ1tdO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IGRlZmF1bHRDbHVzdGVyUG9ydCA9IDU0MzkwO1xuICBwdWJsaWMgcmVhZG9ubHkgc2NoZWR1bGVkQWN0aW9uczogU2NoZWR1bGVkQWN0aW9uUHJvcHNbXTtcbiAgcHVibGljIHJlYWRvbmx5IGNyZWF0ZVdhcmVob3VzZUJ1Y2tldD86IGJvb2xlYW47XG4gIHB1YmxpYyByZWFkb25seSBhdXRvbWF0ZWRTbmFwc2hvdFJldGVudGlvbkRheXM/OiBudW1iZXI7XG4gIHB1YmxpYyByZWFkb25seSBldmVudE5vdGlmaWNhdGlvbnM/OiBFdmVudE5vdGlmaWNhdGlvbnNQcm9wcztcbiAgcHVibGljIHJlYWRvbmx5IGRiTmFtZT86IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHNuYXBzaG90SWRlbnRpZmllcj86IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHNuYXBzaG90T3duZXJBY2NvdW50PzogbnVtYmVyO1xuICBwdWJsaWMgcmVhZG9ubHkgcmVkc2hpZnRNYW5hZ2VNYXN0ZXJQYXNzd29yZD86IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3Ioc3RhY2s6IFN0YWNrLCBwcm9wczogTWRhYUFwcENvbmZpZ1BhcnNlclByb3BzKSB7XG4gICAgc3VwZXIoc3RhY2ssIHByb3BzLCBjb25maWdTY2hlbWEgYXMgU2NoZW1hKTtcblxuICAgIHRoaXMuYWRtaW5Vc2VybmFtZSA9IHRoaXMuY29uZmlnQ29udGVudHMuYWRtaW5Vc2VybmFtZTtcbiAgICB0aGlzLmFkbWluUGFzc3dvcmRSb3RhdGlvbkRheXMgPSB0aGlzLmNvbmZpZ0NvbnRlbnRzLmFkbWluUGFzc3dvcmRSb3RhdGlvbkRheXM7XG4gICAgdGhpcy5mZWRlcmF0aW9ucyA9IHRoaXMuY29uZmlnQ29udGVudHMuZmVkZXJhdGlvbnMgPyB0aGlzLmNvbmZpZ0NvbnRlbnRzLmZlZGVyYXRpb25zIDogW107XG4gICAgdGhpcy5kYXRhQWRtaW5Sb2xlUmVmcyA9IHRoaXMuY29uZmlnQ29udGVudHMuZGF0YUFkbWluUm9sZXM7XG4gICAgdGhpcy53YXJlaG91c2VCdWNrZXRVc2VyUm9sZVJlZnMgPSB0aGlzLmNvbmZpZ0NvbnRlbnRzLndhcmVob3VzZUJ1Y2tldFVzZXJSb2xlcztcbiAgICB0aGlzLmV4ZWN1dGlvblJvbGVSZWZzID0gdGhpcy5jb25maWdDb250ZW50cy5leGVjdXRpb25Sb2xlcztcbiAgICB0aGlzLnZwY0lkID0gdGhpcy5jb25maWdDb250ZW50cy52cGNJZDtcbiAgICB0aGlzLnN1Ym5ldElkcyA9IHRoaXMuY29uZmlnQ29udGVudHMuc3VibmV0SWRzO1xuICAgIHRoaXMuc2VjdXJpdHlHcm91cEluZ3Jlc3MgPSB0aGlzLmNvbmZpZ0NvbnRlbnRzLnNlY3VyaXR5R3JvdXBJbmdyZXNzO1xuICAgIHRoaXMubm9kZVR5cGUgPSB0aGlzLmNvbmZpZ0NvbnRlbnRzLm5vZGVUeXBlO1xuICAgIHRoaXMubnVtYmVyT2ZOb2RlcyA9IHRoaXMuY29uZmlnQ29udGVudHMubnVtYmVyT2ZOb2RlcztcbiAgICB0aGlzLmVuYWJsZUF1ZGl0TG9nZ2luZ1RvUzMgPSB0aGlzLmNvbmZpZ0NvbnRlbnRzLmVuYWJsZUF1ZGl0TG9nZ2luZ1RvUzM7XG4gICAgdGhpcy5jbHVzdGVyUG9ydCA9IHRoaXMuY29uZmlnQ29udGVudHMuY2x1c3RlclBvcnRcbiAgICAgID8gdGhpcy5jb25maWdDb250ZW50cy5jbHVzdGVyUG9ydFxuICAgICAgOiBEYXRhV2FyZWhvdXNlQ29uZmlnUGFyc2VyLmRlZmF1bHRDbHVzdGVyUG9ydDtcbiAgICB0aGlzLm11bHRpTm9kZSA9IHRoaXMuY29uZmlnQ29udGVudHMubXVsdGlOb2RlO1xuICAgIHRoaXMucHJlZmVycmVkTWFpbnRlbmFuY2VXaW5kb3cgPSB0aGlzLmNvbmZpZ0NvbnRlbnRzLnByZWZlcnJlZE1haW50ZW5hbmNlV2luZG93O1xuICAgIHRoaXMucGFyYW1ldGVyR3JvdXBQYXJhbXMgPSB0aGlzLmNvbmZpZ0NvbnRlbnRzLnBhcmFtZXRlckdyb3VwUGFyYW1zXG4gICAgICA/IHRoaXMuY29uZmlnQ29udGVudHMucGFyYW1ldGVyR3JvdXBQYXJhbXNcbiAgICAgIDoge307XG4gICAgdGhpcy53b3JrbG9hZE1hbmFnZW1lbnQgPSB0aGlzLmNvbmZpZ0NvbnRlbnRzLndvcmtsb2FkTWFuYWdlbWVudCA/IHRoaXMuY29uZmlnQ29udGVudHMud29ya2xvYWRNYW5hZ2VtZW50IDogW107XG4gICAgdGhpcy5hZGRpdGlvbmFsQnVja2V0S21zS2V5QXJucyA9IHRoaXMuY29uZmlnQ29udGVudHMuYWRkaXRpb25hbEJ1Y2tldEttc0tleUFybnM7XG4gICAgdGhpcy5zY2hlZHVsZWRBY3Rpb25zID0gdGhpcy5jb25maWdDb250ZW50cy5zY2hlZHVsZWRBY3Rpb25zID8gdGhpcy5jb25maWdDb250ZW50cy5zY2hlZHVsZWRBY3Rpb25zIDogW107XG4gICAgdGhpcy5kYXRhYmFzZVVzZXJzID0gdGhpcy5jb25maWdDb250ZW50cy5kYXRhYmFzZVVzZXJzID8gdGhpcy5jb25maWdDb250ZW50cy5kYXRhYmFzZVVzZXJzIDogW107XG4gICAgdGhpcy5jcmVhdGVXYXJlaG91c2VCdWNrZXQgPSB0aGlzLmNvbmZpZ0NvbnRlbnRzLmNyZWF0ZVdhcmVob3VzZUJ1Y2tldDtcbiAgICB0aGlzLmF1dG9tYXRlZFNuYXBzaG90UmV0ZW50aW9uRGF5cyA9IHRoaXMuY29uZmlnQ29udGVudHMuYXV0b21hdGVkU25hcHNob3RSZXRlbnRpb25EYXlzO1xuICAgIHRoaXMuZXZlbnROb3RpZmljYXRpb25zID0gdGhpcy5jb25maWdDb250ZW50cy5ldmVudE5vdGlmaWNhdGlvbnM7XG4gICAgdGhpcy5kYk5hbWUgPSB0aGlzLmNvbmZpZ0NvbnRlbnRzLmRiTmFtZTtcbiAgICB0aGlzLnNuYXBzaG90SWRlbnRpZmllciA9IHRoaXMuY29uZmlnQ29udGVudHMuc25hcHNob3RJZGVudGlmaWVyO1xuICAgIHRoaXMuc25hcHNob3RPd25lckFjY291bnQgPSB0aGlzLmNvbmZpZ0NvbnRlbnRzLnNuYXBzaG90T3duZXJBY2NvdW50O1xuICAgIHRoaXMucmVkc2hpZnRNYW5hZ2VNYXN0ZXJQYXNzd29yZCA9IHRoaXMuY29uZmlnQ29udGVudHMucmVkc2hpZnRNYW5hZ2VNYXN0ZXJQYXNzd29yZDtcbiAgfVxufVxuIl19
@@ -0,0 +1,11 @@
1
+ /*!
2
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ import { MdaaAppConfigParserProps, MdaaCdkApp } from '@aws-mdaa/app';
6
+ import { MdaaL3ConstructProps } from '@aws-mdaa/l3-construct';
7
+ import { AppProps, Stack } from 'aws-cdk-lib';
8
+ export declare class DataWarehouseCDKApp extends MdaaCdkApp {
9
+ constructor(props?: AppProps);
10
+ protected subGenerateResources(stack: Stack, l3ConstructProps: MdaaL3ConstructProps, parserProps: MdaaAppConfigParserProps): Stack[];
11
+ }
@@ -0,0 +1,28 @@
1
+ /*!
2
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+
6
+ "use strict";
7
+
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.DataWarehouseCDKApp = void 0;
10
+ const app_1 = require("@aws-mdaa/app");
11
+ const datawarehouse_l3_construct_1 = require("@aws-mdaa/datawarehouse-l3-construct");
12
+ const datawarehouse_config_1 = require("./datawarehouse-config");
13
+ class DataWarehouseCDKApp extends app_1.MdaaCdkApp {
14
+ constructor(props = {}) {
15
+ super(props, app_1.MdaaCdkApp.parsePackageJson(`${__dirname}/../package.json`));
16
+ }
17
+ subGenerateResources(stack, l3ConstructProps, parserProps) {
18
+ const appConfig = new datawarehouse_config_1.DataWarehouseConfigParser(stack, parserProps);
19
+ const constructProps = {
20
+ ...appConfig,
21
+ ...l3ConstructProps,
22
+ };
23
+ new datawarehouse_l3_construct_1.DataWarehouseL3Construct(stack, 'construct', constructProps);
24
+ return [stack];
25
+ }
26
+ }
27
+ exports.DataWarehouseCDKApp = DataWarehouseCDKApp;
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXdhcmVob3VzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImRhdGF3YXJlaG91c2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7R0FHRzs7O0FBRUgsdUNBQXFFO0FBQ3JFLHFGQUErRztBQUcvRyxpRUFBbUU7QUFFbkUsTUFBYSxtQkFBb0IsU0FBUSxnQkFBVTtJQUNqRCxZQUFZLFFBQWtCLEVBQUU7UUFDOUIsS0FBSyxDQUFDLEtBQUssRUFBRSxnQkFBVSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsU0FBUyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUNTLG9CQUFvQixDQUM1QixLQUFZLEVBQ1osZ0JBQXNDLEVBQ3RDLFdBQXFDO1FBRXJDLE1BQU0sU0FBUyxHQUFHLElBQUksZ0RBQXlCLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sY0FBYyxHQUFrQztZQUNwRCxHQUFHLFNBQVM7WUFDWixHQUFHLGdCQUFnQjtTQUNwQixDQUFDO1FBQ0YsSUFBSSxxREFBd0IsQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBRWpFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQixDQUFDO0NBQ0Y7QUFsQkQsa0RBa0JDIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG4gKi9cblxuaW1wb3J0IHsgTWRhYUFwcENvbmZpZ1BhcnNlclByb3BzLCBNZGFhQ2RrQXBwIH0gZnJvbSAnQGF3cy1tZGFhL2FwcCc7XG5pbXBvcnQgeyBEYXRhV2FyZWhvdXNlTDNDb25zdHJ1Y3QsIERhdGFXYXJlaG91c2VMM0NvbnN0cnVjdFByb3BzIH0gZnJvbSAnQGF3cy1tZGFhL2RhdGF3YXJlaG91c2UtbDMtY29uc3RydWN0JztcbmltcG9ydCB7IE1kYWFMM0NvbnN0cnVjdFByb3BzIH0gZnJvbSAnQGF3cy1tZGFhL2wzLWNvbnN0cnVjdCc7XG5pbXBvcnQgeyBBcHBQcm9wcywgU3RhY2sgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBEYXRhV2FyZWhvdXNlQ29uZmlnUGFyc2VyIH0gZnJvbSAnLi9kYXRhd2FyZWhvdXNlLWNvbmZpZyc7XG5cbmV4cG9ydCBjbGFzcyBEYXRhV2FyZWhvdXNlQ0RLQXBwIGV4dGVuZHMgTWRhYUNka0FwcCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBBcHBQcm9wcyA9IHt9KSB7XG4gICAgc3VwZXIocHJvcHMsIE1kYWFDZGtBcHAucGFyc2VQYWNrYWdlSnNvbihgJHtfX2Rpcm5hbWV9Ly4uL3BhY2thZ2UuanNvbmApKTtcbiAgfVxuICBwcm90ZWN0ZWQgc3ViR2VuZXJhdGVSZXNvdXJjZXMoXG4gICAgc3RhY2s6IFN0YWNrLFxuICAgIGwzQ29uc3RydWN0UHJvcHM6IE1kYWFMM0NvbnN0cnVjdFByb3BzLFxuICAgIHBhcnNlclByb3BzOiBNZGFhQXBwQ29uZmlnUGFyc2VyUHJvcHMsXG4gICkge1xuICAgIGNvbnN0IGFwcENvbmZpZyA9IG5ldyBEYXRhV2FyZWhvdXNlQ29uZmlnUGFyc2VyKHN0YWNrLCBwYXJzZXJQcm9wcyk7XG4gICAgY29uc3QgY29uc3RydWN0UHJvcHM6IERhdGFXYXJlaG91c2VMM0NvbnN0cnVjdFByb3BzID0ge1xuICAgICAgLi4uYXBwQ29uZmlnLFxuICAgICAgLi4ubDNDb25zdHJ1Y3RQcm9wcyxcbiAgICB9O1xuICAgIG5ldyBEYXRhV2FyZWhvdXNlTDNDb25zdHJ1Y3Qoc3RhY2ssICdjb25zdHJ1Y3QnLCBjb25zdHJ1Y3RQcm9wcyk7XG5cbiAgICByZXR1cm4gW3N0YWNrXTtcbiAgfVxufVxuIl19
@@ -0,0 +1,3 @@
1
+ {
2
+ "DEPLOY_STAGE": "2"
3
+ }
package/package.json ADDED
@@ -0,0 +1,55 @@
1
+ {
2
+ "name": "@aws-mdaa/datawarehouse",
3
+ "description": "MDAA datawarehouse module",
4
+ "author": {
5
+ "name": "Amazon Web Services",
6
+ "url": "https://aws.amazon.com/solutions"
7
+ },
8
+ "bin": {
9
+ "datawarehouse-cdk": "bin/datawarehouse.js"
10
+ },
11
+ "version": "1.2.0",
12
+ "license": "Apache-2.0",
13
+ "scripts": {
14
+ "build": "tsc && typescript-json-schema --required --noExtraProps tsconfig.json DataWarehouseConfigContents --include 'lib/*.ts' --include '../../../../node_modules/@types/**/*.ts' --include 'lib/config-schema.json' > lib/config-schema.json && cp lib/config-schema.json ../../../../schemas/${npm_package_name}.json",
15
+ "watch": "tsc -w",
16
+ "test": "jest --passWithNoTests --coverage",
17
+ "cdk": "cdk",
18
+ "lint": "eslint --max-warnings 0 -c ../../../../.eslintrc.json '**/*.{ts,tsx}' --ignore-pattern 'dist/*' --ignore-pattern 'node_modules/*' --ignore-pattern \"*.d.ts\" "
19
+ },
20
+ "main": "lib/index.js",
21
+ "types": "lib/index.d.ts",
22
+ "devDependencies": {
23
+ "@aws-mdaa/testing": "1.2.0",
24
+ "@types/jest": "29.5.0",
25
+ "@types/node": "17.0.23",
26
+ "@types/prettier": "2.6.0",
27
+ "jest": "29.5.0",
28
+ "ts-jest": "29.1.0",
29
+ "ts-node": "10.9.1",
30
+ "typescript": "4.6.3",
31
+ "typescript-json-schema": "0.63.0"
32
+ },
33
+ "overrides": {
34
+ "aws-cdk-lib": "2.201.0",
35
+ "@types/babel__traverse": "7.18.2"
36
+ },
37
+ "dependencies": {
38
+ "@aws-mdaa/app": "1.2.0",
39
+ "@aws-mdaa/config": "1.2.0",
40
+ "@aws-mdaa/datawarehouse-l3-construct": "1.2.0",
41
+ "@aws-mdaa/iam-role-helper": "1.2.0",
42
+ "@aws-mdaa/l3-construct": "1.2.0",
43
+ "ajv": "8.17.1",
44
+ "aws-cdk-lib": "2.201.0",
45
+ "cdk-nag": "2.37.1",
46
+ "constructs": "10.0.96",
47
+ "source-map-support": "0.5.21",
48
+ "yaml": "1.10.2"
49
+ },
50
+ "gitHead": "8b49a2b371014baec046605ffdbfe38951099c31",
51
+ "repository": {
52
+ "type": "git",
53
+ "url": "https://github.com/aws/modern-data-architecture-accelerator"
54
+ }
55
+ }