@rio-cloud/cdk-v2-constructs 2.0.1 → 2.0.4

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
@@ -8,11 +8,11 @@
8
8
  "url": "https://rio.cloud/"
9
9
  },
10
10
  "bundled": {
11
- "js-yaml": "4.1.0"
11
+ "js-yaml": "~4.1.0"
12
12
  },
13
13
  "dependencies": {
14
- "aws-cdk-lib": "2.19.0",
15
- "constructs": "10.0.107"
14
+ "aws-cdk-lib": "^2.20.0",
15
+ "constructs": "^10.0.107"
16
16
  },
17
17
  "dependencyClosure": {
18
18
  "aws-cdk-lib": {
@@ -3244,14 +3244,14 @@
3244
3244
  "abstract": true,
3245
3245
  "docs": {
3246
3246
  "default": "- No environment variables.",
3247
- "remarks": "Environment variables set by default are overwritten if passed.\n\nThe default environment variables set are\n\nDD_ENV: Set same as prop stage\n\nDD_SERVICE: Set same as prop serviceName\n\nDD_VERSION: Set same as prop version\n\nDD_LOGS_INJECTION: true\n\nDD_SERVICE_MAPPING: database:fargate-web-app-aurora,java-aws-sdk:fargate-web-app-aws-sdk,kafka:fargate-web-app-kafka,mysql:fargate-web-app-aurora\n\nDD_TAGS: env:prod,service:fargate-web-app,version:notag,account_id:${accountID},account_name:${accountName},region:${AWSRegion},team:${teamName from ssm param /config/team/name}\n\nDD_TRACE_SAMPLE_RATE: 1.0",
3247
+ "remarks": "Some Datadog specific environment variables are not allowed to be set,\nbecause they are set automatically or computed from other attributes.\nThese are:\n* DD_ENV: Set same as prop stage\n* DD_SERVICE: Set same as prop serviceName\n* DD_VERSION: Set same as prop version\n* DD_TAGS: Set same as DatadogIntegrationProps#additionalTags\n* DD_LOGS_INJECTION: true\nOther DD_-prefixed vaiable may be added to this list.\n\nOther Environment variables set by default are overwritten if passed.\nThese are:\n* DD_SERVICE_MAPPING: database:fargate-web-app-aurora,java-aws-sdk:fargate-web-app-aws-sdk,kafka:fargate-web-app-kafka,mysql:fargate-web-app-aurora\n* DD_TRACE_SAMPLE_RATE: 1.0",
3248
3248
  "stability": "stable",
3249
3249
  "summary": "The environment variables to pass to the container."
3250
3250
  },
3251
3251
  "immutable": true,
3252
3252
  "locationInModule": {
3253
3253
  "filename": "src/fargate/rio-fargate-service.ts",
3254
- "line": 103
3254
+ "line": 100
3255
3255
  },
3256
3256
  "name": "environment",
3257
3257
  "optional": true,
@@ -3274,7 +3274,7 @@
3274
3274
  "immutable": true,
3275
3275
  "locationInModule": {
3276
3276
  "filename": "src/fargate/rio-fargate-service.ts",
3277
- "line": 117
3277
+ "line": 114
3278
3278
  },
3279
3279
  "name": "healthCheck",
3280
3280
  "optional": true,
@@ -3292,7 +3292,7 @@
3292
3292
  "immutable": true,
3293
3293
  "locationInModule": {
3294
3294
  "filename": "src/fargate/rio-fargate-service.ts",
3295
- "line": 110
3295
+ "line": 107
3296
3296
  },
3297
3297
  "name": "secrets",
3298
3298
  "optional": true,
@@ -3380,7 +3380,7 @@
3380
3380
  "kind": "enum",
3381
3381
  "locationInModule": {
3382
3382
  "filename": "src/fargate/rio-fargate-service.ts",
3383
- "line": 273
3383
+ "line": 289
3384
3384
  },
3385
3385
  "members": [
3386
3386
  {
@@ -3607,10 +3607,33 @@
3607
3607
  "kind": "interface",
3608
3608
  "locationInModule": {
3609
3609
  "filename": "src/fargate/rio-fargate-service.ts",
3610
- "line": 218
3610
+ "line": 215
3611
3611
  },
3612
3612
  "name": "DatadogIntegrationProps",
3613
3613
  "properties": [
3614
+ {
3615
+ "abstract": true,
3616
+ "docs": {
3617
+ "remarks": "We would like to learn about your use cases.\n\nDefault tags are not allowed to be overridden!\n\nDefaults are:\n* env: Set to RioFargateServiceProps#stage prop\n* service: Set to RioFargateServiceProps#serviceName prop\n* version: Set to RioFargateServiceProps#version prop\n* account_id:${accountID}\n* account_name:${accountName}\n* region:${AWSRegion}\n* team:${teamName from ssm param /config/team/name}\n* team_identifier:${teamIdentifier from ssm param /config/team/identifier}",
3618
+ "stability": "stable",
3619
+ "summary": "Configure additional tags, which are appended to the defaults, When you define custom tags we would be glad if you contact us."
3620
+ },
3621
+ "immutable": true,
3622
+ "locationInModule": {
3623
+ "filename": "src/fargate/rio-fargate-service.ts",
3624
+ "line": 286
3625
+ },
3626
+ "name": "additionalTags",
3627
+ "optional": true,
3628
+ "type": {
3629
+ "collection": {
3630
+ "elementtype": {
3631
+ "primitive": "string"
3632
+ },
3633
+ "kind": "map"
3634
+ }
3635
+ }
3636
+ },
3614
3637
  {
3615
3638
  "abstract": true,
3616
3639
  "docs": {
@@ -3622,7 +3645,7 @@
3622
3645
  "immutable": true,
3623
3646
  "locationInModule": {
3624
3647
  "filename": "src/fargate/rio-fargate-service.ts",
3625
- "line": 257
3648
+ "line": 254
3626
3649
  },
3627
3650
  "name": "apmGetEndpointsToIgnore",
3628
3651
  "optional": true,
@@ -3645,7 +3668,7 @@
3645
3668
  "immutable": true,
3646
3669
  "locationInModule": {
3647
3670
  "filename": "src/fargate/rio-fargate-service.ts",
3648
- "line": 224
3671
+ "line": 221
3649
3672
  },
3650
3673
  "name": "cpu",
3651
3674
  "optional": true,
@@ -3663,7 +3686,7 @@
3663
3686
  "immutable": true,
3664
3687
  "locationInModule": {
3665
3688
  "filename": "src/fargate/rio-fargate-service.ts",
3666
- "line": 264
3689
+ "line": 261
3667
3690
  },
3668
3691
  "name": "datadogSidecarEssential",
3669
3692
  "optional": true,
@@ -3681,7 +3704,7 @@
3681
3704
  "immutable": true,
3682
3705
  "locationInModule": {
3683
3706
  "filename": "src/fargate/rio-fargate-service.ts",
3684
- "line": 270
3707
+ "line": 267
3685
3708
  },
3686
3709
  "name": "datadogSidecarTag",
3687
3710
  "optional": true,
@@ -3699,7 +3722,7 @@
3699
3722
  "immutable": true,
3700
3723
  "locationInModule": {
3701
3724
  "filename": "src/fargate/rio-fargate-service.ts",
3702
- "line": 250
3725
+ "line": 247
3703
3726
  },
3704
3727
  "name": "loggingModeForDatadogAgent",
3705
3728
  "optional": true,
@@ -3717,7 +3740,7 @@
3717
3740
  "immutable": true,
3718
3741
  "locationInModule": {
3719
3742
  "filename": "src/fargate/rio-fargate-service.ts",
3720
- "line": 243
3743
+ "line": 240
3721
3744
  },
3722
3745
  "name": "loggingModeForService",
3723
3746
  "optional": true,
@@ -3736,7 +3759,7 @@
3736
3759
  "immutable": true,
3737
3760
  "locationInModule": {
3738
3761
  "filename": "src/fargate/rio-fargate-service.ts",
3739
- "line": 236
3762
+ "line": 233
3740
3763
  },
3741
3764
  "name": "memoryLimitMiB",
3742
3765
  "optional": true,
@@ -3762,7 +3785,7 @@
3762
3785
  },
3763
3786
  "locationInModule": {
3764
3787
  "filename": "src/datadog/datadogLogIndexMonitoring.ts",
3765
- "line": 56
3788
+ "line": 64
3766
3789
  },
3767
3790
  "parameters": [
3768
3791
  {
@@ -3788,7 +3811,7 @@
3788
3811
  "kind": "class",
3789
3812
  "locationInModule": {
3790
3813
  "filename": "src/datadog/datadogLogIndexMonitoring.ts",
3791
- "line": 55
3814
+ "line": 63
3792
3815
  },
3793
3816
  "name": "DatadogLogIndexMonitoring",
3794
3817
  "symbolId": "src/datadog/datadogLogIndexMonitoring:DatadogLogIndexMonitoring"
@@ -3817,7 +3840,7 @@
3817
3840
  "immutable": true,
3818
3841
  "locationInModule": {
3819
3842
  "filename": "src/datadog/datadogLogIndexMonitoring.ts",
3820
- "line": 19
3843
+ "line": 20
3821
3844
  },
3822
3845
  "name": "alertType",
3823
3846
  "type": {
@@ -3833,7 +3856,7 @@
3833
3856
  "immutable": true,
3834
3857
  "locationInModule": {
3835
3858
  "filename": "src/datadog/datadogLogIndexMonitoring.ts",
3836
- "line": 24
3859
+ "line": 25
3837
3860
  },
3838
3861
  "name": "dailyLogQuota",
3839
3862
  "type": {
@@ -3849,7 +3872,7 @@
3849
3872
  "immutable": true,
3850
3873
  "locationInModule": {
3851
3874
  "filename": "src/datadog/datadogLogIndexMonitoring.ts",
3852
- "line": 13
3875
+ "line": 14
3853
3876
  },
3854
3877
  "name": "indexName",
3855
3878
  "type": {
@@ -3866,12 +3889,31 @@
3866
3889
  "immutable": true,
3867
3890
  "locationInModule": {
3868
3891
  "filename": "src/datadog/datadogLogIndexMonitoring.ts",
3869
- "line": 8
3892
+ "line": 9
3870
3893
  },
3871
3894
  "name": "serviceName",
3872
3895
  "type": {
3873
3896
  "primitive": "string"
3874
3897
  }
3898
+ },
3899
+ {
3900
+ "abstract": true,
3901
+ "docs": {
3902
+ "default": "- false",
3903
+ "remarks": "Without setting this value it will lead to an empty result and therefore trigger an alert.",
3904
+ "stability": "stable",
3905
+ "summary": "This value should be used if there is no log message within 24 hours or missing historical data."
3906
+ },
3907
+ "immutable": true,
3908
+ "locationInModule": {
3909
+ "filename": "src/datadog/datadogLogIndexMonitoring.ts",
3910
+ "line": 32
3911
+ },
3912
+ "name": "sparseLogging",
3913
+ "optional": true,
3914
+ "type": {
3915
+ "primitive": "boolean"
3916
+ }
3875
3917
  }
3876
3918
  ],
3877
3919
  "symbolId": "src/datadog/datadogLogIndexMonitoring:DatadogLogIndexMonitoringProps"
@@ -3886,7 +3928,7 @@
3886
3928
  "kind": "interface",
3887
3929
  "locationInModule": {
3888
3930
  "filename": "src/datadog/datadogLogIndexMonitoring.ts",
3889
- "line": 27
3931
+ "line": 35
3890
3932
  },
3891
3933
  "name": "DatadogLogQuotaProps",
3892
3934
  "properties": [
@@ -3900,7 +3942,7 @@
3900
3942
  "immutable": true,
3901
3943
  "locationInModule": {
3902
3944
  "filename": "src/datadog/datadogLogIndexMonitoring.ts",
3903
- "line": 42
3945
+ "line": 50
3904
3946
  },
3905
3947
  "name": "alertThresholdInPercent",
3906
3948
  "type": {
@@ -3916,7 +3958,7 @@
3916
3958
  "immutable": true,
3917
3959
  "locationInModule": {
3918
3960
  "filename": "src/datadog/datadogLogIndexMonitoring.ts",
3919
- "line": 31
3961
+ "line": 39
3920
3962
  },
3921
3963
  "name": "valueInMillionEvents",
3922
3964
  "type": {
@@ -3932,7 +3974,7 @@
3932
3974
  "immutable": true,
3933
3975
  "locationInModule": {
3934
3976
  "filename": "src/datadog/datadogLogIndexMonitoring.ts",
3935
- "line": 36
3977
+ "line": 44
3936
3978
  },
3937
3979
  "name": "warningThresholdInPercent",
3938
3980
  "type": {
@@ -3952,7 +3994,7 @@
3952
3994
  "kind": "interface",
3953
3995
  "locationInModule": {
3954
3996
  "filename": "src/fargate/rio-fargate-service.ts",
3955
- "line": 120
3997
+ "line": 117
3956
3998
  },
3957
3999
  "name": "FargateTaskDefinitionProps",
3958
4000
  "properties": [
@@ -3967,7 +4009,7 @@
3967
4009
  "immutable": true,
3968
4010
  "locationInModule": {
3969
4011
  "filename": "src/fargate/rio-fargate-service.ts",
3970
- "line": 138
4012
+ "line": 135
3971
4013
  },
3972
4014
  "name": "cpu",
3973
4015
  "type": {
@@ -3985,7 +4027,7 @@
3985
4027
  "immutable": true,
3986
4028
  "locationInModule": {
3987
4029
  "filename": "src/fargate/rio-fargate-service.ts",
3988
- "line": 156
4030
+ "line": 153
3989
4031
  },
3990
4032
  "name": "memoryLimitMiB",
3991
4033
  "type": {
@@ -4002,7 +4044,7 @@
4002
4044
  "immutable": true,
4003
4045
  "locationInModule": {
4004
4046
  "filename": "src/fargate/rio-fargate-service.ts",
4005
- "line": 164
4047
+ "line": 161
4006
4048
  },
4007
4049
  "name": "desiredCount",
4008
4050
  "optional": true,
@@ -4660,7 +4702,7 @@
4660
4702
  "kind": "interface",
4661
4703
  "locationInModule": {
4662
4704
  "filename": "src/fargate/rio-fargate-service.ts",
4663
- "line": 167
4705
+ "line": 164
4664
4706
  },
4665
4707
  "name": "ListenerRule",
4666
4708
  "properties": [
@@ -4672,7 +4714,7 @@
4672
4714
  "immutable": true,
4673
4715
  "locationInModule": {
4674
4716
  "filename": "src/fargate/rio-fargate-service.ts",
4675
- "line": 170
4717
+ "line": 167
4676
4718
  },
4677
4719
  "name": "conditions",
4678
4720
  "type": {
@@ -4692,7 +4734,7 @@
4692
4734
  "immutable": true,
4693
4735
  "locationInModule": {
4694
4736
  "filename": "src/fargate/rio-fargate-service.ts",
4695
- "line": 168
4737
+ "line": 165
4696
4738
  },
4697
4739
  "name": "priority",
4698
4740
  "type": {
@@ -4712,7 +4754,7 @@
4712
4754
  "kind": "interface",
4713
4755
  "locationInModule": {
4714
4756
  "filename": "src/fargate/rio-fargate-service.ts",
4715
- "line": 173
4757
+ "line": 170
4716
4758
  },
4717
4759
  "name": "LoadBalancerOptions",
4718
4760
  "properties": [
@@ -4725,7 +4767,7 @@
4725
4767
  "immutable": true,
4726
4768
  "locationInModule": {
4727
4769
  "filename": "src/fargate/rio-fargate-service.ts",
4728
- "line": 192
4770
+ "line": 189
4729
4771
  },
4730
4772
  "name": "healthCheck",
4731
4773
  "type": {
@@ -4741,7 +4783,7 @@
4741
4783
  "immutable": true,
4742
4784
  "locationInModule": {
4743
4785
  "filename": "src/fargate/rio-fargate-service.ts",
4744
- "line": 197
4786
+ "line": 194
4745
4787
  },
4746
4788
  "name": "healthCheckGracePeriod",
4747
4789
  "type": {
@@ -4757,7 +4799,7 @@
4757
4799
  "immutable": true,
4758
4800
  "locationInModule": {
4759
4801
  "filename": "src/fargate/rio-fargate-service.ts",
4760
- "line": 177
4802
+ "line": 174
4761
4803
  },
4762
4804
  "name": "listener",
4763
4805
  "type": {
@@ -4774,7 +4816,7 @@
4774
4816
  "immutable": true,
4775
4817
  "locationInModule": {
4776
4818
  "filename": "src/fargate/rio-fargate-service.ts",
4777
- "line": 187
4819
+ "line": 184
4778
4820
  },
4779
4821
  "name": "listenerRules",
4780
4822
  "type": {
@@ -4797,7 +4839,7 @@
4797
4839
  "immutable": true,
4798
4840
  "locationInModule": {
4799
4841
  "filename": "src/fargate/rio-fargate-service.ts",
4800
- "line": 215
4842
+ "line": 212
4801
4843
  },
4802
4844
  "name": "deregistrationDelay",
4803
4845
  "optional": true,
@@ -4816,7 +4858,7 @@
4816
4858
  "immutable": true,
4817
4859
  "locationInModule": {
4818
4860
  "filename": "src/fargate/rio-fargate-service.ts",
4819
- "line": 206
4861
+ "line": 203
4820
4862
  },
4821
4863
  "name": "slowStart",
4822
4864
  "optional": true,
@@ -5265,7 +5307,7 @@
5265
5307
  },
5266
5308
  "locationInModule": {
5267
5309
  "filename": "src/fargate/rio-fargate-service.ts",
5268
- "line": 316
5310
+ "line": 351
5269
5311
  },
5270
5312
  "parameters": [
5271
5313
  {
@@ -5294,7 +5336,7 @@
5294
5336
  "kind": "class",
5295
5337
  "locationInModule": {
5296
5338
  "filename": "src/fargate/rio-fargate-service.ts",
5297
- "line": 292
5339
+ "line": 308
5298
5340
  },
5299
5341
  "name": "RioFargateService",
5300
5342
  "properties": [
@@ -5306,7 +5348,7 @@
5306
5348
  "immutable": true,
5307
5349
  "locationInModule": {
5308
5350
  "filename": "src/fargate/rio-fargate-service.ts",
5309
- "line": 312
5351
+ "line": 347
5310
5352
  },
5311
5353
  "name": "connections",
5312
5354
  "overrides": "aws-cdk-lib.aws_ec2.IConnectable",
@@ -5321,7 +5363,7 @@
5321
5363
  "immutable": true,
5322
5364
  "locationInModule": {
5323
5365
  "filename": "src/fargate/rio-fargate-service.ts",
5324
- "line": 308
5366
+ "line": 343
5325
5367
  },
5326
5368
  "name": "datadogSideCarContainerDefinition",
5327
5369
  "type": {
@@ -5335,7 +5377,7 @@
5335
5377
  "immutable": true,
5336
5378
  "locationInModule": {
5337
5379
  "filename": "src/fargate/rio-fargate-service.ts",
5338
- "line": 313
5380
+ "line": 348
5339
5381
  },
5340
5382
  "name": "service",
5341
5383
  "type": {
@@ -5349,7 +5391,7 @@
5349
5391
  "immutable": true,
5350
5392
  "locationInModule": {
5351
5393
  "filename": "src/fargate/rio-fargate-service.ts",
5352
- "line": 307
5394
+ "line": 342
5353
5395
  },
5354
5396
  "name": "serviceContainerDefinition",
5355
5397
  "type": {
@@ -5363,7 +5405,7 @@
5363
5405
  "immutable": true,
5364
5406
  "locationInModule": {
5365
5407
  "filename": "src/fargate/rio-fargate-service.ts",
5366
- "line": 310
5408
+ "line": 345
5367
5409
  },
5368
5410
  "name": "taskDefinition",
5369
5411
  "type": {
@@ -5377,7 +5419,7 @@
5377
5419
  "immutable": true,
5378
5420
  "locationInModule": {
5379
5421
  "filename": "src/fargate/rio-fargate-service.ts",
5380
- "line": 309
5422
+ "line": 344
5381
5423
  },
5382
5424
  "name": "logRouterContainerDefinition",
5383
5425
  "optional": true,
@@ -5392,7 +5434,7 @@
5392
5434
  "immutable": true,
5393
5435
  "locationInModule": {
5394
5436
  "filename": "src/fargate/rio-fargate-service.ts",
5395
- "line": 314
5437
+ "line": 349
5396
5438
  },
5397
5439
  "name": "targetGroup",
5398
5440
  "optional": true,
@@ -7828,5 +7870,5 @@
7828
7870
  }
7829
7871
  },
7830
7872
  "version": "0.0.0",
7831
- "fingerprint": "xBmV9L8H73GMq8ef1f+b1IPi288vWpuJnLGJd8AoaQo="
7873
+ "fingerprint": "Jy+OKKtMmQl6v7Nh66t68Cg+74EnVQYYcPwEwkdbVvs="
7832
7874
  }
package/CHANGELOG.md CHANGED
@@ -2,6 +2,17 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
4
4
 
5
+ ### [2.0.4](https://collaboration.msi.audi.com/stash/projects/RIODEV/repos/cdk-v2-constructs/compare/commits?targetBranch=refs%2Ftags%2Fv2.0.3&sourceBranch=refs%2Ftags%2Fv2.0.4) (2022-05-30)
6
+
7
+
8
+ ### Bug Fixes
9
+
10
+ * Migrate Datadog log monitoring to Datadog's "New Events Feature" ([943d8a9](https://collaboration.msi.audi.com/stash/projects/RIODEV/repos/cdk-v2-constructs/commits/943d8a98de63ab2336ac727d4966dafd12d02a3f))
11
+
12
+ ### [2.0.3](https://collaboration.msi.audi.com/stash/projects/RIODEV/repos/cdk-v2-constructs/compare/commits?targetBranch=refs%2Ftags%2Fv2.0.2&sourceBranch=refs%2Ftags%2Fv2.0.3) (2022-05-19)
13
+
14
+ ### [2.0.2](https://collaboration.msi.audi.com/stash/projects/RIODEV/repos/cdk-v2-constructs/compare/commits?targetBranch=refs%2Ftags%2Fv2.0.1&sourceBranch=refs%2Ftags%2Fv2.0.2) (2022-04-21)
15
+
5
16
  ### [2.0.1](https://collaboration.msi.audi.com/stash/projects/RIODEV/repos/cdk-v2-constructs/compare/commits?targetBranch=refs%2Ftags%2Fv2.0.0&sourceBranch=refs%2Ftags%2Fv2.0.1) (2022-04-08)
6
17
 
7
18
 
@@ -1,19 +1,23 @@
1
1
  # Migration Guide
2
2
 
3
3
  1. Remove projen if not already done
4
- * avoid `eject` as the resulting tasks script is unreadable and it contains unnecessary/unused features
5
- * remove projen dependencies
6
- * copy over necessary tasks from `.projen/tasks.json` to `package.json`
7
- 2. udpate `aws-cdk` in `package-json` to latest 2.x version: `npm install --save-dev aws-cdk@2`
8
- a. remove CDK v1 dependencies from `package.json`
9
- b. add `aws-cdk-lib`: `npm install aws-cdk-lib`
10
- c. replace imports: `$ npx -p aws-cdk-migration rewrite-imports-v2 <your-source-root-here>/**/*.ts`
11
- d. update `cdk.json` (TODO)
12
- e. replace `@aws-cdk/assert` with `aws-cdk-lib/assertions` ando migrate expectations to `Template.fromStack(...).hasResource`
13
- * additional information: [Official Migration Guide](https://docs.aws.amazon.com/cdk/v2/guide/migrating-v2.html)
14
- 5. replace `@rioclaid/cdk-constructs` with `@rio-cloud/cdk-v2-constructs`
15
- * remove dependency form `package.json`
16
- * add new dependency `npm install @rio-cloud/cdk-v2-constructs`
17
- * replace imports `import * as rio from '@rioclaid/cdk-constructs'` with `import * as rio from '@rio-cloud/cdk-v2-constructs'`
18
- 6. In case you use `Claidometer` there is a breaking change as the property `package` is a reserverd keyword in some languages and thus has been renamed to `packageName`
19
- 7. adopt your renovate.json
4
+ 1. **remove projen** dependencies from `package.json`
5
+ 2. **copy over** necessary tasks from `.projen/tasks.json` to `package.json`
6
+ 3. **remove** `.projen` directory
7
+ * **avoid `eject`** as the resulting tasks script is unreadable and it contains unnecessary/unused features
8
+ * find a more detailed description [here](https://collaboration.msi.audi.com/confluence/display/RIOCLAID/Remove+Projen)
9
+ 2. Update `aws-cdk` in `package-json` to latest 2.x version:
10
+ 1. **install CDK v2**: `npm install --save-dev aws-cdk@2`
11
+ 2. **remove CDK v1 dependencies** (e.g., `@aws-cdk/...`, `constructs`, `@rioclaid/cdk-constructs`) from `package.json`
12
+ 3. **add `aws-cdk-lib`**: `npm install aws-cdk-lib`
13
+ 3. **add `constructs`**: `npm install constructs@10`
14
+ 4. **replace imports**: `$ npx -p aws-cdk-migration rewrite-imports-v2 <your-source-root-here>/**/*.ts`
15
+ 5. update `cdk.json` (e.g., by generating a new CDKv2 app in another folder with `npx cdk@2 init app --language=typescript` and comparing its `cdk.json` with yours)
16
+ 6. replace `@aws-cdk/assert` with `aws-cdk-lib/assertions` ando migrate expectations to `Template.fromStack(...).hasResource`
17
+ * additional information: [Official Migration Guide](https://docs.aws.amazon.com/cdk/v2/guide/migrating-v2.html)
18
+ 5. Replace `@rioclaid/cdk-constructs` with `@rio-cloud/cdk-v2-constructs`
19
+ * **add `@rio-cloud/cdk-v2-constructs`**: `npm install @rio-cloud/cdk-v2-constructs`
20
+ * replace imports `import * as rio from '@rioclaid/cdk-constructs'` with `import * as rio from '@rio-cloud/cdk-v2-constructs'`
21
+ 6. In case you use `Claidometer`:\
22
+ There is a breaking change as the property `package` is a reserved keyword in some languages and thus has been renamed to `packageName`
23
+ 7. Adopt `renovate.json`
@@ -18,6 +18,12 @@ export interface DatadogLogIndexMonitoringProps {
18
18
  * The daily log quota settings.
19
19
  */
20
20
  readonly dailyLogQuota: DatadogLogQuotaProps;
21
+ /**
22
+ * This value should be used if there is no log message within 24 hours or missing historical data.
23
+ * Without setting this value it will lead to an empty result and therefore trigger an alert.
24
+ * @default - false
25
+ */
26
+ readonly sparseLogging?: boolean;
21
27
  }
22
28
  export interface DatadogLogQuotaProps {
23
29
  /**
@@ -60,7 +60,7 @@ class DatadogLogDailyQuotaMonitor extends datadogMonitor_1.DatadogMonitor {
60
60
  warning: warningThreshold,
61
61
  },
62
62
  include_tags: false,
63
- notify_no_data: true,
63
+ notify_no_data: props.sparseLogging ? false : true,
64
64
  no_data_timeframe: 24 * 60,
65
65
  },
66
66
  },
@@ -79,7 +79,7 @@ class DatadogLogsAnomalyMonitor extends datadogMonitor_1.DatadogMonitor {
79
79
  message: `[P4] Logs are getting out of control: ${datadogLogsSearchWithIndexFilterDeepLink(props.indexName)}`,
80
80
  options: {
81
81
  include_tags: false,
82
- notify_no_data: true,
82
+ notify_no_data: props.sparseLogging ? false : true,
83
83
  threshold_windows: {
84
84
  trigger_window: 'last_15m',
85
85
  recovery_window: 'last_15m',
@@ -96,8 +96,8 @@ class DatadogLogDailyQuotaReachedMonitor extends datadogMonitor_1.DatadogMonitor
96
96
  alertTypes: [props.alertType],
97
97
  monitor: {
98
98
  name: 'Log quota reached',
99
- type: 'event alert',
100
- query: `events('tags:datadog_index:${props.indexName} priority:all Daily quota reached sources:datadog').rollup('count').last('5m') > 0`,
99
+ type: 'event-v2 alert',
100
+ query: `events("source:datadog datadog_index:${props.indexName} Daily quota reached").rollup("count").last("5m") > 0`,
101
101
  message: `[P2] The log quote for the index has been reached. If you do not increase the quota at ${datadogLogsIndexesConfigurationDeepLink}, no new logs will be indexed until the quota is reset at 2:00pm UTC.`,
102
102
  options: {
103
103
  timeout_h: 24,
@@ -113,4 +113,4 @@ function datadogLogsSearchWithIndexFilterDeepLink(indexName) {
113
113
  return `https://app.datadoghq.eu/logs?index=${indexName}`;
114
114
  }
115
115
  const datadogLogsIndexesConfigurationDeepLink = 'https://app.datadoghq.eu/logs/pipelines/indexes';
116
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWRvZ0xvZ0luZGV4TW9uaXRvcmluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhZG9nL2RhdGFkb2dMb2dJbmRleE1vbml0b3JpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSwyQ0FBdUM7QUFDdkMscURBQW9FO0FBMkNwRTs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFhLHlCQUEwQixTQUFRLHNCQUFTO0lBQ3RELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBcUM7UUFDN0UsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLDJCQUEyQixDQUFDLElBQUksRUFBRSw2QkFBNkIsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1RSxJQUFJLHlCQUF5QixDQUFDLElBQUksRUFBRSwrQkFBK0IsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1RSxJQUFJLGtDQUFrQyxDQUFDLElBQUksRUFBRSxvQ0FBb0MsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUUxRixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQztZQUN0QixRQUFRLEVBQUUsR0FBYSxFQUFFO2dCQUN2QixNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7Z0JBQ2xCLElBQUksS0FBSyxDQUFDLGFBQWEsQ0FBQyx5QkFBeUIsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLGFBQWEsQ0FBQyx5QkFBeUIsR0FBRyxHQUFHLEVBQUU7b0JBQzVHLE1BQU0sQ0FBQyxJQUFJLENBQUMsMkVBQTJFLENBQUMsQ0FBQztpQkFDMUY7Z0JBQ0QsSUFBSSxLQUFLLENBQUMsYUFBYSxDQUFDLHVCQUF1QixHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsYUFBYSxDQUFDLHVCQUF1QixHQUFHLEdBQUcsRUFBRTtvQkFDeEcsTUFBTSxDQUFDLElBQUksQ0FBQyx5RUFBeUUsQ0FBQyxDQUFDO2lCQUN4RjtnQkFDRCxJQUFJLEtBQUssQ0FBQyxhQUFhLENBQUMsdUJBQXVCLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQyx5QkFBeUIsRUFBRTtvQkFDL0YsTUFBTSxDQUFDLElBQUksQ0FBQyxpR0FBaUcsQ0FBQyxDQUFDO2lCQUNoSDtnQkFDRCxPQUFPLE1BQU0sQ0FBQztZQUNoQixDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7QUF2QkgsOERBd0JDOzs7QUFFRCxNQUFNLDJCQUE0QixTQUFRLCtCQUFjO0lBQ3RELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBcUM7UUFDN0UsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsb0JBQW9CLEdBQUcsT0FBUyxDQUFDLENBQUM7UUFDMUYsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixHQUFHLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyx5QkFBeUIsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzlHLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLHVCQUF1QixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFMUcsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDZixXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7WUFDOUIsVUFBVSxFQUFFLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQztZQUM3QixPQUFPLEVBQUU7Z0JBQ1AsSUFBSSxFQUFFLDBCQUEwQjtnQkFDaEMsSUFBSSxFQUFFLGNBQWM7Z0JBQ3BCLEtBQUssRUFBRSx5R0FBeUcsS0FBSyxDQUFDLFNBQVMsc0NBQXNDLGNBQWMsRUFBRTtnQkFDckwsT0FBTyxFQUFFLG1DQUFtQyx3Q0FBd0MsQ0FDbEYsS0FBSyxDQUFDLFNBQVMsQ0FDaEIsOEJBQThCLHVDQUF1QyxFQUFFO2dCQUN4RSxPQUFPLEVBQUU7b0JBQ1AsVUFBVSxFQUFFO3dCQUNWLFFBQVEsRUFBRSxjQUFjO3dCQUN4QixPQUFPLEVBQUUsZ0JBQWdCO3FCQUMxQjtvQkFDRCxZQUFZLEVBQUUsS0FBSztvQkFDbkIsY0FBYyxFQUFFLElBQUk7b0JBQ3BCLGlCQUFpQixFQUFFLEVBQUUsR0FBRyxFQUFFO2lCQUMzQjthQUNGO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBRUQsTUFBTSx5QkFBMEIsU0FBUSwrQkFBYztJQUNwRCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXFDO1FBQzdFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ2YsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXO1lBQzlCLFVBQVUsRUFBRSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7WUFDN0IsT0FBTyxFQUFFO2dCQUNQLElBQUksRUFBRSwyQ0FBMkM7Z0JBQ2pELElBQUksRUFBRSxjQUFjO2dCQUNwQixLQUFLLEVBQUUsbUhBQW1ILEtBQUssQ0FBQyxTQUFTLHFLQUFxSztnQkFDOVMsT0FBTyxFQUFFLHlDQUF5Qyx3Q0FBd0MsQ0FDeEYsS0FBSyxDQUFDLFNBQVMsQ0FDaEIsRUFBRTtnQkFDSCxPQUFPLEVBQUU7b0JBQ1AsWUFBWSxFQUFFLEtBQUs7b0JBQ25CLGNBQWMsRUFBRSxJQUFJO29CQUNwQixpQkFBaUIsRUFBRTt3QkFDakIsY0FBYyxFQUFFLFVBQVU7d0JBQzFCLGVBQWUsRUFBRSxVQUFVO3FCQUM1QjtpQkFDRjthQUNGO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBRUQsTUFBTSxrQ0FBbUMsU0FBUSwrQkFBYztJQUM3RCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXFDO1FBQzdFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ2YsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXO1lBQzlCLFVBQVUsRUFBRSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7WUFDN0IsT0FBTyxFQUFFO2dCQUNQLElBQUksRUFBRSxtQkFBbUI7Z0JBQ3pCLElBQUksRUFBRSxhQUFhO2dCQUNuQixLQUFLLEVBQUUsOEJBQThCLEtBQUssQ0FBQyxTQUFTLG9GQUFvRjtnQkFDeEksT0FBTyxFQUFFLDBGQUEwRix1Q0FBdUMsdUVBQXVFO2dCQUNqTixPQUFPLEVBQUU7b0JBQ1AsU0FBUyxFQUFFLEVBQUU7b0JBQ2IsVUFBVSxFQUFFO3dCQUNWLFFBQVEsRUFBRSxDQUFDO3FCQUNaO2lCQUNGO2FBQ0Y7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFFRCxTQUFTLHdDQUF3QyxDQUFDLFNBQWlCO0lBQ2pFLE9BQU8sdUNBQXVDLFNBQVMsRUFBRSxDQUFDO0FBQzVELENBQUM7QUFFRCxNQUFNLHVDQUF1QyxHQUFHLGlEQUFpRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBEYXRhZG9nTW9uaXRvciwgRGF0YWRvZ0FsZXJ0VHlwZSB9IGZyb20gJy4vZGF0YWRvZ01vbml0b3InO1xuXG5leHBvcnQgaW50ZXJmYWNlIERhdGFkb2dMb2dJbmRleE1vbml0b3JpbmdQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB5b3VyIHNlcnZpY2UgaW4gRGF0YWRvZy4gQ2FuIGJlIHVzZWQgdG8gcXVlcnkgdGhlIG1vbml0b3JzLlxuICAgKi9cbiAgcmVhZG9ubHkgc2VydmljZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIERhdGFkb2cgaW5kZXguXG4gICAqL1xuICByZWFkb25seSBpbmRleE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGludGVncmF0aW9uIHRvIHVzZSBmb3IgYWxlcnRpbmcuXG4gICAqIEZvciBPcHNHZW5pZSwgeW91IG5lZWQgdG8gaW5zdGFsbCBhbmQgY29uZmlndXJlIHRoZSAnb3BzZ2VuaWUtaW50ZWdyYXRpb24nIGFjY291bnQgbW9kdWxlLlxuICAgKi9cbiAgcmVhZG9ubHkgYWxlcnRUeXBlOiBEYXRhZG9nQWxlcnRUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgZGFpbHkgbG9nIHF1b3RhIHNldHRpbmdzLlxuICAgKi9cbiAgcmVhZG9ubHkgZGFpbHlMb2dRdW90YTogRGF0YWRvZ0xvZ1F1b3RhUHJvcHM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YWRvZ0xvZ1F1b3RhUHJvcHMge1xuICAvKipcbiAgICogVGhlIGRhaWx5IGxvZyBxdW90YSBmb3IgdGhlIHRlYW0tc3BlY2lmaWMgaW5kZXggaW4gbWlsbGlvbiBldmVudHMuXG4gICAqL1xuICByZWFkb25seSB2YWx1ZUluTWlsbGlvbkV2ZW50czogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgd2FybmluZyB0aHJlc2hvbGQgZm9yIHRoZSBkYWlseSBsb2cgcXVvdGEgbW9uaXRvciBpbiBwZXJjZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgd2FybmluZ1RocmVzaG9sZEluUGVyY2VudDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgYWxhcm0gdGhyZXNob2xkIGZvciB0aGUgZGFpbHkgbG9nIHF1b3RhIG1vbml0b3IgaW4gcGVyY2VudC5cbiAgICogVGhlIHZhbHVlIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxMDAgYW5kIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgd2FybmluZyB0aHJlc2hvbGQuXG4gICAqL1xuICByZWFkb25seSBhbGVydFRocmVzaG9sZEluUGVyY2VudDogbnVtYmVyO1xufVxuXG4vKipcbiAqIEJhc2ljIG1vbml0b3JpbmcgYW5kIGFsZXJ0aW5nIGZvciBhIERhdGFkb2cgbG9ncyBpbmRleC5cbiAqIEl0IGZvbGxvd3MgdGhlIERhdGFkb2cgZ3VpZGUgYXQgaHR0cHM6Ly9kb2NzLmRhdGFkb2docS5jb20vbG9ncy9ndWlkZS9sb2dzLW1vbml0b3JzLW9uLXZvbHVtZXMvXG4gKiBhbmQgY29uc2lzdHMgb2YgdGhlIGZvbGxvd2luZyB0aHJlZSBtb25pdG9ycy5cbiAqICAgMS4gQSBtZXRyaWMgYWxlcnQgdGhhdCBmaXJlcyB3aGVuIHlvdSByZWFjaCBhIGNlcnRhaW4gdGhyZXNob2xkIG9mIHlvdXIgZGFpbHkgbG9nIHF1b3RhLlxuICogICAyLiBBbiBhbm9tYWx5IG1vbml0b3IgdGhhdCBkZXRlY3RzIGxvZyBhbW91bnQgc3Bpa2VzLlxuICogICAzLiBBbiBldmVudCBhbGVydCB0aGF0IGZpcmVzIHdoZW4geW91IGhpdCB0aGUgZGFpbHkgbG9nIHF1b3RhLlxuICpcbiAqIEEgZGF0YWRvZyBsb2cgaW5kZXggaXMgdGVhbSBzcGVjaWZpYyBhbmQgdGh1cyB0aGUgbW9uaXRvciBuZWVkcyB0byBiZSBkZXBsb3llZCBqdXN0IG9uY2UgcGVyIGluZGV4L3RlYW0uXG4gKi9cbmV4cG9ydCBjbGFzcyBEYXRhZG9nTG9nSW5kZXhNb25pdG9yaW5nIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IERhdGFkb2dMb2dJbmRleE1vbml0b3JpbmdQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBuZXcgRGF0YWRvZ0xvZ0RhaWx5UXVvdGFNb25pdG9yKHRoaXMsICdEYXRhZG9nTG9nRGFpbHlRdW90YU1vbml0b3InLCBwcm9wcyk7XG4gICAgbmV3IERhdGFkb2dMb2dzQW5vbWFseU1vbml0b3IodGhpcywgJ0RhdGFkb2dMb2dBbGVydEFub21hbHlNb25pdG9yJywgcHJvcHMpO1xuICAgIG5ldyBEYXRhZG9nTG9nRGFpbHlRdW90YVJlYWNoZWRNb25pdG9yKHRoaXMsICdEYXRhZG9nTG9nRGFpbHlRdW90YVJlYWNoZWRNb25pdG9yJywgcHJvcHMpO1xuXG4gICAgdGhpcy5ub2RlLmFkZFZhbGlkYXRpb24oe1xuICAgICAgdmFsaWRhdGU6ICgpOiBzdHJpbmdbXSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgICAgICBpZiAocHJvcHMuZGFpbHlMb2dRdW90YS53YXJuaW5nVGhyZXNob2xkSW5QZXJjZW50IDwgMCB8fCBwcm9wcy5kYWlseUxvZ1F1b3RhLndhcm5pbmdUaHJlc2hvbGRJblBlcmNlbnQgPiAxMDApIHtcbiAgICAgICAgICByZXN1bHQucHVzaCgnSW52YWxpZCBbd2FybmluZ1RocmVzaG9sZEluUGVyY2VudF06IGV4cGVjdGluZyBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDEwMCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wcy5kYWlseUxvZ1F1b3RhLmFsZXJ0VGhyZXNob2xkSW5QZXJjZW50IDwgMCB8fCBwcm9wcy5kYWlseUxvZ1F1b3RhLmFsZXJ0VGhyZXNob2xkSW5QZXJjZW50ID4gMTAwKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goJ0ludmFsaWQgW2FsZXJ0VGhyZXNob2xkSW5QZXJjZW50XTogZXhwZWN0aW5nIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMTAwJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb3BzLmRhaWx5TG9nUXVvdGEuYWxlcnRUaHJlc2hvbGRJblBlcmNlbnQgPCBwcm9wcy5kYWlseUxvZ1F1b3RhLndhcm5pbmdUaHJlc2hvbGRJblBlcmNlbnQpIHtcbiAgICAgICAgICByZXN1bHQucHVzaCgnSW52YWxpZCBbYWxlcnRUaHJlc2hvbGRJblBlcmNlbnRdOiBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBbd2FybmluZ1RocmVzaG9sZEluUGVyY2VudF0nKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxufVxuXG5jbGFzcyBEYXRhZG9nTG9nRGFpbHlRdW90YU1vbml0b3IgZXh0ZW5kcyBEYXRhZG9nTW9uaXRvciB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBEYXRhZG9nTG9nSW5kZXhNb25pdG9yaW5nUHJvcHMpIHtcbiAgICBjb25zdCBsb2dRdW90YUluRXZlbnRzID0gTWF0aC5mbG9vcihwcm9wcy5kYWlseUxvZ1F1b3RhLnZhbHVlSW5NaWxsaW9uRXZlbnRzICogMV8wMDBfMDAwKTtcbiAgICBjb25zdCB3YXJuaW5nVGhyZXNob2xkID0gTWF0aC5mbG9vcihsb2dRdW90YUluRXZlbnRzICogKHByb3BzLmRhaWx5TG9nUXVvdGEud2FybmluZ1RocmVzaG9sZEluUGVyY2VudCAvIDEwMCkpO1xuICAgIGNvbnN0IGFsZXJ0VGhyZXNob2xkID0gTWF0aC5mbG9vcihsb2dRdW90YUluRXZlbnRzICogKHByb3BzLmRhaWx5TG9nUXVvdGEuYWxlcnRUaHJlc2hvbGRJblBlcmNlbnQgLyAxMDApKTtcblxuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgc2VydmljZU5hbWU6IHByb3BzLnNlcnZpY2VOYW1lLFxuICAgICAgYWxlcnRUeXBlczogW3Byb3BzLmFsZXJ0VHlwZV0sXG4gICAgICBtb25pdG9yOiB7XG4gICAgICAgIG5hbWU6ICdMb2cgcXVvdGEgYWxtb3N0IHJlYWNoZWQnLFxuICAgICAgICB0eXBlOiAnbWV0cmljIGFsZXJ0JyxcbiAgICAgICAgcXVlcnk6IGBzdW0obGFzdF81bSk6c3VtOmRhdGFkb2cuZXN0aW1hdGVkX3VzYWdlLmxvZ3MuaW5nZXN0ZWRfZXZlbnRze2RhdGFkb2dfaXNfZXhjbHVkZWQ6ZmFsc2UsZGF0YWRvZ19pbmRleDoke3Byb3BzLmluZGV4TmFtZX19LmFzX2NvdW50KCkucm9sbHVwKHN1bSwgODY0MDApID49ICR7YWxlcnRUaHJlc2hvbGR9YCxcbiAgICAgICAgbWVzc2FnZTogYFtQM10gSW5zcGVjdCB5b3VyIGxvZyB2b2x1bWUgYXQgJHtkYXRhZG9nTG9nc1NlYXJjaFdpdGhJbmRleEZpbHRlckRlZXBMaW5rKFxuICAgICAgICAgIHByb3BzLmluZGV4TmFtZSxcbiAgICAgICAgKX0gb3IgYWRhcHQgdGhlIGxvZyBxdW90YSBhdCAke2RhdGFkb2dMb2dzSW5kZXhlc0NvbmZpZ3VyYXRpb25EZWVwTGlua31gLFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgdGhyZXNob2xkczoge1xuICAgICAgICAgICAgY3JpdGljYWw6IGFsZXJ0VGhyZXNob2xkLFxuICAgICAgICAgICAgd2FybmluZzogd2FybmluZ1RocmVzaG9sZCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGluY2x1ZGVfdGFnczogZmFsc2UsXG4gICAgICAgICAgbm90aWZ5X25vX2RhdGE6IHRydWUsXG4gICAgICAgICAgbm9fZGF0YV90aW1lZnJhbWU6IDI0ICogNjAsIC8vIDEgZGF5XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG5cbmNsYXNzIERhdGFkb2dMb2dzQW5vbWFseU1vbml0b3IgZXh0ZW5kcyBEYXRhZG9nTW9uaXRvciB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBEYXRhZG9nTG9nSW5kZXhNb25pdG9yaW5nUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIHNlcnZpY2VOYW1lOiBwcm9wcy5zZXJ2aWNlTmFtZSxcbiAgICAgIGFsZXJ0VHlwZXM6IFtwcm9wcy5hbGVydFR5cGVdLFxuICAgICAgbW9uaXRvcjoge1xuICAgICAgICBuYW1lOiAnTG9nIGFtb3VudCBpcyByaXNpbmcgdG8gdW5leHBlY3RlZCBsZXZlbHMnLFxuICAgICAgICB0eXBlOiAnbWV0cmljIGFsZXJ0JyxcbiAgICAgICAgcXVlcnk6IGBhdmcobGFzdF80aCk6YW5vbWFsaWVzKHN1bTpkYXRhZG9nLmVzdGltYXRlZF91c2FnZS5sb2dzLmluZ2VzdGVkX2V2ZW50c3tkYXRhZG9nX2lzX2V4Y2x1ZGVkOmZhbHNlLGRhdGFkb2dfaW5kZXg6JHtwcm9wcy5pbmRleE5hbWV9fS5hc19jb3VudCgpLCAncm9idXN0JywgMiwgZGlyZWN0aW9uPSdhYm92ZScsIGFsZXJ0X3dpbmRvdz0nbGFzdF8xNW0nLCBpbnRlcnZhbD02MCwgY291bnRfZGVmYXVsdF96ZXJvPSd0cnVlJywgc2Vhc29uYWxpdHk9J3dlZWtseScsIHRpbWV6b25lPSdldXJvcGUvYmVybGluJykgPj0gMWAsXG4gICAgICAgIG1lc3NhZ2U6IGBbUDRdIExvZ3MgYXJlIGdldHRpbmcgb3V0IG9mIGNvbnRyb2w6ICR7ZGF0YWRvZ0xvZ3NTZWFyY2hXaXRoSW5kZXhGaWx0ZXJEZWVwTGluayhcbiAgICAgICAgICBwcm9wcy5pbmRleE5hbWUsXG4gICAgICAgICl9YCxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIGluY2x1ZGVfdGFnczogZmFsc2UsXG4gICAgICAgICAgbm90aWZ5X25vX2RhdGE6IHRydWUsXG4gICAgICAgICAgdGhyZXNob2xkX3dpbmRvd3M6IHtcbiAgICAgICAgICAgIHRyaWdnZXJfd2luZG93OiAnbGFzdF8xNW0nLFxuICAgICAgICAgICAgcmVjb3Zlcnlfd2luZG93OiAnbGFzdF8xNW0nLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG5cbmNsYXNzIERhdGFkb2dMb2dEYWlseVF1b3RhUmVhY2hlZE1vbml0b3IgZXh0ZW5kcyBEYXRhZG9nTW9uaXRvciB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBEYXRhZG9nTG9nSW5kZXhNb25pdG9yaW5nUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIHNlcnZpY2VOYW1lOiBwcm9wcy5zZXJ2aWNlTmFtZSxcbiAgICAgIGFsZXJ0VHlwZXM6IFtwcm9wcy5hbGVydFR5cGVdLFxuICAgICAgbW9uaXRvcjoge1xuICAgICAgICBuYW1lOiAnTG9nIHF1b3RhIHJlYWNoZWQnLFxuICAgICAgICB0eXBlOiAnZXZlbnQgYWxlcnQnLFxuICAgICAgICBxdWVyeTogYGV2ZW50cygndGFnczpkYXRhZG9nX2luZGV4OiR7cHJvcHMuaW5kZXhOYW1lfSBwcmlvcml0eTphbGwgRGFpbHkgcXVvdGEgcmVhY2hlZCBzb3VyY2VzOmRhdGFkb2cnKS5yb2xsdXAoJ2NvdW50JykubGFzdCgnNW0nKSA+IDBgLFxuICAgICAgICBtZXNzYWdlOiBgW1AyXSBUaGUgbG9nIHF1b3RlIGZvciB0aGUgaW5kZXggaGFzIGJlZW4gcmVhY2hlZC4gSWYgeW91IGRvIG5vdCBpbmNyZWFzZSB0aGUgcXVvdGEgYXQgJHtkYXRhZG9nTG9nc0luZGV4ZXNDb25maWd1cmF0aW9uRGVlcExpbmt9LCBubyBuZXcgbG9ncyB3aWxsIGJlIGluZGV4ZWQgdW50aWwgdGhlIHF1b3RhIGlzIHJlc2V0IGF0IDI6MDBwbSBVVEMuYCxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIHRpbWVvdXRfaDogMjQsXG4gICAgICAgICAgdGhyZXNob2xkczoge1xuICAgICAgICAgICAgY3JpdGljYWw6IDAsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGF0YWRvZ0xvZ3NTZWFyY2hXaXRoSW5kZXhGaWx0ZXJEZWVwTGluayhpbmRleE5hbWU6IHN0cmluZykge1xuICByZXR1cm4gYGh0dHBzOi8vYXBwLmRhdGFkb2docS5ldS9sb2dzP2luZGV4PSR7aW5kZXhOYW1lfWA7XG59XG5cbmNvbnN0IGRhdGFkb2dMb2dzSW5kZXhlc0NvbmZpZ3VyYXRpb25EZWVwTGluayA9ICdodHRwczovL2FwcC5kYXRhZG9naHEuZXUvbG9ncy9waXBlbGluZXMvaW5kZXhlcyc7XG4iXX0=
116
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWRvZ0xvZ0luZGV4TW9uaXRvcmluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhZG9nL2RhdGFkb2dMb2dJbmRleE1vbml0b3JpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSwyQ0FBdUM7QUFDdkMscURBQW9FO0FBbURwRTs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFhLHlCQUEwQixTQUFRLHNCQUFTO0lBQ3RELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBcUM7UUFDN0UsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLDJCQUEyQixDQUFDLElBQUksRUFBRSw2QkFBNkIsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1RSxJQUFJLHlCQUF5QixDQUFDLElBQUksRUFBRSwrQkFBK0IsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1RSxJQUFJLGtDQUFrQyxDQUFDLElBQUksRUFBRSxvQ0FBb0MsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUUxRixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQztZQUN0QixRQUFRLEVBQUUsR0FBYSxFQUFFO2dCQUN2QixNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7Z0JBQ2xCLElBQUksS0FBSyxDQUFDLGFBQWEsQ0FBQyx5QkFBeUIsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLGFBQWEsQ0FBQyx5QkFBeUIsR0FBRyxHQUFHLEVBQUU7b0JBQzVHLE1BQU0sQ0FBQyxJQUFJLENBQUMsMkVBQTJFLENBQUMsQ0FBQztpQkFDMUY7Z0JBQ0QsSUFBSSxLQUFLLENBQUMsYUFBYSxDQUFDLHVCQUF1QixHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsYUFBYSxDQUFDLHVCQUF1QixHQUFHLEdBQUcsRUFBRTtvQkFDeEcsTUFBTSxDQUFDLElBQUksQ0FBQyx5RUFBeUUsQ0FBQyxDQUFDO2lCQUN4RjtnQkFDRCxJQUFJLEtBQUssQ0FBQyxhQUFh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VztZQUM5QixVQUFVLEVBQUUsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO1lBQzdCLE9BQU8sRUFBRTtnQkFDUCxJQUFJLEVBQUUsbUJBQW1CO2dCQUN6QixJQUFJLEVBQUUsZ0JBQWdCO2dCQUN0QixLQUFLLEVBQUUsd0NBQXdDLEtBQUssQ0FBQyxTQUFTLHVEQUF1RDtnQkFDckgsT0FBTyxFQUFFLDBGQUEwRix1Q0FBdUMsdUVBQXVFO2dCQUNqTixPQUFPLEVBQUU7b0JBQ1AsU0FBUyxFQUFFLEVBQUU7b0JBQ2IsVUFBVSxFQUFFO3dCQUNWLFFBQVEsRUFBRSxDQUFDO3FCQUNaO2lCQUNGO2FBQ0Y7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFFRCxTQUFTLHdDQUF3QyxDQUFDLFNBQWlCO0lBQ2pFLE9BQU8sdUNBQXVDLFNBQVMsRUFBRSxDQUFDO0FBQzVELENBQUM7QUFFRCxNQUFNLHVDQUF1QyxHQUFHLGlEQUFpRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBEYXRhZG9nTW9uaXRvciwgRGF0YWRvZ0FsZXJ0VHlwZSB9IGZyb20gJy4vZGF0YWRvZ01vbml0b3InO1xuXG5leHBvcnQgaW50ZXJmYWNlIERhdGFkb2dMb2dJbmRleE1vbml0b3JpbmdQcm9wcyB7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHlvdXIgc2VydmljZSBpbiBEYXRhZG9nLiBDYW4gYmUgdXNlZCB0byBxdWVyeSB0aGUgbW9uaXRvcnMuXG4gICAqL1xuICByZWFkb25seSBzZXJ2aWNlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgRGF0YWRvZyBpbmRleC5cbiAgICovXG4gIHJlYWRvbmx5IGluZGV4TmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgaW50ZWdyYXRpb24gdG8gdXNlIGZvciBhbGVydGluZy5cbiAgICogRm9yIE9wc0dlbmllLCB5b3UgbmVlZCB0byBpbnN0YWxsIGFuZCBjb25maWd1cmUgdGhlICdvcHNnZW5pZS1pbnRlZ3JhdGlvbicgYWNjb3VudCBtb2R1bGUuXG4gICAqL1xuICByZWFkb25seSBhbGVydFR5cGU6IERhdGFkb2dBbGVydFR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSBkYWlseSBsb2cgcXVvdGEgc2V0dGluZ3MuXG4gICAqL1xuICByZWFkb25seSBkYWlseUxvZ1F1b3RhOiBEYXRhZG9nTG9nUXVvdGFQcm9wcztcblxuICAvKipcbiAgICogVGhpcyB2YWx1ZSBzaG91bGQgYmUgdXNlZCBpZiB0aGVyZSBpcyBubyBsb2cgbWVzc2FnZSB3aXRoaW4gMjQgaG91cnMgb3IgbWlzc2luZyBoaXN0b3JpY2FsIGRhdGEuXG4gICAqIFdpdGhvdXQgc2V0dGluZyB0aGlzIHZhbHVlIGl0IHdpbGwgbGVhZCB0byBhbiBlbXB0eSByZXN1bHQgYW5kIHRoZXJlZm9yZSB0cmlnZ2VyIGFuIGFsZXJ0LlxuICAgKiBAZGVmYXVsdCAtIGZhbHNlXG4gICAqL1xuICByZWFkb25seSBzcGFyc2VMb2dnaW5nPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYXRhZG9nTG9nUXVvdGFQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgZGFpbHkgbG9nIHF1b3RhIGZvciB0aGUgdGVhbS1zcGVjaWZpYyBpbmRleCBpbiBtaWxsaW9uIGV2ZW50cy5cbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlSW5NaWxsaW9uRXZlbnRzOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSB3YXJuaW5nIHRocmVzaG9sZCBmb3IgdGhlIGRhaWx5IGxvZyBxdW90YSBtb25pdG9yIGluIHBlcmNlbnQuXG4gICAqL1xuICByZWFkb25seSB3YXJuaW5nVGhyZXNob2xkSW5QZXJjZW50OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBhbGFybSB0aHJlc2hvbGQgZm9yIHRoZSBkYWlseSBsb2cgcXVvdGEgbW9uaXRvciBpbiBwZXJjZW50LlxuICAgKiBUaGUgdmFsdWUgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDEwMCBhbmQgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSB3YXJuaW5nIHRocmVzaG9sZC5cbiAgICovXG4gIHJlYWRvbmx5IGFsZXJ0VGhyZXNob2xkSW5QZXJjZW50OiBudW1iZXI7XG59XG5cbi8qKlxuICogQmFzaWMgbW9uaXRvcmluZyBhbmQgYWxlcnRpbmcgZm9yIGEgRGF0YWRvZyBsb2dzIGluZGV4LlxuICogSXQgZm9sbG93cyB0aGUgRGF0YWRvZyBndWlkZSBhdCBodHRwczovL2RvY3MuZGF0YWRvZ2hxLmNvbS9sb2dzL2d1aWRlL2xvZ3MtbW9uaXRvcnMtb24tdm9sdW1lcy9cbiAqIGFuZCBjb25zaXN0cyBvZiB0aGUgZm9sbG93aW5nIHRocmVlIG1vbml0b3JzLlxuICogICAxLiBBIG1ldHJpYyBhbGVydCB0aGF0IGZpcmVzIHdoZW4geW91IHJlYWNoIGEgY2VydGFpbiB0aHJlc2hvbGQgb2YgeW91ciBkYWlseSBsb2cgcXVvdGEuXG4gKiAgIDIuIEFuIGFub21hbHkgbW9uaXRvciB0aGF0IGRldGVjdHMgbG9nIGFtb3VudCBzcGlrZXMuXG4gKiAgIDMuIEFuIGV2ZW50IGFsZXJ0IHRoYXQgZmlyZXMgd2hlbiB5b3UgaGl0IHRoZSBkYWlseSBsb2cgcXVvdGEuXG4gKlxuICogQSBkYXRhZG9nIGxvZyBpbmRleCBpcyB0ZWFtIHNwZWNpZmljIGFuZCB0aHVzIHRoZSBtb25pdG9yIG5lZWRzIHRvIGJlIGRlcGxveWVkIGp1c3Qgb25jZSBwZXIgaW5kZXgvdGVhbS5cbiAqL1xuZXhwb3J0IGNsYXNzIERhdGFkb2dMb2dJbmRleE1vbml0b3JpbmcgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRGF0YWRvZ0xvZ0luZGV4TW9uaXRvcmluZ1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIG5ldyBEYXRhZG9nTG9nRGFpbHlRdW90YU1vbml0b3IodGhpcywgJ0RhdGFkb2dMb2dEYWlseVF1b3RhTW9uaXRvcicsIHByb3BzKTtcbiAgICBuZXcgRGF0YWRvZ0xvZ3NBbm9tYWx5TW9uaXRvcih0aGlzLCAnRGF0YWRvZ0xvZ0FsZXJ0QW5vbWFseU1vbml0b3InLCBwcm9wcyk7XG4gICAgbmV3IERhdGFkb2dMb2dEYWlseVF1b3RhUmVhY2hlZE1vbml0b3IodGhpcywgJ0RhdGFkb2dMb2dEYWlseVF1b3RhUmVhY2hlZE1vbml0b3InLCBwcm9wcyk7XG5cbiAgICB0aGlzLm5vZGUuYWRkVmFsaWRhdGlvbih7XG4gICAgICB2YWxpZGF0ZTogKCk6IHN0cmluZ1tdID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgICAgIGlmIChwcm9wcy5kYWlseUxvZ1F1b3RhLndhcm5pbmdUaHJlc2hvbGRJblBlcmNlbnQgPCAwIHx8IHByb3BzLmRhaWx5TG9nUXVvdGEud2FybmluZ1RocmVzaG9sZEluUGVyY2VudCA+IDEwMCkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKCdJbnZhbGlkIFt3YXJuaW5nVGhyZXNob2xkSW5QZXJjZW50XTogZXhwZWN0aW5nIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMTAwJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb3BzLmRhaWx5TG9nUXVvdGEuYWxlcnRUaHJlc2hvbGRJblBlcmNlbnQgPCAwIHx8IHByb3BzLmRhaWx5TG9nUXVvdGEuYWxlcnRUaHJlc2hvbGRJblBlcmNlbnQgPiAxMDApIHtcbiAgICAgICAgICByZXN1bHQucHVzaCgnSW52YWxpZCBbYWxlcnRUaHJlc2hvbGRJblBlcmNlbnRdOiBleHBlY3RpbmcgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxMDAnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvcHMuZGFpbHlMb2dRdW90YS5hbGVydFRocmVzaG9sZEluUGVyY2VudCA8IHByb3BzLmRhaWx5TG9nUXVvdGEud2FybmluZ1RocmVzaG9sZEluUGVyY2VudCkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKCdJbnZhbGlkIFthbGVydFRocmVzaG9sZEluUGVyY2VudF06IG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIFt3YXJuaW5nVGhyZXNob2xkSW5QZXJjZW50XScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG5cbmNsYXNzIERhdGFkb2dMb2dEYWlseVF1b3RhTW9uaXRvciBleHRlbmRzIERhdGFkb2dNb25pdG9yIHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IERhdGFkb2dMb2dJbmRleE1vbml0b3JpbmdQcm9wcykge1xuICAgIGNvbnN0IGxvZ1F1b3RhSW5FdmVudHMgPSBNYXRoLmZsb29yKHByb3BzLmRhaWx5TG9nUXVvdGEudmFsdWVJbk1pbGxpb25FdmVudHMgKiAxXzAwMF8wMDApO1xuICAgIGNvbnN0IHdhcm5pbmdUaHJlc2hvbGQgPSBNYXRoLmZsb29yKGxvZ1F1b3RhSW5FdmVudHMgKiAocHJvcHMuZGFpbHlMb2dRdW90YS53YXJuaW5nVGhyZXNob2xkSW5QZXJjZW50IC8gMTAwKSk7XG4gICAgY29uc3QgYWxlcnRUaHJlc2hvbGQgPSBNYXRoLmZsb29yKGxvZ1F1b3RhSW5FdmVudHMgKiAocHJvcHMuZGFpbHlMb2dRdW90YS5hbGVydFRocmVzaG9sZEluUGVyY2VudCAvIDEwMCkpO1xuXG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICBzZXJ2aWNlTmFtZTogcHJvcHMuc2VydmljZU5hbWUsXG4gICAgICBhbGVydFR5cGVzOiBbcHJvcHMuYWxlcnRUeXBlXSxcbiAgICAgIG1vbml0b3I6IHtcbiAgICAgICAgbmFtZTogJ0xvZyBxdW90YSBhbG1vc3QgcmVhY2hlZCcsXG4gICAgICAgIHR5cGU6ICdtZXRyaWMgYWxlcnQnLFxuICAgICAgICBxdWVyeTogYHN1bShsYXN0XzVtKTpzdW06ZGF0YWRvZy5lc3RpbWF0ZWRfdXNhZ2UubG9ncy5pbmdlc3RlZF9ldmVudHN7ZGF0YWRvZ19pc19leGNsdWRlZDpmYWxzZSxkYXRhZG9nX2luZGV4OiR7cHJvcHMuaW5kZXhOYW1lfX0uYXNfY291bnQoKS5yb2xsdXAoc3VtLCA4NjQwMCkgPj0gJHthbGVydFRocmVzaG9sZH1gLFxuICAgICAgICBtZXNzYWdlOiBgW1AzXSBJbnNwZWN0IHlvdXIgbG9nIHZvbHVtZSBhdCAke2RhdGFkb2dMb2dzU2VhcmNoV2l0aEluZGV4RmlsdGVyRGVlcExpbmsoXG4gICAgICAgICAgcHJvcHMuaW5kZXhOYW1lLFxuICAgICAgICApfSBvciBhZGFwdCB0aGUgbG9nIHF1b3RhIGF0ICR7ZGF0YWRvZ0xvZ3NJbmRleGVzQ29uZmlndXJhdGlvbkRlZXBMaW5rfWAsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICB0aHJlc2hvbGRzOiB7XG4gICAgICAgICAgICBjcml0aWNhbDogYWxlcnRUaHJlc2hvbGQsXG4gICAgICAgICAgICB3YXJuaW5nOiB3YXJuaW5nVGhyZXNob2xkLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgaW5jbHVkZV90YWdzOiBmYWxzZSxcbiAgICAgICAgICBub3RpZnlfbm9fZGF0YTogcHJvcHMuc3BhcnNlTG9nZ2luZyA/IGZhbHNlIDogdHJ1ZSxcbiAgICAgICAgICBub19kYXRhX3RpbWVmcmFtZTogMjQgKiA2MCwgLy8gMSBkYXlcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbn1cblxuY2xhc3MgRGF0YWRvZ0xvZ3NBbm9tYWx5TW9uaXRvciBleHRlbmRzIERhdGFkb2dNb25pdG9yIHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IERhdGFkb2dMb2dJbmRleE1vbml0b3JpbmdQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgc2VydmljZU5hbWU6IHByb3BzLnNlcnZpY2VOYW1lLFxuICAgICAgYWxlcnRUeXBlczogW3Byb3BzLmFsZXJ0VHlwZV0sXG4gICAgICBtb25pdG9yOiB7XG4gICAgICAgIG5hbWU6ICdMb2cgYW1vdW50IGlzIHJpc2luZyB0byB1bmV4cGVjdGVkIGxldmVscycsXG4gICAgICAgIHR5cGU6ICdtZXRyaWMgYWxlcnQnLFxuICAgICAgICBxdWVyeTogYGF2ZyhsYXN0XzRoKTphbm9tYWxpZXMoc3VtOmRhdGFkb2cuZXN0aW1hdGVkX3VzYWdlLmxvZ3MuaW5nZXN0ZWRfZXZlbnRze2RhdGFkb2dfaXNfZXhjbHVkZWQ6ZmFsc2UsZGF0YWRvZ19pbmRleDoke3Byb3BzLmluZGV4TmFtZX19LmFzX2NvdW50KCksICdyb2J1c3QnLCAyLCBkaXJlY3Rpb249J2Fib3ZlJywgYWxlcnRfd2luZG93PSdsYXN0XzE1bScsIGludGVydmFsPTYwLCBjb3VudF9kZWZhdWx0X3plcm89J3RydWUnLCBzZWFzb25hbGl0eT0nd2Vla2x5JywgdGltZXpvbmU9J2V1cm9wZS9iZXJsaW4nKSA+PSAxYCxcbiAgICAgICAgbWVzc2FnZTogYFtQNF0gTG9ncyBhcmUgZ2V0dGluZyBvdXQgb2YgY29udHJvbDogJHtkYXRhZG9nTG9nc1NlYXJjaFdpdGhJbmRleEZpbHRlckRlZXBMaW5rKFxuICAgICAgICAgIHByb3BzLmluZGV4TmFtZSxcbiAgICAgICAgKX1gLFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgaW5jbHVkZV90YWdzOiBmYWxzZSxcbiAgICAgICAgICBub3RpZnlfbm9fZGF0YTogcHJvcHMuc3BhcnNlTG9nZ2luZyA/IGZhbHNlIDogdHJ1ZSxcbiAgICAgICAgICB0aHJlc2hvbGRfd2luZG93czoge1xuICAgICAgICAgICAgdHJpZ2dlcl93aW5kb3c6ICdsYXN0XzE1bScsXG4gICAgICAgICAgICByZWNvdmVyeV93aW5kb3c6ICdsYXN0XzE1bScsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbn1cblxuY2xhc3MgRGF0YWRvZ0xvZ0RhaWx5UXVvdGFSZWFjaGVkTW9uaXRvciBleHRlbmRzIERhdGFkb2dNb25pdG9yIHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IERhdGFkb2dMb2dJbmRleE1vbml0b3JpbmdQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgc2VydmljZU5hbWU6IHByb3BzLnNlcnZpY2VOYW1lLFxuICAgICAgYWxlcnRUeXBlczogW3Byb3BzLmFsZXJ0VHlwZV0sXG4gICAgICBtb25pdG9yOiB7XG4gICAgICAgIG5hbWU6ICdMb2cgcXVvdGEgcmVhY2hlZCcsXG4gICAgICAgIHR5cGU6ICdldmVudC12MiBhbGVydCcsXG4gICAgICAgIHF1ZXJ5OiBgZXZlbnRzKFwic291cmNlOmRhdGFkb2cgZGF0YWRvZ19pbmRleDoke3Byb3BzLmluZGV4TmFtZX0gRGFpbHkgcXVvdGEgcmVhY2hlZFwiKS5yb2xsdXAoXCJjb3VudFwiKS5sYXN0KFwiNW1cIikgPiAwYCxcbiAgICAgICAgbWVzc2FnZTogYFtQMl0gVGhlIGxvZyBxdW90ZSBmb3IgdGhlIGluZGV4IGhhcyBiZWVuIHJlYWNoZWQuIElmIHlvdSBkbyBub3QgaW5jcmVhc2UgdGhlIHF1b3RhIGF0ICR7ZGF0YWRvZ0xvZ3NJbmRleGVzQ29uZmlndXJhdGlvbkRlZXBMaW5rfSwgbm8gbmV3IGxvZ3Mgd2lsbCBiZSBpbmRleGVkIHVudGlsIHRoZSBxdW90YSBpcyByZXNldCBhdCAyOjAwcG0gVVRDLmAsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICB0aW1lb3V0X2g6IDI0LFxuICAgICAgICAgIHRocmVzaG9sZHM6IHtcbiAgICAgICAgICAgIGNyaXRpY2FsOiAwLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRhdGFkb2dMb2dzU2VhcmNoV2l0aEluZGV4RmlsdGVyRGVlcExpbmsoaW5kZXhOYW1lOiBzdHJpbmcpIHtcbiAgcmV0dXJuIGBodHRwczovL2FwcC5kYXRhZG9naHEuZXUvbG9ncz9pbmRleD0ke2luZGV4TmFtZX1gO1xufVxuXG5jb25zdCBkYXRhZG9nTG9nc0luZGV4ZXNDb25maWd1cmF0aW9uRGVlcExpbmsgPSAnaHR0cHM6Ly9hcHAuZGF0YWRvZ2hxLmV1L2xvZ3MvcGlwZWxpbmVzL2luZGV4ZXMnO1xuIl19