@aws-cdk/aws-elasticache-alpha 2.232.2-alpha.0 → 2.234.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +46 -17
- package/.jsii.tabl.json.gz +0 -0
- package/LICENSE +1 -1
- package/NOTICE +1 -1
- package/README.md +2 -0
- package/lib/iam-user.js +1 -1
- package/lib/no-password-user.js +8 -4
- package/lib/password-user.js +1 -1
- package/lib/serverless-cache-base.js +1 -1
- package/lib/serverless-cache.js +6 -4
- package/lib/user-base.d.ts +1 -1
- package/lib/user-base.js +3 -3
- package/lib/user-group.js +5 -5
- package/package.json +6 -6
package/.jsii
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"url": "https://aws.amazon.com"
|
|
9
9
|
},
|
|
10
10
|
"dependencies": {
|
|
11
|
-
"aws-cdk-lib": "^2.
|
|
11
|
+
"aws-cdk-lib": "^2.234.0",
|
|
12
12
|
"constructs": "^10.0.0"
|
|
13
13
|
},
|
|
14
14
|
"dependencyClosure": {
|
|
@@ -642,6 +642,19 @@
|
|
|
642
642
|
}
|
|
643
643
|
}
|
|
644
644
|
},
|
|
645
|
+
"aws-cdk-lib.aws_cases": {
|
|
646
|
+
"targets": {
|
|
647
|
+
"dotnet": {
|
|
648
|
+
"namespace": "Amazon.CDK.AWS.Cases"
|
|
649
|
+
},
|
|
650
|
+
"java": {
|
|
651
|
+
"package": "software.amazon.awscdk.services.cases"
|
|
652
|
+
},
|
|
653
|
+
"python": {
|
|
654
|
+
"module": "aws_cdk.aws_cases"
|
|
655
|
+
}
|
|
656
|
+
}
|
|
657
|
+
},
|
|
645
658
|
"aws-cdk-lib.aws_cassandra": {
|
|
646
659
|
"targets": {
|
|
647
660
|
"dotnet": {
|
|
@@ -4606,6 +4619,22 @@
|
|
|
4606
4619
|
}
|
|
4607
4620
|
}
|
|
4608
4621
|
},
|
|
4622
|
+
"aws-cdk-lib.interfaces.aws_cases": {
|
|
4623
|
+
"targets": {
|
|
4624
|
+
"dotnet": {
|
|
4625
|
+
"namespace": "Amazon.CDK.Interfaces.Cases"
|
|
4626
|
+
},
|
|
4627
|
+
"go": {
|
|
4628
|
+
"packageName": "interfacesawscases"
|
|
4629
|
+
},
|
|
4630
|
+
"java": {
|
|
4631
|
+
"package": "software.amazon.awscdk.interfaces.cases"
|
|
4632
|
+
},
|
|
4633
|
+
"python": {
|
|
4634
|
+
"module": "aws_cdk.interfaces.aws_cases"
|
|
4635
|
+
}
|
|
4636
|
+
}
|
|
4637
|
+
},
|
|
4609
4638
|
"aws-cdk-lib.interfaces.aws_cassandra": {
|
|
4610
4639
|
"targets": {
|
|
4611
4640
|
"dotnet": {
|
|
@@ -8441,7 +8470,7 @@
|
|
|
8441
8470
|
"stability": "experimental"
|
|
8442
8471
|
},
|
|
8443
8472
|
"homepage": "https://github.com/aws/aws-cdk",
|
|
8444
|
-
"jsiiVersion": "5.9.
|
|
8473
|
+
"jsiiVersion": "5.9.22 (build b81c634)",
|
|
8445
8474
|
"keywords": [
|
|
8446
8475
|
"aws",
|
|
8447
8476
|
"cdk",
|
|
@@ -8463,7 +8492,7 @@
|
|
|
8463
8492
|
},
|
|
8464
8493
|
"name": "@aws-cdk/aws-elasticache-alpha",
|
|
8465
8494
|
"readme": {
|
|
8466
|
-
"markdown": "# ElastiCache CDK Construct Library\n<!--BEGIN STABILITY BANNER-->\n\n---\n\n\n\n> The APIs of higher level constructs in this module are experimental and under active development.\n> They are subject to non-backward compatible changes or removal in any future version. These are\n> not subject to the [Semantic Versioning](https://semver.org/) model and breaking changes will be\n> announced in the release notes. This means that while you may use them, you may need to update\n> your source code when upgrading to a newer version of this package.\n\n---\n\n<!--END STABILITY BANNER-->\n\nThis module has constructs for [Amazon ElastiCache](https://docs.aws.amazon.com/AmazonElastiCache/latest/dg/WhatIs.html).\n\n* The `ServerlessCache` construct facilitates the creation and management of serverless cache.\n* The `User` and `UserGroup` constructs facilitate the creation and management of users for the cache.\n\n## Serverless Cache\n\nAmazon ElastiCache Serverless is a serverless option that automatically scales cache capacity based on application traffic patterns. You can create a serverless cache using the `ServerlessCache` construct:\n\n```ts\nconst vpc = new ec2.Vpc(this, 'VPC');\n\nconst cache = new elasticache.ServerlessCache(this, 'ServerlessCache', {\n vpc,\n});\n```\n\n### Connecting to serverless cache\n\nTo control who can access the serverless cache by the security groups, use the `.connections` attribute.\n\nThe serverless cache has a default port `6379`.\n\nThis example allows an EC2 instance to connect to the serverless cache:\n\n```ts\ndeclare const serverlessCache: elasticache.ServerlessCache;\ndeclare const instance: ec2.Instance;\n\n// allow the EC2 instance to connect to serverless cache on default port 6379\nserverlessCache.connections.allowDefaultPortFrom(instance);\n```\n\n### Cache usage limits\n\nYou can configure usage limits on both cache data storage and ECPU/second for your cache to control costs and ensure predictable performance.\n\n**Configuration options:**\n\n* **Maximum limits**: Ensure your cache usage never exceeds the configured maximum\n* **Minimum limits**: Reserve a baseline level of resources for consistent performance\n* **Both**: Define a range where your cache usage will operate\n\nFor more infomation, see [Setting scaling limits to manage costs](https://docs.aws.amazon.com/AmazonElastiCache/latest/dg/Scaling.html#Pre-Scaling).\n\n```ts\ndeclare const vpc: ec2.Vpc;\n\nconst serverlessCache = new elasticache.ServerlessCache(this, 'ServerlessCache', {\n engine: elasticache.CacheEngine.VALKEY_LATEST,\n vpc,\n cacheUsageLimits: {\n // cache data storage limits (GB)\n dataStorageMinimumSize: Size.gibibytes(2), // minimum: 1GB\n dataStorageMaximumSize: Size.gibibytes(3), // maximum: 5000GB\n // rate limits (ECPU/second)\n requestRateLimitMinimum: 1000, // minimum: 1000\n requestRateLimitMaximum: 10000, // maximum: 15000000\n },\n});\n```\n\n### Backups and restore\n\nYou can enable automatic backups for serverless cache.\nWhen automatic backups are enabled, ElastiCache creates a backup of the cache on a daily basis.\n\nAlso you can set the backup window for any time when it's most convenient.\nIf you don't specify a backup window, ElastiCache assigns one automatically.\n\nFor more information, see [Scheduling automatic backups](https://docs.aws.amazon.com/AmazonElastiCache/latest/dg/backups-automatic.html).\n\nTo enable automatic backups, set the `backupRetentionLimit` property. You can also specify the snapshot creation time by setting `backupTime` property:\n\n```ts\ndeclare const vpc: ec2.Vpc;\n\nconst serverlessCache = new elasticache.ServerlessCache(this, 'ServerlessCache', {\n backup: {\n // enable automatic backups and set the retention period to 6 days\n backupRetentionLimit: 6,\n // set the backup window to 9:00 AM UTC\n backupTime: events.Schedule.cron({\n hour: '9',\n minute: '0',\n }),\n },\n vpc,\n});\n```\n\nYou can create a final backup by setting `backupNameBeforeDeletion` property.\n\n```ts\ndeclare const vpc: ec2.Vpc;\n\nconst serverlessCache = new elasticache.ServerlessCache(this, 'ServerlessCache', {\n engine: elasticache.CacheEngine.VALKEY_LATEST,\n backup: {\n // set a backup name before deleting a cache\n backupNameBeforeDeletion: \"my-final-backup-name\",\n },\n vpc,\n});\n```\n\nYou can restore from backups by setting snapshot ARNs to `backupArnsToRestore` property:\n\n```ts\ndeclare const vpc: ec2.Vpc;\n\nconst serverlessCache = new elasticache.ServerlessCache(this, 'ServerlessCache', {\n engine: elasticache.CacheEngine.VALKEY_LATEST,\n backup: {\n // set the backup(s) to restore\n backupArnsToRestore: ['arn:aws:elasticache:us-east-1:123456789012:serverlesscachesnapshot:my-final-backup-name'],\n },\n vpc,\n});\n```\n\n### Encryption at rest\n\nAt-rest encryption is always enabled for Serverless Cache. There are two encryption options:\n\n* **Default**: When no `kmsKey` is specified (left as `undefined`), AWS owned KMS keys are used automatically\n* **Customer Managed Key**: Create a KMS key first, then pass it to the cache via the `kmsKey` property\n\n### Customer Managed Key for encryption at rest\n\nElastiCache supports symmetric Customer Managed key (CMK) for encryption at rest.\n\nFor more information, see [Using customer managed keys from AWS KMS](https://docs.aws.amazon.com/AmazonElastiCache/latest/dg/at-rest-encryption.html#using-customer-managed-keys-for-elasticache-security).\n\nTo use CMK, set your CMK to the `kmsKey` property:\n\n```ts\nimport { Key } from 'aws-cdk-lib/aws-kms';\n\ndeclare const kmsKey: Key;\ndeclare const vpc: ec2.Vpc;\n\nconst serverlessCache = new elasticache.ServerlessCache(this, 'ServerlessCache', {\n engine: elasticache.CacheEngine.VALKEY_LATEST,\n serverlessCacheName: 'my-serverless-cache',\n vpc,\n // set Customer Managed Key\n kmsKey,\n});\n```\n\n### Metrics and monitoring\n\nYou can monitor your serverless cache using CloudWatch Metrics via the `metric` method.\n\nFor more information about serverless cache metrics, see [Serverless metrics and events for Valkey and Redis OSS](https://docs.aws.amazon.com/AmazonElastiCache/latest/dg/serverless-metrics-events-redis.html) and [Serverless metrics and events for Memcached](https://docs.aws.amazon.com/AmazonElastiCache/latest/dg/serverless-metrics-events.memcached.html).\n\n```ts\ndeclare const serverlessCache: elasticache.ServerlessCache;\n\n// The 5 minutes average of the total number of successful read-only key lookups in the cache.\nconst cacheHits = serverlessCache.metricCacheHitCount();\n\n// The 5 minutes average of the total number of bytes used by the data stored in the cache.\nconst bytesUsedForCache = serverlessCache.metricDataStored();\n\n// The 5 minutes average of the total number of ElastiCacheProcessingUnits (ECPUs) consumed by the requests executed on the cache.\nconst elastiCacheProcessingUnits = serverlessCache.metricProcessingUnitsConsumed();\n\n// Create an alarm for ECPUs.\nelastiCacheProcessingUnits.createAlarm(this, 'ElastiCacheProcessingUnitsAlarm', {\n threshold: 50,\n evaluationPeriods: 1,\n});\n```\n\n### Import an existing serverless cache\n\nTo import an existing ServerlessCache, use the `ServerlessCache.fromServerlessCacheAttributes` method:\n\n```ts\ndeclare const securityGroup: ec2.SecurityGroup;\n\nconst importedServerlessCache = elasticache.ServerlessCache.fromServerlessCacheAttributes(this, 'ImportedServerlessCache', {\n serverlessCacheName: 'my-serverless-cache',\n securityGroups: [securityGroup],\n});\n```\n\n## User and User Group\n\nSetup required properties and create:\n\n```ts\nconst newDefaultUser = new elasticache.NoPasswordUser(this, 'NoPasswordUser', {\n userId: 'default',\n accessControl: elasticache.AccessControl.fromAccessString(\"on ~* +@all\"),\n})\n\nconst userGroup = new elasticache.UserGroup(this, 'UserGroup', {\n users: [newDefaultUser],\n});\n```\n\n### RBAC\n\nIn Valkey 7.2 and onward and Redis OSS 6.0 onward you can use a feature called Role-Based Access Control (RBAC). RBAC is also the only way to control access to serverless caches.\n\nRBAC enables you to control cache access through user groups. These user groups are designed as a way to organize access to caches.\n\nFor more information, see [Role-Based Access Control (RBAC)](https://docs.aws.amazon.com/AmazonElastiCache/latest/dg/Clusters.RBAC.html).\n\nTo enable RBAC for ElastiCache with Valkey or Redis OSS, you take the following steps:\n\n* Create users.\n* Create a user group and add users to the user group.\n* Assign the user group to a cache.\n\n### Create users\n\nFirst, you need to create users by using `IamUser`, `PasswordUser` or `NoPasswordUser` construct.\n\nWith RBAC, you create users and assign them specific permissions by using `accessString` property.\n\nFor more information, see [Specifying Permissions Using an Access String](https://docs.aws.amazon.com/AmazonElastiCache/latest/dg/Clusters.RBAC.html#Access-string).\n\nYou can create an IAM-enabled user by using `IamUser` construct:\n\n```ts\nconst user = new elasticache.IamUser(this, 'User', {\n // set user engine\n engine: elasticache.UserEngine.REDIS,\n\n // set user id\n userId: 'my-user',\n\n // set username\n userName: 'my-user',\n\n // set access string\n accessControl: elasticache.AccessControl.fromAccessString(\"on ~* +@all\"),\n});\n```\n\n> NOTE: IAM-enabled users must have matching user id and username. For more information, see [Limitations](https://docs.aws.amazon.com/AmazonElastiCache/latest/dg/auth-iam.html). The construct can set automatically the username to be the same as the user id.\n\nIf you want to create a password authenticated user, use `PasswordUser` construct:\n\n```ts\nconst user = new elasticache.PasswordUser(this, 'User', {\n // set user engine\n engine: elasticache.UserEngine.VALKEY,\n\n // set user id\n userId: 'my-user-id',\n\n // set access string\n accessControl: elasticache.AccessControl.fromAccessString(\"on ~* +@all\"),\n\n // set username\n userName: 'my-user-name',\n\n // set up to two passwords\n passwords: [\n // \"SecretIdForPassword\" is the secret id for the password\n SecretValue.secretsManager('SecretIdForPassword'),\n // \"AnotherSecretIdForPassword\" is the secret id for the password\n SecretValue.secretsManager('AnotherSecretIdForPassword'),\n ],\n});\n```\n\nYou can also create a no password required user by using `NoPasswordUser` construct:\n\n```ts\nconst user = new elasticache.NoPasswordUser(this, 'User', {\n // set user engine\n engine: elasticache.UserEngine.REDIS,\n\n // set user id\n userId: 'my-user-id',\n\n // set access string\n accessControl: elasticache.AccessControl.fromAccessString(\"on ~* +@all\"),\n\n // set username\n userName: 'my-user-name',\n});\n```\n\n### Default user\n\nElastiCache automatically creates a default user with both a user ID and username set to `default`. This default user cannot be modified or deleted. The user is created as a no password authentication user.\n\nThis user is intended for compatibility with the default behavior of previous Redis OSS versions and has an access string that permits it to call all commands and access all keys.\n\nTo use this automatically created default user in CDK, you can import it using `NoPasswordUser.fromUserAttributes` method. For more information on import methods, see the [Import an existing user and user group](#import-an-existing-user-and-user-group) section.\n\nTo add proper access control to a cache, replace the default user with a new one that is either disabled by setting the `accessString` to `off -@all` or secured with a strong password.\n\nTo change the default user, create a new default user with the username set to `default`. You can then swap it with the original default user.\n\nFor more information, see [Applying RBAC to a Cache for ElastiCache with Valkey or Redis OSS](https://docs.aws.amazon.com/AmazonElastiCache/latest/dg/Clusters.RBAC.html#rbac-using).\n\nIf you want to create a new default user, `userName` must be `default` and `userId` must not be `default` by using `NoPasswordUser` or `PasswordUser`:\n\n```ts\n// use the original `default` user by using import method\nconst defaultUser = elasticache.NoPasswordUser.fromUserAttributes(this, 'DefaultUser', {\n // userId and userName must be 'default'\n userId: 'default',\n});\n\n// create a new default user\nconst newDefaultUser = new elasticache.NoPasswordUser(this, 'NewDefaultUser', {\n // new default user id must not be 'default'\n userId: 'new-default',\n // new default username must be 'default'\n userName: 'default',\n // set access string\n accessControl: elasticache.AccessControl.fromAccessString(\"on ~* +@all\"),\n});\n```\n\n> NOTE: You can't create a new default user using `IamUser` because an IAM-enabled user's username and user ID cannot be different.\n\n### Add users to the user group\n\nNext, use the `UserGroup` construct to create a user group and add users to it.\nEnsure that you include either the original default user or a new default user:\n\n```ts\ndeclare const newDefaultUser: elasticache.IUser;\ndeclare const user: elasticache.IUser;\ndeclare const anotherUser: elasticache.IUser;\n\nconst userGroup = new elasticache.UserGroup(this, 'UserGroup', {\n // add users including default user\n users: [newDefaultUser, user],\n});\n\n// you can also add a user by using addUser method\nuserGroup.addUser(anotherUser);\n```\n\n### Assign user group\n\nFinally, assign a user group to cache:\n\n```ts\ndeclare const vpc: ec2.Vpc;\ndeclare const userGroup: elasticache.UserGroup;\n\nconst serverlessCache = new elasticache.ServerlessCache(this, 'ServerlessCache', {\n engine: elasticache.CacheEngine.VALKEY_LATEST,\n serverlessCacheName: 'my-serverless-cache',\n vpc,\n // assign User Group\n userGroup,\n});\n\n```\n\n### Grant permissions to IAM-enabled users\n\nIf you create IAM-enabled users, `\"elasticache:Connect\"` action must be allowed for the users and cache.\n\n> NOTE: You don't need grant permissions to no password required users or password authentication users.\n\nFor more information, see [Authenticating with IAM](https://docs.aws.amazon.com/AmazonElastiCache/latest/dg/auth-iam.html).\n\nTo grant permissions, you can use the `grantConnect` method in `IamUser` and `ServerlessCache` constructs:\n\n```ts\ndeclare const user: elasticache.IamUser;\ndeclare const serverlessCache: elasticache.ServerlessCache;\ndeclare const role: iam.Role;\n\n// grant \"elasticache:Connect\" action permissions to role\nuser.grantConnect(role);\nserverlessCache.grantConnect(role);\n```\n\n### Import an existing user and user group\n\nYou can import an existing user and user group by using import methods:\n\n```ts\nconst stack = new Stack();\n\nconst importedIamUser = elasticache.IamUser.fromUserId(this, 'ImportedIamUser', 'my-iam-user-id');\n\nconst importedPasswordUser = elasticache.PasswordUser.fromUserAttributes(stack, 'ImportedPasswordUser', {\n userId: 'my-password-user-id',\n});\n\nconst importedNoPasswordUser = elasticache.NoPasswordUser.fromUserAttributes(stack, 'ImportedNoPasswordUser', {\n userId: 'my-no-password-user-id',\n});\n\nconst importedUserGroup = elasticache.UserGroup.fromUserGroupAttributes(this, 'ImportedUserGroup', {\n userGroupName: 'my-user-group-name'\n});\n```\n"
|
|
8495
|
+
"markdown": "# ElastiCache CDK Construct Library\n<!--BEGIN STABILITY BANNER-->\n\n---\n\n\n\n> The APIs of higher level constructs in this module are experimental and under active development.\n> They are subject to non-backward compatible changes or removal in any future version. These are\n> not subject to the [Semantic Versioning](https://semver.org/) model and breaking changes will be\n> announced in the release notes. This means that while you may use them, you may need to update\n> your source code when upgrading to a newer version of this package.\n\n---\n\n<!--END STABILITY BANNER-->\n\nThis module has constructs for [Amazon ElastiCache](https://docs.aws.amazon.com/AmazonElastiCache/latest/dg/WhatIs.html).\n\n* The `ServerlessCache` construct facilitates the creation and management of serverless cache.\n* The `User` and `UserGroup` constructs facilitate the creation and management of users for the cache.\n\n## Serverless Cache\n\nAmazon ElastiCache Serverless is a serverless option that automatically scales cache capacity based on application traffic patterns. You can create a serverless cache using the `ServerlessCache` construct:\n\n```ts\nconst vpc = new ec2.Vpc(this, 'VPC');\n\nconst cache = new elasticache.ServerlessCache(this, 'ServerlessCache', {\n vpc,\n});\n```\n\n### Connecting to serverless cache\n\nTo control who can access the serverless cache by the security groups, use the `.connections` attribute.\n\nThe serverless cache has a default port `6379`.\n\nThis example allows an EC2 instance to connect to the serverless cache:\n\n```ts\ndeclare const serverlessCache: elasticache.ServerlessCache;\ndeclare const instance: ec2.Instance;\n\n// allow the EC2 instance to connect to serverless cache on default port 6379\nserverlessCache.connections.allowDefaultPortFrom(instance);\n```\n\n### Cache usage limits\n\nYou can configure usage limits on both cache data storage and ECPU/second for your cache to control costs and ensure predictable performance.\n\n**Configuration options:**\n\n* **Maximum limits**: Ensure your cache usage never exceeds the configured maximum\n* **Minimum limits**: Reserve a baseline level of resources for consistent performance\n* **Both**: Define a range where your cache usage will operate\n\nFor more infomation, see [Setting scaling limits to manage costs](https://docs.aws.amazon.com/AmazonElastiCache/latest/dg/Scaling.html#Pre-Scaling).\n\n```ts\ndeclare const vpc: ec2.Vpc;\n\nconst serverlessCache = new elasticache.ServerlessCache(this, 'ServerlessCache', {\n engine: elasticache.CacheEngine.VALKEY_LATEST,\n vpc,\n cacheUsageLimits: {\n // cache data storage limits (GB)\n dataStorageMinimumSize: Size.gibibytes(2), // minimum: 1GB\n dataStorageMaximumSize: Size.gibibytes(3), // maximum: 5000GB\n // rate limits (ECPU/second)\n requestRateLimitMinimum: 1000, // minimum: 1000\n requestRateLimitMaximum: 10000, // maximum: 15000000\n },\n});\n```\n\n### Backups and restore\n\nYou can enable automatic backups for serverless cache.\nWhen automatic backups are enabled, ElastiCache creates a backup of the cache on a daily basis.\n\nAlso you can set the backup window for any time when it's most convenient.\nIf you don't specify a backup window, ElastiCache assigns one automatically.\n\nFor more information, see [Scheduling automatic backups](https://docs.aws.amazon.com/AmazonElastiCache/latest/dg/backups-automatic.html).\n\nTo enable automatic backups, set the `backupRetentionLimit` property. You can also specify the snapshot creation time by setting `backupTime` property:\n\n```ts\ndeclare const vpc: ec2.Vpc;\n\nconst serverlessCache = new elasticache.ServerlessCache(this, 'ServerlessCache', {\n backup: {\n // enable automatic backups and set the retention period to 6 days\n backupRetentionLimit: 6,\n // set the backup window to 9:00 AM UTC\n backupTime: events.Schedule.cron({\n hour: '9',\n minute: '0',\n }),\n },\n vpc,\n});\n```\n\nYou can create a final backup by setting `backupNameBeforeDeletion` property.\n\n```ts\ndeclare const vpc: ec2.Vpc;\n\nconst serverlessCache = new elasticache.ServerlessCache(this, 'ServerlessCache', {\n engine: elasticache.CacheEngine.VALKEY_LATEST,\n backup: {\n // set a backup name before deleting a cache\n backupNameBeforeDeletion: \"my-final-backup-name\",\n },\n vpc,\n});\n```\n\nYou can restore from backups by setting snapshot ARNs to `backupArnsToRestore` property:\n\n```ts\ndeclare const vpc: ec2.Vpc;\n\nconst serverlessCache = new elasticache.ServerlessCache(this, 'ServerlessCache', {\n engine: elasticache.CacheEngine.VALKEY_LATEST,\n backup: {\n // set the backup(s) to restore\n backupArnsToRestore: ['arn:aws:elasticache:us-east-1:123456789012:serverlesscachesnapshot:my-final-backup-name'],\n },\n vpc,\n});\n```\n\n### Encryption at rest\n\nAt-rest encryption is always enabled for Serverless Cache. There are two encryption options:\n\n* **Default**: When no `kmsKey` is specified (left as `undefined`), AWS owned KMS keys are used automatically\n* **Customer Managed Key**: Create a KMS key first, then pass it to the cache via the `kmsKey` property\n\n### Customer Managed Key for encryption at rest\n\nElastiCache supports symmetric Customer Managed key (CMK) for encryption at rest.\n\nFor more information, see [Using customer managed keys from AWS KMS](https://docs.aws.amazon.com/AmazonElastiCache/latest/dg/at-rest-encryption.html#using-customer-managed-keys-for-elasticache-security).\n\nTo use CMK, set your CMK to the `kmsKey` property:\n\n```ts\nimport { Key } from 'aws-cdk-lib/aws-kms';\n\ndeclare const kmsKey: Key;\ndeclare const vpc: ec2.Vpc;\n\nconst serverlessCache = new elasticache.ServerlessCache(this, 'ServerlessCache', {\n engine: elasticache.CacheEngine.VALKEY_LATEST,\n serverlessCacheName: 'my-serverless-cache',\n vpc,\n // set Customer Managed Key\n kmsKey,\n});\n```\n\n### Metrics and monitoring\n\nYou can monitor your serverless cache using CloudWatch Metrics via the `metric` method.\n\nFor more information about serverless cache metrics, see [Serverless metrics and events for Valkey and Redis OSS](https://docs.aws.amazon.com/AmazonElastiCache/latest/dg/serverless-metrics-events-redis.html) and [Serverless metrics and events for Memcached](https://docs.aws.amazon.com/AmazonElastiCache/latest/dg/serverless-metrics-events.memcached.html).\n\n```ts\ndeclare const serverlessCache: elasticache.ServerlessCache;\n\n// The 5 minutes average of the total number of successful read-only key lookups in the cache.\nconst cacheHits = serverlessCache.metricCacheHitCount();\n\n// The 5 minutes average of the total number of bytes used by the data stored in the cache.\nconst bytesUsedForCache = serverlessCache.metricDataStored();\n\n// The 5 minutes average of the total number of ElastiCacheProcessingUnits (ECPUs) consumed by the requests executed on the cache.\nconst elastiCacheProcessingUnits = serverlessCache.metricProcessingUnitsConsumed();\n\n// Create an alarm for ECPUs.\nelastiCacheProcessingUnits.createAlarm(this, 'ElastiCacheProcessingUnitsAlarm', {\n threshold: 50,\n evaluationPeriods: 1,\n});\n```\n\n### Import an existing serverless cache\n\nTo import an existing ServerlessCache, use the `ServerlessCache.fromServerlessCacheAttributes` method:\n\n```ts\ndeclare const securityGroup: ec2.SecurityGroup;\n\nconst importedServerlessCache = elasticache.ServerlessCache.fromServerlessCacheAttributes(this, 'ImportedServerlessCache', {\n serverlessCacheName: 'my-serverless-cache',\n securityGroups: [securityGroup],\n});\n```\n\n## User and User Group\n\nSetup required properties and create:\n\n```ts\nconst newDefaultUser = new elasticache.NoPasswordUser(this, 'NoPasswordUser', {\n userId: 'default',\n accessControl: elasticache.AccessControl.fromAccessString(\"on ~* +@all\"),\n})\n\nconst userGroup = new elasticache.UserGroup(this, 'UserGroup', {\n users: [newDefaultUser],\n});\n```\n\n### RBAC\n\nIn Valkey 7.2 and onward and Redis OSS 6.0 onward you can use a feature called Role-Based Access Control (RBAC). RBAC is also the only way to control access to serverless caches.\n\nRBAC enables you to control cache access through user groups. These user groups are designed as a way to organize access to caches.\n\nFor more information, see [Role-Based Access Control (RBAC)](https://docs.aws.amazon.com/AmazonElastiCache/latest/dg/Clusters.RBAC.html).\n\nTo enable RBAC for ElastiCache with Valkey or Redis OSS, you take the following steps:\n\n* Create users.\n* Create a user group and add users to the user group.\n* Assign the user group to a cache.\n\n### Create users\n\nFirst, you need to create users by using `IamUser`, `PasswordUser` or `NoPasswordUser` construct.\n\nWith RBAC, you create users and assign them specific permissions by using `accessString` property.\n\nFor more information, see [Specifying Permissions Using an Access String](https://docs.aws.amazon.com/AmazonElastiCache/latest/dg/Clusters.RBAC.html#Access-string).\n\nYou can create an IAM-enabled user by using `IamUser` construct:\n\n```ts\nconst user = new elasticache.IamUser(this, 'User', {\n // set user engine\n engine: elasticache.UserEngine.REDIS,\n\n // set user id\n userId: 'my-user',\n\n // set username\n userName: 'my-user',\n\n // set access string\n accessControl: elasticache.AccessControl.fromAccessString(\"on ~* +@all\"),\n});\n```\n\n> NOTE: IAM-enabled users must have matching user id and username. For more information, see [Limitations](https://docs.aws.amazon.com/AmazonElastiCache/latest/dg/auth-iam.html). The construct can set automatically the username to be the same as the user id.\n\nIf you want to create a password authenticated user, use `PasswordUser` construct:\n\n```ts\nconst user = new elasticache.PasswordUser(this, 'User', {\n // set user engine\n engine: elasticache.UserEngine.VALKEY,\n\n // set user id\n userId: 'my-user-id',\n\n // set access string\n accessControl: elasticache.AccessControl.fromAccessString(\"on ~* +@all\"),\n\n // set username\n userName: 'my-user-name',\n\n // set up to two passwords\n passwords: [\n // \"SecretIdForPassword\" is the secret id for the password\n SecretValue.secretsManager('SecretIdForPassword'),\n // \"AnotherSecretIdForPassword\" is the secret id for the password\n SecretValue.secretsManager('AnotherSecretIdForPassword'),\n ],\n});\n```\n\nYou can also create a no password required user by using `NoPasswordUser` construct:\n\n```ts\nconst user = new elasticache.NoPasswordUser(this, 'User', {\n // set user engine\n engine: elasticache.UserEngine.REDIS,\n\n // set user id\n userId: 'my-user-id',\n\n // set access string\n accessControl: elasticache.AccessControl.fromAccessString(\"on ~* +@all\"),\n\n // set username\n userName: 'my-user-name',\n});\n```\n\n> NOTE: `NoPasswordUser` is only available for Redis Cache.\n\n### Default user\n\nElastiCache automatically creates a default user with both a user ID and username set to `default`. This default user cannot be modified or deleted. The user is created as a no password authentication user.\n\nThis user is intended for compatibility with the default behavior of previous Redis OSS versions and has an access string that permits it to call all commands and access all keys.\n\nTo use this automatically created default user in CDK, you can import it using `NoPasswordUser.fromUserAttributes` method. For more information on import methods, see the [Import an existing user and user group](#import-an-existing-user-and-user-group) section.\n\nTo add proper access control to a cache, replace the default user with a new one that is either disabled by setting the `accessString` to `off -@all` or secured with a strong password.\n\nTo change the default user, create a new default user with the username set to `default`. You can then swap it with the original default user.\n\nFor more information, see [Applying RBAC to a Cache for ElastiCache with Valkey or Redis OSS](https://docs.aws.amazon.com/AmazonElastiCache/latest/dg/Clusters.RBAC.html#rbac-using).\n\nIf you want to create a new default user, `userName` must be `default` and `userId` must not be `default` by using `NoPasswordUser` or `PasswordUser`:\n\n```ts\n// use the original `default` user by using import method\nconst defaultUser = elasticache.NoPasswordUser.fromUserAttributes(this, 'DefaultUser', {\n // userId and userName must be 'default'\n userId: 'default',\n});\n\n// create a new default user\nconst newDefaultUser = new elasticache.NoPasswordUser(this, 'NewDefaultUser', {\n // new default user id must not be 'default'\n userId: 'new-default',\n // new default username must be 'default'\n userName: 'default',\n // set access string\n accessControl: elasticache.AccessControl.fromAccessString(\"on ~* +@all\"),\n});\n```\n\n> NOTE: You can't create a new default user using `IamUser` because an IAM-enabled user's username and user ID cannot be different.\n\n### Add users to the user group\n\nNext, use the `UserGroup` construct to create a user group and add users to it.\nEnsure that you include either the original default user or a new default user:\n\n```ts\ndeclare const newDefaultUser: elasticache.IUser;\ndeclare const user: elasticache.IUser;\ndeclare const anotherUser: elasticache.IUser;\n\nconst userGroup = new elasticache.UserGroup(this, 'UserGroup', {\n // add users including default user\n users: [newDefaultUser, user],\n});\n\n// you can also add a user by using addUser method\nuserGroup.addUser(anotherUser);\n```\n\n### Assign user group\n\nFinally, assign a user group to cache:\n\n```ts\ndeclare const vpc: ec2.Vpc;\ndeclare const userGroup: elasticache.UserGroup;\n\nconst serverlessCache = new elasticache.ServerlessCache(this, 'ServerlessCache', {\n engine: elasticache.CacheEngine.VALKEY_LATEST,\n serverlessCacheName: 'my-serverless-cache',\n vpc,\n // assign User Group\n userGroup,\n});\n\n```\n\n### Grant permissions to IAM-enabled users\n\nIf you create IAM-enabled users, `\"elasticache:Connect\"` action must be allowed for the users and cache.\n\n> NOTE: You don't need grant permissions to no password required users or password authentication users.\n\nFor more information, see [Authenticating with IAM](https://docs.aws.amazon.com/AmazonElastiCache/latest/dg/auth-iam.html).\n\nTo grant permissions, you can use the `grantConnect` method in `IamUser` and `ServerlessCache` constructs:\n\n```ts\ndeclare const user: elasticache.IamUser;\ndeclare const serverlessCache: elasticache.ServerlessCache;\ndeclare const role: iam.Role;\n\n// grant \"elasticache:Connect\" action permissions to role\nuser.grantConnect(role);\nserverlessCache.grantConnect(role);\n```\n\n### Import an existing user and user group\n\nYou can import an existing user and user group by using import methods:\n\n```ts\nconst stack = new Stack();\n\nconst importedIamUser = elasticache.IamUser.fromUserId(this, 'ImportedIamUser', 'my-iam-user-id');\n\nconst importedPasswordUser = elasticache.PasswordUser.fromUserAttributes(stack, 'ImportedPasswordUser', {\n userId: 'my-password-user-id',\n});\n\nconst importedNoPasswordUser = elasticache.NoPasswordUser.fromUserAttributes(stack, 'ImportedNoPasswordUser', {\n userId: 'my-no-password-user-id',\n});\n\nconst importedUserGroup = elasticache.UserGroup.fromUserGroupAttributes(this, 'ImportedUserGroup', {\n userGroupName: 'my-user-group-name'\n});\n```\n"
|
|
8467
8496
|
},
|
|
8468
8497
|
"repository": {
|
|
8469
8498
|
"directory": "packages/@aws-cdk/aws-elasticache-alpha",
|
|
@@ -9925,7 +9954,7 @@
|
|
|
9925
9954
|
},
|
|
9926
9955
|
"locationInModule": {
|
|
9927
9956
|
"filename": "lib/no-password-user.ts",
|
|
9928
|
-
"line":
|
|
9957
|
+
"line": 83
|
|
9929
9958
|
},
|
|
9930
9959
|
"parameters": [
|
|
9931
9960
|
{
|
|
@@ -9951,7 +9980,7 @@
|
|
|
9951
9980
|
"kind": "class",
|
|
9952
9981
|
"locationInModule": {
|
|
9953
9982
|
"filename": "lib/no-password-user.ts",
|
|
9954
|
-
"line":
|
|
9983
|
+
"line": 33
|
|
9955
9984
|
},
|
|
9956
9985
|
"methods": [
|
|
9957
9986
|
{
|
|
@@ -9961,7 +9990,7 @@
|
|
|
9961
9990
|
},
|
|
9962
9991
|
"locationInModule": {
|
|
9963
9992
|
"filename": "lib/no-password-user.ts",
|
|
9964
|
-
"line":
|
|
9993
|
+
"line": 43
|
|
9965
9994
|
},
|
|
9966
9995
|
"name": "isNoPasswordUser",
|
|
9967
9996
|
"parameters": [
|
|
@@ -9991,7 +10020,7 @@
|
|
|
9991
10020
|
"immutable": true,
|
|
9992
10021
|
"locationInModule": {
|
|
9993
10022
|
"filename": "lib/no-password-user.ts",
|
|
9994
|
-
"line":
|
|
10023
|
+
"line": 38
|
|
9995
10024
|
},
|
|
9996
10025
|
"name": "PROPERTY_INJECTION_ID",
|
|
9997
10026
|
"static": true,
|
|
@@ -10007,7 +10036,7 @@
|
|
|
10007
10036
|
"immutable": true,
|
|
10008
10037
|
"locationInModule": {
|
|
10009
10038
|
"filename": "lib/no-password-user.ts",
|
|
10010
|
-
"line":
|
|
10039
|
+
"line": 66
|
|
10011
10040
|
},
|
|
10012
10041
|
"name": "accessString",
|
|
10013
10042
|
"type": {
|
|
@@ -10025,7 +10054,7 @@
|
|
|
10025
10054
|
"immutable": true,
|
|
10026
10055
|
"locationInModule": {
|
|
10027
10056
|
"filename": "lib/no-password-user.ts",
|
|
10028
|
-
"line":
|
|
10057
|
+
"line": 72
|
|
10029
10058
|
},
|
|
10030
10059
|
"name": "userArn",
|
|
10031
10060
|
"overrides": "@aws-cdk/aws-elasticache-alpha.UserBase",
|
|
@@ -10044,7 +10073,7 @@
|
|
|
10044
10073
|
"immutable": true,
|
|
10045
10074
|
"locationInModule": {
|
|
10046
10075
|
"filename": "lib/no-password-user.ts",
|
|
10047
|
-
"line":
|
|
10076
|
+
"line": 56
|
|
10048
10077
|
},
|
|
10049
10078
|
"name": "userId",
|
|
10050
10079
|
"overrides": "@aws-cdk/aws-elasticache-alpha.UserBase",
|
|
@@ -10064,7 +10093,7 @@
|
|
|
10064
10093
|
"immutable": true,
|
|
10065
10094
|
"locationInModule": {
|
|
10066
10095
|
"filename": "lib/no-password-user.ts",
|
|
10067
|
-
"line":
|
|
10096
|
+
"line": 79
|
|
10068
10097
|
},
|
|
10069
10098
|
"name": "userStatus",
|
|
10070
10099
|
"type": {
|
|
@@ -10079,7 +10108,7 @@
|
|
|
10079
10108
|
"immutable": true,
|
|
10080
10109
|
"locationInModule": {
|
|
10081
10110
|
"filename": "lib/no-password-user.ts",
|
|
10082
|
-
"line":
|
|
10111
|
+
"line": 50
|
|
10083
10112
|
},
|
|
10084
10113
|
"name": "engine",
|
|
10085
10114
|
"optional": true,
|
|
@@ -10099,7 +10128,7 @@
|
|
|
10099
10128
|
"immutable": true,
|
|
10100
10129
|
"locationInModule": {
|
|
10101
10130
|
"filename": "lib/no-password-user.ts",
|
|
10102
|
-
"line":
|
|
10131
|
+
"line": 62
|
|
10103
10132
|
},
|
|
10104
10133
|
"name": "userName",
|
|
10105
10134
|
"optional": true,
|
|
@@ -10129,7 +10158,7 @@
|
|
|
10129
10158
|
"kind": "interface",
|
|
10130
10159
|
"locationInModule": {
|
|
10131
10160
|
"filename": "lib/no-password-user.ts",
|
|
10132
|
-
"line":
|
|
10161
|
+
"line": 19
|
|
10133
10162
|
},
|
|
10134
10163
|
"name": "NoPasswordUserProps",
|
|
10135
10164
|
"properties": [
|
|
@@ -10143,7 +10172,7 @@
|
|
|
10143
10172
|
"immutable": true,
|
|
10144
10173
|
"locationInModule": {
|
|
10145
10174
|
"filename": "lib/no-password-user.ts",
|
|
10146
|
-
"line":
|
|
10175
|
+
"line": 25
|
|
10147
10176
|
},
|
|
10148
10177
|
"name": "userName",
|
|
10149
10178
|
"optional": true,
|
|
@@ -12416,7 +12445,7 @@
|
|
|
12416
12445
|
{
|
|
12417
12446
|
"abstract": true,
|
|
12418
12447
|
"docs": {
|
|
12419
|
-
"default": "UserEngine.VALKEY.",
|
|
12448
|
+
"default": "- UserEngine.REDIS for NoPasswordUser, UserEngine.VALKEY for all other user types.",
|
|
12420
12449
|
"remarks": "Enum options: UserEngine.VALKEY, UserEngine.REDIS.",
|
|
12421
12450
|
"stability": "experimental",
|
|
12422
12451
|
"summary": "The engine type for the user."
|
|
@@ -13162,6 +13191,6 @@
|
|
|
13162
13191
|
"symbolId": "lib/user-group:UserGroupProps"
|
|
13163
13192
|
}
|
|
13164
13193
|
},
|
|
13165
|
-
"version": "2.
|
|
13194
|
+
"version": "2.234.0-alpha.0",
|
|
13166
13195
|
"fingerprint": "**********"
|
|
13167
13196
|
}
|
package/.jsii.tabl.json.gz
CHANGED
|
Binary file
|
package/LICENSE
CHANGED
|
@@ -186,7 +186,7 @@
|
|
|
186
186
|
same "printed page" as the copyright notice for easier
|
|
187
187
|
identification within third-party archives.
|
|
188
188
|
|
|
189
|
-
Copyright 2018-
|
|
189
|
+
Copyright 2018-2026 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
190
190
|
|
|
191
191
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
192
192
|
you may not use this file except in compliance with the License.
|
package/NOTICE
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
AWS Cloud Development Kit (AWS CDK)
|
|
2
|
-
Copyright 2018-
|
|
2
|
+
Copyright 2018-2026 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
package/README.md
CHANGED
|
@@ -305,6 +305,8 @@ const user = new elasticache.NoPasswordUser(this, 'User', {
|
|
|
305
305
|
});
|
|
306
306
|
```
|
|
307
307
|
|
|
308
|
+
> NOTE: `NoPasswordUser` is only available for Redis Cache.
|
|
309
|
+
|
|
308
310
|
### Default user
|
|
309
311
|
|
|
310
312
|
ElastiCache automatically creates a default user with both a user ID and username set to `default`. This default user cannot be modified or deleted. The user is created as a no password authentication user.
|
package/lib/iam-user.js
CHANGED
|
@@ -71,7 +71,7 @@ let IamUser = (() => {
|
|
|
71
71
|
IamUser = _classThis = _classDescriptor.value;
|
|
72
72
|
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
73
73
|
}
|
|
74
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-elasticache-alpha.IamUser", version: "2.
|
|
74
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-elasticache-alpha.IamUser", version: "2.234.0-alpha.0" };
|
|
75
75
|
/**
|
|
76
76
|
* Uniquely identifies this class.
|
|
77
77
|
*/
|
package/lib/no-password-user.js
CHANGED
|
@@ -44,6 +44,10 @@ const prop_injectable_1 = require("aws-cdk-lib/core/lib/prop-injectable");
|
|
|
44
44
|
const common_1 = require("./common");
|
|
45
45
|
const user_base_1 = require("./user-base");
|
|
46
46
|
const ELASTICACHE_NOPASSWORDUSER_SYMBOL = Symbol.for('@aws-cdk/aws-elasticache.NoPasswordUser');
|
|
47
|
+
/**
|
|
48
|
+
* List of engines that support no-password authentication.
|
|
49
|
+
*/
|
|
50
|
+
const SUPPORTED_NO_PASSWORD_ENGINES = [common_1.UserEngine.REDIS];
|
|
47
51
|
/**
|
|
48
52
|
* Define an ElastiCache user with no password authentication.
|
|
49
53
|
*
|
|
@@ -63,7 +67,7 @@ let NoPasswordUser = (() => {
|
|
|
63
67
|
NoPasswordUser = _classThis = _classDescriptor.value;
|
|
64
68
|
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
65
69
|
}
|
|
66
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-elasticache-alpha.NoPasswordUser", version: "2.
|
|
70
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-elasticache-alpha.NoPasswordUser", version: "2.234.0-alpha.0" };
|
|
67
71
|
/**
|
|
68
72
|
* Uniquely identifies this class.
|
|
69
73
|
*/
|
|
@@ -125,8 +129,8 @@ let NoPasswordUser = (() => {
|
|
|
125
129
|
this.userId = props.userId;
|
|
126
130
|
this.userName = props.userName ?? props.userId;
|
|
127
131
|
this.accessString = props.accessControl.accessString;
|
|
128
|
-
if (this.engine
|
|
129
|
-
throw new core_1.ValidationError('
|
|
132
|
+
if (!SUPPORTED_NO_PASSWORD_ENGINES.includes(this.engine)) {
|
|
133
|
+
throw new core_1.ValidationError(`Engine '${this.engine}' does not support no-password authentication. Supported engines: ${SUPPORTED_NO_PASSWORD_ENGINES.join(', ')}.`, this);
|
|
130
134
|
}
|
|
131
135
|
this.resource = new aws_elasticache_1.CfnUser(this, 'Resource', {
|
|
132
136
|
engine: this.engine,
|
|
@@ -150,4 +154,4 @@ let NoPasswordUser = (() => {
|
|
|
150
154
|
return NoPasswordUser = _classThis;
|
|
151
155
|
})();
|
|
152
156
|
exports.NoPasswordUser = NoPasswordUser;
|
|
153
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
157
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm8tcGFzc3dvcmQtdXNlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm5vLXBhc3N3b3JkLXVzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsaUVBQXNEO0FBQ3RELDJDQUFtRDtBQUNuRCw4RUFBOEU7QUFDOUUsMEVBQTBFO0FBRTFFLHFDQUFzQztBQUN0QywyQ0FBc0Q7QUFFdEQsTUFBTSxpQ0FBaUMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLHlDQUF5QyxDQUFDLENBQUM7QUFFaEc7O0dBRUc7QUFDSCxNQUFNLDZCQUE2QixHQUFHLENBQUMsbUJBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQWN6RDs7OztHQUlHO0lBRVUsY0FBYzs0QkFEMUIsb0NBQWtCOzs7O3NCQUNpQixvQkFBUTs4QkFBaEIsU0FBUSxXQUFROzs7O1lBQTVDLDZLQWlGQzs7Ozs7UUFoRkM7O1dBRUc7UUFDSSxNQUFNLENBQVUscUJBQXFCLEdBQVcsNENBQTRDLENBQUM7UUFFcEc7O1dBRUc7UUFDSSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBTTtZQUNuQyxPQUFPLENBQUMsS0FBSyxJQUFJLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsSUFBSSxpQ0FBaUMsSUFBSSxDQUFDLENBQUM7U0FDeEY7UUFFRDs7V0FFRztRQUNhLE1BQU0sQ0FBYztRQUNwQzs7OztXQUlHO1FBQ2EsTUFBTSxDQUFTO1FBQy9COzs7O1dBSUc7UUFDYSxRQUFRLENBQVU7UUFDbEM7O1dBRUc7UUFDYSxZQUFZLENBQVM7UUFDckM7Ozs7V0FJRztRQUNhLE9BQU8sQ0FBUztRQUNoQzs7Ozs7V0FLRztRQUNhLFVBQVUsQ0FBUztRQUVsQixRQUFRLENBQVU7UUFFbkMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUEwQjtZQUNsRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDOzs7Ozs7bURBbERSLGNBQWM7Ozs7WUFvRHZCLG1DQUFtQztZQUNuQyxJQUFBLHdDQUFvQixFQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztZQUVsQyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLElBQUksbUJBQVUsQ0FBQyxLQUFLLENBQUM7WUFDL0MsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQzNCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQy9DLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUM7WUFFckQsSUFBSSxDQUFDLDZCQUE2QixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDekQsTUFBTSxJQUFJLHNCQUFlLENBQUMsV0FBVyxJQUFJLENBQUMsTUFBTSxxRUFBcUUsNkJBQTZCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDMUssQ0FBQztZQUVELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSx5QkFBTyxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBQzVDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtnQkFDbkIsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNO2dCQUNwQixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7Z0JBQ3ZCLFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWTtnQkFDL0Isa0JBQWtCLEVBQUU7b0JBQ2xCLElBQUksRUFBRSxzQkFBc0I7aUJBQzdCO2dCQUNELGtCQUFrQixFQUFFLElBQUk7Z0JBQ3hCLFNBQVMsRUFBRSxTQUFTO2FBQ3JCLENBQUMsQ0FBQztZQUVILElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7WUFDckMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQztZQUUzQyxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxpQ0FBaUMsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1NBQ2pGOztZQWhGVSx1REFBYzs7Ozs7QUFBZCx3Q0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENmblVzZXIgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWxhc3RpY2FjaGUnO1xuaW1wb3J0IHsgVmFsaWRhdGlvbkVycm9yIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZSc7XG5pbXBvcnQgeyBhZGRDb25zdHJ1Y3RNZXRhZGF0YSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL21ldGFkYXRhLXJlc291cmNlJztcbmltcG9ydCB7IHByb3BlcnR5SW5qZWN0YWJsZSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL3Byb3AtaW5qZWN0YWJsZSc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IFVzZXJFbmdpbmUgfSBmcm9tICcuL2NvbW1vbic7XG5pbXBvcnQgeyBVc2VyQmFzZSwgVXNlckJhc2VQcm9wcyB9IGZyb20gJy4vdXNlci1iYXNlJztcblxuY29uc3QgRUxBU1RJQ0FDSEVfTk9QQVNTV09SRFVTRVJfU1lNQk9MID0gU3ltYm9sLmZvcignQGF3cy1jZGsvYXdzLWVsYXN0aWNhY2hlLk5vUGFzc3dvcmRVc2VyJyk7XG5cbi8qKlxuICogTGlzdCBvZiBlbmdpbmVzIHRoYXQgc3VwcG9ydCBuby1wYXNzd29yZCBhdXRoZW50aWNhdGlvbi5cbiAqL1xuY29uc3QgU1VQUE9SVEVEX05PX1BBU1NXT1JEX0VOR0lORVMgPSBbVXNlckVuZ2luZS5SRURJU107XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgZGVmaW5pbmcgYW4gRWxhc3RpQ2FjaGUgdXNlciB3aXRoIG5vIHBhc3N3b3JkIGF1dGhlbnRpY2F0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5vUGFzc3dvcmRVc2VyUHJvcHMgZXh0ZW5kcyBVc2VyQmFzZVByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSB1c2VyLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFNhbWUgYXMgdXNlcklkLlxuICAgKi9cbiAgcmVhZG9ubHkgdXNlck5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRGVmaW5lIGFuIEVsYXN0aUNhY2hlIHVzZXIgd2l0aCBubyBwYXNzd29yZCBhdXRoZW50aWNhdGlvbi5cbiAqXG4gKiBAcmVzb3VyY2UgQVdTOjpFbGFzdGlDYWNoZTo6VXNlclxuICovXG5AcHJvcGVydHlJbmplY3RhYmxlXG5leHBvcnQgY2xhc3MgTm9QYXNzd29yZFVzZXIgZXh0ZW5kcyBVc2VyQmFzZSB7XG4gIC8qKlxuICAgKiBVbmlxdWVseSBpZGVudGlmaWVzIHRoaXMgY2xhc3MuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBST1BFUlRZX0lOSkVDVElPTl9JRDogc3RyaW5nID0gJ2F3cy1jZGstbGliLmF3cy1lbGFzdGljYWNoZS5Ob1Bhc3N3b3JkVXNlcic7XG5cbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIHRoZSBnaXZlbiBvYmplY3QgaXMgYSBgTm9QYXNzd29yZFVzZXJgLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBpc05vUGFzc3dvcmRVc2VyKHg6IGFueSk6IHggaXMgTm9QYXNzd29yZFVzZXIge1xuICAgIHJldHVybiB4ICE9PSBudWxsICYmIHR5cGVvZiAoeCkgPT09ICdvYmplY3QnICYmIEVMQVNUSUNBQ0hFX05PUEFTU1dPUkRVU0VSX1NZTUJPTCBpbiB4O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBlbmdpbmUgZm9yIHRoZSB1c2VyLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGVuZ2luZT86IFVzZXJFbmdpbmU7XG4gIC8qKlxuICAgKiBUaGUgdXNlcidzIElELlxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdXNlcklkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgdXNlcidzIG5hbWUuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB1c2VyTmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBhY2Nlc3Mgc3RyaW5nIHRoYXQgZGVmaW5lcyB0aGUgdXNlcidzIHBlcm1pc3Npb25zLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGFjY2Vzc1N0cmluZzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHVzZXIncyBBUk4uXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB1c2VyQXJuOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgdXNlcidzIHN0YXR1cy5cbiAgICogQ2FuIGJlICdhY3RpdmUnLCAnbW9kaWZ5aW5nJywgJ2RlbGV0aW5nJy5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHVzZXJTdGF0dXM6IHN0cmluZztcblxuICBwcml2YXRlIHJlYWRvbmx5IHJlc291cmNlOiBDZm5Vc2VyO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBOb1Bhc3N3b3JkVXNlclByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIC8vIEVuaGFuY2VkIENESyBBbmFseXRpY3MgVGVsZW1ldHJ5XG4gICAgYWRkQ29uc3RydWN0TWV0YWRhdGEodGhpcywgcHJvcHMpO1xuXG4gICAgdGhpcy5lbmdpbmUgPSBwcm9wcy5lbmdpbmUgPz8gVXNlckVuZ2luZS5SRURJUztcbiAgICB0aGlzLnVzZXJJZCA9IHByb3BzLnVzZXJJZDtcbiAgICB0aGlzLnVzZXJOYW1lID0gcHJvcHMudXNlck5hbWUgPz8gcHJvcHMudXNlcklkO1xuICAgIHRoaXMuYWNjZXNzU3RyaW5nID0gcHJvcHMuYWNjZXNzQ29udHJvbC5hY2Nlc3NTdHJpbmc7XG5cbiAgICBpZiAoIVNVUFBPUlRFRF9OT19QQVNTV09SRF9FTkdJTkVTLmluY2x1ZGVzKHRoaXMuZW5naW5lKSkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihgRW5naW5lICcke3RoaXMuZW5naW5lfScgZG9lcyBub3Qgc3VwcG9ydCBuby1wYXNzd29yZCBhdXRoZW50aWNhdGlvbi4gU3VwcG9ydGVkIGVuZ2luZXM6ICR7U1VQUE9SVEVEX05PX1BBU1NXT1JEX0VOR0lORVMuam9pbignLCAnKX0uYCwgdGhpcyk7XG4gICAgfVxuXG4gICAgdGhpcy5yZXNvdXJjZSA9IG5ldyBDZm5Vc2VyKHRoaXMsICdSZXNvdXJjZScsIHtcbiAgICAgIGVuZ2luZTogdGhpcy5lbmdpbmUsXG4gICAgICB1c2VySWQ6IHByb3BzLnVzZXJJZCxcbiAgICAgIHVzZXJOYW1lOiB0aGlzLnVzZXJOYW1lLFxuICAgICAgYWNjZXNzU3RyaW5nOiB0aGlzLmFjY2Vzc1N0cmluZyxcbiAgICAgIGF1dGhlbnRpY2F0aW9uTW9kZToge1xuICAgICAgICBUeXBlOiAnbm8tcGFzc3dvcmQtcmVxdWlyZWQnLFxuICAgICAgfSxcbiAgICAgIG5vUGFzc3dvcmRSZXF1aXJlZDogdHJ1ZSxcbiAgICAgIHBhc3N3b3JkczogdW5kZWZpbmVkLFxuICAgIH0pO1xuXG4gICAgdGhpcy51c2VyQXJuID0gdGhpcy5yZXNvdXJjZS5hdHRyQXJuO1xuICAgIHRoaXMudXNlclN0YXR1cyA9IHRoaXMucmVzb3VyY2UuYXR0clN0YXR1cztcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBFTEFTVElDQUNIRV9OT1BBU1NXT1JEVVNFUl9TWU1CT0wsIHsgdmFsdWU6IHRydWUgfSk7XG4gIH1cbn1cbiJdfQ==
|
package/lib/password-user.js
CHANGED
|
@@ -63,7 +63,7 @@ let PasswordUser = (() => {
|
|
|
63
63
|
PasswordUser = _classThis = _classDescriptor.value;
|
|
64
64
|
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
65
65
|
}
|
|
66
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-elasticache-alpha.PasswordUser", version: "2.
|
|
66
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-elasticache-alpha.PasswordUser", version: "2.234.0-alpha.0" };
|
|
67
67
|
/**
|
|
68
68
|
* Uniquely identifies this class.
|
|
69
69
|
*/
|
|
@@ -45,7 +45,7 @@ var CacheEngine;
|
|
|
45
45
|
* Base class for ServerlessCache constructs
|
|
46
46
|
*/
|
|
47
47
|
class ServerlessCacheBase extends core_1.Resource {
|
|
48
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-elasticache-alpha.ServerlessCacheBase", version: "2.
|
|
48
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-elasticache-alpha.ServerlessCacheBase", version: "2.234.0-alpha.0" };
|
|
49
49
|
/**
|
|
50
50
|
* Grant connect permissions to the cache
|
|
51
51
|
*
|
package/lib/serverless-cache.js
CHANGED
|
@@ -90,7 +90,7 @@ let ServerlessCache = (() => {
|
|
|
90
90
|
ServerlessCache = _classThis = _classDescriptor.value;
|
|
91
91
|
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
92
92
|
}
|
|
93
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-elasticache-alpha.ServerlessCache", version: "2.
|
|
93
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-elasticache-alpha.ServerlessCache", version: "2.234.0-alpha.0" };
|
|
94
94
|
/**
|
|
95
95
|
* Uniquely identifies this class.
|
|
96
96
|
*/
|
|
@@ -275,7 +275,9 @@ let ServerlessCache = (() => {
|
|
|
275
275
|
// Enhanced CDK Analytics Telemetry
|
|
276
276
|
(0, metadata_resource_1.addConstructMetadata)(this, props);
|
|
277
277
|
this.engine = props.engine ?? serverless_cache_base_1.CacheEngine.VALKEY_LATEST;
|
|
278
|
-
this.serverlessCacheName = props.serverlessCacheName ?? core_1.Lazy.string({
|
|
278
|
+
this.serverlessCacheName = props.serverlessCacheName ?? core_1.Lazy.string({
|
|
279
|
+
produce: () => core_1.Names.uniqueResourceName(this, { maxLength: 40 }),
|
|
280
|
+
});
|
|
279
281
|
this.kmsKey = props.kmsKey;
|
|
280
282
|
this.vpc = props.vpc;
|
|
281
283
|
this.userGroup = props.userGroup;
|
|
@@ -319,7 +321,7 @@ let ServerlessCache = (() => {
|
|
|
319
321
|
this.serverlessCacheStatus = resource.attrStatus;
|
|
320
322
|
this.connections = new ec2.Connections({
|
|
321
323
|
securityGroups: this.securityGroups,
|
|
322
|
-
defaultPort: ec2.Port.tcp(core_1.
|
|
324
|
+
defaultPort: ec2.Port.tcp(core_1.Token.asNumber(this.serverlessCacheEndpointPort)),
|
|
323
325
|
});
|
|
324
326
|
Object.defineProperty(this, ELASTICACHE_SERVERLESSCACHE_SYMBOL, { value: true });
|
|
325
327
|
}
|
|
@@ -519,4 +521,4 @@ let ServerlessCache = (() => {
|
|
|
519
521
|
return ServerlessCache = _classThis;
|
|
520
522
|
})();
|
|
521
523
|
exports.ServerlessCache = ServerlessCache;
|
|
522
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVybGVzcy1jYWNoZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNlcnZlcmxlc3MtY2FjaGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsMkNBQTJDO0FBQzNDLGlFQUErRTtBQUcvRSwyQ0FBK0Y7QUFDL0YsOEVBQThFO0FBQzlFLDBFQUEwRTtBQUUxRSxxQ0FBc0M7QUFDdEMsbUVBQTZGO0FBRzdGLE1BQU0sa0NBQWtDLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO0FBRWxHOztHQUVHO0FBQ0gsSUFBSyxlQUtKO0FBTEQsV0FBSyxlQUFlO0lBQ2xCOztPQUVHO0lBQ0gsbUNBQWdCLENBQUE7QUFDbEIsQ0FBQyxFQUxJLGVBQWUsS0FBZixlQUFlLFFBS25CO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLG1CQUFtQixHQUFHLENBQUMsQ0FBQztBQUM5Qjs7R0FFRztBQUNILE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDO0FBQ2pDOztHQUVHO0FBQ0gsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLENBQUM7QUFDbkM7O0dBRUc7QUFDSCxNQUFNLHFCQUFxQixHQUFHLFFBQVEsQ0FBQztBQWdNdkM7Ozs7R0FJRztJQUVVLGVBQWU7NEJBRDNCLG9DQUFrQjs7OztzQkFDa0IsMkNBQW1COytCQUEzQixTQUFRLFdBQW1COzs7O1lBQXhELDZLQXVjQzs7Ozs7UUF0Y0M7O1dBRUc7UUFDSSxNQUFNLENBQVUscUJBQXFCLEdBQVcsNkNBQTZDLENBQUM7UUFFckc7O1dBRUc7UUFDSSxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBTTtZQUNwQyxPQUFPLENBQUMsS0FBSyxJQUFJLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsSUFBSSxrQ0FBa0MsSUFBSSxDQUFDLENBQUM7U0FDekY7UUFFRDs7Ozs7O1dBTUc7UUFDSSxNQUFNLENBQUMs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T0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7U0FDOUQ7O1lBdGNVLHVEQUFlOzs7OztBQUFmLDBDQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZWMyIGZyb20gJ2F3cy1jZGstbGliL2F3cy1lYzInO1xuaW1wb3J0IHsgQ2ZuU2VydmVybGVzc0NhY2hlLCBDZm5Vc2VyR3JvdXAgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWxhc3RpY2FjaGUnO1xuaW1wb3J0ICogYXMgZXZlbnRzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1ldmVudHMnO1xuaW1wb3J0ICogYXMga21zIGZyb20gJ2F3cy1jZGstbGliL2F3cy1rbXMnO1xuaW1wb3J0IHsgQXJuRm9ybWF0LCBTdGFjaywgU2l6ZSwgTGF6eSwgVmFsaWRhdGlvbkVycm9yLCBOYW1lcywgVG9rZW4gfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlJztcbmltcG9ydCB7IGFkZENvbnN0cnVjdE1ldGFkYXRhIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvbWV0YWRhdGEtcmVzb3VyY2UnO1xuaW1wb3J0IHsgcHJvcGVydHlJbmplY3RhYmxlIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvcHJvcC1pbmplY3RhYmxlJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgVXNlckVuZ2luZSB9IGZyb20gJy4vY29tbW9uJztcbmltcG9ydCB7IElTZXJ2ZXJsZXNzQ2FjaGUsIFNlcnZlcmxlc3NDYWNoZUJhc2UsIENhY2hlRW5naW5lIH0gZnJvbSAnLi9zZXJ2ZXJsZXNzLWNhY2hlLWJhc2UnO1xuaW1wb3J0IHsgSVVzZXJHcm91cCB9IGZyb20gJy4vdXNlci1ncm91cCc7XG5cbmNvbnN0IEVMQVNUSUNBQ0hFX1NFUlZFUkxFU1NDQUNIRV9TWU1CT0wgPSBTeW1ib2wuZm9yKCdAYXdzLWNkay9hd3MtZWxhc3RpY2FjaGUuU2VydmVybGVzc0NhY2hlJyk7XG5cbi8qKlxuICogVW5pdCB0eXBlcyBmb3IgZGF0YSBzdG9yYWdlIHVzYWdlIGxpbWl0c1xuICovXG5lbnVtIERhdGFTdG9yYWdlVW5pdCB7XG4gIC8qKlxuICAgKiBHaWdhYnl0ZXNcbiAgICovXG4gIEdJR0FCWVRFUyA9ICdHQicsXG59XG5cbi8qKlxuICogTWluaW11bSBkYXRhIHN0b3JhZ2Ugc2l6ZSBpbiBHQiBmb3IgU2VydmVybGVzc0NhY2hlXG4gKi9cbmNvbnN0IERBVEFfU1RPUkFHRV9NSU5fR0IgPSAxO1xuLyoqXG4gKiBNYXhpbXVtIGRhdGEgc3RvcmFnZSBzaXplIGluIEdCIGZvciBTZXJ2ZXJsZXNzQ2FjaGVcbiAqL1xuY29uc3QgREFUQV9TVE9SQUdFX01BWF9HQiA9IDUwMDA7XG4vKipcbiAqIE1pbmltdW0gcmVxdWVzdCByYXRlIGxpbWl0IGluIEVDUFVzIHBlciBzZWNvbmQgZm9yIFNlcnZlcmxlc3NDYWNoZVxuICovXG5jb25zdCBSRVFVRVNUX1JBVEVfTUlOX0VDUFUgPSAxMDAwO1xuLyoqXG4gKiBNYXhpbXVtIHJlcXVlc3QgcmF0ZSBsaW1pdCBpbiBFQ1BVcyBwZXIgc2Vjb25kIGZvciBTZXJ2ZXJsZXNzQ2FjaGVcbiAqL1xuY29uc3QgUkVRVUVTVF9SQVRFX01BWF9FQ1BVID0gMTUwMDAwMDA7XG5cbi8qKlxuICogVXNhZ2UgbGltaXRzIGNvbmZpZ3VyYXRpb24gZm9yIFNlcnZlcmxlc3NDYWNoZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIENhY2hlVXNhZ2VMaW1pdHNQcm9wZXJ0eSB7XG4gIC8qKlxuICAgKiBNaW5pbXVtIGRhdGEgc3RvcmFnZSBzaXplICgxIEdCKVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIG1pbmltdW0gbGltaXRcbiAgICovXG4gIHJlYWRvbmx5IGRhdGFTdG9yYWdlTWluaW11bVNpemU/OiBTaXplO1xuICAvKipcbiAgICogTWF4aW11bSBkYXRhIHN0b3JhZ2Ugc2l6ZSAoNTAwMCBHQilcbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBtYXhpbXVtIGxpbWl0XG4gICAqL1xuICByZWFkb25seSBkYXRhU3RvcmFnZU1heGltdW1TaXplPzogU2l6ZTtcbiAgLyoqXG4gICAqIE1pbmltdW0gcmVxdWVzdCByYXRlIGxpbWl0ICgxMDAwIEVDUFVzIHBlciBzZWNvbmQpXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gbWluaW11bSBsaW1pdFxuICAgKi9cbiAgcmVhZG9ubHkgcmVxdWVzdFJhdGVMaW1pdE1pbmltdW0/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBNYXhpbXVtIHJlcXVlc3QgcmF0ZSBsaW1pdCAoMTUwMDAwMDAgRUNQVXMgcGVyIHNlY29uZClcbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBtYXhpbXVtIGxpbWl0XG4gICAqL1xuICByZWFkb25seSByZXF1ZXN0UmF0ZUxpbWl0TWF4aW11bT86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBCYWNrdXAgY29uZmlndXJhdGlvbiBmb3IgU2VydmVybGVzc0NhY2hlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmFja3VwU2V0dGluZ3Mge1xuICAvKipcbiAgICogQXV0b21hdGVkIGRhaWx5IGJhY2t1cCBVVEMgdGltZVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIGF1dG9tYXRlZCBiYWNrdXBzXG4gICAqL1xuICByZWFkb25seSBiYWNrdXBUaW1lPzogZXZlbnRzLlNjaGVkdWxlO1xuICAvKipcbiAgICogTnVtYmVyIG9mIGRheXMgdG8gcmV0YWluIGJhY2t1cHMgKDEtMzUpXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gQmFja3VwcyBhcmUgbm90IHJldGFpbmVkXG4gICAqL1xuICByZWFkb25seSBiYWNrdXBSZXRlbnRpb25MaW1pdD86IG51bWJlcjtcbiAgLyoqXG4gICAqIE5hbWUgZm9yIHRoZSBmaW5hbCBiYWNrdXAgdGFrZW4gYmVmb3JlIGRlbGV0aW9uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gZmluYWwgYmFja3VwXG4gICAqL1xuICByZWFkb25seSBiYWNrdXBOYW1lQmVmb3JlRGVsZXRpb24/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBBUk5zIG9mIGJhY2t1cHMgZnJvbSB3aGljaCB0byByZXN0b3JlIGRhdGEgaW50byB0aGUgbmV3IGNhY2hlXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gQ3JlYXRlIGEgbmV3IGNhY2hlIHdpdGggbm8gZXhpc3RpbmcgZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgYmFja3VwQXJuc1RvUmVzdG9yZT86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGRlZmluaW5nIGEgU2VydmVybGVzc0NhY2hlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmVybGVzc0NhY2hlUHJvcHMge1xuICAvKipcbiAgICogVGhlIGNhY2hlIGVuZ2luZSBjb21iaW5lZCB3aXRoIHRoZSB2ZXJzaW9uXG4gICAqIEVudW0gb3B0aW9uczogVkFMS0VZX0RFRkFVTFQsIFZBTEtFWV83LCBWQUxLRVlfOCwgUkVESVNfREVGQVVMVCwgTUVNQ0FDSEVEX0RFRkFVTFRcbiAgICogVGhlIGRlZmF1bHQgb3B0aW9ucyBicmluZyB0aGUgbGF0ZXN0IHZlcnNpb25zIGF2YWlsYWJsZS5cbiAgICpcbiAgICogQGRlZmF1bHQgd2hlbiBub3QgcHJvdmlkZWQsIHRoZSBkZWZhdWx0IGVuZ2luZSB3b3VsZCBiZSBWYWxrZXksIGxhdGVzdCB2ZXJzaW9uIGF2YWlsYWJsZSAoVkFMS0VZX0RFRkFVTFQpXG4gICAqL1xuICByZWFkb25seSBlbmdpbmU/OiBDYWNoZUVuZ2luZTtcbiAgLyoqXG4gICAqIE5hbWUgZm9yIHRoZSBzZXJ2ZXJsZXNzIGNhY2hlXG4gICAqXG4gICAqIEBkZWZhdWx0IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG5hbWUgYnkgUmVzb3VyY2VcbiAgICovXG4gIHJlYWRvbmx5IHNlcnZlcmxlc3NDYWNoZU5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBBIGRlc2NyaXB0aW9uIGZvciB0aGUgY2FjaGVcbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBkZXNjcmlwdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBVc2FnZSBsaW1pdHMgZm9yIHRoZSBjYWNoZVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIHVzYWdlIGxpbWl0c1xuICAgKi9cbiAgcmVhZG9ubHkgY2FjaGVVc2FnZUxpbWl0cz86IENhY2hlVXNhZ2VMaW1pdHNQcm9wZXJ0eTtcbiAgLyoqXG4gICAqIEJhY2t1cCBjb25maWd1cmF0aW9uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gYmFja3VwcyBjb25maWd1cmVkXG4gICAqL1xuICByZWFkb25seSBiYWNrdXA/OiBCYWNrdXBTZXR0aW5ncztcbiAgLyoqXG4gICAqIEtNUyBrZXkgZm9yIGVuY3J5cHRpb25cbiAgICpcbiAgICogQGRlZmF1bHQgLSBTZXJ2aWNlIG1hbmFnZWQgZW5jcnlwdGlvbiAoQVdTIG93bmVkIEtNUyBrZXkpXG4gICAqL1xuICByZWFkb25seSBrbXNLZXk/OiBrbXMuSUtleTtcbiAgLyoqXG4gICAqIFRoZSBWUEMgdG8gcGxhY2UgdGhlIGNhY2hlIGluXG4gICAqL1xuICByZWFkb25seSB2cGM6IGVjMi5JVnBjO1xuICAvKipcbiAgICogV2hpY2ggc3VibmV0cyB0byBwbGFjZSB0aGUgY2FjaGUgaW5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBQcml2YXRlIHN1Ym5ldHMgd2l0aCBlZ3Jlc3NcbiAgICovXG4gIHJlYWRvbmx5IHZwY1N1Ym5ldHM/OiBlYzIuU3VibmV0U2VsZWN0aW9uO1xuICAvKipcbiAgICogU2VjdXJpdHkgZ3JvdXBzIGZvciB0aGUgY2FjaGVcbiAgICpcbiAgICogQGRlZmF1bHQgLSBBIG5ldyBzZWN1cml0eSBncm91cCBpcyBjcmVhdGVkXG4gICAqL1xuICByZWFkb25seSBzZWN1cml0eUdyb3Vwcz86IGVjMi5JU2VjdXJpdHlHcm91cFtdO1xuICAvKipcbiAgICogVXNlciBncm91cCBmb3IgYWNjZXNzIGNvbnRyb2xcbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyB1c2VyIGdyb3VwXG4gICAqL1xuICByZWFkb25seSB1c2VyR3JvdXA/OiBJVXNlckdyb3VwO1xufVxuXG4vKipcbiAqIEF0dHJpYnV0ZXMgdGhhdCBjYW4gYmUgc3BlY2lmaWVkIHdoZW4gaW1wb3J0aW5nIGEgU2VydmVybGVzc0NhY2hlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmVybGVzc0NhY2hlQXR0cmlidXRlcyB7XG4gIC8qKlxuICAgKiBUaGUgY2FjaGUgZW5naW5lIHVzZWQgYnkgdGhpcyBjYWNoZVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGVuZ2luZSB0eXBlIGlzIHVua25vd25cbiAgICovXG4gIHJlYWRvbmx5IGVuZ2luZT86IENhY2hlRW5naW5lO1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHNlcnZlcmxlc3MgY2FjaGVcbiAgICpcbiAgICogT25lIG9mIGBzZXJ2ZXJsZXNzQ2FjaGVOYW1lYCBvciBgc2VydmVybGVzc0NhY2hlQXJuYCBpcyByZXF1aXJlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBkZXJpdmVkIGZyb20gc2VydmVybGVzc0NhY2hlQXJuXG4gICAqL1xuICByZWFkb25seSBzZXJ2ZXJsZXNzQ2FjaGVOYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgc2VydmVybGVzcyBjYWNoZVxuICAgKlxuICAgKiBPbmUgb2YgYHNlcnZlcmxlc3NDYWNoZU5hbWVgIG9yIGBzZXJ2ZXJsZXNzQ2FjaGVBcm5gIGlzIHJlcXVpcmVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGRlcml2ZWQgZnJvbSBzZXJ2ZXJsZXNzQ2FjaGVOYW1lXG4gICAqL1xuICByZWFkb25seSBzZXJ2ZXJsZXNzQ2FjaGVBcm4/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgQVJOcyBvZiBiYWNrdXBzIHJlc3RvcmVkIGluIHRoZSBjYWNoZVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGJhY2t1cHMgYXJlIHVua25vd25cbiAgICovXG4gIHJlYWRvbmx5IGJhY2t1cEFybnNUb1Jlc3RvcmU/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFRoZSBLTVMga2V5IHVzZWQgZm9yIGVuY3J5cHRpb25cbiAgICpcbiAgICogQGRlZmF1bHQgLSBlbmNyeXB0aW9uIGtleSBpcyB1bmtub3duXG4gICAqL1xuICByZWFkb25seSBrbXNLZXk/OiBrbXMuSUtleTtcbiAgLyoqXG4gICAqIFRoZSBWUEMgdGhpcyBjYWNoZSBpcyBkZXBsb3llZCBpblxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFZQQyBpcyB1bmtub3duXG4gICAqL1xuICByZWFkb25seSB2cGM/OiBlYzIuSVZwYztcbiAgLyoqXG4gICAqIFRoZSBzdWJuZXRzIHRoaXMgY2FjaGUgaXMgZGVwbG95ZWQgaW5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBzdWJuZXRzIGFyZSB1bmtub3duXG4gICAqL1xuICByZWFkb25seSBzdWJuZXRzPzogZWMyLklTdWJuZXRbXTtcbiAgLyoqXG4gICAqIFRoZSBzZWN1cml0eSBncm91cHMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY2FjaGVcbiAgICpcbiAgICogQGRlZmF1bHQgLSBzZWN1cml0eSBncm91cHMgYXJlIHVua25vd25cbiAgICovXG4gIHJlYWRvbmx5IHNlY3VyaXR5R3JvdXBzPzogZWMyLklTZWN1cml0eUdyb3VwW107XG4gIC8qKlxuICAgKiBUaGUgdXNlciBncm91cCBhc3NvY2lhdGVkIHdpdGggdGhpcyBjYWNoZVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHVzZXIgZ3JvdXAgaXMgdW5rbm93blxuICAgKi9cbiAgcmVhZG9ubHkgdXNlckdyb3VwPzogSVVzZXJHcm91cDtcbn1cblxuLyoqXG4gKiBBIHNlcnZlcmxlc3MgRWxhc3RpQ2FjaGUgY2FjaGVcbiAqXG4gKiBAcmVzb3VyY2UgQVdTOjpFbGFzdGlDYWNoZTo6U2VydmVybGVzc0NhY2hlXG4gKi9cbkBwcm9wZXJ0eUluamVjdGFibGVcbmV4cG9ydCBjbGFzcyBTZXJ2ZXJsZXNzQ2FjaGUgZXh0ZW5kcyBTZXJ2ZXJsZXNzQ2FjaGVCYXNlIHtcbiAgLyoqXG4gICAqIFVuaXF1ZWx5IGlkZW50aWZpZXMgdGhpcyBjbGFzcy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJPUEVSVFlfSU5KRUNUSU9OX0lEOiBzdHJpbmcgPSAnYXdzLWNkay1saWIuYXdzLWVsYXN0aWNhY2hlLlNlcnZlcmxlc3NDYWNoZSc7XG5cbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIHRoZSBnaXZlbiBvYmplY3QgaXMgYSBgU2VydmVybGVzc0NhY2hlYFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBpc1NlcnZlcmxlc3NDYWNoZSh4OiBhbnkpOiB4IGlzIFNlcnZlcmxlc3NDYWNoZSB7XG4gICAgcmV0dXJuIHggIT09IG51bGwgJiYgdHlwZW9mICh4KSA9PT0gJ29iamVjdCcgJiYgRUxBU1RJQ0FDSEVfU0VSVkVSTEVTU0NBQ0hFX1NZTUJPTCBpbiB4O1xuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyBzZXJ2ZXJsZXNzIGNhY2hlIGJ5IG5hbWVcbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIFRoZSBwYXJlbnQgY3JlYXRpbmcgY29uc3RydWN0ICh1c3VhbGx5IGB0aGlzYClcbiAgICogQHBhcmFtIGlkIFRoZSBjb25zdHJ1Y3QncyBuYW1lXG4gICAqIEBwYXJhbSBzZXJ2ZXJsZXNzQ2FjaGVOYW1lIFRoZSBuYW1lIG9mIHRoZSBleGlzdGluZyBzZXJ2ZXJsZXNzIGNhY2hlXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21TZXJ2ZXJsZXNzQ2FjaGVOYW1lKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHNlcnZlcmxlc3NDYWNoZU5hbWU6IHN0cmluZyk6IElTZXJ2ZXJsZXNzQ2FjaGUge1xuICAgIHJldHVybiBTZXJ2ZXJsZXNzQ2FjaGUuZnJvbVNlcnZlcmxlc3NDYWNoZUF0dHJpYnV0ZXMoc2NvcGUsIGlkLCB7IHNlcnZlcmxlc3NDYWNoZU5hbWUgfSk7XG4gIH1cblxuICAvKipcbiAgICogSW1wb3J0IGFuIGV4aXN0aW5nIHNlcnZlcmxlc3MgY2FjaGUgYnkgQVJOXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSBUaGUgcGFyZW50IGNyZWF0aW5nIGNvbnN0cnVjdCAodXN1YWxseSBgdGhpc2ApXG4gICAqIEBwYXJhbSBpZCBUaGUgY29uc3RydWN0J3MgbmFtZVxuICAgKiBAcGFyYW0gc2VydmVybGVzc0NhY2hlQXJuIFRoZSBBUk4gb2YgdGhlIGV4aXN0aW5nIHNlcnZlcmxlc3MgY2FjaGVcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbVNlcnZlcmxlc3NDYWNoZUFybihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBzZXJ2ZXJsZXNzQ2FjaGVBcm46IHN0cmluZyk6IElTZXJ2ZXJsZXNzQ2FjaGUge1xuICAgIHJldHVybiBTZXJ2ZXJsZXNzQ2FjaGUuZnJvbVNlcnZlcmxlc3NDYWNoZUF0dHJpYnV0ZXMoc2NvcGUsIGlkLCB7IHNlcnZlcmxlc3NDYWNoZUFybiB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gZXhpc3Rpbmcgc2VydmVybGVzcyBjYWNoZSB1c2luZyBhdHRyaWJ1dGVzXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSBUaGUgcGFyZW50IGNyZWF0aW5nIGNvbnN0cnVjdCAodXN1YWxseSBgdGhpc2ApXG4gICAqIEBwYXJhbSBpZCBUaGUgY29uc3RydWN0J3MgbmFtZVxuICAgKiBAcGFyYW0gYXR0cnMgQSBgU2VydmVybGVzc0NhY2hlQXR0cmlidXRlc2Agb2JqZWN0XG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21TZXJ2ZXJsZXNzQ2FjaGVBdHRyaWJ1dGVzKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGF0dHJzOiBTZXJ2ZXJsZXNzQ2FjaGVBdHRyaWJ1dGVzKTogSVNlcnZlcmxlc3NDYWNoZSB7XG4gICAgbGV0IG5hbWU6IHN0cmluZztcbiAgICBsZXQgYXJuOiBzdHJpbmc7XG4gICAgY29uc3Qgc3RhY2sgPSBTdGFjay5vZihzY29wZSk7XG5cbiAgICBpZiAoYXR0cnMuc2VydmVybGVzc0NhY2hlQXJuICYmIGF0dHJzLnNlcnZlcmxlc3NDYWNoZU5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoJ09ubHkgb25lIG9mIHNlcnZlcmxlc3NDYWNoZUFybiBvciBzZXJ2ZXJsZXNzQ2FjaGVOYW1lIGNhbiBiZSBwcm92aWRlZC4nLCBzY29wZSk7XG4gICAgfVxuXG4gICAgaWYgKGF0dHJzLnNlcnZlcmxlc3NDYWNoZUFybikge1xuICAgICAgYXJuID0gYXR0cnMuc2VydmVybGVzc0NhY2hlQXJuO1xuICAgICAgY29uc3QgZXh0cmFjdGVkU2VydmVybGVzc0NhY2hlTmFtZSA9IHN0YWNrLnNwbGl0QXJuKGF0dHJzLnNlcnZlcmxlc3NDYWNoZUFybiwgQXJuRm9ybWF0LlNMQVNIX1JFU09VUkNFX05BTUUpLnJlc291cmNlTmFtZTtcbiAgICAgIGlmICghZXh0cmFjdGVkU2VydmVybGVzc0NhY2hlTmFtZSkge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKCdVbmFibGUgdG8gZXh0cmFjdCBzZXJ2ZXJsZXNzIGNhY2hlIG5hbWUgZnJvbSBBUk4uJywgc2NvcGUpO1xuICAgICAgfVxuICAgICAgbmFtZSA9IGV4dHJhY3RlZFNlcnZlcmxlc3NDYWNoZU5hbWU7XG4gICAgfSBlbHNlIGlmIChhdHRycy5zZXJ2ZXJsZXNzQ2FjaGVOYW1lKSB7XG4gICAgICBuYW1lID0gYXR0cnMuc2VydmVybGVzc0NhY2hlTmFtZTtcbiAgICAgIGFybiA9IHN0YWNrLmZvcm1hdEFybih7XG4gICAgICAgIHNlcnZpY2U6ICdlbGFzdGljYWNoZScsXG4gICAgICAgIHJlc291cmNlOiAnc2VydmVybGVzc2NhY2hlJyxcbiAgICAgICAgcmVzb3VyY2VOYW1lOiBhdHRycy5zZXJ2ZXJsZXNzQ2FjaGVOYW1lLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoJ09uZSBvZiBzZXJ2ZXJsZXNzQ2FjaGVOYW1lIG9yIHNlcnZlcmxlc3NDYWNoZUFybiBpcyByZXF1aXJlZC4nLCBzY29wZSk7XG4gICAgfVxuXG4gICAgY2xhc3MgSW1wb3J0IGV4dGVuZHMgU2VydmVybGVzc0NhY2hlQmFzZSB7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgZW5naW5lID0gYXR0cnMuZW5naW5lO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHNlcnZlcmxlc3NDYWNoZU5hbWU6IHN0cmluZztcbiAgICAgIHB1YmxpYyByZWFkb25seSBzZXJ2ZXJsZXNzQ2FjaGVBcm46IHN0cmluZztcbiAgICAgIHB1YmxpYyByZWFkb25seSBiYWNrdXBBcm5zVG9SZXN0b3JlID0gYXR0cnMuYmFja3VwQXJuc1RvUmVzdG9yZTtcbiAgICAgIHB1YmxpYyByZWFkb25seSBrbXNLZXkgPSBhdHRycy5rbXNLZXk7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgdnBjID0gYXR0cnMudnBjO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHN1Ym5ldHMgPSBhdHRycy5zdWJuZXRzO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHNlY3VyaXR5R3JvdXBzID0gYXR0cnMuc2VjdXJpdHlHcm91cHM7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgdXNlckdyb3VwID0gYXR0cnMudXNlckdyb3VwO1xuXG4gICAgICBwdWJsaWMgcmVhZG9ubHkgY29ubmVjdGlvbnM6IGVjMi5Db25uZWN0aW9ucztcblxuICAgICAgY29uc3RydWN0b3Ioc2VydmVybGVzc0NhY2hlQXJuOiBzdHJpbmcsIHNlcnZlcmxlc3NDYWNoZU5hbWU6IHN0cmluZykge1xuICAgICAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgICAgICB0aGlzLnNlcnZlcmxlc3NDYWNoZUFybiA9IHNlcnZlcmxlc3NDYWNoZUFybjtcbiAgICAgICAgdGhpcy5zZXJ2ZXJsZXNzQ2FjaGVOYW1lID0gc2VydmVybGVzc0NhY2hlTmFtZTtcblxuICAgICAgICBpZiAodGhpcy5lbmdpbmUpIHtcbiAgICAgICAgICBsZXQgZGVmYXVsdFBvcnQ6IGVjMi5Qb3J0O1xuICAgICAgICAgIHN3aXRjaCAodGhpcy5lbmdpbmUpIHtcbiAgICAgICAgICAgIGNhc2UgQ2FjaGVFbmdpbmUuVkFMS0VZX0xBVEVTVDpcbiAgICAgICAgICAgIGNhc2UgQ2FjaGVFbmdpbmUuVkFMS0VZXzc6XG4gICAgICAgICAgICBjYXNlIENhY2hlRW5naW5lLlZBTEtFWV84OlxuICAgICAgICAgICAgY2FzZSBDYWNoZUVuZ2luZS5SRURJU19MQVRFU1Q6XG4gICAgICAgICAgICBjYXNlIENhY2hlRW5naW5lLlJFRElTXzc6XG4gICAgICAgICAgICAgIC8vIERvY3VtZW50IHNob3dpbmcgdGhlIGRlZmF1bHQgcG9ydFxuICAgICAgICAgICAgICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRWxhc3RpQ2FjaGUvbGF0ZXN0L2RnL3NldC11cC5odG1sI2VsYXN0aWNhY2hlLWluc3RhbGwtZ3JhbnQtYWNjZXNzLVZQTlxuICAgICAgICAgICAgICBkZWZhdWx0UG9ydCA9IGVjMi5Qb3J0LnRjcCg2Mzc5KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIENhY2hlRW5naW5lLk1FTUNBQ0hFRF9MQVRFU1Q6XG4gICAgICAgICAgICAgIC8vIERvY3VtZW50IHNob3dpbmcgdGhlIGRlZmF1bHQgcG9ydFxuICAgICAgICAgICAgICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRWxhc3RpQ2FjaGUvbGF0ZXN0L2RnL3NldC11cC5odG1sI2VsYXN0aWNhY2hlLWluc3RhbGwtZ3JhbnQtYWNjZXNzLVZQTlxuICAgICAgICAgICAgICBkZWZhdWx0UG9ydCA9IGVjMi5Qb3J0LnRjcCgxMTIxMSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihgVW5zdXBwb3J0ZWQgY2FjaGUgZW5naW5lOiAke3RoaXMuZW5naW5lfWAsIHNjb3BlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmNvbm5lY3Rpb25zID0gbmV3IGVjMi5Db25uZWN0aW9ucyh7XG4gICAgICAgICAgICBzZWN1cml0eUdyb3VwczogdGhpcy5zZWN1cml0eUdyb3VwcyxcbiAgICAgICAgICAgIGRlZmF1bHRQb3J0OiBkZWZhdWx0UG9ydCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmNvbm5lY3Rpb25zID0gbmV3IGVjMi5Db25uZWN0aW9ucyh7XG4gICAgICAgICAgICBzZWN1cml0eUdyb3VwczogdGhpcy5zZWN1cml0eUdyb3VwcyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgSW1wb3J0KGFybiwgbmFtZSk7XG4gIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgZW5naW5lPzogQ2FjaGVFbmdpbmU7XG4gIHB1YmxpYyByZWFkb25seSBzZXJ2ZXJsZXNzQ2FjaGVOYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBiYWNrdXBBcm5zVG9SZXN0b3JlPzogc3RyaW5nW107XG4gIHB1YmxpYyByZWFkb25seSBrbXNLZXk/OiBrbXMuSUtleTtcbiAgcHVibGljIHJlYWRvbmx5IHZwYz86IGVjMi5JVnBjO1xuICBwdWJsaWMgcmVhZG9ubHkgc3VibmV0cz86IGVjMi5JU3VibmV0W107XG4gIHB1YmxpYyByZWFkb25seSBzZWN1cml0eUdyb3Vwcz86IGVjMi5JU2VjdXJpdHlHcm91cFtdO1xuICBwdWJsaWMgcmVhZG9ubHkgdXNlckdyb3VwPzogSVVzZXJHcm91cDtcblxuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgc2VydmVybGVzcyBjYWNoZVxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc2VydmVybGVzc0NhY2hlQXJuOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgZW5kcG9pbnQgYWRkcmVzcyBvZiB0aGUgc2VydmVybGVzcyBjYWNoZVxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc2VydmVybGVzc0NhY2hlRW5kcG9pbnRBZGRyZXNzOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgZW5kcG9pbnQgcG9ydCBvZiB0aGUgc2VydmVybGVzcyBjYWNoZVxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc2VydmVybGVzc0NhY2hlRW5kcG9pbnRQb3J0OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgcmVhZGVyIGVuZHBvaW50IGFkZHJlc3Mgb2YgdGhlIHNlcnZlcmxlc3MgY2FjaGVcbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHNlcnZlcmxlc3NDYWNoZVJlYWRlckVuZHBvaW50QWRkcmVzczogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHJlYWRlciBlbmRwb2ludCBwb3J0IG9mIHRoZSBzZXJ2ZXJsZXNzIGNhY2hlXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzZXJ2ZXJsZXNzQ2FjaGVSZWFkZXJFbmRwb2ludFBvcnQ6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBjdXJyZW50IHN0YXR1cyBvZiB0aGUgc2VydmVybGVzcyBjYWNoZVxuICAgKiBDYW4gYmUgJ0NSRUFUSU5HJywgJ0FWQUlMQUJMRScsICdERUxFVElORycsICdDUkVBVEUtRkFJTEVEJywgJ01PRElGWUlORydcbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHNlcnZlcmxlc3NDYWNoZVN0YXR1czogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBY2Nlc3MgdG8gbmV0d29yayBjb25uZWN0aW9uc1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNvbm5lY3Rpb25zOiBlYzIuQ29ubmVjdGlvbnM7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFNlcnZlcmxlc3NDYWNoZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7fSk7XG5cbiAgICAvLyBFbmhhbmNlZCBDREsgQW5hbHl0aWNzIFRlbGVtZXRyeVxuICAgIGFkZENvbnN0cnVjdE1ldGFkYXRhKHRoaXMsIHByb3BzKTtcblxuICAgIHRoaXMuZW5naW5lID0gcHJvcHMuZW5naW5lID8/IENhY2hlRW5naW5lLlZBTEtFWV9MQVRFU1Q7XG4gICAgdGhpcy5zZXJ2ZXJsZXNzQ2FjaGVOYW1lID0gcHJvcHMuc2VydmVybGVzc0NhY2hlTmFtZSA/PyBMYXp5LnN0cmluZyh7IHByb2R1Y2U6ICgpID0+IE5hbWVzLnVuaXF1ZUlkKHRoaXMpIH0pO1xuICAgIHRoaXMua21zS2V5ID0gcHJvcHMua21zS2V5O1xuICAgIHRoaXMudnBjID0gcHJvcHMudnBjO1xuICAgIHRoaXMudXNlckdyb3VwID0gcHJvcHMudXNlckdyb3VwO1xuXG4gICAgdGhpcy52YWxpZGF0ZURlc2NyaXB0aW9uKHByb3BzLmRlc2NyaXB0aW9uKTtcbiAgICB0aGlzLnZhbGlkYXRlRGF0YVN0b3JhZ2VMaW1pdHMocHJvcHMuY2FjaGVVc2FnZUxpbWl0cyk7XG4gICAgdGhpcy52YWxpZGF0ZVJlcXVlc3RSYXRlTGltaXRzKHByb3BzLmNhY2hlVXNhZ2VMaW1pdHMpO1xuICAgIHRoaXMudmFsaWRhdGVCYWNrdXBTZXR0aW5ncyhwcm9wcy5iYWNrdXApO1xuICAgIHRoaXMudmFsaWRhdGVVc2VyR3JvdXBDb21wYXRpYmlsaXR5KHRoaXMuZW5naW5lLCB0aGlzLnVzZXJHcm91cCk7XG5cbiAgICBjb25zdCBzdWJuZXRDb25maWcgPSB0aGlzLmNvbmZpZ3VyZVN1Ym5ldHMocHJvcHMpO1xuICAgIGNvbnN0IHN1Ym5ldElkcyA9IHN1Ym5ldENvbmZpZy5zdWJuZXRJZHM7XG4gICAgdGhpcy5zdWJuZXRzID0gc3VibmV0Q29uZmlnLnN1Ym5ldHM7XG5cbiAgICBjb25zdCBzZWN1cml0eUdyb3VwQ29uZmlnID0gdGhpcy5jb25maWd1cmVTZWN1cml0eUdyb3Vwcyhwcm9wcyk7XG4gICAgY29uc3Qgc2VjdXJpdHlHcm91cElkcyA9IHNlY3VyaXR5R3JvdXBDb25maWcuc2VjdXJpdHlHcm91cElkcztcbiAgICB0aGlzLnNlY3VyaXR5R3JvdXBzID0gc2VjdXJpdHlHcm91cENvbmZpZy5zZWN1cml0eUdyb3VwcztcblxuICAgIGNvbnN0IFtlbmdpbmUsIHZlcnNpb25dID0gdGhpcy5lbmdpbmUuc3BsaXQoJ18nKTtcblxuICAgIGNvbnN0IHJlc291cmNlID0gbmV3IENmblNlcnZlcmxlc3NDYWNoZSh0aGlzLCAnUmVzb3VyY2UnLCB7XG4gICAgICBlbmdpbmU6IGVuZ2luZSxcbiAgICAgIG1ham9yRW5naW5lVmVyc2lvbjogdmVyc2lvbixcbiAgICAgIHNlcnZlcmxlc3NDYWNoZU5hbWU6IHRoaXMuc2VydmVybGVzc0NhY2hlTmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBwcm9wcy5kZXNjcmlwdGlvbixcbiAgICAgIGNhY2hlVXNhZ2VMaW1pdHM6IHRoaXMucmVuZGVyQ2FjaGVVc2FnZUxpbWl0cyhwcm9wcy5jYWNoZVVzYWdlTGltaXRzKSxcbiAgICAgIGRhaWx5U25hcHNob3RUaW1lOiBwcm9wcy5iYWNrdXA/LmJhY2t1cFRpbWUgPyB0aGlzLmZvcm1hdEJhY2t1cFRpbWUocHJvcHMuYmFja3VwLmJhY2t1cFRpbWUpIDogdW5kZWZpbmVkLFxuICAgICAgc25hcHNob3RSZXRlbnRpb25MaW1pdDogcHJvcHMuYmFja3VwPy5iYWNrdXBSZXRlbnRpb25MaW1pdCxcbiAgICAgIGZpbmFsU25hcHNob3ROYW1lOiBwcm9wcy5iYWNrdXA/LmJhY2t1cE5hbWVCZWZvcmVEZWxldGlvbixcbiAgICAgIHNuYXBzaG90QXJuc1RvUmVzdG9yZTogcHJvcHMuYmFja3VwPy5iYWNrdXBBcm5zVG9SZXN0b3JlLFxuICAgICAga21zS2V5SWQ6IHByb3BzLmttc0tleT8ua2V5SWQsXG4gICAgICBzdWJuZXRJZHM6IHN1Ym5ldElkcyxcbiAgICAgIHNlY3VyaXR5R3JvdXBJZHM6IHNlY3VyaXR5R3JvdXBJZHMsXG4gICAgICB1c2VyR3JvdXBJZDogcHJvcHMudXNlckdyb3VwPy51c2VyR3JvdXBOYW1lLFxuICAgIH0pO1xuXG4gICAgaWYgKHByb3BzLnVzZXJHcm91cCkge1xuICAgICAgY29uc3QgdXNlckdyb3VwUmVzb3VyY2UgPSBwcm9wcy51c2VyR3JvdXAubm9kZS5maW5kQ2hpbGQoJ1Jlc291cmNlJykgYXMgQ2ZuVXNlckdyb3VwO1xuICAgICAgcmVzb3VyY2UuYWRkRGVwZW5kZW5jeSh1c2VyR3JvdXBSZXNvdXJjZSk7XG4gICAgfVxuXG4gICAgdGhpcy5iYWNrdXBBcm5zVG9SZXN0b3JlID0gcmVzb3VyY2Uuc25hcHNob3RBcm5zVG9SZXN0b3JlO1xuICAgIHRoaXMuc2VydmVybGVzc0NhY2hlQXJuID0gcmVzb3VyY2UuYXR0ckFybjtcbiAgICB0aGlzLnNlcnZlcmxlc3NDYWNoZUVuZHBvaW50QWRkcmVzcyA9IHJlc291cmNlLmF0dHJFbmRwb2ludEFkZHJlc3M7XG4gICAgdGhpcy5zZXJ2ZXJsZXNzQ2FjaGVFbmRwb2ludFBvcnQgPSByZXNvdXJjZS5hdHRyRW5kcG9pbnRQb3J0O1xuICAgIHRoaXMuc2VydmVybGVzc0NhY2hlUmVhZGVyRW5kcG9pbnRBZGRyZXNzID0gcmVzb3VyY2UuYXR0clJlYWRlckVuZHBvaW50QWRkcmVzcztcbiAgICB0aGlzLnNlcnZlcmxlc3NDYWNoZVJlYWRlckVuZHBvaW50UG9ydCA9IHJlc291cmNlLmF0dHJSZWFkZXJFbmRwb2ludFBvcnQ7XG4gICAgdGhpcy5zZXJ2ZXJsZXNzQ2FjaGVTdGF0dXMgPSByZXNvdXJjZS5hdHRyU3RhdHVzO1xuXG4gICAgdGhpcy5jb25uZWN0aW9ucyA9IG5ldyBlYzIuQ29ubmVjdGlvbnMoe1xuICAgICAgc2VjdXJpdHlHcm91cHM6IHRoaXMuc2VjdXJpdHlHcm91cHMsXG4gICAgICBkZWZhdWx0UG9ydDogZWMyLlBvcnQudGNwKExhenkubnVtYmVyKHsgcHJvZHVjZTogKCkgPT4gcGFyc2VJbnQodGhpcy5zZXJ2ZXJsZXNzQ2FjaGVFbmRwb2ludFBvcnQpIH0pKSxcbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBFTEFTVElDQUNIRV9TRVJWRVJMRVNTQ0FDSEVfU1lNQk9MLCB7IHZhbHVlOiB0cnVlIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIGRlc2NyaXB0aW9uIG1lZXRzIEFXUyByZXF1aXJlbWVudHNcbiAgICpcbiAgICogQHBhcmFtIGRlc2NyaXB0aW9uIFRoZSBkZXNjcmlwdGlvbiB0byB2YWxpZGF0ZVxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZURlc2NyaXB0aW9uKGRlc2NyaXB0aW9uPzogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCFkZXNjcmlwdGlvbiB8fCBUb2tlbi5pc1VucmVzb2x2ZWQoZGVzY3JpcHRpb24pKSByZXR1cm47XG5cbiAgICBpZiAoZGVzY3JpcHRpb24ubGVuZ3RoID4gMjU1KSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGBEZXNjcmlwdGlvbiBtdXN0IG5vdCBleGNlZWQgMjU1IGNoYXJhY3RlcnMsIGN1cnJlbnRseSBoYXMgJHtkZXNjcmlwdGlvbi5sZW5ndGh9YCwgdGhpcyk7XG4gICAgfVxuXG4gICAgaWYgKGRlc2NyaXB0aW9uLmluY2x1ZGVzKCc8JykgfHwgZGVzY3JpcHRpb24uaW5jbHVkZXMoJz4nKSkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcignRGVzY3JpcHRpb24gbXVzdCBub3QgY29udGFpbiA8IG9yID4gY2hhcmFjdGVycycsIHRoaXMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBkYXRhIHN0b3JhZ2Ugc2l6ZSBsaW1pdHNcbiAgICpcbiAgICogQHBhcmFtIGxpbWl0cyBUaGUgdXNhZ2UgbGltaXRzIGNvbnRhaW5pbmcgZGF0YSBzdG9yYWdlIHNldHRpbmdzXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlRGF0YVN0b3JhZ2VMaW1pdHMobGltaXRzPzogQ2FjaGVVc2FnZUxpbWl0c1Byb3BlcnR5KTogdm9pZCB7XG4gICAgaWYgKCFsaW1pdHMpIHJldHVybjtcblxuICAgIGlmIChsaW1pdHMuZGF0YVN0b3JhZ2VNaW5pbXVtU2l6ZSAmJiAhbGltaXRzLmRhdGFTdG9yYWdlTWluaW11bVNpemUuaXNVbnJlc29sdmVkKCkgJiZcbiAgICAgIChsaW1pdHMuZGF0YVN0b3JhZ2VNaW5pbXVtU2l6ZS50b0dpYmlieXRlcygpIDwgREFUQV9TVE9SQUdFX01JTl9HQiB8fCBsaW1pdHMuZGF0YVN0b3JhZ2VNaW5pbXVtU2l6ZS50b0dpYmlieXRlcygpID4gREFUQV9TVE9SQUdFX01BWF9HQikpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoJ0RhdGEgc3RvcmFnZSBtaW5pbXVtIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA1MDAwIEdCLicsIHRoaXMpO1xuICAgIH1cbiAgICBpZiAobGltaXRzLmRhdGFTdG9yYWdlTWF4aW11bVNpemUgJiYgIWxpbWl0cy5kYXRhU3RvcmFnZU1heGltdW1TaXplLmlzVW5yZXNvbHZlZCgpICYmXG4gICAgICAobGltaXRzLmRhdGFTdG9yYWdlTWF4aW11bVNpemUudG9HaWJpYnl0ZXMoKSA8IERBVEFfU1RPUkFHRV9NSU5fR0IgfHwgbGltaXRzLmRhdGFTdG9yYWdlTWF4aW11bVNpemUudG9HaWJpYnl0ZXMoKSA+IERBVEFfU1RPUkFHRV9NQVhfR0IpKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKCdEYXRhIHN0b3JhZ2UgbWF4aW11bSBtdXN0IGJlIGJldHdlZW4gMSBhbmQgNTAwMCBHQi4nLCB0aGlzKTtcbiAgICB9XG5cbiAgICBpZiAobGltaXRzLmRhdGFTdG9yYWdlTWluaW11bVNpemUgJiYgbGltaXRzLmRhdGFTdG9yYWdlTWF4aW11bVNpemUgJiZcbiAgICAgICFsaW1pdHMuZGF0YVN0b3JhZ2VNaW5pbXVtU2l6ZS5pc1VucmVzb2x2ZWQoKSAmJiAhbGltaXRzLmRhdGFTdG9yYWdlTWF4aW11bVNpemUuaXNVbnJlc29sdmVkKCkgJiZcbiAgICAgIGxpbWl0cy5kYXRhU3RvcmFnZU1pbmltdW1TaXplLnRvR2liaWJ5dGVzKCkgPiBsaW1pdHMuZGF0YVN0b3JhZ2VNYXhpbXVtU2l6ZS50b0dpYmlieXRlcygpKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKCdEYXRhIHN0b3JhZ2UgbWluaW11bSBjYW5ub3QgYmUgZ3JlYXRlciB0aGFuIG1heGltdW0nLCB0aGlzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgcmVxdWVzdCByYXRlIGxpbWl0c1xuICAgKlxuICAgKiBAcGFyYW0gbGltaXRzIFRoZSB1c2FnZSBsaW1pdHMgY29udGFpbmluZyByZXF1ZXN0IHJhdGUgc2V0dGluZ3NcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVSZXF1ZXN0UmF0ZUxpbWl0cyhsaW1pdHM/OiBDYWNoZVVzYWdlTGltaXRzUHJvcGVydHkpOiB2b2lkIHtcbiAgICBpZiAoIWxpbWl0cykgcmV0dXJuO1xuXG4gICAgaWYgKGxpbWl0cy5yZXF1ZXN0UmF0ZUxpbWl0TWluaW11bSAhPT0gdW5kZWZpbmVkICYmICFUb2tlbi5pc1VucmVzb2x2ZWQobGltaXRzLnJlcXVlc3RSYXRlTGltaXRNaW5pbXVtKSAmJlxuICAgICAgKGxpbWl0cy5yZXF1ZXN0UmF0ZUxpbWl0TWluaW11bSA8IFJFUVVFU1RfUkFURV9NSU5fRUNQVSB8fCBsaW1pdHMucmVxdWVzdFJhdGVMaW1pdE1pbmltdW0gPiBSRVFVRVNUX1JBVEVfTUFYX0VDUFUpKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKCdSZXF1ZXN0IHJhdGUgbWluaW11bSBtdXN0IGJlIGJldHdlZW4gMSwwMDAgYW5kIDE1LDAwMCwwMDAgRUNQVXMgcGVyIHNlY29uZCcsIHRoaXMpO1xuICAgIH1cbiAgICBpZiAobGltaXRzLnJlcXVlc3RSYXRlTGltaXRNYXhpbXVtICE9PSB1bmRlZmluZWQgJiYgIVRva2VuLmlzVW5yZXNvbHZlZChsaW1pdHMucmVxdWVzdFJhdGVMaW1pdE1heGltdW0pICYmXG4gICAgICAobGltaXRzLnJlcXVlc3RSYXRlTGltaXRNYXhpbXVtIDwgUkVRVUVTVF9SQVRFX01JTl9FQ1BVIHx8IGxpbWl0cy5yZXF1ZXN0UmF0ZUxpbWl0TWF4aW11bSA+IFJFUVVFU1RfUkFURV9NQVhfRUNQVSkpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoJ1JlcXVlc3QgcmF0ZSBtYXhpbXVtIG11c3QgYmUgYmV0d2VlbiAxLDAwMCBhbmQgMTUsMDAwLDAwMCBFQ1BVcyBwZXIgc2Vjb25kJywgdGhpcyk7XG4gICAgfVxuXG4gICAgaWYgKCFUb2tlbi5pc1VucmVzb2x2ZWQobGltaXRzLnJlcXVlc3RSYXRlTGltaXRNaW5pbXVtKSAmJiAhVG9rZW4uaXNVbnJlc29sdmVkKGxpbWl0cy5yZXF1ZXN0UmF0ZUxpbWl0TWF4aW11bSkgJiZcbiAgICAgIGxpbWl0cy5yZXF1ZXN0UmF0ZUxpbWl0TWluaW11bSAhPT0gdW5kZWZpbmVkICYmIGxpbWl0cy5yZXF1ZXN0UmF0ZUxpbWl0TWF4aW11bSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBsaW1pdHMucmVxdWVzdFJhdGVMaW1pdE1pbmltdW0gPiBsaW1pdHMucmVxdWVzdFJhdGVMaW1pdE1heGltdW0pIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoJ1JlcXVlc3QgcmF0ZSBtaW5pbXVtIGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gbWF4aW11bScsIHRoaXMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBiYWNrdXAgc2V0dGluZ3MgbWVldCBBV1MgcmVxdWlyZW1lbnRzXG4gICAqXG4gICAqIEBwYXJhbSBiYWNrdXAgVGhlIGJhY2t1cCBzZXR0aW5ncyB0byB2YWxpZGF0ZVxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZUJhY2t1cFNldHRpbmdzKGJhY2t1cD86IEJhY2t1cFNldHRpbmdzKTogdm9pZCB7XG4gICAgaWYgKCFUb2tlbi5pc1VucmVzb2x2ZWQoYmFja3VwPy5iYWNrdXBSZXRlbnRpb25MaW1pdCkgJiYgYmFja3VwPy5iYWNrdXBSZXRlbnRpb25MaW1pdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBsaW1pdCA9IGJhY2t1cC5iYWNrdXBSZXRlbnRpb25MaW1pdDtcbiAgICAgIGlmIChsaW1pdCA8IDEgfHwgbGltaXQgPiAzNSkge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKCdCYWNrdXAgcmV0ZW50aW9uIGxpbWl0IG11c3QgYmUgYmV0d2VlbiAxIGFuZCAzNSBkYXlzJywgdGhpcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFUb2tlbi5pc1VucmVzb2x2ZWQoYmFja3VwPy5iYWNrdXBOYW1lQmVmb3JlRGVsZXRpb24pICYmIGJhY2t1cD8uYmFja3VwTmFtZUJlZm9yZURlbGV0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IG5hbWUgPSBiYWNrdXAuYmFja3VwTmFtZUJlZm9yZURlbGV0aW9uO1xuXG4gICAgICBpZiAoIS9eW2EtekEtWl0vLnRlc3QobmFtZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcignRmluYWwgYmFja3VwIG5hbWUgbXVzdCBiZWdpbiB3aXRoIGEgbGV0dGVyJywgdGhpcyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghL15bYS16QS1aMC05LV0rJC8udGVzdChuYW1lKSkge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKCdGaW5hbCBiYWNrdXAgbmFtZSBtdXN0IGNvbnRhaW4gb25seSBBU0NJSSBsZXR0ZXJzLCBkaWdpdHMsIGFuZCBoeXBoZW5zJywgdGhpcyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChuYW1lLmVuZHNXaXRoKCctJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcignRmluYWwgYmFja3VwIG5hbWUgbXVzdCBub3QgZW5kIHdpdGggYSBoeXBoZW4nLCB0aGlzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5hbWUuaW5jbHVkZXMoJy0tJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcignRmluYWwgYmFja3VwIG5hbWUgbXVzdCBub3QgY29udGFpbiB0d28gY29uc2VjdXRpdmUgaHlwaGVucycsIHRoaXMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB1c2VyIGdyb3VwIGNvbXBhdGliaWxpdHkgd2l0aCBjYWNoZSBlbmdpbmVcbiAgICpcbiAgICogQHBhcmFtIGVuZ2luZSBUaGUgY2FjaGUgZW5naW5lXG4gICAqIEBwYXJhbSB1c2VyR3JvdXAgVGhlIHVzZXIgZ3JvdXAgdG8gdmFsaWRhdGVcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVVc2VyR3JvdXBDb21wYXRpYmlsaXR5KGVuZ2luZTogQ2FjaGVFbmdpbmUsIHVzZXJHcm91cD86IElVc2VyR3JvdXApOiB2b2lkIHtcbiAgICBpZiAoIXVzZXJHcm91cCkgcmV0dXJuO1xuXG4gICAgaWYgKGVuZ2luZSA9PT0gQ2FjaGVFbmdpbmUuTUVNQ0FDSEVEX0xBVEVTVCkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcignVXNlciBncm91cHMgY2Fubm90IGJlIHVzZWQgd2l0aCBNZW1jYWNoZWQgZW5naW5lcy4gT25seSBSZWRpcyBhbmQgVmFsa2V5IGVuZ2luZXMgc3VwcG9ydCB1c2VyIGdyb3Vwcy4nLCB0aGlzKTtcbiAgICB9XG5cbiAgICBpZiAoZW5naW5lID09PSBDYWNoZUVuZ2luZS5SRURJU19MQVRFU1QgJiYgdXNlckdyb3VwLmVuZ2luZSAhPT0gVXNlckVuZ2luZS5SRURJUykge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcignUmVkaXMgY2FjaGUgY2FuIG9ubHkgdXNlIFJlZGlzIHVzZXIgZ3JvdXBzLicsIHRoaXMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXIgY2FjaGUgdXNhZ2UgbGltaXRzIGZvciBDbG91ZEZvcm1hdGlvblxuICAgKlxuICAgKiBAcGFyYW0gbGltaXRzIFRoZSB1c2FnZSBsaW1pdHMgdG8gcmVuZGVyXG4gICAqIEByZXR1cm5zIENsb3VkRm9ybWF0aW9uLWNvbXBhdGlibGUgdXNhZ2UgbGltaXRzIG9iamVjdCBvciB1bmRlZmluZWRcbiAgICovXG4gIHByaXZhdGUgcmVuZGVyQ2FjaGVVc2FnZUxpbWl0cyhsaW1pdHM/OiBDYWNoZVVzYWdlTGltaXRzUHJvcGVydHkpOiBhbnkge1xuICAgIGlmICghbGltaXRzKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgY2FjaGVVc2FnZUxpbWl0czogYW55ID0ge307XG5cbiAgICBpZiAobGltaXRzLmRhdGFTdG9yYWdlTWluaW11bVNpemUgIT09IHVuZGVmaW5lZCB8fCBsaW1pdHMuZGF0YVN0b3JhZ2VNYXhpbXVtU2l6ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjYWNoZVVzYWdlTGltaXRzLmRhdGFTdG9yYWdlID0ge1xuICAgICAgICB1bml0OiBEYXRhU3RvcmFnZVVuaXQuR0lHQUJZVEVTLFxuICAgICAgICAuLi4obGltaXRzLmRhdGFTdG9yYWdlTWluaW11bVNpemUgIT09IHVuZGVmaW5lZCAmJiB7IG1pbmltdW06IGxpbWl0cy5kYXRhU3RvcmFnZU1pbmltdW1TaXplLnRvR2liaWJ5dGVzKCkgfSksXG4gICAgICAgIC4uLihsaW1pdHMuZGF0YVN0b3JhZ2VNYXhpbXVtU2l6ZSAhPT0gdW5kZWZpbmVkICYmIHsgbWF4aW11bTogbGltaXRzLmRhdGFTdG9yYWdlTWF4aW11bVNpemUudG9HaWJpYnl0ZXMoKSB9KSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKGxpbWl0cy5yZXF1ZXN0UmF0ZUxpbWl0TWluaW11bSAhPT0gdW5kZWZpbmVkIHx8IGxpbWl0cy5yZXF1ZXN0UmF0ZUxpbWl0TWF4aW11bSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjYWNoZVVzYWdlTGltaXRzLmVjcHVQZXJTZWNvbmQgPSB7XG4gICAgICAgIC4uLihsaW1pdHMucmVxdWVzdFJhdGVMaW1pdE1pbmltdW0gIT09IHVuZGVmaW5lZCAmJiB7IG1pbmltdW06IGxpbWl0cy5yZXF1ZXN0UmF0ZUxpbWl0TWluaW11bSB9KSxcbiAgICAgICAgLi4uKGxpbWl0cy5yZXF1ZXN0UmF0ZUxpbWl0TWF4aW11bSAhPT0gdW5kZWZpbmVkICYmIHsgbWF4aW11bTogbGltaXRzLnJlcXVlc3RSYXRlTGltaXRNYXhpbXVtIH0pLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gT2JqZWN0LmtleXMoY2FjaGVVc2FnZUxpbWl0cykubGVuZ3RoID4gMCA/IGNhY2hlVXNhZ2VMaW1pdHMgOiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogQ29uZmlndXJlIHN1Ym5ldHMgZm9yIHRoZSBjYWNoZVxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgVGhlIFNlcnZlcmxlc3NDYWNoZSBwcm9wZXJ0aWVzXG4gICAqIEByZXR1cm5zIE9iamVjdCBjb250YWluaW5nIHN1Ym5ldCBJRHMgYW5kIHN1Ym5ldCBvYmplY3RzXG4gICAqL1xuICBwcml2YXRlIGNvbmZpZ3VyZVN1Ym5ldHMocHJvcHM6IFNlcnZlcmxlc3NDYWNoZVByb3BzKTogeyBzdWJuZXRJZHM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkOyBzdWJuZXRzOiBlYzIuSVN1Ym5ldFtdIHwgdW5kZWZpbmVkIH0ge1xuICAgIGxldCBzZWxlY3RlZFN1Ym5ldHM7XG4gICAgaWYgKHByb3BzLnZwY1N1Ym5ldHMpIHtcbiAgICAgIHNlbGVjdGVkU3VibmV0cyA9IHByb3BzLnZwYy5zZWxlY3RTdWJuZXRzKHByb3BzLnZwY1N1Ym5ldHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZWxlY3RlZFN1Ym5ldHMgPSBwcm9wcy52cGMuc2VsZWN0U3VibmV0cyh7XG4gICAgICAgIHN1Ym5ldFR5cGU6IGVjMi5TdWJuZXRUeXBlLlBSSVZBVEVfV0lUSF9FR1JFU1MsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgc3VibmV0SWRzOiBzZWxlY3RlZFN1Ym5ldHMuc3VibmV0SWRzLmxlbmd0aCA+IDAgPyBzZWxlY3RlZFN1Ym5ldHMuc3VibmV0SWRzIDogdW5kZWZpbmVkLFxuICAgICAgc3VibmV0czogc2VsZWN0ZWRTdWJuZXRzLnN1Ym5ldHMubGVuZ3RoID4gMCA/IHNlbGVjdGVkU3VibmV0cy5zdWJuZXRzIDogdW5kZWZpbmVkLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ29uZmlndXJlIHNlY3VyaXR5IGdyb3VwcyBmb3IgdGhlIGNhY2hlXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBUaGUgU2VydmVybGVzc0NhY2hlIHByb3BlcnRpZXNcbiAgICogQHJldHVybnMgT2JqZWN0IGNvbnRhaW5pbmcgc2VjdXJpdHkgZ3JvdXAgSURzIGFuZCBzZWN1cml0eSBncm91cCBvYmplY3RzXG4gICAqL1xuICBwcml2YXRlIGNvbmZpZ3VyZVNlY3VyaXR5R3JvdXBzKHByb3BzOiBTZXJ2ZXJsZXNzQ2FjaGVQcm9wcyk6IHsgc2VjdXJpdHlHcm91cElkczogc3RyaW5nW107IHNlY3VyaXR5R3JvdXBzOiBlYzIuSVNlY3VyaXR5R3JvdXBbXSB9IHtcbiAgICBpZiAocHJvcHMuc2VjdXJpdHlHcm91cHMgJiYgcHJvcHMuc2VjdXJpdHlHcm91cHMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2VjdXJpdHlHcm91cElkczogcHJvcHMuc2VjdXJpdHlHcm91cHMubWFwKHNnID0+IHNnLnNlY3VyaXR5R3JvdXBJZCksXG4gICAgICAgIHNlY3VyaXR5R3JvdXBzOiBwcm9wcy5zZWN1cml0eUdyb3VwcyxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG5ld1NlY3VyaXR5R3JvdXAgPSBuZXcgZWMyLlNlY3VyaXR5R3JvdXAodGhpcywgJ1NlY3VyaXR5R3JvdXAnLCB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiBgU2VjdXJpdHkgZ3JvdXAgZm9yICR7dGhpcy5ub2RlLmlkfSBjYWNoZS5gLFxuICAgICAgICB2cGM6IHByb3BzLnZwYyxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2VjdXJpdHlHcm91cElkczogW25ld1NlY3VyaXR5R3JvdXAuc2VjdXJpdHlHcm91cElkXSxcbiAgICAgICAgc2VjdXJpdHlHcm91cHM6IFtuZXdTZWN1cml0eUdyb3VwXSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdCBzY2hlZHVsZSB0byBISDpNTSBmb3JtYXQgZm9yIGRhaWx5IGJhY2t1cHNcbiAgICpcbiAgICogQHBhcmFtIHNjaGVkdWxlIFRoZSBzY2hlZHVsZSB0byBmb3JtYXRcbiAgICogQHJldHVybnMgVGltZSBzdHJpbmcgaW4gSEg6TU0gZm9ybWF0XG4gICAqL1xuICBwcml2YXRlIGZvcm1hdEJhY2t1cFRpbWUoc2NoZWR1bGU6IGV2ZW50cy5TY2hlZHVsZSk6IHN0cmluZyB7XG4gICAgY29uc3QgV0lMRF9DQVJEID0gJyonO1xuICAgIGNvbnN0IFtcbiAgICAgIG1pbnV0ZUV4cHJlc3Npb24sIGhvdXJFeHByZXNzaW9uLFxuICAgICAgZGF5RXhwcmVzc2lvbiwgbW9udGhFeHByZXNzaW9uLFxuICAgICAgd2Vla0RheUV4cHJlc3Npb24sIHllYXJFeHByZXNzaW9uLFxuICAgIF0gPSBzY2hlZHVsZS5leHByZXNzaW9uU3RyaW5nLnN1YnN0cig1KS5zbGljZSgwLCAtMSkuc3BsaXQoJyAnKTtcblxuICAgIGlmIChkYXlFeHByZXNzaW9uICE9IFdJTERfQ0FSRCB8fCBtb250aEV4cHJlc3Npb24gIT0gV0lMRF9DQVJEIHx8IHllYXJFeHByZXNzaW9uICE9IFdJTERfQ0FSRCB8fCB3ZWVrRGF5RXhwcmVzc2lvbiAhPSAnPycpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoJ0ZvciBub3csIG9ubHkgZGFpbHkgYmFja3VwIHRpbWUgaXMgYXZhaWxhYmxlIChzdXBwb3J0cyBqdXN0IGhvdXIgYW5kIG1pbnV0ZSkuIERheSwgbW9udGgsIHllYXIsIGFuZCB3ZWVrRGF5IGFyZSBub3QgYWxsb3dlZCcsIHRoaXMpO1xuICAgIH1cblxuICAgIGNvbnN0IGhvdXIgPSBob3VyRXhwcmVzc2lvbiA9PSBXSUxEX0NBUkQgPyAnMCcgOiBob3VyRXhwcmVzc2lvbjtcbiAgICBjb25zdCBtaW51dGUgPSBtaW51dGVFeHByZXNzaW9uID09IFdJTERfQ0FSRCA/ICcwJyA6IG1pbnV0ZUV4cHJlc3Npb247XG5cbiAgICByZXR1cm4gYCR7aG91ci5wYWRTdGFydCgyLCAnMCcpfToke21pbnV0ZS5wYWRTdGFydCgyLCAnMCcpfWA7XG4gIH1cbn1cbiJdfQ==
|
|
524
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVybGVzcy1jYWNoZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNlcnZlcmxlc3MtY2FjaGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsMkNBQTJDO0FBQzNDLGlFQUErRTtBQUcvRSwyQ0FBK0Y7QUFDL0YsOEVBQThFO0FBQzlFLDBFQUEwRTtBQUUxRSxxQ0FBc0M7QUFDdEMsbUVBQTZGO0FBRzdGLE1BQU0sa0NBQWtDLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO0FBRWxHOztHQUVHO0FBQ0gsSUFBSyxlQUtKO0FBTEQsV0FBSyxlQUFlO0lBQ2xCOztPQUVHO0lBQ0gsbUNBQWdCLENBQUE7QUFDbEIsQ0FBQyxFQUxJLGVBQWUsS0FBZixlQUFlLFFBS25CO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLG1CQUFtQixHQUFHLENBQUMsQ0FBQztBQUM5Qjs7R0FFRztBQUNILE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDO0FBQ2pDOztHQUVHO0FBQ0gsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLENBQUM7QUFDbkM7O0dBRUc7QUFDSCxNQUFNLHFCQUFxQixHQUFHLFFBQVEsQ0FBQztBQWdNdkM7Ozs7R0FJRztJQUVVLGVBQWU7NEJBRDNCLG9DQUFrQjs7OztzQkFDa0IsMkNBQW1COytCQUEzQixTQUFRLFdBQW1COzs7O1lBQXhELDZLQXljQzs7Ozs7UUF4Y0M7O1dBRUc7UUFDSSxNQUFNLENBQVUscUJBQXFCLEdBQVcsNkNBQTZDLENBQUM7UUFFckc7O1dBRUc7UUFDSSxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBTTtZQUNwQyxPQUFPLENBQUMsS0FBSyxJQUFJLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsSUFBSSxrQ0FBa0MsSUFBSSxDQUFDLENBQUM7U0FDekY7UUFFRDs7Ozs7O1dBTUc7UUFDSSxNQUFNLENBQUMs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QUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztTQUM5RDs7WUF4Y1UsdURBQWU7Ozs7O0FBQWYsMENBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBlYzIgZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjMic7XG5pbXBvcnQgeyBDZm5TZXJ2ZXJsZXNzQ2FjaGUsIENmblVzZXJHcm91cCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1lbGFzdGljYWNoZSc7XG5pbXBvcnQgKiBhcyBldmVudHMgZnJvbSAnYXdzLWNkay1saWIvYXdzLWV2ZW50cyc7XG5pbXBvcnQgKiBhcyBrbXMgZnJvbSAnYXdzLWNkay1saWIvYXdzLWttcyc7XG5pbXBvcnQgeyBBcm5Gb3JtYXQsIFN0YWNrLCBTaXplLCBMYXp5LCBWYWxpZGF0aW9uRXJyb3IsIE5hbWVzLCBUb2tlbiB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUnO1xuaW1wb3J0IHsgYWRkQ29uc3RydWN0TWV0YWRhdGEgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9tZXRhZGF0YS1yZXNvdXJjZSc7XG5pbXBvcnQgeyBwcm9wZXJ0eUluamVjdGFibGUgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9wcm9wLWluamVjdGFibGUnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBVc2VyRW5naW5lIH0gZnJvbSAnLi9jb21tb24nO1xuaW1wb3J0IHsgSVNlcnZlcmxlc3NDYWNoZSwgU2VydmVybGVzc0NhY2hlQmFzZSwgQ2FjaGVFbmdpbmUgfSBmcm9tICcuL3NlcnZlcmxlc3MtY2FjaGUtYmFzZSc7XG5pbXBvcnQgeyBJVXNlckdyb3VwIH0gZnJvbSAnLi91c2VyLWdyb3VwJztcblxuY29uc3QgRUxBU1RJQ0FDSEVfU0VSVkVSTEVTU0NBQ0hFX1NZTUJPTCA9IFN5bWJvbC5mb3IoJ0Bhd3MtY2RrL2F3cy1lbGFzdGljYWNoZS5TZXJ2ZXJsZXNzQ2FjaGUnKTtcblxuLyoqXG4gKiBVbml0IHR5cGVzIGZvciBkYXRhIHN0b3JhZ2UgdXNhZ2UgbGltaXRzXG4gKi9cbmVudW0gRGF0YVN0b3JhZ2VVbml0IHtcbiAgLyoqXG4gICAqIEdpZ2FieXRlc1xuICAgKi9cbiAgR0lHQUJZVEVTID0gJ0dCJyxcbn1cblxuLyoqXG4gKiBNaW5pbXVtIGRhdGEgc3RvcmFnZSBzaXplIGluIEdCIGZvciBTZXJ2ZXJsZXNzQ2FjaGVcbiAqL1xuY29uc3QgREFUQV9TVE9SQUdFX01JTl9HQiA9IDE7XG4vKipcbiAqIE1heGltdW0gZGF0YSBzdG9yYWdlIHNpemUgaW4gR0IgZm9yIFNlcnZlcmxlc3NDYWNoZVxuICovXG5jb25zdCBEQVRBX1NUT1JBR0VfTUFYX0dCID0gNTAwMDtcbi8qKlxuICogTWluaW11bSByZXF1ZXN0IHJhdGUgbGltaXQgaW4gRUNQVXMgcGVyIHNlY29uZCBmb3IgU2VydmVybGVzc0NhY2hlXG4gKi9cbmNvbnN0IFJFUVVFU1RfUkFURV9NSU5fRUNQVSA9IDEwMDA7XG4vKipcbiAqIE1heGltdW0gcmVxdWVzdCByYXRlIGxpbWl0IGluIEVDUFVzIHBlciBzZWNvbmQgZm9yIFNlcnZlcmxlc3NDYWNoZVxuICovXG5jb25zdCBSRVFVRVNUX1JBVEVfTUFYX0VDUFUgPSAxNTAwMDAwMDtcblxuLyoqXG4gKiBVc2FnZSBsaW1pdHMgY29uZmlndXJhdGlvbiBmb3IgU2VydmVybGVzc0NhY2hlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2FjaGVVc2FnZUxpbWl0c1Byb3BlcnR5IHtcbiAgLyoqXG4gICAqIE1pbmltdW0gZGF0YSBzdG9yYWdlIHNpemUgKDEgR0IpXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gbWluaW11bSBsaW1pdFxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YVN0b3JhZ2VNaW5pbXVtU2l6ZT86IFNpemU7XG4gIC8qKlxuICAgKiBNYXhpbXVtIGRhdGEgc3RvcmFnZSBzaXplICg1MDAwIEdCKVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIG1heGltdW0gbGltaXRcbiAgICovXG4gIHJlYWRvbmx5IGRhdGFTdG9yYWdlTWF4aW11bVNpemU/OiBTaXplO1xuICAvKipcbiAgICogTWluaW11bSByZXF1ZXN0IHJhdGUgbGltaXQgKDEwMDAgRUNQVXMgcGVyIHNlY29uZClcbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBtaW5pbXVtIGxpbWl0XG4gICAqL1xuICByZWFkb25seSByZXF1ZXN0UmF0ZUxpbWl0TWluaW11bT86IG51bWJlcjtcbiAgLyoqXG4gICAqIE1heGltdW0gcmVxdWVzdCByYXRlIGxpbWl0ICgxNTAwMDAwMCBFQ1BVcyBwZXIgc2Vjb25kKVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIG1heGltdW0gbGltaXRcbiAgICovXG4gIHJlYWRvbmx5IHJlcXVlc3RSYXRlTGltaXRNYXhpbXVtPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEJhY2t1cCBjb25maWd1cmF0aW9uIGZvciBTZXJ2ZXJsZXNzQ2FjaGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCYWNrdXBTZXR0aW5ncyB7XG4gIC8qKlxuICAgKiBBdXRvbWF0ZWQgZGFpbHkgYmFja3VwIFVUQyB0aW1lXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gYXV0b21hdGVkIGJhY2t1cHNcbiAgICovXG4gIHJlYWRvbmx5IGJhY2t1cFRpbWU/OiBldmVudHMuU2NoZWR1bGU7XG4gIC8qKlxuICAgKiBOdW1iZXIgb2YgZGF5cyB0byByZXRhaW4gYmFja3VwcyAoMS0zNSlcbiAgICpcbiAgICogQGRlZmF1bHQgLSBCYWNrdXBzIGFyZSBub3QgcmV0YWluZWRcbiAgICovXG4gIHJlYWRvbmx5IGJhY2t1cFJldGVudGlvbkxpbWl0PzogbnVtYmVyO1xuICAvKipcbiAgICogTmFtZSBmb3IgdGhlIGZpbmFsIGJhY2t1cCB0YWtlbiBiZWZvcmUgZGVsZXRpb25cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBmaW5hbCBiYWNrdXBcbiAgICovXG4gIHJlYWRvbmx5IGJhY2t1cE5hbWVCZWZvcmVEZWxldGlvbj86IHN0cmluZztcbiAgLyoqXG4gICAqIEFSTnMgb2YgYmFja3VwcyBmcm9tIHdoaWNoIHRvIHJlc3RvcmUgZGF0YSBpbnRvIHRoZSBuZXcgY2FjaGVcbiAgICpcbiAgICogQGRlZmF1bHQgLSBDcmVhdGUgYSBuZXcgY2FjaGUgd2l0aCBubyBleGlzdGluZyBkYXRhXG4gICAqL1xuICByZWFkb25seSBiYWNrdXBBcm5zVG9SZXN0b3JlPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgZGVmaW5pbmcgYSBTZXJ2ZXJsZXNzQ2FjaGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJ2ZXJsZXNzQ2FjaGVQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgY2FjaGUgZW5naW5lIGNvbWJpbmVkIHdpdGggdGhlIHZlcnNpb25cbiAgICogRW51bSBvcHRpb25zOiBWQUxLRVlfREVGQVVMVCwgVkFMS0VZXzcsIFZBTEtFWV84LCBSRURJU19ERUZBVUxULCBNRU1DQUNIRURfREVGQVVMVFxuICAgKiBUaGUgZGVmYXVsdCBvcHRpb25zIGJyaW5nIHRoZSBsYXRlc3QgdmVyc2lvbnMgYXZhaWxhYmxlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB3aGVuIG5vdCBwcm92aWRlZCwgdGhlIGRlZmF1bHQgZW5naW5lIHdvdWxkIGJlIFZhbGtleSwgbGF0ZXN0IHZlcnNpb24gYXZhaWxhYmxlIChWQUxLRVlfREVGQVVMVClcbiAgICovXG4gIHJlYWRvbmx5IGVuZ2luZT86IENhY2hlRW5naW5lO1xuICAvKipcbiAgICogTmFtZSBmb3IgdGhlIHNlcnZlcmxlc3MgY2FjaGVcbiAgICpcbiAgICogQGRlZmF1bHQgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbmFtZSBieSBSZXNvdXJjZVxuICAgKi9cbiAgcmVhZG9ubHkgc2VydmVybGVzc0NhY2hlTmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIEEgZGVzY3JpcHRpb24gZm9yIHRoZSBjYWNoZVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIGRlc2NyaXB0aW9uXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqXG4gICAqIFVzYWdlIGxpbWl0cyBmb3IgdGhlIGNhY2hlXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gdXNhZ2UgbGltaXRzXG4gICAqL1xuICByZWFkb25seSBjYWNoZVVzYWdlTGltaXRzPzogQ2FjaGVVc2FnZUxpbWl0c1Byb3BlcnR5O1xuICAvKipcbiAgICogQmFja3VwIGNvbmZpZ3VyYXRpb25cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBiYWNrdXBzIGNvbmZpZ3VyZWRcbiAgICovXG4gIHJlYWRvbmx5IGJhY2t1cD86IEJhY2t1cFNldHRpbmdzO1xuICAvKipcbiAgICogS01TIGtleSBmb3IgZW5jcnlwdGlvblxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFNlcnZpY2UgbWFuYWdlZCBlbmNyeXB0aW9uIChBV1Mgb3duZWQgS01TIGtleSlcbiAgICovXG4gIHJlYWRvbmx5IGttc0tleT86IGttcy5JS2V5O1xuICAvKipcbiAgICogVGhlIFZQQyB0byBwbGFjZSB0aGUgY2FjaGUgaW5cbiAgICovXG4gIHJlYWRvbmx5IHZwYzogZWMyLklWcGM7XG4gIC8qKlxuICAgKiBXaGljaCBzdWJuZXRzIHRvIHBsYWNlIHRoZSBjYWNoZSBpblxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFByaXZhdGUgc3VibmV0cyB3aXRoIGVncmVzc1xuICAgKi9cbiAgcmVhZG9ubHkgdnBjU3VibmV0cz86IGVjMi5TdWJuZXRTZWxlY3Rpb247XG4gIC8qKlxuICAgKiBTZWN1cml0eSBncm91cHMgZm9yIHRoZSBjYWNoZVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEEgbmV3IHNlY3VyaXR5IGdyb3VwIGlzIGNyZWF0ZWRcbiAgICovXG4gIHJlYWRvbmx5IHNlY3VyaXR5R3JvdXBzPzogZWMyLklTZWN1cml0eUdyb3VwW107XG4gIC8qKlxuICAgKiBVc2VyIGdyb3VwIGZvciBhY2Nlc3MgY29udHJvbFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIHVzZXIgZ3JvdXBcbiAgICovXG4gIHJlYWRvbmx5IHVzZXJHcm91cD86IElVc2VyR3JvdXA7XG59XG5cbi8qKlxuICogQXR0cmlidXRlcyB0aGF0IGNhbiBiZSBzcGVjaWZpZWQgd2hlbiBpbXBvcnRpbmcgYSBTZXJ2ZXJsZXNzQ2FjaGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJ2ZXJsZXNzQ2FjaGVBdHRyaWJ1dGVzIHtcbiAgLyoqXG4gICAqIFRoZSBjYWNoZSBlbmdpbmUgdXNlZCBieSB0aGlzIGNhY2hlXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZW5naW5lIHR5cGUgaXMgdW5rbm93blxuICAgKi9cbiAgcmVhZG9ubHkgZW5naW5lPzogQ2FjaGVFbmdpbmU7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgc2VydmVybGVzcyBjYWNoZVxuICAgKlxuICAgKiBPbmUgb2YgYHNlcnZlcmxlc3NDYWNoZU5hbWVgIG9yIGBzZXJ2ZXJsZXNzQ2FjaGVBcm5gIGlzIHJlcXVpcmVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGRlcml2ZWQgZnJvbSBzZXJ2ZXJsZXNzQ2FjaGVBcm5cbiAgICovXG4gIHJlYWRvbmx5IHNlcnZlcmxlc3NDYWNoZU5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBzZXJ2ZXJsZXNzIGNhY2hlXG4gICAqXG4gICAqIE9uZSBvZiBgc2VydmVybGVzc0NhY2hlTmFtZWAgb3IgYHNlcnZlcmxlc3NDYWNoZUFybmAgaXMgcmVxdWlyZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZGVyaXZlZCBmcm9tIHNlcnZlcmxlc3NDYWNoZU5hbWVcbiAgICovXG4gIHJlYWRvbmx5IHNlcnZlcmxlc3NDYWNoZUFybj86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBBUk5zIG9mIGJhY2t1cHMgcmVzdG9yZWQgaW4gdGhlIGNhY2hlXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYmFja3VwcyBhcmUgdW5rbm93blxuICAgKi9cbiAgcmVhZG9ubHkgYmFja3VwQXJuc1RvUmVzdG9yZT86IHN0cmluZ1tdO1xuICAvKipcbiAgICogVGhlIEtNUyBrZXkgdXNlZCBmb3IgZW5jcnlwdGlvblxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGVuY3J5cHRpb24ga2V5IGlzIHVua25vd25cbiAgICovXG4gIHJlYWRvbmx5IGttc0tleT86IGttcy5JS2V5O1xuICAvKipcbiAgICogVGhlIFZQQyB0aGlzIGNhY2hlIGlzIGRlcGxveWVkIGluXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gVlBDIGlzIHVua25vd25cbiAgICovXG4gIHJlYWRvbmx5IHZwYz86IGVjMi5JVnBjO1xuICAvKipcbiAgICogVGhlIHN1Ym5ldHMgdGhpcyBjYWNoZSBpcyBkZXBsb3llZCBpblxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHN1Ym5ldHMgYXJlIHVua25vd25cbiAgICovXG4gIHJlYWRvbmx5IHN1Ym5ldHM/OiBlYzIuSVN1Ym5ldFtdO1xuICAvKipcbiAgICogVGhlIHNlY3VyaXR5IGdyb3VwcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBjYWNoZVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHNlY3VyaXR5IGdyb3VwcyBhcmUgdW5rbm93blxuICAgKi9cbiAgcmVhZG9ubHkgc2VjdXJpdHlHcm91cHM/OiBlYzIuSVNlY3VyaXR5R3JvdXBbXTtcbiAgLyoqXG4gICAqIFRoZSB1c2VyIGdyb3VwIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNhY2hlXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdXNlciBncm91cCBpcyB1bmtub3duXG4gICAqL1xuICByZWFkb25seSB1c2VyR3JvdXA/OiBJVXNlckdyb3VwO1xufVxuXG4vKipcbiAqIEEgc2VydmVybGVzcyBFbGFzdGlDYWNoZSBjYWNoZVxuICpcbiAqIEByZXNvdXJjZSBBV1M6OkVsYXN0aUNhY2hlOjpTZXJ2ZXJsZXNzQ2FjaGVcbiAqL1xuQHByb3BlcnR5SW5qZWN0YWJsZVxuZXhwb3J0IGNsYXNzIFNlcnZlcmxlc3NDYWNoZSBleHRlbmRzIFNlcnZlcmxlc3NDYWNoZUJhc2Uge1xuICAvKipcbiAgICogVW5pcXVlbHkgaWRlbnRpZmllcyB0aGlzIGNsYXNzLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQUk9QRVJUWV9JTkpFQ1RJT05fSUQ6IHN0cmluZyA9ICdhd3MtY2RrLWxpYi5hd3MtZWxhc3RpY2FjaGUuU2VydmVybGVzc0NhY2hlJztcblxuICAvKipcbiAgICogUmV0dXJuIHdoZXRoZXIgdGhlIGdpdmVuIG9iamVjdCBpcyBhIGBTZXJ2ZXJsZXNzQ2FjaGVgXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGlzU2VydmVybGVzc0NhY2hlKHg6IGFueSk6IHggaXMgU2VydmVybGVzc0NhY2hlIHtcbiAgICByZXR1cm4geCAhPT0gbnVsbCAmJiB0eXBlb2YgKHgpID09PSAnb2JqZWN0JyAmJiBFTEFTVElDQUNIRV9TRVJWRVJMRVNTQ0FDSEVfU1lNQk9MIGluIHg7XG4gIH1cblxuICAvKipcbiAgICogSW1wb3J0IGFuIGV4aXN0aW5nIHNlcnZlcmxlc3MgY2FjaGUgYnkgbmFtZVxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgVGhlIHBhcmVudCBjcmVhdGluZyBjb25zdHJ1Y3QgKHVzdWFsbHkgYHRoaXNgKVxuICAgKiBAcGFyYW0gaWQgVGhlIGNvbnN0cnVjdCdzIG5hbWVcbiAgICogQHBhcmFtIHNlcnZlcmxlc3NDYWNoZU5hbWUgVGhlIG5hbWUgb2YgdGhlIGV4aXN0aW5nIHNlcnZlcmxlc3MgY2FjaGVcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbVNlcnZlcmxlc3NDYWNoZU5hbWUoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgc2VydmVybGVzc0NhY2hlTmFtZTogc3RyaW5nKTogSVNlcnZlcmxlc3NDYWNoZSB7XG4gICAgcmV0dXJuIFNlcnZlcmxlc3NDYWNoZS5mcm9tU2VydmVybGVzc0NhY2hlQXR0cmlidXRlcyhzY29wZSwgaWQsIHsgc2VydmVybGVzc0NhY2hlTmFtZSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gZXhpc3Rpbmcgc2VydmVybGVzcyBjYWNoZSBieSBBUk5cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIFRoZSBwYXJlbnQgY3JlYXRpbmcgY29uc3RydWN0ICh1c3VhbGx5IGB0aGlzYClcbiAgICogQHBhcmFtIGlkIFRoZSBjb25zdHJ1Y3QncyBuYW1lXG4gICAqIEBwYXJhbSBzZXJ2ZXJsZXNzQ2FjaGVBcm4gVGhlIEFSTiBvZiB0aGUgZXhpc3Rpbmcgc2VydmVybGVzcyBjYWNoZVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tU2VydmVybGVzc0NhY2hlQXJuKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHNlcnZlcmxlc3NDYWNoZUFybjogc3RyaW5nKTogSVNlcnZlcmxlc3NDYWNoZSB7XG4gICAgcmV0dXJuIFNlcnZlcmxlc3NDYWNoZS5mcm9tU2VydmVybGVzc0NhY2hlQXR0cmlidXRlcyhzY29wZSwgaWQsIHsgc2VydmVybGVzc0NhY2hlQXJuIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyBzZXJ2ZXJsZXNzIGNhY2hlIHVzaW5nIGF0dHJpYnV0ZXNcbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIFRoZSBwYXJlbnQgY3JlYXRpbmcgY29uc3RydWN0ICh1c3VhbGx5IGB0aGlzYClcbiAgICogQHBhcmFtIGlkIFRoZSBjb25zdHJ1Y3QncyBuYW1lXG4gICAqIEBwYXJhbSBhdHRycyBBIGBTZXJ2ZXJsZXNzQ2FjaGVBdHRyaWJ1dGVzYCBvYmplY3RcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbVNlcnZlcmxlc3NDYWNoZUF0dHJpYnV0ZXMoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgYXR0cnM6IFNlcnZlcmxlc3NDYWNoZUF0dHJpYnV0ZXMpOiBJU2VydmVybGVzc0NhY2hlIHtcbiAgICBsZXQgbmFtZTogc3RyaW5nO1xuICAgIGxldCBhcm46IHN0cmluZztcbiAgICBjb25zdCBzdGFjayA9IFN0YWNrLm9mKHNjb3BlKTtcblxuICAgIGlmIChhdHRycy5zZXJ2ZXJsZXNzQ2FjaGVBcm4gJiYgYXR0cnMuc2VydmVybGVzc0NhY2hlTmFtZSkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcignT25seSBvbmUgb2Ygc2VydmVybGVzc0NhY2hlQXJuIG9yIHNlcnZlcmxlc3NDYWNoZU5hbWUgY2FuIGJlIHByb3ZpZGVkLicsIHNjb3BlKTtcbiAgICB9XG5cbiAgICBpZiAoYXR0cnMuc2VydmVybGVzc0NhY2hlQXJuKSB7XG4gICAgICBhcm4gPSBhdHRycy5zZXJ2ZXJsZXNzQ2FjaGVBcm47XG4gICAgICBjb25zdCBleHRyYWN0ZWRTZXJ2ZXJsZXNzQ2FjaGVOYW1lID0gc3RhY2suc3BsaXRBcm4oYXR0cnMuc2VydmVybGVzc0NhY2hlQXJuLCBBcm5Gb3JtYXQuU0xBU0hfUkVTT1VSQ0VfTkFNRSkucmVzb3VyY2VOYW1lO1xuICAgICAgaWYgKCFleHRyYWN0ZWRTZXJ2ZXJsZXNzQ2FjaGVOYW1lKSB7XG4gICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoJ1VuYWJsZSB0byBleHRyYWN0IHNlcnZlcmxlc3MgY2FjaGUgbmFtZSBmcm9tIEFSTi4nLCBzY29wZSk7XG4gICAgICB9XG4gICAgICBuYW1lID0gZXh0cmFjdGVkU2VydmVybGVzc0NhY2hlTmFtZTtcbiAgICB9IGVsc2UgaWYgKGF0dHJzLnNlcnZlcmxlc3NDYWNoZU5hbWUpIHtcbiAgICAgIG5hbWUgPSBhdHRycy5zZXJ2ZXJsZXNzQ2FjaGVOYW1lO1xuICAgICAgYXJuID0gc3RhY2suZm9ybWF0QXJuKHtcbiAgICAgICAgc2VydmljZTogJ2VsYXN0aWNhY2hlJyxcbiAgICAgICAgcmVzb3VyY2U6ICdzZXJ2ZXJsZXNzY2FjaGUnLFxuICAgICAgICByZXNvdXJjZU5hbWU6IGF0dHJzLnNlcnZlcmxlc3NDYWNoZU5hbWUsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcignT25lIG9mIHNlcnZlcmxlc3NDYWNoZU5hbWUgb3Igc2VydmVybGVzc0NhY2hlQXJuIGlzIHJlcXVpcmVkLicsIHNjb3BlKTtcbiAgICB9XG5cbiAgICBjbGFzcyBJbXBvcnQgZXh0ZW5kcyBTZXJ2ZXJsZXNzQ2FjaGVCYXNlIHtcbiAgICAgIHB1YmxpYyByZWFkb25seSBlbmdpbmUgPSBhdHRycy5lbmdpbmU7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgc2VydmVybGVzc0NhY2hlTmFtZTogc3RyaW5nO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHNlcnZlcmxlc3NDYWNoZUFybjogc3RyaW5nO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGJhY2t1cEFybnNUb1Jlc3RvcmUgPSBhdHRycy5iYWNrdXBBcm5zVG9SZXN0b3JlO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGttc0tleSA9IGF0dHJzLmttc0tleTtcbiAgICAgIHB1YmxpYyByZWFkb25seSB2cGMgPSBhdHRycy52cGM7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgc3VibmV0cyA9IGF0dHJzLnN1Ym5ldHM7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgc2VjdXJpdHlHcm91cHMgPSBhdHRycy5zZWN1cml0eUdyb3VwcztcbiAgICAgIHB1YmxpYyByZWFkb25seSB1c2VyR3JvdXAgPSBhdHRycy51c2VyR3JvdXA7XG5cbiAgICAgIHB1YmxpYyByZWFkb25seSBjb25uZWN0aW9uczogZWMyLkNvbm5lY3Rpb25zO1xuXG4gICAgICBjb25zdHJ1Y3RvcihzZXJ2ZXJsZXNzQ2FjaGVBcm46IHN0cmluZywgc2VydmVybGVzc0NhY2hlTmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgICAgIHRoaXMuc2VydmVybGVzc0NhY2hlQXJuID0gc2VydmVybGVzc0NhY2hlQXJuO1xuICAgICAgICB0aGlzLnNlcnZlcmxlc3NDYWNoZU5hbWUgPSBzZXJ2ZXJsZXNzQ2FjaGVOYW1lO1xuXG4gICAgICAgIGlmICh0aGlzLmVuZ2luZSkge1xuICAgICAgICAgIGxldCBkZWZhdWx0UG9ydDogZWMyLlBvcnQ7XG4gICAgICAgICAgc3dpdGNoICh0aGlzLmVuZ2luZSkge1xuICAgICAgICAgICAgY2FzZSBDYWNoZUVuZ2luZS5WQUxLRVlfTEFURVNUOlxuICAgICAgICAgICAgY2FzZSBDYWNoZUVuZ2luZS5WQUxLRVlfNzpcbiAgICAgICAgICAgIGNhc2UgQ2FjaGVFbmdpbmUuVkFMS0VZXzg6XG4gICAgICAgICAgICBjYXNlIENhY2hlRW5naW5lLlJFRElTX0xBVEVTVDpcbiAgICAgICAgICAgIGNhc2UgQ2FjaGVFbmdpbmUuUkVESVNfNzpcbiAgICAgICAgICAgICAgLy8gRG9jdW1lbnQgc2hvd2luZyB0aGUgZGVmYXVsdCBwb3J0XG4gICAgICAgICAgICAgIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FbGFzdGlDYWNoZS9sYXRlc3QvZGcvc2V0LXVwLmh0bWwjZWxhc3RpY2FjaGUtaW5zdGFsbC1ncmFudC1hY2Nlc3MtVlBOXG4gICAgICAgICAgICAgIGRlZmF1bHRQb3J0ID0gZWMyLlBvcnQudGNwKDYzNzkpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQ2FjaGVFbmdpbmUuTUVNQ0FDSEVEX0xBVEVTVDpcbiAgICAgICAgICAgICAgLy8gRG9jdW1lbnQgc2hvd2luZyB0aGUgZGVmYXVsdCBwb3J0XG4gICAgICAgICAgICAgIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FbGFzdGlDYWNoZS9sYXRlc3QvZGcvc2V0LXVwLmh0bWwjZWxhc3RpY2FjaGUtaW5zdGFsbC1ncmFudC1hY2Nlc3MtVlBOXG4gICAgICAgICAgICAgIGRlZmF1bHRQb3J0ID0gZWMyLlBvcnQudGNwKDExMjExKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGBVbnN1cHBvcnRlZCBjYWNoZSBlbmdpbmU6ICR7dGhpcy5lbmdpbmV9YCwgc2NvcGUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuY29ubmVjdGlvbnMgPSBuZXcgZWMyLkNvbm5lY3Rpb25zKHtcbiAgICAgICAgICAgIHNlY3VyaXR5R3JvdXBzOiB0aGlzLnNlY3VyaXR5R3JvdXBzLFxuICAgICAgICAgICAgZGVmYXVsdFBvcnQ6IGRlZmF1bHRQb3J0LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY29ubmVjdGlvbnMgPSBuZXcgZWMyLkNvbm5lY3Rpb25zKHtcbiAgICAgICAgICAgIHNlY3VyaXR5R3JvdXBzOiB0aGlzLnNlY3VyaXR5R3JvdXBzLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBJbXBvcnQoYXJuLCBuYW1lKTtcbiAgfVxuXG4gIHB1YmxpYyByZWFkb25seSBlbmdpbmU/OiBDYWNoZUVuZ2luZTtcbiAgcHVibGljIHJlYWRvbmx5IHNlcnZlcmxlc3NDYWNoZU5hbWU6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGJhY2t1cEFybnNUb1Jlc3RvcmU/OiBzdHJpbmdbXTtcbiAgcHVibGljIHJlYWRvbmx5IGttc0tleT86IGttcy5JS2V5O1xuICBwdWJsaWMgcmVhZG9ubHkgdnBjPzogZWMyLklWcGM7XG4gIHB1YmxpYyByZWFkb25seSBzdWJuZXRzPzogZWMyLklTdWJuZXRbXTtcbiAgcHVibGljIHJlYWRvbmx5IHNlY3VyaXR5R3JvdXBzPzogZWMyLklTZWN1cml0eUdyb3VwW107XG4gIHB1YmxpYyByZWFkb25seSB1c2VyR3JvdXA/OiBJVXNlckdyb3VwO1xuXG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBzZXJ2ZXJsZXNzIGNhY2hlXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzZXJ2ZXJsZXNzQ2FjaGVBcm46IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBlbmRwb2ludCBhZGRyZXNzIG9mIHRoZSBzZXJ2ZXJsZXNzIGNhY2hlXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzZXJ2ZXJsZXNzQ2FjaGVFbmRwb2ludEFkZHJlc3M6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBlbmRwb2ludCBwb3J0IG9mIHRoZSBzZXJ2ZXJsZXNzIGNhY2hlXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzZXJ2ZXJsZXNzQ2FjaGVFbmRwb2ludFBvcnQ6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSByZWFkZXIgZW5kcG9pbnQgYWRkcmVzcyBvZiB0aGUgc2VydmVybGVzcyBjYWNoZVxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc2VydmVybGVzc0NhY2hlUmVhZGVyRW5kcG9pbnRBZGRyZXNzOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgcmVhZGVyIGVuZHBvaW50IHBvcnQgb2YgdGhlIHNlcnZlcmxlc3MgY2FjaGVcbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHNlcnZlcmxlc3NDYWNoZVJlYWRlckVuZHBvaW50UG9ydDogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGN1cnJlbnQgc3RhdHVzIG9mIHRoZSBzZXJ2ZXJsZXNzIGNhY2hlXG4gICAqIENhbiBiZSAnQ1JFQVRJTkcnLCAnQVZBSUxBQkxFJywgJ0RFTEVUSU5HJywgJ0NSRUFURS1GQUlMRUQnLCAnTU9ESUZZSU5HJ1xuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc2VydmVybGVzc0NhY2hlU3RhdHVzOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFjY2VzcyB0byBuZXR3b3JrIGNvbm5lY3Rpb25zXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY29ubmVjdGlvbnM6IGVjMi5Db25uZWN0aW9ucztcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogU2VydmVybGVzc0NhY2hlUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHt9KTtcblxuICAgIC8vIEVuaGFuY2VkIENESyBBbmFseXRpY3MgVGVsZW1ldHJ5XG4gICAgYWRkQ29uc3RydWN0TWV0YWRhdGEodGhpcywgcHJvcHMpO1xuXG4gICAgdGhpcy5lbmdpbmUgPSBwcm9wcy5lbmdpbmUgPz8gQ2FjaGVFbmdpbmUuVkFMS0VZX0xBVEVTVDtcbiAgICB0aGlzLnNlcnZlcmxlc3NDYWNoZU5hbWUgPSBwcm9wcy5zZXJ2ZXJsZXNzQ2FjaGVOYW1lID8/IExhenkuc3RyaW5nKHtcbiAgICAgIHByb2R1Y2U6ICgpID0+IE5hbWVzLnVuaXF1ZVJlc291cmNlTmFtZSh0aGlzLCB7IG1heExlbmd0aDogNDAgfSksXG4gICAgfSk7XG4gICAgdGhpcy5rbXNLZXkgPSBwcm9wcy5rbXNLZXk7XG4gICAgdGhpcy52cGMgPSBwcm9wcy52cGM7XG4gICAgdGhpcy51c2VyR3JvdXAgPSBwcm9wcy51c2VyR3JvdXA7XG5cbiAgICB0aGlzLnZhbGlkYXRlRGVzY3JpcHRpb24ocHJvcHMuZGVzY3JpcHRpb24pO1xuICAgIHRoaXMudmFsaWRhdGVEYXRhU3RvcmFnZUxpbWl0cyhwcm9wcy5jYWNoZVVzYWdlTGltaXRzKTtcbiAgICB0aGlzLnZhbGlkYXRlUmVxdWVzdFJhdGVMaW1pdHMocHJvcHMuY2FjaGVVc2FnZUxpbWl0cyk7XG4gICAgdGhpcy52YWxpZGF0ZUJhY2t1cFNldHRpbmdzKHByb3BzLmJhY2t1cCk7XG4gICAgdGhpcy52YWxpZGF0ZVVzZXJHcm91cENvbXBhdGliaWxpdHkodGhpcy5lbmdpbmUsIHRoaXMudXNlckdyb3VwKTtcblxuICAgIGNvbnN0IHN1Ym5ldENvbmZpZyA9IHRoaXMuY29uZmlndXJlU3VibmV0cyhwcm9wcyk7XG4gICAgY29uc3Qgc3VibmV0SWRzID0gc3VibmV0Q29uZmlnLnN1Ym5ldElkcztcbiAgICB0aGlzLnN1Ym5ldHMgPSBzdWJuZXRDb25maWcuc3VibmV0cztcblxuICAgIGNvbnN0IHNlY3VyaXR5R3JvdXBDb25maWcgPSB0aGlzLmNvbmZpZ3VyZVNlY3VyaXR5R3JvdXBzKHByb3BzKTtcbiAgICBjb25zdCBzZWN1cml0eUdyb3VwSWRzID0gc2VjdXJpdHlHcm91cENvbmZpZy5zZWN1cml0eUdyb3VwSWRzO1xuICAgIHRoaXMuc2VjdXJpdHlHcm91cHMgPSBzZWN1cml0eUdyb3VwQ29uZmlnLnNlY3VyaXR5R3JvdXBzO1xuXG4gICAgY29uc3QgW2VuZ2luZSwgdmVyc2lvbl0gPSB0aGlzLmVuZ2luZS5zcGxpdCgnXycpO1xuXG4gICAgY29uc3QgcmVzb3VyY2UgPSBuZXcgQ2ZuU2VydmVybGVzc0NhY2hlKHRoaXMsICdSZXNvdXJjZScsIHtcbiAgICAgIGVuZ2luZTogZW5naW5lLFxuICAgICAgbWFqb3JFbmdpbmVWZXJzaW9uOiB2ZXJzaW9uLFxuICAgICAgc2VydmVybGVzc0NhY2hlTmFtZTogdGhpcy5zZXJ2ZXJsZXNzQ2FjaGVOYW1lLFxuICAgICAgZGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uLFxuICAgICAgY2FjaGVVc2FnZUxpbWl0czogdGhpcy5yZW5kZXJDYWNoZVVzYWdlTGltaXRzKHByb3BzLmNhY2hlVXNhZ2VMaW1pdHMpLFxuICAgICAgZGFpbHlTbmFwc2hvdFRpbWU6IHByb3BzLmJhY2t1cD8uYmFja3VwVGltZSA/IHRoaXMuZm9ybWF0QmFja3VwVGltZShwcm9wcy5iYWNrdXAuYmFja3VwVGltZSkgOiB1bmRlZmluZWQsXG4gICAgICBzbmFwc2hvdFJldGVudGlvbkxpbWl0OiBwcm9wcy5iYWNrdXA/LmJhY2t1cFJldGVudGlvbkxpbWl0LFxuICAgICAgZmluYWxTbmFwc2hvdE5hbWU6IHByb3BzLmJhY2t1cD8uYmFja3VwTmFtZUJlZm9yZURlbGV0aW9uLFxuICAgICAgc25hcHNob3RBcm5zVG9SZXN0b3JlOiBwcm9wcy5iYWNrdXA/LmJhY2t1cEFybnNUb1Jlc3RvcmUsXG4gICAgICBrbXNLZXlJZDogcHJvcHMua21zS2V5Py5rZXlJZCxcbiAgICAgIHN1Ym5ldElkczogc3VibmV0SWRzLFxuICAgICAgc2VjdXJpdHlHcm91cElkczogc2VjdXJpdHlHcm91cElkcyxcbiAgICAgIHVzZXJHcm91cElkOiBwcm9wcy51c2VyR3JvdXA/LnVzZXJHcm91cE5hbWUsXG4gICAgfSk7XG5cbiAgICBpZiAocHJvcHMudXNlckdyb3VwKSB7XG4gICAgICBjb25zdCB1c2VyR3JvdXBSZXNvdXJjZSA9IHByb3BzLnVzZXJHcm91cC5ub2RlLmZpbmRDaGlsZCgnUmVzb3VyY2UnKSBhcyBDZm5Vc2VyR3JvdXA7XG4gICAgICByZXNvdXJjZS5hZGREZXBlbmRlbmN5KHVzZXJHcm91cFJlc291cmNlKTtcbiAgICB9XG5cbiAgICB0aGlzLmJhY2t1cEFybnNUb1Jlc3RvcmUgPSByZXNvdXJjZS5zbmFwc2hvdEFybnNUb1Jlc3RvcmU7XG4gICAgdGhpcy5zZXJ2ZXJsZXNzQ2FjaGVBcm4gPSByZXNvdXJjZS5hdHRyQXJuO1xuICAgIHRoaXMuc2VydmVybGVzc0NhY2hlRW5kcG9pbnRBZGRyZXNzID0gcmVzb3VyY2UuYXR0ckVuZHBvaW50QWRkcmVzcztcbiAgICB0aGlzLnNlcnZlcmxlc3NDYWNoZUVuZHBvaW50UG9ydCA9IHJlc291cmNlLmF0dHJFbmRwb2ludFBvcnQ7XG4gICAgdGhpcy5zZXJ2ZXJsZXNzQ2FjaGVSZWFkZXJFbmRwb2ludEFkZHJlc3MgPSByZXNvdXJjZS5hdHRyUmVhZGVyRW5kcG9pbnRBZGRyZXNzO1xuICAgIHRoaXMuc2VydmVybGVzc0NhY2hlUmVhZGVyRW5kcG9pbnRQb3J0ID0gcmVzb3VyY2UuYXR0clJlYWRlckVuZHBvaW50UG9ydDtcbiAgICB0aGlzLnNlcnZlcmxlc3NDYWNoZVN0YXR1cyA9IHJlc291cmNlLmF0dHJTdGF0dXM7XG5cbiAgICB0aGlzLmNvbm5lY3Rpb25zID0gbmV3IGVjMi5Db25uZWN0aW9ucyh7XG4gICAgICBzZWN1cml0eUdyb3VwczogdGhpcy5zZWN1cml0eUdyb3VwcyxcbiAgICAgIGRlZmF1bHRQb3J0OiBlYzIuUG9ydC50Y3AoVG9rZW4uYXNOdW1iZXIodGhpcy5zZXJ2ZXJsZXNzQ2FjaGVFbmRwb2ludFBvcnQpKSxcbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBFTEFTVElDQUNIRV9TRVJWRVJMRVNTQ0FDSEVfU1lNQk9MLCB7IHZhbHVlOiB0cnVlIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIGRlc2NyaXB0aW9uIG1lZXRzIEFXUyByZXF1aXJlbWVudHNcbiAgICpcbiAgICogQHBhcmFtIGRlc2NyaXB0aW9uIFRoZSBkZXNjcmlwdGlvbiB0byB2YWxpZGF0ZVxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZURlc2NyaXB0aW9uKGRlc2NyaXB0aW9uPzogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCFkZXNjcmlwdGlvbiB8fCBUb2tlbi5pc1VucmVzb2x2ZWQoZGVzY3JpcHRpb24pKSByZXR1cm47XG5cbiAgICBpZiAoZGVzY3JpcHRpb24ubGVuZ3RoID4gMjU1KSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGBEZXNjcmlwdGlvbiBtdXN0IG5vdCBleGNlZWQgMjU1IGNoYXJhY3RlcnMsIGN1cnJlbnRseSBoYXMgJHtkZXNjcmlwdGlvbi5sZW5ndGh9YCwgdGhpcyk7XG4gICAgfVxuXG4gICAgaWYgKGRlc2NyaXB0aW9uLmluY2x1ZGVzKCc8JykgfHwgZGVzY3JpcHRpb24uaW5jbHVkZXMoJz4nKSkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcignRGVzY3JpcHRpb24gbXVzdCBub3QgY29udGFpbiA8IG9yID4gY2hhcmFjdGVycycsIHRoaXMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBkYXRhIHN0b3JhZ2Ugc2l6ZSBsaW1pdHNcbiAgICpcbiAgICogQHBhcmFtIGxpbWl0cyBUaGUgdXNhZ2UgbGltaXRzIGNvbnRhaW5pbmcgZGF0YSBzdG9yYWdlIHNldHRpbmdzXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlRGF0YVN0b3JhZ2VMaW1pdHMobGltaXRzPzogQ2FjaGVVc2FnZUxpbWl0c1Byb3BlcnR5KTogdm9pZCB7XG4gICAgaWYgKCFsaW1pdHMpIHJldHVybjtcblxuICAgIGlmIChsaW1pdHMuZGF0YVN0b3JhZ2VNaW5pbXVtU2l6ZSAmJiAhbGltaXRzLmRhdGFTdG9yYWdlTWluaW11bVNpemUuaXNVbnJlc29sdmVkKCkgJiZcbiAgICAgIChsaW1pdHMuZGF0YVN0b3JhZ2VNaW5pbXVtU2l6ZS50b0dpYmlieXRlcygpIDwgREFUQV9TVE9SQUdFX01JTl9HQiB8fCBsaW1pdHMuZGF0YVN0b3JhZ2VNaW5pbXVtU2l6ZS50b0dpYmlieXRlcygpID4gREFUQV9TVE9SQUdFX01BWF9HQikpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoJ0RhdGEgc3RvcmFnZSBtaW5pbXVtIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA1MDAwIEdCLicsIHRoaXMpO1xuICAgIH1cbiAgICBpZiAobGltaXRzLmRhdGFTdG9yYWdlTWF4aW11bVNpemUgJiYgIWxpbWl0cy5kYXRhU3RvcmFnZU1heGltdW1TaXplLmlzVW5yZXNvbHZlZCgpICYmXG4gICAgICAobGltaXRzLmRhdGFTdG9yYWdlTWF4aW11bVNpemUudG9HaWJpYnl0ZXMoKSA8IERBVEFfU1RPUkFHRV9NSU5fR0IgfHwgbGltaXRzLmRhdGFTdG9yYWdlTWF4aW11bVNpemUudG9HaWJpYnl0ZXMoKSA+IERBVEFfU1RPUkFHRV9NQVhfR0IpKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKCdEYXRhIHN0b3JhZ2UgbWF4aW11bSBtdXN0IGJlIGJldHdlZW4gMSBhbmQgNTAwMCBHQi4nLCB0aGlzKTtcbiAgICB9XG5cbiAgICBpZiAobGltaXRzLmRhdGFTdG9yYWdlTWluaW11bVNpemUgJiYgbGltaXRzLmRhdGFTdG9yYWdlTWF4aW11bVNpemUgJiZcbiAgICAgICFsaW1pdHMuZGF0YVN0b3JhZ2VNaW5pbXVtU2l6ZS5pc1VucmVzb2x2ZWQoKSAmJiAhbGltaXRzLmRhdGFTdG9yYWdlTWF4aW11bVNpemUuaXNVbnJlc29sdmVkKCkgJiZcbiAgICAgIGxpbWl0cy5kYXRhU3RvcmFnZU1pbmltdW1TaXplLnRvR2liaWJ5dGVzKCkgPiBsaW1pdHMuZGF0YVN0b3JhZ2VNYXhpbXVtU2l6ZS50b0dpYmlieXRlcygpKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKCdEYXRhIHN0b3JhZ2UgbWluaW11bSBjYW5ub3QgYmUgZ3JlYXRlciB0aGFuIG1heGltdW0nLCB0aGlzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgcmVxdWVzdCByYXRlIGxpbWl0c1xuICAgKlxuICAgKiBAcGFyYW0gbGltaXRzIFRoZSB1c2FnZSBsaW1pdHMgY29udGFpbmluZyByZXF1ZXN0IHJhdGUgc2V0dGluZ3NcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVSZXF1ZXN0UmF0ZUxpbWl0cyhsaW1pdHM/OiBDYWNoZVVzYWdlTGltaXRzUHJvcGVydHkpOiB2b2lkIHtcbiAgICBpZiAoIWxpbWl0cykgcmV0dXJuO1xuXG4gICAgaWYgKGxpbWl0cy5yZXF1ZXN0UmF0ZUxpbWl0TWluaW11bSAhPT0gdW5kZWZpbmVkICYmICFUb2tlbi5pc1VucmVzb2x2ZWQobGltaXRzLnJlcXVlc3RSYXRlTGltaXRNaW5pbXVtKSAmJlxuICAgICAgKGxpbWl0cy5yZXF1ZXN0UmF0ZUxpbWl0TWluaW11bSA8IFJFUVVFU1RfUkFURV9NSU5fRUNQVSB8fCBsaW1pdHMucmVxdWVzdFJhdGVMaW1pdE1pbmltdW0gPiBSRVFVRVNUX1JBVEVfTUFYX0VDUFUpKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKCdSZXF1ZXN0IHJhdGUgbWluaW11bSBtdXN0IGJlIGJldHdlZW4gMSwwMDAgYW5kIDE1LDAwMCwwMDAgRUNQVXMgcGVyIHNlY29uZCcsIHRoaXMpO1xuICAgIH1cbiAgICBpZiAobGltaXRzLnJlcXVlc3RSYXRlTGltaXRNYXhpbXVtICE9PSB1bmRlZmluZWQgJiYgIVRva2VuLmlzVW5yZXNvbHZlZChsaW1pdHMucmVxdWVzdFJhdGVMaW1pdE1heGltdW0pICYmXG4gICAgICAobGltaXRzLnJlcXVlc3RSYXRlTGltaXRNYXhpbXVtIDwgUkVRVUVTVF9SQVRFX01JTl9FQ1BVIHx8IGxpbWl0cy5yZXF1ZXN0UmF0ZUxpbWl0TWF4aW11bSA+IFJFUVVFU1RfUkFURV9NQVhfRUNQVSkpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoJ1JlcXVlc3QgcmF0ZSBtYXhpbXVtIG11c3QgYmUgYmV0d2VlbiAxLDAwMCBhbmQgMTUsMDAwLDAwMCBFQ1BVcyBwZXIgc2Vjb25kJywgdGhpcyk7XG4gICAgfVxuXG4gICAgaWYgKCFUb2tlbi5pc1VucmVzb2x2ZWQobGltaXRzLnJlcXVlc3RSYXRlTGltaXRNaW5pbXVtKSAmJiAhVG9rZW4uaXNVbnJlc29sdmVkKGxpbWl0cy5yZXF1ZXN0UmF0ZUxpbWl0TWF4aW11bSkgJiZcbiAgICAgIGxpbWl0cy5yZXF1ZXN0UmF0ZUxpbWl0TWluaW11bSAhPT0gdW5kZWZpbmVkICYmIGxpbWl0cy5yZXF1ZXN0UmF0ZUxpbWl0TWF4aW11bSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBsaW1pdHMucmVxdWVzdFJhdGVMaW1pdE1pbmltdW0gPiBsaW1pdHMucmVxdWVzdFJhdGVMaW1pdE1heGltdW0pIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoJ1JlcXVlc3QgcmF0ZSBtaW5pbXVtIGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gbWF4aW11bScsIHRoaXMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBiYWNrdXAgc2V0dGluZ3MgbWVldCBBV1MgcmVxdWlyZW1lbnRzXG4gICAqXG4gICAqIEBwYXJhbSBiYWNrdXAgVGhlIGJhY2t1cCBzZXR0aW5ncyB0byB2YWxpZGF0ZVxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZUJhY2t1cFNldHRpbmdzKGJhY2t1cD86IEJhY2t1cFNldHRpbmdzKTogdm9pZCB7XG4gICAgaWYgKCFUb2tlbi5pc1VucmVzb2x2ZWQoYmFja3VwPy5iYWNrdXBSZXRlbnRpb25MaW1pdCkgJiYgYmFja3VwPy5iYWNrdXBSZXRlbnRpb25MaW1pdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBsaW1pdCA9IGJhY2t1cC5iYWNrdXBSZXRlbnRpb25MaW1pdDtcbiAgICAgIGlmIChsaW1pdCA8IDEgfHwgbGltaXQgPiAzNSkge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKCdCYWNrdXAgcmV0ZW50aW9uIGxpbWl0IG11c3QgYmUgYmV0d2VlbiAxIGFuZCAzNSBkYXlzJywgdGhpcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFUb2tlbi5pc1VucmVzb2x2ZWQoYmFja3VwPy5iYWNrdXBOYW1lQmVmb3JlRGVsZXRpb24pICYmIGJhY2t1cD8uYmFja3VwTmFtZUJlZm9yZURlbGV0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IG5hbWUgPSBiYWNrdXAuYmFja3VwTmFtZUJlZm9yZURlbGV0aW9uO1xuXG4gICAgICBpZiAoIS9eW2EtekEtWl0vLnRlc3QobmFtZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcignRmluYWwgYmFja3VwIG5hbWUgbXVzdCBiZWdpbiB3aXRoIGEgbGV0dGVyJywgdGhpcyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghL15bYS16QS1aMC05LV0rJC8udGVzdChuYW1lKSkge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKCdGaW5hbCBiYWNrdXAgbmFtZSBtdXN0IGNvbnRhaW4gb25seSBBU0NJSSBsZXR0ZXJzLCBkaWdpdHMsIGFuZCBoeXBoZW5zJywgdGhpcyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChuYW1lLmVuZHNXaXRoKCctJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcignRmluYWwgYmFja3VwIG5hbWUgbXVzdCBub3QgZW5kIHdpdGggYSBoeXBoZW4nLCB0aGlzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5hbWUuaW5jbHVkZXMoJy0tJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcignRmluYWwgYmFja3VwIG5hbWUgbXVzdCBub3QgY29udGFpbiB0d28gY29uc2VjdXRpdmUgaHlwaGVucycsIHRoaXMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB1c2VyIGdyb3VwIGNvbXBhdGliaWxpdHkgd2l0aCBjYWNoZSBlbmdpbmVcbiAgICpcbiAgICogQHBhcmFtIGVuZ2luZSBUaGUgY2FjaGUgZW5naW5lXG4gICAqIEBwYXJhbSB1c2VyR3JvdXAgVGhlIHVzZXIgZ3JvdXAgdG8gdmFsaWRhdGVcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVVc2VyR3JvdXBDb21wYXRpYmlsaXR5KGVuZ2luZTogQ2FjaGVFbmdpbmUsIHVzZXJHcm91cD86IElVc2VyR3JvdXApOiB2b2lkIHtcbiAgICBpZiAoIXVzZXJHcm91cCkgcmV0dXJuO1xuXG4gICAgaWYgKGVuZ2luZSA9PT0gQ2FjaGVFbmdpbmUuTUVNQ0FDSEVEX0xBVEVTVCkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcignVXNlciBncm91cHMgY2Fubm90IGJlIHVzZWQgd2l0aCBNZW1jYWNoZWQgZW5naW5lcy4gT25seSBSZWRpcyBhbmQgVmFsa2V5IGVuZ2luZXMgc3VwcG9ydCB1c2VyIGdyb3Vwcy4nLCB0aGlzKTtcbiAgICB9XG5cbiAgICBpZiAoZW5naW5lID09PSBDYWNoZUVuZ2luZS5SRURJU19MQVRFU1QgJiYgdXNlckdyb3VwLmVuZ2luZSAhPT0gVXNlckVuZ2luZS5SRURJUykge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcignUmVkaXMgY2FjaGUgY2FuIG9ubHkgdXNlIFJlZGlzIHVzZXIgZ3JvdXBzLicsIHRoaXMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXIgY2FjaGUgdXNhZ2UgbGltaXRzIGZvciBDbG91ZEZvcm1hdGlvblxuICAgKlxuICAgKiBAcGFyYW0gbGltaXRzIFRoZSB1c2FnZSBsaW1pdHMgdG8gcmVuZGVyXG4gICAqIEByZXR1cm5zIENsb3VkRm9ybWF0aW9uLWNvbXBhdGlibGUgdXNhZ2UgbGltaXRzIG9iamVjdCBvciB1bmRlZmluZWRcbiAgICovXG4gIHByaXZhdGUgcmVuZGVyQ2FjaGVVc2FnZUxpbWl0cyhsaW1pdHM/OiBDYWNoZVVzYWdlTGltaXRzUHJvcGVydHkpOiBhbnkge1xuICAgIGlmICghbGltaXRzKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgY2FjaGVVc2FnZUxpbWl0czogYW55ID0ge307XG5cbiAgICBpZiAobGltaXRzLmRhdGFTdG9yYWdlTWluaW11bVNpemUgIT09IHVuZGVmaW5lZCB8fCBsaW1pdHMuZGF0YVN0b3JhZ2VNYXhpbXVtU2l6ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjYWNoZVVzYWdlTGltaXRzLmRhdGFTdG9yYWdlID0ge1xuICAgICAgICB1bml0OiBEYXRhU3RvcmFnZVVuaXQuR0lHQUJZVEVTLFxuICAgICAgICAuLi4obGltaXRzLmRhdGFTdG9yYWdlTWluaW11bVNpemUgIT09IHVuZGVmaW5lZCAmJiB7IG1pbmltdW06IGxpbWl0cy5kYXRhU3RvcmFnZU1pbmltdW1TaXplLnRvR2liaWJ5dGVzKCkgfSksXG4gICAgICAgIC4uLihsaW1pdHMuZGF0YVN0b3JhZ2VNYXhpbXVtU2l6ZSAhPT0gdW5kZWZpbmVkICYmIHsgbWF4aW11bTogbGltaXRzLmRhdGFTdG9yYWdlTWF4aW11bVNpemUudG9HaWJpYnl0ZXMoKSB9KSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKGxpbWl0cy5yZXF1ZXN0UmF0ZUxpbWl0TWluaW11bSAhPT0gdW5kZWZpbmVkIHx8IGxpbWl0cy5yZXF1ZXN0UmF0ZUxpbWl0TWF4aW11bSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjYWNoZVVzYWdlTGltaXRzLmVjcHVQZXJTZWNvbmQgPSB7XG4gICAgICAgIC4uLihsaW1pdHMucmVxdWVzdFJhdGVMaW1pdE1pbmltdW0gIT09IHVuZGVmaW5lZCAmJiB7IG1pbmltdW06IGxpbWl0cy5yZXF1ZXN0UmF0ZUxpbWl0TWluaW11bSB9KSxcbiAgICAgICAgLi4uKGxpbWl0cy5yZXF1ZXN0UmF0ZUxpbWl0TWF4aW11bSAhPT0gdW5kZWZpbmVkICYmIHsgbWF4aW11bTogbGltaXRzLnJlcXVlc3RSYXRlTGltaXRNYXhpbXVtIH0pLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gT2JqZWN0LmtleXMoY2FjaGVVc2FnZUxpbWl0cykubGVuZ3RoID4gMCA/IGNhY2hlVXNhZ2VMaW1pdHMgOiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogQ29uZmlndXJlIHN1Ym5ldHMgZm9yIHRoZSBjYWNoZVxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgVGhlIFNlcnZlcmxlc3NDYWNoZSBwcm9wZXJ0aWVzXG4gICAqIEByZXR1cm5zIE9iamVjdCBjb250YWluaW5nIHN1Ym5ldCBJRHMgYW5kIHN1Ym5ldCBvYmplY3RzXG4gICAqL1xuICBwcml2YXRlIGNvbmZpZ3VyZVN1Ym5ldHMocHJvcHM6IFNlcnZlcmxlc3NDYWNoZVByb3BzKTogeyBzdWJuZXRJZHM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkOyBzdWJuZXRzOiBlYzIuSVN1Ym5ldFtdIHwgdW5kZWZpbmVkIH0ge1xuICAgIGxldCBzZWxlY3RlZFN1Ym5ldHM7XG4gICAgaWYgKHByb3BzLnZwY1N1Ym5ldHMpIHtcbiAgICAgIHNlbGVjdGVkU3VibmV0cyA9IHByb3BzLnZwYy5zZWxlY3RTdWJuZXRzKHByb3BzLnZwY1N1Ym5ldHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZWxlY3RlZFN1Ym5ldHMgPSBwcm9wcy52cGMuc2VsZWN0U3VibmV0cyh7XG4gICAgICAgIHN1Ym5ldFR5cGU6IGVjMi5TdWJuZXRUeXBlLlBSSVZBVEVfV0lUSF9FR1JFU1MsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgc3VibmV0SWRzOiBzZWxlY3RlZFN1Ym5ldHMuc3VibmV0SWRzLmxlbmd0aCA+IDAgPyBzZWxlY3RlZFN1Ym5ldHMuc3VibmV0SWRzIDogdW5kZWZpbmVkLFxuICAgICAgc3VibmV0czogc2VsZWN0ZWRTdWJuZXRzLnN1Ym5ldHMubGVuZ3RoID4gMCA/IHNlbGVjdGVkU3VibmV0cy5zdWJuZXRzIDogdW5kZWZpbmVkLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ29uZmlndXJlIHNlY3VyaXR5IGdyb3VwcyBmb3IgdGhlIGNhY2hlXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBUaGUgU2VydmVybGVzc0NhY2hlIHByb3BlcnRpZXNcbiAgICogQHJldHVybnMgT2JqZWN0IGNvbnRhaW5pbmcgc2VjdXJpdHkgZ3JvdXAgSURzIGFuZCBzZWN1cml0eSBncm91cCBvYmplY3RzXG4gICAqL1xuICBwcml2YXRlIGNvbmZpZ3VyZVNlY3VyaXR5R3JvdXBzKHByb3BzOiBTZXJ2ZXJsZXNzQ2FjaGVQcm9wcyk6IHsgc2VjdXJpdHlHcm91cElkczogc3RyaW5nW107IHNlY3VyaXR5R3JvdXBzOiBlYzIuSVNlY3VyaXR5R3JvdXBbXSB9IHtcbiAgICBpZiAocHJvcHMuc2VjdXJpdHlHcm91cHMgJiYgcHJvcHMuc2VjdXJpdHlHcm91cHMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2VjdXJpdHlHcm91cElkczogcHJvcHMuc2VjdXJpdHlHcm91cHMubWFwKHNnID0+IHNnLnNlY3VyaXR5R3JvdXBJZCksXG4gICAgICAgIHNlY3VyaXR5R3JvdXBzOiBwcm9wcy5zZWN1cml0eUdyb3VwcyxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG5ld1NlY3VyaXR5R3JvdXAgPSBuZXcgZWMyLlNlY3VyaXR5R3JvdXAodGhpcywgJ1NlY3VyaXR5R3JvdXAnLCB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiBgU2VjdXJpdHkgZ3JvdXAgZm9yICR7dGhpcy5ub2RlLmlkfSBjYWNoZS5gLFxuICAgICAgICB2cGM6IHByb3BzLnZwYyxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2VjdXJpdHlHcm91cElkczogW25ld1NlY3VyaXR5R3JvdXAuc2VjdXJpdHlHcm91cElkXSxcbiAgICAgICAgc2VjdXJpdHlHcm91cHM6IFtuZXdTZWN1cml0eUdyb3VwXSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdCBzY2hlZHVsZSB0byBISDpNTSBmb3JtYXQgZm9yIGRhaWx5IGJhY2t1cHNcbiAgICpcbiAgICogQHBhcmFtIHNjaGVkdWxlIFRoZSBzY2hlZHVsZSB0byBmb3JtYXRcbiAgICogQHJldHVybnMgVGltZSBzdHJpbmcgaW4gSEg6TU0gZm9ybWF0XG4gICAqL1xuICBwcml2YXRlIGZvcm1hdEJhY2t1cFRpbWUoc2NoZWR1bGU6IGV2ZW50cy5TY2hlZHVsZSk6IHN0cmluZyB7XG4gICAgY29uc3QgV0lMRF9DQVJEID0gJyonO1xuICAgIGNvbnN0IFtcbiAgICAgIG1pbnV0ZUV4cHJlc3Npb24sIGhvdXJFeHByZXNzaW9uLFxuICAgICAgZGF5RXhwcmVzc2lvbiwgbW9udGhFeHByZXNzaW9uLFxuICAgICAgd2Vla0RheUV4cHJlc3Npb24sIHllYXJFeHByZXNzaW9uLFxuICAgIF0gPSBzY2hlZHVsZS5leHByZXNzaW9uU3RyaW5nLnN1YnN0cig1KS5zbGljZSgwLCAtMSkuc3BsaXQoJyAnKTtcblxuICAgIGlmIChkYXlFeHByZXNzaW9uICE9IFdJTERfQ0FSRCB8fCBtb250aEV4cHJlc3Npb24gIT0gV0lMRF9DQVJEIHx8IHllYXJFeHByZXNzaW9uICE9IFdJTERfQ0FSRCB8fCB3ZWVrRGF5RXhwcmVzc2lvbiAhPSAnPycpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoJ0ZvciBub3csIG9ubHkgZGFpbHkgYmFja3VwIHRpbWUgaXMgYXZhaWxhYmxlIChzdXBwb3J0cyBqdXN0IGhvdXIgYW5kIG1pbnV0ZSkuIERheSwgbW9udGgsIHllYXIsIGFuZCB3ZWVrRGF5IGFyZSBub3QgYWxsb3dlZCcsIHRoaXMpO1xuICAgIH1cblxuICAgIGNvbnN0IGhvdXIgPSBob3VyRXhwcmVzc2lvbiA9PSBXSUxEX0NBUkQgPyAnMCcgOiBob3VyRXhwcmVzc2lvbjtcbiAgICBjb25zdCBtaW51dGUgPSBtaW51dGVFeHByZXNzaW9uID09IFdJTERfQ0FSRCA/ICcwJyA6IG1pbnV0ZUV4cHJlc3Npb247XG5cbiAgICByZXR1cm4gYCR7aG91ci5wYWRTdGFydCgyLCAnMCcpfToke21pbnV0ZS5wYWRTdGFydCgyLCAnMCcpfWA7XG4gIH1cbn1cbiJdfQ==
|
package/lib/user-base.d.ts
CHANGED
|
@@ -24,7 +24,7 @@ export interface UserBaseProps {
|
|
|
24
24
|
* The engine type for the user.
|
|
25
25
|
* Enum options: UserEngine.VALKEY, UserEngine.REDIS.
|
|
26
26
|
*
|
|
27
|
-
* @default UserEngine.VALKEY.
|
|
27
|
+
* @default - UserEngine.REDIS for NoPasswordUser, UserEngine.VALKEY for all other user types.
|
|
28
28
|
*/
|
|
29
29
|
readonly engine?: UserEngine;
|
|
30
30
|
/**
|
package/lib/user-base.js
CHANGED
|
@@ -8,7 +8,7 @@ const core_1 = require("aws-cdk-lib/core");
|
|
|
8
8
|
* Access control configuration for ElastiCache users.
|
|
9
9
|
*/
|
|
10
10
|
class AccessControl {
|
|
11
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-elasticache-alpha.AccessControl", version: "2.
|
|
11
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-elasticache-alpha.AccessControl", version: "2.234.0-alpha.0" };
|
|
12
12
|
/**
|
|
13
13
|
* Create access control from an access string.
|
|
14
14
|
*
|
|
@@ -36,7 +36,7 @@ class AccessControlString extends AccessControl {
|
|
|
36
36
|
* Base class for ElastiCache users.
|
|
37
37
|
*/
|
|
38
38
|
class UserBase extends core_1.Resource {
|
|
39
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-elasticache-alpha.UserBase", version: "2.
|
|
39
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-elasticache-alpha.UserBase", version: "2.234.0-alpha.0" };
|
|
40
40
|
/**
|
|
41
41
|
* Import an existing user by ID.
|
|
42
42
|
*
|
|
@@ -116,4 +116,4 @@ class UserBase extends core_1.Resource {
|
|
|
116
116
|
}
|
|
117
117
|
}
|
|
118
118
|
exports.UserBase = UserBase;
|
|
119
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1iYXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidXNlci1iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsMkNBQTBGO0FBSTFGOztHQUVHO0FBQ0gsTUFBc0IsYUFBYTs7SUFDakM7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFvQjtRQUNqRCxPQUFPLElBQUksbUJBQW1CLENBQUMsWUFBWSxDQUFDLENBQUM7S0FDOUM7O0FBUkgsc0NBY0M7QUFFRDs7R0FFRztBQUNILE1BQU0sbUJBQW9CLFNBQVEsYUFBYTtJQUM3Qzs7T0FFRztJQUNhLFlBQVksQ0FBUztJQUVyQyxZQUFZLFlBQW9CO1FBQzlCLEtBQUssRUFBRSxDQUFDO1FBQ1IsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7S0FDbEM7Q0FDRjtBQW9GRDs7R0FFRztBQUNILE1BQXNCLFFBQVMsU0FBUSxlQUFROztJQUM3Qzs7Ozs7O09BTUc7SUFDSSxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQWdCLEVBQUUsRUFBVSxFQUFFLE1BQWM7UUFDbkUsT0FBTyxRQUFRLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7S0FDM0Q7SUFFRDs7Ozs7O09BTUc7SUFDSSxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQWdCLEVBQUUsRUFBVSxFQUFFLE9BQWU7UUFDckUsT0FBTyxRQUFRLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7S0FDNUQ7SUFFRDs7Ozs7O09BTUc7SUFDSSxNQUFNLENBQUMsa0JBQWtCLENBQUMsS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBeUI7Ozs7Ozs7Ozs7UUFDdEYsSUFBSSxNQUFjLENBQUM7UUFDbkIsSUFBSSxPQUFlLENBQUM7UUFDcEIsTUFBTSxLQUFLLEdBQUcsWUFBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU5QixJQUFJLEtBQUssQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2xDLE1BQU0sSUFBSSxzQkFBZSxDQUFDLGdEQUFnRCxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3JGLENBQUM7UUFFRCxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNsQixPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztZQUN4QixNQUFNLGVBQWUsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsZ0JBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLFlBQVksQ0FBQztZQUNsRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ3JCLE1BQU0sSUFBSSxzQkFBZSxDQUFDLHFDQUFxQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzFFLENBQUM7WUFDRCxNQUFNLEdBQUcsZUFBZSxDQUFDO1FBQzNCLENBQUM7YUFBTSxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN4QixNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUN0QixPQUFPLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQztnQkFDeEIsT0FBTyxFQUFFLGFBQWE7Z0JBQ3RCLFFBQVEsRUFBRSxNQUFNO2dCQUNoQixZQUFZLEVBQUUsS0FBSyxDQUFDLE1BQU07YUFDM0IsQ0FBQyxDQUFDO1FBQ0wsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLElBQUksc0JBQWUsQ0FBQyx1Q0FBdUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1RSxDQUFDO1FBRUQsTUFBTSxNQUFPLFNBQVEsZUFBUTtZQUNYLE1BQU0sQ0FBYztZQUNwQixNQUFNLENBQVM7WUFDZixPQUFPLENBQVM7WUFDdkIsUUFBUSxDQUFVO1lBRTNCLFlBQVksUUFBZ0IsRUFBRSxPQUFlO2dCQUMzQyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNqQixJQUFJLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQztnQkFDeEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUM7Z0JBQ3RCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztnQkFDM0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO1lBQ2pDLENBQUM7U0FDRjtRQUVELE9BQU8sSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0tBQ3BDOztBQXpFSCw0QkFpR0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJUmVzb3VyY2UsIFJlc291cmNlLCBBcm5Gb3JtYXQsIFN0YWNrLCBWYWxpZGF0aW9uRXJyb3IgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgVXNlckVuZ2luZSB9IGZyb20gJy4vY29tbW9uJztcblxuLyoqXG4gKiBBY2Nlc3MgY29udHJvbCBjb25maWd1cmF0aW9uIGZvciBFbGFzdGlDYWNoZSB1c2Vycy5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFjY2Vzc0NvbnRyb2wge1xuICAvKipcbiAgICogQ3JlYXRlIGFjY2VzcyBjb250cm9sIGZyb20gYW4gYWNjZXNzIHN0cmluZy5cbiAgICpcbiAgICogQHBhcmFtIGFjY2Vzc1N0cmluZyBUaGUgYWNjZXNzIHN0cmluZyBkZWZpbmluZyB1c2VyIHBlcm1pc3Npb25zLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tQWNjZXNzU3RyaW5nKGFjY2Vzc1N0cmluZzogc3RyaW5nKTogQWNjZXNzQ29udHJvbCB7XG4gICAgcmV0dXJuIG5ldyBBY2Nlc3NDb250cm9sU3RyaW5nKGFjY2Vzc1N0cmluZyk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGFjY2VzcyBzdHJpbmcgdGhhdCBkZWZpbmVzIHVzZXIncyBwZXJtaXNzaW9ucy5cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBhY2Nlc3NTdHJpbmc6IHN0cmluZztcbn1cblxuLyoqXG4gKiBBY2Nlc3MgY29udHJvbCBpbXBsZW1lbnRhdGlvbiB1c2luZyBhIHJhdyBhY2Nlc3Mgc3RyaW5nLlxuICovXG5jbGFzcyBBY2Nlc3NDb250cm9sU3RyaW5nIGV4dGVuZHMgQWNjZXNzQ29udHJvbCB7XG4gIC8qKlxuICAgKiBUaGUgYWNjZXNzIHN0cmluZyB0aGF0IGRlZmluZXMgdXNlcidzIHBlcm1pc3Npb25zLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGFjY2Vzc1N0cmluZzogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKGFjY2Vzc1N0cmluZzogc3RyaW5nKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmFjY2Vzc1N0cmluZyA9IGFjY2Vzc1N0cmluZztcbiAgfVxufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGRlZmluaW5nIGFuIEVsYXN0aUNhY2hlIGJhc2UgdXNlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyQmFzZVByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBlbmdpbmUgdHlwZSBmb3IgdGhlIHVzZXIuXG4gICAqIEVudW0gb3B0aW9uczogVXNlckVuZ2luZS5WQUxLRVksIFVzZXJFbmdpbmUuUkVESVMuXG4gICAqXG4gICAqIEBkZWZhdWx0IFVzZXJFbmdpbmUuVkFMS0VZLlxuICAgKi9cbiAgcmVhZG9ubHkgZW5naW5lPzogVXNlckVuZ2luZTtcbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgdXNlci5cbiAgICovXG4gIHJlYWRvbmx5IHVzZXJJZDogc3RyaW5nO1xuICAvKipcbiAgICogQWNjZXNzIGNvbnRyb2wgY29uZmlndXJhdGlvbiBmb3IgdGhlIHVzZXIuXG4gICAqL1xuICByZWFkb25seSBhY2Nlc3NDb250cm9sOiBBY2Nlc3NDb250cm9sO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYW4gRWxhc3RpQ2FjaGUgYmFzZSB1c2VyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElVc2VyIGV4dGVuZHMgSVJlc291cmNlIHtcbiAgLyoqXG4gICAqIFRoZSB1c2VyJ3MgSUQuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHVzZXJJZDogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGVuZ2luZSBmb3IgdGhlIHVzZXIuXG4gICAqL1xuICByZWFkb25seSBlbmdpbmU/OiBVc2VyRW5naW5lO1xuICAvKipcbiAgICogVGhlIHVzZXIncyBuYW1lLlxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSB1c2VyTmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSB1c2VyJ3MgQVJOLlxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSB1c2VyQXJuOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQXR0cmlidXRlcyBmb3IgaW1wb3J0aW5nIGFuIGV4aXN0aW5nIEVsYXN0aUNhY2hlIHVzZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckJhc2VBdHRyaWJ1dGVzIHtcbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgdXNlci5cbiAgICogT25lIG9mIGB1c2VySWRgIG9yIGB1c2VyQXJuYCBpcyByZXF1aXJlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBkZXJpdmVkIGZyb20gdXNlckFybi5cbiAgICovXG4gIHJlYWRvbmx5IHVzZXJJZD86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBlbmdpbmUgdHlwZSBmb3IgdGhlIHVzZXIuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZW5naW5lIHR5cGUgaXMgdW5rbm93bi5cbiAgICovXG4gIHJlYWRvbmx5IGVuZ2luZT86IFVzZXJFbmdpbmU7XG4gIC8qKlxuICAgKiBUaGUgdXNlcidzIG5hbWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbmFtZSBpcyB1bmtub3duLlxuICAgKi9cbiAgcmVhZG9ubHkgdXNlck5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSB1c2VyLlxuICAgKlxuICAgKiBPbmUgb2YgYHVzZXJJZGAgb3IgYHVzZXJBcm5gIGlzIHJlcXVpcmVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGRlcml2ZWQgZnJvbSB1c2VySWQuXG4gICAqL1xuICByZWFkb25seSB1c2VyQXJuPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIEVsYXN0aUNhY2hlIHVzZXJzLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgVXNlckJhc2UgZXh0ZW5kcyBSZXNvdXJjZSBpbXBsZW1lbnRzIElVc2VyIHtcbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyB1c2VyIGJ5IElELlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgVGhlIHBhcmVudCBjcmVhdGluZyBjb25zdHJ1Y3QgKHVzdWFsbHkgYHRoaXNgKS5cbiAgICogQHBhcmFtIGlkIFRoZSBjb25zdHJ1Y3QncyBuYW1lLlxuICAgKiBAcGFyYW0gdXNlcklkIFRoZSBJRCBvZiB0aGUgZXhpc3RpbmcgdXNlci5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbVVzZXJJZChzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCB1c2VySWQ6IHN0cmluZyk6IElVc2VyIHtcbiAgICByZXR1cm4gVXNlckJhc2UuZnJvbVVzZXJBdHRyaWJ1dGVzKHNjb3BlLCBpZCwgeyB1c2VySWQgfSk7XG4gIH1cblxuICAvKipcbiAgICogSW1wb3J0IGFuIGV4aXN0aW5nIHVzZXIgYnkgQVJOLlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgVGhlIHBhcmVudCBjcmVhdGluZyBjb25zdHJ1Y3QgKHVzdWFsbHkgYHRoaXNgKS5cbiAgICogQHBhcmFtIGlkIFRoZSBjb25zdHJ1Y3QncyBuYW1lLlxuICAgKiBAcGFyYW0gdXNlckFybiBUaGUgQVJOIG9mIHRoZSBleGlzdGluZyB1c2VyLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tVXNlckFybihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCB1c2VyQXJuOiBzdHJpbmcpOiBJVXNlciB7XG4gICAgcmV0dXJuIFVzZXJCYXNlLmZyb21Vc2VyQXR0cmlidXRlcyhzY29wZSwgaWQsIHsgdXNlckFybiB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gZXhpc3RpbmcgdXNlciB1c2luZyBhdHRyaWJ1dGVzLlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgVGhlIHBhcmVudCBjcmVhdGluZyBjb25zdHJ1Y3QgKHVzdWFsbHkgYHRoaXNgKS5cbiAgICogQHBhcmFtIGlkIFRoZSBjb25zdHJ1Y3QncyBuYW1lLlxuICAgKiBAcGFyYW0gYXR0cnMgQSBgVXNlckJhc2VBdHRyaWJ1dGVzYCBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21Vc2VyQXR0cmlidXRlcyhzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBhdHRyczogVXNlckJhc2VBdHRyaWJ1dGVzKTogSVVzZXIge1xuICAgIGxldCB1c2VySWQ6IHN0cmluZztcbiAgICBsZXQgdXNlckFybjogc3RyaW5nO1xuICAgIGNvbnN0IHN0YWNrID0gU3RhY2sub2Yoc2NvcGUpO1xuXG4gICAgaWYgKGF0dHJzLnVzZXJBcm4gJiYgYXR0cnMudXNlcklkKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKCdPbmx5IG9uZSBvZiB1c2VyQXJuIG9yIHVzZXJJZCBjYW4gYmUgcHJvdmlkZWQuJywgc2NvcGUpO1xuICAgIH1cblxuICAgIGlmIChhdHRycy51c2VyQXJuKSB7XG4gICAgICB1c2VyQXJuID0gYXR0cnMudXNlckFybjtcbiAgICAgIGNvbnN0IGV4dHJhY3RlZFVzZXJJZCA9IHN0YWNrLnNwbGl0QXJuKGF0dHJzLnVzZXJBcm4sIEFybkZvcm1hdC5TTEFTSF9SRVNPVVJDRV9OQU1FKS5yZXNvdXJjZU5hbWU7XG4gICAgICBpZiAoIWV4dHJhY3RlZFVzZXJJZCkge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKCdVbmFibGUgdG8gZXh0cmFjdCB1c2VyIGlkIGZyb20gQVJOLicsIHNjb3BlKTtcbiAgICAgIH1cbiAgICAgIHVzZXJJZCA9IGV4dHJhY3RlZFVzZXJJZDtcbiAgICB9IGVsc2UgaWYgKGF0dHJzLnVzZXJJZCkge1xuICAgICAgdXNlcklkID0gYXR0cnMudXNlcklkO1xuICAgICAgdXNlckFybiA9IHN0YWNrLmZvcm1hdEFybih7XG4gICAgICAgIHNlcnZpY2U6ICdlbGFzdGljYWNoZScsXG4gICAgICAgIHJlc291cmNlOiAndXNlcicsXG4gICAgICAgIHJlc291cmNlTmFtZTogYXR0cnMudXNlcklkLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoJ09uZSBvZiB1c2VySWQgb3IgdXNlckFybiBpcyByZXF1aXJlZC4nLCBzY29wZSk7XG4gICAgfVxuXG4gICAgY2xhc3MgSW1wb3J0IGV4dGVuZHMgUmVzb3VyY2UgaW1wbGVtZW50cyBJVXNlciB7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgZW5naW5lPzogVXNlckVuZ2luZTtcbiAgICAgIHB1YmxpYyByZWFkb25seSB1c2VySWQ6IHN0cmluZztcbiAgICAgIHB1YmxpYyByZWFkb25seSB1c2VyQXJuOiBzdHJpbmc7XG4gICAgICByZWFkb25seSB1c2VyTmFtZT86IHN0cmluZztcblxuICAgICAgY29uc3RydWN0b3IoX3VzZXJBcm46IHN0cmluZywgX3VzZXJJZDogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgICAgIHRoaXMudXNlckFybiA9IF91c2VyQXJuO1xuICAgICAgICB0aGlzLnVzZXJJZCA9IF91c2VySWQ7XG4gICAgICAgIHRoaXMuZW5naW5lID0gYXR0cnMuZW5naW5lO1xuICAgICAgICB0aGlzLnVzZXJOYW1lID0gYXR0cnMudXNlck5hbWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBJbXBvcnQodXNlckFybiwgdXNlcklkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgdXNlcidzIElELlxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgdXNlcklkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgZW5naW5lIGZvciB0aGUgdXNlci5cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBlbmdpbmU/OiBVc2VyRW5naW5lO1xuICAvKipcbiAgICogVGhlIHVzZXIncyBuYW1lLlxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgdXNlck5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgdXNlcidzIEFSTi5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IHVzZXJBcm46IHN0cmluZztcbn1cbiJdfQ==
|
|
119
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1iYXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidXNlci1iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsMkNBQTBGO0FBSTFGOztHQUVHO0FBQ0gsTUFBc0IsYUFBYTs7SUFDakM7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFvQjtRQUNqRCxPQUFPLElBQUksbUJBQW1CLENBQUMsWUFBWSxDQUFDLENBQUM7S0FDOUM7O0FBUkgsc0NBY0M7QUFFRDs7R0FFRztBQUNILE1BQU0sbUJBQW9CLFNBQVEsYUFBYTtJQUM3Qzs7T0FFRztJQUNhLFlBQVksQ0FBUztJQUVyQyxZQUFZLFlBQW9CO1FBQzlCLEtBQUssRUFBRSxDQUFDO1FBQ1IsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7S0FDbEM7Q0FDRjtBQW9GRDs7R0FFRztBQUNILE1BQXNCLFFBQVMsU0FBUSxlQUFROztJQUM3Qzs7Ozs7O09BTUc7SUFDSSxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQWdCLEVBQUUsRUFBVSxFQUFFLE1BQWM7UUFDbkUsT0FBTyxRQUFRLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7S0FDM0Q7SUFFRDs7Ozs7O09BTUc7SUFDSSxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQWdCLEVBQUUsRUFBVSxFQUFFLE9BQWU7UUFDckUsT0FBTyxRQUFRLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7S0FDNUQ7SUFFRDs7Ozs7O09BTUc7SUFDSSxNQUFNLENBQUMsa0JBQWtCLENBQUMsS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBeUI7Ozs7Ozs7Ozs7UUFDdEYsSUFBSSxNQUFjLENBQUM7UUFDbkIsSUFBSSxPQUFlLENBQUM7UUFDcEIsTUFBTSxLQUFLLEdBQUcsWUFBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU5QixJQUFJLEtBQUssQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2xDLE1BQU0sSUFBSSxzQkFBZSxDQUFDLGdEQUFnRCxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3JGLENBQUM7UUFFRCxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNsQixPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztZQUN4QixNQUFNLGVBQWUsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsZ0JBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLFlBQVksQ0FBQztZQUNsRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ3JCLE1BQU0sSUFBSSxzQkFBZSxDQUFDLHFDQUFxQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzFFLENBQUM7WUFDRCxNQUFNLEdBQUcsZUFBZSxDQUFDO1FBQzNCLENBQUM7YUFBTSxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN4QixNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUN0QixPQUFPLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQztnQkFDeEIsT0FBTyxFQUFFLGFBQWE7Z0JBQ3RCLFFBQVEsRUFBRSxNQUFNO2dCQUNoQixZQUFZLEVBQUUsS0FBSyxDQUFDLE1BQU07YUFDM0IsQ0FBQyxDQUFDO1FBQ0wsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLElBQUksc0JBQWUsQ0FBQyx1Q0FBdUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1RSxDQUFDO1FBRUQsTUFBTSxNQUFPLFNBQVEsZUFBUTtZQUNYLE1BQU0sQ0FBYztZQUNwQixNQUFNLENBQVM7WUFDZixPQUFPLENBQVM7WUFDdkIsUUFBUSxDQUFVO1lBRTNCLFlBQVksUUFBZ0IsRUFBRSxPQUFlO2dCQUMzQyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNqQixJQUFJLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQztnQkFDeEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUM7Z0JBQ3RCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztnQkFDM0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO1lBQ2pDLENBQUM7U0FDRjtRQUVELE9BQU8sSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0tBQ3BDOztBQXpFSCw0QkFpR0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJUmVzb3VyY2UsIFJlc291cmNlLCBBcm5Gb3JtYXQsIFN0YWNrLCBWYWxpZGF0aW9uRXJyb3IgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgVXNlckVuZ2luZSB9IGZyb20gJy4vY29tbW9uJztcblxuLyoqXG4gKiBBY2Nlc3MgY29udHJvbCBjb25maWd1cmF0aW9uIGZvciBFbGFzdGlDYWNoZSB1c2Vycy5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFjY2Vzc0NvbnRyb2wge1xuICAvKipcbiAgICogQ3JlYXRlIGFjY2VzcyBjb250cm9sIGZyb20gYW4gYWNjZXNzIHN0cmluZy5cbiAgICpcbiAgICogQHBhcmFtIGFjY2Vzc1N0cmluZyBUaGUgYWNjZXNzIHN0cmluZyBkZWZpbmluZyB1c2VyIHBlcm1pc3Npb25zLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tQWNjZXNzU3RyaW5nKGFjY2Vzc1N0cmluZzogc3RyaW5nKTogQWNjZXNzQ29udHJvbCB7XG4gICAgcmV0dXJuIG5ldyBBY2Nlc3NDb250cm9sU3RyaW5nKGFjY2Vzc1N0cmluZyk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGFjY2VzcyBzdHJpbmcgdGhhdCBkZWZpbmVzIHVzZXIncyBwZXJtaXNzaW9ucy5cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBhY2Nlc3NTdHJpbmc6IHN0cmluZztcbn1cblxuLyoqXG4gKiBBY2Nlc3MgY29udHJvbCBpbXBsZW1lbnRhdGlvbiB1c2luZyBhIHJhdyBhY2Nlc3Mgc3RyaW5nLlxuICovXG5jbGFzcyBBY2Nlc3NDb250cm9sU3RyaW5nIGV4dGVuZHMgQWNjZXNzQ29udHJvbCB7XG4gIC8qKlxuICAgKiBUaGUgYWNjZXNzIHN0cmluZyB0aGF0IGRlZmluZXMgdXNlcidzIHBlcm1pc3Npb25zLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGFjY2Vzc1N0cmluZzogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKGFjY2Vzc1N0cmluZzogc3RyaW5nKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmFjY2Vzc1N0cmluZyA9IGFjY2Vzc1N0cmluZztcbiAgfVxufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGRlZmluaW5nIGFuIEVsYXN0aUNhY2hlIGJhc2UgdXNlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyQmFzZVByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBlbmdpbmUgdHlwZSBmb3IgdGhlIHVzZXIuXG4gICAqIEVudW0gb3B0aW9uczogVXNlckVuZ2luZS5WQUxLRVksIFVzZXJFbmdpbmUuUkVESVMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gVXNlckVuZ2luZS5SRURJUyBmb3IgTm9QYXNzd29yZFVzZXIsIFVzZXJFbmdpbmUuVkFMS0VZIGZvciBhbGwgb3RoZXIgdXNlciB0eXBlcy5cbiAgICovXG4gIHJlYWRvbmx5IGVuZ2luZT86IFVzZXJFbmdpbmU7XG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIHVzZXIuXG4gICAqL1xuICByZWFkb25seSB1c2VySWQ6IHN0cmluZztcbiAgLyoqXG4gICAqIEFjY2VzcyBjb250cm9sIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSB1c2VyLlxuICAgKi9cbiAgcmVhZG9ubHkgYWNjZXNzQ29udHJvbDogQWNjZXNzQ29udHJvbDtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGFuIEVsYXN0aUNhY2hlIGJhc2UgdXNlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJVXNlciBleHRlbmRzIElSZXNvdXJjZSB7XG4gIC8qKlxuICAgKiBUaGUgdXNlcidzIElELlxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSB1c2VySWQ6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBlbmdpbmUgZm9yIHRoZSB1c2VyLlxuICAgKi9cbiAgcmVhZG9ubHkgZW5naW5lPzogVXNlckVuZ2luZTtcbiAgLyoqXG4gICAqIFRoZSB1c2VyJ3MgbmFtZS5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgdXNlck5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgdXNlcidzIEFSTi5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgdXNlckFybjogc3RyaW5nO1xufVxuXG4vKipcbiAqIEF0dHJpYnV0ZXMgZm9yIGltcG9ydGluZyBhbiBleGlzdGluZyBFbGFzdGlDYWNoZSB1c2VyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJCYXNlQXR0cmlidXRlcyB7XG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIHVzZXIuXG4gICAqIE9uZSBvZiBgdXNlcklkYCBvciBgdXNlckFybmAgaXMgcmVxdWlyZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZGVyaXZlZCBmcm9tIHVzZXJBcm4uXG4gICAqL1xuICByZWFkb25seSB1c2VySWQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgZW5naW5lIHR5cGUgZm9yIHRoZSB1c2VyLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGVuZ2luZSB0eXBlIGlzIHVua25vd24uXG4gICAqL1xuICByZWFkb25seSBlbmdpbmU/OiBVc2VyRW5naW5lO1xuICAvKipcbiAgICogVGhlIHVzZXIncyBuYW1lLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5hbWUgaXMgdW5rbm93bi5cbiAgICovXG4gIHJlYWRvbmx5IHVzZXJOYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgdXNlci5cbiAgICpcbiAgICogT25lIG9mIGB1c2VySWRgIG9yIGB1c2VyQXJuYCBpcyByZXF1aXJlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBkZXJpdmVkIGZyb20gdXNlcklkLlxuICAgKi9cbiAgcmVhZG9ubHkgdXNlckFybj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBFbGFzdGlDYWNoZSB1c2Vycy5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFVzZXJCYXNlIGV4dGVuZHMgUmVzb3VyY2UgaW1wbGVtZW50cyBJVXNlciB7XG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gZXhpc3RpbmcgdXNlciBieSBJRC5cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIFRoZSBwYXJlbnQgY3JlYXRpbmcgY29uc3RydWN0ICh1c3VhbGx5IGB0aGlzYCkuXG4gICAqIEBwYXJhbSBpZCBUaGUgY29uc3RydWN0J3MgbmFtZS5cbiAgICogQHBhcmFtIHVzZXJJZCBUaGUgSUQgb2YgdGhlIGV4aXN0aW5nIHVzZXIuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21Vc2VySWQoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgdXNlcklkOiBzdHJpbmcpOiBJVXNlciB7XG4gICAgcmV0dXJuIFVzZXJCYXNlLmZyb21Vc2VyQXR0cmlidXRlcyhzY29wZSwgaWQsIHsgdXNlcklkIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyB1c2VyIGJ5IEFSTi5cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIFRoZSBwYXJlbnQgY3JlYXRpbmcgY29uc3RydWN0ICh1c3VhbGx5IGB0aGlzYCkuXG4gICAqIEBwYXJhbSBpZCBUaGUgY29uc3RydWN0J3MgbmFtZS5cbiAgICogQHBhcmFtIHVzZXJBcm4gVGhlIEFSTiBvZiB0aGUgZXhpc3RpbmcgdXNlci5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbVVzZXJBcm4oc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgdXNlckFybjogc3RyaW5nKTogSVVzZXIge1xuICAgIHJldHVybiBVc2VyQmFzZS5mcm9tVXNlckF0dHJpYnV0ZXMoc2NvcGUsIGlkLCB7IHVzZXJBcm4gfSk7XG4gIH1cblxuICAvKipcbiAgICogSW1wb3J0IGFuIGV4aXN0aW5nIHVzZXIgdXNpbmcgYXR0cmlidXRlcy5cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIFRoZSBwYXJlbnQgY3JlYXRpbmcgY29uc3RydWN0ICh1c3VhbGx5IGB0aGlzYCkuXG4gICAqIEBwYXJhbSBpZCBUaGUgY29uc3RydWN0J3MgbmFtZS5cbiAgICogQHBhcmFtIGF0dHJzIEEgYFVzZXJCYXNlQXR0cmlidXRlc2Agb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tVXNlckF0dHJpYnV0ZXMoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgYXR0cnM6IFVzZXJCYXNlQXR0cmlidXRlcyk6IElVc2VyIHtcbiAgICBsZXQgdXNlcklkOiBzdHJpbmc7XG4gICAgbGV0IHVzZXJBcm46IHN0cmluZztcbiAgICBjb25zdCBzdGFjayA9IFN0YWNrLm9mKHNjb3BlKTtcblxuICAgIGlmIChhdHRycy51c2VyQXJuICYmIGF0dHJzLnVzZXJJZCkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcignT25seSBvbmUgb2YgdXNlckFybiBvciB1c2VySWQgY2FuIGJlIHByb3ZpZGVkLicsIHNjb3BlKTtcbiAgICB9XG5cbiAgICBpZiAoYXR0cnMudXNlckFybikge1xuICAgICAgdXNlckFybiA9IGF0dHJzLnVzZXJBcm47XG4gICAgICBjb25zdCBleHRyYWN0ZWRVc2VySWQgPSBzdGFjay5zcGxpdEFybihhdHRycy51c2VyQXJuLCBBcm5Gb3JtYXQuU0xBU0hfUkVTT1VSQ0VfTkFNRSkucmVzb3VyY2VOYW1lO1xuICAgICAgaWYgKCFleHRyYWN0ZWRVc2VySWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcignVW5hYmxlIHRvIGV4dHJhY3QgdXNlciBpZCBmcm9tIEFSTi4nLCBzY29wZSk7XG4gICAgICB9XG4gICAgICB1c2VySWQgPSBleHRyYWN0ZWRVc2VySWQ7XG4gICAgfSBlbHNlIGlmIChhdHRycy51c2VySWQpIHtcbiAgICAgIHVzZXJJZCA9IGF0dHJzLnVzZXJJZDtcbiAgICAgIHVzZXJBcm4gPSBzdGFjay5mb3JtYXRBcm4oe1xuICAgICAgICBzZXJ2aWNlOiAnZWxhc3RpY2FjaGUnLFxuICAgICAgICByZXNvdXJjZTogJ3VzZXInLFxuICAgICAgICByZXNvdXJjZU5hbWU6IGF0dHJzLnVzZXJJZCxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKCdPbmUgb2YgdXNlcklkIG9yIHVzZXJBcm4gaXMgcmVxdWlyZWQuJywgc2NvcGUpO1xuICAgIH1cblxuICAgIGNsYXNzIEltcG9ydCBleHRlbmRzIFJlc291cmNlIGltcGxlbWVudHMgSVVzZXIge1xuICAgICAgcHVibGljIHJlYWRvbmx5IGVuZ2luZT86IFVzZXJFbmdpbmU7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgdXNlcklkOiBzdHJpbmc7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgdXNlckFybjogc3RyaW5nO1xuICAgICAgcmVhZG9ubHkgdXNlck5hbWU/OiBzdHJpbmc7XG5cbiAgICAgIGNvbnN0cnVjdG9yKF91c2VyQXJuOiBzdHJpbmcsIF91c2VySWQ6IHN0cmluZykge1xuICAgICAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgICAgICB0aGlzLnVzZXJBcm4gPSBfdXNlckFybjtcbiAgICAgICAgdGhpcy51c2VySWQgPSBfdXNlcklkO1xuICAgICAgICB0aGlzLmVuZ2luZSA9IGF0dHJzLmVuZ2luZTtcbiAgICAgICAgdGhpcy51c2VyTmFtZSA9IGF0dHJzLnVzZXJOYW1lO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgSW1wb3J0KHVzZXJBcm4sIHVzZXJJZCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHVzZXIncyBJRC5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IHVzZXJJZDogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGVuZ2luZSBmb3IgdGhlIHVzZXIuXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgZW5naW5lPzogVXNlckVuZ2luZTtcbiAgLyoqXG4gICAqIFRoZSB1c2VyJ3MgbmFtZS5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IHVzZXJOYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHVzZXIncyBBUk4uXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSB1c2VyQXJuOiBzdHJpbmc7XG59XG4iXX0=
|
package/lib/user-group.js
CHANGED
|
@@ -47,7 +47,7 @@ const ELASTICACHE_USERGROUP_SYMBOL = Symbol.for('@aws-cdk/aws-elasticache.UserGr
|
|
|
47
47
|
* Base class for UserGroup constructs
|
|
48
48
|
*/
|
|
49
49
|
class UserGroupBase extends core_1.Resource {
|
|
50
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-elasticache-alpha.UserGroupBase", version: "2.
|
|
50
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-elasticache-alpha.UserGroupBase", version: "2.234.0-alpha.0" };
|
|
51
51
|
/**
|
|
52
52
|
* Add a user to this user group
|
|
53
53
|
*
|
|
@@ -90,7 +90,7 @@ let UserGroup = (() => {
|
|
|
90
90
|
UserGroup = _classThis = _classDescriptor.value;
|
|
91
91
|
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
92
92
|
}
|
|
93
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-elasticache-alpha.UserGroup", version: "2.
|
|
93
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-elasticache-alpha.UserGroup", version: "2.234.0-alpha.0" };
|
|
94
94
|
/**
|
|
95
95
|
* Uniquely identifies this class
|
|
96
96
|
*/
|
|
@@ -211,8 +211,8 @@ let UserGroup = (() => {
|
|
|
211
211
|
(0, metadata_resource_1.addConstructMetadata)(this, props);
|
|
212
212
|
this.engine = props.engine ?? common_1.UserEngine.VALKEY;
|
|
213
213
|
this.userGroupName = props.userGroupName ?? core_1.Lazy.string({
|
|
214
|
-
//
|
|
215
|
-
produce: () => core_1.Names.
|
|
214
|
+
// ElastiCache is allowing only uppercase and max 40 characters for user group id
|
|
215
|
+
produce: () => core_1.Names.uniqueResourceName(this, { maxLength: 40 }).toLocaleLowerCase(),
|
|
216
216
|
});
|
|
217
217
|
if (props.users) {
|
|
218
218
|
this._users.push(...props.users);
|
|
@@ -295,4 +295,4 @@ let UserGroup = (() => {
|
|
|
295
295
|
return UserGroup = _classThis;
|
|
296
296
|
})();
|
|
297
297
|
exports.UserGroup = UserGroup;
|
|
298
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1ncm91cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInVzZXItZ3JvdXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsaUVBQTJEO0FBQzNELDJDQUFnSTtBQUNoSSw4RUFBOEY7QUFDOUYsMEVBQTBFO0FBRTFFLHFDQUFzQztBQUd0QyxNQUFNLDRCQUE0QixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsb0NBQW9DLENBQUMsQ0FBQztBQTBEdEY7O0dBRUc7QUFDSCxNQUFzQixhQUFjLFNBQVEsZUFBUTs7SUFvQmxEOzs7O09BSUc7SUFDSSxPQUFPLENBQUMsS0FBWTs7Ozs7Ozs7OztRQUN6QixNQUFNLElBQUksOEJBQXVCLENBQUMsbUdBQW1HLENBQUMsQ0FBQztLQUN4STs7QUEzQkgsc0NBNEJDO0FBb0NEOzs7O0dBSUc7SUFFVSxTQUFTOzRCQURyQixvQ0FBa0I7Ozs7c0JBQ1ksYUFBYTs7O3lCQUFyQixTQUFRLFdBQWE7Ozs7bUNBOEx6QyxJQUFBLGtDQUFjLEdBQUU7WUFDakIsd0tBQU8sT0FBTyw2REFHYjtZQWxNSCw2S0FtTUM7Ozs7O1FBbE1DOztXQUVHO1FBQ0ksTUFBTSxDQUFVLHFCQUFxQixHQUFXLHVDQUF1QyxDQUFDO1FBRS9GOztXQUVHO1FBQ0ksTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFNO1lBQzlCLE9BQU8sQ0FBQyxLQUFLLElBQUksSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxJQUFJLDRCQUE0QixJQUFJLENBQUMsQ0FBQztTQUNuRjtRQUVEOzs7Ozs7V0FNRztRQUNJLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxLQUFnQixFQUFFLEVBQVUsRUFBRSxhQUFxQjtZQUNqRixPQUFPLFNBQVMsQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQztTQUN4RTtRQUVEOzs7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RCxFQUFFLElBQUksQ0FBQyxDQUFDO29CQUNwRixDQUFDO2dCQUNILENBQUMsQ0FBQyxDQUFDO2dCQUNILE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxTQUFTLENBQUMsQ0FBQztnQkFDN0UsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO29CQUNwQixNQUFNLElBQUksc0JBQWUsQ0FBQyx3RUFBd0UsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDNUcsQ0FBQztZQUNILENBQUM7U0FDRjtRQUVEOzs7O1dBSUc7UUFFSSxPQUFPLENBQUMsSUFBVzs7Ozs7Ozs7OztZQUN4QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN2QixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDOUI7O1lBbE1VLHVEQUFTOzs7OztBQUFULDhCQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2ZuVXNlckdyb3VwIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWVsYXN0aWNhY2hlJztcbmltcG9ydCB7IElSZXNvdXJjZSwgUmVzb3VyY2UsIEFybkZvcm1hdCwgU3RhY2ssIExhenksIFZhbGlkYXRpb25FcnJvciwgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IsIE5hbWVzIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZSc7XG5pbXBvcnQgeyBhZGRDb25zdHJ1Y3RNZXRhZGF0YSwgTWV0aG9kTWV0YWRhdGEgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9tZXRhZGF0YS1yZXNvdXJjZSc7XG5pbXBvcnQgeyBwcm9wZXJ0eUluamVjdGFibGUgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9wcm9wLWluamVjdGFibGUnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBVc2VyRW5naW5lIH0gZnJvbSAnLi9jb21tb24nO1xuaW1wb3J0IHsgSVVzZXIgfSBmcm9tICcuL3VzZXItYmFzZSc7XG5cbmNvbnN0IEVMQVNUSUNBQ0hFX1VTRVJHUk9VUF9TWU1CT0wgPSBTeW1ib2wuZm9yKCdAYXdzLWNkay9hd3MtZWxhc3RpY2FjaGUuVXNlckdyb3VwJyk7XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgZGVmaW5pbmcgYW4gRWxhc3RpQ2FjaGUgVXNlckdyb3VwXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckdyb3VwUHJvcHMge1xuICAvKipcbiAgICogRW5mb3JjZXMgYSBwYXJ0aWN1bGFyIHBoeXNpY2FsIHVzZXIgZ3JvdXAgbmFtZS5cbiAgICogQGRlZmF1bHQgPGdlbmVyYXRlZD5cbiAgICovXG4gIHJlYWRvbmx5IHVzZXJHcm91cE5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgZW5naW5lIHR5cGUgZm9yIHRoZSB1c2VyIGdyb3VwXG4gICAqIEVudW0gb3B0aW9uczogVXNlckVuZ2luZS5WQUxLRVksIFVzZXJFbmdpbmUuUkVESVNcbiAgICpcbiAgICogQGRlZmF1bHQgVXNlckVuZ2luZS5WQUxLRVlcbiAgICovXG4gIHJlYWRvbmx5IGVuZ2luZT86IFVzZXJFbmdpbmU7XG4gIC8qKlxuICAgKiBMaXN0IG9mIHVzZXJzIGluc2lkZSB0aGUgdXNlciBncm91cFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIHVzZXJzXG4gICAqL1xuICByZWFkb25seSB1c2Vycz86IElVc2VyW107XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhbiBFbGFzdGlDYWNoZSBVc2VyR3JvdXBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJVXNlckdyb3VwIGV4dGVuZHMgSVJlc291cmNlIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSB1c2VyIGdyb3VwXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHVzZXJHcm91cE5hbWU6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBlbmdpbmUgdHlwZSBmb3IgdGhlIHVzZXIgZ3JvdXBcbiAgICovXG4gIHJlYWRvbmx5IGVuZ2luZT86IFVzZXJFbmdpbmU7XG4gIC8qKlxuICAgKiBMaXN0IG9mIHVzZXJzIGluIHRoZSB1c2VyIGdyb3VwXG4gICAqL1xuICByZWFkb25seSB1c2Vycz86IElVc2VyW107XG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSB1c2VyIGdyb3VwXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHVzZXJHcm91cEFybjogc3RyaW5nO1xuICAvKipcbiAgICogQWRkIGEgdXNlciB0byB0aGlzIHVzZXIgZ3JvdXBcbiAgICpcbiAgICogQHBhcmFtIHVzZXIgVGhlIHVzZXIgdG8gYWRkXG4gICAqL1xuICBhZGRVc2VyKHVzZXI6IElVc2VyKTogdm9pZDtcbn1cblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBVc2VyR3JvdXAgY29uc3RydWN0c1xuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgVXNlckdyb3VwQmFzZSBleHRlbmRzIFJlc291cmNlIGltcGxlbWVudHMgSVVzZXJHcm91cCB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgdXNlciBncm91cFxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgdXNlckdyb3VwTmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGVuZ2luZSB0eXBlIGZvciB0aGUgdXNlciBncm91cFxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGVuZ2luZT86IFVzZXJFbmdpbmU7XG4gIC8qKlxuICAgKiBMaXN0IG9mIHVzZXJzIGluIHRoZSB1c2VyIGdyb3VwXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgdXNlcnM/OiBJVXNlcltdO1xuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgdXNlciBncm91cFxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgdXNlckdyb3VwQXJuOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBBZGQgYSB1c2VyIHRvIHRoaXMgdXNlciBncm91cFxuICAgKlxuICAgKiBAcGFyYW0gX3VzZXIgVGhlIHVzZXIgdG8gYWRkXG4gICAqL1xuICBwdWJsaWMgYWRkVXNlcihfdXNlcjogSVVzZXIpOiB2b2lkIHtcbiAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IoJ0Nhbm5vdCBhZGQgdXNlcnMgdG8gYW4gaW1wb3J0ZWQgVXNlckdyb3VwLiBPbmx5IFVzZXJHcm91cHMgY3JlYXRlZCBpbiB0aGlzIHN0YWNrIGNhbiBiZSBtb2RpZmllZC4nKTtcbiAgfVxufVxuXG4vKipcbiAqIEF0dHJpYnV0ZXMgdGhhdCBjYW4gYmUgc3BlY2lmaWVkIHdoZW4gaW1wb3J0aW5nIGEgVXNlckdyb3VwXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckdyb3VwQXR0cmlidXRlcyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgdXNlciBncm91cFxuICAgKlxuICAgKiBPbmUgb2YgYHVzZXJHcm91cE5hbWVgIG9yIGB1c2VyR3JvdXBBcm5gIGlzIHJlcXVpcmVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGRlcml2ZWQgZnJvbSB1c2VyR3JvdXBBcm5cbiAgICovXG4gIHJlYWRvbmx5IHVzZXJHcm91cE5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgZW5naW5lIHR5cGUgZm9yIHRoZSB1c2VyIGdyb3VwXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZW5naW5lIHR5cGUgaXMgdW5rbm93blxuICAgKi9cbiAgcmVhZG9ubHkgZW5naW5lPzogVXNlckVuZ2luZTtcbiAgLyoqXG4gICAqIExpc3Qgb2YgdXNlcnMgaW4gdGhlIHVzZXIgZ3JvdXBcbiAgICpcbiAgICogQGRlZmF1bHQgLSB1c2VycyBhcmUgdW5rbm93blxuICAgKi9cbiAgcmVhZG9ubHkgdXNlcnM/OiBJVXNlcltdO1xuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgdXNlciBncm91cFxuICAgKlxuICAgKiBPbmUgb2YgYHVzZXJHcm91cE5hbWVgIG9yIGB1c2VyR3JvdXBBcm5gIGlzIHJlcXVpcmVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGRlcml2ZWQgZnJvbSB1c2VyR3JvdXBOYW1lXG4gICAqL1xuICByZWFkb25seSB1c2VyR3JvdXBBcm4/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQW4gRWxhc3RpQ2FjaGUgVXNlckdyb3VwXG4gKlxuICogQHJlc291cmNlIEFXUzo6RWxhc3RpQ2FjaGU6OlVzZXJHcm91cFxuICovXG5AcHJvcGVydHlJbmplY3RhYmxlXG5leHBvcnQgY2xhc3MgVXNlckdyb3VwIGV4dGVuZHMgVXNlckdyb3VwQmFzZSB7XG4gIC8qKlxuICAgKiBVbmlxdWVseSBpZGVudGlmaWVzIHRoaXMgY2xhc3NcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJPUEVSVFlfSU5KRUNUSU9OX0lEOiBzdHJpbmcgPSAnYXdzLWNkay1saWIuYXdzLWVsYXN0aWNhY2hlLlVzZXJHcm91cCc7XG5cbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIHRoZSBnaXZlbiBvYmplY3QgaXMgYSBgVXNlckdyb3VwYFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBpc1VzZXJHcm91cCh4OiBhbnkpOiB4IGlzIFVzZXJHcm91cCB7XG4gICAgcmV0dXJuIHggIT09IG51bGwgJiYgdHlwZW9mICh4KSA9PT0gJ29iamVjdCcgJiYgRUxBU1RJQ0FDSEVfVVNFUkdST1VQX1NZTUJPTCBpbiB4O1xuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyB1c2VyIGdyb3VwIGJ5IG5hbWVcbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIFRoZSBwYXJlbnQgY3JlYXRpbmcgY29uc3RydWN0ICh1c3VhbGx5IGB0aGlzYClcbiAgICogQHBhcmFtIGlkIFRoZSBjb25zdHJ1Y3QncyBuYW1lXG4gICAqIEBwYXJhbSB1c2VyR3JvdXBOYW1lIFRoZSBuYW1lIG9mIHRoZSBleGlzdGluZyB1c2VyIGdyb3VwXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21Vc2VyR3JvdXBOYW1lKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHVzZXJHcm91cE5hbWU6IHN0cmluZyk6IElVc2VyR3JvdXAge1xuICAgIHJldHVybiBVc2VyR3JvdXAuZnJvbVVzZXJHcm91cEF0dHJpYnV0ZXMoc2NvcGUsIGlkLCB7IHVzZXJHcm91cE5hbWUgfSk7XG4gIH1cblxuICAvKipcbiAgICogSW1wb3J0IGFuIGV4aXN0aW5nIHVzZXIgZ3JvdXAgYnkgQVJOXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSBUaGUgcGFyZW50IGNyZWF0aW5nIGNvbnN0cnVjdCAodXN1YWxseSBgdGhpc2ApXG4gICAqIEBwYXJhbSBpZCBUaGUgY29uc3RydWN0J3MgbmFtZVxuICAgKiBAcGFyYW0gdXNlckdyb3VwQXJuIFRoZSBBUk4gb2YgdGhlIGV4aXN0aW5nIHVzZXIgZ3JvdXBcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbVVzZXJHcm91cEFybihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCB1c2VyR3JvdXBBcm46IHN0cmluZyk6IElVc2VyR3JvdXAge1xuICAgIHJldHVybiBVc2VyR3JvdXAuZnJvbVVzZXJHcm91cEF0dHJpYnV0ZXMoc2NvcGUsIGlkLCB7IHVzZXJHcm91cEFybiB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gZXhpc3RpbmcgdXNlciBncm91cCB1c2luZyBhdHRyaWJ1dGVzXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSBUaGUgcGFyZW50IGNyZWF0aW5nIGNvbnN0cnVjdCAodXN1YWxseSBgdGhpc2ApXG4gICAqIEBwYXJhbSBpZCBUaGUgY29uc3RydWN0J3MgbmFtZVxuICAgKiBAcGFyYW0gYXR0cnMgQSBgVXNlckdyb3VwQXR0cmlidXRlc2Agb2JqZWN0XG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21Vc2VyR3JvdXBBdHRyaWJ1dGVzKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGF0dHJzOiBVc2VyR3JvdXBBdHRyaWJ1dGVzKTogSVVzZXJHcm91cCB7XG4gICAgbGV0IHVzZXJHcm91cE5hbWU6IHN0cmluZztcbiAgICBsZXQgdXNlckdyb3VwQXJuOiBzdHJpbmc7XG4gICAgY29uc3Qgc3RhY2sgPSBTdGFjay5vZihzY29wZSk7XG5cbiAgICBpZiAoYXR0cnMudXNlckdyb3VwQXJuICYmIGF0dHJzLnVzZXJHcm91cE5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoJ09ubHkgb25lIG9mIHVzZXJHcm91cEFybiBvciB1c2VyR3JvdXBOYW1lIGNhbiBiZSBwcm92aWRlZC4nLCBzY29wZSk7XG4gICAgfVxuXG4gICAgaWYgKGF0dHJzLnVzZXJHcm91cEFybikge1xuICAgICAgdXNlckdyb3VwQXJuID0gYXR0cnMudXNlckdyb3VwQXJuO1xuICAgICAgY29uc3QgZXh0cmFjdGVkVXNlckdyb3VwTmFtZSA9IHN0YWNrLnNwbGl0QXJuKGF0dHJzLnVzZXJHcm91cEFybiwgQXJuRm9ybWF0LlNMQVNIX1JFU09VUkNFX05BTUUpLnJlc291cmNlTmFtZTtcbiAgICAgIGlmICghZXh0cmFjdGVkVXNlckdyb3VwTmFtZSkge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKCdVbmFibGUgdG8gZXh0cmFjdCB1c2VyIGdyb3VwIG5hbWUgZnJvbSBBUk4uJywgc2NvcGUpO1xuICAgICAgfVxuICAgICAgdXNlckdyb3VwTmFtZSA9IGV4dHJhY3RlZFVzZXJHcm91cE5hbWU7XG4gICAgfSBlbHNlIGlmIChhdHRycy51c2VyR3JvdXBOYW1lKSB7XG4gICAgICB1c2VyR3JvdXBOYW1lID0gYXR0cnMudXNlckdyb3VwTmFtZTtcbiAgICAgIHVzZXJHcm91cEFybiA9IHN0YWNrLmZvcm1hdEFybih7XG4gICAgICAgIHNlcnZpY2U6ICdlbGFzdGljYWNoZScsXG4gICAgICAgIHJlc291cmNlOiAndXNlcmdyb3VwJyxcbiAgICAgICAgcmVzb3VyY2VOYW1lOiBhdHRycy51c2VyR3JvdXBOYW1lLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoJ09uZSBvZiB1c2VyR3JvdXBOYW1lIG9yIHVzZXJHcm91cEFybiBpcyByZXF1aXJlZC4nLCBzY29wZSk7XG4gICAgfVxuXG4gICAgY2xhc3MgSW1wb3J0IGV4dGVuZHMgVXNlckdyb3VwQmFzZSB7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgZW5naW5lPzogVXNlckVuZ2luZTtcbiAgICAgIHB1YmxpYyByZWFkb25seSB1c2VyR3JvdXBOYW1lOiBzdHJpbmc7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgdXNlckdyb3VwQXJuOiBzdHJpbmc7XG5cbiAgICAgIHB1YmxpYyBnZXQgdXNlcnMoKTogSVVzZXJbXSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiBhdHRycy51c2VycyA/IFsuLi5hdHRycy51c2Vyc10gOiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0cnVjdG9yKF91c2VyR3JvdXBBcm46IHN0cmluZywgX3VzZXJHcm91cE5hbWU6IHN0cmluZykge1xuICAgICAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgICAgICB0aGlzLnVzZXJHcm91cEFybiA9IF91c2VyR3JvdXBBcm47XG4gICAgICAgIHRoaXMudXNlckdyb3VwTmFtZSA9IF91c2VyR3JvdXBOYW1lO1xuICAgICAgICB0aGlzLmVuZ2luZSA9IGF0dHJzLmVuZ2luZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEltcG9ydCh1c2VyR3JvdXBBcm4sIHVzZXJHcm91cE5hbWUpO1xuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IGVuZ2luZT86IFVzZXJFbmdpbmU7XG4gIHB1YmxpYyByZWFkb25seSB1c2VyR3JvdXBOYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3VzZXJzOiBJVXNlcltdID0gW107XG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSB1c2VyIGdyb3VwXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB1c2VyR3JvdXBBcm46IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBzdGF0dXMgb2YgdGhlIHVzZXIgZ3JvdXBcbiAgICogQ2FuIGJlICdjcmVhdGluZycsICdhY3RpdmUnLCAnbW9kaWZ5aW5nJywgJ2RlbGV0aW5nJ1xuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdXNlckdyb3VwU3RhdHVzOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSByZXNvdXJjZTogQ2ZuVXNlckdyb3VwO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBVc2VyR3JvdXBQcm9wcyA9IHt9KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7fSk7XG5cbiAgICAvLyBFbmhhbmNlZCBDREsgQW5hbHl0aWNzIFRlbGVtZXRyeVxuICAgIGFkZENvbnN0cnVjdE1ldGFkYXRhKHRoaXMsIHByb3BzKTtcblxuICAgIHRoaXMuZW5naW5lID0gcHJvcHMuZW5naW5lID8/IFVzZXJFbmdpbmUuVkFMS0VZO1xuICAgIHRoaXMudXNlckdyb3VwTmFtZSA9IHByb3BzLnVzZXJHcm91cE5hbWUgPz8gTGF6eS5zdHJpbmcoe1xuICAgICAgLy8gRWxhc3RpY2FjaGUgbm90IGFsbG93aW5nIHVwcGVyY2FzZSB1c2VyIGdyb3VwIGlkXG4gICAgICBwcm9kdWNlOiAoKSA9PiBOYW1lcy51bmlxdWVJZCh0aGlzKS50b0xvY2FsZUxvd2VyQ2FzZSgpLFxuICAgIH0pO1xuXG4gICAgaWYgKHByb3BzLnVzZXJzKSB7XG4gICAgICB0aGlzLl91c2Vycy5wdXNoKC4uLnByb3BzLnVzZXJzKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlc291cmNlID0gbmV3IENmblVzZXJHcm91cCh0aGlzLCAnUmVzb3VyY2UnLCB7XG4gICAgICBlbmdpbmU6IHRoaXMuZW5naW5lLFxuICAgICAgdXNlckdyb3VwSWQ6IHRoaXMudXNlckdyb3VwTmFtZSxcbiAgICAgIHVzZXJJZHM6IExhenkubGlzdCh7XG4gICAgICAgIHByb2R1Y2U6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLnZhbGlkYXRlVXNlcnMoKTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fdXNlcnMubWFwKHVzZXIgPT4gdXNlci51c2VySWQpO1xuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgfSk7XG5cbiAgICBpZiAocHJvcHMudXNlcnMpIHtcbiAgICAgIHByb3BzLnVzZXJzLmZvckVhY2godXNlciA9PiB0aGlzLmFkZFVzZXJEZXBlbmRlbmN5KHVzZXIpKTtcbiAgICB9XG5cbiAgICB0aGlzLnVzZXJHcm91cEFybiA9IHRoaXMucmVzb3VyY2UuYXR0ckFybjtcbiAgICB0aGlzLnVzZXJHcm91cFN0YXR1cyA9IHRoaXMucmVzb3VyY2UuYXR0clN0YXR1cztcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBFTEFTVElDQUNIRV9VU0VSR1JPVVBfU1lNQk9MLCB7IHZhbHVlOiB0cnVlIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIENsb3VkRm9ybWF0aW9uIGRlcGVuZGVuY3kgb24gdGhlIHVzZXIgcmVzb3VyY2UgdG8gZW5zdXJlIHByb3BlciBjcmVhdGlvbiBvcmRlci5cbiAgICovXG4gIHByaXZhdGUgYWRkVXNlckRlcGVuZGVuY3kodXNlcjogSVVzZXIpOiB2b2lkIHtcbiAgICB0aGlzLnJlc291cmNlLm5vZGUuYWRkRGVwZW5kZW5jeSh1c2VyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcnJheSBvZiB1c2VycyBpbiB0aGUgdXNlciBncm91cFxuICAgKlxuICAgKiBEbyBub3QgcHVzaCBkaXJlY3RseSB0byB0aGlzIGFycmF5LlxuICAgKiBVc2UgYWRkVXNlcigpIGluc3RlYWQgdG8gZW5zdXJlIHByb3BlciB2YWxpZGF0aW9uIGFuZCBkZXBlbmRlbmN5IG1hbmFnZW1lbnQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHVzZXJzKCk6IElVc2VyW10gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl91c2VycztcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdXNlcnMgaW4gdGhlIHVzZXIgZ3JvdXAgZm9yIGR1cGxpY2F0ZSB1c2VybmFtZXMgYW5kIFJlZGlzLXNwZWNpZmljIHJlcXVpcmVtZW50cy5cbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVVc2VycygpOiB2b2lkIHtcbiAgICBjb25zdCB1c2VyTmFtZXMgPSB0aGlzLl91c2Vycy5tYXAodXNlciA9PiB1c2VyLnVzZXJOYW1lKTtcbiAgICBjb25zdCBkdXBsaWNhdGVzID0gdXNlck5hbWVzLmZpbHRlcigobmFtZSwgaW5kZXgpID0+IHVzZXJOYW1lcy5pbmRleE9mKG5hbWUpICE9PSBpbmRleCk7XG4gICAgaWYgKGR1cGxpY2F0ZXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcignVXNlciBncm91cCBjYW5ub3QgaGF2ZSB1c2VycyB3aXRoIHRoZSBzYW1lIHVzZXIgbmFtZS4nLCB0aGlzKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5lbmdpbmUgPT09IFVzZXJFbmdpbmUuUkVESVMpIHtcbiAgICAgIHRoaXMuX3VzZXJzLmZvckVhY2godXNlciA9PiB7XG4gICAgICAgIGlmICh1c2VyLmVuZ2luZSAhPT0gVXNlckVuZ2luZS5SRURJUykge1xuICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoJ1JlZGlzIHVzZXIgZ3JvdXAgY2FuIG9ubHkgY29udGFpbiBSZWRpcyB1c2Vycy4nLCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjb25zdCBoYXNEZWZhdWx0VXNlciA9IHRoaXMuX3VzZXJzLnNvbWUodXNlciA9PiB1c2VyLnVzZXJOYW1lID09PSAnZGVmYXVsdCcpO1xuICAgICAgaWYgKCFoYXNEZWZhdWx0VXNlcikge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKCdSZWRpcyB1c2VyIGdyb3VwcyBuZWVkIHRvIGNvbnRhaW4gYSB1c2VyIHdpdGggdGhlIHVzZXIgbmFtZSBcImRlZmF1bHRcIi4nLCB0aGlzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgdXNlciB0byB0aGlzIHVzZXIgZ3JvdXBcbiAgICpcbiAgICogQHBhcmFtIHVzZXIgVGhlIHVzZXIgdG8gYWRkIHRvIHRoZSBncm91cFxuICAgKi9cbiAgQE1ldGhvZE1ldGFkYXRhKClcbiAgcHVibGljIGFkZFVzZXIodXNlcjogSVVzZXIpOiB2b2lkIHtcbiAgICB0aGlzLl91c2Vycy5wdXNoKHVzZXIpO1xuICAgIHRoaXMuYWRkVXNlckRlcGVuZGVuY3kodXNlcik7XG4gIH1cbn1cbiJdfQ==
|
|
298
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1ncm91cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInVzZXItZ3JvdXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsaUVBQTJEO0FBQzNELDJDQUFnSTtBQUNoSSw4RUFBOEY7QUFDOUYsMEVBQTBFO0FBRTFFLHFDQUFzQztBQUd0QyxNQUFNLDRCQUE0QixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsb0NBQW9DLENBQUMsQ0FBQztBQTBEdEY7O0dBRUc7QUFDSCxNQUFzQixhQUFjLFNBQVEsZUFBUTs7SUFvQmxEOzs7O09BSUc7SUFDSSxPQUFPLENBQUMsS0FBWTs7Ozs7Ozs7OztRQUN6QixNQUFNLElBQUksOEJBQXVCLENBQUMsbUdBQW1HLENBQUMsQ0FBQztLQUN4STs7QUEzQkgsc0NBNEJDO0FBb0NEOzs7O0dBSUc7SUFFVSxTQUFTOzRCQURyQixvQ0FBa0I7Ozs7c0JBQ1ksYUFBYTs7O3lCQUFyQixTQUFRLFdBQWE7Ozs7bUNBOEx6QyxJQUFBLGtDQUFjLEdBQUU7WUFDakIsd0tBQU8sT0FBTyw2REFHYjtZQWxNSCw2S0FtTUM7Ozs7O1FBbE1DOztXQUVHO1FBQ0ksTUFBTSxDQUFVLHFCQUFxQixHQUFXLHVDQUF1QyxDQUFDO1FBRS9GOztXQUVHO1FBQ0ksTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFNO1lBQzlCLE9BQU8sQ0FBQyxLQUFLLElBQUksSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxJQUFJLDRCQUE0QixJQUFJLENBQUMsQ0FBQztTQUNuRjtRQUVEOzs7Ozs7V0FNRztRQUNJLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxLQUFnQixFQUFFLEVBQVUsRUFBRSxhQUFxQjtZQUNqRixPQUFPLFNBQVMsQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQztTQUN4RTtRQUVEOzs7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QkFDckMsTUFBTSxJQUFJLHNCQUFlLENBQUMsZ0RBQWdELEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQ3BGLENBQUM7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUFLLFNBQVMsQ0FBQyxDQUFDO2dCQUM3RSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7b0JBQ3BCLE1BQU0sSUFBSSxzQkFBZSxDQUFDLHdFQUF3RSxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUM1RyxDQUFDO1lBQ0gsQ0FBQztTQUNGO1FBRUQ7Ozs7V0FJRztRQUVJLE9BQU8sQ0FBQyxJQUFXOzs7Ozs7Ozs7O1lBQ3hCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM5Qjs7WUFsTVUsdURBQVM7Ozs7O0FBQVQsOEJBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZm5Vc2VyR3JvdXAgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWxhc3RpY2FjaGUnO1xuaW1wb3J0IHsgSVJlc291cmNlLCBSZXNvdXJjZSwgQXJuRm9ybWF0LCBTdGFjaywgTGF6eSwgVmFsaWRhdGlvbkVycm9yLCBVbnNjb3BlZFZhbGlkYXRpb25FcnJvciwgTmFtZXMgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlJztcbmltcG9ydCB7IGFkZENvbnN0cnVjdE1ldGFkYXRhLCBNZXRob2RNZXRhZGF0YSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL21ldGFkYXRhLXJlc291cmNlJztcbmltcG9ydCB7IHByb3BlcnR5SW5qZWN0YWJsZSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL3Byb3AtaW5qZWN0YWJsZSc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IFVzZXJFbmdpbmUgfSBmcm9tICcuL2NvbW1vbic7XG5pbXBvcnQgeyBJVXNlciB9IGZyb20gJy4vdXNlci1iYXNlJztcblxuY29uc3QgRUxBU1RJQ0FDSEVfVVNFUkdST1VQX1NZTUJPTCA9IFN5bWJvbC5mb3IoJ0Bhd3MtY2RrL2F3cy1lbGFzdGljYWNoZS5Vc2VyR3JvdXAnKTtcblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBkZWZpbmluZyBhbiBFbGFzdGlDYWNoZSBVc2VyR3JvdXBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyR3JvdXBQcm9wcyB7XG4gIC8qKlxuICAgKiBFbmZvcmNlcyBhIHBhcnRpY3VsYXIgcGh5c2ljYWwgdXNlciBncm91cCBuYW1lLlxuICAgKiBAZGVmYXVsdCA8Z2VuZXJhdGVkPlxuICAgKi9cbiAgcmVhZG9ubHkgdXNlckdyb3VwTmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBlbmdpbmUgdHlwZSBmb3IgdGhlIHVzZXIgZ3JvdXBcbiAgICogRW51bSBvcHRpb25zOiBVc2VyRW5naW5lLlZBTEtFWSwgVXNlckVuZ2luZS5SRURJU1xuICAgKlxuICAgKiBAZGVmYXVsdCBVc2VyRW5naW5lLlZBTEtFWVxuICAgKi9cbiAgcmVhZG9ubHkgZW5naW5lPzogVXNlckVuZ2luZTtcbiAgLyoqXG4gICAqIExpc3Qgb2YgdXNlcnMgaW5zaWRlIHRoZSB1c2VyIGdyb3VwXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gdXNlcnNcbiAgICovXG4gIHJlYWRvbmx5IHVzZXJzPzogSVVzZXJbXTtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGFuIEVsYXN0aUNhY2hlIFVzZXJHcm91cFxuICovXG5leHBvcnQgaW50ZXJmYWNlIElVc2VyR3JvdXAgZXh0ZW5kcyBJUmVzb3VyY2Uge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHVzZXIgZ3JvdXBcbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgdXNlckdyb3VwTmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGVuZ2luZSB0eXBlIGZvciB0aGUgdXNlciBncm91cFxuICAgKi9cbiAgcmVhZG9ubHkgZW5naW5lPzogVXNlckVuZ2luZTtcbiAgLyoqXG4gICAqIExpc3Qgb2YgdXNlcnMgaW4gdGhlIHVzZXIgZ3JvdXBcbiAgICovXG4gIHJlYWRvbmx5IHVzZXJzPzogSVVzZXJbXTtcbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIHVzZXIgZ3JvdXBcbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgdXNlckdyb3VwQXJuOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBBZGQgYSB1c2VyIHRvIHRoaXMgdXNlciBncm91cFxuICAgKlxuICAgKiBAcGFyYW0gdXNlciBUaGUgdXNlciB0byBhZGRcbiAgICovXG4gIGFkZFVzZXIodXNlcjogSVVzZXIpOiB2b2lkO1xufVxuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIFVzZXJHcm91cCBjb25zdHJ1Y3RzXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBVc2VyR3JvdXBCYXNlIGV4dGVuZHMgUmVzb3VyY2UgaW1wbGVtZW50cyBJVXNlckdyb3VwIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSB1c2VyIGdyb3VwXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSB1c2VyR3JvdXBOYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgZW5naW5lIHR5cGUgZm9yIHRoZSB1c2VyIGdyb3VwXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgZW5naW5lPzogVXNlckVuZ2luZTtcbiAgLyoqXG4gICAqIExpc3Qgb2YgdXNlcnMgaW4gdGhlIHVzZXIgZ3JvdXBcbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSB1c2Vycz86IElVc2VyW107XG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSB1c2VyIGdyb3VwXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSB1c2VyR3JvdXBBcm46IHN0cmluZztcbiAgLyoqXG4gICAqIEFkZCBhIHVzZXIgdG8gdGhpcyB1c2VyIGdyb3VwXG4gICAqXG4gICAqIEBwYXJhbSBfdXNlciBUaGUgdXNlciB0byBhZGRcbiAgICovXG4gIHB1YmxpYyBhZGRVc2VyKF91c2VyOiBJVXNlcik6IHZvaWQge1xuICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcignQ2Fubm90IGFkZCB1c2VycyB0byBhbiBpbXBvcnRlZCBVc2VyR3JvdXAuIE9ubHkgVXNlckdyb3VwcyBjcmVhdGVkIGluIHRoaXMgc3RhY2sgY2FuIGJlIG1vZGlmaWVkLicpO1xuICB9XG59XG5cbi8qKlxuICogQXR0cmlidXRlcyB0aGF0IGNhbiBiZSBzcGVjaWZpZWQgd2hlbiBpbXBvcnRpbmcgYSBVc2VyR3JvdXBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyR3JvdXBBdHRyaWJ1dGVzIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSB1c2VyIGdyb3VwXG4gICAqXG4gICAqIE9uZSBvZiBgdXNlckdyb3VwTmFtZWAgb3IgYHVzZXJHcm91cEFybmAgaXMgcmVxdWlyZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZGVyaXZlZCBmcm9tIHVzZXJHcm91cEFyblxuICAgKi9cbiAgcmVhZG9ubHkgdXNlckdyb3VwTmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBlbmdpbmUgdHlwZSBmb3IgdGhlIHVzZXIgZ3JvdXBcbiAgICpcbiAgICogQGRlZmF1bHQgLSBlbmdpbmUgdHlwZSBpcyB1bmtub3duXG4gICAqL1xuICByZWFkb25seSBlbmdpbmU/OiBVc2VyRW5naW5lO1xuICAvKipcbiAgICogTGlzdCBvZiB1c2VycyBpbiB0aGUgdXNlciBncm91cFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHVzZXJzIGFyZSB1bmtub3duXG4gICAqL1xuICByZWFkb25seSB1c2Vycz86IElVc2VyW107XG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSB1c2VyIGdyb3VwXG4gICAqXG4gICAqIE9uZSBvZiBgdXNlckdyb3VwTmFtZWAgb3IgYHVzZXJHcm91cEFybmAgaXMgcmVxdWlyZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZGVyaXZlZCBmcm9tIHVzZXJHcm91cE5hbWVcbiAgICovXG4gIHJlYWRvbmx5IHVzZXJHcm91cEFybj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBbiBFbGFzdGlDYWNoZSBVc2VyR3JvdXBcbiAqXG4gKiBAcmVzb3VyY2UgQVdTOjpFbGFzdGlDYWNoZTo6VXNlckdyb3VwXG4gKi9cbkBwcm9wZXJ0eUluamVjdGFibGVcbmV4cG9ydCBjbGFzcyBVc2VyR3JvdXAgZXh0ZW5kcyBVc2VyR3JvdXBCYXNlIHtcbiAgLyoqXG4gICAqIFVuaXF1ZWx5IGlkZW50aWZpZXMgdGhpcyBjbGFzc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQUk9QRVJUWV9JTkpFQ1RJT05fSUQ6IHN0cmluZyA9ICdhd3MtY2RrLWxpYi5hd3MtZWxhc3RpY2FjaGUuVXNlckdyb3VwJztcblxuICAvKipcbiAgICogUmV0dXJuIHdoZXRoZXIgdGhlIGdpdmVuIG9iamVjdCBpcyBhIGBVc2VyR3JvdXBgXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGlzVXNlckdyb3VwKHg6IGFueSk6IHggaXMgVXNlckdyb3VwIHtcbiAgICByZXR1cm4geCAhPT0gbnVsbCAmJiB0eXBlb2YgKHgpID09PSAnb2JqZWN0JyAmJiBFTEFTVElDQUNIRV9VU0VSR1JPVVBfU1lNQk9MIGluIHg7XG4gIH1cblxuICAvKipcbiAgICogSW1wb3J0IGFuIGV4aXN0aW5nIHVzZXIgZ3JvdXAgYnkgbmFtZVxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgVGhlIHBhcmVudCBjcmVhdGluZyBjb25zdHJ1Y3QgKHVzdWFsbHkgYHRoaXNgKVxuICAgKiBAcGFyYW0gaWQgVGhlIGNvbnN0cnVjdCdzIG5hbWVcbiAgICogQHBhcmFtIHVzZXJHcm91cE5hbWUgVGhlIG5hbWUgb2YgdGhlIGV4aXN0aW5nIHVzZXIgZ3JvdXBcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbVVzZXJHcm91cE5hbWUoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgdXNlckdyb3VwTmFtZTogc3RyaW5nKTogSVVzZXJHcm91cCB7XG4gICAgcmV0dXJuIFVzZXJHcm91cC5mcm9tVXNlckdyb3VwQXR0cmlidXRlcyhzY29wZSwgaWQsIHsgdXNlckdyb3VwTmFtZSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gZXhpc3RpbmcgdXNlciBncm91cCBieSBBUk5cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIFRoZSBwYXJlbnQgY3JlYXRpbmcgY29uc3RydWN0ICh1c3VhbGx5IGB0aGlzYClcbiAgICogQHBhcmFtIGlkIFRoZSBjb25zdHJ1Y3QncyBuYW1lXG4gICAqIEBwYXJhbSB1c2VyR3JvdXBBcm4gVGhlIEFSTiBvZiB0aGUgZXhpc3RpbmcgdXNlciBncm91cFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tVXNlckdyb3VwQXJuKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHVzZXJHcm91cEFybjogc3RyaW5nKTogSVVzZXJHcm91cCB7XG4gICAgcmV0dXJuIFVzZXJHcm91cC5mcm9tVXNlckdyb3VwQXR0cmlidXRlcyhzY29wZSwgaWQsIHsgdXNlckdyb3VwQXJuIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyB1c2VyIGdyb3VwIHVzaW5nIGF0dHJpYnV0ZXNcbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIFRoZSBwYXJlbnQgY3JlYXRpbmcgY29uc3RydWN0ICh1c3VhbGx5IGB0aGlzYClcbiAgICogQHBhcmFtIGlkIFRoZSBjb25zdHJ1Y3QncyBuYW1lXG4gICAqIEBwYXJhbSBhdHRycyBBIGBVc2VyR3JvdXBBdHRyaWJ1dGVzYCBvYmplY3RcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbVVzZXJHcm91cEF0dHJpYnV0ZXMoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgYXR0cnM6IFVzZXJHcm91cEF0dHJpYnV0ZXMpOiBJVXNlckdyb3VwIHtcbiAgICBsZXQgdXNlckdyb3VwTmFtZTogc3RyaW5nO1xuICAgIGxldCB1c2VyR3JvdXBBcm46IHN0cmluZztcbiAgICBjb25zdCBzdGFjayA9IFN0YWNrLm9mKHNjb3BlKTtcblxuICAgIGlmIChhdHRycy51c2VyR3JvdXBBcm4gJiYgYXR0cnMudXNlckdyb3VwTmFtZSkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcignT25seSBvbmUgb2YgdXNlckdyb3VwQXJuIG9yIHVzZXJHcm91cE5hbWUgY2FuIGJlIHByb3ZpZGVkLicsIHNjb3BlKTtcbiAgICB9XG5cbiAgICBpZiAoYXR0cnMudXNlckdyb3VwQXJuKSB7XG4gICAgICB1c2VyR3JvdXBBcm4gPSBhdHRycy51c2VyR3JvdXBBcm47XG4gICAgICBjb25zdCBleHRyYWN0ZWRVc2VyR3JvdXBOYW1lID0gc3RhY2suc3BsaXRBcm4oYXR0cnMudXNlckdyb3VwQXJuLCBBcm5Gb3JtYXQuU0xBU0hfUkVTT1VSQ0VfTkFNRSkucmVzb3VyY2VOYW1lO1xuICAgICAgaWYgKCFleHRyYWN0ZWRVc2VyR3JvdXBOYW1lKSB7XG4gICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoJ1VuYWJsZSB0byBleHRyYWN0IHVzZXIgZ3JvdXAgbmFtZSBmcm9tIEFSTi4nLCBzY29wZSk7XG4gICAgICB9XG4gICAgICB1c2VyR3JvdXBOYW1lID0gZXh0cmFjdGVkVXNlckdyb3VwTmFtZTtcbiAgICB9IGVsc2UgaWYgKGF0dHJzLnVzZXJHcm91cE5hbWUpIHtcbiAgICAgIHVzZXJHcm91cE5hbWUgPSBhdHRycy51c2VyR3JvdXBOYW1lO1xuICAgICAgdXNlckdyb3VwQXJuID0gc3RhY2suZm9ybWF0QXJuKHtcbiAgICAgICAgc2VydmljZTogJ2VsYXN0aWNhY2hlJyxcbiAgICAgICAgcmVzb3VyY2U6ICd1c2VyZ3JvdXAnLFxuICAgICAgICByZXNvdXJjZU5hbWU6IGF0dHJzLnVzZXJHcm91cE5hbWUsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcignT25lIG9mIHVzZXJHcm91cE5hbWUgb3IgdXNlckdyb3VwQXJuIGlzIHJlcXVpcmVkLicsIHNjb3BlKTtcbiAgICB9XG5cbiAgICBjbGFzcyBJbXBvcnQgZXh0ZW5kcyBVc2VyR3JvdXBCYXNlIHtcbiAgICAgIHB1YmxpYyByZWFkb25seSBlbmdpbmU/OiBVc2VyRW5naW5lO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHVzZXJHcm91cE5hbWU6IHN0cmluZztcbiAgICAgIHB1YmxpYyByZWFkb25seSB1c2VyR3JvdXBBcm46IHN0cmluZztcblxuICAgICAgcHVibGljIGdldCB1c2VycygpOiBJVXNlcltdIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIGF0dHJzLnVzZXJzID8gWy4uLmF0dHJzLnVzZXJzXSA6IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgY29uc3RydWN0b3IoX3VzZXJHcm91cEFybjogc3RyaW5nLCBfdXNlckdyb3VwTmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgICAgIHRoaXMudXNlckdyb3VwQXJuID0gX3VzZXJHcm91cEFybjtcbiAgICAgICAgdGhpcy51c2VyR3JvdXBOYW1lID0gX3VzZXJHcm91cE5hbWU7XG4gICAgICAgIHRoaXMuZW5naW5lID0gYXR0cnMuZW5naW5lO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgSW1wb3J0KHVzZXJHcm91cEFybiwgdXNlckdyb3VwTmFtZSk7XG4gIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgZW5naW5lPzogVXNlckVuZ2luZTtcbiAgcHVibGljIHJlYWRvbmx5IHVzZXJHcm91cE5hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfdXNlcnM6IElVc2VyW10gPSBbXTtcbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIHVzZXIgZ3JvdXBcbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHVzZXJHcm91cEFybjogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHN0YXR1cyBvZiB0aGUgdXNlciBncm91cFxuICAgKiBDYW4gYmUgJ2NyZWF0aW5nJywgJ2FjdGl2ZScsICdtb2RpZnlpbmcnLCAnZGVsZXRpbmcnXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB1c2VyR3JvdXBTdGF0dXM6IHN0cmluZztcblxuICBwcml2YXRlIHJlYWRvbmx5IHJlc291cmNlOiBDZm5Vc2VyR3JvdXA7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFVzZXJHcm91cFByb3BzID0ge30pIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHt9KTtcblxuICAgIC8vIEVuaGFuY2VkIENESyBBbmFseXRpY3MgVGVsZW1ldHJ5XG4gICAgYWRkQ29uc3RydWN0TWV0YWRhdGEodGhpcywgcHJvcHMpO1xuXG4gICAgdGhpcy5lbmdpbmUgPSBwcm9wcy5lbmdpbmUgPz8gVXNlckVuZ2luZS5WQUxLRVk7XG4gICAgdGhpcy51c2VyR3JvdXBOYW1lID0gcHJvcHMudXNlckdyb3VwTmFtZSA/PyBMYXp5LnN0cmluZyh7XG4gICAgICAvLyBFbGFzdGlDYWNoZSBpcyBhbGxvd2luZyBvbmx5IHVwcGVyY2FzZSBhbmQgbWF4IDQwIGNoYXJhY3RlcnMgZm9yIHVzZXIgZ3JvdXAgaWRcbiAgICAgIHByb2R1Y2U6ICgpID0+IE5hbWVzLnVuaXF1ZVJlc291cmNlTmFtZSh0aGlzLCB7IG1heExlbmd0aDogNDAgfSkudG9Mb2NhbGVMb3dlckNhc2UoKSxcbiAgICB9KTtcblxuICAgIGlmIChwcm9wcy51c2Vycykge1xuICAgICAgdGhpcy5fdXNlcnMucHVzaCguLi5wcm9wcy51c2Vycyk7XG4gICAgfVxuXG4gICAgdGhpcy5yZXNvdXJjZSA9IG5ldyBDZm5Vc2VyR3JvdXAodGhpcywgJ1Jlc291cmNlJywge1xuICAgICAgZW5naW5lOiB0aGlzLmVuZ2luZSxcbiAgICAgIHVzZXJHcm91cElkOiB0aGlzLnVzZXJHcm91cE5hbWUsXG4gICAgICB1c2VySWRzOiBMYXp5Lmxpc3Qoe1xuICAgICAgICBwcm9kdWNlOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy52YWxpZGF0ZVVzZXJzKCk7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXJzLm1hcCh1c2VyID0+IHVzZXIudXNlcklkKTtcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgIH0pO1xuXG4gICAgaWYgKHByb3BzLnVzZXJzKSB7XG4gICAgICBwcm9wcy51c2Vycy5mb3JFYWNoKHVzZXIgPT4gdGhpcy5hZGRVc2VyRGVwZW5kZW5jeSh1c2VyKSk7XG4gICAgfVxuXG4gICAgdGhpcy51c2VyR3JvdXBBcm4gPSB0aGlzLnJlc291cmNlLmF0dHJBcm47XG4gICAgdGhpcy51c2VyR3JvdXBTdGF0dXMgPSB0aGlzLnJlc291cmNlLmF0dHJTdGF0dXM7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgRUxBU1RJQ0FDSEVfVVNFUkdST1VQX1NZTUJPTCwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBDbG91ZEZvcm1hdGlvbiBkZXBlbmRlbmN5IG9uIHRoZSB1c2VyIHJlc291cmNlIHRvIGVuc3VyZSBwcm9wZXIgY3JlYXRpb24gb3JkZXIuXG4gICAqL1xuICBwcml2YXRlIGFkZFVzZXJEZXBlbmRlbmN5KHVzZXI6IElVc2VyKTogdm9pZCB7XG4gICAgdGhpcy5yZXNvdXJjZS5ub2RlLmFkZERlcGVuZGVuY3kodXNlcik7XG4gIH1cblxuICAvKipcbiAgICogQXJyYXkgb2YgdXNlcnMgaW4gdGhlIHVzZXIgZ3JvdXBcbiAgICpcbiAgICogRG8gbm90IHB1c2ggZGlyZWN0bHkgdG8gdGhpcyBhcnJheS5cbiAgICogVXNlIGFkZFVzZXIoKSBpbnN0ZWFkIHRvIGVuc3VyZSBwcm9wZXIgdmFsaWRhdGlvbiBhbmQgZGVwZW5kZW5jeSBtYW5hZ2VtZW50LlxuICAgKi9cbiAgcHVibGljIGdldCB1c2VycygpOiBJVXNlcltdIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fdXNlcnM7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHVzZXJzIGluIHRoZSB1c2VyIGdyb3VwIGZvciBkdXBsaWNhdGUgdXNlcm5hbWVzIGFuZCBSZWRpcy1zcGVjaWZpYyByZXF1aXJlbWVudHMuXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlVXNlcnMoKTogdm9pZCB7XG4gICAgY29uc3QgdXNlck5hbWVzID0gdGhpcy5fdXNlcnMubWFwKHVzZXIgPT4gdXNlci51c2VyTmFtZSk7XG4gICAgY29uc3QgZHVwbGljYXRlcyA9IHVzZXJOYW1lcy5maWx0ZXIoKG5hbWUsIGluZGV4KSA9PiB1c2VyTmFtZXMuaW5kZXhPZihuYW1lKSAhPT0gaW5kZXgpO1xuICAgIGlmIChkdXBsaWNhdGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoJ1VzZXIgZ3JvdXAgY2Fubm90IGhhdmUgdXNlcnMgd2l0aCB0aGUgc2FtZSB1c2VyIG5hbWUuJywgdGhpcyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZW5naW5lID09PSBVc2VyRW5naW5lLlJFRElTKSB7XG4gICAgICB0aGlzLl91c2Vycy5mb3JFYWNoKHVzZXIgPT4ge1xuICAgICAgICBpZiAodXNlci5lbmdpbmUgIT09IFVzZXJFbmdpbmUuUkVESVMpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKCdSZWRpcyB1c2VyIGdyb3VwIGNhbiBvbmx5IGNvbnRhaW4gUmVkaXMgdXNlcnMuJywgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgY29uc3QgaGFzRGVmYXVsdFVzZXIgPSB0aGlzLl91c2Vycy5zb21lKHVzZXIgPT4gdXNlci51c2VyTmFtZSA9PT0gJ2RlZmF1bHQnKTtcbiAgICAgIGlmICghaGFzRGVmYXVsdFVzZXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcignUmVkaXMgdXNlciBncm91cHMgbmVlZCB0byBjb250YWluIGEgdXNlciB3aXRoIHRoZSB1c2VyIG5hbWUgXCJkZWZhdWx0XCIuJywgdGhpcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIHVzZXIgdG8gdGhpcyB1c2VyIGdyb3VwXG4gICAqXG4gICAqIEBwYXJhbSB1c2VyIFRoZSB1c2VyIHRvIGFkZCB0byB0aGUgZ3JvdXBcbiAgICovXG4gIEBNZXRob2RNZXRhZGF0YSgpXG4gIHB1YmxpYyBhZGRVc2VyKHVzZXI6IElVc2VyKTogdm9pZCB7XG4gICAgdGhpcy5fdXNlcnMucHVzaCh1c2VyKTtcbiAgICB0aGlzLmFkZFVzZXJEZXBlbmRlbmN5KHVzZXIpO1xuICB9XG59XG4iXX0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aws-cdk/aws-elasticache-alpha",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.234.0-alpha.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "The CDK Construct Library for AWS::ElastiCache",
|
|
6
6
|
"main": "lib/index.js",
|
|
@@ -84,18 +84,18 @@
|
|
|
84
84
|
},
|
|
85
85
|
"license": "Apache-2.0",
|
|
86
86
|
"devDependencies": {
|
|
87
|
-
"@aws-cdk/cdk-build-tools": "2.
|
|
87
|
+
"@aws-cdk/cdk-build-tools": "2.234.0-alpha.0",
|
|
88
88
|
"@aws-cdk/integ-runner": "^2.192.2",
|
|
89
|
-
"@aws-cdk/pkglint": "2.
|
|
89
|
+
"@aws-cdk/pkglint": "2.234.0-alpha.0",
|
|
90
90
|
"@types/jest": "^29.5.14",
|
|
91
91
|
"jest": "^29.7.0",
|
|
92
|
-
"aws-cdk-lib": "2.
|
|
92
|
+
"aws-cdk-lib": "2.234.0",
|
|
93
93
|
"constructs": "^10.0.0",
|
|
94
|
-
"@aws-cdk/integ-tests-alpha": "2.
|
|
94
|
+
"@aws-cdk/integ-tests-alpha": "2.234.0-alpha.0"
|
|
95
95
|
},
|
|
96
96
|
"dependencies": {},
|
|
97
97
|
"peerDependencies": {
|
|
98
|
-
"aws-cdk-lib": "^2.
|
|
98
|
+
"aws-cdk-lib": "^2.234.0",
|
|
99
99
|
"constructs": "^10.0.0"
|
|
100
100
|
},
|
|
101
101
|
"engines": {
|