terraconstructs 0.2.4 → 0.2.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +3099 -2917
- package/CLAUDE.md +6 -6
- package/README.md +1 -1
- package/lib/asset-staging.js +3 -3
- package/lib/aws/arn.js +5 -5
- package/lib/aws/aws-asset-manager.js +9 -9
- package/lib/aws/aws-construct.js +1 -1
- package/lib/aws/aws-stack.d.ts +19 -4
- package/lib/aws/aws-stack.js +43 -18
- package/lib/aws/aws-tags.d.ts +1 -1
- package/lib/aws/aws-tags.js +5 -5
- package/lib/aws/cloudwatch/actions/appscaling.js +1 -1
- package/lib/aws/cloudwatch/actions/ec2.js +1 -1
- package/lib/aws/cloudwatch/actions/lambda.js +2 -2
- package/lib/aws/cloudwatch/actions/sns.js +1 -1
- package/lib/aws/cloudwatch/actions/ssm.js +2 -2
- package/lib/aws/cloudwatch/alarm-base.js +1 -1
- package/lib/aws/cloudwatch/alarm-rule.js +1 -1
- package/lib/aws/cloudwatch/alarm-status-widget.js +1 -1
- package/lib/aws/cloudwatch/alarm.d.ts +1 -1
- package/lib/aws/cloudwatch/alarm.js +10 -10
- package/lib/aws/cloudwatch/composite-alarm.d.ts +1 -1
- package/lib/aws/cloudwatch/composite-alarm.js +7 -7
- package/lib/aws/cloudwatch/dashboard.d.ts +1 -1
- package/lib/aws/cloudwatch/dashboard.js +7 -7
- package/lib/aws/cloudwatch/data-protection-policy.d.ts +1 -1
- package/lib/aws/cloudwatch/data-protection-policy.js +5 -5
- package/lib/aws/cloudwatch/graph.js +8 -8
- package/lib/aws/cloudwatch/layout.js +3 -3
- package/lib/aws/cloudwatch/log-destinations/kinesis.js +1 -1
- package/lib/aws/cloudwatch/log-destinations/lambda.js +1 -1
- package/lib/aws/cloudwatch/log-group.d.ts +1 -1
- package/lib/aws/cloudwatch/log-group.js +7 -7
- package/lib/aws/cloudwatch/log-query.js +1 -1
- package/lib/aws/cloudwatch/log-stream.d.ts +1 -1
- package/lib/aws/cloudwatch/log-stream.js +3 -3
- package/lib/aws/cloudwatch/metric-filter.d.ts +1 -1
- package/lib/aws/cloudwatch/metric-filter.js +3 -3
- package/lib/aws/cloudwatch/metric.js +6 -6
- package/lib/aws/cloudwatch/pattern.js +3 -3
- package/lib/aws/cloudwatch/policy.d.ts +1 -1
- package/lib/aws/cloudwatch/policy.js +3 -3
- package/lib/aws/cloudwatch/private/drop-empty-object-at-the-end-of-an-array-token.d.ts +1 -1
- package/lib/aws/cloudwatch/private/drop-empty-object-at-the-end-of-an-array-token.js +1 -1
- package/lib/aws/cloudwatch/private/env-tokens.js +6 -6
- package/lib/aws/cloudwatch/query-definition.d.ts +1 -1
- package/lib/aws/cloudwatch/query-definition.js +4 -4
- package/lib/aws/cloudwatch/stats.js +1 -1
- package/lib/aws/cloudwatch/subscription-filter.d.ts +1 -1
- package/lib/aws/cloudwatch/subscription-filter.js +6 -6
- package/lib/aws/cloudwatch/text.js +1 -1
- package/lib/aws/cloudwatch/variable.js +3 -3
- package/lib/aws/cloudwatch/widget.js +1 -1
- package/lib/aws/compute/access-log.d.ts +1 -1
- package/lib/aws/compute/access-log.js +5 -5
- package/lib/aws/compute/activity.d.ts +1 -1
- package/lib/aws/compute/activity.js +5 -5
- package/lib/aws/compute/alb/application-listener-action.d.ts +1 -1
- package/lib/aws/compute/alb/application-listener-action.js +5 -5
- package/lib/aws/compute/alb/application-listener-certificate.js +3 -3
- package/lib/aws/compute/alb/application-listener-rule.js +9 -9
- package/lib/aws/compute/alb/application-listener.js +5 -5
- package/lib/aws/compute/alb/application-load-balancer.js +8 -8
- package/lib/aws/compute/alb/application-target-group.js +7 -7
- package/lib/aws/compute/alb/conditions.js +3 -3
- package/lib/aws/compute/alb/trust-store-revocation.js +3 -3
- package/lib/aws/compute/alb/trust-store.js +7 -7
- package/lib/aws/compute/api-definition.js +9 -9
- package/lib/aws/compute/api-key.js +6 -6
- package/lib/aws/compute/architecture.js +1 -1
- package/lib/aws/compute/aspects/require-imdsv2-aspect.d.ts +1 -1
- package/lib/aws/compute/aspects/require-imdsv2-aspect.js +6 -6
- package/lib/aws/compute/authorizer.js +1 -1
- package/lib/aws/compute/authorizers/identity-source.js +1 -1
- package/lib/aws/compute/authorizers/lambda.d.ts +1 -1
- package/lib/aws/compute/authorizers/lambda.js +6 -6
- package/lib/aws/compute/base-path-mapping.js +5 -5
- package/lib/aws/compute/base-scalable-attribute.js +1 -1
- package/lib/aws/compute/bastion-host.js +4 -4
- package/lib/aws/compute/chain.js +1 -1
- package/lib/aws/compute/client-vpn-authorization-rule.js +3 -3
- package/lib/aws/compute/client-vpn-endpoint.d.ts +1 -1
- package/lib/aws/compute/client-vpn-endpoint.js +9 -9
- package/lib/aws/compute/client-vpn-route.d.ts +1 -1
- package/lib/aws/compute/client-vpn-route.js +4 -4
- package/lib/aws/compute/code.d.ts +3 -3
- package/lib/aws/compute/code.js +15 -15
- package/lib/aws/compute/condition.js +1 -1
- package/lib/aws/compute/connections.js +1 -1
- package/lib/aws/compute/cors.js +1 -1
- package/lib/aws/compute/deployment.js +5 -5
- package/lib/aws/compute/domain-name.js +5 -5
- package/lib/aws/compute/event-invoke-config.d.ts +1 -1
- package/lib/aws/compute/event-invoke-config.js +3 -3
- package/lib/aws/compute/event-source-filter.js +2 -2
- package/lib/aws/compute/event-source-mapping.js +7 -7
- package/lib/aws/compute/event-sources/s3-onfailure-destination.js +1 -1
- package/lib/aws/compute/event-sources/s3.js +1 -1
- package/lib/aws/compute/event-sources/sqs-dlq.js +1 -1
- package/lib/aws/compute/event-sources/sqs.js +5 -5
- package/lib/aws/compute/fields.d.ts +1 -1
- package/lib/aws/compute/fields.js +12 -12
- package/lib/aws/compute/function-alias.d.ts +1 -1
- package/lib/aws/compute/function-alias.js +3 -3
- package/lib/aws/compute/function-base.d.ts +1 -1
- package/lib/aws/compute/function-base.js +10 -9
- package/lib/aws/compute/function-destinations/event-bridge.js +1 -1
- package/lib/aws/compute/function-destinations/function.js +1 -1
- package/lib/aws/compute/function-destinations/sqs.js +1 -1
- package/lib/aws/compute/function-nodejs/bundling.js +6 -6
- package/lib/aws/compute/function-nodejs/function.js +4 -4
- package/lib/aws/compute/function-url.d.ts +1 -1
- package/lib/aws/compute/function-url.js +3 -3
- package/lib/aws/compute/function-vpc-config.generated.d.ts +5 -5
- package/lib/aws/compute/function-vpc-config.generated.js +1 -1
- package/lib/aws/compute/function.d.ts +2 -2
- package/lib/aws/compute/function.js +9 -9
- package/lib/aws/compute/gateway-response.d.ts +1 -1
- package/lib/aws/compute/gateway-response.js +4 -4
- package/lib/aws/compute/handler.js +1 -1
- package/lib/aws/compute/instance-types.js +1 -1
- package/lib/aws/compute/instance.d.ts +1 -1
- package/lib/aws/compute/instance.js +9 -9
- package/lib/aws/compute/integration.js +4 -4
- package/lib/aws/compute/integrations/aws.js +3 -3
- package/lib/aws/compute/integrations/http.js +1 -1
- package/lib/aws/compute/integrations/lambda.js +5 -5
- package/lib/aws/compute/integrations/mock.js +1 -1
- package/lib/aws/compute/integrations/stepfunctions.js +4 -4
- package/lib/aws/compute/ip-addresses.d.ts +1 -1
- package/lib/aws/compute/ip-addresses.js +10 -10
- package/lib/aws/compute/ipam.d.ts +1 -1
- package/lib/aws/compute/ipam.js +5 -5
- package/lib/aws/compute/key-pair.d.ts +1 -1
- package/lib/aws/compute/key-pair.js +6 -6
- package/lib/aws/compute/lambda-api.js +1 -1
- package/lib/aws/compute/launch-template.d.ts +1 -1
- package/lib/aws/compute/launch-template.js +12 -12
- package/lib/aws/compute/lb-shared/base-listener.js +9 -9
- package/lib/aws/compute/lb-shared/base-load-balancer.d.ts +2 -2
- package/lib/aws/compute/lb-shared/base-load-balancer.js +12 -12
- package/lib/aws/compute/lb-shared/base-target-group.d.ts +1 -1
- package/lib/aws/compute/lb-shared/base-target-group.js +15 -15
- package/lib/aws/compute/lb-shared/lb-listener-config.generated.d.ts +34 -34
- package/lib/aws/compute/lb-shared/lb-listener-config.generated.js +1 -1
- package/lib/aws/compute/lb-shared/lb-target-group-attachment-config.generated.d.ts +11 -6
- package/lib/aws/compute/lb-shared/lb-target-group-attachment-config.generated.js +1 -1
- package/lib/aws/compute/lb-shared/listener-action.d.ts +1 -1
- package/lib/aws/compute/lb-shared/listener-action.js +1 -1
- package/lib/aws/compute/lb-shared/listener-certificate.js +1 -1
- package/lib/aws/compute/lb-shared/load-balancer-targets.js +2 -2
- package/lib/aws/compute/lb-shared/util.js +5 -5
- package/lib/aws/compute/lb-targets/alb-target.js +3 -3
- package/lib/aws/compute/lb-targets/instance-target.js +2 -2
- package/lib/aws/compute/lb-targets/ip-target.js +1 -1
- package/lib/aws/compute/lb-targets/lambda-target.js +1 -1
- package/lib/aws/compute/load-balancer.d.ts +1 -1
- package/lib/aws/compute/load-balancer.js +8 -8
- package/lib/aws/compute/machine-image/amazon-linux-2022.js +2 -2
- package/lib/aws/compute/machine-image/amazon-linux-2023.js +2 -2
- package/lib/aws/compute/machine-image/amazon-linux2.js +2 -2
- package/lib/aws/compute/machine-image/common.js +1 -1
- package/lib/aws/compute/machine-image/machine-image.js +10 -10
- package/lib/aws/compute/method.js +6 -6
- package/lib/aws/compute/model.js +5 -5
- package/lib/aws/compute/nat.js +10 -10
- package/lib/aws/compute/network-acl-types.js +2 -2
- package/lib/aws/compute/network-acl.d.ts +1 -1
- package/lib/aws/compute/network-acl.js +5 -5
- package/lib/aws/compute/nlb/network-listener-action.d.ts +1 -1
- package/lib/aws/compute/nlb/network-listener-action.js +2 -2
- package/lib/aws/compute/nlb/network-listener-certificate.js +2 -2
- package/lib/aws/compute/nlb/network-listener.js +5 -5
- package/lib/aws/compute/nlb/network-load-balancer.js +6 -6
- package/lib/aws/compute/nlb/network-target-group.js +4 -4
- package/lib/aws/compute/peer.js +7 -7
- package/lib/aws/compute/placement-group.d.ts +1 -1
- package/lib/aws/compute/placement-group.js +3 -3
- package/lib/aws/compute/port.js +5 -5
- package/lib/aws/compute/prefix-list.d.ts +1 -1
- package/lib/aws/compute/prefix-list.js +5 -5
- package/lib/aws/compute/private/context-stub.js +7 -7
- package/lib/aws/compute/private/ebs-util.d.ts +1 -1
- package/lib/aws/compute/private/ebs-util.js +3 -3
- package/lib/aws/compute/private/json-path.d.ts +1 -1
- package/lib/aws/compute/private/json-path.js +8 -8
- package/lib/aws/compute/requestvalidator.js +3 -3
- package/lib/aws/compute/resource.js +5 -5
- package/lib/aws/compute/restapi.d.ts +1 -1
- package/lib/aws/compute/restapi.js +11 -11
- package/lib/aws/compute/route.d.ts +1 -1
- package/lib/aws/compute/route.js +12 -12
- package/lib/aws/compute/runtime.js +3 -3
- package/lib/aws/compute/scalable-target.d.ts +1 -1
- package/lib/aws/compute/scalable-target.js +3 -3
- package/lib/aws/compute/schedule.js +4 -4
- package/lib/aws/compute/security-group.js +12 -12
- package/lib/aws/compute/stage.d.ts +1 -1
- package/lib/aws/compute/stage.js +6 -6
- package/lib/aws/compute/state-graph.js +1 -1
- package/lib/aws/compute/state-machine-fragment.js +1 -1
- package/lib/aws/compute/state-machine.d.ts +2 -2
- package/lib/aws/compute/state-machine.js +8 -8
- package/lib/aws/compute/states/choice.js +1 -1
- package/lib/aws/compute/states/custom-state.js +5 -5
- package/lib/aws/compute/states/distributed-map/item-batcher.js +1 -1
- package/lib/aws/compute/states/distributed-map/item-reader.js +5 -5
- package/lib/aws/compute/states/distributed-map/result-writer.js +1 -1
- package/lib/aws/compute/states/distributed-map.js +4 -4
- package/lib/aws/compute/states/fail.js +4 -4
- package/lib/aws/compute/states/map-base.js +4 -4
- package/lib/aws/compute/states/map.js +1 -1
- package/lib/aws/compute/states/parallel.js +1 -1
- package/lib/aws/compute/states/pass.js +2 -2
- package/lib/aws/compute/states/state.js +4 -4
- package/lib/aws/compute/states/succeed.js +1 -1
- package/lib/aws/compute/states/task-base.js +2 -2
- package/lib/aws/compute/states/task.js +1 -1
- package/lib/aws/compute/states/wait.js +2 -2
- package/lib/aws/compute/step-scaling-action.js +5 -5
- package/lib/aws/compute/step-scaling-policy.js +7 -7
- package/lib/aws/compute/stepfunctions-api.js +2 -2
- package/lib/aws/compute/subnet-v2.d.ts +1 -1
- package/lib/aws/compute/subnet-v2.js +5 -5
- package/lib/aws/compute/subnet.js +4 -4
- package/lib/aws/compute/target-tracking-scaling-policy.js +3 -3
- package/lib/aws/compute/task-credentials.js +1 -1
- package/lib/aws/compute/task-input.js +1 -1
- package/lib/aws/compute/tasks/aws-sdk/call-aws-service.js +5 -5
- package/lib/aws/compute/tasks/eventbridge/put-events.js +1 -1
- package/lib/aws/compute/tasks/http/invoke.js +1 -1
- package/lib/aws/compute/tasks/lambda/invoke.js +1 -1
- package/lib/aws/compute/tasks/sqs/send-message.js +1 -1
- package/lib/aws/compute/tasks/stepfunctions/invoke-activity.js +1 -1
- package/lib/aws/compute/tasks/stepfunctions/start-execution.js +1 -1
- package/lib/aws/compute/types.js +1 -1
- package/lib/aws/compute/usage-plan.js +5 -5
- package/lib/aws/compute/user-data.d.ts +2 -2
- package/lib/aws/compute/user-data.js +10 -10
- package/lib/aws/compute/volume.d.ts +1 -1
- package/lib/aws/compute/volume.js +7 -7
- package/lib/aws/compute/vpc-endpoint-service.js +3 -3
- package/lib/aws/compute/vpc-endpoint.d.ts +1 -1
- package/lib/aws/compute/vpc-endpoint.js +13 -13
- package/lib/aws/compute/vpc-flow-logs.d.ts +1 -1
- package/lib/aws/compute/vpc-flow-logs.js +8 -8
- package/lib/aws/compute/vpc-link.js +5 -5
- package/lib/aws/compute/vpc-v2-base.js +6 -6
- package/lib/aws/compute/vpc-v2.d.ts +2 -2
- package/lib/aws/compute/vpc-v2.js +4 -4
- package/lib/aws/compute/vpc.d.ts +1 -1
- package/lib/aws/compute/vpc.js +24 -22
- package/lib/aws/compute/vpn.js +8 -8
- package/lib/aws/context-provider.js +4 -4
- package/lib/aws/edge/certificate.d.ts +1 -1
- package/lib/aws/edge/certificate.js +6 -6
- package/lib/aws/edge/distribution.d.ts +1 -1
- package/lib/aws/edge/distribution.js +9 -9
- package/lib/aws/edge/dns-alias-record-targets.d.ts +1 -1
- package/lib/aws/edge/dns-alias-record-targets.js +7 -7
- package/lib/aws/edge/dns-record.d.ts +1 -1
- package/lib/aws/edge/dns-record.js +19 -19
- package/lib/aws/edge/dns-zone.d.ts +2 -2
- package/lib/aws/edge/dns-zone.js +5 -5
- package/lib/aws/edge/function.d.ts +1 -1
- package/lib/aws/edge/function.js +4 -4
- package/lib/aws/edge/key-value-store.d.ts +1 -1
- package/lib/aws/edge/key-value-store.js +6 -6
- package/lib/aws/edge/origin.d.ts +1 -1
- package/lib/aws/edge/origin.js +6 -6
- package/lib/aws/edge/response-headers-policy.d.ts +1 -1
- package/lib/aws/edge/response-headers-policy.js +6 -6
- package/lib/aws/encryption/alias.d.ts +1 -1
- package/lib/aws/encryption/alias.js +8 -8
- package/lib/aws/encryption/key.d.ts +1 -1
- package/lib/aws/encryption/key.js +6 -6
- package/lib/aws/encryption/via-service-principal.js +1 -1
- package/lib/aws/iam/grant.js +3 -3
- package/lib/aws/iam/group.js +5 -5
- package/lib/aws/iam/instance-profile.d.ts +1 -1
- package/lib/aws/iam/instance-profile.js +3 -3
- package/lib/aws/iam/managed-policy.d.ts +1 -1
- package/lib/aws/iam/managed-policy.js +3 -3
- package/lib/aws/iam/oidc-provider.d.ts +1 -1
- package/lib/aws/iam/oidc-provider.js +3 -3
- package/lib/aws/iam/policy-document-config.generated.d.ts +9 -9
- package/lib/aws/iam/policy-document-config.generated.js +1 -1
- package/lib/aws/iam/policy-document.d.ts +1 -1
- package/lib/aws/iam/policy-document.js +5 -5
- package/lib/aws/iam/policy-statement-props.generated.d.ts +8 -8
- package/lib/aws/iam/policy-statement-props.generated.js +1 -1
- package/lib/aws/iam/policy-statement.d.ts +1 -1
- package/lib/aws/iam/policy-statement.js +8 -8
- package/lib/aws/iam/policy.js +3 -3
- package/lib/aws/iam/principals.js +25 -25
- package/lib/aws/iam/private/imported-role.js +3 -3
- package/lib/aws/iam/private/postprocess-policy-document.d.ts +1 -1
- package/lib/aws/iam/private/postprocess-policy-document.js +1 -1
- package/lib/aws/iam/private/util.d.ts +1 -1
- package/lib/aws/iam/private/util.js +5 -5
- package/lib/aws/iam/role.d.ts +1 -1
- package/lib/aws/iam/role.js +6 -6
- package/lib/aws/iam/saml-provider.d.ts +1 -1
- package/lib/aws/iam/saml-provider.js +6 -6
- package/lib/aws/iam/unknown-principal.js +4 -4
- package/lib/aws/iam/user.js +3 -3
- package/lib/aws/network/network.d.ts +1 -1
- package/lib/aws/network/network.js +1 -1
- package/lib/aws/network/simple-ipv4-vpc.js +12 -12
- package/lib/aws/network/subnet-group.d.ts +1 -1
- package/lib/aws/network/subnet-group.js +5 -5
- package/lib/aws/network/subnet.d.ts +1 -1
- package/lib/aws/network/subnet.js +6 -6
- package/lib/aws/notify/archive.d.ts +1 -1
- package/lib/aws/notify/archive.js +3 -3
- package/lib/aws/notify/connection.d.ts +1 -1
- package/lib/aws/notify/connection.js +5 -5
- package/lib/aws/notify/event-bus.d.ts +1 -1
- package/lib/aws/notify/event-bus.js +10 -10
- package/lib/aws/notify/event-pattern.d.ts +1 -1
- package/lib/aws/notify/event-pattern.js +5 -5
- package/lib/aws/notify/input.d.ts +1 -1
- package/lib/aws/notify/input.js +12 -12
- package/lib/aws/notify/kinesis-stream.d.ts +1 -1
- package/lib/aws/notify/kinesis-stream.js +7 -7
- package/lib/aws/notify/notification-rule.js +8 -8
- package/lib/aws/notify/policy.js +3 -3
- package/lib/aws/notify/queue-base.js +1 -1
- package/lib/aws/notify/queue-policy.js +3 -3
- package/lib/aws/notify/queue.d.ts +1 -1
- package/lib/aws/notify/queue.js +8 -8
- package/lib/aws/notify/resource-policy.js +3 -3
- package/lib/aws/notify/rule.d.ts +1 -1
- package/lib/aws/notify/rule.js +6 -6
- package/lib/aws/notify/schedule.js +4 -4
- package/lib/aws/notify/sns-grants.generated.js +1 -1
- package/lib/aws/notify/sqs-grants.generated.js +1 -1
- package/lib/aws/notify/subscription-filter.js +1 -1
- package/lib/aws/notify/subscription.js +6 -6
- package/lib/aws/notify/subscriptions/email.js +1 -1
- package/lib/aws/notify/subscriptions/lambda.js +4 -4
- package/lib/aws/notify/subscriptions/sms.js +1 -1
- package/lib/aws/notify/subscriptions/sqs.js +4 -4
- package/lib/aws/notify/subscriptions/url.js +4 -4
- package/lib/aws/notify/target.d.ts +1 -1
- package/lib/aws/notify/target.js +1 -1
- package/lib/aws/notify/targets/event-bus.js +1 -1
- package/lib/aws/notify/targets/function.js +1 -1
- package/lib/aws/notify/targets/log-group.js +2 -2
- package/lib/aws/notify/targets/sqs.js +1 -1
- package/lib/aws/notify/targets/state-machine.js +1 -1
- package/lib/aws/notify/targets/util.js +3 -3
- package/lib/aws/notify/topic-base.js +4 -4
- package/lib/aws/notify/topic.js +7 -7
- package/lib/aws/provider-config.generated.d.ts +42 -36
- package/lib/aws/provider-config.generated.js +1 -1
- package/lib/aws/region-lookup.js +4 -4
- package/lib/aws/storage/assets/image-asset.js +8 -8
- package/lib/aws/storage/assets/s3.js +1 -1
- package/lib/aws/storage/auth-token.js +2 -2
- package/lib/aws/storage/billing.js +1 -1
- package/lib/aws/storage/bucket-notifications.d.ts +1 -1
- package/lib/aws/storage/bucket-notifications.js +8 -8
- package/lib/aws/storage/bucket-policy.d.ts +1 -1
- package/lib/aws/storage/bucket-policy.js +3 -3
- package/lib/aws/storage/bucket-source.d.ts +1 -1
- package/lib/aws/storage/bucket-source.js +7 -7
- package/lib/aws/storage/bucket.d.ts +1 -1
- package/lib/aws/storage/bucket.js +8 -8
- package/lib/aws/storage/capacity.js +1 -1
- package/lib/aws/storage/cors-config.generated.d.ts +5 -5
- package/lib/aws/storage/cors-config.generated.js +1 -1
- package/lib/aws/storage/cors-rule-config.generated.d.ts +5 -5
- package/lib/aws/storage/cors-rule-config.generated.js +1 -1
- package/lib/aws/storage/ecr-repository.js +11 -11
- package/lib/aws/storage/encryption.d.ts +1 -1
- package/lib/aws/storage/encryption.js +5 -5
- package/lib/aws/storage/lifecycle-config.generated.d.ts +9 -9
- package/lib/aws/storage/lifecycle-config.generated.js +1 -1
- package/lib/aws/storage/notification-targets/function.js +2 -2
- package/lib/aws/storage/notification-targets/queue.js +4 -4
- package/lib/aws/storage/origin-access-identity.d.ts +2 -2
- package/lib/aws/storage/origin-access-identity.js +3 -3
- package/lib/aws/storage/parameter-util.js +5 -5
- package/lib/aws/storage/parameter.d.ts +2 -2
- package/lib/aws/storage/parameter.js +16 -16
- package/lib/aws/storage/stream-grants.js +1 -1
- package/lib/aws/storage/table-grants.js +1 -1
- package/lib/aws/storage/table.d.ts +1 -1
- package/lib/aws/storage/table.js +10 -10
- package/lib/aws/storage/website-config.generated.d.ts +8 -8
- package/lib/aws/storage/website-config.generated.js +1 -1
- package/lib/bundling.js +5 -5
- package/lib/construct-base.d.ts +1 -1
- package/lib/construct-base.js +10 -10
- package/lib/duration.js +9 -9
- package/lib/errors.js +1 -1
- package/lib/expiration.js +1 -1
- package/lib/fs/ignore.js +4 -4
- package/lib/fs/index.js +1 -1
- package/lib/private/terraform-dependables-aspect.d.ts +1 -1
- package/lib/private/terraform-dependables-aspect.js +6 -6
- package/lib/private/unique-resource-name.js +3 -3
- package/lib/size.js +6 -6
- package/lib/stack-base.d.ts +2 -2
- package/lib/stack-base.js +16 -16
- package/lib/terra-func.d.ts +1 -1
- package/lib/terra-func.js +18 -18
- package/lib/time-zone.js +1 -1
- package/lib/token.js +5 -5
- package/package.json +17 -17
- package/setup.js +2 -2
|
@@ -4,8 +4,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
4
4
|
exports.VpcV2Base = void 0;
|
|
5
5
|
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
6
|
// https://github.com/aws/aws-cdk/blob/v2.175.1/packages/@aws-cdk/aws-ec2-alpha/lib/vpc-v2-base.ts
|
|
7
|
-
const provider_aws_1 = require("@
|
|
8
|
-
const
|
|
7
|
+
const provider_aws_1 = require("@cdktn/provider-aws");
|
|
8
|
+
const cdktn_1 = require("cdktn");
|
|
9
9
|
const constructs_1 = require("constructs");
|
|
10
10
|
const subnet_1 = require("./subnet");
|
|
11
11
|
const aws_construct_1 = require("../aws-construct");
|
|
@@ -110,7 +110,7 @@ class VpcV2Base extends aws_construct_1.AwsConstructBase {
|
|
|
110
110
|
const vpnRoutePropagation = options.vpnRoutePropagation ?? [{}];
|
|
111
111
|
const routeTableIds = (0, ec2_util_1.allRouteTableIds)((0, ec2_util_1.flatten)(vpnRoutePropagation.map((s) => this.selectSubnets(s).subnets)));
|
|
112
112
|
if (routeTableIds.length === 0) {
|
|
113
|
-
|
|
113
|
+
cdktn_1.Annotations.of(this).addError(`enableVpnGateway: no subnets matching selection: '${JSON.stringify(vpnRoutePropagation)}'. Select other subnets to add routes to.`);
|
|
114
114
|
}
|
|
115
115
|
for (let i = 0; i < routeTableIds.length; i++) {
|
|
116
116
|
const routePropagation = new provider_aws_1.vpnGatewayRoutePropagation.VpnGatewayRoutePropagation(this, `RoutePropagation${i}`, {
|
|
@@ -413,7 +413,7 @@ class VpcV2Base extends aws_construct_1.AwsConstructBase {
|
|
|
413
413
|
}
|
|
414
414
|
else {
|
|
415
415
|
// "@aws-cdk/aws-ec2:subnetNameDeprecated",
|
|
416
|
-
|
|
416
|
+
cdktn_1.Annotations.of(this).addWarning("Usage of 'subnetName' in SubnetSelection is deprecated, use 'subnetGroupName' instead");
|
|
417
417
|
}
|
|
418
418
|
placement = { ...placement, subnetGroupName: placement.subnetName };
|
|
419
419
|
}
|
|
@@ -461,7 +461,7 @@ class VpcV2Base extends aws_construct_1.AwsConstructBase {
|
|
|
461
461
|
}
|
|
462
462
|
exports.VpcV2Base = VpcV2Base;
|
|
463
463
|
_a = JSII_RTTI_SYMBOL_1;
|
|
464
|
-
VpcV2Base[_a] = { fqn: "terraconstructs.aws.compute.alpha.VpcV2Base", version: "0.2.
|
|
464
|
+
VpcV2Base[_a] = { fqn: "terraconstructs.aws.compute.alpha.VpcV2Base", version: "0.2.6" };
|
|
465
465
|
class CompositeDependable {
|
|
466
466
|
constructor() {
|
|
467
467
|
this.dependables = new Array();
|
|
@@ -490,4 +490,4 @@ function tap(x, fn) {
|
|
|
490
490
|
fn(x);
|
|
491
491
|
return x;
|
|
492
492
|
}
|
|
493
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidnBjLXYyLWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXdzL2NvbXB1dGUvdnBjLXYyLWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxrR0FBa0c7QUFFbEcsc0RBRzZCO0FBQzdCLGlDQUFvQztBQUNwQywyQ0FLb0I7QUFDcEIscUNBQXdDO0FBQ3hDLG9EQUFvRDtBQUNwRCw0Q0FBd0M7QUFDeEMsK0RBRytCO0FBQy9CLHlDQUlvQjtBQUNwQixtQ0FVaUI7QUFFakIsK0JBT2U7QUFDZixpREFLd0I7QUFDeEIsbURBQStFO0FBQy9FLCtCQU1lO0FBQ2YsZ0NBQXlFO0FBNEx6RTs7OztHQUlHO0FBQ0gsTUFBc0IsU0FBVSxTQUFRLGdDQUFnQjtJQUF4RDs7UUFnQkU7O1dBRUc7UUFDYSxrQkFBYSxHQUFjLEVBQUUsQ0FBQztRQUU5Qzs7V0FFRztRQUNhLG1CQUFjLEdBQWMsRUFBRSxDQUFDO1FBTy9DOztXQUVHO1FBQ2Esc0JBQWlCLEdBQWEsRUFBRSxDQUFDO1FBT2pEOzs7O1dBSUc7UUFDZ0IscUNBQWdDLEdBQUcsSUFBSSw0QkFBZSxFQUFFLENBQUM7UUFzRDVFOztXQUVHO1FBQ08sK0JBQTBCLEdBQVksS0FBSyxDQUFDO1FBUXREOzs7V0FHRztRQUNPLHVCQUFrQixHQUFHLEVBQUUsQ0FBQztLQStnQm5DO0lBOWlCQyxJQUFXLFVBQVU7UUFDbkIsT0FBTztZQUNMLGlCQUFpQixFQUFFLElBQUksQ0FBQyxpQkFBaUI7WUFDekMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7WUFDOUQsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7WUFDNUQsZUFBZSxFQUFFLElBQUks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T0FBTyxDQUFDLENBQUM7QUFDWCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvdjIuMTc1LjEvcGFja2FnZXMvQGF3cy1jZGsvYXdzLWVjMi1hbHBoYS9saWIvdnBjLXYyLWJhc2UudHNcblxuaW1wb3J0IHtcbiAgdnBuR2F0ZXdheUF0dGFjaG1lbnQsXG4gIHZwbkdhdGV3YXlSb3V0ZVByb3BhZ2F0aW9uLFxufSBmcm9tIFwiQGNka3RmL3Byb3ZpZGVyLWF3c1wiO1xuaW1wb3J0IHsgQW5ub3RhdGlvbnMgfSBmcm9tIFwiY2RrdGZcIjtcbmltcG9ydCB7XG4gIElEZXBlbmRhYmxlLFxuICBEZXBlbmRhYmxlLFxuICBJQ29uc3RydWN0LFxuICBEZXBlbmRlbmN5R3JvdXAsXG59IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBTdWJuZXRGaWx0ZXIgfSBmcm9tIFwiLi9zdWJuZXRcIjtcbmltcG9ydCB7IEF3c0NvbnN0cnVjdEJhc2UgfSBmcm9tIFwiLi4vYXdzLWNvbnN0cnVjdFwiO1xuaW1wb3J0IHsgQXdzU3RhY2sgfSBmcm9tIFwiLi4vYXdzLXN0YWNrXCI7XG5pbXBvcnQge1xuICBDbGllbnRWcG5FbmRwb2ludE9wdGlvbnMsXG4gIENsaWVudFZwbkVuZHBvaW50LFxufSBmcm9tIFwiLi9jbGllbnQtdnBuLWVuZHBvaW50XCI7XG5pbXBvcnQge1xuICBhbGxSb3V0ZVRhYmxlSWRzLFxuICBmbGF0dGVuLFxuICBzdWJuZXRHcm91cE5hbWVGcm9tQ29uc3RydWN0SWQsXG59IGZyb20gXCIuL2VjMi11dGlsXCI7XG5pbXBvcnQge1xuICBFZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5LFxuICBJbnRlcm5ldEdhdGV3YXksXG4gIE5hdENvbm5lY3Rpdml0eVR5cGUsXG4gIE5hdEdhdGV3YXksXG4gIE5hdEdhdGV3YXlPcHRpb25zLFxuICBSb3V0ZSxcbiAgVlBDUGVlcmluZ0Nvbm5lY3Rpb24sXG4gIFZQQ1BlZXJpbmdDb25uZWN0aW9uT3B0aW9ucyxcbiAgVlBOR2F0ZXdheVYyLFxufSBmcm9tIFwiLi9yb3V0ZVwiO1xuaW1wb3J0IHsgSVN1Ym5ldFYyIH0gZnJvbSBcIi4vc3VibmV0LXYyXCI7XG5pbXBvcnQge1xuICBWcGNPdXRwdXRzLFxuICBJVnBjLFxuICBJU3VibmV0LFxuICBTdWJuZXRTZWxlY3Rpb24sXG4gIFNlbGVjdGVkU3VibmV0cyxcbiAgU3VibmV0VHlwZSxcbn0gZnJvbSBcIi4vdnBjXCI7XG5pbXBvcnQge1xuICBJbnRlcmZhY2VWcGNFbmRwb2ludE9wdGlvbnMsXG4gIEludGVyZmFjZVZwY0VuZHBvaW50LFxuICBHYXRld2F5VnBjRW5kcG9pbnRPcHRpb25zLFxuICBHYXRld2F5VnBjRW5kcG9pbnQsXG59IGZyb20gXCIuL3ZwYy1lbmRwb2ludFwiO1xuaW1wb3J0IHsgRmxvd0xvZ09wdGlvbnMsIEZsb3dMb2csIEZsb3dMb2dSZXNvdXJjZVR5cGUgfSBmcm9tIFwiLi92cGMtZmxvdy1sb2dzXCI7XG5pbXBvcnQge1xuICBFbmFibGVWcG5HYXRld2F5T3B0aW9ucyxcbiAgVnBuQ29ubmVjdGlvbixcbiAgVnBuQ29ubmVjdGlvbk9wdGlvbnMsXG4gIFZwbkNvbm5lY3Rpb25UeXBlLFxuICBWcG5HYXRld2F5LFxufSBmcm9tIFwiLi92cG5cIjtcbmltcG9ydCB7IEFjY291bnRQcmluY2lwYWwsIEVmZmVjdCwgUG9saWN5U3RhdGVtZW50LCBSb2xlIH0gZnJvbSBcIi4uL2lhbVwiO1xuaW1wb3J0IHsgSVZQQ0NpZHJCbG9jayB9IGZyb20gXCIuL3ZwYy12MlwiO1xuXG4vKipcbiAqIE9wdGlvbnMgdG8gZGVmaW5lIEVncmVzc09ubHlJbnRlcm5ldEdhdGV3YXkgZm9yIFZQQ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEVncmVzc09ubHlJbnRlcm5ldEdhdGV3YXlPcHRpb25zIHtcbiAgLyoqXG4gICAqIExpc3Qgb2Ygc3VibmV0cyB3aGVyZSByb3V0ZSB0byBFR1cgd2lsbCBiZSBhZGRlZFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIHJvdXRlIGNyZWF0ZWRcbiAgICovXG4gIHJlYWRvbmx5IHN1Ym5ldHM/OiBTdWJuZXRTZWxlY3Rpb25bXTtcblxuICAvKipcbiAgICogRGVzdGluYXRpb24gSXB2NiBhZGRyZXNzIGZvciBFR1cgcm91dGVcbiAgICpcbiAgICogQGRlZmF1bHQgLSAnOjovMCcgYWxsIElwdjYgdHJhZmZpY1xuICAgKi9cbiAgcmVhZG9ubHkgZGVzdGluYXRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSByZXNvdXJjZSBuYW1lIG9mIHRoZSBlZ3Jlc3Mtb25seSBpbnRlcm5ldCBnYXRld2F5LlxuICAgKiBQcm92aWRlZCBuYW1lIHdpbGwgYmUgdXNlZCBmb3IgdGFnZ2luZ1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIG5hbWUgdGFnIGFzc29jaWF0ZWQgYW5kIHByb3Zpc2lvbmVkIHdpdGhvdXQgYSByZXNvdXJjZSBuYW1lXG4gICAqL1xuICByZWFkb25seSBlZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5TmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBPcHRpb25zIHRvIGRlZmluZSBJbnRlcm5ldEdhdGV3YXkgZm9yIFZQQ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEludGVybmV0R2F0ZXdheU9wdGlvbnMge1xuICAvKipcbiAgICogRGVzdGluYXRpb24gSXB2NiBhZGRyZXNzIGZvciBFR1cgcm91dGVcbiAgICpcbiAgICogQGRlZmF1bHQgLSAnMC4wLjAuMCcgYWxsIElwdjQgdHJhZmZpY1xuICAgKi9cbiAgcmVhZG9ubHkgaXB2NERlc3RpbmF0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEZXN0aW5hdGlvbiBJcHY2IGFkZHJlc3MgZm9yIEVHVyByb3V0ZVxuICAgKlxuICAgKiBAZGVmYXVsdCAtICc6Oi8wJyBhbGwgSXB2NiB0cmFmZmljXG4gICAqL1xuICByZWFkb25seSBpcHY2RGVzdGluYXRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSByZXNvdXJjZSBuYW1lIG9mIHRoZSBpbnRlcm5ldCBnYXRld2F5LlxuICAgKiBQcm92aWRlZCBuYW1lIHdpbGwgYmUgdXNlZCBmb3IgdGFnZ2luZ1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIHByb3Zpc2lvbmVkIHdpdGhvdXQgYSByZXNvdXJjZSBuYW1lXG4gICAqL1xuICByZWFkb25seSBpbnRlcm5ldEdhdGV3YXlOYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgdG8gZGVmaW5lIFZQTkdhdGV3YXlWMiBmb3IgVlBDXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVlBOR2F0ZXdheVYyT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBWUE4gY29ubmVjdGlvbiB0aGUgdmlydHVhbCBwcml2YXRlIGdhdGV3YXkgc3VwcG9ydHMuXG4gICAqIEBzZWUgaHR0cDovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLXZwbmdhdGV3YXkuaHRtbCNjZm4tZWMyLXZwbmdhdGV3YXktdHlwZVxuICAgKi9cbiAgcmVhZG9ubHkgdHlwZTogVnBuQ29ubmVjdGlvblR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSBwcml2YXRlIEF1dG9ub21vdXMgU3lzdGVtIE51bWJlciAoQVNOKSBmb3IgdGhlIEFtYXpvbiBzaWRlIG9mIGEgQkdQIHNlc3Npb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gQVNOIHNldCBmb3IgQkdQIHNlc3Npb25cbiAgICovXG4gIHJlYWRvbmx5IGFtYXpvblNpZGVBc24/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSByZXNvdXJjZSBuYW1lIG9mIHRoZSBWUE4gZ2F0ZXdheS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSByZXNvdXJjZSBwcm92aXNpb25lZCB3aXRob3V0IGFueSBuYW1lXG4gICAqL1xuICByZWFkb25seSB2cG5HYXRld2F5TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogU3VibmV0cyB3aGVyZSB0aGUgcm91dGUgcHJvcGFnYXRpb24gc2hvdWxkIGJlIGFkZGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIHByb3BvZ2F0aW9uIGZvciByb3V0ZXNcbiAgICovXG4gIHJlYWRvbmx5IHZwblJvdXRlUHJvcGFnYXRpb24/OiBTdWJuZXRTZWxlY3Rpb25bXTtcbn1cblxuLyoqXG4gKiBQbGFjZWhvbGRlciB0byBzZWUgd2hhdCBleHRyYSBwcm9wcyB3ZSBtaWdodCBuZWVkLFxuICogd2lsbCBiZSBhZGRlZCB0byBvcmlnaW5hbCBJVlBDXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVZwY1YyIGV4dGVuZHMgSVZwYyB7XG4gIC8qKlxuICAgKiBUaGUgc2Vjb25kYXJ5IENJRFIgYmxvY2tzIGFzc29jaWF0ZWQgd2l0aCB0aGUgVlBDLlxuICAgKlxuICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3ZwYy9sYXRlc3QvdXNlcmd1aWRlL3ZwYy1jaWRyLWJsb2Nrcy5odG1sI3ZwYy1yZXNpemV9LlxuICAgKi9cbiAgcmVhZG9ubHkgc2Vjb25kYXJ5Q2lkckJsb2NrPzogSVZQQ0NpZHJCbG9ja1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgcHJpbWFyeSBJUHY0IENJRFIgYmxvY2sgYXNzb2NpYXRlZCB3aXRoIHRoZSBWUEMuXG4gICAqIE5lZWRlZCBpbiBvcmRlciB0byB2YWxpZGF0ZSB0aGUgdnBjIHJhbmdlIG9mIHN1Ym5ldFxuICAgKiBjdXJyZW50IHByb3AgdnBjQ2lkckJsb2NrIHJlZmVycyB0byB0aGUgdG9rZW4gdmFsdWVcbiAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUge0BsaW5rIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS92cGMvbGF0ZXN0L3VzZXJndWlkZS92cGMtY2lkci1ibG9ja3MuaHRtbCN2cGMtc2l6aW5nLWlwdjR9LlxuICAgKi9cbiAgcmVhZG9ubHkgaXB2NENpZHJCbG9jazogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCB0byBvdmVycmlkZSBpbmZlcnJlZCByZWdpb25cbiAgICpcbiAgICogQGRlZmF1bHQgLSBjdXJyZW50IHN0YWNrJ3MgZW52aXJvbm1lbnQgcmVnaW9uXG4gICAqL1xuICByZWFkb25seSByZWdpb246IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBBV1MgYWNjb3VudCB0aGF0IG93bnMgdGhlIFZQQ1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRoZSBhY2NvdW50IGlkIG9mIHRoZSBwYXJlbnQgc3RhY2tcbiAgICovXG4gIHJlYWRvbmx5IG93bmVyQWNjb3VudElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElQdjQgQ0lEUiBwcm92aXNpb25lZCB1bmRlciBwb29sXG4gICAqIFJlcXVpcmVkIHRvIGNoZWNrIGZvciBvdmVybGFwcGluZyBDSURScyBhZnRlciBwcm92aXNpb25pbmdcbiAgICogaXMgY29tcGxldGUgdW5kZXIgSVBBTSBwb29sXG4gICAqL1xuICByZWFkb25seSBpcHY0SXBhbVByb3Zpc2lvbmVkQ2lkcnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVnBjTmFtZSB0byBiZSB1c2VkIGZvciB0YWdnaW5nIGl0cyBjb21wb25lbnRzXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHZwY05hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFkZCBhbiBFZ3Jlc3Mgb25seSBJbnRlcm5ldCBHYXRld2F5IHRvIGN1cnJlbnQgVlBDLlxuICAgKiBDYW4gb25seSBiZSB1c2VkIGZvciBpcHY2IGVuYWJsZWQgVlBDcy5cbiAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUge0BsaW5rIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS92cGMvbGF0ZXN0L3VzZXJndWlkZS9lZ3Jlc3Mtb25seS1pbnRlcm5ldC1nYXRld2F5LWJhc2ljcy5odG1sfS5cbiAgICovXG4gIGFkZEVncmVzc09ubHlJbnRlcm5ldEdhdGV3YXkoXG4gICAgb3B0aW9ucz86IEVncmVzc09ubHlJbnRlcm5ldEdhdGV3YXlPcHRpb25zLFxuICApOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBBZGRzIGFuIEludGVybmV0IEdhdGV3YXkgdG8gY3VycmVudCBWUEMuXG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlIHtAbGluayBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vdnBjL2xhdGVzdC91c2VyZ3VpZGUvdnBjLWlndy1pbnRlcm5ldC1hY2Nlc3MuaHRtbH0uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZGVmaW5lcyByb3V0ZSBmb3IgYWxsIGlwdjQoJzAuMC4wLjAnKSBhbmQgaXB2NiBhZGRyZXNzZXMoJzo6LzAnKVxuICAgKi9cbiAgYWRkSW50ZXJuZXRHYXRld2F5KG9wdGlvbnM/OiBJbnRlcm5ldEdhdGV3YXlPcHRpb25zKTogdm9pZDtcblxuICAvKipcbiAgICogQWRkcyBWUE4gR2F0ZXdheSB0byBWUEMgYW5kIHNldCByb3V0ZSBwcm9wb2dhdGlvbi5cbiAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUge0BsaW5rIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1lYzItdnBuZ2F0ZXdheS5odG1sfS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyByb3V0ZSBwcm9wb2dhdGlvblxuICAgKi9cbiAgZW5hYmxlVnBuR2F0ZXdheVYyKG9wdGlvbnM6IFZQTkdhdGV3YXlWMk9wdGlvbnMpOiBWUE5HYXRld2F5VjI7XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBuZXcgTkFUIEdhdGV3YXkgdG8gVlBDXG4gICAqIEEgTkFUIGdhdGV3YXkgaXMgYSBOZXR3b3JrIEFkZHJlc3MgVHJhbnNsYXRpb24gKE5BVCkgc2VydmljZS4gTkFUIEdhdGV3YXkgQ29ubmVjdGl2aXR5IGNhbiBiZSBvZiB0eXBlIGBQdWJsaWNgIG9yIGBQcml2YXRlYC5cbiAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUge0BsaW5rIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS92cGMvbGF0ZXN0L3VzZXJndWlkZS92cGMtbmF0LWdhdGV3YXkuaHRtbH0uXG4gICAqXG4gICAqIEBkZWZhdWx0IENvbm5lY3Rpdml0eVR5cGUuUHVibGljXG4gICAqL1xuICBhZGROYXRHYXRld2F5KG9wdGlvbnM6IE5hdEdhdGV3YXlPcHRpb25zKTogTmF0R2F0ZXdheTtcblxuICAvKipcbiAgICogQWRkcyBhIG5ldyByb2xlIHRvIGFjY2VwdG9yIFZQQyBhY2NvdW50XG4gICAqIEEgY3Jvc3MgYWNjb3VudCByb2xlIGlzIHJlcXVpcmVkIGZvciB0aGUgVlBDIHRvIHBlZXIgd2l0aCBhbm90aGVyIGFjY291bnQuXG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlIHtAbGluayBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9wZWVyLXdpdGgtdnBjLWluLWFub3RoZXItYWNjb3VudC5odG1sfS5cbiAgICovXG4gIGNyZWF0ZUFjY2VwdG9yVnBjUm9sZShyZXF1ZXN0b3JBY2NvdW50SWQ6IHN0cmluZyk6IFJvbGU7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgcGVlcmluZyBjb25uZWN0aW9uXG4gICAqIEEgcGVlcmluZyBjb25uZWN0aW9uIGlzIGEgcHJpdmF0ZSB2aXJ0dWFsIG5ldHdvcmsgZXN0YWJsaXNoZWQgYmV0d2VlbiB0d28gVlBDcy5cbiAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUge0BsaW5rIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS92cGMvbGF0ZXN0L3BlZXJpbmcvd2hhdC1pcy12cGMtcGVlcmluZy5odG1sfS5cbiAgICovXG4gIGNyZWF0ZVBlZXJpbmdDb25uZWN0aW9uKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgb3B0aW9uczogVlBDUGVlcmluZ0Nvbm5lY3Rpb25PcHRpb25zLFxuICApOiBWUENQZWVyaW5nQ29ubmVjdGlvbjtcbn1cblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBjcmVhdGluZyBhIFZQQyAoVmlydHVhbCBQcml2YXRlIENsb3VkKSBpbiBBV1MuXG4gKlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUge0BsaW5rIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jZGsvYXBpL3YyL2RvY3MvYXdzLWNkay1saWIuYXdzX2VjMi5WcGMuaHRtbHxBV1MgQ0RLIERvY3VtZW50YXRpb24gb24gVlBDc30uXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBWcGNWMkJhc2UgZXh0ZW5kcyBBd3NDb25zdHJ1Y3RCYXNlIGltcGxlbWVudHMgSVZwY1YyIHtcbiAgLyoqXG4gICAqIElkZW50aWZpZXIgZm9yIHRoaXMgVlBDXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgdnBjSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogQXJuIG9mIHRoaXMgVlBDXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgdnBjQXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENJRFIgcmFuZ2UgZm9yIHRoaXMgVlBDXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgdnBjQ2lkckJsb2NrOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIExpc3Qgb2YgcHVibGljIHN1Ym5ldHMgaW4gdGhpcyBWUENcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwdWJsaWNTdWJuZXRzOiBJU3VibmV0W10gPSBbXTtcblxuICAvKipcbiAgICogTGlzdCBvZiBwcml2YXRlIHN1Ym5ldHMgaW4gdGhpcyBWUENcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwcml2YXRlU3VibmV0czogSVN1Ym5ldFtdID0gW107XG5cbiAgLyoqXG4gICAqIExpc3Qgb2YgaXNvbGF0ZWQgc3VibmV0cyBpbiB0aGlzIFZQQ1xuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGlzb2xhdGVkU3VibmV0czogSVN1Ym5ldFtdO1xuXG4gIC8qKlxuICAgKiBBWnMgZm9yIHRoaXMgVlBDXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYXZhaWxhYmlsaXR5Wm9uZXM6IHN0cmluZ1tdID0gW107XG5cbiAgLyoqXG4gICAqIERlcGVuZGFibGUgdGhhdCBjYW4gYmUgZGVwZW5kZWQgdXBvbiB0byBmb3JjZSBpbnRlcm5ldCBjb25uZWN0aXZpdHkgZXN0YWJsaXNoZWQgb24gdGhlIFZQQ1xuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGludGVybmV0Q29ubmVjdGl2aXR5RXN0YWJsaXNoZWQ6IElEZXBlbmRhYmxlO1xuXG4gIC8qKlxuICAgKiBEZXBlbmRhYmxlIHRoYXQgY2FuIGJlIGRlcGVuZGVkIHVwb24gdG8gZm9yY2UgaW50ZXJuZXQgY29ubmVjdGl2aXR5IGVzdGFibGlzaGVkIG9uIHRoZSBWUENcbiAgICogQWRkIGlndyB0byB0aGlzIGlmIGl0cyBhIHB1YmxpYyBzdWJuZXRcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2ludGVybmV0Q29ubmVjdGl2aXR5RXN0YWJsaXNoZWQgPSBuZXcgRGVwZW5kZW5jeUdyb3VwKCk7XG5cbiAgLyoqXG4gICAqIFNlY29uZGFyeSBJUHMgZm9yIHRoZSBWUEMsIGNhbiBiZSBtdWx0aXBsZSBJcHY0IG9yIElwdjZcbiAgICogSXB2NCBzaG91bGQgYmUgd2l0aGluIFJGQyMxOTE4IHJhbmdlXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgc2Vjb25kYXJ5Q2lkckJsb2NrPzogSVZQQ0NpZHJCbG9ja1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgcHJpbWFyeSBJUHY0IENJRFIgYmxvY2sgYXNzb2NpYXRlZCB3aXRoIHRoZSBWUEMuXG4gICAqIE5lZWRlZCBpbiBvcmRlciB0byB2YWxpZGF0ZSB0aGUgdnBjIHJhbmdlIG9mIHN1Ym5ldFxuICAgKiBjdXJyZW50IHByb3AgdnBjQ2lkckJsb2NrIHJlZmVycyB0byB0aGUgdG9rZW4gdmFsdWVcbiAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUge0BsaW5rIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS92cGMvbGF0ZXN0L3VzZXJndWlkZS92cGMtY2lkci1ibG9ja3MuaHRtbCN2cGMtc2l6aW5nLWlwdjR9LlxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGlwdjRDaWRyQmxvY2s6IHN0cmluZztcblxuICAvKipcbiAgICogVnBjTmFtZSB0byBiZSB1c2VkIGZvciB0YWdnaW5nIGl0cyBjb21wb25lbnRzXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgdnBjTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogUmVnaW9uIGZvciB0aGlzIFZQQ1xuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IHJlZ2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJZGVudGlmaWVyIG9mIHRoZSBvd25lciBmb3IgdGhpcyBWUENcbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBvd25lckFjY291bnRJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJUHY0IENJRFIgcHJvdmlzaW9uZWQgdW5kZXIgcG9vbFxuICAgKiBSZXF1aXJlZCB0byBjaGVjayBmb3Igb3ZlcmxhcHBpbmcgQ0lEUnMgYWZ0ZXIgcHJvdmlzaW9uaW5nXG4gICAqIGlzIGNvbXBsZXRlIHVuZGVyIElQQU0gcG9vbFxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGlwdjRJcGFtUHJvdmlzaW9uZWRDaWRycz86IHN0cmluZ1tdO1xuXG4gIHB1YmxpYyBnZXQgdnBjT3V0cHV0cygpOiBWcGNPdXRwdXRzIHtcbiAgICByZXR1cm4ge1xuICAgICAgYXZhaWxhYmlsaXR5Wm9uZXM6IHRoaXMuYXZhaWxhYmlsaXR5Wm9uZXMsXG4gICAgICBpc29sYXRlZFN1Ym5ldElkczogdGhpcy5pc29sYXRlZFN1Ym5ldHMubWFwKChzKSA9PiBzLnN1Ym5ldElkKSxcbiAgICAgIHByaXZhdGVTdWJuZXRJZHM6IHRoaXMucHJpdmF0ZVN1Ym5ldHMubWFwKChzKSA9PiBzLnN1Ym5ldElkKSxcbiAgICAgIHB1YmxpY1N1Ym5ldElkczogdGhpcy5wdWJsaWNTdWJuZXRzLm1hcCgocykgPT4gcy5zdWJuZXRJZCksXG4gICAgICB2cGNBcm46IHRoaXMudnBjQXJuLFxuICAgICAgdnBjQ2lkckJsb2NrOiB0aGlzLnZwY0NpZHJCbG9jayxcbiAgICAgIHZwY0lkOiB0aGlzLnZwY0lkLFxuICAgICAgdnBuR2F0ZXdheUlkOiB0aGlzLnZwbkdhdGV3YXlJZCxcbiAgICB9O1xuICB9XG4gIHB1YmxpYyBnZXQgb3V0cHV0cygpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICByZXR1cm4gdGhpcy52cGNPdXRwdXRzO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIHRoaXMgaXMgc2V0IHRvIHRydWUsIGRvbid0IGVycm9yIG91dCBvbiB0cnlpbmcgdG8gc2VsZWN0IHN1Ym5ldHNcbiAgICovXG4gIHByb3RlY3RlZCBpbmNvbXBsZXRlU3VibmV0RGVmaW5pdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBNdXRhYmxlIHByaXZhdGUgZmllbGQgZm9yIHRoZSB2cG5HYXRld2F5SWRcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcm90ZWN0ZWQgX3ZwbkdhdGV3YXlJZD86IHN0cmluZztcblxuICAvKipcbiAgICogTXV0YWJsZSBwcml2YXRlIGZpZWxkIGZvciB0aGUgaW50ZXJuZXRHYXRld2F5SWRcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcm90ZWN0ZWQgX2ludGVybmV0R2F0ZXdheUlkID0gXCJcIjtcblxuICAvKipcbiAgICogUmV0dXJuIGluZm9ybWF0aW9uIG9uIHRoZSBzdWJuZXRzIGFwcHJvcHJpYXRlIGZvciB0aGUgZ2l2ZW4gc2VsZWN0aW9uIHN0cmF0ZWd5XG4gICAqXG4gICAqIFJlcXVpcmVzIHRoYXQgYXQgbGVhc3Qgb25lIHN1Ym5ldCBpcyBtYXRjaGVkLCB0aHJvd3MgYSBkZXNjcmlwdGl2ZVxuICAgKiBlcnJvciBtZXNzYWdlIG90aGVyd2lzZS5cbiAgICovXG4gIHB1YmxpYyBzZWxlY3RTdWJuZXRzKHNlbGVjdGlvbjogU3VibmV0U2VsZWN0aW9uID0ge30pOiBTZWxlY3RlZFN1Ym5ldHMge1xuICAgIGNvbnN0IHN1Ym5ldHMgPSB0aGlzLnNlbGVjdFN1Ym5ldE9iamVjdHMoc2VsZWN0aW9uKTtcbiAgICBjb25zdCBwdWJzID0gbmV3IFNldCh0aGlzLnB1YmxpY1N1Ym5ldHMpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHN1Ym5ldElkczogc3VibmV0cy5tYXAoKHMpID0+IHMuc3VibmV0SWQpLFxuICAgICAgZ2V0IGF2YWlsYWJpbGl0eVpvbmVzKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIHN1Ym5ldHMubWFwKChzKSA9PiBzLmF2YWlsYWJpbGl0eVpvbmUpO1xuICAgICAgfSxcbiAgICAgIGludGVybmV0Q29ubmVjdGl2aXR5RXN0YWJsaXNoZWQ6IHRhcChuZXcgQ29tcG9zaXRlRGVwZW5kYWJsZSgpLCAoZCkgPT5cbiAgICAgICAgc3VibmV0cy5mb3JFYWNoKChzKSA9PiBkLmFkZChzLmludGVybmV0Q29ubmVjdGl2aXR5RXN0YWJsaXNoZWQpKSxcbiAgICAgICksXG4gICAgICBzdWJuZXRzLFxuICAgICAgaGFzUHVibGljOiBzdWJuZXRzLnNvbWUoKHMpID0+IHB1YnMuaGFzKHMpKSxcbiAgICAgIGlzUGVuZGluZ0xvb2t1cDogdGhpcy5pbmNvbXBsZXRlU3VibmV0RGVmaW5pdGlvbixcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBWUE4gR2F0ZXdheSB0byB0aGlzIFZQQ1xuICAgKiBAZGVwcmVjYXRlZCB1c2UgZW5hYmxlVnBuR2F0ZXdheVYyIGZvciBjb21wYXRpYmlsaXR5IHdpdGggVlBDVjIuUm91dGVcbiAgICovXG4gIHB1YmxpYyBlbmFibGVWcG5HYXRld2F5KG9wdGlvbnM6IEVuYWJsZVZwbkdhdGV3YXlPcHRpb25zKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudnBuR2F0ZXdheUlkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgVlBOIEdhdGV3YXkgaGFzIGFscmVhZHkgYmVlbiBlbmFibGVkLlwiKTtcbiAgICB9XG5cbiAgICBjb25zdCB2cG5HYXRld2F5ID0gbmV3IFZwbkdhdGV3YXkodGhpcywgXCJWcG5HYXRld2F5XCIsIHtcbiAgICAgIGFtYXpvblNpZGVBc246IG9wdGlvbnMuYW1hem9uU2lkZUFzbixcbiAgICAgIHR5cGU6IFZwbkNvbm5lY3Rpb25UeXBlLklQU0VDXzEsXG4gICAgfSk7XG5cbiAgICB0aGlzLl92cG5HYXRld2F5SWQgPSB2cG5HYXRld2F5LmdhdGV3YXlJZDtcblxuICAgIGNvbnN0IGF0dGFjaG1lbnQgPSBuZXcgdnBuR2F0ZXdheUF0dGFjaG1lbnQuVnBuR2F0ZXdheUF0dGFjaG1lbnQoXG4gICAgICB0aGlzLFxuICAgICAgXCJWUENWUE5HV1wiLFxuICAgICAge1xuICAgICAgICB2cGNJZDogdGhpcy52cGNJZCxcbiAgICAgICAgdnBuR2F0ZXdheUlkOiB0aGlzLl92cG5HYXRld2F5SWQsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICAvLyBQcm9wYWdhdGUgcm91dGVzIG9uIHJvdXRlIHRhYmxlcyBhc3NvY2lhdGVkIHdpdGggdGhlIHJpZ2h0IHN1Ym5ldHNcbiAgICBjb25zdCB2cG5Sb3V0ZVByb3BhZ2F0aW9uID0gb3B0aW9ucy52cG5Sb3V0ZVByb3BhZ2F0aW9uID8/IFt7fV07XG4gICAgY29uc3Qgcm91dGVUYWJsZUlkcyA9IGFsbFJvdXRlVGFibGVJZHMoXG4gICAgICBmbGF0dGVuKHZwblJvdXRlUHJvcGFnYXRpb24ubWFwKChzKSA9PiB0aGlzLnNlbGVjdFN1Ym5ldHMocykuc3VibmV0cykpLFxuICAgICk7XG5cbiAgICBpZiAocm91dGVUYWJsZUlkcy5sZW5ndGggPT09IDApIHtcbiAgICAgIEFubm90YXRpb25zLm9mKHRoaXMpLmFkZEVycm9yKFxuICAgICAgICBgZW5hYmxlVnBuR2F0ZXdheTogbm8gc3VibmV0cyBtYXRjaGluZyBzZWxlY3Rpb246ICcke0pTT04uc3RyaW5naWZ5KHZwblJvdXRlUHJvcGFnYXRpb24pfScuIFNlbGVjdCBvdGhlciBzdWJuZXRzIHRvIGFkZCByb3V0ZXMgdG8uYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3V0ZVRhYmxlSWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCByb3V0ZVByb3BhZ2F0aW9uID1cbiAgICAgICAgbmV3IHZwbkdhdGV3YXlSb3V0ZVByb3BhZ2F0aW9uLlZwbkdhdGV3YXlSb3V0ZVByb3BhZ2F0aW9uKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgYFJvdXRlUHJvcGFnYXRpb24ke2l9YCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICByb3V0ZVRhYmxlSWQ6IHJvdXRlVGFibGVJZHNbaV0sXG4gICAgICAgICAgICB2cG5HYXRld2F5SWQ6IHRoaXMuX3ZwbkdhdGV3YXlJZCxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgLy8gVGhlIEFXUzo6RUMyOjpWUE5HYXRld2F5Um91dGVQcm9wYWdhdGlvbiByZXNvdXJjZSBjYW5ub3QgdXNlIHRoZSBWUE4gZ2F0ZXdheVxuICAgICAgLy8gdW50aWwgaXQgaGFzIHN1Y2Nlc3NmdWxseSBhdHRhY2hlZCB0byB0aGUgVlBDLlxuICAgICAgLy8gU2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1lYzItdnBuLWdhdGV3YXlyb3V0ZXByb3AuaHRtbFxuICAgICAgcm91dGVQcm9wYWdhdGlvbi5ub2RlLmFkZERlcGVuZGVuY3koYXR0YWNobWVudCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgVlBOR0F0ZXdheVYyIHRvIHRoaXMgVlBDXG4gICAqL1xuICBwdWJsaWMgZW5hYmxlVnBuR2F0ZXdheVYyKG9wdGlvbnM6IFZQTkdhdGV3YXlWMk9wdGlvbnMpOiBWUE5HYXRld2F5VjIge1xuICAgIGlmICh0aGlzLnZwbkdhdGV3YXlJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIFZQTiBHYXRld2F5IGhhcyBhbHJlYWR5IGJlZW4gZW5hYmxlZC5cIik7XG4gICAgfVxuXG4gICAgY29uc3QgdnBuR2F0ZXdheSA9IG5ldyBWUE5HYXRld2F5VjIodGhpcywgXCJWcG5HYXRld2F5XCIsIHtcbiAgICAgIHZwYzogdGhpcyxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSk7XG5cbiAgICB0aGlzLl9pbnRlcm5ldENvbm5lY3Rpdml0eUVzdGFibGlzaGVkLmFkZCh2cG5HYXRld2F5KTtcbiAgICB0aGlzLl92cG5HYXRld2F5SWQgPSB2cG5HYXRld2F5LnJvdXRlclRhcmdldElkO1xuXG4gICAgcmV0dXJuIHZwbkdhdGV3YXk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIG5ldyBWUE4gY29ubmVjdGlvbiB0byB0aGlzIFZQQ1xuICAgKi9cbiAgcHVibGljIGFkZFZwbkNvbm5lY3Rpb24oXG4gICAgaWQ6IHN0cmluZyxcbiAgICBvcHRpb25zOiBWcG5Db25uZWN0aW9uT3B0aW9ucyxcbiAgKTogVnBuQ29ubmVjdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBWcG5Db25uZWN0aW9uKHRoaXMsIGlkLCB7XG4gICAgICB2cGM6IHRoaXMsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBuZXcgY2xpZW50IFZQTiBlbmRwb2ludCB0byB0aGlzIFZQQ1xuICAgKi9cbiAgcHVibGljIGFkZENsaWVudFZwbkVuZHBvaW50KFxuICAgIGlkOiBzdHJpbmcsXG4gICAgb3B0aW9uczogQ2xpZW50VnBuRW5kcG9pbnRPcHRpb25zLFxuICApOiBDbGllbnRWcG5FbmRwb2ludCB7XG4gICAgcmV0dXJuIG5ldyBDbGllbnRWcG5FbmRwb2ludCh0aGlzLCBpZCwge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIHZwYzogdGhpcyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgbmV3IGludGVyZmFjZSBlbmRwb2ludCB0byB0aGlzIFZQQ1xuICAgKi9cbiAgcHVibGljIGFkZEludGVyZmFjZUVuZHBvaW50KFxuICAgIGlkOiBzdHJpbmcsXG4gICAgb3B0aW9uczogSW50ZXJmYWNlVnBjRW5kcG9pbnRPcHRpb25zLFxuICApOiBJbnRlcmZhY2VWcGNFbmRwb2ludCB7XG4gICAgcmV0dXJuIG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludCh0aGlzLCBpZCwge1xuICAgICAgdnBjOiB0aGlzLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgbmV3IGdhdGV3YXkgZW5kcG9pbnQgdG8gdGhpcyBWUENcbiAgICovXG4gIHB1YmxpYyBhZGRHYXRld2F5RW5kcG9pbnQoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBvcHRpb25zOiBHYXRld2F5VnBjRW5kcG9pbnRPcHRpb25zLFxuICApOiBHYXRld2F5VnBjRW5kcG9pbnQge1xuICAgIHJldHVybiBuZXcgR2F0ZXdheVZwY0VuZHBvaW50KHRoaXMsIGlkLCB7XG4gICAgICB2cGM6IHRoaXMsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBuZXcgRWdyZXNzIE9ubHkgSW50ZXJuZXQgR2F0ZXdheSB0byB0aGlzIFZQQyBhbmQgZGVmaW5lcyBhIG5ldyByb3V0ZVxuICAgKiB0byB0aGUgcm91dGUgdGFibGUgb2YgZ2l2ZW4gc3VibmV0cy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBpbiBjYXNlIG9mIG5vIGlucHV0IHN1Ym5ldHMsIG5vIHJvdXRlIGlzIGNyZWF0ZWRcbiAgICovXG4gIHB1YmxpYyBhZGRFZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5KFxuICAgIG9wdGlvbnM/OiBFZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5T3B0aW9ucyxcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgZWd3ID0gbmV3IEVncmVzc09ubHlJbnRlcm5ldEdhdGV3YXkodGhpcywgXCJFZ3Jlc3NPbmx5R1dcIiwge1xuICAgICAgdnBjOiB0aGlzLFxuICAgICAgZWdyZXNzT25seUludGVybmV0R2F0ZXdheU5hbWU6IG9wdGlvbnM/LmVncmVzc09ubHlJbnRlcm5ldEdhdGV3YXlOYW1lLFxuICAgIH0pO1xuXG4gICAgbGV0IHVzZUlwdjY7XG4gICAgaWYgKHRoaXMuc2Vjb25kYXJ5Q2lkckJsb2NrKSB7XG4gICAgICB1c2VJcHY2ID0gdGhpcy5zZWNvbmRhcnlDaWRyQmxvY2suc29tZShcbiAgICAgICAgKHNlY29uZGFyeUFkZHJlc3MpID0+XG4gICAgICAgICAgc2Vjb25kYXJ5QWRkcmVzcy5hbWF6b25Qcm92aWRlZElwdjZDaWRyQmxvY2sgPT09IHRydWUgfHxcbiAgICAgICAgICBzZWNvbmRhcnlBZGRyZXNzLmlwdjZJcGFtUG9vbElkICE9IHVuZGVmaW5lZCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCF1c2VJcHY2KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFZ3Jlc3Mgb25seSBJR1cgY2FuIG9ubHkgYmUgYWRkZWQgdG8gSXB2NiBlbmFibGVkIFZQQ1wiKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucz8uc3VibmV0cykge1xuICAgICAgY29uc3Qgc3VibmV0cyA9IGZsYXR0ZW4oXG4gICAgICAgIG9wdGlvbnMuc3VibmV0cy5tYXAoKHMpID0+IHRoaXMuc2VsZWN0U3VibmV0cyhzKS5zdWJuZXRzKSxcbiAgICAgICk7XG4gICAgICBzdWJuZXRzLmZvckVhY2goKHN1Ym5ldCkgPT4ge1xuICAgICAgICB0aGlzLmNyZWF0ZUVncmVzc1JvdXRlKHN1Ym5ldCwgZWd3LCBvcHRpb25zLmRlc3RpbmF0aW9uKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgcm91dGUgZm9yIEVHVyB3aXRoIGRlc3RpbmF0aW9uIHNldCB0byBvdXRib3VuZCBJUHY2KCc6Oi8wJykgb3IgY3VzdG9tIGlwdjYgYWRkcmVzcy5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZUVncmVzc1JvdXRlKFxuICAgIHN1Ym5ldDogSVN1Ym5ldFYyLFxuICAgIGVndzogRWdyZXNzT25seUludGVybmV0R2F0ZXdheSxcbiAgICBkZXN0aW5hdGlvbj86IHN0cmluZyxcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgZGVzdGluYXRpb25JcHY2ID0gZGVzdGluYXRpb24gPz8gXCI6Oi8wXCI7XG4gICAgbmV3IFJvdXRlKHRoaXMsIGAke3N1Ym5ldC5ub2RlLmlkfS1FZ3Jlc3NSb3V0ZWAsIHtcbiAgICAgIHJvdXRlVGFibGU6IHN1Ym5ldC5yb3V0ZVRhYmxlLFxuICAgICAgZGVzdGluYXRpb246IGRlc3RpbmF0aW9uSXB2NiwgLy8gSVB2NiBkZWZhdWx0IHJvdXRlXG4gICAgICB0YXJnZXQ6IHsgZ2F0ZXdheTogZWd3IH0sXG4gICAgICByb3V0ZU5hbWU6IFwiQ0RLRUlHV1JvdXRlXCIsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIG5ldyBJbnRlcm5ldCBHYXRld2F5IHRvIHRoaXMgVlBDXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gY3JlYXRlcyBhIG5ldyByb3V0ZSBmb3IgcHVibGljIHN1Ym5ldHMod2l0aCBhbGwgb3V0Ym91bmQgYWNjZXNzKSB0byB0aGUgSW50ZXJuZXQgR2F0ZXdheS5cbiAgICovXG4gIHB1YmxpYyBhZGRJbnRlcm5ldEdhdGV3YXkob3B0aW9ucz86IEludGVybmV0R2F0ZXdheU9wdGlvbnMpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5faW50ZXJuZXRHYXRld2F5SWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBJbnRlcm5ldCBHYXRld2F5IGhhcyBhbHJlYWR5IGJlZW4gZW5hYmxlZC5cIik7XG4gICAgfVxuXG4gICAgY29uc3QgaWd3ID0gbmV3IEludGVybmV0R2F0ZXdheSh0aGlzLCBcIkludGVybmV0R2F0ZXdheVwiLCB7XG4gICAgICB2cGM6IHRoaXMsXG4gICAgICBpbnRlcm5ldEdhdGV3YXlOYW1lOiBvcHRpb25zPy5pbnRlcm5ldEdhdGV3YXlOYW1lLFxuICAgIH0pO1xuXG4gICAgdGhpcy5faW50ZXJuZXRDb25uZWN0aXZpdHlFc3RhYmxpc2hlZC5hZGQoaWd3KTtcbiAgICB0aGlzLl9pbnRlcm5ldEdhdGV3YXlJZCA9IGlndy5yb3V0ZXJUYXJnZXRJZDtcblxuICAgIC8vIElmIHRoZXJlIGFyZSBubyBwdWJsaWMgc3VibmV0cyBkZWZpbmVkLCBubyBkZWZhdWx0IHJvdXRlIHdpbGwgYmUgYWRkZWRcbiAgICBpZiAodGhpcy5wdWJsaWNTdWJuZXRzKSB7XG4gICAgICB0aGlzLnB1YmxpY1N1Ym5ldHMuZm9yRWFjaCgocykgPT5cbiAgICAgICAgdGhpcy5hZGREZWZhdWx0SW50ZXJuZXRSb3V0ZShzLCBpZ3csIG9wdGlvbnMpLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBkZWZhdWx0IHJvdXRlIGZvciB0aGUgaW50ZXJuZXQgZ2F0ZXdheVxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByaXZhdGUgYWRkRGVmYXVsdEludGVybmV0Um91dGUoXG4gICAgc3VibmV0OiBJU3VibmV0VjIsXG4gICAgaWd3OiBJbnRlcm5ldEdhdGV3YXksXG4gICAgb3B0aW9ucz86IEludGVybmV0R2F0ZXdheU9wdGlvbnMsXG4gICk6IHZvaWQge1xuICAgIGlmIChzdWJuZXQuc3VibmV0VHlwZSAhPT0gU3VibmV0VHlwZS5QVUJMSUMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJObyBwdWJsaWMgc3VibmV0cyBkZWZpbmVkIHRvIGFkZCByb3V0ZSBmb3IgaW50ZXJuZXQgZ2F0ZXdheVwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBBZGQgZGVmYXVsdCByb3V0ZSB0byBJR1cgZm9yIElQdjZcbiAgICBpZiAoc3VibmV0LmlwdjZDaWRyQmxvY2spIHtcbiAgICAgIG5ldyBSb3V0ZSh0aGlzLCBgJHtzdWJuZXQubm9kZS5pZH0tRGVmYXVsdElQdjZSb3V0ZWAsIHtcbiAgICAgICAgcm91dGVUYWJsZTogc3VibmV0LnJvdXRlVGFibGUsXG4gICAgICAgIGRlc3RpbmF0aW9uOiBvcHRpb25zPy5pcHY2RGVzdGluYXRpb24gPz8gXCI6Oi8wXCIsXG4gICAgICAgIHRhcmdldDogeyBnYXRld2F5OiBpZ3cgfSxcbiAgICAgICAgcm91dGVOYW1lOiBcIkNES0RlZmF1bHRJUHY2Um91dGVcIixcbiAgICAgIH0pO1xuICAgIH1cbiAgICAvL0FkZCBkZWZhdWx0IHJvdXRlIHRvIElHVyBmb3IgSVB2NFxuICAgIG5ldyBSb3V0ZSh0aGlzLCBgJHtzdWJuZXQubm9kZS5pZH0tRGVmYXVsdFJvdXRlYCwge1xuICAgICAgcm91dGVUYWJsZTogc3VibmV0LnJvdXRlVGFibGUsXG4gICAgICBkZXN0aW5hdGlvbjogb3B0aW9ucz8uaXB2NERlc3RpbmF0aW9uID8/IFwiMC4wLjAuMC8wXCIsXG4gICAgICB0YXJnZXQ6IHsgZ2F0ZXdheTogaWd3IH0sXG4gICAgICByb3V0ZU5hbWU6IFwiQ0RLRGVmYXVsdElQdjRSb3V0ZVwiLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBuZXcgTkFUIEdhdGV3YXkgdG8gdGhlIGdpdmVuIHN1Ym5ldCBvZiB0aGlzIFZQQ1xuICAgKiBvZiBnaXZlbiBzdWJuZXRzLlxuICAgKi9cbiAgcHVibGljIGFkZE5hdEdhdGV3YXkob3B0aW9uczogTmF0R2F0ZXdheU9wdGlvbnMpOiBOYXRHYXRld2F5IHtcbiAgICBpZiAoXG4gICAgICBvcHRpb25zLmNvbm5lY3Rpdml0eVR5cGUgPT09IE5hdENvbm5lY3Rpdml0eVR5cGUuUFVCTElDICYmXG4gICAgICAhdGhpcy5faW50ZXJuZXRHYXRld2F5SWRcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJDYW5ub3QgYWRkIGEgUHVibGljIE5BVCBHYXRld2F5IHdpdGhvdXQgYW4gSW50ZXJuZXQgR2F0ZXdheSBlbmFibGVkIG9uIFZQQ1wiLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBOYXRHYXRld2F5KHRoaXMsIFwiTkFUR2F0ZXdheVwiLCB7XG4gICAgICB2cGM6IHRoaXMsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBuZXcgZmxvdyBsb2cgdG8gdGhpcyBWUENcbiAgICovXG4gIHB1YmxpYyBhZGRGbG93TG9nKGlkOiBzdHJpbmcsIG9wdGlvbnM/OiBGbG93TG9nT3B0aW9ucyk6IEZsb3dMb2cge1xuICAgIHJldHVybiBuZXcgRmxvd0xvZyh0aGlzLCBpZCwge1xuICAgICAgcmVzb3VyY2VUeXBlOiBGbG93TG9nUmVzb3VyY2VUeXBlLmZyb21WcGModGhpcyksXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgcGVlcmluZyBjb25uZWN0aW9uIHJvbGUgZm9yIGFjY2VwdG9yIFZQQ1xuICAgKi9cbiAgcHVibGljIGNyZWF0ZUFjY2VwdG9yVnBjUm9sZShyZXF1ZXN0b3JBY2NvdW50SWQ6IHN0cmluZyk6IFJvbGUge1xuICAgIGNvbnN0IHBlZXJpbmdSb2xlID0gbmV3IFJvbGUodGhpcywgXCJWcGNQZWVyaW5nUm9sZVwiLCB7XG4gICAgICBhc3N1bWVkQnk6IG5ldyBBY2NvdW50UHJpbmNpcGFsKHJlcXVlc3RvckFjY291bnRJZCksXG4gICAgICByb2xlTmFtZTogXCJWcGNQZWVyaW5nUm9sZVwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiUmVzdHJpY3RpdmUgcm9sZSBmb3IgVlBDIHBlZXJpbmdcIixcbiAgICB9KTtcblxuICAgIHBlZXJpbmdSb2xlLmFkZFRvUG9saWN5KFxuICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgICBhY3Rpb25zOiBbXCJlYzI6QWNjZXB0VnBjUGVlcmluZ0Nvbm5lY3Rpb25cIl0sXG4gICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgIGBhcm46JHtBd3NTdGFjay5vZkF3c0NvbnN0cnVjdCh0aGlzKS5wYXJ0aXRpb259OmVjMjoke3RoaXMucmVnaW9ufToke3RoaXMub3duZXJBY2NvdW50SWR9OnZwYy8ke3RoaXMudnBjSWR9YCxcbiAgICAgICAgXSxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICBwZWVyaW5nUm9sZS5hZGRUb1BvbGljeShcbiAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBhY3Rpb25zOiBbXCJlYzI6QWNjZXB0VnBjUGVlcmluZ0Nvbm5lY3Rpb25cIl0sXG4gICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICBgYXJuOiR7QXdzU3RhY2sub2ZBd3NDb25zdHJ1Y3QodGhpcykucGFydGl0aW9ufTplYzI6JHt0aGlzLnJlZ2lvbn06JHt0aGlzLm93bmVyQWNjb3VudElkfTp2cGMtcGVlcmluZy1jb25uZWN0aW9uLypgLFxuICAgICAgICBdLFxuICAgICAgICBjb25kaXRpb246IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0ZXN0OiBcIlN0cmluZ0VxdWFsc1wiLFxuICAgICAgICAgICAgdmFyaWFibGU6IFwiZWMyOkFjY2VwdGVyVnBjXCIsXG4gICAgICAgICAgICB2YWx1ZXM6IFtcbiAgICAgICAgICAgICAgYGFybjoke0F3c1N0YWNrLm9mQXdzQ29uc3RydWN0KHRoaXMpLnBhcnRpdGlvbn06ZWMyOiR7dGhpcy5yZWdpb259OiR7dGhpcy5vd25lckFjY291bnRJZH06dnBjLyR7dGhpcy52cGNJZH1gLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIHJldHVybiBwZWVyaW5nUm9sZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgcGVlcmluZyBjb25uZWN0aW9uXG4gICAqL1xuICBwdWJsaWMgY3JlYXRlUGVlcmluZ0Nvbm5lY3Rpb24oXG4gICAgaWQ6IHN0cmluZyxcbiAgICBvcHRpb25zOiBWUENQZWVyaW5nQ29ubmVjdGlvbk9wdGlvbnMsXG4gICk6IFZQQ1BlZXJpbmdDb25uZWN0aW9uIHtcbiAgICByZXR1cm4gbmV3IFZQQ1BlZXJpbmdDb25uZWN0aW9uKHRoaXMsIGlkLCB7XG4gICAgICByZXF1ZXN0b3JWcGM6IHRoaXMsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGlkIG9mIHRoZSBWUE4gR2F0ZXdheSAoaWYgZW5hYmxlZClcbiAgICovXG4gIHB1YmxpYyBnZXQgdnBuR2F0ZXdheUlkKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3ZwbkdhdGV3YXlJZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBpZCBvZiB0aGUgSW50ZXJuZXQgR2F0ZXdheSAoaWYgZW5hYmxlZClcbiAgICovXG4gIHB1YmxpYyBnZXQgaW50ZXJuZXRHYXRld2F5SWQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5faW50ZXJuZXRHYXRld2F5SWQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBzdWJuZXRzIGFwcHJvcHJpYXRlIGZvciB0aGUgcGxhY2VtZW50IHN0cmF0ZWd5XG4gICAqL1xuICBwcm90ZWN0ZWQgc2VsZWN0U3VibmV0T2JqZWN0cyhzZWxlY3Rpb246IFN1Ym5ldFNlbGVjdGlvbiA9IHt9KTogSVN1Ym5ldFtdIHtcbiAgICBzZWxlY3Rpb24gPSB0aGlzLnJlaWZ5U2VsZWN0aW9uRGVmYXVsdHMoc2VsZWN0aW9uKTtcblxuICAgIGlmIChzZWxlY3Rpb24uc3VibmV0cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gc2VsZWN0aW9uLnN1Ym5ldHM7XG4gICAgfVxuXG4gICAgbGV0IHN1Ym5ldHM7XG5cbiAgICBpZiAoc2VsZWN0aW9uLnN1Ym5ldEdyb3VwTmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBTZWxlY3QgYnkgbmFtZVxuICAgICAgc3VibmV0cyA9IHRoaXMuc2VsZWN0U3VibmV0T2JqZWN0c0J5TmFtZShzZWxlY3Rpb24uc3VibmV0R3JvdXBOYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gT3Igc3BlY2lmeSBieSB0eXBlXG4gICAgICBjb25zdCB0eXBlID0gc2VsZWN0aW9uLnN1Ym5ldFR5cGUgfHwgU3VibmV0VHlwZS5QUklWQVRFX1dJVEhfRUdSRVNTO1xuICAgICAgc3VibmV0cyA9IHRoaXMuc2VsZWN0U3VibmV0T2JqZWN0c0J5VHlwZSh0eXBlKTtcbiAgICB9XG5cbiAgICAvLyBBcHBseSBhbGwgdGhlIGZpbHRlcnNcbiAgICBzdWJuZXRzID0gdGhpcy5hcHBseVN1Ym5ldEZpbHRlcnMoc3VibmV0cywgc2VsZWN0aW9uLnN1Ym5ldEZpbHRlcnMgPz8gW10pO1xuXG4gICAgcmV0dXJuIHN1Ym5ldHM7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5U3VibmV0RmlsdGVycyhcbiAgICBzdWJuZXRzOiBJU3VibmV0W10sXG4gICAgZmlsdGVyczogU3VibmV0RmlsdGVyW10sXG4gICk6IElTdWJuZXRbXSB7XG4gICAgbGV0IGZpbHRlcmVkID0gc3VibmV0cztcbiAgICAvLyBBcHBseSBlYWNoIGZpbHRlciBpbiBzZXF1ZW5jZVxuICAgIGZvciAoY29uc3QgZmlsdGVyIG9mIGZpbHRlcnMpIHtcbiAgICAgIGZpbHRlcmVkID0gZmlsdGVyLnNlbGVjdFN1Ym5ldHMoZmlsdGVyZWQpO1xuICAgIH1cbiAgICByZXR1cm4gZmlsdGVyZWQ7XG4gIH1cblxuICBwcml2YXRlIHNlbGVjdFN1Ym5ldE9iamVjdHNCeU5hbWUoZ3JvdXBOYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBhbGxTdWJuZXRzID0gW1xuICAgICAgLi4udGhpcy5wdWJsaWNTdWJuZXRzLFxuICAgICAgLi4udGhpcy5wcml2YXRlU3VibmV0cyxcbiAgICAgIC4uLnRoaXMuaXNvbGF0ZWRTdWJuZXRzLFxuICAgIF07XG4gICAgY29uc3Qgc3VibmV0cyA9IGFsbFN1Ym5ldHMuZmlsdGVyKFxuICAgICAgKHMpID0+IHN1Ym5ldEdyb3VwTmFtZUZyb21Db25zdHJ1Y3RJZChzKSA9PT0gZ3JvdXBOYW1lLFxuICAgICk7XG5cbiAgICBpZiAoc3VibmV0cy5sZW5ndGggPT09IDAgJiYgIXRoaXMuaW5jb21wbGV0ZVN1Ym5ldERlZmluaXRpb24pIHtcbiAgICAgIGNvbnN0IG5hbWVzID0gQXJyYXkuZnJvbShcbiAgICAgICAgbmV3IFNldChhbGxTdWJuZXRzLm1hcChzdWJuZXRHcm91cE5hbWVGcm9tQ29uc3RydWN0SWQpKSxcbiAgICAgICk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBUaGVyZSBhcmUgbm8gc3VibmV0IGdyb3VwcyB3aXRoIG5hbWUgJyR7Z3JvdXBOYW1lfScgaW4gdGhpcyBWUEMuIEF2YWlsYWJsZSBuYW1lczogJHtuYW1lc31gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3VibmV0cztcbiAgfVxuXG4gIHByaXZhdGUgc2VsZWN0U3VibmV0T2JqZWN0c0J5VHlwZShzdWJuZXRUeXBlOiBTdWJuZXRUeXBlKSB7XG4gICAgY29uc3QgYWxsU3VibmV0cyA9IHtcbiAgICAgIFtTdWJuZXRUeXBlLlBSSVZBVEVfSVNPTEFURURdOiB0aGlzLmlzb2xhdGVkU3VibmV0cyxcbiAgICAgIFtTdWJuZXRUeXBlLklTT0xBVEVEXTogdGhpcy5pc29sYXRlZFN1Ym5ldHMsXG4gICAgICBbU3VibmV0VHlwZS5QUklWQVRFX1dJVEhfTkFUXTogdGhpcy5wcml2YXRlU3VibmV0cyxcbiAgICAgIFtTdWJuZXRUeXBlLlBSSVZBVEVfV0lUSF9FR1JFU1NdOiB0aGlzLnByaXZhdGVTdWJuZXRzLFxuICAgICAgW1N1Ym5ldFR5cGUuUFJJVkFURV06IHRoaXMucHJpdmF0ZVN1Ym5ldHMsXG4gICAgICBbU3VibmV0VHlwZS5QVUJMSUNdOiB0aGlzLnB1YmxpY1N1Ym5ldHMsXG4gICAgfTtcblxuICAgIGNvbnN0IHN1Ym5ldHMgPSBhbGxTdWJuZXRzW3N1Ym5ldFR5cGVdO1xuXG4gICAgLy8gRm9yY2UgbWVyZ2UgY29uZmxpY3QgaGVyZSB3aXRoIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9wdWxsLzQwODlcbiAgICAvLyBzZWUgSW1wb3J0ZWRWcGNcblxuICAgIGlmIChzdWJuZXRzLmxlbmd0aCA9PT0gMCAmJiAhdGhpcy5pbmNvbXBsZXRlU3VibmV0RGVmaW5pdGlvbikge1xuICAgICAgY29uc3QgYXZhaWxhYmxlVHlwZXMgPSBPYmplY3QuZW50cmllcyhhbGxTdWJuZXRzKVxuICAgICAgICAuZmlsdGVyKChbXywgc3Vic10pID0+IHN1YnMubGVuZ3RoID4gMClcbiAgICAgICAgLm1hcCgoW3R5cGVOYW1lLCBfXSkgPT4gdHlwZU5hbWUpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVGhlcmUgYXJlIG5vICcke3N1Ym5ldFR5cGV9JyBzdWJuZXQgZ3JvdXBzIGluIHRoaXMgVlBDLiBBdmFpbGFibGUgdHlwZXM6ICR7YXZhaWxhYmxlVHlwZXN9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1Ym5ldHM7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgdGhlIGZpZWxkcyBpbiBhIFN1Ym5ldFNlbGVjdGlvbiBvYmplY3QsIGFuZCByZWlmeSBkZWZhdWx0cyBpZiBuZWNlc3NhcnlcbiAgICpcbiAgICogSW4gY2FzZSBvZiBkZWZhdWx0IHNlbGVjdGlvbiwgc2VsZWN0IHRoZSBmaXJzdCB0eXBlIG9mIFBSSVZBVEUsIElTT0xBVEVELFxuICAgKiBQVUJMSUMgKGluIHRoYXQgb3JkZXIpIHRoYXQgaGFzIGFueSBzdWJuZXRzLlxuICAgKi9cbiAgcHJpdmF0ZSByZWlmeVNlbGVjdGlvbkRlZmF1bHRzKHBsYWNlbWVudDogU3VibmV0U2VsZWN0aW9uKTogU3VibmV0U2VsZWN0aW9uIHtcbiAgICAvLyBUT0RPOiB0aHJvdyBlcnJvciBhcyBuZXcgVnBjVjIgY2Fubm90IHN1cHBvcnQgc3VibmV0TmFtZSBvciBzdWJuZXRHcm91cE5hbWUgYW55bW9yZVxuICAgIGlmIChwbGFjZW1lbnQuc3VibmV0TmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAocGxhY2VtZW50LnN1Ym5ldEdyb3VwTmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBcIlBsZWFzZSB1c2Ugb25seSAnc3VibmV0R3JvdXBOYW1lJyAoJ3N1Ym5ldE5hbWUnIGlzIGRlcHJlY2F0ZWQgYW5kIGhhcyB0aGUgc2FtZSBiZWhhdmlvcilcIixcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFwiQGF3cy1jZGsvYXdzLWVjMjpzdWJuZXROYW1lRGVwcmVjYXRlZFwiLFxuICAgICAgICBBbm5vdGF0aW9ucy5vZih0aGlzKS5hZGRXYXJuaW5nKFxuICAgICAgICAgIFwiVXNhZ2Ugb2YgJ3N1Ym5ldE5hbWUnIGluIFN1Ym5ldFNlbGVjdGlvbiBpcyBkZXByZWNhdGVkLCB1c2UgJ3N1Ym5ldEdyb3VwTmFtZScgaW5zdGVhZFwiLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcGxhY2VtZW50ID0geyAuLi5wbGFjZW1lbnQsIHN1Ym5ldEdyb3VwTmFtZTogcGxhY2VtZW50LnN1Ym5ldE5hbWUgfTtcbiAgICB9XG5cbiAgICBjb25zdCBleGNsdXNpdmVTZWxlY3Rpb25zOiBBcnJheTxrZXlvZiBTdWJuZXRTZWxlY3Rpb24+ID0gW1xuICAgICAgXCJzdWJuZXRzXCIsXG4gICAgICBcInN1Ym5ldFR5cGVcIixcbiAgICAgIFwic3VibmV0R3JvdXBOYW1lXCIsXG4gICAgXTtcbiAgICBjb25zdCBwcm92aWRlZFNlbGVjdGlvbnMgPSBleGNsdXNpdmVTZWxlY3Rpb25zLmZpbHRlcihcbiAgICAgIChrZXkpID0+IHBsYWNlbWVudFtrZXldICE9PSB1bmRlZmluZWQsXG4gICAgKTtcbiAgICBpZiAocHJvdmlkZWRTZWxlY3Rpb25zLmxlbmd0aCA+IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYE9ubHkgb25lIG9mICcke3Byb3ZpZGVkU2VsZWN0aW9uc30nIGNhbiBiZSBzdXBwbGllZCB0byBzdWJuZXQgc2VsZWN0aW9uLmAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHBsYWNlbWVudC5zdWJuZXRUeXBlID09PSB1bmRlZmluZWQgJiZcbiAgICAgIHBsYWNlbWVudC5zdWJuZXRHcm91cE5hbWUgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgcGxhY2VtZW50LnN1Ym5ldHMgPT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgLy8gUmV0dXJuIGRlZmF1bHQgc3VibmV0IHR5cGUgYmFzZWQgb24gc3VibmV0cyB0aGF0IGFjdHVhbGx5IGV4aXN0XG4gICAgICBsZXQgc3VibmV0VHlwZSA9IHRoaXMucHJpdmF0ZVN1Ym5ldHMubGVuZ3RoXG4gICAgICAgID8gU3VibmV0VHlwZS5QUklWQVRFX1dJVEhfRUdSRVNTXG4gICAgICAgIDogdGhpcy5pc29sYXRlZFN1Ym5ldHMubGVuZ3RoXG4gICAgICAgICAgPyBTdWJuZXRUeXBlLlBSSVZBVEVfSVNPTEFURURcbiAgICAgICAgICA6IFN1Ym5ldFR5cGUuUFVCTElDO1xuICAgICAgcGxhY2VtZW50ID0geyAuLi5wbGFjZW1lbnQsIHN1Ym5ldFR5cGU6IHN1Ym5ldFR5cGUgfTtcbiAgICB9XG5cbiAgICAvLyBFc3RhYmxpc2ggd2hpY2ggc3VibmV0IGZpbHRlcnMgYXJlIGdvaW5nIHRvIGJlIHVzZWRcbiAgICBsZXQgc3VibmV0RmlsdGVycyA9IHBsYWNlbWVudC5zdWJuZXRGaWx0ZXJzID8/IFtdO1xuXG4gICAgLy8gQmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBleGlzdGluZyBgYXZhaWxhYmlsaXR5Wm9uZXNgIGFuZCBgb25lUGVyQXpgIGZ1bmN0aW9uYWxpdHlcbiAgICBpZiAocGxhY2VtZW50LmF2YWlsYWJpbGl0eVpvbmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIEZpbHRlciBieSBBWnMsIGlmIHNwZWNpZmllZFxuICAgICAgc3VibmV0RmlsdGVycy5wdXNoKFxuICAgICAgICBTdWJuZXRGaWx0ZXIuYXZhaWxhYmlsaXR5Wm9uZXMocGxhY2VtZW50LmF2YWlsYWJpbGl0eVpvbmVzKSxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghIXBsYWNlbWVudC5vbmVQZXJBeikge1xuICAgICAgLy8gRW5zdXJlIG9uZSBwZXIgQVogaWYgc3BlY2lmaWVkXG4gICAgICBzdWJuZXRGaWx0ZXJzLnB1c2goU3VibmV0RmlsdGVyLm9uZVBlckF6KCkpO1xuICAgIH1cblxuICAgIC8vIE92ZXJ3cml0ZSB0aGUgcHJvdmlkZWQgcGxhY2VtZW50IGZpbHRlcnMgYW5kIHJlbW92ZSB0aGUgYXZhaWxhYmlsaXR5Wm9uZXMgYW5kIG9uZVBlckF6IHByb3BlcnRpZXNcbiAgICBwbGFjZW1lbnQgPSB7XG4gICAgICAuLi5wbGFjZW1lbnQsXG4gICAgICBzdWJuZXRGaWx0ZXJzOiBzdWJuZXRGaWx0ZXJzLFxuICAgICAgYXZhaWxhYmlsaXR5Wm9uZXM6IHVuZGVmaW5lZCxcbiAgICAgIG9uZVBlckF6OiB1bmRlZmluZWQsXG4gICAgfTtcbiAgICBjb25zdCB7IGF2YWlsYWJpbGl0eVpvbmVzLCBvbmVQZXJBeiwgLi4ucmVzdCB9ID0gcGxhY2VtZW50O1xuXG4gICAgcmV0dXJuIHJlc3Q7XG4gIH1cbn1cblxuY2xhc3MgQ29tcG9zaXRlRGVwZW5kYWJsZSBpbXBsZW1lbnRzIElEZXBlbmRhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBkZXBlbmRhYmxlcyA9IG5ldyBBcnJheTxJRGVwZW5kYWJsZT4oKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBEZXBlbmRhYmxlLmltcGxlbWVudCh0aGlzLCB7XG4gICAgICBnZXQgZGVwZW5kZW5jeVJvb3RzKCkge1xuICAgICAgICBjb25zdCByZXQgPSBuZXcgQXJyYXk8SUNvbnN0cnVjdD4oKTtcbiAgICAgICAgZm9yIChjb25zdCBkZXAgb2Ygc2VsZi5kZXBlbmRhYmxlcykge1xuICAgICAgICAgIHJldC5wdXNoKC4uLkRlcGVuZGFibGUub2YoZGVwKS5kZXBlbmRlbmN5Um9vdHMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIGNvbnN0cnVjdCB0byB0aGUgZGVwZW5kZW5jeSByb290c1xuICAgKi9cbiAgcHVibGljIGFkZChkZXA6IElEZXBlbmRhYmxlKSB7XG4gICAgdGhpcy5kZXBlbmRhYmxlcy5wdXNoKGRlcCk7XG4gIH1cbn1cblxuLyoqXG4gKiBJbnZva2UgYSBmdW5jdGlvbiBvbiBhIHZhbHVlIChmb3IgaXRzIHNpZGUgZWZmZWN0KSBhbmQgcmV0dXJuIHRoZSB2YWx1ZVxuICovXG5mdW5jdGlvbiB0YXA8VD4oeDogVCwgZm46ICh4OiBUKSA9PiB2b2lkKTogVCB7XG4gIGZuKHgpO1xuICByZXR1cm4geDtcbn1cbiJdfQ==
|
|
493
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidnBjLXYyLWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXdzL2NvbXB1dGUvdnBjLXYyLWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxrR0FBa0c7QUFFbEcsc0RBRzZCO0FBQzdCLGlDQUFvQztBQUNwQywyQ0FLb0I7QUFDcEIscUNBQXdDO0FBQ3hDLG9EQUFvRDtBQUNwRCw0Q0FBd0M7QUFDeEMsK0RBRytCO0FBQy9CLHlDQUlvQjtBQUNwQixtQ0FVaUI7QUFFakIsK0JBT2U7QUFDZixpREFLd0I7QUFDeEIsbURBQStFO0FBQy9FLCtCQU1lO0FBQ2YsZ0NBQXlFO0FBNEx6RTs7OztHQUlHO0FBQ0gsTUFBc0IsU0FBVSxTQUFRLGdDQUFnQjtJQUF4RDs7UUFnQkU7O1dBRUc7UUFDYSxrQkFBYSxHQUFjLEVBQUUsQ0FBQztRQUU5Qzs7V0FFRztRQUNhLG1CQUFjLEdBQWMsRUFBRSxDQUFDO1FBTy9DOztXQUVHO1FBQ2Esc0JBQWlCLEdBQWEsRUFBRSxDQUFDO1FBT2pEOzs7O1dBSUc7UUFDZ0IscUNBQWdDLEdBQUcsSUFBSSw0QkFBZSxFQUFFLENBQUM7UUFzRDVFOztXQUVHO1FBQ08sK0JBQTBCLEdBQVksS0FBSyxDQUFDO1FBUXREOzs7V0FHRztRQUNPLHVCQUFrQixHQUFHLEVBQUUsQ0FBQztLQStnQm5DO0lBOWlCQyxJQUFXLFVBQVU7UUFDbkIsT0FBTztZQUNMLGlCQUFpQixFQUFFLElBQUksQ0FBQyxpQkFBaUI7WUFDekMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7WUFDOUQsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7WUFDNUQsZUFBZSxFQUFFLElBQUks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T0FBTyxDQUFDLENBQUM7QUFDWCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvdjIuMTc1LjEvcGFja2FnZXMvQGF3cy1jZGsvYXdzLWVjMi1hbHBoYS9saWIvdnBjLXYyLWJhc2UudHNcblxuaW1wb3J0IHtcbiAgdnBuR2F0ZXdheUF0dGFjaG1lbnQsXG4gIHZwbkdhdGV3YXlSb3V0ZVByb3BhZ2F0aW9uLFxufSBmcm9tIFwiQGNka3RuL3Byb3ZpZGVyLWF3c1wiO1xuaW1wb3J0IHsgQW5ub3RhdGlvbnMgfSBmcm9tIFwiY2RrdG5cIjtcbmltcG9ydCB7XG4gIElEZXBlbmRhYmxlLFxuICBEZXBlbmRhYmxlLFxuICBJQ29uc3RydWN0LFxuICBEZXBlbmRlbmN5R3JvdXAsXG59IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBTdWJuZXRGaWx0ZXIgfSBmcm9tIFwiLi9zdWJuZXRcIjtcbmltcG9ydCB7IEF3c0NvbnN0cnVjdEJhc2UgfSBmcm9tIFwiLi4vYXdzLWNvbnN0cnVjdFwiO1xuaW1wb3J0IHsgQXdzU3RhY2sgfSBmcm9tIFwiLi4vYXdzLXN0YWNrXCI7XG5pbXBvcnQge1xuICBDbGllbnRWcG5FbmRwb2ludE9wdGlvbnMsXG4gIENsaWVudFZwbkVuZHBvaW50LFxufSBmcm9tIFwiLi9jbGllbnQtdnBuLWVuZHBvaW50XCI7XG5pbXBvcnQge1xuICBhbGxSb3V0ZVRhYmxlSWRzLFxuICBmbGF0dGVuLFxuICBzdWJuZXRHcm91cE5hbWVGcm9tQ29uc3RydWN0SWQsXG59IGZyb20gXCIuL2VjMi11dGlsXCI7XG5pbXBvcnQge1xuICBFZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5LFxuICBJbnRlcm5ldEdhdGV3YXksXG4gIE5hdENvbm5lY3Rpdml0eVR5cGUsXG4gIE5hdEdhdGV3YXksXG4gIE5hdEdhdGV3YXlPcHRpb25zLFxuICBSb3V0ZSxcbiAgVlBDUGVlcmluZ0Nvbm5lY3Rpb24sXG4gIFZQQ1BlZXJpbmdDb25uZWN0aW9uT3B0aW9ucyxcbiAgVlBOR2F0ZXdheVYyLFxufSBmcm9tIFwiLi9yb3V0ZVwiO1xuaW1wb3J0IHsgSVN1Ym5ldFYyIH0gZnJvbSBcIi4vc3VibmV0LXYyXCI7XG5pbXBvcnQge1xuICBWcGNPdXRwdXRzLFxuICBJVnBjLFxuICBJU3VibmV0LFxuICBTdWJuZXRTZWxlY3Rpb24sXG4gIFNlbGVjdGVkU3VibmV0cyxcbiAgU3VibmV0VHlwZSxcbn0gZnJvbSBcIi4vdnBjXCI7XG5pbXBvcnQge1xuICBJbnRlcmZhY2VWcGNFbmRwb2ludE9wdGlvbnMsXG4gIEludGVyZmFjZVZwY0VuZHBvaW50LFxuICBHYXRld2F5VnBjRW5kcG9pbnRPcHRpb25zLFxuICBHYXRld2F5VnBjRW5kcG9pbnQsXG59IGZyb20gXCIuL3ZwYy1lbmRwb2ludFwiO1xuaW1wb3J0IHsgRmxvd0xvZ09wdGlvbnMsIEZsb3dMb2csIEZsb3dMb2dSZXNvdXJjZVR5cGUgfSBmcm9tIFwiLi92cGMtZmxvdy1sb2dzXCI7XG5pbXBvcnQge1xuICBFbmFibGVWcG5HYXRld2F5T3B0aW9ucyxcbiAgVnBuQ29ubmVjdGlvbixcbiAgVnBuQ29ubmVjdGlvbk9wdGlvbnMsXG4gIFZwbkNvbm5lY3Rpb25UeXBlLFxuICBWcG5HYXRld2F5LFxufSBmcm9tIFwiLi92cG5cIjtcbmltcG9ydCB7IEFjY291bnRQcmluY2lwYWwsIEVmZmVjdCwgUG9saWN5U3RhdGVtZW50LCBSb2xlIH0gZnJvbSBcIi4uL2lhbVwiO1xuaW1wb3J0IHsgSVZQQ0NpZHJCbG9jayB9IGZyb20gXCIuL3ZwYy12MlwiO1xuXG4vKipcbiAqIE9wdGlvbnMgdG8gZGVmaW5lIEVncmVzc09ubHlJbnRlcm5ldEdhdGV3YXkgZm9yIFZQQ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEVncmVzc09ubHlJbnRlcm5ldEdhdGV3YXlPcHRpb25zIHtcbiAgLyoqXG4gICAqIExpc3Qgb2Ygc3VibmV0cyB3aGVyZSByb3V0ZSB0byBFR1cgd2lsbCBiZSBhZGRlZFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIHJvdXRlIGNyZWF0ZWRcbiAgICovXG4gIHJlYWRvbmx5IHN1Ym5ldHM/OiBTdWJuZXRTZWxlY3Rpb25bXTtcblxuICAvKipcbiAgICogRGVzdGluYXRpb24gSXB2NiBhZGRyZXNzIGZvciBFR1cgcm91dGVcbiAgICpcbiAgICogQGRlZmF1bHQgLSAnOjovMCcgYWxsIElwdjYgdHJhZmZpY1xuICAgKi9cbiAgcmVhZG9ubHkgZGVzdGluYXRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSByZXNvdXJjZSBuYW1lIG9mIHRoZSBlZ3Jlc3Mtb25seSBpbnRlcm5ldCBnYXRld2F5LlxuICAgKiBQcm92aWRlZCBuYW1lIHdpbGwgYmUgdXNlZCBmb3IgdGFnZ2luZ1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIG5hbWUgdGFnIGFzc29jaWF0ZWQgYW5kIHByb3Zpc2lvbmVkIHdpdGhvdXQgYSByZXNvdXJjZSBuYW1lXG4gICAqL1xuICByZWFkb25seSBlZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5TmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBPcHRpb25zIHRvIGRlZmluZSBJbnRlcm5ldEdhdGV3YXkgZm9yIFZQQ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEludGVybmV0R2F0ZXdheU9wdGlvbnMge1xuICAvKipcbiAgICogRGVzdGluYXRpb24gSXB2NiBhZGRyZXNzIGZvciBFR1cgcm91dGVcbiAgICpcbiAgICogQGRlZmF1bHQgLSAnMC4wLjAuMCcgYWxsIElwdjQgdHJhZmZpY1xuICAgKi9cbiAgcmVhZG9ubHkgaXB2NERlc3RpbmF0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEZXN0aW5hdGlvbiBJcHY2IGFkZHJlc3MgZm9yIEVHVyByb3V0ZVxuICAgKlxuICAgKiBAZGVmYXVsdCAtICc6Oi8wJyBhbGwgSXB2NiB0cmFmZmljXG4gICAqL1xuICByZWFkb25seSBpcHY2RGVzdGluYXRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSByZXNvdXJjZSBuYW1lIG9mIHRoZSBpbnRlcm5ldCBnYXRld2F5LlxuICAgKiBQcm92aWRlZCBuYW1lIHdpbGwgYmUgdXNlZCBmb3IgdGFnZ2luZ1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIHByb3Zpc2lvbmVkIHdpdGhvdXQgYSByZXNvdXJjZSBuYW1lXG4gICAqL1xuICByZWFkb25seSBpbnRlcm5ldEdhdGV3YXlOYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgdG8gZGVmaW5lIFZQTkdhdGV3YXlWMiBmb3IgVlBDXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVlBOR2F0ZXdheVYyT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBWUE4gY29ubmVjdGlvbiB0aGUgdmlydHVhbCBwcml2YXRlIGdhdGV3YXkgc3VwcG9ydHMuXG4gICAqIEBzZWUgaHR0cDovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLXZwbmdhdGV3YXkuaHRtbCNjZm4tZWMyLXZwbmdhdGV3YXktdHlwZVxuICAgKi9cbiAgcmVhZG9ubHkgdHlwZTogVnBuQ29ubmVjdGlvblR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSBwcml2YXRlIEF1dG9ub21vdXMgU3lzdGVtIE51bWJlciAoQVNOKSBmb3IgdGhlIEFtYXpvbiBzaWRlIG9mIGEgQkdQIHNlc3Npb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gQVNOIHNldCBmb3IgQkdQIHNlc3Npb25cbiAgICovXG4gIHJlYWRvbmx5IGFtYXpvblNpZGVBc24/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSByZXNvdXJjZSBuYW1lIG9mIHRoZSBWUE4gZ2F0ZXdheS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSByZXNvdXJjZSBwcm92aXNpb25lZCB3aXRob3V0IGFueSBuYW1lXG4gICAqL1xuICByZWFkb25seSB2cG5HYXRld2F5TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogU3VibmV0cyB3aGVyZSB0aGUgcm91dGUgcHJvcGFnYXRpb24gc2hvdWxkIGJlIGFkZGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIHByb3BvZ2F0aW9uIGZvciByb3V0ZXNcbiAgICovXG4gIHJlYWRvbmx5IHZwblJvdXRlUHJvcGFnYXRpb24/OiBTdWJuZXRTZWxlY3Rpb25bXTtcbn1cblxuLyoqXG4gKiBQbGFjZWhvbGRlciB0byBzZWUgd2hhdCBleHRyYSBwcm9wcyB3ZSBtaWdodCBuZWVkLFxuICogd2lsbCBiZSBhZGRlZCB0byBvcmlnaW5hbCBJVlBDXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVZwY1YyIGV4dGVuZHMgSVZwYyB7XG4gIC8qKlxuICAgKiBUaGUgc2Vjb25kYXJ5IENJRFIgYmxvY2tzIGFzc29jaWF0ZWQgd2l0aCB0aGUgVlBDLlxuICAgKlxuICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3ZwYy9sYXRlc3QvdXNlcmd1aWRlL3ZwYy1jaWRyLWJsb2Nrcy5odG1sI3ZwYy1yZXNpemV9LlxuICAgKi9cbiAgcmVhZG9ubHkgc2Vjb25kYXJ5Q2lkckJsb2NrPzogSVZQQ0NpZHJCbG9ja1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgcHJpbWFyeSBJUHY0IENJRFIgYmxvY2sgYXNzb2NpYXRlZCB3aXRoIHRoZSBWUEMuXG4gICAqIE5lZWRlZCBpbiBvcmRlciB0byB2YWxpZGF0ZSB0aGUgdnBjIHJhbmdlIG9mIHN1Ym5ldFxuICAgKiBjdXJyZW50IHByb3AgdnBjQ2lkckJsb2NrIHJlZmVycyB0byB0aGUgdG9rZW4gdmFsdWVcbiAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUge0BsaW5rIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS92cGMvbGF0ZXN0L3VzZXJndWlkZS92cGMtY2lkci1ibG9ja3MuaHRtbCN2cGMtc2l6aW5nLWlwdjR9LlxuICAgKi9cbiAgcmVhZG9ubHkgaXB2NENpZHJCbG9jazogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCB0byBvdmVycmlkZSBpbmZlcnJlZCByZWdpb25cbiAgICpcbiAgICogQGRlZmF1bHQgLSBjdXJyZW50IHN0YWNrJ3MgZW52aXJvbm1lbnQgcmVnaW9uXG4gICAqL1xuICByZWFkb25seSByZWdpb246IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBBV1MgYWNjb3VudCB0aGF0IG93bnMgdGhlIFZQQ1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRoZSBhY2NvdW50IGlkIG9mIHRoZSBwYXJlbnQgc3RhY2tcbiAgICovXG4gIHJlYWRvbmx5IG93bmVyQWNjb3VudElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElQdjQgQ0lEUiBwcm92aXNpb25lZCB1bmRlciBwb29sXG4gICAqIFJlcXVpcmVkIHRvIGNoZWNrIGZvciBvdmVybGFwcGluZyBDSURScyBhZnRlciBwcm92aXNpb25pbmdcbiAgICogaXMgY29tcGxldGUgdW5kZXIgSVBBTSBwb29sXG4gICAqL1xuICByZWFkb25seSBpcHY0SXBhbVByb3Zpc2lvbmVkQ2lkcnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVnBjTmFtZSB0byBiZSB1c2VkIGZvciB0YWdnaW5nIGl0cyBjb21wb25lbnRzXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHZwY05hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFkZCBhbiBFZ3Jlc3Mgb25seSBJbnRlcm5ldCBHYXRld2F5IHRvIGN1cnJlbnQgVlBDLlxuICAgKiBDYW4gb25seSBiZSB1c2VkIGZvciBpcHY2IGVuYWJsZWQgVlBDcy5cbiAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUge0BsaW5rIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS92cGMvbGF0ZXN0L3VzZXJndWlkZS9lZ3Jlc3Mtb25seS1pbnRlcm5ldC1nYXRld2F5LWJhc2ljcy5odG1sfS5cbiAgICovXG4gIGFkZEVncmVzc09ubHlJbnRlcm5ldEdhdGV3YXkoXG4gICAgb3B0aW9ucz86IEVncmVzc09ubHlJbnRlcm5ldEdhdGV3YXlPcHRpb25zLFxuICApOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBBZGRzIGFuIEludGVybmV0IEdhdGV3YXkgdG8gY3VycmVudCBWUEMuXG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlIHtAbGluayBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vdnBjL2xhdGVzdC91c2VyZ3VpZGUvdnBjLWlndy1pbnRlcm5ldC1hY2Nlc3MuaHRtbH0uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZGVmaW5lcyByb3V0ZSBmb3IgYWxsIGlwdjQoJzAuMC4wLjAnKSBhbmQgaXB2NiBhZGRyZXNzZXMoJzo6LzAnKVxuICAgKi9cbiAgYWRkSW50ZXJuZXRHYXRld2F5KG9wdGlvbnM/OiBJbnRlcm5ldEdhdGV3YXlPcHRpb25zKTogdm9pZDtcblxuICAvKipcbiAgICogQWRkcyBWUE4gR2F0ZXdheSB0byBWUEMgYW5kIHNldCByb3V0ZSBwcm9wb2dhdGlvbi5cbiAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUge0BsaW5rIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1lYzItdnBuZ2F0ZXdheS5odG1sfS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyByb3V0ZSBwcm9wb2dhdGlvblxuICAgKi9cbiAgZW5hYmxlVnBuR2F0ZXdheVYyKG9wdGlvbnM6IFZQTkdhdGV3YXlWMk9wdGlvbnMpOiBWUE5HYXRld2F5VjI7XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBuZXcgTkFUIEdhdGV3YXkgdG8gVlBDXG4gICAqIEEgTkFUIGdhdGV3YXkgaXMgYSBOZXR3b3JrIEFkZHJlc3MgVHJhbnNsYXRpb24gKE5BVCkgc2VydmljZS4gTkFUIEdhdGV3YXkgQ29ubmVjdGl2aXR5IGNhbiBiZSBvZiB0eXBlIGBQdWJsaWNgIG9yIGBQcml2YXRlYC5cbiAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUge0BsaW5rIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS92cGMvbGF0ZXN0L3VzZXJndWlkZS92cGMtbmF0LWdhdGV3YXkuaHRtbH0uXG4gICAqXG4gICAqIEBkZWZhdWx0IENvbm5lY3Rpdml0eVR5cGUuUHVibGljXG4gICAqL1xuICBhZGROYXRHYXRld2F5KG9wdGlvbnM6IE5hdEdhdGV3YXlPcHRpb25zKTogTmF0R2F0ZXdheTtcblxuICAvKipcbiAgICogQWRkcyBhIG5ldyByb2xlIHRvIGFjY2VwdG9yIFZQQyBhY2NvdW50XG4gICAqIEEgY3Jvc3MgYWNjb3VudCByb2xlIGlzIHJlcXVpcmVkIGZvciB0aGUgVlBDIHRvIHBlZXIgd2l0aCBhbm90aGVyIGFjY291bnQuXG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlIHtAbGluayBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9wZWVyLXdpdGgtdnBjLWluLWFub3RoZXItYWNjb3VudC5odG1sfS5cbiAgICovXG4gIGNyZWF0ZUFjY2VwdG9yVnBjUm9sZShyZXF1ZXN0b3JBY2NvdW50SWQ6IHN0cmluZyk6IFJvbGU7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgcGVlcmluZyBjb25uZWN0aW9uXG4gICAqIEEgcGVlcmluZyBjb25uZWN0aW9uIGlzIGEgcHJpdmF0ZSB2aXJ0dWFsIG5ldHdvcmsgZXN0YWJsaXNoZWQgYmV0d2VlbiB0d28gVlBDcy5cbiAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUge0BsaW5rIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS92cGMvbGF0ZXN0L3BlZXJpbmcvd2hhdC1pcy12cGMtcGVlcmluZy5odG1sfS5cbiAgICovXG4gIGNyZWF0ZVBlZXJpbmdDb25uZWN0aW9uKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgb3B0aW9uczogVlBDUGVlcmluZ0Nvbm5lY3Rpb25PcHRpb25zLFxuICApOiBWUENQZWVyaW5nQ29ubmVjdGlvbjtcbn1cblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBjcmVhdGluZyBhIFZQQyAoVmlydHVhbCBQcml2YXRlIENsb3VkKSBpbiBBV1MuXG4gKlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUge0BsaW5rIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jZGsvYXBpL3YyL2RvY3MvYXdzLWNkay1saWIuYXdzX2VjMi5WcGMuaHRtbHxBV1MgQ0RLIERvY3VtZW50YXRpb24gb24gVlBDc30uXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBWcGNWMkJhc2UgZXh0ZW5kcyBBd3NDb25zdHJ1Y3RCYXNlIGltcGxlbWVudHMgSVZwY1YyIHtcbiAgLyoqXG4gICAqIElkZW50aWZpZXIgZm9yIHRoaXMgVlBDXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgdnBjSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogQXJuIG9mIHRoaXMgVlBDXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgdnBjQXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENJRFIgcmFuZ2UgZm9yIHRoaXMgVlBDXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgdnBjQ2lkckJsb2NrOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIExpc3Qgb2YgcHVibGljIHN1Ym5ldHMgaW4gdGhpcyBWUENcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwdWJsaWNTdWJuZXRzOiBJU3VibmV0W10gPSBbXTtcblxuICAvKipcbiAgICogTGlzdCBvZiBwcml2YXRlIHN1Ym5ldHMgaW4gdGhpcyBWUENcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwcml2YXRlU3VibmV0czogSVN1Ym5ldFtdID0gW107XG5cbiAgLyoqXG4gICAqIExpc3Qgb2YgaXNvbGF0ZWQgc3VibmV0cyBpbiB0aGlzIFZQQ1xuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGlzb2xhdGVkU3VibmV0czogSVN1Ym5ldFtdO1xuXG4gIC8qKlxuICAgKiBBWnMgZm9yIHRoaXMgVlBDXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYXZhaWxhYmlsaXR5Wm9uZXM6IHN0cmluZ1tdID0gW107XG5cbiAgLyoqXG4gICAqIERlcGVuZGFibGUgdGhhdCBjYW4gYmUgZGVwZW5kZWQgdXBvbiB0byBmb3JjZSBpbnRlcm5ldCBjb25uZWN0aXZpdHkgZXN0YWJsaXNoZWQgb24gdGhlIFZQQ1xuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGludGVybmV0Q29ubmVjdGl2aXR5RXN0YWJsaXNoZWQ6IElEZXBlbmRhYmxlO1xuXG4gIC8qKlxuICAgKiBEZXBlbmRhYmxlIHRoYXQgY2FuIGJlIGRlcGVuZGVkIHVwb24gdG8gZm9yY2UgaW50ZXJuZXQgY29ubmVjdGl2aXR5IGVzdGFibGlzaGVkIG9uIHRoZSBWUENcbiAgICogQWRkIGlndyB0byB0aGlzIGlmIGl0cyBhIHB1YmxpYyBzdWJuZXRcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2ludGVybmV0Q29ubmVjdGl2aXR5RXN0YWJsaXNoZWQgPSBuZXcgRGVwZW5kZW5jeUdyb3VwKCk7XG5cbiAgLyoqXG4gICAqIFNlY29uZGFyeSBJUHMgZm9yIHRoZSBWUEMsIGNhbiBiZSBtdWx0aXBsZSBJcHY0IG9yIElwdjZcbiAgICogSXB2NCBzaG91bGQgYmUgd2l0aGluIFJGQyMxOTE4IHJhbmdlXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgc2Vjb25kYXJ5Q2lkckJsb2NrPzogSVZQQ0NpZHJCbG9ja1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgcHJpbWFyeSBJUHY0IENJRFIgYmxvY2sgYXNzb2NpYXRlZCB3aXRoIHRoZSBWUEMuXG4gICAqIE5lZWRlZCBpbiBvcmRlciB0byB2YWxpZGF0ZSB0aGUgdnBjIHJhbmdlIG9mIHN1Ym5ldFxuICAgKiBjdXJyZW50IHByb3AgdnBjQ2lkckJsb2NrIHJlZmVycyB0byB0aGUgdG9rZW4gdmFsdWVcbiAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUge0BsaW5rIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS92cGMvbGF0ZXN0L3VzZXJndWlkZS92cGMtY2lkci1ibG9ja3MuaHRtbCN2cGMtc2l6aW5nLWlwdjR9LlxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGlwdjRDaWRyQmxvY2s6IHN0cmluZztcblxuICAvKipcbiAgICogVnBjTmFtZSB0byBiZSB1c2VkIGZvciB0YWdnaW5nIGl0cyBjb21wb25lbnRzXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgdnBjTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogUmVnaW9uIGZvciB0aGlzIFZQQ1xuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IHJlZ2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJZGVudGlmaWVyIG9mIHRoZSBvd25lciBmb3IgdGhpcyBWUENcbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBvd25lckFjY291bnRJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJUHY0IENJRFIgcHJvdmlzaW9uZWQgdW5kZXIgcG9vbFxuICAgKiBSZXF1aXJlZCB0byBjaGVjayBmb3Igb3ZlcmxhcHBpbmcgQ0lEUnMgYWZ0ZXIgcHJvdmlzaW9uaW5nXG4gICAqIGlzIGNvbXBsZXRlIHVuZGVyIElQQU0gcG9vbFxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGlwdjRJcGFtUHJvdmlzaW9uZWRDaWRycz86IHN0cmluZ1tdO1xuXG4gIHB1YmxpYyBnZXQgdnBjT3V0cHV0cygpOiBWcGNPdXRwdXRzIHtcbiAgICByZXR1cm4ge1xuICAgICAgYXZhaWxhYmlsaXR5Wm9uZXM6IHRoaXMuYXZhaWxhYmlsaXR5Wm9uZXMsXG4gICAgICBpc29sYXRlZFN1Ym5ldElkczogdGhpcy5pc29sYXRlZFN1Ym5ldHMubWFwKChzKSA9PiBzLnN1Ym5ldElkKSxcbiAgICAgIHByaXZhdGVTdWJuZXRJZHM6IHRoaXMucHJpdmF0ZVN1Ym5ldHMubWFwKChzKSA9PiBzLnN1Ym5ldElkKSxcbiAgICAgIHB1YmxpY1N1Ym5ldElkczogdGhpcy5wdWJsaWNTdWJuZXRzLm1hcCgocykgPT4gcy5zdWJuZXRJZCksXG4gICAgICB2cGNBcm46IHRoaXMudnBjQXJuLFxuICAgICAgdnBjQ2lkckJsb2NrOiB0aGlzLnZwY0NpZHJCbG9jayxcbiAgICAgIHZwY0lkOiB0aGlzLnZwY0lkLFxuICAgICAgdnBuR2F0ZXdheUlkOiB0aGlzLnZwbkdhdGV3YXlJZCxcbiAgICB9O1xuICB9XG4gIHB1YmxpYyBnZXQgb3V0cHV0cygpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICByZXR1cm4gdGhpcy52cGNPdXRwdXRzO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIHRoaXMgaXMgc2V0IHRvIHRydWUsIGRvbid0IGVycm9yIG91dCBvbiB0cnlpbmcgdG8gc2VsZWN0IHN1Ym5ldHNcbiAgICovXG4gIHByb3RlY3RlZCBpbmNvbXBsZXRlU3VibmV0RGVmaW5pdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBNdXRhYmxlIHByaXZhdGUgZmllbGQgZm9yIHRoZSB2cG5HYXRld2F5SWRcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcm90ZWN0ZWQgX3ZwbkdhdGV3YXlJZD86IHN0cmluZztcblxuICAvKipcbiAgICogTXV0YWJsZSBwcml2YXRlIGZpZWxkIGZvciB0aGUgaW50ZXJuZXRHYXRld2F5SWRcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcm90ZWN0ZWQgX2ludGVybmV0R2F0ZXdheUlkID0gXCJcIjtcblxuICAvKipcbiAgICogUmV0dXJuIGluZm9ybWF0aW9uIG9uIHRoZSBzdWJuZXRzIGFwcHJvcHJpYXRlIGZvciB0aGUgZ2l2ZW4gc2VsZWN0aW9uIHN0cmF0ZWd5XG4gICAqXG4gICAqIFJlcXVpcmVzIHRoYXQgYXQgbGVhc3Qgb25lIHN1Ym5ldCBpcyBtYXRjaGVkLCB0aHJvd3MgYSBkZXNjcmlwdGl2ZVxuICAgKiBlcnJvciBtZXNzYWdlIG90aGVyd2lzZS5cbiAgICovXG4gIHB1YmxpYyBzZWxlY3RTdWJuZXRzKHNlbGVjdGlvbjogU3VibmV0U2VsZWN0aW9uID0ge30pOiBTZWxlY3RlZFN1Ym5ldHMge1xuICAgIGNvbnN0IHN1Ym5ldHMgPSB0aGlzLnNlbGVjdFN1Ym5ldE9iamVjdHMoc2VsZWN0aW9uKTtcbiAgICBjb25zdCBwdWJzID0gbmV3IFNldCh0aGlzLnB1YmxpY1N1Ym5ldHMpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHN1Ym5ldElkczogc3VibmV0cy5tYXAoKHMpID0+IHMuc3VibmV0SWQpLFxuICAgICAgZ2V0IGF2YWlsYWJpbGl0eVpvbmVzKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIHN1Ym5ldHMubWFwKChzKSA9PiBzLmF2YWlsYWJpbGl0eVpvbmUpO1xuICAgICAgfSxcbiAgICAgIGludGVybmV0Q29ubmVjdGl2aXR5RXN0YWJsaXNoZWQ6IHRhcChuZXcgQ29tcG9zaXRlRGVwZW5kYWJsZSgpLCAoZCkgPT5cbiAgICAgICAgc3VibmV0cy5mb3JFYWNoKChzKSA9PiBkLmFkZChzLmludGVybmV0Q29ubmVjdGl2aXR5RXN0YWJsaXNoZWQpKSxcbiAgICAgICksXG4gICAgICBzdWJuZXRzLFxuICAgICAgaGFzUHVibGljOiBzdWJuZXRzLnNvbWUoKHMpID0+IHB1YnMuaGFzKHMpKSxcbiAgICAgIGlzUGVuZGluZ0xvb2t1cDogdGhpcy5pbmNvbXBsZXRlU3VibmV0RGVmaW5pdGlvbixcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBWUE4gR2F0ZXdheSB0byB0aGlzIFZQQ1xuICAgKiBAZGVwcmVjYXRlZCB1c2UgZW5hYmxlVnBuR2F0ZXdheVYyIGZvciBjb21wYXRpYmlsaXR5IHdpdGggVlBDVjIuUm91dGVcbiAgICovXG4gIHB1YmxpYyBlbmFibGVWcG5HYXRld2F5KG9wdGlvbnM6IEVuYWJsZVZwbkdhdGV3YXlPcHRpb25zKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudnBuR2F0ZXdheUlkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgVlBOIEdhdGV3YXkgaGFzIGFscmVhZHkgYmVlbiBlbmFibGVkLlwiKTtcbiAgICB9XG5cbiAgICBjb25zdCB2cG5HYXRld2F5ID0gbmV3IFZwbkdhdGV3YXkodGhpcywgXCJWcG5HYXRld2F5XCIsIHtcbiAgICAgIGFtYXpvblNpZGVBc246IG9wdGlvbnMuYW1hem9uU2lkZUFzbixcbiAgICAgIHR5cGU6IFZwbkNvbm5lY3Rpb25UeXBlLklQU0VDXzEsXG4gICAgfSk7XG5cbiAgICB0aGlzLl92cG5HYXRld2F5SWQgPSB2cG5HYXRld2F5LmdhdGV3YXlJZDtcblxuICAgIGNvbnN0IGF0dGFjaG1lbnQgPSBuZXcgdnBuR2F0ZXdheUF0dGFjaG1lbnQuVnBuR2F0ZXdheUF0dGFjaG1lbnQoXG4gICAgICB0aGlzLFxuICAgICAgXCJWUENWUE5HV1wiLFxuICAgICAge1xuICAgICAgICB2cGNJZDogdGhpcy52cGNJZCxcbiAgICAgICAgdnBuR2F0ZXdheUlkOiB0aGlzLl92cG5HYXRld2F5SWQsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICAvLyBQcm9wYWdhdGUgcm91dGVzIG9uIHJvdXRlIHRhYmxlcyBhc3NvY2lhdGVkIHdpdGggdGhlIHJpZ2h0IHN1Ym5ldHNcbiAgICBjb25zdCB2cG5Sb3V0ZVByb3BhZ2F0aW9uID0gb3B0aW9ucy52cG5Sb3V0ZVByb3BhZ2F0aW9uID8/IFt7fV07XG4gICAgY29uc3Qgcm91dGVUYWJsZUlkcyA9IGFsbFJvdXRlVGFibGVJZHMoXG4gICAgICBmbGF0dGVuKHZwblJvdXRlUHJvcGFnYXRpb24ubWFwKChzKSA9PiB0aGlzLnNlbGVjdFN1Ym5ldHMocykuc3VibmV0cykpLFxuICAgICk7XG5cbiAgICBpZiAocm91dGVUYWJsZUlkcy5sZW5ndGggPT09IDApIHtcbiAgICAgIEFubm90YXRpb25zLm9mKHRoaXMpLmFkZEVycm9yKFxuICAgICAgICBgZW5hYmxlVnBuR2F0ZXdheTogbm8gc3VibmV0cyBtYXRjaGluZyBzZWxlY3Rpb246ICcke0pTT04uc3RyaW5naWZ5KHZwblJvdXRlUHJvcGFnYXRpb24pfScuIFNlbGVjdCBvdGhlciBzdWJuZXRzIHRvIGFkZCByb3V0ZXMgdG8uYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3V0ZVRhYmxlSWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCByb3V0ZVByb3BhZ2F0aW9uID1cbiAgICAgICAgbmV3IHZwbkdhdGV3YXlSb3V0ZVByb3BhZ2F0aW9uLlZwbkdhdGV3YXlSb3V0ZVByb3BhZ2F0aW9uKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgYFJvdXRlUHJvcGFnYXRpb24ke2l9YCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICByb3V0ZVRhYmxlSWQ6IHJvdXRlVGFibGVJZHNbaV0sXG4gICAgICAgICAgICB2cG5HYXRld2F5SWQ6IHRoaXMuX3ZwbkdhdGV3YXlJZCxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgLy8gVGhlIEFXUzo6RUMyOjpWUE5HYXRld2F5Um91dGVQcm9wYWdhdGlvbiByZXNvdXJjZSBjYW5ub3QgdXNlIHRoZSBWUE4gZ2F0ZXdheVxuICAgICAgLy8gdW50aWwgaXQgaGFzIHN1Y2Nlc3NmdWxseSBhdHRhY2hlZCB0byB0aGUgVlBDLlxuICAgICAgLy8gU2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1lYzItdnBuLWdhdGV3YXlyb3V0ZXByb3AuaHRtbFxuICAgICAgcm91dGVQcm9wYWdhdGlvbi5ub2RlLmFkZERlcGVuZGVuY3koYXR0YWNobWVudCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgVlBOR0F0ZXdheVYyIHRvIHRoaXMgVlBDXG4gICAqL1xuICBwdWJsaWMgZW5hYmxlVnBuR2F0ZXdheVYyKG9wdGlvbnM6IFZQTkdhdGV3YXlWMk9wdGlvbnMpOiBWUE5HYXRld2F5VjIge1xuICAgIGlmICh0aGlzLnZwbkdhdGV3YXlJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIFZQTiBHYXRld2F5IGhhcyBhbHJlYWR5IGJlZW4gZW5hYmxlZC5cIik7XG4gICAgfVxuXG4gICAgY29uc3QgdnBuR2F0ZXdheSA9IG5ldyBWUE5HYXRld2F5VjIodGhpcywgXCJWcG5HYXRld2F5XCIsIHtcbiAgICAgIHZwYzogdGhpcyxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSk7XG5cbiAgICB0aGlzLl9pbnRlcm5ldENvbm5lY3Rpdml0eUVzdGFibGlzaGVkLmFkZCh2cG5HYXRld2F5KTtcbiAgICB0aGlzLl92cG5HYXRld2F5SWQgPSB2cG5HYXRld2F5LnJvdXRlclRhcmdldElkO1xuXG4gICAgcmV0dXJuIHZwbkdhdGV3YXk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIG5ldyBWUE4gY29ubmVjdGlvbiB0byB0aGlzIFZQQ1xuICAgKi9cbiAgcHVibGljIGFkZFZwbkNvbm5lY3Rpb24oXG4gICAgaWQ6IHN0cmluZyxcbiAgICBvcHRpb25zOiBWcG5Db25uZWN0aW9uT3B0aW9ucyxcbiAgKTogVnBuQ29ubmVjdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBWcG5Db25uZWN0aW9uKHRoaXMsIGlkLCB7XG4gICAgICB2cGM6IHRoaXMsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBuZXcgY2xpZW50IFZQTiBlbmRwb2ludCB0byB0aGlzIFZQQ1xuICAgKi9cbiAgcHVibGljIGFkZENsaWVudFZwbkVuZHBvaW50KFxuICAgIGlkOiBzdHJpbmcsXG4gICAgb3B0aW9uczogQ2xpZW50VnBuRW5kcG9pbnRPcHRpb25zLFxuICApOiBDbGllbnRWcG5FbmRwb2ludCB7XG4gICAgcmV0dXJuIG5ldyBDbGllbnRWcG5FbmRwb2ludCh0aGlzLCBpZCwge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIHZwYzogdGhpcyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgbmV3IGludGVyZmFjZSBlbmRwb2ludCB0byB0aGlzIFZQQ1xuICAgKi9cbiAgcHVibGljIGFkZEludGVyZmFjZUVuZHBvaW50KFxuICAgIGlkOiBzdHJpbmcsXG4gICAgb3B0aW9uczogSW50ZXJmYWNlVnBjRW5kcG9pbnRPcHRpb25zLFxuICApOiBJbnRlcmZhY2VWcGNFbmRwb2ludCB7XG4gICAgcmV0dXJuIG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludCh0aGlzLCBpZCwge1xuICAgICAgdnBjOiB0aGlzLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgbmV3IGdhdGV3YXkgZW5kcG9pbnQgdG8gdGhpcyBWUENcbiAgICovXG4gIHB1YmxpYyBhZGRHYXRld2F5RW5kcG9pbnQoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBvcHRpb25zOiBHYXRld2F5VnBjRW5kcG9pbnRPcHRpb25zLFxuICApOiBHYXRld2F5VnBjRW5kcG9pbnQge1xuICAgIHJldHVybiBuZXcgR2F0ZXdheVZwY0VuZHBvaW50KHRoaXMsIGlkLCB7XG4gICAgICB2cGM6IHRoaXMsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBuZXcgRWdyZXNzIE9ubHkgSW50ZXJuZXQgR2F0ZXdheSB0byB0aGlzIFZQQyBhbmQgZGVmaW5lcyBhIG5ldyByb3V0ZVxuICAgKiB0byB0aGUgcm91dGUgdGFibGUgb2YgZ2l2ZW4gc3VibmV0cy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBpbiBjYXNlIG9mIG5vIGlucHV0IHN1Ym5ldHMsIG5vIHJvdXRlIGlzIGNyZWF0ZWRcbiAgICovXG4gIHB1YmxpYyBhZGRFZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5KFxuICAgIG9wdGlvbnM/OiBFZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5T3B0aW9ucyxcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgZWd3ID0gbmV3IEVncmVzc09ubHlJbnRlcm5ldEdhdGV3YXkodGhpcywgXCJFZ3Jlc3NPbmx5R1dcIiwge1xuICAgICAgdnBjOiB0aGlzLFxuICAgICAgZWdyZXNzT25seUludGVybmV0R2F0ZXdheU5hbWU6IG9wdGlvbnM/LmVncmVzc09ubHlJbnRlcm5ldEdhdGV3YXlOYW1lLFxuICAgIH0pO1xuXG4gICAgbGV0IHVzZUlwdjY7XG4gICAgaWYgKHRoaXMuc2Vjb25kYXJ5Q2lkckJsb2NrKSB7XG4gICAgICB1c2VJcHY2ID0gdGhpcy5zZWNvbmRhcnlDaWRyQmxvY2suc29tZShcbiAgICAgICAgKHNlY29uZGFyeUFkZHJlc3MpID0+XG4gICAgICAgICAgc2Vjb25kYXJ5QWRkcmVzcy5hbWF6b25Qcm92aWRlZElwdjZDaWRyQmxvY2sgPT09IHRydWUgfHxcbiAgICAgICAgICBzZWNvbmRhcnlBZGRyZXNzLmlwdjZJcGFtUG9vbElkICE9IHVuZGVmaW5lZCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCF1c2VJcHY2KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFZ3Jlc3Mgb25seSBJR1cgY2FuIG9ubHkgYmUgYWRkZWQgdG8gSXB2NiBlbmFibGVkIFZQQ1wiKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucz8uc3VibmV0cykge1xuICAgICAgY29uc3Qgc3VibmV0cyA9IGZsYXR0ZW4oXG4gICAgICAgIG9wdGlvbnMuc3VibmV0cy5tYXAoKHMpID0+IHRoaXMuc2VsZWN0U3VibmV0cyhzKS5zdWJuZXRzKSxcbiAgICAgICk7XG4gICAgICBzdWJuZXRzLmZvckVhY2goKHN1Ym5ldCkgPT4ge1xuICAgICAgICB0aGlzLmNyZWF0ZUVncmVzc1JvdXRlKHN1Ym5ldCwgZWd3LCBvcHRpb25zLmRlc3RpbmF0aW9uKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgcm91dGUgZm9yIEVHVyB3aXRoIGRlc3RpbmF0aW9uIHNldCB0byBvdXRib3VuZCBJUHY2KCc6Oi8wJykgb3IgY3VzdG9tIGlwdjYgYWRkcmVzcy5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZUVncmVzc1JvdXRlKFxuICAgIHN1Ym5ldDogSVN1Ym5ldFYyLFxuICAgIGVndzogRWdyZXNzT25seUludGVybmV0R2F0ZXdheSxcbiAgICBkZXN0aW5hdGlvbj86IHN0cmluZyxcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgZGVzdGluYXRpb25JcHY2ID0gZGVzdGluYXRpb24gPz8gXCI6Oi8wXCI7XG4gICAgbmV3IFJvdXRlKHRoaXMsIGAke3N1Ym5ldC5ub2RlLmlkfS1FZ3Jlc3NSb3V0ZWAsIHtcbiAgICAgIHJvdXRlVGFibGU6IHN1Ym5ldC5yb3V0ZVRhYmxlLFxuICAgICAgZGVzdGluYXRpb246IGRlc3RpbmF0aW9uSXB2NiwgLy8gSVB2NiBkZWZhdWx0IHJvdXRlXG4gICAgICB0YXJnZXQ6IHsgZ2F0ZXdheTogZWd3IH0sXG4gICAgICByb3V0ZU5hbWU6IFwiQ0RLRUlHV1JvdXRlXCIsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIG5ldyBJbnRlcm5ldCBHYXRld2F5IHRvIHRoaXMgVlBDXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gY3JlYXRlcyBhIG5ldyByb3V0ZSBmb3IgcHVibGljIHN1Ym5ldHMod2l0aCBhbGwgb3V0Ym91bmQgYWNjZXNzKSB0byB0aGUgSW50ZXJuZXQgR2F0ZXdheS5cbiAgICovXG4gIHB1YmxpYyBhZGRJbnRlcm5ldEdhdGV3YXkob3B0aW9ucz86IEludGVybmV0R2F0ZXdheU9wdGlvbnMpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5faW50ZXJuZXRHYXRld2F5SWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBJbnRlcm5ldCBHYXRld2F5IGhhcyBhbHJlYWR5IGJlZW4gZW5hYmxlZC5cIik7XG4gICAgfVxuXG4gICAgY29uc3QgaWd3ID0gbmV3IEludGVybmV0R2F0ZXdheSh0aGlzLCBcIkludGVybmV0R2F0ZXdheVwiLCB7XG4gICAgICB2cGM6IHRoaXMsXG4gICAgICBpbnRlcm5ldEdhdGV3YXlOYW1lOiBvcHRpb25zPy5pbnRlcm5ldEdhdGV3YXlOYW1lLFxuICAgIH0pO1xuXG4gICAgdGhpcy5faW50ZXJuZXRDb25uZWN0aXZpdHlFc3RhYmxpc2hlZC5hZGQoaWd3KTtcbiAgICB0aGlzLl9pbnRlcm5ldEdhdGV3YXlJZCA9IGlndy5yb3V0ZXJUYXJnZXRJZDtcblxuICAgIC8vIElmIHRoZXJlIGFyZSBubyBwdWJsaWMgc3VibmV0cyBkZWZpbmVkLCBubyBkZWZhdWx0IHJvdXRlIHdpbGwgYmUgYWRkZWRcbiAgICBpZiAodGhpcy5wdWJsaWNTdWJuZXRzKSB7XG4gICAgICB0aGlzLnB1YmxpY1N1Ym5ldHMuZm9yRWFjaCgocykgPT5cbiAgICAgICAgdGhpcy5hZGREZWZhdWx0SW50ZXJuZXRSb3V0ZShzLCBpZ3csIG9wdGlvbnMpLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBkZWZhdWx0IHJvdXRlIGZvciB0aGUgaW50ZXJuZXQgZ2F0ZXdheVxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByaXZhdGUgYWRkRGVmYXVsdEludGVybmV0Um91dGUoXG4gICAgc3VibmV0OiBJU3VibmV0VjIsXG4gICAgaWd3OiBJbnRlcm5ldEdhdGV3YXksXG4gICAgb3B0aW9ucz86IEludGVybmV0R2F0ZXdheU9wdGlvbnMsXG4gICk6IHZvaWQge1xuICAgIGlmIChzdWJuZXQuc3VibmV0VHlwZSAhPT0gU3VibmV0VHlwZS5QVUJMSUMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJObyBwdWJsaWMgc3VibmV0cyBkZWZpbmVkIHRvIGFkZCByb3V0ZSBmb3IgaW50ZXJuZXQgZ2F0ZXdheVwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBBZGQgZGVmYXVsdCByb3V0ZSB0byBJR1cgZm9yIElQdjZcbiAgICBpZiAoc3VibmV0LmlwdjZDaWRyQmxvY2spIHtcbiAgICAgIG5ldyBSb3V0ZSh0aGlzLCBgJHtzdWJuZXQubm9kZS5pZH0tRGVmYXVsdElQdjZSb3V0ZWAsIHtcbiAgICAgICAgcm91dGVUYWJsZTogc3VibmV0LnJvdXRlVGFibGUsXG4gICAgICAgIGRlc3RpbmF0aW9uOiBvcHRpb25zPy5pcHY2RGVzdGluYXRpb24gPz8gXCI6Oi8wXCIsXG4gICAgICAgIHRhcmdldDogeyBnYXRld2F5OiBpZ3cgfSxcbiAgICAgICAgcm91dGVOYW1lOiBcIkNES0RlZmF1bHRJUHY2Um91dGVcIixcbiAgICAgIH0pO1xuICAgIH1cbiAgICAvL0FkZCBkZWZhdWx0IHJvdXRlIHRvIElHVyBmb3IgSVB2NFxuICAgIG5ldyBSb3V0ZSh0aGlzLCBgJHtzdWJuZXQubm9kZS5pZH0tRGVmYXVsdFJvdXRlYCwge1xuICAgICAgcm91dGVUYWJsZTogc3VibmV0LnJvdXRlVGFibGUsXG4gICAgICBkZXN0aW5hdGlvbjogb3B0aW9ucz8uaXB2NERlc3RpbmF0aW9uID8/IFwiMC4wLjAuMC8wXCIsXG4gICAgICB0YXJnZXQ6IHsgZ2F0ZXdheTogaWd3IH0sXG4gICAgICByb3V0ZU5hbWU6IFwiQ0RLRGVmYXVsdElQdjRSb3V0ZVwiLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBuZXcgTkFUIEdhdGV3YXkgdG8gdGhlIGdpdmVuIHN1Ym5ldCBvZiB0aGlzIFZQQ1xuICAgKiBvZiBnaXZlbiBzdWJuZXRzLlxuICAgKi9cbiAgcHVibGljIGFkZE5hdEdhdGV3YXkob3B0aW9uczogTmF0R2F0ZXdheU9wdGlvbnMpOiBOYXRHYXRld2F5IHtcbiAgICBpZiAoXG4gICAgICBvcHRpb25zLmNvbm5lY3Rpdml0eVR5cGUgPT09IE5hdENvbm5lY3Rpdml0eVR5cGUuUFVCTElDICYmXG4gICAgICAhdGhpcy5faW50ZXJuZXRHYXRld2F5SWRcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJDYW5ub3QgYWRkIGEgUHVibGljIE5BVCBHYXRld2F5IHdpdGhvdXQgYW4gSW50ZXJuZXQgR2F0ZXdheSBlbmFibGVkIG9uIFZQQ1wiLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBOYXRHYXRld2F5KHRoaXMsIFwiTkFUR2F0ZXdheVwiLCB7XG4gICAgICB2cGM6IHRoaXMsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBuZXcgZmxvdyBsb2cgdG8gdGhpcyBWUENcbiAgICovXG4gIHB1YmxpYyBhZGRGbG93TG9nKGlkOiBzdHJpbmcsIG9wdGlvbnM/OiBGbG93TG9nT3B0aW9ucyk6IEZsb3dMb2cge1xuICAgIHJldHVybiBuZXcgRmxvd0xvZyh0aGlzLCBpZCwge1xuICAgICAgcmVzb3VyY2VUeXBlOiBGbG93TG9nUmVzb3VyY2VUeXBlLmZyb21WcGModGhpcyksXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgcGVlcmluZyBjb25uZWN0aW9uIHJvbGUgZm9yIGFjY2VwdG9yIFZQQ1xuICAgKi9cbiAgcHVibGljIGNyZWF0ZUFjY2VwdG9yVnBjUm9sZShyZXF1ZXN0b3JBY2NvdW50SWQ6IHN0cmluZyk6IFJvbGUge1xuICAgIGNvbnN0IHBlZXJpbmdSb2xlID0gbmV3IFJvbGUodGhpcywgXCJWcGNQZWVyaW5nUm9sZVwiLCB7XG4gICAgICBhc3N1bWVkQnk6IG5ldyBBY2NvdW50UHJpbmNpcGFsKHJlcXVlc3RvckFjY291bnRJZCksXG4gICAgICByb2xlTmFtZTogXCJWcGNQZWVyaW5nUm9sZVwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiUmVzdHJpY3RpdmUgcm9sZSBmb3IgVlBDIHBlZXJpbmdcIixcbiAgICB9KTtcblxuICAgIHBlZXJpbmdSb2xlLmFkZFRvUG9saWN5KFxuICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgICBhY3Rpb25zOiBbXCJlYzI6QWNjZXB0VnBjUGVlcmluZ0Nvbm5lY3Rpb25cIl0sXG4gICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgIGBhcm46JHtBd3NTdGFjay5vZkF3c0NvbnN0cnVjdCh0aGlzKS5wYXJ0aXRpb259OmVjMjoke3RoaXMucmVnaW9ufToke3RoaXMub3duZXJBY2NvdW50SWR9OnZwYy8ke3RoaXMudnBjSWR9YCxcbiAgICAgICAgXSxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICBwZWVyaW5nUm9sZS5hZGRUb1BvbGljeShcbiAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBhY3Rpb25zOiBbXCJlYzI6QWNjZXB0VnBjUGVlcmluZ0Nvbm5lY3Rpb25cIl0sXG4gICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICBgYXJuOiR7QXdzU3RhY2sub2ZBd3NDb25zdHJ1Y3QodGhpcykucGFydGl0aW9ufTplYzI6JHt0aGlzLnJlZ2lvbn06JHt0aGlzLm93bmVyQWNjb3VudElkfTp2cGMtcGVlcmluZy1jb25uZWN0aW9uLypgLFxuICAgICAgICBdLFxuICAgICAgICBjb25kaXRpb246IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0ZXN0OiBcIlN0cmluZ0VxdWFsc1wiLFxuICAgICAgICAgICAgdmFyaWFibGU6IFwiZWMyOkFjY2VwdGVyVnBjXCIsXG4gICAgICAgICAgICB2YWx1ZXM6IFtcbiAgICAgICAgICAgICAgYGFybjoke0F3c1N0YWNrLm9mQXdzQ29uc3RydWN0KHRoaXMpLnBhcnRpdGlvbn06ZWMyOiR7dGhpcy5yZWdpb259OiR7dGhpcy5vd25lckFjY291bnRJZH06dnBjLyR7dGhpcy52cGNJZH1gLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIHJldHVybiBwZWVyaW5nUm9sZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgcGVlcmluZyBjb25uZWN0aW9uXG4gICAqL1xuICBwdWJsaWMgY3JlYXRlUGVlcmluZ0Nvbm5lY3Rpb24oXG4gICAgaWQ6IHN0cmluZyxcbiAgICBvcHRpb25zOiBWUENQZWVyaW5nQ29ubmVjdGlvbk9wdGlvbnMsXG4gICk6IFZQQ1BlZXJpbmdDb25uZWN0aW9uIHtcbiAgICByZXR1cm4gbmV3IFZQQ1BlZXJpbmdDb25uZWN0aW9uKHRoaXMsIGlkLCB7XG4gICAgICByZXF1ZXN0b3JWcGM6IHRoaXMsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGlkIG9mIHRoZSBWUE4gR2F0ZXdheSAoaWYgZW5hYmxlZClcbiAgICovXG4gIHB1YmxpYyBnZXQgdnBuR2F0ZXdheUlkKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3ZwbkdhdGV3YXlJZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBpZCBvZiB0aGUgSW50ZXJuZXQgR2F0ZXdheSAoaWYgZW5hYmxlZClcbiAgICovXG4gIHB1YmxpYyBnZXQgaW50ZXJuZXRHYXRld2F5SWQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5faW50ZXJuZXRHYXRld2F5SWQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBzdWJuZXRzIGFwcHJvcHJpYXRlIGZvciB0aGUgcGxhY2VtZW50IHN0cmF0ZWd5XG4gICAqL1xuICBwcm90ZWN0ZWQgc2VsZWN0U3VibmV0T2JqZWN0cyhzZWxlY3Rpb246IFN1Ym5ldFNlbGVjdGlvbiA9IHt9KTogSVN1Ym5ldFtdIHtcbiAgICBzZWxlY3Rpb24gPSB0aGlzLnJlaWZ5U2VsZWN0aW9uRGVmYXVsdHMoc2VsZWN0aW9uKTtcblxuICAgIGlmIChzZWxlY3Rpb24uc3VibmV0cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gc2VsZWN0aW9uLnN1Ym5ldHM7XG4gICAgfVxuXG4gICAgbGV0IHN1Ym5ldHM7XG5cbiAgICBpZiAoc2VsZWN0aW9uLnN1Ym5ldEdyb3VwTmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBTZWxlY3QgYnkgbmFtZVxuICAgICAgc3VibmV0cyA9IHRoaXMuc2VsZWN0U3VibmV0T2JqZWN0c0J5TmFtZShzZWxlY3Rpb24uc3VibmV0R3JvdXBOYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gT3Igc3BlY2lmeSBieSB0eXBlXG4gICAgICBjb25zdCB0eXBlID0gc2VsZWN0aW9uLnN1Ym5ldFR5cGUgfHwgU3VibmV0VHlwZS5QUklWQVRFX1dJVEhfRUdSRVNTO1xuICAgICAgc3VibmV0cyA9IHRoaXMuc2VsZWN0U3VibmV0T2JqZWN0c0J5VHlwZSh0eXBlKTtcbiAgICB9XG5cbiAgICAvLyBBcHBseSBhbGwgdGhlIGZpbHRlcnNcbiAgICBzdWJuZXRzID0gdGhpcy5hcHBseVN1Ym5ldEZpbHRlcnMoc3VibmV0cywgc2VsZWN0aW9uLnN1Ym5ldEZpbHRlcnMgPz8gW10pO1xuXG4gICAgcmV0dXJuIHN1Ym5ldHM7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5U3VibmV0RmlsdGVycyhcbiAgICBzdWJuZXRzOiBJU3VibmV0W10sXG4gICAgZmlsdGVyczogU3VibmV0RmlsdGVyW10sXG4gICk6IElTdWJuZXRbXSB7XG4gICAgbGV0IGZpbHRlcmVkID0gc3VibmV0cztcbiAgICAvLyBBcHBseSBlYWNoIGZpbHRlciBpbiBzZXF1ZW5jZVxuICAgIGZvciAoY29uc3QgZmlsdGVyIG9mIGZpbHRlcnMpIHtcbiAgICAgIGZpbHRlcmVkID0gZmlsdGVyLnNlbGVjdFN1Ym5ldHMoZmlsdGVyZWQpO1xuICAgIH1cbiAgICByZXR1cm4gZmlsdGVyZWQ7XG4gIH1cblxuICBwcml2YXRlIHNlbGVjdFN1Ym5ldE9iamVjdHNCeU5hbWUoZ3JvdXBOYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBhbGxTdWJuZXRzID0gW1xuICAgICAgLi4udGhpcy5wdWJsaWNTdWJuZXRzLFxuICAgICAgLi4udGhpcy5wcml2YXRlU3VibmV0cyxcbiAgICAgIC4uLnRoaXMuaXNvbGF0ZWRTdWJuZXRzLFxuICAgIF07XG4gICAgY29uc3Qgc3VibmV0cyA9IGFsbFN1Ym5ldHMuZmlsdGVyKFxuICAgICAgKHMpID0+IHN1Ym5ldEdyb3VwTmFtZUZyb21Db25zdHJ1Y3RJZChzKSA9PT0gZ3JvdXBOYW1lLFxuICAgICk7XG5cbiAgICBpZiAoc3VibmV0cy5sZW5ndGggPT09IDAgJiYgIXRoaXMuaW5jb21wbGV0ZVN1Ym5ldERlZmluaXRpb24pIHtcbiAgICAgIGNvbnN0IG5hbWVzID0gQXJyYXkuZnJvbShcbiAgICAgICAgbmV3IFNldChhbGxTdWJuZXRzLm1hcChzdWJuZXRHcm91cE5hbWVGcm9tQ29uc3RydWN0SWQpKSxcbiAgICAgICk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBUaGVyZSBhcmUgbm8gc3VibmV0IGdyb3VwcyB3aXRoIG5hbWUgJyR7Z3JvdXBOYW1lfScgaW4gdGhpcyBWUEMuIEF2YWlsYWJsZSBuYW1lczogJHtuYW1lc31gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3VibmV0cztcbiAgfVxuXG4gIHByaXZhdGUgc2VsZWN0U3VibmV0T2JqZWN0c0J5VHlwZShzdWJuZXRUeXBlOiBTdWJuZXRUeXBlKSB7XG4gICAgY29uc3QgYWxsU3VibmV0cyA9IHtcbiAgICAgIFtTdWJuZXRUeXBlLlBSSVZBVEVfSVNPTEFURURdOiB0aGlzLmlzb2xhdGVkU3VibmV0cyxcbiAgICAgIFtTdWJuZXRUeXBlLklTT0xBVEVEXTogdGhpcy5pc29sYXRlZFN1Ym5ldHMsXG4gICAgICBbU3VibmV0VHlwZS5QUklWQVRFX1dJVEhfTkFUXTogdGhpcy5wcml2YXRlU3VibmV0cyxcbiAgICAgIFtTdWJuZXRUeXBlLlBSSVZBVEVfV0lUSF9FR1JFU1NdOiB0aGlzLnByaXZhdGVTdWJuZXRzLFxuICAgICAgW1N1Ym5ldFR5cGUuUFJJVkFURV06IHRoaXMucHJpdmF0ZVN1Ym5ldHMsXG4gICAgICBbU3VibmV0VHlwZS5QVUJMSUNdOiB0aGlzLnB1YmxpY1N1Ym5ldHMsXG4gICAgfTtcblxuICAgIGNvbnN0IHN1Ym5ldHMgPSBhbGxTdWJuZXRzW3N1Ym5ldFR5cGVdO1xuXG4gICAgLy8gRm9yY2UgbWVyZ2UgY29uZmxpY3QgaGVyZSB3aXRoIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9wdWxsLzQwODlcbiAgICAvLyBzZWUgSW1wb3J0ZWRWcGNcblxuICAgIGlmIChzdWJuZXRzLmxlbmd0aCA9PT0gMCAmJiAhdGhpcy5pbmNvbXBsZXRlU3VibmV0RGVmaW5pdGlvbikge1xuICAgICAgY29uc3QgYXZhaWxhYmxlVHlwZXMgPSBPYmplY3QuZW50cmllcyhhbGxTdWJuZXRzKVxuICAgICAgICAuZmlsdGVyKChbXywgc3Vic10pID0+IHN1YnMubGVuZ3RoID4gMClcbiAgICAgICAgLm1hcCgoW3R5cGVOYW1lLCBfXSkgPT4gdHlwZU5hbWUpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVGhlcmUgYXJlIG5vICcke3N1Ym5ldFR5cGV9JyBzdWJuZXQgZ3JvdXBzIGluIHRoaXMgVlBDLiBBdmFpbGFibGUgdHlwZXM6ICR7YXZhaWxhYmxlVHlwZXN9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1Ym5ldHM7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgdGhlIGZpZWxkcyBpbiBhIFN1Ym5ldFNlbGVjdGlvbiBvYmplY3QsIGFuZCByZWlmeSBkZWZhdWx0cyBpZiBuZWNlc3NhcnlcbiAgICpcbiAgICogSW4gY2FzZSBvZiBkZWZhdWx0IHNlbGVjdGlvbiwgc2VsZWN0IHRoZSBmaXJzdCB0eXBlIG9mIFBSSVZBVEUsIElTT0xBVEVELFxuICAgKiBQVUJMSUMgKGluIHRoYXQgb3JkZXIpIHRoYXQgaGFzIGFueSBzdWJuZXRzLlxuICAgKi9cbiAgcHJpdmF0ZSByZWlmeVNlbGVjdGlvbkRlZmF1bHRzKHBsYWNlbWVudDogU3VibmV0U2VsZWN0aW9uKTogU3VibmV0U2VsZWN0aW9uIHtcbiAgICAvLyBUT0RPOiB0aHJvdyBlcnJvciBhcyBuZXcgVnBjVjIgY2Fubm90IHN1cHBvcnQgc3VibmV0TmFtZSBvciBzdWJuZXRHcm91cE5hbWUgYW55bW9yZVxuICAgIGlmIChwbGFjZW1lbnQuc3VibmV0TmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAocGxhY2VtZW50LnN1Ym5ldEdyb3VwTmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBcIlBsZWFzZSB1c2Ugb25seSAnc3VibmV0R3JvdXBOYW1lJyAoJ3N1Ym5ldE5hbWUnIGlzIGRlcHJlY2F0ZWQgYW5kIGhhcyB0aGUgc2FtZSBiZWhhdmlvcilcIixcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFwiQGF3cy1jZGsvYXdzLWVjMjpzdWJuZXROYW1lRGVwcmVjYXRlZFwiLFxuICAgICAgICBBbm5vdGF0aW9ucy5vZih0aGlzKS5hZGRXYXJuaW5nKFxuICAgICAgICAgIFwiVXNhZ2Ugb2YgJ3N1Ym5ldE5hbWUnIGluIFN1Ym5ldFNlbGVjdGlvbiBpcyBkZXByZWNhdGVkLCB1c2UgJ3N1Ym5ldEdyb3VwTmFtZScgaW5zdGVhZFwiLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcGxhY2VtZW50ID0geyAuLi5wbGFjZW1lbnQsIHN1Ym5ldEdyb3VwTmFtZTogcGxhY2VtZW50LnN1Ym5ldE5hbWUgfTtcbiAgICB9XG5cbiAgICBjb25zdCBleGNsdXNpdmVTZWxlY3Rpb25zOiBBcnJheTxrZXlvZiBTdWJuZXRTZWxlY3Rpb24+ID0gW1xuICAgICAgXCJzdWJuZXRzXCIsXG4gICAgICBcInN1Ym5ldFR5cGVcIixcbiAgICAgIFwic3VibmV0R3JvdXBOYW1lXCIsXG4gICAgXTtcbiAgICBjb25zdCBwcm92aWRlZFNlbGVjdGlvbnMgPSBleGNsdXNpdmVTZWxlY3Rpb25zLmZpbHRlcihcbiAgICAgIChrZXkpID0+IHBsYWNlbWVudFtrZXldICE9PSB1bmRlZmluZWQsXG4gICAgKTtcbiAgICBpZiAocHJvdmlkZWRTZWxlY3Rpb25zLmxlbmd0aCA+IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYE9ubHkgb25lIG9mICcke3Byb3ZpZGVkU2VsZWN0aW9uc30nIGNhbiBiZSBzdXBwbGllZCB0byBzdWJuZXQgc2VsZWN0aW9uLmAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHBsYWNlbWVudC5zdWJuZXRUeXBlID09PSB1bmRlZmluZWQgJiZcbiAgICAgIHBsYWNlbWVudC5zdWJuZXRHcm91cE5hbWUgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgcGxhY2VtZW50LnN1Ym5ldHMgPT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgLy8gUmV0dXJuIGRlZmF1bHQgc3VibmV0IHR5cGUgYmFzZWQgb24gc3VibmV0cyB0aGF0IGFjdHVhbGx5IGV4aXN0XG4gICAgICBsZXQgc3VibmV0VHlwZSA9IHRoaXMucHJpdmF0ZVN1Ym5ldHMubGVuZ3RoXG4gICAgICAgID8gU3VibmV0VHlwZS5QUklWQVRFX1dJVEhfRUdSRVNTXG4gICAgICAgIDogdGhpcy5pc29sYXRlZFN1Ym5ldHMubGVuZ3RoXG4gICAgICAgICAgPyBTdWJuZXRUeXBlLlBSSVZBVEVfSVNPTEFURURcbiAgICAgICAgICA6IFN1Ym5ldFR5cGUuUFVCTElDO1xuICAgICAgcGxhY2VtZW50ID0geyAuLi5wbGFjZW1lbnQsIHN1Ym5ldFR5cGU6IHN1Ym5ldFR5cGUgfTtcbiAgICB9XG5cbiAgICAvLyBFc3RhYmxpc2ggd2hpY2ggc3VibmV0IGZpbHRlcnMgYXJlIGdvaW5nIHRvIGJlIHVzZWRcbiAgICBsZXQgc3VibmV0RmlsdGVycyA9IHBsYWNlbWVudC5zdWJuZXRGaWx0ZXJzID8/IFtdO1xuXG4gICAgLy8gQmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBleGlzdGluZyBgYXZhaWxhYmlsaXR5Wm9uZXNgIGFuZCBgb25lUGVyQXpgIGZ1bmN0aW9uYWxpdHlcbiAgICBpZiAocGxhY2VtZW50LmF2YWlsYWJpbGl0eVpvbmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIEZpbHRlciBieSBBWnMsIGlmIHNwZWNpZmllZFxuICAgICAgc3VibmV0RmlsdGVycy5wdXNoKFxuICAgICAgICBTdWJuZXRGaWx0ZXIuYXZhaWxhYmlsaXR5Wm9uZXMocGxhY2VtZW50LmF2YWlsYWJpbGl0eVpvbmVzKSxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghIXBsYWNlbWVudC5vbmVQZXJBeikge1xuICAgICAgLy8gRW5zdXJlIG9uZSBwZXIgQVogaWYgc3BlY2lmaWVkXG4gICAgICBzdWJuZXRGaWx0ZXJzLnB1c2goU3VibmV0RmlsdGVyLm9uZVBlckF6KCkpO1xuICAgIH1cblxuICAgIC8vIE92ZXJ3cml0ZSB0aGUgcHJvdmlkZWQgcGxhY2VtZW50IGZpbHRlcnMgYW5kIHJlbW92ZSB0aGUgYXZhaWxhYmlsaXR5Wm9uZXMgYW5kIG9uZVBlckF6IHByb3BlcnRpZXNcbiAgICBwbGFjZW1lbnQgPSB7XG4gICAgICAuLi5wbGFjZW1lbnQsXG4gICAgICBzdWJuZXRGaWx0ZXJzOiBzdWJuZXRGaWx0ZXJzLFxuICAgICAgYXZhaWxhYmlsaXR5Wm9uZXM6IHVuZGVmaW5lZCxcbiAgICAgIG9uZVBlckF6OiB1bmRlZmluZWQsXG4gICAgfTtcbiAgICBjb25zdCB7IGF2YWlsYWJpbGl0eVpvbmVzLCBvbmVQZXJBeiwgLi4ucmVzdCB9ID0gcGxhY2VtZW50O1xuXG4gICAgcmV0dXJuIHJlc3Q7XG4gIH1cbn1cblxuY2xhc3MgQ29tcG9zaXRlRGVwZW5kYWJsZSBpbXBsZW1lbnRzIElEZXBlbmRhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBkZXBlbmRhYmxlcyA9IG5ldyBBcnJheTxJRGVwZW5kYWJsZT4oKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBEZXBlbmRhYmxlLmltcGxlbWVudCh0aGlzLCB7XG4gICAgICBnZXQgZGVwZW5kZW5jeVJvb3RzKCkge1xuICAgICAgICBjb25zdCByZXQgPSBuZXcgQXJyYXk8SUNvbnN0cnVjdD4oKTtcbiAgICAgICAgZm9yIChjb25zdCBkZXAgb2Ygc2VsZi5kZXBlbmRhYmxlcykge1xuICAgICAgICAgIHJldC5wdXNoKC4uLkRlcGVuZGFibGUub2YoZGVwKS5kZXBlbmRlbmN5Um9vdHMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIGNvbnN0cnVjdCB0byB0aGUgZGVwZW5kZW5jeSByb290c1xuICAgKi9cbiAgcHVibGljIGFkZChkZXA6IElEZXBlbmRhYmxlKSB7XG4gICAgdGhpcy5kZXBlbmRhYmxlcy5wdXNoKGRlcCk7XG4gIH1cbn1cblxuLyoqXG4gKiBJbnZva2UgYSBmdW5jdGlvbiBvbiBhIHZhbHVlIChmb3IgaXRzIHNpZGUgZWZmZWN0KSBhbmQgcmV0dXJuIHRoZSB2YWx1ZVxuICovXG5mdW5jdGlvbiB0YXA8VD4oeDogVCwgZm46ICh4OiBUKSA9PiB2b2lkKTogVCB7XG4gIGZuKHgpO1xuICByZXR1cm4geDtcbn1cbiJdfQ==
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { vpc } from "@
|
|
2
|
-
import { TerraformResource } from "
|
|
1
|
+
import { vpc } from "@cdktn/provider-aws";
|
|
2
|
+
import { TerraformResource } from "cdktn";
|
|
3
3
|
import { Construct, IDependable } from "constructs";
|
|
4
4
|
import { AwsConstructProps } from "../aws-construct";
|
|
5
5
|
import { IpamOptions, IIpamPool } from "./ipam";
|
|
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
4
4
|
exports.VpcV2 = exports.IpAddresses = void 0;
|
|
5
5
|
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
6
|
// https://github.com/aws/aws-cdk/blob/v2.175.1/packages/@aws-cdk/aws-ec2-alpha/lib/vpc-v2.ts
|
|
7
|
-
const provider_aws_1 = require("@
|
|
7
|
+
const provider_aws_1 = require("@cdktn/provider-aws");
|
|
8
8
|
const constructs_1 = require("constructs");
|
|
9
9
|
const aws_construct_1 = require("../aws-construct");
|
|
10
10
|
const aws_stack_1 = require("../aws-stack");
|
|
@@ -45,7 +45,7 @@ class IpAddresses {
|
|
|
45
45
|
}
|
|
46
46
|
exports.IpAddresses = IpAddresses;
|
|
47
47
|
_a = JSII_RTTI_SYMBOL_1;
|
|
48
|
-
IpAddresses[_a] = { fqn: "terraconstructs.aws.compute.alpha.IpAddresses", version: "0.2.
|
|
48
|
+
IpAddresses[_a] = { fqn: "terraconstructs.aws.compute.alpha.IpAddresses", version: "0.2.6" };
|
|
49
49
|
/**
|
|
50
50
|
* Name tag constant
|
|
51
51
|
*/
|
|
@@ -241,7 +241,7 @@ class VpcV2 extends vpc_v2_base_1.VpcV2Base {
|
|
|
241
241
|
}
|
|
242
242
|
exports.VpcV2 = VpcV2;
|
|
243
243
|
_b = JSII_RTTI_SYMBOL_1;
|
|
244
|
-
VpcV2[_b] = { fqn: "terraconstructs.aws.compute.alpha.VpcV2", version: "0.2.
|
|
244
|
+
VpcV2[_b] = { fqn: "terraconstructs.aws.compute.alpha.VpcV2", version: "0.2.6" };
|
|
245
245
|
/**
|
|
246
246
|
* Supports assigning IPv4 address to VPC
|
|
247
247
|
*/
|
|
@@ -405,4 +405,4 @@ function validateIpv4address(cidr1, cidr2) {
|
|
|
405
405
|
ip2.octet1 === 172 &&
|
|
406
406
|
ip2.octet2 === 16)); // CIDR ranges belong to same private IP address ranges
|
|
407
407
|
}
|
|
408
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidnBjLXYyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F3cy9jb21wdXRlL3ZwYy12Mi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZGQUE2RjtBQUU3RixzREFJNkI7QUFFN0IsMkNBQXFFO0FBQ3JFLG9EQUF1RTtBQUN2RSw0Q0FBd0M7QUFDeEMsOENBQThDO0FBQzlDLDBDQUFtQztBQUduQywrQkFBb0U7QUFDcEUsZ0NBQTZCO0FBQzdCLDJDQUFzRTtBQUN0RSwrQ0FBa0Q7QUFhbEQ7O0dBRUc7QUFDSCxNQUFhLFdBQVc7SUFDdEI7O09BRUc7SUFDSSxNQUFNLENBQUMsSUFBSSxDQUNoQixRQUFnQixFQUNoQixLQUE2QjtRQUU3QixPQUFPLElBQUksa0JBQWtCLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRDs7T0FFRztJQUNJLE1BQU0sQ0FBQyxRQUFRLENBQUMsZUFBNEI7UUFDakQsT0FBTyxJQUFJLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsUUFBUSxDQUFDLGVBQTRCO1FBQ2pELE9BQU8sSUFBSSxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLGtCQUFrQixDQUFDLEtBQTRCO1FBQzNELE9BQU8sSUFBSSxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkMsQ0FBQzs7QUE5Qkgsa0NBK0JDOzs7QUFvRkQ7O0dBRUc7QUFDSCxNQUFNLFFBQVEsR0FBVyxNQUFNLENBQUM7QUFtSGhDOzs7Ozs7R0FNRztBQUNILE1BQWEsS0FBTSxTQUFRLHVCQUFTO0lBQ2xDOztPQUVHO0lBQ0ksTUFBTSxDQUFDLG1CQUFtQixDQUMvQixLQUFnQixFQUNoQixFQUFVLEVBQ1YsS0FBc0I7UUFFdEI7OztXQUdHO1FBQ0gsTUFBTSxhQUFjLFNBQVEs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QUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO0tBQ3ZCLENBQUM7SUFFRixNQUFNLEdBQUcsR0FBb0I7UUFDM0IsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7S0FDdkIsQ0FBQztJQUVGLE9BQU8sQ0FDTCxDQUFDLEdBQUcsQ0FBQyxNQUFNLEtBQUssRUFBRSxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssRUFBRSxDQUFDO1FBQ3hDLENBQUMsR0FBRyxDQUFDLE1BQU0sS0FBSyxHQUFHO1lBQ2pCLEdBQUcsQ0FBQyxNQUFNLEtBQUssR0FBRztZQUNsQixHQUFHLENBQUMsTUFBTSxLQUFLLEdBQUc7WUFDbEIsR0FBRyxDQUFDLE1BQU0sS0FBSyxHQUFHLENBQUM7UUFDckIsQ0FBQyxHQUFHLENBQUMsTUFBTSxLQUFLLEdBQUc7WUFDakIsR0FBRyxDQUFDLE1BQU0sS0FBSyxFQUFFO1lBQ2pCLEdBQUcsQ0FBQyxNQUFNLEtBQUssR0FBRztZQUNsQixHQUFHLENBQUMsTUFBTSxLQUFLLEVBQUUsQ0FBQyxDQUNyQixDQUFDLENBQUMsdURBQXVEO0FBQzVELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvYmxvYi92Mi4xNzUuMS9wYWNrYWdlcy9AYXdzLWNkay9hd3MtZWMyLWFscGhhL2xpYi92cGMtdjIudHNcblxuaW1wb3J0IHtcbiAgdnBjLFxuICB2cGNJcHY0Q2lkckJsb2NrQXNzb2NpYXRpb24sXG4gIHZwY0lwdjZDaWRyQmxvY2tBc3NvY2lhdGlvbixcbn0gZnJvbSBcIkBjZGt0Zi9wcm92aWRlci1hd3NcIjtcbmltcG9ydCB7IFRlcnJhZm9ybVJlc291cmNlIH0gZnJvbSBcImNka3RmXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QsIERlcGVuZGVuY3lHcm91cCwgSURlcGVuZGFibGUgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgQXdzQ29uc3RydWN0QmFzZSwgQXdzQ29uc3RydWN0UHJvcHMgfSBmcm9tIFwiLi4vYXdzLWNvbnN0cnVjdFwiO1xuaW1wb3J0IHsgQXdzU3RhY2sgfSBmcm9tIFwiLi4vYXdzLXN0YWNrXCI7XG4vLyBUT0RPOiBVc2UgVGFnTWFuYWdlciBhbmQgdGFnLWFzcGVjdCBpbnN0ZWFkXG5pbXBvcnQgeyBUYWdzIH0gZnJvbSBcIi4uL2F3cy10YWdzXCI7XG4vLyBpbXBvcnQgeyBUYWdzIH0gZnJvbSBcIi4uL3RhZy1hc3BlY3RcIjtcbmltcG9ydCB7IElwYW1PcHRpb25zLCBJSXBhbVBvb2wgfSBmcm9tIFwiLi9pcGFtXCI7XG5pbXBvcnQgeyBEZWZhdWx0SW5zdGFuY2VUZW5hbmN5LCBJU3VibmV0LCBTdWJuZXRUeXBlIH0gZnJvbSBcIi4vdnBjXCI7XG5pbXBvcnQgeyBBcm4gfSBmcm9tIFwiLi4vYXJuXCI7XG5pbXBvcnQgeyBJU3VibmV0VjIsIFN1Ym5ldFYyLCBTdWJuZXRWMkF0dHJpYnV0ZXMgfSBmcm9tIFwiLi9zdWJuZXQtdjJcIjtcbmltcG9ydCB7IElWcGNWMiwgVnBjVjJCYXNlIH0gZnJvbSBcIi4vdnBjLXYyLWJhc2VcIjtcblxuLyoqXG4gKiBBZGRpdGlvbmFsIHByb3BzIG5lZWRlZCBmb3Igc2Vjb25kYXJ5IEFkZHJlc3NcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWNvbmRhcnlBZGRyZXNzUHJvcHMge1xuICAvKipcbiAgICogUmVxdWlyZWQgdG8gc2V0IFNlY29uZGFyeSBjaWRyIGJsb2NrIHJlc291cmNlIG5hbWVcbiAgICogaW4gb3JkZXIgdG8gZ2VuZXJhdGUgdW5pcXVlIGxvZ2ljYWwgaWQgZm9yIHRoZSByZXNvdXJjZS5cbiAgICovXG4gIHJlYWRvbmx5IGNpZHJCbG9ja05hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBJcEFkZHJlc3Mgb3B0aW9ucyB0byBkZWZpbmUgVlBDIFYyXG4gKi9cbmV4cG9ydCBjbGFzcyBJcEFkZHJlc3NlcyB7XG4gIC8qKlxuICAgKiBBbiBJUHY0IENJRFIgUmFuZ2VcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaXB2NChcbiAgICBpcHY0Q2lkcjogc3RyaW5nLFxuICAgIHByb3BzPzogU2Vjb25kYXJ5QWRkcmVzc1Byb3BzLFxuICApOiBJSXBBZGRyZXNzZXMge1xuICAgIHJldHVybiBuZXcgaXB2NENpZHJBbGxvY2F0aW9uKGlwdjRDaWRyLCBwcm9wcyk7XG4gIH1cblxuICAvKipcbiAgICogQW4gSXB2NCBJcGFtIFBvb2xcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaXB2NElwYW0oaXB2NElwYW1PcHRpb25zOiBJcGFtT3B0aW9ucyk6IElJcEFkZHJlc3NlcyB7XG4gICAgcmV0dXJuIG5ldyBJcGFtSXB2NChpcHY0SXBhbU9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFuIElwdjYgSXBhbSBQb29sXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGlwdjZJcGFtKGlwdjZJcGFtT3B0aW9uczogSXBhbU9wdGlvbnMpOiBJSXBBZGRyZXNzZXMge1xuICAgIHJldHVybiBuZXcgSXBhbUlwdjYoaXB2NklwYW1PcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbWF6b24gUHJvdmlkZWQgSXB2NiByYW5nZVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBhbWF6b25Qcm92aWRlZElwdjYocHJvcHM6IFNlY29uZGFyeUFkZHJlc3NQcm9wcyk6IElJcEFkZHJlc3NlcyB7XG4gICAgcmV0dXJuIG5ldyBBbWF6b25Qcm92aWRlZChwcm9wcyk7XG4gIH1cbn1cblxuLyoqXG4gKiBDb25zb2xpZGF0ZWQgcmV0dXJuIHBhcmFtZXRlcnMgdG8gcGFzcyB0byBWUEMgY29uc3RydWN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVnBjQ2lkck9wdGlvbnMge1xuICAvKipcbiAgICogSVB2NCBDSURSIEJsb2NrXG4gICAqXG4gICAqIEBkZWZhdWx0ICcxMC4wLjAuMC8xNidcbiAgICovXG4gIHJlYWRvbmx5IGlwdjRDaWRyQmxvY2s/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENJRFIgTWFzayBmb3IgVnBjXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gT25seSByZXF1aXJlZCB3aGVuIHVzaW5nIElQQU0gSXB2NFxuICAgKi9cbiAgcmVhZG9ubHkgaXB2NE5ldG1hc2tMZW5ndGg/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIElwdjQgSVBBTSBQb29sXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gT25seSByZXF1aXJlZCB3aGVuIHVzaW5nIElQQU0gSXB2NFxuICAgKi9cbiAgcmVhZG9ubHkgaXB2NElwYW1Qb29sPzogSUlwYW1Qb29sO1xuXG4gIC8qKlxuICAgKiBDSURSIE1hc2sgZm9yIFZwY1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIE9ubHkgcmVxdWlyZWQgd2hlbiB1c2luZyBBV1MgSXBhbVxuICAgKi9cbiAgcmVhZG9ubHkgaXB2Nk5ldG1hc2tMZW5ndGg/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIElwdjYgSVBBTSBwb29sIGlkIGZvciBWUEMgcmFuZ2UsIGNhbiBvbmx5IGJlIGRlZmluZWRcbiAgICogdW5kZXIgcHVibGljIHNjb3BlXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gcG9vbCBpZFxuICAgKi9cbiAgcmVhZG9ubHkgaXB2NklwYW1Qb29sPzogSUlwYW1Qb29sO1xuXG4gIC8qKlxuICAgKiBVc2UgYW1hem9uIHByb3ZpZGVkIElQIHJhbmdlXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBhbWF6b25Qcm92aWRlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIERlcGVuZGVuY3kgdG8gYXNzb2NpYXRlIElwdjYgQ0lEUiBibG9ja1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIGRlcGVuZGVuY3lcbiAgICovXG4gIHJlYWRvbmx5IGRlcGVuZGVuY2llcz86IFRlcnJhZm9ybVJlc291cmNlW107XG5cbiAgLyoqXG4gICAqIFJlcXVpcmVkIHRvIHNldCBTZWNvbmRhcnkgY2lkciBibG9jayByZXNvdXJjZSBuYW1lXG4gICAqIGluIG9yZGVyIHRvIGdlbmVyYXRlIHVuaXF1ZSBsb2dpY2FsIGlkIGZvciB0aGUgcmVzb3VyY2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gbmFtZSBmb3IgcHJpbWFyeSBhZGRyZXNzZXNcbiAgICovXG4gIHJlYWRvbmx5IGNpZHJCbG9ja05hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElQdjQgQ0lEUiBwcm92aXNpb25lZCB1bmRlciBwb29sXG4gICAqIFJlcXVpcmVkIHRvIGNoZWNrIGZvciBvdmVybGFwcGluZyBDSURScyBhZnRlciBwcm92aXNpb25pbmdcbiAgICogaXMgY29tcGxldGUgdW5kZXIgSVBBTSBwb29sXG4gICAqIEBkZWZhdWx0IC0gbm8gSVBBTSBJUHY0IENJRFIgcmFuZ2UgaXMgcHJvdmlzaW9uZWQgdXNpbmcgSVBBTVxuICAgKi9cbiAgcmVhZG9ubHkgaXB2NElwYW1Qcm92aXNpb25lZENpZHJzPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogSW1wbGVtZW50cyBpcCBhZGRyZXNzIGFsbG9jYXRpb24gYWNjb3JkaW5nIHRvIHRoZSBJUEFkcmVzcyB0eXBlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUlwQWRkcmVzc2VzIHtcbiAgLyoqXG4gICAqIE1ldGhvZCB0byBkZWZpbmUgdGhlIGltcGxlbWVudGF0aW9uIGxvZ2ljIG9mXG4gICAqIElQIGFkZHJlc3MgYWxsb2NhdGlvblxuICAgKi9cbiAgYWxsb2NhdGVWcGNDaWRyKCk6IFZwY0NpZHJPcHRpb25zO1xufVxuXG4vKipcbiAqIE5hbWUgdGFnIGNvbnN0YW50XG4gKi9cbmNvbnN0IE5BTUVfVEFHOiBzdHJpbmcgPSBcIk5hbWVcIjtcblxuLyoqXG4gKiBQcm9wZXJ0aWVzIHRvIGRlZmluZSBWUENcbiAqIFtkaXNhYmxlLWF3c2xpbnQ6ZnJvbS1tZXRob2RdXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVnBjVjJQcm9wcyBleHRlbmRzIEF3c0NvbnN0cnVjdFByb3BzIHtcbiAgLyoqIEEgbXVzdCBJUHY0IENJRFIgYmxvY2sgZm9yIHRoZSBWUENcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vdnBjL2xhdGVzdC91c2VyZ3VpZGUvdnBjLWNpZHItYmxvY2tzLmh0bWxcbiAgICpcbiAgICogQGRlZmF1bHQgLSBJcHY0IENJRFIgQmxvY2sgKCcxMC4wLjAuMC8xNicpXG4gICAqL1xuICByZWFkb25seSBwcmltYXJ5QWRkcmVzc0Jsb2NrPzogSUlwQWRkcmVzc2VzO1xuXG4gIC8qKlxuICAgKiBUaGUgc2Vjb25kYXJ5IENJRFIgYmxvY2tzIGFzc29jaWF0ZWQgd2l0aCB0aGUgVlBDLlxuICAgKiBDYW4gYmUgIElQdjQgb3IgSVB2NiwgdHdvIElQdjQgcmFuZ2VzIG11c3QgZm9sbG93IFJGQyMxOTE4IGNvbnZlbnRpb25cbiAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3ZwYy9sYXRlc3QvdXNlcmd1aWRlL3ZwYy1jaWRyLWJsb2Nrcy5odG1sI3ZwYy1yZXNpemV9LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIHNlY29uZGFyeSBJUCBhZGRyZXNzXG4gICAqL1xuICByZWFkb25seSBzZWNvbmRhcnlBZGRyZXNzQmxvY2tzPzogSUlwQWRkcmVzc2VzW107XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBpbnN0YW5jZXMgbGF1bmNoZWQgaW4gdGhlIFZQQyBnZXQgRE5TIGhvc3RuYW1lcy5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlRG5zSG9zdG5hbWVzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIEROUyByZXNvbHV0aW9uIGlzIHN1cHBvcnRlZCBmb3IgdGhlIFZQQy5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlRG5zU3VwcG9ydD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IHRlbmFuY3kgb2YgaW5zdGFuY2VzIGxhdW5jaGVkIGludG8gdGhlIFZQQy5cbiAgICpcbiAgICogQnkgc2V0dGluZyB0aGlzIHRvIGRlZGljYXRlZCB0ZW5hbmN5LCBpbnN0YW5jZXMgd2lsbCBiZSBsYXVuY2hlZCBvblxuICAgKiBoYXJkd2FyZSBkZWRpY2F0ZWQgdG8gYSBzaW5nbGUgQVdTIGN1c3RvbWVyLCB1bmxlc3Mgc3BlY2lmaWNhbGx5IHNwZWNpZmllZFxuICAgKiBhdCBpbnN0YW5jZSBsYXVuY2ggdGltZS4gUGxlYXNlIG5vdGUsIG5vdCBhbGwgaW5zdGFuY2UgdHlwZXMgYXJlIHVzYWJsZVxuICAgKiB3aXRoIERlZGljYXRlZCB0ZW5hbmN5LlxuICAgKlxuICAgKiBAZGVmYXVsdCBEZWZhdWx0SW5zdGFuY2VUZW5hbmN5LkRlZmF1bHQgKHNoYXJlZCkgdGVuYW5jeVxuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdEluc3RhbmNlVGVuYW5jeT86IERlZmF1bHRJbnN0YW5jZVRlbmFuY3k7XG5cbiAgLyoqXG4gICAqIFBoeXNpY2FsIG5hbWUgZm9yIHRoZSBWUENcbiAgICpcbiAgICogQGRlZmF1bHQgLSBhdXRvZ2VuZXJhdGVkIGJ5IENES1xuICAgKi9cbiAgcmVhZG9ubHkgdnBjTmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBPcHRpb25zIHRvIGltcG9ydCBhIFZQQyBjcmVhdGVkIG91dHNpZGUgb2YgQ0RLIHN0YWNrXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVnBjVjJBdHRyaWJ1dGVzIHtcbiAgLyoqXG4gICAqIFRoZSBWUEMgSURcbiAgICogUmVmZXJzIHRvIHBoeXNpY2FsIElkIG9mIHRoZSByZXNvdXJjZVxuICAgKi9cbiAgcmVhZG9ubHkgdnBjSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogUmVnaW9uIGluIHdoaWNoIGltcG9ydGVkIFZQQyBpcyBob3N0ZWRcbiAgICogcmVxdWlyZWQgaW4gY2FzZSBvZiBjcm9zcyByZWdpb24gVlBDXG4gICAqIGFzIGdpdmVuIHZhbHVlIHdpbGwgYmUgdXNlZCB0byBzZXQgZmllbGQgcmVnaW9uIGZvciBpbXBvcnRlZCBWUEMsXG4gICAqIHdoaWNoIHRoZW4gbGF0ZXIgY2FuIGJlIHVzZWQgZm9yIGVzdGFibGlzaGluZyBWUEMgcGVlcmluZyBjb25uZWN0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGNvbnN0cnVjdGVkIHdpdGggc3RhY2sgcmVnaW9uIHZhbHVlXG4gICAqL1xuICByZWFkb25seSByZWdpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgQVdTIGFjY291bnQgdGhhdCBvd25zIHRoZSBpbXBvcnRlZCBWUENcbiAgICogcmVxdWlyZWQgaW4gY2FzZSBvZiBjcm9zcyBhY2NvdW50IFZQQ1xuICAgKiBhcyBnaXZlbiB2YWx1ZSB3aWxsIGJlIHVzZWQgdG8gc2V0IGZpZWxkIGFjY291bnQgZm9yIGltcG9ydGVkIFZQQyxcbiAgICogd2hpY2ggdGhlbiBsYXRlciBjYW4gYmUgdXNlZCBmb3IgZXN0YWJsaXNoaW5nIFZQQyBwZWVyaW5nIGNvbm5lY3Rpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gY29uc3RydWN0ZWQgd2l0aCBzdGFjayBhY2NvdW50IHZhbHVlXG4gICAqL1xuICByZWFkb25seSBvd25lckFjY291bnRJZD86IHN0cmluZztcblxuICAvKipcbiAgICogUHJpbWFyeSBWUEMgQ0lEUiBCbG9jayBvZiB0aGUgaW1wb3J0ZWQgVlBDXG4gICAqIENhbiBvbmx5IGJlIElQdjRcbiAgICovXG4gIHJlYWRvbmx5IHZwY0NpZHJCbG9jazogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIFZQTiBHYXRld2F5IGlzIGF0dGFjaGVkIHRvIHRoZSBWUENcbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBWUE4gR2F0ZXdheVxuICAgKi9cbiAgcmVhZG9ubHkgdnBuR2F0ZXdheUlkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTdWJuZXRzIGFzc29jaWF0ZWQgd2l0aCBpbXBvcnRlZCBWUENcbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBzdWJuZXRzIHByb3ZpZGVkIHRvIGJlIGltcG9ydGVkXG4gICAqL1xuICByZWFkb25seSBzdWJuZXRzPzogU3VibmV0VjJBdHRyaWJ1dGVzW107XG5cbiAgLyoqXG4gICAqIEltcG9ydCBTZWNvbmRhcnkgQ0lEUiBibG9ja3MgYXNzb2NpYXRlZCB3aXRoIFZQQ1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIHNlY29uZGFyeSBJUCBhZGRyZXNzXG4gICAqL1xuICByZWFkb25seSBzZWNvbmRhcnlDaWRyQmxvY2tzPzogVlBDQ2lkckJsb2NrYXR0cmlidXRlc1tdO1xufVxuXG4vKipcbiAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgYSBmb3VuZGF0aW9uIGZvciBjcmVhdGluZyBhbmQgY29uZmlndXJpbmcgYSBWUEMgd2l0aCBhZHZhbmNlZCBmZWF0dXJlcyBzdWNoIGFzIElQQU0gKElQIEFkZHJlc3MgTWFuYWdlbWVudCkgYW5kIElQdjYgc3VwcG9ydC5cbiAqXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nkay9hcGkvdjIvZG9jcy9hd3MtY2RrLWxpYi5hd3NfZWMyLlZwYy5odG1sfEFXUyBDREsgRG9jdW1lbnRhdGlvbiBvbiBWUENzfS5cbiAqXG4gKiBAcmVzb3VyY2UgYXdzX3ZwY1xuICovXG5leHBvcnQgY2xhc3MgVnBjVjIgZXh0ZW5kcyBWcGNWMkJhc2Uge1xuICAvKipcbiAgICogQ3JlYXRlIGEgVlBDIGZyb20gZXhpc3RpbmcgYXR0cmlidXRlc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tVnBjVjJBdHRyaWJ1dGVzKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBhdHRyczogVnBjVjJBdHRyaWJ1dGVzLFxuICApOiBJVnBjVjIge1xuICAgIC8qKlxuICAgICAqIEludGVybmFsIGNsYXNzIHRvIGFsbG93IHVzZXJzIHRvIGltcG9ydCBWUENcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBjbGFzcyBJbXBvcnRlZFZwY1YyIGV4dGVuZHMgVnBjVjJCYXNlIHtcbiAgICAgIHB1YmxpYyByZWFkb25seSB2cGNJZDogc3RyaW5nO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHZwY0Fybjogc3RyaW5nO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHB1YmxpY1N1Ym5ldHM6IElTdWJuZXRWMltdID0gW107XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgcHJpdmF0ZVN1Ym5ldHM6IElTdWJuZXRWMltdID0gW107XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgaXNvbGF0ZWRTdWJuZXRzOiBJU3VibmV0VjJbXSA9IFtdO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGludGVybmV0Q29ubmVjdGl2aXR5RXN0YWJsaXNoZWQ6IElEZXBlbmRhYmxlID1cbiAgICAgICAgbmV3IERlcGVuZGVuY3lHcm91cCgpO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGlwdjRDaWRyQmxvY2s6IHN0cmluZztcbiAgICAgIHB1YmxpYyByZWFkb25seSByZWdpb246IHN0cmluZztcbiAgICAgIHB1YmxpYyByZWFkb25seSBvd25lckFjY291bnRJZDogc3RyaW5nO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHZwY05hbWU/OiBzdHJpbmc7XG4gICAgICBwcml2YXRlIHJlYWRvbmx5IF9wYXJ0aXRpb24/OiBzdHJpbmc7XG5cbiAgICAgIC8qXG4gICAgICAgKiBSZWZlcmVuY2UgdG8gYWxsIHNlY29uZGFyeSBibG9ja3MgYXR0YWNoZWRcbiAgICAgICAqL1xuICAgICAgcHVibGljIHJlYWRvbmx5IHNlY29uZGFyeUNpZHJCbG9jaz86IElWUENDaWRyQmxvY2tbXTtcblxuICAgICAgLyoqXG4gICAgICAgKiBSZWZlcnMgdG8gYWN0dWFsIFZQQyBSZXNvdXJjZSBhdHRyaWJ1dGUgaW4gbm9uLWltcG9ydGVkIFZQQ1xuICAgICAgICogUmVxdWlyZWQgdG8gaW1wbGVtZW50IGhlcmUgZHVlIHRvIGV4dGVuc2lvbiBmcm9tIEJhc2UgY2xhc3NcbiAgICAgICAqL1xuICAgICAgcHVibGljIHJlYWRvbmx5IHZwY0NpZHJCbG9jazogc3RyaW5nO1xuXG4gICAgICAvLyBSZXF1aXJlZCB0byBkbyBDSURSIHJhbmdlIHRlc3Qgb24gaW1wb3J0ZWQgVlBDcyB0byBjcmVhdGUgbmV3IHN1Ym5ldHNcbiAgICAgIHB1YmxpYyByZWFkb25seSBpcHY0SXBhbVByb3Zpc2lvbmVkQ2lkcnM6IHN0cmluZ1tdID0gW107XG5cbiAgICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBjb25zdHJ1Y3Q6IENvbnN0cnVjdCxcbiAgICAgICAgY29uc3RydWN0SWQ6IHN0cmluZyxcbiAgICAgICAgcHJvcHM6IFZwY1YyQXR0cmlidXRlcyxcbiAgICAgICkge1xuICAgICAgICBzdXBlcihjb25zdHJ1Y3QsIGNvbnN0cnVjdElkKTtcbiAgICAgICAgKHRoaXMudnBjSWQgPSBwcm9wcy52cGNJZCksXG4gICAgICAgICAgKHRoaXMucmVnaW9uID0gcHJvcHMucmVnaW9uID8/IHRoaXMuc3RhY2sucmVnaW9uKSxcbiAgICAgICAgICAodGhpcy5vd25lckFjY291bnRJZCA9IHByb3BzLm93bmVyQWNjb3VudElkID8/IHRoaXMuc3RhY2suYWNjb3VudCksXG4gICAgICAgICAgKHRoaXMuX3BhcnRpdGlvbiA9IEF3c1N0YWNrLm9mQXdzQ29uc3RydWN0KHRoaXMpLnBhcnRpdGlvbiksXG4gICAgICAgICAgKHRoaXMudnBjQXJuID0gQXJuLmZvcm1hdChcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc2VydmljZTogXCJlYzJcIixcbiAgICAgICAgICAgICAgcmVzb3VyY2U6IFwidnBjXCIsXG4gICAgICAgICAgICAgIHJlc291cmNlTmFtZTogdGhpcy52cGNJZCxcbiAgICAgICAgICAgICAgcmVnaW9uOiB0aGlzLnJlZ2lvbixcbiAgICAgICAgICAgICAgYWNjb3VudDogdGhpcy5vd25lckFjY291bnRJZCxcbiAgICAgICAgICAgICAgcGFydGl0aW9uOiB0aGlzLl9wYXJ0aXRpb24sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGhpcy5zdGFjayxcbiAgICAgICAgICApKTtcblxuICAgICAgICAvLyBQb3B1bGF0ZSByZWdpb24gYW5kIGFjY291bnQgZmllbGRzIHRoYXQgY2FuIGJlIHVzZWQgdG8gc2V0IHVwIHBlZXJpbmcgY29ubmVjdGlvblxuICAgICAgICAvLyBzYW1wbGUgdnBjIEFybiAtIGFybjphd3M6ZWMyOnVzLXdlc3QtMjoxMjM0NTY3ODkwMTI6dnBjL3ZwYy0wMTIzNDU2Nzg5YWJjZGVmMFxuICAgICAgICB0aGlzLnJlZ2lvbiA9IHRoaXMudnBjQXJuLnNwbGl0KFwiOlwiKVszXTtcbiAgICAgICAgdGhpcy5vd25lckFjY291bnRJZCA9IHRoaXMudnBjQXJuLnNwbGl0KFwiOlwiKVs0XTtcbiAgICAgICAgLy8gUmVmZXJzIHRvIGFjdHVhbCBWUEMgUmVzb3VyY2UgYXR0cmlidXRlIGluIG5vbi1pbXBvcnRlZCBWUENcbiAgICAgICAgdGhpcy52cGNDaWRyQmxvY2sgPSBwcm9wcy52cGNDaWRyQmxvY2s7XG4gICAgICAgIC8vIFJlcXVpcmVkIGZvciBzdWJuZXQgcmFuZ2UgcmVsYXRlZCBjaGVja3NcbiAgICAgICAgdGhpcy5pcHY0Q2lkckJsb2NrID0gcHJvcHMudnBjQ2lkckJsb2NrO1xuICAgICAgICB0aGlzLl92cG5HYXRld2F5SWQgPSBwcm9wcy52cG5HYXRld2F5SWQ7XG5cbiAgICAgICAgaWYgKHByb3BzLnN1Ym5ldHMpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHN1Ym5ldCBvZiBwcm9wcy5zdWJuZXRzKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHN1Ym5ldC5zdWJuZXRUeXBlID09PSBTdWJuZXRUeXBlLlBSSVZBVEVfV0lUSF9FR1JFU1MgfHxcbiAgICAgICAgICAgICAgc3VibmV0LnN1Ym5ldFR5cGUgPT09IFN1Ym5ldFR5cGUuUFJJVkFURV9XSVRIX05BVCB8fFxuICAgICAgICAgICAgICBzdWJuZXQuc3VibmV0VHlwZSA9PT0gU3VibmV0VHlwZS5QUklWQVRFXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdGhpcy5wcml2YXRlU3VibmV0cy5wdXNoKFxuICAgICAgICAgICAgICAgIFN1Ym5ldFYyLmZyb21TdWJuZXRWMkF0dHJpYnV0ZXMoXG4gICAgICAgICAgICAgICAgICBzY29wZSxcbiAgICAgICAgICAgICAgICAgIHN1Ym5ldC5zdWJuZXROYW1lID8/IFwiSW1wb3J0ZWRQcml2YXRlU3VibmV0XCIsXG4gICAgICAgICAgICAgICAgICBzdWJuZXQsXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc3VibmV0LnN1Ym5ldFR5cGUgPT09IFN1Ym5ldFR5cGUuUFVCTElDKSB7XG4gICAgICAgICAgICAgIHRoaXMucHVibGljU3VibmV0cy5wdXNoKFxuICAgICAgICAgICAgICAgIFN1Ym5ldFYyLmZyb21TdWJuZXRWMkF0dHJpYnV0ZXMoXG4gICAgICAgICAgICAgICAgICBzY29wZSxcbiAgICAgICAgICAgICAgICAgIHN1Ym5ldC5zdWJuZXROYW1lID8/IFwiSW1wb3J0ZWRQdWJsaWNTdWJuZXRcIixcbiAgICAgICAgICAgICAgICAgIHN1Ym5ldCxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgc3VibmV0LnN1Ym5ldFR5cGUgPT09IFN1Ym5ldFR5cGUuSVNPTEFURUQgfHxcbiAgICAgICAgICAgICAgc3VibmV0LnN1Ym5ldFR5cGUgPT09IFN1Ym5ldFR5cGUuUFJJVkFURV9JU09MQVRFRFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHRoaXMuaXNvbGF0ZWRTdWJuZXRzLnB1c2goXG4gICAgICAgICAgICAgICAgU3VibmV0VjIuZnJvbVN1Ym5ldFYyQXR0cmlidXRlcyhcbiAgICAgICAgICAgICAgICAgIHNjb3BlLFxuICAgICAgICAgICAgICAgICAgc3VibmV0LnN1Ym5ldE5hbWUgPz8gXCJJbXBvcnRlZElzb2xhdGVkU3VibmV0XCIsXG4gICAgICAgICAgICAgICAgICBzdWJuZXQsXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWNvbmRhcnlDaWRyQmxvY2sgPSBwcm9wcy5zZWNvbmRhcnlDaWRyQmxvY2tzPy5tYXAoKGNpZHJCbG9jaykgPT5cbiAgICAgICAgICBWUENDaWRyQmxvY2suZnJvbVZQQ0NpZHJCbG9ja2F0dHJpYnV0ZXMoXG4gICAgICAgICAgICBzY29wZSxcbiAgICAgICAgICAgIGNpZHJCbG9jay5jaWRyQmxvY2tOYW1lID8/IFwiSW1wb3J0ZWRTZWNvbmRhcnlDaWRyQmxvY2tcIixcbiAgICAgICAgICAgIHsgLi4uY2lkckJsb2NrIH0sXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHByb3BzLnNlY29uZGFyeUNpZHJCbG9ja3MpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGNpZHJCbG9jayBvZiBwcm9wcy5zZWNvbmRhcnlDaWRyQmxvY2tzKSB7XG4gICAgICAgICAgICBpZiAoY2lkckJsb2NrLmlwdjRJcGFtUHJvdmlzaW9uZWRDaWRycykge1xuICAgICAgICAgICAgICB0aGlzLmlwdjRJcGFtUHJvdmlzaW9uZWRDaWRycy5wdXNoKFxuICAgICAgICAgICAgICAgIC4uLmNpZHJCbG9jay5pcHY0SXBhbVByb3Zpc2lvbmVkQ2lkcnMsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXcgSW1wb3J0ZWRWcGNWMihzY29wZSwgaWQsIGF0dHJzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZGVudGlmaWVyIGZvciB0aGlzIFZQQ1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHZwY0lkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB2cGNBcm46IHN0cmluZztcblxuICAvKipcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHZwY0NpZHJCbG9jazogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIElQdjYgQ0lEUiBibG9ja3MgZm9yIHRoZSBWUEMuXG4gICAqXG4gICAqIFNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLXZwYy5odG1sI2F3cy1yZXNvdXJjZS1lYzItdnBjLXJldHVybi12YWx1ZXNcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBpcHY2Q2lkckJsb2Nrczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBwcm92aWRlciBvZiBpcHY0IGFkZHJlc3Nlc1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlwQWRkcmVzc2VzOiBJSXBBZGRyZXNzZXM7XG5cbiAgLyoqXG4gICAqIFRoZSBBV1MgQ2xvdWRGb3JtYXRpb24gcmVzb3VyY2UgcmVwcmVzZW50aW5nIHRoZSBWUEMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcmVzb3VyY2U6IHZwYy5WcGM7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiBpbnN0YW5jZXMgbGF1bmNoZWQgaW4gdGhpcyBWUEMgd2lsbCBoYXZlIHB1YmxpYyBETlMgaG9zdG5hbWVzLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGRuc0hvc3RuYW1lc0VuYWJsZWQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiBETlMgc3VwcG9ydCBpcyBlbmFibGVkIGZvciB0aGlzIFZQQy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBkbnNTdXBwb3J0RW5hYmxlZDogYm9vbGVhbjtcblxuICAvKipcbiAgICogSXNvbGF0ZWQgU3VibmV0cyB0aGF0IGFyZSBwYXJ0IG9mIHRoaXMgVlBDLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlzb2xhdGVkU3VibmV0czogSVN1Ym5ldFtdO1xuXG4gIC8qKlxuICAgKiBQdWJsaWMgU3VibmV0cyB0aGF0IGFyZSBwYXJ0IG9mIHRoaXMgVlBDLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHB1YmxpY1N1Ym5ldHM6IElTdWJuZXRbXTtcblxuICAvKipcbiAgICogUHVibGljIFN1Ym5ldHMgdGhhdCBhcmUgcGFydCBvZiB0aGlzIFZQQy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwcml2YXRlU3VibmV0czogSVN1Ym5ldFtdO1xuXG4gIC8qKlxuICAgKiBUbyBkZWZpbmUgZGVwZW5kZW5jeSBvbiBpbnRlcm5ldCBjb25uZWN0aXZpdHlcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBpbnRlcm5ldENvbm5lY3Rpdml0eUVzdGFibGlzaGVkOiBJRGVwZW5kYWJsZTtcblxuICAvKipcbiAgICogcmVmZXJlbmNlIHRvIGFsbCBzZWNvbmRhcnkgYmxvY2tzIGF0dGFjaGVkXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc2Vjb25kYXJ5Q2lkckJsb2NrPzogSVZQQ0NpZHJCbG9ja1tdID1cbiAgICBuZXcgQXJyYXk8SVZQQ0NpZHJCbG9jaz4oKTtcblxuICAvKipcbiAgICogSVB2NCBDSURSIHByb3Zpc2lvbmVkIHVzaW5nIElQQU0gcG9vbFxuICAgKiBSZXF1aXJlZCB0byBjaGVjayBmb3Igb3ZlcmxhcHBpbmcgQ0lEUnMgYWZ0ZXIgcHJvdmlzaW9uaW5nXG4gICAqIGlzIGNvbXBsZXRlIHVuZGVyIElQQU1cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBpcHY0SXBhbVByb3Zpc2lvbmVkQ2lkcnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogUmVnaW9uIGZvciB0aGlzIFZQQ1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJlZ2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJZGVudGlmaWVyIG9mIHRoZSBvd25lciBmb3IgdGhpcyBWUENcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBvd25lckFjY291bnRJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBGb3IgdmFsaWRhdGlvbiB0byBkZWZpbmUgSVB2NiBzdWJuZXRzLCBzZXQgdG8gdHJ1ZSBpbiBjYXNlIG9mXG4gICAqIEFtYXpvbiBQcm92aWRlZCBJUHY2IGNpZHIgcmFuZ2VcbiAgICogaWYgdHJ1ZSwgSVB2NiBhZGRyZXNzZXMgY2FuIGJlIGF0dGFjaGVkIHRvIHRoZSBzdWJuZXRzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHVzZUlwdjY6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogVnBjTmFtZSB0byBiZSB1c2VkIGZvciB0YWdnaW5nIGl0cyBjb21wb25lbnRzXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB2cGNOYW1lPzogc3RyaW5nO1xuXG4gIHB1YmxpYyByZWFkb25seSBpcHY0Q2lkckJsb2NrOiBzdHJpbmcgPSBcIlwiO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBWcGNWMlByb3BzID0ge30pIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcbiAgICAvLyAvLyBObyBMYXp5LnN0cmluZ1ZhbHVlID9cbiAgICAvLyBjb25zdCBwaHlzaWNhbE5hbWUgPVxuICAgIC8vICAgcHJvcHMudnBjTmFtZSA/P1xuICAgIC8vICAgQXdzU3RhY2sudW5pcXVlUmVzb3VyY2VOYW1lKHRoaXMsIHtcbiAgICAvLyAgICAgbWF4TGVuZ3RoOiAxMjgsXG4gICAgLy8gICAgIGFsbG93ZWRTcGVjaWFsQ2hhcmFjdGVyczogXCJfXCIsXG4gICAgLy8gICB9KTtcbiAgICB0aGlzLnZwY05hbWUgPSBwcm9wcy52cGNOYW1lO1xuICAgIHRoaXMuaXBBZGRyZXNzZXMgPVxuICAgICAgcHJvcHMucHJpbWFyeUFkZHJlc3NCbG9jayA/PyBJcEFkZHJlc3Nlcy5pcHY0KFwiMTAuMC4wLjAvMTZcIik7XG4gICAgY29uc3QgdnBjT3B0aW9ucyA9IHRoaXMuaXBBZGRyZXNzZXMuYWxsb2NhdGVWcGNDaWRyKCk7XG5cbiAgICB0aGlzLmRuc0hvc3RuYW1lc0VuYWJsZWQgPVxuICAgICAgcHJvcHMuZW5hYmxlRG5zSG9zdG5hbWVzID09IG51bGwgPyB0cnVlIDogcHJvcHMuZW5hYmxlRG5zSG9zdG5hbWVzO1xuICAgIHRoaXMuZG5zU3VwcG9ydEVuYWJsZWQgPVxuICAgICAgcHJvcHMuZW5hYmxlRG5zU3VwcG9ydCA9PSBudWxsID8gdHJ1ZSA6IHByb3BzLmVuYWJsZURuc1N1cHBvcnQ7XG4gICAgY29uc3QgaW5zdGFuY2VUZW5hbmN5ID0gcHJvcHMuZGVmYXVsdEluc3RhbmNlVGVuYW5jeSB8fCBcImRlZmF1bHRcIjtcbiAgICB0aGlzLnJlc291cmNlID0gbmV3IHZwYy5WcGModGhpcywgXCJSZXNvdXJjZVwiLCB7XG4gICAgICBjaWRyQmxvY2s6IHZwY09wdGlvbnMuaXB2NENpZHJCbG9jaywgLy9mb3IgSXB2NCBhZGRyZXNzZXMgQ0lEUiBibG9ja1xuICAgICAgZW5hYmxlRG5zSG9zdG5hbWVzOiB0aGlzLmRuc0hvc3RuYW1lc0VuYWJsZWQsXG4gICAgICBlbmFibGVEbnNTdXBwb3J0OiB0aGlzLmRuc1N1cHBvcnRFbmFibGVkLFxuICAgICAgaXB2NElwYW1Qb29sSWQ6IHZwY09wdGlvbnMuaXB2NElwYW1Qb29sPy5pcGFtUG9vbElkLCAvLyBmb3IgSXB2NCBpcGFtIG9wdGlvblxuICAgICAgaXB2NE5ldG1hc2tMZW5ndGg6IHZwY09wdGlvbnMuaXB2NE5ldG1hc2tMZW5ndGgsIC8vIGZvciBJcHY0IGlwYW0gb3B0aW9uXG4gICAgICBpbnN0YW5jZVRlbmFuY3k6IGluc3RhbmNlVGVuYW5jeSxcbiAgICB9KTtcblxuICAgIHRoaXMubm9kZS5kZWZhdWx0Q2hpbGQgPSB0aGlzLnJlc291cmNlO1xuICAgIHRoaXMudnBjQ2lkckJsb2NrID0gdGhpcy5yZXNvdXJjZS5jaWRyQmxvY2s7XG4gICAgaWYgKHZwY09wdGlvbnMuaXB2NENpZHJCbG9jaykge1xuICAgICAgdGhpcy5pcHY0Q2lkckJsb2NrID0gdnBjT3B0aW9ucy5pcHY0Q2lkckJsb2NrO1xuICAgIH1cbiAgICAvLyBUT0RPOiBBZGRpdGlvbmFsIGNpZHIgYmxvY2tzP1xuICAgIHRoaXMuaXB2NkNpZHJCbG9ja3MgPSBbdGhpcy5yZXNvdXJjZS5pcHY2Q2lkckJsb2NrXTtcbiAgICB0aGlzLnZwY0lkID0gdGhpcy5yZXNvdXJjZS5pZDtcbiAgICB0aGlzLnZwY0FybiA9IEFybi5mb3JtYXQoXG4gICAgICB7XG4gICAgICAgIHNlcnZpY2U6IFwiZWMyXCIsXG4gICAgICAgIHJlc291cmNlOiBcInZwY1wiLFxuICAgICAgICByZXNvdXJjZU5hbWU6IHRoaXMudnBjSWQsXG4gICAgICB9LFxuICAgICAgdGhpcy5zdGFjayxcbiAgICApO1xuICAgIHRoaXMucmVnaW9uID0gdGhpcy5zdGFjay5yZWdpb247XG4gICAgdGhpcy5vd25lckFjY291bnRJZCA9IHRoaXMuc3RhY2suYWNjb3VudDtcbiAgICAvLyBBZGQgdGFnIHRvIHRoZSBWUEMgd2l0aCB0aGUgbmFtZSBwcm92aWRlZCBpbiBwcm9wZXJ0aWVzXG4gICAgVGFncy5vZih0aGlzKS5hZGQoTkFNRV9UQUcsIHByb3BzLnZwY05hbWUgfHwgdGhpcy5ub2RlLnBhdGgpO1xuICAgIGlmIChwcm9wcy5zZWNvbmRhcnlBZGRyZXNzQmxvY2tzKSB7XG4gICAgICBjb25zdCBzZWNvbmRhcnlBZGRyZXNzQmxvY2tzOiBJSXBBZGRyZXNzZXNbXSA9XG4gICAgICAgIHByb3BzLnNlY29uZGFyeUFkZHJlc3NCbG9ja3M7XG5cbiAgICAgIGZvciAoY29uc3Qgc2Vjb25kYXJ5QWRkcmVzc0Jsb2NrIG9mIHNlY29uZGFyeUFkZHJlc3NCbG9ja3MpIHtcbiAgICAgICAgY29uc3Qgc2Vjb25kYXJ5VnBjT3B0aW9uczogVnBjQ2lkck9wdGlvbnMgPVxuICAgICAgICAgIHNlY29uZGFyeUFkZHJlc3NCbG9jay5hbGxvY2F0ZVZwY0NpZHIoKTtcbiAgICAgICAgaWYgKCFzZWNvbmRhcnlWcGNPcHRpb25zLmNpZHJCbG9ja05hbWUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBcIkNpZHIgQmxvY2sgTmFtZSBpcyByZXF1aXJlZCB0byBjcmVhdGUgc2Vjb25kYXJ5IElQIGFkZHJlc3NcIixcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHNlY29uZGFyeVZwY09wdGlvbnMuYW1hem9uUHJvdmlkZWQgfHxcbiAgICAgICAgICBzZWNvbmRhcnlWcGNPcHRpb25zLmlwdjZJcGFtUG9vbFxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnVzZUlwdjYgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vdmFsaWRhdGUgQ0lEUiByYW5nZXMgcGVyIFJGQyAxOTE4XG4gICAgICAgIGlmIChzZWNvbmRhcnlWcGNPcHRpb25zLmlwdjRDaWRyQmxvY2shKSB7XG4gICAgICAgICAgY29uc3QgcmV0ID0gdmFsaWRhdGVJcHY0YWRkcmVzcyhcbiAgICAgICAgICAgIHNlY29uZGFyeVZwY09wdGlvbnMuaXB2NENpZHJCbG9jayxcbiAgICAgICAgICAgIHRoaXMucmVzb3VyY2UuY2lkckJsb2NrSW5wdXQsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAocmV0ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICBcIkNJRFIgYmxvY2sgc2hvdWxkIGJlIGluIHRoZSBzYW1lIFJGQyAxOTE4IHJhbmdlIGluIHRoZSBWUENcIixcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzZWNvbmRhcnlWcGNPcHRpb25zLmlwdjRJcGFtUHJvdmlzaW9uZWRDaWRycyEpIHtcbiAgICAgICAgICB0aGlzLmlwdjRJcGFtUHJvdmlzaW9uZWRDaWRycz8ucHVzaChcbiAgICAgICAgICAgIC4uLnNlY29uZGFyeVZwY09wdGlvbnMuaXB2NElwYW1Qcm92aXNpb25lZENpZHJzLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdnBjQ2lkckJsb2NrID0gbmV3IFZQQ0NpZHJCbG9jayhcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIHNlY29uZGFyeVZwY09wdGlvbnMuY2lkckJsb2NrTmFtZSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2cGNJZDogdGhpcy52cGNJZCxcbiAgICAgICAgICAgIGNpZHJCbG9jazogc2Vjb25kYXJ5VnBjT3B0aW9ucy5pcHY0Q2lkckJsb2NrLFxuICAgICAgICAgICAgaXB2NElwYW1Qb29sSWQ6IHNlY29uZGFyeVZwY09wdGlvbnMuaXB2NElwYW1Qb29sPy5pcGFtUG9vbElkLFxuICAgICAgICAgICAgaXB2NE5ldG1hc2tMZW5ndGg6IHNlY29uZGFyeVZwY09wdGlvbnMuaXB2NE5ldG1hc2tMZW5ndGgsXG4gICAgICAgICAgICBpcHY2TmV0bWFza0xlbmd0aDogc2Vjb25kYXJ5VnBjT3B0aW9ucy5pcHY2TmV0bWFza0xlbmd0aCxcbiAgICAgICAgICAgIGlwdjZJcGFtUG9vbElkOiBzZWNvbmRhcnlWcGNPcHRpb25zLmlwdjZJcGFtUG9vbD8uaXBhbVBvb2xJZCxcbiAgICAgICAgICAgIGFtYXpvblByb3ZpZGVkSXB2NkNpZHJCbG9jazogc2Vjb25kYXJ5VnBjT3B0aW9ucy5hbWF6b25Qcm92aWRlZCxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgICBpZiAoc2Vjb25kYXJ5VnBjT3B0aW9ucy5kZXBlbmRlbmNpZXMpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGRlcCBvZiBzZWNvbmRhcnlWcGNPcHRpb25zLmRlcGVuZGVuY2llcykge1xuICAgICAgICAgICAgdnBjQ2lkckJsb2NrLm5vZGUuYWRkRGVwZW5kZW5jeShkZXApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvL0NyZWF0ZSBzZWNvbmRhcnkgYmxvY2tzIGZvciBJcHY0IGFuZCBJcHY2XG4gICAgICAgIHRoaXMuc2Vjb25kYXJ5Q2lkckJsb2NrPy5wdXNoKHZwY0NpZHJCbG9jayk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRW1wdHkgYXJyYXkgZm9yIGlzb2xhdGVkIHN1Ym5ldHNcbiAgICAgKi9cbiAgICB0aGlzLmlzb2xhdGVkU3VibmV0cyA9IG5ldyBBcnJheTxJU3VibmV0PigpO1xuXG4gICAgLyoqXG4gICAgICogRW1wdHkgYXJyYXkgZm9yIHB1YmxpYyBzdWJuZXRzXG4gICAgICovXG4gICAgdGhpcy5wdWJsaWNTdWJuZXRzID0gbmV3IEFycmF5PElTdWJuZXQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbXB0eSBhcnJheSBmb3IgcHJpdmF0ZSBzdWJuZXRzXG4gICAgICovXG4gICAgdGhpcy5wcml2YXRlU3VibmV0cyA9IG5ldyBBcnJheTxJU3VibmV0PigpO1xuXG4gICAgLyoqXG4gICAgICogRGVwZW5kYWJsZSB0aGF0IGNhbiBiZSBkZXBlbmRlZCB1cG9uIHRvIGZvcmNlIGludGVybmV0IGNvbm5lY3Rpdml0eSBlc3RhYmxpc2hlZCBvbiB0aGUgVlBDXG4gICAgICogQWRkIGlndyB0byB0aGlzIGlmIGl0cyBhIHB1YmxpYyBzdWJuZXRcbiAgICAgKi9cbiAgICB0aGlzLmludGVybmV0Q29ubmVjdGl2aXR5RXN0YWJsaXNoZWQgPVxuICAgICAgdGhpcy5faW50ZXJuZXRDb25uZWN0aXZpdHlFc3RhYmxpc2hlZDtcbiAgfVxufVxuLyoqXG4gKiBTdXBwb3J0cyBhc3NpZ25pbmcgSVB2NCBhZGRyZXNzIHRvIFZQQ1xuICovXG5jbGFzcyBpcHY0Q2lkckFsbG9jYXRpb24gaW1wbGVtZW50cyBJSXBBZGRyZXNzZXMge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNpZHJCbG9jazogc3RyaW5nLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcHJvcHM/OiB7IGNpZHJCbG9ja05hbWU6IHN0cmluZyB9LFxuICApIHt9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIENJRFIgYmxvY2sgcHJvdmlkZWQgYnkgdGhlIHVzZXIgdG8gc2V0IElQdjRcbiAgICovXG4gIGFsbG9jYXRlVnBjQ2lkcigpOiBWcGNDaWRyT3B0aW9ucyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlwdjRDaWRyQmxvY2s6IHRoaXMuY2lkckJsb2NrLFxuICAgICAgY2lkckJsb2NrTmFtZTogdGhpcy5wcm9wcz8uY2lkckJsb2NrTmFtZSxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogU3VwcG9ydHMgQW1hem9uIFByb3ZpZGVkIElwdjYgcmFuZ2VzXG4gKi9cbmNsYXNzIEFtYXpvblByb3ZpZGVkIGltcGxlbWVudHMgSUlwQWRkcmVzc2VzIHtcbiAgLyoqXG4gICAqIFJlcHJlc2VudHMgYW4gQW1hem9uLXByb3ZpZGVkIElQdjYgQ0lEUiByYW5nZSBmb3IgYSBWUEMuXG4gICAqXG4gICAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyB0aGUgSUlwQWRkcmVzc2VzIGludGVyZmFjZSBhbmQgaXMgdXNlZCB0byBhbGxvY2F0ZSBhbiBBbWF6b24tcHJvdmlkZWRcbiAgICogSVB2NiBDSURSIHJhbmdlIGZvciBhIFZQQy4gV2hlbiBhbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzIGlzIHVzZWQgdG8gYWxsb2NhdGUgdGhlIFZQQyBDSURSLFxuICAgKiBBbWF6b24gd2lsbCBhdXRvbWF0aWNhbGx5IGFzc2lnbiBhbiBJUHY2IENJRFIgcmFuZ2UgZnJvbSBpdHMgcG9vbCBvZiBhdmFpbGFibGUgYWRkcmVzc2VzLlxuICAgKi9cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHByb3BzOiB7IGNpZHJCbG9ja05hbWU6IHN0cmluZyB9KSB7fVxuXG4gIGFsbG9jYXRlVnBjQ2lkcigpOiBWcGNDaWRyT3B0aW9ucyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFtYXpvblByb3ZpZGVkOiB0cnVlLFxuICAgICAgY2lkckJsb2NrTmFtZTogdGhpcy5wcm9wcy5jaWRyQmxvY2tOYW1lLFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGFuIElQdjQgYWRkcmVzcyByYW5nZSBtYW5hZ2VkIGJ5IEFXUyBJUCBBZGRyZXNzIE1hbmFnZXIgKElQQU0pLlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLWlwYW0uaHRtbFxuICovXG5jbGFzcyBJcGFtSXB2NiBpbXBsZW1lbnRzIElJcEFkZHJlc3NlcyB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgcHJvcHM6IElwYW1PcHRpb25zKSB7fVxuXG4gIGFsbG9jYXRlVnBjQ2lkcigpOiBWcGNDaWRyT3B0aW9ucyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlwdjZOZXRtYXNrTGVuZ3RoOiB0aGlzLnByb3BzLm5ldG1hc2tMZW5ndGgsXG4gICAgICBpcHY2SXBhbVBvb2w6IHRoaXMucHJvcHMuaXBhbVBvb2wsXG4gICAgICBkZXBlbmRlbmNpZXM6IHRoaXMucHJvcHMuaXBhbVBvb2w/LmlwYW1DaWRycy5tYXAoXG4gICAgICAgIChjKSA9PiBjIGFzIFRlcnJhZm9ybVJlc291cmNlLFxuICAgICAgKSxcbiAgICAgIGNpZHJCbG9ja05hbWU6IHRoaXMucHJvcHMuY2lkckJsb2NrTmFtZSxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhbiBJUHY0IGFkZHJlc3MgcmFuZ2UgbWFuYWdlZCBieSBBV1MgSVAgQWRkcmVzcyBNYW5hZ2VyIChJUEFNKS5cbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWVjMi1pcGFtLmh0bWxcbiAqL1xuY2xhc3MgSXBhbUlwdjQgaW1wbGVtZW50cyBJSXBBZGRyZXNzZXMge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHByb3BzOiBJcGFtT3B0aW9ucykge31cbiAgYWxsb2NhdGVWcGNDaWRyKCk6IFZwY0NpZHJPcHRpb25zIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXB2NE5ldG1hc2tMZW5ndGg6IHRoaXMucHJvcHMubmV0bWFza0xlbmd0aCxcbiAgICAgIGlwdjRJcGFtUG9vbDogdGhpcy5wcm9wcy5pcGFtUG9vbCxcbiAgICAgIGNpZHJCbG9ja05hbWU6IHRoaXMucHJvcHM/LmNpZHJCbG9ja05hbWUsXG4gICAgICBpcHY0SXBhbVByb3Zpc2lvbmVkQ2lkcnM6IHRoaXMucHJvcHMuaXBhbVBvb2w/LmlwYW1JcHY0Q2lkcnMsXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIEludGVyZmFjZSB0byBjcmVhdGUgTDIgZm9yIFZQQyBDaWRyIEJsb2NrXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVZQQ0NpZHJCbG9jayB7XG4gIC8qKlxuICAgKiBBbWF6b24gUHJvdmlkZWQgSXB2NlxuICAgKi9cbiAgcmVhZG9ubHkgYW1hem9uUHJvdmlkZWRJcHY2Q2lkckJsb2NrPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHNlY29uZGFyeSBJUHY0IENJRFIgQmxvY2tcbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBDSURSIGJsb2NrIHByb3ZpZGVkXG4gICAqL1xuICByZWFkb25seSBjaWRyQmxvY2s/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElQQU0gcG9vbCBmb3IgSVB2NiBhZGRyZXNzIHR5cGVcbiAgICovXG4gIHJlYWRvbmx5IGlwdjZJcGFtUG9vbElkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJUEFNIHBvb2wgZm9yIElQdjQgYWRkcmVzcyB0eXBlXG4gICAqL1xuICByZWFkb25seSBpcHY0SXBhbVBvb2xJZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBdHRyaWJ1dGVzIGZvciBWUENDaWRyQmxvY2sgdXNlZCBmb3IgZGVmaW5pbmcgYSBuZXcgQ0lEUiBCbG9ja1xuICogYW5kIGFsc28gZm9yIGltcG9ydGluZyBhbiBleGlzdGluZyBDSURSXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVlBDQ2lkckJsb2NrYXR0cmlidXRlcyB7XG4gIC8qKlxuICAgKiBBbWF6b24gUHJvdmlkZWQgSXB2NlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgYW1hem9uUHJvdmlkZWRJcHY2Q2lkckJsb2NrPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHNlY29uZGFyeSBJUHY0IENJRFIgQmxvY2tcbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBDSURSIGJsb2NrIHByb3ZpZGVkXG4gICAqL1xuICByZWFkb25seSBjaWRyQmxvY2s/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzZWNvbmRhcnkgSVB2NCBDSURSIEJsb2NrXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gQ0lEUiBibG9jayBwcm92aWRlZFxuICAgKi9cbiAgcmVhZG9ubHkgY2lkckJsb2NrTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogTmV0IG1hc2sgbGVuZ3RoIGZvciBJUHY2IGFkZHJlc3MgdHlwZVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIE5ldCBtYXNrIGxlbmd0aCBjb25maWd1cmVkIGZvciBJUHY2XG4gICAqL1xuICByZWFkb25seSBpcHY2TmV0bWFza0xlbmd0aD86IG51bWJlcjtcblxuICAvKipcbiAgICogTmV0IG1hc2sgbGVuZ3RoIGZvciBJUHY0IGFkZHJlc3MgdHlwZVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIE5ldCBtYXNrIGxlbmd0aCBjb25maWd1cmVkIGZvciBJUHY0XG4gICAqL1xuICByZWFkb25seSBpcHY0TmV0bWFza0xlbmd0aD86IG51bWJlcjtcblxuICAvKipcbiAgICogSVBBTSBwb29sIGZvciBJUHY2IGFkZHJlc3MgdHlwZVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIElQQU0gcG9vbCBJZCBwcm92aWRlZCBmb3IgSVB2NlxuICAgKi9cbiAgcmVhZG9ubHkgaXB2NklwYW1Qb29sSWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElQQU0gcG9vbCBmb3IgSVB2NCBhZGRyZXNzIHR5cGVcbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBJUEFNIHBvb2wgSWQgcHJvdmlkZWQgZm9yIElQdjRcbiAgICovXG4gIHJlYWRvbmx5IGlwdjRJcGFtUG9vbElkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJUHY0IENJRFIgcHJvdmlzaW9uZWQgdW5kZXIgcG9vbFxuICAgKiBSZXF1aXJlZCB0byBjaGVjayBmb3Igb3ZlcmxhcHBpbmcgQ0lEUnMgYWZ0ZXIgcHJvdmlzaW9uaW5nXG4gICAqIGlzIGNvbXBsZXRlIHVuZGVyIElQQU0gcG9vbFxuICAgKiBAZGVmYXVsdCAtIG5vIElQQU0gSVB2NCBDSURSIHJhbmdlIGlzIHByb3Zpc2lvbmVkIHVzaW5nIElQQU1cbiAgICovXG4gIHJlYWRvbmx5IGlwdjRJcGFtUHJvdmlzaW9uZWRDaWRycz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIEludGVyZmFjZSBWUENDaWRyQmxvY2tcbiAqL1xuaW50ZXJmYWNlIFZQQ0NpZHJCbG9ja1Byb3BzIGV4dGVuZHMgVlBDQ2lkckJsb2NrYXR0cmlidXRlcyB7XG4gIC8qKlxuICAgKiBUaGUgVlBDIElkIGZvciBhc3NvY2lhdGluZyBDSURSIEJsb2NrIGFzIGEgc2Vjb25kYXJ5IGFkZHJlc3NcbiAgICovXG4gIHJlYWRvbmx5IHZwY0lkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogSW50ZXJuYWwgTDIgdG8gZGVmaW5lIGEgbmV3IFZQQyBDSURSIEJsb2NrXG4gKlxuICogU2VlIFtWUEMgQ0lEUiBibG9ja3NdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS92cGMvbGF0ZXN0L3VzZXJndWlkZS92cGMtY2lkci1ibG9ja3MuaHRtbClcbiAqIEBpbnRlcm5hbFxuICovXG5jbGFzcyBWUENDaWRyQmxvY2sgZXh0ZW5kcyBBd3NDb25zdHJ1Y3RCYXNlIGltcGxlbWVudHMgSVZQQ0NpZHJCbG9jayB7XG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gZXhpc3RpbmcgVlBDIENJRFIgQmxvY2tcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbVZQQ0NpZHJCbG9ja2F0dHJpYnV0ZXMoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBWUENDaWRyQmxvY2thdHRyaWJ1dGVzLFxuICApOiBJVlBDQ2lkckJsb2NrIHtcbiAgICBjbGFzcyBJbXBvcnQgZXh0ZW5kcyBBd3NDb25zdHJ1Y3RCYXNlIGltcGxlbWVudHMgSVZQQ0NpZHJCbG9jayB7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgb3V0cHV0czogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICAgICAgcHVibGljIHJlYWRvbmx5IGNpZHJCbG9jayA9IHByb3BzLmNpZHJCbG9jaztcbiAgICAgIHB1YmxpYyByZWFkb25seSBhbWF6b25Qcm92aWRlZElwdjZDaWRyQmxvY2s/OiBib29sZWFuID1cbiAgICAgICAgcHJvcHMuYW1hem9uUHJvdmlkZWRJcHY2Q2lkckJsb2NrO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGlwdjZJcGFtUG9vbElkPzogc3RyaW5nID0gcHJvcHMuaXB2NklwYW1Qb29sSWQ7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgaXB2NElwYW1Qb29sSWQ/OiBzdHJpbmcgPSBwcm9wcy5pcHY0SXBhbVBvb2xJZDtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBJbXBvcnQoc2NvcGUsIGlkKTtcbiAgfVxuICBwdWJsaWMgcmVhZG9ubHkgb3V0cHV0czogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICBwdWJsaWMgcmVhZG9ubHkgcmVzb3VyY2U6XG4gICAgfCB2cGNJcHY0Q2lkckJsb2NrQXNzb2NpYXRpb24uVnBjSXB2NENpZHJCbG9ja0Fzc29jaWF0aW9uXG4gICAgfCB2cGNJcHY2Q2lkckJsb2NrQXNzb2NpYXRpb24uVnBjSXB2NkNpZHJCbG9ja0Fzc29jaWF0aW9uO1xuXG4gIHB1YmxpYyByZWFkb25seSBjaWRyQmxvY2s/OiBzdHJpbmc7XG5cbiAgcHVibGljIHJlYWRvbmx5IGFtYXpvblByb3ZpZGVkSXB2NkNpZHJCbG9jaz86IGJvb2xlYW47XG5cbiAgcHVibGljIHJlYWRvbmx5IGlwdjZJcGFtUG9vbElkPzogc3RyaW5nO1xuXG4gIHB1YmxpYyByZWFkb25seSBpcHY0SXBhbVBvb2xJZD86IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogVlBDQ2lkckJsb2NrUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIGNvbnN0IGlzSXB2NiA9XG4gICAgICBwcm9wcy5hbWF6b25Qcm92aWRlZElwdjZDaWRyQmxvY2sgPT09IHRydWUgfHxcbiAgICAgIHByb3BzLmlwdjZJcGFtUG9vbElkICE9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnJlc291cmNlID0gaXNJcHY2XG4gICAgICA/IG5ldyB2cGNJcHY2Q2lkckJsb2NrQXNzb2NpYXRpb24uVnBjSXB2NkNpZHJCbG9ja0Fzc29jaWF0aW9uKHRoaXMsIGlkLCB7XG4gICAgICAgICAgdnBjSWQ6IHByb3BzLnZwY0lkLFxuICAgICAgICAgIGFzc2lnbkdlbmVyYXRlZElwdjZDaWRyQmxvY2s6IHByb3BzLmFtYXpvblByb3ZpZGVkSXB2NkNpZHJCbG9jayxcbiAgICAgICAgICBpcHY2SXBhbVBvb2xJZDogcHJvcHMuaXB2NklwYW1Qb29sSWQsXG4gICAgICAgICAgaXB2Nk5ldG1hc2tMZW5ndGg6IHByb3BzLmlwdjZOZXRtYXNrTGVuZ3RoLFxuICAgICAgICAgIC8vIGlwdjZQb29sOiA/PyxcbiAgICAgICAgICAvLyBpcHY2Q2lkckJsb2NrOiA/Pz8sXG4gICAgICAgIH0pXG4gICAgICA6IG5ldyB2cGNJcHY0Q2lkckJsb2NrQXNzb2NpYXRpb24uVnBjSXB2NENpZHJCbG9ja0Fzc29jaWF0aW9uKHRoaXMsIGlkLCB7XG4gICAgICAgICAgdnBjSWQ6IHByb3BzLnZwY0lkLFxuICAgICAgICAgIGNpZHJCbG9jazogcHJvcHMuY2lkckJsb2NrLFxuICAgICAgICAgIGlwdjRJcGFtUG9vbElkOiBwcm9wcy5pcHY0SXBhbVBvb2xJZCxcbiAgICAgICAgICBpcHY0TmV0bWFza0xlbmd0aDogcHJvcHMuaXB2NE5ldG1hc2tMZW5ndGgsXG4gICAgICAgIH0pO1xuICAgIHRoaXMubm9kZS5kZWZhdWx0Q2hpbGQgPSB0aGlzLnJlc291cmNlO1xuICAgIHRoaXMuY2lkckJsb2NrID0gcHJvcHMuY2lkckJsb2NrO1xuICAgIHRoaXMuaXB2NklwYW1Qb29sSWQgPSBwcm9wcy5pcHY2SXBhbVBvb2xJZDtcbiAgICB0aGlzLmlwdjRJcGFtUG9vbElkID0gcHJvcHMuaXB2NElwYW1Qb29sSWQ7XG4gICAgdGhpcy5hbWF6b25Qcm92aWRlZElwdjZDaWRyQmxvY2sgPSBwcm9wcy5hbWF6b25Qcm92aWRlZElwdjZDaWRyQmxvY2s7XG4gIH1cbn1cblxuLy9AaW50ZXJuYWwgRmlyc3QgdHdvIE9jdGV0IHRvIHZlcmlmeSBSRkMgMTkxOFxuaW50ZXJmYWNlIElQYWRkcmVzc0NvbmZpZyB7XG4gIG9jdGV0MTogbnVtYmVyO1xuICBvY3RldDI6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgd2hldGhlciBhIHNlY29uZGFyeSBJUHY0IGFkZHJlc3MgaXMgd2l0aGluIHRoZSBzYW1lIHByaXZhdGUgSVAgYWRkcmVzcyByYW5nZSBhcyB0aGUgcHJpbWFyeSBJUHY0IGFkZHJlc3MuXG4gKlxuICogQHBhcmFtIGNpZHIxIFRoZSBzZWNvbmRhcnkgSVB2NCBDSURSIGJsb2NrIHRvIGJlIHZhbGlkYXRlZC5cbiAqIEBwYXJhbSBjaWRyMiBUaGUgcHJpbWFyeSBJUHY0IENJRFIgYmxvY2sgdG8gdmFsaWRhdGUgYWdhaW5zdC5cbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHNlY29uZGFyeSBJUHY0IENJRFIgYmxvY2sgaXMgd2l0aGluIHRoZSBzYW1lIHByaXZhdGUgSVAgYWRkcmVzcyByYW5nZSBhcyB0aGUgcHJpbWFyeSBJUHY0IENJRFIgYmxvY2ssIGZhbHNlIG90aGVyd2lzZS5cbiAqIEBpbnRlcm5hbFxuICogVGhlIHByaXZhdGUgSVAgYWRkcmVzcyByYW5nZXMgYXJlIGRlZmluZWQgYnkgUkZDIDE5MTggYXMgMTAuMC4wLjAvOCwgMTcyLjE2LjAuMC8xMiwgYW5kIDE5Mi4xNjguMC4wLzE2LlxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUlwdjRhZGRyZXNzKGNpZHIxPzogc3RyaW5nLCBjaWRyMj86IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAoIWNpZHIxIHx8ICFjaWRyMikge1xuICAgIHJldHVybiBmYWxzZTsgLy8gSGFuZGxlIGNhc2VzIHdoZXJlIENJRFIgcmFuZ2VzIGFyZSBub3QgcHJvdmlkZWRcbiAgfVxuXG4gIGNvbnN0IG9jdGV0c0NpZHIxOiBudW1iZXJbXSA9IGNpZHIxXG4gICAgLnNwbGl0KFwiLlwiKVxuICAgIC5tYXAoKG9jdGV0KSA9PiBwYXJzZUludChvY3RldCwgMTApKTtcbiAgY29uc3Qgb2N0ZXRzQ2lkcjI6IG51bWJlcltdID0gY2lkcjJcbiAgICAuc3BsaXQoXCIuXCIpXG4gICAgLm1hcCgob2N0ZXQpID0+IHBhcnNlSW50KG9jdGV0LCAxMCkpO1xuXG4gIGlmIChvY3RldHNDaWRyMS5sZW5ndGggIT09IDQgfHwgb2N0ZXRzQ2lkcjIubGVuZ3RoICE9PSA0KSB7XG4gICAgcmV0dXJuIGZhbHNlOyAvLyBIYW5kbGUgaW52YWxpZCBDSURSIHJhbmdlc1xuICB9XG5cbiAgY29uc3QgaXAxOiBJUGFkZHJlc3NDb25maWcgPSB7XG4gICAgb2N0ZXQxOiBvY3RldHNDaWRyMVswXSxcbiAgICBvY3RldDI6IG9jdGV0c0NpZHIxWzFdLFxuICB9O1xuXG4gIGNvbnN0IGlwMjogSVBhZGRyZXNzQ29uZmlnID0ge1xuICAgIG9jdGV0MTogb2N0ZXRzQ2lkcjJbMF0sXG4gICAgb2N0ZXQyOiBvY3RldHNDaWRyMlsxXSxcbiAgfTtcblxuICByZXR1cm4gKFxuICAgIChpcDEub2N0ZXQxID09PSAxMCAmJiBpcDIub2N0ZXQxID09PSAxMCkgfHxcbiAgICAoaXAxLm9jdGV0MSA9PT0gMTkyICYmXG4gICAgICBpcDEub2N0ZXQyID09PSAxNjggJiZcbiAgICAgIGlwMi5vY3RldDEgPT09IDE5MiAmJlxuICAgICAgaXAyLm9jdGV0MiA9PT0gMTY4KSB8fFxuICAgIChpcDEub2N0ZXQxID09PSAxNzIgJiZcbiAgICAgIGlwMS5vY3RldDIgPT09IDE2ICYmXG4gICAgICBpcDIub2N0ZXQxID09PSAxNzIgJiZcbiAgICAgIGlwMi5vY3RldDIgPT09IDE2KVxuICApOyAvLyBDSURSIHJhbmdlcyBiZWxvbmcgdG8gc2FtZSBwcml2YXRlIElQIGFkZHJlc3MgcmFuZ2VzXG59XG4iXX0=
|
|
408
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidnBjLXYyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F3cy9jb21wdXRlL3ZwYy12Mi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZGQUE2RjtBQUU3RixzREFJNkI7QUFFN0IsMkNBQXFFO0FBQ3JFLG9EQUF1RTtBQUN2RSw0Q0FBd0M7QUFDeEMsOENBQThDO0FBQzlDLDBDQUFtQztBQUduQywrQkFBb0U7QUFDcEUsZ0NBQTZCO0FBQzdCLDJDQUFzRTtBQUN0RSwrQ0FBa0Q7QUFhbEQ7O0dBRUc7QUFDSCxNQUFhLFdBQVc7SUFDdEI7O09BRUc7SUFDSSxNQUFNLENBQUMsSUFBSSxDQUNoQixRQUFnQixFQUNoQixLQUE2QjtRQUU3QixPQUFPLElBQUksa0JBQWtCLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRDs7T0FFRztJQUNJLE1BQU0sQ0FBQyxRQUFRLENBQUMsZUFBNEI7UUFDakQsT0FBTyxJQUFJLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsUUFBUSxDQUFDLGVBQTRCO1FBQ2pELE9BQU8sSUFBSSxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLGtCQUFrQixDQUFDLEtBQTRCO1FBQzNELE9BQU8sSUFBSSxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkMsQ0FBQzs7QUE5Qkgsa0NBK0JDOzs7QUFvRkQ7O0dBRUc7QUFDSCxNQUFNLFFBQVEsR0FBVyxNQUFNLENBQUM7QUFtSGhDOzs7Ozs7R0FNRztBQUNILE1BQWEsS0FBTSxTQUFRLHVCQUFTO0lBQ2xDOztPQUVHO0lBQ0ksTUFBTSxDQUFDLG1CQUFtQixDQUMvQixLQUFnQixFQUNoQixFQUFVLEVBQ1YsS0FBc0I7UUFFdEI7OztXQUdHO1FBQ0gsTUFBTSxhQUFjLFNBQVEs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QUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO0tBQ3ZCLENBQUM7SUFFRixNQUFNLEdBQUcsR0FBb0I7UUFDM0IsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7S0FDdkIsQ0FBQztJQUVGLE9BQU8sQ0FDTCxDQUFDLEdBQUcsQ0FBQyxNQUFNLEtBQUssRUFBRSxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssRUFBRSxDQUFDO1FBQ3hDLENBQUMsR0FBRyxDQUFDLE1BQU0sS0FBSyxHQUFHO1lBQ2pCLEdBQUcsQ0FBQyxNQUFNLEtBQUssR0FBRztZQUNsQixHQUFHLENBQUMsTUFBTSxLQUFLLEdBQUc7WUFDbEIsR0FBRyxDQUFDLE1BQU0sS0FBSyxHQUFHLENBQUM7UUFDckIsQ0FBQyxHQUFHLENBQUMsTUFBTSxLQUFLLEdBQUc7WUFDakIsR0FBRyxDQUFDLE1BQU0sS0FBSyxFQUFFO1lBQ2pCLEdBQUcsQ0FBQyxNQUFNLEtBQUssR0FBRztZQUNsQixHQUFHLENBQUMsTUFBTSxLQUFLLEVBQUUsQ0FBQyxDQUNyQixDQUFDLENBQUMsdURBQXVEO0FBQzVELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvYmxvYi92Mi4xNzUuMS9wYWNrYWdlcy9AYXdzLWNkay9hd3MtZWMyLWFscGhhL2xpYi92cGMtdjIudHNcblxuaW1wb3J0IHtcbiAgdnBjLFxuICB2cGNJcHY0Q2lkckJsb2NrQXNzb2NpYXRpb24sXG4gIHZwY0lwdjZDaWRyQmxvY2tBc3NvY2lhdGlvbixcbn0gZnJvbSBcIkBjZGt0bi9wcm92aWRlci1hd3NcIjtcbmltcG9ydCB7IFRlcnJhZm9ybVJlc291cmNlIH0gZnJvbSBcImNka3RuXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QsIERlcGVuZGVuY3lHcm91cCwgSURlcGVuZGFibGUgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgQXdzQ29uc3RydWN0QmFzZSwgQXdzQ29uc3RydWN0UHJvcHMgfSBmcm9tIFwiLi4vYXdzLWNvbnN0cnVjdFwiO1xuaW1wb3J0IHsgQXdzU3RhY2sgfSBmcm9tIFwiLi4vYXdzLXN0YWNrXCI7XG4vLyBUT0RPOiBVc2UgVGFnTWFuYWdlciBhbmQgdGFnLWFzcGVjdCBpbnN0ZWFkXG5pbXBvcnQgeyBUYWdzIH0gZnJvbSBcIi4uL2F3cy10YWdzXCI7XG4vLyBpbXBvcnQgeyBUYWdzIH0gZnJvbSBcIi4uL3RhZy1hc3BlY3RcIjtcbmltcG9ydCB7IElwYW1PcHRpb25zLCBJSXBhbVBvb2wgfSBmcm9tIFwiLi9pcGFtXCI7XG5pbXBvcnQgeyBEZWZhdWx0SW5zdGFuY2VUZW5hbmN5LCBJU3VibmV0LCBTdWJuZXRUeXBlIH0gZnJvbSBcIi4vdnBjXCI7XG5pbXBvcnQgeyBBcm4gfSBmcm9tIFwiLi4vYXJuXCI7XG5pbXBvcnQgeyBJU3VibmV0VjIsIFN1Ym5ldFYyLCBTdWJuZXRWMkF0dHJpYnV0ZXMgfSBmcm9tIFwiLi9zdWJuZXQtdjJcIjtcbmltcG9ydCB7IElWcGNWMiwgVnBjVjJCYXNlIH0gZnJvbSBcIi4vdnBjLXYyLWJhc2VcIjtcblxuLyoqXG4gKiBBZGRpdGlvbmFsIHByb3BzIG5lZWRlZCBmb3Igc2Vjb25kYXJ5IEFkZHJlc3NcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWNvbmRhcnlBZGRyZXNzUHJvcHMge1xuICAvKipcbiAgICogUmVxdWlyZWQgdG8gc2V0IFNlY29uZGFyeSBjaWRyIGJsb2NrIHJlc291cmNlIG5hbWVcbiAgICogaW4gb3JkZXIgdG8gZ2VuZXJhdGUgdW5pcXVlIGxvZ2ljYWwgaWQgZm9yIHRoZSByZXNvdXJjZS5cbiAgICovXG4gIHJlYWRvbmx5IGNpZHJCbG9ja05hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBJcEFkZHJlc3Mgb3B0aW9ucyB0byBkZWZpbmUgVlBDIFYyXG4gKi9cbmV4cG9ydCBjbGFzcyBJcEFkZHJlc3NlcyB7XG4gIC8qKlxuICAgKiBBbiBJUHY0IENJRFIgUmFuZ2VcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaXB2NChcbiAgICBpcHY0Q2lkcjogc3RyaW5nLFxuICAgIHByb3BzPzogU2Vjb25kYXJ5QWRkcmVzc1Byb3BzLFxuICApOiBJSXBBZGRyZXNzZXMge1xuICAgIHJldHVybiBuZXcgaXB2NENpZHJBbGxvY2F0aW9uKGlwdjRDaWRyLCBwcm9wcyk7XG4gIH1cblxuICAvKipcbiAgICogQW4gSXB2NCBJcGFtIFBvb2xcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaXB2NElwYW0oaXB2NElwYW1PcHRpb25zOiBJcGFtT3B0aW9ucyk6IElJcEFkZHJlc3NlcyB7XG4gICAgcmV0dXJuIG5ldyBJcGFtSXB2NChpcHY0SXBhbU9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFuIElwdjYgSXBhbSBQb29sXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGlwdjZJcGFtKGlwdjZJcGFtT3B0aW9uczogSXBhbU9wdGlvbnMpOiBJSXBBZGRyZXNzZXMge1xuICAgIHJldHVybiBuZXcgSXBhbUlwdjYoaXB2NklwYW1PcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbWF6b24gUHJvdmlkZWQgSXB2NiByYW5nZVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBhbWF6b25Qcm92aWRlZElwdjYocHJvcHM6IFNlY29uZGFyeUFkZHJlc3NQcm9wcyk6IElJcEFkZHJlc3NlcyB7XG4gICAgcmV0dXJuIG5ldyBBbWF6b25Qcm92aWRlZChwcm9wcyk7XG4gIH1cbn1cblxuLyoqXG4gKiBDb25zb2xpZGF0ZWQgcmV0dXJuIHBhcmFtZXRlcnMgdG8gcGFzcyB0byBWUEMgY29uc3RydWN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVnBjQ2lkck9wdGlvbnMge1xuICAvKipcbiAgICogSVB2NCBDSURSIEJsb2NrXG4gICAqXG4gICAqIEBkZWZhdWx0ICcxMC4wLjAuMC8xNidcbiAgICovXG4gIHJlYWRvbmx5IGlwdjRDaWRyQmxvY2s/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENJRFIgTWFzayBmb3IgVnBjXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gT25seSByZXF1aXJlZCB3aGVuIHVzaW5nIElQQU0gSXB2NFxuICAgKi9cbiAgcmVhZG9ubHkgaXB2NE5ldG1hc2tMZW5ndGg/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIElwdjQgSVBBTSBQb29sXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gT25seSByZXF1aXJlZCB3aGVuIHVzaW5nIElQQU0gSXB2NFxuICAgKi9cbiAgcmVhZG9ubHkgaXB2NElwYW1Qb29sPzogSUlwYW1Qb29sO1xuXG4gIC8qKlxuICAgKiBDSURSIE1hc2sgZm9yIFZwY1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIE9ubHkgcmVxdWlyZWQgd2hlbiB1c2luZyBBV1MgSXBhbVxuICAgKi9cbiAgcmVhZG9ubHkgaXB2Nk5ldG1hc2tMZW5ndGg/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIElwdjYgSVBBTSBwb29sIGlkIGZvciBWUEMgcmFuZ2UsIGNhbiBvbmx5IGJlIGRlZmluZWRcbiAgICogdW5kZXIgcHVibGljIHNjb3BlXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gcG9vbCBpZFxuICAgKi9cbiAgcmVhZG9ubHkgaXB2NklwYW1Qb29sPzogSUlwYW1Qb29sO1xuXG4gIC8qKlxuICAgKiBVc2UgYW1hem9uIHByb3ZpZGVkIElQIHJhbmdlXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBhbWF6b25Qcm92aWRlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIERlcGVuZGVuY3kgdG8gYXNzb2NpYXRlIElwdjYgQ0lEUiBibG9ja1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIGRlcGVuZGVuY3lcbiAgICovXG4gIHJlYWRvbmx5IGRlcGVuZGVuY2llcz86IFRlcnJhZm9ybVJlc291cmNlW107XG5cbiAgLyoqXG4gICAqIFJlcXVpcmVkIHRvIHNldCBTZWNvbmRhcnkgY2lkciBibG9jayByZXNvdXJjZSBuYW1lXG4gICAqIGluIG9yZGVyIHRvIGdlbmVyYXRlIHVuaXF1ZSBsb2dpY2FsIGlkIGZvciB0aGUgcmVzb3VyY2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gbmFtZSBmb3IgcHJpbWFyeSBhZGRyZXNzZXNcbiAgICovXG4gIHJlYWRvbmx5IGNpZHJCbG9ja05hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElQdjQgQ0lEUiBwcm92aXNpb25lZCB1bmRlciBwb29sXG4gICAqIFJlcXVpcmVkIHRvIGNoZWNrIGZvciBvdmVybGFwcGluZyBDSURScyBhZnRlciBwcm92aXNpb25pbmdcbiAgICogaXMgY29tcGxldGUgdW5kZXIgSVBBTSBwb29sXG4gICAqIEBkZWZhdWx0IC0gbm8gSVBBTSBJUHY0IENJRFIgcmFuZ2UgaXMgcHJvdmlzaW9uZWQgdXNpbmcgSVBBTVxuICAgKi9cbiAgcmVhZG9ubHkgaXB2NElwYW1Qcm92aXNpb25lZENpZHJzPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogSW1wbGVtZW50cyBpcCBhZGRyZXNzIGFsbG9jYXRpb24gYWNjb3JkaW5nIHRvIHRoZSBJUEFkcmVzcyB0eXBlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUlwQWRkcmVzc2VzIHtcbiAgLyoqXG4gICAqIE1ldGhvZCB0byBkZWZpbmUgdGhlIGltcGxlbWVudGF0aW9uIGxvZ2ljIG9mXG4gICAqIElQIGFkZHJlc3MgYWxsb2NhdGlvblxuICAgKi9cbiAgYWxsb2NhdGVWcGNDaWRyKCk6IFZwY0NpZHJPcHRpb25zO1xufVxuXG4vKipcbiAqIE5hbWUgdGFnIGNvbnN0YW50XG4gKi9cbmNvbnN0IE5BTUVfVEFHOiBzdHJpbmcgPSBcIk5hbWVcIjtcblxuLyoqXG4gKiBQcm9wZXJ0aWVzIHRvIGRlZmluZSBWUENcbiAqIFtkaXNhYmxlLWF3c2xpbnQ6ZnJvbS1tZXRob2RdXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVnBjVjJQcm9wcyBleHRlbmRzIEF3c0NvbnN0cnVjdFByb3BzIHtcbiAgLyoqIEEgbXVzdCBJUHY0IENJRFIgYmxvY2sgZm9yIHRoZSBWUENcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vdnBjL2xhdGVzdC91c2VyZ3VpZGUvdnBjLWNpZHItYmxvY2tzLmh0bWxcbiAgICpcbiAgICogQGRlZmF1bHQgLSBJcHY0IENJRFIgQmxvY2sgKCcxMC4wLjAuMC8xNicpXG4gICAqL1xuICByZWFkb25seSBwcmltYXJ5QWRkcmVzc0Jsb2NrPzogSUlwQWRkcmVzc2VzO1xuXG4gIC8qKlxuICAgKiBUaGUgc2Vjb25kYXJ5IENJRFIgYmxvY2tzIGFzc29jaWF0ZWQgd2l0aCB0aGUgVlBDLlxuICAgKiBDYW4gYmUgIElQdjQgb3IgSVB2NiwgdHdvIElQdjQgcmFuZ2VzIG11c3QgZm9sbG93IFJGQyMxOTE4IGNvbnZlbnRpb25cbiAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3ZwYy9sYXRlc3QvdXNlcmd1aWRlL3ZwYy1jaWRyLWJsb2Nrcy5odG1sI3ZwYy1yZXNpemV9LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIHNlY29uZGFyeSBJUCBhZGRyZXNzXG4gICAqL1xuICByZWFkb25seSBzZWNvbmRhcnlBZGRyZXNzQmxvY2tzPzogSUlwQWRkcmVzc2VzW107XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBpbnN0YW5jZXMgbGF1bmNoZWQgaW4gdGhlIFZQQyBnZXQgRE5TIGhvc3RuYW1lcy5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlRG5zSG9zdG5hbWVzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIEROUyByZXNvbHV0aW9uIGlzIHN1cHBvcnRlZCBmb3IgdGhlIFZQQy5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlRG5zU3VwcG9ydD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IHRlbmFuY3kgb2YgaW5zdGFuY2VzIGxhdW5jaGVkIGludG8gdGhlIFZQQy5cbiAgICpcbiAgICogQnkgc2V0dGluZyB0aGlzIHRvIGRlZGljYXRlZCB0ZW5hbmN5LCBpbnN0YW5jZXMgd2lsbCBiZSBsYXVuY2hlZCBvblxuICAgKiBoYXJkd2FyZSBkZWRpY2F0ZWQgdG8gYSBzaW5nbGUgQVdTIGN1c3RvbWVyLCB1bmxlc3Mgc3BlY2lmaWNhbGx5IHNwZWNpZmllZFxuICAgKiBhdCBpbnN0YW5jZSBsYXVuY2ggdGltZS4gUGxlYXNlIG5vdGUsIG5vdCBhbGwgaW5zdGFuY2UgdHlwZXMgYXJlIHVzYWJsZVxuICAgKiB3aXRoIERlZGljYXRlZCB0ZW5hbmN5LlxuICAgKlxuICAgKiBAZGVmYXVsdCBEZWZhdWx0SW5zdGFuY2VUZW5hbmN5LkRlZmF1bHQgKHNoYXJlZCkgdGVuYW5jeVxuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdEluc3RhbmNlVGVuYW5jeT86IERlZmF1bHRJbnN0YW5jZVRlbmFuY3k7XG5cbiAgLyoqXG4gICAqIFBoeXNpY2FsIG5hbWUgZm9yIHRoZSBWUENcbiAgICpcbiAgICogQGRlZmF1bHQgLSBhdXRvZ2VuZXJhdGVkIGJ5IENES1xuICAgKi9cbiAgcmVhZG9ubHkgdnBjTmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBPcHRpb25zIHRvIGltcG9ydCBhIFZQQyBjcmVhdGVkIG91dHNpZGUgb2YgQ0RLIHN0YWNrXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVnBjVjJBdHRyaWJ1dGVzIHtcbiAgLyoqXG4gICAqIFRoZSBWUEMgSURcbiAgICogUmVmZXJzIHRvIHBoeXNpY2FsIElkIG9mIHRoZSByZXNvdXJjZVxuICAgKi9cbiAgcmVhZG9ubHkgdnBjSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogUmVnaW9uIGluIHdoaWNoIGltcG9ydGVkIFZQQyBpcyBob3N0ZWRcbiAgICogcmVxdWlyZWQgaW4gY2FzZSBvZiBjcm9zcyByZWdpb24gVlBDXG4gICAqIGFzIGdpdmVuIHZhbHVlIHdpbGwgYmUgdXNlZCB0byBzZXQgZmllbGQgcmVnaW9uIGZvciBpbXBvcnRlZCBWUEMsXG4gICAqIHdoaWNoIHRoZW4gbGF0ZXIgY2FuIGJlIHVzZWQgZm9yIGVzdGFibGlzaGluZyBWUEMgcGVlcmluZyBjb25uZWN0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGNvbnN0cnVjdGVkIHdpdGggc3RhY2sgcmVnaW9uIHZhbHVlXG4gICAqL1xuICByZWFkb25seSByZWdpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgQVdTIGFjY291bnQgdGhhdCBvd25zIHRoZSBpbXBvcnRlZCBWUENcbiAgICogcmVxdWlyZWQgaW4gY2FzZSBvZiBjcm9zcyBhY2NvdW50IFZQQ1xuICAgKiBhcyBnaXZlbiB2YWx1ZSB3aWxsIGJlIHVzZWQgdG8gc2V0IGZpZWxkIGFjY291bnQgZm9yIGltcG9ydGVkIFZQQyxcbiAgICogd2hpY2ggdGhlbiBsYXRlciBjYW4gYmUgdXNlZCBmb3IgZXN0YWJsaXNoaW5nIFZQQyBwZWVyaW5nIGNvbm5lY3Rpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gY29uc3RydWN0ZWQgd2l0aCBzdGFjayBhY2NvdW50IHZhbHVlXG4gICAqL1xuICByZWFkb25seSBvd25lckFjY291bnRJZD86IHN0cmluZztcblxuICAvKipcbiAgICogUHJpbWFyeSBWUEMgQ0lEUiBCbG9jayBvZiB0aGUgaW1wb3J0ZWQgVlBDXG4gICAqIENhbiBvbmx5IGJlIElQdjRcbiAgICovXG4gIHJlYWRvbmx5IHZwY0NpZHJCbG9jazogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIFZQTiBHYXRld2F5IGlzIGF0dGFjaGVkIHRvIHRoZSBWUENcbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBWUE4gR2F0ZXdheVxuICAgKi9cbiAgcmVhZG9ubHkgdnBuR2F0ZXdheUlkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTdWJuZXRzIGFzc29jaWF0ZWQgd2l0aCBpbXBvcnRlZCBWUENcbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBzdWJuZXRzIHByb3ZpZGVkIHRvIGJlIGltcG9ydGVkXG4gICAqL1xuICByZWFkb25seSBzdWJuZXRzPzogU3VibmV0VjJBdHRyaWJ1dGVzW107XG5cbiAgLyoqXG4gICAqIEltcG9ydCBTZWNvbmRhcnkgQ0lEUiBibG9ja3MgYXNzb2NpYXRlZCB3aXRoIFZQQ1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIHNlY29uZGFyeSBJUCBhZGRyZXNzXG4gICAqL1xuICByZWFkb25seSBzZWNvbmRhcnlDaWRyQmxvY2tzPzogVlBDQ2lkckJsb2NrYXR0cmlidXRlc1tdO1xufVxuXG4vKipcbiAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgYSBmb3VuZGF0aW9uIGZvciBjcmVhdGluZyBhbmQgY29uZmlndXJpbmcgYSBWUEMgd2l0aCBhZHZhbmNlZCBmZWF0dXJlcyBzdWNoIGFzIElQQU0gKElQIEFkZHJlc3MgTWFuYWdlbWVudCkgYW5kIElQdjYgc3VwcG9ydC5cbiAqXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nkay9hcGkvdjIvZG9jcy9hd3MtY2RrLWxpYi5hd3NfZWMyLlZwYy5odG1sfEFXUyBDREsgRG9jdW1lbnRhdGlvbiBvbiBWUENzfS5cbiAqXG4gKiBAcmVzb3VyY2UgYXdzX3ZwY1xuICovXG5leHBvcnQgY2xhc3MgVnBjVjIgZXh0ZW5kcyBWcGNWMkJhc2Uge1xuICAvKipcbiAgICogQ3JlYXRlIGEgVlBDIGZyb20gZXhpc3RpbmcgYXR0cmlidXRlc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tVnBjVjJBdHRyaWJ1dGVzKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBhdHRyczogVnBjVjJBdHRyaWJ1dGVzLFxuICApOiBJVnBjVjIge1xuICAgIC8qKlxuICAgICAqIEludGVybmFsIGNsYXNzIHRvIGFsbG93IHVzZXJzIHRvIGltcG9ydCBWUENcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBjbGFzcyBJbXBvcnRlZFZwY1YyIGV4dGVuZHMgVnBjVjJCYXNlIHtcbiAgICAgIHB1YmxpYyByZWFkb25seSB2cGNJZDogc3RyaW5nO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHZwY0Fybjogc3RyaW5nO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHB1YmxpY1N1Ym5ldHM6IElTdWJuZXRWMltdID0gW107XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgcHJpdmF0ZVN1Ym5ldHM6IElTdWJuZXRWMltdID0gW107XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgaXNvbGF0ZWRTdWJuZXRzOiBJU3VibmV0VjJbXSA9IFtdO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGludGVybmV0Q29ubmVjdGl2aXR5RXN0YWJsaXNoZWQ6IElEZXBlbmRhYmxlID1cbiAgICAgICAgbmV3IERlcGVuZGVuY3lHcm91cCgpO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGlwdjRDaWRyQmxvY2s6IHN0cmluZztcbiAgICAgIHB1YmxpYyByZWFkb25seSByZWdpb246IHN0cmluZztcbiAgICAgIHB1YmxpYyByZWFkb25seSBvd25lckFjY291bnRJZDogc3RyaW5nO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHZwY05hbWU/OiBzdHJpbmc7XG4gICAgICBwcml2YXRlIHJlYWRvbmx5IF9wYXJ0aXRpb24/OiBzdHJpbmc7XG5cbiAgICAgIC8qXG4gICAgICAgKiBSZWZlcmVuY2UgdG8gYWxsIHNlY29uZGFyeSBibG9ja3MgYXR0YWNoZWRcbiAgICAgICAqL1xuICAgICAgcHVibGljIHJlYWRvbmx5IHNlY29uZGFyeUNpZHJCbG9jaz86IElWUENDaWRyQmxvY2tbXTtcblxuICAgICAgLyoqXG4gICAgICAgKiBSZWZlcnMgdG8gYWN0dWFsIFZQQyBSZXNvdXJjZSBhdHRyaWJ1dGUgaW4gbm9uLWltcG9ydGVkIFZQQ1xuICAgICAgICogUmVxdWlyZWQgdG8gaW1wbGVtZW50IGhlcmUgZHVlIHRvIGV4dGVuc2lvbiBmcm9tIEJhc2UgY2xhc3NcbiAgICAgICAqL1xuICAgICAgcHVibGljIHJlYWRvbmx5IHZwY0NpZHJCbG9jazogc3RyaW5nO1xuXG4gICAgICAvLyBSZXF1aXJlZCB0byBkbyBDSURSIHJhbmdlIHRlc3Qgb24gaW1wb3J0ZWQgVlBDcyB0byBjcmVhdGUgbmV3IHN1Ym5ldHNcbiAgICAgIHB1YmxpYyByZWFkb25seSBpcHY0SXBhbVByb3Zpc2lvbmVkQ2lkcnM6IHN0cmluZ1tdID0gW107XG5cbiAgICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBjb25zdHJ1Y3Q6IENvbnN0cnVjdCxcbiAgICAgICAgY29uc3RydWN0SWQ6IHN0cmluZyxcbiAgICAgICAgcHJvcHM6IFZwY1YyQXR0cmlidXRlcyxcbiAgICAgICkge1xuICAgICAgICBzdXBlcihjb25zdHJ1Y3QsIGNvbnN0cnVjdElkKTtcbiAgICAgICAgKHRoaXMudnBjSWQgPSBwcm9wcy52cGNJZCksXG4gICAgICAgICAgKHRoaXMucmVnaW9uID0gcHJvcHMucmVnaW9uID8/IHRoaXMuc3RhY2sucmVnaW9uKSxcbiAgICAgICAgICAodGhpcy5vd25lckFjY291bnRJZCA9IHByb3BzLm93bmVyQWNjb3VudElkID8/IHRoaXMuc3RhY2suYWNjb3VudCksXG4gICAgICAgICAgKHRoaXMuX3BhcnRpdGlvbiA9IEF3c1N0YWNrLm9mQXdzQ29uc3RydWN0KHRoaXMpLnBhcnRpdGlvbiksXG4gICAgICAgICAgKHRoaXMudnBjQXJuID0gQXJuLmZvcm1hdChcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc2VydmljZTogXCJlYzJcIixcbiAgICAgICAgICAgICAgcmVzb3VyY2U6IFwidnBjXCIsXG4gICAgICAgICAgICAgIHJlc291cmNlTmFtZTogdGhpcy52cGNJZCxcbiAgICAgICAgICAgICAgcmVnaW9uOiB0aGlzLnJlZ2lvbixcbiAgICAgICAgICAgICAgYWNjb3VudDogdGhpcy5vd25lckFjY291bnRJZCxcbiAgICAgICAgICAgICAgcGFydGl0aW9uOiB0aGlzLl9wYXJ0aXRpb24sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGhpcy5zdGFjayxcbiAgICAgICAgICApKTtcblxuICAgICAgICAvLyBQb3B1bGF0ZSByZWdpb24gYW5kIGFjY291bnQgZmllbGRzIHRoYXQgY2FuIGJlIHVzZWQgdG8gc2V0IHVwIHBlZXJpbmcgY29ubmVjdGlvblxuICAgICAgICAvLyBzYW1wbGUgdnBjIEFybiAtIGFybjphd3M6ZWMyOnVzLXdlc3QtMjoxMjM0NTY3ODkwMTI6dnBjL3ZwYy0wMTIzNDU2Nzg5YWJjZGVmMFxuICAgICAgICB0aGlzLnJlZ2lvbiA9IHRoaXMudnBjQXJuLnNwbGl0KFwiOlwiKVszXTtcbiAgICAgICAgdGhpcy5vd25lckFjY291bnRJZCA9IHRoaXMudnBjQXJuLnNwbGl0KFwiOlwiKVs0XTtcbiAgICAgICAgLy8gUmVmZXJzIHRvIGFjdHVhbCBWUEMgUmVzb3VyY2UgYXR0cmlidXRlIGluIG5vbi1pbXBvcnRlZCBWUENcbiAgICAgICAgdGhpcy52cGNDaWRyQmxvY2sgPSBwcm9wcy52cGNDaWRyQmxvY2s7XG4gICAgICAgIC8vIFJlcXVpcmVkIGZvciBzdWJuZXQgcmFuZ2UgcmVsYXRlZCBjaGVja3NcbiAgICAgICAgdGhpcy5pcHY0Q2lkckJsb2NrID0gcHJvcHMudnBjQ2lkckJsb2NrO1xuICAgICAgICB0aGlzLl92cG5HYXRld2F5SWQgPSBwcm9wcy52cG5HYXRld2F5SWQ7XG5cbiAgICAgICAgaWYgKHByb3BzLnN1Ym5ldHMpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHN1Ym5ldCBvZiBwcm9wcy5zdWJuZXRzKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHN1Ym5ldC5zdWJuZXRUeXBlID09PSBTdWJuZXRUeXBlLlBSSVZBVEVfV0lUSF9FR1JFU1MgfHxcbiAgICAgICAgICAgICAgc3VibmV0LnN1Ym5ldFR5cGUgPT09IFN1Ym5ldFR5cGUuUFJJVkFURV9XSVRIX05BVCB8fFxuICAgICAgICAgICAgICBzdWJuZXQuc3VibmV0VHlwZSA9PT0gU3VibmV0VHlwZS5QUklWQVRFXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdGhpcy5wcml2YXRlU3VibmV0cy5wdXNoKFxuICAgICAgICAgICAgICAgIFN1Ym5ldFYyLmZyb21TdWJuZXRWMkF0dHJpYnV0ZXMoXG4gICAgICAgICAgICAgICAgICBzY29wZSxcbiAgICAgICAgICAgICAgICAgIHN1Ym5ldC5zdWJuZXROYW1lID8/IFwiSW1wb3J0ZWRQcml2YXRlU3VibmV0XCIsXG4gICAgICAgICAgICAgICAgICBzdWJuZXQsXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc3VibmV0LnN1Ym5ldFR5cGUgPT09IFN1Ym5ldFR5cGUuUFVCTElDKSB7XG4gICAgICAgICAgICAgIHRoaXMucHVibGljU3VibmV0cy5wdXNoKFxuICAgICAgICAgICAgICAgIFN1Ym5ldFYyLmZyb21TdWJuZXRWMkF0dHJpYnV0ZXMoXG4gICAgICAgICAgICAgICAgICBzY29wZSxcbiAgICAgICAgICAgICAgICAgIHN1Ym5ldC5zdWJuZXROYW1lID8/IFwiSW1wb3J0ZWRQdWJsaWNTdWJuZXRcIixcbiAgICAgICAgICAgICAgICAgIHN1Ym5ldCxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgc3VibmV0LnN1Ym5ldFR5cGUgPT09IFN1Ym5ldFR5cGUuSVNPTEFURUQgfHxcbiAgICAgICAgICAgICAgc3VibmV0LnN1Ym5ldFR5cGUgPT09IFN1Ym5ldFR5cGUuUFJJVkFURV9JU09MQVRFRFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHRoaXMuaXNvbGF0ZWRTdWJuZXRzLnB1c2goXG4gICAgICAgICAgICAgICAgU3VibmV0VjIuZnJvbVN1Ym5ldFYyQXR0cmlidXRlcyhcbiAgICAgICAgICAgICAgICAgIHNjb3BlLFxuICAgICAgICAgICAgICAgICAgc3VibmV0LnN1Ym5ldE5hbWUgPz8gXCJJbXBvcnRlZElzb2xhdGVkU3VibmV0XCIsXG4gICAgICAgICAgICAgICAgICBzdWJuZXQsXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWNvbmRhcnlDaWRyQmxvY2sgPSBwcm9wcy5zZWNvbmRhcnlDaWRyQmxvY2tzPy5tYXAoKGNpZHJCbG9jaykgPT5cbiAgICAgICAgICBWUENDaWRyQmxvY2suZnJvbVZQQ0NpZHJCbG9ja2F0dHJpYnV0ZXMoXG4gICAgICAgICAgICBzY29wZSxcbiAgICAgICAgICAgIGNpZHJCbG9jay5jaWRyQmxvY2tOYW1lID8/IFwiSW1wb3J0ZWRTZWNvbmRhcnlDaWRyQmxvY2tcIixcbiAgICAgICAgICAgIHsgLi4uY2lkckJsb2NrIH0sXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHByb3BzLnNlY29uZGFyeUNpZHJCbG9ja3MpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGNpZHJCbG9jayBvZiBwcm9wcy5zZWNvbmRhcnlDaWRyQmxvY2tzKSB7XG4gICAgICAgICAgICBpZiAoY2lkckJsb2NrLmlwdjRJcGFtUHJvdmlzaW9uZWRDaWRycykge1xuICAgICAgICAgICAgICB0aGlzLmlwdjRJcGFtUHJvdmlzaW9uZWRDaWRycy5wdXNoKFxuICAgICAgICAgICAgICAgIC4uLmNpZHJCbG9jay5pcHY0SXBhbVByb3Zpc2lvbmVkQ2lkcnMsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXcgSW1wb3J0ZWRWcGNWMihzY29wZSwgaWQsIGF0dHJzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZGVudGlmaWVyIGZvciB0aGlzIFZQQ1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHZwY0lkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB2cGNBcm46IHN0cmluZztcblxuICAvKipcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHZwY0NpZHJCbG9jazogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIElQdjYgQ0lEUiBibG9ja3MgZm9yIHRoZSBWUEMuXG4gICAqXG4gICAqIFNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLXZwYy5odG1sI2F3cy1yZXNvdXJjZS1lYzItdnBjLXJldHVybi12YWx1ZXNcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBpcHY2Q2lkckJsb2Nrczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBwcm92aWRlciBvZiBpcHY0IGFkZHJlc3Nlc1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlwQWRkcmVzc2VzOiBJSXBBZGRyZXNzZXM7XG5cbiAgLyoqXG4gICAqIFRoZSBBV1MgQ2xvdWRGb3JtYXRpb24gcmVzb3VyY2UgcmVwcmVzZW50aW5nIHRoZSBWUEMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcmVzb3VyY2U6IHZwYy5WcGM7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiBpbnN0YW5jZXMgbGF1bmNoZWQgaW4gdGhpcyBWUEMgd2lsbCBoYXZlIHB1YmxpYyBETlMgaG9zdG5hbWVzLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGRuc0hvc3RuYW1lc0VuYWJsZWQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiBETlMgc3VwcG9ydCBpcyBlbmFibGVkIGZvciB0aGlzIFZQQy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBkbnNTdXBwb3J0RW5hYmxlZDogYm9vbGVhbjtcblxuICAvKipcbiAgICogSXNvbGF0ZWQgU3VibmV0cyB0aGF0IGFyZSBwYXJ0IG9mIHRoaXMgVlBDLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlzb2xhdGVkU3VibmV0czogSVN1Ym5ldFtdO1xuXG4gIC8qKlxuICAgKiBQdWJsaWMgU3VibmV0cyB0aGF0IGFyZSBwYXJ0IG9mIHRoaXMgVlBDLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHB1YmxpY1N1Ym5ldHM6IElTdWJuZXRbXTtcblxuICAvKipcbiAgICogUHVibGljIFN1Ym5ldHMgdGhhdCBhcmUgcGFydCBvZiB0aGlzIFZQQy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwcml2YXRlU3VibmV0czogSVN1Ym5ldFtdO1xuXG4gIC8qKlxuICAgKiBUbyBkZWZpbmUgZGVwZW5kZW5jeSBvbiBpbnRlcm5ldCBjb25uZWN0aXZpdHlcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBpbnRlcm5ldENvbm5lY3Rpdml0eUVzdGFibGlzaGVkOiBJRGVwZW5kYWJsZTtcblxuICAvKipcbiAgICogcmVmZXJlbmNlIHRvIGFsbCBzZWNvbmRhcnkgYmxvY2tzIGF0dGFjaGVkXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc2Vjb25kYXJ5Q2lkckJsb2NrPzogSVZQQ0NpZHJCbG9ja1tdID1cbiAgICBuZXcgQXJyYXk8SVZQQ0NpZHJCbG9jaz4oKTtcblxuICAvKipcbiAgICogSVB2NCBDSURSIHByb3Zpc2lvbmVkIHVzaW5nIElQQU0gcG9vbFxuICAgKiBSZXF1aXJlZCB0byBjaGVjayBmb3Igb3ZlcmxhcHBpbmcgQ0lEUnMgYWZ0ZXIgcHJvdmlzaW9uaW5nXG4gICAqIGlzIGNvbXBsZXRlIHVuZGVyIElQQU1cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBpcHY0SXBhbVByb3Zpc2lvbmVkQ2lkcnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogUmVnaW9uIGZvciB0aGlzIFZQQ1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJlZ2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJZGVudGlmaWVyIG9mIHRoZSBvd25lciBmb3IgdGhpcyBWUENcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBvd25lckFjY291bnRJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBGb3IgdmFsaWRhdGlvbiB0byBkZWZpbmUgSVB2NiBzdWJuZXRzLCBzZXQgdG8gdHJ1ZSBpbiBjYXNlIG9mXG4gICAqIEFtYXpvbiBQcm92aWRlZCBJUHY2IGNpZHIgcmFuZ2VcbiAgICogaWYgdHJ1ZSwgSVB2NiBhZGRyZXNzZXMgY2FuIGJlIGF0dGFjaGVkIHRvIHRoZSBzdWJuZXRzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHVzZUlwdjY6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogVnBjTmFtZSB0byBiZSB1c2VkIGZvciB0YWdnaW5nIGl0cyBjb21wb25lbnRzXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB2cGNOYW1lPzogc3RyaW5nO1xuXG4gIHB1YmxpYyByZWFkb25seSBpcHY0Q2lkckJsb2NrOiBzdHJpbmcgPSBcIlwiO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBWcGNWMlByb3BzID0ge30pIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcbiAgICAvLyAvLyBObyBMYXp5LnN0cmluZ1ZhbHVlID9cbiAgICAvLyBjb25zdCBwaHlzaWNhbE5hbWUgPVxuICAgIC8vICAgcHJvcHMudnBjTmFtZSA/P1xuICAgIC8vICAgQXdzU3RhY2sudW5pcXVlUmVzb3VyY2VOYW1lKHRoaXMsIHtcbiAgICAvLyAgICAgbWF4TGVuZ3RoOiAxMjgsXG4gICAgLy8gICAgIGFsbG93ZWRTcGVjaWFsQ2hhcmFjdGVyczogXCJfXCIsXG4gICAgLy8gICB9KTtcbiAgICB0aGlzLnZwY05hbWUgPSBwcm9wcy52cGNOYW1lO1xuICAgIHRoaXMuaXBBZGRyZXNzZXMgPVxuICAgICAgcHJvcHMucHJpbWFyeUFkZHJlc3NCbG9jayA/PyBJcEFkZHJlc3Nlcy5pcHY0KFwiMTAuMC4wLjAvMTZcIik7XG4gICAgY29uc3QgdnBjT3B0aW9ucyA9IHRoaXMuaXBBZGRyZXNzZXMuYWxsb2NhdGVWcGNDaWRyKCk7XG5cbiAgICB0aGlzLmRuc0hvc3RuYW1lc0VuYWJsZWQgPVxuICAgICAgcHJvcHMuZW5hYmxlRG5zSG9zdG5hbWVzID09IG51bGwgPyB0cnVlIDogcHJvcHMuZW5hYmxlRG5zSG9zdG5hbWVzO1xuICAgIHRoaXMuZG5zU3VwcG9ydEVuYWJsZWQgPVxuICAgICAgcHJvcHMuZW5hYmxlRG5zU3VwcG9ydCA9PSBudWxsID8gdHJ1ZSA6IHByb3BzLmVuYWJsZURuc1N1cHBvcnQ7XG4gICAgY29uc3QgaW5zdGFuY2VUZW5hbmN5ID0gcHJvcHMuZGVmYXVsdEluc3RhbmNlVGVuYW5jeSB8fCBcImRlZmF1bHRcIjtcbiAgICB0aGlzLnJlc291cmNlID0gbmV3IHZwYy5WcGModGhpcywgXCJSZXNvdXJjZVwiLCB7XG4gICAgICBjaWRyQmxvY2s6IHZwY09wdGlvbnMuaXB2NENpZHJCbG9jaywgLy9mb3IgSXB2NCBhZGRyZXNzZXMgQ0lEUiBibG9ja1xuICAgICAgZW5hYmxlRG5zSG9zdG5hbWVzOiB0aGlzLmRuc0hvc3RuYW1lc0VuYWJsZWQsXG4gICAgICBlbmFibGVEbnNTdXBwb3J0OiB0aGlzLmRuc1N1cHBvcnRFbmFibGVkLFxuICAgICAgaXB2NElwYW1Qb29sSWQ6IHZwY09wdGlvbnMuaXB2NElwYW1Qb29sPy5pcGFtUG9vbElkLCAvLyBmb3IgSXB2NCBpcGFtIG9wdGlvblxuICAgICAgaXB2NE5ldG1hc2tMZW5ndGg6IHZwY09wdGlvbnMuaXB2NE5ldG1hc2tMZW5ndGgsIC8vIGZvciBJcHY0IGlwYW0gb3B0aW9uXG4gICAgICBpbnN0YW5jZVRlbmFuY3k6IGluc3RhbmNlVGVuYW5jeSxcbiAgICB9KTtcblxuICAgIHRoaXMubm9kZS5kZWZhdWx0Q2hpbGQgPSB0aGlzLnJlc291cmNlO1xuICAgIHRoaXMudnBjQ2lkckJsb2NrID0gdGhpcy5yZXNvdXJjZS5jaWRyQmxvY2s7XG4gICAgaWYgKHZwY09wdGlvbnMuaXB2NENpZHJCbG9jaykge1xuICAgICAgdGhpcy5pcHY0Q2lkckJsb2NrID0gdnBjT3B0aW9ucy5pcHY0Q2lkckJsb2NrO1xuICAgIH1cbiAgICAvLyBUT0RPOiBBZGRpdGlvbmFsIGNpZHIgYmxvY2tzP1xuICAgIHRoaXMuaXB2NkNpZHJCbG9ja3MgPSBbdGhpcy5yZXNvdXJjZS5pcHY2Q2lkckJsb2NrXTtcbiAgICB0aGlzLnZwY0lkID0gdGhpcy5yZXNvdXJjZS5pZDtcbiAgICB0aGlzLnZwY0FybiA9IEFybi5mb3JtYXQoXG4gICAgICB7XG4gICAgICAgIHNlcnZpY2U6IFwiZWMyXCIsXG4gICAgICAgIHJlc291cmNlOiBcInZwY1wiLFxuICAgICAgICByZXNvdXJjZU5hbWU6IHRoaXMudnBjSWQsXG4gICAgICB9LFxuICAgICAgdGhpcy5zdGFjayxcbiAgICApO1xuICAgIHRoaXMucmVnaW9uID0gdGhpcy5zdGFjay5yZWdpb247XG4gICAgdGhpcy5vd25lckFjY291bnRJZCA9IHRoaXMuc3RhY2suYWNjb3VudDtcbiAgICAvLyBBZGQgdGFnIHRvIHRoZSBWUEMgd2l0aCB0aGUgbmFtZSBwcm92aWRlZCBpbiBwcm9wZXJ0aWVzXG4gICAgVGFncy5vZih0aGlzKS5hZGQoTkFNRV9UQUcsIHByb3BzLnZwY05hbWUgfHwgdGhpcy5ub2RlLnBhdGgpO1xuICAgIGlmIChwcm9wcy5zZWNvbmRhcnlBZGRyZXNzQmxvY2tzKSB7XG4gICAgICBjb25zdCBzZWNvbmRhcnlBZGRyZXNzQmxvY2tzOiBJSXBBZGRyZXNzZXNbXSA9XG4gICAgICAgIHByb3BzLnNlY29uZGFyeUFkZHJlc3NCbG9ja3M7XG5cbiAgICAgIGZvciAoY29uc3Qgc2Vjb25kYXJ5QWRkcmVzc0Jsb2NrIG9mIHNlY29uZGFyeUFkZHJlc3NCbG9ja3MpIHtcbiAgICAgICAgY29uc3Qgc2Vjb25kYXJ5VnBjT3B0aW9uczogVnBjQ2lkck9wdGlvbnMgPVxuICAgICAgICAgIHNlY29uZGFyeUFkZHJlc3NCbG9jay5hbGxvY2F0ZVZwY0NpZHIoKTtcbiAgICAgICAgaWYgKCFzZWNvbmRhcnlWcGNPcHRpb25zLmNpZHJCbG9ja05hbWUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBcIkNpZHIgQmxvY2sgTmFtZSBpcyByZXF1aXJlZCB0byBjcmVhdGUgc2Vjb25kYXJ5IElQIGFkZHJlc3NcIixcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHNlY29uZGFyeVZwY09wdGlvbnMuYW1hem9uUHJvdmlkZWQgfHxcbiAgICAgICAgICBzZWNvbmRhcnlWcGNPcHRpb25zLmlwdjZJcGFtUG9vbFxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnVzZUlwdjYgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vdmFsaWRhdGUgQ0lEUiByYW5nZXMgcGVyIFJGQyAxOTE4XG4gICAgICAgIGlmIChzZWNvbmRhcnlWcGNPcHRpb25zLmlwdjRDaWRyQmxvY2shKSB7XG4gICAgICAgICAgY29uc3QgcmV0ID0gdmFsaWRhdGVJcHY0YWRkcmVzcyhcbiAgICAgICAgICAgIHNlY29uZGFyeVZwY09wdGlvbnMuaXB2NENpZHJCbG9jayxcbiAgICAgICAgICAgIHRoaXMucmVzb3VyY2UuY2lkckJsb2NrSW5wdXQsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAocmV0ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICBcIkNJRFIgYmxvY2sgc2hvdWxkIGJlIGluIHRoZSBzYW1lIFJGQyAxOTE4IHJhbmdlIGluIHRoZSBWUENcIixcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzZWNvbmRhcnlWcGNPcHRpb25zLmlwdjRJcGFtUHJvdmlzaW9uZWRDaWRycyEpIHtcbiAgICAgICAgICB0aGlzLmlwdjRJcGFtUHJvdmlzaW9uZWRDaWRycz8ucHVzaChcbiAgICAgICAgICAgIC4uLnNlY29uZGFyeVZwY09wdGlvbnMuaXB2NElwYW1Qcm92aXNpb25lZENpZHJzLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdnBjQ2lkckJsb2NrID0gbmV3IFZQQ0NpZHJCbG9jayhcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIHNlY29uZGFyeVZwY09wdGlvbnMuY2lkckJsb2NrTmFtZSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2cGNJZDogdGhpcy52cGNJZCxcbiAgICAgICAgICAgIGNpZHJCbG9jazogc2Vjb25kYXJ5VnBjT3B0aW9ucy5pcHY0Q2lkckJsb2NrLFxuICAgICAgICAgICAgaXB2NElwYW1Qb29sSWQ6IHNlY29uZGFyeVZwY09wdGlvbnMuaXB2NElwYW1Qb29sPy5pcGFtUG9vbElkLFxuICAgICAgICAgICAgaXB2NE5ldG1hc2tMZW5ndGg6IHNlY29uZGFyeVZwY09wdGlvbnMuaXB2NE5ldG1hc2tMZW5ndGgsXG4gICAgICAgICAgICBpcHY2TmV0bWFza0xlbmd0aDogc2Vjb25kYXJ5VnBjT3B0aW9ucy5pcHY2TmV0bWFza0xlbmd0aCxcbiAgICAgICAgICAgIGlwdjZJcGFtUG9vbElkOiBzZWNvbmRhcnlWcGNPcHRpb25zLmlwdjZJcGFtUG9vbD8uaXBhbVBvb2xJZCxcbiAgICAgICAgICAgIGFtYXpvblByb3ZpZGVkSXB2NkNpZHJCbG9jazogc2Vjb25kYXJ5VnBjT3B0aW9ucy5hbWF6b25Qcm92aWRlZCxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgICBpZiAoc2Vjb25kYXJ5VnBjT3B0aW9ucy5kZXBlbmRlbmNpZXMpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGRlcCBvZiBzZWNvbmRhcnlWcGNPcHRpb25zLmRlcGVuZGVuY2llcykge1xuICAgICAgICAgICAgdnBjQ2lkckJsb2NrLm5vZGUuYWRkRGVwZW5kZW5jeShkZXApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvL0NyZWF0ZSBzZWNvbmRhcnkgYmxvY2tzIGZvciBJcHY0IGFuZCBJcHY2XG4gICAgICAgIHRoaXMuc2Vjb25kYXJ5Q2lkckJsb2NrPy5wdXNoKHZwY0NpZHJCbG9jayk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRW1wdHkgYXJyYXkgZm9yIGlzb2xhdGVkIHN1Ym5ldHNcbiAgICAgKi9cbiAgICB0aGlzLmlzb2xhdGVkU3VibmV0cyA9IG5ldyBBcnJheTxJU3VibmV0PigpO1xuXG4gICAgLyoqXG4gICAgICogRW1wdHkgYXJyYXkgZm9yIHB1YmxpYyBzdWJuZXRzXG4gICAgICovXG4gICAgdGhpcy5wdWJsaWNTdWJuZXRzID0gbmV3IEFycmF5PElTdWJuZXQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbXB0eSBhcnJheSBmb3IgcHJpdmF0ZSBzdWJuZXRzXG4gICAgICovXG4gICAgdGhpcy5wcml2YXRlU3VibmV0cyA9IG5ldyBBcnJheTxJU3VibmV0PigpO1xuXG4gICAgLyoqXG4gICAgICogRGVwZW5kYWJsZSB0aGF0IGNhbiBiZSBkZXBlbmRlZCB1cG9uIHRvIGZvcmNlIGludGVybmV0IGNvbm5lY3Rpdml0eSBlc3RhYmxpc2hlZCBvbiB0aGUgVlBDXG4gICAgICogQWRkIGlndyB0byB0aGlzIGlmIGl0cyBhIHB1YmxpYyBzdWJuZXRcbiAgICAgKi9cbiAgICB0aGlzLmludGVybmV0Q29ubmVjdGl2aXR5RXN0YWJsaXNoZWQgPVxuICAgICAgdGhpcy5faW50ZXJuZXRDb25uZWN0aXZpdHlFc3RhYmxpc2hlZDtcbiAgfVxufVxuLyoqXG4gKiBTdXBwb3J0cyBhc3NpZ25pbmcgSVB2NCBhZGRyZXNzIHRvIFZQQ1xuICovXG5jbGFzcyBpcHY0Q2lkckFsbG9jYXRpb24gaW1wbGVtZW50cyBJSXBBZGRyZXNzZXMge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNpZHJCbG9jazogc3RyaW5nLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcHJvcHM/OiB7IGNpZHJCbG9ja05hbWU6IHN0cmluZyB9LFxuICApIHt9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIENJRFIgYmxvY2sgcHJvdmlkZWQgYnkgdGhlIHVzZXIgdG8gc2V0IElQdjRcbiAgICovXG4gIGFsbG9jYXRlVnBjQ2lkcigpOiBWcGNDaWRyT3B0aW9ucyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlwdjRDaWRyQmxvY2s6IHRoaXMuY2lkckJsb2NrLFxuICAgICAgY2lkckJsb2NrTmFtZTogdGhpcy5wcm9wcz8uY2lkckJsb2NrTmFtZSxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogU3VwcG9ydHMgQW1hem9uIFByb3ZpZGVkIElwdjYgcmFuZ2VzXG4gKi9cbmNsYXNzIEFtYXpvblByb3ZpZGVkIGltcGxlbWVudHMgSUlwQWRkcmVzc2VzIHtcbiAgLyoqXG4gICAqIFJlcHJlc2VudHMgYW4gQW1hem9uLXByb3ZpZGVkIElQdjYgQ0lEUiByYW5nZSBmb3IgYSBWUEMuXG4gICAqXG4gICAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyB0aGUgSUlwQWRkcmVzc2VzIGludGVyZmFjZSBhbmQgaXMgdXNlZCB0byBhbGxvY2F0ZSBhbiBBbWF6b24tcHJvdmlkZWRcbiAgICogSVB2NiBDSURSIHJhbmdlIGZvciBhIFZQQy4gV2hlbiBhbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzIGlzIHVzZWQgdG8gYWxsb2NhdGUgdGhlIFZQQyBDSURSLFxuICAgKiBBbWF6b24gd2lsbCBhdXRvbWF0aWNhbGx5IGFzc2lnbiBhbiBJUHY2IENJRFIgcmFuZ2UgZnJvbSBpdHMgcG9vbCBvZiBhdmFpbGFibGUgYWRkcmVzc2VzLlxuICAgKi9cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHByb3BzOiB7IGNpZHJCbG9ja05hbWU6IHN0cmluZyB9KSB7fVxuXG4gIGFsbG9jYXRlVnBjQ2lkcigpOiBWcGNDaWRyT3B0aW9ucyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFtYXpvblByb3ZpZGVkOiB0cnVlLFxuICAgICAgY2lkckJsb2NrTmFtZTogdGhpcy5wcm9wcy5jaWRyQmxvY2tOYW1lLFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGFuIElQdjQgYWRkcmVzcyByYW5nZSBtYW5hZ2VkIGJ5IEFXUyBJUCBBZGRyZXNzIE1hbmFnZXIgKElQQU0pLlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLWlwYW0uaHRtbFxuICovXG5jbGFzcyBJcGFtSXB2NiBpbXBsZW1lbnRzIElJcEFkZHJlc3NlcyB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgcHJvcHM6IElwYW1PcHRpb25zKSB7fVxuXG4gIGFsbG9jYXRlVnBjQ2lkcigpOiBWcGNDaWRyT3B0aW9ucyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlwdjZOZXRtYXNrTGVuZ3RoOiB0aGlzLnByb3BzLm5ldG1hc2tMZW5ndGgsXG4gICAgICBpcHY2SXBhbVBvb2w6IHRoaXMucHJvcHMuaXBhbVBvb2wsXG4gICAgICBkZXBlbmRlbmNpZXM6IHRoaXMucHJvcHMuaXBhbVBvb2w/LmlwYW1DaWRycy5tYXAoXG4gICAgICAgIChjKSA9PiBjIGFzIFRlcnJhZm9ybVJlc291cmNlLFxuICAgICAgKSxcbiAgICAgIGNpZHJCbG9ja05hbWU6IHRoaXMucHJvcHMuY2lkckJsb2NrTmFtZSxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhbiBJUHY0IGFkZHJlc3MgcmFuZ2UgbWFuYWdlZCBieSBBV1MgSVAgQWRkcmVzcyBNYW5hZ2VyIChJUEFNKS5cbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWVjMi1pcGFtLmh0bWxcbiAqL1xuY2xhc3MgSXBhbUlwdjQgaW1wbGVtZW50cyBJSXBBZGRyZXNzZXMge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHByb3BzOiBJcGFtT3B0aW9ucykge31cbiAgYWxsb2NhdGVWcGNDaWRyKCk6IFZwY0NpZHJPcHRpb25zIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXB2NE5ldG1hc2tMZW5ndGg6IHRoaXMucHJvcHMubmV0bWFza0xlbmd0aCxcbiAgICAgIGlwdjRJcGFtUG9vbDogdGhpcy5wcm9wcy5pcGFtUG9vbCxcbiAgICAgIGNpZHJCbG9ja05hbWU6IHRoaXMucHJvcHM/LmNpZHJCbG9ja05hbWUsXG4gICAgICBpcHY0SXBhbVByb3Zpc2lvbmVkQ2lkcnM6IHRoaXMucHJvcHMuaXBhbVBvb2w/LmlwYW1JcHY0Q2lkcnMsXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIEludGVyZmFjZSB0byBjcmVhdGUgTDIgZm9yIFZQQyBDaWRyIEJsb2NrXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVZQQ0NpZHJCbG9jayB7XG4gIC8qKlxuICAgKiBBbWF6b24gUHJvdmlkZWQgSXB2NlxuICAgKi9cbiAgcmVhZG9ubHkgYW1hem9uUHJvdmlkZWRJcHY2Q2lkckJsb2NrPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHNlY29uZGFyeSBJUHY0IENJRFIgQmxvY2tcbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBDSURSIGJsb2NrIHByb3ZpZGVkXG4gICAqL1xuICByZWFkb25seSBjaWRyQmxvY2s/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElQQU0gcG9vbCBmb3IgSVB2NiBhZGRyZXNzIHR5cGVcbiAgICovXG4gIHJlYWRvbmx5IGlwdjZJcGFtUG9vbElkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJUEFNIHBvb2wgZm9yIElQdjQgYWRkcmVzcyB0eXBlXG4gICAqL1xuICByZWFkb25seSBpcHY0SXBhbVBvb2xJZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBdHRyaWJ1dGVzIGZvciBWUENDaWRyQmxvY2sgdXNlZCBmb3IgZGVmaW5pbmcgYSBuZXcgQ0lEUiBCbG9ja1xuICogYW5kIGFsc28gZm9yIGltcG9ydGluZyBhbiBleGlzdGluZyBDSURSXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVlBDQ2lkckJsb2NrYXR0cmlidXRlcyB7XG4gIC8qKlxuICAgKiBBbWF6b24gUHJvdmlkZWQgSXB2NlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgYW1hem9uUHJvdmlkZWRJcHY2Q2lkckJsb2NrPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHNlY29uZGFyeSBJUHY0IENJRFIgQmxvY2tcbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBDSURSIGJsb2NrIHByb3ZpZGVkXG4gICAqL1xuICByZWFkb25seSBjaWRyQmxvY2s/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzZWNvbmRhcnkgSVB2NCBDSURSIEJsb2NrXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gQ0lEUiBibG9jayBwcm92aWRlZFxuICAgKi9cbiAgcmVhZG9ubHkgY2lkckJsb2NrTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogTmV0IG1hc2sgbGVuZ3RoIGZvciBJUHY2IGFkZHJlc3MgdHlwZVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIE5ldCBtYXNrIGxlbmd0aCBjb25maWd1cmVkIGZvciBJUHY2XG4gICAqL1xuICByZWFkb25seSBpcHY2TmV0bWFza0xlbmd0aD86IG51bWJlcjtcblxuICAvKipcbiAgICogTmV0IG1hc2sgbGVuZ3RoIGZvciBJUHY0IGFkZHJlc3MgdHlwZVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIE5ldCBtYXNrIGxlbmd0aCBjb25maWd1cmVkIGZvciBJUHY0XG4gICAqL1xuICByZWFkb25seSBpcHY0TmV0bWFza0xlbmd0aD86IG51bWJlcjtcblxuICAvKipcbiAgICogSVBBTSBwb29sIGZvciBJUHY2IGFkZHJlc3MgdHlwZVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIElQQU0gcG9vbCBJZCBwcm92aWRlZCBmb3IgSVB2NlxuICAgKi9cbiAgcmVhZG9ubHkgaXB2NklwYW1Qb29sSWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElQQU0gcG9vbCBmb3IgSVB2NCBhZGRyZXNzIHR5cGVcbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBJUEFNIHBvb2wgSWQgcHJvdmlkZWQgZm9yIElQdjRcbiAgICovXG4gIHJlYWRvbmx5IGlwdjRJcGFtUG9vbElkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJUHY0IENJRFIgcHJvdmlzaW9uZWQgdW5kZXIgcG9vbFxuICAgKiBSZXF1aXJlZCB0byBjaGVjayBmb3Igb3ZlcmxhcHBpbmcgQ0lEUnMgYWZ0ZXIgcHJvdmlzaW9uaW5nXG4gICAqIGlzIGNvbXBsZXRlIHVuZGVyIElQQU0gcG9vbFxuICAgKiBAZGVmYXVsdCAtIG5vIElQQU0gSVB2NCBDSURSIHJhbmdlIGlzIHByb3Zpc2lvbmVkIHVzaW5nIElQQU1cbiAgICovXG4gIHJlYWRvbmx5IGlwdjRJcGFtUHJvdmlzaW9uZWRDaWRycz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIEludGVyZmFjZSBWUENDaWRyQmxvY2tcbiAqL1xuaW50ZXJmYWNlIFZQQ0NpZHJCbG9ja1Byb3BzIGV4dGVuZHMgVlBDQ2lkckJsb2NrYXR0cmlidXRlcyB7XG4gIC8qKlxuICAgKiBUaGUgVlBDIElkIGZvciBhc3NvY2lhdGluZyBDSURSIEJsb2NrIGFzIGEgc2Vjb25kYXJ5IGFkZHJlc3NcbiAgICovXG4gIHJlYWRvbmx5IHZwY0lkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogSW50ZXJuYWwgTDIgdG8gZGVmaW5lIGEgbmV3IFZQQyBDSURSIEJsb2NrXG4gKlxuICogU2VlIFtWUEMgQ0lEUiBibG9ja3NdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS92cGMvbGF0ZXN0L3VzZXJndWlkZS92cGMtY2lkci1ibG9ja3MuaHRtbClcbiAqIEBpbnRlcm5hbFxuICovXG5jbGFzcyBWUENDaWRyQmxvY2sgZXh0ZW5kcyBBd3NDb25zdHJ1Y3RCYXNlIGltcGxlbWVudHMgSVZQQ0NpZHJCbG9jayB7XG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gZXhpc3RpbmcgVlBDIENJRFIgQmxvY2tcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbVZQQ0NpZHJCbG9ja2F0dHJpYnV0ZXMoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBWUENDaWRyQmxvY2thdHRyaWJ1dGVzLFxuICApOiBJVlBDQ2lkckJsb2NrIHtcbiAgICBjbGFzcyBJbXBvcnQgZXh0ZW5kcyBBd3NDb25zdHJ1Y3RCYXNlIGltcGxlbWVudHMgSVZQQ0NpZHJCbG9jayB7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgb3V0cHV0czogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICAgICAgcHVibGljIHJlYWRvbmx5IGNpZHJCbG9jayA9IHByb3BzLmNpZHJCbG9jaztcbiAgICAgIHB1YmxpYyByZWFkb25seSBhbWF6b25Qcm92aWRlZElwdjZDaWRyQmxvY2s/OiBib29sZWFuID1cbiAgICAgICAgcHJvcHMuYW1hem9uUHJvdmlkZWRJcHY2Q2lkckJsb2NrO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGlwdjZJcGFtUG9vbElkPzogc3RyaW5nID0gcHJvcHMuaXB2NklwYW1Qb29sSWQ7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgaXB2NElwYW1Qb29sSWQ/OiBzdHJpbmcgPSBwcm9wcy5pcHY0SXBhbVBvb2xJZDtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBJbXBvcnQoc2NvcGUsIGlkKTtcbiAgfVxuICBwdWJsaWMgcmVhZG9ubHkgb3V0cHV0czogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICBwdWJsaWMgcmVhZG9ubHkgcmVzb3VyY2U6XG4gICAgfCB2cGNJcHY0Q2lkckJsb2NrQXNzb2NpYXRpb24uVnBjSXB2NENpZHJCbG9ja0Fzc29jaWF0aW9uXG4gICAgfCB2cGNJcHY2Q2lkckJsb2NrQXNzb2NpYXRpb24uVnBjSXB2NkNpZHJCbG9ja0Fzc29jaWF0aW9uO1xuXG4gIHB1YmxpYyByZWFkb25seSBjaWRyQmxvY2s/OiBzdHJpbmc7XG5cbiAgcHVibGljIHJlYWRvbmx5IGFtYXpvblByb3ZpZGVkSXB2NkNpZHJCbG9jaz86IGJvb2xlYW47XG5cbiAgcHVibGljIHJlYWRvbmx5IGlwdjZJcGFtUG9vbElkPzogc3RyaW5nO1xuXG4gIHB1YmxpYyByZWFkb25seSBpcHY0SXBhbVBvb2xJZD86IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogVlBDQ2lkckJsb2NrUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIGNvbnN0IGlzSXB2NiA9XG4gICAgICBwcm9wcy5hbWF6b25Qcm92aWRlZElwdjZDaWRyQmxvY2sgPT09IHRydWUgfHxcbiAgICAgIHByb3BzLmlwdjZJcGFtUG9vbElkICE9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnJlc291cmNlID0gaXNJcHY2XG4gICAgICA/IG5ldyB2cGNJcHY2Q2lkckJsb2NrQXNzb2NpYXRpb24uVnBjSXB2NkNpZHJCbG9ja0Fzc29jaWF0aW9uKHRoaXMsIGlkLCB7XG4gICAgICAgICAgdnBjSWQ6IHByb3BzLnZwY0lkLFxuICAgICAgICAgIGFzc2lnbkdlbmVyYXRlZElwdjZDaWRyQmxvY2s6IHByb3BzLmFtYXpvblByb3ZpZGVkSXB2NkNpZHJCbG9jayxcbiAgICAgICAgICBpcHY2SXBhbVBvb2xJZDogcHJvcHMuaXB2NklwYW1Qb29sSWQsXG4gICAgICAgICAgaXB2Nk5ldG1hc2tMZW5ndGg6IHByb3BzLmlwdjZOZXRtYXNrTGVuZ3RoLFxuICAgICAgICAgIC8vIGlwdjZQb29sOiA/PyxcbiAgICAgICAgICAvLyBpcHY2Q2lkckJsb2NrOiA/Pz8sXG4gICAgICAgIH0pXG4gICAgICA6IG5ldyB2cGNJcHY0Q2lkckJsb2NrQXNzb2NpYXRpb24uVnBjSXB2NENpZHJCbG9ja0Fzc29jaWF0aW9uKHRoaXMsIGlkLCB7XG4gICAgICAgICAgdnBjSWQ6IHByb3BzLnZwY0lkLFxuICAgICAgICAgIGNpZHJCbG9jazogcHJvcHMuY2lkckJsb2NrLFxuICAgICAgICAgIGlwdjRJcGFtUG9vbElkOiBwcm9wcy5pcHY0SXBhbVBvb2xJZCxcbiAgICAgICAgICBpcHY0TmV0bWFza0xlbmd0aDogcHJvcHMuaXB2NE5ldG1hc2tMZW5ndGgsXG4gICAgICAgIH0pO1xuICAgIHRoaXMubm9kZS5kZWZhdWx0Q2hpbGQgPSB0aGlzLnJlc291cmNlO1xuICAgIHRoaXMuY2lkckJsb2NrID0gcHJvcHMuY2lkckJsb2NrO1xuICAgIHRoaXMuaXB2NklwYW1Qb29sSWQgPSBwcm9wcy5pcHY2SXBhbVBvb2xJZDtcbiAgICB0aGlzLmlwdjRJcGFtUG9vbElkID0gcHJvcHMuaXB2NElwYW1Qb29sSWQ7XG4gICAgdGhpcy5hbWF6b25Qcm92aWRlZElwdjZDaWRyQmxvY2sgPSBwcm9wcy5hbWF6b25Qcm92aWRlZElwdjZDaWRyQmxvY2s7XG4gIH1cbn1cblxuLy9AaW50ZXJuYWwgRmlyc3QgdHdvIE9jdGV0IHRvIHZlcmlmeSBSRkMgMTkxOFxuaW50ZXJmYWNlIElQYWRkcmVzc0NvbmZpZyB7XG4gIG9jdGV0MTogbnVtYmVyO1xuICBvY3RldDI6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgd2hldGhlciBhIHNlY29uZGFyeSBJUHY0IGFkZHJlc3MgaXMgd2l0aGluIHRoZSBzYW1lIHByaXZhdGUgSVAgYWRkcmVzcyByYW5nZSBhcyB0aGUgcHJpbWFyeSBJUHY0IGFkZHJlc3MuXG4gKlxuICogQHBhcmFtIGNpZHIxIFRoZSBzZWNvbmRhcnkgSVB2NCBDSURSIGJsb2NrIHRvIGJlIHZhbGlkYXRlZC5cbiAqIEBwYXJhbSBjaWRyMiBUaGUgcHJpbWFyeSBJUHY0IENJRFIgYmxvY2sgdG8gdmFsaWRhdGUgYWdhaW5zdC5cbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHNlY29uZGFyeSBJUHY0IENJRFIgYmxvY2sgaXMgd2l0aGluIHRoZSBzYW1lIHByaXZhdGUgSVAgYWRkcmVzcyByYW5nZSBhcyB0aGUgcHJpbWFyeSBJUHY0IENJRFIgYmxvY2ssIGZhbHNlIG90aGVyd2lzZS5cbiAqIEBpbnRlcm5hbFxuICogVGhlIHByaXZhdGUgSVAgYWRkcmVzcyByYW5nZXMgYXJlIGRlZmluZWQgYnkgUkZDIDE5MTggYXMgMTAuMC4wLjAvOCwgMTcyLjE2LjAuMC8xMiwgYW5kIDE5Mi4xNjguMC4wLzE2LlxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUlwdjRhZGRyZXNzKGNpZHIxPzogc3RyaW5nLCBjaWRyMj86IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAoIWNpZHIxIHx8ICFjaWRyMikge1xuICAgIHJldHVybiBmYWxzZTsgLy8gSGFuZGxlIGNhc2VzIHdoZXJlIENJRFIgcmFuZ2VzIGFyZSBub3QgcHJvdmlkZWRcbiAgfVxuXG4gIGNvbnN0IG9jdGV0c0NpZHIxOiBudW1iZXJbXSA9IGNpZHIxXG4gICAgLnNwbGl0KFwiLlwiKVxuICAgIC5tYXAoKG9jdGV0KSA9PiBwYXJzZUludChvY3RldCwgMTApKTtcbiAgY29uc3Qgb2N0ZXRzQ2lkcjI6IG51bWJlcltdID0gY2lkcjJcbiAgICAuc3BsaXQoXCIuXCIpXG4gICAgLm1hcCgob2N0ZXQpID0+IHBhcnNlSW50KG9jdGV0LCAxMCkpO1xuXG4gIGlmIChvY3RldHNDaWRyMS5sZW5ndGggIT09IDQgfHwgb2N0ZXRzQ2lkcjIubGVuZ3RoICE9PSA0KSB7XG4gICAgcmV0dXJuIGZhbHNlOyAvLyBIYW5kbGUgaW52YWxpZCBDSURSIHJhbmdlc1xuICB9XG5cbiAgY29uc3QgaXAxOiBJUGFkZHJlc3NDb25maWcgPSB7XG4gICAgb2N0ZXQxOiBvY3RldHNDaWRyMVswXSxcbiAgICBvY3RldDI6IG9jdGV0c0NpZHIxWzFdLFxuICB9O1xuXG4gIGNvbnN0IGlwMjogSVBhZGRyZXNzQ29uZmlnID0ge1xuICAgIG9jdGV0MTogb2N0ZXRzQ2lkcjJbMF0sXG4gICAgb2N0ZXQyOiBvY3RldHNDaWRyMlsxXSxcbiAgfTtcblxuICByZXR1cm4gKFxuICAgIChpcDEub2N0ZXQxID09PSAxMCAmJiBpcDIub2N0ZXQxID09PSAxMCkgfHxcbiAgICAoaXAxLm9jdGV0MSA9PT0gMTkyICYmXG4gICAgICBpcDEub2N0ZXQyID09PSAxNjggJiZcbiAgICAgIGlwMi5vY3RldDEgPT09IDE5MiAmJlxuICAgICAgaXAyLm9jdGV0MiA9PT0gMTY4KSB8fFxuICAgIChpcDEub2N0ZXQxID09PSAxNzIgJiZcbiAgICAgIGlwMS5vY3RldDIgPT09IDE2ICYmXG4gICAgICBpcDIub2N0ZXQxID09PSAxNzIgJiZcbiAgICAgIGlwMi5vY3RldDIgPT09IDE2KVxuICApOyAvLyBDSURSIHJhbmdlcyBiZWxvbmcgdG8gc2FtZSBwcml2YXRlIElQIGFkZHJlc3MgcmFuZ2VzXG59XG4iXX0=
|
package/lib/aws/compute/vpc.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { natGateway, subnet } from "@
|
|
1
|
+
import { natGateway, subnet } from "@cdktn/provider-aws";
|
|
2
2
|
import { Construct, IConstruct, IDependable } from "constructs";
|
|
3
3
|
import { ClientVpnEndpoint, ClientVpnEndpointOptions } from "./client-vpn-endpoint";
|
|
4
4
|
import { IIpAddresses, IIpv6Addresses } from "./ip-addresses";
|