aws-cdk-neuronx-patterns 0.0.4 → 0.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.jsii CHANGED
@@ -3851,7 +3851,7 @@
3851
3851
  },
3852
3852
  "name": "aws-cdk-neuronx-patterns",
3853
3853
  "readme": {
3854
- "markdown": "# Neuronx patterns Construct Library\n\n> [!WARNING]\n> This library is experimental module.\n\nThis library provides high-level architectural patterns using neuronx (e.g. Inferentia2 and Trainium1). It contains:\n\n- Transformers Neuronx SageMaker Real-time Inference Endpoint\n- Neuronx Compile\n\n## Transformers Neuronx SageMaker Real-time Inference Endpoint\n\n> [!WARNING]\n> This construct uses an Inferentia2 instance on SageMaker. You may need to increase your request limit for your AWS account.\n\nBy using the `NeuronxCompile` construct included in this construct library, models published on HuggingFace can be easily deployed to SageMaker Real-time inference. To define using the `NeuronxCompile` construct:\n\n```ts\nimport * as ec2 from \"aws-cdk-lib/aws-ec2\";\nimport * as s3 from \"aws-cdk-lib/aws-s3\";\n\ndeclare const vpc: ec2.Vpc;\ndeclare const bucket: s3.Bucket;\nconst compile = new NeuronxCompile(this, \"NeuronxCompile\", {\n vpc,\n bucket,\n model: Model.fromHuggingFace(\"example/example-7b-chat\", {\n parameters: Parameters.billion(7),\n }),\n});\nnew TransformersNeuronxSageMakerRealtimeInferenceEndpoint(\n this,\n \"RealtimeInference\",\n {\n modelData:\n TransformersNeuronxSageMakerInferenceModelData.fromNeuronxCompile(\n compile,\n ),\n },\n);\n```\n\n### Default inference code\n\nBy default, default inference code is deployed to implement the chat interface. The default inference code takes an object array like [transformers' conversations](https://huggingface.co/docs/transformers/main/en/conversations) and responds to the generated text. The following code is an example using the AWS SDK for JavaScript v3.\n\n```ts\nimport {\n InvokeEndpointCommand,\n SageMakerRuntimeClient,\n} from \"@aws-sdk/client-sagemaker-runtime\";\n\nconst client = new SageMakerRuntimeClient({\n region: \"us-east-1\",\n});\nclient\n .send(\n new InvokeEndpointCommand({\n EndpointName: \"my-endpoint-id\",\n Body: JSON.stringify({\n // Optional. You can change answer role.\n role: \"ai\",\n // Require. The messages like conversation.\n messages: [\n {\n role: \"system\",\n content: `You are helpfull assistant.`,\n },\n {\n role: \"user\",\n content:\n \"please answer '1+1=?'. You must answer only answer numeric.\",\n },\n ],\n }),\n ContentType: \"application/json\",\n Accept: \"application/json\",\n }),\n )\n .then((res) => {\n // { generated_text: \"2\" }\n console.log(JSON.parse(res.Body.transformToString()));\n });\n```\n\nTo change your own inference code, you can pass the code source.\n\n```ts\nimport * as s3Deplyment from \"aws-cdk-lib/aws-s3-deployment\";\n\ndeclare const compile: NeuronxCompile;\nnew TransformersNeuronxSageMakerRealtimeInferenceEndpoint(\n this,\n \"RealtimeInference\",\n {\n modelData:\n TransformersNeuronxSageMakerInferenceModelData.fromNeuronxCompile(\n compile,\n s3Deplyment.Source.asset(\"path/to/my/code/directory\"),\n ),\n },\n);\n```\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 * as ec2 from \"aws-cdk-lib/aws-ec2\";\nimport * as s3 from \"aws-cdk-lib/aws-s3\";\n\ndeclare const vpc: ec2.Vpc;\ndeclare const bucket: s3.Bucket;\nconst compile = new NeuronxCompile(this, \"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(this, \"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 * as ec2 from \"aws-cdk-lib/aws-ec2\";\nimport * as s3 from \"aws-cdk-lib/aws-s3\";\n\ndeclare const vpc: ec2.Vpc;\ndeclare const bucket: s3.Bucket;\nnew NeuronxCompile(this, \"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 * as ec2 from \"aws-cdk-lib/aws-ec2\";\nimport * as s3 from \"aws-cdk-lib/aws-s3\";\n\ndeclare const vpc: ec2.Vpc;\ndeclare const bucket: s3.Bucket;\nnew NeuronxCompile(this, \"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"
3854
+ "markdown": "# Neuronx patterns Construct Library\n\n> [!WARNING]\n> This library is experimental module.\n\nThis library provides high-level architectural patterns using neuronx (e.g. Inferentia2 and Trainium1). It contains:\n\n- Transformers Neuronx SageMaker Real-time Inference Endpoint\n- Neuronx Compile\n\n## Transformers Neuronx SageMaker Real-time Inference Endpoint\n\n> [!WARNING]\n> This construct uses an Inferentia2 instance on SageMaker. You may need to increase your request limit for your AWS account.\n\nBy using the `NeuronxCompile` construct included in this construct library, models published on HuggingFace can be easily deployed to SageMaker Real-time inference. To define using the `NeuronxCompile` construct:\n\n```ts\nimport * as ec2 from \"aws-cdk-lib/aws-ec2\";\nimport * as s3 from \"aws-cdk-lib/aws-s3\";\n\ndeclare const vpc: ec2.Vpc;\ndeclare const bucket: s3.Bucket;\nconst compile = new NeuronxCompile(this, \"NeuronxCompile\", {\n vpc,\n bucket,\n model: Model.fromHuggingFace(\"example/example-7b-chat\"),\n});\nnew TransformersNeuronxSageMakerRealtimeInferenceEndpoint(\n this,\n \"RealtimeInference\",\n {\n modelData:\n TransformersNeuronxSageMakerInferenceModelData.fromNeuronxCompile(\n compile,\n ),\n },\n);\n```\n\nThis is TransformersNeuronxSageMakerRealtimeInferenceEndpoint architecture.\n![TransformersNeuronxSageMakerRealtimeInferenceEndpoint architecture](./docs/transformers-neuronx-sagemaker-realtime-inference-architecture.png)\n\n### Default inference code\n\nBy default, default inference code is deployed to implement the chat interface. The default inference code takes an object array like [transformers' conversations](https://huggingface.co/docs/transformers/main/en/conversations) and responds to the generated text. The following code is an example using the AWS SDK for JavaScript v3.\n\n```ts\nimport {\n InvokeEndpointCommand,\n SageMakerRuntimeClient,\n} from \"@aws-sdk/client-sagemaker-runtime\";\n\nconst client = new SageMakerRuntimeClient({\n region: \"us-east-1\",\n});\nclient\n .send(\n new InvokeEndpointCommand({\n EndpointName: \"my-endpoint-id\",\n Body: JSON.stringify({\n // Optional. You can change answer role.\n role: \"ai\",\n // Require. The messages like conversation.\n messages: [\n {\n role: \"system\",\n content: `You are helpfull assistant.`,\n },\n {\n role: \"user\",\n content:\n \"please answer '1+1=?'. You must answer only answer numeric.\",\n },\n ],\n }),\n ContentType: \"application/json\",\n Accept: \"application/json\",\n }),\n )\n .then((res) => {\n // { generated_text: \"2\" }\n console.log(JSON.parse(res.Body.transformToString()));\n });\n```\n\nTo use your own inference code, you can pass the code to model data option.\n\n```ts\nimport * as s3Deplyment from \"aws-cdk-lib/aws-s3-deployment\";\n\ndeclare const compile: NeuronxCompile;\nnew TransformersNeuronxSageMakerRealtimeInferenceEndpoint(\n this,\n \"RealtimeInference\",\n {\n modelData:\n TransformersNeuronxSageMakerInferenceModelData.fromNeuronxCompile(\n compile,\n s3Deplyment.Source.asset(\"path/to/my/code/directory\"),\n ),\n },\n);\n```\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 * as ec2 from \"aws-cdk-lib/aws-ec2\";\nimport * as s3 from \"aws-cdk-lib/aws-s3\";\n\ndeclare const vpc: ec2.Vpc;\ndeclare const bucket: s3.Bucket;\nconst compile = new NeuronxCompile(this, \"NeuronxCompile\", {\n vpc,\n bucket,\n model: Model.fromHuggingFace(\"example/example-7b-chat\"),\n});\n\n// Get the compiled artifacts from this S3 URL\nnew CfnOutput(this, \"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 * as ec2 from \"aws-cdk-lib/aws-ec2\";\nimport * as s3 from \"aws-cdk-lib/aws-s3\";\n\ndeclare const vpc: ec2.Vpc;\ndeclare const bucket: s3.Bucket;\nnew NeuronxCompile(this, \"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 * as ec2 from \"aws-cdk-lib/aws-ec2\";\nimport * as s3 from \"aws-cdk-lib/aws-s3\";\n\ndeclare const vpc: ec2.Vpc;\ndeclare const bucket: s3.Bucket;\nnew NeuronxCompile(this, \"NeuronxCompile\", {\n vpc,\n bucket,\n model: Model.fromHuggingFace(\"example/example-22b-chat\"),\n compileOptions: {\n nPositions: 1024,\n quantDtype: QuantDtype.S8,\n optLevel: OptLevel.MODEL_EXECUTION_PERFORMANCE,\n },\n});\n```\n"
3855
3855
  },
3856
3856
  "repository": {
3857
3857
  "type": "git",
@@ -4289,7 +4289,7 @@
4289
4289
  },
4290
4290
  "locationInModule": {
4291
4291
  "filename": "src/model.ts",
4292
- "line": 101
4292
+ "line": 112
4293
4293
  },
4294
4294
  "name": "fromBucket",
4295
4295
  "parameters": [
@@ -4354,6 +4354,7 @@
4354
4354
  "summary": "model basic infromation."
4355
4355
  },
4356
4356
  "name": "options",
4357
+ "optional": true,
4357
4358
  "type": {
4358
4359
  "fqn": "aws-cdk-neuronx-patterns.ModelOptions"
4359
4360
  }
@@ -4376,7 +4377,7 @@
4376
4377
  "immutable": true,
4377
4378
  "locationInModule": {
4378
4379
  "filename": "src/model.ts",
4379
- "line": 105
4380
+ "line": 116
4380
4381
  },
4381
4382
  "name": "modelId",
4382
4383
  "type": {
@@ -4390,7 +4391,7 @@
4390
4391
  "immutable": true,
4391
4392
  "locationInModule": {
4392
4393
  "filename": "src/model.ts",
4393
- "line": 106
4394
+ "line": 117
4394
4395
  },
4395
4396
  "name": "options",
4396
4397
  "type": {
@@ -4404,7 +4405,7 @@
4404
4405
  "immutable": true,
4405
4406
  "locationInModule": {
4406
4407
  "filename": "src/model.ts",
4407
- "line": 107
4408
+ "line": 118
4408
4409
  },
4409
4410
  "name": "bucket",
4410
4411
  "optional": true,
@@ -4419,7 +4420,7 @@
4419
4420
  "immutable": true,
4420
4421
  "locationInModule": {
4421
4422
  "filename": "src/model.ts",
4422
- "line": 108
4423
+ "line": 119
4423
4424
  },
4424
4425
  "name": "prefix",
4425
4426
  "optional": true,
@@ -4809,7 +4810,7 @@
4809
4810
  "kind": "class",
4810
4811
  "locationInModule": {
4811
4812
  "filename": "src/neuronx-instance-type.ts",
4812
- "line": 22
4813
+ "line": 31
4813
4814
  },
4814
4815
  "methods": [
4815
4816
  {
@@ -4820,7 +4821,7 @@
4820
4821
  },
4821
4822
  "locationInModule": {
4822
4823
  "filename": "src/neuronx-instance-type.ts",
4823
- "line": 69
4824
+ "line": 96
4824
4825
  },
4825
4826
  "name": "toString",
4826
4827
  "returns": {
@@ -4841,7 +4842,7 @@
4841
4842
  "immutable": true,
4842
4843
  "locationInModule": {
4843
4844
  "filename": "src/neuronx-instance-type.ts",
4844
- "line": 44
4845
+ "line": 53
4845
4846
  },
4846
4847
  "name": "INF2_24XLARGE",
4847
4848
  "static": true,
@@ -4858,7 +4859,7 @@
4858
4859
  "immutable": true,
4859
4860
  "locationInModule": {
4860
4861
  "filename": "src/neuronx-instance-type.ts",
4861
- "line": 53
4862
+ "line": 62
4862
4863
  },
4863
4864
  "name": "INF2_48XLARGE",
4864
4865
  "static": true,
@@ -4875,7 +4876,7 @@
4875
4876
  "immutable": true,
4876
4877
  "locationInModule": {
4877
4878
  "filename": "src/neuronx-instance-type.ts",
4878
- "line": 35
4879
+ "line": 44
4879
4880
  },
4880
4881
  "name": "INF2_8XLARGE",
4881
4882
  "static": true,
@@ -4892,7 +4893,7 @@
4892
4893
  "immutable": true,
4893
4894
  "locationInModule": {
4894
4895
  "filename": "src/neuronx-instance-type.ts",
4895
- "line": 26
4896
+ "line": 35
4896
4897
  },
4897
4898
  "name": "INF2_XLARGE",
4898
4899
  "static": true,
@@ -4900,6 +4901,40 @@
4900
4901
  "fqn": "aws-cdk-neuronx-patterns.NeuronxInstanceType"
4901
4902
  }
4902
4903
  },
4904
+ {
4905
+ "const": true,
4906
+ "docs": {
4907
+ "stability": "stable",
4908
+ "summary": "ml.trn1.2xlarge."
4909
+ },
4910
+ "immutable": true,
4911
+ "locationInModule": {
4912
+ "filename": "src/neuronx-instance-type.ts",
4913
+ "line": 71
4914
+ },
4915
+ "name": "TRN1_2XLARGE",
4916
+ "static": true,
4917
+ "type": {
4918
+ "fqn": "aws-cdk-neuronx-patterns.NeuronxInstanceType"
4919
+ }
4920
+ },
4921
+ {
4922
+ "const": true,
4923
+ "docs": {
4924
+ "stability": "stable",
4925
+ "summary": "ml.trn1.32xlarge."
4926
+ },
4927
+ "immutable": true,
4928
+ "locationInModule": {
4929
+ "filename": "src/neuronx-instance-type.ts",
4930
+ "line": 80
4931
+ },
4932
+ "name": "TRN1_32XLARGE",
4933
+ "static": true,
4934
+ "type": {
4935
+ "fqn": "aws-cdk-neuronx-patterns.NeuronxInstanceType"
4936
+ }
4937
+ },
4903
4938
  {
4904
4939
  "docs": {
4905
4940
  "stability": "stable"
@@ -4907,7 +4942,7 @@
4907
4942
  "immutable": true,
4908
4943
  "locationInModule": {
4909
4944
  "filename": "src/neuronx-instance-type.ts",
4910
- "line": 63
4945
+ "line": 90
4911
4946
  },
4912
4947
  "name": "acceleratorChips",
4913
4948
  "type": {
@@ -4921,7 +4956,7 @@
4921
4956
  "immutable": true,
4922
4957
  "locationInModule": {
4923
4958
  "filename": "src/neuronx-instance-type.ts",
4924
- "line": 60
4959
+ "line": 87
4925
4960
  },
4926
4961
  "name": "instanceType",
4927
4962
  "type": {
@@ -4935,7 +4970,7 @@
4935
4970
  "immutable": true,
4936
4971
  "locationInModule": {
4937
4972
  "filename": "src/neuronx-instance-type.ts",
4938
- "line": 62
4973
+ "line": 89
4939
4974
  },
4940
4975
  "name": "memory",
4941
4976
  "type": {
@@ -4949,7 +4984,7 @@
4949
4984
  "immutable": true,
4950
4985
  "locationInModule": {
4951
4986
  "filename": "src/neuronx-instance-type.ts",
4952
- "line": 61
4987
+ "line": 88
4953
4988
  },
4954
4989
  "name": "vCpu",
4955
4990
  "type": {
@@ -5084,6 +5119,87 @@
5084
5119
  "name": "QuantDtype",
5085
5120
  "symbolId": "src/model:QuantDtype"
5086
5121
  },
5122
+ "aws-cdk-neuronx-patterns.TrainiumChips": {
5123
+ "assembly": "aws-cdk-neuronx-patterns",
5124
+ "docs": {
5125
+ "stability": "stable"
5126
+ },
5127
+ "fqn": "aws-cdk-neuronx-patterns.TrainiumChips",
5128
+ "initializer": {
5129
+ "docs": {
5130
+ "stability": "stable"
5131
+ },
5132
+ "locationInModule": {
5133
+ "filename": "src/neuronx-instance-type.ts",
5134
+ "line": 25
5135
+ },
5136
+ "parameters": [
5137
+ {
5138
+ "name": "chips",
5139
+ "type": {
5140
+ "primitive": "number"
5141
+ }
5142
+ }
5143
+ ]
5144
+ },
5145
+ "interfaces": [
5146
+ "aws-cdk-neuronx-patterns.IAcceleratorChips"
5147
+ ],
5148
+ "kind": "class",
5149
+ "locationInModule": {
5150
+ "filename": "src/neuronx-instance-type.ts",
5151
+ "line": 22
5152
+ },
5153
+ "name": "TrainiumChips",
5154
+ "properties": [
5155
+ {
5156
+ "docs": {
5157
+ "stability": "stable"
5158
+ },
5159
+ "immutable": true,
5160
+ "locationInModule": {
5161
+ "filename": "src/neuronx-instance-type.ts",
5162
+ "line": 24
5163
+ },
5164
+ "name": "acceleratorMemory",
5165
+ "overrides": "aws-cdk-neuronx-patterns.IAcceleratorChips",
5166
+ "type": {
5167
+ "fqn": "aws-cdk-lib.Size"
5168
+ }
5169
+ },
5170
+ {
5171
+ "docs": {
5172
+ "stability": "stable"
5173
+ },
5174
+ "immutable": true,
5175
+ "locationInModule": {
5176
+ "filename": "src/neuronx-instance-type.ts",
5177
+ "line": 25
5178
+ },
5179
+ "name": "chips",
5180
+ "overrides": "aws-cdk-neuronx-patterns.IAcceleratorChips",
5181
+ "type": {
5182
+ "primitive": "number"
5183
+ }
5184
+ },
5185
+ {
5186
+ "docs": {
5187
+ "stability": "stable"
5188
+ },
5189
+ "immutable": true,
5190
+ "locationInModule": {
5191
+ "filename": "src/neuronx-instance-type.ts",
5192
+ "line": 23
5193
+ },
5194
+ "name": "neuronxCores",
5195
+ "overrides": "aws-cdk-neuronx-patterns.IAcceleratorChips",
5196
+ "type": {
5197
+ "primitive": "number"
5198
+ }
5199
+ }
5200
+ ],
5201
+ "symbolId": "src/neuronx-instance-type:TrainiumChips"
5202
+ },
5087
5203
  "aws-cdk-neuronx-patterns.TransformersNeuronxSageMakerInferenceModelData": {
5088
5204
  "assembly": "aws-cdk-neuronx-patterns",
5089
5205
  "docs": {
@@ -5360,7 +5476,7 @@
5360
5476
  },
5361
5477
  "locationInModule": {
5362
5478
  "filename": "src/transformers-neuronx-sagemaker-realtime-inference.ts",
5363
- "line": 287
5479
+ "line": 289
5364
5480
  },
5365
5481
  "name": "grantInvoke",
5366
5482
  "parameters": [
@@ -5569,6 +5685,6 @@
5569
5685
  "symbolId": "src/transformers-neuronx-sagemaker-realtime-inference:TransformersNeuronxSageMakerRealtimeInferenceEndpointProps"
5570
5686
  }
5571
5687
  },
5572
- "version": "0.0.4",
5573
- "fingerprint": "XO2QlDqW3bojQGczF18xCsjcRr+vPLQOWOpbuoVbGs4="
5688
+ "version": "0.0.6",
5689
+ "fingerprint": "LPX68IUEckJ1umM4OsY8VpXPj7Ewo76D+yOrkS5BDK4="
5574
5690
  }
package/API.md CHANGED
@@ -1026,7 +1026,7 @@ model basic infromation.
1026
1026
  ```typescript
1027
1027
  import { Model } from 'aws-cdk-neuronx-patterns'
1028
1028
 
1029
- Model.fromHuggingFace(modelId: string, options: ModelOptions)
1029
+ Model.fromHuggingFace(modelId: string, options?: ModelOptions)
1030
1030
  ```
1031
1031
 
1032
1032
  model informations at HuggingFace.
@@ -1039,7 +1039,7 @@ model id on the HuggingFace.
1039
1039
 
1040
1040
  ---
1041
1041
 
1042
- ###### `options`<sup>Required</sup> <a name="options" id="aws-cdk-neuronx-patterns.Model.fromHuggingFace.parameter.options"></a>
1042
+ ###### `options`<sup>Optional</sup> <a name="options" id="aws-cdk-neuronx-patterns.Model.fromHuggingFace.parameter.options"></a>
1043
1043
 
1044
1044
  - *Type:* <a href="#aws-cdk-neuronx-patterns.ModelOptions">ModelOptions</a>
1045
1045
 
@@ -1177,6 +1177,8 @@ public readonly vCpu: number;
1177
1177
  | <code><a href="#aws-cdk-neuronx-patterns.NeuronxInstanceType.property.INF2_48XLARGE">INF2_48XLARGE</a></code> | <code><a href="#aws-cdk-neuronx-patterns.NeuronxInstanceType">NeuronxInstanceType</a></code> | ml.inf2.48xlarge. |
1178
1178
  | <code><a href="#aws-cdk-neuronx-patterns.NeuronxInstanceType.property.INF2_8XLARGE">INF2_8XLARGE</a></code> | <code><a href="#aws-cdk-neuronx-patterns.NeuronxInstanceType">NeuronxInstanceType</a></code> | ml.inf2.8xlarge. |
1179
1179
  | <code><a href="#aws-cdk-neuronx-patterns.NeuronxInstanceType.property.INF2_XLARGE">INF2_XLARGE</a></code> | <code><a href="#aws-cdk-neuronx-patterns.NeuronxInstanceType">NeuronxInstanceType</a></code> | ml.inf2.xlarge. |
1180
+ | <code><a href="#aws-cdk-neuronx-patterns.NeuronxInstanceType.property.TRN1_2XLARGE">TRN1_2XLARGE</a></code> | <code><a href="#aws-cdk-neuronx-patterns.NeuronxInstanceType">NeuronxInstanceType</a></code> | ml.trn1.2xlarge. |
1181
+ | <code><a href="#aws-cdk-neuronx-patterns.NeuronxInstanceType.property.TRN1_32XLARGE">TRN1_32XLARGE</a></code> | <code><a href="#aws-cdk-neuronx-patterns.NeuronxInstanceType">NeuronxInstanceType</a></code> | ml.trn1.32xlarge. |
1180
1182
 
1181
1183
  ---
1182
1184
 
@@ -1228,6 +1230,30 @@ ml.inf2.xlarge.
1228
1230
 
1229
1231
  ---
1230
1232
 
1233
+ ##### `TRN1_2XLARGE`<sup>Required</sup> <a name="TRN1_2XLARGE" id="aws-cdk-neuronx-patterns.NeuronxInstanceType.property.TRN1_2XLARGE"></a>
1234
+
1235
+ ```typescript
1236
+ public readonly TRN1_2XLARGE: NeuronxInstanceType;
1237
+ ```
1238
+
1239
+ - *Type:* <a href="#aws-cdk-neuronx-patterns.NeuronxInstanceType">NeuronxInstanceType</a>
1240
+
1241
+ ml.trn1.2xlarge.
1242
+
1243
+ ---
1244
+
1245
+ ##### `TRN1_32XLARGE`<sup>Required</sup> <a name="TRN1_32XLARGE" id="aws-cdk-neuronx-patterns.NeuronxInstanceType.property.TRN1_32XLARGE"></a>
1246
+
1247
+ ```typescript
1248
+ public readonly TRN1_32XLARGE: NeuronxInstanceType;
1249
+ ```
1250
+
1251
+ - *Type:* <a href="#aws-cdk-neuronx-patterns.NeuronxInstanceType">NeuronxInstanceType</a>
1252
+
1253
+ ml.trn1.32xlarge.
1254
+
1255
+ ---
1256
+
1231
1257
  ### Parameters <a name="Parameters" id="aws-cdk-neuronx-patterns.Parameters"></a>
1232
1258
 
1233
1259
  Represents the amount of parameters.
@@ -1276,6 +1302,73 @@ number of parameters bilionX.
1276
1302
 
1277
1303
 
1278
1304
 
1305
+ ### TrainiumChips <a name="TrainiumChips" id="aws-cdk-neuronx-patterns.TrainiumChips"></a>
1306
+
1307
+ - *Implements:* <a href="#aws-cdk-neuronx-patterns.IAcceleratorChips">IAcceleratorChips</a>
1308
+
1309
+ #### Initializers <a name="Initializers" id="aws-cdk-neuronx-patterns.TrainiumChips.Initializer"></a>
1310
+
1311
+ ```typescript
1312
+ import { TrainiumChips } from 'aws-cdk-neuronx-patterns'
1313
+
1314
+ new TrainiumChips(chips: number)
1315
+ ```
1316
+
1317
+ | **Name** | **Type** | **Description** |
1318
+ | --- | --- | --- |
1319
+ | <code><a href="#aws-cdk-neuronx-patterns.TrainiumChips.Initializer.parameter.chips">chips</a></code> | <code>number</code> | *No description.* |
1320
+
1321
+ ---
1322
+
1323
+ ##### `chips`<sup>Required</sup> <a name="chips" id="aws-cdk-neuronx-patterns.TrainiumChips.Initializer.parameter.chips"></a>
1324
+
1325
+ - *Type:* number
1326
+
1327
+ ---
1328
+
1329
+
1330
+
1331
+ #### Properties <a name="Properties" id="Properties"></a>
1332
+
1333
+ | **Name** | **Type** | **Description** |
1334
+ | --- | --- | --- |
1335
+ | <code><a href="#aws-cdk-neuronx-patterns.TrainiumChips.property.acceleratorMemory">acceleratorMemory</a></code> | <code>aws-cdk-lib.Size</code> | *No description.* |
1336
+ | <code><a href="#aws-cdk-neuronx-patterns.TrainiumChips.property.chips">chips</a></code> | <code>number</code> | *No description.* |
1337
+ | <code><a href="#aws-cdk-neuronx-patterns.TrainiumChips.property.neuronxCores">neuronxCores</a></code> | <code>number</code> | *No description.* |
1338
+
1339
+ ---
1340
+
1341
+ ##### `acceleratorMemory`<sup>Required</sup> <a name="acceleratorMemory" id="aws-cdk-neuronx-patterns.TrainiumChips.property.acceleratorMemory"></a>
1342
+
1343
+ ```typescript
1344
+ public readonly acceleratorMemory: Size;
1345
+ ```
1346
+
1347
+ - *Type:* aws-cdk-lib.Size
1348
+
1349
+ ---
1350
+
1351
+ ##### `chips`<sup>Required</sup> <a name="chips" id="aws-cdk-neuronx-patterns.TrainiumChips.property.chips"></a>
1352
+
1353
+ ```typescript
1354
+ public readonly chips: number;
1355
+ ```
1356
+
1357
+ - *Type:* number
1358
+
1359
+ ---
1360
+
1361
+ ##### `neuronxCores`<sup>Required</sup> <a name="neuronxCores" id="aws-cdk-neuronx-patterns.TrainiumChips.property.neuronxCores"></a>
1362
+
1363
+ ```typescript
1364
+ public readonly neuronxCores: number;
1365
+ ```
1366
+
1367
+ - *Type:* number
1368
+
1369
+ ---
1370
+
1371
+
1279
1372
  ### TransformersNeuronxSageMakerInferenceModelData <a name="TransformersNeuronxSageMakerInferenceModelData" id="aws-cdk-neuronx-patterns.TransformersNeuronxSageMakerInferenceModelData"></a>
1280
1373
 
1281
1374
 
@@ -1456,7 +1549,7 @@ public readonly quantDtype: QuantDtype;
1456
1549
 
1457
1550
  ### IAcceleratorChips <a name="IAcceleratorChips" id="aws-cdk-neuronx-patterns.IAcceleratorChips"></a>
1458
1551
 
1459
- - *Implemented By:* <a href="#aws-cdk-neuronx-patterns.Inferentia2Chips">Inferentia2Chips</a>, <a href="#aws-cdk-neuronx-patterns.IAcceleratorChips">IAcceleratorChips</a>
1552
+ - *Implemented By:* <a href="#aws-cdk-neuronx-patterns.Inferentia2Chips">Inferentia2Chips</a>, <a href="#aws-cdk-neuronx-patterns.TrainiumChips">TrainiumChips</a>, <a href="#aws-cdk-neuronx-patterns.IAcceleratorChips">IAcceleratorChips</a>
1460
1553
 
1461
1554
 
1462
1555
  #### Properties <a name="Properties" id="Properties"></a>
package/README.md CHANGED
@@ -24,9 +24,7 @@ declare const bucket: s3.Bucket;
24
24
  const compile = new NeuronxCompile(this, "NeuronxCompile", {
25
25
  vpc,
26
26
  bucket,
27
- model: Model.fromHuggingFace("example/example-7b-chat", {
28
- parameters: Parameters.billion(7),
29
- }),
27
+ model: Model.fromHuggingFace("example/example-7b-chat"),
30
28
  });
31
29
  new TransformersNeuronxSageMakerRealtimeInferenceEndpoint(
32
30
  this,
@@ -40,6 +38,9 @@ new TransformersNeuronxSageMakerRealtimeInferenceEndpoint(
40
38
  );
41
39
  ```
42
40
 
41
+ This is TransformersNeuronxSageMakerRealtimeInferenceEndpoint architecture.
42
+ ![TransformersNeuronxSageMakerRealtimeInferenceEndpoint architecture](./docs/transformers-neuronx-sagemaker-realtime-inference-architecture.png)
43
+
43
44
  ### Default inference code
44
45
 
45
46
  By default, default inference code is deployed to implement the chat interface. The default inference code takes an object array like [transformers' conversations](https://huggingface.co/docs/transformers/main/en/conversations) and responds to the generated text. The following code is an example using the AWS SDK for JavaScript v3.
@@ -83,7 +84,7 @@ client
83
84
  });
84
85
  ```
85
86
 
86
- To change your own inference code, you can pass the code source.
87
+ To use your own inference code, you can pass the code to model data option.
87
88
 
88
89
  ```ts
89
90
  import * as s3Deplyment from "aws-cdk-lib/aws-s3-deployment";
@@ -118,9 +119,7 @@ declare const bucket: s3.Bucket;
118
119
  const compile = new NeuronxCompile(this, "NeuronxCompile", {
119
120
  vpc,
120
121
  bucket,
121
- model: Model.fromHuggingFace("example/example-7b-chat", {
122
- parameters: Parameters.billion(7),
123
- }),
122
+ model: Model.fromHuggingFace("example/example-7b-chat"),
124
123
  });
125
124
 
126
125
  // Get the compiled artifacts from this S3 URL
@@ -185,9 +184,7 @@ declare const bucket: s3.Bucket;
185
184
  new NeuronxCompile(this, "NeuronxCompile", {
186
185
  vpc,
187
186
  bucket,
188
- model: Model.fromHuggingFace("example/example-22b-chat", {
189
- parameters: Parameters.billion(22),
190
- }),
187
+ model: Model.fromHuggingFace("example/example-22b-chat"),
191
188
  compileOptions: {
192
189
  nPositions: 1024,
193
190
  quantDtype: QuantDtype.S8,
@@ -84,7 +84,7 @@ export declare class Model {
84
84
  * @param options model basic infromation
85
85
  * @returns model instance
86
86
  */
87
- static fromHuggingFace(modelId: string, options: ModelOptions): Model;
87
+ static fromHuggingFace(modelId: string, options?: ModelOptions): Model;
88
88
  /**
89
89
  * model informations at S3 Bucket
90
90
  * @param bucket Model stored S3 Bucket
@@ -14,6 +14,12 @@ export declare class Inferentia2Chips implements IAcceleratorChips {
14
14
  readonly acceleratorMemory: Size;
15
15
  constructor(chips: number);
16
16
  }
17
+ export declare class TrainiumChips implements IAcceleratorChips {
18
+ readonly chips: number;
19
+ readonly neuronxCores: number;
20
+ readonly acceleratorMemory: Size;
21
+ constructor(chips: number);
22
+ }
17
23
  export declare class NeuronxInstanceType {
18
24
  readonly instanceType: ec2.InstanceType;
19
25
  readonly vCpu: number;
@@ -35,6 +41,14 @@ export declare class NeuronxInstanceType {
35
41
  * ml.inf2.48xlarge
36
42
  */
37
43
  static readonly INF2_48XLARGE: NeuronxInstanceType;
44
+ /**
45
+ * ml.trn1.2xlarge
46
+ */
47
+ static readonly TRN1_2XLARGE: NeuronxInstanceType;
48
+ /**
49
+ * ml.trn1.32xlarge
50
+ */
51
+ static readonly TRN1_32XLARGE: NeuronxInstanceType;
38
52
  private constructor();
39
53
  /**
40
54
  * Return the instance type as a string
package/lib/model.d.ts CHANGED
@@ -84,7 +84,7 @@ export declare class Model {
84
84
  * @param options model basic infromation
85
85
  * @returns model instance
86
86
  */
87
- static fromHuggingFace(modelId: string, options: ModelOptions): Model;
87
+ static fromHuggingFace(modelId: string, options?: ModelOptions): Model;
88
88
  /**
89
89
  * model informations at S3 Bucket
90
90
  * @param bucket Model stored S3 Bucket
package/lib/model.js CHANGED
@@ -56,7 +56,7 @@ class Parameters {
56
56
  }
57
57
  exports.Parameters = Parameters;
58
58
  _a = JSII_RTTI_SYMBOL_1;
59
- Parameters[_a] = { fqn: "aws-cdk-neuronx-patterns.Parameters", version: "0.0.4" };
59
+ Parameters[_a] = { fqn: "aws-cdk-neuronx-patterns.Parameters", version: "0.0.6" };
60
60
  /**
61
61
  * Compile target model.
62
62
  */
@@ -68,7 +68,15 @@ class Model {
68
68
  * @returns model instance
69
69
  */
70
70
  static fromHuggingFace(modelId, options) {
71
- return new Model(modelId, options);
71
+ const inferParameters = modelId.match(/(\d+)b/);
72
+ if (!options?.parameters && !inferParameters) {
73
+ throw new Error("The number of parameters cannot be inferred from the model ID. Set optional parameters.");
74
+ }
75
+ const parameters = options?.parameters ?? Parameters.billion(parseInt(inferParameters[1]));
76
+ return new Model(modelId, {
77
+ ...options,
78
+ parameters,
79
+ });
72
80
  }
73
81
  /**
74
82
  * model informations at S3 Bucket
@@ -89,5 +97,5 @@ class Model {
89
97
  }
90
98
  exports.Model = Model;
91
99
  _b = JSII_RTTI_SYMBOL_1;
92
- Model[_b] = { fqn: "aws-cdk-neuronx-patterns.Model", version: "0.0.4" };
93
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFFQTs7R0FFRztBQUNILElBQVksVUFLWDtBQUxELFdBQVksVUFBVTtJQUNwQjs7T0FFRztJQUNILHVCQUFTLENBQUE7QUFDWCxDQUFDLEVBTFcsVUFBVSwwQkFBVixVQUFVLFFBS3JCO0FBRUQ7O0dBRUc7QUFDSCxJQUFZLFFBYVg7QUFiRCxXQUFZLFFBQVE7SUFDbEI7O09BRUc7SUFDSCw2RUFBMkIsQ0FBQTtJQUMzQjs7T0FFRztJQUNILHVEQUFnQixDQUFBO0lBQ2hCOztPQUVHO0lBQ0gscUZBQStCLENBQUE7QUFDakMsQ0FBQyxFQWJXLFFBQVEsd0JBQVIsUUFBUSxRQWFuQjtBQXdCRDs7R0FFRztBQUNILE1BQWEsVUFBVTtJQUNyQjs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFrQjtRQUMvQixPQUFPLElBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFDRCxZQUFxQyxPQUFlO1FBQWYsWUFBTyxHQUFQLE9BQU8sQ0FBUTtJQUFHLENBQUM7SUFDeEQ7OztPQUdHO0lBQ0gsUUFBUTtRQUNOLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDOztBQWhCSCxnQ0FpQkM7OztBQVFEOztHQUVHO0FBQ0gsTUFBYSxLQUFLO0lBQ2hCOzs7OztPQUtHO0lBQ0gsTUFBTSxDQUFDLGVBQWUsQ0FBQyxPQUFlLEVBQUUsT0FBcUI7UUFDM0QsT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUNEOzs7Ozs7T0FNRztJQUNILE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBZSxFQUFFLE1BQWMsRUFBRSxPQUFxQjtRQUN0RSxPQUFPLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBQ0QsWUFDVyxPQUFlLEVBQ2YsT0FBcUIsRUFDckIsTUFBZ0IsRUFDaEIsTUFBZTtRQUhmLFlBQU8sR0FBUCxPQUFPLENBQVE7UUFDZixZQUFPLEdBQVAsT0FBTyxDQUFjO1FBQ3JCLFdBQU0sR0FBTixNQUFNLENBQVU7UUFDaEIsV0FBTSxHQUFOLE1BQU0sQ0FBUztJQUN2QixDQUFDOztBQXpCTixzQkEwQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJQnVja2V0IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zM1wiO1xuXG4vKipcbiAqIFF1YW50IGRhdGEgdHlwZS5cbiAqL1xuZXhwb3J0IGVudW0gUXVhbnREdHlwZSB7XG4gIC8qKlxuICAgKiBpbnQ4IHdlaWdodCBzdG9yYWdlLlxuICAgKi9cbiAgUzggPSBcInM4XCIsXG59XG5cbi8qKlxuICogT3B0aW1pemF0aW9uIGxldmVsLlxuICovXG5leHBvcnQgZW51bSBPcHRMZXZlbCB7XG4gIC8qKlxuICAgKiBlbmFibGVzIHRoZSBjb3JlIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnMgaW4gdGhlIGNvbXBpbGVyLCB3aGlsZSBhbHNvIG1pbmltaXppbmcgY29tcGlsZSB0aW1lLlxuICAgKi9cbiAgTUlOSU1JWklOR19DT01QSUxFX1RJTUUgPSAxLFxuICAvKipcbiAgICogcHJvdmlkZXMgdGhlIGJlc3QgYmFsYW5jZSBiZXR3ZWVuIG1vZGVsIHBlcmZvcm1hbmNlIGFuZCBjb21waWxlIHRpbWUuXG4gICAqL1xuICBCRVNUX0JBTEFOQ0UgPSAyLFxuICAvKipcbiAgICogbWF5IHByb3ZpZGUgYWRkaXRpb25hbCBtb2RlbCBleGVjdXRpb24gcGVyZm9ybWFuY2UgYnV0IG1heSBpbmN1ciBsb25nZXIgY29tcGlsZSB0aW1lcyBhbmQgaGlnaGVyIGhvc3QgbWVtb3J5IHVzYWdlIGR1cmluZyBtb2RlbCBjb21waWxhdGlvbi5cbiAgICovXG4gIE1PREVMX0VYRUNVVElPTl9QRVJGT1JNQU5DRSA9IDMsXG59XG5cbi8qKlxuICogQ29tcGlsZSBvcHRpb25zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbXBpbGVPcHRpb25zIHtcbiAgLyoqXG4gICAqIEBkZWZhdWx0IC0gY2FsYyBmcm9tIHBhcmFtZXRlcnMgYW5kIHF1YW50RHR5cGVcbiAgICovXG4gIHJlYWRvbmx5IHRwRGVncmVlPzogbnVtYmVyO1xuICAvKipcbiAgICogQGRlZmF1bHQgLSBObyBxdWFudFxuICAgKi9cbiAgcmVhZG9ubHkgcXVhbnREdHlwZT86IFF1YW50RHR5cGU7XG4gIC8qKlxuICAgKiBAZGVmYXVsdCA0MDk2XG4gICAqL1xuICByZWFkb25seSBuUG9zaXRpb25zPzogbnVtYmVyO1xuICAvKipcbiAgICogQGRlZmF1bHQgT3B0TGV2ZWwuQkVTVF9CQUxBTkNFXG4gICAqL1xuICByZWFkb25seSBvcHRMZXZlbD86IE9wdExldmVsO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIGFtb3VudCBvZiBwYXJhbWV0ZXJzLlxuICovXG5leHBvcnQgY2xhc3MgUGFyYW1ldGVycyB7XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBQYXJhbWV0ZXJzIHJlcHJlc2VudGluZyBhbiBhbW91bnQgYmlsaW9uLlxuICAgKiBAcGFyYW0gcGFyYW1ldGVycyBudW1iZXIgb2YgcGFyYW1ldGVycyBiaWxpb25YXG4gICAqIEByZXR1cm5zIHBhcmFtZXRlcnNcbiAgICovXG4gIHN0YXRpYyBiaWxsaW9uKHBhcmFtZXRlcnM6IG51bWJlcikge1xuICAgIHJldHVybiBuZXcgUGFyYW1ldGVycyhwYXJhbWV0ZXJzKTtcbiAgfVxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgYmlsbGlvbjogbnVtYmVyKSB7fVxuICAvKipcbiAgICogUmV0dXJuIHRoaXMgbnVtYmVyIG9mIHBhcmFtZXRlcnMgYXMgYmlsaW9uLlxuICAgKiBAcmV0dXJucyBUaGlzIG51bWJlciBvZiBwYXJhbWV0ZXJzIGFzIGJpbGlvbi5cbiAgICovXG4gIHRvQmlsaW9uKCkge1xuICAgIHJldHVybiB0aGlzLmJpbGxpb247XG4gIH1cbn1cblxuLyoqXG4gKiBDb21waWxlIHRhcmdldCBtb2RlbCBiYXNpYyBpbmZyb21hdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1vZGVsT3B0aW9ucyB7XG4gIHJlYWRvbmx5IHBhcmFtZXRlcnM6IFBhcmFtZXRlcnM7XG59XG4vKipcbiAqIENvbXBpbGUgdGFyZ2V0IG1vZGVsLlxuICovXG5leHBvcnQgY2xhc3MgTW9kZWwge1xuICAvKipcbiAgICogbW9kZWwgaW5mb3JtYXRpb25zIGF0IEh1Z2dpbmdGYWNlXG4gICAqIEBwYXJhbSBtb2RlbElkIG1vZGVsIGlkIG9uIHRoZSBIdWdnaW5nRmFjZVxuICAgKiBAcGFyYW0gb3B0aW9ucyBtb2RlbCBiYXNpYyBpbmZyb21hdGlvblxuICAgKiBAcmV0dXJucyBtb2RlbCBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGZyb21IdWdnaW5nRmFjZShtb2RlbElkOiBzdHJpbmcsIG9wdGlvbnM6IE1vZGVsT3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgTW9kZWwobW9kZWxJZCwgb3B0aW9ucyk7XG4gIH1cbiAgLyoqXG4gICAqIG1vZGVsIGluZm9ybWF0aW9ucyBhdCBTMyBCdWNrZXRcbiAgICogQHBhcmFtIGJ1Y2tldCBNb2RlbCBzdG9yZWQgUzMgQnVja2V0XG4gICAqIEBwYXJhbSBwcmVmaXggTW9kZWwgc3RvcmVkIG9iamVjdHMgcHJlZml4XG4gICAqIEBwYXJhbSBvcHRpb25zIG1vZGVsIGJhc2ljIGluZnJvbWF0aW9uXG4gICAqIEByZXR1cm5zIG1vZGVsIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgZnJvbUJ1Y2tldChidWNrZXQ6IElCdWNrZXQsIHByZWZpeDogc3RyaW5nLCBvcHRpb25zOiBNb2RlbE9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IE1vZGVsKGJ1Y2tldC5zM1VybEZvck9iamVjdChwcmVmaXgpLCBvcHRpb25zLCBidWNrZXQsIHByZWZpeCk7XG4gIH1cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihcbiAgICByZWFkb25seSBtb2RlbElkOiBzdHJpbmcsXG4gICAgcmVhZG9ubHkgb3B0aW9uczogTW9kZWxPcHRpb25zLFxuICAgIHJlYWRvbmx5IGJ1Y2tldD86IElCdWNrZXQsXG4gICAgcmVhZG9ubHkgcHJlZml4Pzogc3RyaW5nLFxuICApIHt9XG59XG4iXX0=
100
+ Model[_b] = { fqn: "aws-cdk-neuronx-patterns.Model", version: "0.0.6" };
101
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFFQTs7R0FFRztBQUNILElBQVksVUFLWDtBQUxELFdBQVksVUFBVTtJQUNwQjs7T0FFRztJQUNILHVCQUFTLENBQUE7QUFDWCxDQUFDLEVBTFcsVUFBVSwwQkFBVixVQUFVLFFBS3JCO0FBRUQ7O0dBRUc7QUFDSCxJQUFZLFFBYVg7QUFiRCxXQUFZLFFBQVE7SUFDbEI7O09BRUc7SUFDSCw2RUFBMkIsQ0FBQTtJQUMzQjs7T0FFRztJQUNILHVEQUFnQixDQUFBO0lBQ2hCOztPQUVHO0lBQ0gscUZBQStCLENBQUE7QUFDakMsQ0FBQyxFQWJXLFFBQVEsd0JBQVIsUUFBUSxRQWFuQjtBQXdCRDs7R0FFRztBQUNILE1BQWEsVUFBVTtJQUNyQjs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFrQjtRQUMvQixPQUFPLElBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFDRCxZQUFxQyxPQUFlO1FBQWYsWUFBTyxHQUFQLE9BQU8sQ0FBUTtJQUFHLENBQUM7SUFDeEQ7OztPQUdHO0lBQ0gsUUFBUTtRQUNOLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDOztBQWhCSCxnQ0FpQkM7OztBQVFEOztHQUVHO0FBQ0gsTUFBYSxLQUFLO0lBQ2hCOzs7OztPQUtHO0lBQ0gsTUFBTSxDQUFDLGVBQWUsQ0FBQyxPQUFlLEVBQUUsT0FBc0I7UUFDNUQsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsT0FBTyxFQUFFLFVBQVUsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQzdDLE1BQU0sSUFBSSxLQUFLLENBQ2IseUZBQXlGLENBQzFGLENBQUM7UUFDSixDQUFDO1FBQ0QsTUFBTSxVQUFVLEdBQ2QsT0FBTyxFQUFFLFVBQVUsSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxlQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzRSxPQUFPLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRTtZQUN4QixHQUFHLE9BQU87WUFDVixVQUFVO1NBQ1gsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNEOzs7Ozs7T0FNRztJQUNILE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBZSxFQUFFLE1BQWMsRUFBRSxPQUFxQjtRQUN0RSxPQUFPLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBQ0QsWUFDVyxPQUFlLEVBQ2YsT0FBcUIsRUFDckIsTUFBZ0IsRUFDaEIsTUFBZTtRQUhmLFlBQU8sR0FBUCxPQUFPLENBQVE7UUFDZixZQUFPLEdBQVAsT0FBTyxDQUFjO1FBQ3JCLFdBQU0sR0FBTixNQUFNLENBQVU7UUFDaEIsV0FBTSxHQUFOLE1BQU0sQ0FBUztJQUN2QixDQUFDOztBQXBDTixzQkFxQ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJQnVja2V0IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zM1wiO1xuXG4vKipcbiAqIFF1YW50IGRhdGEgdHlwZS5cbiAqL1xuZXhwb3J0IGVudW0gUXVhbnREdHlwZSB7XG4gIC8qKlxuICAgKiBpbnQ4IHdlaWdodCBzdG9yYWdlLlxuICAgKi9cbiAgUzggPSBcInM4XCIsXG59XG5cbi8qKlxuICogT3B0aW1pemF0aW9uIGxldmVsLlxuICovXG5leHBvcnQgZW51bSBPcHRMZXZlbCB7XG4gIC8qKlxuICAgKiBlbmFibGVzIHRoZSBjb3JlIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnMgaW4gdGhlIGNvbXBpbGVyLCB3aGlsZSBhbHNvIG1pbmltaXppbmcgY29tcGlsZSB0aW1lLlxuICAgKi9cbiAgTUlOSU1JWklOR19DT01QSUxFX1RJTUUgPSAxLFxuICAvKipcbiAgICogcHJvdmlkZXMgdGhlIGJlc3QgYmFsYW5jZSBiZXR3ZWVuIG1vZGVsIHBlcmZvcm1hbmNlIGFuZCBjb21waWxlIHRpbWUuXG4gICAqL1xuICBCRVNUX0JBTEFOQ0UgPSAyLFxuICAvKipcbiAgICogbWF5IHByb3ZpZGUgYWRkaXRpb25hbCBtb2RlbCBleGVjdXRpb24gcGVyZm9ybWFuY2UgYnV0IG1heSBpbmN1ciBsb25nZXIgY29tcGlsZSB0aW1lcyBhbmQgaGlnaGVyIGhvc3QgbWVtb3J5IHVzYWdlIGR1cmluZyBtb2RlbCBjb21waWxhdGlvbi5cbiAgICovXG4gIE1PREVMX0VYRUNVVElPTl9QRVJGT1JNQU5DRSA9IDMsXG59XG5cbi8qKlxuICogQ29tcGlsZSBvcHRpb25zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbXBpbGVPcHRpb25zIHtcbiAgLyoqXG4gICAqIEBkZWZhdWx0IC0gY2FsYyBmcm9tIHBhcmFtZXRlcnMgYW5kIHF1YW50RHR5cGVcbiAgICovXG4gIHJlYWRvbmx5IHRwRGVncmVlPzogbnVtYmVyO1xuICAvKipcbiAgICogQGRlZmF1bHQgLSBObyBxdWFudFxuICAgKi9cbiAgcmVhZG9ubHkgcXVhbnREdHlwZT86IFF1YW50RHR5cGU7XG4gIC8qKlxuICAgKiBAZGVmYXVsdCA0MDk2XG4gICAqL1xuICByZWFkb25seSBuUG9zaXRpb25zPzogbnVtYmVyO1xuICAvKipcbiAgICogQGRlZmF1bHQgT3B0TGV2ZWwuQkVTVF9CQUxBTkNFXG4gICAqL1xuICByZWFkb25seSBvcHRMZXZlbD86IE9wdExldmVsO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIGFtb3VudCBvZiBwYXJhbWV0ZXJzLlxuICovXG5leHBvcnQgY2xhc3MgUGFyYW1ldGVycyB7XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBQYXJhbWV0ZXJzIHJlcHJlc2VudGluZyBhbiBhbW91bnQgYmlsaW9uLlxuICAgKiBAcGFyYW0gcGFyYW1ldGVycyBudW1iZXIgb2YgcGFyYW1ldGVycyBiaWxpb25YXG4gICAqIEByZXR1cm5zIHBhcmFtZXRlcnNcbiAgICovXG4gIHN0YXRpYyBiaWxsaW9uKHBhcmFtZXRlcnM6IG51bWJlcikge1xuICAgIHJldHVybiBuZXcgUGFyYW1ldGVycyhwYXJhbWV0ZXJzKTtcbiAgfVxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgYmlsbGlvbjogbnVtYmVyKSB7fVxuICAvKipcbiAgICogUmV0dXJuIHRoaXMgbnVtYmVyIG9mIHBhcmFtZXRlcnMgYXMgYmlsaW9uLlxuICAgKiBAcmV0dXJucyBUaGlzIG51bWJlciBvZiBwYXJhbWV0ZXJzIGFzIGJpbGlvbi5cbiAgICovXG4gIHRvQmlsaW9uKCkge1xuICAgIHJldHVybiB0aGlzLmJpbGxpb247XG4gIH1cbn1cblxuLyoqXG4gKiBDb21waWxlIHRhcmdldCBtb2RlbCBiYXNpYyBpbmZyb21hdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1vZGVsT3B0aW9ucyB7XG4gIHJlYWRvbmx5IHBhcmFtZXRlcnM6IFBhcmFtZXRlcnM7XG59XG4vKipcbiAqIENvbXBpbGUgdGFyZ2V0IG1vZGVsLlxuICovXG5leHBvcnQgY2xhc3MgTW9kZWwge1xuICAvKipcbiAgICogbW9kZWwgaW5mb3JtYXRpb25zIGF0IEh1Z2dpbmdGYWNlXG4gICAqIEBwYXJhbSBtb2RlbElkIG1vZGVsIGlkIG9uIHRoZSBIdWdnaW5nRmFjZVxuICAgKiBAcGFyYW0gb3B0aW9ucyBtb2RlbCBiYXNpYyBpbmZyb21hdGlvblxuICAgKiBAcmV0dXJucyBtb2RlbCBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGZyb21IdWdnaW5nRmFjZShtb2RlbElkOiBzdHJpbmcsIG9wdGlvbnM/OiBNb2RlbE9wdGlvbnMpIHtcbiAgICBjb25zdCBpbmZlclBhcmFtZXRlcnMgPSBtb2RlbElkLm1hdGNoKC8oXFxkKyliLyk7XG4gICAgaWYgKCFvcHRpb25zPy5wYXJhbWV0ZXJzICYmICFpbmZlclBhcmFtZXRlcnMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJUaGUgbnVtYmVyIG9mIHBhcmFtZXRlcnMgY2Fubm90IGJlIGluZmVycmVkIGZyb20gdGhlIG1vZGVsIElELiBTZXQgb3B0aW9uYWwgcGFyYW1ldGVycy5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IHBhcmFtZXRlcnMgPVxuICAgICAgb3B0aW9ucz8ucGFyYW1ldGVycyA/PyBQYXJhbWV0ZXJzLmJpbGxpb24ocGFyc2VJbnQoaW5mZXJQYXJhbWV0ZXJzIVsxXSkpO1xuICAgIHJldHVybiBuZXcgTW9kZWwobW9kZWxJZCwge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIHBhcmFtZXRlcnMsXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIG1vZGVsIGluZm9ybWF0aW9ucyBhdCBTMyBCdWNrZXRcbiAgICogQHBhcmFtIGJ1Y2tldCBNb2RlbCBzdG9yZWQgUzMgQnVja2V0XG4gICAqIEBwYXJhbSBwcmVmaXggTW9kZWwgc3RvcmVkIG9iamVjdHMgcHJlZml4XG4gICAqIEBwYXJhbSBvcHRpb25zIG1vZGVsIGJhc2ljIGluZnJvbWF0aW9uXG4gICAqIEByZXR1cm5zIG1vZGVsIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgZnJvbUJ1Y2tldChidWNrZXQ6IElCdWNrZXQsIHByZWZpeDogc3RyaW5nLCBvcHRpb25zOiBNb2RlbE9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IE1vZGVsKGJ1Y2tldC5zM1VybEZvck9iamVjdChwcmVmaXgpLCBvcHRpb25zLCBidWNrZXQsIHByZWZpeCk7XG4gIH1cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihcbiAgICByZWFkb25seSBtb2RlbElkOiBzdHJpbmcsXG4gICAgcmVhZG9ubHkgb3B0aW9uczogTW9kZWxPcHRpb25zLFxuICAgIHJlYWRvbmx5IGJ1Y2tldD86IElCdWNrZXQsXG4gICAgcmVhZG9ubHkgcHJlZml4Pzogc3RyaW5nLFxuICApIHt9XG59XG4iXX0=
@@ -169,5 +169,5 @@ class NeuronxCompile extends constructs_1.Construct {
169
169
  }
170
170
  exports.NeuronxCompile = NeuronxCompile;
171
171
  _a = JSII_RTTI_SYMBOL_1;
172
- NeuronxCompile[_a] = { fqn: "aws-cdk-neuronx-patterns.NeuronxCompile", version: "0.0.4" };
172
+ NeuronxCompile[_a] = { fqn: "aws-cdk-neuronx-patterns.NeuronxCompile", version: "0.0.6" };
173
173
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV1cm9ueC1jb21waWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL25ldXJvbngtY29tcGlsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLCtCQUE0QjtBQUM1Qiw2Q0FBbUU7QUFDbkUsK0NBQStDO0FBQy9DLDJDQUEyQztBQUMzQyxpREFBcUQ7QUFDckQsaURBQTRDO0FBQzVDLHVEQUEwRTtBQUUxRSxtRUFBd0Q7QUFDeEQsMkNBQXVDO0FBQ3ZDLG1DQU1pQjtBQUNqQixtRUFBOEQ7QUFDOUQsNkZBQXVGO0FBQ3ZGLHlDQUE4QztBQWdFOUM7O0dBRUc7QUFDSCxNQUFhLGNBQWUsU0FBUSxzQkFBUztJQWUzQyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTBCO1FBQ2xFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUM7UUFDakQsSUFBSSxDQUFDLHdCQUF3QixHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDN0MsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsY0FBYyxFQUFFLFVBQVUsSUFBSSxJQUFJLENBQUM7UUFDM0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsY0FBYyxFQUFFLFVBQVUsQ0FBQztRQUNuRCxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxjQUFjLEVBQUUsUUFBUSxJQUFJLGdCQUFRLENBQUMsWUFBWSxDQUFDO1FBQ3hFLElBQUksQ0FBQyxRQUFRO1lBQ1gsS0FBSyxDQUFDLGNBQWMsRUFBRSxRQUFRO2dCQUM5QixJQUFBLG1CQUFZLEVBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFO29CQUMzQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7b0JBQzNCLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFB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QUF3RSxDQUN6RSxDQUFDO0lBQ0osQ0FBQzs7QUF0TUgsd0NBdU1DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgam9pbiB9IGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBDdXN0b21SZXNvdXJjZSwgRHVyYXRpb24sIFNpemUsIFRhZ3MgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCAqIGFzIGJhdGNoIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtYmF0Y2hcIjtcbmltcG9ydCAqIGFzIGVjMiBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiO1xuaW1wb3J0IHsgQ29udGFpbmVySW1hZ2UgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjc1wiO1xuaW1wb3J0IHsgR3JhbnQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuaW1wb3J0IHsgQ29kZSwgUnVudGltZSwgU2luZ2xldG9uRnVuY3Rpb24gfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiO1xuaW1wb3J0IHsgSUJ1Y2tldCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtczNcIjtcbmltcG9ydCB7IFByb3ZpZGVyIH0gZnJvbSBcImF3cy1jZGstbGliL2N1c3RvbS1yZXNvdXJjZXNcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQge1xuICBDb21waWxlT3B0aW9ucyxcbiAgTW9kZWwsXG4gIE9wdExldmVsLFxuICBQYXJhbWV0ZXJzLFxuICBRdWFudER0eXBlLFxufSBmcm9tIFwiLi9tb2RlbFwiO1xuaW1wb3J0IHsgTmV1cm9ueEluc3RhbmNlVHlwZSB9IGZyb20gXCIuL25ldXJvbngtaW5zdGFuY2UtdHlwZVwiO1xuaW1wb3J0IHsgTmV1cm9uT3B0aW1pemVkTWFjaGluZUltYWdlIH0gZnJvbSBcIi4vcHJpdmF0ZS9uZXVyb24tb3B0aW1pemVkLW1hY2hpbmUtaW1hZ2VcIjtcbmltcG9ydCB7IGNhbGNUcERlZ3JlZSB9IGZyb20gXCIuL3ByaXZhdGUvdXRpbFwiO1xuXG4vKipcbiAqIENvbXBpbGUgcnVudGltZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21waWxlUnVudGltZSB7XG4gIC8qKlxuICAgKiBBbiBpbWFnZSBvZiB0aGUgY29udGFpbmVyIHdoZXJlIHRoZSBjb21waWxlIGpvYiBpcyBleGVjdXRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGltYWdlOiBDb250YWluZXJJbWFnZTtcbiAgLyoqXG4gICAqIE5ldXJvbnggdmVyc2lvbiBpbmNsdWRlZCBpbiBjb250YWluZXIgaW1hZ2UuXG4gICAqL1xuICByZWFkb25seSBuZXVyb254VmVyc2lvbjogc3RyaW5nO1xufVxuLyoqXG4gKiBQcm9wcyBvZiBOZXVyb254Q29tcGlsZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZXVyb254Q29tcGlsZVByb3BzIHtcbiAgLyoqXG4gICAqIFZQQyBpbiB3aGljaCB0aGlzIHdpbGwgbGF1bmNoIGNvbXBpbGUgd29ya2VyIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgdnBjOiBlYzIuSVZwYztcbiAgLyoqXG4gICAqIFRoZSBidWNrZXQgdG8gdXBsb2FkIGNvbXBpbGVkIGFydGlmYWN0cy5cbiAgICovXG4gIHJlYWRvbmx5IGJ1Y2tldDogSUJ1Y2tldDtcbiAgLyoqXG4gICAqIFRoZSBtb2RlbCB0byBiZSBjb21waWxlZC5cbiAgICovXG4gIHJlYWRvbmx5IG1vZGVsOiBNb2RlbDtcbiAgLyoqXG4gICAqIFRoZSBpbnN0YW5jZSB0eXBlIG9mIGNvbXBpbGUgd29ya2VyIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgaW5zdGFuY2VUeXBlPzogTmV1cm9ueEluc3RhbmNlVHlwZTtcbiAgLyoqXG4gICAqIFRoZSByb290IHZvbHVtZSBvZiB3b3JrZXIgaW5zdGFuY2UuXG4gICAqIEBkZWZhdWx0IC0gTiBiaWxpb24gcGFyYW1ldGVycyAqIDVHaUIgRUJTXG4gICAqL1xuICByZWFkb25seSB2b2x1bWVTaXplPzogU2l6ZTtcbiAgLyoqXG4gICAqIENvbXBpbGUgcnVudGltZS5cbiAgICogQGRlZmF1bHQgeyBuZXVyb254U2RrVmVyc2lvbjogXCIyLjE5LjBcIiwgaW1hZ2U6IENvbnRhaW5lckltYWdlLmZyb21SZWdpc3RyeShcInB1YmxpYy5lY3IuYXdzL25ldXJvbi9weXRvcmNoLXRyYWluaW5nLW5ldXJvbng6Mi4xLjItbmV1cm9ueC1weTMxMC1zZGsyLjE5LjAtdWJ1bnR1MjAuMDRcIil9XG4gICAqL1xuICByZWFkb25seSBydW50aW1lPzogQ29tcGlsZVJ1bnRpbWU7XG4gIC8qKlxuICAgKiBOZXVyb254IGNvbXBpbGUgb3B0aW9ucy5cbiAgICogQGRlZmF1bHQgLSBFYWNoIHByb3BlcnRpZXMgYXJlIHNldCBkZWZhdWx0LlxuICAgKi9cbiAgcmVhZG9ubHkgY29tcGlsZU9wdGlvbnM/OiBDb21waWxlT3B0aW9ucztcbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IHRvIHVzZSBzcG90IGluc3RhbmNlcy4gU3BvdCBpbnN0YW5jZXMgYXJlIGxlc3MgZXhwZW5zaXZlIEVDMiBpbnN0YW5jZXMgdGhhdCBjYW4gYmUgcmVjbGFpbWVkIGJ5IEVDMiBhdCBhbnkgdGltZTsgeW91ciBqb2Igd2lsbCBiZSBnaXZlbiB0d28gbWludXRlcyBvZiBub3RpY2UgYmVmb3JlIHJlY2xhbWF0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgc3BvdD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUaGUgVlBDIFN1Ym5ldHMgdGhpcyBDb21wdXRlIEVudmlyb25tZW50IHdpbGwgbGF1bmNoIGluc3RhbmNlcyBpbi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBuZXcgc3VibmV0cyB3aWxsIGJlIGNyZWF0ZWRcbiAgICovXG4gIHJlYWRvbmx5IHZwY1N1Ym5ldHM/OiBlYzIuU3VibmV0U2VsZWN0aW9uO1xufVxuXG4vKipcbiAqIE5ldXJvbnggY29tcGlsZSBjb25zdHJ1Y3QuIENvbXBpbGUgdGhlIG1vZGVsIHRvIHdvcmsgd2l0aCBJbmZlcmVudGlhMiBhbmQgVHJhaW5pdW0xIGFuZCB1cGxvYWQgaXQgdG8gYW4gUzMgYnVja2V0LlxuICovXG5leHBvcnQgY2xhc3MgTmV1cm9ueENvbXBpbGUgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICByZWFkb25seSBjb21waWxlZEFydGlmYWN0UzNCdWNrZXQ6IElCdWNrZXQ7XG4gIC8qKlxuICAgKiBTMyBVUkwgdGhhdCBjb21waWxlZCBhcnRpZmFjdCB1cGxvYWRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGNvbXBpbGVkQXJ0aWZhY3RTM1VybDogc3RyaW5nO1xuICAvKipcbiAgICogUzMgUHJlZml4IHRoYXQgY29tcGlsZWQgYXJ0aWZhY3QgdXBsb2FkZWQuXG4gICAqL1xuICByZWFkb25seSBjb21waWxlZEFydGlmYWN0UzNQcmVmaXg6IHN0cmluZztcbiAgcmVhZG9ubHkgdHBEZWdyZWU6IG51bWJlcjtcbiAgcmVhZG9ubHkgcXVhbnREdHlwZT86IFF1YW50RHR5cGU7XG4gIHJlYWRvbmx5IG5Qb3NpdGlvbnM6IG51bWJlcjtcbiAgcmVhZG9ubHkgb3B0TGV2ZWw6IE9wdExldmVsO1xuICByZWFkb25seSBwYXJhbWV0ZXJzOiBQYXJhbWV0ZXJzO1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogTmV1cm9ueENvbXBpbGVQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICB0aGlzLnBhcmFtZXRlcnMgPSBwcm9wcy5tb2RlbC5vcHRpb25zLnBhcmFtZXRlcnM7XG4gICAgdGhpcy5jb21waWxlZEFydGlmYWN0UzNCdWNrZXQgPSBwcm9wcy5idWNrZXQ7XG4gICAgdGhpcy5uUG9zaXRpb25zID0gcHJvcHMuY29tcGlsZU9wdGlvbnM/Lm5Qb3NpdGlvbnMgPz8gNDA5NjtcbiAgICB0aGlzLnF1YW50RHR5cGUgPSBwcm9wcy5jb21waWxlT3B0aW9ucz8ucXVhbnREdHlwZTtcbiAgICB0aGlzLm9wdExldmVsID0gcHJvcHMuY29tcGlsZU9wdGlvbnM/Lm9wdExldmVsID8/IE9wdExldmVsLkJFU1RfQkFMQU5DRTtcbiAgICB0aGlzLnRwRGVncmVlID1cbiAgICAgIHByb3BzLmNvbXBpbGVPcHRpb25zPy50cERlZ3JlZSA/P1xuICAgICAgY2FsY1RwRGVncmVlKHByb3BzLm1vZGVsLm9wdGlvbnMucGFyYW1ldGVycywge1xuICAgICAgICBuUG9zaXRpb25zOiB0aGlzLm5Qb3NpdGlvbnMsXG4gICAgICAgIHF1YW50RHR5cGU6IHRoaXMucXVhbnREdHlwZSxcbiAgICAgIH0pO1xuICAgIGNvbnN0IGluc3RhbmNlVHlwZSA9XG4gICAgICBwcm9wcy5pbnN0YW5jZVR5cGUgPz8gdGhpcy5zZWxlY3RJbnN0YW5jZVR5cGVCeVRwRGVncmVlKHRoaXMudHBEZWdyZWUpO1xuICAgIGNvbnN0IGxhdW5jaFRlbXBsYXRlID0gbmV3IGVjMi5MYXVuY2hUZW1wbGF0ZSh0aGlzLCBcIkxhdW5jaFRlbXBsYXRlXCIsIHtcbiAgICAgIGJsb2NrRGV2aWNlczogW1xuICAgICAgICB7XG4gICAgICAgICAgZGV2aWNlTmFtZTogXCIvZGV2L3h2ZGFcIixcbiAgICAgICAgICB2b2x1bWU6IGVjMi5CbG9ja0RldmljZVZvbHVtZS5lYnMoXG4gICAgICAgICAgICBwcm9wcy52b2x1bWVTaXplPy50b0dpYmlieXRlcygpID8/XG4gICAgICAgICAgICAgIHByb3BzLm1vZGVsLm9wdGlvbnMucGFyYW1ldGVycy50b0JpbGlvbigpICogNSxcbiAgICAgICAgICApLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcbiAgICBjb25zdCBjb21wdXRlRW52aXJvbm1lbnQgPSBuZXcgYmF0Y2guTWFuYWdlZEVjMkVjc0NvbXB1dGVFbnZpcm9ubWVudChcbiAgICAgIHRoaXMsXG4gICAgICBcIkNvbXB1dGVFbnZpcm9ubWVudFwiLFxuICAgICAge1xuICAgICAgICB2cGM6IHByb3BzLnZwYyxcbiAgICAgICAgdnBjU3VibmV0czogcHJvcHMudnBjU3VibmV0cyxcbiAgICAgICAgaW5zdGFuY2VUeXBlczogW2luc3RhbmNlVHlwZS5pbnN0YW5jZVR5cGVdLFxuICAgICAgICB1c2VPcHRpbWFsSW5zdGFuY2VDbGFzc2VzOiBmYWxzZSxcbiAgICAgICAgaW1hZ2VzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgaW1hZ2U6IG5ldyBOZXVyb25PcHRpbWl6ZWRNYWNoaW5lSW1hZ2UodGhpcywgXCJNYWNoaW5JbWFnZVwiKSxcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIGltYWdlVHlwZTogXCJFQ1NfQUwyMDIzXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgbGF1bmNoVGVtcGxhdGUsXG4gICAgICAgIHNwb3Q6IHByb3BzLnNwb3QsXG4gICAgICB9LFxuICAgICk7XG4gICAgKFxuICAgICAgY29tcHV0ZUVudmlyb25tZW50Lm5vZGUuZGVmYXVsdENoaWxkIGFzIGJhdGNoLkNmbkNvbXB1dGVFbnZpcm9ubWVudFxuICAgICkuYWRkUHJvcGVydHlPdmVycmlkZShcbiAgICAgIFwiQ29tcHV0ZVJlc291cmNlcy5MYXVuY2hUZW1wbGF0ZS5WZXJzaW9uXCIsXG4gICAgICBsYXVuY2hUZW1wbGF0ZS5sYXRlc3RWZXJzaW9uTnVtYmVyLFxuICAgICk7XG5cbiAgICBUYWdzLm9mKGNvbXB1dGVFbnZpcm9ubWVudCkuYWRkKFwiTmFtZVwiLCBcIm5ldXJvbngtY29tcGlsZS13b3JrZXJcIik7XG4gICAgY29uc3Qgam9iUXVldWUgPSBuZXcgYmF0Y2guSm9iUXVldWUodGhpcywgXCJKb2JRdWV1ZVwiLCB7XG4gICAgICBjb21wdXRlRW52aXJvbm1lbnRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBjb21wdXRlRW52aXJvbm1lbnQsXG4gICAgICAgICAgb3JkZXI6IDEsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgam9iU3RhdGVUaW1lTGltaXRBY3Rpb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBzdGF0ZTogYmF0Y2guSm9iU3RhdGVUaW1lTGltaXRBY3Rpb25zU3RhdGUuUlVOTkFCTEUsXG4gICAgICAgICAgcmVhc29uOiBiYXRjaC5Kb2JTdGF0ZVRpbWVMaW1pdEFjdGlvbnNSZWFzb24uSk9CX1JFU09VUkNFX1JFUVVJUkVNRU5ULFxuICAgICAgICAgIG1heFRpbWU6IER1cmF0aW9uLm1pbnV0ZXMoMTApLFxuICAgICAgICAgIGFjdGlvbjogYmF0Y2guSm9iU3RhdGVUaW1lTGltaXRBY3Rpb25zQWN0aW9uLkNBTkNFTCxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBydW50aW1lOiBDb21waWxlUnVudGltZSA9IHByb3BzLnJ1bnRpbWUgPz8ge1xuICAgICAgaW1hZ2U6IENvbnRhaW5lckltYWdlLmZyb21Bc3NldChqb2luKF9fZGlybmFtZSwgXCIuLi9zY3JpcHRzL2NvbXBpbGVcIikpLFxuICAgICAgbmV1cm9ueFZlcnNpb246IFwiMi4xOS4xXCIsXG4gICAgfTtcbiAgICBsZXQgY29tcGlsZWRBcnRpZmFjdFBhdGhQcmVmaXggPSBgJHtwcm9wcy5tb2RlbC5tb2RlbElkfS9uZXVyb254LSR7cnVudGltZS5uZXVyb254VmVyc2lvbn0vdHAke3RoaXMudHBEZWdyZWV9LW5wJHt0aGlzLm5Qb3NpdGlvbnN9LW9wdCR7dGhpcy5vcHRMZXZlbH1gO1xuICAgIGlmICh0aGlzLnF1YW50RHR5cGUhISkge1xuICAgICAgY29tcGlsZWRBcnRpZmFjdFBhdGhQcmVmaXggPSBgJHtjb21waWxlZEFydGlmYWN0UGF0aFByZWZpeH0tcXVhbnQke3RoaXMucXVhbnREdHlwZX1gO1xuICAgIH1cbiAgICBwcm9wcy5idWNrZXQuZ3JhbnRSZWFkV3JpdGUoXG4gICAgICBjb21wdXRlRW52aXJvbm1lbnQuaW5zdGFuY2VSb2xlISxcbiAgICAgIGAke2NvbXBpbGVkQXJ0aWZhY3RQYXRoUHJlZml4fS8qYCxcbiAgICApO1xuICAgIGNvbnN0IGxpbnV4UGFyYW1ldGVycyA9IG5ldyBiYXRjaC5MaW51eFBhcmFtZXRlcnModGhpcywgXCJMaW51eFBhcmFtZXRlcnNcIik7XG4gICAgbGludXhQYXJhbWV0ZXJzLmFkZERldmljZXMoXG4gICAgICAuLi5BcnJheS5mcm9tKHtcbiAgICAgICAgbGVuZ3RoOiBpbnN0YW5jZVR5cGUuYWNjZWxlcmF0b3JDaGlwcy5jaGlwcyxcbiAgICAgIH0pLm1hcCgoXywgaW5kZXgpID0+ICh7XG4gICAgICAgIGhvc3RQYXRoOiBgL2Rldi9uZXVyb24ke2luZGV4fWAsXG4gICAgICAgIGNvbnRhaW5lclBhdGg6IGAvZGV2L25ldXJvbiR7aW5kZXh9YCxcbiAgICAgICAgcGVybWlzc2lvbnM6IFtcbiAgICAgICAgICBiYXRjaC5EZXZpY2VQZXJtaXNzaW9uLlJFQUQsXG4gICAgICAgICAgYmF0Y2guRGV2aWNlUGVybWlzc2lvbi5XUklURSxcbiAgICAgICAgXSxcbiAgICAgIH0pKSxcbiAgICApO1xuICAgIGNvbnN0IGpvYkRlZmluaXRpb24gPSBuZXcgYmF0Y2guRWNzSm9iRGVmaW5pdGlvbih0aGlzLCBcIkpvYkRlZmluaXRpb25cIiwge1xuICAgICAgY29udGFpbmVyOiBuZXcgYmF0Y2guRWNzRWMyQ29udGFpbmVyRGVmaW5pdGlvbihcbiAgICAgICAgdGhpcyxcbiAgICAgICAgXCJDb250YWluZXJEZWZpbml0aW9uXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBpbWFnZTogcnVudGltZS5pbWFnZSxcbiAgICAgICAgICAvLyBUaGUgZmxsb3dpbmcgY29tbWFuZCB3YXMgZXhlY3V0ZWQgb24gaW5mMi44eGxhcmdlXG4gICAgICAgICAgLy8gc2gtNS4yJCBmcmVlIC1iXG4gICAgICAgICAgLy8gXHRcdFx0dG90YWxcdFx0XHRcdFx0dXNlZFx0XHRcdGZyZWVcdFx0XHRcdFx0c2hhcmVkXHRidWZmL2NhY2hlXHRhdmFpbGFibGVcbiAgICAgICAgICAvLyBNZW06XHQxMzIyNjU3NjY5MTJcdDg2NjMyMDM4NFx0MTMwMzQxNzg1NjAwXHQ2Njc2NDhcdDEwNTc2NjA5MjhcdDEzMDUyOTE0ODkyOFxuICAgICAgICAgIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iYXRjaC9sYXRlc3QvdXNlcmd1aWRlL21lbW9yeS1tYW5hZ2VtZW50Lmh0bWxcbiAgICAgICAgICBtZW1vcnk6IFNpemUubWViaWJ5dGVzKFxuICAgICAgICAgICAgTWF0aC5jZWlsKGluc3RhbmNlVHlwZS5tZW1vcnkudG9NZWJpYnl0ZXMoKSAqIDAuOTUpLFxuICAgICAgICAgICksXG4gICAgICAgICAgY3B1OiBpbnN0YW5jZVR5cGUudkNwdSxcbiAgICAgICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICAgICAgTU9ERUxfSUQ6IHByb3BzLm1vZGVsLm1vZGVsSWQsXG4gICAgICAgICAgICBUUF9ERUdSRUU6IHRoaXMudHBEZWdyZWUudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIE5fUE9TSVRJT05TOiB0aGlzLm5Qb3NpdGlvbnMudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIE9QVF9MRVZFTDogdGhpcy5vcHRMZXZlbC50b1N0cmluZygpLFxuICAgICAgICAgICAgUVVBTlRfRFRZUEU6IHRoaXMucXVhbnREdHlwZT8udG9TdHJpbmcoKSA/PyBcIlwiLFxuICAgICAgICAgICAgQVJUSUZBQ1RfUzNfVVJMOiBwcm9wcy5idWNrZXQuczNVcmxGb3JPYmplY3QoXG4gICAgICAgICAgICAgIGNvbXBpbGVkQXJ0aWZhY3RQYXRoUHJlZml4LFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGxpbnV4UGFyYW1ldGVycyxcbiAgICAgICAgfSxcbiAgICAgICksXG4gICAgfSk7XG5cbiAgICBjb25zdCBqb2JTdWJtaXRGdW5jdGlvbiA9IG5ldyBTaW5nbGV0b25GdW5jdGlvbih0aGlzLCBcIkpvYlN1Ym1pdEZ1bmN0aW9uXCIsIHtcbiAgICAgIGNvZGU6IENvZGUuZnJvbUFzc2V0KGpvaW4oX19kaXJuYW1lLCBcInByaXZhdGUvYXdhaXQtY29tcGlsZS1qb2JcIikpLFxuICAgICAgaGFuZGxlcjogXCJpbmRleC5vbkV2ZW50XCIsXG4gICAgICBydW50aW1lOiBSdW50aW1lLk5PREVKU18yMF9YLFxuICAgICAgdXVpZDogXCIxMzYxZjQ2OS01YzkyLTRjNDYtOWUxMS01ZDFkYmY5MjViYWNcIixcbiAgICB9KTtcbiAgICBqb2JEZWZpbml0aW9uLmdyYW50U3VibWl0Sm9iKGpvYlN1Ym1pdEZ1bmN0aW9uLCBqb2JRdWV1ZSk7XG4gICAgY29uc3Qgam9iTW9uaXRvcmluZ0Z1bmN0aW9uID0gbmV3IFNpbmdsZXRvbkZ1bmN0aW9uKFxuICAgICAgdGhpcyxcbiAgICAgIFwiSm9iTW9uaXRvcmluZ0Z1bmN0aW9uXCIsXG4gICAgICB7XG4gICAgICAgIGNvZGU6IENvZGUuZnJvbUFzc2V0KGpvaW4oX19kaXJuYW1lLCBcInByaXZhdGUvYXdhaXQtY29tcGlsZS1qb2JcIikpLFxuICAgICAgICBoYW5kbGVyOiBcImluZGV4LmlzQ29tcGxldGVcIixcbiAgICAgICAgcnVudGltZTogUnVudGltZS5OT0RFSlNfMjBfWCxcbiAgICAgICAgdXVpZDogXCJkZjE2ZGJhOC01Zjc3LTQ4MGMtYTZhZC1jZmRmNzRjM2RlNjJcIixcbiAgICAgIH0sXG4gICAgKTtcbiAgICBHcmFudC5hZGRUb1ByaW5jaXBhbCh7XG4gICAgICByZXNvdXJjZUFybnM6IFtcIipcIl0sXG4gICAgICBncmFudGVlOiBqb2JNb25pdG9yaW5nRnVuY3Rpb24sXG4gICAgICBhY3Rpb25zOiBbXCJiYXRjaDpEZXNjcmliZUpvYnNcIl0sXG4gICAgfSk7XG4gICAgY29uc3QgcHJvdmlkZXIgPSBuZXcgUHJvdmlkZXIodGhpcywgXCJDb21waWxlSm9iUHJvdmlkZXJcIiwge1xuICAgICAgb25FdmVudEhhbmRsZXI6IGpvYlN1Ym1pdEZ1bmN0aW9uLFxuICAgICAgaXNDb21wbGV0ZUhhbmRsZXI6IGpvYk1vbml0b3JpbmdGdW5jdGlvbixcbiAgICAgIHF1ZXJ5SW50ZXJ2YWw6IER1cmF0aW9uLm1pbnV0ZXMoMSksXG4gICAgICB0b3RhbFRpbWVvdXQ6IER1cmF0aW9uLmhvdXJzKDEpLFxuICAgIH0pO1xuICAgIGNvbnN0IGNvbXBpbGVKb2IgPSBuZXcgQ3VzdG9tUmVzb3VyY2UodGhpcywgXCJSZXNvdXJjZVwiLCB7XG4gICAgICBzZXJ2aWNlVG9rZW46IHByb3ZpZGVyLnNlcnZpY2VUb2tlbixcbiAgICAgIHJlc291cmNlVHlwZTogXCJDdXN0b206Ok5ldXJvbnhDb21waWxlXCIsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIGpvYkRlZmluaXRpb25Bcm46IGpvYkRlZmluaXRpb24uam9iRGVmaW5pdGlvbkFybixcbiAgICAgICAgam9iUXVldWVBcm46IGpvYlF1ZXVlLmpvYlF1ZXVlQXJuLFxuICAgICAgICBhcnRpZmFjdFMzUHJlZml4OiBjb21waWxlZEFydGlmYWN0UGF0aFByZWZpeCxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgdGhpcy5jb21waWxlZEFydGlmYWN0UzNQcmVmaXggPSBjb21waWxlSm9iLmdldEF0dFN0cmluZyhcIkFydGlmYWN0UzNQcmVmaXhcIik7XG4gICAgdGhpcy5jb21waWxlZEFydGlmYWN0UzNVcmwgPSBwcm9wcy5idWNrZXQuczNVcmxGb3JPYmplY3QoXG4gICAgICB0aGlzLmNvbXBpbGVkQXJ0aWZhY3RTM1ByZWZpeCxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBzZWxlY3RJbnN0YW5jZVR5cGVCeVRwRGVncmVlKHRwRGVncmVlOiBudW1iZXIpIHtcbiAgICBjb25zdCBpbnN0YW5jZVR5cGVzID0gW1xuICAgICAgTmV1cm9ueEluc3RhbmNlVHlwZS5JTkYyXzhYTEFSR0UsXG4gICAgICBOZXVyb254SW5zdGFuY2VUeXBlLklORjJfMjRYTEFSR0UsXG4gICAgICBOZXVyb254SW5zdGFuY2VUeXBlLklORjJfNDhYTEFSR0UsXG4gICAgXTtcbiAgICBmb3IgKGNvbnN0IGluc3RhbmNlVHlwZSBvZiBpbnN0YW5jZVR5cGVzKSB7XG4gICAgICBpZiAodHBEZWdyZWUgPD0gaW5zdGFuY2VUeXBlLmFjY2VsZXJhdG9yQ2hpcHMubmV1cm9ueENvcmVzKSB7XG4gICAgICAgIHJldHVybiBpbnN0YW5jZVR5cGU7XG4gICAgICB9XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiVGhpcyBtb2RlbCBpcyB0b28gbGFyZ2UsIEkgY2FuIG5vdCBzdXBwb3J0IHRoaXMgbW9kZWwgY3VycmVudCB2ZXJzaW9uLlwiLFxuICAgICk7XG4gIH1cbn1cbiJdfQ==
@@ -14,6 +14,12 @@ export declare class Inferentia2Chips implements IAcceleratorChips {
14
14
  readonly acceleratorMemory: Size;
15
15
  constructor(chips: number);
16
16
  }
17
+ export declare class TrainiumChips implements IAcceleratorChips {
18
+ readonly chips: number;
19
+ readonly neuronxCores: number;
20
+ readonly acceleratorMemory: Size;
21
+ constructor(chips: number);
22
+ }
17
23
  export declare class NeuronxInstanceType {
18
24
  readonly instanceType: ec2.InstanceType;
19
25
  readonly vCpu: number;
@@ -35,6 +41,14 @@ export declare class NeuronxInstanceType {
35
41
  * ml.inf2.48xlarge
36
42
  */
37
43
  static readonly INF2_48XLARGE: NeuronxInstanceType;
44
+ /**
45
+ * ml.trn1.2xlarge
46
+ */
47
+ static readonly TRN1_2XLARGE: NeuronxInstanceType;
48
+ /**
49
+ * ml.trn1.32xlarge
50
+ */
51
+ static readonly TRN1_32XLARGE: NeuronxInstanceType;
38
52
  private constructor();
39
53
  /**
40
54
  * Return the instance type as a string
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
- var _a, _b;
2
+ var _a, _b, _c;
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.NeuronxInstanceType = exports.Inferentia2Chips = void 0;
4
+ exports.NeuronxInstanceType = exports.TrainiumChips = exports.Inferentia2Chips = void 0;
5
5
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
6
  const aws_cdk_lib_1 = require("aws-cdk-lib");
7
7
  const ec2 = require("aws-cdk-lib/aws-ec2");
@@ -14,7 +14,17 @@ 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.4" };
17
+ Inferentia2Chips[_a] = { fqn: "aws-cdk-neuronx-patterns.Inferentia2Chips", version: "0.0.6" };
18
+ class TrainiumChips {
19
+ constructor(chips) {
20
+ this.chips = chips;
21
+ this.neuronxCores = chips * 2;
22
+ this.acceleratorMemory = aws_cdk_lib_1.Size.gibibytes(16 * this.neuronxCores);
23
+ }
24
+ }
25
+ exports.TrainiumChips = TrainiumChips;
26
+ _b = JSII_RTTI_SYMBOL_1;
27
+ TrainiumChips[_b] = { fqn: "aws-cdk-neuronx-patterns.TrainiumChips", version: "0.0.6" };
18
28
  class NeuronxInstanceType {
19
29
  constructor(instanceType, vCpu, memory, acceleratorChips) {
20
30
  this.instanceType = instanceType;
@@ -31,8 +41,8 @@ class NeuronxInstanceType {
31
41
  }
32
42
  }
33
43
  exports.NeuronxInstanceType = NeuronxInstanceType;
34
- _b = JSII_RTTI_SYMBOL_1;
35
- NeuronxInstanceType[_b] = { fqn: "aws-cdk-neuronx-patterns.NeuronxInstanceType", version: "0.0.4" };
44
+ _c = JSII_RTTI_SYMBOL_1;
45
+ NeuronxInstanceType[_c] = { fqn: "aws-cdk-neuronx-patterns.NeuronxInstanceType", version: "0.0.6" };
36
46
  /**
37
47
  * ml.inf2.xlarge
38
48
  */
@@ -49,4 +59,12 @@ NeuronxInstanceType.INF2_24XLARGE = new NeuronxInstanceType(ec2.InstanceType.of(
49
59
  * ml.inf2.48xlarge
50
60
  */
51
61
  NeuronxInstanceType.INF2_48XLARGE = new NeuronxInstanceType(ec2.InstanceType.of(ec2.InstanceClass.INF2, ec2.InstanceSize.XLARGE48), 192, aws_cdk_lib_1.Size.gibibytes(768), new Inferentia2Chips(12));
52
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV1cm9ueC1pbnN0YW5jZS10eXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL25ldXJvbngtaW5zdGFuY2UtdHlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZDQUFtQztBQUNuQywyQ0FBMkM7QUFXM0MsTUFBYSxnQkFBZ0I7SUFHM0IsWUFBcUIsS0FBYTtRQUFiLFVBQUssR0FBTCxLQUFLLENBQVE7UUFDaEMsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxrQkFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ2xFLENBQUM7O0FBTkgsNENBT0M7OztBQUVELE1BQWEsbUJBQW1CO0lBcUM5QixZQUNXLFlBQThCLEVBQzlCLElBQVksRUFDWixNQUFZLEVBQ1osZ0JBQW1DO1FBSG5DLGlCQUFZLEdBQVosWUFBWSxDQUFrQjtRQUM5QixTQUFJLEdBQUosSUFBSSxDQUFRO1FBQ1osV0FBTSxHQUFOLE1BQU0sQ0FBTTtRQUNaLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBbUI7SUFDM0MsQ0FBQztJQUNKOzs7T0FHRztJQUNILFFBQVE7UUFDTixPQUFPLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO0lBQzlDLENBQUM7O0FBakRILGtEQWtEQzs7O0FBakRDOztHQUVHO0FBQ29CLCtCQUFXLEdBQUcsSUFBSSxtQkFBbUIsQ0FDMUQsR0FBRyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsRUFDcEUsQ0FBQyxFQUNELGtCQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUNsQixJQUFJLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUN4QixDQUFDO0FBQ0Y7O0dBRUc7QUFDb0IsZ0NBQVksR0FBRyxJQUFJLG1CQUFtQixDQUMzRCxHQUFHLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUNyRSxFQUFFLEVBQ0Ysa0JBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQ25CLElBQUksZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQ3hCLENBQUM7QUFDRjs7R0FFRztBQUNvQixpQ0FBYSxHQUFHLElBQUksbUJBQW1CLENBQzVELEdBQUcsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEVBQ3RFLEVBQUUsRUFDRixrQkFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFDbkIsSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FDeEIsQ0FBQztBQUNGOztHQUVHO0FBQ29CLGlDQUFhLEdBQUcsSUFBSSxtQkFBbUIsQ0FDNUQsR0FBRyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsRUFDdEUsR0FBRyxFQUNILGtCQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUNuQixJQUFJLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxDQUN6QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2l6ZSB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0ICogYXMgZWMyIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWMyXCI7XG5cbi8qKlxuICpcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJQWNjZWxlcmF0b3JDaGlwcyB7XG4gIHJlYWRvbmx5IGNoaXBzOiBudW1iZXI7XG4gIHJlYWRvbmx5IG5ldXJvbnhDb3JlczogbnVtYmVyO1xuICByZWFkb25seSBhY2NlbGVyYXRvck1lbW9yeTogU2l6ZTtcbn1cblxuZXhwb3J0IGNsYXNzIEluZmVyZW50aWEyQ2hpcHMgaW1wbGVtZW50cyBJQWNjZWxlcmF0b3JDaGlwcyB7XG4gIHJlYWRvbmx5IG5ldXJvbnhDb3JlczogbnVtYmVyO1xuICByZWFkb25seSBhY2NlbGVyYXRvck1lbW9yeTogU2l6ZTtcbiAgY29uc3RydWN0b3IocmVhZG9ubHkgY2hpcHM6IG51bWJlcikge1xuICAgIHRoaXMubmV1cm9ueENvcmVzID0gY2hpcHMgKiAyO1xuICAgIHRoaXMuYWNjZWxlcmF0b3JNZW1vcnkgPSBTaXplLmdpYmlieXRlcygxNiAqIHRoaXMubmV1cm9ueENvcmVzKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTmV1cm9ueEluc3RhbmNlVHlwZSB7XG4gIC8qKlxuICAgKiBtbC5pbmYyLnhsYXJnZVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBJTkYyX1hMQVJHRSA9IG5ldyBOZXVyb254SW5zdGFuY2VUeXBlKFxuICAgIGVjMi5JbnN0YW5jZVR5cGUub2YoZWMyLkluc3RhbmNlQ2xhc3MuSU5GMiwgZWMyLkluc3RhbmNlU2l6ZS5YTEFSR0UpLFxuICAgIDQsXG4gICAgU2l6ZS5naWJpYnl0ZXMoMTYpLFxuICAgIG5ldyBJbmZlcmVudGlhMkNoaXBzKDEpLFxuICApO1xuICAvKipcbiAgICogbWwuaW5mMi44eGxhcmdlXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IElORjJfOFhMQVJHRSA9IG5ldyBOZXVyb254SW5zdGFuY2VUeXBlKFxuICAgIGVjMi5JbnN0YW5jZVR5cGUub2YoZWMyLkluc3RhbmNlQ2xhc3MuSU5GMiwgZWMyLkluc3RhbmNlU2l6ZS5YTEFSR0U4KSxcbiAgICAzMixcbiAgICBTaXplLmdpYmlieXRlcygxMjgpLFxuICAgIG5ldyBJbmZlcmVudGlhMkNoaXBzKDEpLFxuICApO1xuICAvKipcbiAgICogbWwuaW5mMi4yNHhsYXJnZVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBJTkYyXzI0WExBUkdFID0gbmV3IE5ldXJvbnhJbnN0YW5jZVR5cGUoXG4gICAgZWMyLkluc3RhbmNlVHlwZS5vZihlYzIuSW5zdGFuY2VDbGFzcy5JTkYyLCBlYzIuSW5zdGFuY2VTaXplLlhMQVJHRTI0KSxcbiAgICA5NixcbiAgICBTaXplLmdpYmlieXRlcygzODQpLFxuICAgIG5ldyBJbmZlcmVudGlhMkNoaXBzKDYpLFxuICApO1xuICAvKipcbiAgICogbWwuaW5mMi40OHhsYXJnZVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBJTkYyXzQ4WExBUkdFID0gbmV3IE5ldXJvbnhJbnN0YW5jZVR5cGUoXG4gICAgZWMyLkluc3RhbmNlVHlwZS5vZihlYzIuSW5zdGFuY2VDbGFzcy5JTkYyLCBlYzIuSW5zdGFuY2VTaXplLlhMQVJHRTQ4KSxcbiAgICAxOTIsXG4gICAgU2l6ZS5naWJpYnl0ZXMoNzY4KSxcbiAgICBuZXcgSW5mZXJlbnRpYTJDaGlwcygxMiksXG4gICk7XG4gIHByaXZhdGUgY29uc3RydWN0b3IoXG4gICAgcmVhZG9ubHkgaW5zdGFuY2VUeXBlOiBlYzIuSW5zdGFuY2VUeXBlLFxuICAgIHJlYWRvbmx5IHZDcHU6IG51bWJlcixcbiAgICByZWFkb25seSBtZW1vcnk6IFNpemUsXG4gICAgcmVhZG9ubHkgYWNjZWxlcmF0b3JDaGlwczogSUFjY2VsZXJhdG9yQ2hpcHMsXG4gICkge31cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgaW5zdGFuY2UgdHlwZSBhcyBhIHN0cmluZ1xuICAgKiBAcmV0dXJucyBUaGUgaW5zdGFuY2UgdHlwZSBhcyBhIHN0cmluZ1xuICAgKi9cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIGBtbC4ke3RoaXMuaW5zdGFuY2VUeXBlLnRvU3RyaW5nKCl9YDtcbiAgfVxufVxuIl19
62
+ /**
63
+ * ml.trn1.2xlarge
64
+ */
65
+ NeuronxInstanceType.TRN1_2XLARGE = new NeuronxInstanceType(ec2.InstanceType.of(ec2.InstanceClass.TRN1, ec2.InstanceSize.XLARGE2), 8, aws_cdk_lib_1.Size.gibibytes(32), new TrainiumChips(1));
66
+ /**
67
+ * ml.trn1.32xlarge
68
+ */
69
+ NeuronxInstanceType.TRN1_32XLARGE = new NeuronxInstanceType(ec2.InstanceType.of(ec2.InstanceClass.TRN1, ec2.InstanceSize.XLARGE32), 128, aws_cdk_lib_1.Size.gibibytes(512), new TrainiumChips(16));
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV1cm9ueC1pbnN0YW5jZS10eXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL25ldXJvbngtaW5zdGFuY2UtdHlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZDQUFtQztBQUNuQywyQ0FBMkM7QUFXM0MsTUFBYSxnQkFBZ0I7SUFHM0IsWUFBcUIsS0FBYTtRQUFiLFVBQUssR0FBTCxLQUFLLENBQVE7UUFDaEMsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxrQkFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ2xFLENBQUM7O0FBTkgsNENBT0M7OztBQUVELE1BQWEsYUFBYTtJQUd4QixZQUFxQixLQUFhO1FBQWIsVUFBSyxHQUFMLEtBQUssQ0FBUTtRQUNoQyxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLGtCQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDbEUsQ0FBQzs7QUFOSCxzQ0FPQzs7O0FBRUQsTUFBYSxtQkFBbUI7SUF1RDlCLFlBQ1csWUFBOEIsRUFDOUIsSUFBWSxFQUNaLE1BQVksRUFDWixnQkFBbUM7UUFIbkMsaUJBQVksR0FBWixZQUFZLENBQWtCO1FBQzlCLFNBQUksR0FBSixJQUFJLENBQVE7UUFDWixXQUFNLEdBQU4sTUFBTSxDQUFNO1FBQ1oscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFtQjtJQUMzQyxDQUFDO0lBQ0o7OztPQUdHO0lBQ0gsUUFBUTtRQUNOLE9BQU8sTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7SUFDOUMsQ0FBQzs7QUFuRUgsa0RBb0VDOzs7QUFuRUM7O0dBRUc7QUFDb0IsK0JBQVcsR0FBRyxJQUFJLG1CQUFtQixDQUMxRCxHQUFHLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUNwRSxDQUFDLEVBQ0Qsa0JBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQ2xCLElBQUksZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQ3hCLENBQUM7QUFDRjs7R0FFRztBQUNvQixnQ0FBWSxHQUFHLElBQUksbUJBQW1CLENBQzNELEdBQUcsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEVBQ3JFLEVBQUUsRUFDRixrQkFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFDbkIsSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FDeEIsQ0FBQztBQUNGOztHQUVHO0FBQ29CLGlDQUFhLEdBQUcsSUFBSSxtQkFBbUIsQ0FDNUQsR0FBRyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsRUFDdEUsRUFBRSxFQUNGLGtCQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUNuQixJQUFJLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUN4QixDQUFDO0FBQ0Y7O0dBRUc7QUFDb0IsaUNBQWEsR0FBRyxJQUFJLG1CQUFtQixDQUM1RCxHQUFHLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxFQUN0RSxHQUFHLEVBQ0gsa0JBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQ25CLElBQUksZ0JBQWdCLENBQUMsRUFBRSxDQUFDLENBQ3pCLENBQUM7QUFDRjs7R0FFRztBQUNvQixnQ0FBWSxHQUFHLElBQUksbUJBQW1CLENBQzNELEdBQUcsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEVBQ3JFLENBQUMsRUFDRCxrQkFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFDbEIsSUFBSSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQ3JCLENBQUM7QUFDRjs7R0FFRztBQUNvQixpQ0FBYSxHQUFHLElBQUksbUJBQW1CLENBQzVELEdBQUcsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEVBQ3RFLEdBQUcsRUFDSCxrQkFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFDbkIsSUFBSSxhQUFhLENBQUMsRUFBRSxDQUFDLENBQ3RCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTaXplIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgKiBhcyBlYzIgZnJvbSBcImF3cy1jZGstbGliL2F3cy1lYzJcIjtcblxuLyoqXG4gKlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElBY2NlbGVyYXRvckNoaXBzIHtcbiAgcmVhZG9ubHkgY2hpcHM6IG51bWJlcjtcbiAgcmVhZG9ubHkgbmV1cm9ueENvcmVzOiBudW1iZXI7XG4gIHJlYWRvbmx5IGFjY2VsZXJhdG9yTWVtb3J5OiBTaXplO1xufVxuXG5leHBvcnQgY2xhc3MgSW5mZXJlbnRpYTJDaGlwcyBpbXBsZW1lbnRzIElBY2NlbGVyYXRvckNoaXBzIHtcbiAgcmVhZG9ubHkgbmV1cm9ueENvcmVzOiBudW1iZXI7XG4gIHJlYWRvbmx5IGFjY2VsZXJhdG9yTWVtb3J5OiBTaXplO1xuICBjb25zdHJ1Y3RvcihyZWFkb25seSBjaGlwczogbnVtYmVyKSB7XG4gICAgdGhpcy5uZXVyb254Q29yZXMgPSBjaGlwcyAqIDI7XG4gICAgdGhpcy5hY2NlbGVyYXRvck1lbW9yeSA9IFNpemUuZ2liaWJ5dGVzKDE2ICogdGhpcy5uZXVyb254Q29yZXMpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUcmFpbml1bUNoaXBzIGltcGxlbWVudHMgSUFjY2VsZXJhdG9yQ2hpcHMge1xuICByZWFkb25seSBuZXVyb254Q29yZXM6IG51bWJlcjtcbiAgcmVhZG9ubHkgYWNjZWxlcmF0b3JNZW1vcnk6IFNpemU7XG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IGNoaXBzOiBudW1iZXIpIHtcbiAgICB0aGlzLm5ldXJvbnhDb3JlcyA9IGNoaXBzICogMjtcbiAgICB0aGlzLmFjY2VsZXJhdG9yTWVtb3J5ID0gU2l6ZS5naWJpYnl0ZXMoMTYgKiB0aGlzLm5ldXJvbnhDb3Jlcyk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE5ldXJvbnhJbnN0YW5jZVR5cGUge1xuICAvKipcbiAgICogbWwuaW5mMi54bGFyZ2VcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSU5GMl9YTEFSR0UgPSBuZXcgTmV1cm9ueEluc3RhbmNlVHlwZShcbiAgICBlYzIuSW5zdGFuY2VUeXBlLm9mKGVjMi5JbnN0YW5jZUNsYXNzLklORjIsIGVjMi5JbnN0YW5jZVNpemUuWExBUkdFKSxcbiAgICA0LFxuICAgIFNpemUuZ2liaWJ5dGVzKDE2KSxcbiAgICBuZXcgSW5mZXJlbnRpYTJDaGlwcygxKSxcbiAgKTtcbiAgLyoqXG4gICAqIG1sLmluZjIuOHhsYXJnZVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBJTkYyXzhYTEFSR0UgPSBuZXcgTmV1cm9ueEluc3RhbmNlVHlwZShcbiAgICBlYzIuSW5zdGFuY2VUeXBlLm9mKGVjMi5JbnN0YW5jZUNsYXNzLklORjIsIGVjMi5JbnN0YW5jZVNpemUuWExBUkdFOCksXG4gICAgMzIsXG4gICAgU2l6ZS5naWJpYnl0ZXMoMTI4KSxcbiAgICBuZXcgSW5mZXJlbnRpYTJDaGlwcygxKSxcbiAgKTtcbiAgLyoqXG4gICAqIG1sLmluZjIuMjR4bGFyZ2VcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSU5GMl8yNFhMQVJHRSA9IG5ldyBOZXVyb254SW5zdGFuY2VUeXBlKFxuICAgIGVjMi5JbnN0YW5jZVR5cGUub2YoZWMyLkluc3RhbmNlQ2xhc3MuSU5GMiwgZWMyLkluc3RhbmNlU2l6ZS5YTEFSR0UyNCksXG4gICAgOTYsXG4gICAgU2l6ZS5naWJpYnl0ZXMoMzg0KSxcbiAgICBuZXcgSW5mZXJlbnRpYTJDaGlwcyg2KSxcbiAgKTtcbiAgLyoqXG4gICAqIG1sLmluZjIuNDh4bGFyZ2VcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSU5GMl80OFhMQVJHRSA9IG5ldyBOZXVyb254SW5zdGFuY2VUeXBlKFxuICAgIGVjMi5JbnN0YW5jZVR5cGUub2YoZWMyLkluc3RhbmNlQ2xhc3MuSU5GMiwgZWMyLkluc3RhbmNlU2l6ZS5YTEFSR0U0OCksXG4gICAgMTkyLFxuICAgIFNpemUuZ2liaWJ5dGVzKDc2OCksXG4gICAgbmV3IEluZmVyZW50aWEyQ2hpcHMoMTIpLFxuICApO1xuICAvKipcbiAgICogbWwudHJuMS4yeGxhcmdlXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFRSTjFfMlhMQVJHRSA9IG5ldyBOZXVyb254SW5zdGFuY2VUeXBlKFxuICAgIGVjMi5JbnN0YW5jZVR5cGUub2YoZWMyLkluc3RhbmNlQ2xhc3MuVFJOMSwgZWMyLkluc3RhbmNlU2l6ZS5YTEFSR0UyKSxcbiAgICA4LFxuICAgIFNpemUuZ2liaWJ5dGVzKDMyKSxcbiAgICBuZXcgVHJhaW5pdW1DaGlwcygxKSxcbiAgKTtcbiAgLyoqXG4gICAqIG1sLnRybjEuMzJ4bGFyZ2VcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVFJOMV8zMlhMQVJHRSA9IG5ldyBOZXVyb254SW5zdGFuY2VUeXBlKFxuICAgIGVjMi5JbnN0YW5jZVR5cGUub2YoZWMyLkluc3RhbmNlQ2xhc3MuVFJOMSwgZWMyLkluc3RhbmNlU2l6ZS5YTEFSR0UzMiksXG4gICAgMTI4LFxuICAgIFNpemUuZ2liaWJ5dGVzKDUxMiksXG4gICAgbmV3IFRyYWluaXVtQ2hpcHMoMTYpLFxuICApO1xuICBwcml2YXRlIGNvbnN0cnVjdG9yKFxuICAgIHJlYWRvbmx5IGluc3RhbmNlVHlwZTogZWMyLkluc3RhbmNlVHlwZSxcbiAgICByZWFkb25seSB2Q3B1OiBudW1iZXIsXG4gICAgcmVhZG9ubHkgbWVtb3J5OiBTaXplLFxuICAgIHJlYWRvbmx5IGFjY2VsZXJhdG9yQ2hpcHM6IElBY2NlbGVyYXRvckNoaXBzLFxuICApIHt9XG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGluc3RhbmNlIHR5cGUgYXMgYSBzdHJpbmdcbiAgICogQHJldHVybnMgVGhlIGluc3RhbmNlIHR5cGUgYXMgYSBzdHJpbmdcbiAgICovXG4gIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiBgbWwuJHt0aGlzLmluc3RhbmNlVHlwZS50b1N0cmluZygpfWA7XG4gIH1cbn1cbiJdfQ==
@@ -58,7 +58,7 @@ class TransformersNeuronxSageMakerInferenceModelData {
58
58
  }
59
59
  exports.TransformersNeuronxSageMakerInferenceModelData = TransformersNeuronxSageMakerInferenceModelData;
60
60
  _a = JSII_RTTI_SYMBOL_1;
61
- TransformersNeuronxSageMakerInferenceModelData[_a] = { fqn: "aws-cdk-neuronx-patterns.TransformersNeuronxSageMakerInferenceModelData", version: "0.0.4" };
61
+ TransformersNeuronxSageMakerInferenceModelData[_a] = { fqn: "aws-cdk-neuronx-patterns.TransformersNeuronxSageMakerInferenceModelData", version: "0.0.6" };
62
62
  class TransformersNeuronxSageMakerRealtimeInferenceEndpoint extends constructs_1.Construct {
63
63
  constructor(scope, id, props) {
64
64
  super(scope, id);
@@ -111,7 +111,9 @@ class TransformersNeuronxSageMakerRealtimeInferenceEndpoint extends constructs_1
111
111
  (props.modelData.parameters.toBilion() * 2.5 > 512
112
112
  ? 512
113
113
  : props.modelData.parameters.toBilion() * 2.5));
114
- cfnEndpointConfig.addPropertyOverride("ProductionVariants.0.VolumeSizeInGB", volumeSize.toGibibytes());
114
+ cfnEndpointConfig.addPropertyOverride("ProductionVariants.0.VolumeSizeInGB", instanceType.toString().startsWith("ml.trn1")
115
+ ? undefined
116
+ : volumeSize.toGibibytes());
115
117
  const modelDataDownloadTimeout = props.modelDataDownloadTimeout ??
116
118
  inferenceModelDataDownloadTime(volumeSize);
117
119
  cfnEndpointConfig.addPropertyOverride("ProductionVariants.0.ModelDataDownloadTimeoutInSeconds", modelDataDownloadTimeout.toSeconds());
@@ -142,9 +144,9 @@ class TransformersNeuronxSageMakerRealtimeInferenceEndpoint extends constructs_1
142
144
  }
143
145
  exports.TransformersNeuronxSageMakerRealtimeInferenceEndpoint = TransformersNeuronxSageMakerRealtimeInferenceEndpoint;
144
146
  _b = JSII_RTTI_SYMBOL_1;
145
- TransformersNeuronxSageMakerRealtimeInferenceEndpoint[_b] = { fqn: "aws-cdk-neuronx-patterns.TransformersNeuronxSageMakerRealtimeInferenceEndpoint", version: "0.0.4" };
147
+ TransformersNeuronxSageMakerRealtimeInferenceEndpoint[_b] = { fqn: "aws-cdk-neuronx-patterns.TransformersNeuronxSageMakerRealtimeInferenceEndpoint", version: "0.0.6" };
146
148
  function inferenceModelDataDownloadTime(volumeSize) {
147
149
  const seconds = volumeSize.toGibibytes() * 15;
148
150
  return aws_cdk_lib_1.Duration.seconds(seconds < 3600 ? seconds : 3600);
149
151
  }
150
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmb3JtZXJzLW5ldXJvbngtc2FnZW1ha2VyLXJlYWx0aW1lLWluZmVyZW5jZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy90cmFuc2Zvcm1lcnMtbmV1cm9ueC1zYWdlbWFrZXItcmVhbHRpbWUtaW5mZXJlbmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsK0JBQTRCO0FBQzVCLDBEQUEwRDtBQUMxRCw2Q0FBNkM7QUFHN0MscUVBSXVDO0FBRXZDLDJDQUF1QztBQUN2QyxtQ0FBMkU7QUFFM0UsbUVBQThEO0FBQzlELHlDQUE4QztBQW1DOUMsTUFBYSw4Q0FBOEM7SUFDekQsTUFBTSxDQUFDLFVBQVUsQ0FDZixNQUFlLEVBQ2YsTUFBYyxFQUNkLE9BQW1DO1FBRW5DLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxjQUFjLEVBQUUsVUFBVSxJQUFJLElBQUksQ0FBQztRQUM5RCxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsY0FBYyxFQUFFLFVBQVUsQ0FBQztRQUN0RCxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsY0FBYyxFQUFFLFFBQVEsSUFBSSxnQkFBUSxDQUFDLFlBQVksQ0FBQztRQUMzRSxNQUFNLFFBQVEsR0FDWixPQUFPLENBQUMsY0FBYyxFQUFFLFFBQVE7WUFDaEMsSUFBQSxtQkFBWSxFQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUU7Z0JBQy9CLFVBQVU7Z0JBQ1YsVUFBVTthQUNYLENBQUMsQ0FBQztRQUNMLE9BQU8sSUFBSSw4Q0FBOEMsQ0FBQztZQUN4RCxNQUFNO1lBQ04sd0JBQXdCLEVBQUUsTUFBTTtZQUNoQyxVQUFVO1lBQ1YsVUFBVTtZQUNWLFFBQVE7WUFDUixRQUFRO1lBQ1IsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO1lBQ2xCLGFBQWEsRUFBRSxPQUFPLENBQUMsYUFBYTtZQUNwQyxVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVU7U0FDL0IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNE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Q0FBQztJQUMzQixDQUFDO0lBQ0QsV0FBVyxDQUFDLE9BQW1CO1FBQzdCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVPLDRCQUE0QixDQUFDLFFBQWdCO1FBQ25ELE1BQU0sYUFBYSxHQUFHO1lBQ3BCLDJDQUFtQixDQUFDLFlBQVk7WUFDaEMsMkNBQW1CLENBQUMsYUFBYTtZQUNqQywyQ0FBbUIsQ0FBQyxhQUFhO1NBQ2xDLENBQUM7UUFDRixLQUFLLE1BQU0sWUFBWSxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ3pDLElBQUksUUFBUSxJQUFJLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDM0QsT0FBTyxZQUFZLENBQUM7WUFDdEIsQ0FBQztRQUNILENBQUM7UUFDRCxNQUFNLElBQUksS0FBSyxDQUNiLHdFQUF3RSxDQUN6RSxDQUFDO0lBQ0osQ0FBQzs7QUExSUgsc0hBMklDOzs7QUFFRCxTQUFTLDhCQUE4QixDQUFDLFVBQWdCO0lBQ3RELE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxXQUFXLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDOUMsT0FBTyxzQkFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzNELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBqb2luIH0gZnJvbSBcInBhdGhcIjtcbmltcG9ydCAqIGFzIHNhZ2VtYWtlciBmcm9tIFwiQGF3cy1jZGsvYXdzLXNhZ2VtYWtlci1hbHBoYVwiO1xuaW1wb3J0IHsgRHVyYXRpb24sIFNpemUgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IEdyYW50LCBJR3JhbnRhYmxlIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcbmltcG9ydCB7IElCdWNrZXQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXMzXCI7XG5pbXBvcnQge1xuICBCdWNrZXREZXBsb3ltZW50LFxuICBJU291cmNlLFxuICBTb3VyY2UsXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtczMtZGVwbG95bWVudFwiO1xuaW1wb3J0IHsgQ2ZuRW5kcG9pbnRDb25maWcsIENmbk1vZGVsIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zYWdlbWFrZXJcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBDb21waWxlT3B0aW9ucywgT3B0TGV2ZWwsIFBhcmFtZXRlcnMsIFF1YW50RHR5cGUgfSBmcm9tIFwiLi9tb2RlbFwiO1xuaW1wb3J0IHsgTmV1cm9ueENvbXBpbGUgfSBmcm9tIFwiLi9uZXVyb254LWNvbXBpbGVcIjtcbmltcG9ydCB7IE5ldXJvbnhJbnN0YW5jZVR5cGUgfSBmcm9tIFwiLi9uZXVyb254LWluc3RhbmNlLXR5cGVcIjtcbmltcG9ydCB7IGNhbGNUcERlZ3JlZSB9IGZyb20gXCIuL3ByaXZhdGUvdXRpbFwiO1xuXG4vKipcbiAqIFByZWNvbXBpbGVkIG1vZGVsIG9wdGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcGlsZWRNb2RlbE9wdGlvbnMge1xuICAvKipcbiAgICogTmV1cm9ueCBjb21waWxlIG9wdGlvbnMuXG4gICAqIEBkZWZhdWx0IC0gRWFjaCBwcm9wZXJ0aWVzIGFyZSBzZXQgZGVmYXVsdC5cbiAgICovXG4gIHJlYWRvbmx5IGNvbXBpbGVPcHRpb25zPzogQ29tcGlsZU9wdGlvbnM7XG4gIC8qKlxuICAgKiBDb2RlIHVzZWQgZm9yIGluZmVyZW5jZVxuICAgKiBAZGVmYXVsdCAtIHVzaW5nIHRoZSBwcmVkZWZpbmVkIGNvZGVcbiAgICovXG4gIHJlYWRvbmx5IGNvZGU/OiBJU291cmNlO1xuICAvKipcbiAgICogTW9kZWwgSUQgb3Igc2F2ZWQgcGF0aFxuICAgKiBAZGVmYXVsdCBcIi4vbW9kZWxcIlxuICAgKi9cbiAgcmVhZG9ubHkgbW9kZWxJZE9yUGF0aD86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBwYXRoIHdoZXJlIGNvbXBpbGVkIGFydGlmYWN0cyAoaS5lLiB4eHgubmVmZikgYXJlIHN0b3JlZFxuICAgKiBAZGVmYXVsdCBcIi4vY29tcGlsZWRcIlxuICAgKi9cbiAgcmVhZG9ubHkgY29tcGlsZWRBcnRpZmFjdFBhdGg/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0Q29tcGlsZWRNb2RlbE9wdGlvbnMgZXh0ZW5kcyBDb21waWxlZE1vZGVsT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIHBhcmFtZXRlcnMgb2YgbW9kZWwuXG4gICAqL1xuICByZWFkb25seSBwYXJhbWV0ZXJzOiBQYXJhbWV0ZXJzO1xufVxuXG5leHBvcnQgY2xhc3MgVHJhbnNmb3JtZXJzTmV1cm9ueFNhZ2VNYWtlckluZmVyZW5jZU1vZGVsRGF0YSB7XG4gIHN0YXRpYyBmcm9tQnVja2V0KFxuICAgIGJ1Y2tldDogSUJ1Y2tldCxcbiAgICBwcmVmaXg6IHN0cmluZyxcbiAgICBvcHRpb25zOiBCdWNrZXRDb21waWxlZE1vZGVsT3B0aW9ucyxcbiAgKSB7XG4gICAgY29uc3QgblBvc2l0aW9ucyA9IG9wdGlvbnMuY29tcGlsZU9wdGlvbnM/Lm5Qb3NpdGlvbnMgPz8gNDA5NjtcbiAgICBjb25zdCBxdWFudER0eXBlID0gb3B0aW9ucy5jb21waWxlT3B0aW9ucz8ucXVhbnREdHlwZTtcbiAgICBjb25zdCBvcHRMZXZlbCA9IG9wdGlvbnMuY29tcGlsZU9wdGlvbnM/Lm9wdExldmVsID8/IE9wdExldmVsLkJFU1RfQkFMQU5DRTtcbiAgICBjb25zdCB0cERlZ3JlZSA9XG4gICAgICBvcHRpb25zLmNvbXBpbGVPcHRpb25zPy50cERlZ3JlZSA/P1xuICAgICAgY2FsY1RwRGVncmVlKG9wdGlvbnMucGFyYW1ldGVycywge1xuICAgICAgICBuUG9zaXRpb25zLFxuICAgICAgICBxdWFudER0eXBlLFxuICAgICAgfSk7XG4gICAgcmV0dXJuIG5ldyBUcmFuc2Zvcm1lcnNOZXVyb254U2FnZU1ha2VySW5mZXJlbmNlTW9kZWxEYXRhKHtcbiAgICAgIGJ1Y2tldCxcbiAgICAgIGNvbXBpbGVkQXJ0aWZhY3RTM1ByZWZpeDogcHJlZml4LFxuICAgICAgblBvc2l0aW9ucyxcbiAgICAgIHF1YW50RHR5cGUsXG4gICAgICBvcHRMZXZlbCxcbiAgICAgIHRwRGVncmVlLFxuICAgICAgY29kZTogb3B0aW9ucy5jb2RlLFxuICAgICAgbW9kZWxJZE9yUGF0aDogb3B0aW9ucy5tb2RlbElkT3JQYXRoLFxuICAgICAgcGFyYW1ldGVyczogb3B0aW9ucy5wYXJhbWV0ZXJzLFxuICAgIH0pO1xuICB9XG4gIHN0YXRpYyBmcm9tTmV1cm9ueENvbXBpbGUoY29tcGlsZTogTmV1cm9ueENvbXBpbGUsIGNvZGU/OiBJU291cmNlKSB7XG4gICAgcmV0dXJuIG5ldyBUcmFuc2Zvcm1lcnNOZXVyb254U2FnZU1ha2VySW5mZXJlbmNlTW9kZWxEYXRhKHtcbiAgICAgIC4uLmNvbXBpbGUsXG4gICAgICBidWNrZXQ6IGNvbXBpbGUuY29tcGlsZWRBcnRpZmFjdFMzQnVja2V0LFxuICAgICAgY29tcGlsZWRBcnRpZmFjdFMzUHJlZml4OiBjb21waWxlLmNvbXBpbGVkQXJ0aWZhY3RTM1ByZWZpeCxcbiAgICAgIGNvZGUsXG4gICAgfSk7XG4gIH1cbiAgcmVhZG9ubHkgYnVja2V0OiBJQnVja2V0O1xuICByZWFkb25seSBjb21waWxlZEFydGlmYWN0UzNQcmVmaXg6IHN0cmluZztcbiAgcmVhZG9ubHkgY29kZTogSVNvdXJjZTtcbiAgcmVhZG9ubHkgdHBEZWdyZWU6IG51bWJlcjtcbiAgcmVhZG9ubHkgcXVhbnREdHlwZT86IFF1YW50RHR5cGU7XG4gIHJlYWRvbmx5IG5Qb3NpdGlvbnM6IG51bWJlcjtcbiAgcmVhZG9ubHkgb3B0TGV2ZWw6IE9wdExldmVsO1xuICByZWFkb25seSBtb2RlbElkT3JQYXRoPzogc3RyaW5nO1xuICByZWFkb25seSBjb21waWxlZEFydGlmYWN0UGF0aD86IHN0cmluZztcbiAgcmVhZG9ubHkgcGFyYW1ldGVyczogUGFyYW1ldGVycztcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKG9wdGlvbnM6IHtcbiAgICByZWFkb25seSBidWNrZXQ6IElCdWNrZXQ7XG4gICAgcmVhZG9ubHkgY29tcGlsZWRBcnRpZmFjdFMzUHJlZml4OiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgdHBEZWdyZWU6IG51bWJlcjtcbiAgICByZWFkb25seSBxdWFudER0eXBlPzogUXVhbnREdHlwZTtcbiAgICByZWFkb25seSBuUG9zaXRpb25zOiBudW1iZXI7XG4gICAgcmVhZG9ubHkgb3B0TGV2ZWw6IE9wdExldmVsO1xuICAgIHJlYWRvbmx5IGNvZGU/OiBJU291cmNlO1xuICAgIHJlYWRvbmx5IG1vZGVsSWRPclBhdGg/OiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgY29tcGlsZWRBcnRpZmFjdFBhdGg/OiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgcGFyYW1ldGVyczogUGFyYW1ldGVycztcbiAgfSkge1xuICAgIHRoaXMuYnVja2V0ID0gb3B0aW9ucy5idWNrZXQ7XG4gICAgdGhpcy5jb21waWxlZEFydGlmYWN0UzNQcmVmaXggPSBvcHRpb25zLmNvbXBpbGVkQXJ0aWZhY3RTM1ByZWZpeDtcbiAgICB0aGlzLmNvZGUgPVxuICAgICAgb3B0aW9ucy5jb2RlID8/XG4gICAgICBTb3VyY2UuYXNzZXQoXG4gICAgICAgIGpvaW4oX19kaXJuYW1lLCBcIi4uL3NjcmlwdHMvaW5mZXJlbmNlL3RyYW5zZm9ybWVycy1uZXVyb254L2NvZGVcIiksXG4gICAgICApO1xuICAgIHRoaXMudHBEZWdyZWUgPSBvcHRpb25zLnRwRGVncmVlO1xuICAgIHRoaXMucXVhbnREdHlwZSA9IG9wdGlvbnMucXVhbnREdHlwZTtcbiAgICB0aGlzLm5Qb3NpdGlvbnMgPSBvcHRpb25zLm5Qb3NpdGlvbnM7XG4gICAgdGhpcy5vcHRMZXZlbCA9IG9wdGlvbnMub3B0TGV2ZWw7XG4gICAgdGhpcy5tb2RlbElkT3JQYXRoID0gb3B0aW9ucy5tb2RlbElkT3JQYXRoO1xuICAgIHRoaXMuY29tcGlsZWRBcnRpZmFjdFBhdGggPSBvcHRpb25zLmNvbXBpbGVkQXJ0aWZhY3RQYXRoO1xuICAgIHRoaXMucGFyYW1ldGVycyA9IG9wdGlvbnMucGFyYW1ldGVycztcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zZm9ybWVyc05ldXJvbnhTYWdlTWFrZXJSZWFsdGltZUluZmVyZW5jZUVuZHBvaW50UHJvcHMge1xuICAvKipcbiAgICogTW9kZWwgZGF0YSBmb3IgU2FnZU1ha2VyIGluZmVyZW5jZS5cbiAgICogVGhlIG1vZGVsIGRhdGEgcmVxdWlyZXMgYXQgbGVhc3QgY29tcGlsZWQgYXJ0aWZhY3RzLlxuICAgKi9cbiAgcmVhZG9ubHkgbW9kZWxEYXRhOiBUcmFuc2Zvcm1lcnNOZXVyb254U2FnZU1ha2VySW5mZXJlbmNlTW9kZWxEYXRhO1xuICAvKipcbiAgICogQW4gaW1hZ2Ugb2YgdGhlIGNvbnRhaW5lciB3aGVyZSB0aGUgaW5mZXJlbmNlIGpvYiBpcyBleGVjdXRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGltYWdlPzogc2FnZW1ha2VyLkNvbnRhaW5lckltYWdlO1xuICAvKipcbiAgICogQSBtYXAgb2YgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIHBhc3MgaW50byB0aGUgY29udGFpbmVyLlxuICAgKiBAZGVmYXVsdCAtIE9ubHkgdGhlIHByZWRlZmluZWQgZW52aXJvbm1lbnQgdmFyaWFibGVzIHJlcXVpcmVkIHRvIHVzZSBOZXVyb254IGhhdmUgYmVlbiBzZXQuXG4gICAqL1xuICByZWFkb25seSBlbnZpcm9ubWVudD86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG4gIC8qKlxuICAgKiBUaGUgaW5zdGFuY2UgdHlwZSBvZiBjb21waWxlIHdvcmtlciBpbnN0YW5jZS5cbiAgICogQGRlZmF1bHQgLSBJdCBpcyBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHkgYWNjb3JkaW5nIHRvIHRoZSBudW1iZXIgb2YgbW9kZWwgcGFyYW1ldGVycyBhbmQgY29tcGlsYXRpb24gb3B0aW9ucy5cbiAgICovXG4gIHJlYWRvbmx5IGluc3RhbmNlVHlwZT86IE5ldXJvbnhJbnN0YW5jZVR5cGU7XG4gIC8qKlxuICAgKiBUaGUgc2l6ZSwgb2YgdGhlIE1MIHN0b3JhZ2Ugdm9sdW1lIGF0dGFjaGVkIHRvIGluZGl2aWR1YWwgaW5mZXJlbmNlIGluc3RhbmNlIGFzc29jaWF0ZWQgd2l0aCB0aGUgcHJvZHVjdGlvbiB2YXJpYW50LlxuICAgKiBDdXJyZW50bHkgb25seSBBbWF6b24gRUJTIGdwMiBzdG9yYWdlIHZvbHVtZXMgYXJlIHN1cHBvcnRlZC5cbiAgICogQHNlZSBodHRwczovL2F3cy5hbWF6b24uY29tL2pwL3JlbGVhc2Vub3Rlcy9ob3N0LWluc3RhbmNlLXN0b3JhZ2Utdm9sdW1lcy10YWJsZVxuICAgKiBAZGVmYXVsdCAtIDIuNSBHQiBwZXIgYmlsbGlvbiBwYXJhbWV0ZXIgKE1heCA1MTIgR0IpXG4gICAqL1xuICByZWFkb25seSB2b2x1bWVTaXplPzogU2l6ZTtcbiAgLyoqXG4gICAqIFRoZSB0aW1lb3V0IHZhbHVlLCB0byBkb3dubG9hZCBhbmQgZXh0cmFjdCB0aGUgbW9kZWwgdGhhdCB5b3Ugd2FudCB0byBob3N0IGZyb20gQW1hem9uIFMzXG4gICAqIHRvIHRoZSBpbmRpdmlkdWFsIGluZmVyZW5jZSBpbnN0YW5jZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBwcm9kdWN0aW9uIHZhcmlhbnQuXG4gICAqIEBkZWZhdWx0IC0gNjAgc2Vjb25kcywgd2hlbiBgdm9sdW1lU2l6ZWAgbGFyZ2VyIHRoYW4gMzBHQiB0aGVuIDFHQiB4IDE1IHNlY29uZHMgKG1heCA2MCBtaW51dGVzKVxuICAgKi9cbiAgcmVhZG9ubHkgbW9kZWxEYXRhRG93bmxvYWRUaW1lb3V0PzogRHVyYXRpb247XG4gIC8qKlxuICAgKiBUaGUgdGltZW91dCB2YWx1ZSwgZm9yIHlvdXIgaW5mZXJlbmNlIGNvbnRhaW5lciB0byBwYXNzIGhlYWx0aCBjaGVjayBieSBTYWdlTWFrZXIgSG9zdGluZy5cbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc2FnZW1ha2VyL2xhdGVzdC9kZy95b3VyLWFsZ29yaXRobXMtaW5mZXJlbmNlLWNvZGUuaHRtbCN5b3VyLWFsZ29yaXRobXMtaW5mZXJlbmNlLWFsZ28tcGluZy1yZXF1ZXN0c1xuICAgKiBAZGVmYXVsdCAtIDYwIHNlY29uZHMsIHdoZW4gc2V0IHRoZSBgbW9kZWxEYXRhRG93bmxvYWRUaW1lb3V0YCB0aGVuIHVzZSBzYW1lIHZhbHVlIChtYXggNjAgbWludXRlcylcbiAgICovXG4gIHJlYWRvbmx5IGNvbnRhaW5lclN0YXJ0dXBIZWFsdGhDaGVja1RpbWVvdXQ/OiBEdXJhdGlvbjtcbn1cblxuZXhwb3J0IGNsYXNzIFRyYW5zZm9ybWVyc05ldXJvbnhTYWdlTWFrZXJSZWFsdGltZUluZmVyZW5jZUVuZHBvaW50IGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIGVuZHBvaW50LlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBlbmRwb2ludEFybjogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGVuZHBvaW50LlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBlbmRwb2ludE5hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBlbmRwb2ludDogc2FnZW1ha2VyLkVuZHBvaW50O1xuICBjb25zdHJ1Y3RvcihcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IFRyYW5zZm9ybWVyc05ldXJvbnhTYWdlTWFrZXJSZWFsdGltZUluZmVyZW5jZUVuZHBvaW50UHJvcHMsXG4gICkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgY29uc3QgaW1hZ2UgPVxuICAgICAgcHJvcHMuaW1hZ2UgPz9cbiAgICAgIHNhZ2VtYWtlci5Db250YWluZXJJbWFnZS5mcm9tQXNzZXQoXG4gICAgICAgIGpvaW4oX19kaXJuYW1lLCBcIi4uL3NjcmlwdHMvaW5mZXJlbmNlL3RyYW5zZm9ybWVycy1uZXVyb254XCIpLFxuICAgICAgKTtcbiAgICBjb25zdCBpbnN0YW5jZVR5cGUgPVxuICAgICAgcHJvcHMuaW5zdGFuY2VUeXBlID8/XG4gICAgICB0aGlzLnNlbGVjdEluc3RhbmNlVHlwZUJ5VHBEZWdyZWUocHJvcHMubW9kZWxEYXRhLnRwRGVncmVlKTtcbiAgICBjb25zdCBkZXBsb3kgPSBuZXcgQnVja2V0RGVwbG95bWVudCh0aGlzLCBcIkNvZGVEZXBsb3ltZW50XCIsIHtcbiAgICAgIGRlc3RpbmF0aW9uQnVja2V0OiBwcm9wcy5tb2RlbERhdGEuYnVja2V0LFxuICAgICAgc291cmNlczogW3Byb3BzLm1vZGVsRGF0YS5jb2RlXSxcbiAgICAgIGRlc3RpbmF0aW9uS2V5UHJlZml4OiBqb2luKFxuICAgICAgICBwcm9wcy5tb2RlbERhdGEuY29tcGlsZWRBcnRpZmFjdFMzUHJlZml4LFxuICAgICAgICBcImNvZGVcIixcbiAgICAgICksXG4gICAgfSk7XG4gICAgY29uc3QgbW9kZWwgPSBuZXcgc2FnZW1ha2VyLk1vZGVsKHRoaXMsIFwiTW9kZWxcIiwge1xuICAgICAgY29udGFpbmVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgaW1hZ2UsXG4gICAgICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgICAgIE5FVVJPTl9SVF9OVU1fQ09SRVM6IHByb3BzLm1vZGVsRGF0YS50cERlZ3JlZS50b1N0cmluZygpLFxuICAgICAgICAgICAgVFNfREVGQVVMVF9SRVNQT05TRV9USU1FT1VUOiAoNjAgKiA2MCkudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIFRTX0RFRkFVTFRfV09SS0VSU19QRVJfTU9ERUw6IE1hdGguZmxvb3IoXG4gICAgICAgICAgICAgIGluc3RhbmNlVHlwZS5hY2NlbGVyYXRvckNoaXBzLm5ldXJvbnhDb3JlcyAvXG4gICAgICAgICAgICAgICAgcHJvcHMubW9kZWxEYXRhLnRwRGVncmVlLFxuICAgICAgICAgICAgKS50b1N0cmluZygpLFxuICAgICAgICAgICAgTU9ERUw6IHByb3BzLm1vZGVsRGF0YS5tb2RlbElkT3JQYXRoID8/IFwiLi9tb2RlbFwiLFxuICAgICAgICAgICAgQ09NUElMRURfQVJUSUZBQ1Q6XG4gICAgICAgICAgICAgIHByb3BzLm1vZGVsRGF0YS5jb21waWxlZEFydGlmYWN0UGF0aCA/PyBcIi4vY29tcGlsZWRcIixcbiAgICAgICAgICAgIFRQX0RFR1JFRTogcHJvcHMubW9kZWxEYXRhLnRwRGVncmVlLnRvU3RyaW5nKCksXG4gICAgICAgICAgICBOX1BPU0lUSU9OUzogcHJvcHMubW9kZWxEYXRhLm5Qb3NpdGlvbnMudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIE9QVF9MRVZFTDogcHJvcHMubW9kZWxEYXRhLm9wdExldmVsLnRvU3RyaW5nKCksXG4gICAgICAgICAgICBRVUFOVF9EVFlQRTogcHJvcHMubW9kZWxEYXRhLnF1YW50RHR5cGU/LnRvU3RyaW5nKCkgPz8gXCJcIixcbiAgICAgICAgICAgIC4uLnByb3BzLmVudmlyb25tZW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuICAgIGNvbnN0IGNmbk1vZGVsID0gbW9kZWwubm9kZS5maW5kQ2hpbGQoXCJNb2RlbFwiKSBhcyBDZm5Nb2RlbDtcbiAgICBjZm5Nb2RlbC5hZGRQcm9wZXJ0eU92ZXJyaWRlKFxuICAgICAgXCJQcmltYXJ5Q29udGFpbmVyLk1vZGVsRGF0YVNvdXJjZS5TM0RhdGFTb3VyY2UuUzNVcmlcIixcbiAgICAgIHByb3BzLm1vZGVsRGF0YS5idWNrZXQuczNVcmxGb3JPYmplY3QoXG4gICAgICAgIHByb3BzLm1vZGVsRGF0YS5jb21waWxlZEFydGlmYWN0UzNQcmVmaXgsXG4gICAgICApLFxuICAgICk7XG4gICAgY2ZuTW9kZWwuYWRkUHJvcGVydHlPdmVycmlkZShcbiAgICAgIFwiUHJpbWFyeUNvbnRhaW5lci5Nb2RlbERhdGFTb3VyY2UuUzNEYXRhU291cmNlLlMzRGF0YVR5cGVcIixcbiAgICAgIFwiUzNQcmVmaXhcIixcbiAgICApO1xuICAgIGNmbk1vZGVsLmFkZFByb3BlcnR5T3ZlcnJpZGUoXG4gICAgICBcIlByaW1hcnlDb250YWluZXIuTW9kZWxEYXRhU291cmNlLlMzRGF0YVNvdXJjZS5Db21wcmVzc2lvblR5cGVcIixcbiAgICAgIFwiTm9uZVwiLFxuICAgICk7XG4gICAgcHJvcHMubW9kZWxEYXRhLmJ1Y2tldC5ncmFudFJlYWQobW9kZWwpO1xuICAgIG1vZGVsLm5vZGUuYWRkRGVwZW5kZW5jeShkZXBsb3kpO1xuICAgIGNvbnN0IGVuZHBvaW50Q29uZmlnID0gbmV3IHNhZ2VtYWtlci5FbmRwb2ludENvbmZpZyhcbiAgICAgIHRoaXMsXG4gICAgICBcIkVuZHBvaW50Q29uZmlnXCIsXG4gICAgICB7XG4gICAgICAgIGluc3RhbmNlUHJvZHVjdGlvblZhcmlhbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbW9kZWwsXG4gICAgICAgICAgICB2YXJpYW50TmFtZTogXCJQcmltYXJ5VmFyaWFudFwiLFxuICAgICAgICAgICAgaW5zdGFuY2VUeXBlOiBzYWdlbWFrZXIuSW5zdGFuY2VUeXBlLm9mKGluc3RhbmNlVHlwZS50b1N0cmluZygpKSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICApO1xuICAgIGNvbnN0IGNmbkVuZHBvaW50Q29uZmlnID0gZW5kcG9pbnRDb25maWcubm9kZS5maW5kQ2hpbGQoXG4gICAgICBcIkVuZHBvaW50Q29uZmlnXCIsXG4gICAgKSBhcyBDZm5FbmRwb2ludENvbmZpZztcbiAgICBjb25zdCB2b2x1bWVTaXplID0gU2l6ZS5naWJpYnl0ZXMoXG4gICAgICBwcm9wcy52b2x1bWVTaXplPy50b0dpYmlieXRlcygpID8/XG4gICAgICAgIChwcm9wcy5tb2RlbERhdGEucGFyYW1ldGVycy50b0JpbGlvbigpICogMi41ID4gNTEyXG4gICAgICAgICAgPyA1MTJcbiAgICAgICAgICA6IHByb3BzLm1vZGVsRGF0YS5wYXJhbWV0ZXJzLnRvQmlsaW9uKCkgKiAyLjUpLFxuICAgICk7XG4gICAgY2ZuRW5kcG9pbnRDb25maWcuYWRkUHJvcGVydHlPdmVycmlkZShcbiAgICAgIFwiUHJvZHVjdGlvblZhcmlhbnRzLjAuVm9sdW1lU2l6ZUluR0JcIixcbiAgICAgIHZvbHVtZVNpemUudG9HaWJpYnl0ZXMoKSxcbiAgICApO1xuICAgIGNvbnN0IG1vZGVsRGF0YURvd25sb2FkVGltZW91dCA9XG4gICAgICBwcm9wcy5tb2RlbERhdGFEb3dubG9hZFRpbWVvdXQgPz9cbiAgICAgIGluZmVyZW5jZU1vZGVsRGF0YURvd25sb2FkVGltZSh2b2x1bWVTaXplKTtcbiAgICBjZm5FbmRwb2ludENvbmZpZy5hZGRQcm9wZXJ0eU92ZXJyaWRlKFxuICAgICAgXCJQcm9kdWN0aW9uVmFyaWFudHMuMC5Nb2RlbERhdGFEb3dubG9hZFRpbWVvdXRJblNlY29uZHNcIixcbiAgICAgIG1vZGVsRGF0YURvd25sb2FkVGltZW91dC50b1NlY29uZHMoKSxcbiAgICApO1xuICAgIGNmbkVuZHBvaW50Q29uZmlnLmFkZFByb3BlcnR5T3ZlcnJpZGUoXG4gICAgICBcIlByb2R1Y3Rpb25WYXJpYW50cy4wLkNvbnRhaW5lclN0YXJ0dXBIZWFsdGhDaGVja1RpbWVvdXRJblNlY29uZHNcIixcbiAgICAgIChcbiAgICAgICAgcHJvcHMuY29udGFpbmVyU3RhcnR1cEhlYWx0aENoZWNrVGltZW91dCA/PyBtb2RlbERhdGFEb3dubG9hZFRpbWVvdXRcbiAgICAgICkudG9TZWNvbmRzKCksXG4gICAgKTtcbiAgICBjb25zdCBlbmRwb2ludCA9IG5ldyBzYWdlbWFrZXIuRW5kcG9pbnQodGhpcywgXCJFbmRwb2ludFwiLCB7XG4gICAgICBlbmRwb2ludENvbmZpZyxcbiAgICB9KTtcbiAgICB0aGlzLmVuZHBvaW50QXJuID0gZW5kcG9pbnQuZW5kcG9pbnRBcm47XG4gICAgdGhpcy5lbmRwb2ludE5hbWUgPSBlbmRwb2ludC5lbmRwb2ludE5hbWU7XG4gICAgdGhpcy5lbmRwb2ludCA9IGVuZHBvaW50O1xuICB9XG4gIGdyYW50SW52b2tlKGdyYW50ZWU6IElHcmFudGFibGUpOiBHcmFudCB7XG4gICAgcmV0dXJuIHRoaXMuZW5kcG9pbnQuZ3JhbnRJbnZva2UoZ3JhbnRlZSk7XG4gIH1cblxuICBwcml2YXRlIHNlbGVjdEluc3RhbmNlVHlwZUJ5VHBEZWdyZWUodHBEZWdyZWU6IG51bWJlcikge1xuICAgIGNvbnN0IGluc3RhbmNlVHlwZXMgPSBbXG4gICAgICBOZXVyb254SW5zdGFuY2VUeXBlLklORjJfOFhMQVJHRSxcbiAgICAgIE5ldXJvbnhJbnN0YW5jZVR5cGUuSU5GMl8yNFhMQVJHRSxcbiAgICAgIE5ldXJvbnhJbnN0YW5jZVR5cGUuSU5GMl80OFhMQVJHRSxcbiAgICBdO1xuICAgIGZvciAoY29uc3QgaW5zdGFuY2VUeXBlIG9mIGluc3RhbmNlVHlwZXMpIHtcbiAgICAgIGlmICh0cERlZ3JlZSA8PSBpbnN0YW5jZVR5cGUuYWNjZWxlcmF0b3JDaGlwcy5uZXVyb254Q29yZXMpIHtcbiAgICAgICAgcmV0dXJuIGluc3RhbmNlVHlwZTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJUaGlzIG1vZGVsIGlzIHRvbyBsYXJnZSwgSSBjYW4gbm90IHN1cHBvcnQgdGhpcyBtb2RlbCBjdXJyZW50IHZlcnNpb24uXCIsXG4gICAgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbmZlcmVuY2VNb2RlbERhdGFEb3dubG9hZFRpbWUodm9sdW1lU2l6ZTogU2l6ZSkge1xuICBjb25zdCBzZWNvbmRzID0gdm9sdW1lU2l6ZS50b0dpYmlieXRlcygpICogMTU7XG4gIHJldHVybiBEdXJhdGlvbi5zZWNvbmRzKHNlY29uZHMgPCAzNjAwID8gc2Vjb25kcyA6IDM2MDApO1xufVxuIl19
152
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmb3JtZXJzLW5ldXJvbngtc2FnZW1ha2VyLXJlYWx0aW1lLWluZmVyZW5jZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy90cmFuc2Zvcm1lcnMtbmV1cm9ueC1zYWdlbWFrZXItcmVhbHRpbWUtaW5mZXJlbmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsK0JBQTRCO0FBQzVCLDBEQUEwRDtBQUMxRCw2Q0FBNkM7QUFHN0MscUVBSXVDO0FBRXZDLDJDQUF1QztBQUN2QyxtQ0FBMkU7QUFFM0UsbUVBQThEO0FBQzlELHlDQUE4QztBQW1DOUMsTUFBYSw4Q0FBOEM7SUFDekQsTUFBTSxDQUFDLFVBQVUsQ0FDZixNQUFlLEVBQ2YsTUFBYyxFQUNkLE9BQW1DO1FBRW5DLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxjQUFjLEVBQUUsVUFBVSxJQUFJLElBQUksQ0FBQztRQUM5RCxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsY0FBYyxFQUFFLFVBQVUsQ0FBQztRQUN0RCxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsY0FBYyxFQUFFLFFBQVEsSUFBSSxnQkFBUSxDQUFDLFlBQVksQ0FBQztRQUMzRSxNQUFNLFFBQVEsR0FDWixPQUFPLENBQUMsY0FBYyxFQUFFLFFBQVE7WUFDaEMsSUFBQSxtQkFBWSxFQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUU7Z0JBQy9CLFVBQVU7Z0JBQ1YsVUFBVTthQUNYLENBQUMsQ0FBQztRQUNMLE9BQU8sSUFBSSw4Q0FBOEMsQ0FBQztZQUN4RCxNQUFNO1lBQ04sd0JBQXdCLEVBQUUsTUFBTTtZQUNoQyxVQUFVO1lBQ1YsVUFBVTtZQUNWLFFBQVE7WUFDUixRQUFRO1lBQ1IsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO1lBQ2xCLGFBQWEsRUFBRSxPQUFPLENBQUMsYUFBYTtZQUNwQyxVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVU7U0FDL0IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNE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QUFDO1FBQ3hDLElBQUksQ0FBQyxZQUFZLEdBQUcsUUFBUSxDQUFDLFlBQVksQ0FBQztRQUMxQyxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztJQUMzQixDQUFDO0lBQ0QsV0FBVyxDQUFDLE9BQW1CO1FBQzdCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVPLDRCQUE0QixDQUFDLFFBQWdCO1FBQ25ELE1BQU0sYUFBYSxHQUFHO1lBQ3BCLDJDQUFtQixDQUFDLFlBQVk7WUFDaEMsMkNBQW1CLENBQUMsYUFBYTtZQUNqQywyQ0FBbUIsQ0FBQyxhQUFhO1NBQ2xDLENBQUM7UUFDRixLQUFLLE1BQU0sWUFBWSxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ3pDLElBQUksUUFBUSxJQUFJLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDM0QsT0FBTyxZQUFZLENBQUM7WUFDdEIsQ0FBQztRQUNILENBQUM7UUFDRCxNQUFNLElBQUksS0FBSyxDQUNiLHdFQUF3RSxDQUN6RSxDQUFDO0lBQ0osQ0FBQzs7QUE1SUgsc0hBNklDOzs7QUFFRCxTQUFTLDhCQUE4QixDQUFDLFVBQWdCO0lBQ3RELE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxXQUFXLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDOUMsT0FBTyxzQkFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzNELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBqb2luIH0gZnJvbSBcInBhdGhcIjtcbmltcG9ydCAqIGFzIHNhZ2VtYWtlciBmcm9tIFwiQGF3cy1jZGsvYXdzLXNhZ2VtYWtlci1hbHBoYVwiO1xuaW1wb3J0IHsgRHVyYXRpb24sIFNpemUgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IEdyYW50LCBJR3JhbnRhYmxlIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcbmltcG9ydCB7IElCdWNrZXQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXMzXCI7XG5pbXBvcnQge1xuICBCdWNrZXREZXBsb3ltZW50LFxuICBJU291cmNlLFxuICBTb3VyY2UsXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtczMtZGVwbG95bWVudFwiO1xuaW1wb3J0IHsgQ2ZuRW5kcG9pbnRDb25maWcsIENmbk1vZGVsIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zYWdlbWFrZXJcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBDb21waWxlT3B0aW9ucywgT3B0TGV2ZWwsIFBhcmFtZXRlcnMsIFF1YW50RHR5cGUgfSBmcm9tIFwiLi9tb2RlbFwiO1xuaW1wb3J0IHsgTmV1cm9ueENvbXBpbGUgfSBmcm9tIFwiLi9uZXVyb254LWNvbXBpbGVcIjtcbmltcG9ydCB7IE5ldXJvbnhJbnN0YW5jZVR5cGUgfSBmcm9tIFwiLi9uZXVyb254LWluc3RhbmNlLXR5cGVcIjtcbmltcG9ydCB7IGNhbGNUcERlZ3JlZSB9IGZyb20gXCIuL3ByaXZhdGUvdXRpbFwiO1xuXG4vKipcbiAqIFByZWNvbXBpbGVkIG1vZGVsIG9wdGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcGlsZWRNb2RlbE9wdGlvbnMge1xuICAvKipcbiAgICogTmV1cm9ueCBjb21waWxlIG9wdGlvbnMuXG4gICAqIEBkZWZhdWx0IC0gRWFjaCBwcm9wZXJ0aWVzIGFyZSBzZXQgZGVmYXVsdC5cbiAgICovXG4gIHJlYWRvbmx5IGNvbXBpbGVPcHRpb25zPzogQ29tcGlsZU9wdGlvbnM7XG4gIC8qKlxuICAgKiBDb2RlIHVzZWQgZm9yIGluZmVyZW5jZVxuICAgKiBAZGVmYXVsdCAtIHVzaW5nIHRoZSBwcmVkZWZpbmVkIGNvZGVcbiAgICovXG4gIHJlYWRvbmx5IGNvZGU/OiBJU291cmNlO1xuICAvKipcbiAgICogTW9kZWwgSUQgb3Igc2F2ZWQgcGF0aFxuICAgKiBAZGVmYXVsdCBcIi4vbW9kZWxcIlxuICAgKi9cbiAgcmVhZG9ubHkgbW9kZWxJZE9yUGF0aD86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBwYXRoIHdoZXJlIGNvbXBpbGVkIGFydGlmYWN0cyAoaS5lLiB4eHgubmVmZikgYXJlIHN0b3JlZFxuICAgKiBAZGVmYXVsdCBcIi4vY29tcGlsZWRcIlxuICAgKi9cbiAgcmVhZG9ubHkgY29tcGlsZWRBcnRpZmFjdFBhdGg/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0Q29tcGlsZWRNb2RlbE9wdGlvbnMgZXh0ZW5kcyBDb21waWxlZE1vZGVsT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIHBhcmFtZXRlcnMgb2YgbW9kZWwuXG4gICAqL1xuICByZWFkb25seSBwYXJhbWV0ZXJzOiBQYXJhbWV0ZXJzO1xufVxuXG5leHBvcnQgY2xhc3MgVHJhbnNmb3JtZXJzTmV1cm9ueFNhZ2VNYWtlckluZmVyZW5jZU1vZGVsRGF0YSB7XG4gIHN0YXRpYyBmcm9tQnVja2V0KFxuICAgIGJ1Y2tldDogSUJ1Y2tldCxcbiAgICBwcmVmaXg6IHN0cmluZyxcbiAgICBvcHRpb25zOiBCdWNrZXRDb21waWxlZE1vZGVsT3B0aW9ucyxcbiAgKSB7XG4gICAgY29uc3QgblBvc2l0aW9ucyA9IG9wdGlvbnMuY29tcGlsZU9wdGlvbnM/Lm5Qb3NpdGlvbnMgPz8gNDA5NjtcbiAgICBjb25zdCBxdWFudER0eXBlID0gb3B0aW9ucy5jb21waWxlT3B0aW9ucz8ucXVhbnREdHlwZTtcbiAgICBjb25zdCBvcHRMZXZlbCA9IG9wdGlvbnMuY29tcGlsZU9wdGlvbnM/Lm9wdExldmVsID8/IE9wdExldmVsLkJFU1RfQkFMQU5DRTtcbiAgICBjb25zdCB0cERlZ3JlZSA9XG4gICAgICBvcHRpb25zLmNvbXBpbGVPcHRpb25zPy50cERlZ3JlZSA/P1xuICAgICAgY2FsY1RwRGVncmVlKG9wdGlvbnMucGFyYW1ldGVycywge1xuICAgICAgICBuUG9zaXRpb25zLFxuICAgICAgICBxdWFudER0eXBlLFxuICAgICAgfSk7XG4gICAgcmV0dXJuIG5ldyBUcmFuc2Zvcm1lcnNOZXVyb254U2FnZU1ha2VySW5mZXJlbmNlTW9kZWxEYXRhKHtcbiAgICAgIGJ1Y2tldCxcbiAgICAgIGNvbXBpbGVkQXJ0aWZhY3RTM1ByZWZpeDogcHJlZml4LFxuICAgICAgblBvc2l0aW9ucyxcbiAgICAgIHF1YW50RHR5cGUsXG4gICAgICBvcHRMZXZlbCxcbiAgICAgIHRwRGVncmVlLFxuICAgICAgY29kZTogb3B0aW9ucy5jb2RlLFxuICAgICAgbW9kZWxJZE9yUGF0aDogb3B0aW9ucy5tb2RlbElkT3JQYXRoLFxuICAgICAgcGFyYW1ldGVyczogb3B0aW9ucy5wYXJhbWV0ZXJzLFxuICAgIH0pO1xuICB9XG4gIHN0YXRpYyBmcm9tTmV1cm9ueENvbXBpbGUoY29tcGlsZTogTmV1cm9ueENvbXBpbGUsIGNvZGU/OiBJU291cmNlKSB7XG4gICAgcmV0dXJuIG5ldyBUcmFuc2Zvcm1lcnNOZXVyb254U2FnZU1ha2VySW5mZXJlbmNlTW9kZWxEYXRhKHtcbiAgICAgIC4uLmNvbXBpbGUsXG4gICAgICBidWNrZXQ6IGNvbXBpbGUuY29tcGlsZWRBcnRpZmFjdFMzQnVja2V0LFxuICAgICAgY29tcGlsZWRBcnRpZmFjdFMzUHJlZml4OiBjb21waWxlLmNvbXBpbGVkQXJ0aWZhY3RTM1ByZWZpeCxcbiAgICAgIGNvZGUsXG4gICAgfSk7XG4gIH1cbiAgcmVhZG9ubHkgYnVja2V0OiBJQnVja2V0O1xuICByZWFkb25seSBjb21waWxlZEFydGlmYWN0UzNQcmVmaXg6IHN0cmluZztcbiAgcmVhZG9ubHkgY29kZTogSVNvdXJjZTtcbiAgcmVhZG9ubHkgdHBEZWdyZWU6IG51bWJlcjtcbiAgcmVhZG9ubHkgcXVhbnREdHlwZT86IFF1YW50RHR5cGU7XG4gIHJlYWRvbmx5IG5Qb3NpdGlvbnM6IG51bWJlcjtcbiAgcmVhZG9ubHkgb3B0TGV2ZWw6IE9wdExldmVsO1xuICByZWFkb25seSBtb2RlbElkT3JQYXRoPzogc3RyaW5nO1xuICByZWFkb25seSBjb21waWxlZEFydGlmYWN0UGF0aD86IHN0cmluZztcbiAgcmVhZG9ubHkgcGFyYW1ldGVyczogUGFyYW1ldGVycztcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKG9wdGlvbnM6IHtcbiAgICByZWFkb25seSBidWNrZXQ6IElCdWNrZXQ7XG4gICAgcmVhZG9ubHkgY29tcGlsZWRBcnRpZmFjdFMzUHJlZml4OiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgdHBEZWdyZWU6IG51bWJlcjtcbiAgICByZWFkb25seSBxdWFudER0eXBlPzogUXVhbnREdHlwZTtcbiAgICByZWFkb25seSBuUG9zaXRpb25zOiBudW1iZXI7XG4gICAgcmVhZG9ubHkgb3B0TGV2ZWw6IE9wdExldmVsO1xuICAgIHJlYWRvbmx5IGNvZGU/OiBJU291cmNlO1xuICAgIHJlYWRvbmx5IG1vZGVsSWRPclBhdGg/OiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgY29tcGlsZWRBcnRpZmFjdFBhdGg/OiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgcGFyYW1ldGVyczogUGFyYW1ldGVycztcbiAgfSkge1xuICAgIHRoaXMuYnVja2V0ID0gb3B0aW9ucy5idWNrZXQ7XG4gICAgdGhpcy5jb21waWxlZEFydGlmYWN0UzNQcmVmaXggPSBvcHRpb25zLmNvbXBpbGVkQXJ0aWZhY3RTM1ByZWZpeDtcbiAgICB0aGlzLmNvZGUgPVxuICAgICAgb3B0aW9ucy5jb2RlID8/XG4gICAgICBTb3VyY2UuYXNzZXQoXG4gICAgICAgIGpvaW4oX19kaXJuYW1lLCBcIi4uL3NjcmlwdHMvaW5mZXJlbmNlL3RyYW5zZm9ybWVycy1uZXVyb254L2NvZGVcIiksXG4gICAgICApO1xuICAgIHRoaXMudHBEZWdyZWUgPSBvcHRpb25zLnRwRGVncmVlO1xuICAgIHRoaXMucXVhbnREdHlwZSA9IG9wdGlvbnMucXVhbnREdHlwZTtcbiAgICB0aGlzLm5Qb3NpdGlvbnMgPSBvcHRpb25zLm5Qb3NpdGlvbnM7XG4gICAgdGhpcy5vcHRMZXZlbCA9IG9wdGlvbnMub3B0TGV2ZWw7XG4gICAgdGhpcy5tb2RlbElkT3JQYXRoID0gb3B0aW9ucy5tb2RlbElkT3JQYXRoO1xuICAgIHRoaXMuY29tcGlsZWRBcnRpZmFjdFBhdGggPSBvcHRpb25zLmNvbXBpbGVkQXJ0aWZhY3RQYXRoO1xuICAgIHRoaXMucGFyYW1ldGVycyA9IG9wdGlvbnMucGFyYW1ldGVycztcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zZm9ybWVyc05ldXJvbnhTYWdlTWFrZXJSZWFsdGltZUluZmVyZW5jZUVuZHBvaW50UHJvcHMge1xuICAvKipcbiAgICogTW9kZWwgZGF0YSBmb3IgU2FnZU1ha2VyIGluZmVyZW5jZS5cbiAgICogVGhlIG1vZGVsIGRhdGEgcmVxdWlyZXMgYXQgbGVhc3QgY29tcGlsZWQgYXJ0aWZhY3RzLlxuICAgKi9cbiAgcmVhZG9ubHkgbW9kZWxEYXRhOiBUcmFuc2Zvcm1lcnNOZXVyb254U2FnZU1ha2VySW5mZXJlbmNlTW9kZWxEYXRhO1xuICAvKipcbiAgICogQW4gaW1hZ2Ugb2YgdGhlIGNvbnRhaW5lciB3aGVyZSB0aGUgaW5mZXJlbmNlIGpvYiBpcyBleGVjdXRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGltYWdlPzogc2FnZW1ha2VyLkNvbnRhaW5lckltYWdlO1xuICAvKipcbiAgICogQSBtYXAgb2YgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIHBhc3MgaW50byB0aGUgY29udGFpbmVyLlxuICAgKiBAZGVmYXVsdCAtIE9ubHkgdGhlIHByZWRlZmluZWQgZW52aXJvbm1lbnQgdmFyaWFibGVzIHJlcXVpcmVkIHRvIHVzZSBOZXVyb254IGhhdmUgYmVlbiBzZXQuXG4gICAqL1xuICByZWFkb25seSBlbnZpcm9ubWVudD86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG4gIC8qKlxuICAgKiBUaGUgaW5zdGFuY2UgdHlwZSBvZiBjb21waWxlIHdvcmtlciBpbnN0YW5jZS5cbiAgICogQGRlZmF1bHQgLSBJdCBpcyBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHkgYWNjb3JkaW5nIHRvIHRoZSBudW1iZXIgb2YgbW9kZWwgcGFyYW1ldGVycyBhbmQgY29tcGlsYXRpb24gb3B0aW9ucy5cbiAgICovXG4gIHJlYWRvbmx5IGluc3RhbmNlVHlwZT86IE5ldXJvbnhJbnN0YW5jZVR5cGU7XG4gIC8qKlxuICAgKiBUaGUgc2l6ZSwgb2YgdGhlIE1MIHN0b3JhZ2Ugdm9sdW1lIGF0dGFjaGVkIHRvIGluZGl2aWR1YWwgaW5mZXJlbmNlIGluc3RhbmNlIGFzc29jaWF0ZWQgd2l0aCB0aGUgcHJvZHVjdGlvbiB2YXJpYW50LlxuICAgKiBDdXJyZW50bHkgb25seSBBbWF6b24gRUJTIGdwMiBzdG9yYWdlIHZvbHVtZXMgYXJlIHN1cHBvcnRlZC5cbiAgICogQHNlZSBodHRwczovL2F3cy5hbWF6b24uY29tL2pwL3JlbGVhc2Vub3Rlcy9ob3N0LWluc3RhbmNlLXN0b3JhZ2Utdm9sdW1lcy10YWJsZVxuICAgKiBAZGVmYXVsdCAtIDIuNSBHQiBwZXIgYmlsbGlvbiBwYXJhbWV0ZXIgKE1heCA1MTIgR0IpXG4gICAqL1xuICByZWFkb25seSB2b2x1bWVTaXplPzogU2l6ZTtcbiAgLyoqXG4gICAqIFRoZSB0aW1lb3V0IHZhbHVlLCB0byBkb3dubG9hZCBhbmQgZXh0cmFjdCB0aGUgbW9kZWwgdGhhdCB5b3Ugd2FudCB0byBob3N0IGZyb20gQW1hem9uIFMzXG4gICAqIHRvIHRoZSBpbmRpdmlkdWFsIGluZmVyZW5jZSBpbnN0YW5jZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBwcm9kdWN0aW9uIHZhcmlhbnQuXG4gICAqIEBkZWZhdWx0IC0gNjAgc2Vjb25kcywgd2hlbiBgdm9sdW1lU2l6ZWAgbGFyZ2VyIHRoYW4gMzBHQiB0aGVuIDFHQiB4IDE1IHNlY29uZHMgKG1heCA2MCBtaW51dGVzKVxuICAgKi9cbiAgcmVhZG9ubHkgbW9kZWxEYXRhRG93bmxvYWRUaW1lb3V0PzogRHVyYXRpb247XG4gIC8qKlxuICAgKiBUaGUgdGltZW91dCB2YWx1ZSwgZm9yIHlvdXIgaW5mZXJlbmNlIGNvbnRhaW5lciB0byBwYXNzIGhlYWx0aCBjaGVjayBieSBTYWdlTWFrZXIgSG9zdGluZy5cbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc2FnZW1ha2VyL2xhdGVzdC9kZy95b3VyLWFsZ29yaXRobXMtaW5mZXJlbmNlLWNvZGUuaHRtbCN5b3VyLWFsZ29yaXRobXMtaW5mZXJlbmNlLWFsZ28tcGluZy1yZXF1ZXN0c1xuICAgKiBAZGVmYXVsdCAtIDYwIHNlY29uZHMsIHdoZW4gc2V0IHRoZSBgbW9kZWxEYXRhRG93bmxvYWRUaW1lb3V0YCB0aGVuIHVzZSBzYW1lIHZhbHVlIChtYXggNjAgbWludXRlcylcbiAgICovXG4gIHJlYWRvbmx5IGNvbnRhaW5lclN0YXJ0dXBIZWFsdGhDaGVja1RpbWVvdXQ/OiBEdXJhdGlvbjtcbn1cblxuZXhwb3J0IGNsYXNzIFRyYW5zZm9ybWVyc05ldXJvbnhTYWdlTWFrZXJSZWFsdGltZUluZmVyZW5jZUVuZHBvaW50IGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIGVuZHBvaW50LlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBlbmRwb2ludEFybjogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGVuZHBvaW50LlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBlbmRwb2ludE5hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBlbmRwb2ludDogc2FnZW1ha2VyLkVuZHBvaW50O1xuICBjb25zdHJ1Y3RvcihcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IFRyYW5zZm9ybWVyc05ldXJvbnhTYWdlTWFrZXJSZWFsdGltZUluZmVyZW5jZUVuZHBvaW50UHJvcHMsXG4gICkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgY29uc3QgaW1hZ2UgPVxuICAgICAgcHJvcHMuaW1hZ2UgPz9cbiAgICAgIHNhZ2VtYWtlci5Db250YWluZXJJbWFnZS5mcm9tQXNzZXQoXG4gICAgICAgIGpvaW4oX19kaXJuYW1lLCBcIi4uL3NjcmlwdHMvaW5mZXJlbmNlL3RyYW5zZm9ybWVycy1uZXVyb254XCIpLFxuICAgICAgKTtcbiAgICBjb25zdCBpbnN0YW5jZVR5cGUgPVxuICAgICAgcHJvcHMuaW5zdGFuY2VUeXBlID8/XG4gICAgICB0aGlzLnNlbGVjdEluc3RhbmNlVHlwZUJ5VHBEZWdyZWUocHJvcHMubW9kZWxEYXRhLnRwRGVncmVlKTtcbiAgICBjb25zdCBkZXBsb3kgPSBuZXcgQnVja2V0RGVwbG95bWVudCh0aGlzLCBcIkNvZGVEZXBsb3ltZW50XCIsIHtcbiAgICAgIGRlc3RpbmF0aW9uQnVja2V0OiBwcm9wcy5tb2RlbERhdGEuYnVja2V0LFxuICAgICAgc291cmNlczogW3Byb3BzLm1vZGVsRGF0YS5jb2RlXSxcbiAgICAgIGRlc3RpbmF0aW9uS2V5UHJlZml4OiBqb2luKFxuICAgICAgICBwcm9wcy5tb2RlbERhdGEuY29tcGlsZWRBcnRpZmFjdFMzUHJlZml4LFxuICAgICAgICBcImNvZGVcIixcbiAgICAgICksXG4gICAgfSk7XG4gICAgY29uc3QgbW9kZWwgPSBuZXcgc2FnZW1ha2VyLk1vZGVsKHRoaXMsIFwiTW9kZWxcIiwge1xuICAgICAgY29udGFpbmVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgaW1hZ2UsXG4gICAgICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgICAgIE5FVVJPTl9SVF9OVU1fQ09SRVM6IHByb3BzLm1vZGVsRGF0YS50cERlZ3JlZS50b1N0cmluZygpLFxuICAgICAgICAgICAgVFNfREVGQVVMVF9SRVNQT05TRV9USU1FT1VUOiAoNjAgKiA2MCkudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIFRTX0RFRkFVTFRfV09SS0VSU19QRVJfTU9ERUw6IE1hdGguZmxvb3IoXG4gICAgICAgICAgICAgIGluc3RhbmNlVHlwZS5hY2NlbGVyYXRvckNoaXBzLm5ldXJvbnhDb3JlcyAvXG4gICAgICAgICAgICAgICAgcHJvcHMubW9kZWxEYXRhLnRwRGVncmVlLFxuICAgICAgICAgICAgKS50b1N0cmluZygpLFxuICAgICAgICAgICAgTU9ERUw6IHByb3BzLm1vZGVsRGF0YS5tb2RlbElkT3JQYXRoID8/IFwiLi9tb2RlbFwiLFxuICAgICAgICAgICAgQ09NUElMRURfQVJUSUZBQ1Q6XG4gICAgICAgICAgICAgIHByb3BzLm1vZGVsRGF0YS5jb21waWxlZEFydGlmYWN0UGF0aCA/PyBcIi4vY29tcGlsZWRcIixcbiAgICAgICAgICAgIFRQX0RFR1JFRTogcHJvcHMubW9kZWxEYXRhLnRwRGVncmVlLnRvU3RyaW5nKCksXG4gICAgICAgICAgICBOX1BPU0lUSU9OUzogcHJvcHMubW9kZWxEYXRhLm5Qb3NpdGlvbnMudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIE9QVF9MRVZFTDogcHJvcHMubW9kZWxEYXRhLm9wdExldmVsLnRvU3RyaW5nKCksXG4gICAgICAgICAgICBRVUFOVF9EVFlQRTogcHJvcHMubW9kZWxEYXRhLnF1YW50RHR5cGU/LnRvU3RyaW5nKCkgPz8gXCJcIixcbiAgICAgICAgICAgIC4uLnByb3BzLmVudmlyb25tZW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuICAgIGNvbnN0IGNmbk1vZGVsID0gbW9kZWwubm9kZS5maW5kQ2hpbGQoXCJNb2RlbFwiKSBhcyBDZm5Nb2RlbDtcbiAgICBjZm5Nb2RlbC5hZGRQcm9wZXJ0eU92ZXJyaWRlKFxuICAgICAgXCJQcmltYXJ5Q29udGFpbmVyLk1vZGVsRGF0YVNvdXJjZS5TM0RhdGFTb3VyY2UuUzNVcmlcIixcbiAgICAgIHByb3BzLm1vZGVsRGF0YS5idWNrZXQuczNVcmxGb3JPYmplY3QoXG4gICAgICAgIHByb3BzLm1vZGVsRGF0YS5jb21waWxlZEFydGlmYWN0UzNQcmVmaXgsXG4gICAgICApLFxuICAgICk7XG4gICAgY2ZuTW9kZWwuYWRkUHJvcGVydHlPdmVycmlkZShcbiAgICAgIFwiUHJpbWFyeUNvbnRhaW5lci5Nb2RlbERhdGFTb3VyY2UuUzNEYXRhU291cmNlLlMzRGF0YVR5cGVcIixcbiAgICAgIFwiUzNQcmVmaXhcIixcbiAgICApO1xuICAgIGNmbk1vZGVsLmFkZFByb3BlcnR5T3ZlcnJpZGUoXG4gICAgICBcIlByaW1hcnlDb250YWluZXIuTW9kZWxEYXRhU291cmNlLlMzRGF0YVNvdXJjZS5Db21wcmVzc2lvblR5cGVcIixcbiAgICAgIFwiTm9uZVwiLFxuICAgICk7XG4gICAgcHJvcHMubW9kZWxEYXRhLmJ1Y2tldC5ncmFudFJlYWQobW9kZWwpO1xuICAgIG1vZGVsLm5vZGUuYWRkRGVwZW5kZW5jeShkZXBsb3kpO1xuICAgIGNvbnN0IGVuZHBvaW50Q29uZmlnID0gbmV3IHNhZ2VtYWtlci5FbmRwb2ludENvbmZpZyhcbiAgICAgIHRoaXMsXG4gICAgICBcIkVuZHBvaW50Q29uZmlnXCIsXG4gICAgICB7XG4gICAgICAgIGluc3RhbmNlUHJvZHVjdGlvblZhcmlhbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbW9kZWwsXG4gICAgICAgICAgICB2YXJpYW50TmFtZTogXCJQcmltYXJ5VmFyaWFudFwiLFxuICAgICAgICAgICAgaW5zdGFuY2VUeXBlOiBzYWdlbWFrZXIuSW5zdGFuY2VUeXBlLm9mKGluc3RhbmNlVHlwZS50b1N0cmluZygpKSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICApO1xuICAgIGNvbnN0IGNmbkVuZHBvaW50Q29uZmlnID0gZW5kcG9pbnRDb25maWcubm9kZS5maW5kQ2hpbGQoXG4gICAgICBcIkVuZHBvaW50Q29uZmlnXCIsXG4gICAgKSBhcyBDZm5FbmRwb2ludENvbmZpZztcbiAgICBjb25zdCB2b2x1bWVTaXplID0gU2l6ZS5naWJpYnl0ZXMoXG4gICAgICBwcm9wcy52b2x1bWVTaXplPy50b0dpYmlieXRlcygpID8/XG4gICAgICAgIChwcm9wcy5tb2RlbERhdGEucGFyYW1ldGVycy50b0JpbGlvbigpICogMi41ID4gNTEyXG4gICAgICAgICAgPyA1MTJcbiAgICAgICAgICA6IHByb3BzLm1vZGVsRGF0YS5wYXJhbWV0ZXJzLnRvQmlsaW9uKCkgKiAyLjUpLFxuICAgICk7XG4gICAgY2ZuRW5kcG9pbnRDb25maWcuYWRkUHJvcGVydHlPdmVycmlkZShcbiAgICAgIFwiUHJvZHVjdGlvblZhcmlhbnRzLjAuVm9sdW1lU2l6ZUluR0JcIixcbiAgICAgIGluc3RhbmNlVHlwZS50b1N0cmluZygpLnN0YXJ0c1dpdGgoXCJtbC50cm4xXCIpXG4gICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgIDogdm9sdW1lU2l6ZS50b0dpYmlieXRlcygpLFxuICAgICk7XG4gICAgY29uc3QgbW9kZWxEYXRhRG93bmxvYWRUaW1lb3V0ID1cbiAgICAgIHByb3BzLm1vZGVsRGF0YURvd25sb2FkVGltZW91dCA/P1xuICAgICAgaW5mZXJlbmNlTW9kZWxEYXRhRG93bmxvYWRUaW1lKHZvbHVtZVNpemUpO1xuICAgIGNmbkVuZHBvaW50Q29uZmlnLmFkZFByb3BlcnR5T3ZlcnJpZGUoXG4gICAgICBcIlByb2R1Y3Rpb25WYXJpYW50cy4wLk1vZGVsRGF0YURvd25sb2FkVGltZW91dEluU2Vjb25kc1wiLFxuICAgICAgbW9kZWxEYXRhRG93bmxvYWRUaW1lb3V0LnRvU2Vjb25kcygpLFxuICAgICk7XG4gICAgY2ZuRW5kcG9pbnRDb25maWcuYWRkUHJvcGVydHlPdmVycmlkZShcbiAgICAgIFwiUHJvZHVjdGlvblZhcmlhbnRzLjAuQ29udGFpbmVyU3RhcnR1cEhlYWx0aENoZWNrVGltZW91dEluU2Vjb25kc1wiLFxuICAgICAgKFxuICAgICAgICBwcm9wcy5jb250YWluZXJTdGFydHVwSGVhbHRoQ2hlY2tUaW1lb3V0ID8/IG1vZGVsRGF0YURvd25sb2FkVGltZW91dFxuICAgICAgKS50b1NlY29uZHMoKSxcbiAgICApO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gbmV3IHNhZ2VtYWtlci5FbmRwb2ludCh0aGlzLCBcIkVuZHBvaW50XCIsIHtcbiAgICAgIGVuZHBvaW50Q29uZmlnLFxuICAgIH0pO1xuICAgIHRoaXMuZW5kcG9pbnRBcm4gPSBlbmRwb2ludC5lbmRwb2ludEFybjtcbiAgICB0aGlzLmVuZHBvaW50TmFtZSA9IGVuZHBvaW50LmVuZHBvaW50TmFtZTtcbiAgICB0aGlzLmVuZHBvaW50ID0gZW5kcG9pbnQ7XG4gIH1cbiAgZ3JhbnRJbnZva2UoZ3JhbnRlZTogSUdyYW50YWJsZSk6IEdyYW50IHtcbiAgICByZXR1cm4gdGhpcy5lbmRwb2ludC5ncmFudEludm9rZShncmFudGVlKTtcbiAgfVxuXG4gIHByaXZhdGUgc2VsZWN0SW5zdGFuY2VUeXBlQnlUcERlZ3JlZSh0cERlZ3JlZTogbnVtYmVyKSB7XG4gICAgY29uc3QgaW5zdGFuY2VUeXBlcyA9IFtcbiAgICAgIE5ldXJvbnhJbnN0YW5jZVR5cGUuSU5GMl84WExBUkdFLFxuICAgICAgTmV1cm9ueEluc3RhbmNlVHlwZS5JTkYyXzI0WExBUkdFLFxuICAgICAgTmV1cm9ueEluc3RhbmNlVHlwZS5JTkYyXzQ4WExBUkdFLFxuICAgIF07XG4gICAgZm9yIChjb25zdCBpbnN0YW5jZVR5cGUgb2YgaW5zdGFuY2VUeXBlcykge1xuICAgICAgaWYgKHRwRGVncmVlIDw9IGluc3RhbmNlVHlwZS5hY2NlbGVyYXRvckNoaXBzLm5ldXJvbnhDb3Jlcykge1xuICAgICAgICByZXR1cm4gaW5zdGFuY2VUeXBlO1xuICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcIlRoaXMgbW9kZWwgaXMgdG9vIGxhcmdlLCBJIGNhbiBub3Qgc3VwcG9ydCB0aGlzIG1vZGVsIGN1cnJlbnQgdmVyc2lvbi5cIixcbiAgICApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGluZmVyZW5jZU1vZGVsRGF0YURvd25sb2FkVGltZSh2b2x1bWVTaXplOiBTaXplKSB7XG4gIGNvbnN0IHNlY29uZHMgPSB2b2x1bWVTaXplLnRvR2liaWJ5dGVzKCkgKiAxNTtcbiAgcmV0dXJuIER1cmF0aW9uLnNlY29uZHMoc2Vjb25kcyA8IDM2MDAgPyBzZWNvbmRzIDogMzYwMCk7XG59XG4iXX0=
package/package.json CHANGED
@@ -91,7 +91,7 @@
91
91
  ]
92
92
  }
93
93
  },
94
- "version": "0.0.4",
94
+ "version": "0.0.6",
95
95
  "jest": {
96
96
  "coverageProvider": "v8",
97
97
  "testMatch": [