aws-cdk-neuronx-patterns 0.0.2 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.jsii CHANGED
@@ -3819,7 +3819,7 @@
3819
3819
  },
3820
3820
  "name": "aws-cdk-neuronx-patterns",
3821
3821
  "readme": {
3822
- "markdown": "# Neuronx patterns Construct Library\n\nThis library provides high-level architectural patterns using neuronx (e.g. Inferentia2 and Trainium1). It contains:\n\n- Neuronx Compile\n\n## Neuronx Compile\n\n:::note warn\nThis construct uses an Inferentia2 instance on EC2. You may need to increase your request limit for your AWS account.\n:::\n\nThis construct compiles models supported by Neuronx and uploads them to the specified S3 bucket.\n\nThis is NeuronxCompile architecture.\n![NeuronxCompile architecture](./docs/neuronx-compile-architecture.png)\n\nTo define\n\n```ts\nimport { Vpc } from \"aws-cdk-lib/aws-ec2\";\nimport { Bucket } from \"aws-cdk-lib/aws-s3\";\n\ndeclare const vpc: Vpc;\ndeclare const bucket: Bucket;\nconst compile = new NeuronxCompile(stack, \"NeuronxCompile\", {\n vpc,\n bucket,\n model: Model.fromHuggingFace(\"example/example-7b-chat\", {\n parameters: Parameters.billion(7),\n }),\n});\n\n// Get the compiled artifacts from this S3 URL\nnew CfnOutput(stack, \"CompiledArtifact\", {\n value: compile.compiledArtifactS3Url,\n});\n```\n\nThis construct assumes the required instance type depending on the number of model parameters.\n\nAfter compiled, you can see like the this file tree in the S3 bucket.\n\n```txt\n{compiledArtifactS3Url}/\n├── model\n│ ├── config.json\n│ ├── tokenizer_config.json\n│ ├── xxx.safetensors\n│ └── xxx.safetensors\n└── compiled\n ├── xxx.neff\n ├── xxx.neff\n └── xxx.neff\n```\n\n### Spot Instance\n\n:::note warn\nIf you use Spot Instances, check if the request limit for Spot has been increased.\n:::\n\nYou can also use Spot Instances.\n\n```ts\nimport { Vpc } from \"aws-cdk-lib/aws-ec2\";\nimport { Bucket } from \"aws-cdk-lib/aws-s3\";\n\ndeclare const vpc: Vpc;\ndeclare const bucket: Bucket;\nnew NeuronxCompile(stack, \"NeuronxCompile\", {\n vpc,\n bucket,\n model: Model.fromHuggingFace(\"example/example-7b-chat\", {\n parameters: Parameters.billion(7),\n }),\n spot: true,\n});\n```\n\n### Compile Options\n\nIf you are familiar with Neuronx, you can also specify compilation options to better meet your requirements.\n\n```ts\nimport { Vpc } from \"aws-cdk-lib/aws-ec2\";\nimport { Bucket } from \"aws-cdk-lib/aws-s3\";\n\ndeclare const vpc: Vpc;\ndeclare const bucket: Bucket;\nnew NeuronxCompile(stack, \"NeuronxCompile\", {\n vpc,\n bucket,\n model: Model.fromHuggingFace(\"example/example-22b-chat\", {\n parameters: Parameters.billion(22),\n }),\n compileOptions: {\n nPositions: 1024,\n quantDtype: QuantDtype.S8,\n optLevel: OptLevel.MODEL_EXECUTION_PERFORMANCE,\n },\n});\n```\n"
3822
+ "markdown": "# Neuronx patterns Construct Library\n\nThis library provides high-level architectural patterns using neuronx (e.g. Inferentia2 and Trainium1). It contains:\n\n- Neuronx Compile\n\n## Neuronx Compile\n\n> [!WARNING]\n> This construct uses an Inferentia2 instance on EC2. You may need to increase your request limit for your AWS account.\n\nThis construct compiles models supported by Neuronx and uploads them to the specified S3 bucket. To define\n\n```ts\nimport { Vpc } from \"aws-cdk-lib/aws-ec2\";\nimport { Bucket } from \"aws-cdk-lib/aws-s3\";\n\ndeclare const vpc: Vpc;\ndeclare const bucket: Bucket;\nconst compile = new NeuronxCompile(stack, \"NeuronxCompile\", {\n vpc,\n bucket,\n model: Model.fromHuggingFace(\"example/example-7b-chat\", {\n parameters: Parameters.billion(7),\n }),\n});\n\n// Get the compiled artifacts from this S3 URL\nnew CfnOutput(stack, \"CompiledArtifact\", {\n value: compile.compiledArtifactS3Url,\n});\n```\n\nThis construct assumes the required instance type depending on the number of model parameters.\n\nAfter compiled, you can see like the this file tree in the S3 bucket.\n\n```txt\n{compiledArtifactS3Url}/\n├── model\n│ ├── config.json\n│ ├── tokenizer_config.json\n│ ├── xxx.safetensors\n│ └── xxx.safetensors\n└── compiled\n ├── xxx.neff\n ├── xxx.neff\n └── xxx.neff\n```\n\nThis is NeuronxCompile architecture.\n![NeuronxCompile architecture](./docs/neuronx-compile-architecture.png)\n\n### Spot Instance\n\n> [!WARNING]\n> If you use Spot Instances, check if the request limit for Spot has been increased.\n\nYou can also use Spot Instances.\n\n```ts\nimport { Vpc } from \"aws-cdk-lib/aws-ec2\";\nimport { Bucket } from \"aws-cdk-lib/aws-s3\";\n\ndeclare const vpc: Vpc;\ndeclare const bucket: Bucket;\nnew NeuronxCompile(stack, \"NeuronxCompile\", {\n vpc,\n bucket,\n model: Model.fromHuggingFace(\"example/example-7b-chat\", {\n parameters: Parameters.billion(7),\n }),\n spot: true,\n});\n```\n\n### Compile Options\n\nIf you are familiar with Neuronx, you can also specify compilation options to better meet your requirements.\n\n```ts\nimport { Vpc } from \"aws-cdk-lib/aws-ec2\";\nimport { Bucket } from \"aws-cdk-lib/aws-s3\";\n\ndeclare const vpc: Vpc;\ndeclare const bucket: Bucket;\nnew NeuronxCompile(stack, \"NeuronxCompile\", {\n vpc,\n bucket,\n model: Model.fromHuggingFace(\"example/example-22b-chat\", {\n parameters: Parameters.billion(22),\n }),\n compileOptions: {\n nPositions: 1024,\n quantDtype: QuantDtype.S8,\n optLevel: OptLevel.MODEL_EXECUTION_PERFORMANCE,\n },\n});\n```\n"
3823
3823
  },
3824
3824
  "repository": {
3825
3825
  "type": "git",
@@ -4243,7 +4243,7 @@
4243
4243
  },
4244
4244
  "locationInModule": {
4245
4245
  "filename": "src/neuronx-compile.ts",
4246
- "line": 182
4246
+ "line": 186
4247
4247
  },
4248
4248
  "parameters": [
4249
4249
  {
@@ -4273,6 +4273,21 @@
4273
4273
  },
4274
4274
  "name": "NeuronxCompile",
4275
4275
  "properties": [
4276
+ {
4277
+ "docs": {
4278
+ "stability": "stable",
4279
+ "summary": "S3 Prefix that compiled artifact uploaded."
4280
+ },
4281
+ "immutable": true,
4282
+ "locationInModule": {
4283
+ "filename": "src/neuronx-compile.ts",
4284
+ "line": 185
4285
+ },
4286
+ "name": "compiledArtifactS3Prefix",
4287
+ "type": {
4288
+ "primitive": "string"
4289
+ }
4290
+ },
4276
4291
  {
4277
4292
  "docs": {
4278
4293
  "stability": "stable",
@@ -4750,6 +4765,6 @@
4750
4765
  "symbolId": "src/neuronx-compile:QuantDtype"
4751
4766
  }
4752
4767
  },
4753
- "version": "0.0.2",
4754
- "fingerprint": "p6gVUQb1hvNV7Eh7GaBS3XMbGzlWxaqBx9dV/sS1KX0="
4768
+ "version": "0.0.3",
4769
+ "fingerprint": "i1BT2JK2HmE1AidG7E6TEtOcK7JTWWpK4u5nwMbW/XU="
4755
4770
  }
package/API.md CHANGED
@@ -89,6 +89,7 @@ Any object.
89
89
  | **Name** | **Type** | **Description** |
90
90
  | --- | --- | --- |
91
91
  | <code><a href="#aws-cdk-neuronx-patterns.NeuronxCompile.property.node">node</a></code> | <code>constructs.Node</code> | The tree node. |
92
+ | <code><a href="#aws-cdk-neuronx-patterns.NeuronxCompile.property.compiledArtifactS3Prefix">compiledArtifactS3Prefix</a></code> | <code>string</code> | S3 Prefix that compiled artifact uploaded. |
92
93
  | <code><a href="#aws-cdk-neuronx-patterns.NeuronxCompile.property.compiledArtifactS3Url">compiledArtifactS3Url</a></code> | <code>string</code> | S3 URL that compiled artifact uploaded. |
93
94
 
94
95
  ---
@@ -105,6 +106,18 @@ The tree node.
105
106
 
106
107
  ---
107
108
 
109
+ ##### `compiledArtifactS3Prefix`<sup>Required</sup> <a name="compiledArtifactS3Prefix" id="aws-cdk-neuronx-patterns.NeuronxCompile.property.compiledArtifactS3Prefix"></a>
110
+
111
+ ```typescript
112
+ public readonly compiledArtifactS3Prefix: string;
113
+ ```
114
+
115
+ - *Type:* string
116
+
117
+ S3 Prefix that compiled artifact uploaded.
118
+
119
+ ---
120
+
108
121
  ##### `compiledArtifactS3Url`<sup>Required</sup> <a name="compiledArtifactS3Url" id="aws-cdk-neuronx-patterns.NeuronxCompile.property.compiledArtifactS3Url"></a>
109
122
 
110
123
  ```typescript
package/README.md CHANGED
@@ -6,16 +6,10 @@ This library provides high-level architectural patterns using neuronx (e.g. Infe
6
6
 
7
7
  ## Neuronx Compile
8
8
 
9
- :::note warn
10
- This construct uses an Inferentia2 instance on EC2. You may need to increase your request limit for your AWS account.
11
- :::
9
+ > [!WARNING]
10
+ > This construct uses an Inferentia2 instance on EC2. You may need to increase your request limit for your AWS account.
12
11
 
13
- This construct compiles models supported by Neuronx and uploads them to the specified S3 bucket.
14
-
15
- This is NeuronxCompile architecture.
16
- ![NeuronxCompile architecture](./docs/neuronx-compile-architecture.png)
17
-
18
- To define
12
+ This construct compiles models supported by Neuronx and uploads them to the specified S3 bucket. To define
19
13
 
20
14
  ```ts
21
15
  import { Vpc } from "aws-cdk-lib/aws-ec2";
@@ -54,11 +48,13 @@ After compiled, you can see like the this file tree in the S3 bucket.
54
48
  └── xxx.neff
55
49
  ```
56
50
 
51
+ This is NeuronxCompile architecture.
52
+ ![NeuronxCompile architecture](./docs/neuronx-compile-architecture.png)
53
+
57
54
  ### Spot Instance
58
55
 
59
- :::note warn
60
- If you use Spot Instances, check if the request limit for Spot has been increased.
61
- :::
56
+ > [!WARNING]
57
+ > If you use Spot Instances, check if the request limit for Spot has been increased.
62
58
 
63
59
  You can also use Spot Instances.
64
60
 
@@ -159,8 +159,11 @@ export declare class NeuronxCompile extends Construct {
159
159
  * S3 URL that compiled artifact uploaded.
160
160
  */
161
161
  readonly compiledArtifactS3Url: string;
162
+ /**
163
+ * S3 Prefix that compiled artifact uploaded.
164
+ */
165
+ readonly compiledArtifactS3Prefix: string;
162
166
  constructor(scope: Construct, id: string, props: NeuronxCompileProps);
163
- private connectAcceleratorChips;
164
167
  private calcTpDegree;
165
168
  private selectInstanceTypeByTpDegree;
166
169
  }
@@ -159,8 +159,11 @@ export declare class NeuronxCompile extends Construct {
159
159
  * S3 URL that compiled artifact uploaded.
160
160
  */
161
161
  readonly compiledArtifactS3Url: string;
162
+ /**
163
+ * S3 Prefix that compiled artifact uploaded.
164
+ */
165
+ readonly compiledArtifactS3Prefix: string;
162
166
  constructor(scope: Construct, id: string, props: NeuronxCompileProps);
163
- private connectAcceleratorChips;
164
167
  private calcTpDegree;
165
168
  private selectInstanceTypeByTpDegree;
166
169
  }
@@ -68,7 +68,7 @@ class Parameters {
68
68
  }
69
69
  exports.Parameters = Parameters;
70
70
  _a = JSII_RTTI_SYMBOL_1;
71
- Parameters[_a] = { fqn: "aws-cdk-neuronx-patterns.Parameters", version: "0.0.2" };
71
+ Parameters[_a] = { fqn: "aws-cdk-neuronx-patterns.Parameters", version: "0.0.3" };
72
72
  /**
73
73
  * Compile target model.
74
74
  */
@@ -89,7 +89,7 @@ class Model {
89
89
  }
90
90
  exports.Model = Model;
91
91
  _b = JSII_RTTI_SYMBOL_1;
92
- Model[_b] = { fqn: "aws-cdk-neuronx-patterns.Model", version: "0.0.2" };
92
+ Model[_b] = { fqn: "aws-cdk-neuronx-patterns.Model", version: "0.0.3" };
93
93
  /**
94
94
  * Neuronx compile construct. Compile the model to work with Inferentia2 and Trainium1 and upload it to an S3 bucket.
95
95
  */
@@ -158,6 +158,17 @@ class NeuronxCompile extends constructs_1.Construct {
158
158
  }
159
159
  props.bucket.grantReadWrite(computeEnvironment.instanceRole, `${compiledArtifactPathPrefix}/*`);
160
160
  const compileScript = (0, fs_1.readFileSync)((0, path_1.join)(__dirname, "../scripts/compile.py")).toString();
161
+ const linuxParameters = new batch.LinuxParameters(this, "LinuxParameters");
162
+ linuxParameters.addDevices(...Array.from({
163
+ length: instanceType.acceleratorChips.chips,
164
+ }).map((_, index) => ({
165
+ hostPath: `/dev/neuron${index}`,
166
+ containerPath: `/dev/neuron${index}`,
167
+ permissions: [
168
+ batch.DevicePermission.READ,
169
+ batch.DevicePermission.WRITE,
170
+ ],
171
+ })));
161
172
  const jobDefinition = new batch.EcsJobDefinition(this, "JobDefinition", {
162
173
  container: new batch.EcsEc2ContainerDefinition(this, "ContainerDefinition", {
163
174
  image: runtime.image,
@@ -196,9 +207,9 @@ class NeuronxCompile extends constructs_1.Construct {
196
207
  ARTIFACT_S3_URL: props.bucket.s3UrlForObject(compiledArtifactPathPrefix),
197
208
  NEURONX_TRANSFORMERS_VERSION: runtime.neuronxTransformersVersion ?? "",
198
209
  },
210
+ linuxParameters,
199
211
  }),
200
212
  });
201
- this.connectAcceleratorChips(jobDefinition, instanceType);
202
213
  const jobSubmitFunction = new aws_lambda_1.SingletonFunction(this, "JobSubmitFunction", {
203
214
  code: aws_lambda_1.Code.fromAsset((0, path_1.join)(__dirname, "private/await-compile-job")),
204
215
  handler: "index.onEvent",
@@ -229,22 +240,11 @@ class NeuronxCompile extends constructs_1.Construct {
229
240
  properties: {
230
241
  jobDefinitionArn: jobDefinition.jobDefinitionArn,
231
242
  jobQueueArn: jobQueue.jobQueueArn,
232
- artifactS3Url: props.bucket.s3UrlForObject(compiledArtifactPathPrefix),
243
+ artifactS3Prefix: compiledArtifactPathPrefix,
233
244
  },
234
245
  });
235
- this.compiledArtifactS3Url = compileJob.getAttString("ArtifactS3Url");
236
- }
237
- connectAcceleratorChips(jobDefinition, instanceType) {
238
- const devices = Array.from({
239
- length: instanceType.acceleratorChips.chips,
240
- }).map((_, index) => ({
241
- HostPath: `/dev/neuron${index}`,
242
- ContainerPath: `/dev/neuron${index}`,
243
- Permissions: ["read", "write"],
244
- }));
245
- const cfnJobDefinition = jobDefinition.node
246
- .defaultChild;
247
- cfnJobDefinition.addPropertyOverride("ContainerProperties.LinuxParameters.Devices", devices);
246
+ this.compiledArtifactS3Prefix = compileJob.getAttString("ArtifactS3Prefix");
247
+ this.compiledArtifactS3Url = props.bucket.s3UrlForObject(this.compiledArtifactS3Prefix);
248
248
  }
249
249
  calcTpDegree(parameters, compileOptions) {
250
250
  // case of float16
@@ -282,5 +282,5 @@ class NeuronxCompile extends constructs_1.Construct {
282
282
  }
283
283
  exports.NeuronxCompile = NeuronxCompile;
284
284
  _c = JSII_RTTI_SYMBOL_1;
285
- NeuronxCompile[_c] = { fqn: "aws-cdk-neuronx-patterns.NeuronxCompile", version: "0.0.2" };
286
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV1cm9ueC1jb21waWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL25ldXJvbngtY29tcGlsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDJCQUFrQztBQUNsQywrQkFBNEI7QUFDNUIsNkNBQW1FO0FBQ25FLCtDQUErQztBQUMvQywyQ0FBMkM7QUFDM0MsaURBQXFEO0FBQ3JELGlEQUE0QztBQUM1Qyx1REFBMEU7QUFFMUUsbUVBQXdEO0FBQ3hELDJDQUF1QztBQUN2QyxtRUFBOEQ7QUFDOUQsNkZBQXVGO0FBZ0J2Rjs7R0FFRztBQUNILElBQVksVUFLWDtBQUxELFdBQVksVUFBVTtJQUNwQjs7T0FFRztJQUNILHVCQUFTLENBQUE7QUFDWCxDQUFDLEVBTFcsVUFBVSwwQkFBVixVQUFVLFFBS3JCO0FBRUQ7O0dBRUc7QUFDSCxJQUFZLFFBYVg7QUFiRCxXQUFZLFFBQVE7SUFDbEI7O09BRUc7SUFDSCw2RUFBMkIsQ0FBQTtJQUMzQjs7T0FFRztJQUNILHVEQUFnQixDQUFBO0lBQ2hCOztPQUVHO0lBQ0gscUZBQStCLENBQUE7QUFDakMsQ0FBQyxFQWJXLFFBQVEsd0JBQVIsUUFBUSxRQWFuQjtBQXdCRDs7R0FFRztBQUNILE1BQWEsVUFBVTtJQUNyQjs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFrQjtRQUMvQixPQUFPLElBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFDRCxZQUFxQyxPQUFlO1FBQWYsWUFBTyxHQUFQLE9BQU8sQ0FBUTtJQUFHLENBQUM7SUFDeEQ7OztPQUdHO0lBQ0gsUUFBUTtRQUNOLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDOztBQWhCSCxnQ0FpQkM7OztBQVFEOztHQUVHO0FBQ0gsTUFBYSxLQUFLO0lBQ2hCOzs7OztPQUtHO0lBQ0gsTUFBTSxDQUFDLGVBQWUsQ0FBQyxPQUFlLEVBQUUsT0FBcUI7UUFDM0QsT0FB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WSxFQUFFLENBQUM7Z0JBQzNELE9BQU8sWUFBWSxDQUFDO1lBQ3RCLENBQUM7UUFDSCxDQUFDO1FBQ0QsTUFBTSxJQUFJLEtBQUssQ0FDYix3RUFBd0UsQ0FDekUsQ0FBQztJQUNKLENBQUM7O0FBMVBILHdDQTJQQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlYWRGaWxlU3luYyB9IGZyb20gXCJmc1wiO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBDdXN0b21SZXNvdXJjZSwgRHVyYXRpb24sIFNpemUsIFRhZ3MgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCAqIGFzIGJhdGNoIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtYmF0Y2hcIjtcbmltcG9ydCAqIGFzIGVjMiBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiO1xuaW1wb3J0IHsgQ29udGFpbmVySW1hZ2UgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjc1wiO1xuaW1wb3J0IHsgR3JhbnQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuaW1wb3J0IHsgQ29kZSwgUnVudGltZSwgU2luZ2xldG9uRnVuY3Rpb24gfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiO1xuaW1wb3J0IHsgSUJ1Y2tldCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtczNcIjtcbmltcG9ydCB7IFByb3ZpZGVyIH0gZnJvbSBcImF3cy1jZGstbGliL2N1c3RvbS1yZXNvdXJjZXNcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBOZXVyb254SW5zdGFuY2VUeXBlIH0gZnJvbSBcIi4vbmV1cm9ueC1pbnN0YW5jZS10eXBlXCI7XG5pbXBvcnQgeyBOZXVyb25PcHRpbWl6ZWRNYWNoaW5lSW1hZ2UgfSBmcm9tIFwiLi9wcml2YXRlL25ldXJvbi1vcHRpbWl6ZWQtbWFjaGluZS1pbWFnZVwiO1xuXG4vKipcbiAqIENvbXBpbGUgcnVudGltZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21waWxlUnVudGltZSB7XG4gIC8qKlxuICAgKiBBbiBpbWFnZSBvZiB0aGUgY29udGFpbmVyIHdoZXJlIHRoZSBjb21waWxlIGpvYiBpcyBleGVjdXRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGltYWdlOiBDb250YWluZXJJbWFnZTtcbiAgLyoqXG4gICAqIE5ldXJvbnggdmVyc2lvbiBpbmNsdWRlZCBpbiBjb250YWluZXIgaW1hZ2UuXG4gICAqL1xuICByZWFkb25seSBuZXVyb254VmVyc2lvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIFF1YW50IGRhdGEgdHlwZS5cbiAqL1xuZXhwb3J0IGVudW0gUXVhbnREdHlwZSB7XG4gIC8qKlxuICAgKiBpbnQ4IHdlaWdodCBzdG9yYWdlLlxuICAgKi9cbiAgUzggPSBcInM4XCIsXG59XG5cbi8qKlxuICogT3B0aW1pemF0aW9uIGxldmVsLlxuICovXG5leHBvcnQgZW51bSBPcHRMZXZlbCB7XG4gIC8qKlxuICAgKiBlbmFibGVzIHRoZSBjb3JlIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnMgaW4gdGhlIGNvbXBpbGVyLCB3aGlsZSBhbHNvIG1pbmltaXppbmcgY29tcGlsZSB0aW1lLlxuICAgKi9cbiAgTUlOSU1JWklOR19DT01QSUxFX1RJTUUgPSAxLFxuICAvKipcbiAgICogcHJvdmlkZXMgdGhlIGJlc3QgYmFsYW5jZSBiZXR3ZWVuIG1vZGVsIHBlcmZvcm1hbmNlIGFuZCBjb21waWxlIHRpbWUuXG4gICAqL1xuICBCRVNUX0JBTEFOQ0UgPSAyLFxuICAvKipcbiAgICogbWF5IHByb3ZpZGUgYWRkaXRpb25hbCBtb2RlbCBleGVjdXRpb24gcGVyZm9ybWFuY2UgYnV0IG1heSBpbmN1ciBsb25nZXIgY29tcGlsZSB0aW1lcyBhbmQgaGlnaGVyIGhvc3QgbWVtb3J5IHVzYWdlIGR1cmluZyBtb2RlbCBjb21waWxhdGlvbi5cbiAgICovXG4gIE1PREVMX0VYRUNVVElPTl9QRVJGT1JNQU5DRSA9IDMsXG59XG5cbi8qKlxuICogQ29tcGlsZSBvcHRpb25zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbXBpbGVPcHRpb25zIHtcbiAgLyoqXG4gICAqIEBkZWZhdWx0IC0gY2FsYyBmcm9tIHBhcmFtZXRlcnMgYW5kIHF1YW50RHR5cGVcbiAgICovXG4gIHJlYWRvbmx5IHRwRGVncmVlPzogbnVtYmVyO1xuICAvKipcbiAgICogQGRlZmF1bHQgLSBObyBxdWFudFxuICAgKi9cbiAgcmVhZG9ubHkgcXVhbnREdHlwZT86IFF1YW50RHR5cGU7XG4gIC8qKlxuICAgKiBAZGVmYXVsdCA0MDkyXG4gICAqL1xuICByZWFkb25seSBuUG9zaXRpb25zPzogbnVtYmVyO1xuICAvKipcbiAgICogQGRlZmF1bHQgT3B0TGV2ZWwuQkVTVF9CQUxBTkNFXG4gICAqL1xuICByZWFkb25seSBvcHRMZXZlbD86IE9wdExldmVsO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIGFtb3VudCBvZiBwYXJhbWV0ZXJzLlxuICovXG5leHBvcnQgY2xhc3MgUGFyYW1ldGVycyB7XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBQYXJhbWV0ZXJzIHJlcHJlc2VudGluZyBhbiBhbW91bnQgYmlsaW9uLlxuICAgKiBAcGFyYW0gcGFyYW1ldGVycyBudW1iZXIgb2YgcGFyYW1ldGVycyBiaWxpb25YXG4gICAqIEByZXR1cm5zIHBhcmFtZXRlcnNcbiAgICovXG4gIHN0YXRpYyBiaWxsaW9uKHBhcmFtZXRlcnM6IG51bWJlcikge1xuICAgIHJldHVybiBuZXcgUGFyYW1ldGVycyhwYXJhbWV0ZXJzKTtcbiAgfVxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgYmlsbGlvbjogbnVtYmVyKSB7fVxuICAvKipcbiAgICogUmV0dXJuIHRoaXMgbnVtYmVyIG9mIHBhcmFtZXRlcnMgYXMgYmlsaW9uLlxuICAgKiBAcmV0dXJucyBUaGlzIG51bWJlciBvZiBwYXJhbWV0ZXJzIGFzIGJpbGlvbi5cbiAgICovXG4gIHRvQmlsaW9uKCkge1xuICAgIHJldHVybiB0aGlzLmJpbGxpb247XG4gIH1cbn1cblxuLyoqXG4gKiBDb21waWxlIHRhcmdldCBtb2RlbCBiYXNpYyBpbmZyb21hdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1vZGVsT3B0aW9ucyB7XG4gIHJlYWRvbmx5IHBhcmFtZXRlcnM6IFBhcmFtZXRlcnM7XG59XG4vKipcbiAqIENvbXBpbGUgdGFyZ2V0IG1vZGVsLlxuICovXG5leHBvcnQgY2xhc3MgTW9kZWwge1xuICAvKipcbiAgICogbW9kZWwgaW5mb3JtYXRpb25zIGF0IEh1Z2dpbmdGYWNlXG4gICAqIEBwYXJhbSBtb2RlbElkIG1vZGVsIGlkIG9uIHRoZSBIdWdnaW5nRmFjZVxuICAgKiBAcGFyYW0gb3B0aW9ucyBtb2RlbCBiYXNpYyBpbmZyb21hdGlvblxuICAgKiBAcmV0dXJucyBtb2RlbCBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGZyb21IdWdnaW5nRmFjZShtb2RlbElkOiBzdHJpbmcsIG9wdGlvbnM6IE1vZGVsT3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgTW9kZWwobW9kZWxJZCwgb3B0aW9ucyk7XG4gIH1cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihcbiAgICByZWFkb25seSBtb2RlbElkOiBzdHJpbmcsXG4gICAgcmVhZG9ubHkgb3B0aW9uczogTW9kZWxPcHRpb25zLFxuICApIHt9XG59XG4vKipcbiAqIFByb3BzIG9mIE5ldXJvbnhDb21waWxlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5ldXJvbnhDb21waWxlUHJvcHMge1xuICAvKipcbiAgICogVlBDIGluIHdoaWNoIHRoaXMgd2lsbCBsYXVuY2ggY29tcGlsZSB3b3JrZXIgaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSB2cGM6IGVjMi5JVnBjO1xuICAvKipcbiAgICogVGhlIGluc3RhbmNlIHR5cGUgb2YgY29tcGlsZSB3b3JrZXIgaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBpbnN0YW5jZVR5cGU/OiBOZXVyb254SW5zdGFuY2VUeXBlO1xuICAvKipcbiAgICogVGhlIGJ1Y2tldCB0byB1cGxvYWQgY29tcGlsZWQgYXJ0aWZhY3RzLlxuICAgKi9cbiAgcmVhZG9ubHkgYnVja2V0OiBJQnVja2V0O1xuICAvKipcbiAgICogVGhlIG1vZGVsIHRvIGJlIGNvbXBpbGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgbW9kZWw6IE1vZGVsO1xuICAvKipcbiAgICogVGhlIHJvb3Qgdm9sdW1lIG9mIHdvcmtlciBpbnN0YW5jZS5cbiAgICogQGRlZmF1bHQgLSBOIGJpbGlvbiBwYXJhbWV0ZXJzICogNUdpQiBFQlNcbiAgICovXG4gIHJlYWRvbmx5IHZvbHVtZVNpemU/OiBTaXplO1xuICAvKipcbiAgICogQ29tcGlsZSBydW50aW1lLlxuICAgKiBAZGVmYXVsdCB7IG5ldXJvbnhTZGtWZXJzaW9uOiBcIjIuMTkuMFwiLCBpbWFnZTogQ29udGFpbmVySW1hZ2UuZnJvbVJlZ2lzdHJ5KFwicHVibGljLmVjci5hd3MvbmV1cm9uL3B5dG9yY2gtdHJhaW5pbmctbmV1cm9ueDoyLjEuMi1uZXVyb254LXB5MzEwLXNkazIuMTkuMC11YnVudHUyMC4wNFwiKX1cbiAgICovXG4gIHJlYWRvbmx5IHJ1bnRpbWU/OiBDb21waWxlUnVudGltZTtcbiAgLyoqXG4gICAqIE5ldXJvbnggY29tcGlsZSBvcHRpb25zLlxuICAgKiBAZGVmYXVsdCAtIEVhY2ggcHJvcGVydGllcyBhcmUgc2V0IGRlZmF1bHQuXG4gICAqL1xuICByZWFkb25seSBjb21waWxlT3B0aW9ucz86IENvbXBpbGVPcHRpb25zO1xuICAvKipcbiAgICogV2hldGhlciBvciBub3QgdG8gdXNlIHNwb3QgaW5zdGFuY2VzLiBTcG90IGluc3RhbmNlcyBhcmUgbGVzcyBleHBlbnNpdmUgRUMyIGluc3RhbmNlcyB0aGF0IGNhbiBiZSByZWNsYWltZWQgYnkgRUMyIGF0IGFueSB0aW1lOyB5b3VyIGpvYiB3aWxsIGJlIGdpdmVuIHR3byBtaW51dGVzIG9mIG5vdGljZSBiZWZvcmUgcmVjbGFtYXRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBzcG90PzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFRoZSBWUEMgU3VibmV0cyB0aGlzIENvbXB1dGUgRW52aXJvbm1lbnQgd2lsbCBsYXVuY2ggaW5zdGFuY2VzIGluLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5ldyBzdWJuZXRzIHdpbGwgYmUgY3JlYXRlZFxuICAgKi9cbiAgcmVhZG9ubHkgdnBjU3VibmV0cz86IGVjMi5TdWJuZXRTZWxlY3Rpb247XG59XG5cbi8qKlxuICogTmV1cm9ueCBjb21waWxlIGNvbnN0cnVjdC4gQ29tcGlsZSB0aGUgbW9kZWwgdG8gd29yayB3aXRoIEluZmVyZW50aWEyIGFuZCBUcmFpbml1bTEgYW5kIHVwbG9hZCBpdCB0byBhbiBTMyBidWNrZXQuXG4gKi9cbmV4cG9ydCBjbGFzcyBOZXVyb254Q29tcGlsZSBleHRlbmRzIENvbnN0cnVjdCB7XG4gIC8qKlxuICAgKiBTMyBVUkwgdGhhdCBjb21waWxlZCBhcnRpZmFjdCB1cGxvYWRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGNvbXBpbGVkQXJ0aWZhY3RTM1VybDogc3RyaW5nO1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogTmV1cm9ueENvbXBpbGVQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCBuUG9zaXRpb25zID0gcHJvcHMuY29tcGlsZU9wdGlvbnM/Lm5Qb3NpdGlvbnMgPz8gNDA5MjtcbiAgICBjb25zdCBxdWFudER0eXBlID0gcHJvcHMuY29tcGlsZU9wdGlvbnM/LnF1YW50RHR5cGU7XG4gICAgY29uc3Qgb3B0TGV2ZWwgPSBwcm9wcy5jb21waWxlT3B0aW9ucz8ub3B0TGV2ZWwgPz8gT3B0TGV2ZWwuQkVTVF9CQUxBTkNFO1xuICAgIGNvbnN0IHRwRGVncmVlID1cbiAgICAgIHByb3BzLmNvbXBpbGVPcHRpb25zPy50cERlZ3JlZSA/P1xuICAgICAgdGhpcy5jYWxjVHBEZWdyZWUocHJvcHMubW9kZWwub3B0aW9ucy5wYXJhbWV0ZXJzLCB7XG4gICAgICAgIG5Qb3NpdGlvbnMsXG4gICAgICAgIHF1YW50RHR5cGUsXG4gICAgICB9KTtcbiAgICBjb25zdCBpbnN0YW5jZVR5cGUgPVxuICAgICAgcHJvcHMuaW5zdGFuY2VUeXBlID8/IHRoaXMuc2VsZWN0SW5zdGFuY2VUeXBlQnlUcERlZ3JlZSh0cERlZ3JlZSk7XG4gICAgY29uc3QgbGF1bmNoVGVtcGxhdGUgPSBuZXcgZWMyLkxhdW5jaFRlbXBsYXRlKHRoaXMsIFwiTGF1bmNoVGVtcGxhdGVcIiwge1xuICAgICAgYmxvY2tEZXZpY2VzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBkZXZpY2VOYW1lOiBcIi9kZXYveHZkYVwiLFxuICAgICAgICAgIHZvbHVtZTogZWMyLkJsb2NrRGV2aWNlVm9sdW1lLmVicyhcbiAgICAgICAgICAgIHByb3BzLnZvbHVtZVNpemU/LnRvR2liaWJ5dGVzKCkgPz9cbiAgICAgICAgICAgICAgcHJvcHMubW9kZWwub3B0aW9ucy5wYXJhbWV0ZXJzLnRvQmlsaW9uKCkgKiA1LFxuICAgICAgICAgICksXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuICAgIGNvbnN0IGNvbXB1dGVFbnZpcm9ubWVudCA9IG5ldyBiYXRjaC5NYW5hZ2VkRWMyRWNzQ29tcHV0ZUVudmlyb25tZW50KFxuICAgICAgdGhpcyxcbiAgICAgIFwiQ29tcHV0ZUVudmlyb25tZW50XCIsXG4gICAgICB7XG4gICAgICAgIHZwYzogcHJvcHMudnBjLFxuICAgICAgICB2cGNTdWJuZXRzOiBwcm9wcy52cGNTdWJuZXRzLFxuICAgICAgICBpbnN0YW5jZVR5cGVzOiBbaW5zdGFuY2VUeXBlLmluc3RhbmNlVHlwZV0sXG4gICAgICAgIHVzZU9wdGltYWxJbnN0YW5jZUNsYXNzZXM6IGZhbHNlLFxuICAgICAgICBpbWFnZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpbWFnZTogbmV3IE5ldXJvbk9wdGltaXplZE1hY2hpbmVJbWFnZSh0aGlzLCBcIk1hY2hpbkltYWdlXCIpLFxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgaW1hZ2VUeXBlOiBcIkVDU19BTDIwMjNcIixcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBsYXVuY2hUZW1wbGF0ZSxcbiAgICAgICAgc3BvdDogcHJvcHMuc3BvdCxcbiAgICAgIH0sXG4gICAgKTtcbiAgICAoXG4gICAgICBjb21wdXRlRW52aXJvbm1lbnQubm9kZS5kZWZhdWx0Q2hpbGQgYXMgYmF0Y2guQ2ZuQ29tcHV0ZUVudmlyb25tZW50XG4gICAgKS5hZGRQcm9wZXJ0eU92ZXJyaWRlKFxuICAgICAgXCJDb21wdXRlUmVzb3VyY2VzLkxhdW5jaFRlbXBsYXRlLlZlcnNpb25cIixcbiAgICAgIGxhdW5jaFRlbXBsYXRlLmxhdGVzdFZlcnNpb25OdW1iZXIsXG4gICAgKTtcblxuICAgIFRhZ3Mub2YoY29tcHV0ZUVudmlyb25tZW50KS5hZGQoXCJOYW1lXCIsIFwibmV1cm9ueC1jb21waWxlLXdvcmtlclwiKTtcbiAgICBjb25zdCBqb2JRdWV1ZSA9IG5ldyBiYXRjaC5Kb2JRdWV1ZSh0aGlzLCBcIkpvYlF1ZXVlXCIsIHtcbiAgICAgIGNvbXB1dGVFbnZpcm9ubWVudHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGNvbXB1dGVFbnZpcm9ubWVudCxcbiAgICAgICAgICBvcmRlcjogMSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBqb2JTdGF0ZVRpbWVMaW1pdEFjdGlvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHN0YXRlOiBiYXRjaC5Kb2JTdGF0ZVRpbWVMaW1pdEFjdGlvbnNTdGF0ZS5SVU5OQUJMRSxcbiAgICAgICAgICByZWFzb246IGJhdGNoLkpvYlN0YXRlVGltZUxpbWl0QWN0aW9uc1JlYXNvbi5KT0JfUkVTT1VSQ0VfUkVRVUlSRU1FTlQsXG4gICAgICAgICAgbWF4VGltZTogRHVyYXRpb24ubWludXRlcygxMCksXG4gICAgICAgICAgYWN0aW9uOiBiYXRjaC5Kb2JTdGF0ZVRpbWVMaW1pdEFjdGlvbnNBY3Rpb24uQ0FOQ0VMLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHJ1bnRpbWU6IENvbXBpbGVSdW50aW1lICYgeyBuZXVyb254VHJhbnNmb3JtZXJzVmVyc2lvbj86IHN0cmluZyB9ID1cbiAgICAgIHByb3BzLnJ1bnRpbWUgPz8ge1xuICAgICAgICBpbWFnZTogQ29udGFpbmVySW1hZ2UuZnJvbVJlZ2lzdHJ5KFxuICAgICAgICAgIFwicHVibGljLmVjci5hd3MvbmV1cm9uL3B5dG9yY2gtdHJhaW5pbmctbmV1cm9ueDoyLjEuMi1uZXVyb254LXB5MzEwLXNkazIuMTkuMC11YnVudHUyMC4wNFwiLFxuICAgICAgICApLFxuICAgICAgICBuZXVyb254VmVyc2lvbjogXCIyLjE5LjBcIixcbiAgICAgICAgbmV1cm9ueFRyYW5zZm9ybWVyc1ZlcnNpb246IFwiMC4xMS4zNTFcIiBhcyBjb25zdCxcbiAgICAgIH07XG4gICAgbGV0IGNvbXBpbGVkQXJ0aWZhY3RQYXRoUHJlZml4ID0gYCR7cHJvcHMubW9kZWwubW9kZWxJZH0vbmV1cm9ueC0ke3J1bnRpbWUubmV1cm9ueFZlcnNpb259L3RwJHt0cERlZ3JlZX0tbnAke25Qb3NpdGlvbnN9LW9wdCR7b3B0TGV2ZWx9YDtcbiAgICBpZiAocXVhbnREdHlwZSEhKSB7XG4gICAgICBjb21waWxlZEFydGlmYWN0UGF0aFByZWZpeCA9IGAke2NvbXBpbGVkQXJ0aWZhY3RQYXRoUHJlZml4fS1xdWFudCR7cXVhbnREdHlwZX1gO1xuICAgIH1cbiAgICBwcm9wcy5idWNrZXQuZ3JhbnRSZWFkV3JpdGUoXG4gICAgICBjb21wdXRlRW52aXJvbm1lbnQuaW5zdGFuY2VSb2xlISxcbiAgICAgIGAke2NvbXBpbGVkQXJ0aWZhY3RQYXRoUHJlZml4fS8qYCxcbiAgICApO1xuXG4gICAgY29uc3QgY29tcGlsZVNjcmlwdCA9IHJlYWRGaWxlU3luYyhcbiAgICAgIGpvaW4oX19kaXJuYW1lLCBcIi4uL3NjcmlwdHMvY29tcGlsZS5weVwiKSxcbiAgICApLnRvU3RyaW5nKCk7XG4gICAgY29uc3Qgam9iRGVmaW5pdGlvbiA9IG5ldyBiYXRjaC5FY3NKb2JEZWZpbml0aW9uKHRoaXMsIFwiSm9iRGVmaW5pdGlvblwiLCB7XG4gICAgICBjb250YWluZXI6IG5ldyBiYXRjaC5FY3NFYzJDb250YWluZXJEZWZpbml0aW9uKFxuICAgICAgICB0aGlzLFxuICAgICAgICBcIkNvbnRhaW5lckRlZmluaXRpb25cIixcbiAgICAgICAge1xuICAgICAgICAgIGltYWdlOiBydW50aW1lLmltYWdlLFxuICAgICAgICAgIC8vIFRoZSBmbGxvd2luZyBjb21tYW5kIHdhcyBleGVjdXRlZCBvbiBpbmYyLjh4bGFyZ2VcbiAgICAgICAgICAvLyBzaC01LjIkIGZyZWUgLWJcbiAgICAgICAgICAvLyBcdFx0XHR0b3RhbFx0XHRcdFx0XHR1c2VkXHRcdFx0ZnJlZVx0XHRcdFx0XHRzaGFyZWRcdGJ1ZmYvY2FjaGVcdGF2YWlsYWJsZVxuICAgICAgICAgIC8vIE1lbTpcdDEzMjI2NTc2NjkxMlx0ODY2MzIwMzg0XHQxMzAzNDE3ODU2MDBcdDY2NzY0OFx0MTA1NzY2MDkyOFx0MTMwNTI5MTQ4OTI4XG4gICAgICAgICAgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JhdGNoL2xhdGVzdC91c2VyZ3VpZGUvbWVtb3J5LW1hbmFnZW1lbnQuaHRtbFxuICAgICAgICAgIG1lbW9yeTogU2l6ZS5tZWJpYnl0ZXMoXG4gICAgICAgICAgICBNYXRoLmNlaWwoaW5zdGFuY2VUeXBlLm1lbW9yeS50b01lYmlieXRlcygpICogMC45NSksXG4gICAgICAgICAgKSxcbiAgICAgICAgICBjcHU6IGluc3RhbmNlVHlwZS52Q3B1LFxuICAgICAgICAgIGNvbW1hbmQ6IFtcbiAgICAgICAgICAgIGBjYXQgPDxFT0YgPiBjb21waWxlLnB5XFxuJHtjb21waWxlU2NyaXB0fVxcbkVPRlxcbmAsXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIHJ1bnRpbWUubmV1cm9ueFRyYW5zZm9ybWVyc1ZlcnNpb25cbiAgICAgICAgICAgICAgICA/IFwicGlwIGluc3RhbGwgLVUgLS1leHRyYS1pbmRleC11cmwgaHR0cHM6Ly9waXAucmVwb3MubmV1cm9uLmFtYXpvbmF3cy5jb20gdHJhbnNmb3JtZXJzLW5ldXJvbng9PSRORVVST05YX1RSQU5TRk9STUVSU19WRVJTSU9OXCJcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgXCJjdXJsIC1zIGh0dHBzOi8vcGFja2FnZWNsb3VkLmlvL2luc3RhbGwvcmVwb3NpdG9yaWVzL2dpdGh1Yi9naXQtbGZzL3NjcmlwdC5kZWIuc2ggfCBiYXNoXCIsXG4gICAgICAgICAgICAgIFwiYXB0LWdldCBpbnN0YWxsIGdpdC1sZnNcIixcbiAgICAgICAgICAgICAgXCJnaXQgbGZzIGluc3RhbGxcIixcbiAgICAgICAgICAgICAgYGdpdCBjbG9uZSBodHRwczovL2h1Z2dpbmdmYWNlLmNvLyR7cHJvcHMubW9kZWwubW9kZWxJZH0gbW9kZWxgLFxuICAgICAgICAgICAgICBcInJtIC1yZiBtb2RlbC8uZ2l0XCIsXG4gICAgICAgICAgICAgIFwicHl0aG9uIC4vY29tcGlsZS5weVwiLFxuICAgICAgICAgICAgICBgYXdzIHMzIHN5bmMgLS1uby1wcm9ncmVzcyAuL21vZGVsICR7cHJvcHMuYnVja2V0LnMzVXJsRm9yT2JqZWN0KGAke2NvbXBpbGVkQXJ0aWZhY3RQYXRoUHJlZml4fS9tb2RlbGApfWAsXG4gICAgICAgICAgICAgIGBhd3MgczMgc3luYyAtLW5vLXByb2dyZXNzIC4vY29tcGlsZWQgJHtwcm9wcy5idWNrZXQuczNVcmxGb3JPYmplY3QoYCR7Y29tcGlsZWRBcnRpZmFjdFBhdGhQcmVmaXh9L2NvbXBpbGVkYCl9YCxcbiAgICAgICAgICAgICAgXCJlY2hvICdjb21waWxlIGNvbXBsZXRlZCdcIixcbiAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgLmZpbHRlcigodikgPT4gISF2KVxuICAgICAgICAgICAgICAuam9pbihcIiAmJiBcIiksXG4gICAgICAgICAgXSxcbiAgICAgICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICAgICAgTU9ERUxfSUQ6IHByb3BzLm1vZGVsLm1vZGVsSWQsXG4gICAgICAgICAgICBUUF9ERUdSRUU6IHRwRGVncmVlLnRvU3RyaW5nKCksXG4gICAgICAgICAgICBOX1BPU0lUSU9OUzogblBvc2l0aW9ucy50b1N0cmluZygpLFxuICAgICAgICAgICAgT1BUX0xFVkVMOiBvcHRMZXZlbC50b1N0cmluZygpLFxuICAgICAgICAgICAgUVVBTlRfRFRZUEU6IHF1YW50RHR5cGU/LnRvU3RyaW5nKCkgPz8gXCJcIixcbiAgICAgICAgICAgIEFSVElGQUNUX1MzX1VSTDogcHJvcHMuYnVja2V0LnMzVXJsRm9yT2JqZWN0KFxuICAgICAgICAgICAgICBjb21waWxlZEFydGlmYWN0UGF0aFByZWZpeCxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBORVVST05YX1RSQU5TRk9STUVSU19WRVJTSU9OOlxuICAgICAgICAgICAgICBydW50aW1lLm5ldXJvbnhUcmFuc2Zvcm1lcnNWZXJzaW9uID8/IFwiXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICksXG4gICAgfSk7XG4gICAgdGhpcy5jb25uZWN0QWNjZWxlcmF0b3JDaGlwcyhqb2JEZWZpbml0aW9uLCBpbnN0YW5jZVR5cGUpO1xuXG4gICAgY29uc3Qgam9iU3VibWl0RnVuY3Rpb24gPSBuZXcgU2luZ2xldG9uRnVuY3Rpb24odGhpcywgXCJKb2JTdWJtaXRGdW5jdGlvblwiLCB7XG4gICAgICBjb2RlOiBDb2RlLmZyb21Bc3NldChqb2luKF9fZGlybmFtZSwgXCJwcml2YXRlL2F3YWl0LWNvbXBpbGUtam9iXCIpKSxcbiAgICAgIGhhbmRsZXI6IFwiaW5kZXgub25FdmVudFwiLFxuICAgICAgcnVudGltZTogUnVudGltZS5OT0RFSlNfMjBfWCxcbiAgICAgIHV1aWQ6IFwiMTM2MWY0NjktNWM5Mi00YzQ2LTllMTEtNWQxZGJmOTI1YmFjXCIsXG4gICAgfSk7XG4gICAgam9iRGVmaW5pdGlvbi5ncmFudFN1Ym1pdEpvYihqb2JTdWJtaXRGdW5jdGlvbiwgam9iUXVldWUpO1xuICAgIGNvbnN0IGpvYk1vbml0b3JpbmdGdW5jdGlvbiA9IG5ldyBTaW5nbGV0b25GdW5jdGlvbihcbiAgICAgIHRoaXMsXG4gICAgICBcIkpvYk1vbml0b3JpbmdGdW5jdGlvblwiLFxuICAgICAge1xuICAgICAgICBjb2RlOiBDb2RlLmZyb21Bc3NldChqb2luKF9fZGlybmFtZSwgXCJwcml2YXRlL2F3YWl0LWNvbXBpbGUtam9iXCIpKSxcbiAgICAgICAgaGFuZGxlcjogXCJpbmRleC5pc0NvbXBsZXRlXCIsXG4gICAgICAgIHJ1bnRpbWU6IFJ1bnRpbWUuTk9ERUpTXzIwX1gsXG4gICAgICAgIHV1aWQ6IFwiZGYxNmRiYTgtNWY3Ny00ODBjLWE2YWQtY2ZkZjc0YzNkZTYyXCIsXG4gICAgICB9LFxuICAgICk7XG4gICAgR3JhbnQuYWRkVG9QcmluY2lwYWwoe1xuICAgICAgcmVzb3VyY2VBcm5zOiBbXCIqXCJdLFxuICAgICAgZ3JhbnRlZTogam9iTW9uaXRvcmluZ0Z1bmN0aW9uLFxuICAgICAgYWN0aW9uczogW1wiYmF0Y2g6RGVzY3JpYmVKb2JzXCJdLFxuICAgIH0pO1xuICAgIGNvbnN0IHByb3ZpZGVyID0gbmV3IFByb3ZpZGVyKHRoaXMsIFwiQ29tcGlsZUpvYlByb3ZpZGVyXCIsIHtcbiAgICAgIG9uRXZlbnRIYW5kbGVyOiBqb2JTdWJtaXRGdW5jdGlvbixcbiAgICAgIGlzQ29tcGxldGVIYW5kbGVyOiBqb2JNb25pdG9yaW5nRnVuY3Rpb24sXG4gICAgICBxdWVyeUludGVydmFsOiBEdXJhdGlvbi5taW51dGVzKDEpLFxuICAgICAgdG90YWxUaW1lb3V0OiBEdXJhdGlvbi5ob3VycygxKSxcbiAgICB9KTtcbiAgICBjb25zdCBjb21waWxlSm9iID0gbmV3IEN1c3RvbVJlc291cmNlKHRoaXMsIFwiUmVzb3VyY2VcIiwge1xuICAgICAgc2VydmljZVRva2VuOiBwcm92aWRlci5zZXJ2aWNlVG9rZW4sXG4gICAgICByZXNvdXJjZVR5cGU6IFwiQ3VzdG9tOjpOZXVyb254Q29tcGlsZVwiLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBqb2JEZWZpbml0aW9uQXJuOiBqb2JEZWZpbml0aW9uLmpvYkRlZmluaXRpb25Bcm4sXG4gICAgICAgIGpvYlF1ZXVlQXJuOiBqb2JRdWV1ZS5qb2JRdWV1ZUFybixcbiAgICAgICAgYXJ0aWZhY3RTM1VybDogcHJvcHMuYnVja2V0LnMzVXJsRm9yT2JqZWN0KGNvbXBpbGVkQXJ0aWZhY3RQYXRoUHJlZml4KSxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgdGhpcy5jb21waWxlZEFydGlmYWN0UzNVcmwgPSBjb21waWxlSm9iLmdldEF0dFN0cmluZyhcIkFydGlmYWN0UzNVcmxcIik7XG4gIH1cblxuICBwcml2YXRlIGNvbm5lY3RBY2NlbGVyYXRvckNoaXBzKFxuICAgIGpvYkRlZmluaXRpb246IGJhdGNoLkVjc0pvYkRlZmluaXRpb24sXG4gICAgaW5zdGFuY2VUeXBlOiBOZXVyb254SW5zdGFuY2VUeXBlLFxuICApIHtcbiAgICB0eXBlIFBhc2NhbENhc2U8VCBleHRlbmRzIG9iamVjdD4gPSB7XG4gICAgICBbUCBpbiBrZXlvZiBUIGFzIFAgZXh0ZW5kcyBzdHJpbmcgPyBDYXBpdGFsaXplPFA+IDogbmV2ZXJdOiBUW1BdO1xuICAgIH07XG4gICAgY29uc3QgZGV2aWNlcyA9IEFycmF5LmZyb20oe1xuICAgICAgbGVuZ3RoOiBpbnN0YW5jZVR5cGUuYWNjZWxlcmF0b3JDaGlwcy5jaGlwcyxcbiAgICB9KS5tYXAoXG4gICAgICAoXywgaW5kZXgpID0+XG4gICAgICAgICh7XG4gICAgICAgICAgSG9zdFBhdGg6IGAvZGV2L25ldXJvbiR7aW5kZXh9YCxcbiAgICAgICAgICBDb250YWluZXJQYXRoOiBgL2Rldi9uZXVyb24ke2luZGV4fWAsXG4gICAgICAgICAgUGVybWlzc2lvbnM6IFtcInJlYWRcIiwgXCJ3cml0ZVwiXSxcbiAgICAgICAgfSkgc2F0aXNmaWVzIFBhc2NhbENhc2U8YmF0Y2guQ2ZuSm9iRGVmaW5pdGlvbi5EZXZpY2VQcm9wZXJ0eT4sXG4gICAgKTtcbiAgICBjb25zdCBjZm5Kb2JEZWZpbml0aW9uID0gam9iRGVmaW5pdGlvbi5ub2RlXG4gICAgICAuZGVmYXVsdENoaWxkIGFzIGJhdGNoLkNmbkpvYkRlZmluaXRpb247XG4gICAgY2ZuSm9iRGVmaW5pdGlvbi5hZGRQcm9wZXJ0eU92ZXJyaWRlKFxuICAgICAgXCJDb250YWluZXJQcm9wZXJ0aWVzLkxpbnV4UGFyYW1ldGVycy5EZXZpY2VzXCIsXG4gICAgICBkZXZpY2VzLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGNhbGNUcERlZ3JlZShwYXJhbWV0ZXJzOiBQYXJhbWV0ZXJzLCBjb21waWxlT3B0aW9uczogQ29tcGlsZU9wdGlvbnMpIHtcbiAgICAvLyBjYXNlIG9mIGZsb2F0MTZcbiAgICBjb25zdCBieXRlc1BlclBhcmFtZXRlID0gMTYgLyA4O1xuICAgIC8vIG1lbW9yeSA9IGJ5dGVzIHBlciBwYXJhbWV0ZXIgKiBudW1iZXIgb2YgcGFyYW1ldGVyc1xuICAgIGxldCBtZW1vcnkgPSBTaXplLmdpYmlieXRlcyhieXRlc1BlclBhcmFtZXRlICogcGFyYW1ldGVycy50b0JpbGlvbigpKTtcbiAgICBzd2l0Y2ggKGNvbXBpbGVPcHRpb25zLnF1YW50RHR5cGUpIHtcbiAgICAgIGNhc2UgUXVhbnREdHlwZS5TODpcbiAgICAgICAgbWVtb3J5ID0gU2l6ZS5naWJpYnl0ZXMobWVtb3J5LnRvR2liaWJ5dGVzKCkgLyAyKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNvbnN0IG5lcm9ueENvcmVNZW1vcnkgPSBTaXplLmdpYmlieXRlcygxNik7XG4gICAgY29uc3QgbWluaW11bSA9IE1hdGguY2VpbChcbiAgICAgIG1lbW9yeS50b0dpYmlieXRlcygpIC8gbmVyb254Q29yZU1lbW9yeS50b0dpYmlieXRlcygpLFxuICAgICk7XG5cbiAgICBjb25zdCB0cERlZ3JlZXMgPSBbMSwgMiwgNCwgOCwgMjRdO1xuICAgIGZvciAoY29uc3QgdHBEZWdyZWUgb2YgdHBEZWdyZWVzKSB7XG4gICAgICBpZiAobWluaW11bSA8PSB0cERlZ3JlZSkge1xuICAgICAgICByZXR1cm4gdHBEZWdyZWU7XG4gICAgICB9XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiVGhpcyBtb2RlbCBpcyB0b28gbGFyZ2UsIEkgY2FuIG5vdCBzdXBwb3J0IHRoaXMgbW9kZWwgY3VycmVudCB2ZXJzaW9uLlwiLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHNlbGVjdEluc3RhbmNlVHlwZUJ5VHBEZWdyZWUodHBEZWdyZWU6IG51bWJlcikge1xuICAgIGNvbnN0IGluc3RhbmNlVHlwZXMgPSBbXG4gICAgICBOZXVyb254SW5zdGFuY2VUeXBlLklORjJfOFhMQVJHRSxcbiAgICAgIE5ldXJvbnhJbnN0YW5jZVR5cGUuSU5GMl8yNFhMQVJHRSxcbiAgICAgIE5ldXJvbnhJbnN0YW5jZVR5cGUuSU5GMl80OFhMQVJHRSxcbiAgICBdO1xuICAgIGZvciAoY29uc3QgaW5zdGFuY2VUeXBlIG9mIGluc3RhbmNlVHlwZXMpIHtcbiAgICAgIGlmICh0cERlZ3JlZSA8PSBpbnN0YW5jZVR5cGUuYWNjZWxlcmF0b3JDaGlwcy5uZXVyb254Q29yZXMpIHtcbiAgICAgICAgcmV0dXJuIGluc3RhbmNlVHlwZTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJUaGlzIG1vZGVsIGlzIHRvbyBsYXJnZSwgSSBjYW4gbm90IHN1cHBvcnQgdGhpcyBtb2RlbCBjdXJyZW50IHZlcnNpb24uXCIsXG4gICAgKTtcbiAgfVxufVxuIl19
285
+ NeuronxCompile[_c] = { fqn: "aws-cdk-neuronx-patterns.NeuronxCompile", version: "0.0.3" };
286
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV1cm9ueC1jb21waWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL25ldXJvbngtY29tcGlsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDJCQUFrQztBQUNsQywrQkFBNEI7QUFDNUIsNkNBQW1FO0FBQ25FLCtDQUErQztBQUMvQywyQ0FBMkM7QUFDM0MsaURBQXFEO0FBQ3JELGlEQUE0QztBQUM1Qyx1REFBMEU7QUFFMUUsbUVBQXdEO0FBQ3hELDJDQUF1QztBQUN2QyxtRUFBOEQ7QUFDOUQsNkZBQXVGO0FBZ0J2Rjs7R0FFRztBQUNILElBQVksVUFLWDtBQUxELFdBQVksVUFBVTtJQUNwQjs7T0FFRztJQUNILHVCQUFTLENBQUE7QUFDWCxDQUFDLEVBTFcsVUFBVSwwQkFBVixVQUFVLFFBS3JCO0FBRUQ7O0dBRUc7QUFDSCxJQUFZLFFBYVg7QUFiRCxXQUFZLFFBQVE7SUFDbEI7O09BRUc7SUFDSCw2RUFBMkIsQ0FBQTtJQUMzQjs7T0FFRztJQUNILHVEQUFnQixDQUFBO0lBQ2hCOztPQUVHO0lBQ0gscUZBQStCLENBQUE7QUFDakMsQ0FBQyxFQWJXLFFBQVEsd0JBQVIsUUFBUSxRQWFuQjtBQXdCRDs7R0FFRztBQUNILE1BQWEsVUFBVTtJQUNyQjs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFrQjtRQUMvQixPQUFPLElBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFDRCxZQUFxQyxPQUFlO1FBQWYsWUFBTyxHQUFQLE9BQU8sQ0FBUTtJQUFHLENBQUM7SUFDeEQ7OztPQUdHO0lBQ0gsUUFBUTtRQUNOLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDOztBQWhCSCxnQ0FpQkM7OztBQVFEOztHQUVHO0FBQ0gsTUFBYSxLQUFLO0lBQ2hCOzs7OztPQUtHO0lBQ0gsTUFBTSxDQUFDLGVBQWUsQ0FBQyxPQUFlLEVBQUUsT0FBcUI7UUFDM0QsT0FB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Z0JBQzNELE9BQU8sWUFBWSxDQUFDO1lBQ3RCLENBQUM7UUFDSCxDQUFDO1FBQ0QsTUFBTSxJQUFJLEtBQUssQ0FDYix3RUFBd0UsQ0FDekUsQ0FBQztJQUNKLENBQUM7O0FBclBILHdDQXNQQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlYWRGaWxlU3luYyB9IGZyb20gXCJmc1wiO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBDdXN0b21SZXNvdXJjZSwgRHVyYXRpb24sIFNpemUsIFRhZ3MgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCAqIGFzIGJhdGNoIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtYmF0Y2hcIjtcbmltcG9ydCAqIGFzIGVjMiBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiO1xuaW1wb3J0IHsgQ29udGFpbmVySW1hZ2UgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjc1wiO1xuaW1wb3J0IHsgR3JhbnQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuaW1wb3J0IHsgQ29kZSwgUnVudGltZSwgU2luZ2xldG9uRnVuY3Rpb24gfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiO1xuaW1wb3J0IHsgSUJ1Y2tldCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtczNcIjtcbmltcG9ydCB7IFByb3ZpZGVyIH0gZnJvbSBcImF3cy1jZGstbGliL2N1c3RvbS1yZXNvdXJjZXNcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBOZXVyb254SW5zdGFuY2VUeXBlIH0gZnJvbSBcIi4vbmV1cm9ueC1pbnN0YW5jZS10eXBlXCI7XG5pbXBvcnQgeyBOZXVyb25PcHRpbWl6ZWRNYWNoaW5lSW1hZ2UgfSBmcm9tIFwiLi9wcml2YXRlL25ldXJvbi1vcHRpbWl6ZWQtbWFjaGluZS1pbWFnZVwiO1xuXG4vKipcbiAqIENvbXBpbGUgcnVudGltZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21waWxlUnVudGltZSB7XG4gIC8qKlxuICAgKiBBbiBpbWFnZSBvZiB0aGUgY29udGFpbmVyIHdoZXJlIHRoZSBjb21waWxlIGpvYiBpcyBleGVjdXRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGltYWdlOiBDb250YWluZXJJbWFnZTtcbiAgLyoqXG4gICAqIE5ldXJvbnggdmVyc2lvbiBpbmNsdWRlZCBpbiBjb250YWluZXIgaW1hZ2UuXG4gICAqL1xuICByZWFkb25seSBuZXVyb254VmVyc2lvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIFF1YW50IGRhdGEgdHlwZS5cbiAqL1xuZXhwb3J0IGVudW0gUXVhbnREdHlwZSB7XG4gIC8qKlxuICAgKiBpbnQ4IHdlaWdodCBzdG9yYWdlLlxuICAgKi9cbiAgUzggPSBcInM4XCIsXG59XG5cbi8qKlxuICogT3B0aW1pemF0aW9uIGxldmVsLlxuICovXG5leHBvcnQgZW51bSBPcHRMZXZlbCB7XG4gIC8qKlxuICAgKiBlbmFibGVzIHRoZSBjb3JlIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnMgaW4gdGhlIGNvbXBpbGVyLCB3aGlsZSBhbHNvIG1pbmltaXppbmcgY29tcGlsZSB0aW1lLlxuICAgKi9cbiAgTUlOSU1JWklOR19DT01QSUxFX1RJTUUgPSAxLFxuICAvKipcbiAgICogcHJvdmlkZXMgdGhlIGJlc3QgYmFsYW5jZSBiZXR3ZWVuIG1vZGVsIHBlcmZvcm1hbmNlIGFuZCBjb21waWxlIHRpbWUuXG4gICAqL1xuICBCRVNUX0JBTEFOQ0UgPSAyLFxuICAvKipcbiAgICogbWF5IHByb3ZpZGUgYWRkaXRpb25hbCBtb2RlbCBleGVjdXRpb24gcGVyZm9ybWFuY2UgYnV0IG1heSBpbmN1ciBsb25nZXIgY29tcGlsZSB0aW1lcyBhbmQgaGlnaGVyIGhvc3QgbWVtb3J5IHVzYWdlIGR1cmluZyBtb2RlbCBjb21waWxhdGlvbi5cbiAgICovXG4gIE1PREVMX0VYRUNVVElPTl9QRVJGT1JNQU5DRSA9IDMsXG59XG5cbi8qKlxuICogQ29tcGlsZSBvcHRpb25zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbXBpbGVPcHRpb25zIHtcbiAgLyoqXG4gICAqIEBkZWZhdWx0IC0gY2FsYyBmcm9tIHBhcmFtZXRlcnMgYW5kIHF1YW50RHR5cGVcbiAgICovXG4gIHJlYWRvbmx5IHRwRGVncmVlPzogbnVtYmVyO1xuICAvKipcbiAgICogQGRlZmF1bHQgLSBObyBxdWFudFxuICAgKi9cbiAgcmVhZG9ubHkgcXVhbnREdHlwZT86IFF1YW50RHR5cGU7XG4gIC8qKlxuICAgKiBAZGVmYXVsdCA0MDkyXG4gICAqL1xuICByZWFkb25seSBuUG9zaXRpb25zPzogbnVtYmVyO1xuICAvKipcbiAgICogQGRlZmF1bHQgT3B0TGV2ZWwuQkVTVF9CQUxBTkNFXG4gICAqL1xuICByZWFkb25seSBvcHRMZXZlbD86IE9wdExldmVsO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIGFtb3VudCBvZiBwYXJhbWV0ZXJzLlxuICovXG5leHBvcnQgY2xhc3MgUGFyYW1ldGVycyB7XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBQYXJhbWV0ZXJzIHJlcHJlc2VudGluZyBhbiBhbW91bnQgYmlsaW9uLlxuICAgKiBAcGFyYW0gcGFyYW1ldGVycyBudW1iZXIgb2YgcGFyYW1ldGVycyBiaWxpb25YXG4gICAqIEByZXR1cm5zIHBhcmFtZXRlcnNcbiAgICovXG4gIHN0YXRpYyBiaWxsaW9uKHBhcmFtZXRlcnM6IG51bWJlcikge1xuICAgIHJldHVybiBuZXcgUGFyYW1ldGVycyhwYXJhbWV0ZXJzKTtcbiAgfVxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgYmlsbGlvbjogbnVtYmVyKSB7fVxuICAvKipcbiAgICogUmV0dXJuIHRoaXMgbnVtYmVyIG9mIHBhcmFtZXRlcnMgYXMgYmlsaW9uLlxuICAgKiBAcmV0dXJucyBUaGlzIG51bWJlciBvZiBwYXJhbWV0ZXJzIGFzIGJpbGlvbi5cbiAgICovXG4gIHRvQmlsaW9uKCkge1xuICAgIHJldHVybiB0aGlzLmJpbGxpb247XG4gIH1cbn1cblxuLyoqXG4gKiBDb21waWxlIHRhcmdldCBtb2RlbCBiYXNpYyBpbmZyb21hdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1vZGVsT3B0aW9ucyB7XG4gIHJlYWRvbmx5IHBhcmFtZXRlcnM6IFBhcmFtZXRlcnM7XG59XG4vKipcbiAqIENvbXBpbGUgdGFyZ2V0IG1vZGVsLlxuICovXG5leHBvcnQgY2xhc3MgTW9kZWwge1xuICAvKipcbiAgICogbW9kZWwgaW5mb3JtYXRpb25zIGF0IEh1Z2dpbmdGYWNlXG4gICAqIEBwYXJhbSBtb2RlbElkIG1vZGVsIGlkIG9uIHRoZSBIdWdnaW5nRmFjZVxuICAgKiBAcGFyYW0gb3B0aW9ucyBtb2RlbCBiYXNpYyBpbmZyb21hdGlvblxuICAgKiBAcmV0dXJucyBtb2RlbCBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGZyb21IdWdnaW5nRmFjZShtb2RlbElkOiBzdHJpbmcsIG9wdGlvbnM6IE1vZGVsT3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgTW9kZWwobW9kZWxJZCwgb3B0aW9ucyk7XG4gIH1cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihcbiAgICByZWFkb25seSBtb2RlbElkOiBzdHJpbmcsXG4gICAgcmVhZG9ubHkgb3B0aW9uczogTW9kZWxPcHRpb25zLFxuICApIHt9XG59XG4vKipcbiAqIFByb3BzIG9mIE5ldXJvbnhDb21waWxlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5ldXJvbnhDb21waWxlUHJvcHMge1xuICAvKipcbiAgICogVlBDIGluIHdoaWNoIHRoaXMgd2lsbCBsYXVuY2ggY29tcGlsZSB3b3JrZXIgaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSB2cGM6IGVjMi5JVnBjO1xuICAvKipcbiAgICogVGhlIGluc3RhbmNlIHR5cGUgb2YgY29tcGlsZSB3b3JrZXIgaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBpbnN0YW5jZVR5cGU/OiBOZXVyb254SW5zdGFuY2VUeXBlO1xuICAvKipcbiAgICogVGhlIGJ1Y2tldCB0byB1cGxvYWQgY29tcGlsZWQgYXJ0aWZhY3RzLlxuICAgKi9cbiAgcmVhZG9ubHkgYnVja2V0OiBJQnVja2V0O1xuICAvKipcbiAgICogVGhlIG1vZGVsIHRvIGJlIGNvbXBpbGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgbW9kZWw6IE1vZGVsO1xuICAvKipcbiAgICogVGhlIHJvb3Qgdm9sdW1lIG9mIHdvcmtlciBpbnN0YW5jZS5cbiAgICogQGRlZmF1bHQgLSBOIGJpbGlvbiBwYXJhbWV0ZXJzICogNUdpQiBFQlNcbiAgICovXG4gIHJlYWRvbmx5IHZvbHVtZVNpemU/OiBTaXplO1xuICAvKipcbiAgICogQ29tcGlsZSBydW50aW1lLlxuICAgKiBAZGVmYXVsdCB7IG5ldXJvbnhTZGtWZXJzaW9uOiBcIjIuMTkuMFwiLCBpbWFnZTogQ29udGFpbmVySW1hZ2UuZnJvbVJlZ2lzdHJ5KFwicHVibGljLmVjci5hd3MvbmV1cm9uL3B5dG9yY2gtdHJhaW5pbmctbmV1cm9ueDoyLjEuMi1uZXVyb254LXB5MzEwLXNkazIuMTkuMC11YnVudHUyMC4wNFwiKX1cbiAgICovXG4gIHJlYWRvbmx5IHJ1bnRpbWU/OiBDb21waWxlUnVudGltZTtcbiAgLyoqXG4gICAqIE5ldXJvbnggY29tcGlsZSBvcHRpb25zLlxuICAgKiBAZGVmYXVsdCAtIEVhY2ggcHJvcGVydGllcyBhcmUgc2V0IGRlZmF1bHQuXG4gICAqL1xuICByZWFkb25seSBjb21waWxlT3B0aW9ucz86IENvbXBpbGVPcHRpb25zO1xuICAvKipcbiAgICogV2hldGhlciBvciBub3QgdG8gdXNlIHNwb3QgaW5zdGFuY2VzLiBTcG90IGluc3RhbmNlcyBhcmUgbGVzcyBleHBlbnNpdmUgRUMyIGluc3RhbmNlcyB0aGF0IGNhbiBiZSByZWNsYWltZWQgYnkgRUMyIGF0IGFueSB0aW1lOyB5b3VyIGpvYiB3aWxsIGJlIGdpdmVuIHR3byBtaW51dGVzIG9mIG5vdGljZSBiZWZvcmUgcmVjbGFtYXRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBzcG90PzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFRoZSBWUEMgU3VibmV0cyB0aGlzIENvbXB1dGUgRW52aXJvbm1lbnQgd2lsbCBsYXVuY2ggaW5zdGFuY2VzIGluLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5ldyBzdWJuZXRzIHdpbGwgYmUgY3JlYXRlZFxuICAgKi9cbiAgcmVhZG9ubHkgdnBjU3VibmV0cz86IGVjMi5TdWJuZXRTZWxlY3Rpb247XG59XG5cbi8qKlxuICogTmV1cm9ueCBjb21waWxlIGNvbnN0cnVjdC4gQ29tcGlsZSB0aGUgbW9kZWwgdG8gd29yayB3aXRoIEluZmVyZW50aWEyIGFuZCBUcmFpbml1bTEgYW5kIHVwbG9hZCBpdCB0byBhbiBTMyBidWNrZXQuXG4gKi9cbmV4cG9ydCBjbGFzcyBOZXVyb254Q29tcGlsZSBleHRlbmRzIENvbnN0cnVjdCB7XG4gIC8qKlxuICAgKiBTMyBVUkwgdGhhdCBjb21waWxlZCBhcnRpZmFjdCB1cGxvYWRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGNvbXBpbGVkQXJ0aWZhY3RTM1VybDogc3RyaW5nO1xuICAvKipcbiAgICogUzMgUHJlZml4IHRoYXQgY29tcGlsZWQgYXJ0aWZhY3QgdXBsb2FkZWQuXG4gICAqL1xuICByZWFkb25seSBjb21waWxlZEFydGlmYWN0UzNQcmVmaXg6IHN0cmluZztcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IE5ldXJvbnhDb21waWxlUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgY29uc3QgblBvc2l0aW9ucyA9IHByb3BzLmNvbXBpbGVPcHRpb25zPy5uUG9zaXRpb25zID8/IDQwOTI7XG4gICAgY29uc3QgcXVhbnREdHlwZSA9IHByb3BzLmNvbXBpbGVPcHRpb25zPy5xdWFudER0eXBlO1xuICAgIGNvbnN0IG9wdExldmVsID0gcHJvcHMuY29tcGlsZU9wdGlvbnM/Lm9wdExldmVsID8/IE9wdExldmVsLkJFU1RfQkFMQU5DRTtcbiAgICBjb25zdCB0cERlZ3JlZSA9XG4gICAgICBwcm9wcy5jb21waWxlT3B0aW9ucz8udHBEZWdyZWUgPz9cbiAgICAgIHRoaXMuY2FsY1RwRGVncmVlKHByb3BzLm1vZGVsLm9wdGlvbnMucGFyYW1ldGVycywge1xuICAgICAgICBuUG9zaXRpb25zLFxuICAgICAgICBxdWFudER0eXBlLFxuICAgICAgfSk7XG4gICAgY29uc3QgaW5zdGFuY2VUeXBlID1cbiAgICAgIHByb3BzLmluc3RhbmNlVHlwZSA/PyB0aGlzLnNlbGVjdEluc3RhbmNlVHlwZUJ5VHBEZWdyZWUodHBEZWdyZWUpO1xuICAgIGNvbnN0IGxhdW5jaFRlbXBsYXRlID0gbmV3IGVjMi5MYXVuY2hUZW1wbGF0ZSh0aGlzLCBcIkxhdW5jaFRlbXBsYXRlXCIsIHtcbiAgICAgIGJsb2NrRGV2aWNlczogW1xuICAgICAgICB7XG4gICAgICAgICAgZGV2aWNlTmFtZTogXCIvZGV2L3h2ZGFcIixcbiAgICAgICAgICB2b2x1bWU6IGVjMi5CbG9ja0RldmljZVZvbHVtZS5lYnMoXG4gICAgICAgICAgICBwcm9wcy52b2x1bWVTaXplPy50b0dpYmlieXRlcygpID8/XG4gICAgICAgICAgICAgIHByb3BzLm1vZGVsLm9wdGlvbnMucGFyYW1ldGVycy50b0JpbGlvbigpICogNSxcbiAgICAgICAgICApLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcbiAgICBjb25zdCBjb21wdXRlRW52aXJvbm1lbnQgPSBuZXcgYmF0Y2guTWFuYWdlZEVjMkVjc0NvbXB1dGVFbnZpcm9ubWVudChcbiAgICAgIHRoaXMsXG4gICAgICBcIkNvbXB1dGVFbnZpcm9ubWVudFwiLFxuICAgICAge1xuICAgICAgICB2cGM6IHByb3BzLnZwYyxcbiAgICAgICAgdnBjU3VibmV0czogcHJvcHMudnBjU3VibmV0cyxcbiAgICAgICAgaW5zdGFuY2VUeXBlczogW2luc3RhbmNlVHlwZS5pbnN0YW5jZVR5cGVdLFxuICAgICAgICB1c2VPcHRpbWFsSW5zdGFuY2VDbGFzc2VzOiBmYWxzZSxcbiAgICAgICAgaW1hZ2VzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgaW1hZ2U6IG5ldyBOZXVyb25PcHRpbWl6ZWRNYWNoaW5lSW1hZ2UodGhpcywgXCJNYWNoaW5JbWFnZVwiKSxcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIGltYWdlVHlwZTogXCJFQ1NfQUwyMDIzXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgbGF1bmNoVGVtcGxhdGUsXG4gICAgICAgIHNwb3Q6IHByb3BzLnNwb3QsXG4gICAgICB9LFxuICAgICk7XG4gICAgKFxuICAgICAgY29tcHV0ZUVudmlyb25tZW50Lm5vZGUuZGVmYXVsdENoaWxkIGFzIGJhdGNoLkNmbkNvbXB1dGVFbnZpcm9ubWVudFxuICAgICkuYWRkUHJvcGVydHlPdmVycmlkZShcbiAgICAgIFwiQ29tcHV0ZVJlc291cmNlcy5MYXVuY2hUZW1wbGF0ZS5WZXJzaW9uXCIsXG4gICAgICBsYXVuY2hUZW1wbGF0ZS5sYXRlc3RWZXJzaW9uTnVtYmVyLFxuICAgICk7XG5cbiAgICBUYWdzLm9mKGNvbXB1dGVFbnZpcm9ubWVudCkuYWRkKFwiTmFtZVwiLCBcIm5ldXJvbngtY29tcGlsZS13b3JrZXJcIik7XG4gICAgY29uc3Qgam9iUXVldWUgPSBuZXcgYmF0Y2guSm9iUXVldWUodGhpcywgXCJKb2JRdWV1ZVwiLCB7XG4gICAgICBjb21wdXRlRW52aXJvbm1lbnRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBjb21wdXRlRW52aXJvbm1lbnQsXG4gICAgICAgICAgb3JkZXI6IDEsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgam9iU3RhdGVUaW1lTGltaXRBY3Rpb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBzdGF0ZTogYmF0Y2guSm9iU3RhdGVUaW1lTGltaXRBY3Rpb25zU3RhdGUuUlVOTkFCTEUsXG4gICAgICAgICAgcmVhc29uOiBiYXRjaC5Kb2JTdGF0ZVRpbWVMaW1pdEFjdGlvbnNSZWFzb24uSk9CX1JFU09VUkNFX1JFUVVJUkVNRU5ULFxuICAgICAgICAgIG1heFRpbWU6IER1cmF0aW9uLm1pbnV0ZXMoMTApLFxuICAgICAgICAgIGFjdGlvbjogYmF0Y2guSm9iU3RhdGVUaW1lTGltaXRBY3Rpb25zQWN0aW9uLkNBTkNFTCxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBydW50aW1lOiBDb21waWxlUnVudGltZSAmIHsgbmV1cm9ueFRyYW5zZm9ybWVyc1ZlcnNpb24/OiBzdHJpbmcgfSA9XG4gICAgICBwcm9wcy5ydW50aW1lID8/IHtcbiAgICAgICAgaW1hZ2U6IENvbnRhaW5lckltYWdlLmZyb21SZWdpc3RyeShcbiAgICAgICAgICBcInB1YmxpYy5lY3IuYXdzL25ldXJvbi9weXRvcmNoLXRyYWluaW5nLW5ldXJvbng6Mi4xLjItbmV1cm9ueC1weTMxMC1zZGsyLjE5LjAtdWJ1bnR1MjAuMDRcIixcbiAgICAgICAgKSxcbiAgICAgICAgbmV1cm9ueFZlcnNpb246IFwiMi4xOS4wXCIsXG4gICAgICAgIG5ldXJvbnhUcmFuc2Zvcm1lcnNWZXJzaW9uOiBcIjAuMTEuMzUxXCIgYXMgY29uc3QsXG4gICAgICB9O1xuICAgIGxldCBjb21waWxlZEFydGlmYWN0UGF0aFByZWZpeCA9IGAke3Byb3BzLm1vZGVsLm1vZGVsSWR9L25ldXJvbngtJHtydW50aW1lLm5ldXJvbnhWZXJzaW9ufS90cCR7dHBEZWdyZWV9LW5wJHtuUG9zaXRpb25zfS1vcHQke29wdExldmVsfWA7XG4gICAgaWYgKHF1YW50RHR5cGUhISkge1xuICAgICAgY29tcGlsZWRBcnRpZmFjdFBhdGhQcmVmaXggPSBgJHtjb21waWxlZEFydGlmYWN0UGF0aFByZWZpeH0tcXVhbnQke3F1YW50RHR5cGV9YDtcbiAgICB9XG4gICAgcHJvcHMuYnVja2V0LmdyYW50UmVhZFdyaXRlKFxuICAgICAgY29tcHV0ZUVudmlyb25tZW50Lmluc3RhbmNlUm9sZSEsXG4gICAgICBgJHtjb21waWxlZEFydGlmYWN0UGF0aFByZWZpeH0vKmAsXG4gICAgKTtcblxuICAgIGNvbnN0IGNvbXBpbGVTY3JpcHQgPSByZWFkRmlsZVN5bmMoXG4gICAgICBqb2luKF9fZGlybmFtZSwgXCIuLi9zY3JpcHRzL2NvbXBpbGUucHlcIiksXG4gICAgKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGxpbnV4UGFyYW1ldGVycyA9IG5ldyBiYXRjaC5MaW51eFBhcmFtZXRlcnModGhpcywgXCJMaW51eFBhcmFtZXRlcnNcIik7XG4gICAgbGludXhQYXJhbWV0ZXJzLmFkZERldmljZXMoXG4gICAgICAuLi5BcnJheS5mcm9tKHtcbiAgICAgICAgbGVuZ3RoOiBpbnN0YW5jZVR5cGUuYWNjZWxlcmF0b3JDaGlwcy5jaGlwcyxcbiAgICAgIH0pLm1hcCgoXywgaW5kZXgpID0+ICh7XG4gICAgICAgIGhvc3RQYXRoOiBgL2Rldi9uZXVyb24ke2luZGV4fWAsXG4gICAgICAgIGNvbnRhaW5lclBhdGg6IGAvZGV2L25ldXJvbiR7aW5kZXh9YCxcbiAgICAgICAgcGVybWlzc2lvbnM6IFtcbiAgICAgICAgICBiYXRjaC5EZXZpY2VQZXJtaXNzaW9uLlJFQUQsXG4gICAgICAgICAgYmF0Y2guRGV2aWNlUGVybWlzc2lvbi5XUklURSxcbiAgICAgICAgXSxcbiAgICAgIH0pKSxcbiAgICApO1xuICAgIGNvbnN0IGpvYkRlZmluaXRpb24gPSBuZXcgYmF0Y2guRWNzSm9iRGVmaW5pdGlvbih0aGlzLCBcIkpvYkRlZmluaXRpb25cIiwge1xuICAgICAgY29udGFpbmVyOiBuZXcgYmF0Y2guRWNzRWMyQ29udGFpbmVyRGVmaW5pdGlvbihcbiAgICAgICAgdGhpcyxcbiAgICAgICAgXCJDb250YWluZXJEZWZpbml0aW9uXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBpbWFnZTogcnVudGltZS5pbWFnZSxcbiAgICAgICAgICAvLyBUaGUgZmxsb3dpbmcgY29tbWFuZCB3YXMgZXhlY3V0ZWQgb24gaW5mMi44eGxhcmdlXG4gICAgICAgICAgLy8gc2gtNS4yJCBmcmVlIC1iXG4gICAgICAgICAgLy8gXHRcdFx0dG90YWxcdFx0XHRcdFx0dXNlZFx0XHRcdGZyZWVcdFx0XHRcdFx0c2hhcmVkXHRidWZmL2NhY2hlXHRhdmFpbGFibGVcbiAgICAgICAgICAvLyBNZW06XHQxMzIyNjU3NjY5MTJcdDg2NjMyMDM4NFx0MTMwMzQxNzg1NjAwXHQ2Njc2NDhcdDEwNTc2NjA5MjhcdDEzMDUyOTE0ODkyOFxuICAgICAgICAgIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iYXRjaC9sYXRlc3QvdXNlcmd1aWRlL21lbW9yeS1tYW5hZ2VtZW50Lmh0bWxcbiAgICAgICAgICBtZW1vcnk6IFNpemUubWViaWJ5dGVzKFxuICAgICAgICAgICAgTWF0aC5jZWlsKGluc3RhbmNlVHlwZS5tZW1vcnkudG9NZWJpYnl0ZXMoKSAqIDAuOTUpLFxuICAgICAgICAgICksXG4gICAgICAgICAgY3B1OiBpbnN0YW5jZVR5cGUudkNwdSxcbiAgICAgICAgICBjb21tYW5kOiBbXG4gICAgICAgICAgICBgY2F0IDw8RU9GID4gY29tcGlsZS5weVxcbiR7Y29tcGlsZVNjcmlwdH1cXG5FT0ZcXG5gLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBydW50aW1lLm5ldXJvbnhUcmFuc2Zvcm1lcnNWZXJzaW9uXG4gICAgICAgICAgICAgICAgPyBcInBpcCBpbnN0YWxsIC1VIC0tZXh0cmEtaW5kZXgtdXJsIGh0dHBzOi8vcGlwLnJlcG9zLm5ldXJvbi5hbWF6b25hd3MuY29tIHRyYW5zZm9ybWVycy1uZXVyb254PT0kTkVVUk9OWF9UUkFOU0ZPUk1FUlNfVkVSU0lPTlwiXG4gICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIFwiY3VybCAtcyBodHRwczovL3BhY2thZ2VjbG91ZC5pby9pbnN0YWxsL3JlcG9zaXRvcmllcy9naXRodWIvZ2l0LWxmcy9zY3JpcHQuZGViLnNoIHwgYmFzaFwiLFxuICAgICAgICAgICAgICBcImFwdC1nZXQgaW5zdGFsbCBnaXQtbGZzXCIsXG4gICAgICAgICAgICAgIFwiZ2l0IGxmcyBpbnN0YWxsXCIsXG4gICAgICAgICAgICAgIGBnaXQgY2xvbmUgaHR0cHM6Ly9odWdnaW5nZmFjZS5jby8ke3Byb3BzLm1vZGVsLm1vZGVsSWR9IG1vZGVsYCxcbiAgICAgICAgICAgICAgXCJybSAtcmYgbW9kZWwvLmdpdFwiLFxuICAgICAgICAgICAgICBcInB5dGhvbiAuL2NvbXBpbGUucHlcIixcbiAgICAgICAgICAgICAgYGF3cyBzMyBzeW5jIC0tbm8tcHJvZ3Jlc3MgLi9tb2RlbCAke3Byb3BzLmJ1Y2tldC5zM1VybEZvck9iamVjdChgJHtjb21waWxlZEFydGlmYWN0UGF0aFByZWZpeH0vbW9kZWxgKX1gLFxuICAgICAgICAgICAgICBgYXdzIHMzIHN5bmMgLS1uby1wcm9ncmVzcyAuL2NvbXBpbGVkICR7cHJvcHMuYnVja2V0LnMzVXJsRm9yT2JqZWN0KGAke2NvbXBpbGVkQXJ0aWZhY3RQYXRoUHJlZml4fS9jb21waWxlZGApfWAsXG4gICAgICAgICAgICAgIFwiZWNobyAnY29tcGlsZSBjb21wbGV0ZWQnXCIsXG4gICAgICAgICAgICBdXG4gICAgICAgICAgICAgIC5maWx0ZXIoKHYpID0+ICEhdilcbiAgICAgICAgICAgICAgLmpvaW4oXCIgJiYgXCIpLFxuICAgICAgICAgIF0sXG4gICAgICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgICAgIE1PREVMX0lEOiBwcm9wcy5tb2RlbC5tb2RlbElkLFxuICAgICAgICAgICAgVFBfREVHUkVFOiB0cERlZ3JlZS50b1N0cmluZygpLFxuICAgICAgICAgICAgTl9QT1NJVElPTlM6IG5Qb3NpdGlvbnMudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIE9QVF9MRVZFTDogb3B0TGV2ZWwudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIFFVQU5UX0RUWVBFOiBxdWFudER0eXBlPy50b1N0cmluZygpID8/IFwiXCIsXG4gICAgICAgICAgICBBUlRJRkFDVF9TM19VUkw6IHByb3BzLmJ1Y2tldC5zM1VybEZvck9iamVjdChcbiAgICAgICAgICAgICAgY29tcGlsZWRBcnRpZmFjdFBhdGhQcmVmaXgsXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgTkVVUk9OWF9UUkFOU0ZPUk1FUlNfVkVSU0lPTjpcbiAgICAgICAgICAgICAgcnVudGltZS5uZXVyb254VHJhbnNmb3JtZXJzVmVyc2lvbiA/PyBcIlwiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbGludXhQYXJhbWV0ZXJzLFxuICAgICAgICB9LFxuICAgICAgKSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGpvYlN1Ym1pdEZ1bmN0aW9uID0gbmV3IFNpbmdsZXRvbkZ1bmN0aW9uKHRoaXMsIFwiSm9iU3VibWl0RnVuY3Rpb25cIiwge1xuICAgICAgY29kZTogQ29kZS5mcm9tQXNzZXQoam9pbihfX2Rpcm5hbWUsIFwicHJpdmF0ZS9hd2FpdC1jb21waWxlLWpvYlwiKSksXG4gICAgICBoYW5kbGVyOiBcImluZGV4Lm9uRXZlbnRcIixcbiAgICAgIHJ1bnRpbWU6IFJ1bnRpbWUuTk9ERUpTXzIwX1gsXG4gICAgICB1dWlkOiBcIjEzNjFmNDY5LTVjOTItNGM0Ni05ZTExLTVkMWRiZjkyNWJhY1wiLFxuICAgIH0pO1xuICAgIGpvYkRlZmluaXRpb24uZ3JhbnRTdWJtaXRKb2Ioam9iU3VibWl0RnVuY3Rpb24sIGpvYlF1ZXVlKTtcbiAgICBjb25zdCBqb2JNb25pdG9yaW5nRnVuY3Rpb24gPSBuZXcgU2luZ2xldG9uRnVuY3Rpb24oXG4gICAgICB0aGlzLFxuICAgICAgXCJKb2JNb25pdG9yaW5nRnVuY3Rpb25cIixcbiAgICAgIHtcbiAgICAgICAgY29kZTogQ29kZS5mcm9tQXNzZXQoam9pbihfX2Rpcm5hbWUsIFwicHJpdmF0ZS9hd2FpdC1jb21waWxlLWpvYlwiKSksXG4gICAgICAgIGhhbmRsZXI6IFwiaW5kZXguaXNDb21wbGV0ZVwiLFxuICAgICAgICBydW50aW1lOiBSdW50aW1lLk5PREVKU18yMF9YLFxuICAgICAgICB1dWlkOiBcImRmMTZkYmE4LTVmNzctNDgwYy1hNmFkLWNmZGY3NGMzZGU2MlwiLFxuICAgICAgfSxcbiAgICApO1xuICAgIEdyYW50LmFkZFRvUHJpbmNpcGFsKHtcbiAgICAgIHJlc291cmNlQXJuczogW1wiKlwiXSxcbiAgICAgIGdyYW50ZWU6IGpvYk1vbml0b3JpbmdGdW5jdGlvbixcbiAgICAgIGFjdGlvbnM6IFtcImJhdGNoOkRlc2NyaWJlSm9ic1wiXSxcbiAgICB9KTtcbiAgICBjb25zdCBwcm92aWRlciA9IG5ldyBQcm92aWRlcih0aGlzLCBcIkNvbXBpbGVKb2JQcm92aWRlclwiLCB7XG4gICAgICBvbkV2ZW50SGFuZGxlcjogam9iU3VibWl0RnVuY3Rpb24sXG4gICAgICBpc0NvbXBsZXRlSGFuZGxlcjogam9iTW9uaXRvcmluZ0Z1bmN0aW9uLFxuICAgICAgcXVlcnlJbnRlcnZhbDogRHVyYXRpb24ubWludXRlcygxKSxcbiAgICAgIHRvdGFsVGltZW91dDogRHVyYXRpb24uaG91cnMoMSksXG4gICAgfSk7XG4gICAgY29uc3QgY29tcGlsZUpvYiA9IG5ldyBDdXN0b21SZXNvdXJjZSh0aGlzLCBcIlJlc291cmNlXCIsIHtcbiAgICAgIHNlcnZpY2VUb2tlbjogcHJvdmlkZXIuc2VydmljZVRva2VuLFxuICAgICAgcmVzb3VyY2VUeXBlOiBcIkN1c3RvbTo6TmV1cm9ueENvbXBpbGVcIixcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgam9iRGVmaW5pdGlvbkFybjogam9iRGVmaW5pdGlvbi5qb2JEZWZpbml0aW9uQXJuLFxuICAgICAgICBqb2JRdWV1ZUFybjogam9iUXVldWUuam9iUXVldWVBcm4sXG4gICAgICAgIGFydGlmYWN0UzNQcmVmaXg6IGNvbXBpbGVkQXJ0aWZhY3RQYXRoUHJlZml4LFxuICAgICAgfSxcbiAgICB9KTtcbiAgICB0aGlzLmNvbXBpbGVkQXJ0aWZhY3RTM1ByZWZpeCA9IGNvbXBpbGVKb2IuZ2V0QXR0U3RyaW5nKFwiQXJ0aWZhY3RTM1ByZWZpeFwiKTtcbiAgICB0aGlzLmNvbXBpbGVkQXJ0aWZhY3RTM1VybCA9IHByb3BzLmJ1Y2tldC5zM1VybEZvck9iamVjdChcbiAgICAgIHRoaXMuY29tcGlsZWRBcnRpZmFjdFMzUHJlZml4LFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGNhbGNUcERlZ3JlZShwYXJhbWV0ZXJzOiBQYXJhbWV0ZXJzLCBjb21waWxlT3B0aW9uczogQ29tcGlsZU9wdGlvbnMpIHtcbiAgICAvLyBjYXNlIG9mIGZsb2F0MTZcbiAgICBjb25zdCBieXRlc1BlclBhcmFtZXRlID0gMTYgLyA4O1xuICAgIC8vIG1lbW9yeSA9IGJ5dGVzIHBlciBwYXJhbWV0ZXIgKiBudW1iZXIgb2YgcGFyYW1ldGVyc1xuICAgIGxldCBtZW1vcnkgPSBTaXplLmdpYmlieXRlcyhieXRlc1BlclBhcmFtZXRlICogcGFyYW1ldGVycy50b0JpbGlvbigpKTtcbiAgICBzd2l0Y2ggKGNvbXBpbGVPcHRpb25zLnF1YW50RHR5cGUpIHtcbiAgICAgIGNhc2UgUXVhbnREdHlwZS5TODpcbiAgICAgICAgbWVtb3J5ID0gU2l6ZS5naWJpYnl0ZXMobWVtb3J5LnRvR2liaWJ5dGVzKCkgLyAyKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNvbnN0IG5lcm9ueENvcmVNZW1vcnkgPSBTaXplLmdpYmlieXRlcygxNik7XG4gICAgY29uc3QgbWluaW11bSA9IE1hdGguY2VpbChcbiAgICAgIG1lbW9yeS50b0dpYmlieXRlcygpIC8gbmVyb254Q29yZU1lbW9yeS50b0dpYmlieXRlcygpLFxuICAgICk7XG5cbiAgICBjb25zdCB0cERlZ3JlZXMgPSBbMSwgMiwgNCwgOCwgMjRdO1xuICAgIGZvciAoY29uc3QgdHBEZWdyZWUgb2YgdHBEZWdyZWVzKSB7XG4gICAgICBpZiAobWluaW11bSA8PSB0cERlZ3JlZSkge1xuICAgICAgICByZXR1cm4gdHBEZWdyZWU7XG4gICAgICB9XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiVGhpcyBtb2RlbCBpcyB0b28gbGFyZ2UsIEkgY2FuIG5vdCBzdXBwb3J0IHRoaXMgbW9kZWwgY3VycmVudCB2ZXJzaW9uLlwiLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHNlbGVjdEluc3RhbmNlVHlwZUJ5VHBEZWdyZWUodHBEZWdyZWU6IG51bWJlcikge1xuICAgIGNvbnN0IGluc3RhbmNlVHlwZXMgPSBbXG4gICAgICBOZXVyb254SW5zdGFuY2VUeXBlLklORjJfOFhMQVJHRSxcbiAgICAgIE5ldXJvbnhJbnN0YW5jZVR5cGUuSU5GMl8yNFhMQVJHRSxcbiAgICAgIE5ldXJvbnhJbnN0YW5jZVR5cGUuSU5GMl80OFhMQVJHRSxcbiAgICBdO1xuICAgIGZvciAoY29uc3QgaW5zdGFuY2VUeXBlIG9mIGluc3RhbmNlVHlwZXMpIHtcbiAgICAgIGlmICh0cERlZ3JlZSA8PSBpbnN0YW5jZVR5cGUuYWNjZWxlcmF0b3JDaGlwcy5uZXVyb254Q29yZXMpIHtcbiAgICAgICAgcmV0dXJuIGluc3RhbmNlVHlwZTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJUaGlzIG1vZGVsIGlzIHRvbyBsYXJnZSwgSSBjYW4gbm90IHN1cHBvcnQgdGhpcyBtb2RlbCBjdXJyZW50IHZlcnNpb24uXCIsXG4gICAgKTtcbiAgfVxufVxuIl19
@@ -14,7 +14,7 @@ class Inferentia2Chips {
14
14
  }
15
15
  exports.Inferentia2Chips = Inferentia2Chips;
16
16
  _a = JSII_RTTI_SYMBOL_1;
17
- Inferentia2Chips[_a] = { fqn: "aws-cdk-neuronx-patterns.Inferentia2Chips", version: "0.0.2" };
17
+ Inferentia2Chips[_a] = { fqn: "aws-cdk-neuronx-patterns.Inferentia2Chips", version: "0.0.3" };
18
18
  class NeuronxInstanceType {
19
19
  constructor(instanceType, vCpu, memory, acceleratorChips) {
20
20
  this.instanceType = instanceType;
@@ -32,7 +32,7 @@ class NeuronxInstanceType {
32
32
  }
33
33
  exports.NeuronxInstanceType = NeuronxInstanceType;
34
34
  _b = JSII_RTTI_SYMBOL_1;
35
- NeuronxInstanceType[_b] = { fqn: "aws-cdk-neuronx-patterns.NeuronxInstanceType", version: "0.0.2" };
35
+ NeuronxInstanceType[_b] = { fqn: "aws-cdk-neuronx-patterns.NeuronxInstanceType", version: "0.0.3" };
36
36
  /**
37
37
  * ml.inf2.xlarge
38
38
  */
@@ -48,7 +48,7 @@ const isComplete = async (event) => {
48
48
  return {
49
49
  IsComplete: true,
50
50
  Data: {
51
- ArtifactS3Url: event.ResourceProperties.artifactS3Url,
51
+ ArtifactS3Prefix: event.ResourceProperties.artifactS3Prefix,
52
52
  },
53
53
  };
54
54
  case "FAILED":
@@ -59,4 +59,4 @@ const isComplete = async (event) => {
59
59
  };
60
60
  };
61
61
  exports.isComplete = isComplete;
62
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcHJpdmF0ZS9hd2FpdC1jb21waWxlLWpvYi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2REFBNkQ7QUFDN0Qsd0RBSStCO0FBTS9CLE1BQU0sTUFBTSxHQUFHLElBQUksMEJBQVcsQ0FBQztJQUM3QixNQUFNLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0I7Q0FDdkMsQ0FBQyxDQUFDO0FBQ0ksTUFBTSxPQUFPLEdBQTZCLEtBQUssRUFDcEQsS0FBSyxFQUNMLFFBQVEsRUFDUixTQUFTLEVBQ1QsRUFBRTtJQUNGLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkIsUUFBUSxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDMUIsS0FBSyxRQUFRLENBQUM7UUFDZCxLQUFLLFFBQVE7WUFDWCxPQUFPLElBQUEsZ0JBQVEsRUFBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBRSxDQUFDO1FBQy9DLEtBQUssUUFBUTtZQUNYLE9BQU8sRUFBRSxDQUFDO0lBQ2QsQ0FBQztBQUNILENBQUMsQ0FBQztBQWJXLFFBQUEsT0FBTyxXQWFsQjtBQUNLLE1BQU0sUUFBUSxHQUE2QixLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUU7SUFDaEUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuQixNQUFNLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0lBQ3ZCLE1BQU0sR0FBRyxHQUFHLE1BQU0sTUFBTSxDQUFDLElBQUksQ0FDM0IsSUFBSSwrQkFBZ0IsQ0FBQztRQUNuQixPQUFPLEVBQUUsR0FBRyxHQUFHLENBQUMsV0FBVyxFQUFFLElBQUksR0FBRyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFLElBQUksR0FBRyxDQUFDLFFBQVEsRUFBRSxJQUFJLEdBQUcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxHQUFHLENBQUMsVUFBVSxFQUFFLEVBQUU7UUFDaEksYUFBYSxFQUFFLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxnQkFBZ0I7UUFDeEQsUUFBUSxFQUFFLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXO0tBQy9DLENBQUMsQ0FDSCxDQUFDO0lBQ0YsT0FBTztRQUNMLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSztLQUNqQixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBYlcsUUFBQSxRQUFRLFlBYW5CO0FBRUssTUFBTSxVQUFVLEdBQXVDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRTtJQUM1RSxJQUFJLEtBQUssQ0FBQyxXQUFXLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDbkMsT0FBTztZQUNMLFVBQVUsRUFBRSxJQUFJO1NBQ2pCLENBQUM7SUFDSixDQUFDO0lBQ0QsTUFBTSxJQUFJLEdBQUcsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUM1QixJQUFJLGtDQUFtQixDQUFDO1FBQ3RCLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7S0FDcEIsQ0FBQyxDQUNILENBQUM7SUFDRixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0IsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ1QsTUFBTSxJQUFJLEtBQUssQ0FBQyxRQUFRLEtBQUssQ0FBQyxLQUFLLGNBQWMsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFDRCxRQUFRLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNuQixLQUFLLFdBQVc7WUFDZCxPQUFPO2dCQUNMLFVBQVUsRUFBRSxJQUFJO2dCQUNoQixJQUFJLEVBQUU7b0JBQ0osYUFBYSxFQUFFLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhO2lCQUN0RDthQUNGLENBQUM7UUFDSixLQUFLLFFBQVE7WUFDWCxNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBQ0QsT0FBTztRQUNMLFVBQVUsRUFBRSxLQUFLO0tBQ2xCLENBQUM7QUFDSixDQUFDLENBQUM7QUE3QlcsUUFBQSxVQUFVLGNBNkJyQiIsInNvdXJjZXNDb250ZW50IjpbIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXNcbmltcG9ydCB7XG4gIEJhdGNoQ2xpZW50LFxuICBEZXNjcmliZUpvYnNDb21tYW5kLFxuICBTdWJtaXRKb2JDb21tYW5kLFxufSBmcm9tIFwiQGF3cy1zZGsvY2xpZW50LWJhdGNoXCI7XG5pbXBvcnQge1xuICB0eXBlIENka0N1c3RvbVJlc291cmNlSGFuZGxlcixcbiAgdHlwZSBDZGtDdXN0b21SZXNvdXJjZUlzQ29tcGxldGVIYW5kbGVyLFxufSBmcm9tIFwiYXdzLWxhbWJkYVwiO1xuXG5jb25zdCBjbGllbnQgPSBuZXcgQmF0Y2hDbGllbnQoe1xuICByZWdpb246IHByb2Nlc3MuZW52LkFXU19ERUZBVUxUX1JFR0lPTixcbn0pO1xuZXhwb3J0IGNvbnN0IG9uRXZlbnQ6IENka0N1c3RvbVJlc291cmNlSGFuZGxlciA9IGFzeW5jIChcbiAgZXZlbnQsXG4gIF9jb250ZXh0LFxuICBfY2FsbGJhY2ssXG4pID0+IHtcbiAgY29uc29sZS5sb2coZXZlbnQpO1xuICBzd2l0Y2ggKGV2ZW50LlJlcXVlc3RUeXBlKSB7XG4gICAgY2FzZSBcIkNyZWF0ZVwiOlxuICAgIGNhc2UgXCJVcGRhdGVcIjpcbiAgICAgIHJldHVybiBvbkNyZWF0ZShldmVudCwgX2NvbnRleHQsIF9jYWxsYmFjaykhO1xuICAgIGNhc2UgXCJEZWxldGVcIjpcbiAgICAgIHJldHVybiB7fTtcbiAgfVxufTtcbmV4cG9ydCBjb25zdCBvbkNyZWF0ZTogQ2RrQ3VzdG9tUmVzb3VyY2VIYW5kbGVyID0gYXN5bmMgKGV2ZW50KSA9PiB7XG4gIGNvbnNvbGUubG9nKGV2ZW50KTtcbiAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgY29uc3Qgam9iID0gYXdhaXQgY2xpZW50LnNlbmQoXG4gICAgbmV3IFN1Ym1pdEpvYkNvbW1hbmQoe1xuICAgICAgam9iTmFtZTogYCR7bm93LmdldEZ1bGxZZWFyKCl9LSR7bm93LmdldE1vbnRoKCkgKyAxfS0ke25vdy5nZXREYXRlKCl9LSR7bm93LmdldEhvdXJzKCl9LSR7bm93LmdldE1pbnV0ZXMoKX0tJHtub3cuZ2V0U2Vjb25kcygpfWAsXG4gICAgICBqb2JEZWZpbml0aW9uOiBldmVudC5SZXNvdXJjZVByb3BlcnRpZXMuam9iRGVmaW5pdGlvbkFybixcbiAgICAgIGpvYlF1ZXVlOiBldmVudC5SZXNvdXJjZVByb3BlcnRpZXMuam9iUXVldWVBcm4sXG4gICAgfSksXG4gICk7XG4gIHJldHVybiB7XG4gICAgam9iSWQ6IGpvYi5qb2JJZCxcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0NvbXBsZXRlOiBDZGtDdXN0b21SZXNvdXJjZUlzQ29tcGxldGVIYW5kbGVyID0gYXN5bmMgKGV2ZW50KSA9PiB7XG4gIGlmIChldmVudC5SZXF1ZXN0VHlwZSA9PT0gXCJEZWxldGVcIikge1xuICAgIHJldHVybiB7XG4gICAgICBJc0NvbXBsZXRlOiB0cnVlLFxuICAgIH07XG4gIH1cbiAgY29uc3Qgam9icyA9IGF3YWl0IGNsaWVudC5zZW5kKFxuICAgIG5ldyBEZXNjcmliZUpvYnNDb21tYW5kKHtcbiAgICAgIGpvYnM6IFtldmVudC5qb2JJZF0sXG4gICAgfSksXG4gICk7XG4gIGNvbnN0IGpvYiA9IGpvYnMuam9icz8uWzBdO1xuICBpZiAoIWpvYikge1xuICAgIHRocm93IG5ldyBFcnJvcihgSm9iICgke2V2ZW50LmpvYklkfSkgaXMgbWlzc2luZ2ApO1xuICB9XG4gIHN3aXRjaCAoam9iLnN0YXR1cykge1xuICAgIGNhc2UgXCJTVUNDRUVERURcIjpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIElzQ29tcGxldGU6IHRydWUsXG4gICAgICAgIERhdGE6IHtcbiAgICAgICAgICBBcnRpZmFjdFMzVXJsOiBldmVudC5SZXNvdXJjZVByb3BlcnRpZXMuYXJ0aWZhY3RTM1VybCxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgY2FzZSBcIkZBSUxFRFwiOlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGpvYi5zdGF0dXNSZWFzb24pO1xuICB9XG4gIHJldHVybiB7XG4gICAgSXNDb21wbGV0ZTogZmFsc2UsXG4gIH07XG59O1xuIl19
62
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcHJpdmF0ZS9hd2FpdC1jb21waWxlLWpvYi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2REFBNkQ7QUFDN0Qsd0RBSStCO0FBTS9CLE1BQU0sTUFBTSxHQUFHLElBQUksMEJBQVcsQ0FBQztJQUM3QixNQUFNLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0I7Q0FDdkMsQ0FBQyxDQUFDO0FBQ0ksTUFBTSxPQUFPLEdBQTZCLEtBQUssRUFDcEQsS0FBSyxFQUNMLFFBQVEsRUFDUixTQUFTLEVBQ1QsRUFBRTtJQUNGLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkIsUUFBUSxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDMUIsS0FBSyxRQUFRLENBQUM7UUFDZCxLQUFLLFFBQVE7WUFDWCxPQUFPLElBQUEsZ0JBQVEsRUFBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBRSxDQUFDO1FBQy9DLEtBQUssUUFBUTtZQUNYLE9BQU8sRUFBRSxDQUFDO0lBQ2QsQ0FBQztBQUNILENBQUMsQ0FBQztBQWJXLFFBQUEsT0FBTyxXQWFsQjtBQUNLLE1BQU0sUUFBUSxHQUE2QixLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUU7SUFDaEUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuQixNQUFNLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0lBQ3ZCLE1BQU0sR0FBRyxHQUFHLE1BQU0sTUFBTSxDQUFDLElBQUksQ0FDM0IsSUFBSSwrQkFBZ0IsQ0FBQztRQUNuQixPQUFPLEVBQUUsR0FBRyxHQUFHLENBQUMsV0FBVyxFQUFFLElBQUksR0FBRyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFLElBQUksR0FBRyxDQUFDLFFBQVEsRUFBRSxJQUFJLEdBQUcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxHQUFHLENBQUMsVUFBVSxFQUFFLEVBQUU7UUFDaEksYUFBYSxFQUFFLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxnQkFBZ0I7UUFDeEQsUUFBUSxFQUFFLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXO0tBQy9DLENBQUMsQ0FDSCxDQUFDO0lBQ0YsT0FBTztRQUNMLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSztLQUNqQixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBYlcsUUFBQSxRQUFRLFlBYW5CO0FBRUssTUFBTSxVQUFVLEdBQXVDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRTtJQUM1RSxJQUFJLEtBQUssQ0FBQyxXQUFXLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDbkMsT0FBTztZQUNMLFVBQVUsRUFBRSxJQUFJO1NBQ2pCLENBQUM7SUFDSixDQUFDO0lBQ0QsTUFBTSxJQUFJLEdBQUcsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUM1QixJQUFJLGtDQUFtQixDQUFDO1FBQ3RCLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7S0FDcEIsQ0FBQyxDQUNILENBQUM7SUFDRixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0IsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ1QsTUFBTSxJQUFJLEtBQUssQ0FBQyxRQUFRLEtBQUssQ0FBQyxLQUFLLGNBQWMsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFDRCxRQUFRLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNuQixLQUFLLFdBQVc7WUFDZCxPQUFPO2dCQUNMLFVBQVUsRUFBRSxJQUFJO2dCQUNoQixJQUFJLEVBQUU7b0JBQ0osZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLGtCQUFrQixDQUFDLGdCQUFnQjtpQkFDNUQ7YUFDRixDQUFDO1FBQ0osS0FBSyxRQUFRO1lBQ1gsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUNELE9BQU87UUFDTCxVQUFVLEVBQUUsS0FBSztLQUNsQixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBN0JXLFFBQUEsVUFBVSxjQTZCckIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzXG5pbXBvcnQge1xuICBCYXRjaENsaWVudCxcbiAgRGVzY3JpYmVKb2JzQ29tbWFuZCxcbiAgU3VibWl0Sm9iQ29tbWFuZCxcbn0gZnJvbSBcIkBhd3Mtc2RrL2NsaWVudC1iYXRjaFwiO1xuaW1wb3J0IHtcbiAgdHlwZSBDZGtDdXN0b21SZXNvdXJjZUhhbmRsZXIsXG4gIHR5cGUgQ2RrQ3VzdG9tUmVzb3VyY2VJc0NvbXBsZXRlSGFuZGxlcixcbn0gZnJvbSBcImF3cy1sYW1iZGFcIjtcblxuY29uc3QgY2xpZW50ID0gbmV3IEJhdGNoQ2xpZW50KHtcbiAgcmVnaW9uOiBwcm9jZXNzLmVudi5BV1NfREVGQVVMVF9SRUdJT04sXG59KTtcbmV4cG9ydCBjb25zdCBvbkV2ZW50OiBDZGtDdXN0b21SZXNvdXJjZUhhbmRsZXIgPSBhc3luYyAoXG4gIGV2ZW50LFxuICBfY29udGV4dCxcbiAgX2NhbGxiYWNrLFxuKSA9PiB7XG4gIGNvbnNvbGUubG9nKGV2ZW50KTtcbiAgc3dpdGNoIChldmVudC5SZXF1ZXN0VHlwZSkge1xuICAgIGNhc2UgXCJDcmVhdGVcIjpcbiAgICBjYXNlIFwiVXBkYXRlXCI6XG4gICAgICByZXR1cm4gb25DcmVhdGUoZXZlbnQsIF9jb250ZXh0LCBfY2FsbGJhY2spITtcbiAgICBjYXNlIFwiRGVsZXRlXCI6XG4gICAgICByZXR1cm4ge307XG4gIH1cbn07XG5leHBvcnQgY29uc3Qgb25DcmVhdGU6IENka0N1c3RvbVJlc291cmNlSGFuZGxlciA9IGFzeW5jIChldmVudCkgPT4ge1xuICBjb25zb2xlLmxvZyhldmVudCk7XG4gIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gIGNvbnN0IGpvYiA9IGF3YWl0IGNsaWVudC5zZW5kKFxuICAgIG5ldyBTdWJtaXRKb2JDb21tYW5kKHtcbiAgICAgIGpvYk5hbWU6IGAke25vdy5nZXRGdWxsWWVhcigpfS0ke25vdy5nZXRNb250aCgpICsgMX0tJHtub3cuZ2V0RGF0ZSgpfS0ke25vdy5nZXRIb3VycygpfS0ke25vdy5nZXRNaW51dGVzKCl9LSR7bm93LmdldFNlY29uZHMoKX1gLFxuICAgICAgam9iRGVmaW5pdGlvbjogZXZlbnQuUmVzb3VyY2VQcm9wZXJ0aWVzLmpvYkRlZmluaXRpb25Bcm4sXG4gICAgICBqb2JRdWV1ZTogZXZlbnQuUmVzb3VyY2VQcm9wZXJ0aWVzLmpvYlF1ZXVlQXJuLFxuICAgIH0pLFxuICApO1xuICByZXR1cm4ge1xuICAgIGpvYklkOiBqb2Iuam9iSWQsXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgaXNDb21wbGV0ZTogQ2RrQ3VzdG9tUmVzb3VyY2VJc0NvbXBsZXRlSGFuZGxlciA9IGFzeW5jIChldmVudCkgPT4ge1xuICBpZiAoZXZlbnQuUmVxdWVzdFR5cGUgPT09IFwiRGVsZXRlXCIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgSXNDb21wbGV0ZTogdHJ1ZSxcbiAgICB9O1xuICB9XG4gIGNvbnN0IGpvYnMgPSBhd2FpdCBjbGllbnQuc2VuZChcbiAgICBuZXcgRGVzY3JpYmVKb2JzQ29tbWFuZCh7XG4gICAgICBqb2JzOiBbZXZlbnQuam9iSWRdLFxuICAgIH0pLFxuICApO1xuICBjb25zdCBqb2IgPSBqb2JzLmpvYnM/LlswXTtcbiAgaWYgKCFqb2IpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEpvYiAoJHtldmVudC5qb2JJZH0pIGlzIG1pc3NpbmdgKTtcbiAgfVxuICBzd2l0Y2ggKGpvYi5zdGF0dXMpIHtcbiAgICBjYXNlIFwiU1VDQ0VFREVEXCI6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBJc0NvbXBsZXRlOiB0cnVlLFxuICAgICAgICBEYXRhOiB7XG4gICAgICAgICAgQXJ0aWZhY3RTM1ByZWZpeDogZXZlbnQuUmVzb3VyY2VQcm9wZXJ0aWVzLmFydGlmYWN0UzNQcmVmaXgsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIGNhc2UgXCJGQUlMRURcIjpcbiAgICAgIHRocm93IG5ldyBFcnJvcihqb2Iuc3RhdHVzUmVhc29uKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIElzQ29tcGxldGU6IGZhbHNlLFxuICB9O1xufTtcbiJdfQ==
package/package.json CHANGED
@@ -36,10 +36,11 @@
36
36
  "organization": false
37
37
  },
38
38
  "devDependencies": {
39
+ "@aws-cdk/aws-sagemaker-alpha": "2.149.0-alpha.0",
39
40
  "@aws-cdk/integ-runner": "2.149.0-alpha.0",
40
41
  "@aws-cdk/integ-tests-alpha": "2.149.0-alpha.0",
41
42
  "@aws-sdk/client-batch": "^3.616.0",
42
- "@types/aws-lambda": "^8.10.141",
43
+ "@types/aws-lambda": "^8.10.142",
43
44
  "@types/jest": "^29.5.12",
44
45
  "@types/node": "^18",
45
46
  "@typescript-eslint/eslint-plugin": "^7",
@@ -60,11 +61,11 @@
60
61
  "jsii-pacmak": "^1.101.0",
61
62
  "jsii-rosetta": "~5.4.0",
62
63
  "prettier": "^3.3.3",
63
- "projen": "^0.84.6",
64
+ "projen": "^0.84.9",
64
65
  "standard-version": "^9",
65
66
  "ts-jest": "^29.2.3",
66
67
  "ts-node": "^10.9.2",
67
- "typescript": "^5.5.3"
68
+ "typescript": "^5.5.4"
68
69
  },
69
70
  "peerDependencies": {
70
71
  "aws-cdk-lib": "^2.149.0",
@@ -87,7 +88,7 @@
87
88
  ]
88
89
  }
89
90
  },
90
- "version": "0.0.2",
91
+ "version": "0.0.3",
91
92
  "jest": {
92
93
  "coverageProvider": "v8",
93
94
  "testMatch": [