@fjall/components-infrastructure 0.62.0 → 0.63.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.
@@ -28,407 +28,407 @@ class StandardTagsAspect {
28
28
  }
29
29
  processCfnResource(resource) {
30
30
  // Skip SecretRotation resources as they create nested stacks with different tag requirements
31
- if (resource.node.path.includes('SecretRotation')) {
31
+ if (resource.node.path.includes("SecretRotation")) {
32
32
  return;
33
33
  }
34
34
  // Comprehensive list of CloudFormation resource types that don't support tags
35
35
  // This list is based on AWS CloudFormation documentation and known limitations
36
36
  const unsupportedTypes = [
37
37
  // ACM
38
- 'AWS::CertificateManager::Account',
38
+ "AWS::CertificateManager::Account",
39
39
  // API Gateway
40
- 'AWS::ApiGateway::Account',
41
- 'AWS::ApiGateway::BasePathMapping',
42
- 'AWS::ApiGateway::Deployment',
43
- 'AWS::ApiGateway::DocumentationPart',
44
- 'AWS::ApiGateway::DocumentationVersion',
45
- 'AWS::ApiGateway::GatewayResponse',
46
- 'AWS::ApiGateway::Method',
47
- 'AWS::ApiGateway::Model',
48
- 'AWS::ApiGateway::RequestValidator',
49
- 'AWS::ApiGateway::Resource',
50
- 'AWS::ApiGatewayV2::ApiMapping',
51
- 'AWS::ApiGatewayV2::Authorizer',
52
- 'AWS::ApiGatewayV2::Deployment',
53
- 'AWS::ApiGatewayV2::Integration',
54
- 'AWS::ApiGatewayV2::IntegrationResponse',
55
- 'AWS::ApiGatewayV2::Model',
56
- 'AWS::ApiGatewayV2::Route',
57
- 'AWS::ApiGatewayV2::RouteResponse',
40
+ "AWS::ApiGateway::Account",
41
+ "AWS::ApiGateway::BasePathMapping",
42
+ "AWS::ApiGateway::Deployment",
43
+ "AWS::ApiGateway::DocumentationPart",
44
+ "AWS::ApiGateway::DocumentationVersion",
45
+ "AWS::ApiGateway::GatewayResponse",
46
+ "AWS::ApiGateway::Method",
47
+ "AWS::ApiGateway::Model",
48
+ "AWS::ApiGateway::RequestValidator",
49
+ "AWS::ApiGateway::Resource",
50
+ "AWS::ApiGatewayV2::ApiMapping",
51
+ "AWS::ApiGatewayV2::Authorizer",
52
+ "AWS::ApiGatewayV2::Deployment",
53
+ "AWS::ApiGatewayV2::Integration",
54
+ "AWS::ApiGatewayV2::IntegrationResponse",
55
+ "AWS::ApiGatewayV2::Model",
56
+ "AWS::ApiGatewayV2::Route",
57
+ "AWS::ApiGatewayV2::RouteResponse",
58
58
  // AppSync
59
- 'AWS::AppSync::DataSource',
60
- 'AWS::AppSync::FunctionConfiguration',
61
- 'AWS::AppSync::Resolver',
59
+ "AWS::AppSync::DataSource",
60
+ "AWS::AppSync::FunctionConfiguration",
61
+ "AWS::AppSync::Resolver",
62
62
  // Athena
63
- 'AWS::Athena::PreparedStatement',
63
+ "AWS::Athena::PreparedStatement",
64
64
  // CloudFormation
65
- 'AWS::CloudFormation::CustomResource',
66
- 'AWS::CloudFormation::Macro',
67
- 'AWS::CloudFormation::ModuleDefaultVersion',
68
- 'AWS::CloudFormation::ModuleVersion',
69
- 'AWS::CloudFormation::PublicTypeVersion',
70
- 'AWS::CloudFormation::Publisher',
71
- 'AWS::CloudFormation::ResourceDefaultVersion',
72
- 'AWS::CloudFormation::ResourceVersion',
73
- 'AWS::CloudFormation::TypeActivation',
74
- 'AWS::CloudFormation::WaitCondition',
75
- 'AWS::CloudFormation::WaitConditionHandle',
65
+ "AWS::CloudFormation::CustomResource",
66
+ "AWS::CloudFormation::Macro",
67
+ "AWS::CloudFormation::ModuleDefaultVersion",
68
+ "AWS::CloudFormation::ModuleVersion",
69
+ "AWS::CloudFormation::PublicTypeVersion",
70
+ "AWS::CloudFormation::Publisher",
71
+ "AWS::CloudFormation::ResourceDefaultVersion",
72
+ "AWS::CloudFormation::ResourceVersion",
73
+ "AWS::CloudFormation::TypeActivation",
74
+ "AWS::CloudFormation::WaitCondition",
75
+ "AWS::CloudFormation::WaitConditionHandle",
76
76
  // CloudWatch
77
- 'AWS::CloudWatch::Alarm',
78
- 'AWS::CloudWatch::AnomalyDetector',
79
- 'AWS::CloudWatch::CompositeAlarm',
80
- 'AWS::CloudWatch::Dashboard',
81
- 'AWS::CloudWatch::InsightRule',
82
- 'AWS::CloudWatch::MetricStream',
77
+ "AWS::CloudWatch::Alarm",
78
+ "AWS::CloudWatch::AnomalyDetector",
79
+ "AWS::CloudWatch::CompositeAlarm",
80
+ "AWS::CloudWatch::Dashboard",
81
+ "AWS::CloudWatch::InsightRule",
82
+ "AWS::CloudWatch::MetricStream",
83
83
  // CodeBuild
84
- 'AWS::CodeBuild::ReportGroup',
85
- 'AWS::CodeBuild::SourceCredential',
84
+ "AWS::CodeBuild::ReportGroup",
85
+ "AWS::CodeBuild::SourceCredential",
86
86
  // CodeDeploy
87
- 'AWS::CodeDeploy::DeploymentConfig',
87
+ "AWS::CodeDeploy::DeploymentConfig",
88
88
  // CodePipeline
89
- 'AWS::CodePipeline::CustomActionType',
90
- 'AWS::CodePipeline::Webhook',
89
+ "AWS::CodePipeline::CustomActionType",
90
+ "AWS::CodePipeline::Webhook",
91
91
  // Cognito
92
- 'AWS::Cognito::IdentityPoolRoleAttachment',
93
- 'AWS::Cognito::UserPoolClient',
94
- 'AWS::Cognito::UserPoolDomain',
95
- 'AWS::Cognito::UserPoolGroup',
96
- 'AWS::Cognito::UserPoolIdentityProvider',
97
- 'AWS::Cognito::UserPoolResourceServer',
98
- 'AWS::Cognito::UserPoolRiskConfigurationAttachment',
99
- 'AWS::Cognito::UserPoolUICustomizationAttachment',
100
- 'AWS::Cognito::UserPoolUser',
101
- 'AWS::Cognito::UserPoolUserToGroupAttachment',
92
+ "AWS::Cognito::IdentityPoolRoleAttachment",
93
+ "AWS::Cognito::UserPoolClient",
94
+ "AWS::Cognito::UserPoolDomain",
95
+ "AWS::Cognito::UserPoolGroup",
96
+ "AWS::Cognito::UserPoolIdentityProvider",
97
+ "AWS::Cognito::UserPoolResourceServer",
98
+ "AWS::Cognito::UserPoolRiskConfigurationAttachment",
99
+ "AWS::Cognito::UserPoolUICustomizationAttachment",
100
+ "AWS::Cognito::UserPoolUser",
101
+ "AWS::Cognito::UserPoolUserToGroupAttachment",
102
102
  // Config
103
- 'AWS::Config::AggregationAuthorization',
104
- 'AWS::Config::ConfigurationAggregator',
105
- 'AWS::Config::ConformancePack',
106
- 'AWS::Config::OrganizationConformancePack',
107
- 'AWS::Config::RemediationConfiguration',
108
- 'AWS::Config::StoredQuery',
103
+ "AWS::Config::AggregationAuthorization",
104
+ "AWS::Config::ConfigurationAggregator",
105
+ "AWS::Config::ConformancePack",
106
+ "AWS::Config::OrganizationConformancePack",
107
+ "AWS::Config::RemediationConfiguration",
108
+ "AWS::Config::StoredQuery",
109
109
  // DynamoDB
110
- 'AWS::DynamoDB::GlobalTable',
110
+ "AWS::DynamoDB::GlobalTable",
111
111
  // EC2
112
- 'AWS::EC2::CapacityReservationFleet',
113
- 'AWS::EC2::CarrierGateway',
114
- 'AWS::EC2::DHCPOptions',
115
- 'AWS::EC2::EC2Fleet',
116
- 'AWS::EC2::EgressOnlyInternetGateway',
117
- 'AWS::EC2::EIPAssociation',
118
- 'AWS::EC2::EnclaveCertificateIamRoleAssociation',
119
- 'AWS::EC2::FlowLog',
120
- 'AWS::EC2::GatewayRouteTableAssociation',
121
- 'AWS::EC2::InstanceConnectEndpoint',
122
- 'AWS::EC2::KeyPair',
123
- 'AWS::EC2::LaunchTemplate',
124
- 'AWS::EC2::NetworkInsightsAccessScope',
125
- 'AWS::EC2::NetworkInsightsAccessScopeAnalysis',
126
- 'AWS::EC2::NetworkInsightsAnalysis',
127
- 'AWS::EC2::NetworkInsightsPath',
128
- 'AWS::EC2::NetworkInterfaceAttachment',
129
- 'AWS::EC2::NetworkInterfacePermission',
130
- 'AWS::EC2::PlacementGroup',
131
- 'AWS::EC2::Route',
132
- 'AWS::EC2::SecurityGroupEgress',
133
- 'AWS::EC2::SecurityGroupIngress',
134
- 'AWS::EC2::SubnetCidrBlock',
135
- 'AWS::EC2::SubnetNetworkAclAssociation',
136
- 'AWS::EC2::SubnetRouteTableAssociation',
137
- 'AWS::EC2::TransitGatewayAttachment',
138
- 'AWS::EC2::TransitGatewayConnect',
139
- 'AWS::EC2::TransitGatewayMulticastDomain',
140
- 'AWS::EC2::TransitGatewayMulticastDomainAssociation',
141
- 'AWS::EC2::TransitGatewayMulticastGroupMember',
142
- 'AWS::EC2::TransitGatewayMulticastGroupSource',
143
- 'AWS::EC2::TransitGatewayPeeringAttachment',
144
- 'AWS::EC2::TransitGatewayRoute',
145
- 'AWS::EC2::TransitGatewayRouteTable',
146
- 'AWS::EC2::TransitGatewayRouteTableAssociation',
147
- 'AWS::EC2::TransitGatewayRouteTablePropagation',
148
- 'AWS::EC2::TransitGatewayVpcAttachment',
149
- 'AWS::EC2::VerifiedAccessEndpoint',
150
- 'AWS::EC2::VerifiedAccessGroup',
151
- 'AWS::EC2::VerifiedAccessInstance',
152
- 'AWS::EC2::VerifiedAccessTrustProvider',
153
- 'AWS::EC2::VolumeAttachment',
154
- 'AWS::EC2::VPCCidrBlock',
155
- 'AWS::EC2::VPCDHCPOptionsAssociation',
156
- 'AWS::EC2::VPCEndpointConnectionNotification',
157
- 'AWS::EC2::VPCEndpointService',
158
- 'AWS::EC2::VPCEndpointServicePermissions',
159
- 'AWS::EC2::VPCGatewayAttachment',
160
- 'AWS::EC2::VPNConnectionRoute',
161
- 'AWS::EC2::VPNGatewayRoutePropagation',
112
+ "AWS::EC2::CapacityReservationFleet",
113
+ "AWS::EC2::CarrierGateway",
114
+ "AWS::EC2::DHCPOptions",
115
+ "AWS::EC2::EC2Fleet",
116
+ "AWS::EC2::EgressOnlyInternetGateway",
117
+ "AWS::EC2::EIPAssociation",
118
+ "AWS::EC2::EnclaveCertificateIamRoleAssociation",
119
+ "AWS::EC2::FlowLog",
120
+ "AWS::EC2::GatewayRouteTableAssociation",
121
+ "AWS::EC2::InstanceConnectEndpoint",
122
+ "AWS::EC2::KeyPair",
123
+ "AWS::EC2::LaunchTemplate",
124
+ "AWS::EC2::NetworkInsightsAccessScope",
125
+ "AWS::EC2::NetworkInsightsAccessScopeAnalysis",
126
+ "AWS::EC2::NetworkInsightsAnalysis",
127
+ "AWS::EC2::NetworkInsightsPath",
128
+ "AWS::EC2::NetworkInterfaceAttachment",
129
+ "AWS::EC2::NetworkInterfacePermission",
130
+ "AWS::EC2::PlacementGroup",
131
+ "AWS::EC2::Route",
132
+ "AWS::EC2::SecurityGroupEgress",
133
+ "AWS::EC2::SecurityGroupIngress",
134
+ "AWS::EC2::SubnetCidrBlock",
135
+ "AWS::EC2::SubnetNetworkAclAssociation",
136
+ "AWS::EC2::SubnetRouteTableAssociation",
137
+ "AWS::EC2::TransitGatewayAttachment",
138
+ "AWS::EC2::TransitGatewayConnect",
139
+ "AWS::EC2::TransitGatewayMulticastDomain",
140
+ "AWS::EC2::TransitGatewayMulticastDomainAssociation",
141
+ "AWS::EC2::TransitGatewayMulticastGroupMember",
142
+ "AWS::EC2::TransitGatewayMulticastGroupSource",
143
+ "AWS::EC2::TransitGatewayPeeringAttachment",
144
+ "AWS::EC2::TransitGatewayRoute",
145
+ "AWS::EC2::TransitGatewayRouteTable",
146
+ "AWS::EC2::TransitGatewayRouteTableAssociation",
147
+ "AWS::EC2::TransitGatewayRouteTablePropagation",
148
+ "AWS::EC2::TransitGatewayVpcAttachment",
149
+ "AWS::EC2::VerifiedAccessEndpoint",
150
+ "AWS::EC2::VerifiedAccessGroup",
151
+ "AWS::EC2::VerifiedAccessInstance",
152
+ "AWS::EC2::VerifiedAccessTrustProvider",
153
+ "AWS::EC2::VolumeAttachment",
154
+ "AWS::EC2::VPCCidrBlock",
155
+ "AWS::EC2::VPCDHCPOptionsAssociation",
156
+ "AWS::EC2::VPCEndpointConnectionNotification",
157
+ "AWS::EC2::VPCEndpointService",
158
+ "AWS::EC2::VPCEndpointServicePermissions",
159
+ "AWS::EC2::VPCGatewayAttachment",
160
+ "AWS::EC2::VPNConnectionRoute",
161
+ "AWS::EC2::VPNGatewayRoutePropagation",
162
162
  // ECR
163
- 'AWS::ECR::PublicRepository',
164
- 'AWS::ECR::PullThroughCacheRule',
165
- 'AWS::ECR::RegistryPolicy',
166
- 'AWS::ECR::ReplicationConfiguration',
163
+ "AWS::ECR::PublicRepository",
164
+ "AWS::ECR::PullThroughCacheRule",
165
+ "AWS::ECR::RegistryPolicy",
166
+ "AWS::ECR::ReplicationConfiguration",
167
167
  // ECS
168
- 'AWS::ECS::AccountSetting',
169
- 'AWS::ECS::CapacityProvider',
170
- 'AWS::ECS::ClusterCapacityProviderAssociations',
171
- 'AWS::ECS::PrimaryTaskSet',
172
- 'AWS::ECS::TaskSet',
168
+ "AWS::ECS::AccountSetting",
169
+ "AWS::ECS::CapacityProvider",
170
+ "AWS::ECS::ClusterCapacityProviderAssociations",
171
+ "AWS::ECS::PrimaryTaskSet",
172
+ "AWS::ECS::TaskSet",
173
173
  // EFS
174
- 'AWS::EFS::AccessPoint',
175
- 'AWS::EFS::MountTarget',
174
+ "AWS::EFS::AccessPoint",
175
+ "AWS::EFS::MountTarget",
176
176
  // EKS
177
- 'AWS::EKS::Addon',
178
- 'AWS::EKS::FargateProfile',
179
- 'AWS::EKS::IdentityProviderConfig',
177
+ "AWS::EKS::Addon",
178
+ "AWS::EKS::FargateProfile",
179
+ "AWS::EKS::IdentityProviderConfig",
180
180
  // ElastiCache
181
- 'AWS::ElastiCache::ParameterGroup',
182
- 'AWS::ElastiCache::SecurityGroup',
183
- 'AWS::ElastiCache::SecurityGroupIngress',
184
- 'AWS::ElastiCache::SubnetGroup',
181
+ "AWS::ElastiCache::ParameterGroup",
182
+ "AWS::ElastiCache::SecurityGroup",
183
+ "AWS::ElastiCache::SecurityGroupIngress",
184
+ "AWS::ElastiCache::SubnetGroup",
185
185
  // ElasticBeanstalk
186
- 'AWS::ElasticBeanstalk::ApplicationVersion',
187
- 'AWS::ElasticBeanstalk::ConfigurationTemplate',
186
+ "AWS::ElasticBeanstalk::ApplicationVersion",
187
+ "AWS::ElasticBeanstalk::ConfigurationTemplate",
188
188
  // ElasticLoadBalancingV2
189
- 'AWS::ElasticLoadBalancingV2::Listener',
190
- 'AWS::ElasticLoadBalancingV2::ListenerCertificate',
191
- 'AWS::ElasticLoadBalancingV2::ListenerRule',
192
- 'AWS::ElasticLoadBalancingV2::TargetGroupAttachment',
189
+ "AWS::ElasticLoadBalancingV2::Listener",
190
+ "AWS::ElasticLoadBalancingV2::ListenerCertificate",
191
+ "AWS::ElasticLoadBalancingV2::ListenerRule",
192
+ "AWS::ElasticLoadBalancingV2::TargetGroupAttachment",
193
193
  // EventBridge (Events)
194
- 'AWS::Events::ApiDestination',
195
- 'AWS::Events::Archive',
196
- 'AWS::Events::Connection',
197
- 'AWS::Events::Endpoint',
198
- 'AWS::Events::EventBusPolicy',
199
- 'AWS::Events::Rule',
194
+ "AWS::Events::ApiDestination",
195
+ "AWS::Events::Archive",
196
+ "AWS::Events::Connection",
197
+ "AWS::Events::Endpoint",
198
+ "AWS::Events::EventBusPolicy",
199
+ "AWS::Events::Rule",
200
200
  // FSx
201
- 'AWS::FSx::DataRepositoryAssociation',
202
- 'AWS::FSx::Snapshot',
203
- 'AWS::FSx::StorageVirtualMachine',
204
- 'AWS::FSx::Volume',
201
+ "AWS::FSx::DataRepositoryAssociation",
202
+ "AWS::FSx::Snapshot",
203
+ "AWS::FSx::StorageVirtualMachine",
204
+ "AWS::FSx::Volume",
205
205
  // GameLift
206
- 'AWS::GameLift::GameServerGroup',
207
- 'AWS::GameLift::Location',
206
+ "AWS::GameLift::GameServerGroup",
207
+ "AWS::GameLift::Location",
208
208
  // Glue
209
- 'AWS::Glue::Connection',
210
- 'AWS::Glue::Database',
211
- 'AWS::Glue::DataCatalogEncryptionSettings',
212
- 'AWS::Glue::Partition',
213
- 'AWS::Glue::SchemaVersion',
214
- 'AWS::Glue::SchemaVersionMetadata',
215
- 'AWS::Glue::SecurityConfiguration',
216
- 'AWS::Glue::Table',
217
- 'AWS::Glue::UserDefinedFunction',
209
+ "AWS::Glue::Connection",
210
+ "AWS::Glue::Database",
211
+ "AWS::Glue::DataCatalogEncryptionSettings",
212
+ "AWS::Glue::Partition",
213
+ "AWS::Glue::SchemaVersion",
214
+ "AWS::Glue::SchemaVersionMetadata",
215
+ "AWS::Glue::SecurityConfiguration",
216
+ "AWS::Glue::Table",
217
+ "AWS::Glue::UserDefinedFunction",
218
218
  // GuardDuty
219
- 'AWS::GuardDuty::Detector',
220
- 'AWS::GuardDuty::Filter',
221
- 'AWS::GuardDuty::IPSet',
222
- 'AWS::GuardDuty::Master',
223
- 'AWS::GuardDuty::Member',
224
- 'AWS::GuardDuty::ThreatIntelSet',
219
+ "AWS::GuardDuty::Detector",
220
+ "AWS::GuardDuty::Filter",
221
+ "AWS::GuardDuty::IPSet",
222
+ "AWS::GuardDuty::Master",
223
+ "AWS::GuardDuty::Member",
224
+ "AWS::GuardDuty::ThreatIntelSet",
225
225
  // IAM
226
- 'AWS::IAM::AccessKey',
227
- 'AWS::IAM::Group',
228
- 'AWS::IAM::GroupPolicy',
229
- 'AWS::IAM::InstanceProfile',
230
- 'AWS::IAM::ManagedPolicy',
231
- 'AWS::IAM::OIDCProvider',
232
- 'AWS::IAM::Policy',
233
- 'AWS::IAM::Role',
234
- 'AWS::IAM::RolePolicy',
235
- 'AWS::IAM::SAMLProvider',
236
- 'AWS::IAM::ServerCertificate',
237
- 'AWS::IAM::ServiceLinkedRole',
238
- 'AWS::IAM::User',
239
- 'AWS::IAM::UserPolicy',
240
- 'AWS::IAM::UserToGroupAddition',
241
- 'AWS::IAM::VirtualMFADevice',
226
+ "AWS::IAM::AccessKey",
227
+ "AWS::IAM::Group",
228
+ "AWS::IAM::GroupPolicy",
229
+ "AWS::IAM::InstanceProfile",
230
+ "AWS::IAM::ManagedPolicy",
231
+ "AWS::IAM::OIDCProvider",
232
+ "AWS::IAM::Policy",
233
+ "AWS::IAM::Role",
234
+ "AWS::IAM::RolePolicy",
235
+ "AWS::IAM::SAMLProvider",
236
+ "AWS::IAM::ServerCertificate",
237
+ "AWS::IAM::ServiceLinkedRole",
238
+ "AWS::IAM::User",
239
+ "AWS::IAM::UserPolicy",
240
+ "AWS::IAM::UserToGroupAddition",
241
+ "AWS::IAM::VirtualMFADevice",
242
242
  // IoT
243
- 'AWS::IoT::AccountAuditConfiguration',
244
- 'AWS::IoT::Authorizer',
245
- 'AWS::IoT::Certificate',
246
- 'AWS::IoT::CustomMetric',
247
- 'AWS::IoT::Dimension',
248
- 'AWS::IoT::DomainConfiguration',
249
- 'AWS::IoT::FleetMetric',
250
- 'AWS::IoT::JobTemplate',
251
- 'AWS::IoT::Logging',
252
- 'AWS::IoT::MitigationAction',
253
- 'AWS::IoT::Policy',
254
- 'AWS::IoT::PolicyPrincipalAttachment',
255
- 'AWS::IoT::ProvisioningTemplate',
256
- 'AWS::IoT::ResourceSpecificLogging',
257
- 'AWS::IoT::RoleAlias',
258
- 'AWS::IoT::ScheduledAudit',
259
- 'AWS::IoT::SecurityProfile',
260
- 'AWS::IoT::Thing',
261
- 'AWS::IoT::ThingGroup',
262
- 'AWS::IoT::ThingPrincipalAttachment',
263
- 'AWS::IoT::ThingType',
264
- 'AWS::IoT::TopicRule',
265
- 'AWS::IoT::TopicRuleDestination',
243
+ "AWS::IoT::AccountAuditConfiguration",
244
+ "AWS::IoT::Authorizer",
245
+ "AWS::IoT::Certificate",
246
+ "AWS::IoT::CustomMetric",
247
+ "AWS::IoT::Dimension",
248
+ "AWS::IoT::DomainConfiguration",
249
+ "AWS::IoT::FleetMetric",
250
+ "AWS::IoT::JobTemplate",
251
+ "AWS::IoT::Logging",
252
+ "AWS::IoT::MitigationAction",
253
+ "AWS::IoT::Policy",
254
+ "AWS::IoT::PolicyPrincipalAttachment",
255
+ "AWS::IoT::ProvisioningTemplate",
256
+ "AWS::IoT::ResourceSpecificLogging",
257
+ "AWS::IoT::RoleAlias",
258
+ "AWS::IoT::ScheduledAudit",
259
+ "AWS::IoT::SecurityProfile",
260
+ "AWS::IoT::Thing",
261
+ "AWS::IoT::ThingGroup",
262
+ "AWS::IoT::ThingPrincipalAttachment",
263
+ "AWS::IoT::ThingType",
264
+ "AWS::IoT::TopicRule",
265
+ "AWS::IoT::TopicRuleDestination",
266
266
  // KMS
267
- 'AWS::KMS::Alias',
268
- 'AWS::KMS::Grant',
269
- 'AWS::KMS::ReplicaKey',
267
+ "AWS::KMS::Alias",
268
+ "AWS::KMS::Grant",
269
+ "AWS::KMS::ReplicaKey",
270
270
  // Lambda
271
- 'AWS::Lambda::CodeSigningConfig',
272
- 'AWS::Lambda::EventInvokeConfig',
273
- 'AWS::Lambda::EventSourceMapping',
274
- 'AWS::Lambda::LayerVersion',
275
- 'AWS::Lambda::LayerVersionPermission',
276
- 'AWS::Lambda::Permission',
277
- 'AWS::Lambda::ProvisionedConcurrencyConfig',
278
- 'AWS::Lambda::Url',
279
- 'AWS::Lambda::Version',
271
+ "AWS::Lambda::CodeSigningConfig",
272
+ "AWS::Lambda::EventInvokeConfig",
273
+ "AWS::Lambda::EventSourceMapping",
274
+ "AWS::Lambda::LayerVersion",
275
+ "AWS::Lambda::LayerVersionPermission",
276
+ "AWS::Lambda::Permission",
277
+ "AWS::Lambda::ProvisionedConcurrencyConfig",
278
+ "AWS::Lambda::Url",
279
+ "AWS::Lambda::Version",
280
280
  // Logs
281
- 'AWS::Logs::AccountPolicy',
282
- 'AWS::Logs::Destination',
283
- 'AWS::Logs::LogGroup',
284
- 'AWS::Logs::LogStream',
285
- 'AWS::Logs::MetricFilter',
286
- 'AWS::Logs::QueryDefinition',
287
- 'AWS::Logs::ResourcePolicy',
288
- 'AWS::Logs::SubscriptionFilter',
281
+ "AWS::Logs::AccountPolicy",
282
+ "AWS::Logs::Destination",
283
+ "AWS::Logs::LogGroup",
284
+ "AWS::Logs::LogStream",
285
+ "AWS::Logs::MetricFilter",
286
+ "AWS::Logs::QueryDefinition",
287
+ "AWS::Logs::ResourcePolicy",
288
+ "AWS::Logs::SubscriptionFilter",
289
289
  // Macie
290
- 'AWS::Macie::AllowList',
291
- 'AWS::Macie::CustomDataIdentifier',
292
- 'AWS::Macie::FindingsFilter',
293
- 'AWS::Macie::Session',
290
+ "AWS::Macie::AllowList",
291
+ "AWS::Macie::CustomDataIdentifier",
292
+ "AWS::Macie::FindingsFilter",
293
+ "AWS::Macie::Session",
294
294
  // Neptune
295
- 'AWS::Neptune::DBClusterParameterGroup',
296
- 'AWS::Neptune::DBParameterGroup',
297
- 'AWS::Neptune::DBSubnetGroup',
295
+ "AWS::Neptune::DBClusterParameterGroup",
296
+ "AWS::Neptune::DBParameterGroup",
297
+ "AWS::Neptune::DBSubnetGroup",
298
298
  // Organizations
299
- 'AWS::Organizations::Account',
300
- 'AWS::Organizations::Organization',
301
- 'AWS::Organizations::OrganizationalUnit',
302
- 'AWS::Organizations::Policy',
303
- 'AWS::Organizations::ResourcePolicy',
299
+ "AWS::Organizations::Account",
300
+ "AWS::Organizations::Organization",
301
+ "AWS::Organizations::OrganizationalUnit",
302
+ "AWS::Organizations::Policy",
303
+ "AWS::Organizations::ResourcePolicy",
304
304
  // RDS
305
- 'AWS::RDS::DBClusterParameterGroup',
306
- 'AWS::RDS::DBParameterGroup',
307
- 'AWS::RDS::DBSecurityGroup',
308
- 'AWS::RDS::DBSecurityGroupIngress',
309
- 'AWS::RDS::DBSubnetGroup',
310
- 'AWS::RDS::EventSubscription',
311
- 'AWS::RDS::GlobalCluster',
312
- 'AWS::RDS::OptionGroup',
305
+ "AWS::RDS::DBClusterParameterGroup",
306
+ "AWS::RDS::DBParameterGroup",
307
+ "AWS::RDS::DBSecurityGroup",
308
+ "AWS::RDS::DBSecurityGroupIngress",
309
+ "AWS::RDS::DBSubnetGroup",
310
+ "AWS::RDS::EventSubscription",
311
+ "AWS::RDS::GlobalCluster",
312
+ "AWS::RDS::OptionGroup",
313
313
  // Redshift
314
- 'AWS::Redshift::ClusterParameterGroup',
315
- 'AWS::Redshift::ClusterSecurityGroup',
316
- 'AWS::Redshift::ClusterSecurityGroupIngress',
317
- 'AWS::Redshift::ClusterSubnetGroup',
318
- 'AWS::Redshift::EndpointAccess',
319
- 'AWS::Redshift::EndpointAuthorization',
320
- 'AWS::Redshift::EventSubscription',
321
- 'AWS::Redshift::ScheduledAction',
314
+ "AWS::Redshift::ClusterParameterGroup",
315
+ "AWS::Redshift::ClusterSecurityGroup",
316
+ "AWS::Redshift::ClusterSecurityGroupIngress",
317
+ "AWS::Redshift::ClusterSubnetGroup",
318
+ "AWS::Redshift::EndpointAccess",
319
+ "AWS::Redshift::EndpointAuthorization",
320
+ "AWS::Redshift::EventSubscription",
321
+ "AWS::Redshift::ScheduledAction",
322
322
  // Route53
323
- 'AWS::Route53::DNSSEC',
324
- 'AWS::Route53::HealthCheck',
325
- 'AWS::Route53::HostedZone',
326
- 'AWS::Route53::KeySigningKey',
327
- 'AWS::Route53::RecordSet',
328
- 'AWS::Route53::RecordSetGroup',
323
+ "AWS::Route53::DNSSEC",
324
+ "AWS::Route53::HealthCheck",
325
+ "AWS::Route53::HostedZone",
326
+ "AWS::Route53::KeySigningKey",
327
+ "AWS::Route53::RecordSet",
328
+ "AWS::Route53::RecordSetGroup",
329
329
  // Route53Resolver
330
- 'AWS::Route53Resolver::FirewallDomainList',
331
- 'AWS::Route53Resolver::FirewallRuleGroup',
332
- 'AWS::Route53Resolver::FirewallRuleGroupAssociation',
333
- 'AWS::Route53Resolver::ResolverConfig',
334
- 'AWS::Route53Resolver::ResolverDNSSECConfig',
335
- 'AWS::Route53Resolver::ResolverQueryLoggingConfig',
336
- 'AWS::Route53Resolver::ResolverQueryLoggingConfigAssociation',
337
- 'AWS::Route53Resolver::ResolverRule',
338
- 'AWS::Route53Resolver::ResolverRuleAssociation',
330
+ "AWS::Route53Resolver::FirewallDomainList",
331
+ "AWS::Route53Resolver::FirewallRuleGroup",
332
+ "AWS::Route53Resolver::FirewallRuleGroupAssociation",
333
+ "AWS::Route53Resolver::ResolverConfig",
334
+ "AWS::Route53Resolver::ResolverDNSSECConfig",
335
+ "AWS::Route53Resolver::ResolverQueryLoggingConfig",
336
+ "AWS::Route53Resolver::ResolverQueryLoggingConfigAssociation",
337
+ "AWS::Route53Resolver::ResolverRule",
338
+ "AWS::Route53Resolver::ResolverRuleAssociation",
339
339
  // S3
340
- 'AWS::S3::AccessPoint',
341
- 'AWS::S3::BucketPolicy',
342
- 'AWS::S3::MultiRegionAccessPoint',
343
- 'AWS::S3::MultiRegionAccessPointPolicy',
344
- 'AWS::S3::StorageLens',
340
+ "AWS::S3::AccessPoint",
341
+ "AWS::S3::BucketPolicy",
342
+ "AWS::S3::MultiRegionAccessPoint",
343
+ "AWS::S3::MultiRegionAccessPointPolicy",
344
+ "AWS::S3::StorageLens",
345
345
  // SDB
346
- 'AWS::SDB::Domain',
346
+ "AWS::SDB::Domain",
347
347
  // SecretsManager
348
- 'AWS::SecretsManager::ResourcePolicy',
349
- 'AWS::SecretsManager::RotationSchedule',
350
- 'AWS::SecretsManager::SecretTargetAttachment',
348
+ "AWS::SecretsManager::ResourcePolicy",
349
+ "AWS::SecretsManager::RotationSchedule",
350
+ "AWS::SecretsManager::SecretTargetAttachment",
351
351
  // SecurityHub
352
- 'AWS::SecurityHub::Hub',
352
+ "AWS::SecurityHub::Hub",
353
353
  // ServiceCatalog
354
- 'AWS::ServiceCatalog::AcceptedPortfolioShare',
355
- 'AWS::ServiceCatalog::LaunchNotificationConstraint',
356
- 'AWS::ServiceCatalog::LaunchRoleConstraint',
357
- 'AWS::ServiceCatalog::LaunchTemplateConstraint',
358
- 'AWS::ServiceCatalog::PortfolioPrincipalAssociation',
359
- 'AWS::ServiceCatalog::PortfolioProductAssociation',
360
- 'AWS::ServiceCatalog::PortfolioShare',
361
- 'AWS::ServiceCatalog::ResourceUpdateConstraint',
362
- 'AWS::ServiceCatalog::ServiceAction',
363
- 'AWS::ServiceCatalog::ServiceActionAssociation',
364
- 'AWS::ServiceCatalog::StackSetConstraint',
365
- 'AWS::ServiceCatalog::TagOption',
366
- 'AWS::ServiceCatalog::TagOptionAssociation',
354
+ "AWS::ServiceCatalog::AcceptedPortfolioShare",
355
+ "AWS::ServiceCatalog::LaunchNotificationConstraint",
356
+ "AWS::ServiceCatalog::LaunchRoleConstraint",
357
+ "AWS::ServiceCatalog::LaunchTemplateConstraint",
358
+ "AWS::ServiceCatalog::PortfolioPrincipalAssociation",
359
+ "AWS::ServiceCatalog::PortfolioProductAssociation",
360
+ "AWS::ServiceCatalog::PortfolioShare",
361
+ "AWS::ServiceCatalog::ResourceUpdateConstraint",
362
+ "AWS::ServiceCatalog::ServiceAction",
363
+ "AWS::ServiceCatalog::ServiceActionAssociation",
364
+ "AWS::ServiceCatalog::StackSetConstraint",
365
+ "AWS::ServiceCatalog::TagOption",
366
+ "AWS::ServiceCatalog::TagOptionAssociation",
367
367
  // SES
368
- 'AWS::SES::ConfigurationSet',
369
- 'AWS::SES::ConfigurationSetEventDestination',
370
- 'AWS::SES::ContactList',
371
- 'AWS::SES::DedicatedIpPool',
372
- 'AWS::SES::EmailIdentity',
373
- 'AWS::SES::ReceiptFilter',
374
- 'AWS::SES::ReceiptRule',
375
- 'AWS::SES::ReceiptRuleSet',
376
- 'AWS::SES::Template',
377
- 'AWS::SES::VdmAttributes',
368
+ "AWS::SES::ConfigurationSet",
369
+ "AWS::SES::ConfigurationSetEventDestination",
370
+ "AWS::SES::ContactList",
371
+ "AWS::SES::DedicatedIpPool",
372
+ "AWS::SES::EmailIdentity",
373
+ "AWS::SES::ReceiptFilter",
374
+ "AWS::SES::ReceiptRule",
375
+ "AWS::SES::ReceiptRuleSet",
376
+ "AWS::SES::Template",
377
+ "AWS::SES::VdmAttributes",
378
378
  // SNS
379
- 'AWS::SNS::Subscription',
380
- 'AWS::SNS::TopicPolicy',
379
+ "AWS::SNS::Subscription",
380
+ "AWS::SNS::TopicPolicy",
381
381
  // SQS
382
- 'AWS::SQS::QueuePolicy',
382
+ "AWS::SQS::QueuePolicy",
383
383
  // SSM
384
- 'AWS::SSM::Association',
385
- 'AWS::SSM::Document',
386
- 'AWS::SSM::MaintenanceWindow',
387
- 'AWS::SSM::MaintenanceWindowTarget',
388
- 'AWS::SSM::MaintenanceWindowTask',
389
- 'AWS::SSM::Parameter',
390
- 'AWS::SSM::PatchBaseline',
391
- 'AWS::SSM::ResourceDataSync',
392
- 'AWS::SSM::ResourcePolicy',
384
+ "AWS::SSM::Association",
385
+ "AWS::SSM::Document",
386
+ "AWS::SSM::MaintenanceWindow",
387
+ "AWS::SSM::MaintenanceWindowTarget",
388
+ "AWS::SSM::MaintenanceWindowTask",
389
+ "AWS::SSM::Parameter",
390
+ "AWS::SSM::PatchBaseline",
391
+ "AWS::SSM::ResourceDataSync",
392
+ "AWS::SSM::ResourcePolicy",
393
393
  // SSO
394
- 'AWS::SSO::Assignment',
395
- 'AWS::SSO::InstanceAccessControlAttributeConfiguration',
396
- 'AWS::SSO::PermissionSet',
394
+ "AWS::SSO::Assignment",
395
+ "AWS::SSO::InstanceAccessControlAttributeConfiguration",
396
+ "AWS::SSO::PermissionSet",
397
397
  // StepFunctions
398
- 'AWS::StepFunctions::Activity',
398
+ "AWS::StepFunctions::Activity",
399
399
  // WAF/WAFv2
400
- 'AWS::WAF::ByteMatchSet',
401
- 'AWS::WAF::IPSet',
402
- 'AWS::WAF::Rule',
403
- 'AWS::WAF::SizeConstraintSet',
404
- 'AWS::WAF::SqlInjectionMatchSet',
405
- 'AWS::WAF::WebACL',
406
- 'AWS::WAF::XssMatchSet',
407
- 'AWS::WAFRegional::ByteMatchSet',
408
- 'AWS::WAFRegional::GeoMatchSet',
409
- 'AWS::WAFRegional::IPSet',
410
- 'AWS::WAFRegional::RateBasedRule',
411
- 'AWS::WAFRegional::RegexPatternSet',
412
- 'AWS::WAFRegional::Rule',
413
- 'AWS::WAFRegional::SizeConstraintSet',
414
- 'AWS::WAFRegional::SqlInjectionMatchSet',
415
- 'AWS::WAFRegional::WebACL',
416
- 'AWS::WAFRegional::WebACLAssociation',
417
- 'AWS::WAFRegional::XssMatchSet',
418
- 'AWS::WAFv2::IPSet',
419
- 'AWS::WAFv2::LoggingConfiguration',
420
- 'AWS::WAFv2::RegexPatternSet',
421
- 'AWS::WAFv2::RuleGroup',
422
- 'AWS::WAFv2::WebACL',
423
- 'AWS::WAFv2::WebACLAssociation',
400
+ "AWS::WAF::ByteMatchSet",
401
+ "AWS::WAF::IPSet",
402
+ "AWS::WAF::Rule",
403
+ "AWS::WAF::SizeConstraintSet",
404
+ "AWS::WAF::SqlInjectionMatchSet",
405
+ "AWS::WAF::WebACL",
406
+ "AWS::WAF::XssMatchSet",
407
+ "AWS::WAFRegional::ByteMatchSet",
408
+ "AWS::WAFRegional::GeoMatchSet",
409
+ "AWS::WAFRegional::IPSet",
410
+ "AWS::WAFRegional::RateBasedRule",
411
+ "AWS::WAFRegional::RegexPatternSet",
412
+ "AWS::WAFRegional::Rule",
413
+ "AWS::WAFRegional::SizeConstraintSet",
414
+ "AWS::WAFRegional::SqlInjectionMatchSet",
415
+ "AWS::WAFRegional::WebACL",
416
+ "AWS::WAFRegional::WebACLAssociation",
417
+ "AWS::WAFRegional::XssMatchSet",
418
+ "AWS::WAFv2::IPSet",
419
+ "AWS::WAFv2::LoggingConfiguration",
420
+ "AWS::WAFv2::RegexPatternSet",
421
+ "AWS::WAFv2::RuleGroup",
422
+ "AWS::WAFv2::WebACL",
423
+ "AWS::WAFv2::WebACLAssociation",
424
424
  // Serverless
425
- 'AWS::Serverless::Api',
426
- 'AWS::Serverless::Application',
427
- 'AWS::Serverless::Function',
428
- 'AWS::Serverless::HttpApi',
429
- 'AWS::Serverless::LayerVersion',
430
- 'AWS::Serverless::SimpleTable',
431
- 'AWS::Serverless::StateMachine'
425
+ "AWS::Serverless::Api",
426
+ "AWS::Serverless::Application",
427
+ "AWS::Serverless::Function",
428
+ "AWS::Serverless::HttpApi",
429
+ "AWS::Serverless::LayerVersion",
430
+ "AWS::Serverless::SimpleTable",
431
+ "AWS::Serverless::StateMachine"
432
432
  ];
433
433
  if (unsupportedTypes.includes(resource.cfnResourceType)) {
434
434
  return;
@@ -437,18 +437,18 @@ class StandardTagsAspect {
437
437
  const stack = aws_cdk_lib_1.Stack.of(resource);
438
438
  const logicalId = stack.getLogicalId(resource);
439
439
  // Use addTransform to add tags during synthesis
440
- resource.addPropertyOverride('Tags', this.buildTagsArray(resource));
440
+ resource.addPropertyOverride("Tags", this.buildTagsArray(resource));
441
441
  }
442
442
  buildTagsArray(resource) {
443
443
  const tagMap = new Map();
444
444
  // Add IPAM pool tag for VPCs with IPAM configuration
445
- if (resource.cfnResourceType === 'AWS::EC2::VPC') {
445
+ if (resource.cfnResourceType === "AWS::EC2::VPC") {
446
446
  const properties = resource.cfnProperties || {};
447
447
  if (properties.ipv4IpamPoolId) {
448
448
  const stack = aws_cdk_lib_1.Stack.of(resource);
449
- const accountId = stack.node.tryGetContext('accountId');
449
+ const accountId = stack.node.tryGetContext("accountId");
450
450
  if (accountId) {
451
- tagMap.set('fjall:operations:pool', accountId);
451
+ tagMap.set("fjall:operations:pool", accountId);
452
452
  }
453
453
  }
454
454
  }
@@ -464,4 +464,4 @@ class StandardTagsAspect {
464
464
  }
465
465
  }
466
466
  exports.StandardTagsAspect = StandardTagsAspect;
467
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhbmRhcmRUYWdzQXNwZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL3V0aWxzL3N0YW5kYXJkVGFnc0FzcGVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBMEQ7QUFHMUQ7Ozs7Ozs7R0FPRztBQUNILE1BQWEsa0JBQWtCO0lBSTdCLFlBQVksWUFBdUM7UUFGbEMsb0JBQWUsR0FBRyxJQUFJLE9BQU8sRUFBYyxDQUFDO1FBRzNELElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO0lBQ25DLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBZ0I7UUFDcEIsNEJBQTRCO1FBQzVCLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNuQyxPQUFPO1FBQ1QsQ0FBQztRQUVELGtDQUFrQztRQUNsQyxJQUFJLHlCQUFXLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQW1CLENBQUMsQ0FBQztZQUM3QyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQyxDQUFDO0lBQ0gsQ0FBQztJQUVPLGtCQUFrQixDQUFDLFFBQXFCO1FBQzlDLDZGQUE2RjtRQUM3RixJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7WUFDbEQsT0FBTztRQUNULENBQUM7UUFFRCw4RUFBOEU7UUFDOUUsK0VBQStFO1FBQy9FLE1BQU0sZ0JBQWdCLEdBQUc7WUFDdkIsTUFBTTtZQUNOLGtDQUFrQztZQUVsQyxjQUFjO1lBQ2QsMEJBQTBCO1lBQzFCLGtDQUFrQztZQUNsQyw2QkFBNkI7WUFDN0Isb0NBQW9DO1lBQ3BDLHVDQUF1QztZQUN2QyxrQ0FBa0M7WUFDbEMseUJBQXlCO1lBQ3pCLHdCQUF3QjtZQUN4QixtQ0FBbUM7WUFDbkMsMkJBQTJCO1lBQzNCLCtCQUErQjtZQUMvQiwrQkFBK0I7WUFDL0IsK0JBQStCO1lBQy9CLGdDQUFnQztZQUNoQyx3Q0FBd0M7WUFDeEMsMEJBQTBCO1lBQzFCLDBCQUEwQjtZQUMxQixrQ0FBa0M7WUFFbEMsVUFBVTtZQUNWLDBCQUEwQjtZQUMxQixxQ0FBcUM7WUFDckMsd0JBQXdCO1lBRXhCLFNBQVM7WUFDVCxnQ0FBZ0M7WUFFaEMsaUJBQWlCO1lBQ2pCLHFDQUFxQztZQUNyQyw0QkFBNEI7WUFDNUIsMkNBQTJDO1lBQzNDLG9DQUFvQztZQUNwQyx3Q0FBd0M7WUFDeEMsZ0NBQWdDO1lBQ2hDLDZDQUE2QztZQUM3QyxzQ0FBc0M7WUFDdEMscUNBQXFDO1lBQ3JDLG9DQUFvQztZQUNwQywwQ0FBMEM7WUFFMUMsYUFBYTtZQUNiLHdCQUF3QjtZQUN4QixrQ0FBa0M7WUFDbEMsaUNBQWlDO1lBQ2pDLDRCQUE0QjtZQUM1Qiw4QkFBOEI7WUFDOUIsK0JBQStCO1lBRS9CLFlBQVk7WUFDWiw2QkFBNkI7WUFDN0Isa0NBQWtDO1lBRWxDLGFBQWE7WUFDYixtQ0FBbUM7WUFFbkMsZUFBZTtZQUNmLHFDQUFxQztZQUNyQyw0QkFBNEI7WUFFNUIsVUFBVTtZQUNWLDBDQUEwQztZQUMxQyw4QkFBOEI7WUFDOUIsOEJBQThCO1lBQzlCLDZCQUE2QjtZQUM3Qix3Q0FBd0M7WUFDeEMsc0NBQXNDO1lBQ3RDLG1EQUFtRDtZQUNuRCxpREFBaUQ7WUFDakQsNEJBQTRCO1lBQzVCLDZDQUE2QztZQUU3QyxTQUFTO1lBQ1QsdUNBQXVDO1lBQ3ZDLHNDQUFzQztZQUN0Qyw4QkFBOEI7WUFDOUIsMENBQTBDO1lBQzFDLHVDQUF1QztZQUN2QywwQkFBMEI7WUFFMUIsV0FBVztZQUNYLDRCQUE0QjtZQUU1QixNQUFNO1lBQ04sb0NBQW9DO1lBQ3BDLDBCQUEwQjtZQUMxQix1QkFBdUI7WUFDdkIsb0JBQW9CO1lBQ3BCLHFDQUFxQztZQUNyQywwQkFBMEI7WUFDMUIsZ0RBQWdEO1lBQ2hELG1CQUFtQjtZQUNuQix3Q0FBd0M7WUFDeEMsbUNBQW1DO1lBQ25DLG1CQUFtQjtZQUNuQiwwQkFBMEI7WUFDMUIsc0NBQXNDO1lBQ3RDLDhDQUE4QztZQUM5QyxtQ0FBbUM7WUFDbkMsK0JBQStCO1lBQy9CLHNDQUFzQztZQUN0QyxzQ0FBc0M7WUFDdEMsMEJBQTBCO1lBQzFCLGlCQUFpQjtZQUNqQiwrQkFBK0I7WUFDL0IsZ0NBQWdDO1lBQ2hDLDJCQUEyQjtZQUMzQix1Q0FBdUM7WUFDdkMsdUNBQXVDO1lBQ3ZDLG9DQUFvQztZQUNwQyxpQ0FBaUM7WUFDakMseUNBQXlDO1lBQ3pDLG9EQUFvRDtZQUNwRCw4Q0FBOEM7WUFDOUMsOENBQThDO1lBQzlDLDJDQUEyQztZQUMzQywrQkFBK0I7WUFDL0Isb0NBQW9DO1lBQ3BDLCtDQUErQztZQUMvQywrQ0FBK0M7WUFDL0MsdUNBQXVDO1lBQ3ZDLGtDQUFrQztZQUNsQywrQkFBK0I7WUFDL0Isa0NBQWtDO1lBQ2xDLHVDQUF1QztZQUN2Qyw0QkFBNEI7WUFDNUIsd0JBQXdCO1lBQ3hCLHFDQUFxQztZQUNyQyw2Q0FBNkM7WUFDN0MsOEJBQThCO1lBQzlCLHlDQUF5QztZQUN6QyxnQ0FBZ0M7WUFDaEMsOEJBQThCO1lBQzlCLHNDQUFzQztZQUV0QyxNQUFNO1lBQ04sNEJBQTRCO1lBQzVCLGdDQUFnQztZQUNoQywwQkFBMEI7WUFDMUIsb0NBQW9DO1lBRXBDLE1BQU07WUFDTiwwQkFBMEI7WUFDMUIsNEJBQTRCO1lBQzVCLCtDQUErQztZQUMvQywwQkFBMEI7WUFDMUIsbUJBQW1CO1lBRW5CLE1BQU07WUFDTix1QkFBdUI7WUFDdkIsdUJBQXVCO1lBRXZCLE1BQU07WUFDTixpQkFBaUI7WUFDakIsMEJBQTBCO1lBQzFCLGtDQUFrQztZQUVsQyxjQUFjO1lBQ2Qsa0NBQWtDO1lBQ2xDLGlDQUFpQztZQUNqQyx3Q0FBd0M7WUFDeEMsK0JBQStCO1lBRS9CLG1CQUFtQjtZQUNuQiwyQ0FBMkM7WUFDM0MsOENBQThDO1lBRTlDLHlCQUF5QjtZQUN6Qix1Q0FBdUM7WUFDdkMsa0RBQWtEO1lBQ2xELDJDQUEyQztZQUMzQyxvREFBb0Q7WUFFcEQsdUJBQXVCO1lBQ3ZCLDZCQUE2QjtZQUM3QixzQkFBc0I7WUFDdEIseUJBQXlCO1lBQ3pCLHVCQUF1QjtZQUN2Qiw2QkFBNkI7WUFDN0IsbUJBQW1CO1lBRW5CLE1BQU07WUFDTixxQ0FBcUM7WUFDckMsb0JBQW9CO1lBQ3BCLGlDQUFpQztZQUNqQyxrQkFBa0I7WUFFbEIsV0FBVztZQUNYLGdDQUFnQztZQUNoQyx5QkFBeUI7WUFFekIsT0FBTztZQUNQLHVCQUF1QjtZQUN2QixxQkFBcUI7WUFDckIsMENBQTBDO1lBQzFDLHNCQUFzQjtZQUN0QiwwQkFBMEI7WUFDMUIsa0NBQWtDO1lBQ2xDLGtDQUFrQztZQUNsQyxrQkFBa0I7WUFDbEIsZ0NBQWdDO1lBRWhDLFlBQVk7WUFDWiwwQkFBMEI7WUFDMUIsd0JBQXdCO1lBQ3hCLHVCQUF1QjtZQUN2Qix3QkFBd0I7WUFDeEIsd0JBQXdCO1lBQ3hCLGdDQUFnQztZQUVoQyxNQUFNO1lBQ04scUJBQXFCO1lBQ3JCLGlCQUFpQjtZQUNqQix1QkFBdUI7WUFDdkIsMkJBQTJCO1lBQzNCLHlCQUF5QjtZQUN6Qix3QkFBd0I7WUFDeEIsa0JBQWtCO1lBQ2xCLGdCQUFnQjtZQUNoQixzQkFBc0I7WUFDdEIsd0JBQXdCO1lBQ3hCLDZCQUE2QjtZQUM3Qiw2QkFBNkI7WUFDN0IsZ0JBQWdCO1lBQ2hCLHNCQUFzQjtZQUN0QiwrQkFBK0I7WUFDL0IsNEJBQTRCO1lBRTVCLE1BQU07WUFDTixxQ0FBcUM7WUFDckMsc0JBQXNCO1lBQ3RCLHVCQUF1QjtZQUN2Qix3QkFBd0I7WUFDeEIscUJBQXFCO1lBQ3JCLCtCQUErQjtZQUMvQix1QkFBdUI7WUFDdkIsdUJBQXVCO1lBQ3ZCLG1CQUFtQjtZQUNuQiw0QkFBNEI7WUFDNUIsa0JBQWtCO1lBQ2xCLHFDQUFxQztZQUNyQyxnQ0FBZ0M7WUFDaEMsbUNBQW1DO1lBQ25DLHFCQUFxQjtZQUNyQiwwQkFBMEI7WUFDMUIsMkJBQTJCO1lBQzNCLGlCQUFpQjtZQUNqQixzQkFBc0I7WUFDdEIsb0NBQW9DO1lBQ3BDLHFCQUFxQjtZQUNyQixxQkFBcUI7WUFDckIsZ0NBQWdDO1lBRWhDLE1BQU07WUFDTixpQkFBaUI7WUFDakIsaUJBQWlCO1lBQ2pCLHNCQUFzQjtZQUV0QixTQUFTO1lBQ1QsZ0NBQWdDO1lBQ2hDLGdDQUFnQztZQUNoQyxpQ0FBaUM7WUFDakMsMkJBQTJCO1lBQzNCLHFDQUFxQztZQUNyQyx5QkFBeUI7WUFDekIsMkNBQTJDO1lBQzNDLGtCQUFrQjtZQUNsQixzQkFBc0I7WUFFdEIsT0FBTztZQUNQLDBCQUEwQjtZQUMxQix3QkFBd0I7WUFDeEIscUJBQXFCO1lBQ3JCLHNCQUFzQjtZQUN0Qix5QkFBeUI7WUFDekIsNEJBQTRCO1lBQzVCLDJCQUEyQjtZQUMzQiwrQkFBK0I7WUFFL0IsUUFBUTtZQUNSLHVCQUF1QjtZQUN2QixrQ0FBa0M7WUFDbEMsNEJBQTRCO1lBQzVCLHFCQUFxQjtZQUVyQixVQUFVO1lBQ1YsdUNBQXVDO1lBQ3ZDLGdDQUFnQztZQUNoQyw2QkFBNkI7WUFFN0IsZ0JBQWdCO1lBQ2hCLDZCQUE2QjtZQUM3QixrQ0FBa0M7WUFDbEMsd0NBQXdDO1lBQ3hDLDRCQUE0QjtZQUM1QixvQ0FBb0M7WUFFcEMsTUFBTTtZQUNOLG1DQUFtQztZQUNuQyw0QkFBNEI7WUFDNUIsMkJBQTJCO1lBQzNCLGtDQUFrQztZQUNsQyx5QkFBeUI7WUFDekIsNkJBQTZCO1lBQzdCLHlCQUF5QjtZQUN6Qix1QkFBdUI7WUFFdkIsV0FBVztZQUNYLHNDQUFzQztZQUN0QyxxQ0FBcUM7WUFDckMsNENBQTRDO1lBQzVDLG1DQUFtQztZQUNuQywrQkFBK0I7WUFDL0Isc0NBQXNDO1lBQ3RDLGtDQUFrQztZQUNsQyxnQ0FBZ0M7WUFFaEMsVUFBVTtZQUNWLHNCQUFzQjtZQUN0QiwyQkFBMkI7WUFDM0IsMEJBQTBCO1lBQzFCLDZCQUE2QjtZQUM3Qix5QkFBeUI7WUFDekIsOEJBQThCO1lBRTlCLGtCQUFrQjtZQUNsQiwwQ0FBMEM7WUFDMUMseUNBQXlDO1lBQ3pDLG9EQUFvRDtZQUNwRCxzQ0FBc0M7WUFDdEMsNENBQTRDO1lBQzVDLGtEQUFrRDtZQUNsRCw2REFBNkQ7WUFDN0Qsb0NBQW9DO1lBQ3BDLCtDQUErQztZQUUvQyxLQUFLO1lBQ0wsc0JBQXNCO1lBQ3RCLHVCQUF1QjtZQUN2QixpQ0FBaUM7WUFDakMsdUNBQXVDO1lBQ3ZDLHNCQUFzQjtZQUV0QixNQUFNO1lBQ04sa0JBQWtCO1lBRWxCLGlCQUFpQjtZQUNqQixxQ0FBcUM7WUFDckMsdUNBQXVDO1lBQ3ZDLDZDQUE2QztZQUU3QyxjQUFjO1lBQ2QsdUJBQXVCO1lBRXZCLGlCQUFpQjtZQUNqQiw2Q0FBNkM7WUFDN0MsbURBQW1EO1lBQ25ELDJDQUEyQztZQUMzQywrQ0FBK0M7WUFDL0Msb0RBQW9EO1lBQ3BELGtEQUFrRDtZQUNsRCxxQ0FBcUM7WUFDckMsK0NBQStDO1lBQy9DLG9DQUFvQztZQUNwQywrQ0FBK0M7WUFDL0MseUNBQXlDO1lBQ3pDLGdDQUFnQztZQUNoQywyQ0FBMkM7WUFFM0MsTUFBTTtZQUNOLDRCQUE0QjtZQUM1Qiw0Q0FBNEM7WUFDNUMsdUJBQXVCO1lBQ3ZCLDJCQUEyQjtZQUMzQix5QkFBeUI7WUFDekIseUJBQXlCO1lBQ3pCLHVCQUF1QjtZQUN2QiwwQkFBMEI7WUFDMUIsb0JBQW9CO1lBQ3BCLHlCQUF5QjtZQUV6QixNQUFNO1lBQ04sd0JBQXdCO1lBQ3hCLHVCQUF1QjtZQUV2QixNQUFNO1lBQ04sdUJBQXVCO1lBRXZCLE1BQU07WUFDTix1QkFBdUI7WUFDdkIsb0JBQW9CO1lBQ3BCLDZCQUE2QjtZQUM3QixtQ0FBbUM7WUFDbkMsaUNBQWlDO1lBQ2pDLHFCQUFxQjtZQUNyQix5QkFBeUI7WUFDekIsNEJBQTRCO1lBQzVCLDBCQUEwQjtZQUUxQixNQUFNO1lBQ04sc0JBQXNCO1lBQ3RCLHVEQUF1RDtZQUN2RCx5QkFBeUI7WUFFekIsZ0JBQWdCO1lBQ2hCLDhCQUE4QjtZQUU5QixZQUFZO1lBQ1osd0JBQXdCO1lBQ3hCLGlCQUFpQjtZQUNqQixnQkFBZ0I7WUFDaEIsNkJBQTZCO1lBQzdCLGdDQUFnQztZQUNoQyxrQkFBa0I7WUFDbEIsdUJBQXVCO1lBQ3ZCLGdDQUFnQztZQUNoQywrQkFBK0I7WUFDL0IseUJBQXlCO1lBQ3pCLGlDQUFpQztZQUNqQyxtQ0FBbUM7WUFDbkMsd0JBQXdCO1lBQ3hCLHFDQUFxQztZQUNyQyx3Q0FBd0M7WUFDeEMsMEJBQTBCO1lBQzFCLHFDQUFxQztZQUNyQywrQkFBK0I7WUFDL0IsbUJBQW1CO1lBQ25CLGtDQUFrQztZQUNsQyw2QkFBNkI7WUFDN0IsdUJBQXVCO1lBQ3ZCLG9CQUFvQjtZQUNwQiwrQkFBK0I7WUFFL0IsYUFBYTtZQUNiLHNCQUFzQjtZQUN0Qiw4QkFBOEI7WUFDOUIsMkJBQTJCO1lBQzNCLDBCQUEwQjtZQUMxQiwrQkFBK0I7WUFDL0IsOEJBQThCO1lBQzlCLCtCQUErQjtTQUNoQyxDQUFDO1FBRUYsSUFBSSxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUM7WUFDeEQsT0FBTztRQUNULENBQUM7UUFFRCw2REFBNkQ7UUFDN0QsTUFBTSxLQUFLLEdBQUcsbUJBQUssQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDakMsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUUvQyxnREFBZ0Q7UUFDaEQsUUFBUSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVPLGNBQWMsQ0FBQyxRQUFxQjtRQUMxQyxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztRQUV6QyxxREFBcUQ7UUFDckQsSUFBSSxRQUFRLENBQUMsZUFBZSxLQUFLLGVBQWUsRUFBRSxDQUFDO1lBQ2pELE1BQU0sVUFBVSxHQUFJLFFBQWdCLENBQUMsYUFBYSxJQUFJLEVBQUUsQ0FBQztZQUN6RCxJQUFJLFVBQVUsQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDOUIsTUFBTSxLQUFLLEdBQUcsbUJBQUssQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ2pDLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUN4RCxJQUFJLFNBQVMsRUFBRSxDQUFDO29CQUNkLE1BQU0sQ0FBQyxHQUFHLENBQUMsdUJBQXVCLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBQ2pELENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVELHNCQUFzQjtRQUN0QixNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFO1lBQ3pELE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDO1FBRUgsbUNBQW1DO1FBQ25DLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN6RCxHQUFHLEVBQUUsR0FBRztZQUNSLEtBQUssRUFBRSxLQUFLO1NBQ2IsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0NBQ0Y7QUFsZ0JELGdEQWtnQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJQXNwZWN0LCBDZm5SZXNvdXJjZSwgU3RhY2sgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IElDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuXG4vKipcbiAqIEFzcGVjdCB0byBlbmZvcmNlIGEgc3RhbmRhcmQgc2V0IG9mIHRhZ3Mgb24gZXZlcnkgdGFnLWNhcGFibGUgcmVzb3VyY2UgaW4gYSBjb25zdHJ1Y3QgdHJlZS5cbiAqIFxuICogVXBkYXRlZCBmb3IgQ0RLIHYyLjIwNi4wKyBjb21wYXRpYmlsaXR5OlxuICogLSBBdm9pZHMgdXNpbmcgYW55IHRhZ2dpbmcgQVBJcyBkdXJpbmcgYXNwZWN0IHZpc2l0YXRpb24gdG8gcHJldmVudCBpbmZpbml0ZSBsb29wc1xuICogLSBVc2VzIGEgc3ludGhlc2lzLXRpbWUgYXBwcm9hY2ggdG8gbW9kaWZ5IENsb3VkRm9ybWF0aW9uIHRlbXBsYXRlc1xuICogLSBNYWludGFpbnMgdGhlIHNhbWUgY2xlYW4gQVBJIGFuZCBhdXRvbWF0aWMgdGFnZ2luZyBiZW5lZml0c1xuICovXG5leHBvcnQgY2xhc3MgU3RhbmRhcmRUYWdzQXNwZWN0IGltcGxlbWVudHMgSUFzcGVjdCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVxdWlyZWRUYWdzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuICBwcml2YXRlIHJlYWRvbmx5IHRhZ2dlZFJlc291cmNlcyA9IG5ldyBXZWFrU2V0PElDb25zdHJ1Y3Q+KCk7XG5cbiAgY29uc3RydWN0b3IocmVxdWlyZWRUYWdzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9KSB7XG4gICAgdGhpcy5yZXF1aXJlZFRhZ3MgPSByZXF1aXJlZFRhZ3M7XG4gIH1cblxuICB2aXNpdChub2RlOiBJQ29uc3RydWN0KTogdm9pZCB7XG4gICAgLy8gU2tpcCBpZiBhbHJlYWR5IHByb2Nlc3NlZFxuICAgIGlmICh0aGlzLnRhZ2dlZFJlc291cmNlcy5oYXMobm9kZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgLy8gUHJvY2VzcyBMMSAoQ0ZOKSByZXNvdXJjZXMgb25seVxuICAgIGlmIChDZm5SZXNvdXJjZS5pc0NmblJlc291cmNlKG5vZGUpKSB7XG4gICAgICB0aGlzLnByb2Nlc3NDZm5SZXNvdXJjZShub2RlIGFzIENmblJlc291cmNlKTtcbiAgICAgIHRoaXMudGFnZ2VkUmVzb3VyY2VzLmFkZChub2RlKTtcbiAgICB9XG4gIH1cbiAgXG4gIHByaXZhdGUgcHJvY2Vzc0NmblJlc291cmNlKHJlc291cmNlOiBDZm5SZXNvdXJjZSk6IHZvaWQge1xuICAgIC8vIFNraXAgU2VjcmV0Um90YXRpb24gcmVzb3VyY2VzIGFzIHRoZXkgY3JlYXRlIG5lc3RlZCBzdGFja3Mgd2l0aCBkaWZmZXJlbnQgdGFnIHJlcXVpcmVtZW50c1xuICAgIGlmIChyZXNvdXJjZS5ub2RlLnBhdGguaW5jbHVkZXMoJ1NlY3JldFJvdGF0aW9uJykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgLy8gQ29tcHJlaGVuc2l2ZSBsaXN0IG9mIENsb3VkRm9ybWF0aW9uIHJlc291cmNlIHR5cGVzIHRoYXQgZG9uJ3Qgc3VwcG9ydCB0YWdzXG4gICAgLy8gVGhpcyBsaXN0IGlzIGJhc2VkIG9uIEFXUyBDbG91ZEZvcm1hdGlvbiBkb2N1bWVudGF0aW9uIGFuZCBrbm93biBsaW1pdGF0aW9uc1xuICAgIGNvbnN0IHVuc3VwcG9ydGVkVHlwZXMgPSBbXG4gICAgICAvLyBBQ01cbiAgICAgICdBV1M6OkNlcnRpZmljYXRlTWFuYWdlcjo6QWNjb3VudCcsXG4gICAgICBcbiAgICAgIC8vIEFQSSBHYXRld2F5XG4gICAgICAnQVdTOjpBcGlHYXRld2F5OjpBY2NvdW50JyxcbiAgICAgICdBV1M6OkFwaUdhdGV3YXk6OkJhc2VQYXRoTWFwcGluZycsXG4gICAgICAnQVdTOjpBcGlHYXRld2F5OjpEZXBsb3ltZW50JyxcbiAgICAgICdBV1M6OkFwaUdhdGV3YXk6OkRvY3VtZW50YXRpb25QYXJ0JyxcbiAgICAgICdBV1M6OkFwaUdhdGV3YXk6OkRvY3VtZW50YXRpb25WZXJzaW9uJyxcbiAgICAgICdBV1M6OkFwaUdhdGV3YXk6OkdhdGV3YXlSZXNwb25zZScsXG4gICAgICAnQVdTOjpBcGlHYXRld2F5OjpNZXRob2QnLFxuICAgICAgJ0FXUzo6QXBpR2F0ZXdheTo6TW9kZWwnLFxuICAgICAgJ0FXUzo6QXBpR2F0ZXdheTo6UmVxdWVzdFZhbGlkYXRvcicsXG4gICAgICAnQVdTOjpBcGlHYXRld2F5OjpSZXNvdXJjZScsXG4gICAgICAnQVdTOjpBcGlHYXRld2F5VjI6OkFwaU1hcHBpbmcnLFxuICAgICAgJ0FXUzo6QXBpR2F0ZXdheVYyOjpBdXRob3JpemVyJyxcbiAgICAgICdBV1M6OkFwaUdhdGV3YXlWMjo6RGVwbG95bWVudCcsXG4gICAgICAnQVdTOjpBcGlHYXRld2F5VjI6OkludGVncmF0aW9uJyxcbiAgICAgICdBV1M6OkFwaUdhdGV3YXlWMjo6SW50ZWdyYXRpb25SZXNwb25zZScsXG4gICAgICAnQVdTOjpBcGlHYXRld2F5VjI6Ok1vZGVsJyxcbiAgICAgICdBV1M6OkFwaUdhdGV3YXlWMjo6Um91dGUnLFxuICAgICAgJ0FXUzo6QXBpR2F0ZXdheVYyOjpSb3V0ZVJlc3BvbnNlJyxcbiAgICAgIFxuICAgICAgLy8gQXBwU3luY1xuICAgICAgJ0FXUzo6QXBwU3luYzo6RGF0YVNvdXJjZScsXG4gICAgICAnQVdTOjpBcHBTeW5jOjpGdW5jdGlvbkNvbmZpZ3VyYXRpb24nLFxuICAgICAgJ0FXUzo6QXBwU3luYzo6UmVzb2x2ZXInLFxuICAgICAgXG4gICAgICAvLyBBdGhlbmFcbiAgICAgICdBV1M6OkF0aGVuYTo6UHJlcGFyZWRTdGF0ZW1lbnQnLFxuICAgICAgXG4gICAgICAvLyBDbG91ZEZvcm1hdGlvblxuICAgICAgJ0FXUzo6Q2xvdWRGb3JtYXRpb246OkN1c3RvbVJlc291cmNlJyxcbiAgICAgICdBV1M6OkNsb3VkRm9ybWF0aW9uOjpNYWNybycsXG4gICAgICAnQVdTOjpDbG91ZEZvcm1hdGlvbjo6TW9kdWxlRGVmYXVsdFZlcnNpb24nLFxuICAgICAgJ0FXUzo6Q2xvdWRGb3JtYXRpb246Ok1vZHVsZVZlcnNpb24nLFxuICAgICAgJ0FXUzo6Q2xvdWRGb3JtYXRpb246OlB1YmxpY1R5cGVWZXJzaW9uJyxcbiAgICAgICdBV1M6OkNsb3VkRm9ybWF0aW9uOjpQdWJsaXNoZXInLFxuICAgICAgJ0FXUzo6Q2xvdWRGb3JtYXRpb246OlJlc291cmNlRGVmYXVsdFZlcnNpb24nLFxuICAgICAgJ0FXUzo6Q2xvdWRGb3JtYXRpb246OlJlc291cmNlVmVyc2lvbicsXG4gICAgICAnQVdTOjpDbG91ZEZvcm1hdGlvbjo6VHlwZUFjdGl2YXRpb24nLFxuICAgICAgJ0FXUzo6Q2xvdWRGb3JtYXRpb246OldhaXRDb25kaXRpb24nLFxuICAgICAgJ0FXUzo6Q2xvdWRGb3JtYXRpb246OldhaXRDb25kaXRpb25IYW5kbGUnLFxuICAgICAgXG4gICAgICAvLyBDbG91ZFdhdGNoXG4gICAgICAnQVdTOjpDbG91ZFdhdGNoOjpBbGFybScsXG4gICAgICAnQVdTOjpDbG91ZFdhdGNoOjpBbm9tYWx5RGV0ZWN0b3InLFxuICAgICAgJ0FXUzo6Q2xvdWRXYXRjaDo6Q29tcG9zaXRlQWxhcm0nLFxuICAgICAgJ0FXUzo6Q2xvdWRXYXRjaDo6RGFzaGJvYXJkJyxcbiAgICAgICdBV1M6OkNsb3VkV2F0Y2g6Okluc2lnaHRSdWxlJyxcbiAgICAgICdBV1M6OkNsb3VkV2F0Y2g6Ok1ldHJpY1N0cmVhbScsXG4gICAgICBcbiAgICAgIC8vIENvZGVCdWlsZFxuICAgICAgJ0FXUzo6Q29kZUJ1aWxkOjpSZXBvcnRHcm91cCcsXG4gICAgICAnQVdTOjpDb2RlQnVpbGQ6OlNvdXJjZUNyZWRlbnRpYWwnLFxuICAgICAgXG4gICAgICAvLyBDb2RlRGVwbG95XG4gICAgICAnQVdTOjpDb2RlRGVwbG95OjpEZXBsb3ltZW50Q29uZmlnJyxcbiAgICAgIFxuICAgICAgLy8gQ29kZVBpcGVsaW5lXG4gICAgICAnQVdTOjpDb2RlUGlwZWxpbmU6OkN1c3RvbUFjdGlvblR5cGUnLFxuICAgICAgJ0FXUzo6Q29kZVBpcGVsaW5lOjpXZWJob29rJyxcbiAgICAgIFxuICAgICAgLy8gQ29nbml0b1xuICAgICAgJ0FXUzo6Q29nbml0bzo6SWRlbnRpdHlQb29sUm9sZUF0dGFjaG1lbnQnLFxuICAgICAgJ0FXUzo6Q29nbml0bzo6VXNlclBvb2xDbGllbnQnLFxuICAgICAgJ0FXUzo6Q29nbml0bzo6VXNlclBvb2xEb21haW4nLFxuICAgICAgJ0FXUzo6Q29nbml0bzo6VXNlclBvb2xHcm91cCcsXG4gICAgICAnQVdTOjpDb2duaXRvOjpVc2VyUG9vbElkZW50aXR5UHJvdmlkZXInLFxuICAgICAgJ0FXUzo6Q29nbml0bzo6VXNlclBvb2xSZXNvdXJjZVNlcnZlcicsXG4gICAgICAnQVdTOjpDb2duaXRvOjpVc2VyUG9vbFJpc2tDb25maWd1cmF0aW9uQXR0YWNobWVudCcsXG4gICAgICAnQVdTOjpDb2duaXRvOjpVc2VyUG9vbFVJQ3VzdG9taXphdGlvbkF0dGFjaG1lbnQnLFxuICAgICAgJ0FXUzo6Q29nbml0bzo6VXNlclBvb2xVc2VyJyxcbiAgICAgICdBV1M6OkNvZ25pdG86OlVzZXJQb29sVXNlclRvR3JvdXBBdHRhY2htZW50JyxcbiAgICAgIFxuICAgICAgLy8gQ29uZmlnXG4gICAgICAnQVdTOjpDb25maWc6OkFnZ3JlZ2F0aW9uQXV0aG9yaXphdGlvbicsXG4gICAgICAnQVdTOjpDb25maWc6OkNvbmZpZ3VyYXRpb25BZ2dyZWdhdG9yJyxcbiAgICAgICdBV1M6OkNvbmZpZzo6Q29uZm9ybWFuY2VQYWNrJyxcbiAgICAgICdBV1M6OkNvbmZpZzo6T3JnYW5pemF0aW9uQ29uZm9ybWFuY2VQYWNrJyxcbiAgICAgICdBV1M6OkNvbmZpZzo6UmVtZWRpYXRpb25Db25maWd1cmF0aW9uJyxcbiAgICAgICdBV1M6OkNvbmZpZzo6U3RvcmVkUXVlcnknLFxuICAgICAgXG4gICAgICAvLyBEeW5hbW9EQlxuICAgICAgJ0FXUzo6RHluYW1vREI6Okdsb2JhbFRhYmxlJyxcbiAgICAgIFxuICAgICAgLy8gRUMyXG4gICAgICAnQVdTOjpFQzI6OkNhcGFjaXR5UmVzZXJ2YXRpb25GbGVldCcsXG4gICAgICAnQVdTOjpFQzI6OkNhcnJpZXJHYXRld2F5JyxcbiAgICAgICdBV1M6OkVDMjo6REhDUE9wdGlvbnMnLFxuICAgICAgJ0FXUzo6RUMyOjpFQzJGbGVldCcsXG4gICAgICAnQVdTOjpFQzI6OkVncmVzc09ubHlJbnRlcm5ldEdhdGV3YXknLFxuICAgICAgJ0FXUzo6RUMyOjpFSVBBc3NvY2lhdGlvbicsXG4gICAgICAnQVdTOjpFQzI6OkVuY2xhdmVDZXJ0aWZpY2F0ZUlhbVJvbGVBc3NvY2lhdGlvbicsXG4gICAgICAnQVdTOjpFQzI6OkZsb3dMb2cnLFxuICAgICAgJ0FXUzo6RUMyOjpHYXRld2F5Um91dGVUYWJsZUFzc29jaWF0aW9uJyxcbiAgICAgICdBV1M6OkVDMjo6SW5zdGFuY2VDb25uZWN0RW5kcG9pbnQnLFxuICAgICAgJ0FXUzo6RUMyOjpLZXlQYWlyJyxcbiAgICAgICdBV1M6OkVDMjo6TGF1bmNoVGVtcGxhdGUnLFxuICAgICAgJ0FXUzo6RUMyOjpOZXR3b3JrSW5zaWdodHNBY2Nlc3NTY29wZScsXG4gICAgICAnQVdTOjpFQzI6Ok5ldHdvcmtJbnNpZ2h0c0FjY2Vzc1Njb3BlQW5hbHlzaXMnLFxuICAgICAgJ0FXUzo6RUMyOjpOZXR3b3JrSW5zaWdodHNBbmFseXNpcycsXG4gICAgICAnQVdTOjpFQzI6Ok5ldHdvcmtJbnNpZ2h0c1BhdGgnLFxuICAgICAgJ0FXUzo6RUMyOjpOZXR3b3JrSW50ZXJmYWNlQXR0YWNobWVudCcsXG4gICAgICAnQVdTOjpFQzI6Ok5ldHdvcmtJbnRlcmZhY2VQZXJtaXNzaW9uJyxcbiAgICAgICdBV1M6OkVDMjo6UGxhY2VtZW50R3JvdXAnLFxuICAgICAgJ0FXUzo6RUMyOjpSb3V0ZScsXG4gICAgICAnQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBFZ3Jlc3MnLFxuICAgICAgJ0FXUzo6RUMyOjpTZWN1cml0eUdyb3VwSW5ncmVzcycsXG4gICAgICAnQVdTOjpFQzI6OlN1Ym5ldENpZHJCbG9jaycsXG4gICAgICAnQVdTOjpFQzI6OlN1Ym5ldE5ldHdvcmtBY2xBc3NvY2lhdGlvbicsXG4gICAgICAnQVdTOjpFQzI6OlN1Ym5ldFJvdXRlVGFibGVBc3NvY2lhdGlvbicsXG4gICAgICAnQVdTOjpFQzI6OlRyYW5zaXRHYXRld2F5QXR0YWNobWVudCcsXG4gICAgICAnQVdTOjpFQzI6OlRyYW5zaXRHYXRld2F5Q29ubmVjdCcsXG4gICAgICAnQVdTOjpFQzI6OlRyYW5zaXRHYXRld2F5TXVsdGljYXN0RG9tYWluJyxcbiAgICAgICdBV1M6OkVDMjo6VHJhbnNpdEdhdGV3YXlNdWx0aWNhc3REb21haW5Bc3NvY2lhdGlvbicsXG4gICAgICAnQVdTOjpFQzI6OlRyYW5zaXRHYXRld2F5TXVsdGljYXN0R3JvdXBNZW1iZXInLFxuICAgICAgJ0FXUzo6RUMyOjpUcmFuc2l0R2F0ZXdheU11bHRpY2FzdEdyb3VwU291cmNlJyxcbiAgICAgICdBV1M6OkVDMjo6VHJhbnNpdEdhdGV3YXlQZWVyaW5nQXR0YWNobWVudCcsXG4gICAgICAnQVdTOjpFQzI6OlRyYW5zaXRHYXRld2F5Um91dGUnLFxuICAgICAgJ0FXUzo6RUMyOjpUcmFuc2l0R2F0ZXdheVJvdXRlVGFibGUnLFxuICAgICAgJ0FXUzo6RUMyOjpUcmFuc2l0R2F0ZXdheVJvdXRlVGFibGVBc3NvY2lhdGlvbicsXG4gICAgICAnQVdTOjpFQzI6OlRyYW5zaXRHYXRld2F5Um91dGVUYWJsZVByb3BhZ2F0aW9uJyxcbiAgICAgICdBV1M6OkVDMjo6VHJhbnNpdEdhdGV3YXlWcGNBdHRhY2htZW50JyxcbiAgICAgICdBV1M6OkVDMjo6VmVyaWZpZWRBY2Nlc3NFbmRwb2ludCcsXG4gICAgICAnQVdTOjpFQzI6OlZlcmlmaWVkQWNjZXNzR3JvdXAnLFxuICAgICAgJ0FXUzo6RUMyOjpWZXJpZmllZEFjY2Vzc0luc3RhbmNlJyxcbiAgICAgICdBV1M6OkVDMjo6VmVyaWZpZWRBY2Nlc3NUcnVzdFByb3ZpZGVyJyxcbiAgICAgICdBV1M6OkVDMjo6Vm9sdW1lQXR0YWNobWVudCcsXG4gICAgICAnQVdTOjpFQzI6OlZQQ0NpZHJCbG9jaycsXG4gICAgICAnQVdTOjpFQzI6OlZQQ0RIQ1BPcHRpb25zQXNzb2NpYXRpb24nLFxuICAgICAgJ0FXUzo6RUMyOjpWUENFbmRwb2ludENvbm5lY3Rpb25Ob3RpZmljYXRpb24nLFxuICAgICAgJ0FXUzo6RUMyOjpWUENFbmRwb2ludFNlcnZpY2UnLFxuICAgICAgJ0FXUzo6RUMyOjpWUENFbmRwb2ludFNlcnZpY2VQZXJtaXNzaW9ucycsXG4gICAgICAnQVdTOjpFQzI6OlZQQ0dhdGV3YXlBdHRhY2htZW50JyxcbiAgICAgICdBV1M6OkVDMjo6VlBOQ29ubmVjdGlvblJvdXRlJyxcbiAgICAgICdBV1M6OkVDMjo6VlBOR2F0ZXdheVJvdXRlUHJvcGFnYXRpb24nLFxuICAgICAgXG4gICAgICAvLyBFQ1JcbiAgICAgICdBV1M6OkVDUjo6UHVibGljUmVwb3NpdG9yeScsXG4gICAgICAnQVdTOjpFQ1I6OlB1bGxUaHJvdWdoQ2FjaGVSdWxlJyxcbiAgICAgICdBV1M6OkVDUjo6UmVnaXN0cnlQb2xpY3knLFxuICAgICAgJ0FXUzo6RUNSOjpSZXBsaWNhdGlvbkNvbmZpZ3VyYXRpb24nLFxuICAgICAgXG4gICAgICAvLyBFQ1NcbiAgICAgICdBV1M6OkVDUzo6QWNjb3VudFNldHRpbmcnLFxuICAgICAgJ0FXUzo6RUNTOjpDYXBhY2l0eVByb3ZpZGVyJyxcbiAgICAgICdBV1M6OkVDUzo6Q2x1c3RlckNhcGFjaXR5UHJvdmlkZXJBc3NvY2lhdGlvbnMnLFxuICAgICAgJ0FXUzo6RUNTOjpQcmltYXJ5VGFza1NldCcsXG4gICAgICAnQVdTOjpFQ1M6OlRhc2tTZXQnLFxuICAgICAgXG4gICAgICAvLyBFRlNcbiAgICAgICdBV1M6OkVGUzo6QWNjZXNzUG9pbnQnLFxuICAgICAgJ0FXUzo6RUZTOjpNb3VudFRhcmdldCcsXG4gICAgICBcbiAgICAgIC8vIEVLU1xuICAgICAgJ0FXUzo6RUtTOjpBZGRvbicsXG4gICAgICAnQVdTOjpFS1M6OkZhcmdhdGVQcm9maWxlJyxcbiAgICAgICdBV1M6OkVLUzo6SWRlbnRpdHlQcm92aWRlckNvbmZpZycsXG4gICAgICBcbiAgICAgIC8vIEVsYXN0aUNhY2hlXG4gICAgICAnQVdTOjpFbGFzdGlDYWNoZTo6UGFyYW1ldGVyR3JvdXAnLFxuICAgICAgJ0FXUzo6RWxhc3RpQ2FjaGU6OlNlY3VyaXR5R3JvdXAnLFxuICAgICAgJ0FXUzo6RWxhc3RpQ2FjaGU6OlNlY3VyaXR5R3JvdXBJbmdyZXNzJyxcbiAgICAgICdBV1M6OkVsYXN0aUNhY2hlOjpTdWJuZXRHcm91cCcsXG4gICAgICBcbiAgICAgIC8vIEVsYXN0aWNCZWFuc3RhbGtcbiAgICAgICdBV1M6OkVsYXN0aWNCZWFuc3RhbGs6OkFwcGxpY2F0aW9uVmVyc2lvbicsXG4gICAgICAnQVdTOjpFbGFzdGljQmVhbnN0YWxrOjpDb25maWd1cmF0aW9uVGVtcGxhdGUnLFxuICAgICAgXG4gICAgICAvLyBFbGFzdGljTG9hZEJhbGFuY2luZ1YyXG4gICAgICAnQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpMaXN0ZW5lcicsXG4gICAgICAnQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpMaXN0ZW5lckNlcnRpZmljYXRlJyxcbiAgICAgICdBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6Okxpc3RlbmVyUnVsZScsXG4gICAgICAnQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpUYXJnZXRHcm91cEF0dGFjaG1lbnQnLFxuICAgICAgXG4gICAgICAvLyBFdmVudEJyaWRnZSAoRXZlbnRzKVxuICAgICAgJ0FXUzo6RXZlbnRzOjpBcGlEZXN0aW5hdGlvbicsXG4gICAgICAnQVdTOjpFdmVudHM6OkFyY2hpdmUnLFxuICAgICAgJ0FXUzo6RXZlbnRzOjpDb25uZWN0aW9uJyxcbiAgICAgICdBV1M6OkV2ZW50czo6RW5kcG9pbnQnLFxuICAgICAgJ0FXUzo6RXZlbnRzOjpFdmVudEJ1c1BvbGljeScsXG4gICAgICAnQVdTOjpFdmVudHM6OlJ1bGUnLFxuICAgICAgXG4gICAgICAvLyBGU3hcbiAgICAgICdBV1M6OkZTeDo6RGF0YVJlcG9zaXRvcnlBc3NvY2lhdGlvbicsXG4gICAgICAnQVdTOjpGU3g6OlNuYXBzaG90JyxcbiAgICAgICdBV1M6OkZTeDo6U3RvcmFnZVZpcnR1YWxNYWNoaW5lJyxcbiAgICAgICdBV1M6OkZTeDo6Vm9sdW1lJyxcbiAgICAgIFxuICAgICAgLy8gR2FtZUxpZnRcbiAgICAgICdBV1M6OkdhbWVMaWZ0OjpHYW1lU2VydmVyR3JvdXAnLFxuICAgICAgJ0FXUzo6R2FtZUxpZnQ6OkxvY2F0aW9uJyxcbiAgICAgIFxuICAgICAgLy8gR2x1ZVxuICAgICAgJ0FXUzo6R2x1ZTo6Q29ubmVjdGlvbicsXG4gICAgICAnQVdTOjpHbHVlOjpEYXRhYmFzZScsXG4gICAgICAnQVdTOjpHbHVlOjpEYXRhQ2F0YWxvZ0VuY3J5cHRpb25TZXR0aW5ncycsXG4gICAgICAnQVdTOjpHbHVlOjpQYXJ0aXRpb24nLFxuICAgICAgJ0FXUzo6R2x1ZTo6U2NoZW1hVmVyc2lvbicsXG4gICAgICAnQVdTOjpHbHVlOjpTY2hlbWFWZXJzaW9uTWV0YWRhdGEnLFxuICAgICAgJ0FXUzo6R2x1ZTo6U2VjdXJpdHlDb25maWd1cmF0aW9uJyxcbiAgICAgICdBV1M6OkdsdWU6OlRhYmxlJyxcbiAgICAgICdBV1M6OkdsdWU6OlVzZXJEZWZpbmVkRnVuY3Rpb24nLFxuICAgICAgXG4gICAgICAvLyBHdWFyZER1dHlcbiAgICAgICdBV1M6Okd1YXJkRHV0eTo6RGV0ZWN0b3InLFxuICAgICAgJ0FXUzo6R3VhcmREdXR5OjpGaWx0ZXInLFxuICAgICAgJ0FXUzo6R3VhcmREdXR5OjpJUFNldCcsXG4gICAgICAnQVdTOjpHdWFyZER1dHk6Ok1hc3RlcicsXG4gICAgICAnQVdTOjpHdWFyZER1dHk6Ok1lbWJlcicsXG4gICAgICAnQVdTOjpHdWFyZER1dHk6OlRocmVhdEludGVsU2V0JyxcbiAgICAgIFxuICAgICAgLy8gSUFNXG4gICAgICAnQVdTOjpJQU06OkFjY2Vzc0tleScsXG4gICAgICAnQVdTOjpJQU06Okdyb3VwJyxcbiAgICAgICdBV1M6OklBTTo6R3JvdXBQb2xpY3knLFxuICAgICAgJ0FXUzo6SUFNOjpJbnN0YW5jZVByb2ZpbGUnLFxuICAgICAgJ0FXUzo6SUFNOjpNYW5hZ2VkUG9saWN5JyxcbiAgICAgICdBV1M6OklBTTo6T0lEQ1Byb3ZpZGVyJyxcbiAgICAgICdBV1M6OklBTTo6UG9saWN5JyxcbiAgICAgICdBV1M6OklBTTo6Um9sZScsXG4gICAgICAnQVdTOjpJQU06OlJvbGVQb2xpY3knLFxuICAgICAgJ0FXUzo6SUFNOjpTQU1MUHJvdmlkZXInLFxuICAgICAgJ0FXUzo6SUFNOjpTZXJ2ZXJDZXJ0aWZpY2F0ZScsXG4gICAgICAnQVdTOjpJQU06OlNlcnZpY2VMaW5rZWRSb2xlJyxcbiAgICAgICdBV1M6OklBTTo6VXNlcicsXG4gICAgICAnQVdTOjpJQU06OlVzZXJQb2xpY3knLFxuICAgICAgJ0FXUzo6SUFNOjpVc2VyVG9Hcm91cEFkZGl0aW9uJyxcbiAgICAgICdBV1M6OklBTTo6VmlydHVhbE1GQURldmljZScsXG4gICAgICBcbiAgICAgIC8vIElvVFxuICAgICAgJ0FXUzo6SW9UOjpBY2NvdW50QXVkaXRDb25maWd1cmF0aW9uJyxcbiAgICAgICdBV1M6OklvVDo6QXV0aG9yaXplcicsXG4gICAgICAnQVdTOjpJb1Q6OkNlcnRpZmljYXRlJyxcbiAgICAgICdBV1M6OklvVDo6Q3VzdG9tTWV0cmljJyxcbiAgICAgICdBV1M6OklvVDo6RGltZW5zaW9uJyxcbiAgICAgICdBV1M6OklvVDo6RG9tYWluQ29uZmlndXJhdGlvbicsXG4gICAgICAnQVdTOjpJb1Q6OkZsZWV0TWV0cmljJyxcbiAgICAgICdBV1M6OklvVDo6Sm9iVGVtcGxhdGUnLFxuICAgICAgJ0FXUzo6SW9UOjpMb2dnaW5nJyxcbiAgICAgICdBV1M6OklvVDo6TWl0aWdhdGlvbkFjdGlvbicsXG4gICAgICAnQVdTOjpJb1Q6OlBvbGljeScsXG4gICAgICAnQVdTOjpJb1Q6OlBvbGljeVByaW5jaXBhbEF0dGFjaG1lbnQnLFxuICAgICAgJ0FXUzo6SW9UOjpQcm92aXNpb25pbmdUZW1wbGF0ZScsXG4gICAgICAnQVdTOjpJb1Q6OlJlc291cmNlU3BlY2lmaWNMb2dnaW5nJyxcbiAgICAgICdBV1M6OklvVDo6Um9sZUFsaWFzJyxcbiAgICAgICdBV1M6OklvVDo6U2NoZWR1bGVkQXVkaXQnLFxuICAgICAgJ0FXUzo6SW9UOjpTZWN1cml0eVByb2ZpbGUnLFxuICAgICAgJ0FXUzo6SW9UOjpUaGluZycsXG4gICAgICAnQVdTOjpJb1Q6OlRoaW5nR3JvdXAnLFxuICAgICAgJ0FXUzo6SW9UOjpUaGluZ1ByaW5jaXBhbEF0dGFjaG1lbnQnLFxuICAgICAgJ0FXUzo6SW9UOjpUaGluZ1R5cGUnLFxuICAgICAgJ0FXUzo6SW9UOjpUb3BpY1J1bGUnLFxuICAgICAgJ0FXUzo6SW9UOjpUb3BpY1J1bGVEZXN0aW5hdGlvbicsXG4gICAgICBcbiAgICAgIC8vIEtNU1xuICAgICAgJ0FXUzo6S01TOjpBbGlhcycsXG4gICAgICAnQVdTOjpLTVM6OkdyYW50JyxcbiAgICAgICdBV1M6OktNUzo6UmVwbGljYUtleScsXG4gICAgICBcbiAgICAgIC8vIExhbWJkYVxuICAgICAgJ0FXUzo6TGFtYmRhOjpDb2RlU2lnbmluZ0NvbmZpZycsXG4gICAgICAnQVdTOjpMYW1iZGE6OkV2ZW50SW52b2tlQ29uZmlnJyxcbiAgICAgICdBV1M6OkxhbWJkYTo6RXZlbnRTb3VyY2VNYXBwaW5nJyxcbiAgICAgICdBV1M6OkxhbWJkYTo6TGF5ZXJWZXJzaW9uJyxcbiAgICAgICdBV1M6OkxhbWJkYTo6TGF5ZXJWZXJzaW9uUGVybWlzc2lvbicsXG4gICAgICAnQVdTOjpMYW1iZGE6OlBlcm1pc3Npb24nLFxuICAgICAgJ0FXUzo6TGFtYmRhOjpQcm92aXNpb25lZENvbmN1cnJlbmN5Q29uZmlnJyxcbiAgICAgICdBV1M6OkxhbWJkYTo6VXJsJyxcbiAgICAgICdBV1M6OkxhbWJkYTo6VmVyc2lvbicsXG4gICAgICBcbiAgICAgIC8vIExvZ3NcbiAgICAgICdBV1M6OkxvZ3M6OkFjY291bnRQb2xpY3knLFxuICAgICAgJ0FXUzo6TG9nczo6RGVzdGluYXRpb24nLFxuICAgICAgJ0FXUzo6TG9nczo6TG9nR3JvdXAnLFxuICAgICAgJ0FXUzo6TG9nczo6TG9nU3RyZWFtJyxcbiAgICAgICdBV1M6OkxvZ3M6Ok1ldHJpY0ZpbHRlcicsXG4gICAgICAnQVdTOjpMb2dzOjpRdWVyeURlZmluaXRpb24nLFxuICAgICAgJ0FXUzo6TG9nczo6UmVzb3VyY2VQb2xpY3knLFxuICAgICAgJ0FXUzo6TG9nczo6U3Vic2NyaXB0aW9uRmlsdGVyJyxcbiAgICAgIFxuICAgICAgLy8gTWFjaWVcbiAgICAgICdBV1M6Ok1hY2llOjpBbGxvd0xpc3QnLFxuICAgICAgJ0FXUzo6TWFjaWU6OkN1c3RvbURhdGFJZGVudGlmaWVyJyxcbiAgICAgICdBV1M6Ok1hY2llOjpGaW5kaW5nc0ZpbHRlcicsXG4gICAgICAnQVdTOjpNYWNpZTo6U2Vzc2lvbicsXG4gICAgICBcbiAgICAgIC8vIE5lcHR1bmVcbiAgICAgICdBV1M6Ok5lcHR1bmU6OkRCQ2x1c3RlclBhcmFtZXRlckdyb3VwJyxcbiAgICAgICdBV1M6Ok5lcHR1bmU6OkRCUGFyYW1ldGVyR3JvdXAnLFxuICAgICAgJ0FXUzo6TmVwdHVuZTo6REJTdWJuZXRHcm91cCcsXG4gICAgICBcbiAgICAgIC8vIE9yZ2FuaXphdGlvbnNcbiAgICAgICdBV1M6Ok9yZ2FuaXphdGlvbnM6OkFjY291bnQnLFxuICAgICAgJ0FXUzo6T3JnYW5pemF0aW9uczo6T3JnYW5pemF0aW9uJyxcbiAgICAgICdBV1M6Ok9yZ2FuaXphdGlvbnM6Ok9yZ2FuaXphdGlvbmFsVW5pdCcsXG4gICAgICAnQVdTOjpPcmdhbml6YXRpb25zOjpQb2xpY3knLFxuICAgICAgJ0FXUzo6T3JnYW5pemF0aW9uczo6UmVzb3VyY2VQb2xpY3knLFxuICAgICAgXG4gICAgICAvLyBSRFNcbiAgICAgICdBV1M6OlJEUzo6REJDbHVzdGVyUGFyYW1ldGVyR3JvdXAnLFxuICAgICAgJ0FXUzo6UkRTOjpEQlBhcmFtZXRlckdyb3VwJyxcbiAgICAgICdBV1M6OlJEUzo6REJTZWN1cml0eUdyb3VwJyxcbiAgICAgICdBV1M6OlJEUzo6REJTZWN1cml0eUdyb3VwSW5ncmVzcycsXG4gICAgICAnQVdTOjpSRFM6OkRCU3VibmV0R3JvdXAnLFxuICAgICAgJ0FXUzo6UkRTOjpFdmVudFN1YnNjcmlwdGlvbicsXG4gICAgICAnQVdTOjpSRFM6Okdsb2JhbENsdXN0ZXInLFxuICAgICAgJ0FXUzo6UkRTOjpPcHRpb25Hcm91cCcsXG4gICAgICBcbiAgICAgIC8vIFJlZHNoaWZ0XG4gICAgICAnQVdTOjpSZWRzaGlmdDo6Q2x1c3RlclBhcmFtZXRlckdyb3VwJyxcbiAgICAgICdBV1M6OlJlZHNoaWZ0OjpDbHVzdGVyU2VjdXJpdHlHcm91cCcsXG4gICAgICAnQVdTOjpSZWRzaGlmdDo6Q2x1c3RlclNlY3VyaXR5R3JvdXBJbmdyZXNzJyxcbiAgICAgICdBV1M6OlJlZHNoaWZ0OjpDbHVzdGVyU3VibmV0R3JvdXAnLFxuICAgICAgJ0FXUzo6UmVkc2hpZnQ6OkVuZHBvaW50QWNjZXNzJyxcbiAgICAgICdBV1M6OlJlZHNoaWZ0OjpFbmRwb2ludEF1dGhvcml6YXRpb24nLFxuICAgICAgJ0FXUzo6UmVkc2hpZnQ6OkV2ZW50U3Vic2NyaXB0aW9uJyxcbiAgICAgICdBV1M6OlJlZHNoaWZ0OjpTY2hlZHVsZWRBY3Rpb24nLFxuICAgICAgXG4gICAgICAvLyBSb3V0ZTUzXG4gICAgICAnQVdTOjpSb3V0ZTUzOjpETlNTRUMnLFxuICAgICAgJ0FXUzo6Um91dGU1Mzo6SGVhbHRoQ2hlY2snLFxuICAgICAgJ0FXUzo6Um91dGU1Mzo6SG9zdGVkWm9uZScsXG4gICAgICAnQVdTOjpSb3V0ZTUzOjpLZXlTaWduaW5nS2V5JyxcbiAgICAgICdBV1M6OlJvdXRlNTM6OlJlY29yZFNldCcsXG4gICAgICAnQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRHcm91cCcsXG4gICAgICBcbiAgICAgIC8vIFJvdXRlNTNSZXNvbHZlclxuICAgICAgJ0FXUzo6Um91dGU1M1Jlc29sdmVyOjpGaXJld2FsbERvbWFpbkxpc3QnLFxuICAgICAgJ0FXUzo6Um91dGU1M1Jlc29sdmVyOjpGaXJld2FsbFJ1bGVHcm91cCcsXG4gICAgICAnQVdTOjpSb3V0ZTUzUmVzb2x2ZXI6OkZpcmV3YWxsUnVsZUdyb3VwQXNzb2NpYXRpb24nLFxuICAgICAgJ0FXUzo6Um91dGU1M1Jlc29sdmVyOjpSZXNvbHZlckNvbmZpZycsXG4gICAgICAnQVdTOjpSb3V0ZTUzUmVzb2x2ZXI6OlJlc29sdmVyRE5TU0VDQ29uZmlnJyxcbiAgICAgICdBV1M6OlJvdXRlNTNSZXNvbHZlcjo6UmVzb2x2ZXJRdWVyeUxvZ2dpbmdDb25maWcnLFxuICAgICAgJ0FXUzo6Um91dGU1M1Jlc29sdmVyOjpSZXNvbHZlclF1ZXJ5TG9nZ2luZ0NvbmZpZ0Fzc29jaWF0aW9uJyxcbiAgICAgICdBV1M6OlJvdXRlNTNSZXNvbHZlcjo6UmVzb2x2ZXJSdWxlJyxcbiAgICAgICdBV1M6OlJvdXRlNTNSZXNvbHZlcjo6UmVzb2x2ZXJSdWxlQXNzb2NpYXRpb24nLFxuICAgICAgXG4gICAgICAvLyBTM1xuICAgICAgJ0FXUzo6UzM6OkFjY2Vzc1BvaW50JyxcbiAgICAgICdBV1M6OlMzOjpCdWNrZXRQb2xpY3knLFxuICAgICAgJ0FXUzo6UzM6Ok11bHRpUmVnaW9uQWNjZXNzUG9pbnQnLFxuICAgICAgJ0FXUzo6UzM6Ok11bHRpUmVnaW9uQWNjZXNzUG9pbnRQb2xpY3knLFxuICAgICAgJ0FXUzo6UzM6OlN0b3JhZ2VMZW5zJyxcbiAgICAgIFxuICAgICAgLy8gU0RCXG4gICAgICAnQVdTOjpTREI6OkRvbWFpbicsXG4gICAgICBcbiAgICAgIC8vIFNlY3JldHNNYW5hZ2VyXG4gICAgICAnQVdTOjpTZWNyZXRzTWFuYWdlcjo6UmVzb3VyY2VQb2xpY3knLFxuICAgICAgJ0FXUzo6U2VjcmV0c01hbmFnZXI6OlJvdGF0aW9uU2NoZWR1bGUnLFxuICAgICAgJ0FXUzo6U2VjcmV0c01hbmFnZXI6OlNlY3JldFRhcmdldEF0dGFjaG1lbnQnLFxuICAgICAgXG4gICAgICAvLyBTZWN1cml0eUh1YlxuICAgICAgJ0FXUzo6U2VjdXJpdHlIdWI6Okh1YicsXG4gICAgICBcbiAgICAgIC8vIFNlcnZpY2VDYXRhbG9nXG4gICAgICAnQVdTOjpTZXJ2aWNlQ2F0YWxvZzo6QWNjZXB0ZWRQb3J0Zm9saW9TaGFyZScsXG4gICAgICAnQVdTOjpTZXJ2aWNlQ2F0YWxvZzo6TGF1bmNoTm90aWZpY2F0aW9uQ29uc3RyYWludCcsXG4gICAgICAnQVdTOjpTZXJ2aWNlQ2F0YWxvZzo6TGF1bmNoUm9sZUNvbnN0cmFpbnQnLFxuICAgICAgJ0FXUzo6U2VydmljZUNhdGFsb2c6OkxhdW5jaFRlbXBsYXRlQ29uc3RyYWludCcsXG4gICAgICAnQVdTOjpTZXJ2aWNlQ2F0YWxvZzo6UG9ydGZvbGlvUHJpbmNpcGFsQXNzb2NpYXRpb24nLFxuICAgICAgJ0FXUzo6U2VydmljZUNhdGFsb2c6OlBvcnRmb2xpb1Byb2R1Y3RBc3NvY2lhdGlvbicsXG4gICAgICAnQVdTOjpTZXJ2aWNlQ2F0YWxvZzo6UG9ydGZvbGlvU2hhcmUnLFxuICAgICAgJ0FXUzo6U2VydmljZUNhdGFsb2c6OlJlc291cmNlVXBkYXRlQ29uc3RyYWludCcsXG4gICAgICAnQVdTOjpTZXJ2aWNlQ2F0YWxvZzo6U2VydmljZUFjdGlvbicsXG4gICAgICAnQVdTOjpTZXJ2aWNlQ2F0YWxvZzo6U2VydmljZUFjdGlvbkFzc29jaWF0aW9uJyxcbiAgICAgICdBV1M6OlNlcnZpY2VDYXRhbG9nOjpTdGFja1NldENvbnN0cmFpbnQnLFxuICAgICAgJ0FXUzo6U2VydmljZUNhdGFsb2c6OlRhZ09wdGlvbicsXG4gICAgICAnQVdTOjpTZXJ2aWNlQ2F0YWxvZzo6VGFnT3B0aW9uQXNzb2NpYXRpb24nLFxuICAgICAgXG4gICAgICAvLyBTRVNcbiAgICAgICdBV1M6OlNFUzo6Q29uZmlndXJhdGlvblNldCcsXG4gICAgICAnQVdTOjpTRVM6OkNvbmZpZ3VyYXRpb25TZXRFdmVudERlc3RpbmF0aW9uJyxcbiAgICAgICdBV1M6OlNFUzo6Q29udGFjdExpc3QnLFxuICAgICAgJ0FXUzo6U0VTOjpEZWRpY2F0ZWRJcFBvb2wnLFxuICAgICAgJ0FXUzo6U0VTOjpFbWFpbElkZW50aXR5JyxcbiAgICAgICdBV1M6OlNFUzo6UmVjZWlwdEZpbHRlcicsXG4gICAgICAnQVdTOjpTRVM6OlJlY2VpcHRSdWxlJyxcbiAgICAgICdBV1M6OlNFUzo6UmVjZWlwdFJ1bGVTZXQnLFxuICAgICAgJ0FXUzo6U0VTOjpUZW1wbGF0ZScsXG4gICAgICAnQVdTOjpTRVM6OlZkbUF0dHJpYnV0ZXMnLFxuICAgICAgXG4gICAgICAvLyBTTlNcbiAgICAgICdBV1M6OlNOUzo6U3Vic2NyaXB0aW9uJyxcbiAgICAgICdBV1M6OlNOUzo6VG9waWNQb2xpY3knLFxuICAgICAgXG4gICAgICAvLyBTUVNcbiAgICAgICdBV1M6OlNRUzo6UXVldWVQb2xpY3knLFxuICAgICAgXG4gICAgICAvLyBTU01cbiAgICAgICdBV1M6OlNTTTo6QXNzb2NpYXRpb24nLFxuICAgICAgJ0FXUzo6U1NNOjpEb2N1bWVudCcsXG4gICAgICAnQVdTOjpTU006Ok1haW50ZW5hbmNlV2luZG93JyxcbiAgICAgICdBV1M6OlNTTTo6TWFpbnRlbmFuY2VXaW5kb3dUYXJnZXQnLFxuICAgICAgJ0FXUzo6U1NNOjpNYWludGVuYW5jZVdpbmRvd1Rhc2snLFxuICAgICAgJ0FXUzo6U1NNOjpQYXJhbWV0ZXInLFxuICAgICAgJ0FXUzo6U1NNOjpQYXRjaEJhc2VsaW5lJyxcbiAgICAgICdBV1M6OlNTTTo6UmVzb3VyY2VEYXRhU3luYycsXG4gICAgICAnQVdTOjpTU006OlJlc291cmNlUG9saWN5JyxcbiAgICAgIFxuICAgICAgLy8gU1NPXG4gICAgICAnQVdTOjpTU086OkFzc2lnbm1lbnQnLFxuICAgICAgJ0FXUzo6U1NPOjpJbnN0YW5jZUFjY2Vzc0NvbnRyb2xBdHRyaWJ1dGVDb25maWd1cmF0aW9uJyxcbiAgICAgICdBV1M6OlNTTzo6UGVybWlzc2lvblNldCcsXG4gICAgICBcbiAgICAgIC8vIFN0ZXBGdW5jdGlvbnNcbiAgICAgICdBV1M6OlN0ZXBGdW5jdGlvbnM6OkFjdGl2aXR5JyxcbiAgICAgIFxuICAgICAgLy8gV0FGL1dBRnYyXG4gICAgICAnQVdTOjpXQUY6OkJ5dGVNYXRjaFNldCcsXG4gICAgICAnQVdTOjpXQUY6OklQU2V0JyxcbiAgICAgICdBV1M6OldBRjo6UnVsZScsXG4gICAgICAnQVdTOjpXQUY6OlNpemVDb25zdHJhaW50U2V0JyxcbiAgICAgICdBV1M6OldBRjo6U3FsSW5qZWN0aW9uTWF0Y2hTZXQnLFxuICAgICAgJ0FXUzo6V0FGOjpXZWJBQ0wnLFxuICAgICAgJ0FXUzo6V0FGOjpYc3NNYXRjaFNldCcsXG4gICAgICAnQVdTOjpXQUZSZWdpb25hbDo6Qnl0ZU1hdGNoU2V0JyxcbiAgICAgICdBV1M6OldBRlJlZ2lvbmFsOjpHZW9NYXRjaFNldCcsXG4gICAgICAnQVdTOjpXQUZSZWdpb25hbDo6SVBTZXQnLFxuICAgICAgJ0FXUzo6V0FGUmVnaW9uYWw6OlJhdGVCYXNlZFJ1bGUnLFxuICAgICAgJ0FXUzo6V0FGUmVnaW9uYWw6OlJlZ2V4UGF0dGVyblNldCcsXG4gICAgICAnQVdTOjpXQUZSZWdpb25hbDo6UnVsZScsXG4gICAgICAnQVdTOjpXQUZSZWdpb25hbDo6U2l6ZUNvbnN0cmFpbnRTZXQnLFxuICAgICAgJ0FXUzo6V0FGUmVnaW9uYWw6OlNxbEluamVjdGlvbk1hdGNoU2V0JyxcbiAgICAgICdBV1M6OldBRlJlZ2lvbmFsOjpXZWJBQ0wnLFxuICAgICAgJ0FXUzo6V0FGUmVnaW9uYWw6OldlYkFDTEFzc29jaWF0aW9uJyxcbiAgICAgICdBV1M6OldBRlJlZ2lvbmFsOjpYc3NNYXRjaFNldCcsXG4gICAgICAnQVdTOjpXQUZ2Mjo6SVBTZXQnLFxuICAgICAgJ0FXUzo6V0FGdjI6OkxvZ2dpbmdDb25maWd1cmF0aW9uJyxcbiAgICAgICdBV1M6OldBRnYyOjpSZWdleFBhdHRlcm5TZXQnLFxuICAgICAgJ0FXUzo6V0FGdjI6OlJ1bGVHcm91cCcsXG4gICAgICAnQVdTOjpXQUZ2Mjo6V2ViQUNMJyxcbiAgICAgICdBV1M6OldBRnYyOjpXZWJBQ0xBc3NvY2lhdGlvbicsXG4gICAgICBcbiAgICAgIC8vIFNlcnZlcmxlc3NcbiAgICAgICdBV1M6OlNlcnZlcmxlc3M6OkFwaScsXG4gICAgICAnQVdTOjpTZXJ2ZXJsZXNzOjpBcHBsaWNhdGlvbicsXG4gICAgICAnQVdTOjpTZXJ2ZXJsZXNzOjpGdW5jdGlvbicsXG4gICAgICAnQVdTOjpTZXJ2ZXJsZXNzOjpIdHRwQXBpJyxcbiAgICAgICdBV1M6OlNlcnZlcmxlc3M6OkxheWVyVmVyc2lvbicsXG4gICAgICAnQVdTOjpTZXJ2ZXJsZXNzOjpTaW1wbGVUYWJsZScsXG4gICAgICAnQVdTOjpTZXJ2ZXJsZXNzOjpTdGF0ZU1hY2hpbmUnXG4gICAgXTtcbiAgICBcbiAgICBpZiAodW5zdXBwb3J0ZWRUeXBlcy5pbmNsdWRlcyhyZXNvdXJjZS5jZm5SZXNvdXJjZVR5cGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIC8vIEFkZCBhIHN5bnRoZXNpcyBob29rIHRvIG1vZGlmeSB0aGUgQ2xvdWRGb3JtYXRpb24gdGVtcGxhdGVcbiAgICBjb25zdCBzdGFjayA9IFN0YWNrLm9mKHJlc291cmNlKTtcbiAgICBjb25zdCBsb2dpY2FsSWQgPSBzdGFjay5nZXRMb2dpY2FsSWQocmVzb3VyY2UpO1xuICAgIFxuICAgIC8vIFVzZSBhZGRUcmFuc2Zvcm0gdG8gYWRkIHRhZ3MgZHVyaW5nIHN5bnRoZXNpc1xuICAgIHJlc291cmNlLmFkZFByb3BlcnR5T3ZlcnJpZGUoJ1RhZ3MnLCB0aGlzLmJ1aWxkVGFnc0FycmF5KHJlc291cmNlKSk7XG4gIH1cbiAgXG4gIHByaXZhdGUgYnVpbGRUYWdzQXJyYXkocmVzb3VyY2U6IENmblJlc291cmNlKTogYW55W10ge1xuICAgIGNvbnN0IHRhZ01hcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5cbiAgICAvLyBBZGQgSVBBTSBwb29sIHRhZyBmb3IgVlBDcyB3aXRoIElQQU0gY29uZmlndXJhdGlvblxuICAgIGlmIChyZXNvdXJjZS5jZm5SZXNvdXJjZVR5cGUgPT09ICdBV1M6OkVDMjo6VlBDJykge1xuICAgICAgY29uc3QgcHJvcGVydGllcyA9IChyZXNvdXJjZSBhcyBhbnkpLmNmblByb3BlcnRpZXMgfHwge307XG4gICAgICBpZiAocHJvcGVydGllcy5pcHY0SXBhbVBvb2xJZCkge1xuICAgICAgICBjb25zdCBzdGFjayA9IFN0YWNrLm9mKHJlc291cmNlKTtcbiAgICAgICAgY29uc3QgYWNjb3VudElkID0gc3RhY2subm9kZS50cnlHZXRDb250ZXh0KCdhY2NvdW50SWQnKTtcbiAgICAgICAgaWYgKGFjY291bnRJZCkge1xuICAgICAgICAgIHRhZ01hcC5zZXQoJ2ZqYWxsOm9wZXJhdGlvbnM6cG9vbCcsIGFjY291bnRJZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBcHBseSBzdGFuZGFyZCB0YWdzXG4gICAgT2JqZWN0LmVudHJpZXModGhpcy5yZXF1aXJlZFRhZ3MpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgdGFnTWFwLnNldChrZXksIHZhbHVlKTtcbiAgICB9KTtcblxuICAgIC8vIENvbnZlcnQgdG8gQ2xvdWRGb3JtYXRpb24gZm9ybWF0XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGFnTWFwLmVudHJpZXMoKSkubWFwKChba2V5LCB2YWx1ZV0pID0+ICh7XG4gICAgICBLZXk6IGtleSxcbiAgICAgIFZhbHVlOiB2YWx1ZVxuICAgIH0pKTtcbiAgfVxufVxuIl19
467
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhbmRhcmRUYWdzQXNwZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL3V0aWxzL3N0YW5kYXJkVGFnc0FzcGVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBMEQ7QUFHMUQ7Ozs7Ozs7R0FPRztBQUNILE1BQWEsa0JBQWtCO0lBSTdCLFlBQVksWUFBdUM7UUFGbEMsb0JBQWUsR0FBRyxJQUFJLE9BQU8sRUFBYyxDQUFDO1FBRzNELElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO0lBQ25DLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBZ0I7UUFDcEIsNEJBQTRCO1FBQzVCLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNuQyxPQUFPO1FBQ1QsQ0FBQztRQUVELGtDQUFrQztRQUNsQyxJQUFJLHlCQUFXLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQW1CLENBQUMsQ0FBQztZQUM3QyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQyxDQUFDO0lBQ0gsQ0FBQztJQUVPLGtCQUFrQixDQUFDLFFBQXFCO1FBQzlDLDZGQUE2RjtRQUM3RixJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7WUFDbEQsT0FBTztRQUNULENBQUM7UUFFRCw4RUFBOEU7UUFDOUUsK0VBQStFO1FBQy9FLE1BQU0sZ0JBQWdCLEdBQUc7WUFDdkIsTUFBTTtZQUNOLGtDQUFrQztZQUVsQyxjQUFjO1lBQ2QsMEJBQTBCO1lBQzFCLGtDQUFrQztZQUNsQyw2QkFBNkI7WUFDN0Isb0NBQW9DO1lBQ3BDLHVDQUF1QztZQUN2QyxrQ0FBa0M7WUFDbEMseUJBQXlCO1lBQ3pCLHdCQUF3QjtZ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Q0FBQztnQkFDOUIsTUFBTSxLQUFLLEdBQUcsbUJBQUssQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ2pDLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUN4RCxJQUFJLFNBQVMsRUFBRSxDQUFDO29CQUNkLE1BQU0sQ0FBQyxHQUFHLENBQUMsdUJBQXVCLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBQ2pELENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVELHNCQUFzQjtRQUN0QixNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFO1lBQ3pELE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDO1FBRUgsbUNBQW1DO1FBQ25DLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN6RCxHQUFHLEVBQUUsR0FBRztZQUNSLEtBQUssRUFBRSxLQUFLO1NBQ2IsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0NBQ0Y7QUFsZ0JELGdEQWtnQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJQXNwZWN0LCBDZm5SZXNvdXJjZSwgU3RhY2sgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IElDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuXG4vKipcbiAqIEFzcGVjdCB0byBlbmZvcmNlIGEgc3RhbmRhcmQgc2V0IG9mIHRhZ3Mgb24gZXZlcnkgdGFnLWNhcGFibGUgcmVzb3VyY2UgaW4gYSBjb25zdHJ1Y3QgdHJlZS5cbiAqXG4gKiBVcGRhdGVkIGZvciBDREsgdjIuMjA2LjArIGNvbXBhdGliaWxpdHk6XG4gKiAtIEF2b2lkcyB1c2luZyBhbnkgdGFnZ2luZyBBUElzIGR1cmluZyBhc3BlY3QgdmlzaXRhdGlvbiB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzXG4gKiAtIFVzZXMgYSBzeW50aGVzaXMtdGltZSBhcHByb2FjaCB0byBtb2RpZnkgQ2xvdWRGb3JtYXRpb24gdGVtcGxhdGVzXG4gKiAtIE1haW50YWlucyB0aGUgc2FtZSBjbGVhbiBBUEkgYW5kIGF1dG9tYXRpYyB0YWdnaW5nIGJlbmVmaXRzXG4gKi9cbmV4cG9ydCBjbGFzcyBTdGFuZGFyZFRhZ3NBc3BlY3QgaW1wbGVtZW50cyBJQXNwZWN0IHtcbiAgcHJpdmF0ZSByZWFkb25seSByZXF1aXJlZFRhZ3M6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG4gIHByaXZhdGUgcmVhZG9ubHkgdGFnZ2VkUmVzb3VyY2VzID0gbmV3IFdlYWtTZXQ8SUNvbnN0cnVjdD4oKTtcblxuICBjb25zdHJ1Y3RvcihyZXF1aXJlZFRhZ3M6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0pIHtcbiAgICB0aGlzLnJlcXVpcmVkVGFncyA9IHJlcXVpcmVkVGFncztcbiAgfVxuXG4gIHZpc2l0KG5vZGU6IElDb25zdHJ1Y3QpOiB2b2lkIHtcbiAgICAvLyBTa2lwIGlmIGFscmVhZHkgcHJvY2Vzc2VkXG4gICAgaWYgKHRoaXMudGFnZ2VkUmVzb3VyY2VzLmhhcyhub2RlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFByb2Nlc3MgTDEgKENGTikgcmVzb3VyY2VzIG9ubHlcbiAgICBpZiAoQ2ZuUmVzb3VyY2UuaXNDZm5SZXNvdXJjZShub2RlKSkge1xuICAgICAgdGhpcy5wcm9jZXNzQ2ZuUmVzb3VyY2Uobm9kZSBhcyBDZm5SZXNvdXJjZSk7XG4gICAgICB0aGlzLnRhZ2dlZFJlc291cmNlcy5hZGQobm9kZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzQ2ZuUmVzb3VyY2UocmVzb3VyY2U6IENmblJlc291cmNlKTogdm9pZCB7XG4gICAgLy8gU2tpcCBTZWNyZXRSb3RhdGlvbiByZXNvdXJjZXMgYXMgdGhleSBjcmVhdGUgbmVzdGVkIHN0YWNrcyB3aXRoIGRpZmZlcmVudCB0YWcgcmVxdWlyZW1lbnRzXG4gICAgaWYgKHJlc291cmNlLm5vZGUucGF0aC5pbmNsdWRlcyhcIlNlY3JldFJvdGF0aW9uXCIpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQ29tcHJlaGVuc2l2ZSBsaXN0IG9mIENsb3VkRm9ybWF0aW9uIHJlc291cmNlIHR5cGVzIHRoYXQgZG9uJ3Qgc3VwcG9ydCB0YWdzXG4gICAgLy8gVGhpcyBsaXN0IGlzIGJhc2VkIG9uIEFXUyBDbG91ZEZvcm1hdGlvbiBkb2N1bWVudGF0aW9uIGFuZCBrbm93biBsaW1pdGF0aW9uc1xuICAgIGNvbnN0IHVuc3VwcG9ydGVkVHlwZXMgPSBbXG4gICAgICAvLyBBQ01cbiAgICAgIFwiQVdTOjpDZXJ0aWZpY2F0ZU1hbmFnZXI6OkFjY291bnRcIixcblxuICAgICAgLy8gQVBJIEdhdGV3YXlcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5OjpBY2NvdW50XCIsXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheTo6QmFzZVBhdGhNYXBwaW5nXCIsXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheTo6RGVwbG95bWVudFwiLFxuICAgICAgXCJBV1M6OkFwaUdhdGV3YXk6OkRvY3VtZW50YXRpb25QYXJ0XCIsXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheTo6RG9jdW1lbnRhdGlvblZlcnNpb25cIixcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5OjpHYXRld2F5UmVzcG9uc2VcIixcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5OjpNZXRob2RcIixcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5OjpNb2RlbFwiLFxuICAgICAgXCJBV1M6OkFwaUdhdGV3YXk6OlJlcXVlc3RWYWxpZGF0b3JcIixcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5OjpSZXNvdXJjZVwiLFxuICAgICAgXCJBV1M6OkFwaUdhdGV3YXlWMjo6QXBpTWFwcGluZ1wiLFxuICAgICAgXCJBV1M6OkFwaUdhdGV3YXlWMjo6QXV0aG9yaXplclwiLFxuICAgICAgXCJBV1M6OkFwaUdhdGV3YXlWMjo6RGVwbG95bWVudFwiLFxuICAgICAgXCJBV1M6OkFwaUdhdGV3YXlWMjo6SW50ZWdyYXRpb25cIixcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5VjI6OkludGVncmF0aW9uUmVzcG9uc2VcIixcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5VjI6Ok1vZGVsXCIsXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheVYyOjpSb3V0ZVwiLFxuICAgICAgXCJBV1M6OkFwaUdhdGV3YXlWMjo6Um91dGVSZXNwb25zZVwiLFxuXG4gICAgICAvLyBBcHBTeW5jXG4gICAgICBcIkFXUzo6QXBwU3luYzo6RGF0YVNvdXJjZVwiLFxuICAgICAgXCJBV1M6OkFwcFN5bmM6OkZ1bmN0aW9uQ29uZmlndXJhdGlvblwiLFxuICAgICAgXCJBV1M6OkFwcFN5bmM6OlJlc29sdmVyXCIsXG5cbiAgICAgIC8vIEF0aGVuYVxuICAgICAgXCJBV1M6OkF0aGVuYTo6UHJlcGFyZWRTdGF0ZW1lbnRcIixcblxuICAgICAgLy8gQ2xvdWRGb3JtYXRpb25cbiAgICAgIFwiQVdTOjpDbG91ZEZvcm1hdGlvbjo6Q3VzdG9tUmVzb3VyY2VcIixcbiAgICAgIFwiQVdTOjpDbG91ZEZvcm1hdGlvbjo6TWFjcm9cIixcbiAgICAgIFwiQVdTOjpDbG91ZEZvcm1hdGlvbjo6TW9kdWxlRGVmYXVsdFZlcnNpb25cIixcbiAgICAgIFwiQVdTOjpDbG91ZEZvcm1hdGlvbjo6TW9kdWxlVmVyc2lvblwiLFxuICAgICAgXCJBV1M6OkNsb3VkRm9ybWF0aW9uOjpQdWJsaWNUeXBlVmVyc2lvblwiLFxuICAgICAgXCJBV1M6OkNsb3VkRm9ybWF0aW9uOjpQdWJsaXNoZXJcIixcbiAgICAgIFwiQVdTOjpDbG91ZEZvcm1hdGlvbjo6UmVzb3VyY2VEZWZhdWx0VmVyc2lvblwiLFxuICAgICAgXCJBV1M6OkNsb3VkRm9ybWF0aW9uOjpSZXNvdXJjZVZlcnNpb25cIixcbiAgICAgIFwiQVdTOjpDbG91ZEZvcm1hdGlvbjo6VHlwZUFjdGl2YXRpb25cIixcbiAgICAgIFwiQVdTOjpDbG91ZEZvcm1hdGlvbjo6V2FpdENvbmRpdGlvblwiLFxuICAgICAgXCJBV1M6OkNsb3VkRm9ybWF0aW9uOjpXYWl0Q29uZGl0aW9uSGFuZGxlXCIsXG5cbiAgICAgIC8vIENsb3VkV2F0Y2hcbiAgICAgIFwiQVdTOjpDbG91ZFdhdGNoOjpBbGFybVwiLFxuICAgICAgXCJBV1M6OkNsb3VkV2F0Y2g6OkFub21hbHlEZXRlY3RvclwiLFxuICAgICAgXCJBV1M6OkNsb3VkV2F0Y2g6OkNvbXBvc2l0ZUFsYXJtXCIsXG4gICAgICBcIkFXUzo6Q2xvdWRXYXRjaDo6RGFzaGJvYXJkXCIsXG4gICAgICBcIkFXUzo6Q2xvdWRXYXRjaDo6SW5zaWdodFJ1bGVcIixcbiAgICAgIFwiQVdTOjpDbG91ZFdhdGNoOjpNZXRyaWNTdHJlYW1cIixcblxuICAgICAgLy8gQ29kZUJ1aWxkXG4gICAgICBcIkFXUzo6Q29kZUJ1aWxkOjpSZXBvcnRHcm91cFwiLFxuICAgICAgXCJBV1M6OkNvZGVCdWlsZDo6U291cmNlQ3JlZGVudGlhbFwiLFxuXG4gICAgICAvLyBDb2RlRGVwbG95XG4gICAgICBcIkFXUzo6Q29kZURlcGxveTo6RGVwbG95bWVudENvbmZpZ1wiLFxuXG4gICAgICAvLyBDb2RlUGlwZWxpbmVcbiAgICAgIFwiQVdTOjpDb2RlUGlwZWxpbmU6OkN1c3RvbUFjdGlvblR5cGVcIixcbiAgICAgIFwiQVdTOjpDb2RlUGlwZWxpbmU6OldlYmhvb2tcIixcblxuICAgICAgLy8gQ29nbml0b1xuICAgICAgXCJBV1M6OkNvZ25pdG86OklkZW50aXR5UG9vbFJvbGVBdHRhY2htZW50XCIsXG4gICAgICBcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xDbGllbnRcIixcbiAgICAgIFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbERvbWFpblwiLFxuICAgICAgXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sR3JvdXBcIixcbiAgICAgIFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbElkZW50aXR5UHJvdmlkZXJcIixcbiAgICAgIFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbFJlc291cmNlU2VydmVyXCIsXG4gICAgICBcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xSaXNrQ29uZmlndXJhdGlvbkF0dGFjaG1lbnRcIixcbiAgICAgIFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbFVJQ3VzdG9taXphdGlvbkF0dGFjaG1lbnRcIixcbiAgICAgIFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbFVzZXJcIixcbiAgICAgIFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbFVzZXJUb0dyb3VwQXR0YWNobWVudFwiLFxuXG4gICAgICAvLyBDb25maWdcbiAgICAgIFwiQVdTOjpDb25maWc6OkFnZ3JlZ2F0aW9uQXV0aG9yaXphdGlvblwiLFxuICAgICAgXCJBV1M6OkNvbmZpZzo6Q29uZmlndXJhdGlvbkFnZ3JlZ2F0b3JcIixcbiAgICAgIFwiQVdTOjpDb25maWc6OkNvbmZvcm1hbmNlUGFja1wiLFxuICAgICAgXCJBV1M6OkNvbmZpZzo6T3JnYW5pemF0aW9uQ29uZm9ybWFuY2VQYWNrXCIsXG4gICAgICBcIkFXUzo6Q29uZmlnOjpSZW1lZGlhdGlvbkNvbmZpZ3VyYXRpb25cIixcbiAgICAgIFwiQVdTOjpDb25maWc6OlN0b3JlZFF1ZXJ5XCIsXG5cbiAgICAgIC8vIER5bmFtb0RCXG4gICAgICBcIkFXUzo6RHluYW1vREI6Okdsb2JhbFRhYmxlXCIsXG5cbiAgICAgIC8vIEVDMlxuICAgICAgXCJBV1M6OkVDMjo6Q2FwYWNpdHlSZXNlcnZhdGlvbkZsZWV0XCIsXG4gICAgICBcIkFXUzo6RUMyOjpDYXJyaWVyR2F0ZXdheVwiLFxuICAgICAgXCJBV1M6OkVDMjo6REhDUE9wdGlvbnNcIixcbiAgICAgIFwiQVdTOjpFQzI6OkVDMkZsZWV0XCIsXG4gICAgICBcIkFXUzo6RUMyOjpFZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5XCIsXG4gICAgICBcIkFXUzo6RUMyOjpFSVBBc3NvY2lhdGlvblwiLFxuICAgICAgXCJBV1M6OkVDMjo6RW5jbGF2ZUNlcnRpZmljYXRlSWFtUm9sZUFzc29jaWF0aW9uXCIsXG4gICAgICBcIkFXUzo6RUMyOjpGbG93TG9nXCIsXG4gICAgICBcIkFXUzo6RUMyOjpHYXRld2F5Um91dGVUYWJsZUFzc29jaWF0aW9uXCIsXG4gICAgICBcIkFXUzo6RUMyOjpJbnN0YW5jZUNvbm5lY3RFbmRwb2ludFwiLFxuICAgICAgXCJBV1M6OkVDMjo6S2V5UGFpclwiLFxuICAgICAgXCJBV1M6OkVDMjo6TGF1bmNoVGVtcGxhdGVcIixcbiAgICAgIFwiQVdTOjpFQzI6Ok5ldHdvcmtJbnNpZ2h0c0FjY2Vzc1Njb3BlXCIsXG4gICAgICBcIkFXUzo6RUMyOjpOZXR3b3JrSW5zaWdodHNBY2Nlc3NTY29wZUFuYWx5c2lzXCIsXG4gICAgICBcIkFXUzo6RUMyOjpOZXR3b3JrSW5zaWdodHNBbmFseXNpc1wiLFxuICAgICAgXCJBV1M6OkVDMjo6TmV0d29ya0luc2lnaHRzUGF0aFwiLFxuICAgICAgXCJBV1M6OkVDMjo6TmV0d29ya0ludGVyZmFjZUF0dGFjaG1lbnRcIixcbiAgICAgIFwiQVdTOjpFQzI6Ok5ldHdvcmtJbnRlcmZhY2VQZXJtaXNzaW9uXCIsXG4gICAgICBcIkFXUzo6RUMyOjpQbGFjZW1lbnRHcm91cFwiLFxuICAgICAgXCJBV1M6OkVDMjo6Um91dGVcIixcbiAgICAgIFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBFZ3Jlc3NcIixcbiAgICAgIFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBJbmdyZXNzXCIsXG4gICAgICBcIkFXUzo6RUMyOjpTdWJuZXRDaWRyQmxvY2tcIixcbiAgICAgIFwiQVdTOjpFQzI6OlN1Ym5ldE5ldHdvcmtBY2xBc3NvY2lhdGlvblwiLFxuICAgICAgXCJBV1M6OkVDMjo6U3VibmV0Um91dGVUYWJsZUFzc29jaWF0aW9uXCIsXG4gICAgICBcIkFXUzo6RUMyOjpUcmFuc2l0R2F0ZXdheUF0dGFjaG1lbnRcIixcbiAgICAgIFwiQVdTOjpFQzI6OlRyYW5zaXRHYXRld2F5Q29ubmVjdFwiLFxuICAgICAgXCJBV1M6OkVDMjo6VHJhbnNpdEdhdGV3YXlNdWx0aWNhc3REb21haW5cIixcbiAgICAgIFwiQVdTOjpFQzI6OlRyYW5zaXRHYXRld2F5TXVsdGljYXN0RG9tYWluQXNzb2NpYXRpb25cIixcbiAgICAgIFwiQVdTOjpFQzI6OlRyYW5zaXRHYXRld2F5TXVsdGljYXN0R3JvdXBNZW1iZXJcIixcbiAgICAgIFwiQVdTOjpFQzI6OlRyYW5zaXRHYXRld2F5TXVsdGljYXN0R3JvdXBTb3VyY2VcIixcbiAgICAgIFwiQVdTOjpFQzI6OlRyYW5zaXRHYXRld2F5UGVlcmluZ0F0dGFjaG1lbnRcIixcbiAgICAgIFwiQVdTOjpFQzI6OlRyYW5zaXRHYXRld2F5Um91dGVcIixcbiAgICAgIFwiQVdTOjpFQzI6OlRyYW5zaXRHYXRld2F5Um91dGVUYWJsZVwiLFxuICAgICAgXCJBV1M6OkVDMjo6VHJhbnNpdEdhdGV3YXlSb3V0ZVRhYmxlQXNzb2NpYXRpb25cIixcbiAgICAgIFwiQVdTOjpFQzI6OlRyYW5zaXRHYXRld2F5Um91dGVUYWJsZVByb3BhZ2F0aW9uXCIsXG4gICAgICBcIkFXUzo6RUMyOjpUcmFuc2l0R2F0ZXdheVZwY0F0dGFjaG1lbnRcIixcbiAgICAgIFwiQVdTOjpFQzI6OlZlcmlmaWVkQWNjZXNzRW5kcG9pbnRcIixcbiAgICAgIFwiQVdTOjpFQzI6OlZlcmlmaWVkQWNjZXNzR3JvdXBcIixcbiAgICAgIFwiQVdTOjpFQzI6OlZlcmlmaWVkQWNjZXNzSW5zdGFuY2VcIixcbiAgICAgIFwiQVdTOjpFQzI6OlZlcmlmaWVkQWNjZXNzVHJ1c3RQcm92aWRlclwiLFxuICAgICAgXCJBV1M6OkVDMjo6Vm9sdW1lQXR0YWNobWVudFwiLFxuICAgICAgXCJBV1M6OkVDMjo6VlBDQ2lkckJsb2NrXCIsXG4gICAgICBcIkFXUzo6RUMyOjpWUENESENQT3B0aW9uc0Fzc29jaWF0aW9uXCIsXG4gICAgICBcIkFXUzo6RUMyOjpWUENFbmRwb2ludENvbm5lY3Rpb25Ob3RpZmljYXRpb25cIixcbiAgICAgIFwiQVdTOjpFQzI6OlZQQ0VuZHBvaW50U2VydmljZVwiLFxuICAgICAgXCJBV1M6OkVDMjo6VlBDRW5kcG9pbnRTZXJ2aWNlUGVybWlzc2lvbnNcIixcbiAgICAgIFwiQVdTOjpFQzI6OlZQQ0dhdGV3YXlBdHRhY2htZW50XCIsXG4gICAgICBcIkFXUzo6RUMyOjpWUE5Db25uZWN0aW9uUm91dGVcIixcbiAgICAgIFwiQVdTOjpFQzI6OlZQTkdhdGV3YXlSb3V0ZVByb3BhZ2F0aW9uXCIsXG5cbiAgICAgIC8vIEVDUlxuICAgICAgXCJBV1M6OkVDUjo6UHVibGljUmVwb3NpdG9yeVwiLFxuICAgICAgXCJBV1M6OkVDUjo6UHVsbFRocm91Z2hDYWNoZVJ1bGVcIixcbiAgICAgIFwiQVdTOjpFQ1I6OlJlZ2lzdHJ5UG9saWN5XCIsXG4gICAgICBcIkFXUzo6RUNSOjpSZXBsaWNhdGlvbkNvbmZpZ3VyYXRpb25cIixcblxuICAgICAgLy8gRUNTXG4gICAgICBcIkFXUzo6RUNTOjpBY2NvdW50U2V0dGluZ1wiLFxuICAgICAgXCJBV1M6OkVDUzo6Q2FwYWNpdHlQcm92aWRlclwiLFxuICAgICAgXCJBV1M6OkVDUzo6Q2x1c3RlckNhcGFjaXR5UHJvdmlkZXJBc3NvY2lhdGlvbnNcIixcbiAgICAgIFwiQVdTOjpFQ1M6OlByaW1hcnlUYXNrU2V0XCIsXG4gICAgICBcIkFXUzo6RUNTOjpUYXNrU2V0XCIsXG5cbiAgICAgIC8vIEVGU1xuICAgICAgXCJBV1M6OkVGUzo6QWNjZXNzUG9pbnRcIixcbiAgICAgIFwiQVdTOjpFRlM6Ok1vdW50VGFyZ2V0XCIsXG5cbiAgICAgIC8vIEVLU1xuICAgICAgXCJBV1M6OkVLUzo6QWRkb25cIixcbiAgICAgIFwiQVdTOjpFS1M6OkZhcmdhdGVQcm9maWxlXCIsXG4gICAgICBcIkFXUzo6RUtTOjpJZGVudGl0eVByb3ZpZGVyQ29uZmlnXCIsXG5cbiAgICAgIC8vIEVsYXN0aUNhY2hlXG4gICAgICBcIkFXUzo6RWxhc3RpQ2FjaGU6OlBhcmFtZXRlckdyb3VwXCIsXG4gICAgICBcIkFXUzo6RWxhc3RpQ2FjaGU6OlNlY3VyaXR5R3JvdXBcIixcbiAgICAgIFwiQVdTOjpFbGFzdGlDYWNoZTo6U2VjdXJpdHlHcm91cEluZ3Jlc3NcIixcbiAgICAgIFwiQVdTOjpFbGFzdGlDYWNoZTo6U3VibmV0R3JvdXBcIixcblxuICAgICAgLy8gRWxhc3RpY0JlYW5zdGFsa1xuICAgICAgXCJBV1M6OkVsYXN0aWNCZWFuc3RhbGs6OkFwcGxpY2F0aW9uVmVyc2lvblwiLFxuICAgICAgXCJBV1M6OkVsYXN0aWNCZWFuc3RhbGs6OkNvbmZpZ3VyYXRpb25UZW1wbGF0ZVwiLFxuXG4gICAgICAvLyBFbGFzdGljTG9hZEJhbGFuY2luZ1YyXG4gICAgICBcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6TGlzdGVuZXJcIixcbiAgICAgIFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpMaXN0ZW5lckNlcnRpZmljYXRlXCIsXG4gICAgICBcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6TGlzdGVuZXJSdWxlXCIsXG4gICAgICBcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6VGFyZ2V0R3JvdXBBdHRhY2htZW50XCIsXG5cbiAgICAgIC8vIEV2ZW50QnJpZGdlIChFdmVudHMpXG4gICAgICBcIkFXUzo6RXZlbnRzOjpBcGlEZXN0aW5hdGlvblwiLFxuICAgICAgXCJBV1M6OkV2ZW50czo6QXJjaGl2ZVwiLFxuICAgICAgXCJBV1M6OkV2ZW50czo6Q29ubmVjdGlvblwiLFxuICAgICAgXCJBV1M6OkV2ZW50czo6RW5kcG9pbnRcIixcbiAgICAgIFwiQVdTOjpFdmVudHM6OkV2ZW50QnVzUG9saWN5XCIsXG4gICAgICBcIkFXUzo6RXZlbnRzOjpSdWxlXCIsXG5cbiAgICAgIC8vIEZTeFxuICAgICAgXCJBV1M6OkZTeDo6RGF0YVJlcG9zaXRvcnlBc3NvY2lhdGlvblwiLFxuICAgICAgXCJBV1M6OkZTeDo6U25hcHNob3RcIixcbiAgICAgIFwiQVdTOjpGU3g6OlN0b3JhZ2VWaXJ0dWFsTWFjaGluZVwiLFxuICAgICAgXCJBV1M6OkZTeDo6Vm9sdW1lXCIsXG5cbiAgICAgIC8vIEdhbWVMaWZ0XG4gICAgICBcIkFXUzo6R2FtZUxpZnQ6OkdhbWVTZXJ2ZXJHcm91cFwiLFxuICAgICAgXCJBV1M6OkdhbWVMaWZ0OjpMb2NhdGlvblwiLFxuXG4gICAgICAvLyBHbHVlXG4gICAgICBcIkFXUzo6R2x1ZTo6Q29ubmVjdGlvblwiLFxuICAgICAgXCJBV1M6OkdsdWU6OkRhdGFiYXNlXCIsXG4gICAgICBcIkFXUzo6R2x1ZTo6RGF0YUNhdGFsb2dFbmNyeXB0aW9uU2V0dGluZ3NcIixcbiAgICAgIFwiQVdTOjpHbHVlOjpQYXJ0aXRpb25cIixcbiAgICAgIFwiQVdTOjpHbHVlOjpTY2hlbWFWZXJzaW9uXCIsXG4gICAgICBcIkFXUzo6R2x1ZTo6U2NoZW1hVmVyc2lvbk1ldGFkYXRhXCIsXG4gICAgICBcIkFXUzo6R2x1ZTo6U2VjdXJpdHlDb25maWd1cmF0aW9uXCIsXG4gICAgICBcIkFXUzo6R2x1ZTo6VGFibGVcIixcbiAgICAgIFwiQVdTOjpHbHVlOjpVc2VyRGVmaW5lZEZ1bmN0aW9uXCIsXG5cbiAgICAgIC8vIEd1YXJkRHV0eVxuICAgICAgXCJBV1M6Okd1YXJkRHV0eTo6RGV0ZWN0b3JcIixcbiAgICAgIFwiQVdTOjpHdWFyZER1dHk6OkZpbHRlclwiLFxuICAgICAgXCJBV1M6Okd1YXJkRHV0eTo6SVBTZXRcIixcbiAgICAgIFwiQVdTOjpHdWFyZER1dHk6Ok1hc3RlclwiLFxuICAgICAgXCJBV1M6Okd1YXJkRHV0eTo6TWVtYmVyXCIsXG4gICAgICBcIkFXUzo6R3VhcmREdXR5OjpUaHJlYXRJbnRlbFNldFwiLFxuXG4gICAgICAvLyBJQU1cbiAgICAgIFwiQVdTOjpJQU06OkFjY2Vzc0tleVwiLFxuICAgICAgXCJBV1M6OklBTTo6R3JvdXBcIixcbiAgICAgIFwiQVdTOjpJQU06Okdyb3VwUG9saWN5XCIsXG4gICAgICBcIkFXUzo6SUFNOjpJbnN0YW5jZVByb2ZpbGVcIixcbiAgICAgIFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpJQU06Ok9JRENQcm92aWRlclwiLFxuICAgICAgXCJBV1M6OklBTTo6UG9saWN5XCIsXG4gICAgICBcIkFXUzo6SUFNOjpSb2xlXCIsXG4gICAgICBcIkFXUzo6SUFNOjpSb2xlUG9saWN5XCIsXG4gICAgICBcIkFXUzo6SUFNOjpTQU1MUHJvdmlkZXJcIixcbiAgICAgIFwiQVdTOjpJQU06OlNlcnZlckNlcnRpZmljYXRlXCIsXG4gICAgICBcIkFXUzo6SUFNOjpTZXJ2aWNlTGlua2VkUm9sZVwiLFxuICAgICAgXCJBV1M6OklBTTo6VXNlclwiLFxuICAgICAgXCJBV1M6OklBTTo6VXNlclBvbGljeVwiLFxuICAgICAgXCJBV1M6OklBTTo6VXNlclRvR3JvdXBBZGRpdGlvblwiLFxuICAgICAgXCJBV1M6OklBTTo6VmlydHVhbE1GQURldmljZVwiLFxuXG4gICAgICAvLyBJb1RcbiAgICAgIFwiQVdTOjpJb1Q6OkFjY291bnRBdWRpdENvbmZpZ3VyYXRpb25cIixcbiAgICAgIFwiQVdTOjpJb1Q6OkF1dGhvcml6ZXJcIixcbiAgICAgIFwiQVdTOjpJb1Q6OkNlcnRpZmljYXRlXCIsXG4gICAgICBcIkFXUzo6SW9UOjpDdXN0b21NZXRyaWNcIixcbiAgICAgIFwiQVdTOjpJb1Q6OkRpbWVuc2lvblwiLFxuICAgICAgXCJBV1M6OklvVDo6RG9tYWluQ29uZmlndXJhdGlvblwiLFxuICAgICAgXCJBV1M6OklvVDo6RmxlZXRNZXRyaWNcIixcbiAgICAgIFwiQVdTOjpJb1Q6OkpvYlRlbXBsYXRlXCIsXG4gICAgICBcIkFXUzo6SW9UOjpMb2dnaW5nXCIsXG4gICAgICBcIkFXUzo6SW9UOjpNaXRpZ2F0aW9uQWN0aW9uXCIsXG4gICAgICBcIkFXUzo6SW9UOjpQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpJb1Q6OlBvbGljeVByaW5jaXBhbEF0dGFjaG1lbnRcIixcbiAgICAgIFwiQVdTOjpJb1Q6OlByb3Zpc2lvbmluZ1RlbXBsYXRlXCIsXG4gICAgICBcIkFXUzo6SW9UOjpSZXNvdXJjZVNwZWNpZmljTG9nZ2luZ1wiLFxuICAgICAgXCJBV1M6OklvVDo6Um9sZUFsaWFzXCIsXG4gICAgICBcIkFXUzo6SW9UOjpTY2hlZHVsZWRBdWRpdFwiLFxuICAgICAgXCJBV1M6OklvVDo6U2VjdXJpdHlQcm9maWxlXCIsXG4gICAgICBcIkFXUzo6SW9UOjpUaGluZ1wiLFxuICAgICAgXCJBV1M6OklvVDo6VGhpbmdHcm91cFwiLFxuICAgICAgXCJBV1M6OklvVDo6VGhpbmdQcmluY2lwYWxBdHRhY2htZW50XCIsXG4gICAgICBcIkFXUzo6SW9UOjpUaGluZ1R5cGVcIixcbiAgICAgIFwiQVdTOjpJb1Q6OlRvcGljUnVsZVwiLFxuICAgICAgXCJBV1M6OklvVDo6VG9waWNSdWxlRGVzdGluYXRpb25cIixcblxuICAgICAgLy8gS01TXG4gICAgICBcIkFXUzo6S01TOjpBbGlhc1wiLFxuICAgICAgXCJBV1M6OktNUzo6R3JhbnRcIixcbiAgICAgIFwiQVdTOjpLTVM6OlJlcGxpY2FLZXlcIixcblxuICAgICAgLy8gTGFtYmRhXG4gICAgICBcIkFXUzo6TGFtYmRhOjpDb2RlU2lnbmluZ0NvbmZpZ1wiLFxuICAgICAgXCJBV1M6OkxhbWJkYTo6RXZlbnRJbnZva2VDb25maWdcIixcbiAgICAgIFwiQVdTOjpMYW1iZGE6OkV2ZW50U291cmNlTWFwcGluZ1wiLFxuICAgICAgXCJBV1M6OkxhbWJkYTo6TGF5ZXJWZXJzaW9uXCIsXG4gICAgICBcIkFXUzo6TGFtYmRhOjpMYXllclZlcnNpb25QZXJtaXNzaW9uXCIsXG4gICAgICBcIkFXUzo6TGFtYmRhOjpQZXJtaXNzaW9uXCIsXG4gICAgICBcIkFXUzo6TGFtYmRhOjpQcm92aXNpb25lZENvbmN1cnJlbmN5Q29uZmlnXCIsXG4gICAgICBcIkFXUzo6TGFtYmRhOjpVcmxcIixcbiAgICAgIFwiQVdTOjpMYW1iZGE6OlZlcnNpb25cIixcblxuICAgICAgLy8gTG9nc1xuICAgICAgXCJBV1M6OkxvZ3M6OkFjY291bnRQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpMb2dzOjpEZXN0aW5hdGlvblwiLFxuICAgICAgXCJBV1M6OkxvZ3M6OkxvZ0dyb3VwXCIsXG4gICAgICBcIkFXUzo6TG9nczo6TG9nU3RyZWFtXCIsXG4gICAgICBcIkFXUzo6TG9nczo6TWV0cmljRmlsdGVyXCIsXG4gICAgICBcIkFXUzo6TG9nczo6UXVlcnlEZWZpbml0aW9uXCIsXG4gICAgICBcIkFXUzo6TG9nczo6UmVzb3VyY2VQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpMb2dzOjpTdWJzY3JpcHRpb25GaWx0ZXJcIixcblxuICAgICAgLy8gTWFjaWVcbiAgICAgIFwiQVdTOjpNYWNpZTo6QWxsb3dMaXN0XCIsXG4gICAgICBcIkFXUzo6TWFjaWU6OkN1c3RvbURhdGFJZGVudGlmaWVyXCIsXG4gICAgICBcIkFXUzo6TWFjaWU6OkZpbmRpbmdzRmlsdGVyXCIsXG4gICAgICBcIkFXUzo6TWFjaWU6OlNlc3Npb25cIixcblxuICAgICAgLy8gTmVwdHVuZVxuICAgICAgXCJBV1M6Ok5lcHR1bmU6OkRCQ2x1c3RlclBhcmFtZXRlckdyb3VwXCIsXG4gICAgICBcIkFXUzo6TmVwdHVuZTo6REJQYXJhbWV0ZXJHcm91cFwiLFxuICAgICAgXCJBV1M6Ok5lcHR1bmU6OkRCU3VibmV0R3JvdXBcIixcblxuICAgICAgLy8gT3JnYW5pemF0aW9uc1xuICAgICAgXCJBV1M6Ok9yZ2FuaXphdGlvbnM6OkFjY291bnRcIixcbiAgICAgIFwiQVdTOjpPcmdhbml6YXRpb25zOjpPcmdhbml6YXRpb25cIixcbiAgICAgIFwiQVdTOjpPcmdhbml6YXRpb25zOjpPcmdhbml6YXRpb25hbFVuaXRcIixcbiAgICAgIFwiQVdTOjpPcmdhbml6YXRpb25zOjpQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpPcmdhbml6YXRpb25zOjpSZXNvdXJjZVBvbGljeVwiLFxuXG4gICAgICAvLyBSRFNcbiAgICAgIFwiQVdTOjpSRFM6OkRCQ2x1c3RlclBhcmFtZXRlckdyb3VwXCIsXG4gICAgICBcIkFXUzo6UkRTOjpEQlBhcmFtZXRlckdyb3VwXCIsXG4gICAgICBcIkFXUzo6UkRTOjpEQlNlY3VyaXR5R3JvdXBcIixcbiAgICAgIFwiQVdTOjpSRFM6OkRCU2VjdXJpdHlHcm91cEluZ3Jlc3NcIixcbiAgICAgIFwiQVdTOjpSRFM6OkRCU3VibmV0R3JvdXBcIixcbiAgICAgIFwiQVdTOjpSRFM6OkV2ZW50U3Vic2NyaXB0aW9uXCIsXG4gICAgICBcIkFXUzo6UkRTOjpHbG9iYWxDbHVzdGVyXCIsXG4gICAgICBcIkFXUzo6UkRTOjpPcHRpb25Hcm91cFwiLFxuXG4gICAgICAvLyBSZWRzaGlmdFxuICAgICAgXCJBV1M6OlJlZHNoaWZ0OjpDbHVzdGVyUGFyYW1ldGVyR3JvdXBcIixcbiAgICAgIFwiQVdTOjpSZWRzaGlmdDo6Q2x1c3RlclNlY3VyaXR5R3JvdXBcIixcbiAgICAgIFwiQVdTOjpSZWRzaGlmdDo6Q2x1c3RlclNlY3VyaXR5R3JvdXBJbmdyZXNzXCIsXG4gICAgICBcIkFXUzo6UmVkc2hpZnQ6OkNsdXN0ZXJTdWJuZXRHcm91cFwiLFxuICAgICAgXCJBV1M6OlJlZHNoaWZ0OjpFbmRwb2ludEFjY2Vzc1wiLFxuICAgICAgXCJBV1M6OlJlZHNoaWZ0OjpFbmRwb2ludEF1dGhvcml6YXRpb25cIixcbiAgICAgIFwiQVdTOjpSZWRzaGlmdDo6RXZlbnRTdWJzY3JpcHRpb25cIixcbiAgICAgIFwiQVdTOjpSZWRzaGlmdDo6U2NoZWR1bGVkQWN0aW9uXCIsXG5cbiAgICAgIC8vIFJvdXRlNTNcbiAgICAgIFwiQVdTOjpSb3V0ZTUzOjpETlNTRUNcIixcbiAgICAgIFwiQVdTOjpSb3V0ZTUzOjpIZWFsdGhDaGVja1wiLFxuICAgICAgXCJBV1M6OlJvdXRlNTM6Okhvc3RlZFpvbmVcIixcbiAgICAgIFwiQVdTOjpSb3V0ZTUzOjpLZXlTaWduaW5nS2V5XCIsXG4gICAgICBcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XCIsXG4gICAgICBcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0R3JvdXBcIixcblxuICAgICAgLy8gUm91dGU1M1Jlc29sdmVyXG4gICAgICBcIkFXUzo6Um91dGU1M1Jlc29sdmVyOjpGaXJld2FsbERvbWFpbkxpc3RcIixcbiAgICAgIFwiQVdTOjpSb3V0ZTUzUmVzb2x2ZXI6OkZpcmV3YWxsUnVsZUdyb3VwXCIsXG4gICAgICBcIkFXUzo6Um91dGU1M1Jlc29sdmVyOjpGaXJld2FsbFJ1bGVHcm91cEFzc29jaWF0aW9uXCIsXG4gICAgICBcIkFXUzo6Um91dGU1M1Jlc29sdmVyOjpSZXNvbHZlckNvbmZpZ1wiLFxuICAgICAgXCJBV1M6OlJvdXRlNTNSZXNvbHZlcjo6UmVzb2x2ZXJETlNTRUNDb25maWdcIixcbiAgICAgIFwiQVdTOjpSb3V0ZTUzUmVzb2x2ZXI6OlJlc29sdmVyUXVlcnlMb2dnaW5nQ29uZmlnXCIsXG4gICAgICBcIkFXUzo6Um91dGU1M1Jlc29sdmVyOjpSZXNvbHZlclF1ZXJ5TG9nZ2luZ0NvbmZpZ0Fzc29jaWF0aW9uXCIsXG4gICAgICBcIkFXUzo6Um91dGU1M1Jlc29sdmVyOjpSZXNvbHZlclJ1bGVcIixcbiAgICAgIFwiQVdTOjpSb3V0ZTUzUmVzb2x2ZXI6OlJlc29sdmVyUnVsZUFzc29jaWF0aW9uXCIsXG5cbiAgICAgIC8vIFMzXG4gICAgICBcIkFXUzo6UzM6OkFjY2Vzc1BvaW50XCIsXG4gICAgICBcIkFXUzo6UzM6OkJ1Y2tldFBvbGljeVwiLFxuICAgICAgXCJBV1M6OlMzOjpNdWx0aVJlZ2lvbkFjY2Vzc1BvaW50XCIsXG4gICAgICBcIkFXUzo6UzM6Ok11bHRpUmVnaW9uQWNjZXNzUG9pbnRQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpTMzo6U3RvcmFnZUxlbnNcIixcblxuICAgICAgLy8gU0RCXG4gICAgICBcIkFXUzo6U0RCOjpEb21haW5cIixcblxuICAgICAgLy8gU2VjcmV0c01hbmFnZXJcbiAgICAgIFwiQVdTOjpTZWNyZXRzTWFuYWdlcjo6UmVzb3VyY2VQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpTZWNyZXRzTWFuYWdlcjo6Um90YXRpb25TY2hlZHVsZVwiLFxuICAgICAgXCJBV1M6OlNlY3JldHNNYW5hZ2VyOjpTZWNyZXRUYXJnZXRBdHRhY2htZW50XCIsXG5cbiAgICAgIC8vIFNlY3VyaXR5SHViXG4gICAgICBcIkFXUzo6U2VjdXJpdHlIdWI6Okh1YlwiLFxuXG4gICAgICAvLyBTZXJ2aWNlQ2F0YWxvZ1xuICAgICAgXCJBV1M6OlNlcnZpY2VDYXRhbG9nOjpBY2NlcHRlZFBvcnRmb2xpb1NoYXJlXCIsXG4gICAgICBcIkFXUzo6U2VydmljZUNhdGFsb2c6OkxhdW5jaE5vdGlmaWNhdGlvbkNvbnN0cmFpbnRcIixcbiAgICAgIFwiQVdTOjpTZXJ2aWNlQ2F0YWxvZzo6TGF1bmNoUm9sZUNvbnN0cmFpbnRcIixcbiAgICAgIFwiQVdTOjpTZXJ2aWNlQ2F0YWxvZzo6TGF1bmNoVGVtcGxhdGVDb25zdHJhaW50XCIsXG4gICAgICBcIkFXUzo6U2VydmljZUNhdGFsb2c6OlBvcnRmb2xpb1ByaW5jaXBhbEFzc29jaWF0aW9uXCIsXG4gICAgICBcIkFXUzo6U2VydmljZUNhdGFsb2c6OlBvcnRmb2xpb1Byb2R1Y3RBc3NvY2lhdGlvblwiLFxuICAgICAgXCJBV1M6OlNlcnZpY2VDYXRhbG9nOjpQb3J0Zm9saW9TaGFyZVwiLFxuICAgICAgXCJBV1M6OlNlcnZpY2VDYXRhbG9nOjpSZXNvdXJjZVVwZGF0ZUNvbnN0cmFpbnRcIixcbiAgICAgIFwiQVdTOjpTZXJ2aWNlQ2F0YWxvZzo6U2VydmljZUFjdGlvblwiLFxuICAgICAgXCJBV1M6OlNlcnZpY2VDYXRhbG9nOjpTZXJ2aWNlQWN0aW9uQXNzb2NpYXRpb25cIixcbiAgICAgIFwiQVdTOjpTZXJ2aWNlQ2F0YWxvZzo6U3RhY2tTZXRDb25zdHJhaW50XCIsXG4gICAgICBcIkFXUzo6U2VydmljZUNhdGFsb2c6OlRhZ09wdGlvblwiLFxuICAgICAgXCJBV1M6OlNlcnZpY2VDYXRhbG9nOjpUYWdPcHRpb25Bc3NvY2lhdGlvblwiLFxuXG4gICAgICAvLyBTRVNcbiAgICAgIFwiQVdTOjpTRVM6OkNvbmZpZ3VyYXRpb25TZXRcIixcbiAgICAgIFwiQVdTOjpTRVM6OkNvbmZpZ3VyYXRpb25TZXRFdmVudERlc3RpbmF0aW9uXCIsXG4gICAgICBcIkFXUzo6U0VTOjpDb250YWN0TGlzdFwiLFxuICAgICAgXCJBV1M6OlNFUzo6RGVkaWNhdGVkSXBQb29sXCIsXG4gICAgICBcIkFXUzo6U0VTOjpFbWFpbElkZW50aXR5XCIsXG4gICAgICBcIkFXUzo6U0VTOjpSZWNlaXB0RmlsdGVyXCIsXG4gICAgICBcIkFXUzo6U0VTOjpSZWNlaXB0UnVsZVwiLFxuICAgICAgXCJBV1M6OlNFUzo6UmVjZWlwdFJ1bGVTZXRcIixcbiAgICAgIFwiQVdTOjpTRVM6OlRlbXBsYXRlXCIsXG4gICAgICBcIkFXUzo6U0VTOjpWZG1BdHRyaWJ1dGVzXCIsXG5cbiAgICAgIC8vIFNOU1xuICAgICAgXCJBV1M6OlNOUzo6U3Vic2NyaXB0aW9uXCIsXG4gICAgICBcIkFXUzo6U05TOjpUb3BpY1BvbGljeVwiLFxuXG4gICAgICAvLyBTUVNcbiAgICAgIFwiQVdTOjpTUVM6OlF1ZXVlUG9saWN5XCIsXG5cbiAgICAgIC8vIFNTTVxuICAgICAgXCJBV1M6OlNTTTo6QXNzb2NpYXRpb25cIixcbiAgICAgIFwiQVdTOjpTU006OkRvY3VtZW50XCIsXG4gICAgICBcIkFXUzo6U1NNOjpNYWludGVuYW5jZVdpbmRvd1wiLFxuICAgICAgXCJBV1M6OlNTTTo6TWFpbnRlbmFuY2VXaW5kb3dUYXJnZXRcIixcbiAgICAgIFwiQVdTOjpTU006Ok1haW50ZW5hbmNlV2luZG93VGFza1wiLFxuICAgICAgXCJBV1M6OlNTTTo6UGFyYW1ldGVyXCIsXG4gICAgICBcIkFXUzo6U1NNOjpQYXRjaEJhc2VsaW5lXCIsXG4gICAgICBcIkFXUzo6U1NNOjpSZXNvdXJjZURhdGFTeW5jXCIsXG4gICAgICBcIkFXUzo6U1NNOjpSZXNvdXJjZVBvbGljeVwiLFxuXG4gICAgICAvLyBTU09cbiAgICAgIFwiQVdTOjpTU086OkFzc2lnbm1lbnRcIixcbiAgICAgIFwiQVdTOjpTU086Okluc3RhbmNlQWNjZXNzQ29udHJvbEF0dHJpYnV0ZUNvbmZpZ3VyYXRpb25cIixcbiAgICAgIFwiQVdTOjpTU086OlBlcm1pc3Npb25TZXRcIixcblxuICAgICAgLy8gU3RlcEZ1bmN0aW9uc1xuICAgICAgXCJBV1M6OlN0ZXBGdW5jdGlvbnM6OkFjdGl2aXR5XCIsXG5cbiAgICAgIC8vIFdBRi9XQUZ2MlxuICAgICAgXCJBV1M6OldBRjo6Qnl0ZU1hdGNoU2V0XCIsXG4gICAgICBcIkFXUzo6V0FGOjpJUFNldFwiLFxuICAgICAgXCJBV1M6OldBRjo6UnVsZVwiLFxuICAgICAgXCJBV1M6OldBRjo6U2l6ZUNvbnN0cmFpbnRTZXRcIixcbiAgICAgIFwiQVdTOjpXQUY6OlNxbEluamVjdGlvbk1hdGNoU2V0XCIsXG4gICAgICBcIkFXUzo6V0FGOjpXZWJBQ0xcIixcbiAgICAgIFwiQVdTOjpXQUY6Olhzc01hdGNoU2V0XCIsXG4gICAgICBcIkFXUzo6V0FGUmVnaW9uYWw6OkJ5dGVNYXRjaFNldFwiLFxuICAgICAgXCJBV1M6OldBRlJlZ2lvbmFsOjpHZW9NYXRjaFNldFwiLFxuICAgICAgXCJBV1M6OldBRlJlZ2lvbmFsOjpJUFNldFwiLFxuICAgICAgXCJBV1M6OldBRlJlZ2lvbmFsOjpSYXRlQmFzZWRSdWxlXCIsXG4gICAgICBcIkFXUzo6V0FGUmVnaW9uYWw6OlJlZ2V4UGF0dGVyblNldFwiLFxuICAgICAgXCJBV1M6OldBRlJlZ2lvbmFsOjpSdWxlXCIsXG4gICAgICBcIkFXUzo6V0FGUmVnaW9uYWw6OlNpemVDb25zdHJhaW50U2V0XCIsXG4gICAgICBcIkFXUzo6V0FGUmVnaW9uYWw6OlNxbEluamVjdGlvbk1hdGNoU2V0XCIsXG4gICAgICBcIkFXUzo6V0FGUmVnaW9uYWw6OldlYkFDTFwiLFxuICAgICAgXCJBV1M6OldBRlJlZ2lvbmFsOjpXZWJBQ0xBc3NvY2lhdGlvblwiLFxuICAgICAgXCJBV1M6OldBRlJlZ2lvbmFsOjpYc3NNYXRjaFNldFwiLFxuICAgICAgXCJBV1M6OldBRnYyOjpJUFNldFwiLFxuICAgICAgXCJBV1M6OldBRnYyOjpMb2dnaW5nQ29uZmlndXJhdGlvblwiLFxuICAgICAgXCJBV1M6OldBRnYyOjpSZWdleFBhdHRlcm5TZXRcIixcbiAgICAgIFwiQVdTOjpXQUZ2Mjo6UnVsZUdyb3VwXCIsXG4gICAgICBcIkFXUzo6V0FGdjI6OldlYkFDTFwiLFxuICAgICAgXCJBV1M6OldBRnYyOjpXZWJBQ0xBc3NvY2lhdGlvblwiLFxuXG4gICAgICAvLyBTZXJ2ZXJsZXNzXG4gICAgICBcIkFXUzo6U2VydmVybGVzczo6QXBpXCIsXG4gICAgICBcIkFXUzo6U2VydmVybGVzczo6QXBwbGljYXRpb25cIixcbiAgICAgIFwiQVdTOjpTZXJ2ZXJsZXNzOjpGdW5jdGlvblwiLFxuICAgICAgXCJBV1M6OlNlcnZlcmxlc3M6Okh0dHBBcGlcIixcbiAgICAgIFwiQVdTOjpTZXJ2ZXJsZXNzOjpMYXllclZlcnNpb25cIixcbiAgICAgIFwiQVdTOjpTZXJ2ZXJsZXNzOjpTaW1wbGVUYWJsZVwiLFxuICAgICAgXCJBV1M6OlNlcnZlcmxlc3M6OlN0YXRlTWFjaGluZVwiXG4gICAgXTtcblxuICAgIGlmICh1bnN1cHBvcnRlZFR5cGVzLmluY2x1ZGVzKHJlc291cmNlLmNmblJlc291cmNlVHlwZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBBZGQgYSBzeW50aGVzaXMgaG9vayB0byBtb2RpZnkgdGhlIENsb3VkRm9ybWF0aW9uIHRlbXBsYXRlXG4gICAgY29uc3Qgc3RhY2sgPSBTdGFjay5vZihyZXNvdXJjZSk7XG4gICAgY29uc3QgbG9naWNhbElkID0gc3RhY2suZ2V0TG9naWNhbElkKHJlc291cmNlKTtcblxuICAgIC8vIFVzZSBhZGRUcmFuc2Zvcm0gdG8gYWRkIHRhZ3MgZHVyaW5nIHN5bnRoZXNpc1xuICAgIHJlc291cmNlLmFkZFByb3BlcnR5T3ZlcnJpZGUoXCJUYWdzXCIsIHRoaXMuYnVpbGRUYWdzQXJyYXkocmVzb3VyY2UpKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRUYWdzQXJyYXkocmVzb3VyY2U6IENmblJlc291cmNlKTogYW55W10ge1xuICAgIGNvbnN0IHRhZ01hcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5cbiAgICAvLyBBZGQgSVBBTSBwb29sIHRhZyBmb3IgVlBDcyB3aXRoIElQQU0gY29uZmlndXJhdGlvblxuICAgIGlmIChyZXNvdXJjZS5jZm5SZXNvdXJjZVR5cGUgPT09IFwiQVdTOjpFQzI6OlZQQ1wiKSB7XG4gICAgICBjb25zdCBwcm9wZXJ0aWVzID0gKHJlc291cmNlIGFzIGFueSkuY2ZuUHJvcGVydGllcyB8fCB7fTtcbiAgICAgIGlmIChwcm9wZXJ0aWVzLmlwdjRJcGFtUG9vbElkKSB7XG4gICAgICAgIGNvbnN0IHN0YWNrID0gU3RhY2sub2YocmVzb3VyY2UpO1xuICAgICAgICBjb25zdCBhY2NvdW50SWQgPSBzdGFjay5ub2RlLnRyeUdldENvbnRleHQoXCJhY2NvdW50SWRcIik7XG4gICAgICAgIGlmIChhY2NvdW50SWQpIHtcbiAgICAgICAgICB0YWdNYXAuc2V0KFwiZmphbGw6b3BlcmF0aW9uczpwb29sXCIsIGFjY291bnRJZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBcHBseSBzdGFuZGFyZCB0YWdzXG4gICAgT2JqZWN0LmVudHJpZXModGhpcy5yZXF1aXJlZFRhZ3MpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgdGFnTWFwLnNldChrZXksIHZhbHVlKTtcbiAgICB9KTtcblxuICAgIC8vIENvbnZlcnQgdG8gQ2xvdWRGb3JtYXRpb24gZm9ybWF0XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGFnTWFwLmVudHJpZXMoKSkubWFwKChba2V5LCB2YWx1ZV0pID0+ICh7XG4gICAgICBLZXk6IGtleSxcbiAgICAgIFZhbHVlOiB2YWx1ZVxuICAgIH0pKTtcbiAgfVxufVxuIl19