@cdklabs/cdk-appmod-catalog-blueprints 1.16.1 → 1.17.1

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.
Files changed (81) hide show
  1. package/.jsii +963 -146
  2. package/lib/document-processing/adapter/queued-s3-adapter.js +39 -5
  3. package/lib/document-processing/agentic-document-processing.js +6 -4
  4. package/lib/document-processing/base-document-processing.js +16 -4
  5. package/lib/document-processing/bedrock-document-processing.d.ts +1 -0
  6. package/lib/document-processing/bedrock-document-processing.js +117 -70
  7. package/lib/document-processing/default-document-processing-config.js +3 -5
  8. package/lib/document-processing/index.d.ts +2 -0
  9. package/lib/document-processing/index.js +3 -1
  10. package/lib/document-processing/localstack-agentic-document-processing.d.ts +20 -0
  11. package/lib/document-processing/localstack-agentic-document-processing.js +99 -0
  12. package/lib/document-processing/localstack-bedrock-document-processing.d.ts +16 -0
  13. package/lib/document-processing/localstack-bedrock-document-processing.js +69 -0
  14. package/lib/document-processing/resources/cleanup/handler.py +16 -1
  15. package/lib/document-processing/resources/default-localstack-invoke/index.py +184 -0
  16. package/lib/document-processing/resources/default-localstack-invoke/provider_runtime.py +251 -0
  17. package/lib/document-processing/resources/default-localstack-invoke/requirements.txt +5 -0
  18. package/lib/document-processing/resources/default-sqs-consumer/index.py +17 -2
  19. package/lib/document-processing/resources/pdf-chunking/handler.py +16 -1
  20. package/lib/document-processing/tests/base-document-processing-nag.test.js +3 -1
  21. package/lib/document-processing/tests/base-document-processing-schema.test.js +6 -1
  22. package/lib/document-processing/tests/base-document-processing.test.js +12 -1
  23. package/lib/document-processing/tests/localstack-agentic-document-processing.test.d.ts +1 -0
  24. package/lib/document-processing/tests/localstack-agentic-document-processing.test.js +111 -0
  25. package/lib/document-processing/tests/localstack-document-processing.test.d.ts +1 -0
  26. package/lib/document-processing/tests/localstack-document-processing.test.js +149 -0
  27. package/lib/document-processing/tests/queued-s3-adapter-nag.test.js +3 -1
  28. package/lib/document-processing/tests/queued-s3-adapter.test.js +3 -1
  29. package/lib/framework/agents/base-agent.js +31 -4
  30. package/lib/framework/agents/batch-agent.d.ts +1 -0
  31. package/lib/framework/agents/batch-agent.js +42 -7
  32. package/lib/framework/agents/default-agent-config.js +3 -5
  33. package/lib/framework/agents/index.d.ts +1 -0
  34. package/lib/framework/agents/index.js +2 -1
  35. package/lib/framework/agents/interactive-agent.js +115 -23
  36. package/lib/framework/agents/knowledge-base/base-knowledge-base.js +30 -4
  37. package/lib/framework/agents/knowledge-base/bedrock-knowledge-base.js +81 -5
  38. package/lib/framework/agents/localstack-batch-agent.d.ts +15 -0
  39. package/lib/framework/agents/localstack-batch-agent.js +64 -0
  40. package/lib/framework/agents/resources/default-ollama-agent/batch.py +396 -0
  41. package/lib/framework/agents/resources/default-ollama-agent/models.py +7 -0
  42. package/lib/framework/agents/resources/default-ollama-agent/requirements.txt +9 -0
  43. package/lib/framework/agents/resources/default-ollama-agent/runtime_support.py +237 -0
  44. package/lib/framework/agents/resources/default-ollama-agent/utils.py +77 -0
  45. package/lib/framework/agents/tests/agent-knowledge-base-nag.test.js +35 -2
  46. package/lib/framework/bedrock/bedrock.d.ts +9 -0
  47. package/lib/framework/bedrock/bedrock.js +20 -12
  48. package/lib/framework/custom-resource/default-runtimes.js +20 -22
  49. package/lib/framework/foundation/access-log.js +50 -7
  50. package/lib/framework/foundation/eventbridge-broker.js +5 -4
  51. package/lib/framework/foundation/network.js +4 -4
  52. package/lib/framework/index.d.ts +1 -0
  53. package/lib/framework/index.js +2 -1
  54. package/lib/framework/localstack/index.d.ts +1 -0
  55. package/lib/framework/localstack/index.js +18 -0
  56. package/lib/framework/localstack/localstack-config.d.ts +79 -0
  57. package/lib/framework/localstack/localstack-config.js +47 -0
  58. package/lib/framework/tests/base-agent-knowledge-base.test.js +35 -2
  59. package/lib/framework/tests/batch-agent.test.js +35 -2
  60. package/lib/framework/tests/framework-nag.test.js +35 -2
  61. package/lib/framework/tests/interactive-agent-nag.test.js +35 -2
  62. package/lib/framework/tests/interactive-agent.test.js +35 -2
  63. package/lib/framework/tests/localstack-batch-agent.test.d.ts +1 -0
  64. package/lib/framework/tests/localstack-batch-agent.test.js +100 -0
  65. package/lib/utilities/data-loader.js +50 -5
  66. package/lib/utilities/lambda-iam-utils.js +38 -7
  67. package/lib/utilities/lambda_layers/data-masking/layer-construct.js +40 -3
  68. package/lib/utilities/observability/bedrock-observability.js +38 -2
  69. package/lib/utilities/observability/cloudfront-distribution-observability-property-injector.js +3 -4
  70. package/lib/utilities/observability/cloudwatch-transaction-search.js +36 -5
  71. package/lib/utilities/observability/default-observability-config.js +6 -8
  72. package/lib/utilities/observability/lambda-observability-property-injector.js +4 -4
  73. package/lib/utilities/observability/log-group-data-protection-utils.js +2 -4
  74. package/lib/utilities/observability/observability.js +47 -6
  75. package/lib/utilities/observability/powertools-config.js +2 -4
  76. package/lib/utilities/observability/state-machine-observability-property-injector.js +4 -4
  77. package/lib/webapp/frontend-construct.js +46 -5
  78. package/lib/webapp/tests/frontend-construct-nag.test.js +36 -3
  79. package/lib/webapp/tests/frontend-construct.test.js +36 -3
  80. package/package.json +60 -61
  81. package/lib/tsconfig.tsbuildinfo +0 -1
@@ -0,0 +1,77 @@
1
+ import os
2
+ import boto3
3
+ import json
4
+ import zipfile
5
+ import glob
6
+ from models import ToolLocationDefinition
7
+
8
+
9
+ def _resolve_endpoint_url(*service_env_keys: str):
10
+ for key in service_env_keys:
11
+ endpoint = os.getenv(key)
12
+ if endpoint:
13
+ return endpoint
14
+ return None
15
+
16
+
17
+ def create_boto3_client(service_name: str, *service_env_keys: str):
18
+ endpoint_url = _resolve_endpoint_url(*service_env_keys, 'AWS_ENDPOINT_URL')
19
+ if endpoint_url:
20
+ return boto3.client(service_name, endpoint_url=endpoint_url)
21
+ return boto3.client(service_name)
22
+
23
+
24
+ s3 = create_boto3_client('s3', 'AWS_ENDPOINT_URL_S3')
25
+
26
+
27
+ def convert_tools_config_into_model(config: str) -> list[ToolLocationDefinition]:
28
+ definitions: list[ToolLocationDefinition] = []
29
+
30
+ tools_raw = json.loads(config)
31
+
32
+ for t in tools_raw:
33
+ definitions.append(ToolLocationDefinition.model_validate_json(json.dumps(t)))
34
+
35
+ return definitions
36
+
37
+
38
+ def download_tools(tools: list[ToolLocationDefinition]) -> list[str]:
39
+ local_tools_location: list[str] = []
40
+
41
+ for t in tools:
42
+ if t.isFile:
43
+ # Single file tool - download directly
44
+ local_location = f"/tmp/{os.path.basename(t.key)}"
45
+ s3.download_file(t.bucketName, t.key, local_location)
46
+ local_tools_location.append(local_location)
47
+ elif t.isZipArchive:
48
+ # Directory tool packaged as zip - download and extract
49
+ zip_location = f"/tmp/{os.path.basename(t.key)}"
50
+ s3.download_file(t.bucketName, t.key, zip_location)
51
+
52
+ # Extract to a directory based on the zip name (without .zip extension)
53
+ extract_dir = zip_location.replace('.zip', '')
54
+ os.makedirs(extract_dir, exist_ok=True)
55
+
56
+ with zipfile.ZipFile(zip_location, 'r') as zip_ref:
57
+ zip_ref.extractall(extract_dir)
58
+
59
+ # Find all Python files in the extracted directory (excluding test files)
60
+ for py_file in glob.glob(f"{extract_dir}/**/*.py", recursive=True):
61
+ if not os.path.basename(py_file).startswith('test_'):
62
+ local_tools_location.append(py_file)
63
+
64
+ # Clean up the zip file
65
+ os.remove(zip_location)
66
+
67
+ return local_tools_location
68
+
69
+
70
+ def download_and_load_system_prompt(bucketName, key) -> str:
71
+ local_location = '/tmp/system_prompt.txt'
72
+ s3.download_file(bucketName, key, local_location)
73
+
74
+ with open(local_location, 'r') as file:
75
+ data = file.read()
76
+
77
+ return data
@@ -1,8 +1,41 @@
1
1
  "use strict";
2
2
  // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
3
  // SPDX-License-Identifier: Apache-2.0
4
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
5
+ if (k2 === undefined) k2 = k;
6
+ var desc = Object.getOwnPropertyDescriptor(m, k);
7
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
8
+ desc = { enumerable: true, get: function() { return m[k]; } };
9
+ }
10
+ Object.defineProperty(o, k2, desc);
11
+ }) : (function(o, m, k, k2) {
12
+ if (k2 === undefined) k2 = k;
13
+ o[k2] = m[k];
14
+ }));
15
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
16
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
17
+ }) : function(o, v) {
18
+ o["default"] = v;
19
+ });
20
+ var __importStar = (this && this.__importStar) || (function () {
21
+ var ownKeys = function(o) {
22
+ ownKeys = Object.getOwnPropertyNames || function (o) {
23
+ var ar = [];
24
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
25
+ return ar;
26
+ };
27
+ return ownKeys(o);
28
+ };
29
+ return function (mod) {
30
+ if (mod && mod.__esModule) return mod;
31
+ var result = {};
32
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
33
+ __setModuleDefault(result, mod);
34
+ return result;
35
+ };
36
+ })();
4
37
  Object.defineProperty(exports, "__esModule", { value: true });
5
- const path = require("path");
38
+ const path = __importStar(require("path"));
6
39
  const aws_cdk_lib_1 = require("aws-cdk-lib");
7
40
  const assertions_1 = require("aws-cdk-lib/assertions");
8
41
  const aws_bedrock_1 = require("aws-cdk-lib/aws-bedrock");
@@ -367,4 +400,4 @@ describe('Agent Knowledge Base CDK Nag Tests', () => {
367
400
  });
368
401
  });
369
402
  });
370
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbnQta25vd2xlZGdlLWJhc2UtbmFnLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi91c2UtY2FzZXMvZnJhbWV3b3JrL2FnZW50cy90ZXN0cy9hZ2VudC1rbm93bGVkZ2UtYmFzZS1uYWcudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEscUVBQXFFO0FBQ3JFLHNDQUFzQzs7QUFFdEMsNkJBQTZCO0FBQzdCLDZDQUE2QztBQUM3Qyx1REFBNEQ7QUFDNUQseURBQW9FO0FBQ3BFLDZEQUFrRDtBQUNsRCxxQ0FBOEQ7QUFDOUQsOERBQThEO0FBQzlELGdEQUE0QztBQUM1QyxzREFBeUQ7QUFFekQsTUFBTSxTQUFTLEdBQUcsdUNBQXlCLENBQUMsdUNBQXVDLENBQUM7QUFFcEYsUUFBUSxDQUFDLG9DQUFvQyxFQUFFLEdBQUcsRUFBRTtJQUNsRCxRQUFRLENBQUMsdUJBQXVCLEVBQUUsR0FBRyxFQUFFO1FBQ3JDLElBQUksQ0FBQyxrREFBa0QsRUFBRSxHQUFHLEVBQUU7WUFDNUQsTUFBTSxHQUFHLEdBQUcsSUFBQSwwQkFBYSxHQUFFLENBQUM7WUFDNUIsTUFBTSxLQUFLLEdBQUcsSUFBSSxtQkFBSyxDQUFDLEdBQUcsRUFBRSxXQUFXLEVBQUU7Z0JBQ3hDLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRTthQUN0RCxDQUFDLENBQUM7WUFFSCxNQUFNLFlBQVksR0FBRyxJQUFJLHFCQUFLLENBQUMsS0FBSyxFQUFFLGNBQWMsRUFBRTtnQkFDcEQsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLDZDQUE2QyxDQUFDO2FBQzFFLENBQUMsQ0FBQztZQUVILE1BQU0sRUFBRSxHQUFHLElBQUkscUNBQW9CLENBQUMsS0FBSyxFQUFFLGFBQWEsRUFBRTtnQkFDeEQsSUFBSSxFQUFFLHVCQUF1QjtnQkFDN0IsV0FBVyxFQUFFLGdDQUFnQztnQkFDN0MsZUFBZSxFQUFFLFVBQVU7YUFDNUIsQ0FBQyxDQUFDO1lBRUgsSUFBSSx3QkFBVSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUU7Z0JBQzdCLFNBQVMsRUFBRSxXQUFXO2dCQUN0QixNQUFNLEVBQUUsYUFBYTtnQkFDckIsZUFBZSxFQUFFO29CQUNmLFlBQVksRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7b0JBQ3RDLFlBQVk7b0JBQ1osY0FBYyxFQUFFLENBQUMsRUFBRSxDQUFDO2lCQUNyQjthQUNGLENBQUMsQ0FBQztZQUVILHFCQUFPLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLDRCQUFrQixDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztZQUVqRSw4Q0FBOEM7WUFDOUMseUJBQWUsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUU7Z0JBQzFDO29CQUNFLEVBQUUsRUFBRSxtQkFBbUI7b0JBQ3ZCLE1BQU0sRUFBRSwwSkFBMEo7b0JBQ2xLLFNBQVMsRUFBRSxDQUFDLHVGQUF1RixDQUFDO2lCQUNyRztnQkFDRDtvQkFDRSxFQUFFLEVBQUUsbUJBQW1CO29CQUN2QixNQUFNLEVBQUUsd01BQXdNO29CQUNoTixTQUFTLEVBQUU7d0JBQ1QsdUJBQXVCO3dCQUN2Qix1QkFBdUI7d0JBQ3ZCLGtCQUFrQjt3QkFDbEIsYUFBYTt3QkFDYix1RkFBdUY7d0JBQ3ZGLHdHQUF3Rzt3QkFDeEcsbUZBQW1GO3FCQUNwRjtpQkFDRjtnQkFDRDtvQkFDRSxFQUFFLEVBQUUsaUJBQWlCO29CQUNyQixNQUFNLEVBQUUsNEZBQTRGO2lCQUNyRzthQUNGLENBQUMsQ0FBQztZQUVILE1BQU0sTUFBTSxHQUFHLHdCQUFXLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsQ0FDbkQsR0FBRyxFQUNILGtCQUFLLENBQUMsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUMsQ0FDMUMsQ0FBQztZQUNGLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQywwQkFBMEIsRUFBRSxHQUFHLEVBQUU7UUFDeEMsSUFBSSxDQUFDLHFEQUFxRCxFQUFFLEdBQUcsRUFBRTtZQUMvRCxNQUFNLEdBQUcsR0FBRyxJQUFBLDBCQUFhLEdBQUUsQ0FBQztZQUM1QixNQUFNLEtBQUssR0FBRyxJQUFJLG1CQUFLLENBQUMsR0FBRyxFQUFFLFdBQVcsRUFBRTtnQkFDeEMsR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFO2FBQ3RELENBQUMsQ0FBQztZQUVILE1BQU0sWUFBWSxHQUFHLElBQUkscUJBQUssQ0FBQyxLQUFLLEVBQUUsY0FBYyxFQUFFO2dCQUNwRCxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsNkNBQTZDLENBQUM7YUFDMUUsQ0FBQyxDQUFDO1lBRUgsTUFBTSxHQUFHLEdBQUcsSUFBSSxxQ0FBb0IsQ0FBQyxLQUFLLEVBQUUsYUFBYSxFQUFFO2dCQUN6RCxJQUFJLEVBQUUsdUJBQXVCO2dCQUM3QixXQUFXLEVBQUUsZ0NBQWdDO2dCQUM3QyxlQUFlLEVBQUUsZ0JBQWdCO2FBQ2xDLENBQUMsQ0FBQztZQUVILE1BQU0sR0FBRyxHQUFHLElBQUkscUNBQW9CLENBQUMsS0FBSyxFQUFFLGFBQWEsRUFBRTtnQkFDekQsSUFBSSxFQUFFLHVCQUF1QjtnQkFDN0IsV0FBVyxFQUFFLDZDQUE2QztnQkFDMUQsZUFBZSxFQUFFLGdCQUFnQjthQUNsQyxDQUFDLENBQUM7WUFFSCxNQUFNLEdBQUcsR0FBRyxJQUFJLHFDQUFvQixDQUFDLEtBQUssRUFBRSxZQUFZLEVBQUU7Z0JBQ3hELElBQUksRUFBRSxzQkFBc0I7Z0JBQzVCLFdBQVcsRUFBRSxpQ0FBaUM7Z0JBQzlDLGVBQWUsRUFBRSxlQUFlO2FBQ2pDLENBQUMsQ0FBQztZQUVILElBQUksd0JBQVUsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFO2dCQUM3QixTQUFTLEVBQUUsY0FBYztnQkFDekIsTUFBTSxFQUFFLDJDQUEyQztnQkFDbkQsZUFBZSxFQUFFO29CQUNmLFlBQVksRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7b0JBQ3RDLFlBQVk7b0JBQ1osY0FBYyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7aUJBQ2hDO2FBQ0YsQ0FBQyxDQUFDO1lBRUgscUJBQU8sQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksNEJBQWtCLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBRWpFLHlCQUFlLENBQUMsb0JBQW9CLENBQUMsS0FBSyxFQUFFO2dCQUMxQztvQkFDRSxFQUFFLEVBQUUsbUJBQW1CO29CQUN2QixNQUFNLEVBQUUsMkRBQTJEO29CQUNuRSxTQUFTLEVBQUUsQ0FBQyx1RkFBdUYsQ0FBQztpQkFDckc7Z0JBQ0Q7b0JBQ0UsRUFBRSxFQUFFLG1CQUFtQjtvQkFDdkIsTUFBTSxFQUFFLDBHQUEwRztvQkFDbEgsU0FBUyxFQUFFO3dCQUNULHVCQUF1Qjt3QkFDdkIsdUJBQXVCO3dCQUN2QixrQkFBa0I7d0JBQ2xCLGFBQWE7d0JBQ2IsdUZBQXVGO3dCQUN2RiwyR0FBMkc7d0JBQzNHLG1GQUFtRjtxQkFDcEY7aUJBQ0Y7Z0JBQ0Q7b0JBQ0UsRUFBRSxFQUFFLGlCQUFpQjtvQkFDckIsTUFBTSxFQUFFLGlEQUFpRDtpQkFDMUQ7YUFDRixDQUFDLENBQUM7WUFFSCxNQUFNLE1BQU0sR0FBRyx3QkFBVyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLENBQ25ELEdBQUcsRUFDSCxrQkFBSyxDQUFDLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLENBQzFDLENBQUM7WUFDRixNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLCtEQUErRCxFQUFFLEdBQUcsRUFBRTtZQUN6RSxNQUFNLEdBQUcsR0FBRyxJQUFBLDBCQUFhLEdBQUUsQ0FBQztZQUM1QixNQUFNLEtBQUssR0FBRyxJQUFJLG1CQUFLLENBQUMsR0FBRyxFQUFFLFdBQVcsRUFBRTtnQkFDeEMsR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFO2FBQ3RELENBQUMsQ0FBQztZQUVILE1BQU0sR0FBRyxHQUFHLElBQUkscUNBQW9CLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRTtnQkFDakQsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsV0FBVyxFQUFFLHNCQUFzQjtnQkFDbkMsZUFBZSxFQUFFLFlBQVk7YUFDOUIsQ0FBQyxDQUFDO1lBRUgsTUFBTSxHQUFHLEdBQUcsSUFBSSxxQ0FBb0IsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFO2dCQUNqRCxJQUFJLEVBQUUsUUFBUTtnQkFDZCxXQUFXLEVBQUUsdUJBQXVCO2dCQUNwQyxlQUFlLEVBQUUsWUFBWTthQUM5QixDQUFDLENBQUM7WUFFSCxrRUFBa0U7WUFDbEUsTUFBTSxjQUFjLEdBQUcsR0FBRyxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDcEQsTUFBTSxjQUFjLEdBQUcsR0FBRyxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFFcEQsd0JBQXdCO1lBQ3hCLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtnQkFDbkMsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUN6QyxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ2pGLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFnQixFQUFFLEVBQUU7b0JBQ3JDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUMvQixNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO29CQUNuRCxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO3dCQUN4QyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDO29CQUMzQyxDQUFDO2dCQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7WUFFSCx3QkFBd0I7WUFDeEIsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO2dCQUNuQyxNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ3pDLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDakYsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQWdCLEVBQUUsRUFBRTtvQkFDckMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQy9CLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLENBQUM7b0JBQ25ELElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7d0JBQ3hDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUM7b0JBQzNDLENBQUM7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsMEJBQTBCLEVBQUUsR0FBRyxFQUFFO1FBQ3hDLElBQUksQ0FBQyxtREFBbUQsRUFBRSxHQUFHLEVBQUU7WUFDN0QsTUFBTSxHQUFHLEdBQUcsSUFBQSwwQkFBYSxHQUFFLENBQUM7WUFDNUIsTUFBTSxLQUFLLEdBQUcsSUFBSSxtQkFBSyxDQUFDLEdBQUcsRUFBRSxXQUFXLEVBQUU7Z0JBQ3hDLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRTthQUN0RCxDQUFDLENBQUM7WUFFSCxNQUFNLFlBQVksR0FBRyxJQUFJLHFCQUFLLENBQUMsS0FBSyxFQUFFLGNBQWMsRUFBRTtnQkFDcEQsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLDZDQUE2QyxDQUFDO2FBQzFFLENBQUMsQ0FBQztZQUVILE1BQU0sRUFBRSxHQUFHLElBQUkscUNBQW9CLENBQUMsS0FBSyxFQUFFLFlBQVksRUFBRTtnQkFDdkQsSUFBSSxFQUFFLHNCQUFzQjtnQkFDNUIsV0FBVyxFQUFFLDZDQUE2QztnQkFDMUQsZUFBZSxFQUFFLGVBQWU7Z0JBQ2hDLFNBQVMsRUFBRTtvQkFDVCxXQUFXLEVBQUUsMEJBQTBCO29CQUN2QyxnQkFBZ0IsRUFBRSxHQUFHO2lCQUN0QjthQUNGLENBQUMsQ0FBQztZQUVILElBQUksd0JBQVUsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFO2dCQUM3QixTQUFTLEVBQUUsZ0JBQWdCO2dCQUMzQixNQUFNLEVBQUUsNkJBQTZCO2dCQUNyQyxlQUFlLEVBQUU7b0JBQ2YsWUFBWSxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRTtvQkFDdEMsWUFBWTtvQkFDWixjQUFjLEVBQUUsQ0FBQyxFQUFFLENBQUM7aUJBQ3JCO2FBQ0YsQ0FBQyxDQUFDO1lBRUgscUJBQU8sQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksNEJBQWtCLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBRWpFLHlCQUFlLENBQUMsb0JBQW9CLENBQUMsS0FBSyxFQUFFO2dCQUMxQztvQkFDRSxFQUFFLEVBQUUsbUJBQW1CO29CQUN2QixNQUFNLEVBQUUsMkRBQTJEO29CQUNuRSxTQUFTLEVBQUUsQ0FBQyx1RkFBdUYsQ0FBQztpQkFDckc7Z0JBQ0Q7b0JBQ0UsRUFBRSxFQUFFLG1CQUFtQjtvQkFDdkIsTUFBTSxFQUFFLHVEQUF1RDtvQkFDL0QsU0FBUyxFQUFFO3dCQUNULHVCQUF1Qjt3QkFDdkIsdUJBQXVCO3dCQUN2QixrQkFBa0I7d0JBQ2xCLGFBQWE7d0JBQ2IsdUZBQXVGO3dCQUN2Riw2R0FBNkc7d0JBQzdHLG1GQUFtRjtxQkFDcEY7aUJBQ0Y7Z0JBQ0Q7b0JBQ0UsRUFBRSxFQUFFLGlCQUFpQjtvQkFDckIsTUFBTSxFQUFFLGlEQUFpRDtpQkFDMUQ7YUFDRixDQUFDLENBQUM7WUFFSCxNQUFNLE1BQU0sR0FBRyx3QkFBVyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLENBQ25ELEdBQUcsRUFDSCxrQkFBSyxDQUFDLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLENBQzFDLENBQUM7WUFDRixNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLDREQUE0RCxFQUFFLEdBQUcsRUFBRTtZQUN0RSxNQUFNLEdBQUcsR0FBRyxJQUFBLDBCQUFhLEdBQUUsQ0FBQztZQUM1QixNQUFNLEtBQUssR0FBRyxJQUFJLG1CQUFLLENBQUMsR0FBRyxFQUFFLFdBQVcsRUFBRTtnQkFDeEMsR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFO2FBQ3RELENBQUMsQ0FBQztZQUVILE1BQU0sRUFBRSxHQUFHLElBQUkscUNBQW9CLENBQUMsS0FBSyxFQUFFLFlBQVksRUFBRTtnQkFDdkQsSUFBSSxFQUFFLHNCQUFzQjtnQkFDNUIsV0FBVyxFQUFFLDZDQUE2QztnQkFDMUQsZUFBZSxFQUFFLGVBQWU7Z0JBQ2hDLFNBQVMsRUFBRTtvQkFDVCxXQUFXLEVBQUUsdUJBQXVCO29CQUNwQyxnQkFBZ0IsRUFBRSxHQUFHO2lCQUN0QjthQUNGLENBQUMsQ0FBQztZQUVILE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1lBRWhELGdDQUFnQztZQUNoQyxNQUFNLG1CQUFtQixHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtnQkFDakQsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUNqQyxPQUFPLElBQUksQ0FBQyxNQUFNLEtBQUssd0JBQXdCLENBQUM7WUFDbEQsQ0FBQyxDQUFDLENBQUM7WUFFSCxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUMxQyxNQUFNLGFBQWEsR0FBRyxtQkFBb0IsQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUU3RCw4REFBOEQ7WUFDOUQsTUFBTSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsaUNBQWlDLENBQUMsQ0FBQztZQUM1RSxNQUFNLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDN0MsTUFBTSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzlELENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLG9FQUFvRSxFQUFFLEdBQUcsRUFBRTtZQUM5RSxNQUFNLEdBQUcsR0FBRyxJQUFBLDBCQUFhLEdBQUUsQ0FBQztZQUM1QixNQUFNLEtBQUssR0FBRyxJQUFJLG1CQUFLLENBQUMsR0FBRyxFQUFFLFdBQVcsRUFBRTtnQkFDeEMsR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFO2FBQ3RELENBQUMsQ0FBQztZQUVILE1BQU0sWUFBWSxHQUFHLElBQUkscUJBQUssQ0FBQyxLQUFLLEVBQUUsY0FBYyxFQUFFO2dCQUNwRCxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsNkNBQTZDLENBQUM7YUFDMUUsQ0FBQyxDQUFDO1lBRUgsTUFBTSxHQUFHLEdBQUcsSUFBSSxxQ0FBb0IsQ0FBQyxLQUFLLEVBQUUsWUFBWSxFQUFFO2dCQUN4RCxJQUFJLEVBQUUsc0JBQXNCO2dCQUM1QixXQUFXLEVBQUUseUNBQXlDO2dCQUN0RCxlQUFlLEVBQUUsZUFBZTthQUNqQyxDQUFDLENBQUM7WUFFSCxNQUFNLEdBQUcsR0FBRyxJQUFJLHFDQUFvQixDQUFDLEtBQUssRUFBRSxZQUFZLEVBQUU7Z0JBQ3hELElBQUksRUFBRSxzQkFBc0I7Z0JBQzVCLFdBQVcsRUFBRSxzQ0FBc0M7Z0JBQ25ELGVBQWUsRUFBRSxlQUFlO2dCQUNoQyxTQUFTLEVBQUU7b0JBQ1QsV0FBVyxFQUFFLFlBQVk7b0JBQ3pCLGdCQUFnQixFQUFFLEdBQUc7aUJBQ3RCO2FBQ0YsQ0FBQyxDQUFDO1lBRUgsSUFBSSx3QkFBVSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUU7Z0JBQzdCLFNBQVMsRUFBRSxZQUFZO2dCQUN2QixNQUFNLEVBQUUsMENBQTBDO2dCQUNsRCxlQUFlLEVBQUU7b0JBQ2YsWUFBWSxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRTtvQkFDdEMsWUFBWTtvQkFDWixjQUFjLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO2lCQUMzQjthQUNGLENBQUMsQ0FBQztZQUVILHFCQUFPLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLDRCQUFrQixDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztZQUVqRSx5QkFBZSxDQUFDLG9CQUFvQixDQUFDLEtBQUssRUFBRTtnQkFDMUM7b0JBQ0UsRUFBRSxFQUFFLG1CQUFtQjtvQkFDdkIsTUFBTSxFQUFFLDJEQUEyRDtvQkFDbkUsU0FBUyxFQUFFLENBQUMsdUZBQXVGLENBQUM7aUJBQ3JHO2dCQUNEO29CQUNFLEVBQUUsRUFBRSxtQkFBbUI7b0JBQ3ZCLE1BQU0sRUFBRSx1REFBdUQ7b0JBQy9ELFNBQVMsRUFBRTt3QkFDVCx1QkFBdUI7d0JBQ3ZCLHVCQUF1Qjt3QkFDdkIsa0JBQWtCO3dCQUNsQixhQUFhO3dCQUNiLHVGQUF1Rjt3QkFDdkYseUdBQXlHO3dCQUN6RyxtRkFBbUY7cUJBQ3BGO2lCQUNGO2dCQUNEO29CQUNFLEVBQUUsRUFBRSxpQkFBaUI7b0JBQ3JCLE1BQU0sRUFBRSxpREFBaUQ7aUJBQzFEO2FBQ0YsQ0FBQyxDQUFDO1lBRUgsTUFBTSxNQUFNLEdBQUcsd0JBQVcsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUyxDQUNuRCxHQUFHLEVBQ0gsa0JBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUMxQyxDQUFDO1lBQ0YsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLDhCQUE4QixFQUFFLEdBQUcsRUFBRTtRQUM1QyxJQUFJLENBQUMsaURBQWlELEVBQUUsR0FBRyxFQUFFO1lBQzNELE1BQU0sR0FBRyxHQUFHLElBQUEsMEJBQWEsR0FBRSxDQUFDO1lBQzVCLE1BQU0sS0FBSyxHQUFHLElBQUksbUJBQUssQ0FBQyxHQUFHLEVBQUUsV0FBVyxFQUFFO2dCQUN4QyxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUU7YUFDdEQsQ0FBQyxDQUFDO1lBRUgsTUFBTSxFQUFFLEdBQUcsSUFBSSxxQ0FBb0IsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFO2dCQUNuRCxJQUFJLEVBQUUsU0FBUztnQkFDZixXQUFXLEVBQUUscUJBQXFCO2dCQUNsQyxlQUFlLEVBQUUsYUFBYTthQUMvQixDQUFDLENBQUM7WUFFSCxNQUFNLFdBQVcsR0FBRyxFQUFFLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztZQUVoRCw0Q0FBNEM7WUFDNUMsTUFBTSxZQUFZLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUMxQyxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ2pDLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDekUsT0FBTyxPQUFPLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLENBQUM7WUFDOUMsQ0FBQyxDQUFDLENBQUM7WUFFSCxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDbkMsTUFBTSxNQUFNLEdBQUcsWUFBYSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQy9DLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUUvRSx1RUFBdUU7WUFDdkUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQzlDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsNkJBQTZCLENBQUMsQ0FBQztZQUN6RCxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1lBQzdELE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLDZCQUE2QixDQUFDLENBQUM7WUFDN0QsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsNkJBQTZCLENBQUMsQ0FBQztZQUM3RCxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM3QyxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxnREFBZ0QsRUFBRSxHQUFHLEVBQUU7WUFDMUQsTUFBTSxHQUFHLEdBQUcsSUFBQSwwQkFBYSxHQUFFLENBQUM7WUFDNUIsTUFBTSxLQUFLLEdBQUcsSUFBSSxtQkFBSyxDQUFDLEdBQUcsRUFBRSxXQUFXLEVBQUU7Z0JBQ3hDLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRTthQUN0RCxDQUFDLENBQUM7WUFFSCxNQUFNLEVBQUUsR0FBRyxJQUFJLHFDQUFvQixDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUU7Z0JBQ25ELElBQUksRUFBRSxTQUFTO2dCQUNmLFdBQVcsRUFBRSxxQkFBcUI7Z0JBQ2xDLGVBQWUsRUFBRSxnQkFBZ0I7YUFDbEMsQ0FBQyxDQUFDO1lBRUgsTUFBTSxXQUFXLEdBQUcsRUFBRSxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFFaEQsK0JBQStCO1lBQy9CLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtnQkFDaEMsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUN6QyxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ2pGLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFnQixFQUFFLEVBQUU7b0JBQ3JDLCtEQUErRDtvQkFDL0QsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQy9CLDBDQUEwQztvQkFDMUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FBQztnQkFDckQsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IEFzcGVjdHMsIFN0YWNrIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgQW5ub3RhdGlvbnMsIE1hdGNoIH0gZnJvbSAnYXdzLWNkay1saWIvYXNzZXJ0aW9ucyc7XG5pbXBvcnQgeyBGb3VuZGF0aW9uTW9kZWxJZGVudGlmaWVyIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWJlZHJvY2snO1xuaW1wb3J0IHsgQXNzZXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMtYXNzZXRzJztcbmltcG9ydCB7IEF3c1NvbHV0aW9uc0NoZWNrcywgTmFnU3VwcHJlc3Npb25zIH0gZnJvbSAnY2RrLW5hZyc7XG5pbXBvcnQgeyBjcmVhdGVUZXN0QXBwIH0gZnJvbSAnLi4vLi4vLi4vdXRpbGl0aWVzL3Rlc3QtdXRpbHMnO1xuaW1wb3J0IHsgQmF0Y2hBZ2VudCB9IGZyb20gJy4uL2JhdGNoLWFnZW50JztcbmltcG9ydCB7IEJlZHJvY2tLbm93bGVkZ2VCYXNlIH0gZnJvbSAnLi4va25vd2xlZGdlLWJhc2UnO1xuXG5jb25zdCB0ZXN0TW9kZWwgPSBGb3VuZGF0aW9uTW9kZWxJZGVudGlmaWVyLkFOVEhST1BJQ19DTEFVREVfM19TT05ORVRfMjAyNDAyMjlfVjFfMDtcblxuZGVzY3JpYmUoJ0FnZW50IEtub3dsZWRnZSBCYXNlIENESyBOYWcgVGVzdHMnLCAoKSA9PiB7XG4gIGRlc2NyaWJlKCdTaW5nbGUgS25vd2xlZGdlIEJhc2UnLCAoKSA9PiB7XG4gICAgdGVzdCgnYWdlbnQgd2l0aCBzaW5nbGUgS0IgcGFzc2VzIEFXUyBTb2x1dGlvbnMgY2hlY2tzJywgKCkgPT4ge1xuICAgICAgY29uc3QgYXBwID0gY3JlYXRlVGVzdEFwcCgpO1xuICAgICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soYXBwLCAnVGVzdFN0YWNrJywge1xuICAgICAgICBlbnY6IHsgYWNjb3VudDogJzEyMzQ1Njc4OTAxMicsIHJlZ2lvbjogJ3VzLWVhc3QtMScgfSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBzeXN0ZW1Qcm9tcHQgPSBuZXcgQXNzZXQoc3RhY2ssICdTeXN0ZW1Qcm9tcHQnLCB7XG4gICAgICAgIHBhdGg6IHBhdGguam9pbihfX2Rpcm5hbWUsICcuLi9yZXNvdXJjZXMvZGVmYXVsdC1zdHJhbmRzLWFnZW50L2JhdGNoLnB5JyksXG4gICAgICB9KTtcblxuICAgICAgY29uc3Qga2IgPSBuZXcgQmVkcm9ja0tub3dsZWRnZUJhc2Uoc3RhY2ssICdQcm9kdWN0RG9jcycsIHtcbiAgICAgICAgbmFtZTogJ3Byb2R1Y3QtZG9jdW1lbnRhdGlvbicsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUHJvZHVjdCBkb2N1bWVudGF0aW9uIGFuZCBGQVFzJyxcbiAgICAgICAga25vd2xlZGdlQmFzZUlkOiAnQUJDRDEyMzQnLFxuICAgICAgfSk7XG5cbiAgICAgIG5ldyBCYXRjaEFnZW50KHN0YWNrLCAnQWdlbnQnLCB7XG4gICAgICAgIGFnZW50TmFtZTogJ1Rlc3RBZ2VudCcsXG4gICAgICAgIHByb21wdDogJ1Rlc3QgcHJvbXB0JyxcbiAgICAgICAgYWdlbnREZWZpbml0aW9uOiB7XG4gICAgICAgICAgYmVkcm9ja01vZGVsOiB7IGZtTW9kZWxJZDogdGVzdE1vZGVsIH0sXG4gICAgICAgICAgc3lzdGVtUHJvbXB0LFxuICAgICAgICAgIGtub3dsZWRnZUJhc2VzOiBba2JdLFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIEFzcGVjdHMub2Yoc3RhY2spLmFkZChuZXcgQXdzU29sdXRpb25zQ2hlY2tzKHsgdmVyYm9zZTogdHJ1ZSB9KSk7XG5cbiAgICAgIC8vIFN1cHByZXNzaW9ucyB3aXRoIGRvY3VtZW50ZWQganVzdGlmaWNhdGlvbnNcbiAgICAgIE5hZ1N1cHByZXNzaW9ucy5hZGRTdGFja1N1cHByZXNzaW9ucyhzdGFjaywgW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdBd3NTb2x1dGlvbnMtSUFNNCcsXG4gICAgICAgICAgcmVhc29uOiAnTWFuYWdlZCBwb2xpY2llcyAoQVdTTGFtYmRhQmFzaWNFeGVjdXRpb25Sb2xlKSBhcmUgYWNjZXB0YWJsZSBmb3IgTGFtYmRhIGV4ZWN1dGlvbiByb2xlIGFzIHRoZXkgcHJvdmlkZSBtaW5pbWFsIHJlcXVpcmVkIHBlcm1pc3Npb25zIGZvciBDbG91ZFdhdGNoIExvZ3MnLFxuICAgICAgICAgIGFwcGxpZXNUbzogWydQb2xpY3k6OmFybjo8QVdTOjpQYXJ0aXRpb24+OmlhbTo6YXdzOnBvbGljeS9zZXJ2aWNlLXJvbGUvQVdTTGFtYmRhQmFzaWNFeGVjdXRpb25Sb2xlJ10sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ0F3c1NvbHV0aW9ucy1JQU01JyxcbiAgICAgICAgICByZWFzb246ICdXaWxkY2FyZCBwZXJtaXNzaW9ucyBhcmUgcmVxdWlyZWQgZm9yOiAoMSkgUzMgYXNzZXQgYWNjZXNzIHBhdHRlcm5zLCAoMikgQmVkcm9jayBtb2RlbCBpbnZvY2F0aW9uIGFjcm9zcyByZWdpb25zLCAoMykgQ2xvdWRXYXRjaCBMb2dzIHN0cmVhbSBjcmVhdGlvbi4gQWxsIHdpbGRjYXJkcyBhcmUgc2NvcGVkIHRvIHNwZWNpZmljIHJlc291cmNlcy4nLFxuICAgICAgICAgIGFwcGxpZXNUbzogW1xuICAgICAgICAgICAgJ0FjdGlvbjo6czM6R2V0T2JqZWN0KicsXG4gICAgICAgICAgICAnQWN0aW9uOjpzMzpHZXRCdWNrZXQqJyxcbiAgICAgICAgICAgICdBY3Rpb246OnMzOkxpc3QqJyxcbiAgICAgICAgICAgICdSZXNvdXJjZTo6KicsXG4gICAgICAgICAgICAnUmVzb3VyY2U6OmFybjphd3M6YmVkcm9jazoqOjpmb3VuZGF0aW9uLW1vZGVsL2FudGhyb3BpYy5jbGF1ZGUtMy1zb25uZXQtMjAyNDAyMjktdjE6MCcsXG4gICAgICAgICAgICAnUmVzb3VyY2U6OmFybjphd3M6bG9nczp1cy1lYXN0LTE6MTIzNDU2Nzg5MDEyOmxvZy1ncm91cDovYXdzL2xhbWJkYS9UZXN0QWdlbnQtdGVzdHN0YWNrYWdlbnRhYTJhZjBjNDoqJyxcbiAgICAgICAgICAgICdSZXNvdXJjZTo6YXJuOjxBV1M6OlBhcnRpdGlvbj46czM6OjpjZGstaG5iNjU5ZmRzLWFzc2V0cy0xMjM0NTY3ODkwMTItdXMtZWFzdC0xLyonLFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ0F3c1NvbHV0aW9ucy1MMScsXG4gICAgICAgICAgcmVhc29uOiAnTGFtYmRhIHJ1bnRpbWUgaXMgbWFuYWdlZCBieSBjb25zdHJ1Y3QgZGVmYXVsdHMgYW5kIHVwZGF0ZWQgYXMgcGFydCBvZiByZWd1bGFyIG1haW50ZW5hbmNlJyxcbiAgICAgICAgfSxcbiAgICAgIF0pO1xuXG4gICAgICBjb25zdCBlcnJvcnMgPSBBbm5vdGF0aW9ucy5mcm9tU3RhY2soc3RhY2spLmZpbmRFcnJvcihcbiAgICAgICAgJyonLFxuICAgICAgICBNYXRjaC5zdHJpbmdMaWtlUmVnZXhwKCdBd3NTb2x1dGlvbnMtLionKSxcbiAgICAgICk7XG4gICAgICBleHBlY3QoZXJyb3JzKS50b0hhdmVMZW5ndGgoMCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdNdWx0aXBsZSBLbm93bGVkZ2UgQmFzZXMnLCAoKSA9PiB7XG4gICAgdGVzdCgnYWdlbnQgd2l0aCBtdWx0aXBsZSBLQnMgcGFzc2VzIEFXUyBTb2x1dGlvbnMgY2hlY2tzJywgKCkgPT4ge1xuICAgICAgY29uc3QgYXBwID0gY3JlYXRlVGVzdEFwcCgpO1xuICAgICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soYXBwLCAnVGVzdFN0YWNrJywge1xuICAgICAgICBlbnY6IHsgYWNjb3VudDogJzEyMzQ1Njc4OTAxMicsIHJlZ2lvbjogJ3VzLWVhc3QtMScgfSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBzeXN0ZW1Qcm9tcHQgPSBuZXcgQXNzZXQoc3RhY2ssICdTeXN0ZW1Qcm9tcHQnLCB7XG4gICAgICAgIHBhdGg6IHBhdGguam9pbihfX2Rpcm5hbWUsICcuLi9yZXNvdXJjZXMvZGVmYXVsdC1zdHJhbmRzLWFnZW50L2JhdGNoLnB5JyksXG4gICAgICB9KTtcblxuICAgICAgY29uc3Qga2IxID0gbmV3IEJlZHJvY2tLbm93bGVkZ2VCYXNlKHN0YWNrLCAnUHJvZHVjdERvY3MnLCB7XG4gICAgICAgIG5hbWU6ICdwcm9kdWN0LWRvY3VtZW50YXRpb24nLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1Byb2R1Y3QgZG9jdW1lbnRhdGlvbiBhbmQgRkFRcycsXG4gICAgICAgIGtub3dsZWRnZUJhc2VJZDogJ0tCLVBST0RVQ1QtMTIzJyxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBrYjIgPSBuZXcgQmVkcm9ja0tub3dsZWRnZUJhc2Uoc3RhY2ssICdTdXBwb3J0RG9jcycsIHtcbiAgICAgICAgbmFtZTogJ3N1cHBvcnQtZG9jdW1lbnRhdGlvbicsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnU3VwcG9ydCBhcnRpY2xlcyBhbmQgdHJvdWJsZXNob290aW5nIGd1aWRlcycsXG4gICAgICAgIGtub3dsZWRnZUJhc2VJZDogJ0tCLVNVUFBPUlQtNDU2JyxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBrYjMgPSBuZXcgQmVkcm9ja0tub3dsZWRnZUJhc2Uoc3RhY2ssICdQb2xpY3lEb2NzJywge1xuICAgICAgICBuYW1lOiAncG9saWN5LWRvY3VtZW50YXRpb24nLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ0NvbXBhbnkgcG9saWNpZXMgYW5kIHByb2NlZHVyZXMnLFxuICAgICAgICBrbm93bGVkZ2VCYXNlSWQ6ICdLQi1QT0xJQ1ktNzg5JyxcbiAgICAgIH0pO1xuXG4gICAgICBuZXcgQmF0Y2hBZ2VudChzdGFjaywgJ0FnZW50Jywge1xuICAgICAgICBhZ2VudE5hbWU6ICdNdWx0aUtCQWdlbnQnLFxuICAgICAgICBwcm9tcHQ6ICdUZXN0IHByb21wdCB3aXRoIG11bHRpcGxlIGtub3dsZWRnZSBiYXNlcycsXG4gICAgICAgIGFnZW50RGVmaW5pdGlvbjoge1xuICAgICAgICAgIGJlZHJvY2tNb2RlbDogeyBmbU1vZGVsSWQ6IHRlc3RNb2RlbCB9LFxuICAgICAgICAgIHN5c3RlbVByb21wdCxcbiAgICAgICAgICBrbm93bGVkZ2VCYXNlczogW2tiMSwga2IyLCBrYjNdLFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIEFzcGVjdHMub2Yoc3RhY2spLmFkZChuZXcgQXdzU29sdXRpb25zQ2hlY2tzKHsgdmVyYm9zZTogdHJ1ZSB9KSk7XG5cbiAgICAgIE5hZ1N1cHByZXNzaW9ucy5hZGRTdGFja1N1cHByZXNzaW9ucyhzdGFjaywgW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdBd3NTb2x1dGlvbnMtSUFNNCcsXG4gICAgICAgICAgcmVhc29uOiAnTWFuYWdlZCBwb2xpY2llcyBhcmUgYWNjZXB0YWJsZSBmb3IgTGFtYmRhIGV4ZWN1dGlvbiByb2xlJyxcbiAgICAgICAgICBhcHBsaWVzVG86IFsnUG9saWN5Ojphcm46PEFXUzo6UGFydGl0aW9uPjppYW06OmF3czpwb2xpY3kvc2VydmljZS1yb2xlL0FXU0xhbWJkYUJhc2ljRXhlY3V0aW9uUm9sZSddLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdBd3NTb2x1dGlvbnMtSUFNNScsXG4gICAgICAgICAgcmVhc29uOiAnV2lsZGNhcmQgcGVybWlzc2lvbnMgYXJlIHNjb3BlZCB0byBzcGVjaWZpYyByZXNvdXJjZXMgZm9yIFMzIGFzc2V0cywgQmVkcm9jayBtb2RlbHMsIGFuZCBDbG91ZFdhdGNoIExvZ3MnLFxuICAgICAgICAgIGFwcGxpZXNUbzogW1xuICAgICAgICAgICAgJ0FjdGlvbjo6czM6R2V0T2JqZWN0KicsXG4gICAgICAgICAgICAnQWN0aW9uOjpzMzpHZXRCdWNrZXQqJyxcbiAgICAgICAgICAgICdBY3Rpb246OnMzOkxpc3QqJyxcbiAgICAgICAgICAgICdSZXNvdXJjZTo6KicsXG4gICAgICAgICAgICAnUmVzb3VyY2U6OmFybjphd3M6YmVkcm9jazoqOjpmb3VuZGF0aW9uLW1vZGVsL2FudGhyb3BpYy5jbGF1ZGUtMy1zb25uZXQtMjAyNDAyMjktdjE6MCcsXG4gICAgICAgICAgICAnUmVzb3VyY2U6OmFybjphd3M6bG9nczp1cy1lYXN0LTE6MTIzNDU2Nzg5MDEyOmxvZy1ncm91cDovYXdzL2xhbWJkYS9NdWx0aUtCQWdlbnQtdGVzdHN0YWNrYWdlbnRhYTJhZjBjNDoqJyxcbiAgICAgICAgICAgICdSZXNvdXJjZTo6YXJuOjxBV1M6OlBhcnRpdGlvbj46czM6OjpjZGstaG5iNjU5ZmRzLWFzc2V0cy0xMjM0NTY3ODkwMTItdXMtZWFzdC0xLyonLFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ0F3c1NvbHV0aW9ucy1MMScsXG4gICAgICAgICAgcmVhc29uOiAnTGFtYmRhIHJ1bnRpbWUgaXMgbWFuYWdlZCBieSBjb25zdHJ1Y3QgZGVmYXVsdHMnLFxuICAgICAgICB9LFxuICAgICAgXSk7XG5cbiAgICAgIGNvbnN0IGVycm9ycyA9IEFubm90YXRpb25zLmZyb21TdGFjayhzdGFjaykuZmluZEVycm9yKFxuICAgICAgICAnKicsXG4gICAgICAgIE1hdGNoLnN0cmluZ0xpa2VSZWdleHAoJ0F3c1NvbHV0aW9ucy0uKicpLFxuICAgICAgKTtcbiAgICAgIGV4cGVjdChlcnJvcnMpLnRvSGF2ZUxlbmd0aCgwKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ0lBTSBwZXJtaXNzaW9ucyBhcmUgc2NvcGVkIHRvIHNwZWNpZmljIEtCIEFSTnMgKG5vIHdpbGRjYXJkcyknLCAoKSA9PiB7XG4gICAgICBjb25zdCBhcHAgPSBjcmVhdGVUZXN0QXBwKCk7XG4gICAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjayhhcHAsICdUZXN0U3RhY2snLCB7XG4gICAgICAgIGVudjogeyBhY2NvdW50OiAnMTIzNDU2Nzg5MDEyJywgcmVnaW9uOiAndXMtZWFzdC0xJyB9LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGtiMSA9IG5ldyBCZWRyb2NrS25vd2xlZGdlQmFzZShzdGFjaywgJ0tCMScsIHtcbiAgICAgICAgbmFtZTogJ2tiLW9uZScsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnRmlyc3Qga25vd2xlZGdlIGJhc2UnLFxuICAgICAgICBrbm93bGVkZ2VCYXNlSWQ6ICdLQi1PTkUtMTIzJyxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBrYjIgPSBuZXcgQmVkcm9ja0tub3dsZWRnZUJhc2Uoc3RhY2ssICdLQjInLCB7XG4gICAgICAgIG5hbWU6ICdrYi10d28nLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1NlY29uZCBrbm93bGVkZ2UgYmFzZScsXG4gICAgICAgIGtub3dsZWRnZUJhc2VJZDogJ0tCLVRXTy00NTYnLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFZlcmlmeSBlYWNoIEtCIGdlbmVyYXRlcyBwZXJtaXNzaW9ucyBzY29wZWQgdG8gaXRzIHNwZWNpZmljIEFSTlxuICAgICAgY29uc3Qga2IxUGVybWlzc2lvbnMgPSBrYjEuZ2VuZXJhdGVJYW1QZXJtaXNzaW9ucygpO1xuICAgICAgY29uc3Qga2IyUGVybWlzc2lvbnMgPSBrYjIuZ2VuZXJhdGVJYW1QZXJtaXNzaW9ucygpO1xuXG4gICAgICAvLyBDaGVjayBLQjEgcGVybWlzc2lvbnNcbiAgICAgIGtiMVBlcm1pc3Npb25zLmZvckVhY2goKHN0YXRlbWVudCkgPT4ge1xuICAgICAgICBjb25zdCBqc29uID0gc3RhdGVtZW50LnRvU3RhdGVtZW50SnNvbigpO1xuICAgICAgICBjb25zdCByZXNvdXJjZXMgPSBBcnJheS5pc0FycmF5KGpzb24uUmVzb3VyY2UpID8ganNvbi5SZXNvdXJjZSA6IFtqc29uLlJlc291cmNlXTtcbiAgICAgICAgcmVzb3VyY2VzLmZvckVhY2goKHJlc291cmNlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICBleHBlY3QocmVzb3VyY2UpLm5vdC50b0JlKCcqJyk7XG4gICAgICAgICAgZXhwZWN0KHJlc291cmNlKS5ub3QudG9Db250YWluKCdrbm93bGVkZ2UtYmFzZS8qJyk7XG4gICAgICAgICAgaWYgKHJlc291cmNlLmluY2x1ZGVzKCdrbm93bGVkZ2UtYmFzZScpKSB7XG4gICAgICAgICAgICBleHBlY3QocmVzb3VyY2UpLnRvQ29udGFpbignS0ItT05FLTEyMycpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgLy8gQ2hlY2sgS0IyIHBlcm1pc3Npb25zXG4gICAgICBrYjJQZXJtaXNzaW9ucy5mb3JFYWNoKChzdGF0ZW1lbnQpID0+IHtcbiAgICAgICAgY29uc3QganNvbiA9IHN0YXRlbWVudC50b1N0YXRlbWVudEpzb24oKTtcbiAgICAgICAgY29uc3QgcmVzb3VyY2VzID0gQXJyYXkuaXNBcnJheShqc29uLlJlc291cmNlKSA/IGpzb24uUmVzb3VyY2UgOiBbanNvbi5SZXNvdXJjZV07XG4gICAgICAgIHJlc291cmNlcy5mb3JFYWNoKChyZXNvdXJjZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgZXhwZWN0KHJlc291cmNlKS5ub3QudG9CZSgnKicpO1xuICAgICAgICAgIGV4cGVjdChyZXNvdXJjZSkubm90LnRvQ29udGFpbigna25vd2xlZGdlLWJhc2UvKicpO1xuICAgICAgICAgIGlmIChyZXNvdXJjZS5pbmNsdWRlcygna25vd2xlZGdlLWJhc2UnKSkge1xuICAgICAgICAgICAgZXhwZWN0KHJlc291cmNlKS50b0NvbnRhaW4oJ0tCLVRXTy00NTYnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdHdWFyZHJhaWxzIENvbmZpZ3VyYXRpb24nLCAoKSA9PiB7XG4gICAgdGVzdCgnYWdlbnQgd2l0aCBndWFyZHJhaWxzIHBhc3NlcyBBV1MgU29sdXRpb25zIGNoZWNrcycsICgpID0+IHtcbiAgICAgIGNvbnN0IGFwcCA9IGNyZWF0ZVRlc3RBcHAoKTtcbiAgICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKGFwcCwgJ1Rlc3RTdGFjaycsIHtcbiAgICAgICAgZW52OiB7IGFjY291bnQ6ICcxMjM0NTY3ODkwMTInLCByZWdpb246ICd1cy1lYXN0LTEnIH0sXG4gICAgICB9KTtcblxuICAgICAgY29uc3Qgc3lzdGVtUHJvbXB0ID0gbmV3IEFzc2V0KHN0YWNrLCAnU3lzdGVtUHJvbXB0Jywge1xuICAgICAgICBwYXRoOiBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4vcmVzb3VyY2VzL2RlZmF1bHQtc3RyYW5kcy1hZ2VudC9iYXRjaC5weScpLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGtiID0gbmV3IEJlZHJvY2tLbm93bGVkZ2VCYXNlKHN0YWNrLCAnU2VjdXJlRG9jcycsIHtcbiAgICAgICAgbmFtZTogJ3NlY3VyZS1kb2N1bWVudGF0aW9uJyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdTZWN1cmUgZG9jdW1lbnRhdGlvbiB3aXRoIGNvbnRlbnQgZmlsdGVyaW5nJyxcbiAgICAgICAga25vd2xlZGdlQmFzZUlkOiAnS0ItU0VDVVJFLTEyMycsXG4gICAgICAgIGd1YXJkcmFpbDoge1xuICAgICAgICAgIGd1YXJkcmFpbElkOiAnY29udGVudC1maWx0ZXItZ3VhcmRyYWlsJyxcbiAgICAgICAgICBndWFyZHJhaWxWZXJzaW9uOiAnMScsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgbmV3IEJhdGNoQWdlbnQoc3RhY2ssICdBZ2VudCcsIHtcbiAgICAgICAgYWdlbnROYW1lOiAnR3VhcmRyYWlsQWdlbnQnLFxuICAgICAgICBwcm9tcHQ6ICdUZXN0IHByb21wdCB3aXRoIGd1YXJkcmFpbHMnLFxuICAgICAgICBhZ2VudERlZmluaXRpb246IHtcbiAgICAgICAgICBiZWRyb2NrTW9kZWw6IHsgZm1Nb2RlbElkOiB0ZXN0TW9kZWwgfSxcbiAgICAgICAgICBzeXN0ZW1Qcm9tcHQsXG4gICAgICAgICAga25vd2xlZGdlQmFzZXM6IFtrYl0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgQXNwZWN0cy5vZihzdGFjaykuYWRkKG5ldyBBd3NTb2x1dGlvbnNDaGVja3MoeyB2ZXJib3NlOiB0cnVlIH0pKTtcblxuICAgICAgTmFnU3VwcHJlc3Npb25zLmFkZFN0YWNrU3VwcHJlc3Npb25zKHN0YWNrLCBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ0F3c1NvbHV0aW9ucy1JQU00JyxcbiAgICAgICAgICByZWFzb246ICdNYW5hZ2VkIHBvbGljaWVzIGFyZSBhY2NlcHRhYmxlIGZvciBMYW1iZGEgZXhlY3V0aW9uIHJvbGUnLFxuICAgICAgICAgIGFwcGxpZXNUbzogWydQb2xpY3k6OmFybjo8QVdTOjpQYXJ0aXRpb24+OmlhbTo6YXdzOnBvbGljeS9zZXJ2aWNlLXJvbGUvQVdTTGFtYmRhQmFzaWNFeGVjdXRpb25Sb2xlJ10sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ0F3c1NvbHV0aW9ucy1JQU01JyxcbiAgICAgICAgICByZWFzb246ICdXaWxkY2FyZCBwZXJtaXNzaW9ucyBhcmUgc2NvcGVkIHRvIHNwZWNpZmljIHJlc291cmNlcycsXG4gICAgICAgICAgYXBwbGllc1RvOiBbXG4gICAgICAgICAgICAnQWN0aW9uOjpzMzpHZXRPYmplY3QqJyxcbiAgICAgICAgICAgICdBY3Rpb246OnMzOkdldEJ1Y2tldConLFxuICAgICAgICAgICAgJ0FjdGlvbjo6czM6TGlzdConLFxuICAgICAgICAgICAgJ1Jlc291cmNlOjoqJyxcbiAgICAgICAgICAgICdSZXNvdXJjZTo6YXJuOmF3czpiZWRyb2NrOio6OmZvdW5kYXRpb24tbW9kZWwvYW50aHJvcGljLmNsYXVkZS0zLXNvbm5ldC0yMDI0MDIyOS12MTowJyxcbiAgICAgICAgICAgICdSZXNvdXJjZTo6YXJuOmF3czpsb2dzOnVzLWVhc3QtMToxMjM0NTY3ODkwMTI6bG9nLWdyb3VwOi9hd3MvbGFtYmRhL0d1YXJkcmFpbEFnZW50LXRlc3RzdGFja2FnZW50YWEyYWYwYzQ6KicsXG4gICAgICAgICAgICAnUmVzb3VyY2U6OmFybjo8QVdTOjpQYXJ0aXRpb24+OnMzOjo6Y2RrLWhuYjY1OWZkcy1hc3NldHMtMTIzNDU2Nzg5MDEyLXVzLWVhc3QtMS8qJyxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdBd3NTb2x1dGlvbnMtTDEnLFxuICAgICAgICAgIHJlYXNvbjogJ0xhbWJkYSBydW50aW1lIGlzIG1hbmFnZWQgYnkgY29uc3RydWN0IGRlZmF1bHRzJyxcbiAgICAgICAgfSxcbiAgICAgIF0pO1xuXG4gICAgICBjb25zdCBlcnJvcnMgPSBBbm5vdGF0aW9ucy5mcm9tU3RhY2soc3RhY2spLmZpbmRFcnJvcihcbiAgICAgICAgJyonLFxuICAgICAgICBNYXRjaC5zdHJpbmdMaWtlUmVnZXhwKCdBd3NTb2x1dGlvbnMtLionKSxcbiAgICAgICk7XG4gICAgICBleHBlY3QoZXJyb3JzKS50b0hhdmVMZW5ndGgoMCk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdndWFyZHJhaWwgcGVybWlzc2lvbnMgYXJlIHNjb3BlZCB0byBzcGVjaWZpYyBndWFyZHJhaWwgQVJOJywgKCkgPT4ge1xuICAgICAgY29uc3QgYXBwID0gY3JlYXRlVGVzdEFwcCgpO1xuICAgICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soYXBwLCAnVGVzdFN0YWNrJywge1xuICAgICAgICBlbnY6IHsgYWNjb3VudDogJzEyMzQ1Njc4OTAxMicsIHJlZ2lvbjogJ3VzLWVhc3QtMScgfSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBrYiA9IG5ldyBCZWRyb2NrS25vd2xlZGdlQmFzZShzdGFjaywgJ1NlY3VyZURvY3MnLCB7XG4gICAgICAgIG5hbWU6ICdzZWN1cmUtZG9jdW1lbnRhdGlvbicsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnU2VjdXJlIGRvY3VtZW50YXRpb24gd2l0aCBjb250ZW50IGZpbHRlcmluZycsXG4gICAgICAgIGtub3dsZWRnZUJhc2VJZDogJ0tCLVNFQ1VSRS0xMjMnLFxuICAgICAgICBndWFyZHJhaWw6IHtcbiAgICAgICAgICBndWFyZHJhaWxJZDogJ215LXNwZWNpZmljLWd1YXJkcmFpbCcsXG4gICAgICAgICAgZ3VhcmRyYWlsVmVyc2lvbjogJzInLFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHBlcm1pc3Npb25zID0ga2IuZ2VuZXJhdGVJYW1QZXJtaXNzaW9ucygpO1xuXG4gICAgICAvLyBGaW5kIHRoZSBndWFyZHJhaWwgcGVybWlzc2lvblxuICAgICAgY29uc3QgZ3VhcmRyYWlsUGVybWlzc2lvbiA9IHBlcm1pc3Npb25zLmZpbmQoKHApID0+IHtcbiAgICAgICAgY29uc3QganNvbiA9IHAudG9TdGF0ZW1lbnRKc29uKCk7XG4gICAgICAgIHJldHVybiBqc29uLkFjdGlvbiA9PT0gJ2JlZHJvY2s6QXBwbHlHdWFyZHJhaWwnO1xuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChndWFyZHJhaWxQZXJtaXNzaW9uKS50b0JlRGVmaW5lZCgpO1xuICAgICAgY29uc3QgZ3VhcmRyYWlsSnNvbiA9IGd1YXJkcmFpbFBlcm1pc3Npb24hLnRvU3RhdGVtZW50SnNvbigpO1xuXG4gICAgICAvLyBWZXJpZnkgZ3VhcmRyYWlsIHBlcm1pc3Npb24gaXMgc2NvcGVkIHRvIHNwZWNpZmljIGd1YXJkcmFpbFxuICAgICAgZXhwZWN0KGd1YXJkcmFpbEpzb24uUmVzb3VyY2UpLnRvQ29udGFpbignZ3VhcmRyYWlsL215LXNwZWNpZmljLWd1YXJkcmFpbCcpO1xuICAgICAgZXhwZWN0KGd1YXJkcmFpbEpzb24uUmVzb3VyY2UpLm5vdC50b0JlKCcqJyk7XG4gICAgICBleHBlY3QoZ3VhcmRyYWlsSnNvbi5SZXNvdXJjZSkubm90LnRvQ29udGFpbignZ3VhcmRyYWlsLyonKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2FnZW50IHdpdGggbXVsdGlwbGUgS0JzIGFuZCBndWFyZHJhaWxzIHBhc3NlcyBBV1MgU29sdXRpb25zIGNoZWNrcycsICgpID0+IHtcbiAgICAgIGNvbnN0IGFwcCA9IGNyZWF0ZVRlc3RBcHAoKTtcbiAgICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKGFwcCwgJ1Rlc3RTdGFjaycsIHtcbiAgICAgICAgZW52OiB7IGFjY291bnQ6ICcxMjM0NTY3ODkwMTInLCByZWdpb246ICd1cy1lYXN0LTEnIH0sXG4gICAgICB9KTtcblxuICAgICAgY29uc3Qgc3lzdGVtUHJvbXB0ID0gbmV3IEFzc2V0KHN0YWNrLCAnU3lzdGVtUHJvbXB0Jywge1xuICAgICAgICBwYXRoOiBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4vcmVzb3VyY2VzL2RlZmF1bHQtc3RyYW5kcy1hZ2VudC9iYXRjaC5weScpLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGtiMSA9IG5ldyBCZWRyb2NrS25vd2xlZGdlQmFzZShzdGFjaywgJ1B1YmxpY0RvY3MnLCB7XG4gICAgICAgIG5hbWU6ICdwdWJsaWMtZG9jdW1lbnRhdGlvbicsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUHVibGljIGRvY3VtZW50YXRpb24gd2l0aG91dCBndWFyZHJhaWxzJyxcbiAgICAgICAga25vd2xlZGdlQmFzZUlkOiAnS0ItUFVCTElDLTEyMycsXG4gICAgICB9KTtcblxuICAgICAgY29uc3Qga2IyID0gbmV3IEJlZHJvY2tLbm93bGVkZ2VCYXNlKHN0YWNrLCAnU2VjdXJlRG9jcycsIHtcbiAgICAgICAgbmFtZTogJ3NlY3VyZS1kb2N1bWVudGF0aW9uJyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdTZWN1cmUgZG9jdW1lbnRhdGlvbiB3aXRoIGd1YXJkcmFpbHMnLFxuICAgICAgICBrbm93bGVkZ2VCYXNlSWQ6ICdLQi1TRUNVUkUtNDU2JyxcbiAgICAgICAgZ3VhcmRyYWlsOiB7XG4gICAgICAgICAgZ3VhcmRyYWlsSWQ6ICdwaWktZmlsdGVyJyxcbiAgICAgICAgICBndWFyZHJhaWxWZXJzaW9uOiAnMScsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgbmV3IEJhdGNoQWdlbnQoc3RhY2ssICdBZ2VudCcsIHtcbiAgICAgICAgYWdlbnROYW1lOiAnTWl4ZWRBZ2VudCcsXG4gICAgICAgIHByb21wdDogJ1Rlc3QgcHJvbXB0IHdpdGggbWl4ZWQgS0IgY29uZmlndXJhdGlvbnMnLFxuICAgICAgICBhZ2VudERlZmluaXRpb246IHtcbiAgICAgICAgICBiZWRyb2NrTW9kZWw6IHsgZm1Nb2RlbElkOiB0ZXN0TW9kZWwgfSxcbiAgICAgICAgICBzeXN0ZW1Qcm9tcHQsXG4gICAgICAgICAga25vd2xlZGdlQmFzZXM6IFtrYjEsIGtiMl0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgQXNwZWN0cy5vZihzdGFjaykuYWRkKG5ldyBBd3NTb2x1dGlvbnNDaGVja3MoeyB2ZXJib3NlOiB0cnVlIH0pKTtcblxuICAgICAgTmFnU3VwcHJlc3Npb25zLmFkZFN0YWNrU3VwcHJlc3Npb25zKHN0YWNrLCBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ0F3c1NvbHV0aW9ucy1JQU00JyxcbiAgICAgICAgICByZWFzb246ICdNYW5hZ2VkIHBvbGljaWVzIGFyZSBhY2NlcHRhYmxlIGZvciBMYW1iZGEgZXhlY3V0aW9uIHJvbGUnLFxuICAgICAgICAgIGFwcGxpZXNUbzogWydQb2xpY3k6OmFybjo8QVdTOjpQYXJ0aXRpb24+OmlhbTo6YXdzOnBvbGljeS9zZXJ2aWNlLXJvbGUvQVdTTGFtYmRhQmFzaWNFeGVjdXRpb25Sb2xlJ10sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ0F3c1NvbHV0aW9ucy1JQU01JyxcbiAgICAgICAgICByZWFzb246ICdXaWxkY2FyZCBwZXJtaXNzaW9ucyBhcmUgc2NvcGVkIHRvIHNwZWNpZmljIHJlc291cmNlcycsXG4gICAgICAgICAgYXBwbGllc1RvOiBbXG4gICAgICAgICAgICAnQWN0aW9uOjpzMzpHZXRPYmplY3QqJyxcbiAgICAgICAgICAgICdBY3Rpb246OnMzOkdldEJ1Y2tldConLFxuICAgICAgICAgICAgJ0FjdGlvbjo6czM6TGlzdConLFxuICAgICAgICAgICAgJ1Jlc291cmNlOjoqJyxcbiAgICAgICAgICAgICdSZXNvdXJjZTo6YXJuOmF3czpiZWRyb2NrOio6OmZvdW5kYXRpb24tbW9kZWwvYW50aHJvcGljLmNsYXVkZS0zLXNvbm5ldC0yMDI0MDIyOS12MTowJyxcbiAgICAgICAgICAgICdSZXNvdXJjZTo6YXJuOmF3czpsb2dzOnVzLWVhc3QtMToxMjM0NTY3ODkwMTI6bG9nLWdyb3VwOi9hd3MvbGFtYmRhL01peGVkQWdlbnQtdGVzdHN0YWNrYWdlbnRhYTJhZjBjNDoqJyxcbiAgICAgICAgICAgICdSZXNvdXJjZTo6YXJuOjxBV1M6OlBhcnRpdGlvbj46czM6OjpjZGstaG5iNjU5ZmRzLWFzc2V0cy0xMjM0NTY3ODkwMTItdXMtZWFzdC0xLyonLFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ0F3c1NvbHV0aW9ucy1MMScsXG4gICAgICAgICAgcmVhc29uOiAnTGFtYmRhIHJ1bnRpbWUgaXMgbWFuYWdlZCBieSBjb25zdHJ1Y3QgZGVmYXVsdHMnLFxuICAgICAgICB9LFxuICAgICAgXSk7XG5cbiAgICAgIGNvbnN0IGVycm9ycyA9IEFubm90YXRpb25zLmZyb21TdGFjayhzdGFjaykuZmluZEVycm9yKFxuICAgICAgICAnKicsXG4gICAgICAgIE1hdGNoLnN0cmluZ0xpa2VSZWdleHAoJ0F3c1NvbHV0aW9ucy0uKicpLFxuICAgICAgKTtcbiAgICAgIGV4cGVjdChlcnJvcnMpLnRvSGF2ZUxlbmd0aCgwKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0xlYXN0IFByaXZpbGVnZSBWZXJpZmljYXRpb24nLCAoKSA9PiB7XG4gICAgdGVzdCgnS0IgcGVybWlzc2lvbnMgZm9sbG93IGxlYXN0LXByaXZpbGVnZSBwcmluY2lwbGUnLCAoKSA9PiB7XG4gICAgICBjb25zdCBhcHAgPSBjcmVhdGVUZXN0QXBwKCk7XG4gICAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjayhhcHAsICdUZXN0U3RhY2snLCB7XG4gICAgICAgIGVudjogeyBhY2NvdW50OiAnMTIzNDU2Nzg5MDEyJywgcmVnaW9uOiAndXMtZWFzdC0xJyB9LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGtiID0gbmV3IEJlZHJvY2tLbm93bGVkZ2VCYXNlKHN0YWNrLCAnVGVzdEtCJywge1xuICAgICAgICBuYW1lOiAndGVzdC1rYicsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnVGVzdCBrbm93bGVkZ2UgYmFzZScsXG4gICAgICAgIGtub3dsZWRnZUJhc2VJZDogJ1RFU1QtS0ItMTIzJyxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBwZXJtaXNzaW9ucyA9IGtiLmdlbmVyYXRlSWFtUGVybWlzc2lvbnMoKTtcblxuICAgICAgLy8gVmVyaWZ5IG9ubHkgbmVjZXNzYXJ5IGFjdGlvbnMgYXJlIGdyYW50ZWRcbiAgICAgIGNvbnN0IGtiUGVybWlzc2lvbiA9IHBlcm1pc3Npb25zLmZpbmQoKHApID0+IHtcbiAgICAgICAgY29uc3QganNvbiA9IHAudG9TdGF0ZW1lbnRKc29uKCk7XG4gICAgICAgIGNvbnN0IGFjdGlvbnMgPSBBcnJheS5pc0FycmF5KGpzb24uQWN0aW9uKSA/IGpzb24uQWN0aW9uIDogW2pzb24uQWN0aW9uXTtcbiAgICAgICAgcmV0dXJuIGFjdGlvbnMuaW5jbHVkZXMoJ2JlZHJvY2s6UmV0cmlldmUnKTtcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3Qoa2JQZXJtaXNzaW9uKS50b0JlRGVmaW5lZCgpO1xuICAgICAgY29uc3Qga2JKc29uID0ga2JQZXJtaXNzaW9uIS50b1N0YXRlbWVudEpzb24oKTtcbiAgICAgIGNvbnN0IGFjdGlvbnMgPSBBcnJheS5pc0FycmF5KGtiSnNvbi5BY3Rpb24pID8ga2JKc29uLkFjdGlvbiA6IFtrYkpzb24uQWN0aW9uXTtcblxuICAgICAgLy8gU2hvdWxkIG9ubHkgaGF2ZSBSZXRyaWV2ZSBhbmQgUmV0cmlldmVBbmRHZW5lcmF0ZSAtIG5vIGFkbWluIGFjdGlvbnNcbiAgICAgIGV4cGVjdChhY3Rpb25zKS50b0NvbnRhaW4oJ2JlZHJvY2s6UmV0cmlldmUnKTtcbiAgICAgIGV4cGVjdChhY3Rpb25zKS50b0NvbnRhaW4oJ2JlZHJvY2s6UmV0cmlldmVBbmRHZW5lcmF0ZScpO1xuICAgICAgZXhwZWN0KGFjdGlvbnMpLm5vdC50b0NvbnRhaW4oJ2JlZHJvY2s6Q3JlYXRlS25vd2xlZGdlQmFzZScpO1xuICAgICAgZXhwZWN0KGFjdGlvbnMpLm5vdC50b0NvbnRhaW4oJ2JlZHJvY2s6RGVsZXRlS25vd2xlZGdlQmFzZScpO1xuICAgICAgZXhwZWN0KGFjdGlvbnMpLm5vdC50b0NvbnRhaW4oJ2JlZHJvY2s6VXBkYXRlS25vd2xlZGdlQmFzZScpO1xuICAgICAgZXhwZWN0KGFjdGlvbnMpLm5vdC50b0NvbnRhaW4oJ2JlZHJvY2s6KicpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnbm8gd2lsZGNhcmQgcmVzb3VyY2UgcGVybWlzc2lvbnMgZm9yIEtCIGFjY2VzcycsICgpID0+IHtcbiAgICAgIGNvbnN0IGFwcCA9IGNyZWF0ZVRlc3RBcHAoKTtcbiAgICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKGFwcCwgJ1Rlc3RTdGFjaycsIHtcbiAgICAgICAgZW52OiB7IGFjY291bnQ6ICcxMjM0NTY3ODkwMTInLCByZWdpb246ICd1cy1lYXN0LTEnIH0sXG4gICAgICB9KTtcblxuICAgICAgY29uc3Qga2IgPSBuZXcgQmVkcm9ja0tub3dsZWRnZUJhc2Uoc3RhY2ssICdUZXN0S0InLCB7XG4gICAgICAgIG5hbWU6ICd0ZXN0LWtiJyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdUZXN0IGtub3dsZWRnZSBiYXNlJyxcbiAgICAgICAga25vd2xlZGdlQmFzZUlkOiAnU1BFQ0lGSUMtS0ItSUQnLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHBlcm1pc3Npb25zID0ga2IuZ2VuZXJhdGVJYW1QZXJtaXNzaW9ucygpO1xuXG4gICAgICAvLyBWZXJpZnkgbm8gd2lsZGNhcmQgcmVzb3VyY2VzXG4gICAgICBwZXJtaXNzaW9ucy5mb3JFYWNoKChzdGF0ZW1lbnQpID0+IHtcbiAgICAgICAgY29uc3QganNvbiA9IHN0YXRlbWVudC50b1N0YXRlbWVudEpzb24oKTtcbiAgICAgICAgY29uc3QgcmVzb3VyY2VzID0gQXJyYXkuaXNBcnJheShqc29uLlJlc291cmNlKSA/IGpzb24uUmVzb3VyY2UgOiBbanNvbi5SZXNvdXJjZV07XG4gICAgICAgIHJlc291cmNlcy5mb3JFYWNoKChyZXNvdXJjZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgLy8gUmVzb3VyY2Ugc2hvdWxkIG5vdCBiZSBqdXN0ICcqJyAod2lsZGNhcmQgZm9yIGFsbCByZXNvdXJjZXMpXG4gICAgICAgICAgZXhwZWN0KHJlc291cmNlKS5ub3QudG9CZSgnKicpO1xuICAgICAgICAgIC8vIFJlc291cmNlIHNob3VsZCBub3QgaGF2ZSB3aWxkY2FyZCBLQiBJRFxuICAgICAgICAgIGV4cGVjdChyZXNvdXJjZSkubm90LnRvTWF0Y2goL2tub3dsZWRnZS1iYXNlXFwvXFwqLyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
403
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbnQta25vd2xlZGdlLWJhc2UtbmFnLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi91c2UtY2FzZXMvZnJhbWV3b3JrL2FnZW50cy90ZXN0cy9hZ2VudC1rbm93bGVkZ2UtYmFzZS1uYWcudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEscUVBQXFFO0FBQ3JFLHNDQUFzQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFdEMsMkNBQTZCO0FBQzdCLDZDQUE2QztBQUM3Qyx1REFBNEQ7QUFDNUQseURBQW9FO0FBQ3BFLDZEQUFrRDtBQUNsRCxxQ0FBOEQ7QUFDOUQsOERBQThEO0FBQzlELGdEQUE0QztBQUM1QyxzREFBeUQ7QUFFekQsTUFBTSxTQUFTLEdBQUcsdUNBQXlCLENBQUMsdUNBQXVDLENBQUM7QUFFcEYsUUFBUSxDQUFDLG9DQUFvQyxFQUFFLEdBQUcsRUFBRTtJQUNsRCxRQUFRLENBQUMsdUJBQXVCLEVBQUUsR0FBRyxFQUFFO1FBQ3JDLElBQUksQ0FBQyxrREFBa0QsRUFBRSxHQUFHLEVBQUU7WUFDNUQsTUFBTSxHQUFHLEdBQUcsSUFBQSwwQkFBYSxHQUFFLENBQUM7WUFDNUIsTUFBTSxLQUFLLEdBQUcsSUFBSSxtQkFBSyxDQUFDLEdBQUcsRUFBRSxXQUFXLEVBQUU7Z0JBQ3hDLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRTthQUN0RCxDQUFDLENBQUM7WUFFSCxNQUFNLFlBQVksR0FBRyxJQUFJLHFCQUFLLENBQUMsS0FBSyxFQUFFLGNBQWMsRUFBRTtnQkFDcEQsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLDZDQUE2QyxDQUFDO2FBQzFFLENBQUMsQ0FBQztZQUVILE1BQU0sRUFBRSxHQUFHLElBQUkscUNBQW9CLENBQUMsS0FBSyxFQUFFLGFBQWEsRUFBRTtnQkFDeEQsSUFBSSxF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Q0FBQyxRQUFnQixFQUFFLEVBQUU7b0JBQ3JDLCtEQUErRDtvQkFDL0QsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQy9CLDBDQUEwQztvQkFDMUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FBQztnQkFDckQsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IEFzcGVjdHMsIFN0YWNrIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgQW5ub3RhdGlvbnMsIE1hdGNoIH0gZnJvbSAnYXdzLWNkay1saWIvYXNzZXJ0aW9ucyc7XG5pbXBvcnQgeyBGb3VuZGF0aW9uTW9kZWxJZGVudGlmaWVyIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWJlZHJvY2snO1xuaW1wb3J0IHsgQXNzZXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMtYXNzZXRzJztcbmltcG9ydCB7IEF3c1NvbHV0aW9uc0NoZWNrcywgTmFnU3VwcHJlc3Npb25zIH0gZnJvbSAnY2RrLW5hZyc7XG5pbXBvcnQgeyBjcmVhdGVUZXN0QXBwIH0gZnJvbSAnLi4vLi4vLi4vdXRpbGl0aWVzL3Rlc3QtdXRpbHMnO1xuaW1wb3J0IHsgQmF0Y2hBZ2VudCB9IGZyb20gJy4uL2JhdGNoLWFnZW50JztcbmltcG9ydCB7IEJlZHJvY2tLbm93bGVkZ2VCYXNlIH0gZnJvbSAnLi4va25vd2xlZGdlLWJhc2UnO1xuXG5jb25zdCB0ZXN0TW9kZWwgPSBGb3VuZGF0aW9uTW9kZWxJZGVudGlmaWVyLkFOVEhST1BJQ19DTEFVREVfM19TT05ORVRfMjAyNDAyMjlfVjFfMDtcblxuZGVzY3JpYmUoJ0FnZW50IEtub3dsZWRnZSBCYXNlIENESyBOYWcgVGVzdHMnLCAoKSA9PiB7XG4gIGRlc2NyaWJlKCdTaW5nbGUgS25vd2xlZGdlIEJhc2UnLCAoKSA9PiB7XG4gICAgdGVzdCgnYWdlbnQgd2l0aCBzaW5nbGUgS0IgcGFzc2VzIEFXUyBTb2x1dGlvbnMgY2hlY2tzJywgKCkgPT4ge1xuICAgICAgY29uc3QgYXBwID0gY3JlYXRlVGVzdEFwcCgpO1xuICAgICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soYXBwLCAnVGVzdFN0YWNrJywge1xuICAgICAgICBlbnY6IHsgYWNjb3VudDogJzEyMzQ1Njc4OTAxMicsIHJlZ2lvbjogJ3VzLWVhc3QtMScgfSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBzeXN0ZW1Qcm9tcHQgPSBuZXcgQXNzZXQoc3RhY2ssICdTeXN0ZW1Qcm9tcHQnLCB7XG4gICAgICAgIHBhdGg6IHBhdGguam9pbihfX2Rpcm5hbWUsICcuLi9yZXNvdXJjZXMvZGVmYXVsdC1zdHJhbmRzLWFnZW50L2JhdGNoLnB5JyksXG4gICAgICB9KTtcblxuICAgICAgY29uc3Qga2IgPSBuZXcgQmVkcm9ja0tub3dsZWRnZUJhc2Uoc3RhY2ssICdQcm9kdWN0RG9jcycsIHtcbiAgICAgICAgbmFtZTogJ3Byb2R1Y3QtZG9jdW1lbnRhdGlvbicsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUHJvZHVjdCBkb2N1bWVudGF0aW9uIGFuZCBGQVFzJyxcbiAgICAgICAga25vd2xlZGdlQmFzZUlkOiAnQUJDRDEyMzQnLFxuICAgICAgfSk7XG5cbiAgICAgIG5ldyBCYXRjaEFnZW50KHN0YWNrLCAnQWdlbnQnLCB7XG4gICAgICAgIGFnZW50TmFtZTogJ1Rlc3RBZ2VudCcsXG4gICAgICAgIHByb21wdDogJ1Rlc3QgcHJvbXB0JyxcbiAgICAgICAgYWdlbnREZWZpbml0aW9uOiB7XG4gICAgICAgICAgYmVkcm9ja01vZGVsOiB7IGZtTW9kZWxJZDogdGVzdE1vZGVsIH0sXG4gICAgICAgICAgc3lzdGVtUHJvbXB0LFxuICAgICAgICAgIGtub3dsZWRnZUJhc2VzOiBba2JdLFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIEFzcGVjdHMub2Yoc3RhY2spLmFkZChuZXcgQXdzU29sdXRpb25zQ2hlY2tzKHsgdmVyYm9zZTogdHJ1ZSB9KSk7XG5cbiAgICAgIC8vIFN1cHByZXNzaW9ucyB3aXRoIGRvY3VtZW50ZWQganVzdGlmaWNhdGlvbnNcbiAgICAgIE5hZ1N1cHByZXNzaW9ucy5hZGRTdGFja1N1cHByZXNzaW9ucyhzdGFjaywgW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdBd3NTb2x1dGlvbnMtSUFNNCcsXG4gICAgICAgICAgcmVhc29uOiAnTWFuYWdlZCBwb2xpY2llcyAoQVdTTGFtYmRhQmFzaWNFeGVjdXRpb25Sb2xlKSBhcmUgYWNjZXB0YWJsZSBmb3IgTGFtYmRhIGV4ZWN1dGlvbiByb2xlIGFzIHRoZXkgcHJvdmlkZSBtaW5pbWFsIHJlcXVpcmVkIHBlcm1pc3Npb25zIGZvciBDbG91ZFdhdGNoIExvZ3MnLFxuICAgICAgICAgIGFwcGxpZXNUbzogWydQb2xpY3k6OmFybjo8QVdTOjpQYXJ0aXRpb24+OmlhbTo6YXdzOnBvbGljeS9zZXJ2aWNlLXJvbGUvQVdTTGFtYmRhQmFzaWNFeGVjdXRpb25Sb2xlJ10sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ0F3c1NvbHV0aW9ucy1JQU01JyxcbiAgICAgICAgICByZWFzb246ICdXaWxkY2FyZCBwZXJtaXNzaW9ucyBhcmUgcmVxdWlyZWQgZm9yOiAoMSkgUzMgYXNzZXQgYWNjZXNzIHBhdHRlcm5zLCAoMikgQmVkcm9jayBtb2RlbCBpbnZvY2F0aW9uIGFjcm9zcyByZWdpb25zLCAoMykgQ2xvdWRXYXRjaCBMb2dzIHN0cmVhbSBjcmVhdGlvbi4gQWxsIHdpbGRjYXJkcyBhcmUgc2NvcGVkIHRvIHNwZWNpZmljIHJlc291cmNlcy4nLFxuICAgICAgICAgIGFwcGxpZXNUbzogW1xuICAgICAgICAgICAgJ0FjdGlvbjo6czM6R2V0T2JqZWN0KicsXG4gICAgICAgICAgICAnQWN0aW9uOjpzMzpHZXRCdWNrZXQqJyxcbiAgICAgICAgICAgICdBY3Rpb246OnMzOkxpc3QqJyxcbiAgICAgICAgICAgICdSZXNvdXJjZTo6KicsXG4gICAgICAgICAgICAnUmVzb3VyY2U6OmFybjphd3M6YmVkcm9jazoqOjpmb3VuZGF0aW9uLW1vZGVsL2FudGhyb3BpYy5jbGF1ZGUtMy1zb25uZXQtMjAyNDAyMjktdjE6MCcsXG4gICAgICAgICAgICAnUmVzb3VyY2U6OmFybjphd3M6bG9nczp1cy1lYXN0LTE6MTIzNDU2Nzg5MDEyOmxvZy1ncm91cDovYXdzL2xhbWJkYS9UZXN0QWdlbnQtdGVzdHN0YWNrYWdlbnRhYTJhZjBjNDoqJyxcbiAgICAgICAgICAgICdSZXNvdXJjZTo6YXJuOjxBV1M6OlBhcnRpdGlvbj46czM6OjpjZGstaG5iNjU5ZmRzLWFzc2V0cy0xMjM0NTY3ODkwMTItdXMtZWFzdC0xLyonLFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ0F3c1NvbHV0aW9ucy1MMScsXG4gICAgICAgICAgcmVhc29uOiAnTGFtYmRhIHJ1bnRpbWUgaXMgbWFuYWdlZCBieSBjb25zdHJ1Y3QgZGVmYXVsdHMgYW5kIHVwZGF0ZWQgYXMgcGFydCBvZiByZWd1bGFyIG1haW50ZW5hbmNlJyxcbiAgICAgICAgfSxcbiAgICAgIF0pO1xuXG4gICAgICBjb25zdCBlcnJvcnMgPSBBbm5vdGF0aW9ucy5mcm9tU3RhY2soc3RhY2spLmZpbmRFcnJvcihcbiAgICAgICAgJyonLFxuICAgICAgICBNYXRjaC5zdHJpbmdMaWtlUmVnZXhwKCdBd3NTb2x1dGlvbnMtLionKSxcbiAgICAgICk7XG4gICAgICBleHBlY3QoZXJyb3JzKS50b0hhdmVMZW5ndGgoMCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdNdWx0aXBsZSBLbm93bGVkZ2UgQmFzZXMnLCAoKSA9PiB7XG4gICAgdGVzdCgnYWdlbnQgd2l0aCBtdWx0aXBsZSBLQnMgcGFzc2VzIEFXUyBTb2x1dGlvbnMgY2hlY2tzJywgKCkgPT4ge1xuICAgICAgY29uc3QgYXBwID0gY3JlYXRlVGVzdEFwcCgpO1xuICAgICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soYXBwLCAnVGVzdFN0YWNrJywge1xuICAgICAgICBlbnY6IHsgYWNjb3VudDogJzEyMzQ1Njc4OTAxMicsIHJlZ2lvbjogJ3VzLWVhc3QtMScgfSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBzeXN0ZW1Qcm9tcHQgPSBuZXcgQXNzZXQoc3RhY2ssICdTeXN0ZW1Qcm9tcHQnLCB7XG4gICAgICAgIHBhdGg6IHBhdGguam9pbihfX2Rpcm5hbWUsICcuLi9yZXNvdXJjZXMvZGVmYXVsdC1zdHJhbmRzLWFnZW50L2JhdGNoLnB5JyksXG4gICAgICB9KTtcblxuICAgICAgY29uc3Qga2IxID0gbmV3IEJlZHJvY2tLbm93bGVkZ2VCYXNlKHN0YWNrLCAnUHJvZHVjdERvY3MnLCB7XG4gICAgICAgIG5hbWU6ICdwcm9kdWN0LWRvY3VtZW50YXRpb24nLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1Byb2R1Y3QgZG9jdW1lbnRhdGlvbiBhbmQgRkFRcycsXG4gICAgICAgIGtub3dsZWRnZUJhc2VJZDogJ0tCLVBST0RVQ1QtMTIzJyxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBrYjIgPSBuZXcgQmVkcm9ja0tub3dsZWRnZUJhc2Uoc3RhY2ssICdTdXBwb3J0RG9jcycsIHtcbiAgICAgICAgbmFtZTogJ3N1cHBvcnQtZG9jdW1lbnRhdGlvbicsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnU3VwcG9ydCBhcnRpY2xlcyBhbmQgdHJvdWJsZXNob290aW5nIGd1aWRlcycsXG4gICAgICAgIGtub3dsZWRnZUJhc2VJZDogJ0tCLVNVUFBPUlQtNDU2JyxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBrYjMgPSBuZXcgQmVkcm9ja0tub3dsZWRnZUJhc2Uoc3RhY2ssICdQb2xpY3lEb2NzJywge1xuICAgICAgICBuYW1lOiAncG9saWN5LWRvY3VtZW50YXRpb24nLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ0NvbXBhbnkgcG9saWNpZXMgYW5kIHByb2NlZHVyZXMnLFxuICAgICAgICBrbm93bGVkZ2VCYXNlSWQ6ICdLQi1QT0xJQ1ktNzg5JyxcbiAgICAgIH0pO1xuXG4gICAgICBuZXcgQmF0Y2hBZ2VudChzdGFjaywgJ0FnZW50Jywge1xuICAgICAgICBhZ2VudE5hbWU6ICdNdWx0aUtCQWdlbnQnLFxuICAgICAgICBwcm9tcHQ6ICdUZXN0IHByb21wdCB3aXRoIG11bHRpcGxlIGtub3dsZWRnZSBiYXNlcycsXG4gICAgICAgIGFnZW50RGVmaW5pdGlvbjoge1xuICAgICAgICAgIGJlZHJvY2tNb2RlbDogeyBmbU1vZGVsSWQ6IHRlc3RNb2RlbCB9LFxuICAgICAgICAgIHN5c3RlbVByb21wdCxcbiAgICAgICAgICBrbm93bGVkZ2VCYXNlczogW2tiMSwga2IyLCBrYjNdLFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIEFzcGVjdHMub2Yoc3RhY2spLmFkZChuZXcgQXdzU29sdXRpb25zQ2hlY2tzKHsgdmVyYm9zZTogdHJ1ZSB9KSk7XG5cbiAgICAgIE5hZ1N1cHByZXNzaW9ucy5hZGRTdGFja1N1cHByZXNzaW9ucyhzdGFjaywgW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdBd3NTb2x1dGlvbnMtSUFNNCcsXG4gICAgICAgICAgcmVhc29uOiAnTWFuYWdlZCBwb2xpY2llcyBhcmUgYWNjZXB0YWJsZSBmb3IgTGFtYmRhIGV4ZWN1dGlvbiByb2xlJyxcbiAgICAgICAgICBhcHBsaWVzVG86IFsnUG9saWN5Ojphcm46PEFXUzo6UGFydGl0aW9uPjppYW06OmF3czpwb2xpY3kvc2VydmljZS1yb2xlL0FXU0xhbWJkYUJhc2ljRXhlY3V0aW9uUm9sZSddLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdBd3NTb2x1dGlvbnMtSUFNNScsXG4gICAgICAgICAgcmVhc29uOiAnV2lsZGNhcmQgcGVybWlzc2lvbnMgYXJlIHNjb3BlZCB0byBzcGVjaWZpYyByZXNvdXJjZXMgZm9yIFMzIGFzc2V0cywgQmVkcm9jayBtb2RlbHMsIGFuZCBDbG91ZFdhdGNoIExvZ3MnLFxuICAgICAgICAgIGFwcGxpZXNUbzogW1xuICAgICAgICAgICAgJ0FjdGlvbjo6czM6R2V0T2JqZWN0KicsXG4gICAgICAgICAgICAnQWN0aW9uOjpzMzpHZXRCdWNrZXQqJyxcbiAgICAgICAgICAgICdBY3Rpb246OnMzOkxpc3QqJyxcbiAgICAgICAgICAgICdSZXNvdXJjZTo6KicsXG4gICAgICAgICAgICAnUmVzb3VyY2U6OmFybjphd3M6YmVkcm9jazoqOjpmb3VuZGF0aW9uLW1vZGVsL2FudGhyb3BpYy5jbGF1ZGUtMy1zb25uZXQtMjAyNDAyMjktdjE6MCcsXG4gICAgICAgICAgICAnUmVzb3VyY2U6OmFybjphd3M6bG9nczp1cy1lYXN0LTE6MTIzNDU2Nzg5MDEyOmxvZy1ncm91cDovYXdzL2xhbWJkYS9NdWx0aUtCQWdlbnQtdGVzdHN0YWNrYWdlbnRhYTJhZjBjNDoqJyxcbiAgICAgICAgICAgICdSZXNvdXJjZTo6YXJuOjxBV1M6OlBhcnRpdGlvbj46czM6OjpjZGstaG5iNjU5ZmRzLWFzc2V0cy0xMjM0NTY3ODkwMTItdXMtZWFzdC0xLyonLFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ0F3c1NvbHV0aW9ucy1MMScsXG4gICAgICAgICAgcmVhc29uOiAnTGFtYmRhIHJ1bnRpbWUgaXMgbWFuYWdlZCBieSBjb25zdHJ1Y3QgZGVmYXVsdHMnLFxuICAgICAgICB9LFxuICAgICAgXSk7XG5cbiAgICAgIGNvbnN0IGVycm9ycyA9IEFubm90YXRpb25zLmZyb21TdGFjayhzdGFjaykuZmluZEVycm9yKFxuICAgICAgICAnKicsXG4gICAgICAgIE1hdGNoLnN0cmluZ0xpa2VSZWdleHAoJ0F3c1NvbHV0aW9ucy0uKicpLFxuICAgICAgKTtcbiAgICAgIGV4cGVjdChlcnJvcnMpLnRvSGF2ZUxlbmd0aCgwKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ0lBTSBwZXJtaXNzaW9ucyBhcmUgc2NvcGVkIHRvIHNwZWNpZmljIEtCIEFSTnMgKG5vIHdpbGRjYXJkcyknLCAoKSA9PiB7XG4gICAgICBjb25zdCBhcHAgPSBjcmVhdGVUZXN0QXBwKCk7XG4gICAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjayhhcHAsICdUZXN0U3RhY2snLCB7XG4gICAgICAgIGVudjogeyBhY2NvdW50OiAnMTIzNDU2Nzg5MDEyJywgcmVnaW9uOiAndXMtZWFzdC0xJyB9LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGtiMSA9IG5ldyBCZWRyb2NrS25vd2xlZGdlQmFzZShzdGFjaywgJ0tCMScsIHtcbiAgICAgICAgbmFtZTogJ2tiLW9uZScsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnRmlyc3Qga25vd2xlZGdlIGJhc2UnLFxuICAgICAgICBrbm93bGVkZ2VCYXNlSWQ6ICdLQi1PTkUtMTIzJyxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBrYjIgPSBuZXcgQmVkcm9ja0tub3dsZWRnZUJhc2Uoc3RhY2ssICdLQjInLCB7XG4gICAgICAgIG5hbWU6ICdrYi10d28nLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1NlY29uZCBrbm93bGVkZ2UgYmFzZScsXG4gICAgICAgIGtub3dsZWRnZUJhc2VJZDogJ0tCLVRXTy00NTYnLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFZlcmlmeSBlYWNoIEtCIGdlbmVyYXRlcyBwZXJtaXNzaW9ucyBzY29wZWQgdG8gaXRzIHNwZWNpZmljIEFSTlxuICAgICAgY29uc3Qga2IxUGVybWlzc2lvbnMgPSBrYjEuZ2VuZXJhdGVJYW1QZXJtaXNzaW9ucygpO1xuICAgICAgY29uc3Qga2IyUGVybWlzc2lvbnMgPSBrYjIuZ2VuZXJhdGVJYW1QZXJtaXNzaW9ucygpO1xuXG4gICAgICAvLyBDaGVjayBLQjEgcGVybWlzc2lvbnNcbiAgICAgIGtiMVBlcm1pc3Npb25zLmZvckVhY2goKHN0YXRlbWVudCkgPT4ge1xuICAgICAgICBjb25zdCBqc29uID0gc3RhdGVtZW50LnRvU3RhdGVtZW50SnNvbigpO1xuICAgICAgICBjb25zdCByZXNvdXJjZXMgPSBBcnJheS5pc0FycmF5KGpzb24uUmVzb3VyY2UpID8ganNvbi5SZXNvdXJjZSA6IFtqc29uLlJlc291cmNlXTtcbiAgICAgICAgcmVzb3VyY2VzLmZvckVhY2goKHJlc291cmNlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICBleHBlY3QocmVzb3VyY2UpLm5vdC50b0JlKCcqJyk7XG4gICAgICAgICAgZXhwZWN0KHJlc291cmNlKS5ub3QudG9Db250YWluKCdrbm93bGVkZ2UtYmFzZS8qJyk7XG4gICAgICAgICAgaWYgKHJlc291cmNlLmluY2x1ZGVzKCdrbm93bGVkZ2UtYmFzZScpKSB7XG4gICAgICAgICAgICBleHBlY3QocmVzb3VyY2UpLnRvQ29udGFpbignS0ItT05FLTEyMycpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgLy8gQ2hlY2sgS0IyIHBlcm1pc3Npb25zXG4gICAgICBrYjJQZXJtaXNzaW9ucy5mb3JFYWNoKChzdGF0ZW1lbnQpID0+IHtcbiAgICAgICAgY29uc3QganNvbiA9IHN0YXRlbWVudC50b1N0YXRlbWVudEpzb24oKTtcbiAgICAgICAgY29uc3QgcmVzb3VyY2VzID0gQXJyYXkuaXNBcnJheShqc29uLlJlc291cmNlKSA/IGpzb24uUmVzb3VyY2UgOiBbanNvbi5SZXNvdXJjZV07XG4gICAgICAgIHJlc291cmNlcy5mb3JFYWNoKChyZXNvdXJjZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgZXhwZWN0KHJlc291cmNlKS5ub3QudG9CZSgnKicpO1xuICAgICAgICAgIGV4cGVjdChyZXNvdXJjZSkubm90LnRvQ29udGFpbigna25vd2xlZGdlLWJhc2UvKicpO1xuICAgICAgICAgIGlmIChyZXNvdXJjZS5pbmNsdWRlcygna25vd2xlZGdlLWJhc2UnKSkge1xuICAgICAgICAgICAgZXhwZWN0KHJlc291cmNlKS50b0NvbnRhaW4oJ0tCLVRXTy00NTYnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdHdWFyZHJhaWxzIENvbmZpZ3VyYXRpb24nLCAoKSA9PiB7XG4gICAgdGVzdCgnYWdlbnQgd2l0aCBndWFyZHJhaWxzIHBhc3NlcyBBV1MgU29sdXRpb25zIGNoZWNrcycsICgpID0+IHtcbiAgICAgIGNvbnN0IGFwcCA9IGNyZWF0ZVRlc3RBcHAoKTtcbiAgICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKGFwcCwgJ1Rlc3RTdGFjaycsIHtcbiAgICAgICAgZW52OiB7IGFjY291bnQ6ICcxMjM0NTY3ODkwMTInLCByZWdpb246ICd1cy1lYXN0LTEnIH0sXG4gICAgICB9KTtcblxuICAgICAgY29uc3Qgc3lzdGVtUHJvbXB0ID0gbmV3IEFzc2V0KHN0YWNrLCAnU3lzdGVtUHJvbXB0Jywge1xuICAgICAgICBwYXRoOiBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4vcmVzb3VyY2VzL2RlZmF1bHQtc3RyYW5kcy1hZ2VudC9iYXRjaC5weScpLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGtiID0gbmV3IEJlZHJvY2tLbm93bGVkZ2VCYXNlKHN0YWNrLCAnU2VjdXJlRG9jcycsIHtcbiAgICAgICAgbmFtZTogJ3NlY3VyZS1kb2N1bWVudGF0aW9uJyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdTZWN1cmUgZG9jdW1lbnRhdGlvbiB3aXRoIGNvbnRlbnQgZmlsdGVyaW5nJyxcbiAgICAgICAga25vd2xlZGdlQmFzZUlkOiAnS0ItU0VDVVJFLTEyMycsXG4gICAgICAgIGd1YXJkcmFpbDoge1xuICAgICAgICAgIGd1YXJkcmFpbElkOiAnY29udGVudC1maWx0ZXItZ3VhcmRyYWlsJyxcbiAgICAgICAgICBndWFyZHJhaWxWZXJzaW9uOiAnMScsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgbmV3IEJhdGNoQWdlbnQoc3RhY2ssICdBZ2VudCcsIHtcbiAgICAgICAgYWdlbnROYW1lOiAnR3VhcmRyYWlsQWdlbnQnLFxuICAgICAgICBwcm9tcHQ6ICdUZXN0IHByb21wdCB3aXRoIGd1YXJkcmFpbHMnLFxuICAgICAgICBhZ2VudERlZmluaXRpb246IHtcbiAgICAgICAgICBiZWRyb2NrTW9kZWw6IHsgZm1Nb2RlbElkOiB0ZXN0TW9kZWwgfSxcbiAgICAgICAgICBzeXN0ZW1Qcm9tcHQsXG4gICAgICAgICAga25vd2xlZGdlQmFzZXM6IFtrYl0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgQXNwZWN0cy5vZihzdGFjaykuYWRkKG5ldyBBd3NTb2x1dGlvbnNDaGVja3MoeyB2ZXJib3NlOiB0cnVlIH0pKTtcblxuICAgICAgTmFnU3VwcHJlc3Npb25zLmFkZFN0YWNrU3VwcHJlc3Npb25zKHN0YWNrLCBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ0F3c1NvbHV0aW9ucy1JQU00JyxcbiAgICAgICAgICByZWFzb246ICdNYW5hZ2VkIHBvbGljaWVzIGFyZSBhY2NlcHRhYmxlIGZvciBMYW1iZGEgZXhlY3V0aW9uIHJvbGUnLFxuICAgICAgICAgIGFwcGxpZXNUbzogWydQb2xpY3k6OmFybjo8QVdTOjpQYXJ0aXRpb24+OmlhbTo6YXdzOnBvbGljeS9zZXJ2aWNlLXJvbGUvQVdTTGFtYmRhQmFzaWNFeGVjdXRpb25Sb2xlJ10sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ0F3c1NvbHV0aW9ucy1JQU01JyxcbiAgICAgICAgICByZWFzb246ICdXaWxkY2FyZCBwZXJtaXNzaW9ucyBhcmUgc2NvcGVkIHRvIHNwZWNpZmljIHJlc291cmNlcycsXG4gICAgICAgICAgYXBwbGllc1RvOiBbXG4gICAgICAgICAgICAnQWN0aW9uOjpzMzpHZXRPYmplY3QqJyxcbiAgICAgICAgICAgICdBY3Rpb246OnMzOkdldEJ1Y2tldConLFxuICAgICAgICAgICAgJ0FjdGlvbjo6czM6TGlzdConLFxuICAgICAgICAgICAgJ1Jlc291cmNlOjoqJyxcbiAgICAgICAgICAgICdSZXNvdXJjZTo6YXJuOmF3czpiZWRyb2NrOio6OmZvdW5kYXRpb24tbW9kZWwvYW50aHJvcGljLmNsYXVkZS0zLXNvbm5ldC0yMDI0MDIyOS12MTowJyxcbiAgICAgICAgICAgICdSZXNvdXJjZTo6YXJuOmF3czpsb2dzOnVzLWVhc3QtMToxMjM0NTY3ODkwMTI6bG9nLWdyb3VwOi9hd3MvbGFtYmRhL0d1YXJkcmFpbEFnZW50LXRlc3RzdGFja2FnZW50YWEyYWYwYzQ6KicsXG4gICAgICAgICAgICAnUmVzb3VyY2U6OmFybjo8QVdTOjpQYXJ0aXRpb24+OnMzOjo6Y2RrLWhuYjY1OWZkcy1hc3NldHMtMTIzNDU2Nzg5MDEyLXVzLWVhc3QtMS8qJyxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdBd3NTb2x1dGlvbnMtTDEnLFxuICAgICAgICAgIHJlYXNvbjogJ0xhbWJkYSBydW50aW1lIGlzIG1hbmFnZWQgYnkgY29uc3RydWN0IGRlZmF1bHRzJyxcbiAgICAgICAgfSxcbiAgICAgIF0pO1xuXG4gICAgICBjb25zdCBlcnJvcnMgPSBBbm5vdGF0aW9ucy5mcm9tU3RhY2soc3RhY2spLmZpbmRFcnJvcihcbiAgICAgICAgJyonLFxuICAgICAgICBNYXRjaC5zdHJpbmdMaWtlUmVnZXhwKCdBd3NTb2x1dGlvbnMtLionKSxcbiAgICAgICk7XG4gICAgICBleHBlY3QoZXJyb3JzKS50b0hhdmVMZW5ndGgoMCk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdndWFyZHJhaWwgcGVybWlzc2lvbnMgYXJlIHNjb3BlZCB0byBzcGVjaWZpYyBndWFyZHJhaWwgQVJOJywgKCkgPT4ge1xuICAgICAgY29uc3QgYXBwID0gY3JlYXRlVGVzdEFwcCgpO1xuICAgICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soYXBwLCAnVGVzdFN0YWNrJywge1xuICAgICAgICBlbnY6IHsgYWNjb3VudDogJzEyMzQ1Njc4OTAxMicsIHJlZ2lvbjogJ3VzLWVhc3QtMScgfSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBrYiA9IG5ldyBCZWRyb2NrS25vd2xlZGdlQmFzZShzdGFjaywgJ1NlY3VyZURvY3MnLCB7XG4gICAgICAgIG5hbWU6ICdzZWN1cmUtZG9jdW1lbnRhdGlvbicsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnU2VjdXJlIGRvY3VtZW50YXRpb24gd2l0aCBjb250ZW50IGZpbHRlcmluZycsXG4gICAgICAgIGtub3dsZWRnZUJhc2VJZDogJ0tCLVNFQ1VSRS0xMjMnLFxuICAgICAgICBndWFyZHJhaWw6IHtcbiAgICAgICAgICBndWFyZHJhaWxJZDogJ215LXNwZWNpZmljLWd1YXJkcmFpbCcsXG4gICAgICAgICAgZ3VhcmRyYWlsVmVyc2lvbjogJzInLFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHBlcm1pc3Npb25zID0ga2IuZ2VuZXJhdGVJYW1QZXJtaXNzaW9ucygpO1xuXG4gICAgICAvLyBGaW5kIHRoZSBndWFyZHJhaWwgcGVybWlzc2lvblxuICAgICAgY29uc3QgZ3VhcmRyYWlsUGVybWlzc2lvbiA9IHBlcm1pc3Npb25zLmZpbmQoKHApID0+IHtcbiAgICAgICAgY29uc3QganNvbiA9IHAudG9TdGF0ZW1lbnRKc29uKCk7XG4gICAgICAgIHJldHVybiBqc29uLkFjdGlvbiA9PT0gJ2JlZHJvY2s6QXBwbHlHdWFyZHJhaWwnO1xuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChndWFyZHJhaWxQZXJtaXNzaW9uKS50b0JlRGVmaW5lZCgpO1xuICAgICAgY29uc3QgZ3VhcmRyYWlsSnNvbiA9IGd1YXJkcmFpbFBlcm1pc3Npb24hLnRvU3RhdGVtZW50SnNvbigpO1xuXG4gICAgICAvLyBWZXJpZnkgZ3VhcmRyYWlsIHBlcm1pc3Npb24gaXMgc2NvcGVkIHRvIHNwZWNpZmljIGd1YXJkcmFpbFxuICAgICAgZXhwZWN0KGd1YXJkcmFpbEpzb24uUmVzb3VyY2UpLnRvQ29udGFpbignZ3VhcmRyYWlsL215LXNwZWNpZmljLWd1YXJkcmFpbCcpO1xuICAgICAgZXhwZWN0KGd1YXJkcmFpbEpzb24uUmVzb3VyY2UpLm5vdC50b0JlKCcqJyk7XG4gICAgICBleHBlY3QoZ3VhcmRyYWlsSnNvbi5SZXNvdXJjZSkubm90LnRvQ29udGFpbignZ3VhcmRyYWlsLyonKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2FnZW50IHdpdGggbXVsdGlwbGUgS0JzIGFuZCBndWFyZHJhaWxzIHBhc3NlcyBBV1MgU29sdXRpb25zIGNoZWNrcycsICgpID0+IHtcbiAgICAgIGNvbnN0IGFwcCA9IGNyZWF0ZVRlc3RBcHAoKTtcbiAgICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKGFwcCwgJ1Rlc3RTdGFjaycsIHtcbiAgICAgICAgZW52OiB7IGFjY291bnQ6ICcxMjM0NTY3ODkwMTInLCByZWdpb246ICd1cy1lYXN0LTEnIH0sXG4gICAgICB9KTtcblxuICAgICAgY29uc3Qgc3lzdGVtUHJvbXB0ID0gbmV3IEFzc2V0KHN0YWNrLCAnU3lzdGVtUHJvbXB0Jywge1xuICAgICAgICBwYXRoOiBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4vcmVzb3VyY2VzL2RlZmF1bHQtc3RyYW5kcy1hZ2VudC9iYXRjaC5weScpLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGtiMSA9IG5ldyBCZWRyb2NrS25vd2xlZGdlQmFzZShzdGFjaywgJ1B1YmxpY0RvY3MnLCB7XG4gICAgICAgIG5hbWU6ICdwdWJsaWMtZG9jdW1lbnRhdGlvbicsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUHVibGljIGRvY3VtZW50YXRpb24gd2l0aG91dCBndWFyZHJhaWxzJyxcbiAgICAgICAga25vd2xlZGdlQmFzZUlkOiAnS0ItUFVCTElDLTEyMycsXG4gICAgICB9KTtcblxuICAgICAgY29uc3Qga2IyID0gbmV3IEJlZHJvY2tLbm93bGVkZ2VCYXNlKHN0YWNrLCAnU2VjdXJlRG9jcycsIHtcbiAgICAgICAgbmFtZTogJ3NlY3VyZS1kb2N1bWVudGF0aW9uJyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdTZWN1cmUgZG9jdW1lbnRhdGlvbiB3aXRoIGd1YXJkcmFpbHMnLFxuICAgICAgICBrbm93bGVkZ2VCYXNlSWQ6ICdLQi1TRUNVUkUtNDU2JyxcbiAgICAgICAgZ3VhcmRyYWlsOiB7XG4gICAgICAgICAgZ3VhcmRyYWlsSWQ6ICdwaWktZmlsdGVyJyxcbiAgICAgICAgICBndWFyZHJhaWxWZXJzaW9uOiAnMScsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgbmV3IEJhdGNoQWdlbnQoc3RhY2ssICdBZ2VudCcsIHtcbiAgICAgICAgYWdlbnROYW1lOiAnTWl4ZWRBZ2VudCcsXG4gICAgICAgIHByb21wdDogJ1Rlc3QgcHJvbXB0IHdpdGggbWl4ZWQgS0IgY29uZmlndXJhdGlvbnMnLFxuICAgICAgICBhZ2VudERlZmluaXRpb246IHtcbiAgICAgICAgICBiZWRyb2NrTW9kZWw6IHsgZm1Nb2RlbElkOiB0ZXN0TW9kZWwgfSxcbiAgICAgICAgICBzeXN0ZW1Qcm9tcHQsXG4gICAgICAgICAga25vd2xlZGdlQmFzZXM6IFtrYjEsIGtiMl0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgQXNwZWN0cy5vZihzdGFjaykuYWRkKG5ldyBBd3NTb2x1dGlvbnNDaGVja3MoeyB2ZXJib3NlOiB0cnVlIH0pKTtcblxuICAgICAgTmFnU3VwcHJlc3Npb25zLmFkZFN0YWNrU3VwcHJlc3Npb25zKHN0YWNrLCBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ0F3c1NvbHV0aW9ucy1JQU00JyxcbiAgICAgICAgICByZWFzb246ICdNYW5hZ2VkIHBvbGljaWVzIGFyZSBhY2NlcHRhYmxlIGZvciBMYW1iZGEgZXhlY3V0aW9uIHJvbGUnLFxuICAgICAgICAgIGFwcGxpZXNUbzogWydQb2xpY3k6OmFybjo8QVdTOjpQYXJ0aXRpb24+OmlhbTo6YXdzOnBvbGljeS9zZXJ2aWNlLXJvbGUvQVdTTGFtYmRhQmFzaWNFeGVjdXRpb25Sb2xlJ10sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ0F3c1NvbHV0aW9ucy1JQU01JyxcbiAgICAgICAgICByZWFzb246ICdXaWxkY2FyZCBwZXJtaXNzaW9ucyBhcmUgc2NvcGVkIHRvIHNwZWNpZmljIHJlc291cmNlcycsXG4gICAgICAgICAgYXBwbGllc1RvOiBbXG4gICAgICAgICAgICAnQWN0aW9uOjpzMzpHZXRPYmplY3QqJyxcbiAgICAgICAgICAgICdBY3Rpb246OnMzOkdldEJ1Y2tldConLFxuICAgICAgICAgICAgJ0FjdGlvbjo6czM6TGlzdConLFxuICAgICAgICAgICAgJ1Jlc291cmNlOjoqJyxcbiAgICAgICAgICAgICdSZXNvdXJjZTo6YXJuOmF3czpiZWRyb2NrOio6OmZvdW5kYXRpb24tbW9kZWwvYW50aHJvcGljLmNsYXVkZS0zLXNvbm5ldC0yMDI0MDIyOS12MTowJyxcbiAgICAgICAgICAgICdSZXNvdXJjZTo6YXJuOmF3czpsb2dzOnVzLWVhc3QtMToxMjM0NTY3ODkwMTI6bG9nLWdyb3VwOi9hd3MvbGFtYmRhL01peGVkQWdlbnQtdGVzdHN0YWNrYWdlbnRhYTJhZjBjNDoqJyxcbiAgICAgICAgICAgICdSZXNvdXJjZTo6YXJuOjxBV1M6OlBhcnRpdGlvbj46czM6OjpjZGstaG5iNjU5ZmRzLWFzc2V0cy0xMjM0NTY3ODkwMTItdXMtZWFzdC0xLyonLFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ0F3c1NvbHV0aW9ucy1MMScsXG4gICAgICAgICAgcmVhc29uOiAnTGFtYmRhIHJ1bnRpbWUgaXMgbWFuYWdlZCBieSBjb25zdHJ1Y3QgZGVmYXVsdHMnLFxuICAgICAgICB9LFxuICAgICAgXSk7XG5cbiAgICAgIGNvbnN0IGVycm9ycyA9IEFubm90YXRpb25zLmZyb21TdGFjayhzdGFjaykuZmluZEVycm9yKFxuICAgICAgICAnKicsXG4gICAgICAgIE1hdGNoLnN0cmluZ0xpa2VSZWdleHAoJ0F3c1NvbHV0aW9ucy0uKicpLFxuICAgICAgKTtcbiAgICAgIGV4cGVjdChlcnJvcnMpLnRvSGF2ZUxlbmd0aCgwKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0xlYXN0IFByaXZpbGVnZSBWZXJpZmljYXRpb24nLCAoKSA9PiB7XG4gICAgdGVzdCgnS0IgcGVybWlzc2lvbnMgZm9sbG93IGxlYXN0LXByaXZpbGVnZSBwcmluY2lwbGUnLCAoKSA9PiB7XG4gICAgICBjb25zdCBhcHAgPSBjcmVhdGVUZXN0QXBwKCk7XG4gICAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjayhhcHAsICdUZXN0U3RhY2snLCB7XG4gICAgICAgIGVudjogeyBhY2NvdW50OiAnMTIzNDU2Nzg5MDEyJywgcmVnaW9uOiAndXMtZWFzdC0xJyB9LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGtiID0gbmV3IEJlZHJvY2tLbm93bGVkZ2VCYXNlKHN0YWNrLCAnVGVzdEtCJywge1xuICAgICAgICBuYW1lOiAndGVzdC1rYicsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnVGVzdCBrbm93bGVkZ2UgYmFzZScsXG4gICAgICAgIGtub3dsZWRnZUJhc2VJZDogJ1RFU1QtS0ItMTIzJyxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBwZXJtaXNzaW9ucyA9IGtiLmdlbmVyYXRlSWFtUGVybWlzc2lvbnMoKTtcblxuICAgICAgLy8gVmVyaWZ5IG9ubHkgbmVjZXNzYXJ5IGFjdGlvbnMgYXJlIGdyYW50ZWRcbiAgICAgIGNvbnN0IGtiUGVybWlzc2lvbiA9IHBlcm1pc3Npb25zLmZpbmQoKHApID0+IHtcbiAgICAgICAgY29uc3QganNvbiA9IHAudG9TdGF0ZW1lbnRKc29uKCk7XG4gICAgICAgIGNvbnN0IGFjdGlvbnMgPSBBcnJheS5pc0FycmF5KGpzb24uQWN0aW9uKSA/IGpzb24uQWN0aW9uIDogW2pzb24uQWN0aW9uXTtcbiAgICAgICAgcmV0dXJuIGFjdGlvbnMuaW5jbHVkZXMoJ2JlZHJvY2s6UmV0cmlldmUnKTtcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3Qoa2JQZXJtaXNzaW9uKS50b0JlRGVmaW5lZCgpO1xuICAgICAgY29uc3Qga2JKc29uID0ga2JQZXJtaXNzaW9uIS50b1N0YXRlbWVudEpzb24oKTtcbiAgICAgIGNvbnN0IGFjdGlvbnMgPSBBcnJheS5pc0FycmF5KGtiSnNvbi5BY3Rpb24pID8ga2JKc29uLkFjdGlvbiA6IFtrYkpzb24uQWN0aW9uXTtcblxuICAgICAgLy8gU2hvdWxkIG9ubHkgaGF2ZSBSZXRyaWV2ZSBhbmQgUmV0cmlldmVBbmRHZW5lcmF0ZSAtIG5vIGFkbWluIGFjdGlvbnNcbiAgICAgIGV4cGVjdChhY3Rpb25zKS50b0NvbnRhaW4oJ2JlZHJvY2s6UmV0cmlldmUnKTtcbiAgICAgIGV4cGVjdChhY3Rpb25zKS50b0NvbnRhaW4oJ2JlZHJvY2s6UmV0cmlldmVBbmRHZW5lcmF0ZScpO1xuICAgICAgZXhwZWN0KGFjdGlvbnMpLm5vdC50b0NvbnRhaW4oJ2JlZHJvY2s6Q3JlYXRlS25vd2xlZGdlQmFzZScpO1xuICAgICAgZXhwZWN0KGFjdGlvbnMpLm5vdC50b0NvbnRhaW4oJ2JlZHJvY2s6RGVsZXRlS25vd2xlZGdlQmFzZScpO1xuICAgICAgZXhwZWN0KGFjdGlvbnMpLm5vdC50b0NvbnRhaW4oJ2JlZHJvY2s6VXBkYXRlS25vd2xlZGdlQmFzZScpO1xuICAgICAgZXhwZWN0KGFjdGlvbnMpLm5vdC50b0NvbnRhaW4oJ2JlZHJvY2s6KicpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnbm8gd2lsZGNhcmQgcmVzb3VyY2UgcGVybWlzc2lvbnMgZm9yIEtCIGFjY2VzcycsICgpID0+IHtcbiAgICAgIGNvbnN0IGFwcCA9IGNyZWF0ZVRlc3RBcHAoKTtcbiAgICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKGFwcCwgJ1Rlc3RTdGFjaycsIHtcbiAgICAgICAgZW52OiB7IGFjY291bnQ6ICcxMjM0NTY3ODkwMTInLCByZWdpb246ICd1cy1lYXN0LTEnIH0sXG4gICAgICB9KTtcblxuICAgICAgY29uc3Qga2IgPSBuZXcgQmVkcm9ja0tub3dsZWRnZUJhc2Uoc3RhY2ssICdUZXN0S0InLCB7XG4gICAgICAgIG5hbWU6ICd0ZXN0LWtiJyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdUZXN0IGtub3dsZWRnZSBiYXNlJyxcbiAgICAgICAga25vd2xlZGdlQmFzZUlkOiAnU1BFQ0lGSUMtS0ItSUQnLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHBlcm1pc3Npb25zID0ga2IuZ2VuZXJhdGVJYW1QZXJtaXNzaW9ucygpO1xuXG4gICAgICAvLyBWZXJpZnkgbm8gd2lsZGNhcmQgcmVzb3VyY2VzXG4gICAgICBwZXJtaXNzaW9ucy5mb3JFYWNoKChzdGF0ZW1lbnQpID0+IHtcbiAgICAgICAgY29uc3QganNvbiA9IHN0YXRlbWVudC50b1N0YXRlbWVudEpzb24oKTtcbiAgICAgICAgY29uc3QgcmVzb3VyY2VzID0gQXJyYXkuaXNBcnJheShqc29uLlJlc291cmNlKSA/IGpzb24uUmVzb3VyY2UgOiBbanNvbi5SZXNvdXJjZV07XG4gICAgICAgIHJlc291cmNlcy5mb3JFYWNoKChyZXNvdXJjZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgLy8gUmVzb3VyY2Ugc2hvdWxkIG5vdCBiZSBqdXN0ICcqJyAod2lsZGNhcmQgZm9yIGFsbCByZXNvdXJjZXMpXG4gICAgICAgICAgZXhwZWN0KHJlc291cmNlKS5ub3QudG9CZSgnKicpO1xuICAgICAgICAgIC8vIFJlc291cmNlIHNob3VsZCBub3QgaGF2ZSB3aWxkY2FyZCBLQiBJRFxuICAgICAgICAgIGV4cGVjdChyZXNvdXJjZSkubm90LnRvTWF0Y2goL2tub3dsZWRnZS1iYXNlXFwvXFwqLyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
@@ -18,6 +18,15 @@ export interface BedrockModelProps {
18
18
  * @default FoundationModelIdentifier.ANTHROPIC_CLAUDE_SONNET_4_20250514_V1_0
19
19
  */
20
20
  readonly fmModelId?: FoundationModelIdentifier;
21
+ /**
22
+ * Direct model ID override.
23
+ *
24
+ * Use this when invoking a model ID not available in `FoundationModelIdentifier`,
25
+ * for example LocalStack Bedrock/Ollama-backed model IDs.
26
+ *
27
+ * When provided, this value is used as-is for runtime invocation.
28
+ */
29
+ readonly customModelId?: string;
21
30
  /**
22
31
  * Enable cross-region inference for Bedrock models to improve availability and performance.
23
32
  * When enabled, uses inference profiles instead of direct model invocation.
@@ -1,5 +1,4 @@
1
1
  "use strict";
2
- var _a;
3
2
  Object.defineProperty(exports, "__esModule", { value: true });
4
3
  exports.BedrockModelUtils = exports.BedrockCrossRegionInferencePrefix = void 0;
5
4
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
@@ -20,35 +19,44 @@ var BedrockCrossRegionInferencePrefix;
20
19
  BedrockCrossRegionInferencePrefix["EU"] = "eu";
21
20
  })(BedrockCrossRegionInferencePrefix || (exports.BedrockCrossRegionInferencePrefix = BedrockCrossRegionInferencePrefix = {}));
22
21
  class BedrockModelUtils {
22
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.BedrockModelUtils", version: "1.17.1" };
23
23
  static deriveActualModelId(props) {
24
- const { fmModelId, crossRegionPrefix } = BedrockModelUtils.deriveDefaults(props);
25
- return props?.useCrossRegionInference ? `${crossRegionPrefix}.${fmModelId.modelId}` : fmModelId.modelId;
24
+ const { modelId, crossRegionPrefix, usingCustomModelId } = BedrockModelUtils.deriveDefaults(props);
25
+ if (usingCustomModelId) {
26
+ return modelId;
27
+ }
28
+ return props?.useCrossRegionInference ? `${crossRegionPrefix}.${modelId}` : modelId;
26
29
  }
27
30
  static generateModelIAMPermissions(scope, props) {
28
31
  const { account, region } = aws_cdk_lib_1.Stack.of(scope);
29
- const { fmModelId, crossRegionPrefix } = BedrockModelUtils.deriveDefaults(props);
32
+ const { modelId, crossRegionPrefix, usingCustomModelId } = BedrockModelUtils.deriveDefaults(props);
33
+ const resources = [
34
+ `arn:aws:bedrock:*::foundation-model/${modelId}`,
35
+ ];
36
+ // Preserve current behavior for AWS foundation models with optional inference profile access.
37
+ if (!usingCustomModelId) {
38
+ resources.push(`arn:aws:bedrock:${region}:${account}:inference-profile/${crossRegionPrefix}.${modelId}`);
39
+ }
30
40
  return new aws_iam_1.PolicyStatement({
31
41
  effect: aws_iam_1.Effect.ALLOW,
32
42
  actions: [
33
43
  'bedrock:InvokeModel',
34
44
  'bedrock:InvokeModelWithResponseStream',
35
45
  ],
36
- resources: [
37
- `arn:aws:bedrock:*::foundation-model/${fmModelId.modelId}`,
38
- `arn:aws:bedrock:${region}:${account}:inference-profile/${crossRegionPrefix}.${fmModelId.modelId}`,
39
- ],
46
+ resources,
40
47
  });
41
48
  }
42
49
  static deriveDefaults(props) {
43
50
  const fmModelId = props?.fmModelId || aws_bedrock_1.FoundationModelIdentifier.ANTHROPIC_CLAUDE_SONNET_4_20250514_V1_0;
51
+ const usingCustomModelId = !!props?.customModelId;
52
+ const modelId = props?.customModelId || fmModelId.modelId;
44
53
  const crossRegionPrefix = props?.crossRegionInferencePrefix || BedrockCrossRegionInferencePrefix.US;
45
54
  return {
46
- fmModelId,
55
+ modelId,
56
+ usingCustomModelId,
47
57
  crossRegionPrefix,
48
58
  };
49
59
  }
50
60
  }
51
61
  exports.BedrockModelUtils = BedrockModelUtils;
52
- _a = JSII_RTTI_SYMBOL_1;
53
- BedrockModelUtils[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.BedrockModelUtils", version: "1.16.1" };
54
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVkcm9jay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3VzZS1jYXNlcy9mcmFtZXdvcmsvYmVkcm9jay9iZWRyb2NrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEscUVBQXFFO0FBQ3JFLHNDQUFzQztBQUV0Qyw2Q0FBb0M7QUFDcEMseURBQW9FO0FBQ3BFLGlEQUE4RDtBQUc5RDs7O0dBR0c7QUFDSCxJQUFZLGlDQUtYO0FBTEQsV0FBWSxpQ0FBaUM7SUFDM0MsOENBQThDO0lBQzlDLDhDQUFTLENBQUE7SUFDVCw4Q0FBOEM7SUFDOUMsOENBQVMsQ0FBQTtBQUNYLENBQUMsRUFMVyxpQ0FBaUMsaURBQWpDLGlDQUFpQyxRQUs1QztBQXdCRCxNQUFhLGlCQUFpQjtJQUNyQixNQUFNLENBQUMsbUJBQW1CLENBQUMsS0FBeUI7UUFDekQsTUFBTSxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxHQUFHLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqRixPQUFPLEtBQUssRUFBRSx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsR0FBRyxpQkFBaUIsSUFBSSxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUM7SUFDMUcsQ0FBQztJQUVNLE1BQU0sQ0FBQywyQkFBMkIsQ0FBQyxLQUFnQixFQUFFLEtBQXlCO1FBQ25GLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsbUJBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxHQUFHLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVqRixPQUFPLElBQUkseUJBQWUsQ0FBQztZQUN6QixNQUFNLEVBQUUsZ0JBQU0sQ0FBQyxLQUFLO1lBQ3BCLE9BQU8sRUFBRTtnQkFDUCxxQkFBcUI7Z0JBQ3JCLHVDQUF1QzthQUN4QztZQUNELFNBQVMsRUFBRTtnQkFDVCx1Q0FBdUMsU0FBUyxDQUFDLE9BQU8sRUFBRTtnQkFDMUQsbUJBQW1CLE1BQU0sSUFBSSxPQUFPLHNCQUFzQixpQkFBaUIsSUFBSSxTQUFTLENBQUMsT0FBTyxFQUFFO2FBQ25HO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBeUI7UUFDckQsTUFBTSxTQUFTLEdBQUcsS0FBSyxFQUFFLFNBQVMsSUFBSSx1Q0FBeUIsQ0FBQyx1Q0FBdUMsQ0FBQztRQUN4RyxNQUFNLGlCQUFpQixHQUFHLEtBQUssRUFBRSwwQkFBMEIsSUFBSSxpQ0FBaUMsQ0FBQyxFQUFFLENBQUM7UUFFcEcsT0FBTztZQUNMLFNBQVM7WUFDVCxpQkFBaUI7U0FDbEIsQ0FBQztJQUNKLENBQUM7O0FBL0JILDhDQWdDQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgU3RhY2sgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBGb3VuZGF0aW9uTW9kZWxJZGVudGlmaWVyIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWJlZHJvY2snO1xuaW1wb3J0IHsgRWZmZWN0LCBQb2xpY3lTdGF0ZW1lbnQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuXG4vKipcbiAqIENyb3NzLXJlZ2lvbiBpbmZlcmVuY2UgcHJlZml4IG9wdGlvbnMgZm9yIEJlZHJvY2sgbW9kZWxzLlxuICogVXNlZCB0byBjb25maWd1cmUgaW5mZXJlbmNlIHByb2ZpbGVzIGZvciBpbXByb3ZlZCBhdmFpbGFiaWxpdHkgYW5kIHBlcmZvcm1hbmNlLlxuICovXG5leHBvcnQgZW51bSBCZWRyb2NrQ3Jvc3NSZWdpb25JbmZlcmVuY2VQcmVmaXgge1xuICAvKiogVVMtYmFzZWQgY3Jvc3MtcmVnaW9uIGluZmVyZW5jZSBwcm9maWxlICovXG4gIFVTID0gJ3VzJyxcbiAgLyoqIEVVLWJhc2VkIGNyb3NzLXJlZ2lvbiBpbmZlcmVuY2UgcHJvZmlsZSAqL1xuICBFVSA9ICdldScsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmVkcm9ja01vZGVsUHJvcHMge1xuICAvKipcbiAgICAgKiBGb3VuZGF0aW9uIG1vZGVsIHRvIHVzZVxuICAgICAqXG4gICAgICogQGRlZmF1bHQgRm91bmRhdGlvbk1vZGVsSWRlbnRpZmllci5BTlRIUk9QSUNfQ0xBVURFX1NPTk5FVF80XzIwMjUwNTE0X1YxXzBcbiAgICAgKi9cbiAgcmVhZG9ubHkgZm1Nb2RlbElkPzogRm91bmRhdGlvbk1vZGVsSWRlbnRpZmllcjtcblxuICAvKipcbiAgICAgKiBFbmFibGUgY3Jvc3MtcmVnaW9uIGluZmVyZW5jZSBmb3IgQmVkcm9jayBtb2RlbHMgdG8gaW1wcm92ZSBhdmFpbGFiaWxpdHkgYW5kIHBlcmZvcm1hbmNlLlxuICAgICAqIFdoZW4gZW5hYmxlZCwgdXNlcyBpbmZlcmVuY2UgcHJvZmlsZXMgaW5zdGVhZCBvZiBkaXJlY3QgbW9kZWwgaW52b2NhdGlvbi5cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICByZWFkb25seSB1c2VDcm9zc1JlZ2lvbkluZmVyZW5jZT86IGJvb2xlYW47XG4gIC8qKlxuICAgICAqIFByZWZpeCBmb3IgY3Jvc3MtcmVnaW9uIGluZmVyZW5jZSBjb25maWd1cmF0aW9uLlxuICAgICAqIE9ubHkgdXNlZCB3aGVuIHVzZUNyb3NzUmVnaW9uSW5mZXJlbmNlIGlzIHRydWUuXG4gICAgICogQGRlZmF1bHQgQmVkcm9ja0Nyb3NzUmVnaW9uSW5mZXJlbmNlUHJlZml4LlVTXG4gICAgICovXG4gIHJlYWRvbmx5IGNyb3NzUmVnaW9uSW5mZXJlbmNlUHJlZml4PzogQmVkcm9ja0Nyb3NzUmVnaW9uSW5mZXJlbmNlUHJlZml4O1xufVxuXG5leHBvcnQgY2xhc3MgQmVkcm9ja01vZGVsVXRpbHMge1xuICBwdWJsaWMgc3RhdGljIGRlcml2ZUFjdHVhbE1vZGVsSWQocHJvcHM/OiBCZWRyb2NrTW9kZWxQcm9wcyk6IHN0cmluZyB7XG4gICAgY29uc3QgeyBmbU1vZGVsSWQsIGNyb3NzUmVnaW9uUHJlZml4IH0gPSBCZWRyb2NrTW9kZWxVdGlscy5kZXJpdmVEZWZhdWx0cyhwcm9wcyk7XG4gICAgcmV0dXJuIHByb3BzPy51c2VDcm9zc1JlZ2lvbkluZmVyZW5jZSA/IGAke2Nyb3NzUmVnaW9uUHJlZml4fS4ke2ZtTW9kZWxJZC5tb2RlbElkfWAgOiBmbU1vZGVsSWQubW9kZWxJZDtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZ2VuZXJhdGVNb2RlbElBTVBlcm1pc3Npb25zKHNjb3BlOiBDb25zdHJ1Y3QsIHByb3BzPzogQmVkcm9ja01vZGVsUHJvcHMpOiBQb2xpY3lTdGF0ZW1lbnQge1xuICAgIGNvbnN0IHsgYWNjb3VudCwgcmVnaW9uIH0gPSBTdGFjay5vZihzY29wZSk7XG4gICAgY29uc3QgeyBmbU1vZGVsSWQsIGNyb3NzUmVnaW9uUHJlZml4IH0gPSBCZWRyb2NrTW9kZWxVdGlscy5kZXJpdmVEZWZhdWx0cyhwcm9wcyk7XG5cbiAgICByZXR1cm4gbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgJ2JlZHJvY2s6SW52b2tlTW9kZWwnLFxuICAgICAgICAnYmVkcm9jazpJbnZva2VNb2RlbFdpdGhSZXNwb25zZVN0cmVhbScsXG4gICAgICBdLFxuICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgIGBhcm46YXdzOmJlZHJvY2s6Kjo6Zm91bmRhdGlvbi1tb2RlbC8ke2ZtTW9kZWxJZC5tb2RlbElkfWAsXG4gICAgICAgIGBhcm46YXdzOmJlZHJvY2s6JHtyZWdpb259OiR7YWNjb3VudH06aW5mZXJlbmNlLXByb2ZpbGUvJHtjcm9zc1JlZ2lvblByZWZpeH0uJHtmbU1vZGVsSWQubW9kZWxJZH1gLFxuICAgICAgXSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGRlcml2ZURlZmF1bHRzKHByb3BzPzogQmVkcm9ja01vZGVsUHJvcHMpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICBjb25zdCBmbU1vZGVsSWQgPSBwcm9wcz8uZm1Nb2RlbElkIHx8IEZvdW5kYXRpb25Nb2RlbElkZW50aWZpZXIuQU5USFJPUElDX0NMQVVERV9TT05ORVRfNF8yMDI1MDUxNF9WMV8wO1xuICAgIGNvbnN0IGNyb3NzUmVnaW9uUHJlZml4ID0gcHJvcHM/LmNyb3NzUmVnaW9uSW5mZXJlbmNlUHJlZml4IHx8IEJlZHJvY2tDcm9zc1JlZ2lvbkluZmVyZW5jZVByZWZpeC5VUztcblxuICAgIHJldHVybiB7XG4gICAgICBmbU1vZGVsSWQsXG4gICAgICBjcm9zc1JlZ2lvblByZWZpeCxcbiAgICB9O1xuICB9XG59Il19
62
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVkcm9jay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3VzZS1jYXNlcy9mcmFtZXdvcmsvYmVkcm9jay9iZWRyb2NrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxxRUFBcUU7QUFDckUsc0NBQXNDO0FBRXRDLDZDQUFvQztBQUNwQyx5REFBb0U7QUFDcEUsaURBQThEO0FBRzlEOzs7R0FHRztBQUNILElBQVksaUNBS1g7QUFMRCxXQUFZLGlDQUFpQztJQUMzQyw4Q0FBOEM7SUFDOUMsOENBQVMsQ0FBQTtJQUNULDhDQUE4QztJQUM5Qyw4Q0FBUyxDQUFBO0FBQ1gsQ0FBQyxFQUxXLGlDQUFpQyxpREFBakMsaUNBQWlDLFFBSzVDO0FBa0NELE1BQWEsaUJBQWlCOztJQUNyQixNQUFNLENBQUMsbUJBQW1CLENBQUMsS0FBeUI7UUFDekQsTUFBTSxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSxHQUFHLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuRyxJQUFJLGtCQUFrQixFQUFFLENBQUM7WUFDdkIsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQztRQUNELE9BQU8sS0FBSyxFQUFFLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxHQUFHLGlCQUFpQixJQUFJLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7SUFDdEYsQ0FBQztJQUVNLE1BQU0sQ0FBQywyQkFBMkIsQ0FBQyxLQUFnQixFQUFFLEtBQXlCO1FBQ25GLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsbUJBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSxHQUFHLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVuRyxNQUFNLFNBQVMsR0FBRztZQUNoQix1Q0FBdUMsT0FBTyxFQUFFO1NBQ2pELENBQUM7UUFFRiw4RkFBOEY7UUFDOUYsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDeEIsU0FBUyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsTUFBTSxJQUFJLE9BQU8sc0JBQXNCLGlCQUFpQixJQUFJLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDM0csQ0FBQztRQUVELE9BQU8sSUFBSSx5QkFBZSxDQUFDO1lBQ3pCLE1BQU0sRUFBRSxnQkFBTSxDQUFDLEtBQUs7WUFDcEIsT0FBTyxFQUFFO2dCQUNQLHFCQUFxQjtnQkFDckIsdUNBQXVDO2FBQ3hDO1lBQ0QsU0FBUztTQUNWLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQXlCO1FBQ3JELE1BQU0sU0FBUyxHQUFHLEtBQUssRUFBRSxTQUFTLElBQUksdUNBQXlCLENBQUMsdUNBQXVDLENBQUM7UUFDeEcsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQztRQUNsRCxNQUFNLE9BQU8sR0FBRyxLQUFLLEVBQUUsYUFBYSxJQUFJLFNBQVMsQ0FBQyxPQUFPLENBQUM7UUFDMUQsTUFBTSxpQkFBaUIsR0FBRyxLQUFLLEVBQUUsMEJBQTBCLElBQUksaUNBQWlDLENBQUMsRUFBRSxDQUFDO1FBRXBHLE9BQU87WUFDTCxPQUFPO1lBQ1Asa0JBQWtCO1lBQ2xCLGlCQUFpQjtTQUNsQixDQUFDO0lBQ0osQ0FBQzs7QUEzQ0gsOENBNENDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyBTdGFjayB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IEZvdW5kYXRpb25Nb2RlbElkZW50aWZpZXIgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtYmVkcm9jayc7XG5pbXBvcnQgeyBFZmZlY3QsIFBvbGljeVN0YXRlbWVudCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5cbi8qKlxuICogQ3Jvc3MtcmVnaW9uIGluZmVyZW5jZSBwcmVmaXggb3B0aW9ucyBmb3IgQmVkcm9jayBtb2RlbHMuXG4gKiBVc2VkIHRvIGNvbmZpZ3VyZSBpbmZlcmVuY2UgcHJvZmlsZXMgZm9yIGltcHJvdmVkIGF2YWlsYWJpbGl0eSBhbmQgcGVyZm9ybWFuY2UuXG4gKi9cbmV4cG9ydCBlbnVtIEJlZHJvY2tDcm9zc1JlZ2lvbkluZmVyZW5jZVByZWZpeCB7XG4gIC8qKiBVUy1iYXNlZCBjcm9zcy1yZWdpb24gaW5mZXJlbmNlIHByb2ZpbGUgKi9cbiAgVVMgPSAndXMnLFxuICAvKiogRVUtYmFzZWQgY3Jvc3MtcmVnaW9uIGluZmVyZW5jZSBwcm9maWxlICovXG4gIEVVID0gJ2V1Jyxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCZWRyb2NrTW9kZWxQcm9wcyB7XG4gIC8qKlxuICAgICAqIEZvdW5kYXRpb24gbW9kZWwgdG8gdXNlXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBGb3VuZGF0aW9uTW9kZWxJZGVudGlmaWVyLkFOVEhST1BJQ19DTEFVREVfU09OTkVUXzRfMjAyNTA1MTRfVjFfMFxuICAgICAqL1xuICByZWFkb25seSBmbU1vZGVsSWQ/OiBGb3VuZGF0aW9uTW9kZWxJZGVudGlmaWVyO1xuXG4gIC8qKlxuICAgKiBEaXJlY3QgbW9kZWwgSUQgb3ZlcnJpZGUuXG4gICAqXG4gICAqIFVzZSB0aGlzIHdoZW4gaW52b2tpbmcgYSBtb2RlbCBJRCBub3QgYXZhaWxhYmxlIGluIGBGb3VuZGF0aW9uTW9kZWxJZGVudGlmaWVyYCxcbiAgICogZm9yIGV4YW1wbGUgTG9jYWxTdGFjayBCZWRyb2NrL09sbGFtYS1iYWNrZWQgbW9kZWwgSURzLlxuICAgKlxuICAgKiBXaGVuIHByb3ZpZGVkLCB0aGlzIHZhbHVlIGlzIHVzZWQgYXMtaXMgZm9yIHJ1bnRpbWUgaW52b2NhdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IGN1c3RvbU1vZGVsSWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAgICogRW5hYmxlIGNyb3NzLXJlZ2lvbiBpbmZlcmVuY2UgZm9yIEJlZHJvY2sgbW9kZWxzIHRvIGltcHJvdmUgYXZhaWxhYmlsaXR5IGFuZCBwZXJmb3JtYW5jZS5cbiAgICAgKiBXaGVuIGVuYWJsZWQsIHVzZXMgaW5mZXJlbmNlIHByb2ZpbGVzIGluc3RlYWQgb2YgZGlyZWN0IG1vZGVsIGludm9jYXRpb24uXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgcmVhZG9ubHkgdXNlQ3Jvc3NSZWdpb25JbmZlcmVuY2U/OiBib29sZWFuO1xuICAvKipcbiAgICAgKiBQcmVmaXggZm9yIGNyb3NzLXJlZ2lvbiBpbmZlcmVuY2UgY29uZmlndXJhdGlvbi5cbiAgICAgKiBPbmx5IHVzZWQgd2hlbiB1c2VDcm9zc1JlZ2lvbkluZmVyZW5jZSBpcyB0cnVlLlxuICAgICAqIEBkZWZhdWx0IEJlZHJvY2tDcm9zc1JlZ2lvbkluZmVyZW5jZVByZWZpeC5VU1xuICAgICAqL1xuICByZWFkb25seSBjcm9zc1JlZ2lvbkluZmVyZW5jZVByZWZpeD86IEJlZHJvY2tDcm9zc1JlZ2lvbkluZmVyZW5jZVByZWZpeDtcbn1cblxuZXhwb3J0IGNsYXNzIEJlZHJvY2tNb2RlbFV0aWxzIHtcbiAgcHVibGljIHN0YXRpYyBkZXJpdmVBY3R1YWxNb2RlbElkKHByb3BzPzogQmVkcm9ja01vZGVsUHJvcHMpOiBzdHJpbmcge1xuICAgIGNvbnN0IHsgbW9kZWxJZCwgY3Jvc3NSZWdpb25QcmVmaXgsIHVzaW5nQ3VzdG9tTW9kZWxJZCB9ID0gQmVkcm9ja01vZGVsVXRpbHMuZGVyaXZlRGVmYXVsdHMocHJvcHMpO1xuICAgIGlmICh1c2luZ0N1c3RvbU1vZGVsSWQpIHtcbiAgICAgIHJldHVybiBtb2RlbElkO1xuICAgIH1cbiAgICByZXR1cm4gcHJvcHM/LnVzZUNyb3NzUmVnaW9uSW5mZXJlbmNlID8gYCR7Y3Jvc3NSZWdpb25QcmVmaXh9LiR7bW9kZWxJZH1gIDogbW9kZWxJZDtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZ2VuZXJhdGVNb2RlbElBTVBlcm1pc3Npb25zKHNjb3BlOiBDb25zdHJ1Y3QsIHByb3BzPzogQmVkcm9ja01vZGVsUHJvcHMpOiBQb2xpY3lTdGF0ZW1lbnQge1xuICAgIGNvbnN0IHsgYWNjb3VudCwgcmVnaW9uIH0gPSBTdGFjay5vZihzY29wZSk7XG4gICAgY29uc3QgeyBtb2RlbElkLCBjcm9zc1JlZ2lvblByZWZpeCwgdXNpbmdDdXN0b21Nb2RlbElkIH0gPSBCZWRyb2NrTW9kZWxVdGlscy5kZXJpdmVEZWZhdWx0cyhwcm9wcyk7XG5cbiAgICBjb25zdCByZXNvdXJjZXMgPSBbXG4gICAgICBgYXJuOmF3czpiZWRyb2NrOio6OmZvdW5kYXRpb24tbW9kZWwvJHttb2RlbElkfWAsXG4gICAgXTtcblxuICAgIC8vIFByZXNlcnZlIGN1cnJlbnQgYmVoYXZpb3IgZm9yIEFXUyBmb3VuZGF0aW9uIG1vZGVscyB3aXRoIG9wdGlvbmFsIGluZmVyZW5jZSBwcm9maWxlIGFjY2Vzcy5cbiAgICBpZiAoIXVzaW5nQ3VzdG9tTW9kZWxJZCkge1xuICAgICAgcmVzb3VyY2VzLnB1c2goYGFybjphd3M6YmVkcm9jazoke3JlZ2lvbn06JHthY2NvdW50fTppbmZlcmVuY2UtcHJvZmlsZS8ke2Nyb3NzUmVnaW9uUHJlZml4fS4ke21vZGVsSWR9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgZWZmZWN0OiBFZmZlY3QuQUxMT1csXG4gICAgICBhY3Rpb25zOiBbXG4gICAgICAgICdiZWRyb2NrOkludm9rZU1vZGVsJyxcbiAgICAgICAgJ2JlZHJvY2s6SW52b2tlTW9kZWxXaXRoUmVzcG9uc2VTdHJlYW0nLFxuICAgICAgXSxcbiAgICAgIHJlc291cmNlcyxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGRlcml2ZURlZmF1bHRzKHByb3BzPzogQmVkcm9ja01vZGVsUHJvcHMpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICBjb25zdCBmbU1vZGVsSWQgPSBwcm9wcz8uZm1Nb2RlbElkIHx8IEZvdW5kYXRpb25Nb2RlbElkZW50aWZpZXIuQU5USFJPUElDX0NMQVVERV9TT05ORVRfNF8yMDI1MDUxNF9WMV8wO1xuICAgIGNvbnN0IHVzaW5nQ3VzdG9tTW9kZWxJZCA9ICEhcHJvcHM/LmN1c3RvbU1vZGVsSWQ7XG4gICAgY29uc3QgbW9kZWxJZCA9IHByb3BzPy5jdXN0b21Nb2RlbElkIHx8IGZtTW9kZWxJZC5tb2RlbElkO1xuICAgIGNvbnN0IGNyb3NzUmVnaW9uUHJlZml4ID0gcHJvcHM/LmNyb3NzUmVnaW9uSW5mZXJlbmNlUHJlZml4IHx8IEJlZHJvY2tDcm9zc1JlZ2lvbkluZmVyZW5jZVByZWZpeC5VUztcblxuICAgIHJldHVybiB7XG4gICAgICBtb2RlbElkLFxuICAgICAgdXNpbmdDdXN0b21Nb2RlbElkLFxuICAgICAgY3Jvc3NSZWdpb25QcmVmaXgsXG4gICAgfTtcbiAgfVxufVxuIl19
@@ -1,5 +1,4 @@
1
1
  "use strict";
2
- var _a, _b;
3
2
  Object.defineProperty(exports, "__esModule", { value: true });
4
3
  exports.DefaultRuntimes = void 0;
5
4
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
@@ -10,26 +9,25 @@ const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
10
9
  * Runtime versions should be done here.
11
10
  */
12
11
  class DefaultRuntimes {
12
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.DefaultRuntimes", version: "1.17.1" };
13
+ /**
14
+ * Default runtime for all Lambda functions in the use cases.
15
+ */
16
+ static NODEJS = aws_lambda_1.Runtime.NODEJS_22_X;
17
+ /**
18
+ * Default runtime for Python based Lambda functions.
19
+ */
20
+ static PYTHON = aws_lambda_1.Runtime.PYTHON_3_13;
21
+ /**
22
+ * Default bundling arguments for Python function
23
+ */
24
+ static PYTHON_FUNCTION_BUNDLING = {
25
+ buildArgs: {
26
+ '--platform': 'linux/amd64',
27
+ },
28
+ image: this.PYTHON.bundlingImage,
29
+ };
30
+ static PYTHON_BUNDLING_IMAGE = 'python:3.13.7-bookworm';
13
31
  }
14
32
  exports.DefaultRuntimes = DefaultRuntimes;
15
- _a = DefaultRuntimes, _b = JSII_RTTI_SYMBOL_1;
16
- DefaultRuntimes[_b] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.DefaultRuntimes", version: "1.16.1" };
17
- /**
18
- * Default runtime for all Lambda functions in the use cases.
19
- */
20
- DefaultRuntimes.NODEJS = aws_lambda_1.Runtime.NODEJS_22_X;
21
- /**
22
- * Default runtime for Python based Lambda functions.
23
- */
24
- DefaultRuntimes.PYTHON = aws_lambda_1.Runtime.PYTHON_3_13;
25
- /**
26
- * Default bundling arguments for Python function
27
- */
28
- DefaultRuntimes.PYTHON_FUNCTION_BUNDLING = {
29
- buildArgs: {
30
- '--platform': 'linux/amd64',
31
- },
32
- image: _a.PYTHON.bundlingImage,
33
- };
34
- DefaultRuntimes.PYTHON_BUNDLING_IMAGE = 'python:3.13.7-bookworm';
35
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC1ydW50aW1lcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3VzZS1jYXNlcy9mcmFtZXdvcmsvY3VzdG9tLXJlc291cmNlL2RlZmF1bHQtcnVudGltZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFHQSx1REFBaUQ7QUFFakQ7Ozs7R0FJRztBQUNILE1BQWEsZUFBZTs7QUFBNUIsMENBdUJDOzs7QUFyQkM7O0tBRUs7QUFDa0Isc0JBQU0sR0FBRyxvQkFBTyxDQUFDLFdBQVcsQUFBdEIsQ0FBdUI7QUFFcEQ7O0dBRUc7QUFDb0Isc0JBQU0sR0FBRyxvQkFBTyxDQUFDLFdBQVcsQUFBdEIsQ0FBdUI7QUFFcEQ7O0dBRUc7QUFDb0Isd0NBQXdCLEdBQW9CO0lBQ2pFLFNBQVMsRUFBRTtRQUNULFlBQVksRUFBRSxhQUFhO0tBQzVCO0lBQ0QsS0FBSyxFQUFFLEVBQUksQ0FBQyxNQUFNLENBQUMsYUFBYTtDQUNqQyxBQUw4QyxDQUs3QztBQUVxQixxQ0FBcUIsR0FBRyx3QkFBd0IsQUFBM0IsQ0FBNEIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5pbXBvcnQgeyBCdW5kbGluZ09wdGlvbnMgfSBmcm9tICdAYXdzLWNkay9hd3MtbGFtYmRhLXB5dGhvbi1hbHBoYSc7XG5pbXBvcnQgeyBSdW50aW1lIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XG5cbi8qKlxuICogQ29udGFpbnMgZGVmYXVsdCBydW50aW1lcyB0aGF0IHdvdWxkIGJlIHJlZmVyZW5jZWRcbiAqIGJ5IExhbWJkYSBmdW5jdGlvbnMgaW4gdGhlIHZhcmlvdXMgdXNlIGNhc2VzLiBVcGRhdGluZyBvZlxuICogUnVudGltZSB2ZXJzaW9ucyBzaG91bGQgYmUgZG9uZSBoZXJlLlxuICovXG5leHBvcnQgY2xhc3MgRGVmYXVsdFJ1bnRpbWVzIHtcblxuICAvKipcbiAgICAgKiBEZWZhdWx0IHJ1bnRpbWUgZm9yIGFsbCBMYW1iZGEgZnVuY3Rpb25zIGluIHRoZSB1c2UgY2FzZXMuXG4gICAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTk9ERUpTID0gUnVudGltZS5OT0RFSlNfMjJfWDtcblxuICAvKipcbiAgICogRGVmYXVsdCBydW50aW1lIGZvciBQeXRob24gYmFzZWQgTGFtYmRhIGZ1bmN0aW9ucy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFlUSE9OID0gUnVudGltZS5QWVRIT05fM18xMztcblxuICAvKipcbiAgICogRGVmYXVsdCBidW5kbGluZyBhcmd1bWVudHMgZm9yIFB5dGhvbiBmdW5jdGlvblxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQWVRIT05fRlVOQ1RJT05fQlVORExJTkc6IEJ1bmRsaW5nT3B0aW9ucyA9IHtcbiAgICBidWlsZEFyZ3M6IHtcbiAgICAgICctLXBsYXRmb3JtJzogJ2xpbnV4L2FtZDY0JyxcbiAgICB9LFxuICAgIGltYWdlOiB0aGlzLlBZVEhPTi5idW5kbGluZ0ltYWdlLFxuICB9O1xuXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFlUSE9OX0JVTkRMSU5HX0lNQUdFID0gJ3B5dGhvbjozLjEzLjctYm9va3dvcm0nO1xufSJdfQ==
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC1ydW50aW1lcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3VzZS1jYXNlcy9mcmFtZXdvcmsvY3VzdG9tLXJlc291cmNlL2RlZmF1bHQtcnVudGltZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUdBLHVEQUFpRDtBQUVqRDs7OztHQUlHO0FBQ0gsTUFBYSxlQUFlOztJQUUxQjs7U0FFSztJQUNFLE1BQU0sQ0FBVSxNQUFNLEdBQUcsb0JBQU8sQ0FBQyxXQUFXLENBQUM7SUFFcEQ7O09BRUc7SUFDSSxNQUFNLENBQVUsTUFBTSxHQUFHLG9CQUFPLENBQUMsV0FBVyxDQUFDO0lBRXBEOztPQUVHO0lBQ0ksTUFBTSxDQUFVLHdCQUF3QixHQUFvQjtRQUNqRSxTQUFTLEVBQUU7WUFDVCxZQUFZLEVBQUUsYUFBYTtTQUM1QjtRQUNELEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWE7S0FDakMsQ0FBQztJQUVLLE1BQU0sQ0FBVSxxQkFBcUIsR0FBRyx3QkFBd0IsQ0FBQzs7QUF0QjFFLDBDQXVCQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbmltcG9ydCB7IEJ1bmRsaW5nT3B0aW9ucyB9IGZyb20gJ0Bhd3MtY2RrL2F3cy1sYW1iZGEtcHl0aG9uLWFscGhhJztcbmltcG9ydCB7IFJ1bnRpbWUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcblxuLyoqXG4gKiBDb250YWlucyBkZWZhdWx0IHJ1bnRpbWVzIHRoYXQgd291bGQgYmUgcmVmZXJlbmNlZFxuICogYnkgTGFtYmRhIGZ1bmN0aW9ucyBpbiB0aGUgdmFyaW91cyB1c2UgY2FzZXMuIFVwZGF0aW5nIG9mXG4gKiBSdW50aW1lIHZlcnNpb25zIHNob3VsZCBiZSBkb25lIGhlcmUuXG4gKi9cbmV4cG9ydCBjbGFzcyBEZWZhdWx0UnVudGltZXMge1xuXG4gIC8qKlxuICAgICAqIERlZmF1bHQgcnVudGltZSBmb3IgYWxsIExhbWJkYSBmdW5jdGlvbnMgaW4gdGhlIHVzZSBjYXNlcy5cbiAgICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBOT0RFSlMgPSBSdW50aW1lLk5PREVKU18yMl9YO1xuXG4gIC8qKlxuICAgKiBEZWZhdWx0IHJ1bnRpbWUgZm9yIFB5dGhvbiBiYXNlZCBMYW1iZGEgZnVuY3Rpb25zLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQWVRIT04gPSBSdW50aW1lLlBZVEhPTl8zXzEzO1xuXG4gIC8qKlxuICAgKiBEZWZhdWx0IGJ1bmRsaW5nIGFyZ3VtZW50cyBmb3IgUHl0aG9uIGZ1bmN0aW9uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBZVEhPTl9GVU5DVElPTl9CVU5ETElORzogQnVuZGxpbmdPcHRpb25zID0ge1xuICAgIGJ1aWxkQXJnczoge1xuICAgICAgJy0tcGxhdGZvcm0nOiAnbGludXgvYW1kNjQnLFxuICAgIH0sXG4gICAgaW1hZ2U6IHRoaXMuUFlUSE9OLmJ1bmRsaW5nSW1hZ2UsXG4gIH07XG5cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQWVRIT05fQlVORExJTkdfSU1BR0UgPSAncHl0aG9uOjMuMTMuNy1ib29rd29ybSc7XG59Il19
@@ -1,13 +1,45 @@
1
1
  "use strict";
2
- var _a;
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
3
35
  Object.defineProperty(exports, "__esModule", { value: true });
4
36
  exports.AccessLog = void 0;
5
37
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
38
  // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
7
39
  // SPDX-License-Identifier: Apache-2.0
8
- const cdk = require("aws-cdk-lib");
9
- const iam = require("aws-cdk-lib/aws-iam");
10
- const s3 = require("aws-cdk-lib/aws-s3");
40
+ const cdk = __importStar(require("aws-cdk-lib"));
41
+ const iam = __importStar(require("aws-cdk-lib/aws-iam"));
42
+ const s3 = __importStar(require("aws-cdk-lib/aws-s3"));
11
43
  const constructs_1 = require("constructs");
12
44
  /**
13
45
  * AccessLog construct that provides a centralized S3 bucket for storing access logs.
@@ -21,6 +53,19 @@ const constructs_1 = require("constructs");
21
53
  * const bucketName = accessLog.bucketName;
22
54
  */
23
55
  class AccessLog extends constructs_1.Construct {
56
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.AccessLog", version: "1.17.1" };
57
+ /**
58
+ * The S3 bucket for storing access logs
59
+ */
60
+ bucket;
61
+ /**
62
+ * The name of the S3 bucket
63
+ */
64
+ bucketName;
65
+ /**
66
+ * The bucket prefix used for organizing access logs
67
+ */
68
+ bucketPrefix;
24
69
  constructor(scope, id, props = {}) {
25
70
  super(scope, id);
26
71
  // Store the bucket prefix
@@ -116,6 +161,4 @@ class AccessLog extends constructs_1.Construct {
116
161
  }
117
162
  }
118
163
  exports.AccessLog = AccessLog;
119
- _a = JSII_RTTI_SYMBOL_1;
120
- AccessLog[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.AccessLog", version: "1.16.1" };
121
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjZXNzLWxvZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3VzZS1jYXNlcy9mcmFtZXdvcmsvZm91bmRhdGlvbi9hY2Nlc3MtbG9nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEscUVBQXFFO0FBQ3JFLHNDQUFzQztBQUN0QyxtQ0FBbUM7QUFDbkMsMkNBQTJDO0FBQzNDLHlDQUF5QztBQUN6QywyQ0FBdUM7QUErQnZDOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFhLFNBQVUsU0FBUSxzQkFBUztJQWdCdEMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxRQUF3QixFQUFFO1FBQ2xFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsMEJBQTBCO1FBQzFCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLFlBQVksSUFBSSxhQUFhLENBQUM7UUFFeEQseUVBQXlFO1FBQ3pFLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUM3QyxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDekMsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLFVBQVUsSUFBSSxhQUFhLENBQUM7UUFDbkQsSUFBSSxDQUFDLFVBQVUsR0FBRyxHQUFHLFFBQVEsSUFBSSxTQUFTLElBQUksTUFBTSxFQUFFLENBQUM7UUFFdkQsMEJBQTBCO1FBQzFCLE1BQU0scUJBQXFCLEdBQXVCO1lBQ2hEO2dCQUNFLEVBQUUsRUFBRSxvQkFBb0I7Z0JBQ3hCLE9BQU8sRUFBRSxJQUFJO2dCQUNiLFdBQVcsRUFBRTtvQkFDWDt3QkFDRSxZQUFZLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxpQkFBaUI7d0JBQy9DLGVBQWUsRUFBRSxHQUFHLENBQUMsUUFBUSxDQUFDLElB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O0lBQzlELENBQUM7O0FBcEhILDhCQXFIQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbmltcG9ydCAqIGFzIGNkayBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgKiBhcyBzMyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgQWNjZXNzTG9nIGNvbnN0cnVjdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFjY2Vzc0xvZ1Byb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBTMyBidWNrZXQgZm9yIGFjY2VzcyBsb2dzXG4gICAqIEBkZWZhdWx0ICdhY2Nlc3MtbG9ncydcbiAgICovXG4gIHJlYWRvbmx5IGJ1Y2tldE5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIExpZmVjeWNsZSBydWxlcyBmb3IgdGhlIGFjY2VzcyBsb2dzXG4gICAqIEBkZWZhdWx0IFRyYW5zaXRpb24gdG8gSUEgYWZ0ZXIgMzAgZGF5cywgZGVsZXRlIGFmdGVyIDkwIGRheXNcbiAgICovXG4gIHJlYWRvbmx5IGxpZmVjeWNsZVJ1bGVzPzogczMuTGlmZWN5Y2xlUnVsZVtdO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGVuYWJsZSB2ZXJzaW9uaW5nIG9uIHRoZSBhY2Nlc3MgbG9ncyBidWNrZXRcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHZlcnNpb25lZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEN1c3RvbSBidWNrZXQgcHJlZml4IGZvciBvcmdhbml6aW5nIGFjY2VzcyBsb2dzXG4gICAqIEBkZWZhdWx0ICdhY2Nlc3MtbG9ncydcbiAgICovXG4gIHJlYWRvbmx5IGJ1Y2tldFByZWZpeD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBY2Nlc3NMb2cgY29uc3RydWN0IHRoYXQgcHJvdmlkZXMgYSBjZW50cmFsaXplZCBTMyBidWNrZXQgZm9yIHN0b3JpbmcgYWNjZXNzIGxvZ3MuXG4gKiBUaGlzIGNvbnN0cnVjdCBjcmVhdGVzIGEgc2VjdXJlIFMzIGJ1Y2tldCB3aXRoIGFwcHJvcHJpYXRlIHBvbGljaWVzIGZvciBBV1Mgc2VydmljZXNcbiAqIHRvIGRlbGl2ZXIgYWNjZXNzIGxvZ3MuXG4gKlxuICogVXNhZ2U6XG4gKlxuICogY29uc3QgYWNjZXNzTG9nID0gbmV3IEFjY2Vzc0xvZyh0aGlzLCAnQWNjZXNzTG9nJyk7XG4gKiBjb25zdCBidWNrZXQgPSBhY2Nlc3NMb2cuYnVja2V0O1xuICogY29uc3QgYnVja2V0TmFtZSA9IGFjY2Vzc0xvZy5idWNrZXROYW1lO1xuICovXG5leHBvcnQgY2xhc3MgQWNjZXNzTG9nIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgLyoqXG4gICAqIFRoZSBTMyBidWNrZXQgZm9yIHN0b3JpbmcgYWNjZXNzIGxvZ3NcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBidWNrZXQ6IHMzLkJ1Y2tldDtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIFMzIGJ1Y2tldFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGJ1Y2tldE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGJ1Y2tldCBwcmVmaXggdXNlZCBmb3Igb3JnYW5pemluZyBhY2Nlc3MgbG9nc1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGJ1Y2tldFByZWZpeDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBBY2Nlc3NMb2dQcm9wcyA9IHt9KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIC8vIFN0b3JlIHRoZSBidWNrZXQgcHJlZml4XG4gICAgdGhpcy5idWNrZXRQcmVmaXggPSBwcm9wcy5idWNrZXRQcmVmaXggfHwgJ2FjY2Vzcy1sb2dzJztcblxuICAgIC8vIEdlbmVyYXRlIHVuaXF1ZSBidWNrZXQgbmFtZSB3aXRoIGFjY291bnQgYW5kIHJlZ2lvbiB0byBhdm9pZCBjb25mbGljdHNcbiAgICBjb25zdCBhY2NvdW50SWQgPSBjZGsuU3RhY2sub2YodGhpcykuYWNjb3VudDtcbiAgICBjb25zdCByZWdpb24gPSBjZGsuU3RhY2sub2YodGhpcykucmVnaW9uO1xuICAgIGNvbnN0IGJhc2VOYW1lID0gcHJvcHMuYnVja2V0TmFtZSB8fCAnYWNjZXNzLWxvZ3MnO1xuICAgIHRoaXMuYnVja2V0TmFtZSA9IGAke2Jhc2VOYW1lfS0ke2FjY291bnRJZH0tJHtyZWdpb259YDtcblxuICAgIC8vIERlZmF1bHQgbGlmZWN5Y2xlIHJ1bGVzXG4gICAgY29uc3QgZGVmYXVsdExpZmVjeWNsZVJ1bGVzOiBzMy5MaWZlY3ljbGVSdWxlW10gPSBbXG4gICAgICB7XG4gICAgICAgIGlkOiAnQWNjZXNzTG9nTGlmZWN5Y2xlJyxcbiAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgdHJhbnNpdGlvbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzdG9yYWdlQ2xhc3M6IHMzLlN0b3JhZ2VDbGFzcy5JTkZSRVFVRU5UX0FDQ0VTUyxcbiAgICAgICAgICAgIHRyYW5zaXRpb25BZnRlcjogY2RrLkR1cmF0aW9uLmRheXMoMzApLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgc3RvcmFnZUNsYXNzOiBzMy5TdG9yYWdlQ2xhc3MuR0xBQ0lFUixcbiAgICAgICAgICAgIHRyYW5zaXRpb25BZnRlcjogY2RrLkR1cmF0aW9uLmRheXMoOTApLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGV4cGlyYXRpb246IGNkay5EdXJhdGlvbi5kYXlzKDM2NSksIC8vIERlbGV0ZSBhZnRlciAxIHllYXJcbiAgICAgIH0sXG4gICAgXTtcblxuICAgIC8vIENyZWF0ZSB0aGUgUzMgYnVja2V0IGZvciBhY2Nlc3MgbG9nc1xuICAgIHRoaXMuYnVja2V0ID0gbmV3IHMzLkJ1Y2tldCh0aGlzLCAnQWNjZXNzTG9nQnVja2V0Jywge1xuICAgICAgYnVja2V0TmFtZTogdGhpcy5idWNrZXROYW1lLFxuICAgICAgZW5jcnlwdGlvbjogczMuQnVja2V0RW5jcnlwdGlvbi5TM19NQU5BR0VELFxuICAgICAgdmVyc2lvbmVkOiBwcm9wcy52ZXJzaW9uZWQgfHwgZmFsc2UsXG4gICAgICBibG9ja1B1YmxpY0FjY2VzczogczMuQmxvY2tQdWJsaWNBY2Nlc3MuQkxPQ0tfQUxMLFxuICAgICAgbGlmZWN5Y2xlUnVsZXM6IHByb3BzLmxpZmVjeWNsZVJ1bGVzIHx8IGRlZmF1bHRMaWZlY3ljbGVSdWxlcyxcbiAgICAgIHJlbW92YWxQb2xpY3k6IGNkay5SZW1vdmFsUG9saWN5LlJFVEFJTiwgLy8gUmV0YWluIGxvZ3MgZm9yIGNvbXBsaWFuY2VcbiAgICAgIGVuZm9yY2VTU0w6IHRydWUsIC8vIEVuZm9yY2UgU1NMIGZvciBhbGwgcmVxdWVzdHNcbiAgICAgIGV2ZW50QnJpZGdlRW5hYmxlZDogZmFsc2UsIC8vIERpc2FibGUgRXZlbnRCcmlkZ2UgZm9yIGNvc3Qgb3B0aW1pemF0aW9uXG4gICAgfSk7XG5cbiAgICAvLyBBZGQgYnVja2V0IHBvbGljeSB0byBhbGxvdyBhY2Nlc3MgbG9nIGRlbGl2ZXJ5IGZyb20gQVdTIHNlcnZpY2VzXG4gICAgdGhpcy5idWNrZXQuYWRkVG9SZXNvdXJjZVBvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBzaWQ6ICdBbGxvd0FjY2Vzc0xvZ0RlbGl2ZXJ5JyxcbiAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgIHByaW5jaXBhbHM6IFtcbiAgICAgICAgbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKCdsb2dnaW5nLnMzLmFtYXpvbmF3cy5jb20nKSxcbiAgICAgICAgbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKCdkZWxpdmVyeS5sb2dzLmFtYXpvbmF3cy5jb20nKSxcbiAgICAgIF0sXG4gICAgICBhY3Rpb25zOiBbXG4gICAgICAgICdzMzpQdXRPYmplY3QnLFxuICAgICAgICAnczM6R2V0QnVja2V0QWNsJyxcbiAgICAgICAgJ3MzOkxpc3RCdWNrZXQnLFxuICAgICAgXSxcbiAgICAgIHJlc291cmNlczogW1xuICAgICAgICB0aGlzLmJ1Y2tldC5idWNrZXRBcm4sXG4gICAgICAgIGAke3RoaXMuYnVja2V0LmJ1Y2tldEFybn0vKmAsXG4gICAgICBdLFxuICAgICAgY29uZGl0aW9uczoge1xuICAgICAgICBTdHJpbmdFcXVhbHM6IHtcbiAgICAgICAgICAnczM6eC1hbXotYWNsJzogJ2J1Y2tldC1vd25lci1mdWxsLWNvbnRyb2wnLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KSk7XG5cbiAgICAvLyBBbGxvdyBFTEIgc2VydmljZSB0byB3cml0ZSBhY2Nlc3MgbG9nc1xuICAgIHRoaXMuYnVja2V0LmFkZFRvUmVzb3VyY2VQb2xpY3kobmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgc2lkOiAnQWxsb3dFTEJBY2Nlc3NMb2dEZWxpdmVyeScsXG4gICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICBwcmluY2lwYWxzOiBbXG4gICAgICAgIG5ldyBpYW0uU2VydmljZVByaW5jaXBhbCgnZWxhc3RpY2xvYWRiYWxhbmNpbmcuYW1hem9uYXdzLmNvbScpLFxuICAgICAgXSxcbiAgICAgIGFjdGlvbnM6IFsnczM6UHV0T2JqZWN0J10sXG4gICAgICByZXNvdXJjZXM6IFtgJHt0aGlzLmJ1Y2tldC5idWNrZXRBcm59LypgXSxcbiAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBTMyBidWNrZXQgcGF0aCBmb3IgYSBzcGVjaWZpYyBzZXJ2aWNlJ3MgYWNjZXNzIGxvZ3NcbiAgICpcbiAgICogQHBhcmFtIHNlcnZpY2VOYW1lIFRoZSBuYW1lIG9mIHRoZSBzZXJ2aWNlIChlLmcuLCAnYWxiJywgJ2Nsb3VkZnJvbnQnLCAnczMnKVxuICAgKiBAcGFyYW0gcmVzb3VyY2VOYW1lIE9wdGlvbmFsIHJlc291cmNlIG5hbWUgZm9yIGZ1cnRoZXIgb3JnYW5pemF0aW9uXG4gICAqIEByZXR1cm5zIFRoZSBTMyBwYXRoIGZvciB0aGUgc2VydmljZSdzIGFjY2VzcyBsb2dzXG4gICAqL1xuICBwdWJsaWMgZ2V0TG9nUGF0aChzZXJ2aWNlTmFtZTogc3RyaW5nLCByZXNvdXJjZU5hbWU/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGJhc2VQYXRoID0gYCR7dGhpcy5idWNrZXROYW1lfS8ke3RoaXMuYnVja2V0UHJlZml4fS8ke3NlcnZpY2VOYW1lfWA7XG4gICAgcmV0dXJuIHJlc291cmNlTmFtZSA/IGAke2Jhc2VQYXRofS8ke3Jlc291cmNlTmFtZX1gIDogYmFzZVBhdGg7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBTMyBVUkkgZm9yIGEgc3BlY2lmaWMgc2VydmljZSdzIGFjY2VzcyBsb2dzXG4gICAqXG4gICAqIEBwYXJhbSBzZXJ2aWNlTmFtZSBUaGUgbmFtZSBvZiB0aGUgc2VydmljZSAoZS5nLiwgJ2FsYicsICdjbG91ZGZyb250JywgJ3MzJylcbiAgICogQHBhcmFtIHJlc291cmNlTmFtZSBPcHRpb25hbCByZXNvdXJjZSBuYW1lIGZvciBmdXJ0aGVyIG9yZ2FuaXphdGlvblxuICAgKiBAcmV0dXJucyBUaGUgUzMgVVJJIGZvciB0aGUgc2VydmljZSdzIGFjY2VzcyBsb2dzXG4gICAqL1xuICBwdWJsaWMgZ2V0TG9nVXJpKHNlcnZpY2VOYW1lOiBzdHJpbmcsIHJlc291cmNlTmFtZT86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBzMzovLyR7dGhpcy5nZXRMb2dQYXRoKHNlcnZpY2VOYW1lLCByZXNvdXJjZU5hbWUpfWA7XG4gIH1cbn1cbiJdfQ==
164
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjZXNzLWxvZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3VzZS1jYXNlcy9mcmFtZXdvcmsvZm91bmRhdGlvbi9hY2Nlc3MtbG9nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxxRUFBcUU7QUFDckUsc0NBQXNDO0FBQ3RDLGlEQUFtQztBQUNuQyx5REFBMkM7QUFDM0MsdURBQXlDO0FBQ3pDLDJDQUF1QztBQStCdkM7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQWEsU0FBVSxTQUFRLHNCQUFTOztJQUN0Qzs7T0FFRztJQUNhLE1BQU0sQ0FBWTtJQUVsQzs7T0FFRztJQUNhLFVBQVUsQ0FBUztJQUVuQzs7T0FFRztJQUNhLFlBQVksQ0FBUztJQUVyQyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLFFBQXdCLEVBQUU7UUFDbEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQiwwQkFBMEI7UUFDMUIsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsWUFBWSxJQUFJLGFBQWEsQ0FBQztRQUV4RCx5RUFBeUU7UUFDekUsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDO1FBQzdDLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUN6QyxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsVUFBVSxJQUFJLGFBQWEsQ0FBQztRQUNuRCxJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsUUFBUSxJQUFJLFNBQVMsSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUV2RCwwQkFBMEI7UUFDMUIsTUFBTSxxQkFBcUIsR0FBdUI7WUFDaEQ7Z0JBQ0UsRUFBRSxFQUFFLG9CQUFvQjtnQkFDeEIsT0FBTyxF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O0lBRUQ7Ozs7OztPQU1HO0lBQ0ksU0FBUyxDQUFDLFdBQW1CLEVBQUUsWUFBcUI7UUFDekQsT0FBTyxRQUFRLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQyxFQUFFLENBQUM7SUFDOUQsQ0FBQzs7QUFwSEgsOEJBcUhDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuaW1wb3J0ICogYXMgY2RrIGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCAqIGFzIHMzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBBY2Nlc3NMb2cgY29uc3RydWN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWNjZXNzTG9nUHJvcHMge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIFMzIGJ1Y2tldCBmb3IgYWNjZXNzIGxvZ3NcbiAgICogQGRlZmF1bHQgJ2FjY2Vzcy1sb2dzJ1xuICAgKi9cbiAgcmVhZG9ubHkgYnVja2V0TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogTGlmZWN5Y2xlIHJ1bGVzIGZvciB0aGUgYWNjZXNzIGxvZ3NcbiAgICogQGRlZmF1bHQgVHJhbnNpdGlvbiB0byBJQSBhZnRlciAzMCBkYXlzLCBkZWxldGUgYWZ0ZXIgOTAgZGF5c1xuICAgKi9cbiAgcmVhZG9ubHkgbGlmZWN5Y2xlUnVsZXM/OiBzMy5MaWZlY3ljbGVSdWxlW107XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZW5hYmxlIHZlcnNpb25pbmcgb24gdGhlIGFjY2VzcyBsb2dzIGJ1Y2tldFxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbmVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ3VzdG9tIGJ1Y2tldCBwcmVmaXggZm9yIG9yZ2FuaXppbmcgYWNjZXNzIGxvZ3NcbiAgICogQGRlZmF1bHQgJ2FjY2Vzcy1sb2dzJ1xuICAgKi9cbiAgcmVhZG9ubHkgYnVja2V0UHJlZml4Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEFjY2Vzc0xvZyBjb25zdHJ1Y3QgdGhhdCBwcm92aWRlcyBhIGNlbnRyYWxpemVkIFMzIGJ1Y2tldCBmb3Igc3RvcmluZyBhY2Nlc3MgbG9ncy5cbiAqIFRoaXMgY29uc3RydWN0IGNyZWF0ZXMgYSBzZWN1cmUgUzMgYnVja2V0IHdpdGggYXBwcm9wcmlhdGUgcG9saWNpZXMgZm9yIEFXUyBzZXJ2aWNlc1xuICogdG8gZGVsaXZlciBhY2Nlc3MgbG9ncy5cbiAqXG4gKiBVc2FnZTpcbiAqXG4gKiBjb25zdCBhY2Nlc3NMb2cgPSBuZXcgQWNjZXNzTG9nKHRoaXMsICdBY2Nlc3NMb2cnKTtcbiAqIGNvbnN0IGJ1Y2tldCA9IGFjY2Vzc0xvZy5idWNrZXQ7XG4gKiBjb25zdCBidWNrZXROYW1lID0gYWNjZXNzTG9nLmJ1Y2tldE5hbWU7XG4gKi9cbmV4cG9ydCBjbGFzcyBBY2Nlc3NMb2cgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICAvKipcbiAgICogVGhlIFMzIGJ1Y2tldCBmb3Igc3RvcmluZyBhY2Nlc3MgbG9nc1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGJ1Y2tldDogczMuQnVja2V0O1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgUzMgYnVja2V0XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYnVja2V0TmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgYnVja2V0IHByZWZpeCB1c2VkIGZvciBvcmdhbml6aW5nIGFjY2VzcyBsb2dzXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYnVja2V0UHJlZml4OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEFjY2Vzc0xvZ1Byb3BzID0ge30pIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgLy8gU3RvcmUgdGhlIGJ1Y2tldCBwcmVmaXhcbiAgICB0aGlzLmJ1Y2tldFByZWZpeCA9IHByb3BzLmJ1Y2tldFByZWZpeCB8fCAnYWNjZXNzLWxvZ3MnO1xuXG4gICAgLy8gR2VuZXJhdGUgdW5pcXVlIGJ1Y2tldCBuYW1lIHdpdGggYWNjb3VudCBhbmQgcmVnaW9uIHRvIGF2b2lkIGNvbmZsaWN0c1xuICAgIGNvbnN0IGFjY291bnRJZCA9IGNkay5TdGFjay5vZih0aGlzKS5hY2NvdW50O1xuICAgIGNvbnN0IHJlZ2lvbiA9IGNkay5TdGFjay5vZih0aGlzKS5yZWdpb247XG4gICAgY29uc3QgYmFzZU5hbWUgPSBwcm9wcy5idWNrZXROYW1lIHx8ICdhY2Nlc3MtbG9ncyc7XG4gICAgdGhpcy5idWNrZXROYW1lID0gYCR7YmFzZU5hbWV9LSR7YWNjb3VudElkfS0ke3JlZ2lvbn1gO1xuXG4gICAgLy8gRGVmYXVsdCBsaWZlY3ljbGUgcnVsZXNcbiAgICBjb25zdCBkZWZhdWx0TGlmZWN5Y2xlUnVsZXM6IHMzLkxpZmVjeWNsZVJ1bGVbXSA9IFtcbiAgICAgIHtcbiAgICAgICAgaWQ6ICdBY2Nlc3NMb2dMaWZlY3ljbGUnLFxuICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICB0cmFuc2l0aW9uczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHN0b3JhZ2VDbGFzczogczMuU3RvcmFnZUNsYXNzLklORlJFUVVFTlRfQUNDRVNTLFxuICAgICAgICAgICAgdHJhbnNpdGlvbkFmdGVyOiBjZGsuRHVyYXRpb24uZGF5cygzMCksXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzdG9yYWdlQ2xhc3M6IHMzLlN0b3JhZ2VDbGFzcy5HTEFDSUVSLFxuICAgICAgICAgICAgdHJhbnNpdGlvbkFmdGVyOiBjZGsuRHVyYXRpb24uZGF5cyg5MCksXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgZXhwaXJhdGlvbjogY2RrLkR1cmF0aW9uLmRheXMoMzY1KSwgLy8gRGVsZXRlIGFmdGVyIDEgeWVhclxuICAgICAgfSxcbiAgICBdO1xuXG4gICAgLy8gQ3JlYXRlIHRoZSBTMyBidWNrZXQgZm9yIGFjY2VzcyBsb2dzXG4gICAgdGhpcy5idWNrZXQgPSBuZXcgczMuQnVja2V0KHRoaXMsICdBY2Nlc3NMb2dCdWNrZXQnLCB7XG4gICAgICBidWNrZXROYW1lOiB0aGlzLmJ1Y2tldE5hbWUsXG4gICAgICBlbmNyeXB0aW9uOiBzMy5CdWNrZXRFbmNyeXB0aW9uLlMzX01BTkFHRUQsXG4gICAgICB2ZXJzaW9uZWQ6IHByb3BzLnZlcnNpb25lZCB8fCBmYWxzZSxcbiAgICAgIGJsb2NrUHVibGljQWNjZXNzOiBzMy5CbG9ja1B1YmxpY0FjY2Vzcy5CTE9DS19BTEwsXG4gICAgICBsaWZlY3ljbGVSdWxlczogcHJvcHMubGlmZWN5Y2xlUnVsZXMgfHwgZGVmYXVsdExpZmVjeWNsZVJ1bGVzLFxuICAgICAgcmVtb3ZhbFBvbGljeTogY2RrLlJlbW92YWxQb2xpY3kuUkVUQUlOLCAvLyBSZXRhaW4gbG9ncyBmb3IgY29tcGxpYW5jZVxuICAgICAgZW5mb3JjZVNTTDogdHJ1ZSwgLy8gRW5mb3JjZSBTU0wgZm9yIGFsbCByZXF1ZXN0c1xuICAgICAgZXZlbnRCcmlkZ2VFbmFibGVkOiBmYWxzZSwgLy8gRGlzYWJsZSBFdmVudEJyaWRnZSBmb3IgY29zdCBvcHRpbWl6YXRpb25cbiAgICB9KTtcblxuICAgIC8vIEFkZCBidWNrZXQgcG9saWN5IHRvIGFsbG93IGFjY2VzcyBsb2cgZGVsaXZlcnkgZnJvbSBBV1Mgc2VydmljZXNcbiAgICB0aGlzLmJ1Y2tldC5hZGRUb1Jlc291cmNlUG9saWN5KG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIHNpZDogJ0FsbG93QWNjZXNzTG9nRGVsaXZlcnknLFxuICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgcHJpbmNpcGFsczogW1xuICAgICAgICBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoJ2xvZ2dpbmcuczMuYW1hem9uYXdzLmNvbScpLFxuICAgICAgICBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoJ2RlbGl2ZXJ5LmxvZ3MuYW1hem9uYXdzLmNvbScpLFxuICAgICAgXSxcbiAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgJ3MzOlB1dE9iamVjdCcsXG4gICAgICAgICdzMzpHZXRCdWNrZXRBY2wnLFxuICAgICAgICAnczM6TGlzdEJ1Y2tldCcsXG4gICAgICBdLFxuICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgIHRoaXMuYnVja2V0LmJ1Y2tldEFybixcbiAgICAgICAgYCR7dGhpcy5idWNrZXQuYnVja2V0QXJufS8qYCxcbiAgICAgIF0sXG4gICAgICBjb25kaXRpb25zOiB7XG4gICAgICAgIFN0cmluZ0VxdWFsczoge1xuICAgICAgICAgICdzMzp4LWFtei1hY2wnOiAnYnVja2V0LW93bmVyLWZ1bGwtY29udHJvbCcsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pKTtcblxuICAgIC8vIEFsbG93IEVMQiBzZXJ2aWNlIHRvIHdyaXRlIGFjY2VzcyBsb2dzXG4gICAgdGhpcy5idWNrZXQuYWRkVG9SZXNvdXJjZVBvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBzaWQ6ICdBbGxvd0VMQkFjY2Vzc0xvZ0RlbGl2ZXJ5JyxcbiAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgIHByaW5jaXBhbHM6IFtcbiAgICAgICAgbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKCdlbGFzdGljbG9hZGJhbGFuY2luZy5hbWF6b25hd3MuY29tJyksXG4gICAgICBdLFxuICAgICAgYWN0aW9uczogWydzMzpQdXRPYmplY3QnXSxcbiAgICAgIHJlc291cmNlczogW2Ake3RoaXMuYnVja2V0LmJ1Y2tldEFybn0vKmBdLFxuICAgIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIFMzIGJ1Y2tldCBwYXRoIGZvciBhIHNwZWNpZmljIHNlcnZpY2UncyBhY2Nlc3MgbG9nc1xuICAgKlxuICAgKiBAcGFyYW0gc2VydmljZU5hbWUgVGhlIG5hbWUgb2YgdGhlIHNlcnZpY2UgKGUuZy4sICdhbGInLCAnY2xvdWRmcm9udCcsICdzMycpXG4gICAqIEBwYXJhbSByZXNvdXJjZU5hbWUgT3B0aW9uYWwgcmVzb3VyY2UgbmFtZSBmb3IgZnVydGhlciBvcmdhbml6YXRpb25cbiAgICogQHJldHVybnMgVGhlIFMzIHBhdGggZm9yIHRoZSBzZXJ2aWNlJ3MgYWNjZXNzIGxvZ3NcbiAgICovXG4gIHB1YmxpYyBnZXRMb2dQYXRoKHNlcnZpY2VOYW1lOiBzdHJpbmcsIHJlc291cmNlTmFtZT86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgYmFzZVBhdGggPSBgJHt0aGlzLmJ1Y2tldE5hbWV9LyR7dGhpcy5idWNrZXRQcmVmaXh9LyR7c2VydmljZU5hbWV9YDtcbiAgICByZXR1cm4gcmVzb3VyY2VOYW1lID8gYCR7YmFzZVBhdGh9LyR7cmVzb3VyY2VOYW1lfWAgOiBiYXNlUGF0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIFMzIFVSSSBmb3IgYSBzcGVjaWZpYyBzZXJ2aWNlJ3MgYWNjZXNzIGxvZ3NcbiAgICpcbiAgICogQHBhcmFtIHNlcnZpY2VOYW1lIFRoZSBuYW1lIG9mIHRoZSBzZXJ2aWNlIChlLmcuLCAnYWxiJywgJ2Nsb3VkZnJvbnQnLCAnczMnKVxuICAgKiBAcGFyYW0gcmVzb3VyY2VOYW1lIE9wdGlvbmFsIHJlc291cmNlIG5hbWUgZm9yIGZ1cnRoZXIgb3JnYW5pemF0aW9uXG4gICAqIEByZXR1cm5zIFRoZSBTMyBVUkkgZm9yIHRoZSBzZXJ2aWNlJ3MgYWNjZXNzIGxvZ3NcbiAgICovXG4gIHB1YmxpYyBnZXRMb2dVcmkoc2VydmljZU5hbWU6IHN0cmluZywgcmVzb3VyY2VOYW1lPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYHMzOi8vJHt0aGlzLmdldExvZ1BhdGgoc2VydmljZU5hbWUsIHJlc291cmNlTmFtZSl9YDtcbiAgfVxufVxuIl19
@@ -1,5 +1,4 @@
1
1
  "use strict";
2
- var _a;
3
2
  Object.defineProperty(exports, "__esModule", { value: true });
4
3
  exports.EventbridgeBroker = void 0;
5
4
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
@@ -10,6 +9,10 @@ const aws_stepfunctions_1 = require("aws-cdk-lib/aws-stepfunctions");
10
9
  const aws_stepfunctions_tasks_1 = require("aws-cdk-lib/aws-stepfunctions-tasks");
11
10
  const constructs_1 = require("constructs");
12
11
  class EventbridgeBroker extends constructs_1.Construct {
12
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.EventbridgeBroker", version: "1.17.1" };
13
+ eventSource;
14
+ eventbus;
15
+ kmsKey;
13
16
  constructor(scope, id, props) {
14
17
  super(scope, id);
15
18
  const removalPolicy = props.removalPolicy || aws_cdk_lib_1.RemovalPolicy.DESTROY;
@@ -37,6 +40,4 @@ class EventbridgeBroker extends constructs_1.Construct {
37
40
  }
38
41
  }
39
42
  exports.EventbridgeBroker = EventbridgeBroker;
40
- _a = JSII_RTTI_SYMBOL_1;
41
- EventbridgeBroker[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.EventbridgeBroker", version: "1.16.1" };
42
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRicmlkZ2UtYnJva2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdXNlLWNhc2VzL2ZyYW1ld29yay9mb3VuZGF0aW9uL2V2ZW50YnJpZGdlLWJyb2tlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZDQUE0QztBQUM1Qyx1REFBa0Q7QUFDbEQsaURBQTBDO0FBQzFDLHFFQUEwRDtBQUMxRCxpRkFBMkU7QUFDM0UsMkNBQXVDO0FBU3ZDLE1BQWEsaUJBQWtCLFNBQVEsc0JBQVM7SUFLOUMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUE2QjtRQUNyRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2pCLE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxhQUFhLElBQUksMkJBQWEsQ0FBQyxPQUFPLENBQUM7UUFDbkUsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxJQUFJLElBQUksYUFBRyxDQUFDLElBQUksRUFBRSxtQkFBbUIsRUFBRTtZQUMvRCxpQkFBaUIsRUFBRSxJQUFJO1lBQ3ZCLGFBQWE7U0FDZCxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUkscUJBQVEsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFO1lBQzdDLFlBQVksRUFBRSxLQUFLLENBQUMsSUFBSTtZQUN4QixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07U0FDcEIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDO0lBQ3ZDLENBQUM7SUFFTSxlQUFlLENBQUMsVUFBa0IsRUFBRSxXQUFnQjtRQUN6RCxPQUFPLElBQUksOENBQW9CLENBQUMsSUFBSSxFQUFFLHNCQUFzQixVQUFVLEVBQUUsRUFBRTtZQUN4RSxPQUFPLEVBQUU7Z0JBQ1A7b0JBQ0UsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO29CQUN2QixNQUFNLEVBQUUsSUFBSSxDQUFDLFdBQVc7b0JBQ3hCLFVBQVU7b0JBQ1YsTUFBTSxFQUFFLDZCQUFTLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQztpQkFDMUM7YUFDRjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7O0FBL0JILDhDQWdDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlbW92YWxQb2xpY3kgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBFdmVudEJ1cyB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1ldmVudHMnO1xuaW1wb3J0IHsgS2V5IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWttcyc7XG5pbXBvcnQgeyBUYXNrSW5wdXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc3RlcGZ1bmN0aW9ucyc7XG5pbXBvcnQgeyBFdmVudEJyaWRnZVB1dEV2ZW50cyB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zdGVwZnVuY3Rpb25zLXRhc2tzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50YnJpZGdlQnJva2VyUHJvcHMge1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuICByZWFkb25seSBldmVudFNvdXJjZTogc3RyaW5nO1xuICByZWFkb25seSBrbXNLZXk/OiBLZXk7XG4gIHJlYWRvbmx5IHJlbW92YWxQb2xpY3k/OiBSZW1vdmFsUG9saWN5O1xufVxuXG5leHBvcnQgY2xhc3MgRXZlbnRicmlkZ2VCcm9rZXIgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwcml2YXRlIHJlYWRvbmx5IGV2ZW50U291cmNlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGV2ZW50YnVzOiBFdmVudEJ1cztcbiAgcmVhZG9ubHkga21zS2V5OiBLZXk7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEV2ZW50YnJpZGdlQnJva2VyUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIGNvbnN0IHJlbW92YWxQb2xpY3kgPSBwcm9wcy5yZW1vdmFsUG9saWN5IHx8IFJlbW92YWxQb2xpY3kuREVTVFJPWTtcbiAgICB0aGlzLmttc0tleSA9IHByb3BzLmttc0tleSB8fCBuZXcgS2V5KHRoaXMsICdFdmVudEJyb2tlcktNU0tleScsIHtcbiAgICAgIGVuYWJsZUtleVJvdGF0aW9uOiB0cnVlLFxuICAgICAgcmVtb3ZhbFBvbGljeSxcbiAgICB9KTtcbiAgICB0aGlzLmV2ZW50YnVzID0gbmV3IEV2ZW50QnVzKHRoaXMsICdFdmVudEJ1cycsIHtcbiAgICAgIGV2ZW50QnVzTmFtZTogcHJvcHMubmFtZSxcbiAgICAgIGttc0tleTogdGhpcy5rbXNLZXksXG4gICAgfSk7XG5cbiAgICB0aGlzLmV2ZW50U291cmNlID0gcHJvcHMuZXZlbnRTb3VyY2U7XG4gIH1cblxuICBwdWJsaWMgc2VuZFZpYVNmbkNoYWluKGRldGFpbFR5cGU6IHN0cmluZywgZXZlbnREZXRhaWw6IGFueSkge1xuICAgIHJldHVybiBuZXcgRXZlbnRCcmlkZ2VQdXRFdmVudHModGhpcywgYFNmbkViUHV0RXZlbnRDaGFpbi0ke2RldGFpbFR5cGV9YCwge1xuICAgICAgZW50cmllczogW1xuICAgICAgICB7XG4gICAgICAgICAgZXZlbnRCdXM6IHRoaXMuZXZlbnRidXMsXG4gICAgICAgICAgc291cmNlOiB0aGlzLmV2ZW50U291cmNlLFxuICAgICAgICAgIGRldGFpbFR5cGUsXG4gICAgICAgICAgZGV0YWlsOiBUYXNrSW5wdXQuZnJvbU9iamVjdChldmVudERldGFpbCksXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuICB9XG59Il19
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRicmlkZ2UtYnJva2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdXNlLWNhc2VzL2ZyYW1ld29yay9mb3VuZGF0aW9uL2V2ZW50YnJpZGdlLWJyb2tlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsNkNBQTRDO0FBQzVDLHVEQUFrRDtBQUNsRCxpREFBMEM7QUFDMUMscUVBQTBEO0FBQzFELGlGQUEyRTtBQUMzRSwyQ0FBdUM7QUFTdkMsTUFBYSxpQkFBa0IsU0FBUSxzQkFBUzs7SUFDN0IsV0FBVyxDQUFTO0lBQzVCLFFBQVEsQ0FBVztJQUNuQixNQUFNLENBQU07SUFFckIsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUE2QjtRQUNyRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2pCLE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxhQUFhLElBQUksMkJBQWEsQ0FBQyxPQUFPLENBQUM7UUFDbkUsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxJQUFJLElBQUksYUFBRyxDQUFDLElBQUksRUFBRSxtQkFBbUIsRUFBRTtZQUMvRCxpQkFBaUIsRUFBRSxJQUFJO1lBQ3ZCLGFBQWE7U0FDZCxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUkscUJBQVEsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFO1lBQzdDLFlBQVksRUFBRSxLQUFLLENBQUMsSUFBSTtZQUN4QixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07U0FDcEIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDO0lBQ3ZDLENBQUM7SUFFTSxlQUFlLENBQUMsVUFBa0IsRUFBRSxXQUFnQjtRQUN6RCxPQUFPLElBQUksOENBQW9CLENBQUMsSUFBSSxFQUFFLHNCQUFzQixVQUFVLEVBQUUsRUFBRTtZQUN4RSxPQUFPLEVBQUU7Z0JBQ1A7b0JBQ0UsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO29CQUN2QixNQUFNLEVBQUUsSUFBSSxDQUFDLFdBQVc7b0JBQ3hCLFVBQVU7b0JBQ1YsTUFBTSxFQUFFLDZCQUFTLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQztpQkFDMUM7YUFDRjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7O0FBL0JILDhDQWdDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlbW92YWxQb2xpY3kgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBFdmVudEJ1cyB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1ldmVudHMnO1xuaW1wb3J0IHsgS2V5IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWttcyc7XG5pbXBvcnQgeyBUYXNrSW5wdXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc3RlcGZ1bmN0aW9ucyc7XG5pbXBvcnQgeyBFdmVudEJyaWRnZVB1dEV2ZW50cyB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zdGVwZnVuY3Rpb25zLXRhc2tzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50YnJpZGdlQnJva2VyUHJvcHMge1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuICByZWFkb25seSBldmVudFNvdXJjZTogc3RyaW5nO1xuICByZWFkb25seSBrbXNLZXk/OiBLZXk7XG4gIHJlYWRvbmx5IHJlbW92YWxQb2xpY3k/OiBSZW1vdmFsUG9saWN5O1xufVxuXG5leHBvcnQgY2xhc3MgRXZlbnRicmlkZ2VCcm9rZXIgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwcml2YXRlIHJlYWRvbmx5IGV2ZW50U291cmNlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGV2ZW50YnVzOiBFdmVudEJ1cztcbiAgcmVhZG9ubHkga21zS2V5OiBLZXk7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEV2ZW50YnJpZGdlQnJva2VyUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIGNvbnN0IHJlbW92YWxQb2xpY3kgPSBwcm9wcy5yZW1vdmFsUG9saWN5IHx8IFJlbW92YWxQb2xpY3kuREVTVFJPWTtcbiAgICB0aGlzLmttc0tleSA9IHByb3BzLmttc0tleSB8fCBuZXcgS2V5KHRoaXMsICdFdmVudEJyb2tlcktNU0tleScsIHtcbiAgICAgIGVuYWJsZUtleVJvdGF0aW9uOiB0cnVlLFxuICAgICAgcmVtb3ZhbFBvbGljeSxcbiAgICB9KTtcbiAgICB0aGlzLmV2ZW50YnVzID0gbmV3IEV2ZW50QnVzKHRoaXMsICdFdmVudEJ1cycsIHtcbiAgICAgIGV2ZW50QnVzTmFtZTogcHJvcHMubmFtZSxcbiAgICAgIGttc0tleTogdGhpcy5rbXNLZXksXG4gICAgfSk7XG5cbiAgICB0aGlzLmV2ZW50U291cmNlID0gcHJvcHMuZXZlbnRTb3VyY2U7XG4gIH1cblxuICBwdWJsaWMgc2VuZFZpYVNmbkNoYWluKGRldGFpbFR5cGU6IHN0cmluZywgZXZlbnREZXRhaWw6IGFueSkge1xuICAgIHJldHVybiBuZXcgRXZlbnRCcmlkZ2VQdXRFdmVudHModGhpcywgYFNmbkViUHV0RXZlbnRDaGFpbi0ke2RldGFpbFR5cGV9YCwge1xuICAgICAgZW50cmllczogW1xuICAgICAgICB7XG4gICAgICAgICAgZXZlbnRCdXM6IHRoaXMuZXZlbnRidXMsXG4gICAgICAgICAgc291cmNlOiB0aGlzLmV2ZW50U291cmNlLFxuICAgICAgICAgIGRldGFpbFR5cGUsXG4gICAgICAgICAgZGV0YWlsOiBUYXNrSW5wdXQuZnJvbU9iamVjdChldmVudERldGFpbCksXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuICB9XG59Il19