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,7 +4,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
4
4
|
exports.LookupMachineImage = exports.GenericWindowsImage = exports.GenericLinuxImage = exports.AmazonLinuxKernel = exports.AmazonLinuxImage = exports.WindowsImage = exports.ResolveSsmParameterAtLaunchImage = exports.GenericSSMParameterImage = exports.MachineImage = void 0;
|
|
5
5
|
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
6
|
// https://github.com/aws/aws-cdk/blob/41cd57290e03e9256cc77466fd39e7f3e7a295b4/packages/aws-cdk-lib/aws-ec2/lib/machine-image/machine-image.ts
|
|
7
|
-
const provider_aws_1 = require("@
|
|
7
|
+
const provider_aws_1 = require("@cdktn/provider-aws");
|
|
8
8
|
const amazon_linux_2022_1 = require("./amazon-linux-2022");
|
|
9
9
|
const amazon_linux_2023_1 = require("./amazon-linux-2023");
|
|
10
10
|
const amazon_linux2_1 = require("./amazon-linux2");
|
|
@@ -186,7 +186,7 @@ class MachineImage {
|
|
|
186
186
|
}
|
|
187
187
|
exports.MachineImage = MachineImage;
|
|
188
188
|
_a = JSII_RTTI_SYMBOL_1;
|
|
189
|
-
MachineImage[_a] = { fqn: "terraconstructs.aws.compute.MachineImage", version: "0.2.
|
|
189
|
+
MachineImage[_a] = { fqn: "terraconstructs.aws.compute.MachineImage", version: "0.2.6" };
|
|
190
190
|
/**
|
|
191
191
|
* Select the image based on a given SSM parameter at deployment time of the CloudFormation Stack.
|
|
192
192
|
*
|
|
@@ -220,7 +220,7 @@ class GenericSSMParameterImage {
|
|
|
220
220
|
}
|
|
221
221
|
exports.GenericSSMParameterImage = GenericSSMParameterImage;
|
|
222
222
|
_b = JSII_RTTI_SYMBOL_1;
|
|
223
|
-
GenericSSMParameterImage[_b] = { fqn: "terraconstructs.aws.compute.GenericSSMParameterImage", version: "0.2.
|
|
223
|
+
GenericSSMParameterImage[_b] = { fqn: "terraconstructs.aws.compute.GenericSSMParameterImage", version: "0.2.6" };
|
|
224
224
|
/**
|
|
225
225
|
* Select the image based on a given SSM parameter at instance launch time.
|
|
226
226
|
*
|
|
@@ -256,7 +256,7 @@ class ResolveSsmParameterAtLaunchImage {
|
|
|
256
256
|
}
|
|
257
257
|
exports.ResolveSsmParameterAtLaunchImage = ResolveSsmParameterAtLaunchImage;
|
|
258
258
|
_c = JSII_RTTI_SYMBOL_1;
|
|
259
|
-
ResolveSsmParameterAtLaunchImage[_c] = { fqn: "terraconstructs.aws.compute.ResolveSsmParameterAtLaunchImage", version: "0.2.
|
|
259
|
+
ResolveSsmParameterAtLaunchImage[_c] = { fqn: "terraconstructs.aws.compute.ResolveSsmParameterAtLaunchImage", version: "0.2.6" };
|
|
260
260
|
/**
|
|
261
261
|
* Select the image based on a given SSM parameter at deployment time of the CloudFormation Stack.
|
|
262
262
|
*
|
|
@@ -308,7 +308,7 @@ class WindowsImage extends GenericSSMParameterImage {
|
|
|
308
308
|
}
|
|
309
309
|
exports.WindowsImage = WindowsImage;
|
|
310
310
|
_d = JSII_RTTI_SYMBOL_1;
|
|
311
|
-
WindowsImage[_d] = { fqn: "terraconstructs.aws.compute.WindowsImage", version: "0.2.
|
|
311
|
+
WindowsImage[_d] = { fqn: "terraconstructs.aws.compute.WindowsImage", version: "0.2.6" };
|
|
312
312
|
WindowsImage.DEPRECATED_VERSION_NAME_MAP = {
|
|
313
313
|
[windows_versions_1.WindowsVersion.WINDOWS_SERVER_2016_GERMAL_FULL_BASE]: windows_versions_1.WindowsVersion.WINDOWS_SERVER_2016_GERMAN_FULL_BASE,
|
|
314
314
|
[windows_versions_1.WindowsVersion.WINDOWS_SERVER_2012_R2_SP1_PORTUGESE_BRAZIL_64BIT_CORE]: windows_versions_1.WindowsVersion.WINDOWS_SERVER_2012_R2_SP1_PORTUGUESE_BRAZIL_64BIT_CORE,
|
|
@@ -398,7 +398,7 @@ class AmazonLinuxImage extends GenericSSMParameterImage {
|
|
|
398
398
|
}
|
|
399
399
|
exports.AmazonLinuxImage = AmazonLinuxImage;
|
|
400
400
|
_e = JSII_RTTI_SYMBOL_1;
|
|
401
|
-
AmazonLinuxImage[_e] = { fqn: "terraconstructs.aws.compute.AmazonLinuxImage", version: "0.2.
|
|
401
|
+
AmazonLinuxImage[_e] = { fqn: "terraconstructs.aws.compute.AmazonLinuxImage", version: "0.2.6" };
|
|
402
402
|
/**
|
|
403
403
|
* Amazon Linux Kernel
|
|
404
404
|
*/
|
|
@@ -454,7 +454,7 @@ class GenericLinuxImage {
|
|
|
454
454
|
}
|
|
455
455
|
exports.GenericLinuxImage = GenericLinuxImage;
|
|
456
456
|
_f = JSII_RTTI_SYMBOL_1;
|
|
457
|
-
GenericLinuxImage[_f] = { fqn: "terraconstructs.aws.compute.GenericLinuxImage", version: "0.2.
|
|
457
|
+
GenericLinuxImage[_f] = { fqn: "terraconstructs.aws.compute.GenericLinuxImage", version: "0.2.6" };
|
|
458
458
|
/**
|
|
459
459
|
* Construct a Windows machine image from an AMI map
|
|
460
460
|
*
|
|
@@ -495,7 +495,7 @@ class GenericWindowsImage {
|
|
|
495
495
|
}
|
|
496
496
|
exports.GenericWindowsImage = GenericWindowsImage;
|
|
497
497
|
_g = JSII_RTTI_SYMBOL_1;
|
|
498
|
-
GenericWindowsImage[_g] = { fqn: "terraconstructs.aws.compute.GenericWindowsImage", version: "0.2.
|
|
498
|
+
GenericWindowsImage[_g] = { fqn: "terraconstructs.aws.compute.GenericWindowsImage", version: "0.2.6" };
|
|
499
499
|
/**
|
|
500
500
|
* A machine image whose AMI ID will be searched using DescribeImages.
|
|
501
501
|
*
|
|
@@ -562,5 +562,5 @@ class LookupMachineImage {
|
|
|
562
562
|
}
|
|
563
563
|
exports.LookupMachineImage = LookupMachineImage;
|
|
564
564
|
_h = JSII_RTTI_SYMBOL_1;
|
|
565
|
-
LookupMachineImage[_h] = { fqn: "terraconstructs.aws.compute.LookupMachineImage", version: "0.2.
|
|
566
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFjaGluZS1pbWFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hd3MvY29tcHV0ZS9tYWNoaW5lLWltYWdlL21hY2hpbmUtaW1hZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSwrSUFBK0k7QUFFL0ksc0RBQWlEO0FBU2pELDJEQUk2QjtBQUM3QiwyREFJNkI7QUFDN0IsbURBSXlCO0FBQ3pCLHFDQVNrQjtBQUNsQixtQ0FBc0M7QUFDdEMsK0NBQTJDO0FBQzNDLHFDQUFxQztBQUNyQyw0Q0FBd0M7QUFDeEMsMERBQXFEO0FBRXJEOztHQUVHO0FBQ0gsTUFBc0IsWUFBWTtJQUNoQzs7Ozs7OztPQU9HO0lBQ0ksTUFBTSxDQUFDLGFBQWEsQ0FDekIsT0FBdUIsRUFDdkIsS0FBeUI7UUFFekIsT0FBTyxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSSxNQUFNLENBQUMsa0JBQWtCLENBQzlCLEtBQTBDO1FBRTFDLE9BQU8sSUFBSSw2Q0FBNkIsQ0FBQztZQUN2QyxlQUFlLEVBQUUsS0FBSztZQUN0QixHQUFHLEtBQUs7WUFDUixNQUFNLEVBQUUsa0NBQWtCLENBQUMsVUFBVTtTQUN0QyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0ksTUFBTSxDQUFDLHFCQUFxQixDQUNqQyxLQUE2QztRQUU3QyxPQUFPLElBQUksb0RBQWdDLENBQUM7WUFDMUMsZUFBZSxFQUFFLEtBQUs7WUFDdEIsR0FBRyxLQUFLO1lBQ1IsTUFBTSxFQUFFLHlDQUFxQixDQUFDLFVBQVU7U0FDekMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSSxNQUFNLENBQUMscUJBQXFCLENBQ2pDLEtBQTZDO1FBRTdDLE9BQU8sSUFBSSxvREFBZ0MsQ0FBQztZQUMxQyxlQUFlLEVBQUUsS0FBSztZQUN0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OztBQXRESCxnREF1REMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvYmxvYi80MWNkNTcyOTBlMDNlOTI1NmNjNzc0NjZmZDM5ZTdmM2U3YTI5NWI0L3BhY2thZ2VzL2F3cy1jZGstbGliL2F3cy1lYzIvbGliL21hY2hpbmUtaW1hZ2UvbWFjaGluZS1pbWFnZS50c1xuXG5pbXBvcnQgeyBkYXRhQXdzQW1pIH0gZnJvbSBcIkBjZGt0Zi9wcm92aWRlci1hd3NcIjtcbi8vIGltcG9ydCB7XG4vLyAgIC8vIFRPRE86IFVzZSBHcmlkIGFzIGNvbnRleHRQcm92aWRlclxuLy8gICAvLyBDb250ZXh0UHJvdmlkZXIsXG4vLyAgIC8vIENmbk1hcHBpbmcsXG4vLyAgIC8vIEF3cyxcbi8vICAgVG9rZW4sXG4vLyB9IGZyb20gXCJjZGt0ZlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7XG4gIEFtYXpvbkxpbnV4MjAyMkltYWdlU3NtUGFyYW1ldGVyLFxuICBBbWF6b25MaW51eDIwMjJJbWFnZVNzbVBhcmFtZXRlclByb3BzLFxuICBBbWF6b25MaW51eDIwMjJLZXJuZWwsXG59IGZyb20gXCIuL2FtYXpvbi1saW51eC0yMDIyXCI7XG5pbXBvcnQge1xuICBBbWF6b25MaW51eDIwMjNJbWFnZVNzbVBhcmFtZXRlcixcbiAgQW1hem9uTGludXgyMDIzSW1hZ2VTc21QYXJhbWV0ZXJQcm9wcyxcbiAgQW1hem9uTGludXgyMDIzS2VybmVsLFxufSBmcm9tIFwiLi9hbWF6b24tbGludXgtMjAyM1wiO1xuaW1wb3J0IHtcbiAgQW1hem9uTGludXgySW1hZ2VTc21QYXJhbWV0ZXIsXG4gIEFtYXpvbkxpbnV4MkltYWdlU3NtUGFyYW1ldGVyUHJvcHMsXG4gIEFtYXpvbkxpbnV4Mktlcm5lbCxcbn0gZnJvbSBcIi4vYW1hem9uLWxpbnV4MlwiO1xuaW1wb3J0IHtcbiAgQW1hem9uTGludXhDcHVUeXBlLFxuICBBbWF6b25MaW51eEVkaXRpb24sXG4gIEFtYXpvbkxpbnV4R2VuZXJhdGlvbixcbiAgQW1hem9uTGludXhTdG9yYWdlLFxuICBBbWF6b25MaW51eFZpcnQsXG4gIElNYWNoaW5lSW1hZ2UsXG4gIE1hY2hpbmVJbWFnZUNvbmZpZyxcbiAgT3BlcmF0aW5nU3lzdGVtVHlwZSxcbn0gZnJvbSBcIi4vY29tbW9uXCI7XG5pbXBvcnQgeyBsb29rdXBJbWFnZSB9IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQgeyBBd3NTdGFjayB9IGZyb20gXCIuLi8uLi9hd3Mtc3RhY2tcIjtcbmltcG9ydCAqIGFzIHNzbSBmcm9tIFwiLi4vLi4vc3RvcmFnZVwiO1xuaW1wb3J0IHsgVXNlckRhdGEgfSBmcm9tIFwiLi4vdXNlci1kYXRhXCI7XG5pbXBvcnQgeyBXaW5kb3dzVmVyc2lvbiB9IGZyb20gXCIuLi93aW5kb3dzLXZlcnNpb25zXCI7XG5cbi8qKlxuICogRmFjdG9yeSBmdW5jdGlvbnMgZm9yIHN0YW5kYXJkIEFtYXpvbiBNYWNoaW5lIEltYWdlIG9iamVjdHMuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBNYWNoaW5lSW1hZ2Uge1xuICAvKipcbiAgICogQSBXaW5kb3dzIGltYWdlIHRoYXQgaXMgYXV0b21hdGljYWxseSBrZXB0IHVwLXRvLWRhdGVcbiAgICpcbiAgICogVGhpcyBNYWNoaW5lIEltYWdlIGF1dG9tYXRpY2FsbHkgdXBkYXRlcyB0byB0aGUgbGF0ZXN0IHZlcnNpb24gb24gZXZlcnlcbiAgICogZGVwbG95bWVudC4gQmUgYXdhcmUgdGhpcyB3aWxsIGNhdXNlIHlvdXIgaW5zdGFuY2VzIHRvIGJlIHJlcGxhY2VkIHdoZW4gYVxuICAgKiBuZXcgdmVyc2lvbiBvZiB0aGUgaW1hZ2UgYmVjb21lcyBhdmFpbGFibGUuIERvIG5vdCBzdG9yZSBzdGF0ZWZ1bCBpbmZvcm1hdGlvblxuICAgKiBvbiB0aGUgaW5zdGFuY2UgaWYgeW91IGFyZSB1c2luZyB0aGlzIGltYWdlLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBsYXRlc3RXaW5kb3dzKFxuICAgIHZlcnNpb246IFdpbmRvd3NWZXJzaW9uLFxuICAgIHByb3BzPzogV2luZG93c0ltYWdlUHJvcHMsXG4gICk6IElNYWNoaW5lSW1hZ2Uge1xuICAgIHJldHVybiBuZXcgV2luZG93c0ltYWdlKHZlcnNpb24sIHByb3BzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbiBBbWF6b24gTGludXggMiBpbWFnZSB0aGF0IGlzIGF1dG9tYXRpY2FsbHkga2VwdCB1cC10by1kYXRlXG4gICAqXG4gICAqIFRoaXMgTWFjaGluZSBJbWFnZSBhdXRvbWF0aWNhbGx5IHVwZGF0ZXMgdG8gdGhlIGxhdGVzdCB2ZXJzaW9uIG9uIGV2ZXJ5XG4gICAqIGRlcGxveW1lbnQuIEJlIGF3YXJlIHRoaXMgd2lsbCBjYXVzZSB5b3VyIGluc3RhbmNlcyB0byBiZSByZXBsYWNlZCB3aGVuIGFcbiAgICogbmV3IHZlcnNpb24gb2YgdGhlIGltYWdlIGJlY29tZXMgYXZhaWxhYmxlLiBEbyBub3Qgc3RvcmUgc3RhdGVmdWwgaW5mb3JtYXRpb25cbiAgICogb24gdGhlIGluc3RhbmNlIGlmIHlvdSBhcmUgdXNpbmcgdGhpcyBpbWFnZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbGF0ZXN0QW1hem9uTGludXgyKFxuICAgIHByb3BzPzogQW1hem9uTGludXgySW1hZ2VTc21QYXJhbWV0ZXJQcm9wcyxcbiAgKTogSU1hY2hpbmVJbWFnZSB7XG4gICAgcmV0dXJuIG5ldyBBbWF6b25MaW51eDJJbWFnZVNzbVBhcmFtZXRlcih7XG4gICAgICBjYWNoZWRJbkNvbnRleHQ6IGZhbHNlLFxuICAgICAgLi4ucHJvcHMsXG4gICAgICBrZXJuZWw6IEFtYXpvbkxpbnV4Mktlcm5lbC5DREtfTEFURVNULFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFuIEFtYXpvbiBMaW51eCAyMDIyIGltYWdlIHRoYXQgaXMgYXV0b21hdGljYWxseSBrZXB0IHVwLXRvLWRhdGVcbiAgICpcbiAgICogVGhpcyBNYWNoaW5lIEltYWdlIGF1dG9tYXRpY2FsbHkgdXBkYXRlcyB0byB0aGUgbGF0ZXN0IHZlcnNpb24gb24gZXZlcnlcbiAgICogZGVwbG95bWVudC4gQmUgYXdhcmUgdGhpcyB3aWxsIGNhdXNlIHlvdXIgaW5zdGFuY2VzIHRvIGJlIHJlcGxhY2VkIHdoZW4gYVxuICAgKiBuZXcgdmVyc2lvbiBvZiB0aGUgaW1hZ2UgYmVjb21lcyBhdmFpbGFibGUuIERvIG5vdCBzdG9yZSBzdGF0ZWZ1bCBpbmZvcm1hdGlvblxuICAgKiBvbiB0aGUgaW5zdGFuY2UgaWYgeW91IGFyZSB1c2luZyB0aGlzIGltYWdlLlxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCAtIHVzZSBsYXRlc3RBbWF6b25MaW51eDIwMjMoKSBpbnN0ZWFkXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGxhdGVzdEFtYXpvbkxpbnV4MjAyMihcbiAgICBwcm9wcz86IEFtYXpvbkxpbnV4MjAyMkltYWdlU3NtUGFyYW1ldGVyUHJvcHMsXG4gICk6IElNYWNoaW5lSW1hZ2Uge1xuICAgIHJldHVybiBuZXcgQW1hem9uTGludXgyMDIySW1hZ2VTc21QYXJhbWV0ZXIoe1xuICAgICAgY2FjaGVkSW5Db250ZXh0OiBmYWxzZSxcbiAgICAgIC4uLnByb3BzLFxuICAgICAga2VybmVsOiBBbWF6b25MaW51eDIwMjJLZXJuZWwuQ0RLX0xBVEVTVCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbiBBbWF6b24gTGludXggMjAyMyBpbWFnZSB0aGF0IGlzIGF1dG9tYXRpY2FsbHkga2VwdCB1cC10by1kYXRlXG4gICAqXG4gICAqIFRoaXMgTWFjaGluZSBJbWFnZSBhdXRvbWF0aWNhbGx5IHVwZGF0ZXMgdG8gdGhlIGxhdGVzdCB2ZXJzaW9uIG9uIGV2ZXJ5XG4gICAqIGRlcGxveW1lbnQuIEJlIGF3YXJlIHRoaXMgd2lsbCBjYXVzZSB5b3VyIGluc3RhbmNlcyB0byBiZSByZXBsYWNlZCB3aGVuIGFcbiAgICogbmV3IHZlcnNpb24gb2YgdGhlIGltYWdlIGJlY29tZXMgYXZhaWxhYmxlLiBEbyBub3Qgc3RvcmUgc3RhdGVmdWwgaW5mb3JtYXRpb25cbiAgICogb24gdGhlIGluc3RhbmNlIGlmIHlvdSBhcmUgdXNpbmcgdGhpcyBpbWFnZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbGF0ZXN0QW1hem9uTGludXgyMDIzKFxuICAgIHByb3BzPzogQW1hem9uTGludXgyMDIzSW1hZ2VTc21QYXJhbWV0ZXJQcm9wcyxcbiAgKTogSU1hY2hpbmVJbWFnZSB7XG4gICAgcmV0dXJuIG5ldyBBbWF6b25MaW51eDIwMjNJbWFnZVNzbVBhcmFtZXRlcih7XG4gICAgICBjYWNoZWRJbkNvbnRleHQ6IGZhbHNlLFxuICAgICAgLi4ucHJvcHMsXG4gICAgICBrZXJuZWw6IEFtYXpvbkxpbnV4MjAyM0tlcm5lbC5DREtfTEFURVNULFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFuIEFtYXpvbiBMaW51eCBpbWFnZSB0aGF0IGlzIGF1dG9tYXRpY2FsbHkga2VwdCB1cC10by1kYXRlXG4gICAqXG4gICAqIFRoaXMgTWFjaGluZSBJbWFnZSBhdXRvbWF0aWNhbGx5IHVwZGF0ZXMgdG8gdGhlIGxhdGVzdCB2ZXJzaW9uIG9uIGV2ZXJ5XG4gICAqIGRlcGxveW1lbnQuIEJlIGF3YXJlIHRoaXMgd2lsbCBjYXVzZSB5b3VyIGluc3RhbmNlcyB0byBiZSByZXBsYWNlZCB3aGVuIGFcbiAgICogbmV3IHZlcnNpb24gb2YgdGhlIGltYWdlIGJlY29tZXMgYXZhaWxhYmxlLiBEbyBub3Qgc3RvcmUgc3RhdGVmdWwgaW5mb3JtYXRpb25cbiAgICogb24gdGhlIGluc3RhbmNlIGlmIHlvdSBhcmUgdXNpbmcgdGhpcyBpbWFnZS5cbiAgICpcbiAgICogTi5CLjogXCJsYXRlc3RcIiBpbiB0aGUgbmFtZSBvZiB0aGlzIGZ1bmN0aW9uIGluZGljYXRlcyB0aGF0IGl0IGFsd2F5cyB1c2VzIHRoZSBtb3N0IHJlY2VudFxuICAgKiBpbWFnZSBvZiBhIHBhcnRpY3VsYXIgZ2VuZXJhdGlvbiBvZiBBbWF6b24gTGludXgsIG5vdCB0aGF0IGl0IHVzZXMgdGhlIFwibGF0ZXN0IGdlbmVyYXRpb25cIi5cbiAgICogRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCB0aGlzIGZ1bmN0aW9uIHVzZXMgQW1hem9uIExpbnV4IDEgaWYgbm8gZ2VuZXJhdGlvblxuICAgKiBpcyBzcGVjaWZpZWQuXG4gICAqXG4gICAqIFNwZWNpZnkgdGhlIGRlc2lyZWQgZ2VuZXJhdGlvbiB1c2luZyB0aGUgYGdlbmVyYXRpb25gIHByb3BlcnR5OlxuICAgKlxuICAgKiBgYGB0c1xuICAgKiBjb21wdXRlLk1hY2hpbmVJbWFnZS5sYXRlc3RBbWF6b25MaW51eCh7XG4gICAqICAgLy8gVXNlIEFtYXpvbiBMaW51eCAyXG4gICAqICAgZ2VuZXJhdGlvbjogZWMyLkFtYXpvbkxpbnV4R2VuZXJhdGlvbi5BTUFaT05fTElOVVhfMixcbiAgICogfSlcbiAgICogYGBgXG4gICAqIEBkZXByZWNhdGVkIHVzZSBNYWNoaW5lSW1hZ2UubGF0ZXN0QW1hem9uTGludXgyIGluc3RlYWRcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbGF0ZXN0QW1hem9uTGludXgoXG4gICAgcHJvcHM/OiBBbWF6b25MaW51eEltYWdlUHJvcHMsXG4gICk6IElNYWNoaW5lSW1hZ2Uge1xuICAgIHJldHVybiBuZXcgQW1hem9uTGludXhJbWFnZShwcm9wcyk7XG4gIH1cblxuICAvKipcbiAgICogQSBMaW51eCBpbWFnZSB3aGVyZSB5b3Ugc3BlY2lmeSB0aGUgQU1JIElEIGZvciBldmVyeSByZWdpb25cbiAgICpcbiAgICogQHBhcmFtIGFtaU1hcCBGb3IgZXZlcnkgcmVnaW9uIHdoZXJlIHlvdSBhcmUgZGVwbG95aW5nIHRoZSBzdGFjayxcbiAgICogc3BlY2lmeSB0aGUgQU1JIElEIGZvciB0aGF0IHJlZ2lvbi5cbiAgICogQHBhcmFtIHByb3BzIEN1c3RvbWl6ZSB0aGUgaW1hZ2UgYnkgc3VwcGx5aW5nIGFkZGl0aW9uYWwgcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZ2VuZXJpY0xpbnV4KFxuICAgIGFtaU1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgICBwcm9wcz86IEdlbmVyaWNMaW51eEltYWdlUHJvcHMsXG4gICk6IElNYWNoaW5lSW1hZ2Uge1xuICAgIHJldHVybiBuZXcgR2VuZXJpY0xpbnV4SW1hZ2UoYW1pTWFwLCBwcm9wcyk7XG4gIH1cblxuICAvKipcbiAgICogQSBXaW5kb3dzIGltYWdlIHdoZXJlIHlvdSBzcGVjaWZ5IHRoZSBBTUkgSUQgZm9yIGV2ZXJ5IHJlZ2lvblxuICAgKlxuICAgKiBAcGFyYW0gYW1pTWFwIEZvciBldmVyeSByZWdpb24gd2hlcmUgeW91IGFyZSBkZXBsb3lpbmcgdGhlIHN0YWNrLFxuICAgKiBzcGVjaWZ5IHRoZSBBTUkgSUQgZm9yIHRoYXQgcmVnaW9uLlxuICAgKiBAcGFyYW0gcHJvcHMgQ3VzdG9taXplIHRoZSBpbWFnZSBieSBzdXBwbHlpbmcgYWRkaXRpb25hbCBwcm9wc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBnZW5lcmljV2luZG93cyhcbiAgICBhbWlNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG4gICAgcHJvcHM/OiBHZW5lcmljV2luZG93c0ltYWdlUHJvcHMsXG4gICk6IElNYWNoaW5lSW1hZ2Uge1xuICAgIHJldHVybiBuZXcgR2VuZXJpY1dpbmRvd3NJbWFnZShhbWlNYXAsIHByb3BzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbiBpbWFnZSBzcGVjaWZpZWQgaW4gU1NNIHBhcmFtZXRlciBzdG9yZSB0aGF0IGlzIGF1dG9tYXRpY2FsbHkga2VwdCB1cC10by1kYXRlXG4gICAqXG4gICAqIFRoaXMgTWFjaGluZSBJbWFnZSBhdXRvbWF0aWNhbGx5IHVwZGF0ZXMgdG8gdGhlIGxhdGVzdCB2ZXJzaW9uIG9uIGV2ZXJ5XG4gICAqIGRlcGxveW1lbnQuIEJlIGF3YXJlIHRoaXMgd2lsbCBjYXVzZSB5b3VyIGluc3RhbmNlcyB0byBiZSByZXBsYWNlZCB3aGVuIGFcbiAgICogbmV3IHZlcnNpb24gb2YgdGhlIGltYWdlIGJlY29tZXMgYXZhaWxhYmxlLiBEbyBub3Qgc3RvcmUgc3RhdGVmdWwgaW5mb3JtYXRpb25cbiAgICogb24gdGhlIGluc3RhbmNlIGlmIHlvdSBhcmUgdXNpbmcgdGhpcyBpbWFnZS5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtZXRlck5hbWUgVGhlIG5hbWUgb2YgU1NNIHBhcmFtZXRlciBjb250YWluaW5nIHRoZSBBTWkgaWRcbiAgICogQHBhcmFtIG9zIFRoZSBvcGVyYXRpbmcgc3lzdGVtIHR5cGUgb2YgdGhlIEFNSVxuICAgKiBAcGFyYW0gdXNlckRhdGEgb3B0aW9uYWwgdXNlciBkYXRhIGZvciB0aGUgZ2l2ZW4gaW1hZ2VcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGBNYWNoaW5lSW1hZ2UuZnJvbVNzbVBhcmFtZXRlcigpYCBpbnN0ZWFkXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21TU01QYXJhbWV0ZXIoXG4gICAgcGFyYW1ldGVyTmFtZTogc3RyaW5nLFxuICAgIG9zOiBPcGVyYXRpbmdTeXN0ZW1UeXBlLFxuICAgIHVzZXJEYXRhPzogVXNlckRhdGEsXG4gICk6IElNYWNoaW5lSW1hZ2Uge1xuICAgIHJldHVybiBuZXcgR2VuZXJpY1NTTVBhcmFtZXRlckltYWdlKHBhcmFtZXRlck5hbWUsIG9zLCB1c2VyRGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogQW4gaW1hZ2Ugc3BlY2lmaWVkIGluIFNTTSBwYXJhbWV0ZXIgc3RvcmVcbiAgICpcbiAgICogQnkgZGVmYXVsdCwgdGhlIFNTTSBwYXJhbWV0ZXIgaXMgcmVmcmVzaGVkIGF0IGV2ZXJ5IGRlcGxveW1lbnQsXG4gICAqIGNhdXNpbmcgeW91ciBpbnN0YW5jZXMgdG8gYmUgcmVwbGFjZWQgd2hlbmV2ZXIgYSBuZXcgdmVyc2lvbiBvZiB0aGUgQU1JXG4gICAqIGlzIHJlbGVhc2VkLlxuICAgKlxuICAgKiBQYXNzIGB7IGNhY2hlZEluQ29udGV4dDogdHJ1ZSB9YCB0byBrZWVwIHRoZSBBTUkgSUQgc3RhYmxlLiBJZiB5b3UgZG8sIHlvdVxuICAgKiB3aWxsIGhhdmUgdG8gcmVtZW1iZXIgdG8gcGVyaW9kaWNhbGx5IGludmFsaWRhdGUgdGhlIGNvbnRleHQgdG8gcmVmcmVzaFxuICAgKiB0byB0aGUgbmV3ZXN0IEFNSSBJRC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbVNzbVBhcmFtZXRlcihcbiAgICBwYXJhbWV0ZXJOYW1lOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IFNzbVBhcmFtZXRlckltYWdlT3B0aW9ucyxcbiAgKTogSU1hY2hpbmVJbWFnZSB7XG4gICAgcmV0dXJuIG5ldyBHZW5lcmljU3NtUGFyYW1ldGVySW1hZ2UocGFyYW1ldGVyTmFtZSwgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogQW4gaW1hZ2Ugc3BlY2lmaWVkIGluIFNTTSBwYXJhbWV0ZXIgc3RvcmUgdGhhdCB3aWxsIGJlIHJlc29sdmVkIGF0IGluc3RhbmNlIGxhdW5jaCB0aW1lLlxuICAgKlxuICAgKiBUaGUgQU1JIElEIHdpbGwgYmUgcmVzb2x2ZWQgYXQgaW5zdGFuY2UgbGF1bmNoIHRpbWUuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbWV0ZXJOYW1lIFRoZSBuYW1lIG9mIFNTTSBwYXJhbWV0ZXIgY29udGFpbmluZyB0aGUgQU1JIElEXG4gICAqIEBwYXJhbSBvcHRpb25zIFRoZSBwYXJhbWV0ZXIgaW1hZ2Ugb3B0aW9uc1xuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hdXRvc2NhbGluZy9lYzIvdXNlcmd1aWRlL3VzaW5nLXN5c3RlbXMtbWFuYWdlci1wYXJhbWV0ZXJzLmh0bWxcbiAgICpcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVzb2x2ZVNzbVBhcmFtZXRlckF0TGF1bmNoKFxuICAgIHBhcmFtZXRlck5hbWU6IHN0cmluZyxcbiAgICBvcHRpb25zPzogU3NtUGFyYW1ldGVySW1hZ2VPcHRpb25zLFxuICApOiBJTWFjaGluZUltYWdlIHtcbiAgICByZXR1cm4gbmV3IFJlc29sdmVTc21QYXJhbWV0ZXJBdExhdW5jaEltYWdlKHBhcmFtZXRlck5hbWUsIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvb2sgdXAgYSBzaGFyZWQgTWFjaGluZSBJbWFnZSB1c2luZyBEZXNjcmliZUltYWdlc1xuICAgKlxuICAgKiBUaGUgbW9zdCByZWNlbnQsIGF2YWlsYWJsZSwgbGF1bmNoYWJsZSBpbWFnZSBtYXRjaGluZyB0aGUgZ2l2ZW4gZmlsdGVyXG4gICAqIGNyaXRlcmlhIHdpbGwgYmUgdXNlZC4gTG9va2luZyB1cCBBTUlzIG1heSB0YWtlIGEgbG9uZyB0aW1lOyBzcGVjaWZ5XG4gICAqIGFzIG1hbnkgZmlsdGVyIGNyaXRlcmlhIGFzIHBvc3NpYmxlIHRvIG5hcnJvdyBkb3duIHRoZSBzZWFyY2guXG4gICAqXG4gICAqIFRoZSBBTUkgc2VsZWN0ZWQgd2lsbCBiZSBjYWNoZWQgaW4gYGNkay5jb250ZXh0Lmpzb25gIGFuZCB0aGUgc2FtZSB2YWx1ZVxuICAgKiB3aWxsIGJlIHVzZWQgb24gZnV0dXJlIHJ1bnMuIFRvIHJlZnJlc2ggdGhlIEFNSSBsb29rdXAsIHlvdSB3aWxsIGhhdmUgdG9cbiAgICogZXZpY3QgdGhlIHZhbHVlIGZyb20gdGhlIGNhY2hlIHVzaW5nIHRoZSBgY2RrIGNvbnRleHRgIGNvbW1hbmQuIFNlZVxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2RrL2xhdGVzdC9ndWlkZS9jb250ZXh0Lmh0bWwgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gICAqXG4gICAqIFRoaXMgZnVuY3Rpb24gY2FuIG5vdCBiZSB1c2VkIGluIGVudmlyb25tZW50LWFnbm9zdGljIHN0YWNrcy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbG9va3VwKHByb3BzOiBMb29rdXBNYWNoaW5lSW1hZ2VQcm9wcyk6IElNYWNoaW5lSW1hZ2Uge1xuICAgIHJldHVybiBuZXcgTG9va3VwTWFjaGluZUltYWdlKHByb3BzKTtcbiAgfVxufVxuXG4vKipcbiAqIFNlbGVjdCB0aGUgaW1hZ2UgYmFzZWQgb24gYSBnaXZlbiBTU00gcGFyYW1ldGVyIGF0IGRlcGxveW1lbnQgdGltZSBvZiB0aGUgQ2xvdWRGb3JtYXRpb24gU3RhY2suXG4gKlxuICogVGhpcyBNYWNoaW5lIEltYWdlIGF1dG9tYXRpY2FsbHkgdXBkYXRlcyB0byB0aGUgbGF0ZXN0IHZlcnNpb24gb24gZXZlcnlcbiAqIGRlcGxveW1lbnQuIEJlIGF3YXJlIHRoaXMgd2lsbCBjYXVzZSB5b3VyIGluc3RhbmNlcyB0byBiZSByZXBsYWNlZCB3aGVuIGFcbiAqIG5ldyB2ZXJzaW9uIG9mIHRoZSBpbWFnZSBiZWNvbWVzIGF2YWlsYWJsZS4gRG8gbm90IHN0b3JlIHN0YXRlZnVsIGluZm9ybWF0aW9uXG4gKiBvbiB0aGUgaW5zdGFuY2UgaWYgeW91IGFyZSB1c2luZyB0aGlzIGltYWdlLlxuICpcbiAqIFRoZSBBTUkgSUQgaXMgc2VsZWN0ZWQgdXNpbmcgdGhlIHZhbHVlcyBwdWJsaXNoZWQgdG8gdGhlIFNTTSBwYXJhbWV0ZXIgc3RvcmUuXG4gKi9cbmV4cG9ydCBjbGFzcyBHZW5lcmljU1NNUGFyYW1ldGVySW1hZ2UgaW1wbGVtZW50cyBJTWFjaGluZUltYWdlIHtcbiAgLy8gRklYTUU6IHRoaXMgY2xhc3Mgb3VnaHQgdG8gYmUgYEBkZXByZWNhdGVkYCBhbmQgcmVtb3ZlZCBmcm9tIHYyLCBidXQgdGhhdFxuICAvLyBpcyBjYXVzaW5nIGJ1aWxkIGZhaWx1cmUgcmlnaHQgbm93LiBSZWY6IGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvanNpaS9pc3N1ZXMvMzAyNVxuICAvLyBALWRlcHJlY2F0ZWQgVXNlIGBNYWNoaW5lSW1hZ2UuZnJvbVNzbVBhcmFtZXRlcigpYCBpbnN0ZWFkXG5cbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIFNTTSBwYXJhbWV0ZXIgd2UncmUgbG9va2luZyB1cFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHBhcmFtZXRlck5hbWU6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwYXJhbWV0ZXJOYW1lOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSByZWFkb25seSBvczogT3BlcmF0aW5nU3lzdGVtVHlwZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHVzZXJEYXRhPzogVXNlckRhdGEsXG4gICkge1xuICAgIHRoaXMucGFyYW1ldGVyTmFtZSA9IHBhcmFtZXRlck5hbWU7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBpbWFnZSB0byB1c2UgaW4gdGhlIGdpdmVuIGNvbnRleHRcbiAgICovXG4gIHB1YmxpYyBnZXRJbWFnZShzY29wZTogQ29uc3RydWN0KTogTWFjaGluZUltYWdlQ29uZmlnIHtcbiAgICBjb25zdCBhbWkgPSBzc20uU3RyaW5nUGFyYW1ldGVyLnZhbHVlRm9yVHlwZWRTdHJpbmdQYXJhbWV0ZXJWMihcbiAgICAgIHNjb3BlLFxuICAgICAgdGhpcy5wYXJhbWV0ZXJOYW1lLFxuICAgICAgc3NtLlBhcmFtZXRlclZhbHVlVHlwZS5BV1NfRUMyX0lNQUdFX0lELFxuICAgICk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGltYWdlSWQ6IGFtaSxcbiAgICAgIG9zVHlwZTogdGhpcy5vcyxcbiAgICAgIHVzZXJEYXRhOlxuICAgICAgICB0aGlzLnVzZXJEYXRhID8/XG4gICAgICAgICh0aGlzLm9zID09PSBPcGVyYXRpbmdTeXN0ZW1UeXBlLldJTkRPV1NcbiAgICAgICAgICA/IFVzZXJEYXRhLmZvcldpbmRvd3MoKVxuICAgICAgICAgIDogVXNlckRhdGEuZm9yTGludXgoKSksXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIFNlbGVjdCB0aGUgaW1hZ2UgYmFzZWQgb24gYSBnaXZlbiBTU00gcGFyYW1ldGVyIGF0IGluc3RhbmNlIGxhdW5jaCB0aW1lLlxuICpcbiAqIFRoaXMgTWFjaGluZSBJbWFnZSBjb21lcyB3aXRoIGFuIGltYWdlSWQgYXMgYHJlc29sdmU6c3NtOnBhcmFtZXRlci1uYW1lYCBvciBgcmVzb2x2ZTpzc206cGFyYW1ldGVyLW5hbWU6dmVyc2lvbmAgZm9ybWF0XG4gKiBhcyBkZXNjcmliZWQgaW4gdGhlIGRvY3VtZW50OlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2F1dG9zY2FsaW5nL2VjMi91c2VyZ3VpZGUvdXNpbmctc3lzdGVtcy1tYW5hZ2VyLXBhcmFtZXRlcnMuaHRtbFxuICpcbiAqIFRoZSBBTUkgSUQgd291bGQgYmUgc2VsZWN0ZWQgYXQgaW5zdGFuY2UgbGF1bmNoIHRpbWUuXG4gKi9cbmV4cG9ydCBjbGFzcyBSZXNvbHZlU3NtUGFyYW1ldGVyQXRMYXVuY2hJbWFnZSBpbXBsZW1lbnRzIElNYWNoaW5lSW1hZ2Uge1xuICAvKipcbiAgICogTmFtZSBvZiB0aGUgU1NNIHBhcmFtZXRlciB3ZSdyZSBsb29raW5nIHVwXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcGFyYW1ldGVyTmFtZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHBhcmFtZXRlck5hbWU6IHN0cmluZyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHByb3BzOiBTc21QYXJhbWV0ZXJJbWFnZU9wdGlvbnMgPSB7fSxcbiAgKSB7XG4gICAgdGhpcy5wYXJhbWV0ZXJOYW1lID0gcGFyYW1ldGVyTmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGltYWdlIHRvIHVzZSBpbiB0aGUgZ2l2ZW4gY29udGV4dFxuICAgKi9cbiAgcHVibGljIGdldEltYWdlKF86IENvbnN0cnVjdCk6IE1hY2hpbmVJbWFnZUNvbmZpZyB7XG4gICAgY29uc3QgdmVyc2lvblN0cmluZyA9IHRoaXMucHJvcHMucGFyYW1ldGVyVmVyc2lvblxuICAgICAgPyBgOiR7dGhpcy5wcm9wcy5wYXJhbWV0ZXJWZXJzaW9ufWBcbiAgICAgIDogXCJcIjtcbiAgICBjb25zdCBvc1R5cGUgPSB0aGlzLnByb3BzLm9zID8/IE9wZXJhdGluZ1N5c3RlbVR5cGUuTElOVVg7XG4gICAgcmV0dXJuIHtcbiAgICAgIGltYWdlSWQ6IGByZXNvbHZlOnNzbToke3RoaXMucGFyYW1ldGVyTmFtZX0ke3ZlcnNpb25TdHJpbmd9YCxcbiAgICAgIG9zVHlwZSxcbiAgICAgIHVzZXJEYXRhOlxuICAgICAgICB0aGlzLnByb3BzLnVzZXJEYXRhID8/XG4gICAgICAgIChvc1R5cGUgPT09IE9wZXJhdGluZ1N5c3RlbVR5cGUuV0lORE9XU1xuICAgICAgICAgID8gVXNlckRhdGEuZm9yV2luZG93cygpXG4gICAgICAgICAgOiBVc2VyRGF0YS5mb3JMaW51eCgpKSxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgR2VuZXJpY1NzbVBhcmFtZXRlckltYWdlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3NtUGFyYW1ldGVySW1hZ2VPcHRpb25zIHtcbiAgLyoqXG4gICAqIE9wZXJhdGluZyBzeXN0ZW1cbiAgICpcbiAgICogQGRlZmF1bHQgT3BlcmF0aW5nU3lzdGVtVHlwZS5MSU5VWFxuICAgKi9cbiAgcmVhZG9ubHkgb3M/OiBPcGVyYXRpbmdTeXN0ZW1UeXBlO1xuXG4gIC8qKlxuICAgKiBDdXN0b20gVXNlckRhdGFcbiAgICpcbiAgICogQGRlZmF1bHQgLSBVc2VyRGF0YSBhcHByb3ByaWF0ZSBmb3IgdGhlIE9TXG4gICAqL1xuICByZWFkb25seSB1c2VyRGF0YT86IFVzZXJEYXRhO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBBTUkgSUQgaXMgY2FjaGVkIHRvIGJlIHN0YWJsZSBiZXR3ZWVuIGRlcGxveW1lbnRzXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIHRoZSBuZXdlc3QgaW1hZ2UgaXMgdXNlZCBvbiBlYWNoIGRlcGxveW1lbnQuIFRoaXMgd2lsbCBjYXVzZVxuICAgKiBpbnN0YW5jZXMgdG8gYmUgcmVwbGFjZWQgd2hlbmV2ZXIgYSBuZXcgdmVyc2lvbiBpcyByZWxlYXNlZCwgYW5kIG1heSBjYXVzZVxuICAgKiBkb3dudGltZSBpZiB0aGVyZSBhcmVuJ3QgZW5vdWdoIHJ1bm5pbmcgaW5zdGFuY2VzIGluIHRoZSBBdXRvU2NhbGluZ0dyb3VwXG4gICAqIHRvIHJlc2NoZWR1bGUgdGhlIHRhc2tzIG9uLlxuICAgKlxuICAgKiBJZiBzZXQgdG8gdHJ1ZSwgdGhlIEFNSSBJRCB3aWxsIGJlIGNhY2hlZCBpbiBgY2RrLmNvbnRleHQuanNvbmAgYW5kIHRoZVxuICAgKiBzYW1lIHZhbHVlIHdpbGwgYmUgdXNlZCBvbiBmdXR1cmUgcnVucy4gWW91ciBpbnN0YW5jZXMgd2lsbCBub3QgYmUgcmVwbGFjZWRcbiAgICogYnV0IHlvdXIgQU1JIHZlcnNpb24gd2lsbCBncm93IG9sZCBvdmVyIHRpbWUuIFRvIHJlZnJlc2ggdGhlIEFNSSBsb29rdXAsXG4gICAqIHlvdSB3aWxsIGhhdmUgdG8gZXZpY3QgdGhlIHZhbHVlIGZyb20gdGhlIGNhY2hlIHVzaW5nIHRoZSBgY2RrIGNvbnRleHRgXG4gICAqIGNvbW1hbmQuIFNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2RrL2xhdGVzdC9ndWlkZS9jb250ZXh0Lmh0bWwgZm9yXG4gICAqIG1vcmUgaW5mb3JtYXRpb24uXG4gICAqXG4gICAqIENhbiBub3QgYmUgc2V0IHRvIGB0cnVlYCBpbiBlbnZpcm9ubWVudC1hZ25vc3RpYyBzdGFja3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBjYWNoZWRJbkNvbnRleHQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBvZiB0aGUgU1NNIHBhcmFtZXRlci5cbiAgICpcbiAgICogQGRlZmF1bHQgbm8gdmVyc2lvbiBzcGVjaWZpZWQuXG4gICAqL1xuICByZWFkb25seSBwYXJhbWV0ZXJWZXJzaW9uPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFNlbGVjdCB0aGUgaW1hZ2UgYmFzZWQgb24gYSBnaXZlbiBTU00gcGFyYW1ldGVyIGF0IGRlcGxveW1lbnQgdGltZSBvZiB0aGUgQ2xvdWRGb3JtYXRpb24gU3RhY2suXG4gKlxuICogVGhpcyBNYWNoaW5lIEltYWdlIGF1dG9tYXRpY2FsbHkgdXBkYXRlcyB0byB0aGUgbGF0ZXN0IHZlcnNpb24gb24gZXZlcnlcbiAqIGRlcGxveW1lbnQuIEJlIGF3YXJlIHRoaXMgd2lsbCBjYXVzZSB5b3VyIGluc3RhbmNlcyB0byBiZSByZXBsYWNlZCB3aGVuIGFcbiAqIG5ldyB2ZXJzaW9uIG9mIHRoZSBpbWFnZSBiZWNvbWVzIGF2YWlsYWJsZS4gRG8gbm90IHN0b3JlIHN0YXRlZnVsIGluZm9ybWF0aW9uXG4gKiBvbiB0aGUgaW5zdGFuY2UgaWYgeW91IGFyZSB1c2luZyB0aGlzIGltYWdlLlxuICpcbiAqIFRoZSBBTUkgSUQgaXMgc2VsZWN0ZWQgdXNpbmcgdGhlIHZhbHVlcyBwdWJsaXNoZWQgdG8gdGhlIFNTTSBwYXJhbWV0ZXIgc3RvcmUuXG4gKi9cbmNsYXNzIEdlbmVyaWNTc21QYXJhbWV0ZXJJbWFnZSBpbXBsZW1lbnRzIElNYWNoaW5lSW1hZ2Uge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBhcmFtZXRlck5hbWU6IHN0cmluZyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHByb3BzOiBTc21QYXJhbWV0ZXJJbWFnZU9wdGlvbnMgPSB7fSxcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGltYWdlIHRvIHVzZSBpbiB0aGUgZ2l2ZW4gY29udGV4dFxuICAgKi9cbiAgcHVibGljIGdldEltYWdlKHNjb3BlOiBDb25zdHJ1Y3QpOiBNYWNoaW5lSW1hZ2VDb25maWcge1xuICAgIGNvbnN0IGltYWdlSWQgPSBsb29rdXBJbWFnZShcbiAgICAgIHNjb3BlLFxuICAgICAgdGhpcy5wcm9wcy5jYWNoZWRJbkNvbnRleHQsXG4gICAgICB0aGlzLnBhcmFtZXRlck5hbWUsXG4gICAgKTtcblxuICAgIGNvbnN0IG9zVHlwZSA9IHRoaXMucHJvcHMub3MgPz8gT3BlcmF0aW5nU3lzdGVtVHlwZS5MSU5VWDtcbiAgICByZXR1cm4ge1xuICAgICAgaW1hZ2VJZCxcbiAgICAgIG9zVHlwZSxcbiAgICAgIHVzZXJEYXRhOlxuICAgICAgICB0aGlzLnByb3BzLnVzZXJEYXRhID8/XG4gICAgICAgIChvc1R5cGUgPT09IE9wZXJhdGluZ1N5c3RlbVR5cGUuV0lORE9XU1xuICAgICAgICAgID8gVXNlckRhdGEuZm9yV2luZG93cygpXG4gICAgICAgICAgOiBVc2VyRGF0YS5mb3JMaW51eCgpKSxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBXaW5kb3dzSW1hZ2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXaW5kb3dzSW1hZ2VQcm9wcyB7XG4gIC8qKlxuICAgKiBJbml0aWFsIHVzZXIgZGF0YVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEVtcHR5IFVzZXJEYXRhIGZvciBXaW5kb3dzIG1hY2hpbmVzXG4gICAqL1xuICByZWFkb25seSB1c2VyRGF0YT86IFVzZXJEYXRhO1xufVxuXG4vKipcbiAqIFNlbGVjdCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhlIGluZGljYXRlZCBXaW5kb3dzIHZlcnNpb25cbiAqXG4gKiBUaGlzIE1hY2hpbmUgSW1hZ2UgYXV0b21hdGljYWxseSB1cGRhdGVzIHRvIHRoZSBsYXRlc3QgdmVyc2lvbiBvbiBldmVyeVxuICogZGVwbG95bWVudC4gQmUgYXdhcmUgdGhpcyB3aWxsIGNhdXNlIHlvdXIgaW5zdGFuY2VzIHRvIGJlIHJlcGxhY2VkIHdoZW4gYVxuICogbmV3IHZlcnNpb24gb2YgdGhlIGltYWdlIGJlY29tZXMgYXZhaWxhYmxlLiBEbyBub3Qgc3RvcmUgc3RhdGVmdWwgaW5mb3JtYXRpb25cbiAqIG9uIHRoZSBpbnN0YW5jZSBpZiB5b3UgYXJlIHVzaW5nIHRoaXMgaW1hZ2UuXG4gKlxuICogVGhlIEFNSSBJRCBpcyBzZWxlY3RlZCB1c2luZyB0aGUgdmFsdWVzIHB1Ymxpc2hlZCB0byB0aGUgU1NNIHBhcmFtZXRlciBzdG9yZS5cbiAqXG4gKiBodHRwczovL2F3cy5hbWF6b24uY29tL2Jsb2dzL210L3F1ZXJ5LWZvci10aGUtbGF0ZXN0LXdpbmRvd3MtYW1pLXVzaW5nLXN5c3RlbXMtbWFuYWdlci1wYXJhbWV0ZXItc3RvcmUvXG4gKi9cbmV4cG9ydCBjbGFzcyBXaW5kb3dzSW1hZ2UgZXh0ZW5kcyBHZW5lcmljU1NNUGFyYW1ldGVySW1hZ2Uge1xuICBwcml2YXRlIHN0YXRpYyBERVBSRUNBVEVEX1ZFUlNJT05fTkFNRV9NQVA6IFBhcnRpYWw8XG4gICAgUmVjb3JkPFdpbmRvd3NWZXJzaW9uLCBXaW5kb3dzVmVyc2lvbj5cbiAgPiA9IHtcbiAgICBbV2luZG93c1ZlcnNpb24uV0lORE9XU19TRVJWRVJfMjAxNl9HRVJNQUxfRlVMTF9CQVNFXTpcbiAgICAgIFdpbmRvd3NWZXJzaW9uLldJTkRPV1NfU0VSVkVSXzIwMTZfR0VSTUFOX0ZVTExfQkFTRSxcbiAgICBbV2luZG93c1ZlcnNpb24uV0lORE9XU19TRVJWRVJfMjAxMl9SMl9TUDFfUE9SVFVHRVNFX0JSQVpJTF82NEJJVF9DT1JFXTpcbiAgICAgIFdpbmRvd3NWZXJzaW9uLldJTkRPV1NfU0VSVkVSXzIwMTJfUjJfU1AxX1BPUlRVR1VFU0VfQlJBWklMXzY0QklUX0NPUkUsXG4gICAgW1dpbmRvd3NWZXJzaW9uLldJTkRPV1NfU0VSVkVSXzIwMTZfUE9SVFVHRVNFX1BPUlRVR0FMX0ZVTExfQkFTRV06XG4gICAgICBXaW5kb3dzVmVyc2lvbi5XSU5ET1dTX1NFUlZFUl8yMDE2X1BPUlRVR1VFU0VfUE9SVFVHQUxfRlVMTF9CQVNFLFxuICAgIFtXaW5kb3dzVmVyc2lvbi5XSU5ET1dTX1NFUlZFUl8yMDEyX1IyX1JUTV9QT1JUVUdFU0VfQlJBWklMXzY0QklUX0JBU0VdOlxuICAgICAgV2luZG93c1ZlcnNpb24uV0lORE9XU19TRVJWRVJfMjAxMl9SMl9SVE1fUE9SVFVHVUVTRV9CUkFaSUxfNjRCSVRfQkFTRSxcbiAgICBbV2luZG93c1ZlcnNpb24uV0lORE9XU19TRVJWRVJfMjAxMl9SMl9SVE1fUE9SVFVHRVNFX1BPUlRVR0FMXzY0QklUX0JBU0VdOlxuICAgICAgV2luZG93c1ZlcnNpb24uV0lORE9XU19TRVJWRVJfMjAxMl9SMl9SVE1fUE9SVFVHVUVTRV9QT1JUVUdBTF82NEJJVF9CQVNFLFxuICAgIFtXaW5kb3dzVmVyc2lvbi5XSU5ET1dTX1NFUlZFUl8yMDE2X1BPUlRVR0VTRV9CUkFaSUxfRlVMTF9CQVNFXTpcbiAgICAgIFdpbmRvd3NWZXJzaW9uLldJTkRPV1NfU0VSVkVSXzIwMTZfUE9SVFVHVUVTRV9CUkFaSUxfRlVMTF9CQVNFLFxuICAgIFtXaW5kb3dzVmVyc2lvbi5XSU5ET1dTX1NFUlZFUl8yMDEyX1NQMl9QT1JUVUdFU0VfQlJBWklMXzY0QklUX0JBU0VdOlxuICAgICAgV2luZG93c1ZlcnNpb24uV0lORE9XU19TRVJWRVJfMjAxMl9TUDJfUE9SVFVHVUVTRV9CUkFaSUxfNjRCSVRfQkFTRSxcbiAgICBbV2luZG93c1ZlcnNpb24uV0lORE9XU19TRVJWRVJfMjAxMl9SVE1fUE9SVFVHRVNFX0JSQVpJTF82NEJJVF9CQVNFXTpcbiAgICAgIFdpbmRvd3NWZXJzaW9uLldJTkRPV1NfU0VSVkVSXzIwMTJfUlRNX1BPUlRVR1VFU0VfQlJBWklMXzY0QklUX0JBU0UsXG4gICAgW1dpbmRvd3NWZXJzaW9uLldJTkRPV1NfU0VSVkVSXzIwMDhfUjJfU1AxX1BPUlRVR0VTRV9CUkFaSUxfNjRCSVRfQkFTRV06XG4gICAgICBXaW5kb3dzVmVyc2lvbi5XSU5ET1dTX1NFUlZFUl8yMDA4X1IyX1NQMV9QT1JUVUdVRVNFX0JSQVpJTF82NEJJVF9CQVNFLFxuICAgIFtXaW5kb3dzVmVyc2lvbi5XSU5ET1dTX1NFUlZFUl8yMDA4X1NQMl9QT1JUVUdFU0VfQlJBWklMXzMyQklUX0JBU0VdOlxuICAgICAgV2luZG93c1ZlcnNpb24uV0lORE9XU19TRVJWRVJfMjAwOF9TUDJfUE9SVFVHVUVTRV9CUkFaSUxfMzJCSVRfQkFTRSxcbiAgICBbV2luZG93c1ZlcnNpb24uV0lORE9XU19TRVJWRVJfMjAxMl9SVE1fUE9SVFVHRVNFX1BPUlRVR0FMXzY0QklUX0JBU0VdOlxuICAgICAgV2luZG93c1ZlcnNpb24uV0lORE9XU19TRVJWRVJfMjAxMl9SVE1fUE9SVFVHVUVTRV9QT1JUVUdBTF82NEJJVF9CQVNFLFxuICAgIFtXaW5kb3dzVmVyc2lvbi5XSU5ET1dTX1NFUlZFUl8yMDE5X1BPUlRVR0VTRV9CUkFaSUxfRlVMTF9CQVNFXTpcbiAgICAgIFdpbmRvd3NWZXJzaW9uLldJTkRPV1NfU0VSVkVSXzIwMTlfUE9SVFVHVUVTRV9CUkFaSUxfRlVMTF9CQVNFLFxuICAgIFtXaW5kb3dzVmVyc2lvbi5XSU5ET1dTX1NFUlZFUl8yMDE5X1BPUlRVR0VTRV9QT1JUVUdBTF9GVUxMX0JBU0VdOlxuICAgICAgV2luZG93c1ZlcnNpb24uV0lORE9XU19TRVJWRVJfMjAxOV9QT1JUVUdVRVNFX1BPUlRVR0FMX0ZVTExfQkFTRSxcbiAgfTtcbiAgY29uc3RydWN0b3IodmVyc2lvbjogV2luZG93c1ZlcnNpb24sIHByb3BzOiBXaW5kb3dzSW1hZ2VQcm9wcyA9IHt9KSB7XG4gICAgY29uc3Qgbm9uRGVwcmVjYXRlZFZlcnNpb25OYW1lID1cbiAgICAgIFdpbmRvd3NJbWFnZS5ERVBSRUNBVEVEX1ZFUlNJT05fTkFNRV9NQVBbdmVyc2lvbl0gPz8gdmVyc2lvbjtcbiAgICBzdXBlcihcbiAgICAgIFwiL2F3cy9zZXJ2aWNlL2FtaS13aW5kb3dzLWxhdGVzdC9cIiArIG5vbkRlcHJlY2F0ZWRWZXJzaW9uTmFtZSxcbiAgICAgIE9wZXJhdGluZ1N5c3RlbVR5cGUuV0lORE9XUyxcbiAgICAgIHByb3BzLnVzZXJEYXRhLFxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBBbWF6b24gTGludXggaW1hZ2UgcHJvcGVydGllc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEFtYXpvbkxpbnV4SW1hZ2VQcm9wcyB7XG4gIC8qKlxuICAgKiBXaGF0IGdlbmVyYXRpb24gb2YgQW1hem9uIExpbnV4IHRvIHVzZVxuICAgKlxuICAgKiBAZGVmYXVsdCBBbWF6b25MaW51eFxuICAgKi9cbiAgcmVhZG9ubHkgZ2VuZXJhdGlvbj86IEFtYXpvbkxpbnV4R2VuZXJhdGlvbjtcblxuICAvKipcbiAgICogV2hhdCBlZGl0aW9uIG9mIEFtYXpvbiBMaW51eCB0byB1c2VcbiAgICpcbiAgICogQGRlZmF1bHQgU3RhbmRhcmRcbiAgICovXG4gIHJlYWRvbmx5IGVkaXRpb24/OiBBbWF6b25MaW51eEVkaXRpb247XG5cbiAgLyoqXG4gICAqIFdoYXQga2VybmVsIHZlcnNpb24gb2YgQW1hem9uIExpbnV4IHRvIHVzZVxuICAgKlxuICAgKiBAZGVmYXVsdCAtXG4gICAqL1xuICByZWFkb25seSBrZXJuZWw/OiBBbWF6b25MaW51eEtlcm5lbDtcblxuICAvKipcbiAgICogV2hhdCBzdG9yYWdlIGJhY2tlZCBpbWFnZSB0byB1c2VcbiAgICpcbiAgICogQGRlZmF1bHQgR2VuZXJhbFB1cnBvc2VcbiAgICovXG4gIHJlYWRvbmx5IHN0b3JhZ2U/OiBBbWF6b25MaW51eFN0b3JhZ2U7XG5cbiAgLyoqXG4gICAqIEluaXRpYWwgdXNlciBkYXRhXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gRW1wdHkgVXNlckRhdGEgZm9yIExpbnV4IG1hY2hpbmVzXG4gICAqL1xuICByZWFkb25seSB1c2VyRGF0YT86IFVzZXJEYXRhO1xuXG4gIC8qKlxuICAgKiBDUFUgVHlwZVxuICAgKlxuICAgKiBAZGVmYXVsdCBYODZfNjRcbiAgICovXG4gIHJlYWRvbmx5IGNwdVR5cGU/OiBBbWF6b25MaW51eENwdVR5cGU7XG5cbiAgLyoqXG4gICAqIFZpcnR1YWxpemF0aW9uIHR5cGVcbiAgICpcbiAgICogQGRlZmF1bHQgSFZNXG4gICAqL1xuICByZWFkb25seSB2aXJ0dWFsaXphdGlvbj86IEFtYXpvbkxpbnV4VmlydDtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgQU1JIElEIGlzIGNhY2hlZCB0byBiZSBzdGFibGUgYmV0d2VlbiBkZXBsb3ltZW50c1xuICAgKlxuICAgKiBCeSBkZWZhdWx0LCB0aGUgbmV3ZXN0IGltYWdlIGlzIHVzZWQgb24gZWFjaCBkZXBsb3ltZW50LiBUaGlzIHdpbGwgY2F1c2VcbiAgICogaW5zdGFuY2VzIHRvIGJlIHJlcGxhY2VkIHdoZW5ldmVyIGEgbmV3IHZlcnNpb24gaXMgcmVsZWFzZWQsIGFuZCBtYXkgY2F1c2VcbiAgICogZG93bnRpbWUgaWYgdGhlcmUgYXJlbid0IGVub3VnaCBydW5uaW5nIGluc3RhbmNlcyBpbiB0aGUgQXV0b1NjYWxpbmdHcm91cFxuICAgKiB0byByZXNjaGVkdWxlIHRoZSB0YXNrcyBvbi5cbiAgICpcbiAgICogSWYgc2V0IHRvIHRydWUsIHRoZSBBTUkgSUQgd2lsbCBiZSBjYWNoZWQgaW4gYGNkay5jb250ZXh0Lmpzb25gIGFuZCB0aGVcbiAgICogc2FtZSB2YWx1ZSB3aWxsIGJlIHVzZWQgb24gZnV0dXJlIHJ1bnMuIFlvdXIgaW5zdGFuY2VzIHdpbGwgbm90IGJlIHJlcGxhY2VkXG4gICAqIGJ1dCB5b3VyIEFNSSB2ZXJzaW9uIHdpbGwgZ3JvdyBvbGQgb3ZlciB0aW1lLiBUbyByZWZyZXNoIHRoZSBBTUkgbG9va3VwLFxuICAgKiB5b3Ugd2lsbCBoYXZlIHRvIGV2aWN0IHRoZSB2YWx1ZSBmcm9tIHRoZSBjYWNoZSB1c2luZyB0aGUgYGNkayBjb250ZXh0YFxuICAgKiBjb21tYW5kLiBTZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nkay9sYXRlc3QvZ3VpZGUvY29udGV4dC5odG1sIGZvclxuICAgKiBtb3JlIGluZm9ybWF0aW9uLlxuICAgKlxuICAgKiBDYW4gbm90IGJlIHNldCB0byBgdHJ1ZWAgaW4gZW52aXJvbm1lbnQtYWdub3N0aWMgc3RhY2tzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgY2FjaGVkSW5Db250ZXh0PzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBTZWxlY3RzIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBBbWF6b24gTGludXhcbiAqXG4gKiBUaGlzIE1hY2hpbmUgSW1hZ2UgYXV0b21hdGljYWxseSB1cGRhdGVzIHRvIHRoZSBsYXRlc3QgdmVyc2lvbiBvbiBldmVyeVxuICogZGVwbG95bWVudC4gQmUgYXdhcmUgdGhpcyB3aWxsIGNhdXNlIHlvdXIgaW5zdGFuY2VzIHRvIGJlIHJlcGxhY2VkIHdoZW4gYVxuICogbmV3IHZlcnNpb24gb2YgdGhlIGltYWdlIGJlY29tZXMgYXZhaWxhYmxlLiBEbyBub3Qgc3RvcmUgc3RhdGVmdWwgaW5mb3JtYXRpb25cbiAqIG9uIHRoZSBpbnN0YW5jZSBpZiB5b3UgYXJlIHVzaW5nIHRoaXMgaW1hZ2UuXG4gKlxuICogVGhlIEFNSSBJRCBpcyBzZWxlY3RlZCB1c2luZyB0aGUgdmFsdWVzIHB1Ymxpc2hlZCB0byB0aGUgU1NNIHBhcmFtZXRlciBzdG9yZS5cbiAqL1xuZXhwb3J0IGNsYXNzIEFtYXpvbkxpbnV4SW1hZ2UgZXh0ZW5kcyBHZW5lcmljU1NNUGFyYW1ldGVySW1hZ2Uge1xuICAvKipcbiAgICogUmV0dXJuIHRoZSBTU00gcGFyYW1ldGVyIG5hbWUgdGhhdCB3aWxsIGNvbnRhaW4gdGhlIEFtYXpvbiBMaW51eCBpbWFnZSB3aXRoIHRoZSBnaXZlbiBhdHRyaWJ1dGVzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHNzbVBhcmFtZXRlck5hbWUocHJvcHM6IEFtYXpvbkxpbnV4SW1hZ2VQcm9wcyA9IHt9KSB7XG4gICAgY29uc3QgZ2VuZXJhdGlvbiA9XG4gICAgICAocHJvcHMgJiYgcHJvcHMuZ2VuZXJhdGlvbikgfHwgQW1hem9uTGludXhHZW5lcmF0aW9uLkFNQVpPTl9MSU5VWDtcbiAgICBjb25zdCBlZGl0aW9uID0gKHByb3BzICYmIHByb3BzLmVkaXRpb24pIHx8IEFtYXpvbkxpbnV4RWRpdGlvbi5TVEFOREFSRDtcbiAgICBjb25zdCBjcHUgPSAocHJvcHMgJiYgcHJvcHMuY3B1VHlwZSkgfHwgQW1hem9uTGludXhDcHVUeXBlLlg4Nl82NDtcbiAgICBsZXQga2VybmVsID0gKHByb3BzICYmIHByb3BzLmtlcm5lbCkgfHwgdW5kZWZpbmVkO1xuICAgIGxldCB2aXJ0dWFsaXphdGlvbjogQW1hem9uTGludXhWaXJ0IHwgdW5kZWZpbmVkO1xuICAgIGxldCBzdG9yYWdlOiBBbWF6b25MaW51eFN0b3JhZ2UgfCB1bmRlZmluZWQ7XG5cbiAgICBpZiAoZ2VuZXJhdGlvbiA9PT0gQW1hem9uTGludXhHZW5lcmF0aW9uLkFNQVpPTl9MSU5VWF8yMDIyKSB7XG4gICAgICBrZXJuZWwgPSBBbWF6b25MaW51eEtlcm5lbC5LRVJORUw1X1g7XG4gICAgICBpZiAocHJvcHMgJiYgcHJvcHMuc3RvcmFnZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgXCJTdG9yYWdlIHBhcmFtZXRlciBkb2VzIG5vdCBleGlzdCBpbiBTU00gcGFyYW1ldGVyIG5hbWUgZm9yIEFtYXpvbiBMaW51eCAyMDIyLlwiLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BzICYmIHByb3BzLnZpcnR1YWxpemF0aW9uKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBcIlZpcnR1YWxpemF0aW9uIHBhcmFtZXRlciBkb2VzIG5vdCBleGlzdCBpbiBTU00gcGFyYW1ldGVyIG5hbWUgZm9yIEFtYXpvbiBMaW51eCAyMDIyLlwiLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZ2VuZXJhdGlvbiA9PT0gQW1hem9uTGludXhHZW5lcmF0aW9uLkFNQVpPTl9MSU5VWF8yMDIzKSB7XG4gICAgICBrZXJuZWwgPSBBbWF6b25MaW51eEtlcm5lbC5LRVJORUw2XzE7XG4gICAgICBpZiAocHJvcHMgJiYgcHJvcHMuc3RvcmFnZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgXCJTdG9yYWdlIHBhcmFtZXRlciBkb2VzIG5vdCBleGlzdCBpbiBTU00gcGFyYW1ldGVyIG5hbWUgZm9yIEFtYXpvbiBMaW51eCAyMDIzLlwiLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BzICYmIHByb3BzLnZpcnR1YWxpemF0aW9uKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBcIlZpcnR1YWxpemF0aW9uIHBhcmFtZXRlciBkb2VzIG5vdCBleGlzdCBpbiBTU00gcGFyYW1ldGVyIG5hbWUgZm9yIEFtYXpvbiBMaW51eCAyMDIzLlwiLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2aXJ0dWFsaXphdGlvbiA9IChwcm9wcyAmJiBwcm9wcy52aXJ0dWFsaXphdGlvbikgfHwgQW1hem9uTGludXhWaXJ0LkhWTTtcbiAgICAgIHN0b3JhZ2UgPSAocHJvcHMgJiYgcHJvcHMuc3RvcmFnZSkgfHwgQW1hem9uTGludXhTdG9yYWdlLkdFTkVSQUxfUFVSUE9TRTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJ0czogQXJyYXk8c3RyaW5nIHwgdW5kZWZpbmVkPiA9IFtcbiAgICAgIGdlbmVyYXRpb24sXG4gICAgICBcImFtaVwiLFxuICAgICAgZWRpdGlvbiAhPT0gQW1hem9uTGludXhFZGl0aW9uLlNUQU5EQVJEID8gZWRpdGlvbiA6IHVuZGVmaW5lZCxcbiAgICAgIGtlcm5lbCxcbiAgICAgIHZpcnR1YWxpemF0aW9uLFxuICAgICAgY3B1LFxuICAgICAgc3RvcmFnZSxcbiAgICBdLmZpbHRlcigoeCkgPT4geCAhPT0gdW5kZWZpbmVkKTsgLy8gR2V0IHJpZCBvZiB1bmRlZmluZWRzXG5cbiAgICByZXR1cm4gXCIvYXdzL3NlcnZpY2UvYW1pLWFtYXpvbi1saW51eC1sYXRlc3QvXCIgKyBwYXJ0cy5qb2luKFwiLVwiKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgY2FjaGVkSW5Db250ZXh0OiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgcHJvcHM6IEFtYXpvbkxpbnV4SW1hZ2VQcm9wcyA9IHt9KSB7XG4gICAgc3VwZXIoXG4gICAgICBBbWF6b25MaW51eEltYWdlLnNzbVBhcmFtZXRlck5hbWUocHJvcHMpLFxuICAgICAgT3BlcmF0aW5nU3lzdGVtVHlwZS5MSU5VWCxcbiAgICAgIHByb3BzLnVzZXJEYXRhLFxuICAgICk7XG5cbiAgICB0aGlzLmNhY2hlZEluQ29udGV4dCA9IHByb3BzLmNhY2hlZEluQ29udGV4dCA/PyBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGltYWdlIHRvIHVzZSBpbiB0aGUgZ2l2ZW4gY29udGV4dFxuICAgKi9cbiAgcHVibGljIGdldEltYWdlKHNjb3BlOiBDb25zdHJ1Y3QpOiBNYWNoaW5lSW1hZ2VDb25maWcge1xuICAgIGNvbnN0IGltYWdlSWQgPSBsb29rdXBJbWFnZShcbiAgICAgIHNjb3BlLFxuICAgICAgdGhpcy5jYWNoZWRJbkNvbnRleHQsXG4gICAgICB0aGlzLnBhcmFtZXRlck5hbWUsXG4gICAgKTtcblxuICAgIGNvbnN0IG9zVHlwZSA9IE9wZXJhdGluZ1N5c3RlbVR5cGUuTElOVVg7XG4gICAgcmV0dXJuIHtcbiAgICAgIGltYWdlSWQsXG4gICAgICBvc1R5cGUsXG4gICAgICB1c2VyRGF0YTogdGhpcy5wcm9wcy51c2VyRGF0YSA/PyBVc2VyRGF0YS5mb3JMaW51eCgpLFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBBbWF6b24gTGludXggS2VybmVsXG4gKi9cbmV4cG9ydCBlbnVtIEFtYXpvbkxpbnV4S2VybmVsIHtcbiAgLyoqXG4gICAqIEtlcm5lbCB2ZXJzaW9uIDUuMTBcbiAgICovXG4gIEtFUk5FTDVfWCA9IFwia2VybmVsLTUuMTBcIixcblxuICAvKipcbiAgICogS2VybmVsIHZlcnNpb24gNi4xXG4gICAqL1xuICBLRVJORUw2XzEgPSBcImtlcm5lbC02LjFcIixcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIEdlbmVyaWNMaW51eEltYWdlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2VuZXJpY0xpbnV4SW1hZ2VQcm9wcyB7XG4gIC8qKlxuICAgKiBJbml0aWFsIHVzZXIgZGF0YVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEVtcHR5IFVzZXJEYXRhIGZvciBMaW51eCBtYWNoaW5lc1xuICAgKi9cbiAgcmVhZG9ubHkgdXNlckRhdGE/OiBVc2VyRGF0YTtcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIEdlbmVyaWNXaW5kb3dzSW1hZ2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZW5lcmljV2luZG93c0ltYWdlUHJvcHMge1xuICAvKipcbiAgICogSW5pdGlhbCB1c2VyIGRhdGFcbiAgICpcbiAgICogQGRlZmF1bHQgLSBFbXB0eSBVc2VyRGF0YSBmb3IgV2luZG93cyBtYWNoaW5lc1xuICAgKi9cbiAgcmVhZG9ubHkgdXNlckRhdGE/OiBVc2VyRGF0YTtcbn1cblxuLyoqXG4gKiBDb25zdHJ1Y3QgYSBMaW51eCBtYWNoaW5lIGltYWdlIGZyb20gYW4gQU1JIG1hcFxuICpcbiAqIExpbnV4IGltYWdlcyBJRHMgYXJlIG5vdCBwdWJsaXNoZWQgdG8gU1NNIHBhcmFtZXRlciBzdG9yZSB5ZXQsIHNvIHlvdSdsbCBoYXZlIHRvXG4gKiBtYW51YWxseSBzcGVjaWZ5IGFuIEFNSSBtYXAuXG4gKi9cbmV4cG9ydCBjbGFzcyBHZW5lcmljTGludXhJbWFnZSBpbXBsZW1lbnRzIElNYWNoaW5lSW1hZ2Uge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFtaU1hcDogeyBbcmVnaW9uOiBzdHJpbmddOiBzdHJpbmcgfSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHByb3BzOiBHZW5lcmljTGludXhJbWFnZVByb3BzID0ge30sXG4gICkge31cblxuICBwdWJsaWMgZ2V0SW1hZ2Uoc2NvcGU6IENvbnN0cnVjdCk6IE1hY2hpbmVJbWFnZUNvbmZpZyB7XG4gICAgY29uc3QgdXNlckRhdGEgPSB0aGlzLnByb3BzLnVzZXJEYXRhID8/IFVzZXJEYXRhLmZvckxpbnV4KCk7XG4gICAgY29uc3Qgb3NUeXBlID0gT3BlcmF0aW5nU3lzdGVtVHlwZS5MSU5VWDtcbiAgICBjb25zdCByZWdpb24gPSBBd3NTdGFjay5vZkF3c0NvbnN0cnVjdChzY29wZSkucmVnaW9uO1xuICAgIC8vIC8vIEdyaWQgc3RhY2tzIGFyZSBzaW5nbGUgcmVnaW9uLCByZWdpb24gaXMgYWx3YXlzIGtub3duXG4gICAgLy8gaWYgKFRva2VuLmlzVW5yZXNvbHZlZChyZWdpb24pKSB7XG4gICAgLy8gICBjb25zdCBtYXBwaW5nOiB7IFtrMTogc3RyaW5nXTogeyBbazI6IHN0cmluZ106IGFueSB9IH0gPSB7fTtcbiAgICAvLyAgIGZvciAoY29uc3QgW3JnbiwgYW1pXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLmFtaU1hcCkpIHtcbiAgICAvLyAgICAgbWFwcGluZ1tyZ25dID0geyBhbWkgfTtcbiAgICAvLyAgIH1cbiAgICAvLyAgIGNvbnN0IGFtaU1hcCA9IG5ldyBUZXJyYWZvcm1Mb2NhbChzY29wZSwgXCJBbWlNYXBcIiwgeyBtYXBwaW5nIH0pO1xuICAgIC8vICAgcmV0dXJuIHtcbiAgICAvLyAgICAgaW1hZ2VJZDogRm4ubG9va3VwTmVzdGVkKGFtaU1hcCwgQXdzLlJFR0lPTiwgXCJhbWlcIiksXG4gICAgLy8gICAgIHVzZXJEYXRhLFxuICAgIC8vICAgICBvc1R5cGUsXG4gICAgLy8gICB9O1xuICAgIC8vIH1cbiAgICBjb25zdCBpbWFnZUlkID1cbiAgICAgIHJlZ2lvbiAhPT0gXCJ0ZXN0LXJlZ2lvblwiID8gdGhpcy5hbWlNYXBbcmVnaW9uXSA6IFwiYW1pLTEyMzQ1XCI7XG4gICAgaWYgKCFpbWFnZUlkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBVbmFibGUgdG8gZmluZCBBTUkgaW4gQU1JIG1hcDogbm8gQU1JIHNwZWNpZmllZCBmb3IgcmVnaW9uICcke3JlZ2lvbn0nYCxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBpbWFnZUlkLFxuICAgICAgdXNlckRhdGEsXG4gICAgICBvc1R5cGUsXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIENvbnN0cnVjdCBhIFdpbmRvd3MgbWFjaGluZSBpbWFnZSBmcm9tIGFuIEFNSSBtYXBcbiAqXG4gKiBBbGxvd3MgeW91IHRvIGNyZWF0ZSBhIGdlbmVyaWMgV2luZG93cyBFQzIgLCBtYW51YWxseSBzcGVjaWZ5IGFuIEFNSSBtYXAuXG4gKi9cbmV4cG9ydCBjbGFzcyBHZW5lcmljV2luZG93c0ltYWdlIGltcGxlbWVudHMgSU1hY2hpbmVJbWFnZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYW1pTWFwOiB7IFtyZWdpb246IHN0cmluZ106IHN0cmluZyB9LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcHJvcHM6IEdlbmVyaWNXaW5kb3dzSW1hZ2VQcm9wcyA9IHt9LFxuICApIHt9XG5cbiAgcHVibGljIGdldEltYWdlKHNjb3BlOiBDb25zdHJ1Y3QpOiBNYWNoaW5lSW1hZ2VDb25maWcge1xuICAgIGNvbnN0IHVzZXJEYXRhID0gdGhpcy5wcm9wcy51c2VyRGF0YSA/PyBVc2VyRGF0YS5mb3JXaW5kb3dzKCk7XG4gICAgY29uc3Qgb3NUeXBlID0gT3BlcmF0aW5nU3lzdGVtVHlwZS5XSU5ET1dTO1xuICAgIGNvbnN0IHJlZ2lvbiA9IEF3c1N0YWNrLm9mQXdzQ29uc3RydWN0KHNjb3BlKS5yZWdpb247XG4gICAgLy8gLy8gR3JpZCBzdGFja3MgYXJlIHNpbmdsZSByZWdpb24sIHJlZ2lvbiBpcyBhbHdheXMga25vd25cbiAgICAvLyBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKHJlZ2lvbikpIHtcbiAgICAvLyAgIGNvbnN0IG1hcHBpbmc6IHsgW2sxOiBzdHJpbmddOiB7IFtrMjogc3RyaW5nXTogYW55IH0gfSA9IHt9O1xuICAgIC8vICAgZm9yIChjb25zdCBbcmduLCBhbWldIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuYW1pTWFwKSkge1xuICAgIC8vICAgICBtYXBwaW5nW3Jnbl0gPSB7IGFtaSB9O1xuICAgIC8vICAgfVxuICAgIC8vICAgY29uc3QgYW1pTWFwID0gbmV3IFRlcnJhZm9ybUxvY2FsKHNjb3BlLCBcIkFtaU1hcFwiLCB7IG1hcHBpbmcgfSk7XG4gICAgLy8gICByZXR1cm4ge1xuICAgIC8vICAgICBpbWFnZUlkOiBGbi5sb29rdXBOZXN0ZWQoYW1pTWFwLCBBd3MuUkVHSU9OLCBcImFtaVwiKSxcbiAgICAvLyAgICAgdXNlckRhdGEsXG4gICAgLy8gICAgIG9zVHlwZSxcbiAgICAvLyAgIH07XG4gICAgLy8gfVxuICAgIGNvbnN0IGltYWdlSWQgPVxuICAgICAgcmVnaW9uICE9PSBcInRlc3QtcmVnaW9uXCIgPyB0aGlzLmFtaU1hcFtyZWdpb25dIDogXCJhbWktMTIzNDVcIjtcbiAgICBpZiAoIWltYWdlSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFVuYWJsZSB0byBmaW5kIEFNSSBpbiBBTUkgbWFwOiBubyBBTUkgc3BlY2lmaWVkIGZvciByZWdpb24gJyR7cmVnaW9ufSdgLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGltYWdlSWQsXG4gICAgICB1c2VyRGF0YSxcbiAgICAgIG9zVHlwZSxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogQSBtYWNoaW5lIGltYWdlIHdob3NlIEFNSSBJRCB3aWxsIGJlIHNlYXJjaGVkIHVzaW5nIERlc2NyaWJlSW1hZ2VzLlxuICpcbiAqIFRoZSBtb3N0IHJlY2VudCwgYXZhaWxhYmxlLCBsYXVuY2hhYmxlIGltYWdlIG1hdGNoaW5nIHRoZSBnaXZlbiBmaWx0ZXJcbiAqIGNyaXRlcmlhIHdpbGwgYmUgdXNlZC4gTG9va2luZyB1cCBBTUlzIG1heSB0YWtlIGEgbG9uZyB0aW1lOyBzcGVjaWZ5XG4gKiBhcyBtYW55IGZpbHRlciBjcml0ZXJpYSBhcyBwb3NzaWJsZSB0byBuYXJyb3cgZG93biB0aGUgc2VhcmNoLlxuICpcbiAqIFRoZSBBTUkgc2VsZWN0ZWQgd2lsbCBiZSBjYWNoZWQgaW4gYGdyaWQuY29udGV4dC5qc29uYCBhbmQgdGhlIHNhbWUgdmFsdWVcbiAqIHdpbGwgYmUgdXNlZCBvbiBmdXR1cmUgcnVucy4gVG8gcmVmcmVzaCB0aGUgQU1JIGxvb2t1cCwgeW91IHdpbGwgaGF2ZSB0b1xuICogZXZpY3QgdGhlIHZhbHVlIGZyb20gdGhlIGNhY2hlIHVzaW5nIHRoZSBgZ3JpZCBjb250ZXh0YCBjb21tYW5kLiBTZWVcbiAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jZGsvbGF0ZXN0L2d1aWRlL2NvbnRleHQuaHRtbCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIExvb2t1cE1hY2hpbmVJbWFnZSBpbXBsZW1lbnRzIElNYWNoaW5lSW1hZ2Uge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHByb3BzOiBMb29rdXBNYWNoaW5lSW1hZ2VQcm9wcykge31cblxuICBwdWJsaWMgZ2V0SW1hZ2Uoc2NvcGU6IENvbnN0cnVjdCk6IE1hY2hpbmVJbWFnZUNvbmZpZyB7XG4gICAgLy8gTmVlZCB0byBrbm93ICd3aW5kb3dzJyBvciBub3QgYmVmb3JlIGRvaW5nIHRoZSBxdWVyeSB0byByZXR1cm4gdGhlIHJpZ2h0XG4gICAgLy8gb3NUeXBlIGZvciB0aGUgZHVtbXkgdmFsdWUsIHNvIG1pZ2h0IGFzIHdlbGwgYWRkIGl0IHRvIHRoZSBmaWx0ZXIuXG4gICAgY29uc3QgZmlsdGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nW10gfCB1bmRlZmluZWQ+ID0ge1xuICAgICAgbmFtZTogW3RoaXMucHJvcHMubmFtZV0sXG4gICAgICBzdGF0ZTogW1wiYXZhaWxhYmxlXCJdLFxuICAgICAgXCJpbWFnZS10eXBlXCI6IFtcIm1hY2hpbmVcIl0sXG4gICAgICBwbGF0Zm9ybTogdGhpcy5wcm9wcy53aW5kb3dzID8gW1wid2luZG93c1wiXSA6IHVuZGVmaW5lZCxcbiAgICB9O1xuICAgIE9iamVjdC5hc3NpZ24oZmlsdGVycywgdGhpcy5wcm9wcy5maWx0ZXJzKTtcblxuICAgIGxldCB1bmlxdWVJZCA9IFwiQW1pXCI7XG4gICAgbGV0IGNvdW50ZXIgPSAxO1xuICAgIHdoaWxlIChzY29wZS5ub2RlLnRyeUZpbmRDaGlsZCh1bmlxdWVJZCkpIHtcbiAgICAgIHVuaXF1ZUlkID0gYEFtaSR7Y291bnRlcisrfWA7XG4gICAgfVxuXG4gICAgY29uc3QgZGF0YVNvdXJjZSA9IG5ldyBkYXRhQXdzQW1pLkRhdGFBd3NBbWkoc2NvcGUsIHVuaXF1ZUlkLCB7XG4gICAgICBvd25lcnM6IHRoaXMucHJvcHMub3duZXJzLFxuICAgICAgZmlsdGVyOiBPYmplY3QuZW50cmllcyhmaWx0ZXJzKVxuICAgICAgICAuZmlsdGVyKChbX2tleSwgdmFsdWVzXSkgPT4gdmFsdWVzICE9PSB1bmRlZmluZWQpXG4gICAgICAgIC5tYXAoKFtuYW1lLCB2YWx1ZXNdKSA9PiAoe1xuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgdmFsdWVzOiB2YWx1ZXMgYXMgc3RyaW5nW10sXG4gICAgICAgIH0pKSxcbiAgICB9KTtcbiAgICBjb25zdCB2YWx1ZSA9IGRhdGFTb3VyY2UuaWQ7XG5cbiAgICAvLyAvLyBUT0RPOiBVc2UgR3JpZCBhcyBjb250ZXh0UHJvdmlkZXJcbiAgICAvLyBjb25zdCB2YWx1ZSA9IENvbnRleHRQcm92aWRlci5nZXRWYWx1ZShzY29wZSwge1xuICAgIC8vICAgcHJvdmlkZXI6IGN4c2NoZW1hLkNvbnRleHRQcm92aWRlci5BTUlfUFJPVklERVIsXG4gICAgLy8gICBwcm9wczoge1xuICAgIC8vICAgICBvd25lcnM6IHRoaXMucHJvcHMub3duZXJzLFxuICAgIC8vICAgICBmaWx0ZXJzLFxuICAgIC8vICAgfSBhcyBjeHNjaGVtYS5BbWlDb250ZXh0UXVlcnksXG4gICAgLy8gICBkdW1teVZhbHVlOiBcImFtaS0xMjM0XCIsXG4gICAgLy8gfSkudmFsdWUgYXMgY3hhcGkuQW1pQ29udGV4dFJlc3BvbnNlO1xuICAgIC8vXG4gICAgLy8gaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJzdHJpbmdcIikge1xuICAgIC8vICAgdGhyb3cgbmV3IEVycm9yKGBSZXNwb25zZSB0byBBTUkgbG9va3VwIGludmFsaWQsIGdvdDogJHt2YWx1ZX1gKTtcbiAgICAvLyB9XG5cbiAgICBjb25zdCBvc1R5cGUgPSB0aGlzLnByb3BzLndpbmRvd3NcbiAgICAgID8gT3BlcmF0aW5nU3lzdGVtVHlwZS5XSU5ET1dTXG4gICAgICA6IE9wZXJhdGluZ1N5c3RlbVR5cGUuTElOVVg7XG5cbiAgICByZXR1cm4ge1xuICAgICAgaW1hZ2VJZDogdmFsdWUsXG4gICAgICBvc1R5cGUsXG4gICAgICB1c2VyRGF0YTogdGhpcy5wcm9wcy51c2VyRGF0YSA/PyBVc2VyRGF0YS5mb3JPcGVyYXRpbmdTeXN0ZW0ob3NUeXBlKSxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgbG9va2luZyB1cCBhbiBpbWFnZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvb2t1cE1hY2hpbmVJbWFnZVByb3BzIHtcbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIGltYWdlIChtYXkgY29udGFpbiB3aWxkY2FyZHMpXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE93bmVyIGFjY291bnQgSURzIG9yIGFsaWFzZXNcbiAgICpcbiAgICogQGRlZmF1bHQgLSBBbGwgb3duZXJzXG4gICAqL1xuICByZWFkb25seSBvd25lcnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBmaWx0ZXJzIG9uIHRoZSBBTUlcbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0Rlc2NyaWJlSW1hZ2VzLmh0bWxcbiAgICogQGRlZmF1bHQgLSBObyBhZGRpdGlvbmFsIGZpbHRlcnNcbiAgICovXG4gIHJlYWRvbmx5IGZpbHRlcnM/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZ1tdIH07XG5cbiAgLyoqXG4gICAqIExvb2sgZm9yIFdpbmRvd3MgaW1hZ2VzXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSB3aW5kb3dzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ3VzdG9tIHVzZXJkYXRhIGZvciB0aGlzIGltYWdlXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gRW1wdHkgdXNlciBkYXRhIGFwcHJvcHJpYXRlIGZvciB0aGUgcGxhdGZvcm0gdHlwZVxuICAgKi9cbiAgcmVhZG9ubHkgdXNlckRhdGE/OiBVc2VyRGF0YTtcbn1cbiJdfQ==
|
|
565
|
+
LookupMachineImage[_h] = { fqn: "terraconstructs.aws.compute.LookupMachineImage", version: "0.2.6" };
|
|
566
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFjaGluZS1pbWFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hd3MvY29tcHV0ZS9tYWNoaW5lLWltYWdlL21hY2hpbmUtaW1hZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSwrSUFBK0k7QUFFL0ksc0RBQWlEO0FBU2pELDJEQUk2QjtBQUM3QiwyREFJNkI7QUFDN0IsbURBSXlCO0FBQ3pCLHFDQVNrQjtBQUNsQixtQ0FBc0M7QUFDdEMsK0NBQTJDO0FBQzNDLHFDQUFxQztBQUNyQyw0Q0FBd0M7QUFDeEMsMERBQXFEO0FBRXJEOztHQUVHO0FBQ0gsTUFBc0IsWUFBWTtJQUNoQzs7Ozs7OztPQU9HO0lBQ0ksTUFBTSxDQUFDLGFBQWEsQ0FDekIsT0FBdUIsRUFDdkIsS0FBeUI7UUFFekIsT0FBTyxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSSxNQUFNLENBQUMsa0JBQWtCLENBQzlCLEtBQTBDO1FBRTFDLE9BQU8sSUFBSSw2Q0FBNkIsQ0FBQztZQUN2QyxlQUFlLEVBQUUsS0FBSztZQUN0QixHQUFHLEtBQUs7WUFDUixNQUFNLEVBQUUsa0NBQWtCLENBQUMsVUFBVTtTQUN0QyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0ksTUFBTSxDQUFDLHFCQUFxQixDQUNqQyxLQUE2QztRQUU3QyxPQUFPLElBQUksb0RBQWdDLENBQUM7WUFDMUMsZUFBZSxFQUFFLEtBQUs7WUFDdEIsR0FBRyxLQUFLO1lBQ1IsTUFBTSxFQUFFLHlDQUFxQixDQUFDLFVBQVU7U0FDekMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSSxNQUFNLENBQUMscUJBQXFCLENBQ2pDLEtBQTZDO1FBRTdDLE9BQU8sSUFBSSxvREFBZ0MsQ0FBQztZQUMxQyxlQUFlLEVBQUUsS0FBSztZQUN0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OztBQXRESCxnREF1REMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvYmxvYi80MWNkNTcyOTBlMDNlOTI1NmNjNzc0NjZmZDM5ZTdmM2U3YTI5NWI0L3BhY2thZ2VzL2F3cy1jZGstbGliL2F3cy1lYzIvbGliL21hY2hpbmUtaW1hZ2UvbWFjaGluZS1pbWFnZS50c1xuXG5pbXBvcnQgeyBkYXRhQXdzQW1pIH0gZnJvbSBcIkBjZGt0bi9wcm92aWRlci1hd3NcIjtcbi8vIGltcG9ydCB7XG4vLyAgIC8vIFRPRE86IFVzZSBHcmlkIGFzIGNvbnRleHRQcm92aWRlclxuLy8gICAvLyBDb250ZXh0UHJvdmlkZXIsXG4vLyAgIC8vIENmbk1hcHBpbmcsXG4vLyAgIC8vIEF3cyxcbi8vICAgVG9rZW4sXG4vLyB9IGZyb20gXCJjZGt0blwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7XG4gIEFtYXpvbkxpbnV4MjAyMkltYWdlU3NtUGFyYW1ldGVyLFxuICBBbWF6b25MaW51eDIwMjJJbWFnZVNzbVBhcmFtZXRlclByb3BzLFxuICBBbWF6b25MaW51eDIwMjJLZXJuZWwsXG59IGZyb20gXCIuL2FtYXpvbi1saW51eC0yMDIyXCI7XG5pbXBvcnQge1xuICBBbWF6b25MaW51eDIwMjNJbWFnZVNzbVBhcmFtZXRlcixcbiAgQW1hem9uTGludXgyMDIzSW1hZ2VTc21QYXJhbWV0ZXJQcm9wcyxcbiAgQW1hem9uTGludXgyMDIzS2VybmVsLFxufSBmcm9tIFwiLi9hbWF6b24tbGludXgtMjAyM1wiO1xuaW1wb3J0IHtcbiAgQW1hem9uTGludXgySW1hZ2VTc21QYXJhbWV0ZXIsXG4gIEFtYXpvbkxpbnV4MkltYWdlU3NtUGFyYW1ldGVyUHJvcHMsXG4gIEFtYXpvbkxpbnV4Mktlcm5lbCxcbn0gZnJvbSBcIi4vYW1hem9uLWxpbnV4MlwiO1xuaW1wb3J0IHtcbiAgQW1hem9uTGludXhDcHVUeXBlLFxuICBBbWF6b25MaW51eEVkaXRpb24sXG4gIEFtYXpvbkxpbnV4R2VuZXJhdGlvbixcbiAgQW1hem9uTGludXhTdG9yYWdlLFxuICBBbWF6b25MaW51eFZpcnQsXG4gIElNYWNoaW5lSW1hZ2UsXG4gIE1hY2hpbmVJbWFnZUNvbmZpZyxcbiAgT3BlcmF0aW5nU3lzdGVtVHlwZSxcbn0gZnJvbSBcIi4vY29tbW9uXCI7XG5pbXBvcnQgeyBsb29rdXBJbWFnZSB9IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQgeyBBd3NTdGFjayB9IGZyb20gXCIuLi8uLi9hd3Mtc3RhY2tcIjtcbmltcG9ydCAqIGFzIHNzbSBmcm9tIFwiLi4vLi4vc3RvcmFnZVwiO1xuaW1wb3J0IHsgVXNlckRhdGEgfSBmcm9tIFwiLi4vdXNlci1kYXRhXCI7XG5pbXBvcnQgeyBXaW5kb3dzVmVyc2lvbiB9IGZyb20gXCIuLi93aW5kb3dzLXZlcnNpb25zXCI7XG5cbi8qKlxuICogRmFjdG9yeSBmdW5jdGlvbnMgZm9yIHN0YW5kYXJkIEFtYXpvbiBNYWNoaW5lIEltYWdlIG9iamVjdHMuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBNYWNoaW5lSW1hZ2Uge1xuICAvKipcbiAgICogQSBXaW5kb3dzIGltYWdlIHRoYXQgaXMgYXV0b21hdGljYWxseSBrZXB0IHVwLXRvLWRhdGVcbiAgICpcbiAgICogVGhpcyBNYWNoaW5lIEltYWdlIGF1dG9tYXRpY2FsbHkgdXBkYXRlcyB0byB0aGUgbGF0ZXN0IHZlcnNpb24gb24gZXZlcnlcbiAgICogZGVwbG95bWVudC4gQmUgYXdhcmUgdGhpcyB3aWxsIGNhdXNlIHlvdXIgaW5zdGFuY2VzIHRvIGJlIHJlcGxhY2VkIHdoZW4gYVxuICAgKiBuZXcgdmVyc2lvbiBvZiB0aGUgaW1hZ2UgYmVjb21lcyBhdmFpbGFibGUuIERvIG5vdCBzdG9yZSBzdGF0ZWZ1bCBpbmZvcm1hdGlvblxuICAgKiBvbiB0aGUgaW5zdGFuY2UgaWYgeW91IGFyZSB1c2luZyB0aGlzIGltYWdlLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBsYXRlc3RXaW5kb3dzKFxuICAgIHZlcnNpb246IFdpbmRvd3NWZXJzaW9uLFxuICAgIHByb3BzPzogV2luZG93c0ltYWdlUHJvcHMsXG4gICk6IElNYWNoaW5lSW1hZ2Uge1xuICAgIHJldHVybiBuZXcgV2luZG93c0ltYWdlKHZlcnNpb24sIHByb3BzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbiBBbWF6b24gTGludXggMiBpbWFnZSB0aGF0IGlzIGF1dG9tYXRpY2FsbHkga2VwdCB1cC10by1kYXRlXG4gICAqXG4gICAqIFRoaXMgTWFjaGluZSBJbWFnZSBhdXRvbWF0aWNhbGx5IHVwZGF0ZXMgdG8gdGhlIGxhdGVzdCB2ZXJzaW9uIG9uIGV2ZXJ5XG4gICAqIGRlcGxveW1lbnQuIEJlIGF3YXJlIHRoaXMgd2lsbCBjYXVzZSB5b3VyIGluc3RhbmNlcyB0byBiZSByZXBsYWNlZCB3aGVuIGFcbiAgICogbmV3IHZlcnNpb24gb2YgdGhlIGltYWdlIGJlY29tZXMgYXZhaWxhYmxlLiBEbyBub3Qgc3RvcmUgc3RhdGVmdWwgaW5mb3JtYXRpb25cbiAgICogb24gdGhlIGluc3RhbmNlIGlmIHlvdSBhcmUgdXNpbmcgdGhpcyBpbWFnZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbGF0ZXN0QW1hem9uTGludXgyKFxuICAgIHByb3BzPzogQW1hem9uTGludXgySW1hZ2VTc21QYXJhbWV0ZXJQcm9wcyxcbiAgKTogSU1hY2hpbmVJbWFnZSB7XG4gICAgcmV0dXJuIG5ldyBBbWF6b25MaW51eDJJbWFnZVNzbVBhcmFtZXRlcih7XG4gICAgICBjYWNoZWRJbkNvbnRleHQ6IGZhbHNlLFxuICAgICAgLi4ucHJvcHMsXG4gICAgICBrZXJuZWw6IEFtYXpvbkxpbnV4Mktlcm5lbC5DREtfTEFURVNULFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFuIEFtYXpvbiBMaW51eCAyMDIyIGltYWdlIHRoYXQgaXMgYXV0b21hdGljYWxseSBrZXB0IHVwLXRvLWRhdGVcbiAgICpcbiAgICogVGhpcyBNYWNoaW5lIEltYWdlIGF1dG9tYXRpY2FsbHkgdXBkYXRlcyB0byB0aGUgbGF0ZXN0IHZlcnNpb24gb24gZXZlcnlcbiAgICogZGVwbG95bWVudC4gQmUgYXdhcmUgdGhpcyB3aWxsIGNhdXNlIHlvdXIgaW5zdGFuY2VzIHRvIGJlIHJlcGxhY2VkIHdoZW4gYVxuICAgKiBuZXcgdmVyc2lvbiBvZiB0aGUgaW1hZ2UgYmVjb21lcyBhdmFpbGFibGUuIERvIG5vdCBzdG9yZSBzdGF0ZWZ1bCBpbmZvcm1hdGlvblxuICAgKiBvbiB0aGUgaW5zdGFuY2UgaWYgeW91IGFyZSB1c2luZyB0aGlzIGltYWdlLlxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCAtIHVzZSBsYXRlc3RBbWF6b25MaW51eDIwMjMoKSBpbnN0ZWFkXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGxhdGVzdEFtYXpvbkxpbnV4MjAyMihcbiAgICBwcm9wcz86IEFtYXpvbkxpbnV4MjAyMkltYWdlU3NtUGFyYW1ldGVyUHJvcHMsXG4gICk6IElNYWNoaW5lSW1hZ2Uge1xuICAgIHJldHVybiBuZXcgQW1hem9uTGludXgyMDIySW1hZ2VTc21QYXJhbWV0ZXIoe1xuICAgICAgY2FjaGVkSW5Db250ZXh0OiBmYWxzZSxcbiAgICAgIC4uLnByb3BzLFxuICAgICAga2VybmVsOiBBbWF6b25MaW51eDIwMjJLZXJuZWwuQ0RLX0xBVEVTVCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbiBBbWF6b24gTGludXggMjAyMyBpbWFnZSB0aGF0IGlzIGF1dG9tYXRpY2FsbHkga2VwdCB1cC10by1kYXRlXG4gICAqXG4gICAqIFRoaXMgTWFjaGluZSBJbWFnZSBhdXRvbWF0aWNhbGx5IHVwZGF0ZXMgdG8gdGhlIGxhdGVzdCB2ZXJzaW9uIG9uIGV2ZXJ5XG4gICAqIGRlcGxveW1lbnQuIEJlIGF3YXJlIHRoaXMgd2lsbCBjYXVzZSB5b3VyIGluc3RhbmNlcyB0byBiZSByZXBsYWNlZCB3aGVuIGFcbiAgICogbmV3IHZlcnNpb24gb2YgdGhlIGltYWdlIGJlY29tZXMgYXZhaWxhYmxlLiBEbyBub3Qgc3RvcmUgc3RhdGVmdWwgaW5mb3JtYXRpb25cbiAgICogb24gdGhlIGluc3RhbmNlIGlmIHlvdSBhcmUgdXNpbmcgdGhpcyBpbWFnZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbGF0ZXN0QW1hem9uTGludXgyMDIzKFxuICAgIHByb3BzPzogQW1hem9uTGludXgyMDIzSW1hZ2VTc21QYXJhbWV0ZXJQcm9wcyxcbiAgKTogSU1hY2hpbmVJbWFnZSB7XG4gICAgcmV0dXJuIG5ldyBBbWF6b25MaW51eDIwMjNJbWFnZVNzbVBhcmFtZXRlcih7XG4gICAgICBjYWNoZWRJbkNvbnRleHQ6IGZhbHNlLFxuICAgICAgLi4ucHJvcHMsXG4gICAgICBrZXJuZWw6IEFtYXpvbkxpbnV4MjAyM0tlcm5lbC5DREtfTEFURVNULFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFuIEFtYXpvbiBMaW51eCBpbWFnZSB0aGF0IGlzIGF1dG9tYXRpY2FsbHkga2VwdCB1cC10by1kYXRlXG4gICAqXG4gICAqIFRoaXMgTWFjaGluZSBJbWFnZSBhdXRvbWF0aWNhbGx5IHVwZGF0ZXMgdG8gdGhlIGxhdGVzdCB2ZXJzaW9uIG9uIGV2ZXJ5XG4gICAqIGRlcGxveW1lbnQuIEJlIGF3YXJlIHRoaXMgd2lsbCBjYXVzZSB5b3VyIGluc3RhbmNlcyB0byBiZSByZXBsYWNlZCB3aGVuIGFcbiAgICogbmV3IHZlcnNpb24gb2YgdGhlIGltYWdlIGJlY29tZXMgYXZhaWxhYmxlLiBEbyBub3Qgc3RvcmUgc3RhdGVmdWwgaW5mb3JtYXRpb25cbiAgICogb24gdGhlIGluc3RhbmNlIGlmIHlvdSBhcmUgdXNpbmcgdGhpcyBpbWFnZS5cbiAgICpcbiAgICogTi5CLjogXCJsYXRlc3RcIiBpbiB0aGUgbmFtZSBvZiB0aGlzIGZ1bmN0aW9uIGluZGljYXRlcyB0aGF0IGl0IGFsd2F5cyB1c2VzIHRoZSBtb3N0IHJlY2VudFxuICAgKiBpbWFnZSBvZiBhIHBhcnRpY3VsYXIgZ2VuZXJhdGlvbiBvZiBBbWF6b24gTGludXgsIG5vdCB0aGF0IGl0IHVzZXMgdGhlIFwibGF0ZXN0IGdlbmVyYXRpb25cIi5cbiAgICogRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCB0aGlzIGZ1bmN0aW9uIHVzZXMgQW1hem9uIExpbnV4IDEgaWYgbm8gZ2VuZXJhdGlvblxuICAgKiBpcyBzcGVjaWZpZWQuXG4gICAqXG4gICAqIFNwZWNpZnkgdGhlIGRlc2lyZWQgZ2VuZXJhdGlvbiB1c2luZyB0aGUgYGdlbmVyYXRpb25gIHByb3BlcnR5OlxuICAgKlxuICAgKiBgYGB0c1xuICAgKiBjb21wdXRlLk1hY2hpbmVJbWFnZS5sYXRlc3RBbWF6b25MaW51eCh7XG4gICAqICAgLy8gVXNlIEFtYXpvbiBMaW51eCAyXG4gICAqICAgZ2VuZXJhdGlvbjogZWMyLkFtYXpvbkxpbnV4R2VuZXJhdGlvbi5BTUFaT05fTElOVVhfMixcbiAgICogfSlcbiAgICogYGBgXG4gICAqIEBkZXByZWNhdGVkIHVzZSBNYWNoaW5lSW1hZ2UubGF0ZXN0QW1hem9uTGludXgyIGluc3RlYWRcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbGF0ZXN0QW1hem9uTGludXgoXG4gICAgcHJvcHM/OiBBbWF6b25MaW51eEltYWdlUHJvcHMsXG4gICk6IElNYWNoaW5lSW1hZ2Uge1xuICAgIHJldHVybiBuZXcgQW1hem9uTGludXhJbWFnZShwcm9wcyk7XG4gIH1cblxuICAvKipcbiAgICogQSBMaW51eCBpbWFnZSB3aGVyZSB5b3Ugc3BlY2lmeSB0aGUgQU1JIElEIGZvciBldmVyeSByZWdpb25cbiAgICpcbiAgICogQHBhcmFtIGFtaU1hcCBGb3IgZXZlcnkgcmVnaW9uIHdoZXJlIHlvdSBhcmUgZGVwbG95aW5nIHRoZSBzdGFjayxcbiAgICogc3BlY2lmeSB0aGUgQU1JIElEIGZvciB0aGF0IHJlZ2lvbi5cbiAgICogQHBhcmFtIHByb3BzIEN1c3RvbWl6ZSB0aGUgaW1hZ2UgYnkgc3VwcGx5aW5nIGFkZGl0aW9uYWwgcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZ2VuZXJpY0xpbnV4KFxuICAgIGFtaU1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgICBwcm9wcz86IEdlbmVyaWNMaW51eEltYWdlUHJvcHMsXG4gICk6IElNYWNoaW5lSW1hZ2Uge1xuICAgIHJldHVybiBuZXcgR2VuZXJpY0xpbnV4SW1hZ2UoYW1pTWFwLCBwcm9wcyk7XG4gIH1cblxuICAvKipcbiAgICogQSBXaW5kb3dzIGltYWdlIHdoZXJlIHlvdSBzcGVjaWZ5IHRoZSBBTUkgSUQgZm9yIGV2ZXJ5IHJlZ2lvblxuICAgKlxuICAgKiBAcGFyYW0gYW1pTWFwIEZvciBldmVyeSByZWdpb24gd2hlcmUgeW91IGFyZSBkZXBsb3lpbmcgdGhlIHN0YWNrLFxuICAgKiBzcGVjaWZ5IHRoZSBBTUkgSUQgZm9yIHRoYXQgcmVnaW9uLlxuICAgKiBAcGFyYW0gcHJvcHMgQ3VzdG9taXplIHRoZSBpbWFnZSBieSBzdXBwbHlpbmcgYWRkaXRpb25hbCBwcm9wc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBnZW5lcmljV2luZG93cyhcbiAgICBhbWlNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG4gICAgcHJvcHM/OiBHZW5lcmljV2luZG93c0ltYWdlUHJvcHMsXG4gICk6IElNYWNoaW5lSW1hZ2Uge1xuICAgIHJldHVybiBuZXcgR2VuZXJpY1dpbmRvd3NJbWFnZShhbWlNYXAsIHByb3BzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbiBpbWFnZSBzcGVjaWZpZWQgaW4gU1NNIHBhcmFtZXRlciBzdG9yZSB0aGF0IGlzIGF1dG9tYXRpY2FsbHkga2VwdCB1cC10by1kYXRlXG4gICAqXG4gICAqIFRoaXMgTWFjaGluZSBJbWFnZSBhdXRvbWF0aWNhbGx5IHVwZGF0ZXMgdG8gdGhlIGxhdGVzdCB2ZXJzaW9uIG9uIGV2ZXJ5XG4gICAqIGRlcGxveW1lbnQuIEJlIGF3YXJlIHRoaXMgd2lsbCBjYXVzZSB5b3VyIGluc3RhbmNlcyB0byBiZSByZXBsYWNlZCB3aGVuIGFcbiAgICogbmV3IHZlcnNpb24gb2YgdGhlIGltYWdlIGJlY29tZXMgYXZhaWxhYmxlLiBEbyBub3Qgc3RvcmUgc3RhdGVmdWwgaW5mb3JtYXRpb25cbiAgICogb24gdGhlIGluc3RhbmNlIGlmIHlvdSBhcmUgdXNpbmcgdGhpcyBpbWFnZS5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtZXRlck5hbWUgVGhlIG5hbWUgb2YgU1NNIHBhcmFtZXRlciBjb250YWluaW5nIHRoZSBBTWkgaWRcbiAgICogQHBhcmFtIG9zIFRoZSBvcGVyYXRpbmcgc3lzdGVtIHR5cGUgb2YgdGhlIEFNSVxuICAgKiBAcGFyYW0gdXNlckRhdGEgb3B0aW9uYWwgdXNlciBkYXRhIGZvciB0aGUgZ2l2ZW4gaW1hZ2VcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGBNYWNoaW5lSW1hZ2UuZnJvbVNzbVBhcmFtZXRlcigpYCBpbnN0ZWFkXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21TU01QYXJhbWV0ZXIoXG4gICAgcGFyYW1ldGVyTmFtZTogc3RyaW5nLFxuICAgIG9zOiBPcGVyYXRpbmdTeXN0ZW1UeXBlLFxuICAgIHVzZXJEYXRhPzogVXNlckRhdGEsXG4gICk6IElNYWNoaW5lSW1hZ2Uge1xuICAgIHJldHVybiBuZXcgR2VuZXJpY1NTTVBhcmFtZXRlckltYWdlKHBhcmFtZXRlck5hbWUsIG9zLCB1c2VyRGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogQW4gaW1hZ2Ugc3BlY2lmaWVkIGluIFNTTSBwYXJhbWV0ZXIgc3RvcmVcbiAgICpcbiAgICogQnkgZGVmYXVsdCwgdGhlIFNTTSBwYXJhbWV0ZXIgaXMgcmVmcmVzaGVkIGF0IGV2ZXJ5IGRlcGxveW1lbnQsXG4gICAqIGNhdXNpbmcgeW91ciBpbnN0YW5jZXMgdG8gYmUgcmVwbGFjZWQgd2hlbmV2ZXIgYSBuZXcgdmVyc2lvbiBvZiB0aGUgQU1JXG4gICAqIGlzIHJlbGVhc2VkLlxuICAgKlxuICAgKiBQYXNzIGB7IGNhY2hlZEluQ29udGV4dDogdHJ1ZSB9YCB0byBrZWVwIHRoZSBBTUkgSUQgc3RhYmxlLiBJZiB5b3UgZG8sIHlvdVxuICAgKiB3aWxsIGhhdmUgdG8gcmVtZW1iZXIgdG8gcGVyaW9kaWNhbGx5IGludmFsaWRhdGUgdGhlIGNvbnRleHQgdG8gcmVmcmVzaFxuICAgKiB0byB0aGUgbmV3ZXN0IEFNSSBJRC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbVNzbVBhcmFtZXRlcihcbiAgICBwYXJhbWV0ZXJOYW1lOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IFNzbVBhcmFtZXRlckltYWdlT3B0aW9ucyxcbiAgKTogSU1hY2hpbmVJbWFnZSB7XG4gICAgcmV0dXJuIG5ldyBHZW5lcmljU3NtUGFyYW1ldGVySW1hZ2UocGFyYW1ldGVyTmFtZSwgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogQW4gaW1hZ2Ugc3BlY2lmaWVkIGluIFNTTSBwYXJhbWV0ZXIgc3RvcmUgdGhhdCB3aWxsIGJlIHJlc29sdmVkIGF0IGluc3RhbmNlIGxhdW5jaCB0aW1lLlxuICAgKlxuICAgKiBUaGUgQU1JIElEIHdpbGwgYmUgcmVzb2x2ZWQgYXQgaW5zdGFuY2UgbGF1bmNoIHRpbWUuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbWV0ZXJOYW1lIFRoZSBuYW1lIG9mIFNTTSBwYXJhbWV0ZXIgY29udGFpbmluZyB0aGUgQU1JIElEXG4gICAqIEBwYXJhbSBvcHRpb25zIFRoZSBwYXJhbWV0ZXIgaW1hZ2Ugb3B0aW9uc1xuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hdXRvc2NhbGluZy9lYzIvdXNlcmd1aWRlL3VzaW5nLXN5c3RlbXMtbWFuYWdlci1wYXJhbWV0ZXJzLmh0bWxcbiAgICpcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVzb2x2ZVNzbVBhcmFtZXRlckF0TGF1bmNoKFxuICAgIHBhcmFtZXRlck5hbWU6IHN0cmluZyxcbiAgICBvcHRpb25zPzogU3NtUGFyYW1ldGVySW1hZ2VPcHRpb25zLFxuICApOiBJTWFjaGluZUltYWdlIHtcbiAgICByZXR1cm4gbmV3IFJlc29sdmVTc21QYXJhbWV0ZXJBdExhdW5jaEltYWdlKHBhcmFtZXRlck5hbWUsIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvb2sgdXAgYSBzaGFyZWQgTWFjaGluZSBJbWFnZSB1c2luZyBEZXNjcmliZUltYWdlc1xuICAgKlxuICAgKiBUaGUgbW9zdCByZWNlbnQsIGF2YWlsYWJsZSwgbGF1bmNoYWJsZSBpbWFnZSBtYXRjaGluZyB0aGUgZ2l2ZW4gZmlsdGVyXG4gICAqIGNyaXRlcmlhIHdpbGwgYmUgdXNlZC4gTG9va2luZyB1cCBBTUlzIG1heSB0YWtlIGEgbG9uZyB0aW1lOyBzcGVjaWZ5XG4gICAqIGFzIG1hbnkgZmlsdGVyIGNyaXRlcmlhIGFzIHBvc3NpYmxlIHRvIG5hcnJvdyBkb3duIHRoZSBzZWFyY2guXG4gICAqXG4gICAqIFRoZSBBTUkgc2VsZWN0ZWQgd2lsbCBiZSBjYWNoZWQgaW4gYGNkay5jb250ZXh0Lmpzb25gIGFuZCB0aGUgc2FtZSB2YWx1ZVxuICAgKiB3aWxsIGJlIHVzZWQgb24gZnV0dXJlIHJ1bnMuIFRvIHJlZnJlc2ggdGhlIEFNSSBsb29rdXAsIHlvdSB3aWxsIGhhdmUgdG9cbiAgICogZXZpY3QgdGhlIHZhbHVlIGZyb20gdGhlIGNhY2hlIHVzaW5nIHRoZSBgY2RrIGNvbnRleHRgIGNvbW1hbmQuIFNlZVxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2RrL2xhdGVzdC9ndWlkZS9jb250ZXh0Lmh0bWwgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gICAqXG4gICAqIFRoaXMgZnVuY3Rpb24gY2FuIG5vdCBiZSB1c2VkIGluIGVudmlyb25tZW50LWFnbm9zdGljIHN0YWNrcy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbG9va3VwKHByb3BzOiBMb29rdXBNYWNoaW5lSW1hZ2VQcm9wcyk6IElNYWNoaW5lSW1hZ2Uge1xuICAgIHJldHVybiBuZXcgTG9va3VwTWFjaGluZUltYWdlKHByb3BzKTtcbiAgfVxufVxuXG4vKipcbiAqIFNlbGVjdCB0aGUgaW1hZ2UgYmFzZWQgb24gYSBnaXZlbiBTU00gcGFyYW1ldGVyIGF0IGRlcGxveW1lbnQgdGltZSBvZiB0aGUgQ2xvdWRGb3JtYXRpb24gU3RhY2suXG4gKlxuICogVGhpcyBNYWNoaW5lIEltYWdlIGF1dG9tYXRpY2FsbHkgdXBkYXRlcyB0byB0aGUgbGF0ZXN0IHZlcnNpb24gb24gZXZlcnlcbiAqIGRlcGxveW1lbnQuIEJlIGF3YXJlIHRoaXMgd2lsbCBjYXVzZSB5b3VyIGluc3RhbmNlcyB0byBiZSByZXBsYWNlZCB3aGVuIGFcbiAqIG5ldyB2ZXJzaW9uIG9mIHRoZSBpbWFnZSBiZWNvbWVzIGF2YWlsYWJsZS4gRG8gbm90IHN0b3JlIHN0YXRlZnVsIGluZm9ybWF0aW9uXG4gKiBvbiB0aGUgaW5zdGFuY2UgaWYgeW91IGFyZSB1c2luZyB0aGlzIGltYWdlLlxuICpcbiAqIFRoZSBBTUkgSUQgaXMgc2VsZWN0ZWQgdXNpbmcgdGhlIHZhbHVlcyBwdWJsaXNoZWQgdG8gdGhlIFNTTSBwYXJhbWV0ZXIgc3RvcmUuXG4gKi9cbmV4cG9ydCBjbGFzcyBHZW5lcmljU1NNUGFyYW1ldGVySW1hZ2UgaW1wbGVtZW50cyBJTWFjaGluZUltYWdlIHtcbiAgLy8gRklYTUU6IHRoaXMgY2xhc3Mgb3VnaHQgdG8gYmUgYEBkZXByZWNhdGVkYCBhbmQgcmVtb3ZlZCBmcm9tIHYyLCBidXQgdGhhdFxuICAvLyBpcyBjYXVzaW5nIGJ1aWxkIGZhaWx1cmUgcmlnaHQgbm93LiBSZWY6IGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvanNpaS9pc3N1ZXMvMzAyNVxuICAvLyBALWRlcHJlY2F0ZWQgVXNlIGBNYWNoaW5lSW1hZ2UuZnJvbVNzbVBhcmFtZXRlcigpYCBpbnN0ZWFkXG5cbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIFNTTSBwYXJhbWV0ZXIgd2UncmUgbG9va2luZyB1cFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHBhcmFtZXRlck5hbWU6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwYXJhbWV0ZXJOYW1lOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSByZWFkb25seSBvczogT3BlcmF0aW5nU3lzdGVtVHlwZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHVzZXJEYXRhPzogVXNlckRhdGEsXG4gICkge1xuICAgIHRoaXMucGFyYW1ldGVyTmFtZSA9IHBhcmFtZXRlck5hbWU7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBpbWFnZSB0byB1c2UgaW4gdGhlIGdpdmVuIGNvbnRleHRcbiAgICovXG4gIHB1YmxpYyBnZXRJbWFnZShzY29wZTogQ29uc3RydWN0KTogTWFjaGluZUltYWdlQ29uZmlnIHtcbiAgICBjb25zdCBhbWkgPSBzc20uU3RyaW5nUGFyYW1ldGVyLnZhbHVlRm9yVHlwZWRTdHJpbmdQYXJhbWV0ZXJWMihcbiAgICAgIHNjb3BlLFxuICAgICAgdGhpcy5wYXJhbWV0ZXJOYW1lLFxuICAgICAgc3NtLlBhcmFtZXRlclZhbHVlVHlwZS5BV1NfRUMyX0lNQUdFX0lELFxuICAgICk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGltYWdlSWQ6IGFtaSxcbiAgICAgIG9zVHlwZTogdGhpcy5vcyxcbiAgICAgIHVzZXJEYXRhOlxuICAgICAgICB0aGlzLnVzZXJEYXRhID8/XG4gICAgICAgICh0aGlzLm9zID09PSBPcGVyYXRpbmdTeXN0ZW1UeXBlLldJTkRPV1NcbiAgICAgICAgICA/IFVzZXJEYXRhLmZvcldpbmRvd3MoKVxuICAgICAgICAgIDogVXNlckRhdGEuZm9yTGludXgoKSksXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIFNlbGVjdCB0aGUgaW1hZ2UgYmFzZWQgb24gYSBnaXZlbiBTU00gcGFyYW1ldGVyIGF0IGluc3RhbmNlIGxhdW5jaCB0aW1lLlxuICpcbiAqIFRoaXMgTWFjaGluZSBJbWFnZSBjb21lcyB3aXRoIGFuIGltYWdlSWQgYXMgYHJlc29sdmU6c3NtOnBhcmFtZXRlci1uYW1lYCBvciBgcmVzb2x2ZTpzc206cGFyYW1ldGVyLW5hbWU6dmVyc2lvbmAgZm9ybWF0XG4gKiBhcyBkZXNjcmliZWQgaW4gdGhlIGRvY3VtZW50OlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2F1dG9zY2FsaW5nL2VjMi91c2VyZ3VpZGUvdXNpbmctc3lzdGVtcy1tYW5hZ2VyLXBhcmFtZXRlcnMuaHRtbFxuICpcbiAqIFRoZSBBTUkgSUQgd291bGQgYmUgc2VsZWN0ZWQgYXQgaW5zdGFuY2UgbGF1bmNoIHRpbWUuXG4gKi9cbmV4cG9ydCBjbGFzcyBSZXNvbHZlU3NtUGFyYW1ldGVyQXRMYXVuY2hJbWFnZSBpbXBsZW1lbnRzIElNYWNoaW5lSW1hZ2Uge1xuICAvKipcbiAgICogTmFtZSBvZiB0aGUgU1NNIHBhcmFtZXRlciB3ZSdyZSBsb29raW5nIHVwXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcGFyYW1ldGVyTmFtZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHBhcmFtZXRlck5hbWU6IHN0cmluZyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHByb3BzOiBTc21QYXJhbWV0ZXJJbWFnZU9wdGlvbnMgPSB7fSxcbiAgKSB7XG4gICAgdGhpcy5wYXJhbWV0ZXJOYW1lID0gcGFyYW1ldGVyTmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGltYWdlIHRvIHVzZSBpbiB0aGUgZ2l2ZW4gY29udGV4dFxuICAgKi9cbiAgcHVibGljIGdldEltYWdlKF86IENvbnN0cnVjdCk6IE1hY2hpbmVJbWFnZUNvbmZpZyB7XG4gICAgY29uc3QgdmVyc2lvblN0cmluZyA9IHRoaXMucHJvcHMucGFyYW1ldGVyVmVyc2lvblxuICAgICAgPyBgOiR7dGhpcy5wcm9wcy5wYXJhbWV0ZXJWZXJzaW9ufWBcbiAgICAgIDogXCJcIjtcbiAgICBjb25zdCBvc1R5cGUgPSB0aGlzLnByb3BzLm9zID8/IE9wZXJhdGluZ1N5c3RlbVR5cGUuTElOVVg7XG4gICAgcmV0dXJuIHtcbiAgICAgIGltYWdlSWQ6IGByZXNvbHZlOnNzbToke3RoaXMucGFyYW1ldGVyTmFtZX0ke3ZlcnNpb25TdHJpbmd9YCxcbiAgICAgIG9zVHlwZSxcbiAgICAgIHVzZXJEYXRhOlxuICAgICAgICB0aGlzLnByb3BzLnVzZXJEYXRhID8/XG4gICAgICAgIChvc1R5cGUgPT09IE9wZXJhdGluZ1N5c3RlbVR5cGUuV0lORE9XU1xuICAgICAgICAgID8gVXNlckRhdGEuZm9yV2luZG93cygpXG4gICAgICAgICAgOiBVc2VyRGF0YS5mb3JMaW51eCgpKSxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgR2VuZXJpY1NzbVBhcmFtZXRlckltYWdlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3NtUGFyYW1ldGVySW1hZ2VPcHRpb25zIHtcbiAgLyoqXG4gICAqIE9wZXJhdGluZyBzeXN0ZW1cbiAgICpcbiAgICogQGRlZmF1bHQgT3BlcmF0aW5nU3lzdGVtVHlwZS5MSU5VWFxuICAgKi9cbiAgcmVhZG9ubHkgb3M/OiBPcGVyYXRpbmdTeXN0ZW1UeXBlO1xuXG4gIC8qKlxuICAgKiBDdXN0b20gVXNlckRhdGFcbiAgICpcbiAgICogQGRlZmF1bHQgLSBVc2VyRGF0YSBhcHByb3ByaWF0ZSBmb3IgdGhlIE9TXG4gICAqL1xuICByZWFkb25seSB1c2VyRGF0YT86IFVzZXJEYXRhO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBBTUkgSUQgaXMgY2FjaGVkIHRvIGJlIHN0YWJsZSBiZXR3ZWVuIGRlcGxveW1lbnRzXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIHRoZSBuZXdlc3QgaW1hZ2UgaXMgdXNlZCBvbiBlYWNoIGRlcGxveW1lbnQuIFRoaXMgd2lsbCBjYXVzZVxuICAgKiBpbnN0YW5jZXMgdG8gYmUgcmVwbGFjZWQgd2hlbmV2ZXIgYSBuZXcgdmVyc2lvbiBpcyByZWxlYXNlZCwgYW5kIG1heSBjYXVzZVxuICAgKiBkb3dudGltZSBpZiB0aGVyZSBhcmVuJ3QgZW5vdWdoIHJ1bm5pbmcgaW5zdGFuY2VzIGluIHRoZSBBdXRvU2NhbGluZ0dyb3VwXG4gICAqIHRvIHJlc2NoZWR1bGUgdGhlIHRhc2tzIG9uLlxuICAgKlxuICAgKiBJZiBzZXQgdG8gdHJ1ZSwgdGhlIEFNSSBJRCB3aWxsIGJlIGNhY2hlZCBpbiBgY2RrLmNvbnRleHQuanNvbmAgYW5kIHRoZVxuICAgKiBzYW1lIHZhbHVlIHdpbGwgYmUgdXNlZCBvbiBmdXR1cmUgcnVucy4gWW91ciBpbnN0YW5jZXMgd2lsbCBub3QgYmUgcmVwbGFjZWRcbiAgICogYnV0IHlvdXIgQU1JIHZlcnNpb24gd2lsbCBncm93IG9sZCBvdmVyIHRpbWUuIFRvIHJlZnJlc2ggdGhlIEFNSSBsb29rdXAsXG4gICAqIHlvdSB3aWxsIGhhdmUgdG8gZXZpY3QgdGhlIHZhbHVlIGZyb20gdGhlIGNhY2hlIHVzaW5nIHRoZSBgY2RrIGNvbnRleHRgXG4gICAqIGNvbW1hbmQuIFNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2RrL2xhdGVzdC9ndWlkZS9jb250ZXh0Lmh0bWwgZm9yXG4gICAqIG1vcmUgaW5mb3JtYXRpb24uXG4gICAqXG4gICAqIENhbiBub3QgYmUgc2V0IHRvIGB0cnVlYCBpbiBlbnZpcm9ubWVudC1hZ25vc3RpYyBzdGFja3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBjYWNoZWRJbkNvbnRleHQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBvZiB0aGUgU1NNIHBhcmFtZXRlci5cbiAgICpcbiAgICogQGRlZmF1bHQgbm8gdmVyc2lvbiBzcGVjaWZpZWQuXG4gICAqL1xuICByZWFkb25seSBwYXJhbWV0ZXJWZXJzaW9uPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFNlbGVjdCB0aGUgaW1hZ2UgYmFzZWQgb24gYSBnaXZlbiBTU00gcGFyYW1ldGVyIGF0IGRlcGxveW1lbnQgdGltZSBvZiB0aGUgQ2xvdWRGb3JtYXRpb24gU3RhY2suXG4gKlxuICogVGhpcyBNYWNoaW5lIEltYWdlIGF1dG9tYXRpY2FsbHkgdXBkYXRlcyB0byB0aGUgbGF0ZXN0IHZlcnNpb24gb24gZXZlcnlcbiAqIGRlcGxveW1lbnQuIEJlIGF3YXJlIHRoaXMgd2lsbCBjYXVzZSB5b3VyIGluc3RhbmNlcyB0byBiZSByZXBsYWNlZCB3aGVuIGFcbiAqIG5ldyB2ZXJzaW9uIG9mIHRoZSBpbWFnZSBiZWNvbWVzIGF2YWlsYWJsZS4gRG8gbm90IHN0b3JlIHN0YXRlZnVsIGluZm9ybWF0aW9uXG4gKiBvbiB0aGUgaW5zdGFuY2UgaWYgeW91IGFyZSB1c2luZyB0aGlzIGltYWdlLlxuICpcbiAqIFRoZSBBTUkgSUQgaXMgc2VsZWN0ZWQgdXNpbmcgdGhlIHZhbHVlcyBwdWJsaXNoZWQgdG8gdGhlIFNTTSBwYXJhbWV0ZXIgc3RvcmUuXG4gKi9cbmNsYXNzIEdlbmVyaWNTc21QYXJhbWV0ZXJJbWFnZSBpbXBsZW1lbnRzIElNYWNoaW5lSW1hZ2Uge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBhcmFtZXRlck5hbWU6IHN0cmluZyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHByb3BzOiBTc21QYXJhbWV0ZXJJbWFnZU9wdGlvbnMgPSB7fSxcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGltYWdlIHRvIHVzZSBpbiB0aGUgZ2l2ZW4gY29udGV4dFxuICAgKi9cbiAgcHVibGljIGdldEltYWdlKHNjb3BlOiBDb25zdHJ1Y3QpOiBNYWNoaW5lSW1hZ2VDb25maWcge1xuICAgIGNvbnN0IGltYWdlSWQgPSBsb29rdXBJbWFnZShcbiAgICAgIHNjb3BlLFxuICAgICAgdGhpcy5wcm9wcy5jYWNoZWRJbkNvbnRleHQsXG4gICAgICB0aGlzLnBhcmFtZXRlck5hbWUsXG4gICAgKTtcblxuICAgIGNvbnN0IG9zVHlwZSA9IHRoaXMucHJvcHMub3MgPz8gT3BlcmF0aW5nU3lzdGVtVHlwZS5MSU5VWDtcbiAgICByZXR1cm4ge1xuICAgICAgaW1hZ2VJZCxcbiAgICAgIG9zVHlwZSxcbiAgICAgIHVzZXJEYXRhOlxuICAgICAgICB0aGlzLnByb3BzLnVzZXJEYXRhID8/XG4gICAgICAgIChvc1R5cGUgPT09IE9wZXJhdGluZ1N5c3RlbVR5cGUuV0lORE9XU1xuICAgICAgICAgID8gVXNlckRhdGEuZm9yV2luZG93cygpXG4gICAgICAgICAgOiBVc2VyRGF0YS5mb3JMaW51eCgpKSxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBXaW5kb3dzSW1hZ2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXaW5kb3dzSW1hZ2VQcm9wcyB7XG4gIC8qKlxuICAgKiBJbml0aWFsIHVzZXIgZGF0YVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEVtcHR5IFVzZXJEYXRhIGZvciBXaW5kb3dzIG1hY2hpbmVzXG4gICAqL1xuICByZWFkb25seSB1c2VyRGF0YT86IFVzZXJEYXRhO1xufVxuXG4vKipcbiAqIFNlbGVjdCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhlIGluZGljYXRlZCBXaW5kb3dzIHZlcnNpb25cbiAqXG4gKiBUaGlzIE1hY2hpbmUgSW1hZ2UgYXV0b21hdGljYWxseSB1cGRhdGVzIHRvIHRoZSBsYXRlc3QgdmVyc2lvbiBvbiBldmVyeVxuICogZGVwbG95bWVudC4gQmUgYXdhcmUgdGhpcyB3aWxsIGNhdXNlIHlvdXIgaW5zdGFuY2VzIHRvIGJlIHJlcGxhY2VkIHdoZW4gYVxuICogbmV3IHZlcnNpb24gb2YgdGhlIGltYWdlIGJlY29tZXMgYXZhaWxhYmxlLiBEbyBub3Qgc3RvcmUgc3RhdGVmdWwgaW5mb3JtYXRpb25cbiAqIG9uIHRoZSBpbnN0YW5jZSBpZiB5b3UgYXJlIHVzaW5nIHRoaXMgaW1hZ2UuXG4gKlxuICogVGhlIEFNSSBJRCBpcyBzZWxlY3RlZCB1c2luZyB0aGUgdmFsdWVzIHB1Ymxpc2hlZCB0byB0aGUgU1NNIHBhcmFtZXRlciBzdG9yZS5cbiAqXG4gKiBodHRwczovL2F3cy5hbWF6b24uY29tL2Jsb2dzL210L3F1ZXJ5LWZvci10aGUtbGF0ZXN0LXdpbmRvd3MtYW1pLXVzaW5nLXN5c3RlbXMtbWFuYWdlci1wYXJhbWV0ZXItc3RvcmUvXG4gKi9cbmV4cG9ydCBjbGFzcyBXaW5kb3dzSW1hZ2UgZXh0ZW5kcyBHZW5lcmljU1NNUGFyYW1ldGVySW1hZ2Uge1xuICBwcml2YXRlIHN0YXRpYyBERVBSRUNBVEVEX1ZFUlNJT05fTkFNRV9NQVA6IFBhcnRpYWw8XG4gICAgUmVjb3JkPFdpbmRvd3NWZXJzaW9uLCBXaW5kb3dzVmVyc2lvbj5cbiAgPiA9IHtcbiAgICBbV2luZG93c1ZlcnNpb24uV0lORE9XU19TRVJWRVJfMjAxNl9HRVJNQUxfRlVMTF9CQVNFXTpcbiAgICAgIFdpbmRvd3NWZXJzaW9uLldJTkRPV1NfU0VSVkVSXzIwMTZfR0VSTUFOX0ZVTExfQkFTRSxcbiAgICBbV2luZG93c1ZlcnNpb24uV0lORE9XU19TRVJWRVJfMjAxMl9SMl9TUDFfUE9SVFVHRVNFX0JSQVpJTF82NEJJVF9DT1JFXTpcbiAgICAgIFdpbmRvd3NWZXJzaW9uLldJTkRPV1NfU0VSVkVSXzIwMTJfUjJfU1AxX1BPUlRVR1VFU0VfQlJBWklMXzY0QklUX0NPUkUsXG4gICAgW1dpbmRvd3NWZXJzaW9uLldJTkRPV1NfU0VSVkVSXzIwMTZfUE9SVFVHRVNFX1BPUlRVR0FMX0ZVTExfQkFTRV06XG4gICAgICBXaW5kb3dzVmVyc2lvbi5XSU5ET1dTX1NFUlZFUl8yMDE2X1BPUlRVR1VFU0VfUE9SVFVHQUxfRlVMTF9CQVNFLFxuICAgIFtXaW5kb3dzVmVyc2lvbi5XSU5ET1dTX1NFUlZFUl8yMDEyX1IyX1JUTV9QT1JUVUdFU0VfQlJBWklMXzY0QklUX0JBU0VdOlxuICAgICAgV2luZG93c1ZlcnNpb24uV0lORE9XU19TRVJWRVJfMjAxMl9SMl9SVE1fUE9SVFVHVUVTRV9CUkFaSUxfNjRCSVRfQkFTRSxcbiAgICBbV2luZG93c1ZlcnNpb24uV0lORE9XU19TRVJWRVJfMjAxMl9SMl9SVE1fUE9SVFVHRVNFX1BPUlRVR0FMXzY0QklUX0JBU0VdOlxuICAgICAgV2luZG93c1ZlcnNpb24uV0lORE9XU19TRVJWRVJfMjAxMl9SMl9SVE1fUE9SVFVHVUVTRV9QT1JUVUdBTF82NEJJVF9CQVNFLFxuICAgIFtXaW5kb3dzVmVyc2lvbi5XSU5ET1dTX1NFUlZFUl8yMDE2X1BPUlRVR0VTRV9CUkFaSUxfRlVMTF9CQVNFXTpcbiAgICAgIFdpbmRvd3NWZXJzaW9uLldJTkRPV1NfU0VSVkVSXzIwMTZfUE9SVFVHVUVTRV9CUkFaSUxfRlVMTF9CQVNFLFxuICAgIFtXaW5kb3dzVmVyc2lvbi5XSU5ET1dTX1NFUlZFUl8yMDEyX1NQMl9QT1JUVUdFU0VfQlJBWklMXzY0QklUX0JBU0VdOlxuICAgICAgV2luZG93c1ZlcnNpb24uV0lORE9XU19TRVJWRVJfMjAxMl9TUDJfUE9SVFVHVUVTRV9CUkFaSUxfNjRCSVRfQkFTRSxcbiAgICBbV2luZG93c1ZlcnNpb24uV0lORE9XU19TRVJWRVJfMjAxMl9SVE1fUE9SVFVHRVNFX0JSQVpJTF82NEJJVF9CQVNFXTpcbiAgICAgIFdpbmRvd3NWZXJzaW9uLldJTkRPV1NfU0VSVkVSXzIwMTJfUlRNX1BPUlRVR1VFU0VfQlJBWklMXzY0QklUX0JBU0UsXG4gICAgW1dpbmRvd3NWZXJzaW9uLldJTkRPV1NfU0VSVkVSXzIwMDhfUjJfU1AxX1BPUlRVR0VTRV9CUkFaSUxfNjRCSVRfQkFTRV06XG4gICAgICBXaW5kb3dzVmVyc2lvbi5XSU5ET1dTX1NFUlZFUl8yMDA4X1IyX1NQMV9QT1JUVUdVRVNFX0JSQVpJTF82NEJJVF9CQVNFLFxuICAgIFtXaW5kb3dzVmVyc2lvbi5XSU5ET1dTX1NFUlZFUl8yMDA4X1NQMl9QT1JUVUdFU0VfQlJBWklMXzMyQklUX0JBU0VdOlxuICAgICAgV2luZG93c1ZlcnNpb24uV0lORE9XU19TRVJWRVJfMjAwOF9TUDJfUE9SVFVHVUVTRV9CUkFaSUxfMzJCSVRfQkFTRSxcbiAgICBbV2luZG93c1ZlcnNpb24uV0lORE9XU19TRVJWRVJfMjAxMl9SVE1fUE9SVFVHRVNFX1BPUlRVR0FMXzY0QklUX0JBU0VdOlxuICAgICAgV2luZG93c1ZlcnNpb24uV0lORE9XU19TRVJWRVJfMjAxMl9SVE1fUE9SVFVHVUVTRV9QT1JUVUdBTF82NEJJVF9CQVNFLFxuICAgIFtXaW5kb3dzVmVyc2lvbi5XSU5ET1dTX1NFUlZFUl8yMDE5X1BPUlRVR0VTRV9CUkFaSUxfRlVMTF9CQVNFXTpcbiAgICAgIFdpbmRvd3NWZXJzaW9uLldJTkRPV1NfU0VSVkVSXzIwMTlfUE9SVFVHVUVTRV9CUkFaSUxfRlVMTF9CQVNFLFxuICAgIFtXaW5kb3dzVmVyc2lvbi5XSU5ET1dTX1NFUlZFUl8yMDE5X1BPUlRVR0VTRV9QT1JUVUdBTF9GVUxMX0JBU0VdOlxuICAgICAgV2luZG93c1ZlcnNpb24uV0lORE9XU19TRVJWRVJfMjAxOV9QT1JUVUdVRVNFX1BPUlRVR0FMX0ZVTExfQkFTRSxcbiAgfTtcbiAgY29uc3RydWN0b3IodmVyc2lvbjogV2luZG93c1ZlcnNpb24sIHByb3BzOiBXaW5kb3dzSW1hZ2VQcm9wcyA9IHt9KSB7XG4gICAgY29uc3Qgbm9uRGVwcmVjYXRlZFZlcnNpb25OYW1lID1cbiAgICAgIFdpbmRvd3NJbWFnZS5ERVBSRUNBVEVEX1ZFUlNJT05fTkFNRV9NQVBbdmVyc2lvbl0gPz8gdmVyc2lvbjtcbiAgICBzdXBlcihcbiAgICAgIFwiL2F3cy9zZXJ2aWNlL2FtaS13aW5kb3dzLWxhdGVzdC9cIiArIG5vbkRlcHJlY2F0ZWRWZXJzaW9uTmFtZSxcbiAgICAgIE9wZXJhdGluZ1N5c3RlbVR5cGUuV0lORE9XUyxcbiAgICAgIHByb3BzLnVzZXJEYXRhLFxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBBbWF6b24gTGludXggaW1hZ2UgcHJvcGVydGllc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEFtYXpvbkxpbnV4SW1hZ2VQcm9wcyB7XG4gIC8qKlxuICAgKiBXaGF0IGdlbmVyYXRpb24gb2YgQW1hem9uIExpbnV4IHRvIHVzZVxuICAgKlxuICAgKiBAZGVmYXVsdCBBbWF6b25MaW51eFxuICAgKi9cbiAgcmVhZG9ubHkgZ2VuZXJhdGlvbj86IEFtYXpvbkxpbnV4R2VuZXJhdGlvbjtcblxuICAvKipcbiAgICogV2hhdCBlZGl0aW9uIG9mIEFtYXpvbiBMaW51eCB0byB1c2VcbiAgICpcbiAgICogQGRlZmF1bHQgU3RhbmRhcmRcbiAgICovXG4gIHJlYWRvbmx5IGVkaXRpb24/OiBBbWF6b25MaW51eEVkaXRpb247XG5cbiAgLyoqXG4gICAqIFdoYXQga2VybmVsIHZlcnNpb24gb2YgQW1hem9uIExpbnV4IHRvIHVzZVxuICAgKlxuICAgKiBAZGVmYXVsdCAtXG4gICAqL1xuICByZWFkb25seSBrZXJuZWw/OiBBbWF6b25MaW51eEtlcm5lbDtcblxuICAvKipcbiAgICogV2hhdCBzdG9yYWdlIGJhY2tlZCBpbWFnZSB0byB1c2VcbiAgICpcbiAgICogQGRlZmF1bHQgR2VuZXJhbFB1cnBvc2VcbiAgICovXG4gIHJlYWRvbmx5IHN0b3JhZ2U/OiBBbWF6b25MaW51eFN0b3JhZ2U7XG5cbiAgLyoqXG4gICAqIEluaXRpYWwgdXNlciBkYXRhXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gRW1wdHkgVXNlckRhdGEgZm9yIExpbnV4IG1hY2hpbmVzXG4gICAqL1xuICByZWFkb25seSB1c2VyRGF0YT86IFVzZXJEYXRhO1xuXG4gIC8qKlxuICAgKiBDUFUgVHlwZVxuICAgKlxuICAgKiBAZGVmYXVsdCBYODZfNjRcbiAgICovXG4gIHJlYWRvbmx5IGNwdVR5cGU/OiBBbWF6b25MaW51eENwdVR5cGU7XG5cbiAgLyoqXG4gICAqIFZpcnR1YWxpemF0aW9uIHR5cGVcbiAgICpcbiAgICogQGRlZmF1bHQgSFZNXG4gICAqL1xuICByZWFkb25seSB2aXJ0dWFsaXphdGlvbj86IEFtYXpvbkxpbnV4VmlydDtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgQU1JIElEIGlzIGNhY2hlZCB0byBiZSBzdGFibGUgYmV0d2VlbiBkZXBsb3ltZW50c1xuICAgKlxuICAgKiBCeSBkZWZhdWx0LCB0aGUgbmV3ZXN0IGltYWdlIGlzIHVzZWQgb24gZWFjaCBkZXBsb3ltZW50LiBUaGlzIHdpbGwgY2F1c2VcbiAgICogaW5zdGFuY2VzIHRvIGJlIHJlcGxhY2VkIHdoZW5ldmVyIGEgbmV3IHZlcnNpb24gaXMgcmVsZWFzZWQsIGFuZCBtYXkgY2F1c2VcbiAgICogZG93bnRpbWUgaWYgdGhlcmUgYXJlbid0IGVub3VnaCBydW5uaW5nIGluc3RhbmNlcyBpbiB0aGUgQXV0b1NjYWxpbmdHcm91cFxuICAgKiB0byByZXNjaGVkdWxlIHRoZSB0YXNrcyBvbi5cbiAgICpcbiAgICogSWYgc2V0IHRvIHRydWUsIHRoZSBBTUkgSUQgd2lsbCBiZSBjYWNoZWQgaW4gYGNkay5jb250ZXh0Lmpzb25gIGFuZCB0aGVcbiAgICogc2FtZSB2YWx1ZSB3aWxsIGJlIHVzZWQgb24gZnV0dXJlIHJ1bnMuIFlvdXIgaW5zdGFuY2VzIHdpbGwgbm90IGJlIHJlcGxhY2VkXG4gICAqIGJ1dCB5b3VyIEFNSSB2ZXJzaW9uIHdpbGwgZ3JvdyBvbGQgb3ZlciB0aW1lLiBUbyByZWZyZXNoIHRoZSBBTUkgbG9va3VwLFxuICAgKiB5b3Ugd2lsbCBoYXZlIHRvIGV2aWN0IHRoZSB2YWx1ZSBmcm9tIHRoZSBjYWNoZSB1c2luZyB0aGUgYGNkayBjb250ZXh0YFxuICAgKiBjb21tYW5kLiBTZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nkay9sYXRlc3QvZ3VpZGUvY29udGV4dC5odG1sIGZvclxuICAgKiBtb3JlIGluZm9ybWF0aW9uLlxuICAgKlxuICAgKiBDYW4gbm90IGJlIHNldCB0byBgdHJ1ZWAgaW4gZW52aXJvbm1lbnQtYWdub3N0aWMgc3RhY2tzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgY2FjaGVkSW5Db250ZXh0PzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBTZWxlY3RzIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBBbWF6b24gTGludXhcbiAqXG4gKiBUaGlzIE1hY2hpbmUgSW1hZ2UgYXV0b21hdGljYWxseSB1cGRhdGVzIHRvIHRoZSBsYXRlc3QgdmVyc2lvbiBvbiBldmVyeVxuICogZGVwbG95bWVudC4gQmUgYXdhcmUgdGhpcyB3aWxsIGNhdXNlIHlvdXIgaW5zdGFuY2VzIHRvIGJlIHJlcGxhY2VkIHdoZW4gYVxuICogbmV3IHZlcnNpb24gb2YgdGhlIGltYWdlIGJlY29tZXMgYXZhaWxhYmxlLiBEbyBub3Qgc3RvcmUgc3RhdGVmdWwgaW5mb3JtYXRpb25cbiAqIG9uIHRoZSBpbnN0YW5jZSBpZiB5b3UgYXJlIHVzaW5nIHRoaXMgaW1hZ2UuXG4gKlxuICogVGhlIEFNSSBJRCBpcyBzZWxlY3RlZCB1c2luZyB0aGUgdmFsdWVzIHB1Ymxpc2hlZCB0byB0aGUgU1NNIHBhcmFtZXRlciBzdG9yZS5cbiAqL1xuZXhwb3J0IGNsYXNzIEFtYXpvbkxpbnV4SW1hZ2UgZXh0ZW5kcyBHZW5lcmljU1NNUGFyYW1ldGVySW1hZ2Uge1xuICAvKipcbiAgICogUmV0dXJuIHRoZSBTU00gcGFyYW1ldGVyIG5hbWUgdGhhdCB3aWxsIGNvbnRhaW4gdGhlIEFtYXpvbiBMaW51eCBpbWFnZSB3aXRoIHRoZSBnaXZlbiBhdHRyaWJ1dGVzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHNzbVBhcmFtZXRlck5hbWUocHJvcHM6IEFtYXpvbkxpbnV4SW1hZ2VQcm9wcyA9IHt9KSB7XG4gICAgY29uc3QgZ2VuZXJhdGlvbiA9XG4gICAgICAocHJvcHMgJiYgcHJvcHMuZ2VuZXJhdGlvbikgfHwgQW1hem9uTGludXhHZW5lcmF0aW9uLkFNQVpPTl9MSU5VWDtcbiAgICBjb25zdCBlZGl0aW9uID0gKHByb3BzICYmIHByb3BzLmVkaXRpb24pIHx8IEFtYXpvbkxpbnV4RWRpdGlvbi5TVEFOREFSRDtcbiAgICBjb25zdCBjcHUgPSAocHJvcHMgJiYgcHJvcHMuY3B1VHlwZSkgfHwgQW1hem9uTGludXhDcHVUeXBlLlg4Nl82NDtcbiAgICBsZXQga2VybmVsID0gKHByb3BzICYmIHByb3BzLmtlcm5lbCkgfHwgdW5kZWZpbmVkO1xuICAgIGxldCB2aXJ0dWFsaXphdGlvbjogQW1hem9uTGludXhWaXJ0IHwgdW5kZWZpbmVkO1xuICAgIGxldCBzdG9yYWdlOiBBbWF6b25MaW51eFN0b3JhZ2UgfCB1bmRlZmluZWQ7XG5cbiAgICBpZiAoZ2VuZXJhdGlvbiA9PT0gQW1hem9uTGludXhHZW5lcmF0aW9uLkFNQVpPTl9MSU5VWF8yMDIyKSB7XG4gICAgICBrZXJuZWwgPSBBbWF6b25MaW51eEtlcm5lbC5LRVJORUw1X1g7XG4gICAgICBpZiAocHJvcHMgJiYgcHJvcHMuc3RvcmFnZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgXCJTdG9yYWdlIHBhcmFtZXRlciBkb2VzIG5vdCBleGlzdCBpbiBTU00gcGFyYW1ldGVyIG5hbWUgZm9yIEFtYXpvbiBMaW51eCAyMDIyLlwiLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BzICYmIHByb3BzLnZpcnR1YWxpemF0aW9uKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBcIlZpcnR1YWxpemF0aW9uIHBhcmFtZXRlciBkb2VzIG5vdCBleGlzdCBpbiBTU00gcGFyYW1ldGVyIG5hbWUgZm9yIEFtYXpvbiBMaW51eCAyMDIyLlwiLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZ2VuZXJhdGlvbiA9PT0gQW1hem9uTGludXhHZW5lcmF0aW9uLkFNQVpPTl9MSU5VWF8yMDIzKSB7XG4gICAgICBrZXJuZWwgPSBBbWF6b25MaW51eEtlcm5lbC5LRVJORUw2XzE7XG4gICAgICBpZiAocHJvcHMgJiYgcHJvcHMuc3RvcmFnZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgXCJTdG9yYWdlIHBhcmFtZXRlciBkb2VzIG5vdCBleGlzdCBpbiBTU00gcGFyYW1ldGVyIG5hbWUgZm9yIEFtYXpvbiBMaW51eCAyMDIzLlwiLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BzICYmIHByb3BzLnZpcnR1YWxpemF0aW9uKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBcIlZpcnR1YWxpemF0aW9uIHBhcmFtZXRlciBkb2VzIG5vdCBleGlzdCBpbiBTU00gcGFyYW1ldGVyIG5hbWUgZm9yIEFtYXpvbiBMaW51eCAyMDIzLlwiLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2aXJ0dWFsaXphdGlvbiA9IChwcm9wcyAmJiBwcm9wcy52aXJ0dWFsaXphdGlvbikgfHwgQW1hem9uTGludXhWaXJ0LkhWTTtcbiAgICAgIHN0b3JhZ2UgPSAocHJvcHMgJiYgcHJvcHMuc3RvcmFnZSkgfHwgQW1hem9uTGludXhTdG9yYWdlLkdFTkVSQUxfUFVSUE9TRTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJ0czogQXJyYXk8c3RyaW5nIHwgdW5kZWZpbmVkPiA9IFtcbiAgICAgIGdlbmVyYXRpb24sXG4gICAgICBcImFtaVwiLFxuICAgICAgZWRpdGlvbiAhPT0gQW1hem9uTGludXhFZGl0aW9uLlNUQU5EQVJEID8gZWRpdGlvbiA6IHVuZGVmaW5lZCxcbiAgICAgIGtlcm5lbCxcbiAgICAgIHZpcnR1YWxpemF0aW9uLFxuICAgICAgY3B1LFxuICAgICAgc3RvcmFnZSxcbiAgICBdLmZpbHRlcigoeCkgPT4geCAhPT0gdW5kZWZpbmVkKTsgLy8gR2V0IHJpZCBvZiB1bmRlZmluZWRzXG5cbiAgICByZXR1cm4gXCIvYXdzL3NlcnZpY2UvYW1pLWFtYXpvbi1saW51eC1sYXRlc3QvXCIgKyBwYXJ0cy5qb2luKFwiLVwiKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgY2FjaGVkSW5Db250ZXh0OiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgcHJvcHM6IEFtYXpvbkxpbnV4SW1hZ2VQcm9wcyA9IHt9KSB7XG4gICAgc3VwZXIoXG4gICAgICBBbWF6b25MaW51eEltYWdlLnNzbVBhcmFtZXRlck5hbWUocHJvcHMpLFxuICAgICAgT3BlcmF0aW5nU3lzdGVtVHlwZS5MSU5VWCxcbiAgICAgIHByb3BzLnVzZXJEYXRhLFxuICAgICk7XG5cbiAgICB0aGlzLmNhY2hlZEluQ29udGV4dCA9IHByb3BzLmNhY2hlZEluQ29udGV4dCA/PyBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGltYWdlIHRvIHVzZSBpbiB0aGUgZ2l2ZW4gY29udGV4dFxuICAgKi9cbiAgcHVibGljIGdldEltYWdlKHNjb3BlOiBDb25zdHJ1Y3QpOiBNYWNoaW5lSW1hZ2VDb25maWcge1xuICAgIGNvbnN0IGltYWdlSWQgPSBsb29rdXBJbWFnZShcbiAgICAgIHNjb3BlLFxuICAgICAgdGhpcy5jYWNoZWRJbkNvbnRleHQsXG4gICAgICB0aGlzLnBhcmFtZXRlck5hbWUsXG4gICAgKTtcblxuICAgIGNvbnN0IG9zVHlwZSA9IE9wZXJhdGluZ1N5c3RlbVR5cGUuTElOVVg7XG4gICAgcmV0dXJuIHtcbiAgICAgIGltYWdlSWQsXG4gICAgICBvc1R5cGUsXG4gICAgICB1c2VyRGF0YTogdGhpcy5wcm9wcy51c2VyRGF0YSA/PyBVc2VyRGF0YS5mb3JMaW51eCgpLFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBBbWF6b24gTGludXggS2VybmVsXG4gKi9cbmV4cG9ydCBlbnVtIEFtYXpvbkxpbnV4S2VybmVsIHtcbiAgLyoqXG4gICAqIEtlcm5lbCB2ZXJzaW9uIDUuMTBcbiAgICovXG4gIEtFUk5FTDVfWCA9IFwia2VybmVsLTUuMTBcIixcblxuICAvKipcbiAgICogS2VybmVsIHZlcnNpb24gNi4xXG4gICAqL1xuICBLRVJORUw2XzEgPSBcImtlcm5lbC02LjFcIixcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIEdlbmVyaWNMaW51eEltYWdlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2VuZXJpY0xpbnV4SW1hZ2VQcm9wcyB7XG4gIC8qKlxuICAgKiBJbml0aWFsIHVzZXIgZGF0YVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEVtcHR5IFVzZXJEYXRhIGZvciBMaW51eCBtYWNoaW5lc1xuICAgKi9cbiAgcmVhZG9ubHkgdXNlckRhdGE/OiBVc2VyRGF0YTtcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIEdlbmVyaWNXaW5kb3dzSW1hZ2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZW5lcmljV2luZG93c0ltYWdlUHJvcHMge1xuICAvKipcbiAgICogSW5pdGlhbCB1c2VyIGRhdGFcbiAgICpcbiAgICogQGRlZmF1bHQgLSBFbXB0eSBVc2VyRGF0YSBmb3IgV2luZG93cyBtYWNoaW5lc1xuICAgKi9cbiAgcmVhZG9ubHkgdXNlckRhdGE/OiBVc2VyRGF0YTtcbn1cblxuLyoqXG4gKiBDb25zdHJ1Y3QgYSBMaW51eCBtYWNoaW5lIGltYWdlIGZyb20gYW4gQU1JIG1hcFxuICpcbiAqIExpbnV4IGltYWdlcyBJRHMgYXJlIG5vdCBwdWJsaXNoZWQgdG8gU1NNIHBhcmFtZXRlciBzdG9yZSB5ZXQsIHNvIHlvdSdsbCBoYXZlIHRvXG4gKiBtYW51YWxseSBzcGVjaWZ5IGFuIEFNSSBtYXAuXG4gKi9cbmV4cG9ydCBjbGFzcyBHZW5lcmljTGludXhJbWFnZSBpbXBsZW1lbnRzIElNYWNoaW5lSW1hZ2Uge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFtaU1hcDogeyBbcmVnaW9uOiBzdHJpbmddOiBzdHJpbmcgfSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHByb3BzOiBHZW5lcmljTGludXhJbWFnZVByb3BzID0ge30sXG4gICkge31cblxuICBwdWJsaWMgZ2V0SW1hZ2Uoc2NvcGU6IENvbnN0cnVjdCk6IE1hY2hpbmVJbWFnZUNvbmZpZyB7XG4gICAgY29uc3QgdXNlckRhdGEgPSB0aGlzLnByb3BzLnVzZXJEYXRhID8/IFVzZXJEYXRhLmZvckxpbnV4KCk7XG4gICAgY29uc3Qgb3NUeXBlID0gT3BlcmF0aW5nU3lzdGVtVHlwZS5MSU5VWDtcbiAgICBjb25zdCByZWdpb24gPSBBd3NTdGFjay5vZkF3c0NvbnN0cnVjdChzY29wZSkucmVnaW9uO1xuICAgIC8vIC8vIEdyaWQgc3RhY2tzIGFyZSBzaW5nbGUgcmVnaW9uLCByZWdpb24gaXMgYWx3YXlzIGtub3duXG4gICAgLy8gaWYgKFRva2VuLmlzVW5yZXNvbHZlZChyZWdpb24pKSB7XG4gICAgLy8gICBjb25zdCBtYXBwaW5nOiB7IFtrMTogc3RyaW5nXTogeyBbazI6IHN0cmluZ106IGFueSB9IH0gPSB7fTtcbiAgICAvLyAgIGZvciAoY29uc3QgW3JnbiwgYW1pXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLmFtaU1hcCkpIHtcbiAgICAvLyAgICAgbWFwcGluZ1tyZ25dID0geyBhbWkgfTtcbiAgICAvLyAgIH1cbiAgICAvLyAgIGNvbnN0IGFtaU1hcCA9IG5ldyBUZXJyYWZvcm1Mb2NhbChzY29wZSwgXCJBbWlNYXBcIiwgeyBtYXBwaW5nIH0pO1xuICAgIC8vICAgcmV0dXJuIHtcbiAgICAvLyAgICAgaW1hZ2VJZDogRm4ubG9va3VwTmVzdGVkKGFtaU1hcCwgQXdzLlJFR0lPTiwgXCJhbWlcIiksXG4gICAgLy8gICAgIHVzZXJEYXRhLFxuICAgIC8vICAgICBvc1R5cGUsXG4gICAgLy8gICB9O1xuICAgIC8vIH1cbiAgICBjb25zdCBpbWFnZUlkID1cbiAgICAgIHJlZ2lvbiAhPT0gXCJ0ZXN0LXJlZ2lvblwiID8gdGhpcy5hbWlNYXBbcmVnaW9uXSA6IFwiYW1pLTEyMzQ1XCI7XG4gICAgaWYgKCFpbWFnZUlkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBVbmFibGUgdG8gZmluZCBBTUkgaW4gQU1JIG1hcDogbm8gQU1JIHNwZWNpZmllZCBmb3IgcmVnaW9uICcke3JlZ2lvbn0nYCxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBpbWFnZUlkLFxuICAgICAgdXNlckRhdGEsXG4gICAgICBvc1R5cGUsXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIENvbnN0cnVjdCBhIFdpbmRvd3MgbWFjaGluZSBpbWFnZSBmcm9tIGFuIEFNSSBtYXBcbiAqXG4gKiBBbGxvd3MgeW91IHRvIGNyZWF0ZSBhIGdlbmVyaWMgV2luZG93cyBFQzIgLCBtYW51YWxseSBzcGVjaWZ5IGFuIEFNSSBtYXAuXG4gKi9cbmV4cG9ydCBjbGFzcyBHZW5lcmljV2luZG93c0ltYWdlIGltcGxlbWVudHMgSU1hY2hpbmVJbWFnZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYW1pTWFwOiB7IFtyZWdpb246IHN0cmluZ106IHN0cmluZyB9LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcHJvcHM6IEdlbmVyaWNXaW5kb3dzSW1hZ2VQcm9wcyA9IHt9LFxuICApIHt9XG5cbiAgcHVibGljIGdldEltYWdlKHNjb3BlOiBDb25zdHJ1Y3QpOiBNYWNoaW5lSW1hZ2VDb25maWcge1xuICAgIGNvbnN0IHVzZXJEYXRhID0gdGhpcy5wcm9wcy51c2VyRGF0YSA/PyBVc2VyRGF0YS5mb3JXaW5kb3dzKCk7XG4gICAgY29uc3Qgb3NUeXBlID0gT3BlcmF0aW5nU3lzdGVtVHlwZS5XSU5ET1dTO1xuICAgIGNvbnN0IHJlZ2lvbiA9IEF3c1N0YWNrLm9mQXdzQ29uc3RydWN0KHNjb3BlKS5yZWdpb247XG4gICAgLy8gLy8gR3JpZCBzdGFja3MgYXJlIHNpbmdsZSByZWdpb24sIHJlZ2lvbiBpcyBhbHdheXMga25vd25cbiAgICAvLyBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKHJlZ2lvbikpIHtcbiAgICAvLyAgIGNvbnN0IG1hcHBpbmc6IHsgW2sxOiBzdHJpbmddOiB7IFtrMjogc3RyaW5nXTogYW55IH0gfSA9IHt9O1xuICAgIC8vICAgZm9yIChjb25zdCBbcmduLCBhbWldIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuYW1pTWFwKSkge1xuICAgIC8vICAgICBtYXBwaW5nW3Jnbl0gPSB7IGFtaSB9O1xuICAgIC8vICAgfVxuICAgIC8vICAgY29uc3QgYW1pTWFwID0gbmV3IFRlcnJhZm9ybUxvY2FsKHNjb3BlLCBcIkFtaU1hcFwiLCB7IG1hcHBpbmcgfSk7XG4gICAgLy8gICByZXR1cm4ge1xuICAgIC8vICAgICBpbWFnZUlkOiBGbi5sb29rdXBOZXN0ZWQoYW1pTWFwLCBBd3MuUkVHSU9OLCBcImFtaVwiKSxcbiAgICAvLyAgICAgdXNlckRhdGEsXG4gICAgLy8gICAgIG9zVHlwZSxcbiAgICAvLyAgIH07XG4gICAgLy8gfVxuICAgIGNvbnN0IGltYWdlSWQgPVxuICAgICAgcmVnaW9uICE9PSBcInRlc3QtcmVnaW9uXCIgPyB0aGlzLmFtaU1hcFtyZWdpb25dIDogXCJhbWktMTIzNDVcIjtcbiAgICBpZiAoIWltYWdlSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFVuYWJsZSB0byBmaW5kIEFNSSBpbiBBTUkgbWFwOiBubyBBTUkgc3BlY2lmaWVkIGZvciByZWdpb24gJyR7cmVnaW9ufSdgLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGltYWdlSWQsXG4gICAgICB1c2VyRGF0YSxcbiAgICAgIG9zVHlwZSxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogQSBtYWNoaW5lIGltYWdlIHdob3NlIEFNSSBJRCB3aWxsIGJlIHNlYXJjaGVkIHVzaW5nIERlc2NyaWJlSW1hZ2VzLlxuICpcbiAqIFRoZSBtb3N0IHJlY2VudCwgYXZhaWxhYmxlLCBsYXVuY2hhYmxlIGltYWdlIG1hdGNoaW5nIHRoZSBnaXZlbiBmaWx0ZXJcbiAqIGNyaXRlcmlhIHdpbGwgYmUgdXNlZC4gTG9va2luZyB1cCBBTUlzIG1heSB0YWtlIGEgbG9uZyB0aW1lOyBzcGVjaWZ5XG4gKiBhcyBtYW55IGZpbHRlciBjcml0ZXJpYSBhcyBwb3NzaWJsZSB0byBuYXJyb3cgZG93biB0aGUgc2VhcmNoLlxuICpcbiAqIFRoZSBBTUkgc2VsZWN0ZWQgd2lsbCBiZSBjYWNoZWQgaW4gYGdyaWQuY29udGV4dC5qc29uYCBhbmQgdGhlIHNhbWUgdmFsdWVcbiAqIHdpbGwgYmUgdXNlZCBvbiBmdXR1cmUgcnVucy4gVG8gcmVmcmVzaCB0aGUgQU1JIGxvb2t1cCwgeW91IHdpbGwgaGF2ZSB0b1xuICogZXZpY3QgdGhlIHZhbHVlIGZyb20gdGhlIGNhY2hlIHVzaW5nIHRoZSBgZ3JpZCBjb250ZXh0YCBjb21tYW5kLiBTZWVcbiAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jZGsvbGF0ZXN0L2d1aWRlL2NvbnRleHQuaHRtbCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIExvb2t1cE1hY2hpbmVJbWFnZSBpbXBsZW1lbnRzIElNYWNoaW5lSW1hZ2Uge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHByb3BzOiBMb29rdXBNYWNoaW5lSW1hZ2VQcm9wcykge31cblxuICBwdWJsaWMgZ2V0SW1hZ2Uoc2NvcGU6IENvbnN0cnVjdCk6IE1hY2hpbmVJbWFnZUNvbmZpZyB7XG4gICAgLy8gTmVlZCB0byBrbm93ICd3aW5kb3dzJyBvciBub3QgYmVmb3JlIGRvaW5nIHRoZSBxdWVyeSB0byByZXR1cm4gdGhlIHJpZ2h0XG4gICAgLy8gb3NUeXBlIGZvciB0aGUgZHVtbXkgdmFsdWUsIHNvIG1pZ2h0IGFzIHdlbGwgYWRkIGl0IHRvIHRoZSBmaWx0ZXIuXG4gICAgY29uc3QgZmlsdGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nW10gfCB1bmRlZmluZWQ+ID0ge1xuICAgICAgbmFtZTogW3RoaXMucHJvcHMubmFtZV0sXG4gICAgICBzdGF0ZTogW1wiYXZhaWxhYmxlXCJdLFxuICAgICAgXCJpbWFnZS10eXBlXCI6IFtcIm1hY2hpbmVcIl0sXG4gICAgICBwbGF0Zm9ybTogdGhpcy5wcm9wcy53aW5kb3dzID8gW1wid2luZG93c1wiXSA6IHVuZGVmaW5lZCxcbiAgICB9O1xuICAgIE9iamVjdC5hc3NpZ24oZmlsdGVycywgdGhpcy5wcm9wcy5maWx0ZXJzKTtcblxuICAgIGxldCB1bmlxdWVJZCA9IFwiQW1pXCI7XG4gICAgbGV0IGNvdW50ZXIgPSAxO1xuICAgIHdoaWxlIChzY29wZS5ub2RlLnRyeUZpbmRDaGlsZCh1bmlxdWVJZCkpIHtcbiAgICAgIHVuaXF1ZUlkID0gYEFtaSR7Y291bnRlcisrfWA7XG4gICAgfVxuXG4gICAgY29uc3QgZGF0YVNvdXJjZSA9IG5ldyBkYXRhQXdzQW1pLkRhdGFBd3NBbWkoc2NvcGUsIHVuaXF1ZUlkLCB7XG4gICAgICBvd25lcnM6IHRoaXMucHJvcHMub3duZXJzLFxuICAgICAgZmlsdGVyOiBPYmplY3QuZW50cmllcyhmaWx0ZXJzKVxuICAgICAgICAuZmlsdGVyKChbX2tleSwgdmFsdWVzXSkgPT4gdmFsdWVzICE9PSB1bmRlZmluZWQpXG4gICAgICAgIC5tYXAoKFtuYW1lLCB2YWx1ZXNdKSA9PiAoe1xuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgdmFsdWVzOiB2YWx1ZXMgYXMgc3RyaW5nW10sXG4gICAgICAgIH0pKSxcbiAgICB9KTtcbiAgICBjb25zdCB2YWx1ZSA9IGRhdGFTb3VyY2UuaWQ7XG5cbiAgICAvLyAvLyBUT0RPOiBVc2UgR3JpZCBhcyBjb250ZXh0UHJvdmlkZXJcbiAgICAvLyBjb25zdCB2YWx1ZSA9IENvbnRleHRQcm92aWRlci5nZXRWYWx1ZShzY29wZSwge1xuICAgIC8vICAgcHJvdmlkZXI6IGN4c2NoZW1hLkNvbnRleHRQcm92aWRlci5BTUlfUFJPVklERVIsXG4gICAgLy8gICBwcm9wczoge1xuICAgIC8vICAgICBvd25lcnM6IHRoaXMucHJvcHMub3duZXJzLFxuICAgIC8vICAgICBmaWx0ZXJzLFxuICAgIC8vICAgfSBhcyBjeHNjaGVtYS5BbWlDb250ZXh0UXVlcnksXG4gICAgLy8gICBkdW1teVZhbHVlOiBcImFtaS0xMjM0XCIsXG4gICAgLy8gfSkudmFsdWUgYXMgY3hhcGkuQW1pQ29udGV4dFJlc3BvbnNlO1xuICAgIC8vXG4gICAgLy8gaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJzdHJpbmdcIikge1xuICAgIC8vICAgdGhyb3cgbmV3IEVycm9yKGBSZXNwb25zZSB0byBBTUkgbG9va3VwIGludmFsaWQsIGdvdDogJHt2YWx1ZX1gKTtcbiAgICAvLyB9XG5cbiAgICBjb25zdCBvc1R5cGUgPSB0aGlzLnByb3BzLndpbmRvd3NcbiAgICAgID8gT3BlcmF0aW5nU3lzdGVtVHlwZS5XSU5ET1dTXG4gICAgICA6IE9wZXJhdGluZ1N5c3RlbVR5cGUuTElOVVg7XG5cbiAgICByZXR1cm4ge1xuICAgICAgaW1hZ2VJZDogdmFsdWUsXG4gICAgICBvc1R5cGUsXG4gICAgICB1c2VyRGF0YTogdGhpcy5wcm9wcy51c2VyRGF0YSA/PyBVc2VyRGF0YS5mb3JPcGVyYXRpbmdTeXN0ZW0ob3NUeXBlKSxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgbG9va2luZyB1cCBhbiBpbWFnZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvb2t1cE1hY2hpbmVJbWFnZVByb3BzIHtcbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIGltYWdlIChtYXkgY29udGFpbiB3aWxkY2FyZHMpXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE93bmVyIGFjY291bnQgSURzIG9yIGFsaWFzZXNcbiAgICpcbiAgICogQGRlZmF1bHQgLSBBbGwgb3duZXJzXG4gICAqL1xuICByZWFkb25seSBvd25lcnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBmaWx0ZXJzIG9uIHRoZSBBTUlcbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0Rlc2NyaWJlSW1hZ2VzLmh0bWxcbiAgICogQGRlZmF1bHQgLSBObyBhZGRpdGlvbmFsIGZpbHRlcnNcbiAgICovXG4gIHJlYWRvbmx5IGZpbHRlcnM/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZ1tdIH07XG5cbiAgLyoqXG4gICAqIExvb2sgZm9yIFdpbmRvd3MgaW1hZ2VzXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSB3aW5kb3dzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ3VzdG9tIHVzZXJkYXRhIGZvciB0aGlzIGltYWdlXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gRW1wdHkgdXNlciBkYXRhIGFwcHJvcHJpYXRlIGZvciB0aGUgcGxhdGZvcm0gdHlwZVxuICAgKi9cbiAgcmVhZG9ubHkgdXNlckRhdGE/OiBVc2VyRGF0YTtcbn1cbiJdfQ==
|
|
@@ -4,8 +4,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
4
4
|
exports.AuthorizationType = exports.Method = void 0;
|
|
5
5
|
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
6
|
// https://github.com/aws/aws-cdk/blob/v2.186.0/packages/aws-cdk-lib/aws-apigateway/lib/method.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 apigateway_canned_metrics_generated_1 = require("./apigateway-canned-metrics.generated");
|
|
10
10
|
const apigateway_util_1 = require("./apigateway-util");
|
|
11
11
|
const authorizer_1 = require("./authorizer");
|
|
@@ -70,7 +70,7 @@ class Method extends aws_construct_1.AwsConstructBase {
|
|
|
70
70
|
: undefined;
|
|
71
71
|
if (authorizationType !== AuthorizationType.COGNITO && defaultScopes) {
|
|
72
72
|
// '@aws-cdk/aws-apigateway:invalidAuthScope'
|
|
73
|
-
|
|
73
|
+
cdktn_1.Annotations.of(this).addWarning("'AuthorizationScopes' can only be set when 'AuthorizationType' sets 'COGNITO_USER_POOLS'. Default to ignore the values set in 'AuthorizationScopes'.");
|
|
74
74
|
}
|
|
75
75
|
if (authorizer_1.Authorizer.isAuthorizer(authorizer)) {
|
|
76
76
|
authorizer._attachToApi(this.api);
|
|
@@ -216,7 +216,7 @@ class Method extends aws_construct_1.AwsConstructBase {
|
|
|
216
216
|
}
|
|
217
217
|
if (options.requestValidatorOptions) {
|
|
218
218
|
// Assuming APIGATEWAY_REQUEST_VALIDATOR_UNIQUE_ID is effectively true for TerraConstructs
|
|
219
|
-
const id = aws_stack_1.AwsStack.ofAwsConstruct(this).uniqueResourceName(new
|
|
219
|
+
const id = aws_stack_1.AwsStack.ofAwsConstruct(this).uniqueResourceName(new cdktn_1.TerraformElement(this, "Validator"), {
|
|
220
220
|
maxLength: 64,
|
|
221
221
|
allowedSpecialCharacters: "-_",
|
|
222
222
|
});
|
|
@@ -397,7 +397,7 @@ class Method extends aws_construct_1.AwsConstructBase {
|
|
|
397
397
|
}
|
|
398
398
|
exports.Method = Method;
|
|
399
399
|
_a = JSII_RTTI_SYMBOL_1;
|
|
400
|
-
Method[_a] = { fqn: "terraconstructs.aws.compute.Method", version: "0.2.
|
|
400
|
+
Method[_a] = { fqn: "terraconstructs.aws.compute.Method", version: "0.2.6" };
|
|
401
401
|
var AuthorizationType;
|
|
402
402
|
(function (AuthorizationType) {
|
|
403
403
|
AuthorizationType["NONE"] = "NONE";
|
|
@@ -411,4 +411,4 @@ function pathForArn(path) {
|
|
|
411
411
|
function mergeDicts(xs, ys) {
|
|
412
412
|
return xs || ys ? Object.assign(xs ?? {}, ys) : undefined;
|
|
413
413
|
}
|
|
414
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0aG9kLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F3cy9jb21wdXRlL21ldGhvZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLGlHQUFpRztBQUVqRyxzREFLNkI7QUFDN0IsaUNBQXNEO0FBRXRELCtGQUEwRTtBQUMxRSx1REFBdUQ7QUFDdkQsNkNBQXVEO0FBT3ZELDhDQUFzRDtBQUt0RCx1Q0FBMkQ7QUFFM0QseUNBQXlDO0FBQ3pDLGdDQUFtQztBQUNuQyxvREFBdUU7QUFDdkUsNENBQXdDO0FBQ3hDLDRDQUE0QztBQUM1Qyw4QkFBOEI7QUFvSjlCLE1BQWEsTUFBTyxTQUFRLGdDQUFnQjtJQWUxQyxJQUFXLE9BQU87UUFDaEIsT0FBTztZQUNMLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDM0IsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO1NBQzFCLENBQUM7SUFDSixDQUFDO0lBRUQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFrQjtRQUMxRCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQWZULGlCQUFZLEdBQUcsSUFBSSxLQUFLLEVBQWMsQ0FBQztRQUV2QyxxQkFBZ0IsR0FBcUIsRUFBRSxDQUFDO1FBZXZELElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztRQUMvQixJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO1FBQzlCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUVqRCxJQUFBLG9DQUFrQixFQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUVwQyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQztRQUNwQyxNQUFN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QUMsSUFBWTtJQUM5QixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFDLENBQUM7QUFFRCxTQUFTLFVBQVUsQ0FDakIsRUFBc0IsRUFDdEIsRUFBc0I7SUFFdEIsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUM1RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvdjIuMTg2LjAvcGFja2FnZXMvYXdzLWNkay1saWIvYXdzLWFwaWdhdGV3YXkvbGliL21ldGhvZC50c1xuXG5pbXBvcnQge1xuICBhcGlHYXRld2F5TWV0aG9kLFxuICBhcGlHYXRld2F5SW50ZWdyYXRpb24sXG4gIGFwaUdhdGV3YXlNZXRob2RSZXNwb25zZSxcbiAgYXBpR2F0ZXdheUludGVncmF0aW9uUmVzcG9uc2UsXG59IGZyb20gXCJAY2RrdGYvcHJvdmlkZXItYXdzXCI7XG5pbXBvcnQgeyBBbm5vdGF0aW9ucywgVGVycmFmb3JtRWxlbWVudCB9IGZyb20gXCJjZGt0ZlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IEFwaUdhdGV3YXlNZXRyaWNzIH0gZnJvbSBcIi4vYXBpZ2F0ZXdheS1jYW5uZWQtbWV0cmljcy5nZW5lcmF0ZWRcIjtcbmltcG9ydCB7IHZhbGlkYXRlSHR0cE1ldGhvZCB9IGZyb20gXCIuL2FwaWdhdGV3YXktdXRpbFwiO1xuaW1wb3J0IHsgQXV0aG9yaXplciwgSUF1dGhvcml6ZXIgfSBmcm9tIFwiLi9hdXRob3JpemVyXCI7XG5pbXBvcnQgeyBEZXBsb3ltZW50IH0gZnJvbSBcIi4vZGVwbG95bWVudFwiO1xuaW1wb3J0IHtcbiAgSW50ZWdyYXRpb24sXG4gIEludGVncmF0aW9uQ29uZmlnLFxuICBJbnRlZ3JhdGlvblJlc3BvbnNlLFxufSBmcm9tIFwiLi9pbnRlZ3JhdGlvblwiO1xuaW1wb3J0IHsgTW9ja0ludGVncmF0aW9uIH0gZnJvbSBcIi4vaW50ZWdyYXRpb25zL21vY2tcIjtcbmltcG9ydCB7IE1ldGhvZFJlc3BvbnNlIH0gZnJvbSBcIi4vbWV0aG9kcmVzcG9uc2VcIjtcbmltcG9ydCB7IElNb2RlbCB9IGZyb20gXCIuL21vZGVsXCI7XG5pbXBvcnQgeyBJUmVxdWVzdFZhbGlkYXRvciwgUmVxdWVzdFZhbGlkYXRvck9wdGlvbnMgfSBmcm9tIFwiLi9yZXF1ZXN0dmFsaWRhdG9yXCI7XG5pbXBvcnQgeyBJUmVzb3VyY2UgfSBmcm9tIFwiLi9yZXNvdXJjZVwiO1xuaW1wb3J0IHsgSVJlc3RBcGksIFJlc3RBcGksIFJlc3RBcGlCYXNlIH0gZnJvbSBcIi4vcmVzdGFwaVwiO1xuaW1wb3J0IHsgSVN0YWdlIH0gZnJvbSBcIi4vc3RhZ2VcIjtcbi8vIGltcG9ydCB7IEZuIH0gZnJvbSBcIi4uLy4uL3RlcnJhLWZ1bmNcIjtcbmltcG9ydCB7IEFybkZvcm1hdCB9IGZyb20gXCIuLi9hcm5cIjtcbmltcG9ydCB7IEF3c0NvbnN0cnVjdEJhc2UsIEF3c0NvbnN0cnVjdFByb3BzIH0gZnJvbSBcIi4uL2F3cy1jb25zdHJ1Y3RcIjtcbmltcG9ydCB7IEF3c1N0YWNrIH0gZnJvbSBcIi4uL2F3cy1zdGFja1wiO1xuaW1wb3J0ICogYXMgY2xvdWR3YXRjaCBmcm9tIFwiLi4vY2xvdWR3YXRjaFwiO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gXCIuLi9pYW1cIjtcblxuZXhwb3J0IGludGVyZmFjZSBNZXRob2RPcHRpb25zIHtcbiAgLyoqXG4gICAqIEEgZnJpZW5kbHkgb3BlcmF0aW9uIG5hbWUgZm9yIHRoZSBtZXRob2QuIEZvciBleGFtcGxlLCB5b3UgY2FuIGFzc2lnbiB0aGVcbiAgICogT3BlcmF0aW9uTmFtZSBvZiBMaXN0UGV0cyBmb3IgdGhlIEdFVCAvcGV0cyBtZXRob2QuXG4gICAqL1xuICByZWFkb25seSBvcGVyYXRpb25OYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBNZXRob2QgYXV0aG9yaXphdGlvbi5cbiAgICogSWYgdGhlIHZhbHVlIGlzIHNldCBvZiBgQ3VzdG9tYCwgYW4gYGF1dGhvcml6ZXJgIG11c3QgYWxzbyBiZSBzcGVjaWZpZWQuXG4gICAqXG4gICAqIElmIHlvdSdyZSB1c2luZyBvbmUgb2YgdGhlIGF1dGhvcml6ZXJzIHRoYXQgYXJlIGF2YWlsYWJsZSB2aWEgdGhlIGBBdXRob3JpemVyYCBjbGFzcywgc3VjaCBhcyBgQXV0aG9yaXplciN0b2tlbigpYCxcbiAgICogaXQgaXMgcmVjb21tZW5kZWQgdGhhdCB0aGlzIG9wdGlvbiBub3QgYmUgc3BlY2lmaWVkLiBUaGUgYXV0aG9yaXplciB3aWxsIHRha2UgY2FyZSBvZiBzZXR0aW5nIHRoZSBjb3JyZWN0IGF1dGhvcml6YXRpb24gdHlwZS5cbiAgICogSG93ZXZlciwgc3BlY2lmeWluZyBhbiBhdXRob3JpemF0aW9uIHR5cGUgdXNpbmcgdGhpcyBwcm9wZXJ0eSB0aGF0IGNvbmZsaWN0cyB3aXRoIHdoYXQgaXMgZXhwZWN0ZWQgYnkgdGhlIGBBdXRob3JpemVyYFxuICAgKiB3aWxsIHJlc3VsdCBpbiBhbiBlcnJvci5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBvcGVuIGFjY2VzcyB1bmxlc3MgYGF1dGhvcml6ZXJgIGlzIHNwZWNpZmllZFxuICAgKi9cbiAgcmVhZG9ubHkgYXV0aG9yaXphdGlvblR5cGU/OiBBdXRob3JpemF0aW9uVHlwZTtcblxuICAvKipcbiAgICogSWYgYGF1dGhvcml6YXRpb25UeXBlYCBpcyBgQ3VzdG9tYCwgdGhpcyBzcGVjaWZpZXMgdGhlIElEIG9mIHRoZSBtZXRob2RcbiAgICogYXV0aG9yaXplciByZXNvdXJjZS5cbiAgICogSWYgc3BlY2lmaWVkLCB0aGUgdmFsdWUgb2YgYGF1dGhvcml6YXRpb25UeXBlYCBtdXN0IGJlIHNldCB0byBgQ3VzdG9tYFxuICAgKi9cbiAgcmVhZG9ubHkgYXV0aG9yaXplcj86IElBdXRob3JpemVyO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgbWV0aG9kIHJlcXVpcmVzIGNsaWVudHMgdG8gc3VibWl0IGEgdmFsaWQgQVBJIGtleS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGFwaUtleVJlcXVpcmVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHJlc3BvbnNlcyB0aGF0IGNhbiBiZSBzZW50IHRvIHRoZSBjbGllbnQgd2hvIGNhbGxzIHRoZSBtZXRob2QuXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICpcbiAgICogVGhpcyBwcm9wZXJ0eSBpcyBub3QgcmVxdWlyZWQsIGJ1dCBpZiB0aGVzZSBhcmUgbm90IHN1cHBsaWVkIGZvciBhIExhbWJkYVxuICAgKiBwcm94eSBpbnRlZ3JhdGlvbiwgdGhlIExhbWJkYSBmdW5jdGlvbiBtdXN0IHJldHVybiBhIHZhbHVlIG9mIHRoZSBjb3JyZWN0IGZvcm1hdCxcbiAgICogZm9yIHRoZSBpbnRlZ3JhdGlvbiByZXNwb25zZSB0byBiZSBjb3JyZWN0bHkgbWFwcGVkIHRvIGEgcmVzcG9uc2UgdG8gdGhlIGNsaWVudC5cbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXBpZ2F0ZXdheS9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvYXBpLWdhdGV3YXktbWV0aG9kLXNldHRpbmdzLW1ldGhvZC1yZXNwb25zZS5odG1sXG4gICAqL1xuICByZWFkb25seSBtZXRob2RSZXNwb25zZXM/OiBNZXRob2RSZXNwb25zZVtdO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVxdWVzdCBwYXJhbWV0ZXJzIHRoYXQgQVBJIEdhdGV3YXkgYWNjZXB0cy4gU3BlY2lmeSByZXF1ZXN0IHBhcmFtZXRlcnNcbiAgICogYXMga2V5LXZhbHVlIHBhaXJzIChzdHJpbmctdG8tQm9vbGVhbiBtYXBwaW5nKSwgd2l0aCBhIHNvdXJjZSBhcyB0aGUga2V5IGFuZFxuICAgKiBhIEJvb2xlYW4gYXMgdGhlIHZhbHVlLiBUaGUgQm9vbGVhbiBzcGVjaWZpZXMgd2hldGhlciBhIHBhcmFtZXRlciBpcyByZXF1aXJlZC5cbiAgICogQSBzb3VyY2UgbXVzdCBtYXRjaCB0aGUgZm9ybWF0IG1ldGhvZC5yZXF1ZXN0LmxvY2F0aW9uLm5hbWUsIHdoZXJlIHRoZSBsb2NhdGlvblxuICAgKiBpcyBxdWVyeXN0cmluZywgcGF0aCwgb3IgaGVhZGVyLCBhbmQgbmFtZSBpcyBhIHZhbGlkLCB1bmlxdWUgcGFyYW1ldGVyIG5hbWUuXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IHJlcXVlc3RQYXJhbWV0ZXJzPzogeyBbcGFyYW06IHN0cmluZ106IGJvb2xlYW4gfTtcblxuICAvKipcbiAgICogVGhlIG1vZGVscyB3aGljaCBkZXNjcmliZSBkYXRhIHN0cnVjdHVyZSBvZiByZXF1ZXN0IHBheWxvYWQuIFdoZW5cbiAgICogY29tYmluZWQgd2l0aCBgcmVxdWVzdFZhbGlkYXRvcmAgb3IgYHJlcXVlc3RWYWxpZGF0b3JPcHRpb25zYCwgdGhlIHNlcnZpY2VcbiAgICogd2lsbCB2YWxpZGF0ZSB0aGUgQVBJIHJlcXVlc3QgcGF5bG9hZCBiZWZvcmUgaXQgcmVhY2hlcyB0aGUgQVBJJ3MgSW50ZWdyYXRpb24gKGluY2x1ZGluZyBwcm94aWVzKS5cbiAgICogU3BlY2lmeSBgcmVxdWVzdE1vZGVsc2AgYXMga2V5LXZhbHVlIHBhaXJzLCB3aXRoIGEgY29udGVudCB0eXBlXG4gICAqIChlLmcuIGAnYXBwbGljYXRpb24vanNvbidgKSBhcyB0aGUga2V5IGFuZCBhbiBBUEkgR2F0ZXdheSBNb2RlbCBhcyB0aGUgdmFsdWUuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqXG4gICAqICAgICBkZWNsYXJlIGNvbnN0IGFwaTogYXBpZ2F0ZXdheS5SZXN0QXBpO1xuICAgKiAgICAgZGVjbGFyZSBjb25zdCB1c2VyTGFtYmRhOiBsYW1iZGEuRnVuY3Rpb247XG4gICAqXG4gICAqICAgICBjb25zdCB1c2VyTW9kZWw6IGFwaWdhdGV3YXkuTW9kZWwgPSBhcGkuYWRkTW9kZWwoJ1VzZXJNb2RlbCcsIHtcbiAgICogICAgICAgICBzY2hlbWE6IHtcbiAgICogICAgICAgICAgICAgdHlwZTogYXBpZ2F0ZXdheS5Kc29uU2NoZW1hVHlwZS5PQkpFQ1QsXG4gICAqICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICogICAgICAgICAgICAgICAgIHVzZXJJZDoge1xuICAgKiAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGFwaWdhdGV3YXkuSnNvblNjaGVtYVR5cGUuU1RSSU5HXG4gICAqICAgICAgICAgICAgICAgICB9LFxuICAgKiAgICAgICAgICAgICAgICAgbmFtZToge1xuICAgKiAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGFwaWdhdGV3YXkuSnNvblNjaGVtYVR5cGUuU1RSSU5HXG4gICAqICAgICAgICAgICAgICAgICB9XG4gICAqICAgICAgICAgICAgIH0sXG4gICAqICAgICAgICAgICAgIHJlcXVpcmVkOiBbJ3VzZXJJZCddXG4gICAqICAgICAgICAgfVxuICAgKiAgICAgfSk7XG4gICAqICAgICBhcGkucm9vdC5hZGRSZXNvdXJjZSgndXNlcicpLmFkZE1ldGhvZCgnUE9TVCcsXG4gICAqICAgICAgICAgbmV3IGFwaWdhdGV3YXkuTGFtYmRhSW50ZWdyYXRpb24odXNlckxhbWJkYSksIHtcbiAgICogICAgICAgICAgICAgcmVxdWVzdE1vZGVsczoge1xuICAgKiAgICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nOiB1c2VyTW9kZWxcbiAgICogICAgICAgICAgICAgfVxuICAgKiAgICAgICAgIH1cbiAgICogICAgICk7XG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FwaWdhdGV3YXkvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2FwaS1nYXRld2F5LW1ldGhvZC1zZXR0aW5ncy1tZXRob2QtcmVxdWVzdC5odG1sI3NldHVwLW1ldGhvZC1yZXF1ZXN0LW1vZGVsXG4gICAqL1xuICByZWFkb25seSByZXF1ZXN0TW9kZWxzPzogeyBbcGFyYW06IHN0cmluZ106IElNb2RlbCB9O1xuXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIGFzc29jaWF0ZWQgcmVxdWVzdCB2YWxpZGF0b3IuXG4gICAqIE9ubHkgb25lIG9mIGByZXF1ZXN0VmFsaWRhdG9yYCBvciBgcmVxdWVzdFZhbGlkYXRvck9wdGlvbnNgIG11c3QgYmUgc3BlY2lmaWVkLlxuICAgKiBXb3JrcyB0b2dldGhlciB3aXRoIGByZXF1ZXN0TW9kZWxzYCBvciBgcmVxdWVzdFBhcmFtZXRlcnNgIHRvIHZhbGlkYXRlXG4gICAqIHRoZSByZXF1ZXN0IGJlZm9yZSBpdCByZWFjaGVzIGludGVncmF0aW9uIGxpa2UgTGFtYmRhIFByb3h5IEludGVncmF0aW9uLlxuICAgKiBAZGVmYXVsdCAtIE5vIGRlZmF1bHQgdmFsaWRhdG9yXG4gICAqL1xuICByZWFkb25seSByZXF1ZXN0VmFsaWRhdG9yPzogSVJlcXVlc3RWYWxpZGF0b3I7XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBhdXRob3JpemF0aW9uIHNjb3BlcyBjb25maWd1cmVkIG9uIHRoZSBtZXRob2QuIFRoZSBzY29wZXMgYXJlIHVzZWQgd2l0aFxuICAgKiBhIENPR05JVE9fVVNFUl9QT09MUyBhdXRob3JpemVyIHRvIGF1dGhvcml6ZSB0aGUgbWV0aG9kIGludm9jYXRpb24uXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWFwaWdhdGV3YXktbWV0aG9kLmh0bWwjY2ZuLWFwaWdhdGV3YXktbWV0aG9kLWF1dGhvcml6YXRpb25zY29wZXNcbiAgICogQGRlZmF1bHQgLSBubyBhdXRob3JpemF0aW9uIHNjb3Blc1xuICAgKi9cbiAgcmVhZG9ubHkgYXV0aG9yaXphdGlvblNjb3Blcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBSZXF1ZXN0IHZhbGlkYXRvciBvcHRpb25zIHRvIGNyZWF0ZSBuZXcgdmFsaWRhdG9yXG4gICAqIE9ubHkgb25lIG9mIGByZXF1ZXN0VmFsaWRhdG9yYCBvciBgcmVxdWVzdFZhbGlkYXRvck9wdGlvbnNgIG11c3QgYmUgc3BlY2lmaWVkLlxuICAgKiBXb3JrcyB0b2dldGhlciB3aXRoIGByZXF1ZXN0TW9kZWxzYCBvciBgcmVxdWVzdFBhcmFtZXRlcnNgIHRvIHZhbGlkYXRlXG4gICAqIHRoZSByZXF1ZXN0IGJlZm9yZSBpdCByZWFjaGVzIGludGVncmF0aW9uIGxpa2UgTGFtYmRhIFByb3h5IEludGVncmF0aW9uLlxuICAgKiBAZGVmYXVsdCAtIE5vIGRlZmF1bHQgdmFsaWRhdG9yXG4gICAqL1xuICByZWFkb25seSByZXF1ZXN0VmFsaWRhdG9yT3B0aW9ucz86IFJlcXVlc3RWYWxpZGF0b3JPcHRpb25zO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1ldGhvZFByb3BzIGV4dGVuZHMgQXdzQ29uc3RydWN0UHJvcHMge1xuICAvKipcbiAgICogVGhlIHJlc291cmNlIHRoaXMgbWV0aG9kIGlzIGFzc29jaWF0ZWQgd2l0aC4gRm9yIHJvb3QgcmVzb3VyY2UgbWV0aG9kcyxcbiAgICogc3BlY2lmeSB0aGUgYFJlc3RBcGlgIG9iamVjdC5cbiAgICovXG4gIHJlYWRvbmx5IHJlc291cmNlOiBJUmVzb3VyY2U7XG5cbiAgLyoqXG4gICAqIFRoZSBIVFRQIG1ldGhvZCAoXCJHRVRcIiwgXCJQT1NUXCIsIFwiUFVUXCIsIC4uLikgdGhhdCBjbGllbnRzIHVzZSB0byBjYWxsIHRoaXMgbWV0aG9kLlxuICAgKi9cbiAgcmVhZG9ubHkgaHR0cE1ldGhvZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgYmFja2VuZCBzeXN0ZW0gdGhhdCB0aGUgbWV0aG9kIGNhbGxzIHdoZW4gaXQgcmVjZWl2ZXMgYSByZXF1ZXN0LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGEgbmV3IGBNb2NrSW50ZWdyYXRpb25gLlxuICAgKi9cbiAgcmVhZG9ubHkgaW50ZWdyYXRpb24/OiBJbnRlZ3JhdGlvbjtcblxuICAvKipcbiAgICogTWV0aG9kIG9wdGlvbnMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gb3B0aW9ucy5cbiAgICovXG4gIHJlYWRvbmx5IG9wdGlvbnM/OiBNZXRob2RPcHRpb25zO1xufVxuXG5leHBvcnQgY2xhc3MgTWV0aG9kIGV4dGVuZHMgQXdzQ29uc3RydWN0QmFzZSB7XG4gIHB1YmxpYyByZWFkb25seSBtZXRob2RJZDogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgaHR0cE1ldGhvZDogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgcmVzb3VyY2U6IElSZXNvdXJjZTtcbiAgLyoqXG4gICAqIFRoZSBBUEkgR2F0ZXdheSBSZXN0QXBpIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG1ldGhvZC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhcGk6IElSZXN0QXBpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2RlcGxveW1lbnRzID0gbmV3IEFycmF5PERlcGxveW1lbnQ+KCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfbWV0aG9kUmVzcG9uc2VzOiBNZXRob2RSZXNwb25zZVtdID0gW107XG4gIHByaXZhdGUgcmVhZG9ubHkgbWV0aG9kUmVzb3VyY2U6IGFwaUdhdGV3YXlNZXRob2QuQXBpR2F0ZXdheU1ldGhvZDtcbiAgcHJpdmF0ZSByZWFkb25seSBiaW5kUmVzdWx0PzogSW50ZWdyYXRpb25Db25maWc7XG5cbiAgcHVibGljIGdldCBvdXRwdXRzKCk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIHJldHVybiB7XG4gICAgICBtZXRob2RJZDogdGhpcy5tZXRob2RJZCxcbiAgICAgIGh0dHBNZXRob2Q6IHRoaXMuaHR0cE1ldGhvZCxcbiAgICAgIG1ldGhvZEFybjogdGhpcy5tZXRob2RBcm4sXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBNZXRob2RQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuXG4gICAgdGhpcy5yZXNvdXJjZSA9IHByb3BzLnJlc291cmNlO1xuICAgIHRoaXMuYXBpID0gcHJvcHMucmVzb3VyY2UuYXBpO1xuICAgIHRoaXMuaHR0cE1ldGhvZCA9IHByb3BzLmh0dHBNZXRob2QudG9VcHBlckNhc2UoKTtcblxuICAgIHZhbGlkYXRlSHR0cE1ldGhvZCh0aGlzLmh0dHBNZXRob2QpO1xuXG4gICAgY29uc3Qgb3B0aW9ucyA9IHByb3BzLm9wdGlvbnMgfHwge307XG4gICAgY29uc3QgZGVmYXVsdE1ldGhvZE9wdGlvbnMgPSBwcm9wcy5yZXNvdXJjZS5kZWZhdWx0TWV0aG9kT3B0aW9ucyB8fCB7fTtcblxuICAgIGNvbnN0IGF1dGhvcml6ZXIgPVxuICAgICAgb3B0aW9ucy5hdXRob3JpemF0aW9uVHlwZSA9PT0gQXV0aG9yaXphdGlvblR5cGUuTk9ORSAmJlxuICAgICAgb3B0aW9ucy5hdXRob3JpemVyID09IHVuZGVmaW5lZFxuICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICA6IG9wdGlvbnMuYXV0aG9yaXplciB8fCBkZWZhdWx0TWV0aG9kT3B0aW9ucy5hdXRob3JpemVyO1xuICAgIGNvbnN0IGF1dGhvcml6ZXJJZCA9IGF1dGhvcml6ZXI/LmF1dGhvcml6ZXJJZFxuICAgICAgPyBhdXRob3JpemVyLmF1dGhvcml6ZXJJZFxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAvKipcbiAgICAgKiBHZXQgYW5kIHZhbGlkYXRlIGF1dGhvcml6YXRpb24gdHlwZSBmcm9tIHRoZSB2YWx1ZXMgc2V0IGJ5IEFQSSByZXNvdXJjZSBhbmQgbWV0aG9kLlxuICAgICAqXG4gICAgICogUkVTVCBBUEkgUmVzb3VyY2VcbiAgICAgKiDilJTilIDilIAgZGVmYXVsdE1ldGhvZE9wdGlvbnM6IE1ldGhvZCBvcHRpb25zIHRvIHVzZSBhcyBhIGRlZmF1bHQgZm9yIGFsbCBtZXRob2RzIGNyZWF0ZWQgd2l0aGluIHRoaXMgQVBJIHVubGVzcyBjdXN0b20gb3B0aW9ucyBhcmUgc3BlY2lmaWVkLlxuICAgICAqICAgIOKUnOKUgOKUgCBhdXRob3JpemF0aW9uVHlwZTogU3BlY2lmaWVzIHRoZSBkZWZhdWx0IGF1dGhvcml6YXRpb24gdHlwZSB1bmxlc3MgY3VzdG9tIG9wdGlvbnMgYXJlIHNwZWNpZmllZCwgcmVjb21tZW5kZWQgdG8gbm90IGJlIHNwZWNpZmllZC5cbiAgICAgKiAgICDilJTilIDilIAgYXV0aG9yaXplcjogU3BlY2lmaWVzIHRoZSBkZWZhdWx0IGF1dGhvcml6ZXIgZm9yIGFsbCBtZXRob2RzIGNyZWF0ZWQgd2l0aGluIHRoaXMgQVBJIHVubGVzcyBjdXN0b20gb3B0aW9ucyBhcmUgc3BlY2lmaWVkLlxuICAgICAqICAgICAgICDilJTilIDilIAgYXV0aG9yaXplclR5cGU6IFRoZSBkZWZhdWx0IGF1dGhvcml6YXRpb24gdHlwZSBvZiB0aGlzIGF1dGhvcml6ZXIuXG4gICAgICpcbiAgICAgKiBSRVNUIEFQSSBNZXRob2RcbiAgICAgKiDilJTilIDilIAgb3B0aW9uczogTWV0aG9kIG9wdGlvbnMuXG4gICAgICogICAg4pSc4pSA4pSAIGF1dGhvcml6YXRpb25UeXBlOiBTcGVjaWZpZXMgdGhlIGF1dGhvcml6YXRpb24gdHlwZSwgcmVjb21tZW5kZWQgdG8gbm90IGJlIHNwZWNpZmllZC5cbiAgICAgKiAgICDilJTilIDilIAgYXV0aG9yaXplcjogU3BlY2lmaWVzIGFuIGF1dGhvcml6ZXIgdG8gdXNlIGZvciB0aGlzIG1ldGhvZC5cbiAgICAgKiAgICAgICAg4pSU4pSA4pSAIGF1dGhvcml6ZXJUeXBlOiBUaGUgYXV0aG9yaXphdGlvbiB0eXBlIG9mIHRoaXMgYXV0aG9yaXplci5cbiAgICAgKlxuICAgICAqIEF1dGhvcml6YXRpb24gdHlwZSBpcyBmaXJzdCBzZXQgdG8gXCJhdXRob3JpemVyLmF1dGhvcml6ZXJUeXBlXCIsIGZhbGxpbmcgYmFjayB0byBtZXRob2QncyBcImF1dGhvcml6YXRpb25UeXBlXCIsXG4gICAgICogZmFsbGluZyBiYWNrIHRvIEFQSSByZXNvdXJjZSdzIGRlZmF1bHQgXCJhdXRob3JpemF0aW9uVHlwZVwiLCBhbmQgbGFzdGx5IFwiQXV0aG9yaXplci5OT05FXCIuXG4gICAgICpcbiAgICAgKiBOb3RlIHRoYXQgXCJhdXRob3JpemVyLmF1dGhvcml6ZXJUeXBlXCIgc2hvdWxkIG1hdGNoIG1ldGhvZCBvciByZXNvdXJjZSdzIFwiYXV0aG9yaXphdGlvblR5cGVcIiBpZiBleGlzdHMuXG4gICAgICovXG4gICAgY29uc3QgYXV0aG9yaXphdGlvblR5cGUgPSB0aGlzLmdldE1ldGhvZEF1dGhvcml6YXRpb25UeXBlKFxuICAgICAgb3B0aW9ucyxcbiAgICAgIGRlZmF1bHRNZXRob2RPcHRpb25zLFxuICAgICAgYXV0aG9yaXplcixcbiAgICApO1xuXG4gICAgLy8gQXV0aG9yaXphdGlvblNjb3BlIHNob3VsZCBvbmx5IGJlIGFwcGxpZWQgdG8gQ09HTklUT19VU0VSX1BPT0xTIEF1dGhvcml6YXRpb25UeXBlLlxuICAgIGNvbnN0IGRlZmF1bHRTY29wZXMgPVxuICAgICAgb3B0aW9ucy5hdXRob3JpemF0aW9uU2NvcGVzID8/IGRlZmF1bHRNZXRob2RPcHRpb25zLmF1dGhvcml6YXRpb25TY29wZXM7XG4gICAgY29uc3QgYXV0aG9yaXphdGlvblNjb3BlcyA9XG4gICAgICBhdXRob3JpemF0aW9uVHlwZSA9PT0gQXV0aG9yaXphdGlvblR5cGUuQ09HTklUT1xuICAgICAgICA/IGRlZmF1bHRTY29wZXNcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgaWYgKGF1dGhvcml6YXRpb25UeXBlICE9PSBBdXRob3JpemF0aW9uVHlwZS5DT0dOSVRPICYmIGRlZmF1bHRTY29wZXMpIHtcbiAgICAgIC8vICdAYXdzLWNkay9hd3MtYXBpZ2F0ZXdheTppbnZhbGlkQXV0aFNjb3BlJ1xuICAgICAgQW5ub3RhdGlvbnMub2YodGhpcykuYWRkV2FybmluZyhcbiAgICAgICAgXCInQXV0aG9yaXphdGlvblNjb3BlcycgY2FuIG9ubHkgYmUgc2V0IHdoZW4gJ0F1dGhvcml6YXRpb25UeXBlJyBzZXRzICdDT0dOSVRPX1VTRVJfUE9PTFMnLiBEZWZhdWx0IHRvIGlnbm9yZSB0aGUgdmFsdWVzIHNldCBpbiAnQXV0aG9yaXphdGlvblNjb3BlcycuXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChBdXRob3JpemVyLmlzQXV0aG9yaXplcihhdXRob3JpemVyKSkge1xuICAgICAgYXV0aG9yaXplci5fYXR0YWNoVG9BcGkodGhpcy5hcGkpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgbXIgb2Ygb3B0aW9ucy5tZXRob2RSZXNwb25zZXMgPz9cbiAgICAgIGRlZmF1bHRNZXRob2RPcHRpb25zLm1ldGhvZFJlc3BvbnNlcyA/P1xuICAgICAgW10pIHtcbiAgICAgIHRoaXMuYWRkTWV0aG9kUmVzcG9uc2UobXIpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3RWYWxpZGF0b3JJZFZhbHVlID0gdGhpcy5yZXNvbHZlUmVxdWVzdFZhbGlkYXRvcklkKG9wdGlvbnMpO1xuXG4gICAgY29uc3QgaW50ZWdyYXRpb24gPVxuICAgICAgcHJvcHMuaW50ZWdyYXRpb24gPz9cbiAgICAgIHRoaXMucmVzb3VyY2UuZGVmYXVsdEludGVncmF0aW9uID8/XG4gICAgICBuZXcgTW9ja0ludGVncmF0aW9uKCk7XG4gICAgdGhpcy5iaW5kUmVzdWx0ID0gaW50ZWdyYXRpb24uYmluZCh0aGlzKTtcblxuICAgIGNvbnN0IG1ldGhvZFByb3BzOiBhcGlHYXRld2F5TWV0aG9kLkFwaUdhdGV3YXlNZXRob2RDb25maWcgPSB7XG4gICAgICByZXN0QXBpSWQ6IHRoaXMuYXBpLnJlc3RBcGlJZCxcbiAgICAgIHJlc291cmNlSWQ6IHByb3BzLnJlc291cmNlLnJlc291cmNlSWQsXG4gICAgICBodHRwTWV0aG9kOiB0aGlzLmh0dHBNZXRob2QsXG4gICAgICBhdXRob3JpemF0aW9uOiBhdXRob3JpemF0aW9uVHlwZSxcbiAgICAgIGF1dGhvcml6ZXJJZCxcbiAgICAgIGFwaUtleVJlcXVpcmVkOlxuICAgICAgICBvcHRpb25zLmFwaUtleVJlcXVpcmVkID8/IGRlZmF1bHRNZXRob2RPcHRpb25zLmFwaUtleVJlcXVpcmVkLFxuICAgICAgb3BlcmF0aW9uTmFtZTpcbiAgICAgICAgb3B0aW9ucy5vcGVyYXRpb25OYW1lIHx8IGRlZmF1bHRNZXRob2RPcHRpb25zLm9wZXJhdGlvbk5hbWUsXG4gICAgICByZXF1ZXN0UGFyYW1ldGVyczpcbiAgICAgICAgb3B0aW9ucy5yZXF1ZXN0UGFyYW1ldGVycyB8fCBkZWZhdWx0TWV0aG9kT3B0aW9ucy5yZXF1ZXN0UGFyYW1ldGVycyxcbiAgICAgIHJlcXVlc3RNb2RlbHM6IHRoaXMucmVuZGVyUmVxdWVzdE1vZGVscyhcbiAgICAgICAgb3B0aW9ucy5yZXF1ZXN0TW9kZWxzIHx8IGRlZmF1bHRNZXRob2RPcHRpb25zLnJlcXVlc3RNb2RlbHMsXG4gICAgICApLFxuICAgICAgcmVxdWVzdFZhbGlkYXRvcklkOiByZXF1ZXN0VmFsaWRhdG9ySWRWYWx1ZSxcbiAgICAgIGF1dGhvcml6YXRpb25TY29wZXM6IGF1dGhvcml6YXRpb25TY29wZXMsXG4gICAgfTtcblxuICAgIHRoaXMubWV0aG9kUmVzb3VyY2UgPSBuZXcgYXBpR2F0ZXdheU1ldGhvZC5BcGlHYXRld2F5TWV0aG9kKFxuICAgICAgdGhpcyxcbiAgICAgIFwiUmVzb3VyY2VcIixcbiAgICAgIG1ldGhvZFByb3BzLFxuICAgICk7XG5cbiAgICB0aGlzLm1ldGhvZElkID0gdGhpcy5tZXRob2RSZXNvdXJjZS5pZDtcbiAgICBpZiAoUmVzdEFwaUJhc2UuX2lzUmVzdEFwaUJhc2UodGhpcy5hcGkpKSB7XG4gICAgICB0aGlzLmFwaS5fYXR0YWNoTWV0aG9kKHRoaXMpO1xuICAgIH1cblxuICAgIGNvbnN0IGRlcGxveW1lbnQgPSB0aGlzLmFwaS5sYXRlc3REZXBsb3ltZW50O1xuICAgIGlmIChkZXBsb3ltZW50KSB7XG4gICAgICAvLyBmb3IgQ0RLVEYgd2UgbmVlZCB0byB0cmFjayBkZXBsb3ltZW50cyBhcyB3ZWxsIGZvciBpbnRlZ3JhdGlvbiBkZXBlbmRlbmNpZXNcbiAgICAgIHRoaXMuX2F0dGFjaERlcGxveW1lbnQoZGVwbG95bWVudCk7XG4gICAgICBkZXBsb3ltZW50Lm5vZGUuYWRkRGVwZW5kZW5jeSh0aGlzLm1ldGhvZFJlc291cmNlKTtcbiAgICAgIC8vIEZuLnNoYTEoRm4uanNvbmVuY29kZSgpKSBjYXVzZXMgbmVzdGVkIFRva2VucyBhbmQgUmVzb2x2ZXIgZXJyb3JzP1xuICAgICAgZGVwbG95bWVudC5hZGRUb1RyaWdnZXJzKHtcbiAgICAgICAgbWV0aG9kOiB7XG4gICAgICAgICAgLi4ubWV0aG9kUHJvcHMsXG4gICAgICAgICAgaW50ZWdyYXRpb25Ub2tlbjogdGhpcy5iaW5kUmVzdWx0Py5kZXBsb3ltZW50VG9rZW4sXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIC8vIGFkZFRvTG9naWNhbElkIGlzIENESyBzcGVjaWZpYyByZW1vdmFsUG9saWN5LlJFVEFJTiBmdW5jdGlvbmFsaXR5XG4gICAgICAvLyBkZXBsb3ltZW50LmFkZFRvTG9naWNhbElkKHtcbiAgICAgIC8vICAgbWV0aG9kOiB7XG4gICAgICAvLyAgICAgLi4ubWV0aG9kUHJvcHMsXG4gICAgICAvLyAgICAgaW50ZWdyYXRpb25Ub2tlbjogYmluZFJlc3VsdD8uZGVwbG95bWVudFRva2VuLFxuICAgICAgLy8gICB9LFxuICAgICAgLy8gfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwdWJsaWMgX2F0dGFjaERlcGxveW1lbnQoZGVwbG95bWVudDogRGVwbG95bWVudCkge1xuICAgIC8vIHRoZXNlIGRlcGxveW1lbnRzIGFyZSB1c2VkIGluIHRoZSB0b1RlcnJhZm9ybSgpIG1ldGhvZFxuICAgIC8vIHRvIGVuc3VyZSBnZW5lcmF0ZWQgaW50ZWdyYXRpb24gcmVzb3VyY2VzIGFyZSBkZWZpbmVkXG4gICAgLy8gYXMgZGVwZW5kZW5jaWVzIG9uIHRoZSBkZXBsb3ltZW50cy5cbiAgICB0aGlzLl9kZXBsb3ltZW50cy5wdXNoKGRlcGxveW1lbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBSZXN0QXBpIGFzc29jaWF0ZWQgd2l0aCB0aGlzIE1ldGhvZFxuICAgKiBAZGVwcmVjYXRlZCAtIFRocm93cyBhbiBlcnJvciBpZiB0aGlzIFJlc291cmNlIGlzIG5vdCBhc3NvY2lhdGVkIHdpdGggYW4gaW5zdGFuY2Ugb2YgYFJlc3RBcGlgLiBVc2UgYGFwaWAgaW5zdGVhZC5cbiAgICovXG4gIHB1YmxpYyBnZXQgcmVzdEFwaSgpOiBSZXN0QXBpIHtcbiAgICBpZiAoISh0aGlzLmFwaSBpbnN0YW5jZW9mIFJlc3RBcGkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwibm90IGF2YWlsYWJsZSBvbiBSZXNvdXJjZSBub3QgY29ubmVjdGVkIHRvIGFuIGluc3RhbmNlIG9mIFJlc3RBcGlcIixcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmFwaTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIGV4ZWN1dGUtYXBpIEFSTiBmb3IgdGhpcyBtZXRob2Q6XG4gICAqXG4gICAqICAgYXJuOmF3czpleGVjdXRlLWFwaTp7cmVnaW9ufTp7YWNjb3VudH06e3Jlc3RBcGlJZH0ve3N0YWdlfS97bWV0aG9kfS97cGF0aH1cbiAgICpcbiAgICogTk9URToge3N0YWdlfSB3aWxsIHJlZmVyIHRvIHRoZSBgcmVzdEFwaS5kZXBsb3ltZW50U3RhZ2VgLCB3aGljaCB3aWxsXG4gICAqIGF1dG9tYXRpY2FsbHkgc2V0IGlmIGF1dG8tZGVwbG95IGlzIGVuYWJsZWQsIG9yIGNhbiBiZSBleHBsaWNpdGx5IGFzc2lnbmVkLlxuICAgKiBXaGVuIG5vdCBjb25maWd1cmVkLCB7c3RhZ2V9IHdpbGwgYmUgc2V0IHRvICcqJywgYXMgYSBzaG9ydGhhbmQgZm9yICdhbGwgc3RhZ2VzJy5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIGdldCBtZXRob2RBcm4oKTogc3RyaW5nIHtcbiAgICBjb25zdCBzdGFnZSA9IHRoaXMuYXBpLmRlcGxveW1lbnRTdGFnZT8uc3RhZ2VOYW1lO1xuICAgIHJldHVybiB0aGlzLmFwaS5hcm5Gb3JFeGVjdXRlQXBpKFxuICAgICAgdGhpcy5odHRwTWV0aG9kLFxuICAgICAgcGF0aEZvckFybih0aGlzLnJlc291cmNlLnBhdGgpLFxuICAgICAgc3RhZ2UsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIGV4ZWN1dGUtYXBpIEFSTiBmb3IgdGhpcyBtZXRob2QncyBcInRlc3QtaW52b2tlLXN0YWdlXCIgc3RhZ2UuXG4gICAqIFRoaXMgc3RhZ2UgaXMgdXNlZCBieSB0aGUgQVdTIENvbnNvbGUgVUkgd2hlbiB0ZXN0aW5nIHRoZSBtZXRob2QuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHRlc3RNZXRob2RBcm4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5hcGkuYXJuRm9yRXhlY3V0ZUFwaShcbiAgICAgIHRoaXMuaHR0cE1ldGhvZCxcbiAgICAgIHBhdGhGb3JBcm4odGhpcy5yZXNvdXJjZS5wYXRoKSxcbiAgICAgIFwidGVzdC1pbnZva2Utc3RhZ2VcIixcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIG1ldGhvZCByZXNwb25zZSB0byB0aGlzIG1ldGhvZFxuICAgKlxuICAgKiBJZiBhIG1ldGhvZCByZXNwb25zZSBmb3IgdGhlIHNhbWUgc3RhdHVzIGNvZGUgYWxyZWFkeSBleGlzdHMsIHRoZSBgcmVzcG9uc2VNb2RlbHNgXG4gICAqIGFuZCBgcmVzcG9uc2VQYXJhbWV0ZXJzYCBtYXBzIHdpbGwgYmUgbWVyZ2VkLlxuICAgKi9cbiAgcHVibGljIGFkZE1ldGhvZFJlc3BvbnNlKG1ldGhvZFJlc3BvbnNlOiBNZXRob2RSZXNwb25zZSk6IHZvaWQge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL3YyLjE4Ni4wL3BhY2thZ2VzL2F3cy1jZGstbGliL2F3cy1hcGlnYXRld2F5L2xpYi9tZXRob2QudHMjTDMxNlxuICAgIC8vICsgZml4IGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL3B1bGwvMjY3MTgvZmlsZXNcbiAgICBjb25zdCBpID0gdGhpcy5fbWV0aG9kUmVzcG9uc2VzLmZpbmRJbmRleChcbiAgICAgIChtcikgPT4gbXIuc3RhdHVzQ29kZSA9PT0gbWV0aG9kUmVzcG9uc2Uuc3RhdHVzQ29kZSxcbiAgICApO1xuICAgIGlmIChpID49IDApIHtcbiAgICAgIC8vIE5lZWQgdG8gZG8gYSBzcGxpY2UgYmVjYXVzZSBNZXRob2RSZXNwb25zZXMgYXJlIGltbXV0YWJsZVxuICAgICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLl9tZXRob2RSZXNwb25zZXNbaV07XG4gICAgICB0aGlzLl9tZXRob2RSZXNwb25zZXMuc3BsaWNlKGksIDEsIHtcbiAgICAgICAgc3RhdHVzQ29kZTogbWV0aG9kUmVzcG9uc2Uuc3RhdHVzQ29kZSxcbiAgICAgICAgcmVzcG9uc2VNb2RlbHM6IG1lcmdlRGljdHMoXG4gICAgICAgICAgZXhpc3RpbmcucmVzcG9uc2VNb2RlbHMsXG4gICAgICAgICAgbWV0aG9kUmVzcG9uc2UucmVzcG9uc2VNb2RlbHMsXG4gICAgICAgICksXG4gICAgICAgIHJlc3BvbnNlUGFyYW1ldGVyczogbWVyZ2VEaWN0cyhcbiAgICAgICAgICBleGlzdGluZy5yZXNwb25zZVBhcmFtZXRlcnMsXG4gICAgICAgICAgbWV0aG9kUmVzcG9uc2UucmVzcG9uc2VQYXJhbWV0ZXJzLFxuICAgICAgICApLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX21ldGhvZFJlc3BvbnNlcy5wdXNoKG1ldGhvZFJlc3BvbnNlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldE1ldGhvZEF1dGhvcml6YXRpb25UeXBlKFxuICAgIG9wdGlvbnM6IE1ldGhvZE9wdGlvbnMsXG4gICAgZGVmYXVsdE1ldGhvZE9wdGlvbnM6IE1ldGhvZE9wdGlvbnMsXG4gICAgYXV0aG9yaXplcj86IElBdXRob3JpemVyLFxuICApOiBzdHJpbmcge1xuICAgIGNvbnN0IGF1dGhvcml6ZXJBdXRoVHlwZSA9IGF1dGhvcml6ZXI/LmF1dGhvcml6YXRpb25UeXBlO1xuICAgIGNvbnN0IG9wdGlvbnNBdXRoVHlwZSA9XG4gICAgICBvcHRpb25zLmF1dGhvcml6YXRpb25UeXBlIHx8IGRlZmF1bHRNZXRob2RPcHRpb25zLmF1dGhvcml6YXRpb25UeXBlO1xuICAgIGNvbnN0IGZpbmFsQXV0aFR5cGUgPVxuICAgICAgYXV0aG9yaXplckF1dGhUeXBlIHx8IG9wdGlvbnNBdXRoVHlwZSB8fCBBdXRob3JpemF0aW9uVHlwZS5OT05FO1xuXG4gICAgaWYgKFxuICAgICAgYXV0aG9yaXplckF1dGhUeXBlICYmXG4gICAgICBvcHRpb25zQXV0aFR5cGUgJiZcbiAgICAgIGF1dGhvcml6ZXJBdXRoVHlwZSAhPT0gb3B0aW9uc0F1dGhUeXBlXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGAke3RoaXMucmVzb3VyY2V9LyR7dGhpcy5odHRwTWV0aG9kfSAtIEF1dGhvcml6YXRpb24gdHlwZSBpcyBzZXQgdG8gJHtvcHRpb25zQXV0aFR5cGV9IGAgK1xuICAgICAgICAgIGB3aGljaCBpcyBkaWZmZXJlbnQgZnJvbSB3aGF0IGlzIHJlcXVpcmVkIGJ5IHRoZSBhdXRob3JpemVyIFske2F1dGhvcml6ZXJBdXRoVHlwZX1dYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbmFsQXV0aFR5cGU7XG4gIH1cblxuICBwcml2YXRlIHJlbmRlclJlcXVlc3RNb2RlbHMoXG4gICAgcmVxdWVzdE1vZGVsczogeyBbcGFyYW06IHN0cmluZ106IElNb2RlbCB9IHwgdW5kZWZpbmVkLFxuICApOiB7IFtwYXJhbTogc3RyaW5nXTogc3RyaW5nIH0gfCB1bmRlZmluZWQge1xuICAgIGlmICghcmVxdWVzdE1vZGVscykge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBtb2RlbHM6IHsgW3BhcmFtOiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xuICAgIGZvciAoY29uc3QgY29udGVudFR5cGUgaW4gcmVxdWVzdE1vZGVscykge1xuICAgICAgaWYgKHJlcXVlc3RNb2RlbHMuaGFzT3duUHJvcGVydHkoY29udGVudFR5cGUpKSB7XG4gICAgICAgIG1vZGVsc1tjb250ZW50VHlwZV0gPSByZXF1ZXN0TW9kZWxzW2NvbnRlbnRUeXBlXS5tb2RlbElkO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbW9kZWxzO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlUmVxdWVzdFZhbGlkYXRvcklkKFxuICAgIG9wdGlvbnM6IE1ldGhvZE9wdGlvbnMsXG4gICk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKG9wdGlvbnMucmVxdWVzdFZhbGlkYXRvciAmJiBvcHRpb25zLnJlcXVlc3RWYWxpZGF0b3JPcHRpb25zKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiT25seSBvbmUgb2YgJ3JlcXVlc3RWYWxpZGF0b3InIG9yICdyZXF1ZXN0VmFsaWRhdG9yT3B0aW9ucycgbXVzdCBiZSBzcGVjaWZpZWQuXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnJlcXVlc3RWYWxpZGF0b3JPcHRpb25zKSB7XG4gICAgICAvLyBBc3N1bWluZyBBUElHQVRFV0FZX1JFUVVFU1RfVkFMSURBVE9SX1VOSVFVRV9JRCBpcyBlZmZlY3RpdmVseSB0cnVlIGZvciBUZXJyYUNvbnN0cnVjdHNcbiAgICAgIGNvbnN0IGlkID0gQXdzU3RhY2sub2ZBd3NDb25zdHJ1Y3QodGhpcykudW5pcXVlUmVzb3VyY2VOYW1lKFxuICAgICAgICBuZXcgVGVycmFmb3JtRWxlbWVudCh0aGlzLCBcIlZhbGlkYXRvclwiKSxcbiAgICAgICAge1xuICAgICAgICAgIG1heExlbmd0aDogNjQsXG4gICAgICAgICAgYWxsb3dlZFNwZWNpYWxDaGFyYWN0ZXJzOiBcIi1fXCIsXG4gICAgICAgIH0sXG4gICAgICApO1xuICAgICAgY29uc3QgdmFsaWRhdG9yID0gKHRoaXMuYXBpIGFzIFJlc3RBcGkpLmFkZFJlcXVlc3RWYWxpZGF0b3IoXG4gICAgICAgIGlkLFxuICAgICAgICBvcHRpb25zLnJlcXVlc3RWYWxpZGF0b3JPcHRpb25zLFxuICAgICAgKTtcbiAgICAgIHJldHVybiB2YWxpZGF0b3IucmVxdWVzdFZhbGlkYXRvcklkO1xuICAgIH1cblxuICAgIHJldHVybiBvcHRpb25zLnJlcXVlc3RWYWxpZGF0b3I/LnJlcXVlc3RWYWxpZGF0b3JJZDtcbiAgfVxuXG4gIHB1YmxpYyBtZXRyaWMoXG4gICAgbWV0cmljTmFtZTogc3RyaW5nLFxuICAgIHN0YWdlOiBJU3RhZ2UsXG4gICAgcHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMsXG4gICk6IGNsb3Vkd2F0Y2guTWV0cmljIHtcbiAgICByZXR1cm4gbmV3IGNsb3Vkd2F0Y2guTWV0cmljKHtcbiAgICAgIG5hbWVzcGFjZTogXCJBV1MvQXBpR2F0ZXdheVwiLFxuICAgICAgbWV0cmljTmFtZSxcbiAgICAgIGRpbWVuc2lvbnNNYXA6IHtcbiAgICAgICAgQXBpTmFtZTogdGhpcy5hcGkucmVzdEFwaU5hbWUsXG4gICAgICAgIE1ldGhvZDogdGhpcy5odHRwTWV0aG9kLFxuICAgICAgICBSZXNvdXJjZTogdGhpcy5yZXNvdXJjZS5wYXRoLFxuICAgICAgICBTdGFnZTogc3RhZ2Uuc3RhZ2VOYW1lLFxuICAgICAgfSxcbiAgICAgIC4uLnByb3BzLFxuICAgIH0pLmF0dGFjaFRvKHRoaXMpO1xuICB9XG5cbiAgcHVibGljIG1ldHJpY0NsaWVudEVycm9yKFxuICAgIHN0YWdlOiBJU3RhZ2UsXG4gICAgcHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMsXG4gICk6IGNsb3Vkd2F0Y2guTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5jYW5uZWRNZXRyaWMoQXBpR2F0ZXdheU1ldHJpY3MuXzRYeEVycm9yU3VtLCBzdGFnZSwgcHJvcHMpO1xuICB9XG5cbiAgcHVibGljIG1ldHJpY1NlcnZlckVycm9yKFxuICAgIHN0YWdlOiBJU3RhZ2UsXG4gICAgcHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMsXG4gICk6IGNsb3Vkd2F0Y2guTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5jYW5uZWRNZXRyaWMoQXBpR2F0ZXdheU1ldHJpY3MuXzVYeEVycm9yU3VtLCBzdGFnZSwgcHJvcHMpO1xuICB9XG5cbiAgcHVibGljIG1ldHJpY0NhY2hlSGl0Q291bnQoXG4gICAgc3RhZ2U6IElTdGFnZSxcbiAgICBwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyxcbiAgKTogY2xvdWR3YXRjaC5NZXRyaWMge1xuICAgIHJldHVybiB0aGlzLmNhbm5lZE1ldHJpYyhBcGlHYXRld2F5TWV0cmljcy5jYWNoZUhpdENvdW50U3VtLCBzdGFnZSwgcHJvcHMpO1xuICB9XG5cbiAgcHVibGljIG1ldHJpY0NhY2hlTWlzc0NvdW50KFxuICAgIHN0YWdlOiBJU3RhZ2UsXG4gICAgcHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMsXG4gICk6IGNsb3Vkd2F0Y2guTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5jYW5uZWRNZXRyaWMoQXBpR2F0ZXdheU1ldHJpY3MuY2FjaGVNaXNzQ291bnRTdW0sIHN0YWdlLCBwcm9wcyk7XG4gIH1cblxuICBwdWJsaWMgbWV0cmljQ291bnQoXG4gICAgc3RhZ2U6IElTdGFnZSxcbiAgICBwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyxcbiAgKTogY2xvdWR3YXRjaC5NZXRyaWMge1xuICAgIHJldHVybiB0aGlzLmNhbm5lZE1ldHJpYyhBcGlHYXRld2F5TWV0cmljcy5jb3VudFN1bSwgc3RhZ2UsIHtcbiAgICAgIHN0YXRpc3RpYzogXCJTYW1wbGVDb3VudFwiLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbWV0cmljSW50ZWdyYXRpb25MYXRlbmN5KFxuICAgIHN0YWdlOiBJU3RhZ2UsXG4gICAgcHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMsXG4gICk6IGNsb3Vkd2F0Y2guTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5jYW5uZWRNZXRyaWMoXG4gICAgICBBcGlHYXRld2F5TWV0cmljcy5pbnRlZ3JhdGlvbkxhdGVuY3lBdmVyYWdlLFxuICAgICAgc3RhZ2UsXG4gICAgICBwcm9wcyxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIG1ldHJpY0xhdGVuY3koXG4gICAgc3RhZ2U6IElTdGFnZSxcbiAgICBwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyxcbiAgKTogY2xvdWR3YXRjaC5NZXRyaWMge1xuICAgIHJldHVybiB0aGlzLmNhbm5lZE1ldHJpYyhBcGlHYXRld2F5TWV0cmljcy5sYXRlbmN5QXZlcmFnZSwgc3RhZ2UsIHByb3BzKTtcbiAgfVxuXG4gIHB1YmxpYyBncmFudEV4ZWN1dGUoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQge1xuICAgIHJldHVybiBpYW0uR3JhbnQuYWRkVG9QcmluY2lwYWwoe1xuICAgICAgZ3JhbnRlZSxcbiAgICAgIGFjdGlvbnM6IFtcImV4ZWN1dGUtYXBpOkludm9rZVwiXSxcbiAgICAgIHJlc291cmNlQXJuczogW3RoaXMubWV0aG9kQXJuXSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY2FubmVkTWV0cmljKFxuICAgIGZuOiAoZGltczoge1xuICAgICAgQXBpTmFtZTogc3RyaW5nO1xuICAgICAgTWV0aG9kOiBzdHJpbmc7XG4gICAgICBSZXNvdXJjZTogc3RyaW5nO1xuICAgICAgU3RhZ2U6IHN0cmluZztcbiAgICB9KSA9PiBjbG91ZHdhdGNoLk1ldHJpY1Byb3BzLFxuICAgIHN0YWdlOiBJU3RhZ2UsXG4gICAgcHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMsXG4gICkge1xuICAgIHJldHVybiBuZXcgY2xvdWR3YXRjaC5NZXRyaWMoe1xuICAgICAgLi4uZm4oe1xuICAgICAgICBBcGlOYW1lOiB0aGlzLmFwaS5yZXN0QXBpTmFtZSxcbiAgICAgICAgTWV0aG9kOiB0aGlzLmh0dHBNZXRob2QsXG4gICAgICAgIFJlc291cmNlOiB0aGlzLnJlc291cmNlLnBhdGgsXG4gICAgICAgIFN0YWdlOiBzdGFnZS5zdGFnZU5hbWUsXG4gICAgICB9KSxcbiAgICAgIC4uLnByb3BzLFxuICAgIH0pLmF0dGFjaFRvKHRoaXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgcmVzb3VyY2UgdG8gdGhlIHRlcnJhZm9ybSBKU09OIG91dHB1dC5cbiAgICpcbiAgICogY2FsbGVkIGJ5IFRlcnJhZm9ybVN0YWNrLnByZXBhcmVTdGFjaygpXG4gICAqL1xuICBwdWJsaWMgdG9UZXJyYWZvcm0oKTogYW55IHtcbiAgICBpZiAodGhpcy5fbWV0aG9kUmVzcG9uc2VzLmxlbmd0aCA9PT0gMCAmJiAhdGhpcy5iaW5kUmVzdWx0KSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuXG4gICAgLy8gTk9URTogVGhlIFRlcnJhZm9ybURlcGVuZGVuZGFibGVBc3BlY3Qgd2lsbCBwcm9wZ2F0ZSBjb25zdHJ1Y3QgdHJlZSBkZXBlbmRlbmNpZXNcbiAgICBjb25zdCBtZXRob2RSZXNwb25zZXM6IFJlY29yZDxcbiAgICAgIHN0cmluZyxcbiAgICAgIGFwaUdhdGV3YXlNZXRob2RSZXNwb25zZS5BcGlHYXRld2F5TWV0aG9kUmVzcG9uc2VcbiAgICA+ID0ge307XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9tZXRob2RSZXNwb25zZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IG1yUHJvcHMgPSB0aGlzLl9tZXRob2RSZXNwb25zZXNbaV07XG4gICAgICAvLyB1bmlxdWUgaWQgYnkgc3RhdHVzIGNvZGVcbiAgICAgIGNvbnN0IGlkID0gYE1ldGhvZFJlc3BvbnNlJHttclByb3BzLnN0YXR1c0NvZGV9YDtcbiAgICAgIC8vIG5vIHJlLWNyZWF0ZSBpZiBhbHJlYWR5IGdlbmVyYXRlZFxuICAgICAgY29uc3QgbWV0aG9kUmVzcG9uc2UgPSB0aGlzLm5vZGUudHJ5RmluZENoaWxkKGlkKTtcbiAgICAgIGlmIChtZXRob2RSZXNwb25zZSkge1xuICAgICAgICBtZXRob2RSZXNwb25zZXNbbXJQcm9wcy5zdGF0dXNDb2RlXSA9XG4gICAgICAgICAgbWV0aG9kUmVzcG9uc2UgYXMgYXBpR2F0ZXdheU1ldGhvZFJlc3BvbnNlLkFwaUdhdGV3YXlNZXRob2RSZXNwb25zZTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIGdlbmVyYXRlIG5ldyBBcGlHYXRld2F5TWV0aG9kUmVzcG9uc2VcbiAgICAgIG1ldGhvZFJlc3BvbnNlc1ttclByb3BzLnN0YXR1c0NvZGVdID1cbiAgICAgICAgbmV3IGFwaUdhdGV3YXlNZXRob2RSZXNwb25zZS5BcGlHYXRld2F5TWV0aG9kUmVzcG9uc2UodGhpcywgaWQsIHtcbiAgICAgICAgICByZXN0QXBpSWQ6IHRoaXMuYXBpLnJlc3RBcGlJZCxcbiAgICAgICAgICByZXNvdXJjZUlkOiB0aGlzLnJlc291cmNlLnJlc291cmNlSWQsXG4gICAgICAgICAgaHR0cE1ldGhvZDogdGhpcy5tZXRob2RSZXNvdXJjZS5odHRwTWV0aG9kLFxuICAgICAgICAgIHN0YXR1c0NvZGU6IG1yUHJvcHMuc3RhdHVzQ29kZSxcbiAgICAgICAgICByZXNwb25zZVBhcmFtZXRlcnM6IG1yUHJvcHMucmVzcG9uc2VQYXJhbWV0ZXJzLFxuICAgICAgICAgIHJlc3BvbnNlTW9kZWxzOiB0aGlzLnJlbmRlclJlc3BvbnNlTW9kZWxzKG1yUHJvcHMucmVzcG9uc2VNb2RlbHMpLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBhZGQgaW50ZWdyYXRpb24gcmVzb3VyY2VzXG4gICAgY29uc3QgaW50ZWdyYXRpb25JZCA9IFwiSW50ZWdyYXRpb25cIjtcbiAgICBpZiAodGhpcy5iaW5kUmVzdWx0ICYmICF0aGlzLm5vZGUudHJ5RmluZENoaWxkKGludGVncmF0aW9uSWQpKSB7XG4gICAgICBjb25zdCBpbnRlZ3JhdGlvblJlc291cmNlID1cbiAgICAgICAgbmV3IGFwaUdhdGV3YXlJbnRlZ3JhdGlvbi5BcGlHYXRld2F5SW50ZWdyYXRpb24oXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBpbnRlZ3JhdGlvbklkLFxuICAgICAgICAgIHRoaXMucmVuZGVySW50ZWdyYXRpb24odGhpcy5iaW5kUmVzdWx0KSxcbiAgICAgICAgKTtcbiAgICAgIC8vIGNhbGwgbm9kZS5hZGREZXBlbmRlbmN5IG9uIGV2ZXJ5IGRlcGxveW1lbnQgdHJhY2tlZFxuICAgICAgZm9yIChjb25zdCBkZXBsb3ltZW50IG9mIHRoaXMuX2RlcGxveW1lbnRzKSB7XG4gICAgICAgIGRlcGxveW1lbnQubm9kZS5hZGREZXBlbmRlbmN5KGludGVncmF0aW9uUmVzb3VyY2UpO1xuICAgICAgfVxuICAgICAgLy8gYWRkIGludGVncmF0aW9uIHJlc3BvbnNlcyAod2l0aCBkZXBlbmRlbmNpZXMgb24gaW50ZWdyYXRpb24pXG4gICAgICB0aGlzLmJpbmRSZXN1bHQub3B0aW9ucz8uaW50ZWdyYXRpb25SZXNwb25zZXM/LmZvckVhY2goKGlyKSA9PiB7XG4gICAgICAgIGNvbnN0IGlySWQgPSBgSW50ZWdyYXRpb25SZXNwb25zZSR7aXIuc3RhdHVzQ29kZX1gO1xuICAgICAgICBpZiAodGhpcy5ub2RlLnRyeUZpbmRDaGlsZChpcklkKSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBpbnRlZ3JhdGlvblJlc3BvbnNlID1cbiAgICAgICAgICBuZXcgYXBpR2F0ZXdheUludGVncmF0aW9uUmVzcG9uc2UuQXBpR2F0ZXdheUludGVncmF0aW9uUmVzcG9uc2UoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgaXJJZCxcbiAgICAgICAgICAgIHRoaXMucmVuZGVySW50ZWdyYXRpb25SZXNwb25zZShcbiAgICAgICAgICAgICAgaW50ZWdyYXRpb25SZXNvdXJjZSxcbiAgICAgICAgICAgICAgaXIsXG4gICAgICAgICAgICAgIG1ldGhvZFJlc3BvbnNlcyxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKTtcblxuICAgICAgICAvLyBjYWxsIG5vZGUuYWRkRGVwZW5kZW5jeSBvbiBldmVyeSBkZXBsb3ltZW50IHRyYWNrZWRcbiAgICAgICAgZm9yIChjb25zdCBkZXBsb3ltZW50IG9mIHRoaXMuX2RlcGxveW1lbnRzKSB7XG4gICAgICAgICAgZGVwbG95bWVudC5ub2RlLmFkZERlcGVuZGVuY3koaW50ZWdyYXRpb25SZXNwb25zZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyUmVzcG9uc2VNb2RlbHMoXG4gICAgcmVzcG9uc2VNb2RlbHM6IHsgW2NvbnRlbnRUeXBlOiBzdHJpbmddOiBJTW9kZWwgfSB8IHVuZGVmaW5lZCxcbiAgKTogeyBbY29udGVudFR5cGU6IHN0cmluZ106IHN0cmluZyB9IHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXJlc3BvbnNlTW9kZWxzKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgT2JqZWN0LmVudHJpZXMocmVzcG9uc2VNb2RlbHMpLm1hcCgoW2NvbnRlbnRUeXBlLCBybV0pID0+IFtcbiAgICAgICAgY29udGVudFR5cGUsXG4gICAgICAgIHJtLm1vZGVsSWQsXG4gICAgICBdKSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJJbnRlZ3JhdGlvbihcbiAgICBiaW5kUmVzdWx0OiBJbnRlZ3JhdGlvbkNvbmZpZyxcbiAgKTogYXBpR2F0ZXdheUludGVncmF0aW9uLkFwaUdhdGV3YXlJbnRlZ3JhdGlvbkNvbmZpZyB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IGJpbmRSZXN1bHQub3B0aW9ucyA/PyB7fTtcbiAgICBsZXQgY3JlZGVudGlhbHM6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpZiAob3B0aW9ucy5jcmVkZW50aWFsc1JvbGUpIHtcbiAgICAgIGNyZWRlbnRpYWxzID0gb3B0aW9ucy5jcmVkZW50aWFsc1JvbGUucm9sZUFybjtcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuY3JlZGVudGlhbHNQYXNzdGhyb3VnaCkge1xuICAgICAgY3JlZGVudGlhbHMgPSBBd3NTdGFjay5vZkF3c0NvbnN0cnVjdCh0aGlzKS5mb3JtYXRBcm4oe1xuICAgICAgICBzZXJ2aWNlOiBcImlhbVwiLFxuICAgICAgICByZWdpb246IFwiXCIsXG4gICAgICAgIGFjY291bnQ6IFwiKlwiLFxuICAgICAgICByZXNvdXJjZTogXCJ1c2VyXCIsXG4gICAgICAgIGFybkZvcm1hdDogQXJuRm9ybWF0LlNMQVNIX1JFU09VUkNFX05BTUUsXG4gICAgICAgIHJlc291cmNlTmFtZTogXCIqXCIsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgcmVzdEFwaUlkOiB0aGlzLmFwaS5yZXN0QXBpSWQsXG4gICAgICByZXNvdXJjZUlkOiB0aGlzLnJlc291cmNlLnJlc291cmNlSWQsXG4gICAgICBodHRwTWV0aG9kOiB0aGlzLm1ldGhvZFJlc291cmNlLmh0dHBNZXRob2QsIC8vIEZyb250ZW5kIG1ldGhvZCdzIEhUVFAgdmVyYlxuICAgICAgdHlwZTogYmluZFJlc3VsdC50eXBlLFxuICAgICAgdXJpOiBiaW5kUmVzdWx0LnVyaSxcbiAgICAgIGludGVncmF0aW9uSHR0cE1ldGhvZDogYmluZFJlc3VsdC5pbnRlZ3JhdGlvbkh0dHBNZXRob2QsIC8vIEJhY2tlbmQgbWV0aG9kJ3MgSFRUUCB2ZXJiXG4gICAgICBjYWNoZUtleVBhcmFtZXRlcnM6IG9wdGlvbnMuY2FjaGVLZXlQYXJhbWV0ZXJzLFxuICAgICAgY2FjaGVOYW1lc3BhY2U6IG9wdGlvbnMuY2FjaGVOYW1lc3BhY2UsXG4gICAgICBjb250ZW50SGFuZGxpbmc6IG9wdGlvbnMuY29udGVudEhhbmRsaW5nLFxuICAgICAgcmVxdWVzdFBhcmFtZXRlcnM6IG9wdGlvbnMucmVxdWVzdFBhcmFtZXRlcnMsXG4gICAgICByZXF1ZXN0VGVtcGxhdGVzOiBvcHRpb25zLnJlcXVlc3RUZW1wbGF0ZXMsXG4gICAgICBwYXNzdGhyb3VnaEJlaGF2aW9yOiBvcHRpb25zLnBhc3N0aHJvdWdoQmVoYXZpb3IsXG4gICAgICBjb25uZWN0aW9uVHlwZTogb3B0aW9ucy5jb25uZWN0aW9uVHlwZSxcbiAgICAgIGNvbm5lY3Rpb25JZDogb3B0aW9ucy52cGNMaW5rID8gb3B0aW9ucy52cGNMaW5rLnZwY0xpbmtJZCA6IHVuZGVmaW5lZCxcbiAgICAgIGNyZWRlbnRpYWxzLFxuICAgICAgdGltZW91dE1pbGxpc2Vjb25kczogb3B0aW9ucy50aW1lb3V0Py50b01pbGxpc2Vjb25kcygpLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHJlbmRlckludGVncmF0aW9uUmVzcG9uc2UoXG4gICAgaW50ZWdyYXRpb246IGFwaUdhdGV3YXlJbnRlZ3JhdGlvbi5BcGlHYXRld2F5SW50ZWdyYXRpb24sXG4gICAgaXI6IEludGVncmF0aW9uUmVzcG9uc2UsXG4gICAgbXI6IFJlY29yZDxzdHJpbmcsIGFwaUdhdGV3YXlNZXRob2RSZXNwb25zZS5BcGlHYXRld2F5TWV0aG9kUmVzcG9uc2U+LFxuICApOiBhcGlHYXRld2F5SW50ZWdyYXRpb25SZXNwb25zZS5BcGlHYXRld2F5SW50ZWdyYXRpb25SZXNwb25zZUNvbmZpZyB7XG4gICAgY29uc3QgbWV0aG9kUmVzcG9uc2UgPSBtcltpci5zdGF0dXNDb2RlXTtcbiAgICByZXR1cm4ge1xuICAgICAgcmVzdEFwaUlkOiB0aGlzLmFwaS5yZXN0QXBpSWQsXG4gICAgICByZXNvdXJjZUlkOiB0aGlzLnJlc291cmNlLnJlc291cmNlSWQsXG4gICAgICBodHRwTWV0aG9kOiB0aGlzLm1ldGhvZFJlc291cmNlLmh0dHBNZXRob2QsXG4gICAgICAvLyBUT0RPOiBJcyB0aGlzIGNvcnJlY3QgdG8gbm90IGNyZWF0ZSBhIG1ldGhvZFJlc3BvbnNlP1xuICAgICAgc3RhdHVzQ29kZTogbWV0aG9kUmVzcG9uc2UgPyBtZXRob2RSZXNwb25zZS5zdGF0dXNDb2RlIDogaXIuc3RhdHVzQ29kZSxcbiAgICAgIGNvbnRlbnRIYW5kbGluZzogaXIuY29udGVudEhhbmRsaW5nLFxuICAgICAgcmVzcG9uc2VQYXJhbWV0ZXJzOiBpci5yZXNwb25zZVBhcmFtZXRlcnMsXG4gICAgICByZXNwb25zZVRlbXBsYXRlczogaXIucmVzcG9uc2VUZW1wbGF0ZXMsXG4gICAgICBzZWxlY3Rpb25QYXR0ZXJuOiBpci5zZWxlY3Rpb25QYXR0ZXJuLFxuICAgICAgZGVwZW5kc09uOiBbaW50ZWdyYXRpb25dLFxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGVudW0gQXV0aG9yaXphdGlvblR5cGUge1xuICBOT05FID0gXCJOT05FXCIsXG4gIElBTSA9IFwiQVdTX0lBTVwiLFxuICBDVVNUT00gPSBcIkNVU1RPTVwiLFxuICBDT0dOSVRPID0gXCJDT0dOSVRPX1VTRVJfUE9PTFNcIixcbn1cblxuZnVuY3Rpb24gcGF0aEZvckFybihwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcGF0aC5yZXBsYWNlKC9cXHtbXlxcfV0qXFx9L2csIFwiKlwiKTtcbn1cblxuZnVuY3Rpb24gbWVyZ2VEaWN0czxUPihcbiAgeHM/OiBSZWNvcmQ8c3RyaW5nLCBUPixcbiAgeXM/OiBSZWNvcmQ8c3RyaW5nLCBUPixcbik6IFJlY29yZDxzdHJpbmcsIFQ+IHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIHhzIHx8IHlzID8gT2JqZWN0LmFzc2lnbih4cyA/PyB7fSwgeXMpIDogdW5kZWZpbmVkO1xufVxuIl19
|
|
414
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0aG9kLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F3cy9jb21wdXRlL21ldGhvZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLGlHQUFpRztBQUVqRyxzREFLNkI7QUFDN0IsaUNBQXNEO0FBRXRELCtGQUEwRTtBQUMxRSx1REFBdUQ7QUFDdkQsNkNBQXVEO0FBT3ZELDhDQUFzRDtBQUt0RCx1Q0FBMkQ7QUFFM0QseUNBQXlDO0FBQ3pDLGdDQUFtQztBQUNuQyxvREFBdUU7QUFDdkUsNENBQXdDO0FBQ3hDLDRDQUE0QztBQUM1Qyw4QkFBOEI7QUFvSjlCLE1BQWEsTUFBTyxTQUFRLGdDQUFnQjtJQWUxQyxJQUFXLE9BQU87UUFDaEIsT0FBTztZQUNMLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDM0IsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO1NBQzFCLENBQUM7SUFDSixDQUFDO0lBRUQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFrQjtRQUMxRCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQWZULGlCQUFZLEdBQUcsSUFBSSxLQUFLLEVBQWMsQ0FBQztRQUV2QyxxQkFBZ0IsR0FBcUIsRUFBRSxDQUFDO1FBZXZELElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztRQUMvQixJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO1FBQzlCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUVqRCxJQUFBLG9DQUFrQixFQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUVwQyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQztRQUNwQyxNQUFN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QUMsSUFBWTtJQUM5QixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFDLENBQUM7QUFFRCxTQUFTLFVBQVUsQ0FDakIsRUFBc0IsRUFDdEIsRUFBc0I7SUFFdEIsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUM1RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvdjIuMTg2LjAvcGFja2FnZXMvYXdzLWNkay1saWIvYXdzLWFwaWdhdGV3YXkvbGliL21ldGhvZC50c1xuXG5pbXBvcnQge1xuICBhcGlHYXRld2F5TWV0aG9kLFxuICBhcGlHYXRld2F5SW50ZWdyYXRpb24sXG4gIGFwaUdhdGV3YXlNZXRob2RSZXNwb25zZSxcbiAgYXBpR2F0ZXdheUludGVncmF0aW9uUmVzcG9uc2UsXG59IGZyb20gXCJAY2RrdG4vcHJvdmlkZXItYXdzXCI7XG5pbXBvcnQgeyBBbm5vdGF0aW9ucywgVGVycmFmb3JtRWxlbWVudCB9IGZyb20gXCJjZGt0blwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IEFwaUdhdGV3YXlNZXRyaWNzIH0gZnJvbSBcIi4vYXBpZ2F0ZXdheS1jYW5uZWQtbWV0cmljcy5nZW5lcmF0ZWRcIjtcbmltcG9ydCB7IHZhbGlkYXRlSHR0cE1ldGhvZCB9IGZyb20gXCIuL2FwaWdhdGV3YXktdXRpbFwiO1xuaW1wb3J0IHsgQXV0aG9yaXplciwgSUF1dGhvcml6ZXIgfSBmcm9tIFwiLi9hdXRob3JpemVyXCI7XG5pbXBvcnQgeyBEZXBsb3ltZW50IH0gZnJvbSBcIi4vZGVwbG95bWVudFwiO1xuaW1wb3J0IHtcbiAgSW50ZWdyYXRpb24sXG4gIEludGVncmF0aW9uQ29uZmlnLFxuICBJbnRlZ3JhdGlvblJlc3BvbnNlLFxufSBmcm9tIFwiLi9pbnRlZ3JhdGlvblwiO1xuaW1wb3J0IHsgTW9ja0ludGVncmF0aW9uIH0gZnJvbSBcIi4vaW50ZWdyYXRpb25zL21vY2tcIjtcbmltcG9ydCB7IE1ldGhvZFJlc3BvbnNlIH0gZnJvbSBcIi4vbWV0aG9kcmVzcG9uc2VcIjtcbmltcG9ydCB7IElNb2RlbCB9IGZyb20gXCIuL21vZGVsXCI7XG5pbXBvcnQgeyBJUmVxdWVzdFZhbGlkYXRvciwgUmVxdWVzdFZhbGlkYXRvck9wdGlvbnMgfSBmcm9tIFwiLi9yZXF1ZXN0dmFsaWRhdG9yXCI7XG5pbXBvcnQgeyBJUmVzb3VyY2UgfSBmcm9tIFwiLi9yZXNvdXJjZVwiO1xuaW1wb3J0IHsgSVJlc3RBcGksIFJlc3RBcGksIFJlc3RBcGlCYXNlIH0gZnJvbSBcIi4vcmVzdGFwaVwiO1xuaW1wb3J0IHsgSVN0YWdlIH0gZnJvbSBcIi4vc3RhZ2VcIjtcbi8vIGltcG9ydCB7IEZuIH0gZnJvbSBcIi4uLy4uL3RlcnJhLWZ1bmNcIjtcbmltcG9ydCB7IEFybkZvcm1hdCB9IGZyb20gXCIuLi9hcm5cIjtcbmltcG9ydCB7IEF3c0NvbnN0cnVjdEJhc2UsIEF3c0NvbnN0cnVjdFByb3BzIH0gZnJvbSBcIi4uL2F3cy1jb25zdHJ1Y3RcIjtcbmltcG9ydCB7IEF3c1N0YWNrIH0gZnJvbSBcIi4uL2F3cy1zdGFja1wiO1xuaW1wb3J0ICogYXMgY2xvdWR3YXRjaCBmcm9tIFwiLi4vY2xvdWR3YXRjaFwiO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gXCIuLi9pYW1cIjtcblxuZXhwb3J0IGludGVyZmFjZSBNZXRob2RPcHRpb25zIHtcbiAgLyoqXG4gICAqIEEgZnJpZW5kbHkgb3BlcmF0aW9uIG5hbWUgZm9yIHRoZSBtZXRob2QuIEZvciBleGFtcGxlLCB5b3UgY2FuIGFzc2lnbiB0aGVcbiAgICogT3BlcmF0aW9uTmFtZSBvZiBMaXN0UGV0cyBmb3IgdGhlIEdFVCAvcGV0cyBtZXRob2QuXG4gICAqL1xuICByZWFkb25seSBvcGVyYXRpb25OYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBNZXRob2QgYXV0aG9yaXphdGlvbi5cbiAgICogSWYgdGhlIHZhbHVlIGlzIHNldCBvZiBgQ3VzdG9tYCwgYW4gYGF1dGhvcml6ZXJgIG11c3QgYWxzbyBiZSBzcGVjaWZpZWQuXG4gICAqXG4gICAqIElmIHlvdSdyZSB1c2luZyBvbmUgb2YgdGhlIGF1dGhvcml6ZXJzIHRoYXQgYXJlIGF2YWlsYWJsZSB2aWEgdGhlIGBBdXRob3JpemVyYCBjbGFzcywgc3VjaCBhcyBgQXV0aG9yaXplciN0b2tlbigpYCxcbiAgICogaXQgaXMgcmVjb21tZW5kZWQgdGhhdCB0aGlzIG9wdGlvbiBub3QgYmUgc3BlY2lmaWVkLiBUaGUgYXV0aG9yaXplciB3aWxsIHRha2UgY2FyZSBvZiBzZXR0aW5nIHRoZSBjb3JyZWN0IGF1dGhvcml6YXRpb24gdHlwZS5cbiAgICogSG93ZXZlciwgc3BlY2lmeWluZyBhbiBhdXRob3JpemF0aW9uIHR5cGUgdXNpbmcgdGhpcyBwcm9wZXJ0eSB0aGF0IGNvbmZsaWN0cyB3aXRoIHdoYXQgaXMgZXhwZWN0ZWQgYnkgdGhlIGBBdXRob3JpemVyYFxuICAgKiB3aWxsIHJlc3VsdCBpbiBhbiBlcnJvci5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBvcGVuIGFjY2VzcyB1bmxlc3MgYGF1dGhvcml6ZXJgIGlzIHNwZWNpZmllZFxuICAgKi9cbiAgcmVhZG9ubHkgYXV0aG9yaXphdGlvblR5cGU/OiBBdXRob3JpemF0aW9uVHlwZTtcblxuICAvKipcbiAgICogSWYgYGF1dGhvcml6YXRpb25UeXBlYCBpcyBgQ3VzdG9tYCwgdGhpcyBzcGVjaWZpZXMgdGhlIElEIG9mIHRoZSBtZXRob2RcbiAgICogYXV0aG9yaXplciByZXNvdXJjZS5cbiAgICogSWYgc3BlY2lmaWVkLCB0aGUgdmFsdWUgb2YgYGF1dGhvcml6YXRpb25UeXBlYCBtdXN0IGJlIHNldCB0byBgQ3VzdG9tYFxuICAgKi9cbiAgcmVhZG9ubHkgYXV0aG9yaXplcj86IElBdXRob3JpemVyO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgbWV0aG9kIHJlcXVpcmVzIGNsaWVudHMgdG8gc3VibWl0IGEgdmFsaWQgQVBJIGtleS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGFwaUtleVJlcXVpcmVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHJlc3BvbnNlcyB0aGF0IGNhbiBiZSBzZW50IHRvIHRoZSBjbGllbnQgd2hvIGNhbGxzIHRoZSBtZXRob2QuXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICpcbiAgICogVGhpcyBwcm9wZXJ0eSBpcyBub3QgcmVxdWlyZWQsIGJ1dCBpZiB0aGVzZSBhcmUgbm90IHN1cHBsaWVkIGZvciBhIExhbWJkYVxuICAgKiBwcm94eSBpbnRlZ3JhdGlvbiwgdGhlIExhbWJkYSBmdW5jdGlvbiBtdXN0IHJldHVybiBhIHZhbHVlIG9mIHRoZSBjb3JyZWN0IGZvcm1hdCxcbiAgICogZm9yIHRoZSBpbnRlZ3JhdGlvbiByZXNwb25zZSB0byBiZSBjb3JyZWN0bHkgbWFwcGVkIHRvIGEgcmVzcG9uc2UgdG8gdGhlIGNsaWVudC5cbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXBpZ2F0ZXdheS9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvYXBpLWdhdGV3YXktbWV0aG9kLXNldHRpbmdzLW1ldGhvZC1yZXNwb25zZS5odG1sXG4gICAqL1xuICByZWFkb25seSBtZXRob2RSZXNwb25zZXM/OiBNZXRob2RSZXNwb25zZVtdO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVxdWVzdCBwYXJhbWV0ZXJzIHRoYXQgQVBJIEdhdGV3YXkgYWNjZXB0cy4gU3BlY2lmeSByZXF1ZXN0IHBhcmFtZXRlcnNcbiAgICogYXMga2V5LXZhbHVlIHBhaXJzIChzdHJpbmctdG8tQm9vbGVhbiBtYXBwaW5nKSwgd2l0aCBhIHNvdXJjZSBhcyB0aGUga2V5IGFuZFxuICAgKiBhIEJvb2xlYW4gYXMgdGhlIHZhbHVlLiBUaGUgQm9vbGVhbiBzcGVjaWZpZXMgd2hldGhlciBhIHBhcmFtZXRlciBpcyByZXF1aXJlZC5cbiAgICogQSBzb3VyY2UgbXVzdCBtYXRjaCB0aGUgZm9ybWF0IG1ldGhvZC5yZXF1ZXN0LmxvY2F0aW9uLm5hbWUsIHdoZXJlIHRoZSBsb2NhdGlvblxuICAgKiBpcyBxdWVyeXN0cmluZywgcGF0aCwgb3IgaGVhZGVyLCBhbmQgbmFtZSBpcyBhIHZhbGlkLCB1bmlxdWUgcGFyYW1ldGVyIG5hbWUuXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IHJlcXVlc3RQYXJhbWV0ZXJzPzogeyBbcGFyYW06IHN0cmluZ106IGJvb2xlYW4gfTtcblxuICAvKipcbiAgICogVGhlIG1vZGVscyB3aGljaCBkZXNjcmliZSBkYXRhIHN0cnVjdHVyZSBvZiByZXF1ZXN0IHBheWxvYWQuIFdoZW5cbiAgICogY29tYmluZWQgd2l0aCBgcmVxdWVzdFZhbGlkYXRvcmAgb3IgYHJlcXVlc3RWYWxpZGF0b3JPcHRpb25zYCwgdGhlIHNlcnZpY2VcbiAgICogd2lsbCB2YWxpZGF0ZSB0aGUgQVBJIHJlcXVlc3QgcGF5bG9hZCBiZWZvcmUgaXQgcmVhY2hlcyB0aGUgQVBJJ3MgSW50ZWdyYXRpb24gKGluY2x1ZGluZyBwcm94aWVzKS5cbiAgICogU3BlY2lmeSBgcmVxdWVzdE1vZGVsc2AgYXMga2V5LXZhbHVlIHBhaXJzLCB3aXRoIGEgY29udGVudCB0eXBlXG4gICAqIChlLmcuIGAnYXBwbGljYXRpb24vanNvbidgKSBhcyB0aGUga2V5IGFuZCBhbiBBUEkgR2F0ZXdheSBNb2RlbCBhcyB0aGUgdmFsdWUuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqXG4gICAqICAgICBkZWNsYXJlIGNvbnN0IGFwaTogYXBpZ2F0ZXdheS5SZXN0QXBpO1xuICAgKiAgICAgZGVjbGFyZSBjb25zdCB1c2VyTGFtYmRhOiBsYW1iZGEuRnVuY3Rpb247XG4gICAqXG4gICAqICAgICBjb25zdCB1c2VyTW9kZWw6IGFwaWdhdGV3YXkuTW9kZWwgPSBhcGkuYWRkTW9kZWwoJ1VzZXJNb2RlbCcsIHtcbiAgICogICAgICAgICBzY2hlbWE6IHtcbiAgICogICAgICAgICAgICAgdHlwZTogYXBpZ2F0ZXdheS5Kc29uU2NoZW1hVHlwZS5PQkpFQ1QsXG4gICAqICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICogICAgICAgICAgICAgICAgIHVzZXJJZDoge1xuICAgKiAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGFwaWdhdGV3YXkuSnNvblNjaGVtYVR5cGUuU1RSSU5HXG4gICAqICAgICAgICAgICAgICAgICB9LFxuICAgKiAgICAgICAgICAgICAgICAgbmFtZToge1xuICAgKiAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGFwaWdhdGV3YXkuSnNvblNjaGVtYVR5cGUuU1RSSU5HXG4gICAqICAgICAgICAgICAgICAgICB9XG4gICAqICAgICAgICAgICAgIH0sXG4gICAqICAgICAgICAgICAgIHJlcXVpcmVkOiBbJ3VzZXJJZCddXG4gICAqICAgICAgICAgfVxuICAgKiAgICAgfSk7XG4gICAqICAgICBhcGkucm9vdC5hZGRSZXNvdXJjZSgndXNlcicpLmFkZE1ldGhvZCgnUE9TVCcsXG4gICAqICAgICAgICAgbmV3IGFwaWdhdGV3YXkuTGFtYmRhSW50ZWdyYXRpb24odXNlckxhbWJkYSksIHtcbiAgICogICAgICAgICAgICAgcmVxdWVzdE1vZGVsczoge1xuICAgKiAgICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nOiB1c2VyTW9kZWxcbiAgICogICAgICAgICAgICAgfVxuICAgKiAgICAgICAgIH1cbiAgICogICAgICk7XG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FwaWdhdGV3YXkvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2FwaS1nYXRld2F5LW1ldGhvZC1zZXR0aW5ncy1tZXRob2QtcmVxdWVzdC5odG1sI3NldHVwLW1ldGhvZC1yZXF1ZXN0LW1vZGVsXG4gICAqL1xuICByZWFkb25seSByZXF1ZXN0TW9kZWxzPzogeyBbcGFyYW06IHN0cmluZ106IElNb2RlbCB9O1xuXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIGFzc29jaWF0ZWQgcmVxdWVzdCB2YWxpZGF0b3IuXG4gICAqIE9ubHkgb25lIG9mIGByZXF1ZXN0VmFsaWRhdG9yYCBvciBgcmVxdWVzdFZhbGlkYXRvck9wdGlvbnNgIG11c3QgYmUgc3BlY2lmaWVkLlxuICAgKiBXb3JrcyB0b2dldGhlciB3aXRoIGByZXF1ZXN0TW9kZWxzYCBvciBgcmVxdWVzdFBhcmFtZXRlcnNgIHRvIHZhbGlkYXRlXG4gICAqIHRoZSByZXF1ZXN0IGJlZm9yZSBpdCByZWFjaGVzIGludGVncmF0aW9uIGxpa2UgTGFtYmRhIFByb3h5IEludGVncmF0aW9uLlxuICAgKiBAZGVmYXVsdCAtIE5vIGRlZmF1bHQgdmFsaWRhdG9yXG4gICAqL1xuICByZWFkb25seSByZXF1ZXN0VmFsaWRhdG9yPzogSVJlcXVlc3RWYWxpZGF0b3I7XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBhdXRob3JpemF0aW9uIHNjb3BlcyBjb25maWd1cmVkIG9uIHRoZSBtZXRob2QuIFRoZSBzY29wZXMgYXJlIHVzZWQgd2l0aFxuICAgKiBhIENPR05JVE9fVVNFUl9QT09MUyBhdXRob3JpemVyIHRvIGF1dGhvcml6ZSB0aGUgbWV0aG9kIGludm9jYXRpb24uXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWFwaWdhdGV3YXktbWV0aG9kLmh0bWwjY2ZuLWFwaWdhdGV3YXktbWV0aG9kLWF1dGhvcml6YXRpb25zY29wZXNcbiAgICogQGRlZmF1bHQgLSBubyBhdXRob3JpemF0aW9uIHNjb3Blc1xuICAgKi9cbiAgcmVhZG9ubHkgYXV0aG9yaXphdGlvblNjb3Blcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBSZXF1ZXN0IHZhbGlkYXRvciBvcHRpb25zIHRvIGNyZWF0ZSBuZXcgdmFsaWRhdG9yXG4gICAqIE9ubHkgb25lIG9mIGByZXF1ZXN0VmFsaWRhdG9yYCBvciBgcmVxdWVzdFZhbGlkYXRvck9wdGlvbnNgIG11c3QgYmUgc3BlY2lmaWVkLlxuICAgKiBXb3JrcyB0b2dldGhlciB3aXRoIGByZXF1ZXN0TW9kZWxzYCBvciBgcmVxdWVzdFBhcmFtZXRlcnNgIHRvIHZhbGlkYXRlXG4gICAqIHRoZSByZXF1ZXN0IGJlZm9yZSBpdCByZWFjaGVzIGludGVncmF0aW9uIGxpa2UgTGFtYmRhIFByb3h5IEludGVncmF0aW9uLlxuICAgKiBAZGVmYXVsdCAtIE5vIGRlZmF1bHQgdmFsaWRhdG9yXG4gICAqL1xuICByZWFkb25seSByZXF1ZXN0VmFsaWRhdG9yT3B0aW9ucz86IFJlcXVlc3RWYWxpZGF0b3JPcHRpb25zO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1ldGhvZFByb3BzIGV4dGVuZHMgQXdzQ29uc3RydWN0UHJvcHMge1xuICAvKipcbiAgICogVGhlIHJlc291cmNlIHRoaXMgbWV0aG9kIGlzIGFzc29jaWF0ZWQgd2l0aC4gRm9yIHJvb3QgcmVzb3VyY2UgbWV0aG9kcyxcbiAgICogc3BlY2lmeSB0aGUgYFJlc3RBcGlgIG9iamVjdC5cbiAgICovXG4gIHJlYWRvbmx5IHJlc291cmNlOiBJUmVzb3VyY2U7XG5cbiAgLyoqXG4gICAqIFRoZSBIVFRQIG1ldGhvZCAoXCJHRVRcIiwgXCJQT1NUXCIsIFwiUFVUXCIsIC4uLikgdGhhdCBjbGllbnRzIHVzZSB0byBjYWxsIHRoaXMgbWV0aG9kLlxuICAgKi9cbiAgcmVhZG9ubHkgaHR0cE1ldGhvZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgYmFja2VuZCBzeXN0ZW0gdGhhdCB0aGUgbWV0aG9kIGNhbGxzIHdoZW4gaXQgcmVjZWl2ZXMgYSByZXF1ZXN0LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGEgbmV3IGBNb2NrSW50ZWdyYXRpb25gLlxuICAgKi9cbiAgcmVhZG9ubHkgaW50ZWdyYXRpb24/OiBJbnRlZ3JhdGlvbjtcblxuICAvKipcbiAgICogTWV0aG9kIG9wdGlvbnMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gb3B0aW9ucy5cbiAgICovXG4gIHJlYWRvbmx5IG9wdGlvbnM/OiBNZXRob2RPcHRpb25zO1xufVxuXG5leHBvcnQgY2xhc3MgTWV0aG9kIGV4dGVuZHMgQXdzQ29uc3RydWN0QmFzZSB7XG4gIHB1YmxpYyByZWFkb25seSBtZXRob2RJZDogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgaHR0cE1ldGhvZDogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgcmVzb3VyY2U6IElSZXNvdXJjZTtcbiAgLyoqXG4gICAqIFRoZSBBUEkgR2F0ZXdheSBSZXN0QXBpIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG1ldGhvZC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhcGk6IElSZXN0QXBpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2RlcGxveW1lbnRzID0gbmV3IEFycmF5PERlcGxveW1lbnQ+KCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfbWV0aG9kUmVzcG9uc2VzOiBNZXRob2RSZXNwb25zZVtdID0gW107XG4gIHByaXZhdGUgcmVhZG9ubHkgbWV0aG9kUmVzb3VyY2U6IGFwaUdhdGV3YXlNZXRob2QuQXBpR2F0ZXdheU1ldGhvZDtcbiAgcHJpdmF0ZSByZWFkb25seSBiaW5kUmVzdWx0PzogSW50ZWdyYXRpb25Db25maWc7XG5cbiAgcHVibGljIGdldCBvdXRwdXRzKCk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIHJldHVybiB7XG4gICAgICBtZXRob2RJZDogdGhpcy5tZXRob2RJZCxcbiAgICAgIGh0dHBNZXRob2Q6IHRoaXMuaHR0cE1ldGhvZCxcbiAgICAgIG1ldGhvZEFybjogdGhpcy5tZXRob2RBcm4sXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBNZXRob2RQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuXG4gICAgdGhpcy5yZXNvdXJjZSA9IHByb3BzLnJlc291cmNlO1xuICAgIHRoaXMuYXBpID0gcHJvcHMucmVzb3VyY2UuYXBpO1xuICAgIHRoaXMuaHR0cE1ldGhvZCA9IHByb3BzLmh0dHBNZXRob2QudG9VcHBlckNhc2UoKTtcblxuICAgIHZhbGlkYXRlSHR0cE1ldGhvZCh0aGlzLmh0dHBNZXRob2QpO1xuXG4gICAgY29uc3Qgb3B0aW9ucyA9IHByb3BzLm9wdGlvbnMgfHwge307XG4gICAgY29uc3QgZGVmYXVsdE1ldGhvZE9wdGlvbnMgPSBwcm9wcy5yZXNvdXJjZS5kZWZhdWx0TWV0aG9kT3B0aW9ucyB8fCB7fTtcblxuICAgIGNvbnN0IGF1dGhvcml6ZXIgPVxuICAgICAgb3B0aW9ucy5hdXRob3JpemF0aW9uVHlwZSA9PT0gQXV0aG9yaXphdGlvblR5cGUuTk9ORSAmJlxuICAgICAgb3B0aW9ucy5hdXRob3JpemVyID09IHVuZGVmaW5lZFxuICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICA6IG9wdGlvbnMuYXV0aG9yaXplciB8fCBkZWZhdWx0TWV0aG9kT3B0aW9ucy5hdXRob3JpemVyO1xuICAgIGNvbnN0IGF1dGhvcml6ZXJJZCA9IGF1dGhvcml6ZXI/LmF1dGhvcml6ZXJJZFxuICAgICAgPyBhdXRob3JpemVyLmF1dGhvcml6ZXJJZFxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAvKipcbiAgICAgKiBHZXQgYW5kIHZhbGlkYXRlIGF1dGhvcml6YXRpb24gdHlwZSBmcm9tIHRoZSB2YWx1ZXMgc2V0IGJ5IEFQSSByZXNvdXJjZSBhbmQgbWV0aG9kLlxuICAgICAqXG4gICAgICogUkVTVCBBUEkgUmVzb3VyY2VcbiAgICAgKiDilJTilIDilIAgZGVmYXVsdE1ldGhvZE9wdGlvbnM6IE1ldGhvZCBvcHRpb25zIHRvIHVzZSBhcyBhIGRlZmF1bHQgZm9yIGFsbCBtZXRob2RzIGNyZWF0ZWQgd2l0aGluIHRoaXMgQVBJIHVubGVzcyBjdXN0b20gb3B0aW9ucyBhcmUgc3BlY2lmaWVkLlxuICAgICAqICAgIOKUnOKUgOKUgCBhdXRob3JpemF0aW9uVHlwZTogU3BlY2lmaWVzIHRoZSBkZWZhdWx0IGF1dGhvcml6YXRpb24gdHlwZSB1bmxlc3MgY3VzdG9tIG9wdGlvbnMgYXJlIHNwZWNpZmllZCwgcmVjb21tZW5kZWQgdG8gbm90IGJlIHNwZWNpZmllZC5cbiAgICAgKiAgICDilJTilIDilIAgYXV0aG9yaXplcjogU3BlY2lmaWVzIHRoZSBkZWZhdWx0IGF1dGhvcml6ZXIgZm9yIGFsbCBtZXRob2RzIGNyZWF0ZWQgd2l0aGluIHRoaXMgQVBJIHVubGVzcyBjdXN0b20gb3B0aW9ucyBhcmUgc3BlY2lmaWVkLlxuICAgICAqICAgICAgICDilJTilIDilIAgYXV0aG9yaXplclR5cGU6IFRoZSBkZWZhdWx0IGF1dGhvcml6YXRpb24gdHlwZSBvZiB0aGlzIGF1dGhvcml6ZXIuXG4gICAgICpcbiAgICAgKiBSRVNUIEFQSSBNZXRob2RcbiAgICAgKiDilJTilIDilIAgb3B0aW9uczogTWV0aG9kIG9wdGlvbnMuXG4gICAgICogICAg4pSc4pSA4pSAIGF1dGhvcml6YXRpb25UeXBlOiBTcGVjaWZpZXMgdGhlIGF1dGhvcml6YXRpb24gdHlwZSwgcmVjb21tZW5kZWQgdG8gbm90IGJlIHNwZWNpZmllZC5cbiAgICAgKiAgICDilJTilIDilIAgYXV0aG9yaXplcjogU3BlY2lmaWVzIGFuIGF1dGhvcml6ZXIgdG8gdXNlIGZvciB0aGlzIG1ldGhvZC5cbiAgICAgKiAgICAgICAg4pSU4pSA4pSAIGF1dGhvcml6ZXJUeXBlOiBUaGUgYXV0aG9yaXphdGlvbiB0eXBlIG9mIHRoaXMgYXV0aG9yaXplci5cbiAgICAgKlxuICAgICAqIEF1dGhvcml6YXRpb24gdHlwZSBpcyBmaXJzdCBzZXQgdG8gXCJhdXRob3JpemVyLmF1dGhvcml6ZXJUeXBlXCIsIGZhbGxpbmcgYmFjayB0byBtZXRob2QncyBcImF1dGhvcml6YXRpb25UeXBlXCIsXG4gICAgICogZmFsbGluZyBiYWNrIHRvIEFQSSByZXNvdXJjZSdzIGRlZmF1bHQgXCJhdXRob3JpemF0aW9uVHlwZVwiLCBhbmQgbGFzdGx5IFwiQXV0aG9yaXplci5OT05FXCIuXG4gICAgICpcbiAgICAgKiBOb3RlIHRoYXQgXCJhdXRob3JpemVyLmF1dGhvcml6ZXJUeXBlXCIgc2hvdWxkIG1hdGNoIG1ldGhvZCBvciByZXNvdXJjZSdzIFwiYXV0aG9yaXphdGlvblR5cGVcIiBpZiBleGlzdHMuXG4gICAgICovXG4gICAgY29uc3QgYXV0aG9yaXphdGlvblR5cGUgPSB0aGlzLmdldE1ldGhvZEF1dGhvcml6YXRpb25UeXBlKFxuICAgICAgb3B0aW9ucyxcbiAgICAgIGRlZmF1bHRNZXRob2RPcHRpb25zLFxuICAgICAgYXV0aG9yaXplcixcbiAgICApO1xuXG4gICAgLy8gQXV0aG9yaXphdGlvblNjb3BlIHNob3VsZCBvbmx5IGJlIGFwcGxpZWQgdG8gQ09HTklUT19VU0VSX1BPT0xTIEF1dGhvcml6YXRpb25UeXBlLlxuICAgIGNvbnN0IGRlZmF1bHRTY29wZXMgPVxuICAgICAgb3B0aW9ucy5hdXRob3JpemF0aW9uU2NvcGVzID8/IGRlZmF1bHRNZXRob2RPcHRpb25zLmF1dGhvcml6YXRpb25TY29wZXM7XG4gICAgY29uc3QgYXV0aG9yaXphdGlvblNjb3BlcyA9XG4gICAgICBhdXRob3JpemF0aW9uVHlwZSA9PT0gQXV0aG9yaXphdGlvblR5cGUuQ09HTklUT1xuICAgICAgICA/IGRlZmF1bHRTY29wZXNcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgaWYgKGF1dGhvcml6YXRpb25UeXBlICE9PSBBdXRob3JpemF0aW9uVHlwZS5DT0dOSVRPICYmIGRlZmF1bHRTY29wZXMpIHtcbiAgICAgIC8vICdAYXdzLWNkay9hd3MtYXBpZ2F0ZXdheTppbnZhbGlkQXV0aFNjb3BlJ1xuICAgICAgQW5ub3RhdGlvbnMub2YodGhpcykuYWRkV2FybmluZyhcbiAgICAgICAgXCInQXV0aG9yaXphdGlvblNjb3BlcycgY2FuIG9ubHkgYmUgc2V0IHdoZW4gJ0F1dGhvcml6YXRpb25UeXBlJyBzZXRzICdDT0dOSVRPX1VTRVJfUE9PTFMnLiBEZWZhdWx0IHRvIGlnbm9yZSB0aGUgdmFsdWVzIHNldCBpbiAnQXV0aG9yaXphdGlvblNjb3BlcycuXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChBdXRob3JpemVyLmlzQXV0aG9yaXplcihhdXRob3JpemVyKSkge1xuICAgICAgYXV0aG9yaXplci5fYXR0YWNoVG9BcGkodGhpcy5hcGkpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgbXIgb2Ygb3B0aW9ucy5tZXRob2RSZXNwb25zZXMgPz9cbiAgICAgIGRlZmF1bHRNZXRob2RPcHRpb25zLm1ldGhvZFJlc3BvbnNlcyA/P1xuICAgICAgW10pIHtcbiAgICAgIHRoaXMuYWRkTWV0aG9kUmVzcG9uc2UobXIpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3RWYWxpZGF0b3JJZFZhbHVlID0gdGhpcy5yZXNvbHZlUmVxdWVzdFZhbGlkYXRvcklkKG9wdGlvbnMpO1xuXG4gICAgY29uc3QgaW50ZWdyYXRpb24gPVxuICAgICAgcHJvcHMuaW50ZWdyYXRpb24gPz9cbiAgICAgIHRoaXMucmVzb3VyY2UuZGVmYXVsdEludGVncmF0aW9uID8/XG4gICAgICBuZXcgTW9ja0ludGVncmF0aW9uKCk7XG4gICAgdGhpcy5iaW5kUmVzdWx0ID0gaW50ZWdyYXRpb24uYmluZCh0aGlzKTtcblxuICAgIGNvbnN0IG1ldGhvZFByb3BzOiBhcGlHYXRld2F5TWV0aG9kLkFwaUdhdGV3YXlNZXRob2RDb25maWcgPSB7XG4gICAgICByZXN0QXBpSWQ6IHRoaXMuYXBpLnJlc3RBcGlJZCxcbiAgICAgIHJlc291cmNlSWQ6IHByb3BzLnJlc291cmNlLnJlc291cmNlSWQsXG4gICAgICBodHRwTWV0aG9kOiB0aGlzLmh0dHBNZXRob2QsXG4gICAgICBhdXRob3JpemF0aW9uOiBhdXRob3JpemF0aW9uVHlwZSxcbiAgICAgIGF1dGhvcml6ZXJJZCxcbiAgICAgIGFwaUtleVJlcXVpcmVkOlxuICAgICAgICBvcHRpb25zLmFwaUtleVJlcXVpcmVkID8/IGRlZmF1bHRNZXRob2RPcHRpb25zLmFwaUtleVJlcXVpcmVkLFxuICAgICAgb3BlcmF0aW9uTmFtZTpcbiAgICAgICAgb3B0aW9ucy5vcGVyYXRpb25OYW1lIHx8IGRlZmF1bHRNZXRob2RPcHRpb25zLm9wZXJhdGlvbk5hbWUsXG4gICAgICByZXF1ZXN0UGFyYW1ldGVyczpcbiAgICAgICAgb3B0aW9ucy5yZXF1ZXN0UGFyYW1ldGVycyB8fCBkZWZhdWx0TWV0aG9kT3B0aW9ucy5yZXF1ZXN0UGFyYW1ldGVycyxcbiAgICAgIHJlcXVlc3RNb2RlbHM6IHRoaXMucmVuZGVyUmVxdWVzdE1vZGVscyhcbiAgICAgICAgb3B0aW9ucy5yZXF1ZXN0TW9kZWxzIHx8IGRlZmF1bHRNZXRob2RPcHRpb25zLnJlcXVlc3RNb2RlbHMsXG4gICAgICApLFxuICAgICAgcmVxdWVzdFZhbGlkYXRvcklkOiByZXF1ZXN0VmFsaWRhdG9ySWRWYWx1ZSxcbiAgICAgIGF1dGhvcml6YXRpb25TY29wZXM6IGF1dGhvcml6YXRpb25TY29wZXMsXG4gICAgfTtcblxuICAgIHRoaXMubWV0aG9kUmVzb3VyY2UgPSBuZXcgYXBpR2F0ZXdheU1ldGhvZC5BcGlHYXRld2F5TWV0aG9kKFxuICAgICAgdGhpcyxcbiAgICAgIFwiUmVzb3VyY2VcIixcbiAgICAgIG1ldGhvZFByb3BzLFxuICAgICk7XG5cbiAgICB0aGlzLm1ldGhvZElkID0gdGhpcy5tZXRob2RSZXNvdXJjZS5pZDtcbiAgICBpZiAoUmVzdEFwaUJhc2UuX2lzUmVzdEFwaUJhc2UodGhpcy5hcGkpKSB7XG4gICAgICB0aGlzLmFwaS5fYXR0YWNoTWV0aG9kKHRoaXMpO1xuICAgIH1cblxuICAgIGNvbnN0IGRlcGxveW1lbnQgPSB0aGlzLmFwaS5sYXRlc3REZXBsb3ltZW50O1xuICAgIGlmIChkZXBsb3ltZW50KSB7XG4gICAgICAvLyBmb3IgQ0RLVEYgd2UgbmVlZCB0byB0cmFjayBkZXBsb3ltZW50cyBhcyB3ZWxsIGZvciBpbnRlZ3JhdGlvbiBkZXBlbmRlbmNpZXNcbiAgICAgIHRoaXMuX2F0dGFjaERlcGxveW1lbnQoZGVwbG95bWVudCk7XG4gICAgICBkZXBsb3ltZW50Lm5vZGUuYWRkRGVwZW5kZW5jeSh0aGlzLm1ldGhvZFJlc291cmNlKTtcbiAgICAgIC8vIEZuLnNoYTEoRm4uanNvbmVuY29kZSgpKSBjYXVzZXMgbmVzdGVkIFRva2VucyBhbmQgUmVzb2x2ZXIgZXJyb3JzP1xuICAgICAgZGVwbG95bWVudC5hZGRUb1RyaWdnZXJzKHtcbiAgICAgICAgbWV0aG9kOiB7XG4gICAgICAgICAgLi4ubWV0aG9kUHJvcHMsXG4gICAgICAgICAgaW50ZWdyYXRpb25Ub2tlbjogdGhpcy5iaW5kUmVzdWx0Py5kZXBsb3ltZW50VG9rZW4sXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIC8vIGFkZFRvTG9naWNhbElkIGlzIENESyBzcGVjaWZpYyByZW1vdmFsUG9saWN5LlJFVEFJTiBmdW5jdGlvbmFsaXR5XG4gICAgICAvLyBkZXBsb3ltZW50LmFkZFRvTG9naWNhbElkKHtcbiAgICAgIC8vICAgbWV0aG9kOiB7XG4gICAgICAvLyAgICAgLi4ubWV0aG9kUHJvcHMsXG4gICAgICAvLyAgICAgaW50ZWdyYXRpb25Ub2tlbjogYmluZFJlc3VsdD8uZGVwbG95bWVudFRva2VuLFxuICAgICAgLy8gICB9LFxuICAgICAgLy8gfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwdWJsaWMgX2F0dGFjaERlcGxveW1lbnQoZGVwbG95bWVudDogRGVwbG95bWVudCkge1xuICAgIC8vIHRoZXNlIGRlcGxveW1lbnRzIGFyZSB1c2VkIGluIHRoZSB0b1RlcnJhZm9ybSgpIG1ldGhvZFxuICAgIC8vIHRvIGVuc3VyZSBnZW5lcmF0ZWQgaW50ZWdyYXRpb24gcmVzb3VyY2VzIGFyZSBkZWZpbmVkXG4gICAgLy8gYXMgZGVwZW5kZW5jaWVzIG9uIHRoZSBkZXBsb3ltZW50cy5cbiAgICB0aGlzLl9kZXBsb3ltZW50cy5wdXNoKGRlcGxveW1lbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBSZXN0QXBpIGFzc29jaWF0ZWQgd2l0aCB0aGlzIE1ldGhvZFxuICAgKiBAZGVwcmVjYXRlZCAtIFRocm93cyBhbiBlcnJvciBpZiB0aGlzIFJlc291cmNlIGlzIG5vdCBhc3NvY2lhdGVkIHdpdGggYW4gaW5zdGFuY2Ugb2YgYFJlc3RBcGlgLiBVc2UgYGFwaWAgaW5zdGVhZC5cbiAgICovXG4gIHB1YmxpYyBnZXQgcmVzdEFwaSgpOiBSZXN0QXBpIHtcbiAgICBpZiAoISh0aGlzLmFwaSBpbnN0YW5jZW9mIFJlc3RBcGkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwibm90IGF2YWlsYWJsZSBvbiBSZXNvdXJjZSBub3QgY29ubmVjdGVkIHRvIGFuIGluc3RhbmNlIG9mIFJlc3RBcGlcIixcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmFwaTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIGV4ZWN1dGUtYXBpIEFSTiBmb3IgdGhpcyBtZXRob2Q6XG4gICAqXG4gICAqICAgYXJuOmF3czpleGVjdXRlLWFwaTp7cmVnaW9ufTp7YWNjb3VudH06e3Jlc3RBcGlJZH0ve3N0YWdlfS97bWV0aG9kfS97cGF0aH1cbiAgICpcbiAgICogTk9URToge3N0YWdlfSB3aWxsIHJlZmVyIHRvIHRoZSBgcmVzdEFwaS5kZXBsb3ltZW50U3RhZ2VgLCB3aGljaCB3aWxsXG4gICAqIGF1dG9tYXRpY2FsbHkgc2V0IGlmIGF1dG8tZGVwbG95IGlzIGVuYWJsZWQsIG9yIGNhbiBiZSBleHBsaWNpdGx5IGFzc2lnbmVkLlxuICAgKiBXaGVuIG5vdCBjb25maWd1cmVkLCB7c3RhZ2V9IHdpbGwgYmUgc2V0IHRvICcqJywgYXMgYSBzaG9ydGhhbmQgZm9yICdhbGwgc3RhZ2VzJy5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIGdldCBtZXRob2RBcm4oKTogc3RyaW5nIHtcbiAgICBjb25zdCBzdGFnZSA9IHRoaXMuYXBpLmRlcGxveW1lbnRTdGFnZT8uc3RhZ2VOYW1lO1xuICAgIHJldHVybiB0aGlzLmFwaS5hcm5Gb3JFeGVjdXRlQXBpKFxuICAgICAgdGhpcy5odHRwTWV0aG9kLFxuICAgICAgcGF0aEZvckFybih0aGlzLnJlc291cmNlLnBhdGgpLFxuICAgICAgc3RhZ2UsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIGV4ZWN1dGUtYXBpIEFSTiBmb3IgdGhpcyBtZXRob2QncyBcInRlc3QtaW52b2tlLXN0YWdlXCIgc3RhZ2UuXG4gICAqIFRoaXMgc3RhZ2UgaXMgdXNlZCBieSB0aGUgQVdTIENvbnNvbGUgVUkgd2hlbiB0ZXN0aW5nIHRoZSBtZXRob2QuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHRlc3RNZXRob2RBcm4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5hcGkuYXJuRm9yRXhlY3V0ZUFwaShcbiAgICAgIHRoaXMuaHR0cE1ldGhvZCxcbiAgICAgIHBhdGhGb3JBcm4odGhpcy5yZXNvdXJjZS5wYXRoKSxcbiAgICAgIFwidGVzdC1pbnZva2Utc3RhZ2VcIixcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIG1ldGhvZCByZXNwb25zZSB0byB0aGlzIG1ldGhvZFxuICAgKlxuICAgKiBJZiBhIG1ldGhvZCByZXNwb25zZSBmb3IgdGhlIHNhbWUgc3RhdHVzIGNvZGUgYWxyZWFkeSBleGlzdHMsIHRoZSBgcmVzcG9uc2VNb2RlbHNgXG4gICAqIGFuZCBgcmVzcG9uc2VQYXJhbWV0ZXJzYCBtYXBzIHdpbGwgYmUgbWVyZ2VkLlxuICAgKi9cbiAgcHVibGljIGFkZE1ldGhvZFJlc3BvbnNlKG1ldGhvZFJlc3BvbnNlOiBNZXRob2RSZXNwb25zZSk6IHZvaWQge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL3YyLjE4Ni4wL3BhY2thZ2VzL2F3cy1jZGstbGliL2F3cy1hcGlnYXRld2F5L2xpYi9tZXRob2QudHMjTDMxNlxuICAgIC8vICsgZml4IGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL3B1bGwvMjY3MTgvZmlsZXNcbiAgICBjb25zdCBpID0gdGhpcy5fbWV0aG9kUmVzcG9uc2VzLmZpbmRJbmRleChcbiAgICAgIChtcikgPT4gbXIuc3RhdHVzQ29kZSA9PT0gbWV0aG9kUmVzcG9uc2Uuc3RhdHVzQ29kZSxcbiAgICApO1xuICAgIGlmIChpID49IDApIHtcbiAgICAgIC8vIE5lZWQgdG8gZG8gYSBzcGxpY2UgYmVjYXVzZSBNZXRob2RSZXNwb25zZXMgYXJlIGltbXV0YWJsZVxuICAgICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLl9tZXRob2RSZXNwb25zZXNbaV07XG4gICAgICB0aGlzLl9tZXRob2RSZXNwb25zZXMuc3BsaWNlKGksIDEsIHtcbiAgICAgICAgc3RhdHVzQ29kZTogbWV0aG9kUmVzcG9uc2Uuc3RhdHVzQ29kZSxcbiAgICAgICAgcmVzcG9uc2VNb2RlbHM6IG1lcmdlRGljdHMoXG4gICAgICAgICAgZXhpc3RpbmcucmVzcG9uc2VNb2RlbHMsXG4gICAgICAgICAgbWV0aG9kUmVzcG9uc2UucmVzcG9uc2VNb2RlbHMsXG4gICAgICAgICksXG4gICAgICAgIHJlc3BvbnNlUGFyYW1ldGVyczogbWVyZ2VEaWN0cyhcbiAgICAgICAgICBleGlzdGluZy5yZXNwb25zZVBhcmFtZXRlcnMsXG4gICAgICAgICAgbWV0aG9kUmVzcG9uc2UucmVzcG9uc2VQYXJhbWV0ZXJzLFxuICAgICAgICApLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX21ldGhvZFJlc3BvbnNlcy5wdXNoKG1ldGhvZFJlc3BvbnNlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldE1ldGhvZEF1dGhvcml6YXRpb25UeXBlKFxuICAgIG9wdGlvbnM6IE1ldGhvZE9wdGlvbnMsXG4gICAgZGVmYXVsdE1ldGhvZE9wdGlvbnM6IE1ldGhvZE9wdGlvbnMsXG4gICAgYXV0aG9yaXplcj86IElBdXRob3JpemVyLFxuICApOiBzdHJpbmcge1xuICAgIGNvbnN0IGF1dGhvcml6ZXJBdXRoVHlwZSA9IGF1dGhvcml6ZXI/LmF1dGhvcml6YXRpb25UeXBlO1xuICAgIGNvbnN0IG9wdGlvbnNBdXRoVHlwZSA9XG4gICAgICBvcHRpb25zLmF1dGhvcml6YXRpb25UeXBlIHx8IGRlZmF1bHRNZXRob2RPcHRpb25zLmF1dGhvcml6YXRpb25UeXBlO1xuICAgIGNvbnN0IGZpbmFsQXV0aFR5cGUgPVxuICAgICAgYXV0aG9yaXplckF1dGhUeXBlIHx8IG9wdGlvbnNBdXRoVHlwZSB8fCBBdXRob3JpemF0aW9uVHlwZS5OT05FO1xuXG4gICAgaWYgKFxuICAgICAgYXV0aG9yaXplckF1dGhUeXBlICYmXG4gICAgICBvcHRpb25zQXV0aFR5cGUgJiZcbiAgICAgIGF1dGhvcml6ZXJBdXRoVHlwZSAhPT0gb3B0aW9uc0F1dGhUeXBlXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGAke3RoaXMucmVzb3VyY2V9LyR7dGhpcy5odHRwTWV0aG9kfSAtIEF1dGhvcml6YXRpb24gdHlwZSBpcyBzZXQgdG8gJHtvcHRpb25zQXV0aFR5cGV9IGAgK1xuICAgICAgICAgIGB3aGljaCBpcyBkaWZmZXJlbnQgZnJvbSB3aGF0IGlzIHJlcXVpcmVkIGJ5IHRoZSBhdXRob3JpemVyIFske2F1dGhvcml6ZXJBdXRoVHlwZX1dYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbmFsQXV0aFR5cGU7XG4gIH1cblxuICBwcml2YXRlIHJlbmRlclJlcXVlc3RNb2RlbHMoXG4gICAgcmVxdWVzdE1vZGVsczogeyBbcGFyYW06IHN0cmluZ106IElNb2RlbCB9IHwgdW5kZWZpbmVkLFxuICApOiB7IFtwYXJhbTogc3RyaW5nXTogc3RyaW5nIH0gfCB1bmRlZmluZWQge1xuICAgIGlmICghcmVxdWVzdE1vZGVscykge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBtb2RlbHM6IHsgW3BhcmFtOiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xuICAgIGZvciAoY29uc3QgY29udGVudFR5cGUgaW4gcmVxdWVzdE1vZGVscykge1xuICAgICAgaWYgKHJlcXVlc3RNb2RlbHMuaGFzT3duUHJvcGVydHkoY29udGVudFR5cGUpKSB7XG4gICAgICAgIG1vZGVsc1tjb250ZW50VHlwZV0gPSByZXF1ZXN0TW9kZWxzW2NvbnRlbnRUeXBlXS5tb2RlbElkO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbW9kZWxzO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlUmVxdWVzdFZhbGlkYXRvcklkKFxuICAgIG9wdGlvbnM6IE1ldGhvZE9wdGlvbnMsXG4gICk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKG9wdGlvbnMucmVxdWVzdFZhbGlkYXRvciAmJiBvcHRpb25zLnJlcXVlc3RWYWxpZGF0b3JPcHRpb25zKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiT25seSBvbmUgb2YgJ3JlcXVlc3RWYWxpZGF0b3InIG9yICdyZXF1ZXN0VmFsaWRhdG9yT3B0aW9ucycgbXVzdCBiZSBzcGVjaWZpZWQuXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnJlcXVlc3RWYWxpZGF0b3JPcHRpb25zKSB7XG4gICAgICAvLyBBc3N1bWluZyBBUElHQVRFV0FZX1JFUVVFU1RfVkFMSURBVE9SX1VOSVFVRV9JRCBpcyBlZmZlY3RpdmVseSB0cnVlIGZvciBUZXJyYUNvbnN0cnVjdHNcbiAgICAgIGNvbnN0IGlkID0gQXdzU3RhY2sub2ZBd3NDb25zdHJ1Y3QodGhpcykudW5pcXVlUmVzb3VyY2VOYW1lKFxuICAgICAgICBuZXcgVGVycmFmb3JtRWxlbWVudCh0aGlzLCBcIlZhbGlkYXRvclwiKSxcbiAgICAgICAge1xuICAgICAgICAgIG1heExlbmd0aDogNjQsXG4gICAgICAgICAgYWxsb3dlZFNwZWNpYWxDaGFyYWN0ZXJzOiBcIi1fXCIsXG4gICAgICAgIH0sXG4gICAgICApO1xuICAgICAgY29uc3QgdmFsaWRhdG9yID0gKHRoaXMuYXBpIGFzIFJlc3RBcGkpLmFkZFJlcXVlc3RWYWxpZGF0b3IoXG4gICAgICAgIGlkLFxuICAgICAgICBvcHRpb25zLnJlcXVlc3RWYWxpZGF0b3JPcHRpb25zLFxuICAgICAgKTtcbiAgICAgIHJldHVybiB2YWxpZGF0b3IucmVxdWVzdFZhbGlkYXRvcklkO1xuICAgIH1cblxuICAgIHJldHVybiBvcHRpb25zLnJlcXVlc3RWYWxpZGF0b3I/LnJlcXVlc3RWYWxpZGF0b3JJZDtcbiAgfVxuXG4gIHB1YmxpYyBtZXRyaWMoXG4gICAgbWV0cmljTmFtZTogc3RyaW5nLFxuICAgIHN0YWdlOiBJU3RhZ2UsXG4gICAgcHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMsXG4gICk6IGNsb3Vkd2F0Y2guTWV0cmljIHtcbiAgICByZXR1cm4gbmV3IGNsb3Vkd2F0Y2guTWV0cmljKHtcbiAgICAgIG5hbWVzcGFjZTogXCJBV1MvQXBpR2F0ZXdheVwiLFxuICAgICAgbWV0cmljTmFtZSxcbiAgICAgIGRpbWVuc2lvbnNNYXA6IHtcbiAgICAgICAgQXBpTmFtZTogdGhpcy5hcGkucmVzdEFwaU5hbWUsXG4gICAgICAgIE1ldGhvZDogdGhpcy5odHRwTWV0aG9kLFxuICAgICAgICBSZXNvdXJjZTogdGhpcy5yZXNvdXJjZS5wYXRoLFxuICAgICAgICBTdGFnZTogc3RhZ2Uuc3RhZ2VOYW1lLFxuICAgICAgfSxcbiAgICAgIC4uLnByb3BzLFxuICAgIH0pLmF0dGFjaFRvKHRoaXMpO1xuICB9XG5cbiAgcHVibGljIG1ldHJpY0NsaWVudEVycm9yKFxuICAgIHN0YWdlOiBJU3RhZ2UsXG4gICAgcHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMsXG4gICk6IGNsb3Vkd2F0Y2guTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5jYW5uZWRNZXRyaWMoQXBpR2F0ZXdheU1ldHJpY3MuXzRYeEVycm9yU3VtLCBzdGFnZSwgcHJvcHMpO1xuICB9XG5cbiAgcHVibGljIG1ldHJpY1NlcnZlckVycm9yKFxuICAgIHN0YWdlOiBJU3RhZ2UsXG4gICAgcHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMsXG4gICk6IGNsb3Vkd2F0Y2guTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5jYW5uZWRNZXRyaWMoQXBpR2F0ZXdheU1ldHJpY3MuXzVYeEVycm9yU3VtLCBzdGFnZSwgcHJvcHMpO1xuICB9XG5cbiAgcHVibGljIG1ldHJpY0NhY2hlSGl0Q291bnQoXG4gICAgc3RhZ2U6IElTdGFnZSxcbiAgICBwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyxcbiAgKTogY2xvdWR3YXRjaC5NZXRyaWMge1xuICAgIHJldHVybiB0aGlzLmNhbm5lZE1ldHJpYyhBcGlHYXRld2F5TWV0cmljcy5jYWNoZUhpdENvdW50U3VtLCBzdGFnZSwgcHJvcHMpO1xuICB9XG5cbiAgcHVibGljIG1ldHJpY0NhY2hlTWlzc0NvdW50KFxuICAgIHN0YWdlOiBJU3RhZ2UsXG4gICAgcHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMsXG4gICk6IGNsb3Vkd2F0Y2guTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5jYW5uZWRNZXRyaWMoQXBpR2F0ZXdheU1ldHJpY3MuY2FjaGVNaXNzQ291bnRTdW0sIHN0YWdlLCBwcm9wcyk7XG4gIH1cblxuICBwdWJsaWMgbWV0cmljQ291bnQoXG4gICAgc3RhZ2U6IElTdGFnZSxcbiAgICBwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyxcbiAgKTogY2xvdWR3YXRjaC5NZXRyaWMge1xuICAgIHJldHVybiB0aGlzLmNhbm5lZE1ldHJpYyhBcGlHYXRld2F5TWV0cmljcy5jb3VudFN1bSwgc3RhZ2UsIHtcbiAgICAgIHN0YXRpc3RpYzogXCJTYW1wbGVDb3VudFwiLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbWV0cmljSW50ZWdyYXRpb25MYXRlbmN5KFxuICAgIHN0YWdlOiBJU3RhZ2UsXG4gICAgcHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMsXG4gICk6IGNsb3Vkd2F0Y2guTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5jYW5uZWRNZXRyaWMoXG4gICAgICBBcGlHYXRld2F5TWV0cmljcy5pbnRlZ3JhdGlvbkxhdGVuY3lBdmVyYWdlLFxuICAgICAgc3RhZ2UsXG4gICAgICBwcm9wcyxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIG1ldHJpY0xhdGVuY3koXG4gICAgc3RhZ2U6IElTdGFnZSxcbiAgICBwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyxcbiAgKTogY2xvdWR3YXRjaC5NZXRyaWMge1xuICAgIHJldHVybiB0aGlzLmNhbm5lZE1ldHJpYyhBcGlHYXRld2F5TWV0cmljcy5sYXRlbmN5QXZlcmFnZSwgc3RhZ2UsIHByb3BzKTtcbiAgfVxuXG4gIHB1YmxpYyBncmFudEV4ZWN1dGUoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQge1xuICAgIHJldHVybiBpYW0uR3JhbnQuYWRkVG9QcmluY2lwYWwoe1xuICAgICAgZ3JhbnRlZSxcbiAgICAgIGFjdGlvbnM6IFtcImV4ZWN1dGUtYXBpOkludm9rZVwiXSxcbiAgICAgIHJlc291cmNlQXJuczogW3RoaXMubWV0aG9kQXJuXSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY2FubmVkTWV0cmljKFxuICAgIGZuOiAoZGltczoge1xuICAgICAgQXBpTmFtZTogc3RyaW5nO1xuICAgICAgTWV0aG9kOiBzdHJpbmc7XG4gICAgICBSZXNvdXJjZTogc3RyaW5nO1xuICAgICAgU3RhZ2U6IHN0cmluZztcbiAgICB9KSA9PiBjbG91ZHdhdGNoLk1ldHJpY1Byb3BzLFxuICAgIHN0YWdlOiBJU3RhZ2UsXG4gICAgcHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMsXG4gICkge1xuICAgIHJldHVybiBuZXcgY2xvdWR3YXRjaC5NZXRyaWMoe1xuICAgICAgLi4uZm4oe1xuICAgICAgICBBcGlOYW1lOiB0aGlzLmFwaS5yZXN0QXBpTmFtZSxcbiAgICAgICAgTWV0aG9kOiB0aGlzLmh0dHBNZXRob2QsXG4gICAgICAgIFJlc291cmNlOiB0aGlzLnJlc291cmNlLnBhdGgsXG4gICAgICAgIFN0YWdlOiBzdGFnZS5zdGFnZU5hbWUsXG4gICAgICB9KSxcbiAgICAgIC4uLnByb3BzLFxuICAgIH0pLmF0dGFjaFRvKHRoaXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgcmVzb3VyY2UgdG8gdGhlIHRlcnJhZm9ybSBKU09OIG91dHB1dC5cbiAgICpcbiAgICogY2FsbGVkIGJ5IFRlcnJhZm9ybVN0YWNrLnByZXBhcmVTdGFjaygpXG4gICAqL1xuICBwdWJsaWMgdG9UZXJyYWZvcm0oKTogYW55IHtcbiAgICBpZiAodGhpcy5fbWV0aG9kUmVzcG9uc2VzLmxlbmd0aCA9PT0gMCAmJiAhdGhpcy5iaW5kUmVzdWx0KSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuXG4gICAgLy8gTk9URTogVGhlIFRlcnJhZm9ybURlcGVuZGVuZGFibGVBc3BlY3Qgd2lsbCBwcm9wZ2F0ZSBjb25zdHJ1Y3QgdHJlZSBkZXBlbmRlbmNpZXNcbiAgICBjb25zdCBtZXRob2RSZXNwb25zZXM6IFJlY29yZDxcbiAgICAgIHN0cmluZyxcbiAgICAgIGFwaUdhdGV3YXlNZXRob2RSZXNwb25zZS5BcGlHYXRld2F5TWV0aG9kUmVzcG9uc2VcbiAgICA+ID0ge307XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9tZXRob2RSZXNwb25zZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IG1yUHJvcHMgPSB0aGlzLl9tZXRob2RSZXNwb25zZXNbaV07XG4gICAgICAvLyB1bmlxdWUgaWQgYnkgc3RhdHVzIGNvZGVcbiAgICAgIGNvbnN0IGlkID0gYE1ldGhvZFJlc3BvbnNlJHttclByb3BzLnN0YXR1c0NvZGV9YDtcbiAgICAgIC8vIG5vIHJlLWNyZWF0ZSBpZiBhbHJlYWR5IGdlbmVyYXRlZFxuICAgICAgY29uc3QgbWV0aG9kUmVzcG9uc2UgPSB0aGlzLm5vZGUudHJ5RmluZENoaWxkKGlkKTtcbiAgICAgIGlmIChtZXRob2RSZXNwb25zZSkge1xuICAgICAgICBtZXRob2RSZXNwb25zZXNbbXJQcm9wcy5zdGF0dXNDb2RlXSA9XG4gICAgICAgICAgbWV0aG9kUmVzcG9uc2UgYXMgYXBpR2F0ZXdheU1ldGhvZFJlc3BvbnNlLkFwaUdhdGV3YXlNZXRob2RSZXNwb25zZTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIGdlbmVyYXRlIG5ldyBBcGlHYXRld2F5TWV0aG9kUmVzcG9uc2VcbiAgICAgIG1ldGhvZFJlc3BvbnNlc1ttclByb3BzLnN0YXR1c0NvZGVdID1cbiAgICAgICAgbmV3IGFwaUdhdGV3YXlNZXRob2RSZXNwb25zZS5BcGlHYXRld2F5TWV0aG9kUmVzcG9uc2UodGhpcywgaWQsIHtcbiAgICAgICAgICByZXN0QXBpSWQ6IHRoaXMuYXBpLnJlc3RBcGlJZCxcbiAgICAgICAgICByZXNvdXJjZUlkOiB0aGlzLnJlc291cmNlLnJlc291cmNlSWQsXG4gICAgICAgICAgaHR0cE1ldGhvZDogdGhpcy5tZXRob2RSZXNvdXJjZS5odHRwTWV0aG9kLFxuICAgICAgICAgIHN0YXR1c0NvZGU6IG1yUHJvcHMuc3RhdHVzQ29kZSxcbiAgICAgICAgICByZXNwb25zZVBhcmFtZXRlcnM6IG1yUHJvcHMucmVzcG9uc2VQYXJhbWV0ZXJzLFxuICAgICAgICAgIHJlc3BvbnNlTW9kZWxzOiB0aGlzLnJlbmRlclJlc3BvbnNlTW9kZWxzKG1yUHJvcHMucmVzcG9uc2VNb2RlbHMpLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBhZGQgaW50ZWdyYXRpb24gcmVzb3VyY2VzXG4gICAgY29uc3QgaW50ZWdyYXRpb25JZCA9IFwiSW50ZWdyYXRpb25cIjtcbiAgICBpZiAodGhpcy5iaW5kUmVzdWx0ICYmICF0aGlzLm5vZGUudHJ5RmluZENoaWxkKGludGVncmF0aW9uSWQpKSB7XG4gICAgICBjb25zdCBpbnRlZ3JhdGlvblJlc291cmNlID1cbiAgICAgICAgbmV3IGFwaUdhdGV3YXlJbnRlZ3JhdGlvbi5BcGlHYXRld2F5SW50ZWdyYXRpb24oXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBpbnRlZ3JhdGlvbklkLFxuICAgICAgICAgIHRoaXMucmVuZGVySW50ZWdyYXRpb24odGhpcy5iaW5kUmVzdWx0KSxcbiAgICAgICAgKTtcbiAgICAgIC8vIGNhbGwgbm9kZS5hZGREZXBlbmRlbmN5IG9uIGV2ZXJ5IGRlcGxveW1lbnQgdHJhY2tlZFxuICAgICAgZm9yIChjb25zdCBkZXBsb3ltZW50IG9mIHRoaXMuX2RlcGxveW1lbnRzKSB7XG4gICAgICAgIGRlcGxveW1lbnQubm9kZS5hZGREZXBlbmRlbmN5KGludGVncmF0aW9uUmVzb3VyY2UpO1xuICAgICAgfVxuICAgICAgLy8gYWRkIGludGVncmF0aW9uIHJlc3BvbnNlcyAod2l0aCBkZXBlbmRlbmNpZXMgb24gaW50ZWdyYXRpb24pXG4gICAgICB0aGlzLmJpbmRSZXN1bHQub3B0aW9ucz8uaW50ZWdyYXRpb25SZXNwb25zZXM/LmZvckVhY2goKGlyKSA9PiB7XG4gICAgICAgIGNvbnN0IGlySWQgPSBgSW50ZWdyYXRpb25SZXNwb25zZSR7aXIuc3RhdHVzQ29kZX1gO1xuICAgICAgICBpZiAodGhpcy5ub2RlLnRyeUZpbmRDaGlsZChpcklkKSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBpbnRlZ3JhdGlvblJlc3BvbnNlID1cbiAgICAgICAgICBuZXcgYXBpR2F0ZXdheUludGVncmF0aW9uUmVzcG9uc2UuQXBpR2F0ZXdheUludGVncmF0aW9uUmVzcG9uc2UoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgaXJJZCxcbiAgICAgICAgICAgIHRoaXMucmVuZGVySW50ZWdyYXRpb25SZXNwb25zZShcbiAgICAgICAgICAgICAgaW50ZWdyYXRpb25SZXNvdXJjZSxcbiAgICAgICAgICAgICAgaXIsXG4gICAgICAgICAgICAgIG1ldGhvZFJlc3BvbnNlcyxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKTtcblxuICAgICAgICAvLyBjYWxsIG5vZGUuYWRkRGVwZW5kZW5jeSBvbiBldmVyeSBkZXBsb3ltZW50IHRyYWNrZWRcbiAgICAgICAgZm9yIChjb25zdCBkZXBsb3ltZW50IG9mIHRoaXMuX2RlcGxveW1lbnRzKSB7XG4gICAgICAgICAgZGVwbG95bWVudC5ub2RlLmFkZERlcGVuZGVuY3koaW50ZWdyYXRpb25SZXNwb25zZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyUmVzcG9uc2VNb2RlbHMoXG4gICAgcmVzcG9uc2VNb2RlbHM6IHsgW2NvbnRlbnRUeXBlOiBzdHJpbmddOiBJTW9kZWwgfSB8IHVuZGVmaW5lZCxcbiAgKTogeyBbY29udGVudFR5cGU6IHN0cmluZ106IHN0cmluZyB9IHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXJlc3BvbnNlTW9kZWxzKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgT2JqZWN0LmVudHJpZXMocmVzcG9uc2VNb2RlbHMpLm1hcCgoW2NvbnRlbnRUeXBlLCBybV0pID0+IFtcbiAgICAgICAgY29udGVudFR5cGUsXG4gICAgICAgIHJtLm1vZGVsSWQsXG4gICAgICBdKSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJJbnRlZ3JhdGlvbihcbiAgICBiaW5kUmVzdWx0OiBJbnRlZ3JhdGlvbkNvbmZpZyxcbiAgKTogYXBpR2F0ZXdheUludGVncmF0aW9uLkFwaUdhdGV3YXlJbnRlZ3JhdGlvbkNvbmZpZyB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IGJpbmRSZXN1bHQub3B0aW9ucyA/PyB7fTtcbiAgICBsZXQgY3JlZGVudGlhbHM6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpZiAob3B0aW9ucy5jcmVkZW50aWFsc1JvbGUpIHtcbiAgICAgIGNyZWRlbnRpYWxzID0gb3B0aW9ucy5jcmVkZW50aWFsc1JvbGUucm9sZUFybjtcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuY3JlZGVudGlhbHNQYXNzdGhyb3VnaCkge1xuICAgICAgY3JlZGVudGlhbHMgPSBBd3NTdGFjay5vZkF3c0NvbnN0cnVjdCh0aGlzKS5mb3JtYXRBcm4oe1xuICAgICAgICBzZXJ2aWNlOiBcImlhbVwiLFxuICAgICAgICByZWdpb246IFwiXCIsXG4gICAgICAgIGFjY291bnQ6IFwiKlwiLFxuICAgICAgICByZXNvdXJjZTogXCJ1c2VyXCIsXG4gICAgICAgIGFybkZvcm1hdDogQXJuRm9ybWF0LlNMQVNIX1JFU09VUkNFX05BTUUsXG4gICAgICAgIHJlc291cmNlTmFtZTogXCIqXCIsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgcmVzdEFwaUlkOiB0aGlzLmFwaS5yZXN0QXBpSWQsXG4gICAgICByZXNvdXJjZUlkOiB0aGlzLnJlc291cmNlLnJlc291cmNlSWQsXG4gICAgICBodHRwTWV0aG9kOiB0aGlzLm1ldGhvZFJlc291cmNlLmh0dHBNZXRob2QsIC8vIEZyb250ZW5kIG1ldGhvZCdzIEhUVFAgdmVyYlxuICAgICAgdHlwZTogYmluZFJlc3VsdC50eXBlLFxuICAgICAgdXJpOiBiaW5kUmVzdWx0LnVyaSxcbiAgICAgIGludGVncmF0aW9uSHR0cE1ldGhvZDogYmluZFJlc3VsdC5pbnRlZ3JhdGlvbkh0dHBNZXRob2QsIC8vIEJhY2tlbmQgbWV0aG9kJ3MgSFRUUCB2ZXJiXG4gICAgICBjYWNoZUtleVBhcmFtZXRlcnM6IG9wdGlvbnMuY2FjaGVLZXlQYXJhbWV0ZXJzLFxuICAgICAgY2FjaGVOYW1lc3BhY2U6IG9wdGlvbnMuY2FjaGVOYW1lc3BhY2UsXG4gICAgICBjb250ZW50SGFuZGxpbmc6IG9wdGlvbnMuY29udGVudEhhbmRsaW5nLFxuICAgICAgcmVxdWVzdFBhcmFtZXRlcnM6IG9wdGlvbnMucmVxdWVzdFBhcmFtZXRlcnMsXG4gICAgICByZXF1ZXN0VGVtcGxhdGVzOiBvcHRpb25zLnJlcXVlc3RUZW1wbGF0ZXMsXG4gICAgICBwYXNzdGhyb3VnaEJlaGF2aW9yOiBvcHRpb25zLnBhc3N0aHJvdWdoQmVoYXZpb3IsXG4gICAgICBjb25uZWN0aW9uVHlwZTogb3B0aW9ucy5jb25uZWN0aW9uVHlwZSxcbiAgICAgIGNvbm5lY3Rpb25JZDogb3B0aW9ucy52cGNMaW5rID8gb3B0aW9ucy52cGNMaW5rLnZwY0xpbmtJZCA6IHVuZGVmaW5lZCxcbiAgICAgIGNyZWRlbnRpYWxzLFxuICAgICAgdGltZW91dE1pbGxpc2Vjb25kczogb3B0aW9ucy50aW1lb3V0Py50b01pbGxpc2Vjb25kcygpLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHJlbmRlckludGVncmF0aW9uUmVzcG9uc2UoXG4gICAgaW50ZWdyYXRpb246IGFwaUdhdGV3YXlJbnRlZ3JhdGlvbi5BcGlHYXRld2F5SW50ZWdyYXRpb24sXG4gICAgaXI6IEludGVncmF0aW9uUmVzcG9uc2UsXG4gICAgbXI6IFJlY29yZDxzdHJpbmcsIGFwaUdhdGV3YXlNZXRob2RSZXNwb25zZS5BcGlHYXRld2F5TWV0aG9kUmVzcG9uc2U+LFxuICApOiBhcGlHYXRld2F5SW50ZWdyYXRpb25SZXNwb25zZS5BcGlHYXRld2F5SW50ZWdyYXRpb25SZXNwb25zZUNvbmZpZyB7XG4gICAgY29uc3QgbWV0aG9kUmVzcG9uc2UgPSBtcltpci5zdGF0dXNDb2RlXTtcbiAgICByZXR1cm4ge1xuICAgICAgcmVzdEFwaUlkOiB0aGlzLmFwaS5yZXN0QXBpSWQsXG4gICAgICByZXNvdXJjZUlkOiB0aGlzLnJlc291cmNlLnJlc291cmNlSWQsXG4gICAgICBodHRwTWV0aG9kOiB0aGlzLm1ldGhvZFJlc291cmNlLmh0dHBNZXRob2QsXG4gICAgICAvLyBUT0RPOiBJcyB0aGlzIGNvcnJlY3QgdG8gbm90IGNyZWF0ZSBhIG1ldGhvZFJlc3BvbnNlP1xuICAgICAgc3RhdHVzQ29kZTogbWV0aG9kUmVzcG9uc2UgPyBtZXRob2RSZXNwb25zZS5zdGF0dXNDb2RlIDogaXIuc3RhdHVzQ29kZSxcbiAgICAgIGNvbnRlbnRIYW5kbGluZzogaXIuY29udGVudEhhbmRsaW5nLFxuICAgICAgcmVzcG9uc2VQYXJhbWV0ZXJzOiBpci5yZXNwb25zZVBhcmFtZXRlcnMsXG4gICAgICByZXNwb25zZVRlbXBsYXRlczogaXIucmVzcG9uc2VUZW1wbGF0ZXMsXG4gICAgICBzZWxlY3Rpb25QYXR0ZXJuOiBpci5zZWxlY3Rpb25QYXR0ZXJuLFxuICAgICAgZGVwZW5kc09uOiBbaW50ZWdyYXRpb25dLFxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGVudW0gQXV0aG9yaXphdGlvblR5cGUge1xuICBOT05FID0gXCJOT05FXCIsXG4gIElBTSA9IFwiQVdTX0lBTVwiLFxuICBDVVNUT00gPSBcIkNVU1RPTVwiLFxuICBDT0dOSVRPID0gXCJDT0dOSVRPX1VTRVJfUE9PTFNcIixcbn1cblxuZnVuY3Rpb24gcGF0aEZvckFybihwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcGF0aC5yZXBsYWNlKC9cXHtbXlxcfV0qXFx9L2csIFwiKlwiKTtcbn1cblxuZnVuY3Rpb24gbWVyZ2VEaWN0czxUPihcbiAgeHM/OiBSZWNvcmQ8c3RyaW5nLCBUPixcbiAgeXM/OiBSZWNvcmQ8c3RyaW5nLCBUPixcbik6IFJlY29yZDxzdHJpbmcsIFQ+IHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIHhzIHx8IHlzID8gT2JqZWN0LmFzc2lnbih4cyA/PyB7fSwgeXMpIDogdW5kZWZpbmVkO1xufVxuIl19
|