@rio-cloud/cdk-v2-constructs 8.7.1-alpha.1 → 8.8.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.jsii CHANGED
@@ -25,7 +25,7 @@
25
25
  },
26
26
  "dependencies": {
27
27
  "@pepperize/cdk-autoscaling-gitlab-runner": "^0.2.624",
28
- "aws-cdk-lib": "^2.263.0",
28
+ "aws-cdk-lib": "^2.266.0",
29
29
  "constructs": "^10.5.1",
30
30
  "datadog-cdk-constructs-v2": "^4.0.0"
31
31
  },
@@ -553,6 +553,19 @@
553
553
  }
554
554
  }
555
555
  },
556
+ "aws-cdk-lib.aws_artifact": {
557
+ "targets": {
558
+ "dotnet": {
559
+ "namespace": "Amazon.CDK.AWS.Artifact"
560
+ },
561
+ "java": {
562
+ "package": "software.amazon.awscdk.services.artifact"
563
+ },
564
+ "python": {
565
+ "module": "aws_cdk.aws_artifact"
566
+ }
567
+ }
568
+ },
556
569
  "aws-cdk-lib.aws_athena": {
557
570
  "targets": {
558
571
  "dotnet": {
@@ -683,6 +696,19 @@
683
696
  }
684
697
  }
685
698
  },
699
+ "aws-cdk-lib.aws_backupsearch": {
700
+ "targets": {
701
+ "dotnet": {
702
+ "namespace": "Amazon.CDK.AWS.BackupSearch"
703
+ },
704
+ "java": {
705
+ "package": "software.amazon.awscdk.services.backupsearch"
706
+ },
707
+ "python": {
708
+ "module": "aws_cdk.aws_backupsearch"
709
+ }
710
+ }
711
+ },
686
712
  "aws-cdk-lib.aws_batch": {
687
713
  "targets": {
688
714
  "dotnet": {
@@ -1178,6 +1204,19 @@
1178
1204
  }
1179
1205
  }
1180
1206
  },
1207
+ "aws-cdk-lib.aws_cognitosync": {
1208
+ "targets": {
1209
+ "dotnet": {
1210
+ "namespace": "Amazon.CDK.AWS.CognitoSync"
1211
+ },
1212
+ "java": {
1213
+ "package": "software.amazon.awscdk.services.cognitosync"
1214
+ },
1215
+ "python": {
1216
+ "module": "aws_cdk.aws_cognitosync"
1217
+ }
1218
+ }
1219
+ },
1181
1220
  "aws-cdk-lib.aws_comprehend": {
1182
1221
  "targets": {
1183
1222
  "dotnet": {
@@ -1321,19 +1360,6 @@
1321
1360
  }
1322
1361
  }
1323
1362
  },
1324
- "aws-cdk-lib.aws_dataexchange": {
1325
- "targets": {
1326
- "dotnet": {
1327
- "namespace": "Amazon.CDK.AWS.DataExchange"
1328
- },
1329
- "java": {
1330
- "package": "software.amazon.awscdk.services.dataexchange"
1331
- },
1332
- "python": {
1333
- "module": "aws_cdk.aws_dataexchange"
1334
- }
1335
- }
1336
- },
1337
1363
  "aws-cdk-lib.aws_datapipeline": {
1338
1364
  "targets": {
1339
1365
  "dotnet": {
@@ -2952,6 +2978,19 @@
2952
2978
  }
2953
2979
  }
2954
2980
  },
2981
+ "aws-cdk-lib.aws_networkflowmonitor": {
2982
+ "targets": {
2983
+ "dotnet": {
2984
+ "namespace": "Amazon.CDK.AWS.NetworkFlowMonitor"
2985
+ },
2986
+ "java": {
2987
+ "package": "software.amazon.awscdk.services.networkflowmonitor"
2988
+ },
2989
+ "python": {
2990
+ "module": "aws_cdk.aws_networkflowmonitor"
2991
+ }
2992
+ }
2993
+ },
2955
2994
  "aws-cdk-lib.aws_networkmanager": {
2956
2995
  "targets": {
2957
2996
  "dotnet": {
@@ -3826,6 +3865,19 @@
3826
3865
  }
3827
3866
  }
3828
3867
  },
3868
+ "aws-cdk-lib.aws_scn": {
3869
+ "targets": {
3870
+ "dotnet": {
3871
+ "namespace": "Amazon.CDK.AWS.SCN"
3872
+ },
3873
+ "java": {
3874
+ "package": "software.amazon.awscdk.services.scn"
3875
+ },
3876
+ "python": {
3877
+ "module": "aws_cdk.aws_scn"
3878
+ }
3879
+ }
3880
+ },
3829
3881
  "aws-cdk-lib.aws_sdb": {
3830
3882
  "targets": {
3831
3883
  "dotnet": {
@@ -4125,6 +4177,19 @@
4125
4177
  }
4126
4178
  }
4127
4179
  },
4180
+ "aws-cdk-lib.aws_states": {
4181
+ "targets": {
4182
+ "dotnet": {
4183
+ "namespace": "Amazon.CDK.AWS.States"
4184
+ },
4185
+ "java": {
4186
+ "package": "software.amazon.awscdk.services.states"
4187
+ },
4188
+ "python": {
4189
+ "module": "aws_cdk.aws_states"
4190
+ }
4191
+ }
4192
+ },
4128
4193
  "aws-cdk-lib.aws_stepfunctions": {
4129
4194
  "targets": {
4130
4195
  "dotnet": {
@@ -4151,6 +4216,19 @@
4151
4216
  }
4152
4217
  }
4153
4218
  },
4219
+ "aws-cdk-lib.aws_storagegateway": {
4220
+ "targets": {
4221
+ "dotnet": {
4222
+ "namespace": "Amazon.CDK.AWS.StorageGateway"
4223
+ },
4224
+ "java": {
4225
+ "package": "software.amazon.awscdk.services.storagegateway"
4226
+ },
4227
+ "python": {
4228
+ "module": "aws_cdk.aws_storagegateway"
4229
+ }
4230
+ }
4231
+ },
4154
4232
  "aws-cdk-lib.aws_supportapp": {
4155
4233
  "targets": {
4156
4234
  "dotnet": {
@@ -4190,6 +4268,19 @@
4190
4268
  }
4191
4269
  }
4192
4270
  },
4271
+ "aws-cdk-lib.aws_thinclient": {
4272
+ "targets": {
4273
+ "dotnet": {
4274
+ "namespace": "Amazon.CDK.AWS.ThinClient"
4275
+ },
4276
+ "java": {
4277
+ "package": "software.amazon.awscdk.services.thinclient"
4278
+ },
4279
+ "python": {
4280
+ "module": "aws_cdk.aws_thinclient"
4281
+ }
4282
+ }
4283
+ },
4193
4284
  "aws-cdk-lib.aws_timestream": {
4194
4285
  "targets": {
4195
4286
  "dotnet": {
@@ -4203,6 +4294,19 @@
4203
4294
  }
4204
4295
  }
4205
4296
  },
4297
+ "aws-cdk-lib.aws_transcribe": {
4298
+ "targets": {
4299
+ "dotnet": {
4300
+ "namespace": "Amazon.CDK.AWS.Transcribe"
4301
+ },
4302
+ "java": {
4303
+ "package": "software.amazon.awscdk.services.transcribe"
4304
+ },
4305
+ "python": {
4306
+ "module": "aws_cdk.aws_transcribe"
4307
+ }
4308
+ }
4309
+ },
4206
4310
  "aws-cdk-lib.aws_transfer": {
4207
4311
  "targets": {
4208
4312
  "dotnet": {
@@ -4216,6 +4320,19 @@
4216
4320
  }
4217
4321
  }
4218
4322
  },
4323
+ "aws-cdk-lib.aws_usernotifications": {
4324
+ "targets": {
4325
+ "dotnet": {
4326
+ "namespace": "Amazon.CDK.AWS.UserNotifications"
4327
+ },
4328
+ "java": {
4329
+ "package": "software.amazon.awscdk.services.usernotifications"
4330
+ },
4331
+ "python": {
4332
+ "module": "aws_cdk.aws_usernotifications"
4333
+ }
4334
+ }
4335
+ },
4219
4336
  "aws-cdk-lib.aws_uxc": {
4220
4337
  "targets": {
4221
4338
  "dotnet": {
@@ -4307,6 +4424,19 @@
4307
4424
  }
4308
4425
  }
4309
4426
  },
4427
+ "aws-cdk-lib.aws_wellarchitected": {
4428
+ "targets": {
4429
+ "dotnet": {
4430
+ "namespace": "Amazon.CDK.AWS.WellArchitected"
4431
+ },
4432
+ "java": {
4433
+ "package": "software.amazon.awscdk.services.wellarchitected"
4434
+ },
4435
+ "python": {
4436
+ "module": "aws_cdk.aws_wellarchitected"
4437
+ }
4438
+ }
4439
+ },
4310
4440
  "aws-cdk-lib.aws_wisdom": {
4311
4441
  "targets": {
4312
4442
  "dotnet": {
@@ -4809,6 +4939,22 @@
4809
4939
  }
4810
4940
  }
4811
4941
  },
4942
+ "aws-cdk-lib.interfaces.aws_artifact": {
4943
+ "targets": {
4944
+ "dotnet": {
4945
+ "namespace": "Amazon.CDK.Interfaces.Artifact"
4946
+ },
4947
+ "go": {
4948
+ "packageName": "interfacesawsartifact"
4949
+ },
4950
+ "java": {
4951
+ "package": "software.amazon.awscdk.interfaces.artifact"
4952
+ },
4953
+ "python": {
4954
+ "module": "aws_cdk.interfaces.aws_artifact"
4955
+ }
4956
+ }
4957
+ },
4812
4958
  "aws-cdk-lib.interfaces.aws_athena": {
4813
4959
  "targets": {
4814
4960
  "dotnet": {
@@ -4937,6 +5083,22 @@
4937
5083
  }
4938
5084
  }
4939
5085
  },
5086
+ "aws-cdk-lib.interfaces.aws_backupsearch": {
5087
+ "targets": {
5088
+ "dotnet": {
5089
+ "namespace": "Amazon.CDK.Interfaces.BackupSearch"
5090
+ },
5091
+ "go": {
5092
+ "packageName": "interfacesawsbackupsearch"
5093
+ },
5094
+ "java": {
5095
+ "package": "software.amazon.awscdk.interfaces.backupsearch"
5096
+ },
5097
+ "python": {
5098
+ "module": "aws_cdk.interfaces.aws_backupsearch"
5099
+ }
5100
+ }
5101
+ },
4940
5102
  "aws-cdk-lib.interfaces.aws_batch": {
4941
5103
  "targets": {
4942
5104
  "dotnet": {
@@ -5513,6 +5675,22 @@
5513
5675
  }
5514
5676
  }
5515
5677
  },
5678
+ "aws-cdk-lib.interfaces.aws_cognitosync": {
5679
+ "targets": {
5680
+ "dotnet": {
5681
+ "namespace": "Amazon.CDK.Interfaces.CognitoSync"
5682
+ },
5683
+ "go": {
5684
+ "packageName": "interfacesawscognitosync"
5685
+ },
5686
+ "java": {
5687
+ "package": "software.amazon.awscdk.interfaces.cognitosync"
5688
+ },
5689
+ "python": {
5690
+ "module": "aws_cdk.interfaces.aws_cognitosync"
5691
+ }
5692
+ }
5693
+ },
5516
5694
  "aws-cdk-lib.interfaces.aws_comprehend": {
5517
5695
  "targets": {
5518
5696
  "dotnet": {
@@ -5689,22 +5867,6 @@
5689
5867
  }
5690
5868
  }
5691
5869
  },
5692
- "aws-cdk-lib.interfaces.aws_dataexchange": {
5693
- "targets": {
5694
- "dotnet": {
5695
- "namespace": "Amazon.CDK.Interfaces.DataExchange"
5696
- },
5697
- "go": {
5698
- "packageName": "interfacesawsdataexchange"
5699
- },
5700
- "java": {
5701
- "package": "software.amazon.awscdk.interfaces.dataexchange"
5702
- },
5703
- "python": {
5704
- "module": "aws_cdk.interfaces.aws_dataexchange"
5705
- }
5706
- }
5707
- },
5708
5870
  "aws-cdk-lib.interfaces.aws_datapipeline": {
5709
5871
  "targets": {
5710
5872
  "dotnet": {
@@ -7481,6 +7643,22 @@
7481
7643
  }
7482
7644
  }
7483
7645
  },
7646
+ "aws-cdk-lib.interfaces.aws_networkflowmonitor": {
7647
+ "targets": {
7648
+ "dotnet": {
7649
+ "namespace": "Amazon.CDK.Interfaces.NetworkFlowMonitor"
7650
+ },
7651
+ "go": {
7652
+ "packageName": "interfacesawsnetworkflowmonitor"
7653
+ },
7654
+ "java": {
7655
+ "package": "software.amazon.awscdk.interfaces.networkflowmonitor"
7656
+ },
7657
+ "python": {
7658
+ "module": "aws_cdk.interfaces.aws_networkflowmonitor"
7659
+ }
7660
+ }
7661
+ },
7484
7662
  "aws-cdk-lib.interfaces.aws_networkmanager": {
7485
7663
  "targets": {
7486
7664
  "dotnet": {
@@ -8441,6 +8619,22 @@
8441
8619
  }
8442
8620
  }
8443
8621
  },
8622
+ "aws-cdk-lib.interfaces.aws_scn": {
8623
+ "targets": {
8624
+ "dotnet": {
8625
+ "namespace": "Amazon.CDK.Interfaces.SCN"
8626
+ },
8627
+ "go": {
8628
+ "packageName": "interfacesawsscn"
8629
+ },
8630
+ "java": {
8631
+ "package": "software.amazon.awscdk.interfaces.scn"
8632
+ },
8633
+ "python": {
8634
+ "module": "aws_cdk.interfaces.aws_scn"
8635
+ }
8636
+ }
8637
+ },
8444
8638
  "aws-cdk-lib.interfaces.aws_sdb": {
8445
8639
  "targets": {
8446
8640
  "dotnet": {
@@ -8777,6 +8971,22 @@
8777
8971
  }
8778
8972
  }
8779
8973
  },
8974
+ "aws-cdk-lib.interfaces.aws_states": {
8975
+ "targets": {
8976
+ "dotnet": {
8977
+ "namespace": "Amazon.CDK.Interfaces.States"
8978
+ },
8979
+ "go": {
8980
+ "packageName": "interfacesawsstates"
8981
+ },
8982
+ "java": {
8983
+ "package": "software.amazon.awscdk.interfaces.states"
8984
+ },
8985
+ "python": {
8986
+ "module": "aws_cdk.interfaces.aws_states"
8987
+ }
8988
+ }
8989
+ },
8780
8990
  "aws-cdk-lib.interfaces.aws_stepfunctions": {
8781
8991
  "targets": {
8782
8992
  "dotnet": {
@@ -8793,6 +9003,22 @@
8793
9003
  }
8794
9004
  }
8795
9005
  },
9006
+ "aws-cdk-lib.interfaces.aws_storagegateway": {
9007
+ "targets": {
9008
+ "dotnet": {
9009
+ "namespace": "Amazon.CDK.Interfaces.StorageGateway"
9010
+ },
9011
+ "go": {
9012
+ "packageName": "interfacesawsstoragegateway"
9013
+ },
9014
+ "java": {
9015
+ "package": "software.amazon.awscdk.interfaces.storagegateway"
9016
+ },
9017
+ "python": {
9018
+ "module": "aws_cdk.interfaces.aws_storagegateway"
9019
+ }
9020
+ }
9021
+ },
8796
9022
  "aws-cdk-lib.interfaces.aws_supportapp": {
8797
9023
  "targets": {
8798
9024
  "dotnet": {
@@ -8841,6 +9067,22 @@
8841
9067
  }
8842
9068
  }
8843
9069
  },
9070
+ "aws-cdk-lib.interfaces.aws_thinclient": {
9071
+ "targets": {
9072
+ "dotnet": {
9073
+ "namespace": "Amazon.CDK.Interfaces.ThinClient"
9074
+ },
9075
+ "go": {
9076
+ "packageName": "interfacesawsthinclient"
9077
+ },
9078
+ "java": {
9079
+ "package": "software.amazon.awscdk.interfaces.thinclient"
9080
+ },
9081
+ "python": {
9082
+ "module": "aws_cdk.interfaces.aws_thinclient"
9083
+ }
9084
+ }
9085
+ },
8844
9086
  "aws-cdk-lib.interfaces.aws_timestream": {
8845
9087
  "targets": {
8846
9088
  "dotnet": {
@@ -8857,6 +9099,22 @@
8857
9099
  }
8858
9100
  }
8859
9101
  },
9102
+ "aws-cdk-lib.interfaces.aws_transcribe": {
9103
+ "targets": {
9104
+ "dotnet": {
9105
+ "namespace": "Amazon.CDK.Interfaces.Transcribe"
9106
+ },
9107
+ "go": {
9108
+ "packageName": "interfacesawstranscribe"
9109
+ },
9110
+ "java": {
9111
+ "package": "software.amazon.awscdk.interfaces.transcribe"
9112
+ },
9113
+ "python": {
9114
+ "module": "aws_cdk.interfaces.aws_transcribe"
9115
+ }
9116
+ }
9117
+ },
8860
9118
  "aws-cdk-lib.interfaces.aws_transfer": {
8861
9119
  "targets": {
8862
9120
  "dotnet": {
@@ -8873,6 +9131,22 @@
8873
9131
  }
8874
9132
  }
8875
9133
  },
9134
+ "aws-cdk-lib.interfaces.aws_usernotifications": {
9135
+ "targets": {
9136
+ "dotnet": {
9137
+ "namespace": "Amazon.CDK.Interfaces.UserNotifications"
9138
+ },
9139
+ "go": {
9140
+ "packageName": "interfacesawsusernotifications"
9141
+ },
9142
+ "java": {
9143
+ "package": "software.amazon.awscdk.interfaces.usernotifications"
9144
+ },
9145
+ "python": {
9146
+ "module": "aws_cdk.interfaces.aws_usernotifications"
9147
+ }
9148
+ }
9149
+ },
8876
9150
  "aws-cdk-lib.interfaces.aws_uxc": {
8877
9151
  "targets": {
8878
9152
  "dotnet": {
@@ -8985,6 +9259,22 @@
8985
9259
  }
8986
9260
  }
8987
9261
  },
9262
+ "aws-cdk-lib.interfaces.aws_wellarchitected": {
9263
+ "targets": {
9264
+ "dotnet": {
9265
+ "namespace": "Amazon.CDK.Interfaces.WellArchitected"
9266
+ },
9267
+ "go": {
9268
+ "packageName": "interfacesawswellarchitected"
9269
+ },
9270
+ "java": {
9271
+ "package": "software.amazon.awscdk.interfaces.wellarchitected"
9272
+ },
9273
+ "python": {
9274
+ "module": "aws_cdk.interfaces.aws_wellarchitected"
9275
+ }
9276
+ }
9277
+ },
8988
9278
  "aws-cdk-lib.interfaces.aws_wisdom": {
8989
9279
  "targets": {
8990
9280
  "dotnet": {
@@ -18201,7 +18491,7 @@
18201
18491
  "assembly": "@rio-cloud/cdk-v2-constructs",
18202
18492
  "base": "constructs.Construct",
18203
18493
  "docs": {
18204
- "remarks": "Use this construct when one stack produces between one and three related projects that should share a catalog\ncollection. Shared tags are inherited by every child, while child tags with the same key override them. The RIO\nLanding Zone `team_identifier` tag is always included.\n\nThe files are uploaded after the stack reaches `CREATE_COMPLETE` or `UPDATE_COMPLETE`. The EventBridge event time\nand ID identify the upload. All SBOM catalog constructs in the same stack reuse one upload Lambda.\n\nExample:\n```ts\nconst apiSbom = new s3Assets.Asset(this, 'ApiSbomAsset', {\n path: 'build/api-sbom.json',\n});\nconst infrastructureSbom = new s3Assets.Asset(this, 'InfrastructureSbomAsset', {\n path: 'build/infrastructure-sbom.json',\n});\n\nnew SbomCatalogProject(this, 'CatalogUpload', {\n collectionName: 'billing',\n collectionVersion: '1.4.0',\n sharedTags: ['domain:billing'],\n children: [\n {\n name: 'api',\n sbom: apiSbom,\n additionalTags: ['component:backend'],\n },\n {\n name: 'infrastructure',\n sbom: infrastructureSbom,\n additionalTags: ['component:infrastructure'],\n },\n ],\n});\n```",
18494
+ "remarks": "Use this construct when one stack produces between one and three related projects that should share a catalog\ncollection. Shared tags are inherited by every child, while child tags with the same key override them. The RIO\nLanding Zone `team_identifier` tag is always included.\n\nThe files are uploaded after the stack reaches `CREATE_COMPLETE` or `UPDATE_COMPLETE`. The EventBridge event time\nand ID identify the upload. All SBOM catalog constructs in the same stack reuse one upload Lambda.\n\nExample:\n```ts\nconst apiSbom = new s3Assets.Asset(this, 'ApiSbomAsset', {\n path: 'build/api-sbom.json',\n});\nconst infrastructureSbom = new s3Assets.Asset(this, 'InfrastructureSbomAsset', {\n path: 'build/infrastructure-sbom.json',\n});\n\nnew SbomCatalogProject(this, 'CatalogUpload', {\n collectionName: 'billing',\n collectionVersion: '1.4.0',\n sharedTags: ['domain:billing'],\n children: [\n {\n name: 'api',\n sbom: apiSbom,\n additionalTags: ['component:backend'],\n },\n {\n name: 'infrastructure',\n sbom: infrastructureSbom,\n additionalTags: ['component:infrastructure'],\n },\n ],\n vulnerabilityMonitorProps: {\n notification: new datadogv2.DefaultSlackNotification(),\n },\n});\n```",
18205
18495
  "stability": "stable",
18206
18496
  "summary": "Registers a collection of related project SBOMs and optional VEX files in the central SBOM catalog."
18207
18497
  },
@@ -18212,7 +18502,7 @@
18212
18502
  },
18213
18503
  "locationInModule": {
18214
18504
  "filename": "src/sbom-catalog/catalog-project.ts",
18215
- "line": 186
18505
+ "line": 223
18216
18506
  },
18217
18507
  "parameters": [
18218
18508
  {
@@ -18238,7 +18528,7 @@
18238
18528
  "kind": "class",
18239
18529
  "locationInModule": {
18240
18530
  "filename": "src/sbom-catalog/catalog-project.ts",
18241
- "line": 185
18531
+ "line": 222
18242
18532
  },
18243
18533
  "name": "SbomCatalogProject",
18244
18534
  "symbolId": "src/sbom-catalog/catalog-project:SbomCatalogProject"
@@ -18254,7 +18544,7 @@
18254
18544
  "kind": "interface",
18255
18545
  "locationInModule": {
18256
18546
  "filename": "src/sbom-catalog/catalog-project.ts",
18257
- "line": 50
18547
+ "line": 66
18258
18548
  },
18259
18549
  "name": "SbomCatalogProjectChild",
18260
18550
  "properties": [
@@ -18267,7 +18557,7 @@
18267
18557
  "immutable": true,
18268
18558
  "locationInModule": {
18269
18559
  "filename": "src/sbom-catalog/catalog-project.ts",
18270
- "line": 54
18560
+ "line": 70
18271
18561
  },
18272
18562
  "name": "name",
18273
18563
  "type": {
@@ -18283,7 +18573,7 @@
18283
18573
  "immutable": true,
18284
18574
  "locationInModule": {
18285
18575
  "filename": "src/sbom-catalog/catalog-project.ts",
18286
- "line": 68
18576
+ "line": 84
18287
18577
  },
18288
18578
  "name": "sbom",
18289
18579
  "type": {
@@ -18300,7 +18590,7 @@
18300
18590
  "immutable": true,
18301
18591
  "locationInModule": {
18302
18592
  "filename": "src/sbom-catalog/catalog-project.ts",
18303
- "line": 65
18593
+ "line": 81
18304
18594
  },
18305
18595
  "name": "additionalTags",
18306
18596
  "optional": true,
@@ -18323,7 +18613,7 @@
18323
18613
  "immutable": true,
18324
18614
  "locationInModule": {
18325
18615
  "filename": "src/sbom-catalog/catalog-project.ts",
18326
- "line": 57
18616
+ "line": 73
18327
18617
  },
18328
18618
  "name": "version",
18329
18619
  "optional": true,
@@ -18340,7 +18630,7 @@
18340
18630
  "immutable": true,
18341
18631
  "locationInModule": {
18342
18632
  "filename": "src/sbom-catalog/catalog-project.ts",
18343
- "line": 71
18633
+ "line": 87
18344
18634
  },
18345
18635
  "name": "vex",
18346
18636
  "optional": true,
@@ -18361,7 +18651,7 @@
18361
18651
  "kind": "interface",
18362
18652
  "locationInModule": {
18363
18653
  "filename": "src/sbom-catalog/catalog-project.ts",
18364
- "line": 74
18654
+ "line": 90
18365
18655
  },
18366
18656
  "name": "SbomCatalogProjectProps",
18367
18657
  "properties": [
@@ -18375,7 +18665,7 @@
18375
18665
  "immutable": true,
18376
18666
  "locationInModule": {
18377
18667
  "filename": "src/sbom-catalog/catalog-project.ts",
18378
- "line": 90
18668
+ "line": 106
18379
18669
  },
18380
18670
  "name": "children",
18381
18671
  "type": {
@@ -18396,7 +18686,7 @@
18396
18686
  "immutable": true,
18397
18687
  "locationInModule": {
18398
18688
  "filename": "src/sbom-catalog/catalog-project.ts",
18399
- "line": 76
18689
+ "line": 92
18400
18690
  },
18401
18691
  "name": "collectionName",
18402
18692
  "type": {
@@ -18413,7 +18703,7 @@
18413
18703
  "immutable": true,
18414
18704
  "locationInModule": {
18415
18705
  "filename": "src/sbom-catalog/catalog-project.ts",
18416
- "line": 79
18706
+ "line": 95
18417
18707
  },
18418
18708
  "name": "collectionVersion",
18419
18709
  "optional": true,
@@ -18431,7 +18721,7 @@
18431
18721
  "immutable": true,
18432
18722
  "locationInModule": {
18433
18723
  "filename": "src/sbom-catalog/catalog-project.ts",
18434
- "line": 87
18724
+ "line": 103
18435
18725
  },
18436
18726
  "name": "sharedTags",
18437
18727
  "optional": true,
@@ -18443,10 +18733,63 @@
18443
18733
  "kind": "array"
18444
18734
  }
18445
18735
  }
18736
+ },
18737
+ {
18738
+ "abstract": true,
18739
+ "docs": {
18740
+ "default": "Vulnerability monitors using {@link datadogv2.DefaultSlackNotification }",
18741
+ "remarks": "When omitted, the monitors use {@link datadogv2.DefaultSlackNotification}.",
18742
+ "stability": "stable",
18743
+ "summary": "Optional vulnerability monitor configuration shared by all child monitors."
18744
+ },
18745
+ "immutable": true,
18746
+ "locationInModule": {
18747
+ "filename": "src/sbom-catalog/catalog-project.ts",
18748
+ "line": 115
18749
+ },
18750
+ "name": "vulnerabilityMonitorProps",
18751
+ "optional": true,
18752
+ "type": {
18753
+ "fqn": "@rio-cloud/cdk-v2-constructs.SbomCatalogVulnerabilityMonitorProps"
18754
+ }
18446
18755
  }
18447
18756
  ],
18448
18757
  "symbolId": "src/sbom-catalog/catalog-project:SbomCatalogProjectProps"
18449
18758
  },
18759
+ "@rio-cloud/cdk-v2-constructs.SbomCatalogVulnerabilityMonitorProps": {
18760
+ "assembly": "@rio-cloud/cdk-v2-constructs",
18761
+ "datatype": true,
18762
+ "docs": {
18763
+ "stability": "stable",
18764
+ "summary": "Notification configuration for an SBOM catalog vulnerability monitor."
18765
+ },
18766
+ "fqn": "@rio-cloud/cdk-v2-constructs.SbomCatalogVulnerabilityMonitorProps",
18767
+ "kind": "interface",
18768
+ "locationInModule": {
18769
+ "filename": "src/sbom-catalog/catalog-project.ts",
18770
+ "line": 29
18771
+ },
18772
+ "name": "SbomCatalogVulnerabilityMonitorProps",
18773
+ "properties": [
18774
+ {
18775
+ "abstract": true,
18776
+ "docs": {
18777
+ "stability": "stable",
18778
+ "summary": "Notification sent when the vulnerability monitor changes state."
18779
+ },
18780
+ "immutable": true,
18781
+ "locationInModule": {
18782
+ "filename": "src/sbom-catalog/catalog-project.ts",
18783
+ "line": 31
18784
+ },
18785
+ "name": "notification",
18786
+ "type": {
18787
+ "fqn": "@rio-cloud/cdk-v2-constructs.datadogv2.INotification"
18788
+ }
18789
+ }
18790
+ ],
18791
+ "symbolId": "src/sbom-catalog/catalog-project:SbomCatalogVulnerabilityMonitorProps"
18792
+ },
18450
18793
  "@rio-cloud/cdk-v2-constructs.Schema": {
18451
18794
  "assembly": "@rio-cloud/cdk-v2-constructs",
18452
18795
  "docs": {
@@ -19166,7 +19509,7 @@
19166
19509
  "assembly": "@rio-cloud/cdk-v2-constructs",
19167
19510
  "base": "constructs.Construct",
19168
19511
  "docs": {
19169
- "remarks": "Use this construct when a stack owns one independently versioned project. The files are uploaded after the stack\nreaches `CREATE_COMPLETE` or `UPDATE_COMPLETE`. The EventBridge event time and ID identify the upload.\n\nThe construct automatically adds the RIO Landing Zone `team_identifier` tag and grants the generated upload Lambda\npermission to read the source assets and write them to the central catalog bucket. All SBOM catalog constructs in\nthe same stack reuse one upload Lambda.\n\nExample:\n```ts\nconst sbom = new s3Assets.Asset(this, 'SbomAsset', {\n path: 'build/sbom.json',\n});\nconst vex = new s3Assets.Asset(this, 'VexAsset', {\n path: 'build/vex.json',\n});\n\nnew StandaloneSbomCatalogProject(this, 'CatalogUpload', {\n name: 'billing-api',\n version: '1.4.0',\n additionalTags: ['component:backend'],\n sbom,\n vex,\n});\n```",
19512
+ "remarks": "Use this construct when a stack owns one independently versioned project. The files are uploaded after the stack\nreaches `CREATE_COMPLETE` or `UPDATE_COMPLETE`. The EventBridge event time and ID identify the upload.\n\nThe construct automatically adds the RIO Landing Zone `team_identifier` tag and grants the generated upload Lambda\npermission to read the source assets and write them to the central catalog bucket. All SBOM catalog constructs in\nthe same stack reuse one upload Lambda.\n\nExample:\n```ts\nconst sbom = new s3Assets.Asset(this, 'SbomAsset', {\n path: 'build/sbom.json',\n});\nconst vex = new s3Assets.Asset(this, 'VexAsset', {\n path: 'build/vex.json',\n});\n\nnew StandaloneSbomCatalogProject(this, 'CatalogUpload', {\n name: 'billing-api',\n version: '1.4.0',\n additionalTags: ['component:backend'],\n sbom,\n vex,\n vulnerabilityMonitorProps: {\n notification: new datadogv2.DefaultSlackNotification(),\n },\n});\n```",
19170
19513
  "stability": "stable",
19171
19514
  "summary": "Registers one project's SBOM and optional VEX in the central SBOM catalog."
19172
19515
  },
@@ -19177,7 +19520,7 @@
19177
19520
  },
19178
19521
  "locationInModule": {
19179
19522
  "filename": "src/sbom-catalog/catalog-project.ts",
19180
- "line": 122
19523
+ "line": 150
19181
19524
  },
19182
19525
  "parameters": [
19183
19526
  {
@@ -19203,7 +19546,7 @@
19203
19546
  "kind": "class",
19204
19547
  "locationInModule": {
19205
19548
  "filename": "src/sbom-catalog/catalog-project.ts",
19206
- "line": 121
19549
+ "line": 149
19207
19550
  },
19208
19551
  "name": "StandaloneSbomCatalogProject",
19209
19552
  "symbolId": "src/sbom-catalog/catalog-project:StandaloneSbomCatalogProject"
@@ -19218,7 +19561,7 @@
19218
19561
  "kind": "interface",
19219
19562
  "locationInModule": {
19220
19563
  "filename": "src/sbom-catalog/catalog-project.ts",
19221
- "line": 27
19564
+ "line": 34
19222
19565
  },
19223
19566
  "name": "StandaloneSbomCatalogProjectProps",
19224
19567
  "properties": [
@@ -19231,7 +19574,7 @@
19231
19574
  "immutable": true,
19232
19575
  "locationInModule": {
19233
19576
  "filename": "src/sbom-catalog/catalog-project.ts",
19234
- "line": 29
19577
+ "line": 36
19235
19578
  },
19236
19579
  "name": "name",
19237
19580
  "type": {
@@ -19247,7 +19590,7 @@
19247
19590
  "immutable": true,
19248
19591
  "locationInModule": {
19249
19592
  "filename": "src/sbom-catalog/catalog-project.ts",
19250
- "line": 43
19593
+ "line": 50
19251
19594
  },
19252
19595
  "name": "sbom",
19253
19596
  "type": {
@@ -19264,7 +19607,7 @@
19264
19607
  "immutable": true,
19265
19608
  "locationInModule": {
19266
19609
  "filename": "src/sbom-catalog/catalog-project.ts",
19267
- "line": 40
19610
+ "line": 47
19268
19611
  },
19269
19612
  "name": "additionalTags",
19270
19613
  "optional": true,
@@ -19287,7 +19630,7 @@
19287
19630
  "immutable": true,
19288
19631
  "locationInModule": {
19289
19632
  "filename": "src/sbom-catalog/catalog-project.ts",
19290
- "line": 32
19633
+ "line": 39
19291
19634
  },
19292
19635
  "name": "version",
19293
19636
  "optional": true,
@@ -19304,13 +19647,32 @@
19304
19647
  "immutable": true,
19305
19648
  "locationInModule": {
19306
19649
  "filename": "src/sbom-catalog/catalog-project.ts",
19307
- "line": 46
19650
+ "line": 53
19308
19651
  },
19309
19652
  "name": "vex",
19310
19653
  "optional": true,
19311
19654
  "type": {
19312
19655
  "fqn": "aws-cdk-lib.aws_s3_assets.Asset"
19313
19656
  }
19657
+ },
19658
+ {
19659
+ "abstract": true,
19660
+ "docs": {
19661
+ "default": "A vulnerability monitor using {@link datadogv2.DefaultSlackNotification }",
19662
+ "remarks": "When omitted, the monitor uses {@link datadogv2.DefaultSlackNotification}.",
19663
+ "stability": "stable",
19664
+ "summary": "Optional vulnerability monitor configuration."
19665
+ },
19666
+ "immutable": true,
19667
+ "locationInModule": {
19668
+ "filename": "src/sbom-catalog/catalog-project.ts",
19669
+ "line": 62
19670
+ },
19671
+ "name": "vulnerabilityMonitorProps",
19672
+ "optional": true,
19673
+ "type": {
19674
+ "fqn": "@rio-cloud/cdk-v2-constructs.SbomCatalogVulnerabilityMonitorProps"
19675
+ }
19314
19676
  }
19315
19677
  ],
19316
19678
  "symbolId": "src/sbom-catalog/catalog-project:StandaloneSbomCatalogProjectProps"
@@ -29632,5 +29994,5 @@
29632
29994
  }
29633
29995
  },
29634
29996
  "version": "0.0.0",
29635
- "fingerprint": "kQRA3Qi6/3G/p6TDBoWR1PEs9P+DILXCNZ6mRA5CmsA="
29997
+ "fingerprint": "XZphhq0PqcKQAClIl1Rt5V+SNxfN9zK3Twvs2jxjIJc="
29636
29998
  }
@@ -1,5 +1,11 @@
1
1
  import * as s3Assets from 'aws-cdk-lib/aws-s3-assets';
2
2
  import { Construct } from 'constructs';
3
+ import * as datadogv2 from '../datadogv2';
4
+ /** Notification configuration for an SBOM catalog vulnerability monitor. */
5
+ export interface SbomCatalogVulnerabilityMonitorProps {
6
+ /** Notification sent when the vulnerability monitor changes state. */
7
+ readonly notification: datadogv2.INotification;
8
+ }
3
9
  export interface StandaloneSbomCatalogProjectProps {
4
10
  /** Must be non-empty and must not contain `/`. */
5
11
  readonly name: string;
@@ -16,6 +22,14 @@ export interface StandaloneSbomCatalogProjectProps {
16
22
  readonly sbom: s3Assets.Asset;
17
23
  /** Optional JSON VEX file asset to upload. */
18
24
  readonly vex?: s3Assets.Asset;
25
+ /**
26
+ * Optional vulnerability monitor configuration.
27
+ *
28
+ * When omitted, the monitor uses {@link datadogv2.DefaultSlackNotification}.
29
+ *
30
+ * @defaultValue A vulnerability monitor using {@link datadogv2.DefaultSlackNotification}
31
+ */
32
+ readonly vulnerabilityMonitorProps?: SbomCatalogVulnerabilityMonitorProps;
19
33
  }
20
34
  /** A child project in an SBOM catalog collection. */
21
35
  export interface SbomCatalogProjectChild {
@@ -51,6 +65,14 @@ export interface SbomCatalogProjectProps {
51
65
  readonly sharedTags?: string[];
52
66
  /** Child catalog projects. Must contain between one and three projects. */
53
67
  readonly children: SbomCatalogProjectChild[];
68
+ /**
69
+ * Optional vulnerability monitor configuration shared by all child monitors.
70
+ *
71
+ * When omitted, the monitors use {@link datadogv2.DefaultSlackNotification}.
72
+ *
73
+ * @defaultValue Vulnerability monitors using {@link datadogv2.DefaultSlackNotification}
74
+ */
75
+ readonly vulnerabilityMonitorProps?: SbomCatalogVulnerabilityMonitorProps;
54
76
  }
55
77
  /**
56
78
  * Registers one project's SBOM and optional VEX in the central SBOM catalog.
@@ -77,6 +99,9 @@ export interface SbomCatalogProjectProps {
77
99
  * additionalTags: ['component:backend'],
78
100
  * sbom,
79
101
  * vex,
102
+ * vulnerabilityMonitorProps: {
103
+ * notification: new datadogv2.DefaultSlackNotification(),
104
+ * },
80
105
  * });
81
106
  * ```
82
107
  */
@@ -118,6 +143,9 @@ export declare class StandaloneSbomCatalogProject extends Construct {
118
143
  * additionalTags: ['component:infrastructure'],
119
144
  * },
120
145
  * ],
146
+ * vulnerabilityMonitorProps: {
147
+ * notification: new datadogv2.DefaultSlackNotification(),
148
+ * },
121
149
  * });
122
150
  * ```
123
151
  */
@@ -12,6 +12,7 @@ const logs = require("aws-cdk-lib/aws-logs");
12
12
  const constructs_1 = require("constructs");
13
13
  const path = require("path");
14
14
  const constants_1 = require("../constants");
15
+ const datadogv2 = require("../datadogv2");
15
16
  const rio_landing_zone_1 = require("../rio-landing-zone");
16
17
  const constants_2 = require("./constants");
17
18
  const DEFAULT_VERSION = 'main';
@@ -45,6 +46,9 @@ const UPLOAD_LOG_GROUP_ID = 'SbomCatalogUploadLogGroup';
45
46
  * additionalTags: ['component:backend'],
46
47
  * sbom,
47
48
  * vex,
49
+ * vulnerabilityMonitorProps: {
50
+ * notification: new datadogv2.DefaultSlackNotification(),
51
+ * },
48
52
  * });
49
53
  * ```
50
54
  */
@@ -68,6 +72,12 @@ class StandaloneSbomCatalogProject extends constructs_1.Construct {
68
72
  ...(props.vex === undefined ? {} : { vex: assetLocation(props.vex) }),
69
73
  };
70
74
  createUploadResources(this, configuration, [props.sbom, ...(props.vex === undefined ? [] : [props.vex])]);
75
+ createVulnerabilityMonitor({
76
+ scope: this,
77
+ projectName: props.name,
78
+ accountName: configuration.originAccountName,
79
+ notification: props.vulnerabilityMonitorProps?.notification ?? new datadogv2.DefaultSlackNotification(),
80
+ });
71
81
  }
72
82
  }
73
83
  exports.StandaloneSbomCatalogProject = StandaloneSbomCatalogProject;
@@ -108,6 +118,9 @@ StandaloneSbomCatalogProject[_a] = { fqn: "@rio-cloud/cdk-v2-constructs.Standalo
108
118
  * additionalTags: ['component:infrastructure'],
109
119
  * },
110
120
  * ],
121
+ * vulnerabilityMonitorProps: {
122
+ * notification: new datadogv2.DefaultSlackNotification(),
123
+ * },
111
124
  * });
112
125
  * ```
113
126
  */
@@ -137,11 +150,48 @@ class SbomCatalogProject extends constructs_1.Construct {
137
150
  })),
138
151
  };
139
152
  createUploadResources(this, configuration, props.children.flatMap(child => [child.sbom, ...(child.vex === undefined ? [] : [child.vex])]));
153
+ const notification = props.vulnerabilityMonitorProps?.notification ?? new datadogv2.DefaultSlackNotification();
154
+ props.children.forEach(child => createVulnerabilityMonitor({
155
+ scope: this,
156
+ projectName: child.name,
157
+ accountName: configuration.originAccountName,
158
+ notification,
159
+ }));
140
160
  }
141
161
  }
142
162
  exports.SbomCatalogProject = SbomCatalogProject;
143
163
  _b = JSII_RTTI_SYMBOL_1;
144
164
  SbomCatalogProject[_b] = { fqn: "@rio-cloud/cdk-v2-constructs.SbomCatalogProject", version: "0.0.0" };
165
+ function createVulnerabilityMonitor(props) {
166
+ new datadogv2.DatadogMonitor(props.scope, `${props.projectName}VulnerabilityMonitor`, {
167
+ name: `${props.accountName} VulnerabilityMonitor`,
168
+ serviceName: props.projectName,
169
+ monitorType: datadogv2.DatadogMonitorQueryAlertType.METRIC_ALERT,
170
+ query: 'max(last_15m):max:service.vulnerabilities{' +
171
+ `account_name:${props.accountName},` +
172
+ `project_name:${props.projectName}` +
173
+ '} > 0',
174
+ message: [
175
+ '{{#is_alert}}',
176
+ `Project ${props.projectName} has {{value}} known vulnerabilities.`,
177
+ '{{/is_alert}}',
178
+ '',
179
+ '{{#is_recovery}}',
180
+ `Project ${props.projectName} no longer reports vulnerabilities.`,
181
+ '{{/is_recovery}}',
182
+ ].join('\n'),
183
+ notification: props.notification,
184
+ priority: 3,
185
+ extraTags: ['monitor_type:vulnerability'],
186
+ optionOverrides: {
187
+ thresholds: {
188
+ critical: 0,
189
+ },
190
+ notifyNoData: false,
191
+ requireFullWindow: false,
192
+ },
193
+ });
194
+ }
145
195
  function createUploadResources(scope, configuration, sourceAssets) {
146
196
  const stack = aws_cdk_lib_1.Stack.of(scope);
147
197
  const uploadFunction = new lambda.SingletonFunction(scope, 'UploadFunction', {
@@ -277,4 +327,4 @@ function parseTagsWithValidUniqueKeys(tags, propertyName, allowManagedTags = fal
277
327
  function optionalTags(tags) {
278
328
  return tags === undefined ? {} : { tags };
279
329
  }
280
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0YWxvZy1wcm9qZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Nib20tY2F0YWxvZy9jYXRhbG9nLXByb2plY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2Q0FBcUQ7QUFDckQsaURBQWlEO0FBQ2pELGdFQUFnRTtBQUNoRSwyQ0FBMkM7QUFDM0MsaURBQWlEO0FBQ2pELDZDQUE2QztBQUU3QywyQ0FBdUM7QUFDdkMsNkJBQTZCO0FBQzdCLDRDQUFvRDtBQUNwRCwwREFBcUQ7QUFDckQsMkNBQXNEO0FBUXRELE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQztBQUMvQixNQUFNLFlBQVksR0FBRyxDQUFDLENBQUM7QUFDdkIsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFlBQVksRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7QUFDcEUsTUFBTSxvQkFBb0IsR0FBRyxzQ0FBc0MsQ0FBQztBQUNwRSxNQUFNLHVCQUF1QixHQUFHLG1CQUFtQixDQUFDO0FBQ3BELE1BQU0sbUJBQW1CLEdBQUcsMkJBQTJCLENBQUM7QUFvRXhEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EyQkc7QUFDSCxNQUFhLDRCQUE2QixTQUFRLHNCQUFTO0lBQ3pELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBd0M7UUFDaEYsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxJQUFJLGVBQWUsQ0FBQztRQUNqRCxNQUFNLGNBQWMsR0FBRyxpQ0FBYyxDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQztRQUNuRixNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsQ0FBQyxtQkFBbUIsY0FBYyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzFGLGlDQUFp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SSxDQUFDLElBQUksY0FBYyxLQUFLLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDN0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLFlBQVksU0FBUyxHQUFHLGdFQUFnRSxDQUFDLENBQUM7UUFDL0csQ0FBQztRQUVELE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQ3pDLElBQUksZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUNuRCxNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsWUFBWSxrQ0FBa0MsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUMzRSxDQUFDO1FBQ0QsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDcEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLFlBQVksZ0NBQWdDLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDekUsQ0FBQztRQUNELE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQsU0FBUyxZQUFZLENBQUMsSUFBZTtJQUNuQyxPQUFPLElBQUksS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUM1QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRHVyYXRpb24sIFN0YWNrLCBUb2tlbiB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGV2ZW50cyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZXZlbnRzJztcbmltcG9ydCAqIGFzIGV2ZW50c1RhcmdldHMgZnJvbSAnYXdzLWNkay1saWIvYXdzLWV2ZW50cy10YXJnZXRzJztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCAqIGFzIGxvZ3MgZnJvbSAnYXdzLWNkay1saWIvYXdzLWxvZ3MnO1xuaW1wb3J0ICogYXMgczNBc3NldHMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzLWFzc2V0cyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBERUZBVUxUX05PREVfUlVOVElNRSB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBSaW9MYW5kaW5nWm9uZSB9IGZyb20gJy4uL3Jpby1sYW5kaW5nLXpvbmUnO1xuaW1wb3J0IHsgU0JPTV9DQVRBTE9HX0JVQ0tFVF9BUk4gfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgdHlwZSB7XG4gIEFzc2V0TG9jYXRpb24sXG4gIENhdGFsb2dVcGxvYWRDb25maWd1cmF0aW9uLFxuICBTdGFuZGFsb25lVXBsb2FkQ29uZmlndXJhdGlvbixcbiAgVXBsb2FkQ29uZmlndXJhdGlvbixcbn0gZnJvbSAnLi9sYW1iZGEvdHlwZXMnO1xuXG5jb25zdCBERUZBVUxUX1ZFUlNJT04gPSAnbWFpbic7XG5jb25zdCBNQVhfQ0hJTERSRU4gPSAzO1xuY29uc3QgTUFOQUdFRF9UQUdfS0VZUyA9IG5ldyBTZXQoWydhY2NvdW50X2lkJywgJ3RlYW1faWRlbnRpZmllciddKTtcbmNvbnN0IFVQTE9BRF9GVU5DVElPTl9VVUlEID0gJ2QyMGI5ZjQ2LTA3MDItNDdkZC04OWMyLTllYTRiZGRhYWNmYyc7XG5jb25zdCBVUExPQURfRlVOQ1RJT05fUFVSUE9TRSA9ICdTYm9tQ2F0YWxvZ1VwbG9hZCc7XG5jb25zdCBVUExPQURfTE9HX0dST1VQX0lEID0gJ1Nib21DYXRhbG9nVXBsb2FkTG9nR3JvdXAnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFN0YW5kYWxvbmVTYm9tQ2F0YWxvZ1Byb2plY3RQcm9wcyB7XG4gIC8qKiBNdXN0IGJlIG5vbi1lbXB0eSBhbmQgbXVzdCBub3QgY29udGFpbiBgL2AuICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKiogUHJvamVjdCB2ZXJzaW9uLiBEZWZhdWx0cyB0byBgbWFpbmAuICovXG4gIHJlYWRvbmx5IHZlcnNpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgcHJvamVjdCB0YWdzIHVzaW5nIHRoZSBga2V5OnZhbHVlYCBmb3JtYXQuXG4gICAqXG4gICAqIGB0ZWFtX2lkZW50aWZpZXJgIGlzIGFsd2F5cyBhZGRlZCBmcm9tIHRoZSBSSU8gTGFuZGluZyBab25lIGNvbmZpZ3VyYXRpb24uIERvIG5vdCBwcm92aWRlIGB0ZWFtX2lkZW50aWZpZXJgIG9yXG4gICAqIGBhY2NvdW50X2lkYDsgYm90aCBhcmUgbWFuYWdlZCB0YWcga2V5cy5cbiAgICovXG4gIHJlYWRvbmx5IGFkZGl0aW9uYWxUYWdzPzogc3RyaW5nW107XG5cbiAgLyoqIEpTT04gU0JPTSBmaWxlIGFzc2V0IHRvIHVwbG9hZC4gKi9cbiAgcmVhZG9ubHkgc2JvbTogczNBc3NldHMuQXNzZXQ7XG5cbiAgLyoqIE9wdGlvbmFsIEpTT04gVkVYIGZpbGUgYXNzZXQgdG8gdXBsb2FkLiAqL1xuICByZWFkb25seSB2ZXg/OiBzM0Fzc2V0cy5Bc3NldDtcbn1cblxuLyoqIEEgY2hpbGQgcHJvamVjdCBpbiBhbiBTQk9NIGNhdGFsb2cgY29sbGVjdGlvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2JvbUNhdGFsb2dQcm9qZWN0Q2hpbGQge1xuICAvKipcbiAgICogTXVzdCBiZSBub24tZW1wdHksIHVuaXF1ZSB3aXRoaW4gdGhlIGNvbGxlY3Rpb24sIGFuZCBtdXN0IG5vdCBjb250YWluIGAvYC5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKiogQ2hpbGQgcHJvamVjdCB2ZXJzaW9uLiBEZWZhdWx0cyB0byBgbWFpbmAuICovXG4gIHJlYWRvbmx5IHZlcnNpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRhZ3MgYWRkZWQgdG8gdGhpcyBjaGlsZCwgdXNpbmcgdGhlIGBrZXk6dmFsdWVgIGZvcm1hdC5cbiAgICpcbiAgICogQ2hpbGQgdGFncyBvdmVycmlkZSBzaGFyZWQgdGFncyB3aXRoIHRoZSBzYW1lIGtleS4gYHRlYW1faWRlbnRpZmllcmAgaXMgYWx3YXlzIGluaGVyaXRlZCBmcm9tIHRoZSBSSU8gTGFuZGluZyBab25lXG4gICAqIGNvbmZpZ3VyYXRpb24uIERvIG5vdCBwcm92aWRlIGB0ZWFtX2lkZW50aWZpZXJgIG9yIGBhY2NvdW50X2lkYDsgYm90aCBhcmUgbWFuYWdlZCB0YWcga2V5cy5cbiAgICovXG4gIHJlYWRvbmx5IGFkZGl0aW9uYWxUYWdzPzogc3RyaW5nW107XG5cbiAgLyoqIEpTT04gU0JPTSBmaWxlIGFzc2V0IHRvIHVwbG9hZC4gKi9cbiAgcmVhZG9ubHkgc2JvbTogczNBc3NldHMuQXNzZXQ7XG5cbiAgLyoqIE9wdGlvbmFsIEpTT04gVkVYIGZpbGUgYXNzZXQgdG8gdXBsb2FkLiAqL1xuICByZWFkb25seSB2ZXg/OiBzM0Fzc2V0cy5Bc3NldDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTYm9tQ2F0YWxvZ1Byb2plY3RQcm9wcyB7XG4gIC8qKiBDb2xsZWN0aW9uIG5hbWUgc3RvcmVkIGluIHRoZSBtYW5pZmVzdCBhbmQgdXNlZCBpbiB0aGUgZGVzdGluYXRpb24ga2V5LiAqL1xuICByZWFkb25seSBjb2xsZWN0aW9uTmFtZTogc3RyaW5nO1xuXG4gIC8qKiBDb2xsZWN0aW9uIHZlcnNpb24uIERlZmF1bHRzIHRvIGBtYWluYC4gKi9cbiAgcmVhZG9ubHkgY29sbGVjdGlvblZlcnNpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRhZ3MgaW5oZXJpdGVkIGJ5IGV2ZXJ5IGNoaWxkLCB1c2luZyB0aGUgYGtleTp2YWx1ZWAgZm9ybWF0LlxuICAgKlxuICAgKiBBIGNoaWxkJ3MgYWRkaXRpb25hbCB0YWdzIG92ZXJyaWRlIHNoYXJlZCB0YWdzIHdpdGggdGhlIHNhbWUga2V5LiBgdGVhbV9pZGVudGlmaWVyYCBpcyBhbHdheXMgYWRkZWQgZnJvbSB0aGUgUklPXG4gICAqIExhbmRpbmcgWm9uZSBjb25maWd1cmF0aW9uLiBEbyBub3QgcHJvdmlkZSBgdGVhbV9pZGVudGlmaWVyYCBvciBgYWNjb3VudF9pZGA7IGJvdGggYXJlIG1hbmFnZWQgdGFnIGtleXMuXG4gICAqL1xuICByZWFkb25seSBzaGFyZWRUYWdzPzogc3RyaW5nW107XG5cbiAgLyoqIENoaWxkIGNhdGFsb2cgcHJvamVjdHMuIE11c3QgY29udGFpbiBiZXR3ZWVuIG9uZSBhbmQgdGhyZWUgcHJvamVjdHMuICovXG4gIHJlYWRvbmx5IGNoaWxkcmVuOiBTYm9tQ2F0YWxvZ1Byb2plY3RDaGlsZFtdO1xufVxuXG4vKipcbiAqIFJlZ2lzdGVycyBvbmUgcHJvamVjdCdzIFNCT00gYW5kIG9wdGlvbmFsIFZFWCBpbiB0aGUgY2VudHJhbCBTQk9NIGNhdGFsb2cuXG4gKlxuICogVXNlIHRoaXMgY29uc3RydWN0IHdoZW4gYSBzdGFjayBvd25zIG9uZSBpbmRlcGVuZGVudGx5IHZlcnNpb25lZCBwcm9qZWN0LiBUaGUgZmlsZXMgYXJlIHVwbG9hZGVkIGFmdGVyIHRoZSBzdGFja1xuICogcmVhY2hlcyBgQ1JFQVRFX0NPTVBMRVRFYCBvciBgVVBEQVRFX0NPTVBMRVRFYC4gVGhlIEV2ZW50QnJpZGdlIGV2ZW50IHRpbWUgYW5kIElEIGlkZW50aWZ5IHRoZSB1cGxvYWQuXG4gKlxuICogVGhlIGNvbnN0cnVjdCBhdXRvbWF0aWNhbGx5IGFkZHMgdGhlIFJJTyBMYW5kaW5nIFpvbmUgYHRlYW1faWRlbnRpZmllcmAgdGFnIGFuZCBncmFudHMgdGhlIGdlbmVyYXRlZCB1cGxvYWQgTGFtYmRhXG4gKiBwZXJtaXNzaW9uIHRvIHJlYWQgdGhlIHNvdXJjZSBhc3NldHMgYW5kIHdyaXRlIHRoZW0gdG8gdGhlIGNlbnRyYWwgY2F0YWxvZyBidWNrZXQuIEFsbCBTQk9NIGNhdGFsb2cgY29uc3RydWN0cyBpblxuICogdGhlIHNhbWUgc3RhY2sgcmV1c2Ugb25lIHVwbG9hZCBMYW1iZGEuXG4gKlxuICogRXhhbXBsZTpcbiAqIGBgYHRzXG4gKiBjb25zdCBzYm9tID0gbmV3IHMzQXNzZXRzLkFzc2V0KHRoaXMsICdTYm9tQXNzZXQnLCB7XG4gKiAgIHBhdGg6ICdidWlsZC9zYm9tLmpzb24nLFxuICogfSk7XG4gKiBjb25zdCB2ZXggPSBuZXcgczNBc3NldHMuQXNzZXQodGhpcywgJ1ZleEFzc2V0Jywge1xuICogICBwYXRoOiAnYnVpbGQvdmV4Lmpzb24nLFxuICogfSk7XG4gKlxuICogbmV3IFN0YW5kYWxvbmVTYm9tQ2F0YWxvZ1Byb2plY3QodGhpcywgJ0NhdGFsb2dVcGxvYWQnLCB7XG4gKiAgIG5hbWU6ICdiaWxsaW5nLWFwaScsXG4gKiAgIHZlcnNpb246ICcxLjQuMCcsXG4gKiAgIGFkZGl0aW9uYWxUYWdzOiBbJ2NvbXBvbmVudDpiYWNrZW5kJ10sXG4gKiAgIHNib20sXG4gKiAgIHZleCxcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBTdGFuZGFsb25lU2JvbUNhdGFsb2dQcm9qZWN0IGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFN0YW5kYWxvbmVTYm9tQ2F0YWxvZ1Byb2plY3RQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCB2ZXJzaW9uID0gcHJvcHMudmVyc2lvbiA/PyBERUZBVUxUX1ZFUlNJT047XG4gICAgY29uc3QgdGVhbUlkZW50aWZpZXIgPSBSaW9MYW5kaW5nWm9uZS5nZXRUZWFtSWRlbnRpZmllclBhcmFtZXRlcih0aGlzKS5zdHJpbmdWYWx1ZTtcbiAgICBjb25zdCB0YWdzID0gbWVyZ2VUYWdzKFtgdGVhbV9pZGVudGlmaWVyOiR7dGVhbUlkZW50aWZpZXJ9YF0sIHByb3BzLmFkZGl0aW9uYWxUYWdzKSA/PyBbXTtcbiAgICBhc3NlcnROb25FbXB0eVZhbHVlV2l0aG91dFNsYXNoZXMoJ25hbWUnLCBwcm9wcy5uYW1lKTtcbiAgICBhc3NlcnROb25FbXB0eVZlcnNpb24oJ3ZlcnNpb24nLCB2ZXJzaW9uKTtcbiAgICBwYXJzZVRhZ3NXaXRoVmFsaWRVbmlxdWVLZXlzKHByb3BzLmFkZGl0aW9uYWxUYWdzID8/IFtdLCAnYWRkaXRpb25hbFRhZ3MnKTtcblxuICAgIGNvbnN0IHN0YWNrID0gU3RhY2sub2YodGhpcyk7XG4gICAgY29uc3QgY29uZmlndXJhdGlvbjogU3RhbmRhbG9uZVVwbG9hZENvbmZpZ3VyYXRpb24gPSB7XG4gICAgICBvcmlnaW5BY2NvdW50SWQ6IHN0YWNrLmFjY291bnQsXG4gICAgICBvcmlnaW5BY2NvdW50TmFtZTogUmlvTGFuZGluZ1pvbmUuZ2V0QWNjb3VudE5hbWVQYXJhbWV0ZXIodGhpcykuc3RyaW5nVmFsdWUsXG4gICAgICBuYW1lOiBwcm9wcy5uYW1lLFxuICAgICAgdmVyc2lvbixcbiAgICAgIHRhZ3MsXG4gICAgICBzYm9tOiBhc3NldExvY2F0aW9uKHByb3BzLnNib20pLFxuICAgICAgLi4uKHByb3BzLnZleCA9PT0gdW5kZWZpbmVkID8ge30gOiB7IHZleDogYXNzZXRMb2NhdGlvbihwcm9wcy52ZXgpIH0pLFxuICAgIH07XG5cbiAgICBjcmVhdGVVcGxvYWRSZXNvdXJjZXModGhpcywgY29uZmlndXJhdGlvbiwgW3Byb3BzLnNib20sIC4uLihwcm9wcy52ZXggPT09IHVuZGVmaW5lZCA/IFtdIDogW3Byb3BzLnZleF0pXSk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZWdpc3RlcnMgYSBjb2xsZWN0aW9uIG9mIHJlbGF0ZWQgcHJvamVjdCBTQk9NcyBhbmQgb3B0aW9uYWwgVkVYIGZpbGVzIGluIHRoZSBjZW50cmFsIFNCT00gY2F0YWxvZy5cbiAqXG4gKiBVc2UgdGhpcyBjb25zdHJ1Y3Qgd2hlbiBvbmUgc3RhY2sgcHJvZHVjZXMgYmV0d2VlbiBvbmUgYW5kIHRocmVlIHJlbGF0ZWQgcHJvamVjdHMgdGhhdCBzaG91bGQgc2hhcmUgYSBjYXRhbG9nXG4gKiBjb2xsZWN0aW9uLiBTaGFyZWQgdGFncyBhcmUgaW5oZXJpdGVkIGJ5IGV2ZXJ5IGNoaWxkLCB3aGlsZSBjaGlsZCB0YWdzIHdpdGggdGhlIHNhbWUga2V5IG92ZXJyaWRlIHRoZW0uIFRoZSBSSU9cbiAqIExhbmRpbmcgWm9uZSBgdGVhbV9pZGVudGlmaWVyYCB0YWcgaXMgYWx3YXlzIGluY2x1ZGVkLlxuICpcbiAqIFRoZSBmaWxlcyBhcmUgdXBsb2FkZWQgYWZ0ZXIgdGhlIHN0YWNrIHJlYWNoZXMgYENSRUFURV9DT01QTEVURWAgb3IgYFVQREFURV9DT01QTEVURWAuIFRoZSBFdmVudEJyaWRnZSBldmVudCB0aW1lXG4gKiBhbmQgSUQgaWRlbnRpZnkgdGhlIHVwbG9hZC4gQWxsIFNCT00gY2F0YWxvZyBjb25zdHJ1Y3RzIGluIHRoZSBzYW1lIHN0YWNrIHJldXNlIG9uZSB1cGxvYWQgTGFtYmRhLlxuICpcbiAqIEV4YW1wbGU6XG4gKiBgYGB0c1xuICogY29uc3QgYXBpU2JvbSA9IG5ldyBzM0Fzc2V0cy5Bc3NldCh0aGlzLCAnQXBpU2JvbUFzc2V0Jywge1xuICogICBwYXRoOiAnYnVpbGQvYXBpLXNib20uanNvbicsXG4gKiB9KTtcbiAqIGNvbnN0IGluZnJhc3RydWN0dXJlU2JvbSA9IG5ldyBzM0Fzc2V0cy5Bc3NldCh0aGlzLCAnSW5mcmFzdHJ1Y3R1cmVTYm9tQXNzZXQnLCB7XG4gKiAgIHBhdGg6ICdidWlsZC9pbmZyYXN0cnVjdHVyZS1zYm9tLmpzb24nLFxuICogfSk7XG4gKlxuICogbmV3IFNib21DYXRhbG9nUHJvamVjdCh0aGlzLCAnQ2F0YWxvZ1VwbG9hZCcsIHtcbiAqICAgY29sbGVjdGlvbk5hbWU6ICdiaWxsaW5nJyxcbiAqICAgY29sbGVjdGlvblZlcnNpb246ICcxLjQuMCcsXG4gKiAgIHNoYXJlZFRhZ3M6IFsnZG9tYWluOmJpbGxpbmcnXSxcbiAqICAgY2hpbGRyZW46IFtcbiAqICAgICB7XG4gKiAgICAgICBuYW1lOiAnYXBpJyxcbiAqICAgICAgIHNib206IGFwaVNib20sXG4gKiAgICAgICBhZGRpdGlvbmFsVGFnczogWydjb21wb25lbnQ6YmFja2VuZCddLFxuICogICAgIH0sXG4gKiAgICAge1xuICogICAgICAgbmFtZTogJ2luZnJhc3RydWN0dXJlJyxcbiAqICAgICAgIHNib206IGluZnJhc3RydWN0dXJlU2JvbSxcbiAqICAgICAgIGFkZGl0aW9uYWxUYWdzOiBbJ2NvbXBvbmVudDppbmZyYXN0cnVjdHVyZSddLFxuICogICAgIH0sXG4gKiAgIF0sXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgU2JvbUNhdGFsb2dQcm9qZWN0IGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFNib21DYXRhbG9nUHJvamVjdFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IGNvbGxlY3Rpb25WZXJzaW9uID0gcHJvcHMuY29sbGVjdGlvblZlcnNpb24gPz8gREVGQVVMVF9WRVJTSU9OO1xuICAgIGNvbnN0IHRlYW1JZGVudGlmaWVyID0gUmlvTGFuZGluZ1pvbmUuZ2V0VGVhbUlkZW50aWZpZXJQYXJhbWV0ZXIodGhpcykuc3RyaW5nVmFsdWU7XG4gICAgYXNzZXJ0Tm9uRW1wdHlWYWx1ZVdpdGhvdXRTbGFzaGVzKCdjb2xsZWN0aW9uTmFtZScsIHByb3BzLmNvbGxlY3Rpb25OYW1lKTtcbiAgICBhc3NlcnROb25FbXB0eVZlcnNpb24oJ2NvbGxlY3Rpb25WZXJzaW9uJywgY29sbGVjdGlvblZlcnNpb24pO1xuICAgIHZhbGlkYXRlQ2hpbGRyZW4ocHJvcHMuY2hpbGRyZW4pO1xuICAgIHBhcnNlVGFnc1dpdGhWYWxpZFVuaXF1ZUtleXMocHJvcHMuc2hhcmVkVGFncyA/PyBbXSwgJ3NoYXJlZFRhZ3MnKTtcbiAgICBjb25zdCBzaGFyZWRUYWdzID0gbWVyZ2VUYWdzKFtgdGVhbV9pZGVudGlmaWVyOiR7dGVhbUlkZW50aWZpZXJ9YF0sIHByb3BzLnNoYXJlZFRhZ3MpID8/IFtdO1xuXG4gICAgY29uc3Qgc3RhY2sgPSBTdGFjay5vZih0aGlzKTtcbiAgICBjb25zdCBjb25maWd1cmF0aW9uOiBDYXRhbG9nVXBsb2FkQ29uZmlndXJhdGlvbiA9IHtcbiAgICAgIG9yaWdpbkFjY291bnRJZDogc3RhY2suYWNjb3VudCxcbiAgICAgIG9yaWdpbkFjY291bnROYW1lOiBSaW9MYW5kaW5nWm9uZS5nZXRBY2NvdW50TmFtZVBhcmFtZXRlcih0aGlzKS5zdHJpbmdWYWx1ZSxcbiAgICAgIGNvbGxlY3Rpb25OYW1lOiBwcm9wcy5jb2xsZWN0aW9uTmFtZSxcbiAgICAgIGNvbGxlY3Rpb25WZXJzaW9uLFxuICAgICAgdGFnczogW2B0ZWFtX2lkZW50aWZpZXI6JHt0ZWFtSWRlbnRpZmllcn1gXSxcbiAgICAgIGNoaWxkcmVuOiBwcm9wcy5jaGlsZHJlbi5tYXAoY2hpbGQgPT4gKHtcbiAgICAgICAgbmFtZTogY2hpbGQubmFtZSxcbiAgICAgICAgdmVyc2lvbjogY2hpbGQudmVyc2lvbiA/PyBERUZBVUxUX1ZFUlNJT04sXG4gICAgICAgIC4uLm9wdGlvbmFsVGFncyhtZXJnZVRhZ3Moc2hhcmVkVGFncywgY2hpbGQuYWRkaXRpb25hbFRhZ3MpKSxcbiAgICAgICAgc2JvbTogYXNzZXRMb2NhdGlvbihjaGlsZC5zYm9tKSxcbiAgICAgICAgLi4uKGNoaWxkLnZleCA9PT0gdW5kZWZpbmVkID8ge30gOiB7IHZleDogYXNzZXRMb2NhdGlvbihjaGlsZC52ZXgpIH0pLFxuICAgICAgfSkpLFxuICAgIH07XG5cbiAgICBjcmVhdGVVcGxvYWRSZXNvdXJjZXMoXG4gICAgICB0aGlzLFxuICAgICAgY29uZmlndXJhdGlvbixcbiAgICAgIHByb3BzLmNoaWxkcmVuLmZsYXRNYXAoY2hpbGQgPT4gW2NoaWxkLnNib20sIC4uLihjaGlsZC52ZXggPT09IHVuZGVmaW5lZCA/IFtdIDogW2NoaWxkLnZleF0pXSlcbiAgICApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVVwbG9hZFJlc291cmNlcyhcbiAgc2NvcGU6IENvbnN0cnVjdCxcbiAgY29uZmlndXJhdGlvbjogVXBsb2FkQ29uZmlndXJhdGlvbixcbiAgc291cmNlQXNzZXRzOiBzM0Fzc2V0cy5Bc3NldFtdXG4pOiB2b2lkIHtcbiAgY29uc3Qgc3RhY2sgPSBTdGFjay5vZihzY29wZSk7XG5cbiAgY29uc3QgdXBsb2FkRnVuY3Rpb24gPSBuZXcgbGFtYmRhLlNpbmdsZXRvbkZ1bmN0aW9uKHNjb3BlLCAnVXBsb2FkRnVuY3Rpb24nLCB7XG4gICAgdXVpZDogVVBMT0FEX0ZVTkNUSU9OX1VVSUQsXG4gICAgbGFtYmRhUHVycG9zZTogVVBMT0FEX0ZVTkNUSU9OX1BVUlBPU0UsXG4gICAgcnVudGltZTogREVGQVVMVF9OT0RFX1JVTlRJTUUsXG4gICAgYXJjaGl0ZWN0dXJlOiBsYW1iZGEuQXJjaGl0ZWN0dXJlLkFSTV82NCxcbiAgICBoYW5kbGVyOiAnaGFuZGxlci5oYW5kbGVyJyxcbiAgICBjb2RlOiBsYW1iZGEuQ29kZS5mcm9tQXNzZXQocGF0aC5qb2luKF9fZGlybmFtZSwgJ2xhbWJkYScpLCB7XG4gICAgICBleGNsdWRlOiBbJyouanMnLCAnKi5kLnRzJ10sXG4gICAgfSksXG4gICAgbG9nZ2luZ0Zvcm1hdDogbGFtYmRhLkxvZ2dpbmdGb3JtYXQuSlNPTixcbiAgICBsb2dHcm91cDogZ2V0T3JDcmVhdGVVcGxvYWRMb2dHcm91cChzdGFjayksXG4gICAgaW5pdGlhbFBvbGljeTogW1xuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBhY3Rpb25zOiBbJ3MzOlB1dE9iamVjdCddLFxuICAgICAgICByZXNvdXJjZXM6IFtgJHtTQk9NX0NBVEFMT0dfQlVDS0VUX0FSTn0vKmBdLFxuICAgICAgfSksXG4gICAgXSxcbiAgICBtZW1vcnlTaXplOiAyNTYsXG4gICAgdGltZW91dDogRHVyYXRpb24ubWludXRlcygxKSxcbiAgfSk7XG5cbiAgZm9yIChjb25zdCBhc3NldCBvZiBzb3VyY2VBc3NldHMpIHtcbiAgICBhc3NldC5ncmFudFJlYWQodXBsb2FkRnVuY3Rpb24pO1xuICB9XG5cbiAgbmV3IGV2ZW50cy5SdWxlKHNjb3BlLCAnU3RhY2tDb21wbGV0aW9uUnVsZScsIHtcbiAgICBldmVudFBhdHRlcm46IHtcbiAgICAgIHNvdXJjZTogWydhd3MuY2xvdWRmb3JtYXRpb24nXSxcbiAgICAgIGRldGFpbFR5cGU6IFsnQ2xvdWRGb3JtYXRpb24gU3RhY2sgU3RhdHVzIENoYW5nZSddLFxuICAgICAgZGV0YWlsOiB7XG4gICAgICAgICdzdGFjay1pZCc6IFtzdGFjay5zdGFja0lkXSxcbiAgICAgICAgJ3N0YXR1cy1kZXRhaWxzJzoge1xuICAgICAgICAgIHN0YXR1czogWydDUkVBVEVfQ09NUExFVEUnLCAnVVBEQVRFX0NPTVBMRVRFJ10sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gICAgdGFyZ2V0czogW1xuICAgICAgbmV3IGV2ZW50c1RhcmdldHMuTGFtYmRhRnVuY3Rpb24odXBsb2FkRnVuY3Rpb24sIHtcbiAgICAgICAgZXZlbnQ6IGV2ZW50cy5SdWxlVGFyZ2V0SW5wdXQuZnJvbU9iamVjdCh7XG4gICAgICAgICAgZXZlbnRJZDogZXZlbnRzLkV2ZW50RmllbGQuZXZlbnRJZCxcbiAgICAgICAgICBldmVudFRpbWU6IGV2ZW50cy5FdmVudEZpZWxkLmZyb21QYXRoKCckLnRpbWUnKSxcbiAgICAgICAgICBzdGFja0lkOiBldmVudHMuRXZlbnRGaWVsZC5mcm9tUGF0aCgnJC5kZXRhaWwuc3RhY2staWQnKSxcbiAgICAgICAgICBzdGFja1N0YXR1czogZXZlbnRzLkV2ZW50RmllbGQuZnJvbVBhdGgoJyQuZGV0YWlsLnN0YXR1cy1kZXRhaWxzLnN0YXR1cycpLFxuICAgICAgICAgIGNvbmZpZ3VyYXRpb24sXG4gICAgICAgIH0pLFxuICAgICAgfSksXG4gICAgXSxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGdldE9yQ3JlYXRlVXBsb2FkTG9nR3JvdXAoc3RhY2s6IFN0YWNrKTogbG9ncy5Mb2dHcm91cCB7XG4gIGNvbnN0IGV4aXN0aW5nTG9nR3JvdXAgPSBzdGFjay5ub2RlLnRyeUZpbmRDaGlsZChVUExPQURfTE9HX0dST1VQX0lEKTtcbiAgaWYgKGV4aXN0aW5nTG9nR3JvdXAgaW5zdGFuY2VvZiBsb2dzLkxvZ0dyb3VwKSB7XG4gICAgcmV0dXJuIGV4aXN0aW5nTG9nR3JvdXA7XG4gIH1cbiAgaWYgKGV4aXN0aW5nTG9nR3JvdXAgIT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgU3RhY2sgYWxyZWFkeSBjb250YWlucyBhIGNvbnN0cnVjdCBuYW1lZCAnJHtVUExPQURfTE9HX0dST1VQX0lEfSdgKTtcbiAgfVxuICByZXR1cm4gbmV3IGxvZ3MuTG9nR3JvdXAoc3RhY2ssIFVQTE9BRF9MT0dfR1JPVVBfSUQsIHtcbiAgICByZXRlbnRpb246IGxvZ3MuUmV0ZW50aW9uRGF5cy5PTkVfV0VFSyxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGFzc2V0TG9jYXRpb24oYXNzZXQ6IHMzQXNzZXRzLkFzc2V0KTogQXNzZXRMb2NhdGlvbiB7XG4gIHJldHVybiB7XG4gICAgYnVja2V0TmFtZTogYXNzZXQuczNCdWNrZXROYW1lLFxuICAgIG9iamVjdEtleTogYXNzZXQuczNPYmplY3RLZXksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGFzc2VydE5vbkVtcHR5VmFsdWVXaXRob3V0U2xhc2hlcyhuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKFRva2VuLmlzVW5yZXNvbHZlZCh2YWx1ZSkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKHZhbHVlLmxlbmd0aCA9PT0gMCB8fCB2YWx1ZS5pbmNsdWRlcygnLycpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke25hbWV9IG11c3QgYmUgYSBub24tZW1wdHkgdmFsdWUgd2l0aG91dCAnLydgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhc3NlcnROb25FbXB0eVZlcnNpb24obmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQodmFsdWUpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmICh2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7bmFtZX0gbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmdgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUNoaWxkcmVuKGNoaWxkcmVuOiBTYm9tQ2F0YWxvZ1Byb2plY3RDaGlsZFtdKTogdm9pZCB7XG4gIGlmIChjaGlsZHJlbi5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NoaWxkcmVuIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgcHJvamVjdCcpO1xuICB9XG4gIGlmIChjaGlsZHJlbi5sZW5ndGggPiBNQVhfQ0hJTERSRU4pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGNoaWxkcmVuIG11c3QgY29udGFpbiBhdCBtb3N0ICR7TUFYX0NISUxEUkVOfSBwcm9qZWN0c2ApO1xuICB9XG5cbiAgY29uc3QgbmFtZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xuICAgIGFzc2VydE5vbkVtcHR5VmFsdWVXaXRob3V0U2xhc2hlcygnY2hpbGQgbmFtZScsIGNoaWxkLm5hbWUpO1xuICAgIGlmIChjaGlsZC52ZXJzaW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGFzc2VydE5vbkVtcHR5VmVyc2lvbihgdmVyc2lvbiBmb3IgY2hpbGQgJyR7Y2hpbGQubmFtZX0nYCwgY2hpbGQudmVyc2lvbik7XG4gICAgfVxuICAgIHBhcnNlVGFnc1dpdGhWYWxpZFVuaXF1ZUtleXMoY2hpbGQuYWRkaXRpb25hbFRhZ3MgPz8gW10sIGBhZGRpdGlvbmFsVGFncyBmb3IgY2hpbGQgJyR7Y2hpbGQubmFtZX0nYCk7XG4gICAgaWYgKG5hbWVzLmhhcyhjaGlsZC5uYW1lKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBjaGlsZCBuYW1lICcke2NoaWxkLm5hbWV9JyBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gdGhlIGNvbGxlY3Rpb25gKTtcbiAgICB9XG4gICAgbmFtZXMuYWRkKGNoaWxkLm5hbWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1lcmdlVGFncyhzaGFyZWRUYWdzPzogc3RyaW5nW10sIGFkZGl0aW9uYWxUYWdzPzogc3RyaW5nW10pOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG4gIGlmIChzaGFyZWRUYWdzID09PSB1bmRlZmluZWQgJiYgYWRkaXRpb25hbFRhZ3MgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBzaGFyZWQgPSBwYXJzZVRhZ3NXaXRoVmFsaWRVbmlxdWVLZXlzKHNoYXJlZFRhZ3MgPz8gW10sICdzaGFyZWRUYWdzJywgdHJ1ZSk7XG4gIGNvbnN0IGFkZGl0aW9uYWwgPSBwYXJzZVRhZ3NXaXRoVmFsaWRVbmlxdWVLZXlzKGFkZGl0aW9uYWxUYWdzID8/IFtdLCAnYWRkaXRpb25hbFRhZ3MnKTtcbiAgY29uc3QgbWVyZ2VkID0gbmV3IE1hcChzaGFyZWQpO1xuICBmb3IgKGNvbnN0IFtrZXksIHRhZ10gb2YgYWRkaXRpb25hbCkgbWVyZ2VkLnNldChrZXksIHRhZyk7XG4gIHJldHVybiBbLi4ubWVyZ2VkLnZhbHVlcygpXTtcbn1cblxuZnVuY3Rpb24gcGFyc2VUYWdzV2l0aFZhbGlkVW5pcXVlS2V5cyhcbiAgdGFnczogc3RyaW5nW10sXG4gIHByb3BlcnR5TmFtZTogc3RyaW5nLFxuICBhbGxvd01hbmFnZWRUYWdzID0gZmFsc2Vcbik6IE1hcDxzdHJpbmcsIHN0cmluZz4ge1xuICBjb25zdCByZXN1bHQgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICBmb3IgKGNvbnN0IHRhZyBvZiB0YWdzKSB7XG4gICAgY29uc3Qgc2VwYXJhdG9ySW5kZXggPSB0YWcuaW5kZXhPZignOicpO1xuICAgIGlmIChzZXBhcmF0b3JJbmRleCA8PSAwIHx8IHNlcGFyYXRvckluZGV4ID09PSB0YWcubGVuZ3RoIC0gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3Byb3BlcnR5TmFtZX0gdGFnICcke3RhZ30nIG11c3QgdXNlIHRoZSBmb3JtYXQga2V5OnZhbHVlIHdpdGggYSBub24tZW1wdHkga2V5IGFuZCB2YWx1ZWApO1xuICAgIH1cblxuICAgIGNvbnN0IGtleSA9IHRhZy5zbGljZSgwLCBzZXBhcmF0b3JJbmRleCk7XG4gICAgaWYgKE1BTkFHRURfVEFHX0tFWVMuaGFzKGtleSkgJiYgIWFsbG93TWFuYWdlZFRhZ3MpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtwcm9wZXJ0eU5hbWV9IG11c3Qgbm90IHNldCBtYW5hZ2VkIHRhZyBrZXkgJyR7a2V5fSdgKTtcbiAgICB9XG4gICAgaWYgKHJlc3VsdC5oYXMoa2V5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3Byb3BlcnR5TmFtZX0gY29udGFpbnMgZHVwbGljYXRlIHRhZyBrZXkgJyR7a2V5fSdgKTtcbiAgICB9XG4gICAgcmVzdWx0LnNldChrZXksIHRhZyk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gb3B0aW9uYWxUYWdzKHRhZ3M/OiBzdHJpbmdbXSk6IHsgcmVhZG9ubHkgdGFncz86IHN0cmluZ1tdIH0ge1xuICByZXR1cm4gdGFncyA9PT0gdW5kZWZpbmVkID8ge30gOiB7IHRhZ3MgfTtcbn1cbiJdfQ==
330
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0YWxvZy1wcm9qZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Nib20tY2F0YWxvZy9jYXRhbG9nLXByb2plY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2Q0FBcUQ7QUFDckQsaURBQWlEO0FBQ2pELGdFQUFnRTtBQUNoRSwyQ0FBMkM7QUFDM0MsaURBQWlEO0FBQ2pELDZDQUE2QztBQUU3QywyQ0FBdUM7QUFDdkMsNkJBQTZCO0FBQzdCLDRDQUFvRDtBQUNwRCwwQ0FBMEM7QUFDMUMsMERBQXFEO0FBQ3JELDJDQUFzRDtBQVF0RCxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUM7QUFDL0IsTUFBTSxZQUFZLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxZQUFZLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO0FBQ3BFLE1BQU0sb0JBQW9CLEdBQUcsc0NBQXNDLENBQUM7QUFDcEUsTUFBTSx1QkFBdUIsR0FBRyxtQkFBbUIsQ0FBQztBQUNwRCxNQUFNLG1CQUFtQixHQUFHLDJCQUEyQixDQUFDO0FBNEZ4RDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBOEJHO0FBQ0gsTUFBYSw0QkFBNkIsU0FBUSxzQkFBUztJQUN6RCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXdDO1FBQ2hGLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sSUFBSSxlQUFlLENBQUM7UUFDakQsTUFBTSxjQUFjLEdBQUcsaUNBQWMsQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUM7UUFDbkYsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLENBQUMsbUJBQW1CLGNBQWMsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUs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Q0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUM1QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRHVyYXRpb24sIFN0YWNrLCBUb2tlbiB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGV2ZW50cyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZXZlbnRzJztcbmltcG9ydCAqIGFzIGV2ZW50c1RhcmdldHMgZnJvbSAnYXdzLWNkay1saWIvYXdzLWV2ZW50cy10YXJnZXRzJztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCAqIGFzIGxvZ3MgZnJvbSAnYXdzLWNkay1saWIvYXdzLWxvZ3MnO1xuaW1wb3J0ICogYXMgczNBc3NldHMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzLWFzc2V0cyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBERUZBVUxUX05PREVfUlVOVElNRSB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgKiBhcyBkYXRhZG9ndjIgZnJvbSAnLi4vZGF0YWRvZ3YyJztcbmltcG9ydCB7IFJpb0xhbmRpbmdab25lIH0gZnJvbSAnLi4vcmlvLWxhbmRpbmctem9uZSc7XG5pbXBvcnQgeyBTQk9NX0NBVEFMT0dfQlVDS0VUX0FSTiB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB0eXBlIHtcbiAgQXNzZXRMb2NhdGlvbixcbiAgQ2F0YWxvZ1VwbG9hZENvbmZpZ3VyYXRpb24sXG4gIFN0YW5kYWxvbmVVcGxvYWRDb25maWd1cmF0aW9uLFxuICBVcGxvYWRDb25maWd1cmF0aW9uLFxufSBmcm9tICcuL2xhbWJkYS90eXBlcyc7XG5cbmNvbnN0IERFRkFVTFRfVkVSU0lPTiA9ICdtYWluJztcbmNvbnN0IE1BWF9DSElMRFJFTiA9IDM7XG5jb25zdCBNQU5BR0VEX1RBR19LRVlTID0gbmV3IFNldChbJ2FjY291bnRfaWQnLCAndGVhbV9pZGVudGlmaWVyJ10pO1xuY29uc3QgVVBMT0FEX0ZVTkNUSU9OX1VVSUQgPSAnZDIwYjlmNDYtMDcwMi00N2RkLTg5YzItOWVhNGJkZGFhY2ZjJztcbmNvbnN0IFVQTE9BRF9GVU5DVElPTl9QVVJQT1NFID0gJ1Nib21DYXRhbG9nVXBsb2FkJztcbmNvbnN0IFVQTE9BRF9MT0dfR1JPVVBfSUQgPSAnU2JvbUNhdGFsb2dVcGxvYWRMb2dHcm91cCc7XG5cbi8qKiBOb3RpZmljYXRpb24gY29uZmlndXJhdGlvbiBmb3IgYW4gU0JPTSBjYXRhbG9nIHZ1bG5lcmFiaWxpdHkgbW9uaXRvci4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2JvbUNhdGFsb2dWdWxuZXJhYmlsaXR5TW9uaXRvclByb3BzIHtcbiAgLyoqIE5vdGlmaWNhdGlvbiBzZW50IHdoZW4gdGhlIHZ1bG5lcmFiaWxpdHkgbW9uaXRvciBjaGFuZ2VzIHN0YXRlLiAqL1xuICByZWFkb25seSBub3RpZmljYXRpb246IGRhdGFkb2d2Mi5JTm90aWZpY2F0aW9uO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0YW5kYWxvbmVTYm9tQ2F0YWxvZ1Byb2plY3RQcm9wcyB7XG4gIC8qKiBNdXN0IGJlIG5vbi1lbXB0eSBhbmQgbXVzdCBub3QgY29udGFpbiBgL2AuICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKiogUHJvamVjdCB2ZXJzaW9uLiBEZWZhdWx0cyB0byBgbWFpbmAuICovXG4gIHJlYWRvbmx5IHZlcnNpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgcHJvamVjdCB0YWdzIHVzaW5nIHRoZSBga2V5OnZhbHVlYCBmb3JtYXQuXG4gICAqXG4gICAqIGB0ZWFtX2lkZW50aWZpZXJgIGlzIGFsd2F5cyBhZGRlZCBmcm9tIHRoZSBSSU8gTGFuZGluZyBab25lIGNvbmZpZ3VyYXRpb24uIERvIG5vdCBwcm92aWRlIGB0ZWFtX2lkZW50aWZpZXJgIG9yXG4gICAqIGBhY2NvdW50X2lkYDsgYm90aCBhcmUgbWFuYWdlZCB0YWcga2V5cy5cbiAgICovXG4gIHJlYWRvbmx5IGFkZGl0aW9uYWxUYWdzPzogc3RyaW5nW107XG5cbiAgLyoqIEpTT04gU0JPTSBmaWxlIGFzc2V0IHRvIHVwbG9hZC4gKi9cbiAgcmVhZG9ubHkgc2JvbTogczNBc3NldHMuQXNzZXQ7XG5cbiAgLyoqIE9wdGlvbmFsIEpTT04gVkVYIGZpbGUgYXNzZXQgdG8gdXBsb2FkLiAqL1xuICByZWFkb25seSB2ZXg/OiBzM0Fzc2V0cy5Bc3NldDtcblxuICAvKipcbiAgICogT3B0aW9uYWwgdnVsbmVyYWJpbGl0eSBtb25pdG9yIGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIFdoZW4gb21pdHRlZCwgdGhlIG1vbml0b3IgdXNlcyB7QGxpbmsgZGF0YWRvZ3YyLkRlZmF1bHRTbGFja05vdGlmaWNhdGlvbn0uXG4gICAqXG4gICAqIEBkZWZhdWx0VmFsdWUgQSB2dWxuZXJhYmlsaXR5IG1vbml0b3IgdXNpbmcge0BsaW5rIGRhdGFkb2d2Mi5EZWZhdWx0U2xhY2tOb3RpZmljYXRpb259XG4gICAqL1xuICByZWFkb25seSB2dWxuZXJhYmlsaXR5TW9uaXRvclByb3BzPzogU2JvbUNhdGFsb2dWdWxuZXJhYmlsaXR5TW9uaXRvclByb3BzO1xufVxuXG4vKiogQSBjaGlsZCBwcm9qZWN0IGluIGFuIFNCT00gY2F0YWxvZyBjb2xsZWN0aW9uLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTYm9tQ2F0YWxvZ1Byb2plY3RDaGlsZCB7XG4gIC8qKlxuICAgKiBNdXN0IGJlIG5vbi1lbXB0eSwgdW5pcXVlIHdpdGhpbiB0aGUgY29sbGVjdGlvbiwgYW5kIG11c3Qgbm90IGNvbnRhaW4gYC9gLlxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKiBDaGlsZCBwcm9qZWN0IHZlcnNpb24uIERlZmF1bHRzIHRvIGBtYWluYC4gKi9cbiAgcmVhZG9ubHkgdmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGFncyBhZGRlZCB0byB0aGlzIGNoaWxkLCB1c2luZyB0aGUgYGtleTp2YWx1ZWAgZm9ybWF0LlxuICAgKlxuICAgKiBDaGlsZCB0YWdzIG92ZXJyaWRlIHNoYXJlZCB0YWdzIHdpdGggdGhlIHNhbWUga2V5LiBgdGVhbV9pZGVudGlmaWVyYCBpcyBhbHdheXMgaW5oZXJpdGVkIGZyb20gdGhlIFJJTyBMYW5kaW5nIFpvbmVcbiAgICogY29uZmlndXJhdGlvbi4gRG8gbm90IHByb3ZpZGUgYHRlYW1faWRlbnRpZmllcmAgb3IgYGFjY291bnRfaWRgOyBib3RoIGFyZSBtYW5hZ2VkIHRhZyBrZXlzLlxuICAgKi9cbiAgcmVhZG9ubHkgYWRkaXRpb25hbFRhZ3M/OiBzdHJpbmdbXTtcblxuICAvKiogSlNPTiBTQk9NIGZpbGUgYXNzZXQgdG8gdXBsb2FkLiAqL1xuICByZWFkb25seSBzYm9tOiBzM0Fzc2V0cy5Bc3NldDtcblxuICAvKiogT3B0aW9uYWwgSlNPTiBWRVggZmlsZSBhc3NldCB0byB1cGxvYWQuICovXG4gIHJlYWRvbmx5IHZleD86IHMzQXNzZXRzLkFzc2V0O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNib21DYXRhbG9nUHJvamVjdFByb3BzIHtcbiAgLyoqIENvbGxlY3Rpb24gbmFtZSBzdG9yZWQgaW4gdGhlIG1hbmlmZXN0IGFuZCB1c2VkIGluIHRoZSBkZXN0aW5hdGlvbiBrZXkuICovXG4gIHJlYWRvbmx5IGNvbGxlY3Rpb25OYW1lOiBzdHJpbmc7XG5cbiAgLyoqIENvbGxlY3Rpb24gdmVyc2lvbi4gRGVmYXVsdHMgdG8gYG1haW5gLiAqL1xuICByZWFkb25seSBjb2xsZWN0aW9uVmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGFncyBpbmhlcml0ZWQgYnkgZXZlcnkgY2hpbGQsIHVzaW5nIHRoZSBga2V5OnZhbHVlYCBmb3JtYXQuXG4gICAqXG4gICAqIEEgY2hpbGQncyBhZGRpdGlvbmFsIHRhZ3Mgb3ZlcnJpZGUgc2hhcmVkIHRhZ3Mgd2l0aCB0aGUgc2FtZSBrZXkuIGB0ZWFtX2lkZW50aWZpZXJgIGlzIGFsd2F5cyBhZGRlZCBmcm9tIHRoZSBSSU9cbiAgICogTGFuZGluZyBab25lIGNvbmZpZ3VyYXRpb24uIERvIG5vdCBwcm92aWRlIGB0ZWFtX2lkZW50aWZpZXJgIG9yIGBhY2NvdW50X2lkYDsgYm90aCBhcmUgbWFuYWdlZCB0YWcga2V5cy5cbiAgICovXG4gIHJlYWRvbmx5IHNoYXJlZFRhZ3M/OiBzdHJpbmdbXTtcblxuICAvKiogQ2hpbGQgY2F0YWxvZyBwcm9qZWN0cy4gTXVzdCBjb250YWluIGJldHdlZW4gb25lIGFuZCB0aHJlZSBwcm9qZWN0cy4gKi9cbiAgcmVhZG9ubHkgY2hpbGRyZW46IFNib21DYXRhbG9nUHJvamVjdENoaWxkW107XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIHZ1bG5lcmFiaWxpdHkgbW9uaXRvciBjb25maWd1cmF0aW9uIHNoYXJlZCBieSBhbGwgY2hpbGQgbW9uaXRvcnMuXG4gICAqXG4gICAqIFdoZW4gb21pdHRlZCwgdGhlIG1vbml0b3JzIHVzZSB7QGxpbmsgZGF0YWRvZ3YyLkRlZmF1bHRTbGFja05vdGlmaWNhdGlvbn0uXG4gICAqXG4gICAqIEBkZWZhdWx0VmFsdWUgVnVsbmVyYWJpbGl0eSBtb25pdG9ycyB1c2luZyB7QGxpbmsgZGF0YWRvZ3YyLkRlZmF1bHRTbGFja05vdGlmaWNhdGlvbn1cbiAgICovXG4gIHJlYWRvbmx5IHZ1bG5lcmFiaWxpdHlNb25pdG9yUHJvcHM/OiBTYm9tQ2F0YWxvZ1Z1bG5lcmFiaWxpdHlNb25pdG9yUHJvcHM7XG59XG5cbi8qKlxuICogUmVnaXN0ZXJzIG9uZSBwcm9qZWN0J3MgU0JPTSBhbmQgb3B0aW9uYWwgVkVYIGluIHRoZSBjZW50cmFsIFNCT00gY2F0YWxvZy5cbiAqXG4gKiBVc2UgdGhpcyBjb25zdHJ1Y3Qgd2hlbiBhIHN0YWNrIG93bnMgb25lIGluZGVwZW5kZW50bHkgdmVyc2lvbmVkIHByb2plY3QuIFRoZSBmaWxlcyBhcmUgdXBsb2FkZWQgYWZ0ZXIgdGhlIHN0YWNrXG4gKiByZWFjaGVzIGBDUkVBVEVfQ09NUExFVEVgIG9yIGBVUERBVEVfQ09NUExFVEVgLiBUaGUgRXZlbnRCcmlkZ2UgZXZlbnQgdGltZSBhbmQgSUQgaWRlbnRpZnkgdGhlIHVwbG9hZC5cbiAqXG4gKiBUaGUgY29uc3RydWN0IGF1dG9tYXRpY2FsbHkgYWRkcyB0aGUgUklPIExhbmRpbmcgWm9uZSBgdGVhbV9pZGVudGlmaWVyYCB0YWcgYW5kIGdyYW50cyB0aGUgZ2VuZXJhdGVkIHVwbG9hZCBMYW1iZGFcbiAqIHBlcm1pc3Npb24gdG8gcmVhZCB0aGUgc291cmNlIGFzc2V0cyBhbmQgd3JpdGUgdGhlbSB0byB0aGUgY2VudHJhbCBjYXRhbG9nIGJ1Y2tldC4gQWxsIFNCT00gY2F0YWxvZyBjb25zdHJ1Y3RzIGluXG4gKiB0aGUgc2FtZSBzdGFjayByZXVzZSBvbmUgdXBsb2FkIExhbWJkYS5cbiAqXG4gKiBFeGFtcGxlOlxuICogYGBgdHNcbiAqIGNvbnN0IHNib20gPSBuZXcgczNBc3NldHMuQXNzZXQodGhpcywgJ1Nib21Bc3NldCcsIHtcbiAqICAgcGF0aDogJ2J1aWxkL3Nib20uanNvbicsXG4gKiB9KTtcbiAqIGNvbnN0IHZleCA9IG5ldyBzM0Fzc2V0cy5Bc3NldCh0aGlzLCAnVmV4QXNzZXQnLCB7XG4gKiAgIHBhdGg6ICdidWlsZC92ZXguanNvbicsXG4gKiB9KTtcbiAqXG4gKiBuZXcgU3RhbmRhbG9uZVNib21DYXRhbG9nUHJvamVjdCh0aGlzLCAnQ2F0YWxvZ1VwbG9hZCcsIHtcbiAqICAgbmFtZTogJ2JpbGxpbmctYXBpJyxcbiAqICAgdmVyc2lvbjogJzEuNC4wJyxcbiAqICAgYWRkaXRpb25hbFRhZ3M6IFsnY29tcG9uZW50OmJhY2tlbmQnXSxcbiAqICAgc2JvbSxcbiAqICAgdmV4LFxuICogICB2dWxuZXJhYmlsaXR5TW9uaXRvclByb3BzOiB7XG4gKiAgICAgbm90aWZpY2F0aW9uOiBuZXcgZGF0YWRvZ3YyLkRlZmF1bHRTbGFja05vdGlmaWNhdGlvbigpLFxuICogICB9LFxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIFN0YW5kYWxvbmVTYm9tQ2F0YWxvZ1Byb2plY3QgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogU3RhbmRhbG9uZVNib21DYXRhbG9nUHJvamVjdFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IHZlcnNpb24gPSBwcm9wcy52ZXJzaW9uID8/IERFRkFVTFRfVkVSU0lPTjtcbiAgICBjb25zdCB0ZWFtSWRlbnRpZmllciA9IFJpb0xhbmRpbmdab25lLmdldFRlYW1JZGVudGlmaWVyUGFyYW1ldGVyKHRoaXMpLnN0cmluZ1ZhbHVlO1xuICAgIGNvbnN0IHRhZ3MgPSBtZXJnZVRhZ3MoW2B0ZWFtX2lkZW50aWZpZXI6JHt0ZWFtSWRlbnRpZmllcn1gXSwgcHJvcHMuYWRkaXRpb25hbFRhZ3MpID8/IFtdO1xuICAgIGFzc2VydE5vbkVtcHR5VmFsdWVXaXRob3V0U2xhc2hlcygnbmFtZScsIHByb3BzLm5hbWUpO1xuICAgIGFzc2VydE5vbkVtcHR5VmVyc2lvbigndmVyc2lvbicsIHZlcnNpb24pO1xuICAgIHBhcnNlVGFnc1dpdGhWYWxpZFVuaXF1ZUtleXMocHJvcHMuYWRkaXRpb25hbFRhZ3MgPz8gW10sICdhZGRpdGlvbmFsVGFncycpO1xuXG4gICAgY29uc3Qgc3RhY2sgPSBTdGFjay5vZih0aGlzKTtcbiAgICBjb25zdCBjb25maWd1cmF0aW9uOiBTdGFuZGFsb25lVXBsb2FkQ29uZmlndXJhdGlvbiA9IHtcbiAgICAgIG9yaWdpbkFjY291bnRJZDogc3RhY2suYWNjb3VudCxcbiAgICAgIG9yaWdpbkFjY291bnROYW1lOiBSaW9MYW5kaW5nWm9uZS5nZXRBY2NvdW50TmFtZVBhcmFtZXRlcih0aGlzKS5zdHJpbmdWYWx1ZSxcbiAgICAgIG5hbWU6IHByb3BzLm5hbWUsXG4gICAgICB2ZXJzaW9uLFxuICAgICAgdGFncyxcbiAgICAgIHNib206IGFzc2V0TG9jYXRpb24ocHJvcHMuc2JvbSksXG4gICAgICAuLi4ocHJvcHMudmV4ID09PSB1bmRlZmluZWQgPyB7fSA6IHsgdmV4OiBhc3NldExvY2F0aW9uKHByb3BzLnZleCkgfSksXG4gICAgfTtcblxuICAgIGNyZWF0ZVVwbG9hZFJlc291cmNlcyh0aGlzLCBjb25maWd1cmF0aW9uLCBbcHJvcHMuc2JvbSwgLi4uKHByb3BzLnZleCA9PT0gdW5kZWZpbmVkID8gW10gOiBbcHJvcHMudmV4XSldKTtcbiAgICBjcmVhdGVWdWxuZXJhYmlsaXR5TW9uaXRvcih7XG4gICAgICBzY29wZTogdGhpcyxcbiAgICAgIHByb2plY3ROYW1lOiBwcm9wcy5uYW1lLFxuICAgICAgYWNjb3VudE5hbWU6IGNvbmZpZ3VyYXRpb24ub3JpZ2luQWNjb3VudE5hbWUsXG4gICAgICBub3RpZmljYXRpb246IHByb3BzLnZ1bG5lcmFiaWxpdHlNb25pdG9yUHJvcHM/Lm5vdGlmaWNhdGlvbiA/PyBuZXcgZGF0YWRvZ3YyLkRlZmF1bHRTbGFja05vdGlmaWNhdGlvbigpLFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogUmVnaXN0ZXJzIGEgY29sbGVjdGlvbiBvZiByZWxhdGVkIHByb2plY3QgU0JPTXMgYW5kIG9wdGlvbmFsIFZFWCBmaWxlcyBpbiB0aGUgY2VudHJhbCBTQk9NIGNhdGFsb2cuXG4gKlxuICogVXNlIHRoaXMgY29uc3RydWN0IHdoZW4gb25lIHN0YWNrIHByb2R1Y2VzIGJldHdlZW4gb25lIGFuZCB0aHJlZSByZWxhdGVkIHByb2plY3RzIHRoYXQgc2hvdWxkIHNoYXJlIGEgY2F0YWxvZ1xuICogY29sbGVjdGlvbi4gU2hhcmVkIHRhZ3MgYXJlIGluaGVyaXRlZCBieSBldmVyeSBjaGlsZCwgd2hpbGUgY2hpbGQgdGFncyB3aXRoIHRoZSBzYW1lIGtleSBvdmVycmlkZSB0aGVtLiBUaGUgUklPXG4gKiBMYW5kaW5nIFpvbmUgYHRlYW1faWRlbnRpZmllcmAgdGFnIGlzIGFsd2F5cyBpbmNsdWRlZC5cbiAqXG4gKiBUaGUgZmlsZXMgYXJlIHVwbG9hZGVkIGFmdGVyIHRoZSBzdGFjayByZWFjaGVzIGBDUkVBVEVfQ09NUExFVEVgIG9yIGBVUERBVEVfQ09NUExFVEVgLiBUaGUgRXZlbnRCcmlkZ2UgZXZlbnQgdGltZVxuICogYW5kIElEIGlkZW50aWZ5IHRoZSB1cGxvYWQuIEFsbCBTQk9NIGNhdGFsb2cgY29uc3RydWN0cyBpbiB0aGUgc2FtZSBzdGFjayByZXVzZSBvbmUgdXBsb2FkIExhbWJkYS5cbiAqXG4gKiBFeGFtcGxlOlxuICogYGBgdHNcbiAqIGNvbnN0IGFwaVNib20gPSBuZXcgczNBc3NldHMuQXNzZXQodGhpcywgJ0FwaVNib21Bc3NldCcsIHtcbiAqICAgcGF0aDogJ2J1aWxkL2FwaS1zYm9tLmpzb24nLFxuICogfSk7XG4gKiBjb25zdCBpbmZyYXN0cnVjdHVyZVNib20gPSBuZXcgczNBc3NldHMuQXNzZXQodGhpcywgJ0luZnJhc3RydWN0dXJlU2JvbUFzc2V0Jywge1xuICogICBwYXRoOiAnYnVpbGQvaW5mcmFzdHJ1Y3R1cmUtc2JvbS5qc29uJyxcbiAqIH0pO1xuICpcbiAqIG5ldyBTYm9tQ2F0YWxvZ1Byb2plY3QodGhpcywgJ0NhdGFsb2dVcGxvYWQnLCB7XG4gKiAgIGNvbGxlY3Rpb25OYW1lOiAnYmlsbGluZycsXG4gKiAgIGNvbGxlY3Rpb25WZXJzaW9uOiAnMS40LjAnLFxuICogICBzaGFyZWRUYWdzOiBbJ2RvbWFpbjpiaWxsaW5nJ10sXG4gKiAgIGNoaWxkcmVuOiBbXG4gKiAgICAge1xuICogICAgICAgbmFtZTogJ2FwaScsXG4gKiAgICAgICBzYm9tOiBhcGlTYm9tLFxuICogICAgICAgYWRkaXRpb25hbFRhZ3M6IFsnY29tcG9uZW50OmJhY2tlbmQnXSxcbiAqICAgICB9LFxuICogICAgIHtcbiAqICAgICAgIG5hbWU6ICdpbmZyYXN0cnVjdHVyZScsXG4gKiAgICAgICBzYm9tOiBpbmZyYXN0cnVjdHVyZVNib20sXG4gKiAgICAgICBhZGRpdGlvbmFsVGFnczogWydjb21wb25lbnQ6aW5mcmFzdHJ1Y3R1cmUnXSxcbiAqICAgICB9LFxuICogICBdLFxuICogICB2dWxuZXJhYmlsaXR5TW9uaXRvclByb3BzOiB7XG4gKiAgICAgbm90aWZpY2F0aW9uOiBuZXcgZGF0YWRvZ3YyLkRlZmF1bHRTbGFja05vdGlmaWNhdGlvbigpLFxuICogICB9LFxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIFNib21DYXRhbG9nUHJvamVjdCBleHRlbmRzIENvbnN0cnVjdCB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBTYm9tQ2F0YWxvZ1Byb2plY3RQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCBjb2xsZWN0aW9uVmVyc2lvbiA9IHByb3BzLmNvbGxlY3Rpb25WZXJzaW9uID8/IERFRkFVTFRfVkVSU0lPTjtcbiAgICBjb25zdCB0ZWFtSWRlbnRpZmllciA9IFJpb0xhbmRpbmdab25lLmdldFRlYW1JZGVudGlmaWVyUGFyYW1ldGVyKHRoaXMpLnN0cmluZ1ZhbHVlO1xuICAgIGFzc2VydE5vbkVtcHR5VmFsdWVXaXRob3V0U2xhc2hlcygnY29sbGVjdGlvbk5hbWUnLCBwcm9wcy5jb2xsZWN0aW9uTmFtZSk7XG4gICAgYXNzZXJ0Tm9uRW1wdHlWZXJzaW9uKCdjb2xsZWN0aW9uVmVyc2lvbicsIGNvbGxlY3Rpb25WZXJzaW9uKTtcbiAgICB2YWxpZGF0ZUNoaWxkcmVuKHByb3BzLmNoaWxkcmVuKTtcbiAgICBwYXJzZVRhZ3NXaXRoVmFsaWRVbmlxdWVLZXlzKHByb3BzLnNoYXJlZFRhZ3MgPz8gW10sICdzaGFyZWRUYWdzJyk7XG4gICAgY29uc3Qgc2hhcmVkVGFncyA9IG1lcmdlVGFncyhbYHRlYW1faWRlbnRpZmllcjoke3RlYW1JZGVudGlmaWVyfWBdLCBwcm9wcy5zaGFyZWRUYWdzKSA/PyBbXTtcblxuICAgIGNvbnN0IHN0YWNrID0gU3RhY2sub2YodGhpcyk7XG4gICAgY29uc3QgY29uZmlndXJhdGlvbjogQ2F0YWxvZ1VwbG9hZENvbmZpZ3VyYXRpb24gPSB7XG4gICAgICBvcmlnaW5BY2NvdW50SWQ6IHN0YWNrLmFjY291bnQsXG4gICAgICBvcmlnaW5BY2NvdW50TmFtZTogUmlvTGFuZGluZ1pvbmUuZ2V0QWNjb3VudE5hbWVQYXJhbWV0ZXIodGhpcykuc3RyaW5nVmFsdWUsXG4gICAgICBjb2xsZWN0aW9uTmFtZTogcHJvcHMuY29sbGVjdGlvbk5hbWUsXG4gICAgICBjb2xsZWN0aW9uVmVyc2lvbixcbiAgICAgIHRhZ3M6IFtgdGVhbV9pZGVudGlmaWVyOiR7dGVhbUlkZW50aWZpZXJ9YF0sXG4gICAgICBjaGlsZHJlbjogcHJvcHMuY2hpbGRyZW4ubWFwKGNoaWxkID0+ICh7XG4gICAgICAgIG5hbWU6IGNoaWxkLm5hbWUsXG4gICAgICAgIHZlcnNpb246IGNoaWxkLnZlcnNpb24gPz8gREVGQVVMVF9WRVJTSU9OLFxuICAgICAgICAuLi5vcHRpb25hbFRhZ3MobWVyZ2VUYWdzKHNoYXJlZFRhZ3MsIGNoaWxkLmFkZGl0aW9uYWxUYWdzKSksXG4gICAgICAgIHNib206IGFzc2V0TG9jYXRpb24oY2hpbGQuc2JvbSksXG4gICAgICAgIC4uLihjaGlsZC52ZXggPT09IHVuZGVmaW5lZCA/IHt9IDogeyB2ZXg6IGFzc2V0TG9jYXRpb24oY2hpbGQudmV4KSB9KSxcbiAgICAgIH0pKSxcbiAgICB9O1xuXG4gICAgY3JlYXRlVXBsb2FkUmVzb3VyY2VzKFxuICAgICAgdGhpcyxcbiAgICAgIGNvbmZpZ3VyYXRpb24sXG4gICAgICBwcm9wcy5jaGlsZHJlbi5mbGF0TWFwKGNoaWxkID0+IFtjaGlsZC5zYm9tLCAuLi4oY2hpbGQudmV4ID09PSB1bmRlZmluZWQgPyBbXSA6IFtjaGlsZC52ZXhdKV0pXG4gICAgKTtcblxuICAgIGNvbnN0IG5vdGlmaWNhdGlvbiA9IHByb3BzLnZ1bG5lcmFiaWxpdHlNb25pdG9yUHJvcHM/Lm5vdGlmaWNhdGlvbiA/PyBuZXcgZGF0YWRvZ3YyLkRlZmF1bHRTbGFja05vdGlmaWNhdGlvbigpO1xuICAgIHByb3BzLmNoaWxkcmVuLmZvckVhY2goY2hpbGQgPT5cbiAgICAgIGNyZWF0ZVZ1bG5lcmFiaWxpdHlNb25pdG9yKHtcbiAgICAgICAgc2NvcGU6IHRoaXMsXG4gICAgICAgIHByb2plY3ROYW1lOiBjaGlsZC5uYW1lLFxuICAgICAgICBhY2NvdW50TmFtZTogY29uZmlndXJhdGlvbi5vcmlnaW5BY2NvdW50TmFtZSxcbiAgICAgICAgbm90aWZpY2F0aW9uLFxuICAgICAgfSlcbiAgICApO1xuICB9XG59XG5cbmludGVyZmFjZSBDcmVhdGVWdWxuZXJhYmlsaXR5TW9uaXRvclByb3BzIHtcbiAgcmVhZG9ubHkgc2NvcGU6IENvbnN0cnVjdDtcbiAgcmVhZG9ubHkgcHJvamVjdE5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgYWNjb3VudE5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgbm90aWZpY2F0aW9uOiBkYXRhZG9ndjIuSU5vdGlmaWNhdGlvbjtcbn1cblxuZnVuY3Rpb24gY3JlYXRlVnVsbmVyYWJpbGl0eU1vbml0b3IocHJvcHM6IENyZWF0ZVZ1bG5lcmFiaWxpdHlNb25pdG9yUHJvcHMpOiB2b2lkIHtcbiAgbmV3IGRhdGFkb2d2Mi5EYXRhZG9nTW9uaXRvcihwcm9wcy5zY29wZSwgYCR7cHJvcHMucHJvamVjdE5hbWV9VnVsbmVyYWJpbGl0eU1vbml0b3JgLCB7XG4gICAgbmFtZTogYCR7cHJvcHMuYWNjb3VudE5hbWV9IFZ1bG5lcmFiaWxpdHlNb25pdG9yYCxcbiAgICBzZXJ2aWNlTmFtZTogcHJvcHMucHJvamVjdE5hbWUsXG4gICAgbW9uaXRvclR5cGU6IGRhdGFkb2d2Mi5EYXRhZG9nTW9uaXRvclF1ZXJ5QWxlcnRUeXBlLk1FVFJJQ19BTEVSVCxcbiAgICBxdWVyeTpcbiAgICAgICdtYXgobGFzdF8xNW0pOm1heDpzZXJ2aWNlLnZ1bG5lcmFiaWxpdGllc3snICtcbiAgICAgIGBhY2NvdW50X25hbWU6JHtwcm9wcy5hY2NvdW50TmFtZX0sYCArXG4gICAgICBgcHJvamVjdF9uYW1lOiR7cHJvcHMucHJvamVjdE5hbWV9YCArXG4gICAgICAnfSA+IDAnLFxuICAgIG1lc3NhZ2U6IFtcbiAgICAgICd7eyNpc19hbGVydH19JyxcbiAgICAgIGBQcm9qZWN0ICR7cHJvcHMucHJvamVjdE5hbWV9IGhhcyB7e3ZhbHVlfX0ga25vd24gdnVsbmVyYWJpbGl0aWVzLmAsXG4gICAgICAne3svaXNfYWxlcnR9fScsXG4gICAgICAnJyxcbiAgICAgICd7eyNpc19yZWNvdmVyeX19JyxcbiAgICAgIGBQcm9qZWN0ICR7cHJvcHMucHJvamVjdE5hbWV9IG5vIGxvbmdlciByZXBvcnRzIHZ1bG5lcmFiaWxpdGllcy5gLFxuICAgICAgJ3t7L2lzX3JlY292ZXJ5fX0nLFxuICAgIF0uam9pbignXFxuJyksXG4gICAgbm90aWZpY2F0aW9uOiBwcm9wcy5ub3RpZmljYXRpb24sXG4gICAgcHJpb3JpdHk6IDMsXG4gICAgZXh0cmFUYWdzOiBbJ21vbml0b3JfdHlwZTp2dWxuZXJhYmlsaXR5J10sXG4gICAgb3B0aW9uT3ZlcnJpZGVzOiB7XG4gICAgICB0aHJlc2hvbGRzOiB7XG4gICAgICAgIGNyaXRpY2FsOiAwLFxuICAgICAgfSxcbiAgICAgIG5vdGlmeU5vRGF0YTogZmFsc2UsXG4gICAgICByZXF1aXJlRnVsbFdpbmRvdzogZmFsc2UsXG4gICAgfSxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVVwbG9hZFJlc291cmNlcyhcbiAgc2NvcGU6IENvbnN0cnVjdCxcbiAgY29uZmlndXJhdGlvbjogVXBsb2FkQ29uZmlndXJhdGlvbixcbiAgc291cmNlQXNzZXRzOiBzM0Fzc2V0cy5Bc3NldFtdXG4pOiB2b2lkIHtcbiAgY29uc3Qgc3RhY2sgPSBTdGFjay5vZihzY29wZSk7XG5cbiAgY29uc3QgdXBsb2FkRnVuY3Rpb24gPSBuZXcgbGFtYmRhLlNpbmdsZXRvbkZ1bmN0aW9uKHNjb3BlLCAnVXBsb2FkRnVuY3Rpb24nLCB7XG4gICAgdXVpZDogVVBMT0FEX0ZVTkNUSU9OX1VVSUQsXG4gICAgbGFtYmRhUHVycG9zZTogVVBMT0FEX0ZVTkNUSU9OX1BVUlBPU0UsXG4gICAgcnVudGltZTogREVGQVVMVF9OT0RFX1JVTlRJTUUsXG4gICAgYXJjaGl0ZWN0dXJlOiBsYW1iZGEuQXJjaGl0ZWN0dXJlLkFSTV82NCxcbiAgICBoYW5kbGVyOiAnaGFuZGxlci5oYW5kbGVyJyxcbiAgICBjb2RlOiBsYW1iZGEuQ29kZS5mcm9tQXNzZXQocGF0aC5qb2luKF9fZGlybmFtZSwgJ2xhbWJkYScpLCB7XG4gICAgICBleGNsdWRlOiBbJyouanMnLCAnKi5kLnRzJ10sXG4gICAgfSksXG4gICAgbG9nZ2luZ0Zvcm1hdDogbGFtYmRhLkxvZ2dpbmdGb3JtYXQuSlNPTixcbiAgICBsb2dHcm91cDogZ2V0T3JDcmVhdGVVcGxvYWRMb2dHcm91cChzdGFjayksXG4gICAgaW5pdGlhbFBvbGljeTogW1xuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBhY3Rpb25zOiBbJ3MzOlB1dE9iamVjdCddLFxuICAgICAgICByZXNvdXJjZXM6IFtgJHtTQk9NX0NBVEFMT0dfQlVDS0VUX0FSTn0vKmBdLFxuICAgICAgfSksXG4gICAgXSxcbiAgICBtZW1vcnlTaXplOiAyNTYsXG4gICAgdGltZW91dDogRHVyYXRpb24ubWludXRlcygxKSxcbiAgfSk7XG5cbiAgZm9yIChjb25zdCBhc3NldCBvZiBzb3VyY2VBc3NldHMpIHtcbiAgICBhc3NldC5ncmFudFJlYWQodXBsb2FkRnVuY3Rpb24pO1xuICB9XG5cbiAgbmV3IGV2ZW50cy5SdWxlKHNjb3BlLCAnU3RhY2tDb21wbGV0aW9uUnVsZScsIHtcbiAgICBldmVudFBhdHRlcm46IHtcbiAgICAgIHNvdXJjZTogWydhd3MuY2xvdWRmb3JtYXRpb24nXSxcbiAgICAgIGRldGFpbFR5cGU6IFsnQ2xvdWRGb3JtYXRpb24gU3RhY2sgU3RhdHVzIENoYW5nZSddLFxuICAgICAgZGV0YWlsOiB7XG4gICAgICAgICdzdGFjay1pZCc6IFtzdGFjay5zdGFja0lkXSxcbiAgICAgICAgJ3N0YXR1cy1kZXRhaWxzJzoge1xuICAgICAgICAgIHN0YXR1czogWydDUkVBVEVfQ09NUExFVEUnLCAnVVBEQVRFX0NPTVBMRVRFJ10sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gICAgdGFyZ2V0czogW1xuICAgICAgbmV3IGV2ZW50c1RhcmdldHMuTGFtYmRhRnVuY3Rpb24odXBsb2FkRnVuY3Rpb24sIHtcbiAgICAgICAgZXZlbnQ6IGV2ZW50cy5SdWxlVGFyZ2V0SW5wdXQuZnJvbU9iamVjdCh7XG4gICAgICAgICAgZXZlbnRJZDogZXZlbnRzLkV2ZW50RmllbGQuZXZlbnRJZCxcbiAgICAgICAgICBldmVudFRpbWU6IGV2ZW50cy5FdmVudEZpZWxkLmZyb21QYXRoKCckLnRpbWUnKSxcbiAgICAgICAgICBzdGFja0lkOiBldmVudHMuRXZlbnRGaWVsZC5mcm9tUGF0aCgnJC5kZXRhaWwuc3RhY2staWQnKSxcbiAgICAgICAgICBzdGFja1N0YXR1czogZXZlbnRzLkV2ZW50RmllbGQuZnJvbVBhdGgoJyQuZGV0YWlsLnN0YXR1cy1kZXRhaWxzLnN0YXR1cycpLFxuICAgICAgICAgIGNvbmZpZ3VyYXRpb24sXG4gICAgICAgIH0pLFxuICAgICAgfSksXG4gICAgXSxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGdldE9yQ3JlYXRlVXBsb2FkTG9nR3JvdXAoc3RhY2s6IFN0YWNrKTogbG9ncy5Mb2dHcm91cCB7XG4gIGNvbnN0IGV4aXN0aW5nTG9nR3JvdXAgPSBzdGFjay5ub2RlLnRyeUZpbmRDaGlsZChVUExPQURfTE9HX0dST1VQX0lEKTtcbiAgaWYgKGV4aXN0aW5nTG9nR3JvdXAgaW5zdGFuY2VvZiBsb2dzLkxvZ0dyb3VwKSB7XG4gICAgcmV0dXJuIGV4aXN0aW5nTG9nR3JvdXA7XG4gIH1cbiAgaWYgKGV4aXN0aW5nTG9nR3JvdXAgIT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgU3RhY2sgYWxyZWFkeSBjb250YWlucyBhIGNvbnN0cnVjdCBuYW1lZCAnJHtVUExPQURfTE9HX0dST1VQX0lEfSdgKTtcbiAgfVxuICByZXR1cm4gbmV3IGxvZ3MuTG9nR3JvdXAoc3RhY2ssIFVQTE9BRF9MT0dfR1JPVVBfSUQsIHtcbiAgICByZXRlbnRpb246IGxvZ3MuUmV0ZW50aW9uRGF5cy5PTkVfV0VFSyxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGFzc2V0TG9jYXRpb24oYXNzZXQ6IHMzQXNzZXRzLkFzc2V0KTogQXNzZXRMb2NhdGlvbiB7XG4gIHJldHVybiB7XG4gICAgYnVja2V0TmFtZTogYXNzZXQuczNCdWNrZXROYW1lLFxuICAgIG9iamVjdEtleTogYXNzZXQuczNPYmplY3RLZXksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGFzc2VydE5vbkVtcHR5VmFsdWVXaXRob3V0U2xhc2hlcyhuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKFRva2VuLmlzVW5yZXNvbHZlZCh2YWx1ZSkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKHZhbHVlLmxlbmd0aCA9PT0gMCB8fCB2YWx1ZS5pbmNsdWRlcygnLycpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke25hbWV9IG11c3QgYmUgYSBub24tZW1wdHkgdmFsdWUgd2l0aG91dCAnLydgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhc3NlcnROb25FbXB0eVZlcnNpb24obmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQodmFsdWUpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmICh2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7bmFtZX0gbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmdgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUNoaWxkcmVuKGNoaWxkcmVuOiBTYm9tQ2F0YWxvZ1Byb2plY3RDaGlsZFtdKTogdm9pZCB7XG4gIGlmIChjaGlsZHJlbi5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NoaWxkcmVuIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgcHJvamVjdCcpO1xuICB9XG4gIGlmIChjaGlsZHJlbi5sZW5ndGggPiBNQVhfQ0hJTERSRU4pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGNoaWxkcmVuIG11c3QgY29udGFpbiBhdCBtb3N0ICR7TUFYX0NISUxEUkVOfSBwcm9qZWN0c2ApO1xuICB9XG5cbiAgY29uc3QgbmFtZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xuICAgIGFzc2VydE5vbkVtcHR5VmFsdWVXaXRob3V0U2xhc2hlcygnY2hpbGQgbmFtZScsIGNoaWxkLm5hbWUpO1xuICAgIGlmIChjaGlsZC52ZXJzaW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGFzc2VydE5vbkVtcHR5VmVyc2lvbihgdmVyc2lvbiBmb3IgY2hpbGQgJyR7Y2hpbGQubmFtZX0nYCwgY2hpbGQudmVyc2lvbik7XG4gICAgfVxuICAgIHBhcnNlVGFnc1dpdGhWYWxpZFVuaXF1ZUtleXMoY2hpbGQuYWRkaXRpb25hbFRhZ3MgPz8gW10sIGBhZGRpdGlvbmFsVGFncyBmb3IgY2hpbGQgJyR7Y2hpbGQubmFtZX0nYCk7XG4gICAgaWYgKG5hbWVzLmhhcyhjaGlsZC5uYW1lKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBjaGlsZCBuYW1lICcke2NoaWxkLm5hbWV9JyBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gdGhlIGNvbGxlY3Rpb25gKTtcbiAgICB9XG4gICAgbmFtZXMuYWRkKGNoaWxkLm5hbWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1lcmdlVGFncyhzaGFyZWRUYWdzPzogc3RyaW5nW10sIGFkZGl0aW9uYWxUYWdzPzogc3RyaW5nW10pOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG4gIGlmIChzaGFyZWRUYWdzID09PSB1bmRlZmluZWQgJiYgYWRkaXRpb25hbFRhZ3MgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBzaGFyZWQgPSBwYXJzZVRhZ3NXaXRoVmFsaWRVbmlxdWVLZXlzKHNoYXJlZFRhZ3MgPz8gW10sICdzaGFyZWRUYWdzJywgdHJ1ZSk7XG4gIGNvbnN0IGFkZGl0aW9uYWwgPSBwYXJzZVRhZ3NXaXRoVmFsaWRVbmlxdWVLZXlzKGFkZGl0aW9uYWxUYWdzID8/IFtdLCAnYWRkaXRpb25hbFRhZ3MnKTtcbiAgY29uc3QgbWVyZ2VkID0gbmV3IE1hcChzaGFyZWQpO1xuICBmb3IgKGNvbnN0IFtrZXksIHRhZ10gb2YgYWRkaXRpb25hbCkgbWVyZ2VkLnNldChrZXksIHRhZyk7XG4gIHJldHVybiBbLi4ubWVyZ2VkLnZhbHVlcygpXTtcbn1cblxuZnVuY3Rpb24gcGFyc2VUYWdzV2l0aFZhbGlkVW5pcXVlS2V5cyhcbiAgdGFnczogc3RyaW5nW10sXG4gIHByb3BlcnR5TmFtZTogc3RyaW5nLFxuICBhbGxvd01hbmFnZWRUYWdzID0gZmFsc2Vcbik6IE1hcDxzdHJpbmcsIHN0cmluZz4ge1xuICBjb25zdCByZXN1bHQgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICBmb3IgKGNvbnN0IHRhZyBvZiB0YWdzKSB7XG4gICAgY29uc3Qgc2VwYXJhdG9ySW5kZXggPSB0YWcuaW5kZXhPZignOicpO1xuICAgIGlmIChzZXBhcmF0b3JJbmRleCA8PSAwIHx8IHNlcGFyYXRvckluZGV4ID09PSB0YWcubGVuZ3RoIC0gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3Byb3BlcnR5TmFtZX0gdGFnICcke3RhZ30nIG11c3QgdXNlIHRoZSBmb3JtYXQga2V5OnZhbHVlIHdpdGggYSBub24tZW1wdHkga2V5IGFuZCB2YWx1ZWApO1xuICAgIH1cblxuICAgIGNvbnN0IGtleSA9IHRhZy5zbGljZSgwLCBzZXBhcmF0b3JJbmRleCk7XG4gICAgaWYgKE1BTkFHRURfVEFHX0tFWVMuaGFzKGtleSkgJiYgIWFsbG93TWFuYWdlZFRhZ3MpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtwcm9wZXJ0eU5hbWV9IG11c3Qgbm90IHNldCBtYW5hZ2VkIHRhZyBrZXkgJyR7a2V5fSdgKTtcbiAgICB9XG4gICAgaWYgKHJlc3VsdC5oYXMoa2V5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3Byb3BlcnR5TmFtZX0gY29udGFpbnMgZHVwbGljYXRlIHRhZyBrZXkgJyR7a2V5fSdgKTtcbiAgICB9XG4gICAgcmVzdWx0LnNldChrZXksIHRhZyk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gb3B0aW9uYWxUYWdzKHRhZ3M/OiBzdHJpbmdbXSk6IHsgcmVhZG9ubHkgdGFncz86IHN0cmluZ1tdIH0ge1xuICByZXR1cm4gdGFncyA9PT0gdW5kZWZpbmVkID8ge30gOiB7IHRhZ3MgfTtcbn1cbiJdfQ==
package/package.json CHANGED
@@ -15,7 +15,7 @@
15
15
  ],
16
16
  "main": "lib/index.js",
17
17
  "license": "Apache-2.0",
18
- "version": "8.7.1-alpha.1",
18
+ "version": "8.8.0-alpha.1",
19
19
  "types": "lib/index.d.ts",
20
20
  "stability": "stable",
21
21
  "exports": {
@@ -91,7 +91,7 @@
91
91
  "@types/node": "24.13.2",
92
92
  "@types/tmp": "^0.2.6",
93
93
  "aws-cdk": "^2.179.0",
94
- "aws-cdk-lib": "2.263.0",
94
+ "aws-cdk-lib": "2.266.0",
95
95
  "aws-sdk-client-mock": "^4.1.0",
96
96
  "commit-and-tag-version": "^12.5.0",
97
97
  "constructs": "10.5.1",
@@ -106,7 +106,7 @@
106
106
  "vitest": "4.1.9"
107
107
  },
108
108
  "peerDependencies": {
109
- "aws-cdk-lib": "^2.263.0",
109
+ "aws-cdk-lib": "^2.266.0",
110
110
  "constructs": "^10.5.1",
111
111
  "datadog-cdk-constructs-v2": "^4.0.0"
112
112
  },
package/version.json CHANGED
@@ -1,3 +1,3 @@
1
1
  {
2
- "version": "8.7.1-alpha.1"
2
+ "version": "8.8.0-alpha.1"
3
3
  }