terraconstructs 0.0.11 → 0.0.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (410) hide show
  1. package/.jsii +104486 -34582
  2. package/lib/aws/arn.js +1 -1
  3. package/lib/aws/aws-construct.d.ts +1 -1
  4. package/lib/aws/aws-construct.js +28 -2
  5. package/lib/aws/aws-stack.d.ts +2 -4
  6. package/lib/aws/aws-stack.js +21 -8
  7. package/lib/aws/aws-tags.d.ts +58 -0
  8. package/lib/aws/aws-tags.js +77 -0
  9. package/lib/aws/cloudwatch/actions/ec2.js +1 -1
  10. package/lib/aws/cloudwatch/actions/lambda.js +1 -1
  11. package/lib/aws/cloudwatch/alarm-base.js +1 -1
  12. package/lib/aws/cloudwatch/alarm-rule.js +1 -1
  13. package/lib/aws/cloudwatch/alarm-status-widget.js +1 -1
  14. package/lib/aws/cloudwatch/alarm.js +1 -1
  15. package/lib/aws/cloudwatch/composite-alarm.js +1 -1
  16. package/lib/aws/cloudwatch/dashboard.js +1 -1
  17. package/lib/aws/cloudwatch/data-protection-policy.js +3 -3
  18. package/lib/aws/cloudwatch/graph.js +8 -8
  19. package/lib/aws/cloudwatch/layout.js +3 -3
  20. package/lib/aws/cloudwatch/log-destinations/kinesis.js +1 -1
  21. package/lib/aws/cloudwatch/log-destinations/lambda.js +1 -1
  22. package/lib/aws/cloudwatch/log-group.js +1 -1
  23. package/lib/aws/cloudwatch/log-query.js +1 -1
  24. package/lib/aws/cloudwatch/log-stream.js +1 -1
  25. package/lib/aws/cloudwatch/metric-filter.d.ts +1 -1
  26. package/lib/aws/cloudwatch/metric-filter.js +4 -4
  27. package/lib/aws/cloudwatch/metric.js +2 -2
  28. package/lib/aws/cloudwatch/pattern.js +3 -3
  29. package/lib/aws/cloudwatch/policy.js +1 -1
  30. package/lib/aws/cloudwatch/private/env-tokens.js +5 -6
  31. package/lib/aws/cloudwatch/private/metric-util.js +4 -5
  32. package/lib/aws/cloudwatch/private/object.js +2 -3
  33. package/lib/aws/cloudwatch/private/rendering.js +3 -3
  34. package/lib/aws/cloudwatch/private/statistic.js +6 -7
  35. package/lib/aws/cloudwatch/query-definition.js +2 -2
  36. package/lib/aws/cloudwatch/stats.js +1 -1
  37. package/lib/aws/cloudwatch/subscription-filter.d.ts +1 -1
  38. package/lib/aws/cloudwatch/subscription-filter.js +4 -4
  39. package/lib/aws/cloudwatch/text.js +1 -1
  40. package/lib/aws/cloudwatch/variable.js +3 -3
  41. package/lib/aws/cloudwatch/widget.d.ts +1 -1
  42. package/lib/aws/cloudwatch/widget.js +4 -4
  43. package/lib/aws/compute/activity.js +3 -2
  44. package/lib/aws/compute/alb/application-listener-action.d.ts +334 -0
  45. package/lib/aws/compute/alb/application-listener-action.js +281 -0
  46. package/lib/aws/compute/alb/application-listener-certificate.d.ts +35 -0
  47. package/lib/aws/compute/alb/application-listener-certificate.js +35 -0
  48. package/lib/aws/compute/alb/application-listener-rule.d.ts +233 -0
  49. package/lib/aws/compute/alb/application-listener-rule.js +220 -0
  50. package/lib/aws/compute/alb/application-listener.d.ts +574 -0
  51. package/lib/aws/compute/alb/application-listener.js +538 -0
  52. package/lib/aws/compute/alb/application-load-balancer.d.ts +715 -0
  53. package/lib/aws/compute/alb/application-load-balancer.js +780 -0
  54. package/lib/aws/compute/alb/application-target-group.d.ts +339 -0
  55. package/lib/aws/compute/alb/application-target-group.js +427 -0
  56. package/lib/aws/compute/alb/conditions.d.ts +61 -0
  57. package/lib/aws/compute/alb/conditions.js +164 -0
  58. package/lib/aws/compute/alb/trust-store-revocation.d.ts +59 -0
  59. package/lib/aws/compute/alb/trust-store-revocation.js +46 -0
  60. package/lib/aws/compute/alb/trust-store.d.ts +86 -0
  61. package/lib/aws/compute/alb/trust-store.js +79 -0
  62. package/lib/aws/compute/architecture.js +1 -1
  63. package/lib/aws/compute/aspects/require-imdsv2-aspect.d.ts +75 -0
  64. package/lib/aws/compute/aspects/require-imdsv2-aspect.js +106 -0
  65. package/lib/aws/compute/bastion-host.d.ts +172 -0
  66. package/lib/aws/compute/bastion-host.js +114 -0
  67. package/lib/aws/compute/chain.js +1 -1
  68. package/lib/aws/compute/cidr-splits.d.ts +49 -0
  69. package/lib/aws/compute/cidr-splits.js +59 -0
  70. package/lib/aws/compute/client-vpn-authorization-rule.d.ts +43 -0
  71. package/lib/aws/compute/client-vpn-authorization-rule.js +30 -0
  72. package/lib/aws/compute/client-vpn-endpoint-types.d.ts +62 -0
  73. package/lib/aws/compute/client-vpn-endpoint-types.js +25 -0
  74. package/lib/aws/compute/client-vpn-endpoint.d.ts +239 -0
  75. package/lib/aws/compute/client-vpn-endpoint.js +259 -0
  76. package/lib/aws/compute/client-vpn-route.d.ts +67 -0
  77. package/lib/aws/compute/client-vpn-route.js +57 -0
  78. package/lib/aws/compute/condition.js +1 -1
  79. package/lib/aws/compute/connections.d.ts +137 -0
  80. package/lib/aws/compute/connections.js +208 -0
  81. package/lib/aws/compute/ec2-augmentations.generated.d.ts +53 -0
  82. package/lib/aws/compute/ec2-augmentations.generated.js +35 -0
  83. package/lib/aws/compute/ec2-canned-metrics.generated.d.ts +555 -0
  84. package/lib/aws/compute/ec2-canned-metrics.generated.js +681 -0
  85. package/lib/aws/compute/ec2-util-v2.d.ts +141 -0
  86. package/lib/aws/compute/ec2-util-v2.js +286 -0
  87. package/lib/aws/compute/ec2-util.d.ts +52 -0
  88. package/lib/aws/compute/ec2-util.js +138 -0
  89. package/lib/aws/compute/elasticloadbalancing-canned-metrics.generated.d.ts +176 -0
  90. package/lib/aws/compute/elasticloadbalancing-canned-metrics.generated.js +119 -0
  91. package/lib/aws/compute/elasticloadbalancingv2-canned-metrics.generated.d.ts +860 -0
  92. package/lib/aws/compute/elasticloadbalancingv2-canned-metrics.generated.js +597 -0
  93. package/lib/aws/compute/event-invoke-config.js +1 -1
  94. package/lib/aws/compute/event-source-filter.js +2 -2
  95. package/lib/aws/compute/event-source-mapping.js +1 -1
  96. package/lib/aws/compute/event-sources/s3-onfailure-destination.js +1 -1
  97. package/lib/aws/compute/event-sources/s3.js +1 -1
  98. package/lib/aws/compute/event-sources/sqs-dlq.js +1 -1
  99. package/lib/aws/compute/event-sources/sqs.js +1 -1
  100. package/lib/aws/compute/fields.js +4 -4
  101. package/lib/aws/compute/function-alias.js +1 -1
  102. package/lib/aws/compute/function-base.js +2 -2
  103. package/lib/aws/compute/function-destinations/event-bridge.js +1 -1
  104. package/lib/aws/compute/function-destinations/function.js +1 -1
  105. package/lib/aws/compute/function-destinations/sqs.js +1 -1
  106. package/lib/aws/compute/function-nodejs.js +1 -1
  107. package/lib/aws/compute/function-url.js +1 -1
  108. package/lib/aws/compute/function-vpc-config.generated.d.ts +3 -3
  109. package/lib/aws/compute/function-vpc-config.generated.js +1 -1
  110. package/lib/aws/compute/function.d.ts +1 -1
  111. package/lib/aws/compute/function.js +5 -5
  112. package/lib/aws/compute/index-alpha.d.ts +5 -0
  113. package/lib/aws/compute/index-alpha.js +22 -0
  114. package/lib/aws/compute/index.d.ts +60 -0
  115. package/lib/aws/compute/index.js +70 -2
  116. package/lib/aws/compute/instance-types.d.ts +1354 -0
  117. package/lib/aws/compute/instance-types.js +1683 -0
  118. package/lib/aws/compute/instance.d.ts +436 -0
  119. package/lib/aws/compute/instance.js +262 -0
  120. package/lib/aws/compute/ip-addresses.d.ts +249 -0
  121. package/lib/aws/compute/ip-addresses.js +248 -0
  122. package/lib/aws/compute/ipam.d.ts +309 -0
  123. package/lib/aws/compute/ipam.js +306 -0
  124. package/lib/aws/compute/key-pair.d.ts +178 -0
  125. package/lib/aws/compute/key-pair.js +194 -0
  126. package/lib/aws/compute/lambda-augmentations.generated.d.ts +65 -0
  127. package/lib/aws/compute/lambda-augmentations.generated.js +41 -0
  128. package/lib/aws/compute/lambda-canned-metrics.generated.d.ts +316 -0
  129. package/lib/aws/compute/lambda-canned-metrics.generated.js +119 -0
  130. package/lib/aws/compute/launch-template.d.ts +540 -0
  131. package/lib/aws/compute/launch-template.js +468 -0
  132. package/lib/aws/compute/lb-shared/access-logs-accounts.d.ts +7 -0
  133. package/lib/aws/compute/lb-shared/access-logs-accounts.js +46 -0
  134. package/lib/aws/compute/lb-shared/base-listener.d.ts +113 -0
  135. package/lib/aws/compute/lb-shared/base-listener.js +181 -0
  136. package/lib/aws/compute/lb-shared/base-load-balancer.d.ts +212 -0
  137. package/lib/aws/compute/lb-shared/base-load-balancer.js +290 -0
  138. package/lib/aws/compute/lb-shared/base-target-group.d.ts +382 -0
  139. package/lib/aws/compute/lb-shared/base-target-group.js +364 -0
  140. package/lib/aws/compute/lb-shared/enums.d.ts +282 -0
  141. package/lib/aws/compute/lb-shared/enums.js +301 -0
  142. package/lib/aws/compute/lb-shared/grid-lookup-types.d.ts +42 -0
  143. package/lib/aws/compute/lb-shared/grid-lookup-types.js +53 -0
  144. package/lib/aws/compute/lb-shared/imported.d.ts +24 -0
  145. package/lib/aws/compute/lb-shared/imported.js +27 -0
  146. package/lib/aws/compute/lb-shared/lb-listener-config.generated.d.ts +194 -0
  147. package/lib/aws/compute/lb-shared/lb-listener-config.generated.js +3 -0
  148. package/lib/aws/compute/lb-shared/lb-target-group-attachment-config.generated.d.ts +56 -0
  149. package/lib/aws/compute/lb-shared/lb-target-group-attachment-config.generated.js +3 -0
  150. package/lib/aws/compute/lb-shared/listener-action.d.ts +14 -0
  151. package/lib/aws/compute/lb-shared/listener-action.js +4 -0
  152. package/lib/aws/compute/lb-shared/listener-certificate.d.ts +28 -0
  153. package/lib/aws/compute/lb-shared/listener-certificate.js +29 -0
  154. package/lib/aws/compute/lb-shared/load-balancer-targets.d.ts +93 -0
  155. package/lib/aws/compute/lb-shared/load-balancer-targets.js +127 -0
  156. package/lib/aws/compute/lb-shared/util.d.ts +113 -0
  157. package/lib/aws/compute/lb-shared/util.js +264 -0
  158. package/lib/aws/compute/lb-targets/alb-target.d.ts +67 -0
  159. package/lib/aws/compute/lb-targets/alb-target.js +100 -0
  160. package/lib/aws/compute/lb-targets/index.d.ts +4 -0
  161. package/lib/aws/compute/lb-targets/index.js +22 -0
  162. package/lib/aws/compute/lb-targets/instance-target.d.ts +42 -0
  163. package/lib/aws/compute/lb-targets/instance-target.js +67 -0
  164. package/lib/aws/compute/lb-targets/ip-target.d.ts +55 -0
  165. package/lib/aws/compute/lb-targets/ip-target.js +79 -0
  166. package/lib/aws/compute/lb-targets/lambda-target.d.ts +25 -0
  167. package/lib/aws/compute/lb-targets/lambda-target.js +50 -0
  168. package/lib/aws/compute/load-balancer.d.ts +336 -0
  169. package/lib/aws/compute/load-balancer.js +287 -0
  170. package/lib/aws/compute/machine-image/amazon-linux-2022.d.ts +63 -0
  171. package/lib/aws/compute/machine-image/amazon-linux-2022.js +84 -0
  172. package/lib/aws/compute/machine-image/amazon-linux-2023.d.ts +63 -0
  173. package/lib/aws/compute/machine-image/amazon-linux-2023.js +84 -0
  174. package/lib/aws/compute/machine-image/amazon-linux2.d.ts +76 -0
  175. package/lib/aws/compute/machine-image/amazon-linux2.js +87 -0
  176. package/lib/aws/compute/machine-image/common.d.ts +181 -0
  177. package/lib/aws/compute/machine-image/common.js +122 -0
  178. package/lib/aws/compute/machine-image/index.d.ts +5 -0
  179. package/lib/aws/compute/machine-image/index.js +22 -0
  180. package/lib/aws/compute/machine-image/machine-image.d.ts +463 -0
  181. package/lib/aws/compute/machine-image/machine-image.js +566 -0
  182. package/lib/aws/compute/machine-image/utils.d.ts +2 -0
  183. package/lib/aws/compute/machine-image/utils.js +17 -0
  184. package/lib/aws/compute/nat.d.ts +325 -0
  185. package/lib/aws/compute/nat.js +455 -0
  186. package/lib/aws/compute/network-acl-types.d.ts +152 -0
  187. package/lib/aws/compute/network-acl-types.js +156 -0
  188. package/lib/aws/compute/network-acl.d.ts +285 -0
  189. package/lib/aws/compute/network-acl.js +207 -0
  190. package/lib/aws/compute/network-util.d.ts +116 -0
  191. package/lib/aws/compute/network-util.js +241 -0
  192. package/lib/aws/compute/nlb/network-listener-action.d.ts +92 -0
  193. package/lib/aws/compute/nlb/network-listener-action.js +146 -0
  194. package/lib/aws/compute/nlb/network-listener-certificate.d.ts +24 -0
  195. package/lib/aws/compute/nlb/network-listener-certificate.js +25 -0
  196. package/lib/aws/compute/nlb/network-listener.d.ts +248 -0
  197. package/lib/aws/compute/nlb/network-listener.js +217 -0
  198. package/lib/aws/compute/nlb/network-load-balancer.d.ts +315 -0
  199. package/lib/aws/compute/nlb/network-load-balancer.js +360 -0
  200. package/lib/aws/compute/nlb/network-target-group.d.ts +153 -0
  201. package/lib/aws/compute/nlb/network-target-group.js +223 -0
  202. package/lib/aws/compute/peer.d.ts +64 -0
  203. package/lib/aws/compute/peer.js +235 -0
  204. package/lib/aws/compute/placement-group.d.ts +161 -0
  205. package/lib/aws/compute/placement-group.js +133 -0
  206. package/lib/aws/compute/port.d.ts +287 -0
  207. package/lib/aws/compute/port.js +390 -0
  208. package/lib/aws/compute/prefix-list.d.ts +131 -0
  209. package/lib/aws/compute/prefix-list.js +114 -0
  210. package/lib/aws/compute/private/context-stub.d.ts +7 -0
  211. package/lib/aws/compute/private/context-stub.js +43 -0
  212. package/lib/aws/compute/private/ebs-util.d.ts +14 -0
  213. package/lib/aws/compute/private/ebs-util.js +145 -0
  214. package/lib/aws/compute/private/intrinstics.js +2 -1
  215. package/lib/aws/compute/private/json-path.js +8 -8
  216. package/lib/aws/compute/private/util.js +2 -3
  217. package/lib/aws/compute/route.d.ts +547 -0
  218. package/lib/aws/compute/route.js +469 -0
  219. package/lib/aws/compute/security-group.d.ts +414 -0
  220. package/lib/aws/compute/security-group.js +538 -0
  221. package/lib/aws/compute/state-graph.js +1 -1
  222. package/lib/aws/compute/state-machine-fragment.js +1 -1
  223. package/lib/aws/compute/state-machine.d.ts +2 -2
  224. package/lib/aws/compute/state-machine.js +14 -12
  225. package/lib/aws/compute/states/choice.js +1 -1
  226. package/lib/aws/compute/states/custom-state.js +1 -1
  227. package/lib/aws/compute/states/distributed-map/item-batcher.js +1 -1
  228. package/lib/aws/compute/states/distributed-map/item-reader.js +5 -5
  229. package/lib/aws/compute/states/distributed-map/result-writer.js +1 -1
  230. package/lib/aws/compute/states/distributed-map.js +1 -1
  231. package/lib/aws/compute/states/fail.js +1 -1
  232. package/lib/aws/compute/states/map-base.js +1 -1
  233. package/lib/aws/compute/states/map.js +1 -1
  234. package/lib/aws/compute/states/parallel.js +1 -1
  235. package/lib/aws/compute/states/pass.js +2 -2
  236. package/lib/aws/compute/states/state.js +5 -5
  237. package/lib/aws/compute/states/succeed.js +1 -1
  238. package/lib/aws/compute/states/task-base.js +2 -2
  239. package/lib/aws/compute/states/task.js +1 -1
  240. package/lib/aws/compute/states/wait.js +2 -2
  241. package/lib/aws/compute/stepfunctions-canned-metrics.generated.d.ts +83 -0
  242. package/lib/aws/compute/stepfunctions-canned-metrics.generated.js +127 -0
  243. package/lib/aws/compute/subnet-v2.d.ts +213 -0
  244. package/lib/aws/compute/subnet-v2.js +405 -0
  245. package/lib/aws/compute/subnet.d.ts +37 -0
  246. package/lib/aws/compute/subnet.js +181 -0
  247. package/lib/aws/compute/task-credentials.js +1 -1
  248. package/lib/aws/compute/task-input.js +1 -1
  249. package/lib/aws/compute/tasks/aws-sdk/call-aws-service.js +1 -1
  250. package/lib/aws/compute/tasks/eventbridge/put-events.js +1 -1
  251. package/lib/aws/compute/tasks/http/invoke.js +1 -1
  252. package/lib/aws/compute/tasks/lambda/invoke.js +1 -1
  253. package/lib/aws/compute/tasks/private/task-utils.js +3 -4
  254. package/lib/aws/compute/tasks/resource-arn-suffix.js +2 -3
  255. package/lib/aws/compute/tasks/sqs/send-message.js +1 -1
  256. package/lib/aws/compute/tasks/stepfunctions/invoke-activity.js +1 -1
  257. package/lib/aws/compute/tasks/stepfunctions/start-execution.js +1 -1
  258. package/lib/aws/compute/types.js +2 -2
  259. package/lib/aws/compute/user-data.d.ts +270 -0
  260. package/lib/aws/compute/user-data.js +487 -0
  261. package/lib/aws/compute/util.d.ts +1 -1
  262. package/lib/aws/compute/util.js +4 -5
  263. package/lib/aws/compute/volume.d.ts +480 -0
  264. package/lib/aws/compute/volume.js +426 -0
  265. package/lib/aws/compute/vpc-endpoint-service.d.ts +149 -0
  266. package/lib/aws/compute/vpc-endpoint-service.js +90 -0
  267. package/lib/aws/compute/vpc-endpoint.d.ts +742 -0
  268. package/lib/aws/compute/vpc-endpoint.js +811 -0
  269. package/lib/aws/compute/vpc-flow-logs.d.ts +551 -0
  270. package/lib/aws/compute/vpc-flow-logs.js +693 -0
  271. package/lib/aws/compute/vpc-lookup.d.ts +73 -0
  272. package/lib/aws/compute/vpc-lookup.js +3 -0
  273. package/lib/aws/compute/vpc-v2-base.d.ts +353 -0
  274. package/lib/aws/compute/vpc-v2-base.js +493 -0
  275. package/lib/aws/compute/vpc-v2.d.ts +385 -0
  276. package/lib/aws/compute/vpc-v2.js +408 -0
  277. package/lib/aws/compute/vpc.d.ts +1448 -0
  278. package/lib/aws/compute/vpc.js +1495 -0
  279. package/lib/aws/compute/vpn.d.ts +443 -0
  280. package/lib/aws/compute/vpn.js +397 -0
  281. package/lib/aws/compute/windows-versions.d.ts +418 -0
  282. package/lib/aws/compute/windows-versions.js +426 -0
  283. package/lib/aws/edge/certificate-base.d.ts +20 -0
  284. package/lib/aws/edge/certificate-base.js +28 -0
  285. package/lib/aws/edge/certificate.d.ts +23 -2
  286. package/lib/aws/edge/certificate.js +54 -4
  287. package/lib/aws/edge/distribution.js +3 -3
  288. package/lib/aws/edge/dns-alias-record-targets.js +2 -2
  289. package/lib/aws/edge/dns-record.js +16 -16
  290. package/lib/aws/edge/dns-zone.d.ts +20 -2
  291. package/lib/aws/edge/dns-zone.js +25 -10
  292. package/lib/aws/edge/function.js +2 -2
  293. package/lib/aws/edge/index.d.ts +1 -0
  294. package/lib/aws/edge/index.js +2 -1
  295. package/lib/aws/edge/key-value-store.js +4 -4
  296. package/lib/aws/edge/origin.js +7 -5
  297. package/lib/aws/edge/response-headers-policy.js +1 -1
  298. package/lib/aws/encryption/alias.js +1 -1
  299. package/lib/aws/encryption/key.js +1 -1
  300. package/lib/aws/encryption/via-service-principal.js +1 -1
  301. package/lib/aws/iam/grant.js +2 -2
  302. package/lib/aws/iam/index.d.ts +1 -0
  303. package/lib/aws/iam/index.js +2 -1
  304. package/lib/aws/iam/instance-profile.d.ts +155 -0
  305. package/lib/aws/iam/instance-profile.js +124 -0
  306. package/lib/aws/iam/managed-policy.js +1 -1
  307. package/lib/aws/iam/oidc-provider.js +1 -1
  308. package/lib/aws/iam/policy-document-config.generated.d.ts +8 -8
  309. package/lib/aws/iam/policy-document-config.generated.js +1 -1
  310. package/lib/aws/iam/policy-document.js +1 -1
  311. package/lib/aws/iam/policy-statement-props.generated.d.ts +8 -8
  312. package/lib/aws/iam/policy-statement-props.generated.js +1 -1
  313. package/lib/aws/iam/policy-statement.js +9 -9
  314. package/lib/aws/iam/policy.js +1 -1
  315. package/lib/aws/iam/principals.js +26 -26
  316. package/lib/aws/iam/private/assume-role-policy.js +2 -3
  317. package/lib/aws/iam/private/comparable-principal.js +2 -3
  318. package/lib/aws/iam/private/immutable-role.d.ts +2 -1
  319. package/lib/aws/iam/private/immutable-role.js +3 -3
  320. package/lib/aws/iam/private/imported-role.d.ts +1 -1
  321. package/lib/aws/iam/private/imported-role.js +3 -3
  322. package/lib/aws/iam/private/merge-statements.js +2 -3
  323. package/lib/aws/iam/private/util.js +4 -4
  324. package/lib/aws/iam/role.js +1 -1
  325. package/lib/aws/iam/saml-provider.d.ts +1 -1
  326. package/lib/aws/iam/saml-provider.js +6 -6
  327. package/lib/aws/iam/unknown-principal.js +1 -1
  328. package/lib/aws/iam/utils.js +2 -3
  329. package/lib/aws/index.d.ts +1 -0
  330. package/lib/aws/index.js +4 -1
  331. package/lib/aws/network/simple-ipv4-vpc.js +5 -5
  332. package/lib/aws/network/subnet-group.js +3 -3
  333. package/lib/aws/network/subnet.d.ts +1 -1
  334. package/lib/aws/network/subnet.js +7 -7
  335. package/lib/aws/notify/archive.js +3 -2
  336. package/lib/aws/notify/connection.js +5 -4
  337. package/lib/aws/notify/event-bus.js +5 -4
  338. package/lib/aws/notify/event-pattern.js +3 -3
  339. package/lib/aws/notify/index.js +3 -1
  340. package/lib/aws/notify/input.js +4 -3
  341. package/lib/aws/notify/kinesis-stream.js +3 -2
  342. package/lib/aws/notify/on-event-options.js +2 -1
  343. package/lib/aws/notify/queue-config.generated.d.ts +18 -11
  344. package/lib/aws/notify/queue-config.generated.js +1 -1
  345. package/lib/aws/notify/queue-policy.js +1 -1
  346. package/lib/aws/notify/queue.js +1 -1
  347. package/lib/aws/notify/resource-policy.js +1 -1
  348. package/lib/aws/notify/rule.js +3 -2
  349. package/lib/aws/notify/schedule.js +2 -2
  350. package/lib/aws/notify/sqs-augmentations.generated.d.ts +125 -0
  351. package/lib/aws/notify/sqs-augmentations.generated.js +74 -0
  352. package/lib/aws/notify/target.js +2 -1
  353. package/lib/aws/notify/targets/event-bus.js +1 -1
  354. package/lib/aws/notify/targets/function.js +1 -1
  355. package/lib/aws/notify/targets/log-group.js +2 -2
  356. package/lib/aws/notify/targets/sqs.js +1 -1
  357. package/lib/aws/notify/targets/state-machine.js +1 -1
  358. package/lib/aws/notify/targets/util.d.ts +1 -1
  359. package/lib/aws/notify/targets/util.js +10 -11
  360. package/lib/aws/notify/util.js +4 -4
  361. package/lib/aws/provider-config.generated.d.ts +33 -33
  362. package/lib/aws/provider-config.generated.js +1 -1
  363. package/lib/aws/storage/bucket-notifications.js +1 -1
  364. package/lib/aws/storage/bucket-policy.js +1 -1
  365. package/lib/aws/storage/bucket-source.js +1 -1
  366. package/lib/aws/storage/bucket.d.ts +298 -65
  367. package/lib/aws/storage/bucket.js +548 -225
  368. package/lib/aws/storage/cors-config.generated.d.ts +3 -3
  369. package/lib/aws/storage/cors-config.generated.js +1 -1
  370. package/lib/aws/storage/cors-rule-config.generated.d.ts +5 -5
  371. package/lib/aws/storage/cors-rule-config.generated.js +1 -1
  372. package/lib/aws/storage/index.d.ts +1 -0
  373. package/lib/aws/storage/index.js +2 -1
  374. package/lib/aws/storage/lifecycle-config.generated.d.ts +11 -11
  375. package/lib/aws/storage/lifecycle-config.generated.js +1 -1
  376. package/lib/aws/storage/notification-targets/function.js +6 -6
  377. package/lib/aws/storage/notification-targets/queue.js +1 -1
  378. package/lib/aws/storage/origin-access-identity.d.ts +1 -1
  379. package/lib/aws/storage/origin-access-identity.js +5 -4
  380. package/lib/aws/storage/parameter-util.d.ts +12 -0
  381. package/lib/aws/storage/parameter-util.js +65 -0
  382. package/lib/aws/storage/parameter.d.ts +526 -0
  383. package/lib/aws/storage/parameter.js +606 -0
  384. package/lib/aws/storage/s3-canned-metrics.generated.d.ts +22 -0
  385. package/lib/aws/storage/s3-canned-metrics.generated.js +23 -0
  386. package/lib/aws/storage/util.d.ts +25 -3
  387. package/lib/aws/storage/util.js +84 -17
  388. package/lib/aws/storage/website-config.generated.d.ts +5 -5
  389. package/lib/aws/storage/website-config.generated.js +1 -1
  390. package/lib/aws/util.js +2 -3
  391. package/lib/construct-base.d.ts +10 -1
  392. package/lib/construct-base.js +9 -6
  393. package/lib/duration.js +1 -1
  394. package/lib/expiration.d.ts +48 -0
  395. package/lib/expiration.js +68 -0
  396. package/lib/helpers-internal/index.d.ts +1 -0
  397. package/lib/helpers-internal/index.js +7 -0
  398. package/lib/index.d.ts +2 -0
  399. package/lib/index.js +3 -1
  400. package/lib/private/md5.d.ts +4 -0
  401. package/lib/private/md5.js +14 -0
  402. package/lib/private/unique-resource-name.js +3 -4
  403. package/lib/size.js +2 -2
  404. package/lib/stack-base.d.ts +4 -23
  405. package/lib/stack-base.js +9 -30
  406. package/lib/terra-func.d.ts +103 -0
  407. package/lib/terra-func.js +170 -0
  408. package/lib/token.js +5 -5
  409. package/package.json +15 -8
  410. package/bun.lockb +0 -0
@@ -0,0 +1,397 @@
1
+ "use strict";
2
+ var _a, _b, _c;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.TunnelStartupAction = exports.Phase2DhGroupNumber = exports.Phase1DhGroupNumber = exports.IntegrityAlgorithm = exports.EncryptionAlgorithm = exports.IkeVersion = exports.DpdTimeoutAction = exports.RESERVED_TUNNEL_INSIDE_CIDR = exports.VpnConnection = exports.VpnConnectionBase = exports.VpnGateway = exports.VpnConnectionType = void 0;
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ // https://github.com/aws/aws-cdk/blob/v2.175.1/packages/aws-cdk-lib/aws-ec2/lib/vpn.ts
7
+ const net = require("node:net");
8
+ const provider_aws_1 = require("@cdktf/provider-aws");
9
+ const cdktf_1 = require("cdktf");
10
+ const duration_1 = require("../../duration");
11
+ const aws_construct_1 = require("../aws-construct");
12
+ const cloudwatch = require("../cloudwatch");
13
+ /**
14
+ * The VPN connection type.
15
+ */
16
+ var VpnConnectionType;
17
+ (function (VpnConnectionType) {
18
+ // NOTE: Terraform Provider AWS does not have a VpnConnection.Type field ...
19
+ // But the Customer Gateway Does
20
+ // @see https://registry.terraform.io/providers/hashicorp/aws/5.68.0/docs/resources/customer_gateway#type-1
21
+ /**
22
+ * The IPsec 1 VPN connection type.
23
+ */
24
+ VpnConnectionType["IPSEC_1"] = "ipsec.1";
25
+ /**
26
+ * Dummy member
27
+ * TODO: remove once https://github.com/aws/jsii/issues/231 is fixed
28
+ */
29
+ VpnConnectionType["DUMMY"] = "dummy";
30
+ })(VpnConnectionType || (exports.VpnConnectionType = VpnConnectionType = {}));
31
+ /**
32
+ * The VPN Gateway that shall be added to the VPC
33
+ *
34
+ * @resource aws_vpn_gateway
35
+ */
36
+ class VpnGateway extends aws_construct_1.AwsConstructBase {
37
+ get vpnGatewayOutputs() {
38
+ return {
39
+ gatewayId: this.gatewayId,
40
+ };
41
+ }
42
+ get outputs() {
43
+ return this.vpnGatewayOutputs;
44
+ }
45
+ constructor(scope, id, props) {
46
+ super(scope, id);
47
+ // This is 'Default' instead of 'Resource', because using 'Default' will generate
48
+ // a logical ID for a VpnGateway which is exactly the same as the logical ID that used
49
+ // to be created for the CfnVPNGateway (and 'Resource' would not do that).
50
+ const vpnGW = new provider_aws_1.vpnGateway.VpnGateway(this, "Default", {
51
+ amazonSideAsn: props.amazonSideAsn !== undefined
52
+ ? props.amazonSideAsn.toString()
53
+ : undefined,
54
+ });
55
+ this.gatewayId = vpnGW.id;
56
+ }
57
+ }
58
+ exports.VpnGateway = VpnGateway;
59
+ _a = JSII_RTTI_SYMBOL_1;
60
+ VpnGateway[_a] = { fqn: "terraconstructs.aws.compute.VpnGateway", version: "0.0.12" };
61
+ /**
62
+ * Base class for Vpn connections.
63
+ */
64
+ class VpnConnectionBase extends aws_construct_1.AwsConstructBase {
65
+ get vpnConnectionOutputs() {
66
+ return {
67
+ vpnId: this.vpnId,
68
+ customerGatewayId: this.customerGatewayId,
69
+ customerGatewayIp: this.customerGatewayIp,
70
+ customerGatewayAsn: this.customerGatewayAsn,
71
+ };
72
+ }
73
+ get outputs() {
74
+ return this.vpnConnectionOutputs;
75
+ }
76
+ }
77
+ exports.VpnConnectionBase = VpnConnectionBase;
78
+ _b = JSII_RTTI_SYMBOL_1;
79
+ VpnConnectionBase[_b] = { fqn: "terraconstructs.aws.compute.VpnConnectionBase", version: "0.0.12" };
80
+ /**
81
+ * Define a VPN Connection
82
+ *
83
+ * @resource AWS::EC2::VPNConnection
84
+ */
85
+ class VpnConnection extends VpnConnectionBase {
86
+ /**
87
+ * Import a VPN connection by supplying all attributes directly
88
+ */
89
+ static fromVpnConnectionAttributes(scope, id, attrs) {
90
+ class Import extends VpnConnectionBase {
91
+ constructor() {
92
+ super(...arguments);
93
+ this.vpnId = attrs.vpnId;
94
+ this.customerGatewayId = attrs.customerGatewayId;
95
+ this.customerGatewayIp = attrs.customerGatewayIp;
96
+ this.customerGatewayAsn = attrs.customerGatewayAsn;
97
+ }
98
+ }
99
+ return new Import(scope, id);
100
+ }
101
+ /**
102
+ * Return the given named metric for all VPN connections in the account/region.
103
+ */
104
+ static metricAll(metricName, props) {
105
+ return new cloudwatch.Metric({
106
+ namespace: "AWS/VPN",
107
+ metricName,
108
+ ...props,
109
+ });
110
+ }
111
+ /**
112
+ * Metric for the tunnel state of all VPN connections in the account/region.
113
+ *
114
+ * @default average over 5 minutes
115
+ */
116
+ static metricAllTunnelState(props) {
117
+ return this.metricAll("TunnelState", { statistic: "avg", ...props });
118
+ }
119
+ /**
120
+ * Metric for the tunnel data in of all VPN connections in the account/region.
121
+ *
122
+ * @default sum over 5 minutes
123
+ */
124
+ static metricAllTunnelDataIn(props) {
125
+ return this.metricAll("TunnelDataIn", { statistic: "sum", ...props });
126
+ }
127
+ /**
128
+ * Metric for the tunnel data out of all VPN connections.
129
+ *
130
+ * @default sum over 5 minutes
131
+ */
132
+ static metricAllTunnelDataOut(props) {
133
+ return this.metricAll("TunnelDataOut", { statistic: "sum", ...props });
134
+ }
135
+ constructor(scope, id, props) {
136
+ super(scope, id);
137
+ if (!props.vpc.vpnGatewayId) {
138
+ props.vpc.enableVpnGateway({
139
+ type: "ipsec.1",
140
+ amazonSideAsn: props.asn,
141
+ });
142
+ }
143
+ if (!cdktf_1.Token.isUnresolved(props.ip) && !net.isIPv4(props.ip)) {
144
+ throw new Error(`The \`ip\` ${props.ip} is not a valid IPv4 address.`);
145
+ }
146
+ const type = VpnConnectionType.IPSEC_1;
147
+ const bgpAsn = props.asn || 65000;
148
+ const customerGw = new provider_aws_1.customerGateway.CustomerGateway(this, "CustomerGateway", {
149
+ bgpAsn: bgpAsn.toString(),
150
+ ipAddress: props.ip,
151
+ type,
152
+ });
153
+ this.customerGatewayId = customerGw.id;
154
+ this.customerGatewayAsn = bgpAsn;
155
+ this.customerGatewayIp = props.ip;
156
+ const vpnTunnelOptionsSpecifications = {};
157
+ // Validate tunnel options
158
+ if (props.tunnelOptions) {
159
+ if (props.tunnelOptions.length > 2) {
160
+ throw new Error("Cannot specify more than two `tunnelOptions`");
161
+ }
162
+ if (props.tunnelOptions.length === 2 &&
163
+ props.tunnelOptions[0].tunnelInsideCidr ===
164
+ props.tunnelOptions[1].tunnelInsideCidr &&
165
+ props.tunnelOptions[0].tunnelInsideCidr !== undefined) {
166
+ throw new Error(`Same ${props.tunnelOptions[0].tunnelInsideCidr} \`tunnelInsideCidr\` cannot be used for both tunnels.`);
167
+ }
168
+ props.tunnelOptions.forEach((options, index) => {
169
+ // if (options.preSharedKey && options.preSharedKeySecret) {
170
+ // throw new Error(
171
+ // "Specify at most one of 'preSharedKey' and 'preSharedKeySecret'.",
172
+ // );
173
+ // }
174
+ if (options.preSharedKey &&
175
+ !cdktf_1.Token.isUnresolved(options.preSharedKey) &&
176
+ !/^[a-zA-Z1-9._][a-zA-Z\d._]{7,63}$/.test(options.preSharedKey)) {
177
+ /* eslint-disable max-len */
178
+ throw new Error(`The \`preSharedKey\` ${options.preSharedKey} for tunnel ${index + 1} is invalid. Allowed characters are alphanumeric characters and ._. Must be between 8 and 64 characters in length and cannot start with zero (0).`);
179
+ /* eslint-enable max-len */
180
+ }
181
+ if (options.tunnelInsideCidr) {
182
+ if (exports.RESERVED_TUNNEL_INSIDE_CIDR.includes(options.tunnelInsideCidr)) {
183
+ throw new Error(`The \`tunnelInsideCidr\` ${options.tunnelInsideCidr} for tunnel ${index + 1} is a reserved inside CIDR.`);
184
+ }
185
+ if (!/^169\.254\.\d{1,3}\.\d{1,3}\/30$/.test(options.tunnelInsideCidr)) {
186
+ /* eslint-disable-next-line max-len */
187
+ throw new Error(`The \`tunnelInsideCidr\` ${options.tunnelInsideCidr} for tunnel ${index + 1} is not a size /30 CIDR block from the 169.254.0.0/16 range.`);
188
+ }
189
+ // Validate rekeyFuzzPercentage
190
+ if (options.rekeyFuzzPercentage !== undefined) {
191
+ if (options.rekeyFuzzPercentage < 0 ||
192
+ options.rekeyFuzzPercentage > 100) {
193
+ throw new Error(`rekeyFuzzPercentage for tunnel ${index + 1} must be between 0 and 100`);
194
+ }
195
+ }
196
+ // Validate rekeyMarginTimeSeconds
197
+ if (options.rekeyMarginTime !== undefined) {
198
+ if (options.rekeyMarginTime.toSeconds() < 60) {
199
+ throw new Error(`rekeyMarginTime for tunnel ${index + 1} must be at least 60 seconds`);
200
+ }
201
+ // Check if it's less than half of phase2LifetimeSeconds
202
+ const phase2Lifetime = options.phase2Lifetime || duration_1.Duration.hours(1);
203
+ if (options.rekeyMarginTime.toSeconds() >
204
+ phase2Lifetime.toSeconds() / 2) {
205
+ throw new Error(`rekeyMarginTime for tunnel ${index + 1} must be less than half of phase2Lifetime (${phase2Lifetime.toSeconds() / 2})`);
206
+ }
207
+ }
208
+ // Validate replayWindowSize
209
+ if (options.replayWindowSize !== undefined) {
210
+ if (options.replayWindowSize < 64 ||
211
+ options.replayWindowSize > 2048) {
212
+ throw new Error(`replayWindowSize for tunnel ${index + 1} must be between 64 and 2048`);
213
+ }
214
+ }
215
+ }
216
+ // Map tunnel options to AWS provider format
217
+ const tunnelPrefix = `tunnel${index + 1}`;
218
+ Object.assign(vpnTunnelOptionsSpecifications, {
219
+ [`${tunnelPrefix}PresharedKey`]: options.preSharedKey,
220
+ [`${tunnelPrefix}InsideCidr`]: options.tunnelInsideCidr,
221
+ [`${tunnelPrefix}DpdTimeoutAction`]: options.dpdTimeoutAction,
222
+ [`${tunnelPrefix}DpdTimeoutSeconds`]: options.dpdTimeout?.toSeconds(),
223
+ [`${tunnelPrefix}EnableTunnelLifecycleControl`]: options.enableTunnelLifecycleControl,
224
+ [`${tunnelPrefix}IkeVersions`]: options.ikeVersions,
225
+ [`${tunnelPrefix}Phase1DhGroupNumbers`]: options.phase1DhGroupNumbers,
226
+ [`${tunnelPrefix}Phase1EncryptionAlgorithms`]: options.phase1EncryptionAlgorithms,
227
+ [`${tunnelPrefix}Phase1IntegrityAlgorithms`]: options.phase1IntegrityAlgorithms,
228
+ [`${tunnelPrefix}Phase1LifetimeSeconds`]: options.phase1Lifetime?.toSeconds(),
229
+ [`${tunnelPrefix}Phase2DhGroupNumbers`]: options.phase2DhGroupNumbers,
230
+ [`${tunnelPrefix}Phase2EncryptionAlgorithms`]: options.phase2EncryptionAlgorithms,
231
+ [`${tunnelPrefix}Phase2IntegrityAlgorithms`]: options.phase2IntegrityAlgorithms,
232
+ [`${tunnelPrefix}Phase2LifetimeSeconds`]: options.phase2Lifetime?.toSeconds(),
233
+ [`${tunnelPrefix}StartupAction`]: options.startupAction,
234
+ [`${tunnelPrefix}RekeyFuzzPercentage`]: options.rekeyFuzzPercentage,
235
+ [`${tunnelPrefix}RekeyMarginTimeSeconds`]: options.rekeyMarginTime?.toSeconds(),
236
+ [`${tunnelPrefix}ReplayWindowSize`]: options.replayWindowSize,
237
+ });
238
+ });
239
+ }
240
+ const resource = new provider_aws_1.vpnConnection.VpnConnection(this, "Resource", {
241
+ type,
242
+ customerGatewayId: customerGw.id,
243
+ staticRoutesOnly: props.staticRoutes ? true : false,
244
+ vpnGatewayId: props.vpc.vpnGatewayId,
245
+ ...vpnTunnelOptionsSpecifications,
246
+ });
247
+ this.vpnId = resource.id;
248
+ if (props.staticRoutes) {
249
+ props.staticRoutes.forEach((route) => {
250
+ new provider_aws_1.vpnConnectionRoute.VpnConnectionRoute(this, `Route${route.replace(/[^\d]/g, "")}`, {
251
+ destinationCidrBlock: route,
252
+ vpnConnectionId: this.vpnId,
253
+ });
254
+ });
255
+ }
256
+ }
257
+ }
258
+ exports.VpnConnection = VpnConnection;
259
+ _c = JSII_RTTI_SYMBOL_1;
260
+ VpnConnection[_c] = { fqn: "terraconstructs.aws.compute.VpnConnection", version: "0.0.12" };
261
+ exports.RESERVED_TUNNEL_INSIDE_CIDR = [
262
+ "169.254.0.0/30",
263
+ "169.254.1.0/30",
264
+ "169.254.2.0/30",
265
+ "169.254.3.0/30",
266
+ "169.254.4.0/30",
267
+ "169.254.5.0/30",
268
+ "169.254.169.252/30",
269
+ ];
270
+ /**
271
+ * Action to take after DPD timeout occurs
272
+ */
273
+ var DpdTimeoutAction;
274
+ (function (DpdTimeoutAction) {
275
+ /**
276
+ * End the IKE session
277
+ */
278
+ DpdTimeoutAction["CLEAR"] = "clear";
279
+ /**
280
+ * Take no action
281
+ */
282
+ DpdTimeoutAction["NONE"] = "none";
283
+ /**
284
+ * Restart the IKE initiation
285
+ */
286
+ DpdTimeoutAction["RESTART"] = "restart";
287
+ })(DpdTimeoutAction || (exports.DpdTimeoutAction = DpdTimeoutAction = {}));
288
+ /**
289
+ * IKE versions permitted for VPN tunnels
290
+ */
291
+ var IkeVersion;
292
+ (function (IkeVersion) {
293
+ /**
294
+ * IKE version 1
295
+ */
296
+ IkeVersion["IKEV1"] = "ikev1";
297
+ /**
298
+ * IKE version 2
299
+ */
300
+ IkeVersion["IKEV2"] = "ikev2";
301
+ })(IkeVersion || (exports.IkeVersion = IkeVersion = {}));
302
+ /**
303
+ * Phase 1 and 2 encryption algorithms
304
+ */
305
+ var EncryptionAlgorithm;
306
+ (function (EncryptionAlgorithm) {
307
+ /**
308
+ * AES with 128-bit key
309
+ */
310
+ EncryptionAlgorithm["AES128"] = "AES128";
311
+ /**
312
+ * AES with 256-bit key
313
+ */
314
+ EncryptionAlgorithm["AES256"] = "AES256";
315
+ /**
316
+ * AES-GCM with 128-bit key and 16 byte integrity check
317
+ */
318
+ EncryptionAlgorithm["AES128_GCM_16"] = "AES128-GCM-16";
319
+ /**
320
+ * AES-GCM with 256-bit key and 16 byte integrity check
321
+ */
322
+ EncryptionAlgorithm["AES256_GCM_16"] = "AES256-GCM-16";
323
+ })(EncryptionAlgorithm || (exports.EncryptionAlgorithm = EncryptionAlgorithm = {}));
324
+ /**
325
+ * Phase 1 and 2 integrity algorithms
326
+ */
327
+ var IntegrityAlgorithm;
328
+ (function (IntegrityAlgorithm) {
329
+ /**
330
+ * SHA-1 hash algorithm
331
+ */
332
+ IntegrityAlgorithm["SHA1"] = "SHA1";
333
+ /**
334
+ * SHA-2 with 256-bit digest
335
+ */
336
+ IntegrityAlgorithm["SHA2_256"] = "SHA2-256";
337
+ /**
338
+ * SHA-2 with 384-bit digest
339
+ */
340
+ IntegrityAlgorithm["SHA2_384"] = "SHA2-384";
341
+ /**
342
+ * SHA-2 with 512-bit digest
343
+ */
344
+ IntegrityAlgorithm["SHA2_512"] = "SHA2-512";
345
+ })(IntegrityAlgorithm || (exports.IntegrityAlgorithm = IntegrityAlgorithm = {}));
346
+ /**
347
+ * Phase 1 Diffie-Hellman group numbers
348
+ */
349
+ var Phase1DhGroupNumber;
350
+ (function (Phase1DhGroupNumber) {
351
+ Phase1DhGroupNumber[Phase1DhGroupNumber["GROUP_2"] = 2] = "GROUP_2";
352
+ Phase1DhGroupNumber[Phase1DhGroupNumber["GROUP_14"] = 14] = "GROUP_14";
353
+ Phase1DhGroupNumber[Phase1DhGroupNumber["GROUP_15"] = 15] = "GROUP_15";
354
+ Phase1DhGroupNumber[Phase1DhGroupNumber["GROUP_16"] = 16] = "GROUP_16";
355
+ Phase1DhGroupNumber[Phase1DhGroupNumber["GROUP_17"] = 17] = "GROUP_17";
356
+ Phase1DhGroupNumber[Phase1DhGroupNumber["GROUP_18"] = 18] = "GROUP_18";
357
+ Phase1DhGroupNumber[Phase1DhGroupNumber["GROUP_19"] = 19] = "GROUP_19";
358
+ Phase1DhGroupNumber[Phase1DhGroupNumber["GROUP_20"] = 20] = "GROUP_20";
359
+ Phase1DhGroupNumber[Phase1DhGroupNumber["GROUP_21"] = 21] = "GROUP_21";
360
+ Phase1DhGroupNumber[Phase1DhGroupNumber["GROUP_22"] = 22] = "GROUP_22";
361
+ Phase1DhGroupNumber[Phase1DhGroupNumber["GROUP_23"] = 23] = "GROUP_23";
362
+ Phase1DhGroupNumber[Phase1DhGroupNumber["GROUP_24"] = 24] = "GROUP_24";
363
+ })(Phase1DhGroupNumber || (exports.Phase1DhGroupNumber = Phase1DhGroupNumber = {}));
364
+ /**
365
+ * Phase 2 Diffie-Hellman group numbers
366
+ */
367
+ var Phase2DhGroupNumber;
368
+ (function (Phase2DhGroupNumber) {
369
+ Phase2DhGroupNumber[Phase2DhGroupNumber["GROUP_2"] = 2] = "GROUP_2";
370
+ Phase2DhGroupNumber[Phase2DhGroupNumber["GROUP_5"] = 5] = "GROUP_5";
371
+ Phase2DhGroupNumber[Phase2DhGroupNumber["GROUP_14"] = 14] = "GROUP_14";
372
+ Phase2DhGroupNumber[Phase2DhGroupNumber["GROUP_15"] = 15] = "GROUP_15";
373
+ Phase2DhGroupNumber[Phase2DhGroupNumber["GROUP_16"] = 16] = "GROUP_16";
374
+ Phase2DhGroupNumber[Phase2DhGroupNumber["GROUP_17"] = 17] = "GROUP_17";
375
+ Phase2DhGroupNumber[Phase2DhGroupNumber["GROUP_18"] = 18] = "GROUP_18";
376
+ Phase2DhGroupNumber[Phase2DhGroupNumber["GROUP_19"] = 19] = "GROUP_19";
377
+ Phase2DhGroupNumber[Phase2DhGroupNumber["GROUP_20"] = 20] = "GROUP_20";
378
+ Phase2DhGroupNumber[Phase2DhGroupNumber["GROUP_21"] = 21] = "GROUP_21";
379
+ Phase2DhGroupNumber[Phase2DhGroupNumber["GROUP_22"] = 22] = "GROUP_22";
380
+ Phase2DhGroupNumber[Phase2DhGroupNumber["GROUP_23"] = 23] = "GROUP_23";
381
+ Phase2DhGroupNumber[Phase2DhGroupNumber["GROUP_24"] = 24] = "GROUP_24";
382
+ })(Phase2DhGroupNumber || (exports.Phase2DhGroupNumber = Phase2DhGroupNumber = {}));
383
+ /**
384
+ * Tunnel startup action
385
+ */
386
+ var TunnelStartupAction;
387
+ (function (TunnelStartupAction) {
388
+ /**
389
+ * Customer gateway must initiate IKE negotiation
390
+ */
391
+ TunnelStartupAction["ADD"] = "add";
392
+ /**
393
+ * AWS will initiate IKE negotiation
394
+ */
395
+ TunnelStartupAction["START"] = "start";
396
+ })(TunnelStartupAction || (exports.TunnelStartupAction = TunnelStartupAction = {}));
397
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidnBuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F3cy9jb21wdXRlL3Zwbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHVGQUF1RjtBQUV2RixnQ0FBZ0M7QUFDaEMsc0RBSzZCO0FBQzdCLGlDQUdlO0FBR2YsNkNBQTBDO0FBQzFDLG9EQUFtRTtBQUNuRSw0Q0FBNEM7QUE2UTVDOztHQUVHO0FBQ0gsSUFBWSxpQkFjWDtBQWRELFdBQVksaUJBQWlCO0lBQzNCLDRFQUE0RTtJQUM1RSxnQ0FBZ0M7SUFDaEMsMkdBQTJHO0lBQzNHOztPQUVHO0lBQ0gsd0NBQW1CLENBQUE7SUFFbkI7OztPQUdHO0lBQ0gsb0NBQWUsQ0FBQTtBQUNqQixDQUFDLEVBZFcsaUJBQWlCLGlDQUFqQixpQkFBaUIsUUFjNUI7QUFFRDs7OztHQUlHO0FBQ0gsTUFBYSxVQUFXLFNBQVEsZ0NBQWdCO0lBSzlDLElBQVcsaUJBQWlCO1FBQzFCLE9BQU87WUFDTCxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7U0FDMUIsQ0FBQztJQUNKLENBQUM7SUFDRCxJQUFXLE9BQU87UUFDaEIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUM7SUFDaEMsQ0FBQztJQUVELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBc0I7UUFDOUQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixpRkFBaUY7UUFDakYsc0ZBQXNGO1FBQ3RGLDBFQUEwRTtRQUMxRSxNQUFNLEtBQUssR0FBRyxJQUFJLHlCQUFVLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUU7WUFDdkQsYUFBYSxFQUNYLEtBQUssQ0FBQyxhQUFhLEtBQUssU0FBUztnQkFDL0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFO2dCQUNoQyxDQUFDLENBQUMsU0FBUztTQUNoQixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsU0FB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RUFBYSxDQUFBO0lBQ2Isc0VBQWEsQ0FBQTtJQUNiLHNFQUFhLENBQUE7SUFDYixzRUFBYSxDQUFBO0lBQ2Isc0VBQWEsQ0FBQTtJQUNiLHNFQUFhLENBQUE7SUFDYixzRUFBYSxDQUFBO0lBQ2Isc0VBQWEsQ0FBQTtJQUNiLHNFQUFhLENBQUE7SUFDYixzRUFBYSxDQUFBO0FBQ2YsQ0FBQyxFQWJXLG1CQUFtQixtQ0FBbkIsbUJBQW1CLFFBYTlCO0FBRUQ7O0dBRUc7QUFDSCxJQUFZLG1CQWNYO0FBZEQsV0FBWSxtQkFBbUI7SUFDN0IsbUVBQVcsQ0FBQTtJQUNYLG1FQUFXLENBQUE7SUFDWCxzRUFBYSxDQUFBO0lBQ2Isc0VBQWEsQ0FBQTtJQUNiLHNFQUFhLENBQUE7SUFDYixzRUFBYSxDQUFBO0lBQ2Isc0VBQWEsQ0FBQTtJQUNiLHNFQUFhLENBQUE7SUFDYixzRUFBYSxDQUFBO0lBQ2Isc0VBQWEsQ0FBQTtJQUNiLHNFQUFhLENBQUE7SUFDYixzRUFBYSxDQUFBO0lBQ2Isc0VBQWEsQ0FBQTtBQUNmLENBQUMsRUFkVyxtQkFBbUIsbUNBQW5CLG1CQUFtQixRQWM5QjtBQUVEOztHQUVHO0FBQ0gsSUFBWSxtQkFVWDtBQVZELFdBQVksbUJBQW1CO0lBQzdCOztPQUVHO0lBQ0gsa0NBQVcsQ0FBQTtJQUVYOztPQUVHO0lBQ0gsc0NBQWUsQ0FBQTtBQUNqQixDQUFDLEVBVlcsbUJBQW1CLG1DQUFuQixtQkFBbUIsUUFVOUIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvYmxvYi92Mi4xNzUuMS9wYWNrYWdlcy9hd3MtY2RrLWxpYi9hd3MtZWMyL2xpYi92cG4udHNcblxuaW1wb3J0ICogYXMgbmV0IGZyb20gXCJub2RlOm5ldFwiO1xuaW1wb3J0IHtcbiAgY3VzdG9tZXJHYXRld2F5LFxuICB2cG5Db25uZWN0aW9uLFxuICB2cG5Db25uZWN0aW9uUm91dGUsXG4gIHZwbkdhdGV3YXksXG59IGZyb20gXCJAY2RrdGYvcHJvdmlkZXItYXdzXCI7XG5pbXBvcnQge1xuICAvL1NlY3JldFZhbHVlLFxuICBUb2tlbixcbn0gZnJvbSBcImNka3RmXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgSVZwYywgU3VibmV0U2VsZWN0aW9uIH0gZnJvbSBcIi4vdnBjXCI7XG5pbXBvcnQgeyBEdXJhdGlvbiB9IGZyb20gXCIuLi8uLi9kdXJhdGlvblwiO1xuaW1wb3J0IHsgSUF3c0NvbnN0cnVjdCwgQXdzQ29uc3RydWN0QmFzZSB9IGZyb20gXCIuLi9hd3MtY29uc3RydWN0XCI7XG5pbXBvcnQgKiBhcyBjbG91ZHdhdGNoIGZyb20gXCIuLi9jbG91ZHdhdGNoXCI7XG5cbi8qKlxuICogT3V0cHV0cyB3aGljaCBtYXkgYmUgcmVnaXN0ZXJlZCBmb3Igb3V0cHV0IHZpYSB0aGUgR3JpZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWcG5Db25uZWN0aW9uT3V0cHV0cyB7XG4gIC8qKlxuICAgKiBUaGUgaWQgb2YgdGhlIFZQTiBjb25uZWN0aW9uLlxuICAgKiBAYXR0cmlidXRlIFZwbkNvbm5lY3Rpb25JZFxuICAgKi9cbiAgcmVhZG9ubHkgdnBuSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSBjdXN0b21lciBnYXRld2F5LlxuICAgKi9cbiAgcmVhZG9ubHkgY3VzdG9tZXJHYXRld2F5SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGlwIGFkZHJlc3Mgb2YgdGhlIGN1c3RvbWVyIGdhdGV3YXkuXG4gICAqL1xuICByZWFkb25seSBjdXN0b21lckdhdGV3YXlJcDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQVNOIG9mIHRoZSBjdXN0b21lciBnYXRld2F5LlxuICAgKi9cbiAgcmVhZG9ubHkgY3VzdG9tZXJHYXRld2F5QXNuOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVZwbkNvbm5lY3Rpb24gZXh0ZW5kcyBJQXdzQ29uc3RydWN0IHtcbiAgLyoqIFN0cm9uZ2x5IHR5cGVkIG91dHB1dHMgKi9cbiAgcmVhZG9ubHkgdnBuQ29ubmVjdGlvbk91dHB1dHM6IFZwbkNvbm5lY3Rpb25PdXRwdXRzO1xuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSBWUE4gY29ubmVjdGlvbi5cbiAgICogQGF0dHJpYnV0ZSBWcG5Db25uZWN0aW9uSWRcbiAgICovXG4gIHJlYWRvbmx5IHZwbklkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpZCBvZiB0aGUgY3VzdG9tZXIgZ2F0ZXdheS5cbiAgICovXG4gIHJlYWRvbmx5IGN1c3RvbWVyR2F0ZXdheUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpcCBhZGRyZXNzIG9mIHRoZSBjdXN0b21lciBnYXRld2F5LlxuICAgKi9cbiAgcmVhZG9ubHkgY3VzdG9tZXJHYXRld2F5SXA6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEFTTiBvZiB0aGUgY3VzdG9tZXIgZ2F0ZXdheS5cbiAgICovXG4gIHJlYWRvbmx5IGN1c3RvbWVyR2F0ZXdheUFzbjogbnVtYmVyO1xufVxuXG4vKipcbiAqIE91dHB1dHMgd2hpY2ggbWF5IGJlIHJlZ2lzdGVyZWQgZm9yIG91dHB1dCB2aWEgdGhlIEdyaWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVnBuR2F0ZXdheU91dHB1dHMge1xuICAvKipcbiAgICogVGhlIHZpcnR1YWwgcHJpdmF0ZSBnYXRld2F5IElkXG4gICAqIEBhdHRyaWJ1dGUgVnBuR2F0ZXdheUlkXG4gICAqL1xuICByZWFkb25seSBnYXRld2F5SWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgdmlydHVhbCBwcml2YXRlIGdhdGV3YXkgaW50ZXJmYWNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVZwbkdhdGV3YXkgZXh0ZW5kcyBJQXdzQ29uc3RydWN0IHtcbiAgLyoqIFN0cm9uZ2x5IHR5cGVkIG91dHB1dHMgKi9cbiAgcmVhZG9ubHkgdnBuR2F0ZXdheU91dHB1dHM6IFZwbkdhdGV3YXlPdXRwdXRzO1xuICAvKipcbiAgICogVGhlIHZpcnR1YWwgcHJpdmF0ZSBnYXRld2F5IElkXG4gICAqL1xuICByZWFkb25seSBnYXRld2F5SWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWcG5UdW5uZWxPcHRpb24ge1xuICAvKipcbiAgICogVGhlIHByZS1zaGFyZWQga2V5IChQU0spIHRvIGVzdGFibGlzaCBpbml0aWFsIGF1dGhlbnRpY2F0aW9uIGJldHdlZW4gdGhlXG4gICAqIHZpcnR1YWwgcHJpdmF0ZSBnYXRld2F5IGFuZCBjdXN0b21lciBnYXRld2F5LiBBbGxvd2VkIGNoYXJhY3RlcnMgYXJlXG4gICAqIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIHBlcmlvZCBgLmAgYW5kIHVuZGVyc2NvcmVzIGBfYC4gTXVzdCBiZSBiZXR3ZWVuIDhcbiAgICogYW5kIDY0IGNoYXJhY3RlcnMgaW4gbGVuZ3RoIGFuZCBjYW5ub3Qgc3RhcnQgd2l0aCB6ZXJvICgwKS5cbiAgICpcbiAgICogQGRlZmF1bHQgYW4gQW1hem9uIGdlbmVyYXRlZCBwcmUtc2hhcmVkIGtleVxuICAgKi9cbiAgcmVhZG9ubHkgcHJlU2hhcmVkS2V5Pzogc3RyaW5nO1xuXG4gIC8vIFRPRE86IEFkb3B0IFNlY3JldFZhbHVlIHBhdHRlcm4gZnJvbSBBV1NDREtcblxuICAvLyAvKipcbiAgLy8gICogVGhlIHByZS1zaGFyZWQga2V5IChQU0spIHRvIGVzdGFibGlzaCBpbml0aWFsIGF1dGhlbnRpY2F0aW9uIGJldHdlZW4gdGhlXG4gIC8vICAqIHZpcnR1YWwgcHJpdmF0ZSBnYXRld2F5IGFuZCBjdXN0b21lciBnYXRld2F5LiBBbGxvd2VkIGNoYXJhY3RlcnMgYXJlXG4gIC8vICAqIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIHBlcmlvZCBgLmAgYW5kIHVuZGVyc2NvcmVzIGBfYC4gTXVzdCBiZSBiZXR3ZWVuIDhcbiAgLy8gICogYW5kIDY0IGNoYXJhY3RlcnMgaW4gbGVuZ3RoIGFuZCBjYW5ub3Qgc3RhcnQgd2l0aCB6ZXJvICgwKS5cbiAgLy8gICpcbiAgLy8gICogQGRlZmF1bHQgYW4gQW1hem9uIGdlbmVyYXRlZCBwcmUtc2hhcmVkIGtleVxuICAvLyAgKi9cbiAgLy8gcmVhZG9ubHkgcHJlU2hhcmVkS2V5U2VjcmV0PzogU2VjcmV0VmFsdWU7XG5cbiAgLyoqXG4gICAqIFRoZSByYW5nZSBvZiBpbnNpZGUgSVAgYWRkcmVzc2VzIGZvciB0aGUgdHVubmVsLiBBbnkgc3BlY2lmaWVkIENJRFIgYmxvY2tzIG11c3QgYmVcbiAgICogdW5pcXVlIGFjcm9zcyBhbGwgVlBOIGNvbm5lY3Rpb25zIHRoYXQgdXNlIHRoZSBzYW1lIHZpcnR1YWwgcHJpdmF0ZSBnYXRld2F5LlxuICAgKiBBIHNpemUgLzMwIENJRFIgYmxvY2sgZnJvbSB0aGUgMTY5LjI1NC4wLjAvMTYgcmFuZ2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IGFuIEFtYXpvbiBnZW5lcmF0ZWQgaW5zaWRlIElQIENJRFJcbiAgICovXG4gIHJlYWRvbmx5IHR1bm5lbEluc2lkZUNpZHI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBJS0UgdmVyc2lvbnMgZm9yIHRoZSB0dW5uZWxcbiAgICovXG4gIHJlYWRvbmx5IGlrZVZlcnNpb25zPzogSWtlVmVyc2lvbltdO1xuXG4gIC8qKlxuICAgKiBUaGUgRFBEIHRpbWVvdXQgYWN0aW9uIGZvciB0aGUgdHVubmVsXG4gICAqL1xuICByZWFkb25seSBkcGRUaW1lb3V0QWN0aW9uPzogRHBkVGltZW91dEFjdGlvbjtcblxuICAvKipcbiAgICogVGhlIERQRCB0aW1lb3V0XG4gICAqL1xuICByZWFkb25seSBkcGRUaW1lb3V0PzogRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIEVuYWJsZSB0dW5uZWwgbGlmZWN5Y2xlIGNvbnRyb2xcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZVR1bm5lbExpZmVjeWNsZUNvbnRyb2w/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgcGhhc2UgMSBESCBncm91cCBudW1iZXJzXG4gICAqL1xuICByZWFkb25seSBwaGFzZTFEaEdyb3VwTnVtYmVycz86IFBoYXNlMURoR3JvdXBOdW1iZXJbXTtcblxuICAvKipcbiAgICogVGhlIHBoYXNlIDEgZW5jcnlwdGlvbiBhbGdvcml0aG1zXG4gICAqL1xuICByZWFkb25seSBwaGFzZTFFbmNyeXB0aW9uQWxnb3JpdGhtcz86IEVuY3J5cHRpb25BbGdvcml0aG1bXTtcblxuICAvKipcbiAgICogVGhlIHBoYXNlIDEgaW50ZWdyaXR5IGFsZ29yaXRobXNcbiAgICovXG4gIHJlYWRvbmx5IHBoYXNlMUludGVncml0eUFsZ29yaXRobXM/OiBJbnRlZ3JpdHlBbGdvcml0aG1bXTtcblxuICAvKipcbiAgICogVGhlIHBoYXNlIDEgbGlmZXRpbWVcbiAgICovXG4gIHJlYWRvbmx5IHBoYXNlMUxpZmV0aW1lPzogRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBwaGFzZSAyIERIIGdyb3VwIG51bWJlcnNcbiAgICovXG4gIHJlYWRvbmx5IHBoYXNlMkRoR3JvdXBOdW1iZXJzPzogUGhhc2UyRGhHcm91cE51bWJlcltdO1xuXG4gIC8qKlxuICAgKiBUaGUgcGhhc2UgMiBlbmNyeXB0aW9uIGFsZ29yaXRobXNcbiAgICovXG4gIHJlYWRvbmx5IHBoYXNlMkVuY3J5cHRpb25BbGdvcml0aG1zPzogRW5jcnlwdGlvbkFsZ29yaXRobVtdO1xuXG4gIC8qKlxuICAgKiBUaGUgcGhhc2UgMiBpbnRlZ3JpdHkgYWxnb3JpdGhtc1xuICAgKi9cbiAgcmVhZG9ubHkgcGhhc2UySW50ZWdyaXR5QWxnb3JpdGhtcz86IEludGVncml0eUFsZ29yaXRobVtdO1xuXG4gIC8qKlxuICAgKiBUaGUgcGhhc2UgMiBsaWZldGltZSBpbiBzZWNvbmRzXG4gICAqL1xuICByZWFkb25seSBwaGFzZTJMaWZldGltZT86IER1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgcGVyY2VudGFnZSBvZiB0aGUgcmVrZXkgd2luZG93IGR1cmluZyB3aGljaCB0aGUgcmVrZXkgdGltZSBpcyByYW5kb21seSBzZWxlY3RlZFxuICAgKiBAZGVmYXVsdCAxMDBcbiAgICogQG1pbmltdW0gMFxuICAgKiBAbWF4aW11bSAxMDBcbiAgICovXG4gIHJlYWRvbmx5IHJla2V5RnV6elBlcmNlbnRhZ2U/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBtYXJnaW4gdGltZSBiZWZvcmUgcGhhc2UgMiBsaWZldGltZSBleHBpcmVzIGZvciBJS0UgcmVrZXlcbiAgICogQGRlZmF1bHQgNTQwXG4gICAqIEBtaW5pbXVtIDYwXG4gICAqIEByZW1hcmtzIE11c3QgYmUgYmV0d2VlbiA2MCBhbmQgaGFsZiBvZiBwaGFzZTJMaWZldGltZVNlY29uZHNcbiAgICovXG4gIHJlYWRvbmx5IHJla2V5TWFyZ2luVGltZT86IER1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIHBhY2tldHMgaW4gYW4gSUtFIHJlcGxheSB3aW5kb3dcbiAgICogQGRlZmF1bHQgMTAyNFxuICAgKiBAbWluaW11bSA2NFxuICAgKiBAbWF4aW11bSAyMDQ4XG4gICAqL1xuICByZWFkb25seSByZXBsYXlXaW5kb3dTaXplPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgYWN0aW9uIHRvIHRha2Ugd2hlbiB0aGUgZXN0YWJsaXNoaW5nIHRoZSB0dW5uZWwgZm9yIHRoZSBzZWNvbmQgVlBOIGNvbm5lY3Rpb24uXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIHlvdXIgY3VzdG9tZXIgZ2F0ZXdheSBkZXZpY2UgbXVzdCBpbml0aWF0ZSB0aGUgSUtFIG5lZ290aWF0aW9uIGFuZCBicmluZyB1cCB0aGUgdHVubmVsLlxuICAgKiBTcGVjaWZ5IGBzdGFydGAgZm9yIEFXUyB0byBpbml0aWF0ZSB0aGUgSUtFIG5lZ290aWF0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhcnR1cEFjdGlvbj86IFR1bm5lbFN0YXJ0dXBBY3Rpb247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVnBuQ29ubmVjdGlvbk9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGlwIGFkZHJlc3Mgb2YgdGhlIGN1c3RvbWVyIGdhdGV3YXkuXG4gICAqL1xuICByZWFkb25seSBpcDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQVNOIG9mIHRoZSBjdXN0b21lciBnYXRld2F5LlxuICAgKlxuICAgKiBAZGVmYXVsdCA2NTAwMFxuICAgKi9cbiAgcmVhZG9ubHkgYXNuPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RhdGljIHJvdXRlcyB0byBiZSByb3V0ZWQgZnJvbSB0aGUgVlBOIGdhdGV3YXkgdG8gdGhlIGN1c3RvbWVyIGdhdGV3YXkuXG4gICAqXG4gICAqIEBkZWZhdWx0IER5bmFtaWMgcm91dGluZyAoQkdQKVxuICAgKi9cbiAgcmVhZG9ubHkgc3RhdGljUm91dGVzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSB0dW5uZWwgb3B0aW9ucyBmb3IgdGhlIFZQTiBjb25uZWN0aW9uLiBBdCBtb3N0IHR3byBlbGVtZW50cyAob25lIHBlciB0dW5uZWwpLlxuICAgKiBEdXBsaWNhdGVzIG5vdCBhbGxvd2VkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBBbWF6b24gZ2VuZXJhdGVkIHR1bm5lbCBvcHRpb25zXG4gICAqL1xuICByZWFkb25seSB0dW5uZWxPcHRpb25zPzogVnBuVHVubmVsT3B0aW9uW107XG59XG5cbi8qKlxuICogVGhlIFZwbkdhdGV3YXkgUHJvcGVydGllc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFZwbkdhdGV3YXlQcm9wcyB7XG4gIC8qKlxuICAgKiBEZWZhdWx0IHR5cGUgaXBzZWMuMVxuICAgKlxuICAgKiBUaGlzIGlzIGlnbm9yZWQgYnkgVGVycmFmb3JtIFByb3ZpZGVyIEFXU1xuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvYXdzLzUuNjguMC9kb2NzL3Jlc291cmNlcy9pbnRlcm5ldF9nYXRld2F5X2F0dGFjaG1lbnQjYXJndW1lbnQtcmVmZXJlbmNlXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWVjMi12cG5nYXRld2F5Lmh0bWwjY2ZuLWVjMi12cG5nYXRld2F5LXR5cGVcbiAgICovXG4gIHJlYWRvbmx5IHR5cGU6IHN0cmluZztcblxuICAvKipcbiAgICogRXhwbGljaXRseSBzcGVjaWZ5IGFuIEFzbiBvciBsZXQgYXdzIHBpY2sgYW4gQXNuIGZvciB5b3UuXG4gICAqIEBkZWZhdWx0IDY1MDAwXG4gICAqL1xuICByZWFkb25seSBhbWF6b25TaWRlQXNuPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHRoZSBWcGMuZW5hYmxlVnBuR2F0ZXdheSgpIG1ldGhvZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVuYWJsZVZwbkdhdGV3YXlPcHRpb25zIGV4dGVuZHMgVnBuR2F0ZXdheVByb3BzIHtcbiAgLyoqXG4gICAqIFByb3ZpZGUgYW4gYXJyYXkgb2Ygc3VibmV0cyB3aGVyZSB0aGUgcm91dGUgcHJvcGFnYXRpb24gc2hvdWxkIGJlIGFkZGVkLlxuICAgKiBAZGVmYXVsdCBub1Byb3BhZ2F0aW9uXG4gICAqL1xuICByZWFkb25seSB2cG5Sb3V0ZVByb3BhZ2F0aW9uPzogU3VibmV0U2VsZWN0aW9uW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVnBuQ29ubmVjdGlvblByb3BzIGV4dGVuZHMgVnBuQ29ubmVjdGlvbk9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIFZQQyB0byBjb25uZWN0IHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgdnBjOiBJVnBjO1xufVxuXG4vKipcbiAqIFRoZSBWUE4gY29ubmVjdGlvbiB0eXBlLlxuICovXG5leHBvcnQgZW51bSBWcG5Db25uZWN0aW9uVHlwZSB7XG4gIC8vIE5PVEU6IFRlcnJhZm9ybSBQcm92aWRlciBBV1MgZG9lcyBub3QgaGF2ZSBhIFZwbkNvbm5lY3Rpb24uVHlwZSBmaWVsZCAuLi5cbiAgLy8gQnV0IHRoZSBDdXN0b21lciBHYXRld2F5IERvZXNcbiAgLy8gQHNlZSBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2F3cy81LjY4LjAvZG9jcy9yZXNvdXJjZXMvY3VzdG9tZXJfZ2F0ZXdheSN0eXBlLTFcbiAgLyoqXG4gICAqIFRoZSBJUHNlYyAxIFZQTiBjb25uZWN0aW9uIHR5cGUuXG4gICAqL1xuICBJUFNFQ18xID0gXCJpcHNlYy4xXCIsXG5cbiAgLyoqXG4gICAqIER1bW15IG1lbWJlclxuICAgKiBUT0RPOiByZW1vdmUgb25jZSBodHRwczovL2dpdGh1Yi5jb20vYXdzL2pzaWkvaXNzdWVzLzIzMSBpcyBmaXhlZFxuICAgKi9cbiAgRFVNTVkgPSBcImR1bW15XCIsXG59XG5cbi8qKlxuICogVGhlIFZQTiBHYXRld2F5IHRoYXQgc2hhbGwgYmUgYWRkZWQgdG8gdGhlIFZQQ1xuICpcbiAqIEByZXNvdXJjZSBhd3NfdnBuX2dhdGV3YXlcbiAqL1xuZXhwb3J0IGNsYXNzIFZwbkdhdGV3YXkgZXh0ZW5kcyBBd3NDb25zdHJ1Y3RCYXNlIGltcGxlbWVudHMgSVZwbkdhdGV3YXkge1xuICAvKipcbiAgICogVGhlIHZpcnR1YWwgcHJpdmF0ZSBnYXRld2F5IElkXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZ2F0ZXdheUlkOiBzdHJpbmc7XG4gIHB1YmxpYyBnZXQgdnBuR2F0ZXdheU91dHB1dHMoKTogVnBuR2F0ZXdheU91dHB1dHMge1xuICAgIHJldHVybiB7XG4gICAgICBnYXRld2F5SWQ6IHRoaXMuZ2F0ZXdheUlkLFxuICAgIH07XG4gIH1cbiAgcHVibGljIGdldCBvdXRwdXRzKCk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIHJldHVybiB0aGlzLnZwbkdhdGV3YXlPdXRwdXRzO1xuICB9XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFZwbkdhdGV3YXlQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICAvLyBUaGlzIGlzICdEZWZhdWx0JyBpbnN0ZWFkIG9mICdSZXNvdXJjZScsIGJlY2F1c2UgdXNpbmcgJ0RlZmF1bHQnIHdpbGwgZ2VuZXJhdGVcbiAgICAvLyBhIGxvZ2ljYWwgSUQgZm9yIGEgVnBuR2F0ZXdheSB3aGljaCBpcyBleGFjdGx5IHRoZSBzYW1lIGFzIHRoZSBsb2dpY2FsIElEIHRoYXQgdXNlZFxuICAgIC8vIHRvIGJlIGNyZWF0ZWQgZm9yIHRoZSBDZm5WUE5HYXRld2F5IChhbmQgJ1Jlc291cmNlJyB3b3VsZCBub3QgZG8gdGhhdCkuXG4gICAgY29uc3QgdnBuR1cgPSBuZXcgdnBuR2F0ZXdheS5WcG5HYXRld2F5KHRoaXMsIFwiRGVmYXVsdFwiLCB7XG4gICAgICBhbWF6b25TaWRlQXNuOlxuICAgICAgICBwcm9wcy5hbWF6b25TaWRlQXNuICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IHByb3BzLmFtYXpvblNpZGVBc24udG9TdHJpbmcoKVxuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgIH0pO1xuICAgIHRoaXMuZ2F0ZXdheUlkID0gdnBuR1cuaWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBBdHRyaWJ1dGVzIG9mIGFuIGltcG9ydGVkIFZwbkNvbm5lY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVnBuQ29ubmVjdGlvbkF0dHJpYnV0ZXMge1xuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSBWUE4gY29ubmVjdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IHZwbklkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpZCBvZiB0aGUgY3VzdG9tZXIgZ2F0ZXdheS5cbiAgICovXG4gIHJlYWRvbmx5IGN1c3RvbWVyR2F0ZXdheUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpcCBhZGRyZXNzIG9mIHRoZSBjdXN0b21lciBnYXRld2F5LlxuICAgKi9cbiAgcmVhZG9ubHkgY3VzdG9tZXJHYXRld2F5SXA6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEFTTiBvZiB0aGUgY3VzdG9tZXIgZ2F0ZXdheS5cbiAgICovXG4gIHJlYWRvbmx5IGN1c3RvbWVyR2F0ZXdheUFzbjogbnVtYmVyO1xufVxuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIFZwbiBjb25uZWN0aW9ucy5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFZwbkNvbm5lY3Rpb25CYXNlXG4gIGV4dGVuZHMgQXdzQ29uc3RydWN0QmFzZVxuICBpbXBsZW1lbnRzIElWcG5Db25uZWN0aW9uXG57XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSB2cG5JZDogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgY3VzdG9tZXJHYXRld2F5SWQ6IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGN1c3RvbWVyR2F0ZXdheUlwOiBzdHJpbmc7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBjdXN0b21lckdhdGV3YXlBc246IG51bWJlcjtcbiAgcHVibGljIGdldCB2cG5Db25uZWN0aW9uT3V0cHV0cygpOiBWcG5Db25uZWN0aW9uT3V0cHV0cyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZwbklkOiB0aGlzLnZwbklkLFxuICAgICAgY3VzdG9tZXJHYXRld2F5SWQ6IHRoaXMuY3VzdG9tZXJHYXRld2F5SWQsXG4gICAgICBjdXN0b21lckdhdGV3YXlJcDogdGhpcy5jdXN0b21lckdhdGV3YXlJcCxcbiAgICAgIGN1c3RvbWVyR2F0ZXdheUFzbjogdGhpcy5jdXN0b21lckdhdGV3YXlBc24sXG4gICAgfTtcbiAgfVxuICBwdWJsaWMgZ2V0IG91dHB1dHMoKTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgcmV0dXJuIHRoaXMudnBuQ29ubmVjdGlvbk91dHB1dHM7XG4gIH1cbn1cblxuLyoqXG4gKiBEZWZpbmUgYSBWUE4gQ29ubmVjdGlvblxuICpcbiAqIEByZXNvdXJjZSBBV1M6OkVDMjo6VlBOQ29ubmVjdGlvblxuICovXG5leHBvcnQgY2xhc3MgVnBuQ29ubmVjdGlvbiBleHRlbmRzIFZwbkNvbm5lY3Rpb25CYXNlIHtcbiAgLyoqXG4gICAqIEltcG9ydCBhIFZQTiBjb25uZWN0aW9uIGJ5IHN1cHBseWluZyBhbGwgYXR0cmlidXRlcyBkaXJlY3RseVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tVnBuQ29ubmVjdGlvbkF0dHJpYnV0ZXMoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIGF0dHJzOiBWcG5Db25uZWN0aW9uQXR0cmlidXRlcyxcbiAgKTogSVZwbkNvbm5lY3Rpb24ge1xuICAgIGNsYXNzIEltcG9ydCBleHRlbmRzIFZwbkNvbm5lY3Rpb25CYXNlIHtcbiAgICAgIHB1YmxpYyByZWFkb25seSB2cG5JZDogc3RyaW5nID0gYXR0cnMudnBuSWQ7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgY3VzdG9tZXJHYXRld2F5SWQ6IHN0cmluZyA9IGF0dHJzLmN1c3RvbWVyR2F0ZXdheUlkO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGN1c3RvbWVyR2F0ZXdheUlwOiBzdHJpbmcgPSBhdHRycy5jdXN0b21lckdhdGV3YXlJcDtcbiAgICAgIHB1YmxpYyByZWFkb25seSBjdXN0b21lckdhdGV3YXlBc246IG51bWJlciA9IGF0dHJzLmN1c3RvbWVyR2F0ZXdheUFzbjtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEltcG9ydChzY29wZSwgaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgZ2l2ZW4gbmFtZWQgbWV0cmljIGZvciBhbGwgVlBOIGNvbm5lY3Rpb25zIGluIHRoZSBhY2NvdW50L3JlZ2lvbi5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWV0cmljQWxsKFxuICAgIG1ldHJpY05hbWU6IHN0cmluZyxcbiAgICBwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyxcbiAgKTogY2xvdWR3YXRjaC5NZXRyaWMge1xuICAgIHJldHVybiBuZXcgY2xvdWR3YXRjaC5NZXRyaWMoe1xuICAgICAgbmFtZXNwYWNlOiBcIkFXUy9WUE5cIixcbiAgICAgIG1ldHJpY05hbWUsXG4gICAgICAuLi5wcm9wcyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIHRoZSB0dW5uZWwgc3RhdGUgb2YgYWxsIFZQTiBjb25uZWN0aW9ucyBpbiB0aGUgYWNjb3VudC9yZWdpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IGF2ZXJhZ2Ugb3ZlciA1IG1pbnV0ZXNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWV0cmljQWxsVHVubmVsU3RhdGUoXG4gICAgcHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMsXG4gICk6IGNsb3Vkd2F0Y2guTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWNBbGwoXCJUdW5uZWxTdGF0ZVwiLCB7IHN0YXRpc3RpYzogXCJhdmdcIiwgLi4ucHJvcHMgfSk7XG4gIH1cblxuICAvKipcbiAgICogTWV0cmljIGZvciB0aGUgdHVubmVsIGRhdGEgaW4gb2YgYWxsIFZQTiBjb25uZWN0aW9ucyBpbiB0aGUgYWNjb3VudC9yZWdpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IHN1bSBvdmVyIDUgbWludXRlc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtZXRyaWNBbGxUdW5uZWxEYXRhSW4oXG4gICAgcHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMsXG4gICk6IGNsb3Vkd2F0Y2guTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWNBbGwoXCJUdW5uZWxEYXRhSW5cIiwgeyBzdGF0aXN0aWM6IFwic3VtXCIsIC4uLnByb3BzIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldHJpYyBmb3IgdGhlIHR1bm5lbCBkYXRhIG91dCBvZiBhbGwgVlBOIGNvbm5lY3Rpb25zLlxuICAgKlxuICAgKiBAZGVmYXVsdCBzdW0gb3ZlciA1IG1pbnV0ZXNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWV0cmljQWxsVHVubmVsRGF0YU91dChcbiAgICBwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyxcbiAgKTogY2xvdWR3YXRjaC5NZXRyaWMge1xuICAgIHJldHVybiB0aGlzLm1ldHJpY0FsbChcIlR1bm5lbERhdGFPdXRcIiwgeyBzdGF0aXN0aWM6IFwic3VtXCIsIC4uLnByb3BzIH0pO1xuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IHZwbklkOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBjdXN0b21lckdhdGV3YXlJZDogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgY3VzdG9tZXJHYXRld2F5SXA6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGN1c3RvbWVyR2F0ZXdheUFzbjogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBWcG5Db25uZWN0aW9uUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgaWYgKCFwcm9wcy52cGMudnBuR2F0ZXdheUlkKSB7XG4gICAgICBwcm9wcy52cGMuZW5hYmxlVnBuR2F0ZXdheSh7XG4gICAgICAgIHR5cGU6IFwiaXBzZWMuMVwiLFxuICAgICAgICBhbWF6b25TaWRlQXNuOiBwcm9wcy5hc24sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoIVRva2VuLmlzVW5yZXNvbHZlZChwcm9wcy5pcCkgJiYgIW5ldC5pc0lQdjQocHJvcHMuaXApKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBcXGBpcFxcYCAke3Byb3BzLmlwfSBpcyBub3QgYSB2YWxpZCBJUHY0IGFkZHJlc3MuYCk7XG4gICAgfVxuXG4gICAgY29uc3QgdHlwZSA9IFZwbkNvbm5lY3Rpb25UeXBlLklQU0VDXzE7XG4gICAgY29uc3QgYmdwQXNuID0gcHJvcHMuYXNuIHx8IDY1MDAwO1xuXG4gICAgY29uc3QgY3VzdG9tZXJHdyA9IG5ldyBjdXN0b21lckdhdGV3YXkuQ3VzdG9tZXJHYXRld2F5KFxuICAgICAgdGhpcyxcbiAgICAgIFwiQ3VzdG9tZXJHYXRld2F5XCIsXG4gICAgICB7XG4gICAgICAgIGJncEFzbjogYmdwQXNuLnRvU3RyaW5nKCksXG4gICAgICAgIGlwQWRkcmVzczogcHJvcHMuaXAsXG4gICAgICAgIHR5cGUsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICB0aGlzLmN1c3RvbWVyR2F0ZXdheUlkID0gY3VzdG9tZXJHdy5pZDtcbiAgICB0aGlzLmN1c3RvbWVyR2F0ZXdheUFzbiA9IGJncEFzbjtcbiAgICB0aGlzLmN1c3RvbWVyR2F0ZXdheUlwID0gcHJvcHMuaXA7XG5cbiAgICBjb25zdCB2cG5UdW5uZWxPcHRpb25zU3BlY2lmaWNhdGlvbnM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICAvLyBWYWxpZGF0ZSB0dW5uZWwgb3B0aW9uc1xuICAgIGlmIChwcm9wcy50dW5uZWxPcHRpb25zKSB7XG4gICAgICBpZiAocHJvcHMudHVubmVsT3B0aW9ucy5sZW5ndGggPiAyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBzcGVjaWZ5IG1vcmUgdGhhbiB0d28gYHR1bm5lbE9wdGlvbnNgXCIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIHByb3BzLnR1bm5lbE9wdGlvbnMubGVuZ3RoID09PSAyICYmXG4gICAgICAgIHByb3BzLnR1bm5lbE9wdGlvbnNbMF0udHVubmVsSW5zaWRlQ2lkciA9PT1cbiAgICAgICAgICBwcm9wcy50dW5uZWxPcHRpb25zWzFdLnR1bm5lbEluc2lkZUNpZHIgJiZcbiAgICAgICAgcHJvcHMudHVubmVsT3B0aW9uc1swXS50dW5uZWxJbnNpZGVDaWRyICE9PSB1bmRlZmluZWRcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFNhbWUgJHtwcm9wcy50dW5uZWxPcHRpb25zWzBdLnR1bm5lbEluc2lkZUNpZHJ9IFxcYHR1bm5lbEluc2lkZUNpZHJcXGAgY2Fubm90IGJlIHVzZWQgZm9yIGJvdGggdHVubmVscy5gLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBwcm9wcy50dW5uZWxPcHRpb25zLmZvckVhY2goKG9wdGlvbnMsIGluZGV4KSA9PiB7XG4gICAgICAgIC8vIGlmIChvcHRpb25zLnByZVNoYXJlZEtleSAmJiBvcHRpb25zLnByZVNoYXJlZEtleVNlY3JldCkge1xuICAgICAgICAvLyAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgLy8gICAgIFwiU3BlY2lmeSBhdCBtb3N0IG9uZSBvZiAncHJlU2hhcmVkS2V5JyBhbmQgJ3ByZVNoYXJlZEtleVNlY3JldCcuXCIsXG4gICAgICAgIC8vICAgKTtcbiAgICAgICAgLy8gfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBvcHRpb25zLnByZVNoYXJlZEtleSAmJlxuICAgICAgICAgICFUb2tlbi5pc1VucmVzb2x2ZWQob3B0aW9ucy5wcmVTaGFyZWRLZXkpICYmXG4gICAgICAgICAgIS9eW2EtekEtWjEtOS5fXVthLXpBLVpcXGQuX117Nyw2M30kLy50ZXN0KG9wdGlvbnMucHJlU2hhcmVkS2V5KVxuICAgICAgICApIHtcbiAgICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYFRoZSBcXGBwcmVTaGFyZWRLZXlcXGAgJHtvcHRpb25zLnByZVNoYXJlZEtleX0gZm9yIHR1bm5lbCAke2luZGV4ICsgMX0gaXMgaW52YWxpZC4gQWxsb3dlZCBjaGFyYWN0ZXJzIGFyZSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyBhbmQgLl8uIE11c3QgYmUgYmV0d2VlbiA4IGFuZCA2NCBjaGFyYWN0ZXJzIGluIGxlbmd0aCBhbmQgY2Fubm90IHN0YXJ0IHdpdGggemVybyAoMCkuYCxcbiAgICAgICAgICApO1xuICAgICAgICAgIC8qIGVzbGludC1lbmFibGUgbWF4LWxlbiAqL1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMudHVubmVsSW5zaWRlQ2lkcikge1xuICAgICAgICAgIGlmIChSRVNFUlZFRF9UVU5ORUxfSU5TSURFX0NJRFIuaW5jbHVkZXMob3B0aW9ucy50dW5uZWxJbnNpZGVDaWRyKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICBgVGhlIFxcYHR1bm5lbEluc2lkZUNpZHJcXGAgJHtvcHRpb25zLnR1bm5lbEluc2lkZUNpZHJ9IGZvciB0dW5uZWwgJHtpbmRleCArIDF9IGlzIGEgcmVzZXJ2ZWQgaW5zaWRlIENJRFIuYCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIS9eMTY5XFwuMjU0XFwuXFxkezEsM31cXC5cXGR7MSwzfVxcLzMwJC8udGVzdChvcHRpb25zLnR1bm5lbEluc2lkZUNpZHIpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlbiAqL1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICBgVGhlIFxcYHR1bm5lbEluc2lkZUNpZHJcXGAgJHtvcHRpb25zLnR1bm5lbEluc2lkZUNpZHJ9IGZvciB0dW5uZWwgJHtpbmRleCArIDF9IGlzIG5vdCBhIHNpemUgLzMwIENJRFIgYmxvY2sgZnJvbSB0aGUgMTY5LjI1NC4wLjAvMTYgcmFuZ2UuYCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gVmFsaWRhdGUgcmVrZXlGdXp6UGVyY2VudGFnZVxuICAgICAgICAgIGlmIChvcHRpb25zLnJla2V5RnV6elBlcmNlbnRhZ2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBvcHRpb25zLnJla2V5RnV6elBlcmNlbnRhZ2UgPCAwIHx8XG4gICAgICAgICAgICAgIG9wdGlvbnMucmVrZXlGdXp6UGVyY2VudGFnZSA+IDEwMFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBgcmVrZXlGdXp6UGVyY2VudGFnZSBmb3IgdHVubmVsICR7aW5kZXggKyAxfSBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMTAwYCxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBWYWxpZGF0ZSByZWtleU1hcmdpblRpbWVTZWNvbmRzXG4gICAgICAgICAgaWYgKG9wdGlvbnMucmVrZXlNYXJnaW5UaW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnJla2V5TWFyZ2luVGltZS50b1NlY29uZHMoKSA8IDYwKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBgcmVrZXlNYXJnaW5UaW1lIGZvciB0dW5uZWwgJHtpbmRleCArIDF9IG11c3QgYmUgYXQgbGVhc3QgNjAgc2Vjb25kc2AsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIENoZWNrIGlmIGl0J3MgbGVzcyB0aGFuIGhhbGYgb2YgcGhhc2UyTGlmZXRpbWVTZWNvbmRzXG4gICAgICAgICAgICBjb25zdCBwaGFzZTJMaWZldGltZSA9IG9wdGlvbnMucGhhc2UyTGlmZXRpbWUgfHwgRHVyYXRpb24uaG91cnMoMSk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIG9wdGlvbnMucmVrZXlNYXJnaW5UaW1lLnRvU2Vjb25kcygpID5cbiAgICAgICAgICAgICAgcGhhc2UyTGlmZXRpbWUudG9TZWNvbmRzKCkgLyAyXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgIGByZWtleU1hcmdpblRpbWUgZm9yIHR1bm5lbCAke2luZGV4ICsgMX0gbXVzdCBiZSBsZXNzIHRoYW4gaGFsZiBvZiBwaGFzZTJMaWZldGltZSAoJHtwaGFzZTJMaWZldGltZS50b1NlY29uZHMoKSAvIDJ9KWAsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gVmFsaWRhdGUgcmVwbGF5V2luZG93U2l6ZVxuICAgICAgICAgIGlmIChvcHRpb25zLnJlcGxheVdpbmRvd1NpemUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBvcHRpb25zLnJlcGxheVdpbmRvd1NpemUgPCA2NCB8fFxuICAgICAgICAgICAgICBvcHRpb25zLnJlcGxheVdpbmRvd1NpemUgPiAyMDQ4XG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgIGByZXBsYXlXaW5kb3dTaXplIGZvciB0dW5uZWwgJHtpbmRleCArIDF9IG11c3QgYmUgYmV0d2VlbiA2NCBhbmQgMjA0OGAsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gTWFwIHR1bm5lbCBvcHRpb25zIHRvIEFXUyBwcm92aWRlciBmb3JtYXRcbiAgICAgICAgY29uc3QgdHVubmVsUHJlZml4ID0gYHR1bm5lbCR7aW5kZXggKyAxfWA7XG4gICAgICAgIE9iamVjdC5hc3NpZ24odnBuVHVubmVsT3B0aW9uc1NwZWNpZmljYXRpb25zLCB7XG4gICAgICAgICAgW2Ake3R1bm5lbFByZWZpeH1QcmVzaGFyZWRLZXlgXTogb3B0aW9ucy5wcmVTaGFyZWRLZXksXG4gICAgICAgICAgW2Ake3R1bm5lbFByZWZpeH1JbnNpZGVDaWRyYF06IG9wdGlvbnMudHVubmVsSW5zaWRlQ2lkcixcbiAgICAgICAgICBbYCR7dHVubmVsUHJlZml4fURwZFRpbWVvdXRBY3Rpb25gXTogb3B0aW9ucy5kcGRUaW1lb3V0QWN0aW9uLFxuICAgICAgICAgIFtgJHt0dW5uZWxQcmVmaXh9RHBkVGltZW91dFNlY29uZHNgXTogb3B0aW9ucy5kcGRUaW1lb3V0Py50b1NlY29uZHMoKSxcbiAgICAgICAgICBbYCR7dHVubmVsUHJlZml4fUVuYWJsZVR1bm5lbExpZmVjeWNsZUNvbnRyb2xgXTpcbiAgICAgICAgICAgIG9wdGlvbnMuZW5hYmxlVHVubmVsTGlmZWN5Y2xlQ29udHJvbCxcbiAgICAgICAgICBbYCR7dHVubmVsUHJlZml4fUlrZVZlcnNpb25zYF06IG9wdGlvbnMuaWtlVmVyc2lvbnMsXG4gICAgICAgICAgW2Ake3R1bm5lbFByZWZpeH1QaGFzZTFEaEdyb3VwTnVtYmVyc2BdOiBvcHRpb25zLnBoYXNlMURoR3JvdXBOdW1iZXJzLFxuICAgICAgICAgIFtgJHt0dW5uZWxQcmVmaXh9UGhhc2UxRW5jcnlwdGlvbkFsZ29yaXRobXNgXTpcbiAgICAgICAgICAgIG9wdGlvbnMucGhhc2UxRW5jcnlwdGlvbkFsZ29yaXRobXMsXG4gICAgICAgICAgW2Ake3R1bm5lbFByZWZpeH1QaGFzZTFJbnRlZ3JpdHlBbGdvcml0aG1zYF06XG4gICAgICAgICAgICBvcHRpb25zLnBoYXNlMUludGVncml0eUFsZ29yaXRobXMsXG4gICAgICAgICAgW2Ake3R1bm5lbFByZWZpeH1QaGFzZTFMaWZldGltZVNlY29uZHNgXTpcbiAgICAgICAgICAgIG9wdGlvbnMucGhhc2UxTGlmZXRpbWU/LnRvU2Vjb25kcygpLFxuICAgICAgICAgIFtgJHt0dW5uZWxQcmVmaXh9UGhhc2UyRGhHcm91cE51bWJlcnNgXTogb3B0aW9ucy5waGFzZTJEaEdyb3VwTnVtYmVycyxcbiAgICAgICAgICBbYCR7dHVubmVsUHJlZml4fVBoYXNlMkVuY3J5cHRpb25BbGdvcml0aG1zYF06XG4gICAgICAgICAgICBvcHRpb25zLnBoYXNlMkVuY3J5cHRpb25BbGdvcml0aG1zLFxuICAgICAgICAgIFtgJHt0dW5uZWxQcmVmaXh9UGhhc2UySW50ZWdyaXR5QWxnb3JpdGhtc2BdOlxuICAgICAgICAgICAgb3B0aW9ucy5waGFzZTJJbnRlZ3JpdHlBbGdvcml0aG1zLFxuICAgICAgICAgIFtgJHt0dW5uZWxQcmVmaXh9UGhhc2UyTGlmZXRpbWVTZWNvbmRzYF06XG4gICAgICAgICAgICBvcHRpb25zLnBoYXNlMkxpZmV0aW1lPy50b1NlY29uZHMoKSxcbiAgICAgICAgICBbYCR7dHVubmVsUHJlZml4fVN0YXJ0dXBBY3Rpb25gXTogb3B0aW9ucy5zdGFydHVwQWN0aW9uLFxuICAgICAgICAgIFtgJHt0dW5uZWxQcmVmaXh9UmVrZXlGdXp6UGVyY2VudGFnZWBdOiBvcHRpb25zLnJla2V5RnV6elBlcmNlbnRhZ2UsXG4gICAgICAgICAgW2Ake3R1bm5lbFByZWZpeH1SZWtleU1hcmdpblRpbWVTZWNvbmRzYF06XG4gICAgICAgICAgICBvcHRpb25zLnJla2V5TWFyZ2luVGltZT8udG9TZWNvbmRzKCksXG4gICAgICAgICAgW2Ake3R1bm5lbFByZWZpeH1SZXBsYXlXaW5kb3dTaXplYF06IG9wdGlvbnMucmVwbGF5V2luZG93U2l6ZSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCByZXNvdXJjZSA9IG5ldyB2cG5Db25uZWN0aW9uLlZwbkNvbm5lY3Rpb24odGhpcywgXCJSZXNvdXJjZVwiLCB7XG4gICAgICB0eXBlLFxuICAgICAgY3VzdG9tZXJHYXRld2F5SWQ6IGN1c3RvbWVyR3cuaWQsXG4gICAgICBzdGF0aWNSb3V0ZXNPbmx5OiBwcm9wcy5zdGF0aWNSb3V0ZXMgPyB0cnVlIDogZmFsc2UsXG4gICAgICB2cG5HYXRld2F5SWQ6IHByb3BzLnZwYy52cG5HYXRld2F5SWQsXG4gICAgICAuLi52cG5UdW5uZWxPcHRpb25zU3BlY2lmaWNhdGlvbnMsXG4gICAgfSk7XG5cbiAgICB0aGlzLnZwbklkID0gcmVzb3VyY2UuaWQ7XG5cbiAgICBpZiAocHJvcHMuc3RhdGljUm91dGVzKSB7XG4gICAgICBwcm9wcy5zdGF0aWNSb3V0ZXMuZm9yRWFjaCgocm91dGUpID0+IHtcbiAgICAgICAgbmV3IHZwbkNvbm5lY3Rpb25Sb3V0ZS5WcG5Db25uZWN0aW9uUm91dGUoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBgUm91dGUke3JvdXRlLnJlcGxhY2UoL1teXFxkXS9nLCBcIlwiKX1gLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uQ2lkckJsb2NrOiByb3V0ZSxcbiAgICAgICAgICAgIHZwbkNvbm5lY3Rpb25JZDogdGhpcy52cG5JZCxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjb25zdCBSRVNFUlZFRF9UVU5ORUxfSU5TSURFX0NJRFIgPSBbXG4gIFwiMTY5LjI1NC4wLjAvMzBcIixcbiAgXCIxNjkuMjU0LjEuMC8zMFwiLFxuICBcIjE2OS4yNTQuMi4wLzMwXCIsXG4gIFwiMTY5LjI1NC4zLjAvMzBcIixcbiAgXCIxNjkuMjU0LjQuMC8zMFwiLFxuICBcIjE2OS4yNTQuNS4wLzMwXCIsXG4gIFwiMTY5LjI1NC4xNjkuMjUyLzMwXCIsXG5dO1xuXG4vKipcbiAqIEFjdGlvbiB0byB0YWtlIGFmdGVyIERQRCB0aW1lb3V0IG9jY3Vyc1xuICovXG5leHBvcnQgZW51bSBEcGRUaW1lb3V0QWN0aW9uIHtcbiAgLyoqXG4gICAqIEVuZCB0aGUgSUtFIHNlc3Npb25cbiAgICovXG4gIENMRUFSID0gXCJjbGVhclwiLFxuXG4gIC8qKlxuICAgKiBUYWtlIG5vIGFjdGlvblxuICAgKi9cbiAgTk9ORSA9IFwibm9uZVwiLFxuXG4gIC8qKlxuICAgKiBSZXN0YXJ0IHRoZSBJS0UgaW5pdGlhdGlvblxuICAgKi9cbiAgUkVTVEFSVCA9IFwicmVzdGFydFwiLFxufVxuXG4vKipcbiAqIElLRSB2ZXJzaW9ucyBwZXJtaXR0ZWQgZm9yIFZQTiB0dW5uZWxzXG4gKi9cbmV4cG9ydCBlbnVtIElrZVZlcnNpb24ge1xuICAvKipcbiAgICogSUtFIHZlcnNpb24gMVxuICAgKi9cbiAgSUtFVjEgPSBcImlrZXYxXCIsXG5cbiAgLyoqXG4gICAqIElLRSB2ZXJzaW9uIDJcbiAgICovXG4gIElLRVYyID0gXCJpa2V2MlwiLFxufVxuXG4vKipcbiAqIFBoYXNlIDEgYW5kIDIgZW5jcnlwdGlvbiBhbGdvcml0aG1zXG4gKi9cbmV4cG9ydCBlbnVtIEVuY3J5cHRpb25BbGdvcml0aG0ge1xuICAvKipcbiAgICogQUVTIHdpdGggMTI4LWJpdCBrZXlcbiAgICovXG4gIEFFUzEyOCA9IFwiQUVTMTI4XCIsXG5cbiAgLyoqXG4gICAqIEFFUyB3aXRoIDI1Ni1iaXQga2V5XG4gICAqL1xuICBBRVMyNTYgPSBcIkFFUzI1NlwiLFxuXG4gIC8qKlxuICAgKiBBRVMtR0NNIHdpdGggMTI4LWJpdCBrZXkgYW5kIDE2IGJ5dGUgaW50ZWdyaXR5IGNoZWNrXG4gICAqL1xuICBBRVMxMjhfR0NNXzE2ID0gXCJBRVMxMjgtR0NNLTE2XCIsXG5cbiAgLyoqXG4gICAqIEFFUy1HQ00gd2l0aCAyNTYtYml0IGtleSBhbmQgMTYgYnl0ZSBpbnRlZ3JpdHkgY2hlY2tcbiAgICovXG4gIEFFUzI1Nl9HQ01fMTYgPSBcIkFFUzI1Ni1HQ00tMTZcIixcbn1cblxuLyoqXG4gKiBQaGFzZSAxIGFuZCAyIGludGVncml0eSBhbGdvcml0aG1zXG4gKi9cbmV4cG9ydCBlbnVtIEludGVncml0eUFsZ29yaXRobSB7XG4gIC8qKlxuICAgKiBTSEEtMSBoYXNoIGFsZ29yaXRobVxuICAgKi9cbiAgU0hBMSA9IFwiU0hBMVwiLFxuXG4gIC8qKlxuICAgKiBTSEEtMiB3aXRoIDI1Ni1iaXQgZGlnZXN0XG4gICAqL1xuICBTSEEyXzI1NiA9IFwiU0hBMi0yNTZcIixcblxuICAvKipcbiAgICogU0hBLTIgd2l0aCAzODQtYml0IGRpZ2VzdFxuICAgKi9cbiAgU0hBMl8zODQgPSBcIlNIQTItMzg0XCIsXG5cbiAgLyoqXG4gICAqIFNIQS0yIHdpdGggNTEyLWJpdCBkaWdlc3RcbiAgICovXG4gIFNIQTJfNTEyID0gXCJTSEEyLTUxMlwiLFxufVxuXG4vKipcbiAqIFBoYXNlIDEgRGlmZmllLUhlbGxtYW4gZ3JvdXAgbnVtYmVyc1xuICovXG5leHBvcnQgZW51bSBQaGFzZTFEaEdyb3VwTnVtYmVyIHtcbiAgR1JPVVBfMiA9IDIsXG4gIEdST1VQXzE0ID0gMTQsXG4gIEdST1VQXzE1ID0gMTUsXG4gIEdST1VQXzE2ID0gMTYsXG4gIEdST1VQXzE3ID0gMTcsXG4gIEdST1VQXzE4ID0gMTgsXG4gIEdST1VQXzE5ID0gMTksXG4gIEdST1VQXzIwID0gMjAsXG4gIEdST1VQXzIxID0gMjEsXG4gIEdST1VQXzIyID0gMjIsXG4gIEdST1VQXzIzID0gMjMsXG4gIEdST1VQXzI0ID0gMjQsXG59XG5cbi8qKlxuICogUGhhc2UgMiBEaWZmaWUtSGVsbG1hbiBncm91cCBudW1iZXJzXG4gKi9cbmV4cG9ydCBlbnVtIFBoYXNlMkRoR3JvdXBOdW1iZXIge1xuICBHUk9VUF8yID0gMixcbiAgR1JPVVBfNSA9IDUsXG4gIEdST1VQXzE0ID0gMTQsXG4gIEdST1VQXzE1ID0gMTUsXG4gIEdST1VQXzE2ID0gMTYsXG4gIEdST1VQXzE3ID0gMTcsXG4gIEdST1VQXzE4ID0gMTgsXG4gIEdST1VQXzE5ID0gMTksXG4gIEdST1VQXzIwID0gMjAsXG4gIEdST1VQXzIxID0gMjEsXG4gIEdST1VQXzIyID0gMjIsXG4gIEdST1VQXzIzID0gMjMsXG4gIEdST1VQXzI0ID0gMjQsXG59XG5cbi8qKlxuICogVHVubmVsIHN0YXJ0dXAgYWN0aW9uXG4gKi9cbmV4cG9ydCBlbnVtIFR1bm5lbFN0YXJ0dXBBY3Rpb24ge1xuICAvKipcbiAgICogQ3VzdG9tZXIgZ2F0ZXdheSBtdXN0IGluaXRpYXRlIElLRSBuZWdvdGlhdGlvblxuICAgKi9cbiAgQUREID0gXCJhZGRcIixcblxuICAvKipcbiAgICogQVdTIHdpbGwgaW5pdGlhdGUgSUtFIG5lZ290aWF0aW9uXG4gICAqL1xuICBTVEFSVCA9IFwic3RhcnRcIixcbn1cbiJdfQ==