terraconstructs 0.2.4 → 0.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (412) hide show
  1. package/.jsii +3099 -2917
  2. package/CLAUDE.md +6 -6
  3. package/README.md +1 -1
  4. package/lib/asset-staging.js +3 -3
  5. package/lib/aws/arn.js +5 -5
  6. package/lib/aws/aws-asset-manager.js +9 -9
  7. package/lib/aws/aws-construct.js +1 -1
  8. package/lib/aws/aws-stack.d.ts +19 -4
  9. package/lib/aws/aws-stack.js +43 -18
  10. package/lib/aws/aws-tags.d.ts +1 -1
  11. package/lib/aws/aws-tags.js +5 -5
  12. package/lib/aws/cloudwatch/actions/appscaling.js +1 -1
  13. package/lib/aws/cloudwatch/actions/ec2.js +1 -1
  14. package/lib/aws/cloudwatch/actions/lambda.js +2 -2
  15. package/lib/aws/cloudwatch/actions/sns.js +1 -1
  16. package/lib/aws/cloudwatch/actions/ssm.js +2 -2
  17. package/lib/aws/cloudwatch/alarm-base.js +1 -1
  18. package/lib/aws/cloudwatch/alarm-rule.js +1 -1
  19. package/lib/aws/cloudwatch/alarm-status-widget.js +1 -1
  20. package/lib/aws/cloudwatch/alarm.d.ts +1 -1
  21. package/lib/aws/cloudwatch/alarm.js +10 -10
  22. package/lib/aws/cloudwatch/composite-alarm.d.ts +1 -1
  23. package/lib/aws/cloudwatch/composite-alarm.js +7 -7
  24. package/lib/aws/cloudwatch/dashboard.d.ts +1 -1
  25. package/lib/aws/cloudwatch/dashboard.js +7 -7
  26. package/lib/aws/cloudwatch/data-protection-policy.d.ts +1 -1
  27. package/lib/aws/cloudwatch/data-protection-policy.js +5 -5
  28. package/lib/aws/cloudwatch/graph.js +8 -8
  29. package/lib/aws/cloudwatch/layout.js +3 -3
  30. package/lib/aws/cloudwatch/log-destinations/kinesis.js +1 -1
  31. package/lib/aws/cloudwatch/log-destinations/lambda.js +1 -1
  32. package/lib/aws/cloudwatch/log-group.d.ts +1 -1
  33. package/lib/aws/cloudwatch/log-group.js +7 -7
  34. package/lib/aws/cloudwatch/log-query.js +1 -1
  35. package/lib/aws/cloudwatch/log-stream.d.ts +1 -1
  36. package/lib/aws/cloudwatch/log-stream.js +3 -3
  37. package/lib/aws/cloudwatch/metric-filter.d.ts +1 -1
  38. package/lib/aws/cloudwatch/metric-filter.js +3 -3
  39. package/lib/aws/cloudwatch/metric.js +6 -6
  40. package/lib/aws/cloudwatch/pattern.js +3 -3
  41. package/lib/aws/cloudwatch/policy.d.ts +1 -1
  42. package/lib/aws/cloudwatch/policy.js +3 -3
  43. package/lib/aws/cloudwatch/private/drop-empty-object-at-the-end-of-an-array-token.d.ts +1 -1
  44. package/lib/aws/cloudwatch/private/drop-empty-object-at-the-end-of-an-array-token.js +1 -1
  45. package/lib/aws/cloudwatch/private/env-tokens.js +6 -6
  46. package/lib/aws/cloudwatch/query-definition.d.ts +1 -1
  47. package/lib/aws/cloudwatch/query-definition.js +4 -4
  48. package/lib/aws/cloudwatch/stats.js +1 -1
  49. package/lib/aws/cloudwatch/subscription-filter.d.ts +1 -1
  50. package/lib/aws/cloudwatch/subscription-filter.js +6 -6
  51. package/lib/aws/cloudwatch/text.js +1 -1
  52. package/lib/aws/cloudwatch/variable.js +3 -3
  53. package/lib/aws/cloudwatch/widget.js +1 -1
  54. package/lib/aws/compute/access-log.d.ts +1 -1
  55. package/lib/aws/compute/access-log.js +5 -5
  56. package/lib/aws/compute/activity.d.ts +1 -1
  57. package/lib/aws/compute/activity.js +5 -5
  58. package/lib/aws/compute/alb/application-listener-action.d.ts +1 -1
  59. package/lib/aws/compute/alb/application-listener-action.js +5 -5
  60. package/lib/aws/compute/alb/application-listener-certificate.js +3 -3
  61. package/lib/aws/compute/alb/application-listener-rule.js +9 -9
  62. package/lib/aws/compute/alb/application-listener.js +5 -5
  63. package/lib/aws/compute/alb/application-load-balancer.js +8 -8
  64. package/lib/aws/compute/alb/application-target-group.js +7 -7
  65. package/lib/aws/compute/alb/conditions.js +3 -3
  66. package/lib/aws/compute/alb/trust-store-revocation.js +3 -3
  67. package/lib/aws/compute/alb/trust-store.js +7 -7
  68. package/lib/aws/compute/api-definition.js +9 -9
  69. package/lib/aws/compute/api-key.js +6 -6
  70. package/lib/aws/compute/architecture.js +1 -1
  71. package/lib/aws/compute/aspects/require-imdsv2-aspect.d.ts +1 -1
  72. package/lib/aws/compute/aspects/require-imdsv2-aspect.js +6 -6
  73. package/lib/aws/compute/authorizer.js +1 -1
  74. package/lib/aws/compute/authorizers/identity-source.js +1 -1
  75. package/lib/aws/compute/authorizers/lambda.d.ts +1 -1
  76. package/lib/aws/compute/authorizers/lambda.js +6 -6
  77. package/lib/aws/compute/base-path-mapping.js +5 -5
  78. package/lib/aws/compute/base-scalable-attribute.js +1 -1
  79. package/lib/aws/compute/bastion-host.js +4 -4
  80. package/lib/aws/compute/chain.js +1 -1
  81. package/lib/aws/compute/client-vpn-authorization-rule.js +3 -3
  82. package/lib/aws/compute/client-vpn-endpoint.d.ts +1 -1
  83. package/lib/aws/compute/client-vpn-endpoint.js +9 -9
  84. package/lib/aws/compute/client-vpn-route.d.ts +1 -1
  85. package/lib/aws/compute/client-vpn-route.js +4 -4
  86. package/lib/aws/compute/code.d.ts +3 -3
  87. package/lib/aws/compute/code.js +15 -15
  88. package/lib/aws/compute/condition.js +1 -1
  89. package/lib/aws/compute/connections.js +1 -1
  90. package/lib/aws/compute/cors.js +1 -1
  91. package/lib/aws/compute/deployment.js +5 -5
  92. package/lib/aws/compute/domain-name.js +5 -5
  93. package/lib/aws/compute/event-invoke-config.d.ts +1 -1
  94. package/lib/aws/compute/event-invoke-config.js +3 -3
  95. package/lib/aws/compute/event-source-filter.js +2 -2
  96. package/lib/aws/compute/event-source-mapping.js +7 -7
  97. package/lib/aws/compute/event-sources/s3-onfailure-destination.js +1 -1
  98. package/lib/aws/compute/event-sources/s3.js +1 -1
  99. package/lib/aws/compute/event-sources/sqs-dlq.js +1 -1
  100. package/lib/aws/compute/event-sources/sqs.js +5 -5
  101. package/lib/aws/compute/fields.d.ts +1 -1
  102. package/lib/aws/compute/fields.js +12 -12
  103. package/lib/aws/compute/function-alias.d.ts +1 -1
  104. package/lib/aws/compute/function-alias.js +3 -3
  105. package/lib/aws/compute/function-base.d.ts +1 -1
  106. package/lib/aws/compute/function-base.js +10 -9
  107. package/lib/aws/compute/function-destinations/event-bridge.js +1 -1
  108. package/lib/aws/compute/function-destinations/function.js +1 -1
  109. package/lib/aws/compute/function-destinations/sqs.js +1 -1
  110. package/lib/aws/compute/function-nodejs/bundling.js +6 -6
  111. package/lib/aws/compute/function-nodejs/function.js +4 -4
  112. package/lib/aws/compute/function-url.d.ts +1 -1
  113. package/lib/aws/compute/function-url.js +3 -3
  114. package/lib/aws/compute/function-vpc-config.generated.d.ts +5 -5
  115. package/lib/aws/compute/function-vpc-config.generated.js +1 -1
  116. package/lib/aws/compute/function.d.ts +2 -2
  117. package/lib/aws/compute/function.js +9 -9
  118. package/lib/aws/compute/gateway-response.d.ts +1 -1
  119. package/lib/aws/compute/gateway-response.js +4 -4
  120. package/lib/aws/compute/handler.js +1 -1
  121. package/lib/aws/compute/instance-types.js +1 -1
  122. package/lib/aws/compute/instance.d.ts +1 -1
  123. package/lib/aws/compute/instance.js +9 -9
  124. package/lib/aws/compute/integration.js +4 -4
  125. package/lib/aws/compute/integrations/aws.js +3 -3
  126. package/lib/aws/compute/integrations/http.js +1 -1
  127. package/lib/aws/compute/integrations/lambda.js +5 -5
  128. package/lib/aws/compute/integrations/mock.js +1 -1
  129. package/lib/aws/compute/integrations/stepfunctions.js +4 -4
  130. package/lib/aws/compute/ip-addresses.d.ts +1 -1
  131. package/lib/aws/compute/ip-addresses.js +10 -10
  132. package/lib/aws/compute/ipam.d.ts +1 -1
  133. package/lib/aws/compute/ipam.js +5 -5
  134. package/lib/aws/compute/key-pair.d.ts +1 -1
  135. package/lib/aws/compute/key-pair.js +6 -6
  136. package/lib/aws/compute/lambda-api.js +1 -1
  137. package/lib/aws/compute/launch-template.d.ts +1 -1
  138. package/lib/aws/compute/launch-template.js +12 -12
  139. package/lib/aws/compute/lb-shared/base-listener.js +9 -9
  140. package/lib/aws/compute/lb-shared/base-load-balancer.d.ts +2 -2
  141. package/lib/aws/compute/lb-shared/base-load-balancer.js +12 -12
  142. package/lib/aws/compute/lb-shared/base-target-group.d.ts +1 -1
  143. package/lib/aws/compute/lb-shared/base-target-group.js +15 -15
  144. package/lib/aws/compute/lb-shared/lb-listener-config.generated.d.ts +34 -34
  145. package/lib/aws/compute/lb-shared/lb-listener-config.generated.js +1 -1
  146. package/lib/aws/compute/lb-shared/lb-target-group-attachment-config.generated.d.ts +11 -6
  147. package/lib/aws/compute/lb-shared/lb-target-group-attachment-config.generated.js +1 -1
  148. package/lib/aws/compute/lb-shared/listener-action.d.ts +1 -1
  149. package/lib/aws/compute/lb-shared/listener-action.js +1 -1
  150. package/lib/aws/compute/lb-shared/listener-certificate.js +1 -1
  151. package/lib/aws/compute/lb-shared/load-balancer-targets.js +2 -2
  152. package/lib/aws/compute/lb-shared/util.js +5 -5
  153. package/lib/aws/compute/lb-targets/alb-target.js +3 -3
  154. package/lib/aws/compute/lb-targets/instance-target.js +2 -2
  155. package/lib/aws/compute/lb-targets/ip-target.js +1 -1
  156. package/lib/aws/compute/lb-targets/lambda-target.js +1 -1
  157. package/lib/aws/compute/load-balancer.d.ts +1 -1
  158. package/lib/aws/compute/load-balancer.js +8 -8
  159. package/lib/aws/compute/machine-image/amazon-linux-2022.js +2 -2
  160. package/lib/aws/compute/machine-image/amazon-linux-2023.js +2 -2
  161. package/lib/aws/compute/machine-image/amazon-linux2.js +2 -2
  162. package/lib/aws/compute/machine-image/common.js +1 -1
  163. package/lib/aws/compute/machine-image/machine-image.js +10 -10
  164. package/lib/aws/compute/method.js +6 -6
  165. package/lib/aws/compute/model.js +5 -5
  166. package/lib/aws/compute/nat.js +10 -10
  167. package/lib/aws/compute/network-acl-types.js +2 -2
  168. package/lib/aws/compute/network-acl.d.ts +1 -1
  169. package/lib/aws/compute/network-acl.js +5 -5
  170. package/lib/aws/compute/nlb/network-listener-action.d.ts +1 -1
  171. package/lib/aws/compute/nlb/network-listener-action.js +2 -2
  172. package/lib/aws/compute/nlb/network-listener-certificate.js +2 -2
  173. package/lib/aws/compute/nlb/network-listener.js +5 -5
  174. package/lib/aws/compute/nlb/network-load-balancer.js +6 -6
  175. package/lib/aws/compute/nlb/network-target-group.js +4 -4
  176. package/lib/aws/compute/peer.js +7 -7
  177. package/lib/aws/compute/placement-group.d.ts +1 -1
  178. package/lib/aws/compute/placement-group.js +3 -3
  179. package/lib/aws/compute/port.js +5 -5
  180. package/lib/aws/compute/prefix-list.d.ts +1 -1
  181. package/lib/aws/compute/prefix-list.js +5 -5
  182. package/lib/aws/compute/private/context-stub.js +7 -7
  183. package/lib/aws/compute/private/ebs-util.d.ts +1 -1
  184. package/lib/aws/compute/private/ebs-util.js +3 -3
  185. package/lib/aws/compute/private/json-path.d.ts +1 -1
  186. package/lib/aws/compute/private/json-path.js +8 -8
  187. package/lib/aws/compute/requestvalidator.js +3 -3
  188. package/lib/aws/compute/resource.js +5 -5
  189. package/lib/aws/compute/restapi.d.ts +1 -1
  190. package/lib/aws/compute/restapi.js +11 -11
  191. package/lib/aws/compute/route.d.ts +1 -1
  192. package/lib/aws/compute/route.js +12 -12
  193. package/lib/aws/compute/runtime.js +3 -3
  194. package/lib/aws/compute/scalable-target.d.ts +1 -1
  195. package/lib/aws/compute/scalable-target.js +3 -3
  196. package/lib/aws/compute/schedule.js +4 -4
  197. package/lib/aws/compute/security-group.js +12 -12
  198. package/lib/aws/compute/stage.d.ts +1 -1
  199. package/lib/aws/compute/stage.js +6 -6
  200. package/lib/aws/compute/state-graph.js +1 -1
  201. package/lib/aws/compute/state-machine-fragment.js +1 -1
  202. package/lib/aws/compute/state-machine.d.ts +2 -2
  203. package/lib/aws/compute/state-machine.js +8 -8
  204. package/lib/aws/compute/states/choice.js +1 -1
  205. package/lib/aws/compute/states/custom-state.js +5 -5
  206. package/lib/aws/compute/states/distributed-map/item-batcher.js +1 -1
  207. package/lib/aws/compute/states/distributed-map/item-reader.js +5 -5
  208. package/lib/aws/compute/states/distributed-map/result-writer.js +1 -1
  209. package/lib/aws/compute/states/distributed-map.js +4 -4
  210. package/lib/aws/compute/states/fail.js +4 -4
  211. package/lib/aws/compute/states/map-base.js +4 -4
  212. package/lib/aws/compute/states/map.js +1 -1
  213. package/lib/aws/compute/states/parallel.js +1 -1
  214. package/lib/aws/compute/states/pass.js +2 -2
  215. package/lib/aws/compute/states/state.js +4 -4
  216. package/lib/aws/compute/states/succeed.js +1 -1
  217. package/lib/aws/compute/states/task-base.js +2 -2
  218. package/lib/aws/compute/states/task.js +1 -1
  219. package/lib/aws/compute/states/wait.js +2 -2
  220. package/lib/aws/compute/step-scaling-action.js +5 -5
  221. package/lib/aws/compute/step-scaling-policy.js +7 -7
  222. package/lib/aws/compute/stepfunctions-api.js +2 -2
  223. package/lib/aws/compute/subnet-v2.d.ts +1 -1
  224. package/lib/aws/compute/subnet-v2.js +5 -5
  225. package/lib/aws/compute/subnet.js +4 -4
  226. package/lib/aws/compute/target-tracking-scaling-policy.js +3 -3
  227. package/lib/aws/compute/task-credentials.js +1 -1
  228. package/lib/aws/compute/task-input.js +1 -1
  229. package/lib/aws/compute/tasks/aws-sdk/call-aws-service.js +5 -5
  230. package/lib/aws/compute/tasks/eventbridge/put-events.js +1 -1
  231. package/lib/aws/compute/tasks/http/invoke.js +1 -1
  232. package/lib/aws/compute/tasks/lambda/invoke.js +1 -1
  233. package/lib/aws/compute/tasks/sqs/send-message.js +1 -1
  234. package/lib/aws/compute/tasks/stepfunctions/invoke-activity.js +1 -1
  235. package/lib/aws/compute/tasks/stepfunctions/start-execution.js +1 -1
  236. package/lib/aws/compute/types.js +1 -1
  237. package/lib/aws/compute/usage-plan.js +5 -5
  238. package/lib/aws/compute/user-data.d.ts +2 -2
  239. package/lib/aws/compute/user-data.js +10 -10
  240. package/lib/aws/compute/volume.d.ts +1 -1
  241. package/lib/aws/compute/volume.js +7 -7
  242. package/lib/aws/compute/vpc-endpoint-service.js +3 -3
  243. package/lib/aws/compute/vpc-endpoint.d.ts +1 -1
  244. package/lib/aws/compute/vpc-endpoint.js +13 -13
  245. package/lib/aws/compute/vpc-flow-logs.d.ts +1 -1
  246. package/lib/aws/compute/vpc-flow-logs.js +8 -8
  247. package/lib/aws/compute/vpc-link.js +5 -5
  248. package/lib/aws/compute/vpc-v2-base.js +6 -6
  249. package/lib/aws/compute/vpc-v2.d.ts +2 -2
  250. package/lib/aws/compute/vpc-v2.js +4 -4
  251. package/lib/aws/compute/vpc.d.ts +1 -1
  252. package/lib/aws/compute/vpc.js +24 -22
  253. package/lib/aws/compute/vpn.js +8 -8
  254. package/lib/aws/context-provider.js +4 -4
  255. package/lib/aws/edge/certificate.d.ts +1 -1
  256. package/lib/aws/edge/certificate.js +6 -6
  257. package/lib/aws/edge/distribution.d.ts +1 -1
  258. package/lib/aws/edge/distribution.js +9 -9
  259. package/lib/aws/edge/dns-alias-record-targets.d.ts +1 -1
  260. package/lib/aws/edge/dns-alias-record-targets.js +7 -7
  261. package/lib/aws/edge/dns-record.d.ts +1 -1
  262. package/lib/aws/edge/dns-record.js +19 -19
  263. package/lib/aws/edge/dns-zone.d.ts +2 -2
  264. package/lib/aws/edge/dns-zone.js +5 -5
  265. package/lib/aws/edge/function.d.ts +1 -1
  266. package/lib/aws/edge/function.js +4 -4
  267. package/lib/aws/edge/key-value-store.d.ts +1 -1
  268. package/lib/aws/edge/key-value-store.js +6 -6
  269. package/lib/aws/edge/origin.d.ts +1 -1
  270. package/lib/aws/edge/origin.js +6 -6
  271. package/lib/aws/edge/response-headers-policy.d.ts +1 -1
  272. package/lib/aws/edge/response-headers-policy.js +6 -6
  273. package/lib/aws/encryption/alias.d.ts +1 -1
  274. package/lib/aws/encryption/alias.js +8 -8
  275. package/lib/aws/encryption/key.d.ts +1 -1
  276. package/lib/aws/encryption/key.js +6 -6
  277. package/lib/aws/encryption/via-service-principal.js +1 -1
  278. package/lib/aws/iam/grant.js +3 -3
  279. package/lib/aws/iam/group.js +5 -5
  280. package/lib/aws/iam/instance-profile.d.ts +1 -1
  281. package/lib/aws/iam/instance-profile.js +3 -3
  282. package/lib/aws/iam/managed-policy.d.ts +1 -1
  283. package/lib/aws/iam/managed-policy.js +3 -3
  284. package/lib/aws/iam/oidc-provider.d.ts +1 -1
  285. package/lib/aws/iam/oidc-provider.js +3 -3
  286. package/lib/aws/iam/policy-document-config.generated.d.ts +9 -9
  287. package/lib/aws/iam/policy-document-config.generated.js +1 -1
  288. package/lib/aws/iam/policy-document.d.ts +1 -1
  289. package/lib/aws/iam/policy-document.js +5 -5
  290. package/lib/aws/iam/policy-statement-props.generated.d.ts +8 -8
  291. package/lib/aws/iam/policy-statement-props.generated.js +1 -1
  292. package/lib/aws/iam/policy-statement.d.ts +1 -1
  293. package/lib/aws/iam/policy-statement.js +8 -8
  294. package/lib/aws/iam/policy.js +3 -3
  295. package/lib/aws/iam/principals.js +25 -25
  296. package/lib/aws/iam/private/imported-role.js +3 -3
  297. package/lib/aws/iam/private/postprocess-policy-document.d.ts +1 -1
  298. package/lib/aws/iam/private/postprocess-policy-document.js +1 -1
  299. package/lib/aws/iam/private/util.d.ts +1 -1
  300. package/lib/aws/iam/private/util.js +5 -5
  301. package/lib/aws/iam/role.d.ts +1 -1
  302. package/lib/aws/iam/role.js +6 -6
  303. package/lib/aws/iam/saml-provider.d.ts +1 -1
  304. package/lib/aws/iam/saml-provider.js +6 -6
  305. package/lib/aws/iam/unknown-principal.js +4 -4
  306. package/lib/aws/iam/user.js +3 -3
  307. package/lib/aws/network/network.d.ts +1 -1
  308. package/lib/aws/network/network.js +1 -1
  309. package/lib/aws/network/simple-ipv4-vpc.js +12 -12
  310. package/lib/aws/network/subnet-group.d.ts +1 -1
  311. package/lib/aws/network/subnet-group.js +5 -5
  312. package/lib/aws/network/subnet.d.ts +1 -1
  313. package/lib/aws/network/subnet.js +6 -6
  314. package/lib/aws/notify/archive.d.ts +1 -1
  315. package/lib/aws/notify/archive.js +3 -3
  316. package/lib/aws/notify/connection.d.ts +1 -1
  317. package/lib/aws/notify/connection.js +5 -5
  318. package/lib/aws/notify/event-bus.d.ts +1 -1
  319. package/lib/aws/notify/event-bus.js +10 -10
  320. package/lib/aws/notify/event-pattern.d.ts +1 -1
  321. package/lib/aws/notify/event-pattern.js +5 -5
  322. package/lib/aws/notify/input.d.ts +1 -1
  323. package/lib/aws/notify/input.js +12 -12
  324. package/lib/aws/notify/kinesis-stream.d.ts +1 -1
  325. package/lib/aws/notify/kinesis-stream.js +7 -7
  326. package/lib/aws/notify/notification-rule.js +8 -8
  327. package/lib/aws/notify/policy.js +3 -3
  328. package/lib/aws/notify/queue-base.js +1 -1
  329. package/lib/aws/notify/queue-policy.js +3 -3
  330. package/lib/aws/notify/queue.d.ts +1 -1
  331. package/lib/aws/notify/queue.js +8 -8
  332. package/lib/aws/notify/resource-policy.js +3 -3
  333. package/lib/aws/notify/rule.d.ts +1 -1
  334. package/lib/aws/notify/rule.js +6 -6
  335. package/lib/aws/notify/schedule.js +4 -4
  336. package/lib/aws/notify/sns-grants.generated.js +1 -1
  337. package/lib/aws/notify/sqs-grants.generated.js +1 -1
  338. package/lib/aws/notify/subscription-filter.js +1 -1
  339. package/lib/aws/notify/subscription.js +6 -6
  340. package/lib/aws/notify/subscriptions/email.js +1 -1
  341. package/lib/aws/notify/subscriptions/lambda.js +4 -4
  342. package/lib/aws/notify/subscriptions/sms.js +1 -1
  343. package/lib/aws/notify/subscriptions/sqs.js +4 -4
  344. package/lib/aws/notify/subscriptions/url.js +4 -4
  345. package/lib/aws/notify/target.d.ts +1 -1
  346. package/lib/aws/notify/target.js +1 -1
  347. package/lib/aws/notify/targets/event-bus.js +1 -1
  348. package/lib/aws/notify/targets/function.js +1 -1
  349. package/lib/aws/notify/targets/log-group.js +2 -2
  350. package/lib/aws/notify/targets/sqs.js +1 -1
  351. package/lib/aws/notify/targets/state-machine.js +1 -1
  352. package/lib/aws/notify/targets/util.js +3 -3
  353. package/lib/aws/notify/topic-base.js +4 -4
  354. package/lib/aws/notify/topic.js +7 -7
  355. package/lib/aws/provider-config.generated.d.ts +42 -36
  356. package/lib/aws/provider-config.generated.js +1 -1
  357. package/lib/aws/region-lookup.js +4 -4
  358. package/lib/aws/storage/assets/image-asset.js +8 -8
  359. package/lib/aws/storage/assets/s3.js +1 -1
  360. package/lib/aws/storage/auth-token.js +2 -2
  361. package/lib/aws/storage/billing.js +1 -1
  362. package/lib/aws/storage/bucket-notifications.d.ts +1 -1
  363. package/lib/aws/storage/bucket-notifications.js +8 -8
  364. package/lib/aws/storage/bucket-policy.d.ts +1 -1
  365. package/lib/aws/storage/bucket-policy.js +3 -3
  366. package/lib/aws/storage/bucket-source.d.ts +1 -1
  367. package/lib/aws/storage/bucket-source.js +7 -7
  368. package/lib/aws/storage/bucket.d.ts +1 -1
  369. package/lib/aws/storage/bucket.js +8 -8
  370. package/lib/aws/storage/capacity.js +1 -1
  371. package/lib/aws/storage/cors-config.generated.d.ts +5 -5
  372. package/lib/aws/storage/cors-config.generated.js +1 -1
  373. package/lib/aws/storage/cors-rule-config.generated.d.ts +5 -5
  374. package/lib/aws/storage/cors-rule-config.generated.js +1 -1
  375. package/lib/aws/storage/ecr-repository.js +11 -11
  376. package/lib/aws/storage/encryption.d.ts +1 -1
  377. package/lib/aws/storage/encryption.js +5 -5
  378. package/lib/aws/storage/lifecycle-config.generated.d.ts +9 -9
  379. package/lib/aws/storage/lifecycle-config.generated.js +1 -1
  380. package/lib/aws/storage/notification-targets/function.js +2 -2
  381. package/lib/aws/storage/notification-targets/queue.js +4 -4
  382. package/lib/aws/storage/origin-access-identity.d.ts +2 -2
  383. package/lib/aws/storage/origin-access-identity.js +3 -3
  384. package/lib/aws/storage/parameter-util.js +5 -5
  385. package/lib/aws/storage/parameter.d.ts +2 -2
  386. package/lib/aws/storage/parameter.js +16 -16
  387. package/lib/aws/storage/stream-grants.js +1 -1
  388. package/lib/aws/storage/table-grants.js +1 -1
  389. package/lib/aws/storage/table.d.ts +1 -1
  390. package/lib/aws/storage/table.js +10 -10
  391. package/lib/aws/storage/website-config.generated.d.ts +8 -8
  392. package/lib/aws/storage/website-config.generated.js +1 -1
  393. package/lib/bundling.js +5 -5
  394. package/lib/construct-base.d.ts +1 -1
  395. package/lib/construct-base.js +10 -10
  396. package/lib/duration.js +9 -9
  397. package/lib/errors.js +1 -1
  398. package/lib/expiration.js +1 -1
  399. package/lib/fs/ignore.js +4 -4
  400. package/lib/fs/index.js +1 -1
  401. package/lib/private/terraform-dependables-aspect.d.ts +1 -1
  402. package/lib/private/terraform-dependables-aspect.js +6 -6
  403. package/lib/private/unique-resource-name.js +3 -3
  404. package/lib/size.js +6 -6
  405. package/lib/stack-base.d.ts +2 -2
  406. package/lib/stack-base.js +16 -16
  407. package/lib/terra-func.d.ts +1 -1
  408. package/lib/terra-func.js +18 -18
  409. package/lib/time-zone.js +1 -1
  410. package/lib/token.js +5 -5
  411. package/package.json +17 -17
  412. package/setup.js +2 -2
@@ -4,8 +4,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.LaunchTemplate = exports.LaunchTemplateSpecialVersions = exports.LaunchTemplateHttpTokens = exports.SpotRequestType = exports.SpotInstanceInterruption = exports.InstanceInitiatedShutdownBehavior = exports.CpuCredits = void 0;
5
5
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
6
  // https://github.com/aws/aws-cdk/blob/v2.175.1/packages/aws-cdk-lib/aws-ec2/lib/launch-template.ts
7
- const provider_aws_1 = require("@cdktf/provider-aws");
8
- const cdktf_1 = require("cdktf");
7
+ const provider_aws_1 = require("@cdktn/provider-aws");
8
+ const cdktn_1 = require("cdktn");
9
9
  const connections_1 = require("./connections");
10
10
  const ebs_util_1 = require("./private/ebs-util");
11
11
  const aws_construct_1 = require("../aws-construct");
@@ -118,7 +118,7 @@ class LaunchTemplateSpecialVersions {
118
118
  }
119
119
  exports.LaunchTemplateSpecialVersions = LaunchTemplateSpecialVersions;
120
120
  _a = JSII_RTTI_SYMBOL_1;
121
- LaunchTemplateSpecialVersions[_a] = { fqn: "terraconstructs.aws.compute.LaunchTemplateSpecialVersions", version: "0.2.4" };
121
+ LaunchTemplateSpecialVersions[_a] = { fqn: "terraconstructs.aws.compute.LaunchTemplateSpecialVersions", version: "0.2.6" };
122
122
  /**
123
123
  * The special value that denotes that users of a Launch Template should
124
124
  * reference the LATEST version of the template.
@@ -180,7 +180,7 @@ class LaunchTemplate extends aws_construct_1.AwsConstructBase {
180
180
  this._tags = value;
181
181
  }
182
182
  get tags() {
183
- return cdktf_1.Token.asStringMap(cdktf_1.Lazy.anyValue({
183
+ return cdktn_1.Token.asStringMap(cdktn_1.Lazy.anyValue({
184
184
  produce: () => this._tags ?? undefined,
185
185
  }));
186
186
  }
@@ -202,13 +202,13 @@ class LaunchTemplate extends aws_construct_1.AwsConstructBase {
202
202
  });
203
203
  if (spotDuration !== undefined && (spotDuration < 1 || spotDuration > 6)) {
204
204
  // See: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-requests.html#fixed-duration-spot-instances
205
- cdktf_1.Annotations.of(this).addError("Spot block duration must be exactly 1, 2, 3, 4, 5, or 6 hours.");
205
+ cdktn_1.Annotations.of(this).addError("Spot block duration must be exactly 1, 2, 3, 4, 5, or 6 hours.");
206
206
  }
207
207
  // Basic validation of the provided httpPutResponseHopLimit
208
208
  if (props.httpPutResponseHopLimit !== undefined &&
209
209
  (props.httpPutResponseHopLimit < 1 || props.httpPutResponseHopLimit > 64)) {
210
210
  // See: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata-metadataoptions.html#cfn-ec2-launchtemplate-launchtemplatedata-metadataoptions-httpputresponsehoplimit
211
- cdktf_1.Annotations.of(this).addError("HttpPutResponseHopLimit must between 1 and 64");
211
+ cdktn_1.Annotations.of(this).addError("HttpPutResponseHopLimit must between 1 and 64");
212
212
  }
213
213
  if (props.instanceProfile && props.role) {
214
214
  throw new Error("You cannot provide both an instanceProfile and a role");
@@ -235,7 +235,7 @@ class LaunchTemplate extends aws_construct_1.AwsConstructBase {
235
235
  securityGroups: [props.securityGroup],
236
236
  });
237
237
  }
238
- const securityGroupsToken = cdktf_1.Lazy.listValue({
238
+ const securityGroupsToken = cdktn_1.Lazy.listValue({
239
239
  produce: () => {
240
240
  if (this._connections && this._connections.securityGroups.length > 0) {
241
241
  return this._connections.securityGroups.map((sg) => sg.securityGroupId);
@@ -277,7 +277,7 @@ class LaunchTemplate extends aws_construct_1.AwsConstructBase {
277
277
  // TagType.KEY_VALUE,
278
278
  // tfLaunchTemplate.LaunchTemplate.tfResourceType,
279
279
  // );
280
- const tagsToken = cdktf_1.Lazy.anyValue({
280
+ const tagsToken = cdktn_1.Lazy.anyValue({
281
281
  produce: () => {
282
282
  if (this._tags) {
283
283
  return [
@@ -304,7 +304,7 @@ class LaunchTemplate extends aws_construct_1.AwsConstructBase {
304
304
  ]
305
305
  : undefined;
306
306
  if (props.versionDescription &&
307
- !cdktf_1.Token.isUnresolved(props.versionDescription) &&
307
+ !cdktn_1.Token.isUnresolved(props.versionDescription) &&
308
308
  props.versionDescription.length > 255) {
309
309
  throw new Error(`versionDescription must be less than or equal to 255 characters, got ${props.versionDescription.length}`);
310
310
  }
@@ -387,7 +387,7 @@ class LaunchTemplate extends aws_construct_1.AwsConstructBase {
387
387
  // if requireImdsv2 is true, httpTokens must be required.
388
388
  if (props.requireImdsv2 === true &&
389
389
  props.httpTokens === LaunchTemplateHttpTokens.OPTIONAL) {
390
- cdktf_1.Annotations.of(this).addError("httpTokens must be required when requireImdsv2 is true");
390
+ cdktn_1.Annotations.of(this).addError("httpTokens must be required when requireImdsv2 is true");
391
391
  }
392
392
  if (props.httpEndpoint !== undefined ||
393
393
  props.httpProtocolIpv6 !== undefined ||
@@ -460,5 +460,5 @@ class LaunchTemplate extends aws_construct_1.AwsConstructBase {
460
460
  }
461
461
  exports.LaunchTemplate = LaunchTemplate;
462
462
  _b = JSII_RTTI_SYMBOL_1;
463
- LaunchTemplate[_b] = { fqn: "terraconstructs.aws.compute.LaunchTemplate", version: "0.2.4" };
464
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF1bmNoLXRlbXBsYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F3cy9jb21wdXRlL2xhdW5jaC10ZW1wbGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG1HQUFtRztBQUVuRyxzREFHNkI7QUFDN0IsaUNBQWlEO0FBRWpELCtDQUEwRDtBQVExRCxpREFBdUU7QUFNdkUsb0RBSTBCO0FBQzFCLG1DQUFtQztBQUNuQywwQ0FBbUM7QUFLbkM7O0dBRUc7QUFDSCxNQUFNLFFBQVEsR0FBVyxNQUFNLENBQUM7QUFFaEM7Ozs7R0FJRztBQUNILGtEQUFrRDtBQUNsRCxJQUFZLFVBWVg7QUFaRCxXQUFZLFVBQVU7SUFDcEI7OztPQUdHO0lBQ0gsbUNBQXFCLENBQUE7SUFFckI7OztPQUdHO0lBQ0gscUNBQXVCLENBQUE7QUFDekIsQ0FBQyxFQVpXLFVBQVUsMEJBQVYsVUFBVSxRQVlyQjtBQUVEOzs7O0dBSUc7QUFDSCxrREFBa0Q7QUFDbEQsSUFBWSxpQ0FVWDtBQVZELFdBQVksaUNBQWlDO0lBQzNDOztPQUVHO0lBQ0gsa0RBQWEsQ0FBQTtJQUViOztPQUVHO0lBQ0gsNERBQXVCLENBQUE7QUFDekIsQ0FBQyxFQVZXLGlDQUFpQyxpREFBakMsaUNBQWlDLFFBVTVDO0FBOEREOztHQUVHO0FBQ0gsd0VBQXdFO0FBQ3hFLElBQVksd0JBZVg7QUFmRCxXQUFZLHdCQUF3QjtJQUNsQzs7T0FFRztJQUNILHlDQUFhLENBQUE7SUFFYjs7T0FFRztJQUNILG1EQUF1QixDQUFBO0lBRXZCOztPQUVHO0lBQ0gsbURBQXVCLENBQUE7QUFDekIsQ0FBQyxFQWZXLHdCQUF3Qix3Q0FBeEIsd0JBQXdCLFFBZW5DO0FBRUQ7Ozs7R0FJRztBQUNILElBQVksZUFpQlg7QUFqQkQsV0FBWSxlQUFlO0lBQ3pCOzs7OztPQUtHO0lBQ0gsd0NBQXFCLENBQUE7SUFFckI7Ozs7OztPQU1HO0lBQ0gsNENBQXlCLENBQUE7QUFD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Z0IsQ0FBQyxhQUE2QjtRQUNuRCxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQ2IsOEdBQThHLENBQy9HLENBQUM7UUFDSixDQUFDO1FBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQVcsV0FBVztRQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQ2Isc0dBQXNHLENBQ3ZHLENBQUM7UUFDSixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFBVyxjQUFjO1FBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FDYiwyRkFBMkYsQ0FDNUYsQ0FBQztRQUNKLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDOUIsQ0FBQzs7QUE5ZUgsd0NBK2VDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvdjIuMTc1LjEvcGFja2FnZXMvYXdzLWNkay1saWIvYXdzLWVjMi9saWIvbGF1bmNoLXRlbXBsYXRlLnRzXG5cbmltcG9ydCB7XG4gIGxhdW5jaFRlbXBsYXRlIGFzIHRmTGF1bmNoVGVtcGxhdGUsXG4gIGlhbUluc3RhbmNlUHJvZmlsZSBhcyB0ZklhbUluc3RhbmNlUHJvZmlsZSxcbn0gZnJvbSBcIkBjZGt0Zi9wcm92aWRlci1hd3NcIjtcbmltcG9ydCB7IEFubm90YXRpb25zLCBMYXp5LCBUb2tlbiB9IGZyb20gXCJjZGt0ZlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IENvbm5lY3Rpb25zLCBJQ29ubmVjdGFibGUgfSBmcm9tIFwiLi9jb25uZWN0aW9uc1wiO1xuaW1wb3J0IHsgSW5zdGFuY2VUeXBlIH0gZnJvbSBcIi4vaW5zdGFuY2UtdHlwZXNcIjtcbmltcG9ydCB7IElLZXlQYWlyIH0gZnJvbSBcIi4va2V5LXBhaXJcIjtcbmltcG9ydCB7XG4gIElNYWNoaW5lSW1hZ2UsXG4gIE1hY2hpbmVJbWFnZUNvbmZpZyxcbiAgT3BlcmF0aW5nU3lzdGVtVHlwZSxcbn0gZnJvbSBcIi4vbWFjaGluZS1pbWFnZVwiO1xuaW1wb3J0IHsgbGF1bmNoVGVtcGxhdGVCbG9ja0RldmljZU1hcHBpbmdzIH0gZnJvbSBcIi4vcHJpdmF0ZS9lYnMtdXRpbFwiO1xuaW1wb3J0IHsgSVNlY3VyaXR5R3JvdXAgfSBmcm9tIFwiLi9zZWN1cml0eS1ncm91cFwiO1xuaW1wb3J0IHsgVXNlckRhdGEgfSBmcm9tIFwiLi91c2VyLWRhdGFcIjtcbmltcG9ydCB7IEJsb2NrRGV2aWNlIH0gZnJvbSBcIi4vdm9sdW1lXCI7XG5pbXBvcnQgeyBEdXJhdGlvbiB9IGZyb20gXCIuLi8uLi9kdXJhdGlvblwiO1xuaW1wb3J0IHsgRXhwaXJhdGlvbiB9IGZyb20gXCIuLi8uLi9leHBpcmF0aW9uXCI7XG5pbXBvcnQge1xuICBJQXdzQ29uc3RydWN0LFxuICBBd3NDb25zdHJ1Y3RCYXNlLFxuICAvLyBUYWdUeXBlXG59IGZyb20gXCIuLi9hd3MtY29uc3RydWN0XCI7XG4vLyBUT0RPOiBBbGlnbiB3aXRoIEFXUyBDREsgVGFnZ2luZ1xuaW1wb3J0IHsgVGFncyB9IGZyb20gXCIuLi9hd3MtdGFnc1wiO1xuLy8gaW1wb3J0IHsgVGFncyB9IGZyb20gXCIuLi90YWctYXNwZWN0XCI7XG4vLyBpbXBvcnQgeyBUYWdNYW5hZ2VyIH0gZnJvbSBcIi4uL3RhZy1tYW5hZ2VyXCI7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSBcIi4uL2lhbVwiO1xuXG4vKipcbiAqIE5hbWUgdGFnIGNvbnN0YW50XG4gKi9cbmNvbnN0IE5BTUVfVEFHOiBzdHJpbmcgPSBcIk5hbWVcIjtcblxuLyoqXG4gKiBQcm92aWRlcyB0aGUgb3B0aW9ucyBmb3Igc3BlY2lmeWluZyB0aGUgQ1BVIGNyZWRpdCB0eXBlIGZvciBidXJzdGFibGUgRUMyIGluc3RhbmNlIHR5cGVzIChUMiwgVDMsIFQzYSwgZXRjKS5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L1VzZXJHdWlkZS9idXJzdGFibGUtcGVyZm9ybWFuY2UtaW5zdGFuY2VzLWhvdy10by5odG1sXG4gKi9cbi8vIGRldi1ub3RlOiBUaGlzIGNvdWxkIGJlIHVzZWQgaW4gdGhlIEluc3RhbmNlIEwyXG5leHBvcnQgZW51bSBDcHVDcmVkaXRzIHtcbiAgLyoqXG4gICAqIFN0YW5kYXJkIGJ1cnN0aW5nIG1vZGUuXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvVXNlckd1aWRlL2J1cnN0YWJsZS1wZXJmb3JtYW5jZS1pbnN0YW5jZXMtc3RhbmRhcmQtbW9kZS5odG1sXG4gICAqL1xuICBTVEFOREFSRCA9IFwic3RhbmRhcmRcIixcblxuICAvKipcbiAgICogVW5saW1pdGVkIGJ1cnN0aW5nIG1vZGUuXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvVXNlckd1aWRlL2J1cnN0YWJsZS1wZXJmb3JtYW5jZS1pbnN0YW5jZXMtdW5saW1pdGVkLW1vZGUuaHRtbFxuICAgKi9cbiAgVU5MSU1JVEVEID0gXCJ1bmxpbWl0ZWRcIixcbn1cblxuLyoqXG4gKiBQcm92aWRlcyB0aGUgb3B0aW9ucyBmb3Igc3BlY2lmeWluZyB0aGUgaW5zdGFuY2UgaW5pdGlhdGVkIHNodXRkb3duIGJlaGF2aW9yLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvVXNlckd1aWRlL3Rlcm1pbmF0aW5nLWluc3RhbmNlcy5odG1sI1VzaW5nX0NoYW5naW5nSW5zdGFuY2VJbml0aWF0ZWRTaHV0ZG93bkJlaGF2aW9yXG4gKi9cbi8vIGRldi1ub3RlOiBUaGlzIGNvdWxkIGJlIHVzZWQgaW4gdGhlIEluc3RhbmNlIEwyXG5leHBvcnQgZW51bSBJbnN0YW5jZUluaXRpYXRlZFNodXRkb3duQmVoYXZpb3Ige1xuICAvKipcbiAgICogVGhlIGluc3RhbmNlIHdpbGwgc3RvcCB3aGVuIGl0IGluaXRpYXRlcyBhIHNodXRkb3duLlxuICAgKi9cbiAgU1RPUCA9IFwic3RvcFwiLFxuXG4gIC8qKlxuICAgKiBUaGUgaW5zdGFuY2Ugd2lsbCBiZSB0ZXJtaW5hdGVkIHdoZW4gaXQgaW5pdGlhdGVzIGEgc2h1dGRvd24uXG4gICAqL1xuICBURVJNSU5BVEUgPSBcInRlcm1pbmF0ZVwiLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIExhdW5jaFRlbXBsYXRlT3V0cHV0cyB7XG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBsYXVuY2ggdGVtcGxhdGUgdG8gdXNlXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHZlcnNpb25OdW1iZXI6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGlkZW50aWZpZXIgb2YgdGhlIExhdW5jaCBUZW1wbGF0ZVxuICAgKlxuICAgKiBFeGFjdGx5IG9uZSBvZiBgbGF1bmNoVGVtcGxhdGVJZGAgYW5kIGBsYXVuY2hUZW1wbGF0ZU5hbWVgIHdpbGwgYmUgc2V0LlxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBsYXVuY2hUZW1wbGF0ZUlkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgTGF1bmNoIFRlbXBsYXRlXG4gICAqXG4gICAqIEV4YWN0bHkgb25lIG9mIGBsYXVuY2hUZW1wbGF0ZUlkYCBhbmQgYGxhdW5jaFRlbXBsYXRlTmFtZWAgd2lsbCBiZSBzZXQuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGxhdW5jaFRlbXBsYXRlTmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBJbnRlcmZhY2UgZm9yIExhdW5jaFRlbXBsYXRlLWxpa2Ugb2JqZWN0cy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJTGF1bmNoVGVtcGxhdGUgZXh0ZW5kcyBJQXdzQ29uc3RydWN0IHtcbiAgLyoqIHN0cm9uZ2x5IHR5cGVkIG91dHB1dHMgKi9cbiAgcmVhZG9ubHkgbGF1bmNoVGVtcGxhdGVPdXRwdXRzOiBMYXVuY2hUZW1wbGF0ZU91dHB1dHM7XG5cbiAgLyoqXG4gICAqIFRoZSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIGxhdW5jaCB0ZW1wbGF0ZSB0byB1c2VcbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbk51bWJlcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgaWRlbnRpZmllciBvZiB0aGUgTGF1bmNoIFRlbXBsYXRlXG4gICAqXG4gICAqIEV4YWN0bHkgb25lIG9mIGBsYXVuY2hUZW1wbGF0ZUlkYCBhbmQgYGxhdW5jaFRlbXBsYXRlTmFtZWAgd2lsbCBiZSBzZXQuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGxhdW5jaFRlbXBsYXRlSWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBMYXVuY2ggVGVtcGxhdGVcbiAgICpcbiAgICogRXhhY3RseSBvbmUgb2YgYGxhdW5jaFRlbXBsYXRlSWRgIGFuZCBgbGF1bmNoVGVtcGxhdGVOYW1lYCB3aWxsIGJlIHNldC5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgbGF1bmNoVGVtcGxhdGVOYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFByb3ZpZGVzIHRoZSBvcHRpb25zIGZvciB0aGUgdHlwZXMgb2YgaW50ZXJydXB0aW9uIGZvciBzcG90IGluc3RhbmNlcy5cbiAqL1xuLy8gZGV2LW5vdGU6IFRoaXMgY291bGQgYmUgdXNlZCBpbiBhIFNwb3RGbGVldCBMMiBpZiBvbmUgZ2V0cyBkZXZlbG9wZWQuXG5leHBvcnQgZW51bSBTcG90SW5zdGFuY2VJbnRlcnJ1cHRpb24ge1xuICAvKipcbiAgICogVGhlIGluc3RhbmNlIHdpbGwgc3RvcCB3aGVuIGludGVycnVwdGVkLlxuICAgKi9cbiAgU1RPUCA9IFwic3RvcFwiLFxuXG4gIC8qKlxuICAgKiBUaGUgaW5zdGFuY2Ugd2lsbCBiZSB0ZXJtaW5hdGVkIHdoZW4gaW50ZXJydXB0ZWQuXG4gICAqL1xuICBURVJNSU5BVEUgPSBcInRlcm1pbmF0ZVwiLFxuXG4gIC8qKlxuICAgKiBUaGUgaW5zdGFuY2Ugd2lsbCBoaWJlcm5hdGUgd2hlbiBpbnRlcnJ1cHRlZC5cbiAgICovXG4gIEhJQkVSTkFURSA9IFwiaGliZXJuYXRlXCIsXG59XG5cbi8qKlxuICogVGhlIFNwb3QgSW5zdGFuY2UgcmVxdWVzdCB0eXBlLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvVXNlckd1aWRlL3Nwb3QtcmVxdWVzdHMuaHRtbFxuICovXG5leHBvcnQgZW51bSBTcG90UmVxdWVzdFR5cGUge1xuICAvKipcbiAgICogQSBvbmUtdGltZSBTcG90IEluc3RhbmNlIHJlcXVlc3QgcmVtYWlucyBhY3RpdmUgdW50aWwgQW1hem9uIEVDMiBsYXVuY2hlcyB0aGUgU3BvdCBJbnN0YW5jZSxcbiAgICogdGhlIHJlcXVlc3QgZXhwaXJlcywgb3IgeW91IGNhbmNlbCB0aGUgcmVxdWVzdC4gSWYgdGhlIFNwb3QgcHJpY2UgZXhjZWVkcyB5b3VyIG1heGltdW0gcHJpY2VcbiAgICogb3IgY2FwYWNpdHkgaXMgbm90IGF2YWlsYWJsZSwgeW91ciBTcG90IEluc3RhbmNlIGlzIHRlcm1pbmF0ZWQgYW5kIHRoZSBTcG90IEluc3RhbmNlIHJlcXVlc3RcbiAgICogaXMgY2xvc2VkLlxuICAgKi9cbiAgT05FX1RJTUUgPSBcIm9uZS10aW1lXCIsXG5cbiAgLyoqXG4gICAqIEEgcGVyc2lzdGVudCBTcG90IEluc3RhbmNlIHJlcXVlc3QgcmVtYWlucyBhY3RpdmUgdW50aWwgaXQgZXhwaXJlcyBvciB5b3UgY2FuY2VsIGl0LCBldmVuIGlmXG4gICAqIHRoZSByZXF1ZXN0IGlzIGZ1bGZpbGxlZC4gSWYgdGhlIFNwb3QgcHJpY2UgZXhjZWVkcyB5b3VyIG1heGltdW0gcHJpY2Ugb3IgY2FwYWNpdHkgaXMgbm90IGF2YWlsYWJsZSxcbiAgICogeW91ciBTcG90IEluc3RhbmNlIGlzIGludGVycnVwdGVkLiBBZnRlciB5b3VyIGluc3RhbmNlIGlzIGludGVycnVwdGVkLCB3aGVuIHlvdXIgbWF4aW11bSBwcmljZSBleGNlZWRzXG4gICAqIHRoZSBTcG90IHByaWNlIG9yIGNhcGFjaXR5IGJlY29tZXMgYXZhaWxhYmxlIGFnYWluLCB0aGUgU3BvdCBJbnN0YW5jZSBpcyBzdGFydGVkIGlmIHN0b3BwZWQgb3IgcmVzdW1lZFxuICAgKiBpZiBoaWJlcm5hdGVkLlxuICAgKi9cbiAgUEVSU0lTVEVOVCA9IFwicGVyc2lzdGVudFwiLFxufVxuXG4vKipcbiAqIEludGVyZmFjZSBmb3IgdGhlIFNwb3QgbWFya2V0IGluc3RhbmNlIG9wdGlvbnMgcHJvdmlkZWQgaW4gYSBMYXVuY2hUZW1wbGF0ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMYXVuY2hUZW1wbGF0ZVNwb3RPcHRpb25zIHtcbiAgLyoqXG4gICAqIFNwb3QgSW5zdGFuY2VzIHdpdGggYSBkZWZpbmVkIGR1cmF0aW9uIChhbHNvIGtub3duIGFzIFNwb3QgYmxvY2tzKSBhcmUgZGVzaWduZWQgbm90IHRvIGJlIGludGVycnVwdGVkIGFuZCB3aWxsIHJ1biBjb250aW51b3VzbHkgZm9yIHRoZSBkdXJhdGlvbiB5b3Ugc2VsZWN0LlxuICAgKiBZb3UgY2FuIHVzZSBhIGR1cmF0aW9uIG9mIDEsIDIsIDMsIDQsIDUsIG9yIDYgaG91cnMuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvVXNlckd1aWRlL3Nwb3QtcmVxdWVzdHMuaHRtbCNmaXhlZC1kdXJhdGlvbi1zcG90LWluc3RhbmNlc1xuICAgKlxuICAgKiBAZGVmYXVsdCBSZXF1ZXN0ZWQgc3BvdCBpbnN0YW5jZXMgZG8gbm90IGhhdmUgYSBwcmUtZGVmaW5lZCBkdXJhdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IGJsb2NrRHVyYXRpb24/OiBEdXJhdGlvbjtcblxuICAvKipcbiAgICogVGhlIGJlaGF2aW9yIHdoZW4gYSBTcG90IEluc3RhbmNlIGlzIGludGVycnVwdGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBTcG90IGluc3RhbmNlcyB3aWxsIHRlcm1pbmF0ZSB3aGVuIGludGVycnVwdGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgaW50ZXJydXB0aW9uQmVoYXZpb3I/OiBTcG90SW5zdGFuY2VJbnRlcnJ1cHRpb247XG5cbiAgLyoqXG4gICAqIE1heGltdW0gaG91cmx5IHByaWNlIHlvdSdyZSB3aWxsaW5nIHRvIHBheSBmb3IgZWFjaCBTcG90IGluc3RhbmNlLiBUaGUgdmFsdWUgaXMgZ2l2ZW5cbiAgICogaW4gZG9sbGFycy4gZXg6IDAuMDEgZm9yIDEgY2VudCBwZXIgaG91ciwgb3IgMC4wMDEgZm9yIG9uZS10ZW50aCBvZiBhIGNlbnQgcGVyIGhvdXIuXG4gICAqXG4gICAqIEBkZWZhdWx0IE1heGltdW0gaG91cmx5IHByaWNlIHdpbGwgZGVmYXVsdCB0byB0aGUgb24tZGVtYW5kIHByaWNlIGZvciB0aGUgaW5zdGFuY2UgdHlwZS5cbiAgICovXG4gIHJlYWRvbmx5IG1heFByaWNlPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgU3BvdCBJbnN0YW5jZSByZXF1ZXN0IHR5cGUuXG4gICAqXG4gICAqIElmIHlvdSBhcmUgdXNpbmcgU3BvdCBJbnN0YW5jZXMgd2l0aCBhbiBBdXRvIFNjYWxpbmcgZ3JvdXAsIHVzZSBvbmUtdGltZSByZXF1ZXN0cywgYXMgdGhlXG4gICAqIEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIHNlcnZpY2UgaGFuZGxlcyByZXF1ZXN0aW5nIG5ldyBTcG90IEluc3RhbmNlcyB3aGVuZXZlciB0aGUgZ3JvdXAgaXNcbiAgICogYmVsb3cgaXRzIGRlc2lyZWQgY2FwYWNpdHkuXG4gICAqXG4gICAqIEBkZWZhdWx0IE9uZS10aW1lIHNwb3QgcmVxdWVzdC5cbiAgICovXG4gIHJlYWRvbmx5IHJlcXVlc3RUeXBlPzogU3BvdFJlcXVlc3RUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgZW5kIGRhdGUgb2YgdGhlIHJlcXVlc3QuIEZvciBhIG9uZS10aW1lIHJlcXVlc3QsIHRoZSByZXF1ZXN0IHJlbWFpbnMgYWN0aXZlIHVudGlsIGFsbCBpbnN0YW5jZXNcbiAgICogbGF1bmNoLCB0aGUgcmVxdWVzdCBpcyBjYW5jZWxlZCwgb3IgdGhpcyBkYXRlIGlzIHJlYWNoZWQuIElmIHRoZSByZXF1ZXN0IGlzIHBlcnNpc3RlbnQsIGl0IHJlbWFpbnNcbiAgICogYWN0aXZlIHVudGlsIGl0IGlzIGNhbmNlbGVkIG9yIHRoaXMgZGF0ZSBhbmQgdGltZSBpcyByZWFjaGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBUaGUgZGVmYXVsdCBlbmQgZGF0ZSBpcyA3IGRheXMgZnJvbSB0aGUgY3VycmVudCBkYXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgdmFsaWRVbnRpbD86IEV4cGlyYXRpb247XG59XG5cbi8qKlxuICogVGhlIHN0YXRlIG9mIHRva2VuIHVzYWdlIGZvciB5b3VyIGluc3RhbmNlIG1ldGFkYXRhIHJlcXVlc3RzLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXByb3BlcnRpZXMtZWMyLWxhdW5jaHRlbXBsYXRlLWxhdW5jaHRlbXBsYXRlZGF0YS1tZXRhZGF0YW9wdGlvbnMuaHRtbCNjZm4tZWMyLWxhdW5jaHRlbXBsYXRlLWxhdW5jaHRlbXBsYXRlZGF0YS1tZXRhZGF0YW9wdGlvbnMtaHR0cHRva2Vuc1xuICovXG5leHBvcnQgZW51bSBMYXVuY2hUZW1wbGF0ZUh0dHBUb2tlbnMge1xuICAvKipcbiAgICogSWYgdGhlIHN0YXRlIGlzIG9wdGlvbmFsLCB5b3UgY2FuIGNob29zZSB0byByZXRyaWV2ZSBpbnN0YW5jZSBtZXRhZGF0YSB3aXRoIG9yIHdpdGhvdXQgYSBzaWduZWQgdG9rZW4gaGVhZGVyIG9uIHlvdXIgcmVxdWVzdC5cbiAgICovXG4gIE9QVElPTkFMID0gXCJvcHRpb25hbFwiLFxuICAvKipcbiAgICogSWYgdGhlIHN0YXRlIGlzIHJlcXVpcmVkLCB5b3UgbXVzdCBzZW5kIGEgc2lnbmVkIHRva2VuIGhlYWRlciB3aXRoIGFueSBpbnN0YW5jZSBtZXRhZGF0YSByZXRyaWV2YWwgcmVxdWVzdHMuIEluIHRoaXMgc3RhdGUsXG4gICAqIHJldHJpZXZpbmcgdGhlIElBTSByb2xlIGNyZWRlbnRpYWxzIGFsd2F5cyByZXR1cm5zIHRoZSB2ZXJzaW9uIDIuMCBjcmVkZW50aWFsczsgdGhlIHZlcnNpb24gMS4wIGNyZWRlbnRpYWxzIGFyZSBub3QgYXZhaWxhYmxlLlxuICAgKi9cbiAgUkVRVUlSRUQgPSBcInJlcXVpcmVkXCIsXG59XG5cbi8qKlxuICogUHJvcGVydGllcyBvZiBhIExhdW5jaFRlbXBsYXRlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExhdW5jaFRlbXBsYXRlUHJvcHMge1xuICAvKipcbiAgICogTmFtZSBmb3IgdGhpcyBsYXVuY2ggdGVtcGxhdGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG5hbWVcbiAgICovXG4gIHJlYWRvbmx5IGxhdW5jaFRlbXBsYXRlTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogQSBkZXNjcmlwdGlvbiBmb3IgdGhlIGZpcnN0IHZlcnNpb24gb2YgdGhlIGxhdW5jaCB0ZW1wbGF0ZS5cbiAgICpcbiAgICogVGhlIHZlcnNpb24gZGVzY3JpcHRpb24gbXVzdCBiZSBtYXhpbXVtIDI1NSBjaGFyYWN0ZXJzIGxvbmcuXG4gICAqXG4gICAqIEBzZWUgaHR0cDovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLWxhdW5jaHRlbXBsYXRlLmh0bWwjY2ZuLWVjMi1sYXVuY2h0ZW1wbGF0ZS12ZXJzaW9uZGVzY3JpcHRpb25cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBkZXNjcmlwdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbkRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUeXBlIG9mIGluc3RhbmNlIHRvIGxhdW5jaC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBUaGlzIExhdW5jaCBUZW1wbGF0ZSBkb2VzIG5vdCBzcGVjaWZ5IGEgZGVmYXVsdCBJbnN0YW5jZSBUeXBlLlxuICAgKi9cbiAgcmVhZG9ubHkgaW5zdGFuY2VUeXBlPzogSW5zdGFuY2VUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgQU1JIHRoYXQgd2lsbCBiZSB1c2VkIGJ5IGluc3RhbmNlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBUaGlzIExhdW5jaCBUZW1wbGF0ZSBkb2VzIG5vdCBzcGVjaWZ5IGEgZGVmYXVsdCBBTUkuXG4gICAqL1xuICByZWFkb25seSBtYWNoaW5lSW1hZ2U/OiBJTWFjaGluZUltYWdlO1xuXG4gIC8qKlxuICAgKiBUaGUgQU1JIHRoYXQgd2lsbCBiZSB1c2VkIGJ5IGluc3RhbmNlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBUaGlzIExhdW5jaCBUZW1wbGF0ZSBjcmVhdGVzIGEgVXNlckRhdGEgYmFzZWQgb24gdGhlIHR5cGUgb2YgcHJvdmlkZWRcbiAgICogbWFjaGluZUltYWdlOyBubyBVc2VyRGF0YSBpcyBjcmVhdGVkIGlmIGEgbWFjaGluZUltYWdlIGlzIG5vdCBwcm92aWRlZFxuICAgKi9cbiAgcmVhZG9ubHkgdXNlckRhdGE/OiBVc2VyRGF0YTtcblxuICAvKipcbiAgICogQW4gSUFNIHJvbGUgdG8gYXNzb2NpYXRlIHdpdGggdGhlIGluc3RhbmNlIHByb2ZpbGUgdGhhdCBpcyB1c2VkIGJ5IGluc3RhbmNlcy5cbiAgICpcbiAgICogVGhlIHJvbGUgbXVzdCBiZSBhc3N1bWFibGUgYnkgdGhlIHNlcnZpY2UgcHJpbmNpcGFsIGBlYzIuYW1hem9uYXdzLmNvbWAuXG4gICAqIE5vdGU6IFlvdSBjYW4gcHJvdmlkZSBhbiBpbnN0YW5jZVByb2ZpbGUgb3IgYSByb2xlLCBidXQgbm90IGJvdGguXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGNvbnN0IHJvbGUgPSBuZXcgaWFtLlJvbGUodGhpcywgJ015Um9sZScsIHtcbiAgICogICBhc3N1bWVkQnk6IG5ldyBpYW0uU2VydmljZVByaW5jaXBhbCgnZWMyLmFtYXpvbmF3cy5jb20nKVxuICAgKiB9KTtcbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBuZXcgcm9sZSBpcyBjcmVhdGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcm9sZT86IGlhbS5JUm9sZTtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIGhvdyBibG9jayBkZXZpY2VzIGFyZSBleHBvc2VkIHRvIHRoZSBpbnN0YW5jZS4gWW91IGNhbiBzcGVjaWZ5IHZpcnR1YWwgZGV2aWNlcyBhbmQgRUJTIHZvbHVtZXMuXG4gICAqXG4gICAqIEVhY2ggaW5zdGFuY2UgdGhhdCBpcyBsYXVuY2hlZCBoYXMgYW4gYXNzb2NpYXRlZCByb290IGRldmljZSB2b2x1bWUsXG4gICAqIGVpdGhlciBhbiBBbWF6b24gRUJTIHZvbHVtZSBvciBhbiBpbnN0YW5jZSBzdG9yZSB2b2x1bWUuXG4gICAqIFlvdSBjYW4gdXNlIGJsb2NrIGRldmljZSBtYXBwaW5ncyB0byBzcGVjaWZ5IGFkZGl0aW9uYWwgRUJTIHZvbHVtZXMgb3JcbiAgICogaW5zdGFuY2Ugc3RvcmUgdm9sdW1lcyB0byBhdHRhY2ggdG8gYW4gaW5zdGFuY2Ugd2hlbiBpdCBpcyBsYXVuY2hlZC5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9Vc2VyR3VpZGUvYmxvY2stZGV2aWNlLW1hcHBpbmctY29uY2VwdHMuaHRtbFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFVzZXMgdGhlIGJsb2NrIGRldmljZSBtYXBwaW5nIG9mIHRoZSBBTUlcbiAgICovXG4gIHJlYWRvbmx5IGJsb2NrRGV2aWNlcz86IEJsb2NrRGV2aWNlW107XG5cbiAgLyoqXG4gICAqIENQVSBjcmVkaXQgdHlwZSBmb3IgYnVyc3RhYmxlIEVDMiBpbnN0YW5jZSB0eXBlcy5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9Vc2VyR3VpZGUvYnVyc3RhYmxlLXBlcmZvcm1hbmNlLWluc3RhbmNlcy5odG1sXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gY3JlZGl0IHR5cGUgaXMgc3BlY2lmaWVkIGluIHRoZSBMYXVuY2ggVGVtcGxhdGUuXG4gICAqL1xuICByZWFkb25seSBjcHVDcmVkaXRzPzogQ3B1Q3JlZGl0cztcblxuICAvKipcbiAgICogSWYgeW91IHNldCB0aGlzIHBhcmFtZXRlciB0byB0cnVlLCB5b3UgY2Fubm90IHRlcm1pbmF0ZSB0aGUgaW5zdGFuY2VzIGxhdW5jaGVkIHdpdGggdGhpcyBsYXVuY2ggdGVtcGxhdGVcbiAgICogdXNpbmcgdGhlIEFtYXpvbiBFQzIgY29uc29sZSwgQ0xJLCBvciBBUEk7IG90aGVyd2lzZSwgeW91IGNhbi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBUaGUgQVBJIHRlcm1pbmF0aW9uIHNldHRpbmcgaXMgbm90IHNwZWNpZmllZCBpbiB0aGUgTGF1bmNoIFRlbXBsYXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgZGlzYWJsZUFwaVRlcm1pbmF0aW9uPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGluc3RhbmNlcyBhcmUgb3B0aW1pemVkIGZvciBBbWF6b24gRUJTIEkvTy4gVGhpcyBvcHRpbWl6YXRpb24gcHJvdmlkZXMgZGVkaWNhdGVkIHRocm91Z2hwdXRcbiAgICogdG8gQW1hem9uIEVCUyBhbmQgYW4gb3B0aW1pemVkIGNvbmZpZ3VyYXRpb24gc3RhY2sgdG8gcHJvdmlkZSBvcHRpbWFsIEFtYXpvbiBFQlMgSS9PIHBlcmZvcm1hbmNlLiBUaGlzIG9wdGltaXphdGlvblxuICAgKiBpc24ndCBhdmFpbGFibGUgd2l0aCBhbGwgaW5zdGFuY2UgdHlwZXMuIEFkZGl0aW9uYWwgdXNhZ2UgY2hhcmdlcyBhcHBseSB3aGVuIHVzaW5nIGFuIEVCUy1vcHRpbWl6ZWQgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gRUJTIG9wdGltaXphdGlvbiBpcyBub3Qgc3BlY2lmaWVkIGluIHRoZSBsYXVuY2ggdGVtcGxhdGUuXG4gICAqL1xuICByZWFkb25seSBlYnNPcHRpbWl6ZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJZiB0aGlzIHBhcmFtZXRlciBpcyBzZXQgdG8gdHJ1ZSwgdGhlIGluc3RhbmNlIGlzIGVuYWJsZWQgZm9yIEFXUyBOaXRybyBFbmNsYXZlczsgb3RoZXJ3aXNlLCBpdCBpcyBub3QgZW5hYmxlZCBmb3IgQVdTIE5pdHJvIEVuY2xhdmVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEVuYWJsZW1lbnQgb2YgTml0cm8gZW5jbGF2ZXMgaXMgbm90IHNwZWNpZmllZCBpbiB0aGUgbGF1bmNoIHRlbXBsYXRlOyBkZWZhdWx0aW5nIHRvIGZhbHNlLlxuICAgKi9cbiAgcmVhZG9ubHkgbml0cm9FbmNsYXZlRW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIElmIHlvdSBzZXQgdGhpcyBwYXJhbWV0ZXIgdG8gdHJ1ZSwgdGhlIGluc3RhbmNlIGlzIGVuYWJsZWQgZm9yIGhpYmVybmF0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEhpYmVybmF0aW9uIGNvbmZpZ3VyYXRpb24gaXMgbm90IHNwZWNpZmllZCBpbiB0aGUgbGF1bmNoIHRlbXBsYXRlOyBkZWZhdWx0aW5nIHRvIGZhbHNlLlxuICAgKi9cbiAgcmVhZG9ubHkgaGliZXJuYXRpb25Db25maWd1cmVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgYW4gaW5zdGFuY2Ugc3RvcHMgb3IgdGVybWluYXRlcyB3aGVuIHlvdSBpbml0aWF0ZSBzaHV0ZG93biBmcm9tIHRoZSBpbnN0YW5jZSAodXNpbmcgdGhlIG9wZXJhdGluZyBzeXN0ZW0gY29tbWFuZCBmb3Igc3lzdGVtIHNodXRkb3duKS5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9Vc2VyR3VpZGUvdGVybWluYXRpbmctaW5zdGFuY2VzLmh0bWwjVXNpbmdfQ2hhbmdpbmdJbnN0YW5jZUluaXRpYXRlZFNodXRkb3duQmVoYXZpb3JcbiAgICpcbiAgICogQGRlZmF1bHQgLSBTaHV0ZG93biBiZWhhdmlvciBpcyBub3Qgc3BlY2lmaWVkIGluIHRoZSBsYXVuY2ggdGVtcGxhdGU7IGRlZmF1bHRzIHRvIFNUT1AuXG4gICAqL1xuICByZWFkb25seSBpbnN0YW5jZUluaXRpYXRlZFNodXRkb3duQmVoYXZpb3I/OiBJbnN0YW5jZUluaXRpYXRlZFNodXRkb3duQmVoYXZpb3I7XG5cbiAgLyoqXG4gICAqIElmIHRoaXMgcHJvcGVydHkgaXMgZGVmaW5lZCwgdGhlbiB0aGUgTGF1bmNoIFRlbXBsYXRlJ3MgSW5zdGFuY2VNYXJrZXRPcHRpb25zIHdpbGwgYmVcbiAgICogc2V0IHRvIHVzZSBTcG90IGluc3RhbmNlcywgYW5kIHRoZSBvcHRpb25zIGZvciB0aGUgU3BvdCBpbnN0YW5jZXMgd2lsbCBiZSBhcyBkZWZpbmVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEluc3RhbmNlIGxhdW5jaGVkIHdpdGggdGhpcyB0ZW1wbGF0ZSB3aWxsIG5vdCBiZSBzcG90IGluc3RhbmNlcy5cbiAgICovXG4gIHJlYWRvbmx5IHNwb3RPcHRpb25zPzogTGF1bmNoVGVtcGxhdGVTcG90T3B0aW9ucztcblxuICAvKipcbiAgICogTmFtZSBvZiBTU0gga2V5cGFpciB0byBncmFudCBhY2Nlc3MgdG8gaW5zdGFuY2VcbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBTU0ggYWNjZXNzIHdpbGwgYmUgcG9zc2libGUuXG4gICAqIEBkZXByZWNhdGVkIC0gVXNlIGBrZXlQYWlyYCBpbnN0ZWFkIC0gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nkay9hcGkvdjIvZG9jcy9hd3MtY2RrLWxpYi5hd3NfZWMyLXJlYWRtZS5odG1sI3VzaW5nLWFuLWV4aXN0aW5nLWVjMi1rZXktcGFpclxuICAgKi9cbiAgcmVhZG9ubHkga2V5TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIFNTSCBrZXlwYWlyIHRvIGdyYW50IGFjY2VzcyB0byB0aGUgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gU1NIIGFjY2VzcyB3aWxsIGJlIHBvc3NpYmxlLlxuICAgKi9cbiAgcmVhZG9ubHkga2V5UGFpcj86IElLZXlQYWlyO1xuXG4gIC8qKlxuICAgKiBJZiBzZXQgdG8gdHJ1ZSwgdGhlbiBkZXRhaWxlZCBtb25pdG9yaW5nIHdpbGwgYmUgZW5hYmxlZCBvbiBpbnN0YW5jZXMgY3JlYXRlZCB3aXRoIHRoaXNcbiAgICogbGF1bmNoIHRlbXBsYXRlLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L1VzZXJHdWlkZS91c2luZy1jbG91ZHdhdGNoLW5ldy5odG1sXG4gICAqXG4gICAqIEBkZWZhdWx0IEZhbHNlIC0gRGV0YWlsZWQgbW9uaXRvcmluZyBpcyBkaXNhYmxlZC5cbiAgICovXG4gIHJlYWRvbmx5IGRldGFpbGVkTW9uaXRvcmluZz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFNlY3VyaXR5IGdyb3VwIHRvIGFzc2lnbiB0byBpbnN0YW5jZXMgY3JlYXRlZCB3aXRoIHRoZSBsYXVuY2ggdGVtcGxhdGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vIHNlY3VyaXR5IGdyb3VwIGlzIGFzc2lnbmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgc2VjdXJpdHlHcm91cD86IElTZWN1cml0eUdyb3VwO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIElNRFN2MiBzaG91bGQgYmUgcmVxdWlyZWQgb24gbGF1bmNoZWQgaW5zdGFuY2VzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGZhbHNlXG4gICAqL1xuICByZWFkb25seSByZXF1aXJlSW1kc3YyPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgSFRUUCBtZXRhZGF0YSBlbmRwb2ludCBvbiB5b3VyIGluc3RhbmNlcy5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1lYzItbGF1bmNodGVtcGxhdGUtbGF1bmNodGVtcGxhdGVkYXRhLW1ldGFkYXRhb3B0aW9ucy5odG1sI2Nmbi1lYzItbGF1bmNodGVtcGxhdGUtbGF1bmNodGVtcGxhdGVkYXRhLW1ldGFkYXRhb3B0aW9ucy1odHRwZW5kcG9pbnRcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgaHR0cEVuZHBvaW50PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgSVB2NiBlbmRwb2ludCBmb3IgdGhlIGluc3RhbmNlIG1ldGFkYXRhIHNlcnZpY2UuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXByb3BlcnRpZXMtZWMyLWxhdW5jaHRlbXBsYXRlLWxhdW5jaHRlbXBsYXRlZGF0YS1tZXRhZGF0YW9wdGlvbnMuaHRtbCNjZm4tZWMyLWxhdW5jaHRlbXBsYXRlLWxhdW5jaHRlbXBsYXRlZGF0YS1tZXRhZGF0YW9wdGlvbnMtaHR0cHByb3RvY29saXB2NlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBodHRwUHJvdG9jb2xJcHY2PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGRlc2lyZWQgSFRUUCBQVVQgcmVzcG9uc2UgaG9wIGxpbWl0IGZvciBpbnN0YW5jZSBtZXRhZGF0YSByZXF1ZXN0cy4gVGhlIGxhcmdlciB0aGUgbnVtYmVyLCB0aGUgZnVydGhlciBpbnN0YW5jZSBtZXRhZGF0YSByZXF1ZXN0cyBjYW4gdHJhdmVsLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1wcm9wZXJ0aWVzLWVjMi1sYXVuY2h0ZW1wbGF0ZS1sYXVuY2h0ZW1wbGF0ZWRhdGEtbWV0YWRhdGFvcHRpb25zLmh0bWwjY2ZuLWVjMi1sYXVuY2h0ZW1wbGF0ZS1sYXVuY2h0ZW1wbGF0ZWRhdGEtbWV0YWRhdGFvcHRpb25zLWh0dHBwdXRyZXNwb25zZWhvcGxpbWl0XG4gICAqXG4gICAqIEBkZWZhdWx0IDFcbiAgICovXG4gIHJlYWRvbmx5IGh0dHBQdXRSZXNwb25zZUhvcExpbWl0PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RhdGUgb2YgdG9rZW4gdXNhZ2UgZm9yIHlvdXIgaW5zdGFuY2UgbWV0YWRhdGEgcmVxdWVzdHMuICBUaGUgZGVmYXVsdCBzdGF0ZSBpcyBgb3B0aW9uYWxgIGlmIG5vdCBzcGVjaWZpZWQuIEhvd2V2ZXIsXG4gICAqIGlmIHJlcXVpcmVJbWRzdjIgaXMgdHJ1ZSwgdGhlIHN0YXRlIG11c3QgYmUgYHJlcXVpcmVkYC5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1lYzItbGF1bmNodGVtcGxhdGUtbGF1bmNodGVtcGxhdGVkYXRhLW1ldGFkYXRhb3B0aW9ucy5odG1sI2Nmbi1lYzItbGF1bmNodGVtcGxhdGUtbGF1bmNodGVtcGxhdGVkYXRhLW1ldGFkYXRhb3B0aW9ucy1odHRwdG9rZW5zXG4gICAqXG4gICAqIEBkZWZhdWx0IExhdW5jaFRlbXBsYXRlSHR0cFRva2Vucy5PUFRJT05BTFxuICAgKi9cbiAgcmVhZG9ubHkgaHR0cFRva2Vucz86IExhdW5jaFRlbXBsYXRlSHR0cFRva2VucztcblxuICAvKipcbiAgICogU2V0IHRvIGVuYWJsZWQgdG8gYWxsb3cgYWNjZXNzIHRvIGluc3RhbmNlIHRhZ3MgZnJvbSB0aGUgaW5zdGFuY2UgbWV0YWRhdGEuIFNldCB0byBkaXNhYmxlZCB0byB0dXJuIG9mZiBhY2Nlc3MgdG8gaW5zdGFuY2UgdGFncyBmcm9tIHRoZSBpbnN0YW5jZSBtZXRhZGF0YS5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1lYzItbGF1bmNodGVtcGxhdGUtbGF1bmNodGVtcGxhdGVkYXRhLW1ldGFkYXRhb3B0aW9ucy5odG1sI2Nmbi1lYzItbGF1bmNodGVtcGxhdGUtbGF1bmNodGVtcGxhdGVkYXRhLW1ldGFkYXRhb3B0aW9ucy1pbnN0YW5jZW1ldGFkYXRhdGFnc1xuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgaW5zdGFuY2VNZXRhZGF0YVRhZ3M/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGluc3RhbmNlcyBzaG91bGQgaGF2ZSBhIHB1YmxpYyBJUCBhZGRyZXNzZXMgYXNzb2NpYXRlZCB3aXRoIHRoZW0uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gVXNlIHN1Ym5ldCBzZXR0aW5nc1xuICAgKi9cbiAgcmVhZG9ubHkgYXNzb2NpYXRlUHVibGljSXBBZGRyZXNzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGluc3RhbmNlIHByb2ZpbGUgdXNlZCB0byBwYXNzIHJvbGUgaW5mb3JtYXRpb24gdG8gRUMyIGluc3RhbmNlcy5cbiAgICpcbiAgICogTm90ZTogWW91IGNhbiBwcm92aWRlIGFuIGluc3RhbmNlUHJvZmlsZSBvciBhIHJvbGUsIGJ1dCBub3QgYm90aC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBpbnN0YW5jZSBwcm9maWxlXG4gICAqL1xuICByZWFkb25seSBpbnN0YW5jZVByb2ZpbGU/OiBpYW0uSUluc3RhbmNlUHJvZmlsZTtcbn1cblxuLyoqXG4gKiBBIGNsYXNzIHRoYXQgcHJvdmlkZXMgY29udmVuaWVudCBhY2Nlc3MgdG8gc3BlY2lhbCB2ZXJzaW9uIHRva2VucyBmb3IgTGF1bmNoVGVtcGxhdGVcbiAqIHZlcnNpb25zLlxuICovXG5leHBvcnQgY2xhc3MgTGF1bmNoVGVtcGxhdGVTcGVjaWFsVmVyc2lvbnMge1xuICAvKipcbiAgICogVGhlIHNwZWNpYWwgdmFsdWUgdGhhdCBkZW5vdGVzIHRoYXQgdXNlcnMgb2YgYSBMYXVuY2ggVGVtcGxhdGUgc2hvdWxkXG4gICAqIHJlZmVyZW5jZSB0aGUgTEFURVNUIHZlcnNpb24gb2YgdGhlIHRlbXBsYXRlLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBMQVRFU1RfVkVSU0lPTjogc3RyaW5nID0gXCIkTGF0ZXN0XCI7XG5cbiAgLyoqXG4gICAqIFRoZSBzcGVjaWFsIHZhbHVlIHRoYXQgZGVub3RlcyB0aGF0IHVzZXJzIG9mIGEgTGF1bmNoIFRlbXBsYXRlIHNob3VsZFxuICAgKiByZWZlcmVuY2UgdGhlIERFRkFVTFQgdmVyc2lvbiBvZiB0aGUgdGVtcGxhdGUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfVkVSU0lPTjogc3RyaW5nID0gXCIkRGVmYXVsdFwiO1xufVxuXG4vKipcbiAqIEF0dHJpYnV0ZXMgZm9yIGFuIGltcG9ydGVkIExhdW5jaFRlbXBsYXRlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExhdW5jaFRlbXBsYXRlQXR0cmlidXRlcyB7XG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBsYXVuY2ggdGVtcGxhdGUgdG8gdXNlXG4gICAqXG4gICAqIEBkZWZhdWx0IFZlcnNpb246IFwiJERlZmF1bHRcIlxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbk51bWJlcj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGlkZW50aWZpZXIgb2YgdGhlIExhdW5jaCBUZW1wbGF0ZVxuICAgKlxuICAgKiBFeGFjdGx5IG9uZSBvZiBgbGF1bmNoVGVtcGxhdGVJZGAgYW5kIGBsYXVuY2hUZW1wbGF0ZU5hbWVgIG1heSBiZSBzZXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGxhdW5jaFRlbXBsYXRlSWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBMYXVuY2ggVGVtcGxhdGVcbiAgICpcbiAgICogRXhhY3RseSBvbmUgb2YgYGxhdW5jaFRlbXBsYXRlSWRgIGFuZCBgbGF1bmNoVGVtcGxhdGVOYW1lYCBtYXkgYmUgc2V0LlxuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSBsYXVuY2hUZW1wbGF0ZU5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhpcyByZXByZXNlbnRzIGFuIEVDMiBMYXVuY2hUZW1wbGF0ZS5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L1VzZXJHdWlkZS9lYzItbGF1bmNoLXRlbXBsYXRlcy5odG1sXG4gKi9cbmV4cG9ydCBjbGFzcyBMYXVuY2hUZW1wbGF0ZVxuICBleHRlbmRzIEF3c0NvbnN0cnVjdEJhc2VcbiAgaW1wbGVtZW50cyBJTGF1bmNoVGVtcGxhdGUsIGlhbS5JR3JhbnRhYmxlLCBJQ29ubmVjdGFibGVcbntcbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyBMYXVuY2hUZW1wbGF0ZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUxhdW5jaFRlbXBsYXRlQXR0cmlidXRlcyhcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgYXR0cnM6IExhdW5jaFRlbXBsYXRlQXR0cmlidXRlcyxcbiAgKTogSUxhdW5jaFRlbXBsYXRlIHtcbiAgICBjb25zdCBoYXZlSWQgPSBCb29sZWFuKGF0dHJzLmxhdW5jaFRlbXBsYXRlSWQpO1xuICAgIGNvbnN0IGhhdmVOYW1lID0gQm9vbGVhbihhdHRycy5sYXVuY2hUZW1wbGF0ZU5hbWUpO1xuICAgIGlmIChoYXZlSWQgPT0gaGF2ZU5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJMYXVuY2hUZW1wbGF0ZS5mcm9tTGF1bmNoVGVtcGxhdGVBdHRyaWJ1dGVzKCkgcmVxdWlyZXMgZXhhY3RseSBvbmUgb2YgbGF1bmNoVGVtcGxhdGVJZCBvciBsYXVuY2hUZW1wbGF0ZU5hbWUgYmUgcHJvdmlkZWQuXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNsYXNzIEltcG9ydCBleHRlbmRzIEF3c0NvbnN0cnVjdEJhc2UgaW1wbGVtZW50cyBJTGF1bmNoVGVtcGxhdGUge1xuICAgICAgcHVibGljIGdldCBsYXVuY2hUZW1wbGF0ZU91dHB1dHMoKTogTGF1bmNoVGVtcGxhdGVPdXRwdXRzIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB2ZXJzaW9uTnVtYmVyOiB0aGlzLnZlcnNpb25OdW1iZXIsXG4gICAgICAgICAgbGF1bmNoVGVtcGxhdGVJZDogdGhpcy5sYXVuY2hUZW1wbGF0ZUlkLFxuICAgICAgICAgIGxhdW5jaFRlbXBsYXRlTmFtZTogdGhpcy5sYXVuY2hUZW1wbGF0ZU5hbWUsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBwdWJsaWMgZ2V0IG91dHB1dHMoKTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmxhdW5jaFRlbXBsYXRlT3V0cHV0cztcbiAgICAgIH1cbiAgICAgIHB1YmxpYyByZWFkb25seSB2ZXJzaW9uTnVtYmVyID1cbiAgICAgICAgYXR0cnMudmVyc2lvbk51bWJlciA/PyBMYXVuY2hUZW1wbGF0ZVNwZWNpYWxWZXJzaW9ucy5ERUZBVUxUX1ZFUlNJT047XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgbGF1bmNoVGVtcGxhdGVJZD8gPSBhdHRycy5sYXVuY2hUZW1wbGF0ZUlkO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGxhdW5jaFRlbXBsYXRlTmFtZT8gPSBhdHRycy5sYXVuY2hUZW1wbGF0ZU5hbWU7XG4gICAgfVxuICAgIHJldHVybiBuZXcgSW1wb3J0KHNjb3BlLCBpZCk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyAgIE1lbWJlcnMgZm9yIElMYXVuY2hUZW1wbGF0ZS9JVGVycmFDb25zdHJ1Y3QgaW50ZXJmYWNlXG5cbiAgcHVibGljIGdldCBsYXVuY2hUZW1wbGF0ZU91dHB1dHMoKTogTGF1bmNoVGVtcGxhdGVPdXRwdXRzIHtcbiAgICByZXR1cm4ge1xuICAgICAgdmVyc2lvbk51bWJlcjogdGhpcy52ZXJzaW9uTnVtYmVyLFxuICAgICAgbGF1bmNoVGVtcGxhdGVJZDogdGhpcy5sYXVuY2hUZW1wbGF0ZUlkLFxuICAgICAgbGF1bmNoVGVtcGxhdGVOYW1lOiB0aGlzLmxhdW5jaFRlbXBsYXRlTmFtZSxcbiAgICB9O1xuICB9XG4gIHB1YmxpYyBnZXQgb3V0cHV0cygpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5sYXVuY2hUZW1wbGF0ZU91dHB1dHM7XG4gIH1cbiAgcHVibGljIHJlYWRvbmx5IHZlcnNpb25OdW1iZXI6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGxhdW5jaFRlbXBsYXRlSWQ/OiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBsYXVuY2hUZW1wbGF0ZU5hbWU/OiBzdHJpbmc7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vICAgRGF0YSBtZW1iZXJzXG5cbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IHZlcnNpb24gZm9yIHRoZSBsYXVuY2ggdGVtcGxhdGUuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBkZWZhdWx0VmVyc2lvbk51bWJlcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhlIGxhdW5jaCB0ZW1wbGF0ZS5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGxhdGVzdFZlcnNpb25OdW1iZXI6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgT1MgdGhlIGluc3RhbmNlIGlzIHJ1bm5pbmcuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBvc1R5cGU/OiBPcGVyYXRpbmdTeXN0ZW1UeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgQU1JIElEIG9mIHRoZSBpbWFnZSB0byB1c2VcbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGltYWdlSWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElBTSBSb2xlIGFzc3VtZWQgYnkgaW5zdGFuY2VzIHRoYXQgYXJlIGxhdW5jaGVkIGZyb20gdGhpcyB0ZW1wbGF0ZS5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJvbGU/OiBpYW0uSVJvbGU7XG5cbiAgLyoqXG4gICAqIFVzZXJEYXRhIGV4ZWN1dGVkIGJ5IGluc3RhbmNlcyB0aGF0IGFyZSBsYXVuY2hlZCBmcm9tIHRoaXMgdGVtcGxhdGUuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB1c2VyRGF0YT86IFVzZXJEYXRhO1xuXG4gIC8qKlxuICAgKiBUeXBlIG9mIGluc3RhbmNlIHRvIGxhdW5jaC5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGluc3RhbmNlVHlwZT86IEluc3RhbmNlVHlwZTtcblxuICBwdWJsaWMgcmVhZG9ubHkgcmVzb3VyY2U6IHRmTGF1bmNoVGVtcGxhdGUuTGF1bmNoVGVtcGxhdGU7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vICAgUHJpdmF0ZS9wcm90ZWN0ZWQgZGF0YSBtZW1iZXJzXG5cbiAgLyoqXG4gICAqIFByaW5jaXBhbCB0byBncmFudCBwZXJtaXNzaW9ucyB0by5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2dyYW50UHJpbmNpcGFsPzogaWFtLklQcmluY2lwYWw7XG5cbiAgLyoqXG4gICAqIEFsbG93cyBzcGVjaWZ5aW5nIHNlY3VyaXR5IGdyb3VwIGNvbm5lY3Rpb25zIGZvciB0aGUgaW5zdGFuY2UuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9jb25uZWN0aW9ucz86IENvbm5lY3Rpb25zO1xuXG4gIC8vIC8qKlxuICAvLyAgKiBUYWdNYW5hZ2VyIGZvciB0YWdnaW5nIHN1cHBvcnQuXG4gIC8vICAqL1xuICAvLyBwcm90ZWN0ZWQgcmVhZG9ubHkgdGFnczogVGFnTWFuYWdlcjtcblxuICAvLyBpc1RhZ2dhYmxlQ29uc3RydWN0IHJlcXVpcmVkIHByb3BlcnRpZXNcbiAgcHJpdmF0ZSBfdGFnczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgcHVibGljIHNldCB0YWdzKHZhbHVlOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KSB7XG4gICAgdGhpcy5fdGFncyA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyBnZXQgdGFncygpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICByZXR1cm4gVG9rZW4uYXNTdHJpbmdNYXAoXG4gICAgICBMYXp5LmFueVZhbHVlKHtcbiAgICAgICAgcHJvZHVjZTogKCkgPT4gdGhpcy5fdGFncyA/PyB1bmRlZmluZWQsXG4gICAgICB9KSxcbiAgICApO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCB0YWdzSW5wdXQoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3RhZ3M7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogTGF1bmNoVGVtcGxhdGVQcm9wcyA9IHt9KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIC8vIEJhc2ljIHZhbGlkYXRpb24gb2YgdGhlIHByb3ZpZGVkIHNwb3QgYmxvY2sgZHVyYXRpb25cbiAgICBjb25zdCBzcG90RHVyYXRpb24gPSBwcm9wcz8uc3BvdE9wdGlvbnM/LmJsb2NrRHVyYXRpb24/LnRvSG91cnMoe1xuICAgICAgaW50ZWdyYWw6IHRydWUsXG4gICAgfSk7XG4gICAgaWYgKHNwb3REdXJhdGlvbiAhPT0gdW5kZWZpbmVkICYmIChzcG90RHVyYXRpb24gPCAxIHx8IHNwb3REdXJhdGlvbiA+IDYpKSB7XG4gICAgICAvLyBTZWU6IGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L1VzZXJHdWlkZS9zcG90LXJlcXVlc3RzLmh0bWwjZml4ZWQtZHVyYXRpb24tc3BvdC1pbnN0YW5jZXNcbiAgICAgIEFubm90YXRpb25zLm9mKHRoaXMpLmFkZEVycm9yKFxuICAgICAgICBcIlNwb3QgYmxvY2sgZHVyYXRpb24gbXVzdCBiZSBleGFjdGx5IDEsIDIsIDMsIDQsIDUsIG9yIDYgaG91cnMuXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEJhc2ljIHZhbGlkYXRpb24gb2YgdGhlIHByb3ZpZGVkIGh0dHBQdXRSZXNwb25zZUhvcExpbWl0XG4gICAgaWYgKFxuICAgICAgcHJvcHMuaHR0cFB1dFJlc3BvbnNlSG9wTGltaXQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgKHByb3BzLmh0dHBQdXRSZXNwb25zZUhvcExpbWl0IDwgMSB8fCBwcm9wcy5odHRwUHV0UmVzcG9uc2VIb3BMaW1pdCA+IDY0KVxuICAgICkge1xuICAgICAgLy8gU2VlOiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1lYzItbGF1bmNodGVtcGxhdGUtbGF1bmNodGVtcGxhdGVkYXRhLW1ldGFkYXRhb3B0aW9ucy5odG1sI2Nmbi1lYzItbGF1bmNodGVtcGxhdGUtbGF1bmNodGVtcGxhdGVkYXRhLW1ldGFkYXRhb3B0aW9ucy1odHRwcHV0cmVzcG9uc2Vob3BsaW1pdFxuICAgICAgQW5ub3RhdGlvbnMub2YodGhpcykuYWRkRXJyb3IoXG4gICAgICAgIFwiSHR0cFB1dFJlc3BvbnNlSG9wTGltaXQgbXVzdCBiZXR3ZWVuIDEgYW5kIDY0XCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5pbnN0YW5jZVByb2ZpbGUgJiYgcHJvcHMucm9sZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiWW91IGNhbm5vdCBwcm92aWRlIGJvdGggYW4gaW5zdGFuY2VQcm9maWxlIGFuZCBhIHJvbGVcIik7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLmtleU5hbWUgJiYgcHJvcHMua2V5UGFpcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkNhbm5vdCBzcGVjaWZ5IGJvdGggb2YgJ2tleU5hbWUnIGFuZCAna2V5UGFpcic7IHByZWZlciAna2V5UGFpcidcIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gdXNlIHByb3ZpZGVkIGluc3RhbmNlIHByb2ZpbGUgb3IgY3JlYXRlIG9uZSBpZiBhIHJvbGUgd2FzIHByb3ZpZGVkXG4gICAgbGV0IGlhbVByb2ZpbGVBcm46IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICBpZiAocHJvcHMuaW5zdGFuY2VQcm9maWxlKSB7XG4gICAgICB0aGlzLnJvbGUgPSBwcm9wcy5pbnN0YW5jZVByb2ZpbGUucm9sZTtcbiAgICAgIGlhbVByb2ZpbGVBcm4gPSBwcm9wcy5pbnN0YW5jZVByb2ZpbGUuaW5zdGFuY2VQcm9maWxlQXJuO1xuICAgIH0gZWxzZSBpZiAocHJvcHMucm9sZSkge1xuICAgICAgdGhpcy5yb2xlID0gcHJvcHMucm9sZTtcbiAgICAgIGNvbnN0IGlhbVByb2ZpbGUgPSBuZXcgdGZJYW1JbnN0YW5jZVByb2ZpbGUuSWFtSW5zdGFuY2VQcm9maWxlKFxuICAgICAgICB0aGlzLFxuICAgICAgICBcIlByb2ZpbGVcIixcbiAgICAgICAge1xuICAgICAgICAgIHJvbGU6IHRoaXMucm9sZS5yb2xlTmFtZSxcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgICBpYW1Qcm9maWxlQXJuID0gaWFtUHJvZmlsZS5hcm47XG4gICAgfVxuXG4gICAgdGhpcy5fZ3JhbnRQcmluY2lwYWwgPSB0aGlzLnJvbGU7XG5cbiAgICBpZiAocHJvcHMuc2VjdXJpdHlHcm91cCkge1xuICAgICAgdGhpcy5fY29ubmVjdGlvbnMgPSBuZXcgQ29ubmVjdGlvbnMoe1xuICAgICAgICBzZWN1cml0eUdyb3VwczogW3Byb3BzLnNlY3VyaXR5R3JvdXBdLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IHNlY3VyaXR5R3JvdXBzVG9rZW4gPSBMYXp5Lmxpc3RWYWx1ZSh7XG4gICAgICBwcm9kdWNlOiAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9jb25uZWN0aW9ucyAmJiB0aGlzLl9jb25uZWN0aW9ucy5zZWN1cml0eUdyb3Vwcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX2Nvbm5lY3Rpb25zLnNlY3VyaXR5R3JvdXBzLm1hcChcbiAgICAgICAgICAgIChzZykgPT4gc2cuc2VjdXJpdHlHcm91cElkLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBpbWFnZUNvbmZpZzogTWFjaGluZUltYWdlQ29uZmlnIHwgdW5kZWZpbmVkID1cbiAgICAgIHByb3BzLm1hY2hpbmVJbWFnZT8uZ2V0SW1hZ2UodGhpcyk7XG4gICAgaWYgKGltYWdlQ29uZmlnKSB7XG4gICAgICB0aGlzLm9zVHlwZSA9IGltYWdlQ29uZmlnLm9zVHlwZTtcbiAgICAgIHRoaXMuaW1hZ2VJZCA9IGltYWdlQ29uZmlnLmltYWdlSWQ7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdGhpcy5vc1R5cGUgJiZcbiAgICAgIHByb3BzLmtleVBhaXIgJiZcbiAgICAgICFwcm9wcy5rZXlQYWlyLl9pc09zQ29tcGF0aWJsZSh0aGlzLm9zVHlwZSlcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYCR7cHJvcHMua2V5UGFpci50eXBlfSBrZXlzIGFyZSBub3QgY29tcGF0aWJsZSB3aXRoIHRoZSBjaG9zZW4gQU1JYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gcHJpb3JpdHk6IHByb3AudXNlckRhdGEgLT4gdXNlckRhdGEgZnJvbSBtYWNoaW5lSW1hZ2UgLT4gdW5kZWZpbmVkXG4gICAgdGhpcy51c2VyRGF0YSA9IHByb3BzLnVzZXJEYXRhID8/IGltYWdlQ29uZmlnPy51c2VyRGF0YTtcbiAgICB0aGlzLmluc3RhbmNlVHlwZSA9IHByb3BzLmluc3RhbmNlVHlwZTtcblxuICAgIGxldCBtYXJrZXRPcHRpb25zOiBhbnkgPSB1bmRlZmluZWQ7XG4gICAgaWYgKHByb3BzPy5zcG90T3B0aW9ucykge1xuICAgICAgbWFya2V0T3B0aW9ucyA9IHtcbiAgICAgICAgbWFya2V0VHlwZTogXCJzcG90XCIsXG4gICAgICAgIHNwb3RPcHRpb25zOiB7XG4gICAgICAgICAgYmxvY2tEdXJhdGlvbk1pbnV0ZXM6XG4gICAgICAgICAgICBzcG90RHVyYXRpb24gIT09IHVuZGVmaW5lZCA/IHNwb3REdXJhdGlvbiAqIDYwIDogdW5kZWZpbmVkLFxuICAgICAgICAgIGluc3RhbmNlSW50ZXJydXB0aW9uQmVoYXZpb3I6IHByb3BzLnNwb3RPcHRpb25zLmludGVycnVwdGlvbkJlaGF2aW9yLFxuICAgICAgICAgIG1heFByaWNlOiBwcm9wcy5zcG90T3B0aW9ucy5tYXhQcmljZT8udG9TdHJpbmcoKSxcbiAgICAgICAgICBzcG90SW5zdGFuY2VUeXBlOiBwcm9wcy5zcG90T3B0aW9ucy5yZXF1ZXN0VHlwZSxcbiAgICAgICAgICB2YWxpZFVudGlsOiBwcm9wcy5zcG90T3B0aW9ucy52YWxpZFVudGlsPy5kYXRlLnRvVVRDU3RyaW5nKCksXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgLy8gUmVtb3ZlIFNwb3RPcHRpb25zIGlmIHRoZXJlIGFyZSBub25lLlxuICAgICAgaWYgKFxuICAgICAgICBPYmplY3Qua2V5cyhtYXJrZXRPcHRpb25zLnNwb3RPcHRpb25zKS5maWx0ZXIoXG4gICAgICAgICAgKGspID0+IG1hcmtldE9wdGlvbnMuc3BvdE9wdGlvbnNba10sXG4gICAgICAgICkubGVuZ3RoID09IDBcbiAgICAgICkge1xuICAgICAgICBtYXJrZXRPcHRpb25zLnNwb3RPcHRpb25zID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHRoaXMudGFncyA9IG5ldyBUYWdNYW5hZ2VyKFxuICAgIC8vICAgVGFnVHlwZS5LRVlfVkFMVUUsXG4gICAgLy8gICB0ZkxhdW5jaFRlbXBsYXRlLkxhdW5jaFRlbXBsYXRlLnRmUmVzb3VyY2VUeXBlLFxuICAgIC8vICk7XG5cbiAgICBjb25zdCB0YWdzVG9rZW4gPSBMYXp5LmFueVZhbHVlKHtcbiAgICAgIHByb2R1Y2U6ICgpOlxuICAgICAgICB8IHRmTGF1bmNoVGVtcGxhdGUuTGF1bmNoVGVtcGxhdGVUYWdTcGVjaWZpY2F0aW9uc1tdXG4gICAgICAgIHwgdW5kZWZpbmVkID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX3RhZ3MpIHtcbiAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICByZXNvdXJjZVR5cGU6IFwiaW5zdGFuY2VcIixcbiAgICAgICAgICAgICAgdGFnczogdGhpcy5fdGFncyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHJlc291cmNlVHlwZTogXCJ2b2x1bWVcIixcbiAgICAgICAgICAgICAgdGFnczogdGhpcy5fdGFncyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXS5tYXAodGZMYXVuY2hUZW1wbGF0ZS5sYXVuY2hUZW1wbGF0ZVRhZ1NwZWNpZmljYXRpb25zVG9UZXJyYWZvcm0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgY29uc3QgbmV0d29ya0ludGVyZmFjZXM6XG4gICAgICB8IHRmTGF1bmNoVGVtcGxhdGUuTGF1bmNoVGVtcGxhdGVOZXR3b3JrSW50ZXJmYWNlc1tdXG4gICAgICB8IHVuZGVmaW5lZCA9XG4gICAgICBwcm9wcy5hc3NvY2lhdGVQdWJsaWNJcEFkZHJlc3MgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZGV2aWNlSW5kZXg6IDAsXG4gICAgICAgICAgICAgIGFzc29jaWF0ZVB1YmxpY0lwQWRkcmVzczpcbiAgICAgICAgICAgICAgICBwcm9wcy5hc3NvY2lhdGVQdWJsaWNJcEFkZHJlc3M/LnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgIHNlY3VyaXR5R3JvdXBzOiBzZWN1cml0eUdyb3Vwc1Rva2VuLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdXG4gICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKFxuICAgICAgcHJvcHMudmVyc2lvbkRlc2NyaXB0aW9uICYmXG4gICAgICAhVG9rZW4uaXNVbnJlc29sdmVkKHByb3BzLnZlcnNpb25EZXNjcmlwdGlvbikgJiZcbiAgICAgIHByb3BzLnZlcnNpb25EZXNjcmlwdGlvbi5sZW5ndGggPiAyNTVcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYHZlcnNpb25EZXNjcmlwdGlvbiBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyNTUgY2hhcmFjdGVycywgZ290ICR7cHJvcHMudmVyc2lvbkRlc2NyaXB0aW9uLmxlbmd0aH1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlc291cmNlID0gbmV3IHRmTGF1bmNoVGVtcGxhdGUuTGF1bmNoVGVtcGxhdGUodGhpcywgXCJSZXNvdXJjZVwiLCB7XG4gICAgICBuYW1lOiBwcm9wcz8ubGF1bmNoVGVtcGxhdGVOYW1lLFxuICAgICAgZGVzY3JpcHRpb246IHByb3BzPy52ZXJzaW9uRGVzY3JpcHRpb24sXG4gICAgICBibG9ja0RldmljZU1hcHBpbmdzOlxuICAgICAgICBwcm9wcz8uYmxvY2tEZXZpY2VzICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IGxhdW5jaFRlbXBsYXRlQmxvY2tEZXZpY2VNYXBwaW5ncyh0aGlzLCBwcm9wcy5ibG9ja0RldmljZXMpXG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBjcmVkaXRTcGVjaWZpY2F0aW9uOlxuICAgICAgICBwcm9wcz8uY3B1Q3JlZGl0cyAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIGNwdUNyZWRpdHM6IHByb3BzLmNwdUNyZWRpdHMsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBkaXNhYmxlQXBpVGVybWluYXRpb246IHByb3BzPy5kaXNhYmxlQXBpVGVybWluYXRpb24sXG4gICAgICBlYnNPcHRpbWl6ZWQ6IHByb3BzPy5lYnNPcHRpbWl6ZWQ/LnRvU3RyaW5nKCksXG4gICAgICBlbmNsYXZlT3B0aW9uczpcbiAgICAgICAgcHJvcHM/Lm5pdHJvRW5jbGF2ZUVuYWJsZWQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBlbmFibGVkOiBwcm9wcy5uaXRyb0VuY2xhdmVFbmFibGVkLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgaGliZXJuYXRpb25PcHRpb25zOlxuICAgICAgICBwcm9wcz8uaGliZXJuYXRpb25Db25maWd1cmVkICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgY29uZmlndXJlZDogcHJvcHMuaGliZXJuYXRpb25Db25maWd1cmVkLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgaWFtSW5zdGFuY2VQcm9maWxlOlxuICAgICAgICBpYW1Qcm9maWxlQXJuICE9PSB1bmRlZmluZWQgPyB7IGFybjogaWFtUHJvZmlsZUFybiB9IDogdW5kZWZpbmVkLFxuICAgICAgaW1hZ2VJZDogaW1hZ2VDb25maWc/LmltYWdlSWQsXG4gICAgICBpbnN0YW5jZVR5cGU6IHByb3BzPy5pbnN0YW5jZVR5cGU/LnRvU3RyaW5nKCksXG4gICAgICBpbnN0YW5jZUluaXRpYXRlZFNodXRkb3duQmVoYXZpb3I6XG4gICAgICAgIHByb3BzPy5pbnN0YW5jZUluaXRpYXRlZFNodXRkb3duQmVoYXZpb3IsXG4gICAgICBpbnN0YW5jZU1hcmtldE9wdGlvbnM6IG1hcmtldE9wdGlvbnMsXG4gICAgICBrZXlOYW1lOiBwcm9wcy5rZXlQYWlyPy5rZXlQYWlyTmFtZSA/PyBwcm9wcz8ua2V5TmFtZSxcbiAgICAgIG1vbml0b3Jpbmc6XG4gICAgICAgIHByb3BzPy5kZXRhaWxlZE1vbml0b3JpbmcgIT09IHVuZGVmaW5lZFxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBlbmFibGVkOiBwcm9wcy5kZXRhaWxlZE1vbml0b3JpbmcsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICB2cGNTZWN1cml0eUdyb3VwSWRzOiBuZXR3b3JrSW50ZXJmYWNlcyA/IHVuZGVmaW5lZCA6IHNlY3VyaXR5R3JvdXBzVG9rZW4sXG4gICAgICB0YWdTcGVjaWZpY2F0aW9uczogdGFnc1Rva2VuLFxuICAgICAgdXNlckRhdGE6IHRoaXMudXNlckRhdGE/LnJlbmRlcih0aGlzKSxcbiAgICAgIG1ldGFkYXRhT3B0aW9uczogdGhpcy5yZW5kZXJNZXRhZGF0YU9wdGlvbnMocHJvcHMpLFxuICAgICAgbmV0d29ya0ludGVyZmFjZXMsXG5cbiAgICAgIC8vIEZpZWxkcyBub3QgeWV0IGltcGxlbWVudGVkOlxuICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1wcm9wZXJ0aWVzLWVjMi1sYXVuY2h0ZW1wbGF0ZS1sYXVuY2h0ZW1wbGF0ZWRhdGEtY2FwYWNpdHlyZXNlcnZhdGlvbnNwZWNpZmljYXRpb24uaHRtbFxuICAgICAgLy8gV2lsbCByZXF1aXJlIGNyZWF0aW5nIGFuIEwyIGZvciBBV1M6OkVDMjo6Q2FwYWNpdHlSZXNlcnZhdGlvblxuICAgICAgLy8gY2FwYWNpdHlSZXNlcnZhdGlvblNwZWNpZmljYXRpb246IHVuZGVmaW5lZCxcblxuICAgICAgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXByb3BlcnRpZXMtZWMyLWxhdW5jaHRlbXBsYXRlLWxhdW5jaHRlbXBsYXRlZGF0YS1jcHVvcHRpb25zLmh0bWxcbiAgICAgIC8vIGNwdU9wdGlvbnM6IHVuZGVmaW5lZCxcblxuICAgICAgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXByb3BlcnRpZXMtZWMyLWxhdW5jaHRlbXBsYXRlLWVsYXN0aWNncHVzcGVjaWZpY2F0aW9uLmh0bWxcbiAgICAgIC8vIGVsYXN0aWNHcHVTcGVjaWZpY2F0aW9uczogdW5kZWZpbmVkLFxuXG4gICAgICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1lYzItbGF1bmNodGVtcGxhdGUtbGF1bmNodGVtcGxhdGVkYXRhLmh0bWwjY2ZuLWVjMi1sYXVuY2h0ZW1wbGF0ZS1sYXVuY2h0ZW1wbGF0ZWRhdGEtZWxhc3RpY2luZmVyZW5jZWFjY2VsZXJhdG9yc1xuICAgICAgLy8gZWxhc3RpY0luZmVyZW5jZUFjY2VsZXJhdG9yczogdW5kZWZpbmVkLFxuXG4gICAgICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1lYzItbGF1bmNodGVtcGxhdGUtbGF1bmNodGVtcGxhdGVkYXRhLmh0bWwjY2ZuLWVjMi1sYXVuY2h0ZW1wbGF0ZS1sYXVuY2h0ZW1wbGF0ZWRhdGEta2VybmVsaWRcbiAgICAgIC8vIGtlcm5lbElkOiB1bmRlZmluZWQsXG4gICAgICAvLyByYW1EaXNrSWQ6IHVuZGVmaW5lZCxcblxuICAgICAgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXByb3BlcnRpZXMtZWMyLWxhdW5jaHRlbXBsYXRlLWxhdW5jaHRlbXBsYXRlZGF0YS5odG1sI2Nmbi1lYzItbGF1bmNodGVtcGxhdGUtbGF1bmNodGVtcGxhdGVkYXRhLWxpY2Vuc2VzcGVjaWZpY2F0aW9uc1xuICAgICAgLy8gQWxzbyBub3QgaW1wbGVtZW50ZWQgaW4gSW5zdGFuY2UgTDJcbiAgICAgIC8vIGxpY2Vuc2VTcGVjaWZpY2F0aW9uczogdW5kZWZpbmVkLFxuXG4gICAgICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1lYzItbGF1bmNodGVtcGxhdGUtbGF1bmNodGVtcGxhdGVkYXRhLmh0bWwjY2ZuLWVjMi1sYXVuY2h0ZW1wbGF0ZS1sYXVuY2h0ZW1wbGF0ZWRhdGEtdGFnc3BlY2lmaWNhdGlvbnNcbiAgICAgIC8vIFNob3VsZCBiZSBpbXBsZW1lbnRlZCB2aWEgdGhlIFRhZ2dpbmcgYXNwZWN0IGluIENESyBjb3JlLiBDb21wbGljYXRpb24gd2lsbCBiZSB0aGF0IHRoaXMgdGFnZ2luZyBpbnRlcmZhY2UgaXMgdmVyeSB1bmlxdWUgdG8gTGF1bmNoVGVtcGxhdGVzLlxuICAgICAgLy8gdGFnU3BlY2lmaWNhdGlvbjogdW5kZWZpbmVkXG5cbiAgICAgIC8vIFRPRE86IHVzZSBJUGxhY2VtZW50R3JvdXAgaW4gTHVhbmNoVGVtcGxhdGVcbiAgICAgIC8vIHBsYWNlbWVudDogdW5kZWZpbmVkLFxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMucm9sZSkge1xuICAgICAgdGhpcy5yZXNvdXJjZS5ub2RlLmFkZERlcGVuZGVuY3kodGhpcy5yb2xlKTtcbiAgICB9IGVsc2UgaWYgKHByb3BzLmluc3RhbmNlUHJvZmlsZT8ucm9sZSkge1xuICAgICAgdGhpcy5yZXNvdXJjZS5ub2RlLmFkZERlcGVuZGVuY3kocHJvcHMuaW5zdGFuY2VQcm9maWxlLnJvbGUpO1xuICAgIH1cblxuICAgIFRhZ3Mub2YodGhpcykuYWRkKE5BTUVfVEFHLCB0aGlzLm5vZGUucGF0aCk7XG5cbiAgICB0aGlzLmRlZmF1bHRWZXJzaW9uTnVtYmVyID0gdGhpcy5yZXNvdXJjZS5kZWZhdWx0VmVyc2lvbi50b1N0cmluZygpOyAvLyBzaG91bGQgYmUgVG9rZW4uYXNTdHJpbmcoKT9cbiAgICB0aGlzLmxhdGVzdFZlcnNpb25OdW1iZXIgPSB0aGlzLnJlc291cmNlLmxhdGVzdFZlcnNpb24udG9TdHJpbmcoKTsgLy8gc2hvdWxkIGJlIFRva2VuLmFzU3RyaW5nKCk/XG4gICAgdGhpcy5sYXVuY2hUZW1wbGF0ZUlkID0gdGhpcy5yZXNvdXJjZS5pZDtcbiAgICB0aGlzLnZlcnNpb25OdW1iZXIgPSB0aGlzLnJlc291cmNlLmxhdGVzdFZlcnNpb24udG9TdHJpbmcoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyTWV0YWRhdGFPcHRpb25zKHByb3BzOiBMYXVuY2hUZW1wbGF0ZVByb3BzKSB7XG4gICAgbGV0IHJlcXVpcmVNZXRhZGF0YU9wdGlvbnMgPSBmYWxzZTtcbiAgICAvLyBpZiByZXF1aXJlSW1kc3YyIGlzIHRydWUsIGh0dHBUb2tlbnMgbXVzdCBiZSByZXF1aXJlZC5cbiAgICBpZiAoXG4gICAgICBwcm9wcy5yZXF1aXJlSW1kc3YyID09PSB0cnVlICYmXG4gICAgICBwcm9wcy5odHRwVG9rZW5zID09PSBMYXVuY2hUZW1wbGF0ZUh0dHBUb2tlbnMuT1BUSU9OQUxcbiAgICApIHtcbiAgICAgIEFubm90YXRpb25zLm9mKHRoaXMpLmFkZEVycm9yKFxuICAgICAgICBcImh0dHBUb2tlbnMgbXVzdCBiZSByZXF1aXJlZCB3aGVuIHJlcXVpcmVJbWRzdjIgaXMgdHJ1ZVwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgcHJvcHMuaHR0cEVuZHBvaW50ICE9PSB1bmRlZmluZWQgfHxcbiAgICAgIHByb3BzLmh0dHBQcm90b2NvbElwdjYgIT09IHVuZGVmaW5lZCB8fFxuICAgICAgcHJvcHMuaHR0cFB1dFJlc3BvbnNlSG9wTGltaXQgIT09IHVuZGVmaW5lZCB8fFxuICAgICAgcHJvcHMuaHR0cFRva2VucyAhPT0gdW5kZWZpbmVkIHx8XG4gICAgICBwcm9wcy5pbnN0YW5jZU1ldGFkYXRhVGFncyAhPT0gdW5kZWZpbmVkIHx8XG4gICAgICBwcm9wcy5yZXF1aXJlSW1kc3YyID09PSB0cnVlXG4gICAgKSB7XG4gICAgICByZXF1aXJlTWV0YWRhdGFPcHRpb25zID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHJlcXVpcmVNZXRhZGF0YU9wdGlvbnMpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGh0dHBFbmRwb2ludDpcbiAgICAgICAgICBwcm9wcy5odHRwRW5kcG9pbnQgPT09IHRydWVcbiAgICAgICAgICAgID8gXCJlbmFibGVkXCJcbiAgICAgICAgICAgIDogcHJvcHMuaHR0cEVuZHBvaW50ID09PSBmYWxzZVxuICAgICAgICAgICAgICA/IFwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgaHR0cFByb3RvY29sSXB2NjpcbiAgICAgICAgICBwcm9wcy5odHRwUHJvdG9jb2xJcHY2ID09PSB0cnVlXG4gICAgICAgICAgICA/IFwiZW5hYmxlZFwiXG4gICAgICAgICAgICA6IHByb3BzLmh0dHBQcm90b2NvbElwdjYgPT09IGZhbHNlXG4gICAgICAgICAgICAgID8gXCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICBodHRwUHV0UmVzcG9uc2VIb3BMaW1pdDogcHJvcHMuaHR0cFB1dFJlc3BvbnNlSG9wTGltaXQsXG4gICAgICAgIGh0dHBUb2tlbnM6XG4gICAgICAgICAgcHJvcHMucmVxdWlyZUltZHN2MiA9PT0gdHJ1ZVxuICAgICAgICAgICAgPyBMYXVuY2hUZW1wbGF0ZUh0dHBUb2tlbnMuUkVRVUlSRURcbiAgICAgICAgICAgIDogcHJvcHMuaHR0cFRva2VucyxcbiAgICAgICAgaW5zdGFuY2VNZXRhZGF0YVRhZ3M6XG4gICAgICAgICAgcHJvcHMuaW5zdGFuY2VNZXRhZGF0YVRhZ3MgPT09IHRydWVcbiAgICAgICAgICAgID8gXCJlbmFibGVkXCJcbiAgICAgICAgICAgIDogcHJvcHMuaW5zdGFuY2VNZXRhZGF0YVRhZ3MgPT09IGZhbHNlXG4gICAgICAgICAgICAgID8gXCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkIHRoZSBzZWN1cml0eSBncm91cCB0byB0aGUgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSBzZWN1cml0eUdyb3VwOiBUaGUgc2VjdXJpdHkgZ3JvdXAgdG8gYWRkXG4gICAqL1xuICBwdWJsaWMgYWRkU2VjdXJpdHlHcm91cChzZWN1cml0eUdyb3VwOiBJU2VjdXJpdHlHcm91cCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fY29ubmVjdGlvbnMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJMYXVuY2hUZW1wbGF0ZSBjYW4gb25seSBiZSBhZGRlZCBhIHNlY3VyaXR5R3JvdXAgaWYgYW5vdGhlciBzZWN1cml0eUdyb3VwIGlzIGluaXRpYWxpemVkIGluIHRoZSBjb25zdHJ1Y3Rvci5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuX2Nvbm5lY3Rpb25zLmFkZFNlY3VyaXR5R3JvdXAoc2VjdXJpdHlHcm91cCk7XG4gIH1cblxuICAvKipcbiAgICogQWxsb3dzIHNwZWNpZnlpbmcgc2VjdXJpdHkgZ3JvdXAgY29ubmVjdGlvbnMgZm9yIHRoZSBpbnN0YW5jZS5cbiAgICpcbiAgICogQG5vdGUgT25seSBhdmFpbGFibGUgaWYgeW91IHByb3ZpZGUgYSBzZWN1cml0eUdyb3VwIHdoZW4gY29uc3RydWN0aW5nIHRoZSBMYXVuY2hUZW1wbGF0ZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgY29ubmVjdGlvbnMoKTogQ29ubmVjdGlvbnMge1xuICAgIGlmICghdGhpcy5fY29ubmVjdGlvbnMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJMYXVuY2hUZW1wbGF0ZSBjYW4gb25seSBiZSB1c2VkIGFzIElDb25uZWN0YWJsZSBpZiBhIHNlY3VyaXR5R3JvdXAgaXMgcHJvdmlkZWQgd2hlbiBjb25zdHJ1Y3RpbmcgaXQuXCIsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fY29ubmVjdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogUHJpbmNpcGFsIHRvIGdyYW50IHBlcm1pc3Npb25zIHRvLlxuICAgKlxuICAgKiBAbm90ZSBPbmx5IGF2YWlsYWJsZSBpZiB5b3UgcHJvdmlkZSBhIHJvbGUgd2hlbiBjb25zdHJ1Y3RpbmcgdGhlIExhdW5jaFRlbXBsYXRlLlxuICAgKi9cbiAgcHVibGljIGdldCBncmFudFByaW5jaXBhbCgpOiBpYW0uSVByaW5jaXBhbCB7XG4gICAgaWYgKCF0aGlzLl9ncmFudFByaW5jaXBhbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkxhdW5jaFRlbXBsYXRlIGNhbiBvbmx5IGJlIHVzZWQgYXMgSUdyYW50YWJsZSBpZiBhIHJvbGUgaXMgcHJvdmlkZWQgd2hlbiBjb25zdHJ1Y3RpbmcgaXQuXCIsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fZ3JhbnRQcmluY2lwYWw7XG4gIH1cbn1cbiJdfQ==
463
+ LaunchTemplate[_b] = { fqn: "terraconstructs.aws.compute.LaunchTemplate", version: "0.2.6" };
464
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF1bmNoLXRlbXBsYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F3cy9jb21wdXRlL2xhdW5jaC10ZW1wbGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG1HQUFtRztBQUVuRyxzREFHNkI7QUFDN0IsaUNBQWlEO0FBRWpELCtDQUEwRDtBQVExRCxpREFBdUU7QUFNdkUsb0RBSTBCO0FBQzFCLG1DQUFtQztBQUNuQywwQ0FBbUM7QUFLbkM7O0dBRUc7QUFDSCxNQUFNLFFBQVEsR0FBVyxNQUFNLENBQUM7QUFFaEM7Ozs7R0FJRztBQUNILGtEQUFrRDtBQUNsRCxJQUFZLFVBWVg7QUFaRCxXQUFZLFVBQVU7SUFDcEI7OztPQUdHO0lBQ0gsbUNBQXFCLENBQUE7SUFFckI7OztPQUdHO0lBQ0gscUNBQXVCLENBQUE7QUFDekIsQ0FBQyxFQVpXLFVBQVUsMEJBQVYsVUFBVSxRQVlyQjtBQUVEOzs7O0dBSUc7QUFDSCxrREFBa0Q7QUFDbEQsSUFBWSxpQ0FVWDtBQVZELFdBQVksaUNBQWlDO0lBQzNDOztPQUVHO0lBQ0gsa0RBQWEsQ0FBQTtJQUViOztPQUVHO0lBQ0gsNERBQXVCLENBQUE7QUFDekIsQ0FBQyxFQVZXLGlDQUFpQyxpREFBakMsaUNBQWlDLFFBVTVDO0FBOEREOztHQUVHO0FBQ0gsd0VBQXdFO0FBQ3hFLElBQVksd0JBZVg7QUFmRCxXQUFZLHdCQUF3QjtJQUNsQzs7T0FFRztJQUNILHlDQUFhLENBQUE7SUFFYjs7T0FFRztJQUNILG1EQUF1QixDQUFBO0lBRXZCOztPQUVHO0lBQ0gsbURBQXVCLENBQUE7QUFDekIsQ0FBQyxFQWZXLHdCQUF3Qix3Q0FBeEIsd0JBQXdCLFFBZW5DO0FBRUQ7Ozs7R0FJRztBQUNILElBQVksZUFpQlg7QUFqQkQsV0FBWSxlQUFlO0lBQ3pCOzs7OztPQUtHO0lBQ0gsd0NBQXFCLENBQUE7SUFFckI7Ozs7OztPQU1HO0lBQ0gsNENBQXlCLENBQUE7QUFD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Z0IsQ0FBQyxhQUE2QjtRQUNuRCxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQ2IsOEdBQThHLENBQy9HLENBQUM7UUFDSixDQUFDO1FBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQVcsV0FBVztRQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQ2Isc0dBQXNHLENBQ3ZHLENBQUM7UUFDSixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFBVyxjQUFjO1FBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FDYiwyRkFBMkYsQ0FDNUYsQ0FBQztRQUNKLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDOUIsQ0FBQzs7QUE5ZUgsd0NBK2VDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvdjIuMTc1LjEvcGFja2FnZXMvYXdzLWNkay1saWIvYXdzLWVjMi9saWIvbGF1bmNoLXRlbXBsYXRlLnRzXG5cbmltcG9ydCB7XG4gIGxhdW5jaFRlbXBsYXRlIGFzIHRmTGF1bmNoVGVtcGxhdGUsXG4gIGlhbUluc3RhbmNlUHJvZmlsZSBhcyB0ZklhbUluc3RhbmNlUHJvZmlsZSxcbn0gZnJvbSBcIkBjZGt0bi9wcm92aWRlci1hd3NcIjtcbmltcG9ydCB7IEFubm90YXRpb25zLCBMYXp5LCBUb2tlbiB9IGZyb20gXCJjZGt0blwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IENvbm5lY3Rpb25zLCBJQ29ubmVjdGFibGUgfSBmcm9tIFwiLi9jb25uZWN0aW9uc1wiO1xuaW1wb3J0IHsgSW5zdGFuY2VUeXBlIH0gZnJvbSBcIi4vaW5zdGFuY2UtdHlwZXNcIjtcbmltcG9ydCB7IElLZXlQYWlyIH0gZnJvbSBcIi4va2V5LXBhaXJcIjtcbmltcG9ydCB7XG4gIElNYWNoaW5lSW1hZ2UsXG4gIE1hY2hpbmVJbWFnZUNvbmZpZyxcbiAgT3BlcmF0aW5nU3lzdGVtVHlwZSxcbn0gZnJvbSBcIi4vbWFjaGluZS1pbWFnZVwiO1xuaW1wb3J0IHsgbGF1bmNoVGVtcGxhdGVCbG9ja0RldmljZU1hcHBpbmdzIH0gZnJvbSBcIi4vcHJpdmF0ZS9lYnMtdXRpbFwiO1xuaW1wb3J0IHsgSVNlY3VyaXR5R3JvdXAgfSBmcm9tIFwiLi9zZWN1cml0eS1ncm91cFwiO1xuaW1wb3J0IHsgVXNlckRhdGEgfSBmcm9tIFwiLi91c2VyLWRhdGFcIjtcbmltcG9ydCB7IEJsb2NrRGV2aWNlIH0gZnJvbSBcIi4vdm9sdW1lXCI7XG5pbXBvcnQgeyBEdXJhdGlvbiB9IGZyb20gXCIuLi8uLi9kdXJhdGlvblwiO1xuaW1wb3J0IHsgRXhwaXJhdGlvbiB9IGZyb20gXCIuLi8uLi9leHBpcmF0aW9uXCI7XG5pbXBvcnQge1xuICBJQXdzQ29uc3RydWN0LFxuICBBd3NDb25zdHJ1Y3RCYXNlLFxuICAvLyBUYWdUeXBlXG59IGZyb20gXCIuLi9hd3MtY29uc3RydWN0XCI7XG4vLyBUT0RPOiBBbGlnbiB3aXRoIEFXUyBDREsgVGFnZ2luZ1xuaW1wb3J0IHsgVGFncyB9IGZyb20gXCIuLi9hd3MtdGFnc1wiO1xuLy8gaW1wb3J0IHsgVGFncyB9IGZyb20gXCIuLi90YWctYXNwZWN0XCI7XG4vLyBpbXBvcnQgeyBUYWdNYW5hZ2VyIH0gZnJvbSBcIi4uL3RhZy1tYW5hZ2VyXCI7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSBcIi4uL2lhbVwiO1xuXG4vKipcbiAqIE5hbWUgdGFnIGNvbnN0YW50XG4gKi9cbmNvbnN0IE5BTUVfVEFHOiBzdHJpbmcgPSBcIk5hbWVcIjtcblxuLyoqXG4gKiBQcm92aWRlcyB0aGUgb3B0aW9ucyBmb3Igc3BlY2lmeWluZyB0aGUgQ1BVIGNyZWRpdCB0eXBlIGZvciBidXJzdGFibGUgRUMyIGluc3RhbmNlIHR5cGVzIChUMiwgVDMsIFQzYSwgZXRjKS5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L1VzZXJHdWlkZS9idXJzdGFibGUtcGVyZm9ybWFuY2UtaW5zdGFuY2VzLWhvdy10by5odG1sXG4gKi9cbi8vIGRldi1ub3RlOiBUaGlzIGNvdWxkIGJlIHVzZWQgaW4gdGhlIEluc3RhbmNlIEwyXG5leHBvcnQgZW51bSBDcHVDcmVkaXRzIHtcbiAgLyoqXG4gICAqIFN0YW5kYXJkIGJ1cnN0aW5nIG1vZGUuXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvVXNlckd1aWRlL2J1cnN0YWJsZS1wZXJmb3JtYW5jZS1pbnN0YW5jZXMtc3RhbmRhcmQtbW9kZS5odG1sXG4gICAqL1xuICBTVEFOREFSRCA9IFwic3RhbmRhcmRcIixcblxuICAvKipcbiAgICogVW5saW1pdGVkIGJ1cnN0aW5nIG1vZGUuXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvVXNlckd1aWRlL2J1cnN0YWJsZS1wZXJmb3JtYW5jZS1pbnN0YW5jZXMtdW5saW1pdGVkLW1vZGUuaHRtbFxuICAgKi9cbiAgVU5MSU1JVEVEID0gXCJ1bmxpbWl0ZWRcIixcbn1cblxuLyoqXG4gKiBQcm92aWRlcyB0aGUgb3B0aW9ucyBmb3Igc3BlY2lmeWluZyB0aGUgaW5zdGFuY2UgaW5pdGlhdGVkIHNodXRkb3duIGJlaGF2aW9yLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvVXNlckd1aWRlL3Rlcm1pbmF0aW5nLWluc3RhbmNlcy5odG1sI1VzaW5nX0NoYW5naW5nSW5zdGFuY2VJbml0aWF0ZWRTaHV0ZG93bkJlaGF2aW9yXG4gKi9cbi8vIGRldi1ub3RlOiBUaGlzIGNvdWxkIGJlIHVzZWQgaW4gdGhlIEluc3RhbmNlIEwyXG5leHBvcnQgZW51bSBJbnN0YW5jZUluaXRpYXRlZFNodXRkb3duQmVoYXZpb3Ige1xuICAvKipcbiAgICogVGhlIGluc3RhbmNlIHdpbGwgc3RvcCB3aGVuIGl0IGluaXRpYXRlcyBhIHNodXRkb3duLlxuICAgKi9cbiAgU1RPUCA9IFwic3RvcFwiLFxuXG4gIC8qKlxuICAgKiBUaGUgaW5zdGFuY2Ugd2lsbCBiZSB0ZXJtaW5hdGVkIHdoZW4gaXQgaW5pdGlhdGVzIGEgc2h1dGRvd24uXG4gICAqL1xuICBURVJNSU5BVEUgPSBcInRlcm1pbmF0ZVwiLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIExhdW5jaFRlbXBsYXRlT3V0cHV0cyB7XG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBsYXVuY2ggdGVtcGxhdGUgdG8gdXNlXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHZlcnNpb25OdW1iZXI6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGlkZW50aWZpZXIgb2YgdGhlIExhdW5jaCBUZW1wbGF0ZVxuICAgKlxuICAgKiBFeGFjdGx5IG9uZSBvZiBgbGF1bmNoVGVtcGxhdGVJZGAgYW5kIGBsYXVuY2hUZW1wbGF0ZU5hbWVgIHdpbGwgYmUgc2V0LlxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBsYXVuY2hUZW1wbGF0ZUlkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgTGF1bmNoIFRlbXBsYXRlXG4gICAqXG4gICAqIEV4YWN0bHkgb25lIG9mIGBsYXVuY2hUZW1wbGF0ZUlkYCBhbmQgYGxhdW5jaFRlbXBsYXRlTmFtZWAgd2lsbCBiZSBzZXQuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGxhdW5jaFRlbXBsYXRlTmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBJbnRlcmZhY2UgZm9yIExhdW5jaFRlbXBsYXRlLWxpa2Ugb2JqZWN0cy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJTGF1bmNoVGVtcGxhdGUgZXh0ZW5kcyBJQXdzQ29uc3RydWN0IHtcbiAgLyoqIHN0cm9uZ2x5IHR5cGVkIG91dHB1dHMgKi9cbiAgcmVhZG9ubHkgbGF1bmNoVGVtcGxhdGVPdXRwdXRzOiBMYXVuY2hUZW1wbGF0ZU91dHB1dHM7XG5cbiAgLyoqXG4gICAqIFRoZSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIGxhdW5jaCB0ZW1wbGF0ZSB0byB1c2VcbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbk51bWJlcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgaWRlbnRpZmllciBvZiB0aGUgTGF1bmNoIFRlbXBsYXRlXG4gICAqXG4gICAqIEV4YWN0bHkgb25lIG9mIGBsYXVuY2hUZW1wbGF0ZUlkYCBhbmQgYGxhdW5jaFRlbXBsYXRlTmFtZWAgd2lsbCBiZSBzZXQuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGxhdW5jaFRlbXBsYXRlSWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBMYXVuY2ggVGVtcGxhdGVcbiAgICpcbiAgICogRXhhY3RseSBvbmUgb2YgYGxhdW5jaFRlbXBsYXRlSWRgIGFuZCBgbGF1bmNoVGVtcGxhdGVOYW1lYCB3aWxsIGJlIHNldC5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgbGF1bmNoVGVtcGxhdGVOYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFByb3ZpZGVzIHRoZSBvcHRpb25zIGZvciB0aGUgdHlwZXMgb2YgaW50ZXJydXB0aW9uIGZvciBzcG90IGluc3RhbmNlcy5cbiAqL1xuLy8gZGV2LW5vdGU6IFRoaXMgY291bGQgYmUgdXNlZCBpbiBhIFNwb3RGbGVldCBMMiBpZiBvbmUgZ2V0cyBkZXZlbG9wZWQuXG5leHBvcnQgZW51bSBTcG90SW5zdGFuY2VJbnRlcnJ1cHRpb24ge1xuICAvKipcbiAgICogVGhlIGluc3RhbmNlIHdpbGwgc3RvcCB3aGVuIGludGVycnVwdGVkLlxuICAgKi9cbiAgU1RPUCA9IFwic3RvcFwiLFxuXG4gIC8qKlxuICAgKiBUaGUgaW5zdGFuY2Ugd2lsbCBiZSB0ZXJtaW5hdGVkIHdoZW4gaW50ZXJydXB0ZWQuXG4gICAqL1xuICBURVJNSU5BVEUgPSBcInRlcm1pbmF0ZVwiLFxuXG4gIC8qKlxuICAgKiBUaGUgaW5zdGFuY2Ugd2lsbCBoaWJlcm5hdGUgd2hlbiBpbnRlcnJ1cHRlZC5cbiAgICovXG4gIEhJQkVSTkFURSA9IFwiaGliZXJuYXRlXCIsXG59XG5cbi8qKlxuICogVGhlIFNwb3QgSW5zdGFuY2UgcmVxdWVzdCB0eXBlLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvVXNlckd1aWRlL3Nwb3QtcmVxdWVzdHMuaHRtbFxuICovXG5leHBvcnQgZW51bSBTcG90UmVxdWVzdFR5cGUge1xuICAvKipcbiAgICogQSBvbmUtdGltZSBTcG90IEluc3RhbmNlIHJlcXVlc3QgcmVtYWlucyBhY3RpdmUgdW50aWwgQW1hem9uIEVDMiBsYXVuY2hlcyB0aGUgU3BvdCBJbnN0YW5jZSxcbiAgICogdGhlIHJlcXVlc3QgZXhwaXJlcywgb3IgeW91IGNhbmNlbCB0aGUgcmVxdWVzdC4gSWYgdGhlIFNwb3QgcHJpY2UgZXhjZWVkcyB5b3VyIG1heGltdW0gcHJpY2VcbiAgICogb3IgY2FwYWNpdHkgaXMgbm90IGF2YWlsYWJsZSwgeW91ciBTcG90IEluc3RhbmNlIGlzIHRlcm1pbmF0ZWQgYW5kIHRoZSBTcG90IEluc3RhbmNlIHJlcXVlc3RcbiAgICogaXMgY2xvc2VkLlxuICAgKi9cbiAgT05FX1RJTUUgPSBcIm9uZS10aW1lXCIsXG5cbiAgLyoqXG4gICAqIEEgcGVyc2lzdGVudCBTcG90IEluc3RhbmNlIHJlcXVlc3QgcmVtYWlucyBhY3RpdmUgdW50aWwgaXQgZXhwaXJlcyBvciB5b3UgY2FuY2VsIGl0LCBldmVuIGlmXG4gICAqIHRoZSByZXF1ZXN0IGlzIGZ1bGZpbGxlZC4gSWYgdGhlIFNwb3QgcHJpY2UgZXhjZWVkcyB5b3VyIG1heGltdW0gcHJpY2Ugb3IgY2FwYWNpdHkgaXMgbm90IGF2YWlsYWJsZSxcbiAgICogeW91ciBTcG90IEluc3RhbmNlIGlzIGludGVycnVwdGVkLiBBZnRlciB5b3VyIGluc3RhbmNlIGlzIGludGVycnVwdGVkLCB3aGVuIHlvdXIgbWF4aW11bSBwcmljZSBleGNlZWRzXG4gICAqIHRoZSBTcG90IHByaWNlIG9yIGNhcGFjaXR5IGJlY29tZXMgYXZhaWxhYmxlIGFnYWluLCB0aGUgU3BvdCBJbnN0YW5jZSBpcyBzdGFydGVkIGlmIHN0b3BwZWQgb3IgcmVzdW1lZFxuICAgKiBpZiBoaWJlcm5hdGVkLlxuICAgKi9cbiAgUEVSU0lTVEVOVCA9IFwicGVyc2lzdGVudFwiLFxufVxuXG4vKipcbiAqIEludGVyZmFjZSBmb3IgdGhlIFNwb3QgbWFya2V0IGluc3RhbmNlIG9wdGlvbnMgcHJvdmlkZWQgaW4gYSBMYXVuY2hUZW1wbGF0ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMYXVuY2hUZW1wbGF0ZVNwb3RPcHRpb25zIHtcbiAgLyoqXG4gICAqIFNwb3QgSW5zdGFuY2VzIHdpdGggYSBkZWZpbmVkIGR1cmF0aW9uIChhbHNvIGtub3duIGFzIFNwb3QgYmxvY2tzKSBhcmUgZGVzaWduZWQgbm90IHRvIGJlIGludGVycnVwdGVkIGFuZCB3aWxsIHJ1biBjb250aW51b3VzbHkgZm9yIHRoZSBkdXJhdGlvbiB5b3Ugc2VsZWN0LlxuICAgKiBZb3UgY2FuIHVzZSBhIGR1cmF0aW9uIG9mIDEsIDIsIDMsIDQsIDUsIG9yIDYgaG91cnMuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvVXNlckd1aWRlL3Nwb3QtcmVxdWVzdHMuaHRtbCNmaXhlZC1kdXJhdGlvbi1zcG90LWluc3RhbmNlc1xuICAgKlxuICAgKiBAZGVmYXVsdCBSZXF1ZXN0ZWQgc3BvdCBpbnN0YW5jZXMgZG8gbm90IGhhdmUgYSBwcmUtZGVmaW5lZCBkdXJhdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IGJsb2NrRHVyYXRpb24/OiBEdXJhdGlvbjtcblxuICAvKipcbiAgICogVGhlIGJlaGF2aW9yIHdoZW4gYSBTcG90IEluc3RhbmNlIGlzIGludGVycnVwdGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBTcG90IGluc3RhbmNlcyB3aWxsIHRlcm1pbmF0ZSB3aGVuIGludGVycnVwdGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgaW50ZXJydXB0aW9uQmVoYXZpb3I/OiBTcG90SW5zdGFuY2VJbnRlcnJ1cHRpb247XG5cbiAgLyoqXG4gICAqIE1heGltdW0gaG91cmx5IHByaWNlIHlvdSdyZSB3aWxsaW5nIHRvIHBheSBmb3IgZWFjaCBTcG90IGluc3RhbmNlLiBUaGUgdmFsdWUgaXMgZ2l2ZW5cbiAgICogaW4gZG9sbGFycy4gZXg6IDAuMDEgZm9yIDEgY2VudCBwZXIgaG91ciwgb3IgMC4wMDEgZm9yIG9uZS10ZW50aCBvZiBhIGNlbnQgcGVyIGhvdXIuXG4gICAqXG4gICAqIEBkZWZhdWx0IE1heGltdW0gaG91cmx5IHByaWNlIHdpbGwgZGVmYXVsdCB0byB0aGUgb24tZGVtYW5kIHByaWNlIGZvciB0aGUgaW5zdGFuY2UgdHlwZS5cbiAgICovXG4gIHJlYWRvbmx5IG1heFByaWNlPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgU3BvdCBJbnN0YW5jZSByZXF1ZXN0IHR5cGUuXG4gICAqXG4gICAqIElmIHlvdSBhcmUgdXNpbmcgU3BvdCBJbnN0YW5jZXMgd2l0aCBhbiBBdXRvIFNjYWxpbmcgZ3JvdXAsIHVzZSBvbmUtdGltZSByZXF1ZXN0cywgYXMgdGhlXG4gICAqIEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIHNlcnZpY2UgaGFuZGxlcyByZXF1ZXN0aW5nIG5ldyBTcG90IEluc3RhbmNlcyB3aGVuZXZlciB0aGUgZ3JvdXAgaXNcbiAgICogYmVsb3cgaXRzIGRlc2lyZWQgY2FwYWNpdHkuXG4gICAqXG4gICAqIEBkZWZhdWx0IE9uZS10aW1lIHNwb3QgcmVxdWVzdC5cbiAgICovXG4gIHJlYWRvbmx5IHJlcXVlc3RUeXBlPzogU3BvdFJlcXVlc3RUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgZW5kIGRhdGUgb2YgdGhlIHJlcXVlc3QuIEZvciBhIG9uZS10aW1lIHJlcXVlc3QsIHRoZSByZXF1ZXN0IHJlbWFpbnMgYWN0aXZlIHVudGlsIGFsbCBpbnN0YW5jZXNcbiAgICogbGF1bmNoLCB0aGUgcmVxdWVzdCBpcyBjYW5jZWxlZCwgb3IgdGhpcyBkYXRlIGlzIHJlYWNoZWQuIElmIHRoZSByZXF1ZXN0IGlzIHBlcnNpc3RlbnQsIGl0IHJlbWFpbnNcbiAgICogYWN0aXZlIHVudGlsIGl0IGlzIGNhbmNlbGVkIG9yIHRoaXMgZGF0ZSBhbmQgdGltZSBpcyByZWFjaGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBUaGUgZGVmYXVsdCBlbmQgZGF0ZSBpcyA3IGRheXMgZnJvbSB0aGUgY3VycmVudCBkYXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgdmFsaWRVbnRpbD86IEV4cGlyYXRpb247XG59XG5cbi8qKlxuICogVGhlIHN0YXRlIG9mIHRva2VuIHVzYWdlIGZvciB5b3VyIGluc3RhbmNlIG1ldGFkYXRhIHJlcXVlc3RzLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXByb3BlcnRpZXMtZWMyLWxhdW5jaHRlbXBsYXRlLWxhdW5jaHRlbXBsYXRlZGF0YS1tZXRhZGF0YW9wdGlvbnMuaHRtbCNjZm4tZWMyLWxhdW5jaHRlbXBsYXRlLWxhdW5jaHRlbXBsYXRlZGF0YS1tZXRhZGF0YW9wdGlvbnMtaHR0cHRva2Vuc1xuICovXG5leHBvcnQgZW51bSBMYXVuY2hUZW1wbGF0ZUh0dHBUb2tlbnMge1xuICAvKipcbiAgICogSWYgdGhlIHN0YXRlIGlzIG9wdGlvbmFsLCB5b3UgY2FuIGNob29zZSB0byByZXRyaWV2ZSBpbnN0YW5jZSBtZXRhZGF0YSB3aXRoIG9yIHdpdGhvdXQgYSBzaWduZWQgdG9rZW4gaGVhZGVyIG9uIHlvdXIgcmVxdWVzdC5cbiAgICovXG4gIE9QVElPTkFMID0gXCJvcHRpb25hbFwiLFxuICAvKipcbiAgICogSWYgdGhlIHN0YXRlIGlzIHJlcXVpcmVkLCB5b3UgbXVzdCBzZW5kIGEgc2lnbmVkIHRva2VuIGhlYWRlciB3aXRoIGFueSBpbnN0YW5jZSBtZXRhZGF0YSByZXRyaWV2YWwgcmVxdWVzdHMuIEluIHRoaXMgc3RhdGUsXG4gICAqIHJldHJpZXZpbmcgdGhlIElBTSByb2xlIGNyZWRlbnRpYWxzIGFsd2F5cyByZXR1cm5zIHRoZSB2ZXJzaW9uIDIuMCBjcmVkZW50aWFsczsgdGhlIHZlcnNpb24gMS4wIGNyZWRlbnRpYWxzIGFyZSBub3QgYXZhaWxhYmxlLlxuICAgKi9cbiAgUkVRVUlSRUQgPSBcInJlcXVpcmVkXCIsXG59XG5cbi8qKlxuICogUHJvcGVydGllcyBvZiBhIExhdW5jaFRlbXBsYXRlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExhdW5jaFRlbXBsYXRlUHJvcHMge1xuICAvKipcbiAgICogTmFtZSBmb3IgdGhpcyBsYXVuY2ggdGVtcGxhdGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG5hbWVcbiAgICovXG4gIHJlYWRvbmx5IGxhdW5jaFRlbXBsYXRlTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogQSBkZXNjcmlwdGlvbiBmb3IgdGhlIGZpcnN0IHZlcnNpb24gb2YgdGhlIGxhdW5jaCB0ZW1wbGF0ZS5cbiAgICpcbiAgICogVGhlIHZlcnNpb24gZGVzY3JpcHRpb24gbXVzdCBiZSBtYXhpbXVtIDI1NSBjaGFyYWN0ZXJzIGxvbmcuXG4gICAqXG4gICAqIEBzZWUgaHR0cDovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLWxhdW5jaHRlbXBsYXRlLmh0bWwjY2ZuLWVjMi1sYXVuY2h0ZW1wbGF0ZS12ZXJzaW9uZGVzY3JpcHRpb25cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBkZXNjcmlwdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbkRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUeXBlIG9mIGluc3RhbmNlIHRvIGxhdW5jaC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBUaGlzIExhdW5jaCBUZW1wbGF0ZSBkb2VzIG5vdCBzcGVjaWZ5IGEgZGVmYXVsdCBJbnN0YW5jZSBUeXBlLlxuICAgKi9cbiAgcmVhZG9ubHkgaW5zdGFuY2VUeXBlPzogSW5zdGFuY2VUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgQU1JIHRoYXQgd2lsbCBiZSB1c2VkIGJ5IGluc3RhbmNlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBUaGlzIExhdW5jaCBUZW1wbGF0ZSBkb2VzIG5vdCBzcGVjaWZ5IGEgZGVmYXVsdCBBTUkuXG4gICAqL1xuICByZWFkb25seSBtYWNoaW5lSW1hZ2U/OiBJTWFjaGluZUltYWdlO1xuXG4gIC8qKlxuICAgKiBUaGUgQU1JIHRoYXQgd2lsbCBiZSB1c2VkIGJ5IGluc3RhbmNlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBUaGlzIExhdW5jaCBUZW1wbGF0ZSBjcmVhdGVzIGEgVXNlckRhdGEgYmFzZWQgb24gdGhlIHR5cGUgb2YgcHJvdmlkZWRcbiAgICogbWFjaGluZUltYWdlOyBubyBVc2VyRGF0YSBpcyBjcmVhdGVkIGlmIGEgbWFjaGluZUltYWdlIGlzIG5vdCBwcm92aWRlZFxuICAgKi9cbiAgcmVhZG9ubHkgdXNlckRhdGE/OiBVc2VyRGF0YTtcblxuICAvKipcbiAgICogQW4gSUFNIHJvbGUgdG8gYXNzb2NpYXRlIHdpdGggdGhlIGluc3RhbmNlIHByb2ZpbGUgdGhhdCBpcyB1c2VkIGJ5IGluc3RhbmNlcy5cbiAgICpcbiAgICogVGhlIHJvbGUgbXVzdCBiZSBhc3N1bWFibGUgYnkgdGhlIHNlcnZpY2UgcHJpbmNpcGFsIGBlYzIuYW1hem9uYXdzLmNvbWAuXG4gICAqIE5vdGU6IFlvdSBjYW4gcHJvdmlkZSBhbiBpbnN0YW5jZVByb2ZpbGUgb3IgYSByb2xlLCBidXQgbm90IGJvdGguXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGNvbnN0IHJvbGUgPSBuZXcgaWFtLlJvbGUodGhpcywgJ015Um9sZScsIHtcbiAgICogICBhc3N1bWVkQnk6IG5ldyBpYW0uU2VydmljZVByaW5jaXBhbCgnZWMyLmFtYXpvbmF3cy5jb20nKVxuICAgKiB9KTtcbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBuZXcgcm9sZSBpcyBjcmVhdGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcm9sZT86IGlhbS5JUm9sZTtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIGhvdyBibG9jayBkZXZpY2VzIGFyZSBleHBvc2VkIHRvIHRoZSBpbnN0YW5jZS4gWW91IGNhbiBzcGVjaWZ5IHZpcnR1YWwgZGV2aWNlcyBhbmQgRUJTIHZvbHVtZXMuXG4gICAqXG4gICAqIEVhY2ggaW5zdGFuY2UgdGhhdCBpcyBsYXVuY2hlZCBoYXMgYW4gYXNzb2NpYXRlZCByb290IGRldmljZSB2b2x1bWUsXG4gICAqIGVpdGhlciBhbiBBbWF6b24gRUJTIHZvbHVtZSBvciBhbiBpbnN0YW5jZSBzdG9yZSB2b2x1bWUuXG4gICAqIFlvdSBjYW4gdXNlIGJsb2NrIGRldmljZSBtYXBwaW5ncyB0byBzcGVjaWZ5IGFkZGl0aW9uYWwgRUJTIHZvbHVtZXMgb3JcbiAgICogaW5zdGFuY2Ugc3RvcmUgdm9sdW1lcyB0byBhdHRhY2ggdG8gYW4gaW5zdGFuY2Ugd2hlbiBpdCBpcyBsYXVuY2hlZC5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9Vc2VyR3VpZGUvYmxvY2stZGV2aWNlLW1hcHBpbmctY29uY2VwdHMuaHRtbFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFVzZXMgdGhlIGJsb2NrIGRldmljZSBtYXBwaW5nIG9mIHRoZSBBTUlcbiAgICovXG4gIHJlYWRvbmx5IGJsb2NrRGV2aWNlcz86IEJsb2NrRGV2aWNlW107XG5cbiAgLyoqXG4gICAqIENQVSBjcmVkaXQgdHlwZSBmb3IgYnVyc3RhYmxlIEVDMiBpbnN0YW5jZSB0eXBlcy5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9Vc2VyR3VpZGUvYnVyc3RhYmxlLXBlcmZvcm1hbmNlLWluc3RhbmNlcy5odG1sXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gY3JlZGl0IHR5cGUgaXMgc3BlY2lmaWVkIGluIHRoZSBMYXVuY2ggVGVtcGxhdGUuXG4gICAqL1xuICByZWFkb25seSBjcHVDcmVkaXRzPzogQ3B1Q3JlZGl0cztcblxuICAvKipcbiAgICogSWYgeW91IHNldCB0aGlzIHBhcmFtZXRlciB0byB0cnVlLCB5b3UgY2Fubm90IHRlcm1pbmF0ZSB0aGUgaW5zdGFuY2VzIGxhdW5jaGVkIHdpdGggdGhpcyBsYXVuY2ggdGVtcGxhdGVcbiAgICogdXNpbmcgdGhlIEFtYXpvbiBFQzIgY29uc29sZSwgQ0xJLCBvciBBUEk7IG90aGVyd2lzZSwgeW91IGNhbi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBUaGUgQVBJIHRlcm1pbmF0aW9uIHNldHRpbmcgaXMgbm90IHNwZWNpZmllZCBpbiB0aGUgTGF1bmNoIFRlbXBsYXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgZGlzYWJsZUFwaVRlcm1pbmF0aW9uPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGluc3RhbmNlcyBhcmUgb3B0aW1pemVkIGZvciBBbWF6b24gRUJTIEkvTy4gVGhpcyBvcHRpbWl6YXRpb24gcHJvdmlkZXMgZGVkaWNhdGVkIHRocm91Z2hwdXRcbiAgICogdG8gQW1hem9uIEVCUyBhbmQgYW4gb3B0aW1pemVkIGNvbmZpZ3VyYXRpb24gc3RhY2sgdG8gcHJvdmlkZSBvcHRpbWFsIEFtYXpvbiBFQlMgSS9PIHBlcmZvcm1hbmNlLiBUaGlzIG9wdGltaXphdGlvblxuICAgKiBpc24ndCBhdmFpbGFibGUgd2l0aCBhbGwgaW5zdGFuY2UgdHlwZXMuIEFkZGl0aW9uYWwgdXNhZ2UgY2hhcmdlcyBhcHBseSB3aGVuIHVzaW5nIGFuIEVCUy1vcHRpbWl6ZWQgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gRUJTIG9wdGltaXphdGlvbiBpcyBub3Qgc3BlY2lmaWVkIGluIHRoZSBsYXVuY2ggdGVtcGxhdGUuXG4gICAqL1xuICByZWFkb25seSBlYnNPcHRpbWl6ZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJZiB0aGlzIHBhcmFtZXRlciBpcyBzZXQgdG8gdHJ1ZSwgdGhlIGluc3RhbmNlIGlzIGVuYWJsZWQgZm9yIEFXUyBOaXRybyBFbmNsYXZlczsgb3RoZXJ3aXNlLCBpdCBpcyBub3QgZW5hYmxlZCBmb3IgQVdTIE5pdHJvIEVuY2xhdmVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEVuYWJsZW1lbnQgb2YgTml0cm8gZW5jbGF2ZXMgaXMgbm90IHNwZWNpZmllZCBpbiB0aGUgbGF1bmNoIHRlbXBsYXRlOyBkZWZhdWx0aW5nIHRvIGZhbHNlLlxuICAgKi9cbiAgcmVhZG9ubHkgbml0cm9FbmNsYXZlRW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIElmIHlvdSBzZXQgdGhpcyBwYXJhbWV0ZXIgdG8gdHJ1ZSwgdGhlIGluc3RhbmNlIGlzIGVuYWJsZWQgZm9yIGhpYmVybmF0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEhpYmVybmF0aW9uIGNvbmZpZ3VyYXRpb24gaXMgbm90IHNwZWNpZmllZCBpbiB0aGUgbGF1bmNoIHRlbXBsYXRlOyBkZWZhdWx0aW5nIHRvIGZhbHNlLlxuICAgKi9cbiAgcmVhZG9ubHkgaGliZXJuYXRpb25Db25maWd1cmVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgYW4gaW5zdGFuY2Ugc3RvcHMgb3IgdGVybWluYXRlcyB3aGVuIHlvdSBpbml0aWF0ZSBzaHV0ZG93biBmcm9tIHRoZSBpbnN0YW5jZSAodXNpbmcgdGhlIG9wZXJhdGluZyBzeXN0ZW0gY29tbWFuZCBmb3Igc3lzdGVtIHNodXRkb3duKS5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9Vc2VyR3VpZGUvdGVybWluYXRpbmctaW5zdGFuY2VzLmh0bWwjVXNpbmdfQ2hhbmdpbmdJbnN0YW5jZUluaXRpYXRlZFNodXRkb3duQmVoYXZpb3JcbiAgICpcbiAgICogQGRlZmF1bHQgLSBTaHV0ZG93biBiZWhhdmlvciBpcyBub3Qgc3BlY2lmaWVkIGluIHRoZSBsYXVuY2ggdGVtcGxhdGU7IGRlZmF1bHRzIHRvIFNUT1AuXG4gICAqL1xuICByZWFkb25seSBpbnN0YW5jZUluaXRpYXRlZFNodXRkb3duQmVoYXZpb3I/OiBJbnN0YW5jZUluaXRpYXRlZFNodXRkb3duQmVoYXZpb3I7XG5cbiAgLyoqXG4gICAqIElmIHRoaXMgcHJvcGVydHkgaXMgZGVmaW5lZCwgdGhlbiB0aGUgTGF1bmNoIFRlbXBsYXRlJ3MgSW5zdGFuY2VNYXJrZXRPcHRpb25zIHdpbGwgYmVcbiAgICogc2V0IHRvIHVzZSBTcG90IGluc3RhbmNlcywgYW5kIHRoZSBvcHRpb25zIGZvciB0aGUgU3BvdCBpbnN0YW5jZXMgd2lsbCBiZSBhcyBkZWZpbmVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEluc3RhbmNlIGxhdW5jaGVkIHdpdGggdGhpcyB0ZW1wbGF0ZSB3aWxsIG5vdCBiZSBzcG90IGluc3RhbmNlcy5cbiAgICovXG4gIHJlYWRvbmx5IHNwb3RPcHRpb25zPzogTGF1bmNoVGVtcGxhdGVTcG90T3B0aW9ucztcblxuICAvKipcbiAgICogTmFtZSBvZiBTU0gga2V5cGFpciB0byBncmFudCBhY2Nlc3MgdG8gaW5zdGFuY2VcbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBTU0ggYWNjZXNzIHdpbGwgYmUgcG9zc2libGUuXG4gICAqIEBkZXByZWNhdGVkIC0gVXNlIGBrZXlQYWlyYCBpbnN0ZWFkIC0gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nkay9hcGkvdjIvZG9jcy9hd3MtY2RrLWxpYi5hd3NfZWMyLXJlYWRtZS5odG1sI3VzaW5nLWFuLWV4aXN0aW5nLWVjMi1rZXktcGFpclxuICAgKi9cbiAgcmVhZG9ubHkga2V5TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIFNTSCBrZXlwYWlyIHRvIGdyYW50IGFjY2VzcyB0byB0aGUgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gU1NIIGFjY2VzcyB3aWxsIGJlIHBvc3NpYmxlLlxuICAgKi9cbiAgcmVhZG9ubHkga2V5UGFpcj86IElLZXlQYWlyO1xuXG4gIC8qKlxuICAgKiBJZiBzZXQgdG8gdHJ1ZSwgdGhlbiBkZXRhaWxlZCBtb25pdG9yaW5nIHdpbGwgYmUgZW5hYmxlZCBvbiBpbnN0YW5jZXMgY3JlYXRlZCB3aXRoIHRoaXNcbiAgICogbGF1bmNoIHRlbXBsYXRlLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L1VzZXJHdWlkZS91c2luZy1jbG91ZHdhdGNoLW5ldy5odG1sXG4gICAqXG4gICAqIEBkZWZhdWx0IEZhbHNlIC0gRGV0YWlsZWQgbW9uaXRvcmluZyBpcyBkaXNhYmxlZC5cbiAgICovXG4gIHJlYWRvbmx5IGRldGFpbGVkTW9uaXRvcmluZz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFNlY3VyaXR5IGdyb3VwIHRvIGFzc2lnbiB0byBpbnN0YW5jZXMgY3JlYXRlZCB3aXRoIHRoZSBsYXVuY2ggdGVtcGxhdGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vIHNlY3VyaXR5IGdyb3VwIGlzIGFzc2lnbmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgc2VjdXJpdHlHcm91cD86IElTZWN1cml0eUdyb3VwO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIElNRFN2MiBzaG91bGQgYmUgcmVxdWlyZWQgb24gbGF1bmNoZWQgaW5zdGFuY2VzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGZhbHNlXG4gICAqL1xuICByZWFkb25seSByZXF1aXJlSW1kc3YyPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgSFRUUCBtZXRhZGF0YSBlbmRwb2ludCBvbiB5b3VyIGluc3RhbmNlcy5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1lYzItbGF1bmNodGVtcGxhdGUtbGF1bmNodGVtcGxhdGVkYXRhLW1ldGFkYXRhb3B0aW9ucy5odG1sI2Nmbi1lYzItbGF1bmNodGVtcGxhdGUtbGF1bmNodGVtcGxhdGVkYXRhLW1ldGFkYXRhb3B0aW9ucy1odHRwZW5kcG9pbnRcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgaHR0cEVuZHBvaW50PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgSVB2NiBlbmRwb2ludCBmb3IgdGhlIGluc3RhbmNlIG1ldGFkYXRhIHNlcnZpY2UuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXByb3BlcnRpZXMtZWMyLWxhdW5jaHRlbXBsYXRlLWxhdW5jaHRlbXBsYXRlZGF0YS1tZXRhZGF0YW9wdGlvbnMuaHRtbCNjZm4tZWMyLWxhdW5jaHRlbXBsYXRlLWxhdW5jaHRlbXBsYXRlZGF0YS1tZXRhZGF0YW9wdGlvbnMtaHR0cHByb3RvY29saXB2NlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBodHRwUHJvdG9jb2xJcHY2PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGRlc2lyZWQgSFRUUCBQVVQgcmVzcG9uc2UgaG9wIGxpbWl0IGZvciBpbnN0YW5jZSBtZXRhZGF0YSByZXF1ZXN0cy4gVGhlIGxhcmdlciB0aGUgbnVtYmVyLCB0aGUgZnVydGhlciBpbnN0YW5jZSBtZXRhZGF0YSByZXF1ZXN0cyBjYW4gdHJhdmVsLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1wcm9wZXJ0aWVzLWVjMi1sYXVuY2h0ZW1wbGF0ZS1sYXVuY2h0ZW1wbGF0ZWRhdGEtbWV0YWRhdGFvcHRpb25zLmh0bWwjY2ZuLWVjMi1sYXVuY2h0ZW1wbGF0ZS1sYXVuY2h0ZW1wbGF0ZWRhdGEtbWV0YWRhdGFvcHRpb25zLWh0dHBwdXRyZXNwb25zZWhvcGxpbWl0XG4gICAqXG4gICAqIEBkZWZhdWx0IDFcbiAgICovXG4gIHJlYWRvbmx5IGh0dHBQdXRSZXNwb25zZUhvcExpbWl0PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RhdGUgb2YgdG9rZW4gdXNhZ2UgZm9yIHlvdXIgaW5zdGFuY2UgbWV0YWRhdGEgcmVxdWVzdHMuICBUaGUgZGVmYXVsdCBzdGF0ZSBpcyBgb3B0aW9uYWxgIGlmIG5vdCBzcGVjaWZpZWQuIEhvd2V2ZXIsXG4gICAqIGlmIHJlcXVpcmVJbWRzdjIgaXMgdHJ1ZSwgdGhlIHN0YXRlIG11c3QgYmUgYHJlcXVpcmVkYC5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1lYzItbGF1bmNodGVtcGxhdGUtbGF1bmNodGVtcGxhdGVkYXRhLW1ldGFkYXRhb3B0aW9ucy5odG1sI2Nmbi1lYzItbGF1bmNodGVtcGxhdGUtbGF1bmNodGVtcGxhdGVkYXRhLW1ldGFkYXRhb3B0aW9ucy1odHRwdG9rZW5zXG4gICAqXG4gICAqIEBkZWZhdWx0IExhdW5jaFRlbXBsYXRlSHR0cFRva2Vucy5PUFRJT05BTFxuICAgKi9cbiAgcmVhZG9ubHkgaHR0cFRva2Vucz86IExhdW5jaFRlbXBsYXRlSHR0cFRva2VucztcblxuICAvKipcbiAgICogU2V0IHRvIGVuYWJsZWQgdG8gYWxsb3cgYWNjZXNzIHRvIGluc3RhbmNlIHRhZ3MgZnJvbSB0aGUgaW5zdGFuY2UgbWV0YWRhdGEuIFNldCB0byBkaXNhYmxlZCB0byB0dXJuIG9mZiBhY2Nlc3MgdG8gaW5zdGFuY2UgdGFncyBmcm9tIHRoZSBpbnN0YW5jZSBtZXRhZGF0YS5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1lYzItbGF1bmNodGVtcGxhdGUtbGF1bmNodGVtcGxhdGVkYXRhLW1ldGFkYXRhb3B0aW9ucy5odG1sI2Nmbi1lYzItbGF1bmNodGVtcGxhdGUtbGF1bmNodGVtcGxhdGVkYXRhLW1ldGFkYXRhb3B0aW9ucy1pbnN0YW5jZW1ldGFkYXRhdGFnc1xuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgaW5zdGFuY2VNZXRhZGF0YVRhZ3M/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGluc3RhbmNlcyBzaG91bGQgaGF2ZSBhIHB1YmxpYyBJUCBhZGRyZXNzZXMgYXNzb2NpYXRlZCB3aXRoIHRoZW0uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gVXNlIHN1Ym5ldCBzZXR0aW5nc1xuICAgKi9cbiAgcmVhZG9ubHkgYXNzb2NpYXRlUHVibGljSXBBZGRyZXNzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGluc3RhbmNlIHByb2ZpbGUgdXNlZCB0byBwYXNzIHJvbGUgaW5mb3JtYXRpb24gdG8gRUMyIGluc3RhbmNlcy5cbiAgICpcbiAgICogTm90ZTogWW91IGNhbiBwcm92aWRlIGFuIGluc3RhbmNlUHJvZmlsZSBvciBhIHJvbGUsIGJ1dCBub3QgYm90aC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBpbnN0YW5jZSBwcm9maWxlXG4gICAqL1xuICByZWFkb25seSBpbnN0YW5jZVByb2ZpbGU/OiBpYW0uSUluc3RhbmNlUHJvZmlsZTtcbn1cblxuLyoqXG4gKiBBIGNsYXNzIHRoYXQgcHJvdmlkZXMgY29udmVuaWVudCBhY2Nlc3MgdG8gc3BlY2lhbCB2ZXJzaW9uIHRva2VucyBmb3IgTGF1bmNoVGVtcGxhdGVcbiAqIHZlcnNpb25zLlxuICovXG5leHBvcnQgY2xhc3MgTGF1bmNoVGVtcGxhdGVTcGVjaWFsVmVyc2lvbnMge1xuICAvKipcbiAgICogVGhlIHNwZWNpYWwgdmFsdWUgdGhhdCBkZW5vdGVzIHRoYXQgdXNlcnMgb2YgYSBMYXVuY2ggVGVtcGxhdGUgc2hvdWxkXG4gICAqIHJlZmVyZW5jZSB0aGUgTEFURVNUIHZlcnNpb24gb2YgdGhlIHRlbXBsYXRlLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBMQVRFU1RfVkVSU0lPTjogc3RyaW5nID0gXCIkTGF0ZXN0XCI7XG5cbiAgLyoqXG4gICAqIFRoZSBzcGVjaWFsIHZhbHVlIHRoYXQgZGVub3RlcyB0aGF0IHVzZXJzIG9mIGEgTGF1bmNoIFRlbXBsYXRlIHNob3VsZFxuICAgKiByZWZlcmVuY2UgdGhlIERFRkFVTFQgdmVyc2lvbiBvZiB0aGUgdGVtcGxhdGUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfVkVSU0lPTjogc3RyaW5nID0gXCIkRGVmYXVsdFwiO1xufVxuXG4vKipcbiAqIEF0dHJpYnV0ZXMgZm9yIGFuIGltcG9ydGVkIExhdW5jaFRlbXBsYXRlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExhdW5jaFRlbXBsYXRlQXR0cmlidXRlcyB7XG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBsYXVuY2ggdGVtcGxhdGUgdG8gdXNlXG4gICAqXG4gICAqIEBkZWZhdWx0IFZlcnNpb246IFwiJERlZmF1bHRcIlxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbk51bWJlcj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGlkZW50aWZpZXIgb2YgdGhlIExhdW5jaCBUZW1wbGF0ZVxuICAgKlxuICAgKiBFeGFjdGx5IG9uZSBvZiBgbGF1bmNoVGVtcGxhdGVJZGAgYW5kIGBsYXVuY2hUZW1wbGF0ZU5hbWVgIG1heSBiZSBzZXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGxhdW5jaFRlbXBsYXRlSWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBMYXVuY2ggVGVtcGxhdGVcbiAgICpcbiAgICogRXhhY3RseSBvbmUgb2YgYGxhdW5jaFRlbXBsYXRlSWRgIGFuZCBgbGF1bmNoVGVtcGxhdGVOYW1lYCBtYXkgYmUgc2V0LlxuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSBsYXVuY2hUZW1wbGF0ZU5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhpcyByZXByZXNlbnRzIGFuIEVDMiBMYXVuY2hUZW1wbGF0ZS5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L1VzZXJHdWlkZS9lYzItbGF1bmNoLXRlbXBsYXRlcy5odG1sXG4gKi9cbmV4cG9ydCBjbGFzcyBMYXVuY2hUZW1wbGF0ZVxuICBleHRlbmRzIEF3c0NvbnN0cnVjdEJhc2VcbiAgaW1wbGVtZW50cyBJTGF1bmNoVGVtcGxhdGUsIGlhbS5JR3JhbnRhYmxlLCBJQ29ubmVjdGFibGVcbntcbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyBMYXVuY2hUZW1wbGF0ZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUxhdW5jaFRlbXBsYXRlQXR0cmlidXRlcyhcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgYXR0cnM6IExhdW5jaFRlbXBsYXRlQXR0cmlidXRlcyxcbiAgKTogSUxhdW5jaFRlbXBsYXRlIHtcbiAgICBjb25zdCBoYXZlSWQgPSBCb29sZWFuKGF0dHJzLmxhdW5jaFRlbXBsYXRlSWQpO1xuICAgIGNvbnN0IGhhdmVOYW1lID0gQm9vbGVhbihhdHRycy5sYXVuY2hUZW1wbGF0ZU5hbWUpO1xuICAgIGlmIChoYXZlSWQgPT0gaGF2ZU5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJMYXVuY2hUZW1wbGF0ZS5mcm9tTGF1bmNoVGVtcGxhdGVBdHRyaWJ1dGVzKCkgcmVxdWlyZXMgZXhhY3RseSBvbmUgb2YgbGF1bmNoVGVtcGxhdGVJZCBvciBsYXVuY2hUZW1wbGF0ZU5hbWUgYmUgcHJvdmlkZWQuXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNsYXNzIEltcG9ydCBleHRlbmRzIEF3c0NvbnN0cnVjdEJhc2UgaW1wbGVtZW50cyBJTGF1bmNoVGVtcGxhdGUge1xuICAgICAgcHVibGljIGdldCBsYXVuY2hUZW1wbGF0ZU91dHB1dHMoKTogTGF1bmNoVGVtcGxhdGVPdXRwdXRzIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB2ZXJzaW9uTnVtYmVyOiB0aGlzLnZlcnNpb25OdW1iZXIsXG4gICAgICAgICAgbGF1bmNoVGVtcGxhdGVJZDogdGhpcy5sYXVuY2hUZW1wbGF0ZUlkLFxuICAgICAgICAgIGxhdW5jaFRlbXBsYXRlTmFtZTogdGhpcy5sYXVuY2hUZW1wbGF0ZU5hbWUsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBwdWJsaWMgZ2V0IG91dHB1dHMoKTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmxhdW5jaFRlbXBsYXRlT3V0cHV0cztcbiAgICAgIH1cbiAgICAgIHB1YmxpYyByZWFkb25seSB2ZXJzaW9uTnVtYmVyID1cbiAgICAgICAgYXR0cnMudmVyc2lvbk51bWJlciA/PyBMYXVuY2hUZW1wbGF0ZVNwZWNpYWxWZXJzaW9ucy5ERUZBVUxUX1ZFUlNJT047XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgbGF1bmNoVGVtcGxhdGVJZD8gPSBhdHRycy5sYXVuY2hUZW1wbGF0ZUlkO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGxhdW5jaFRlbXBsYXRlTmFtZT8gPSBhdHRycy5sYXVuY2hUZW1wbGF0ZU5hbWU7XG4gICAgfVxuICAgIHJldHVybiBuZXcgSW1wb3J0KHNjb3BlLCBpZCk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyAgIE1lbWJlcnMgZm9yIElMYXVuY2hUZW1wbGF0ZS9JVGVycmFDb25zdHJ1Y3QgaW50ZXJmYWNlXG5cbiAgcHVibGljIGdldCBsYXVuY2hUZW1wbGF0ZU91dHB1dHMoKTogTGF1bmNoVGVtcGxhdGVPdXRwdXRzIHtcbiAgICByZXR1cm4ge1xuICAgICAgdmVyc2lvbk51bWJlcjogdGhpcy52ZXJzaW9uTnVtYmVyLFxuICAgICAgbGF1bmNoVGVtcGxhdGVJZDogdGhpcy5sYXVuY2hUZW1wbGF0ZUlkLFxuICAgICAgbGF1bmNoVGVtcGxhdGVOYW1lOiB0aGlzLmxhdW5jaFRlbXBsYXRlTmFtZSxcbiAgICB9O1xuICB9XG4gIHB1YmxpYyBnZXQgb3V0cHV0cygpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5sYXVuY2hUZW1wbGF0ZU91dHB1dHM7XG4gIH1cbiAgcHVibGljIHJlYWRvbmx5IHZlcnNpb25OdW1iZXI6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGxhdW5jaFRlbXBsYXRlSWQ/OiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBsYXVuY2hUZW1wbGF0ZU5hbWU/OiBzdHJpbmc7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vICAgRGF0YSBtZW1iZXJzXG5cbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IHZlcnNpb24gZm9yIHRoZSBsYXVuY2ggdGVtcGxhdGUuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBkZWZhdWx0VmVyc2lvbk51bWJlcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhlIGxhdW5jaCB0ZW1wbGF0ZS5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGxhdGVzdFZlcnNpb25OdW1iZXI6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgT1MgdGhlIGluc3RhbmNlIGlzIHJ1bm5pbmcuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBvc1R5cGU/OiBPcGVyYXRpbmdTeXN0ZW1UeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgQU1JIElEIG9mIHRoZSBpbWFnZSB0byB1c2VcbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGltYWdlSWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElBTSBSb2xlIGFzc3VtZWQgYnkgaW5zdGFuY2VzIHRoYXQgYXJlIGxhdW5jaGVkIGZyb20gdGhpcyB0ZW1wbGF0ZS5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJvbGU/OiBpYW0uSVJvbGU7XG5cbiAgLyoqXG4gICAqIFVzZXJEYXRhIGV4ZWN1dGVkIGJ5IGluc3RhbmNlcyB0aGF0IGFyZSBsYXVuY2hlZCBmcm9tIHRoaXMgdGVtcGxhdGUuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB1c2VyRGF0YT86IFVzZXJEYXRhO1xuXG4gIC8qKlxuICAgKiBUeXBlIG9mIGluc3RhbmNlIHRvIGxhdW5jaC5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGluc3RhbmNlVHlwZT86IEluc3RhbmNlVHlwZTtcblxuICBwdWJsaWMgcmVhZG9ubHkgcmVzb3VyY2U6IHRmTGF1bmNoVGVtcGxhdGUuTGF1bmNoVGVtcGxhdGU7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vICAgUHJpdmF0ZS9wcm90ZWN0ZWQgZGF0YSBtZW1iZXJzXG5cbiAgLyoqXG4gICAqIFByaW5jaXBhbCB0byBncmFudCBwZXJtaXNzaW9ucyB0by5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2dyYW50UHJpbmNpcGFsPzogaWFtLklQcmluY2lwYWw7XG5cbiAgLyoqXG4gICAqIEFsbG93cyBzcGVjaWZ5aW5nIHNlY3VyaXR5IGdyb3VwIGNvbm5lY3Rpb25zIGZvciB0aGUgaW5zdGFuY2UuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9jb25uZWN0aW9ucz86IENvbm5lY3Rpb25zO1xuXG4gIC8vIC8qKlxuICAvLyAgKiBUYWdNYW5hZ2VyIGZvciB0YWdnaW5nIHN1cHBvcnQuXG4gIC8vICAqL1xuICAvLyBwcm90ZWN0ZWQgcmVhZG9ubHkgdGFnczogVGFnTWFuYWdlcjtcblxuICAvLyBpc1RhZ2dhYmxlQ29uc3RydWN0IHJlcXVpcmVkIHByb3BlcnRpZXNcbiAgcHJpdmF0ZSBfdGFnczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgcHVibGljIHNldCB0YWdzKHZhbHVlOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KSB7XG4gICAgdGhpcy5fdGFncyA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyBnZXQgdGFncygpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICByZXR1cm4gVG9rZW4uYXNTdHJpbmdNYXAoXG4gICAgICBMYXp5LmFueVZhbHVlKHtcbiAgICAgICAgcHJvZHVjZTogKCkgPT4gdGhpcy5fdGFncyA/PyB1bmRlZmluZWQsXG4gICAgICB9KSxcbiAgICApO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCB0YWdzSW5wdXQoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3RhZ3M7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogTGF1bmNoVGVtcGxhdGVQcm9wcyA9IHt9KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIC8vIEJhc2ljIHZhbGlkYXRpb24gb2YgdGhlIHByb3ZpZGVkIHNwb3QgYmxvY2sgZHVyYXRpb25cbiAgICBjb25zdCBzcG90RHVyYXRpb24gPSBwcm9wcz8uc3BvdE9wdGlvbnM/LmJsb2NrRHVyYXRpb24/LnRvSG91cnMoe1xuICAgICAgaW50ZWdyYWw6IHRydWUsXG4gICAgfSk7XG4gICAgaWYgKHNwb3REdXJhdGlvbiAhPT0gdW5kZWZpbmVkICYmIChzcG90RHVyYXRpb24gPCAxIHx8IHNwb3REdXJhdGlvbiA+IDYpKSB7XG4gICAgICAvLyBTZWU6IGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L1VzZXJHdWlkZS9zcG90LXJlcXVlc3RzLmh0bWwjZml4ZWQtZHVyYXRpb24tc3BvdC1pbnN0YW5jZXNcbiAgICAgIEFubm90YXRpb25zLm9mKHRoaXMpLmFkZEVycm9yKFxuICAgICAgICBcIlNwb3QgYmxvY2sgZHVyYXRpb24gbXVzdCBiZSBleGFjdGx5IDEsIDIsIDMsIDQsIDUsIG9yIDYgaG91cnMuXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEJhc2ljIHZhbGlkYXRpb24gb2YgdGhlIHByb3ZpZGVkIGh0dHBQdXRSZXNwb25zZUhvcExpbWl0XG4gICAgaWYgKFxuICAgICAgcHJvcHMuaHR0cFB1dFJlc3BvbnNlSG9wTGltaXQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgKHByb3BzLmh0dHBQdXRSZXNwb25zZUhvcExpbWl0IDwgMSB8fCBwcm9wcy5odHRwUHV0UmVzcG9uc2VIb3BMaW1pdCA+IDY0KVxuICAgICkge1xuICAgICAgLy8gU2VlOiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1lYzItbGF1bmNodGVtcGxhdGUtbGF1bmNodGVtcGxhdGVkYXRhLW1ldGFkYXRhb3B0aW9ucy5odG1sI2Nmbi1lYzItbGF1bmNodGVtcGxhdGUtbGF1bmNodGVtcGxhdGVkYXRhLW1ldGFkYXRhb3B0aW9ucy1odHRwcHV0cmVzcG9uc2Vob3BsaW1pdFxuICAgICAgQW5ub3RhdGlvbnMub2YodGhpcykuYWRkRXJyb3IoXG4gICAgICAgIFwiSHR0cFB1dFJlc3BvbnNlSG9wTGltaXQgbXVzdCBiZXR3ZWVuIDEgYW5kIDY0XCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5pbnN0YW5jZVByb2ZpbGUgJiYgcHJvcHMucm9sZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiWW91IGNhbm5vdCBwcm92aWRlIGJvdGggYW4gaW5zdGFuY2VQcm9maWxlIGFuZCBhIHJvbGVcIik7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLmtleU5hbWUgJiYgcHJvcHMua2V5UGFpcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkNhbm5vdCBzcGVjaWZ5IGJvdGggb2YgJ2tleU5hbWUnIGFuZCAna2V5UGFpcic7IHByZWZlciAna2V5UGFpcidcIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gdXNlIHByb3ZpZGVkIGluc3RhbmNlIHByb2ZpbGUgb3IgY3JlYXRlIG9uZSBpZiBhIHJvbGUgd2FzIHByb3ZpZGVkXG4gICAgbGV0IGlhbVByb2ZpbGVBcm46IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICBpZiAocHJvcHMuaW5zdGFuY2VQcm9maWxlKSB7XG4gICAgICB0aGlzLnJvbGUgPSBwcm9wcy5pbnN0YW5jZVByb2ZpbGUucm9sZTtcbiAgICAgIGlhbVByb2ZpbGVBcm4gPSBwcm9wcy5pbnN0YW5jZVByb2ZpbGUuaW5zdGFuY2VQcm9maWxlQXJuO1xuICAgIH0gZWxzZSBpZiAocHJvcHMucm9sZSkge1xuICAgICAgdGhpcy5yb2xlID0gcHJvcHMucm9sZTtcbiAgICAgIGNvbnN0IGlhbVByb2ZpbGUgPSBuZXcgdGZJYW1JbnN0YW5jZVByb2ZpbGUuSWFtSW5zdGFuY2VQcm9maWxlKFxuICAgICAgICB0aGlzLFxuICAgICAgICBcIlByb2ZpbGVcIixcbiAgICAgICAge1xuICAgICAgICAgIHJvbGU6IHRoaXMucm9sZS5yb2xlTmFtZSxcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgICBpYW1Qcm9maWxlQXJuID0gaWFtUHJvZmlsZS5hcm47XG4gICAgfVxuXG4gICAgdGhpcy5fZ3JhbnRQcmluY2lwYWwgPSB0aGlzLnJvbGU7XG5cbiAgICBpZiAocHJvcHMuc2VjdXJpdHlHcm91cCkge1xuICAgICAgdGhpcy5fY29ubmVjdGlvbnMgPSBuZXcgQ29ubmVjdGlvbnMoe1xuICAgICAgICBzZWN1cml0eUdyb3VwczogW3Byb3BzLnNlY3VyaXR5R3JvdXBdLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IHNlY3VyaXR5R3JvdXBzVG9rZW4gPSBMYXp5Lmxpc3RWYWx1ZSh7XG4gICAgICBwcm9kdWNlOiAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9jb25uZWN0aW9ucyAmJiB0aGlzLl9jb25uZWN0aW9ucy5zZWN1cml0eUdyb3Vwcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX2Nvbm5lY3Rpb25zLnNlY3VyaXR5R3JvdXBzLm1hcChcbiAgICAgICAgICAgIChzZykgPT4gc2cuc2VjdXJpdHlHcm91cElkLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBpbWFnZUNvbmZpZzogTWFjaGluZUltYWdlQ29uZmlnIHwgdW5kZWZpbmVkID1cbiAgICAgIHByb3BzLm1hY2hpbmVJbWFnZT8uZ2V0SW1hZ2UodGhpcyk7XG4gICAgaWYgKGltYWdlQ29uZmlnKSB7XG4gICAgICB0aGlzLm9zVHlwZSA9IGltYWdlQ29uZmlnLm9zVHlwZTtcbiAgICAgIHRoaXMuaW1hZ2VJZCA9IGltYWdlQ29uZmlnLmltYWdlSWQ7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdGhpcy5vc1R5cGUgJiZcbiAgICAgIHByb3BzLmtleVBhaXIgJiZcbiAgICAgICFwcm9wcy5rZXlQYWlyLl9pc09zQ29tcGF0aWJsZSh0aGlzLm9zVHlwZSlcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYCR7cHJvcHMua2V5UGFpci50eXBlfSBrZXlzIGFyZSBub3QgY29tcGF0aWJsZSB3aXRoIHRoZSBjaG9zZW4gQU1JYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gcHJpb3JpdHk6IHByb3AudXNlckRhdGEgLT4gdXNlckRhdGEgZnJvbSBtYWNoaW5lSW1hZ2UgLT4gdW5kZWZpbmVkXG4gICAgdGhpcy51c2VyRGF0YSA9IHByb3BzLnVzZXJEYXRhID8/IGltYWdlQ29uZmlnPy51c2VyRGF0YTtcbiAgICB0aGlzLmluc3RhbmNlVHlwZSA9IHByb3BzLmluc3RhbmNlVHlwZTtcblxuICAgIGxldCBtYXJrZXRPcHRpb25zOiBhbnkgPSB1bmRlZmluZWQ7XG4gICAgaWYgKHByb3BzPy5zcG90T3B0aW9ucykge1xuICAgICAgbWFya2V0T3B0aW9ucyA9IHtcbiAgICAgICAgbWFya2V0VHlwZTogXCJzcG90XCIsXG4gICAgICAgIHNwb3RPcHRpb25zOiB7XG4gICAgICAgICAgYmxvY2tEdXJhdGlvbk1pbnV0ZXM6XG4gICAgICAgICAgICBzcG90RHVyYXRpb24gIT09IHVuZGVmaW5lZCA/IHNwb3REdXJhdGlvbiAqIDYwIDogdW5kZWZpbmVkLFxuICAgICAgICAgIGluc3RhbmNlSW50ZXJydXB0aW9uQmVoYXZpb3I6IHByb3BzLnNwb3RPcHRpb25zLmludGVycnVwdGlvbkJlaGF2aW9yLFxuICAgICAgICAgIG1heFByaWNlOiBwcm9wcy5zcG90T3B0aW9ucy5tYXhQcmljZT8udG9TdHJpbmcoKSxcbiAgICAgICAgICBzcG90SW5zdGFuY2VUeXBlOiBwcm9wcy5zcG90T3B0aW9ucy5yZXF1ZXN0VHlwZSxcbiAgICAgICAgICB2YWxpZFVudGlsOiBwcm9wcy5zcG90T3B0aW9ucy52YWxpZFVudGlsPy5kYXRlLnRvVVRDU3RyaW5nKCksXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgLy8gUmVtb3ZlIFNwb3RPcHRpb25zIGlmIHRoZXJlIGFyZSBub25lLlxuICAgICAgaWYgKFxuICAgICAgICBPYmplY3Qua2V5cyhtYXJrZXRPcHRpb25zLnNwb3RPcHRpb25zKS5maWx0ZXIoXG4gICAgICAgICAgKGspID0+IG1hcmtldE9wdGlvbnMuc3BvdE9wdGlvbnNba10sXG4gICAgICAgICkubGVuZ3RoID09IDBcbiAgICAgICkge1xuICAgICAgICBtYXJrZXRPcHRpb25zLnNwb3RPcHRpb25zID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHRoaXMudGFncyA9IG5ldyBUYWdNYW5hZ2VyKFxuICAgIC8vICAgVGFnVHlwZS5LRVlfVkFMVUUsXG4gICAgLy8gICB0ZkxhdW5jaFRlbXBsYXRlLkxhdW5jaFRlbXBsYXRlLnRmUmVzb3VyY2VUeXBlLFxuICAgIC8vICk7XG5cbiAgICBjb25zdCB0YWdzVG9rZW4gPSBMYXp5LmFueVZhbHVlKHtcbiAgICAgIHByb2R1Y2U6ICgpOlxuICAgICAgICB8IHRmTGF1bmNoVGVtcGxhdGUuTGF1bmNoVGVtcGxhdGVUYWdTcGVjaWZpY2F0aW9uc1tdXG4gICAgICAgIHwgdW5kZWZpbmVkID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX3RhZ3MpIHtcbiAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICByZXNvdXJjZVR5cGU6IFwiaW5zdGFuY2VcIixcbiAgICAgICAgICAgICAgdGFnczogdGhpcy5fdGFncyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHJlc291cmNlVHlwZTogXCJ2b2x1bWVcIixcbiAgICAgICAgICAgICAgdGFnczogdGhpcy5fdGFncyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXS5tYXAodGZMYXVuY2hUZW1wbGF0ZS5sYXVuY2hUZW1wbGF0ZVRhZ1NwZWNpZmljYXRpb25zVG9UZXJyYWZvcm0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgY29uc3QgbmV0d29ya0ludGVyZmFjZXM6XG4gICAgICB8IHRmTGF1bmNoVGVtcGxhdGUuTGF1bmNoVGVtcGxhdGVOZXR3b3JrSW50ZXJmYWNlc1tdXG4gICAgICB8IHVuZGVmaW5lZCA9XG4gICAgICBwcm9wcy5hc3NvY2lhdGVQdWJsaWNJcEFkZHJlc3MgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZGV2aWNlSW5kZXg6IDAsXG4gICAgICAgICAgICAgIGFzc29jaWF0ZVB1YmxpY0lwQWRkcmVzczpcbiAgICAgICAgICAgICAgICBwcm9wcy5hc3NvY2lhdGVQdWJsaWNJcEFkZHJlc3M/LnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgIHNlY3VyaXR5R3JvdXBzOiBzZWN1cml0eUdyb3Vwc1Rva2VuLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdXG4gICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKFxuICAgICAgcHJvcHMudmVyc2lvbkRlc2NyaXB0aW9uICYmXG4gICAgICAhVG9rZW4uaXNVbnJlc29sdmVkKHByb3BzLnZlcnNpb25EZXNjcmlwdGlvbikgJiZcbiAgICAgIHByb3BzLnZlcnNpb25EZXNjcmlwdGlvbi5sZW5ndGggPiAyNTVcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYHZlcnNpb25EZXNjcmlwdGlvbiBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyNTUgY2hhcmFjdGVycywgZ290ICR7cHJvcHMudmVyc2lvbkRlc2NyaXB0aW9uLmxlbmd0aH1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlc291cmNlID0gbmV3IHRmTGF1bmNoVGVtcGxhdGUuTGF1bmNoVGVtcGxhdGUodGhpcywgXCJSZXNvdXJjZVwiLCB7XG4gICAgICBuYW1lOiBwcm9wcz8ubGF1bmNoVGVtcGxhdGVOYW1lLFxuICAgICAgZGVzY3JpcHRpb246IHByb3BzPy52ZXJzaW9uRGVzY3JpcHRpb24sXG4gICAgICBibG9ja0RldmljZU1hcHBpbmdzOlxuICAgICAgICBwcm9wcz8uYmxvY2tEZXZpY2VzICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IGxhdW5jaFRlbXBsYXRlQmxvY2tEZXZpY2VNYXBwaW5ncyh0aGlzLCBwcm9wcy5ibG9ja0RldmljZXMpXG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBjcmVkaXRTcGVjaWZpY2F0aW9uOlxuICAgICAgICBwcm9wcz8uY3B1Q3JlZGl0cyAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIGNwdUNyZWRpdHM6IHByb3BzLmNwdUNyZWRpdHMsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBkaXNhYmxlQXBpVGVybWluYXRpb246IHByb3BzPy5kaXNhYmxlQXBpVGVybWluYXRpb24sXG4gICAgICBlYnNPcHRpbWl6ZWQ6IHByb3BzPy5lYnNPcHRpbWl6ZWQ/LnRvU3RyaW5nKCksXG4gICAgICBlbmNsYXZlT3B0aW9uczpcbiAgICAgICAgcHJvcHM/Lm5pdHJvRW5jbGF2ZUVuYWJsZWQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBlbmFibGVkOiBwcm9wcy5uaXRyb0VuY2xhdmVFbmFibGVkLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgaGliZXJuYXRpb25PcHRpb25zOlxuICAgICAgICBwcm9wcz8uaGliZXJuYXRpb25Db25maWd1cmVkICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgY29uZmlndXJlZDogcHJvcHMuaGliZXJuYXRpb25Db25maWd1cmVkLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgaWFtSW5zdGFuY2VQcm9maWxlOlxuICAgICAgICBpYW1Qcm9maWxlQXJuICE9PSB1bmRlZmluZWQgPyB7IGFybjogaWFtUHJvZmlsZUFybiB9IDogdW5kZWZpbmVkLFxuICAgICAgaW1hZ2VJZDogaW1hZ2VDb25maWc/LmltYWdlSWQsXG4gICAgICBpbnN0YW5jZVR5cGU6IHByb3BzPy5pbnN0YW5jZVR5cGU/LnRvU3RyaW5nKCksXG4gICAgICBpbnN0YW5jZUluaXRpYXRlZFNodXRkb3duQmVoYXZpb3I6XG4gICAgICAgIHByb3BzPy5pbnN0YW5jZUluaXRpYXRlZFNodXRkb3duQmVoYXZpb3IsXG4gICAgICBpbnN0YW5jZU1hcmtldE9wdGlvbnM6IG1hcmtldE9wdGlvbnMsXG4gICAgICBrZXlOYW1lOiBwcm9wcy5rZXlQYWlyPy5rZXlQYWlyTmFtZSA/PyBwcm9wcz8ua2V5TmFtZSxcbiAgICAgIG1vbml0b3Jpbmc6XG4gICAgICAgIHByb3BzPy5kZXRhaWxlZE1vbml0b3JpbmcgIT09IHVuZGVmaW5lZFxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBlbmFibGVkOiBwcm9wcy5kZXRhaWxlZE1vbml0b3JpbmcsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICB2cGNTZWN1cml0eUdyb3VwSWRzOiBuZXR3b3JrSW50ZXJmYWNlcyA/IHVuZGVmaW5lZCA6IHNlY3VyaXR5R3JvdXBzVG9rZW4sXG4gICAgICB0YWdTcGVjaWZpY2F0aW9uczogdGFnc1Rva2VuLFxuICAgICAgdXNlckRhdGE6IHRoaXMudXNlckRhdGE/LnJlbmRlcih0aGlzKSxcbiAgICAgIG1ldGFkYXRhT3B0aW9uczogdGhpcy5yZW5kZXJNZXRhZGF0YU9wdGlvbnMocHJvcHMpLFxuICAgICAgbmV0d29ya0ludGVyZmFjZXMsXG5cbiAgICAgIC8vIEZpZWxkcyBub3QgeWV0IGltcGxlbWVudGVkOlxuICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1wcm9wZXJ0aWVzLWVjMi1sYXVuY2h0ZW1wbGF0ZS1sYXVuY2h0ZW1wbGF0ZWRhdGEtY2FwYWNpdHlyZXNlcnZhdGlvbnNwZWNpZmljYXRpb24uaHRtbFxuICAgICAgLy8gV2lsbCByZXF1aXJlIGNyZWF0aW5nIGFuIEwyIGZvciBBV1M6OkVDMjo6Q2FwYWNpdHlSZXNlcnZhdGlvblxuICAgICAgLy8gY2FwYWNpdHlSZXNlcnZhdGlvblNwZWNpZmljYXRpb246IHVuZGVmaW5lZCxcblxuICAgICAgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXByb3BlcnRpZXMtZWMyLWxhdW5jaHRlbXBsYXRlLWxhdW5jaHRlbXBsYXRlZGF0YS1jcHVvcHRpb25zLmh0bWxcbiAgICAgIC8vIGNwdU9wdGlvbnM6IHVuZGVmaW5lZCxcblxuICAgICAgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXByb3BlcnRpZXMtZWMyLWxhdW5jaHRlbXBsYXRlLWVsYXN0aWNncHVzcGVjaWZpY2F0aW9uLmh0bWxcbiAgICAgIC8vIGVsYXN0aWNHcHVTcGVjaWZpY2F0aW9uczogdW5kZWZpbmVkLFxuXG4gICAgICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1lYzItbGF1bmNodGVtcGxhdGUtbGF1bmNodGVtcGxhdGVkYXRhLmh0bWwjY2ZuLWVjMi1sYXVuY2h0ZW1wbGF0ZS1sYXVuY2h0ZW1wbGF0ZWRhdGEtZWxhc3RpY2luZmVyZW5jZWFjY2VsZXJhdG9yc1xuICAgICAgLy8gZWxhc3RpY0luZmVyZW5jZUFjY2VsZXJhdG9yczogdW5kZWZpbmVkLFxuXG4gICAgICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1lYzItbGF1bmNodGVtcGxhdGUtbGF1bmNodGVtcGxhdGVkYXRhLmh0bWwjY2ZuLWVjMi1sYXVuY2h0ZW1wbGF0ZS1sYXVuY2h0ZW1wbGF0ZWRhdGEta2VybmVsaWRcbiAgICAgIC8vIGtlcm5lbElkOiB1bmRlZmluZWQsXG4gICAgICAvLyByYW1EaXNrSWQ6IHVuZGVmaW5lZCxcblxuICAgICAgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXByb3BlcnRpZXMtZWMyLWxhdW5jaHRlbXBsYXRlLWxhdW5jaHRlbXBsYXRlZGF0YS5odG1sI2Nmbi1lYzItbGF1bmNodGVtcGxhdGUtbGF1bmNodGVtcGxhdGVkYXRhLWxpY2Vuc2VzcGVjaWZpY2F0aW9uc1xuICAgICAgLy8gQWxzbyBub3QgaW1wbGVtZW50ZWQgaW4gSW5zdGFuY2UgTDJcbiAgICAgIC8vIGxpY2Vuc2VTcGVjaWZpY2F0aW9uczogdW5kZWZpbmVkLFxuXG4gICAgICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1lYzItbGF1bmNodGVtcGxhdGUtbGF1bmNodGVtcGxhdGVkYXRhLmh0bWwjY2ZuLWVjMi1sYXVuY2h0ZW1wbGF0ZS1sYXVuY2h0ZW1wbGF0ZWRhdGEtdGFnc3BlY2lmaWNhdGlvbnNcbiAgICAgIC8vIFNob3VsZCBiZSBpbXBsZW1lbnRlZCB2aWEgdGhlIFRhZ2dpbmcgYXNwZWN0IGluIENESyBjb3JlLiBDb21wbGljYXRpb24gd2lsbCBiZSB0aGF0IHRoaXMgdGFnZ2luZyBpbnRlcmZhY2UgaXMgdmVyeSB1bmlxdWUgdG8gTGF1bmNoVGVtcGxhdGVzLlxuICAgICAgLy8gdGFnU3BlY2lmaWNhdGlvbjogdW5kZWZpbmVkXG5cbiAgICAgIC8vIFRPRE86IHVzZSBJUGxhY2VtZW50R3JvdXAgaW4gTHVhbmNoVGVtcGxhdGVcbiAgICAgIC8vIHBsYWNlbWVudDogdW5kZWZpbmVkLFxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMucm9sZSkge1xuICAgICAgdGhpcy5yZXNvdXJjZS5ub2RlLmFkZERlcGVuZGVuY3kodGhpcy5yb2xlKTtcbiAgICB9IGVsc2UgaWYgKHByb3BzLmluc3RhbmNlUHJvZmlsZT8ucm9sZSkge1xuICAgICAgdGhpcy5yZXNvdXJjZS5ub2RlLmFkZERlcGVuZGVuY3kocHJvcHMuaW5zdGFuY2VQcm9maWxlLnJvbGUpO1xuICAgIH1cblxuICAgIFRhZ3Mub2YodGhpcykuYWRkKE5BTUVfVEFHLCB0aGlzLm5vZGUucGF0aCk7XG5cbiAgICB0aGlzLmRlZmF1bHRWZXJzaW9uTnVtYmVyID0gdGhpcy5yZXNvdXJjZS5kZWZhdWx0VmVyc2lvbi50b1N0cmluZygpOyAvLyBzaG91bGQgYmUgVG9rZW4uYXNTdHJpbmcoKT9cbiAgICB0aGlzLmxhdGVzdFZlcnNpb25OdW1iZXIgPSB0aGlzLnJlc291cmNlLmxhdGVzdFZlcnNpb24udG9TdHJpbmcoKTsgLy8gc2hvdWxkIGJlIFRva2VuLmFzU3RyaW5nKCk/XG4gICAgdGhpcy5sYXVuY2hUZW1wbGF0ZUlkID0gdGhpcy5yZXNvdXJjZS5pZDtcbiAgICB0aGlzLnZlcnNpb25OdW1iZXIgPSB0aGlzLnJlc291cmNlLmxhdGVzdFZlcnNpb24udG9TdHJpbmcoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyTWV0YWRhdGFPcHRpb25zKHByb3BzOiBMYXVuY2hUZW1wbGF0ZVByb3BzKSB7XG4gICAgbGV0IHJlcXVpcmVNZXRhZGF0YU9wdGlvbnMgPSBmYWxzZTtcbiAgICAvLyBpZiByZXF1aXJlSW1kc3YyIGlzIHRydWUsIGh0dHBUb2tlbnMgbXVzdCBiZSByZXF1aXJlZC5cbiAgICBpZiAoXG4gICAgICBwcm9wcy5yZXF1aXJlSW1kc3YyID09PSB0cnVlICYmXG4gICAgICBwcm9wcy5odHRwVG9rZW5zID09PSBMYXVuY2hUZW1wbGF0ZUh0dHBUb2tlbnMuT1BUSU9OQUxcbiAgICApIHtcbiAgICAgIEFubm90YXRpb25zLm9mKHRoaXMpLmFkZEVycm9yKFxuICAgICAgICBcImh0dHBUb2tlbnMgbXVzdCBiZSByZXF1aXJlZCB3aGVuIHJlcXVpcmVJbWRzdjIgaXMgdHJ1ZVwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgcHJvcHMuaHR0cEVuZHBvaW50ICE9PSB1bmRlZmluZWQgfHxcbiAgICAgIHByb3BzLmh0dHBQcm90b2NvbElwdjYgIT09IHVuZGVmaW5lZCB8fFxuICAgICAgcHJvcHMuaHR0cFB1dFJlc3BvbnNlSG9wTGltaXQgIT09IHVuZGVmaW5lZCB8fFxuICAgICAgcHJvcHMuaHR0cFRva2VucyAhPT0gdW5kZWZpbmVkIHx8XG4gICAgICBwcm9wcy5pbnN0YW5jZU1ldGFkYXRhVGFncyAhPT0gdW5kZWZpbmVkIHx8XG4gICAgICBwcm9wcy5yZXF1aXJlSW1kc3YyID09PSB0cnVlXG4gICAgKSB7XG4gICAgICByZXF1aXJlTWV0YWRhdGFPcHRpb25zID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHJlcXVpcmVNZXRhZGF0YU9wdGlvbnMpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGh0dHBFbmRwb2ludDpcbiAgICAgICAgICBwcm9wcy5odHRwRW5kcG9pbnQgPT09IHRydWVcbiAgICAgICAgICAgID8gXCJlbmFibGVkXCJcbiAgICAgICAgICAgIDogcHJvcHMuaHR0cEVuZHBvaW50ID09PSBmYWxzZVxuICAgICAgICAgICAgICA/IFwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgaHR0cFByb3RvY29sSXB2NjpcbiAgICAgICAgICBwcm9wcy5odHRwUHJvdG9jb2xJcHY2ID09PSB0cnVlXG4gICAgICAgICAgICA/IFwiZW5hYmxlZFwiXG4gICAgICAgICAgICA6IHByb3BzLmh0dHBQcm90b2NvbElwdjYgPT09IGZhbHNlXG4gICAgICAgICAgICAgID8gXCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICBodHRwUHV0UmVzcG9uc2VIb3BMaW1pdDogcHJvcHMuaHR0cFB1dFJlc3BvbnNlSG9wTGltaXQsXG4gICAgICAgIGh0dHBUb2tlbnM6XG4gICAgICAgICAgcHJvcHMucmVxdWlyZUltZHN2MiA9PT0gdHJ1ZVxuICAgICAgICAgICAgPyBMYXVuY2hUZW1wbGF0ZUh0dHBUb2tlbnMuUkVRVUlSRURcbiAgICAgICAgICAgIDogcHJvcHMuaHR0cFRva2VucyxcbiAgICAgICAgaW5zdGFuY2VNZXRhZGF0YVRhZ3M6XG4gICAgICAgICAgcHJvcHMuaW5zdGFuY2VNZXRhZGF0YVRhZ3MgPT09IHRydWVcbiAgICAgICAgICAgID8gXCJlbmFibGVkXCJcbiAgICAgICAgICAgIDogcHJvcHMuaW5zdGFuY2VNZXRhZGF0YVRhZ3MgPT09IGZhbHNlXG4gICAgICAgICAgICAgID8gXCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkIHRoZSBzZWN1cml0eSBncm91cCB0byB0aGUgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSBzZWN1cml0eUdyb3VwOiBUaGUgc2VjdXJpdHkgZ3JvdXAgdG8gYWRkXG4gICAqL1xuICBwdWJsaWMgYWRkU2VjdXJpdHlHcm91cChzZWN1cml0eUdyb3VwOiBJU2VjdXJpdHlHcm91cCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fY29ubmVjdGlvbnMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJMYXVuY2hUZW1wbGF0ZSBjYW4gb25seSBiZSBhZGRlZCBhIHNlY3VyaXR5R3JvdXAgaWYgYW5vdGhlciBzZWN1cml0eUdyb3VwIGlzIGluaXRpYWxpemVkIGluIHRoZSBjb25zdHJ1Y3Rvci5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuX2Nvbm5lY3Rpb25zLmFkZFNlY3VyaXR5R3JvdXAoc2VjdXJpdHlHcm91cCk7XG4gIH1cblxuICAvKipcbiAgICogQWxsb3dzIHNwZWNpZnlpbmcgc2VjdXJpdHkgZ3JvdXAgY29ubmVjdGlvbnMgZm9yIHRoZSBpbnN0YW5jZS5cbiAgICpcbiAgICogQG5vdGUgT25seSBhdmFpbGFibGUgaWYgeW91IHByb3ZpZGUgYSBzZWN1cml0eUdyb3VwIHdoZW4gY29uc3RydWN0aW5nIHRoZSBMYXVuY2hUZW1wbGF0ZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgY29ubmVjdGlvbnMoKTogQ29ubmVjdGlvbnMge1xuICAgIGlmICghdGhpcy5fY29ubmVjdGlvbnMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJMYXVuY2hUZW1wbGF0ZSBjYW4gb25seSBiZSB1c2VkIGFzIElDb25uZWN0YWJsZSBpZiBhIHNlY3VyaXR5R3JvdXAgaXMgcHJvdmlkZWQgd2hlbiBjb25zdHJ1Y3RpbmcgaXQuXCIsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fY29ubmVjdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogUHJpbmNpcGFsIHRvIGdyYW50IHBlcm1pc3Npb25zIHRvLlxuICAgKlxuICAgKiBAbm90ZSBPbmx5IGF2YWlsYWJsZSBpZiB5b3UgcHJvdmlkZSBhIHJvbGUgd2hlbiBjb25zdHJ1Y3RpbmcgdGhlIExhdW5jaFRlbXBsYXRlLlxuICAgKi9cbiAgcHVibGljIGdldCBncmFudFByaW5jaXBhbCgpOiBpYW0uSVByaW5jaXBhbCB7XG4gICAgaWYgKCF0aGlzLl9ncmFudFByaW5jaXBhbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkxhdW5jaFRlbXBsYXRlIGNhbiBvbmx5IGJlIHVzZWQgYXMgSUdyYW50YWJsZSBpZiBhIHJvbGUgaXMgcHJvdmlkZWQgd2hlbiBjb25zdHJ1Y3RpbmcgaXQuXCIsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fZ3JhbnRQcmluY2lwYWw7XG4gIH1cbn1cbiJdfQ==
@@ -4,8 +4,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.BaseListener = void 0;
5
5
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
6
  // https://github.com/aws/aws-cdk/blob/v2.175.1/packages/aws-cdk-lib/aws-elasticloadbalancingv2/lib/shared/base-listener.ts
7
- const provider_aws_1 = require("@cdktf/provider-aws");
8
- const cdktf_1 = require("cdktf");
7
+ const provider_aws_1 = require("@cdktn/provider-aws");
8
+ const cdktn_1 = require("cdktn");
9
9
  const util_1 = require("./util");
10
10
  const aws_construct_1 = require("../../aws-construct");
11
11
  /**
@@ -99,7 +99,7 @@ class BaseListener extends aws_construct_1.AwsConstructBase {
99
99
  routingHttpResponseXFrameOptionsHeaderValue: this.lazyStringAttr(util_1.ListenerAttribute.routingHTTPResponseXFrameOptionsHeaderValue),
100
100
  tcpIdleTimeoutSeconds: this.lazyNumberAttr(util_1.ListenerAttribute.tcpIdleTimeoutSeconds),
101
101
  ...additionalProps,
102
- defaultAction: cdktf_1.Lazy.anyValue({
102
+ defaultAction: cdktn_1.Lazy.anyValue({
103
103
  produce: () => {
104
104
  const rendered = this.defaultAction?.renderActions() ?? [];
105
105
  return rendered.map(provider_aws_1.lbListener.lbListenerDefaultActionToTerraform);
@@ -128,17 +128,17 @@ class BaseListener extends aws_construct_1.AwsConstructBase {
128
128
  this.setAttribute(key, undefined);
129
129
  }
130
130
  lazyStringAttr(key) {
131
- return cdktf_1.Lazy.stringValue({
131
+ return cdktn_1.Lazy.stringValue({
132
132
  produce: () => this.attributes[key],
133
133
  });
134
134
  }
135
135
  lazyBoolAttr(key) {
136
- return cdktf_1.Lazy.anyValue({
136
+ return cdktn_1.Lazy.anyValue({
137
137
  produce: () => (0, util_1.lookupBoolAttribute)(this.attributes, key),
138
138
  });
139
139
  }
140
140
  lazyNumberAttr(key) {
141
- return cdktf_1.Lazy.numberValue({
141
+ return cdktn_1.Lazy.numberValue({
142
142
  produce: () => (0, util_1.lookupNumberAttribute)(this.attributes, key),
143
143
  });
144
144
  }
@@ -170,12 +170,12 @@ class BaseListener extends aws_construct_1.AwsConstructBase {
170
170
  // @deprecate: upon the next major version bump, replace this with a `throw`
171
171
  if (this.defaultAction) {
172
172
  // "@aws-cdk/aws-elbv2:listenerExistingDefaultActionReplaced",
173
- cdktf_1.Annotations.of(this).addWarning("A default Action already existed on this Listener and was replaced. Configure exactly one default Action.");
173
+ cdktn_1.Annotations.of(this).addWarning("A default Action already existed on this Listener and was replaced. Configure exactly one default Action.");
174
174
  }
175
175
  this.defaultAction = action;
176
176
  }
177
177
  }
178
178
  exports.BaseListener = BaseListener;
179
179
  _a = JSII_RTTI_SYMBOL_1;
180
- BaseListener[_a] = { fqn: "terraconstructs.aws.compute.BaseListener", version: "0.2.4" };
181
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1saXN0ZW5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hd3MvY29tcHV0ZS9sYi1zaGFyZWQvYmFzZS1saXN0ZW5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDJIQUEySDtBQUUzSCxzREFBK0Q7QUFDL0QsaUNBS2U7QUFRZixpQ0FPZ0I7QUFDaEIsdURBQXNFO0FBMkV0RTs7R0FFRztBQUNILE1BQXNCLFlBQ3BCLFNBQVEsZ0NBQWdCO0lBR3hCLE1BQU07SUFDTiwyRUFBMkU7SUFDM0Usb0JBQW9CO0lBQ3BCLGVBQWU7SUFDZixNQUFNO0lBQ04sMENBQTBDO0lBQzFDLHNCQUFzQjtJQUN0QixrREFBa0Q7SUFDbEQsTUFBTTtJQUNOLFNBQVM7SUFDVCxpRUFBaUU7SUFDakUsc0VBQXNFO0lBQ3RFLDRCQUE0QjtJQUM1QixXQUFXO0lBQ1gsMkRBQTJEO0lBQzNELFFBQVE7SUFDUix1QkFBdUI7SUFDdkIsMEZBQTBGO0lBQzFGLFNBQVM7SUFDVCxNQUFNO0lBRU4sa0RBQWtEO0lBQ2xELGdEQUFnRDtJQUNoRCxnRkFBZ0Y7SUFDaEYsTUFBTTtJQUVOLDZEQUE2RDtJQUM3RCx3Q0FBd0M7SUFDeEMsNEVBQTRFO0lBQzVFLGlCQUFpQjtJQUNqQiw0Q0FBNEM7SUFDNUMsMERBQTBEO0lBQzFELHNEQUFzRDtJQUN0RCxnRUFBZ0U7SUFDaEUsMENBQTBDO0lBQzFDLHNEQUFzRDtJQUN0RCx3REFBd0Q7SUFDeEQsc0JBQXNCO0lBQ3RCLG9FQUFvRTtJQUNwRSxzS0FBc0s7SUFDdEssNEJBQTRCO0lBQzVCLGlEQUFpRDtJQUNqRCx3REFBd0Q7SUFDeEQsZ0JBQWdCO0lBRWhCLGtCQUFrQjtJQUNsQixJQUFJO0lBRUo7O09BRUc7SUFDSCxJQUFXLGVBQWU7UUFDeEIsT0FBTztZQUNMLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztTQUM5QixDQUFDO0lBQ0osQ0FBQztJQUNELElBQVcsT0FBTztR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QkFDTCxnR0FBZ0c7YUFDakcsQ0FBQztRQUNKLENBQUM7UUFDRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7OztPQUlHO0lBQ08saUJBQWlCLENBQUMsTUFBdUI7UUFDakQsdUNBQXVDO1FBQ3ZDLEVBQUU7UUFDRixrRkFBa0Y7UUFDbEYseUZBQXlGO1FBQ3pGLDhGQUE4RjtRQUM5RixrREFBa0Q7UUFDbEQsRUFBRTtRQUNGLDBDQUEwQztRQUMxQyw0RUFBNEU7UUFDNUUsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDdkIsOERBQThEO1lBQzlELG1CQUFXLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FDN0IsMkdBQTJHLENBQzVHLENBQUM7UUFDSixDQUFDO1FBRUQsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUM7SUFDOUIsQ0FBQzs7QUE5T0gsb0NBK09DIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvdjIuMTc1LjEvcGFja2FnZXMvYXdzLWNkay1saWIvYXdzLWVsYXN0aWNsb2FkYmFsYW5jaW5ndjIvbGliL3NoYXJlZC9iYXNlLWxpc3RlbmVyLnRzXG5cbmltcG9ydCB7IGxiTGlzdGVuZXIgYXMgdGZMaXN0ZW5lciB9IGZyb20gXCJAY2RrdGYvcHJvdmlkZXItYXdzXCI7XG5pbXBvcnQge1xuICBBbm5vdGF0aW9ucyxcbiAgLy8gQ29udGV4dFByb3ZpZGVyLFxuICBMYXp5LFxuICAvLyBUb2tlbixcbn0gZnJvbSBcImNka3RmXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHtcbiAgTG9hZEJhbGFuY2VyVHlwZSxcbiAgTG9hZEJhbGFuY2VyTGlzdGVuZXJQcm90b2NvbCxcbn0gZnJvbSBcIi4vZ3JpZC1sb29rdXAtdHlwZXNcIjtcbmltcG9ydCB7IExiTGlzdGVuZXJDb25maWcgfSBmcm9tIFwiLi9sYi1saXN0ZW5lci1jb25maWcuZ2VuZXJhdGVkXCI7XG5pbXBvcnQgeyBJTGlzdGVuZXJBY3Rpb24gfSBmcm9tIFwiLi9saXN0ZW5lci1hY3Rpb25cIjtcbmltcG9ydCB7XG4gIEF0dHJpYnV0ZXMsXG4gIC8vIG1hcFRhZ01hcFRvQ3hzY2hlbWEsXG4gIC8vIHJlbmRlckF0dHJpYnV0ZXMsXG4gIExpc3RlbmVyQXR0cmlidXRlIGFzIEF0dHJpYnV0ZSxcbiAgbG9va3VwQm9vbEF0dHJpYnV0ZSxcbiAgbG9va3VwTnVtYmVyQXR0cmlidXRlLFxufSBmcm9tIFwiLi91dGlsXCI7XG5pbXBvcnQgeyBJQXdzQ29uc3RydWN0LCBBd3NDb25zdHJ1Y3RCYXNlIH0gZnJvbSBcIi4uLy4uL2F3cy1jb25zdHJ1Y3RcIjtcbi8qKlxuICogT3B0aW9ucyBmb3IgbGlzdGVuZXIgbG9va3VwXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZUxpc3RlbmVyTG9va3VwT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBGaWx0ZXIgbGlzdGVuZXJzIGJ5IGFzc29jaWF0ZWQgbG9hZCBiYWxhbmNlciBhcm5cbiAgICogQGRlZmF1bHQgLSBkb2VzIG5vdCBmaWx0ZXIgYnkgbG9hZCBiYWxhbmNlciBhcm5cbiAgICovXG4gIHJlYWRvbmx5IGxvYWRCYWxhbmNlckFybj86IHN0cmluZztcblxuICAvKipcbiAgICogRmlsdGVyIGxpc3RlbmVycyBieSBhc3NvY2lhdGVkIGxvYWQgYmFsYW5jZXIgdGFnc1xuICAgKiBAZGVmYXVsdCAtIGRvZXMgbm90IGZpbHRlciBieSBsb2FkIGJhbGFuY2VyIHRhZ3NcbiAgICovXG4gIHJlYWRvbmx5IGxvYWRCYWxhbmNlclRhZ3M/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBGaWx0ZXIgbGlzdGVuZXJzIGJ5IGxpc3RlbmVyIHBvcnRcbiAgICogQGRlZmF1bHQgLSBkb2VzIG5vdCBmaWx0ZXIgYnkgbGlzdGVuZXIgcG9ydFxuICAgKi9cbiAgcmVhZG9ubHkgbGlzdGVuZXJQb3J0PzogbnVtYmVyO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHF1ZXJ5aW5nIHRoZSBsb2FkIGJhbGFuY2VyIGxpc3RlbmVyIGNvbnRleHQgcHJvdmlkZXJcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgaW50ZXJmYWNlIExpc3RlbmVyUXVlcnlDb250ZXh0UHJvdmlkZXJPcHRpb25zIHtcbiAgLyoqXG4gICAqIFVzZXIncyBwcm92aWRlZCBvcHRpb25zXG4gICAqL1xuICByZWFkb25seSB1c2VyT3B0aW9uczogQmFzZUxpc3RlbmVyTG9va3VwT3B0aW9ucztcblxuICAvKipcbiAgICogVHlwZSBvZiBsb2FkIGJhbGFuY2VyIGV4cGVjdGVkXG4gICAqL1xuICByZWFkb25seSBsb2FkQmFsYW5jZXJUeXBlOiBMb2FkQmFsYW5jZXJUeXBlO1xuXG4gIC8qKlxuICAgKiBBUk4gb2YgdGhlIGxpc3RlbmVyIHRvIGxvb2sgdXBcbiAgICogQGRlZmF1bHQgLSBkb2VzIG5vdCBmaWx0ZXIgYnkgbGlzdGVuZXIgYXJuXG4gICAqL1xuICByZWFkb25seSBsaXN0ZW5lckFybj86IHN0cmluZztcblxuICAvKipcbiAgICogT3B0aW9uYWwgcHJvdG9jb2wgb2YgdGhlIGxpc3RlbmVyIHRvIGxvb2sgdXBcbiAgICovXG4gIHJlYWRvbmx5IGxpc3RlbmVyUHJvdG9jb2w/OiBMb2FkQmFsYW5jZXJMaXN0ZW5lclByb3RvY29sO1xufVxuXG4vKipcbiAqIE91dHB1dHMgd2hpY2ggbWF5IGJlIHJlZ2lzdGVyZWQgZm9yIG91dHB1dCB2aWEgdGhlIEdyaWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGlzdGVuZXJPdXRwdXRzIHtcbiAgLyoqXG4gICAqIEFSTiBvZiB0aGUgbGlzdGVuZXJcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgbGlzdGVuZXJBcm46IHN0cmluZztcbn1cblxuLyoqXG4gKiBCYXNlIGludGVyZmFjZSBmb3IgbGlzdGVuZXJzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUxpc3RlbmVyIGV4dGVuZHMgSUF3c0NvbnN0cnVjdCB7XG4gIC8qKiBTdHJvbmdseSB0eXBlZCBvdXRwdXRzICovXG4gIHJlYWRvbmx5IGxpc3RlbmVyT3V0cHV0czogTGlzdGVuZXJPdXRwdXRzO1xuICAvKipcbiAgICogQVJOIG9mIHRoZSBsaXN0ZW5lclxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBsaXN0ZW5lckFybjogc3RyaW5nO1xufVxuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIGxpc3RlbmVyc1xuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZUxpc3RlbmVyXG4gIGV4dGVuZHMgQXdzQ29uc3RydWN0QmFzZVxuICBpbXBsZW1lbnRzIElMaXN0ZW5lclxue1xuICAvLyAvKipcbiAgLy8gICogUXVlcmllcyB0aGUgbG9hZCBiYWxhbmNlciBsaXN0ZW5lciBjb250ZXh0IHByb3ZpZGVyIGZvciBsb2FkIGJhbGFuY2VyXG4gIC8vICAqIGxpc3RlbmVyIGluZm8uXG4gIC8vICAqIEBpbnRlcm5hbFxuICAvLyAgKi9cbiAgLy8gcHJvdGVjdGVkIHN0YXRpYyBfcXVlcnlDb250ZXh0UHJvdmlkZXIoXG4gIC8vICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgLy8gICBvcHRpb25zOiBMaXN0ZW5lclF1ZXJ5Q29udGV4dFByb3ZpZGVyT3B0aW9ucyxcbiAgLy8gKSB7XG4gIC8vICAgaWYgKFxuICAvLyAgICAgVG9rZW4uaXNVbnJlc29sdmVkKG9wdGlvbnMudXNlck9wdGlvbnMubG9hZEJhbGFuY2VyQXJuKSB8fFxuICAvLyAgICAgT2JqZWN0LnZhbHVlcyhvcHRpb25zLnVzZXJPcHRpb25zLmxvYWRCYWxhbmNlclRhZ3MgPz8ge30pLnNvbWUoXG4gIC8vICAgICAgIFRva2VuLmlzVW5yZXNvbHZlZCxcbiAgLy8gICAgICkgfHxcbiAgLy8gICAgIFRva2VuLmlzVW5yZXNvbHZlZChvcHRpb25zLnVzZXJPcHRpb25zLmxpc3RlbmVyUG9ydClcbiAgLy8gICApIHtcbiAgLy8gICAgIHRocm93IG5ldyBFcnJvcihcbiAgLy8gICAgICAgXCJBbGwgYXJndW1lbnRzIHRvIGxvb2sgdXAgYSBsb2FkIGJhbGFuY2VyIGxpc3RlbmVyIG11c3QgYmUgY29uY3JldGUgKG5vIFRva2VucylcIixcbiAgLy8gICAgICk7XG4gIC8vICAgfVxuXG4gIC8vICAgbGV0IGN4c2NoZW1hVGFnczogY3hzY2hlbWEuVGFnW10gfCB1bmRlZmluZWQ7XG4gIC8vICAgaWYgKG9wdGlvbnMudXNlck9wdGlvbnMubG9hZEJhbGFuY2VyVGFncykge1xuICAvLyAgICAgY3hzY2hlbWFUYWdzID0gbWFwVGFnTWFwVG9DeHNjaGVtYShvcHRpb25zLnVzZXJPcHRpb25zLmxvYWRCYWxhbmNlclRhZ3MpO1xuICAvLyAgIH1cblxuICAvLyAgIGNvbnN0IHByb3BzOiBjeGFwaS5Mb2FkQmFsYW5jZXJMaXN0ZW5lckNvbnRleHRSZXNwb25zZSA9XG4gIC8vICAgICBDb250ZXh0UHJvdmlkZXIuZ2V0VmFsdWUoc2NvcGUsIHtcbiAgLy8gICAgICAgcHJvdmlkZXI6IGN4c2NoZW1hLkNvbnRleHRQcm92aWRlci5MT0FEX0JBTEFOQ0VSX0xJU1RFTkVSX1BST1ZJREVSLFxuICAvLyAgICAgICBwcm9wczoge1xuICAvLyAgICAgICAgIGxpc3RlbmVyQXJuOiBvcHRpb25zLmxpc3RlbmVyQXJuLFxuICAvLyAgICAgICAgIGxpc3RlbmVyUG9ydDogb3B0aW9ucy51c2VyT3B0aW9ucy5saXN0ZW5lclBvcnQsXG4gIC8vICAgICAgICAgbGlzdGVuZXJQcm90b2NvbDogb3B0aW9ucy5saXN0ZW5lclByb3RvY29sLFxuICAvLyAgICAgICAgIGxvYWRCYWxhbmNlckFybjogb3B0aW9ucy51c2VyT3B0aW9ucy5sb2FkQmFsYW5jZXJBcm4sXG4gIC8vICAgICAgICAgbG9hZEJhbGFuY2VyVGFnczogY3hzY2hlbWFUYWdzLFxuICAvLyAgICAgICAgIGxvYWRCYWxhbmNlclR5cGU6IG9wdGlvbnMubG9hZEJhbGFuY2VyVHlwZSxcbiAgLy8gICAgICAgfSBhcyBjeHNjaGVtYS5Mb2FkQmFsYW5jZXJMaXN0ZW5lckNvbnRleHRRdWVyeSxcbiAgLy8gICAgICAgZHVtbXlWYWx1ZToge1xuICAvLyAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAY2RrbGFicy9uby1saXRlcmFsLXBhcnRpdGlvblxuICAvLyAgICAgICAgIGxpc3RlbmVyQXJuOiBgYXJuOmF3czplbGFzdGljbG9hZGJhbGFuY2luZzp1cy13ZXN0LTI6MTIzNDU2Nzg5MDEyOmxpc3RlbmVyLyR7b3B0aW9ucy5sb2FkQmFsYW5jZXJUeXBlfS9teS1sb2FkLWJhbGFuY2VyLzUwZGM2YzQ5NWMwYzkxODgvZjJmN2RjOGVmYzUyMmFiMmAsXG4gIC8vICAgICAgICAgbGlzdGVuZXJQb3J0OiA4MCxcbiAgLy8gICAgICAgICBzZWN1cml0eUdyb3VwSWRzOiBbXCJzZy0xMjM0NTY3ODkwMTJcIl0sXG4gIC8vICAgICAgIH0gYXMgY3hhcGkuTG9hZEJhbGFuY2VyTGlzdGVuZXJDb250ZXh0UmVzcG9uc2UsXG4gIC8vICAgICB9KS52YWx1ZTtcblxuICAvLyAgIHJldHVybiBwcm9wcztcbiAgLy8gfVxuXG4gIC8qKlxuICAgKiBTdHJvbmdseSB0eXBlZCBvdXRwdXRzXG4gICAqL1xuICBwdWJsaWMgZ2V0IGxpc3RlbmVyT3V0cHV0cygpOiBMaXN0ZW5lck91dHB1dHMge1xuICAgIHJldHVybiB7XG4gICAgICBsaXN0ZW5lckFybjogdGhpcy5saXN0ZW5lckFybixcbiAgICB9O1xuICB9XG4gIHB1YmxpYyBnZXQgb3V0cHV0cygpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5saXN0ZW5lck91dHB1dHM7XG4gIH1cblxuICAvKipcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGxpc3RlbmVyQXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEF0dHJpYnV0ZXMgc2V0IG9uIHRoaXMgbGlzdGVuZXJcbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgYXR0cmlidXRlczogQXR0cmlidXRlcyA9IHt9O1xuXG4gIHByaXZhdGUgZGVmYXVsdEFjdGlvbj86IElMaXN0ZW5lckFjdGlvbjtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBhZGRpdGlvbmFsUHJvcHM6IExiTGlzdGVuZXJDb25maWcpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgY29uc3QgcmVzb3VyY2UgPSBuZXcgdGZMaXN0ZW5lci5MYkxpc3RlbmVyKHRoaXMsIFwiUmVzb3VyY2VcIiwge1xuICAgICAgLy8gUmV2ZXJzZSBDRk4gTG9hZEJhbGFuY2VyQXR0cmlidXRlcyB0byBUZXJyYWZvcm0gUmVzb3VyY2UgcHJvcGVydGllc1xuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2hhc2hpY29ycC90ZXJyYWZvcm0tcHJvdmlkZXItYXdzL2Jsb2IvdjUuODguMC9pbnRlcm5hbC9zZXJ2aWNlL2VsYnYyL2xpc3RlbmVyLmdvI0w4ODBcbiAgICAgIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1wcm9wZXJ0aWVzLWVsYXN0aWNsb2FkYmFsYW5jaW5ndjItbGlzdGVuZXItbGlzdGVuZXJhdHRyaWJ1dGUuaHRtbFxuICAgICAgLy8gbm90aWNlOiBodHRwczovL2dpdGh1Yi5jb20vaGFzaGljb3JwL3RlcnJhZm9ybS1wcm92aWRlci1hd3MvaXNzdWVzLzQwOTg2XG4gICAgICByb3V0aW5nSHR0cFJlcXVlc3RYQW16bk10bHNDbGllbnRjZXJ0SGVhZGVyTmFtZTogdGhpcy5sYXp5U3RyaW5nQXR0cihcbiAgICAgICAgQXR0cmlidXRlLnJvdXRpbmdIVFRQUmVxdWVzdFhBbXpuTXRsc0NsaWVudGNlcnRIZWFkZXJOYW1lLFxuICAgICAgKSxcbiAgICAgIHJvdXRpbmdIdHRwUmVxdWVzdFhBbXpuTXRsc0NsaWVudGNlcnRJc3N1ZXJIZWFkZXJOYW1lOlxuICAgICAgICB0aGlzLmxhenlTdHJpbmdBdHRyKFxuICAgICAgICAgIEF0dHJpYnV0ZS5yb3V0aW5nSFRUUFJlcXVlc3RYQW16bk10bHNDbGllbnRjZXJ0SXNzdWVySGVhZGVyTmFtZSxcbiAgICAgICAgKSxcbiAgICAgIHJvdXRpbmdIdHRwUmVxdWVzdFhBbXpuTXRsc0NsaWVudGNlcnRMZWFmSGVhZGVyTmFtZTogdGhpcy5sYXp5U3RyaW5nQXR0cihcbiAgICAgICAgQXR0cmlidXRlLnJvdXRpbmdIVFRQUmVxdWVzdFhBbXpuTXRsc0NsaWVudGNlcnRMZWFmSGVhZGVyTmFtZSxcbiAgICAgICksXG4gICAgICByb3V0aW5nSHR0cFJlcXVlc3RYQW16bk10bHNDbGllbnRjZXJ0U2VyaWFsTnVtYmVySGVhZGVyTmFtZTpcbiAgICAgICAgdGhpcy5sYXp5U3RyaW5nQXR0cihcbiAgICAgICAgICBBdHRyaWJ1dGUucm91dGluZ0hUVFBSZXF1ZXN0WEFtem5NdGxzQ2xpZW50Y2VydFNlcmlhbE51bWJlckhlYWRlck5hbWUsXG4gICAgICAgICksXG4gICAgICByb3V0aW5nSHR0cFJlcXVlc3RYQW16bk10bHNDbGllbnRjZXJ0U3ViamVjdEhlYWRlck5hbWU6XG4gICAgICAgIHRoaXMubGF6eVN0cmluZ0F0dHIoXG4gICAgICAgICAgQXR0cmlidXRlLnJvdXRpbmdIVFRQUmVxdWVzdFhBbXpuTXRsc0NsaWVudGNlcnRTdWJqZWN0SGVhZGVyTmFtZSxcbiAgICAgICAgKSxcbiAgICAgIHJvdXRpbmdIdHRwUmVxdWVzdFhBbXpuTXRsc0NsaWVudGNlcnRWYWxpZGl0eUhlYWRlck5hbWU6XG4gICAgICAgIHRoaXMubGF6eVN0cmluZ0F0dHIoXG4gICAgICAgICAgQXR0cmlidXRlLnJvdXRpbmdIVFRQUmVxdWVzdFhBbXpuTXRsc0NsaWVudGNlcnRWYWxpZGl0eUhlYWRlck5hbWUsXG4gICAgICAgICksXG4gICAgICByb3V0aW5nSHR0cFJlcXVlc3RYQW16blRsc0NpcGhlclN1aXRlSGVhZGVyTmFtZTogdGhpcy5sYXp5U3RyaW5nQXR0cihcbiAgICAgICAgQXR0cmlidXRlLnJvdXRpbmdIVFRQUmVxdWVzdFhBbXpuVGxzQ2lwaGVyU3VpdGVIZWFkZXJOYW1lLFxuICAgICAgKSxcbiAgICAgIHJvdXRpbmdIdHRwUmVxdWVzdFhBbXpuVGxzVmVyc2lvbkhlYWRlck5hbWU6IHRoaXMubGF6eVN0cmluZ0F0dHIoXG4gICAgICAgIEF0dHJpYnV0ZS5yb3V0aW5nSFRUUFJlcXVlc3RYQW16blRsc1ZlcnNpb25IZWFkZXJOYW1lLFxuICAgICAgKSxcbiAgICAgIHJvdXRpbmdIdHRwUmVzcG9uc2VBY2Nlc3NDb250cm9sQWxsb3dDcmVkZW50aWFsc0hlYWRlclZhbHVlOlxuICAgICAgICB0aGlzLmxhenlTdHJpbmdBdHRyKFxuICAgICAgICAgIEF0dHJpYnV0ZS5yb3V0aW5nSFRUUFJlc3BvbnNlQWNjZXNzQ29udHJvbEFsbG93Q3JlZGVudGlhbHNIZWFkZXJWYWx1ZSxcbiAgICAgICAgKSxcbiAgICAgIHJvdXRpbmdIdHRwUmVzcG9uc2VBY2Nlc3NDb250cm9sQWxsb3dIZWFkZXJzSGVhZGVyVmFsdWU6XG4gICAgICAgIHRoaXMubGF6eVN0cmluZ0F0dHIoXG4gICAgICAgICAgQXR0cmlidXRlLnJvdXRpbmdIVFRQUmVzcG9uc2VBY2Nlc3NDb250cm9sQWxsb3dIZWFkZXJzSGVhZGVyVmFsdWUsXG4gICAgICAgICksXG4gICAgICByb3V0aW5nSHR0cFJlc3BvbnNlQWNjZXNzQ29udHJvbEFsbG93TWV0aG9kc0hlYWRlclZhbHVlOlxuICAgICAgICB0aGlzLmxhenlTdHJpbmdBdHRyKFxuICAgICAgICAgIEF0dHJpYnV0ZS5yb3V0aW5nSFRUUFJlc3BvbnNlQWNjZXNzQ29udHJvbEFsbG93TWV0aG9kc0hlYWRlclZhbHVlLFxuICAgICAgICApLFxuICAgICAgcm91dGluZ0h0dHBSZXNwb25zZUFjY2Vzc0NvbnRyb2xBbGxvd09yaWdpbkhlYWRlclZhbHVlOlxuICAgICAgICB0aGlzLmxhenlTdHJpbmdBdHRyKFxuICAgICAgICAgIEF0dHJpYnV0ZS5yb3V0aW5nSFRUUFJlc3BvbnNlQWNjZXNzQ29udHJvbEFsbG93T3JpZ2luSGVhZGVyVmFsdWUsXG4gICAgICAgICksXG4gICAgICByb3V0aW5nSHR0cFJlc3BvbnNlQWNjZXNzQ29udHJvbEV4cG9zZUhlYWRlcnNIZWFkZXJWYWx1ZTpcbiAgICAgICAgdGhpcy5sYXp5U3RyaW5nQXR0cihcbiAgICAgICAgICBBdHRyaWJ1dGUucm91dGluZ0hUVFBSZXNwb25zZUFjY2Vzc0NvbnRyb2xFeHBvc2VIZWFkZXJzSGVhZGVyVmFsdWUsXG4gICAgICAgICksXG4gICAgICByb3V0aW5nSHR0cFJlc3BvbnNlQWNjZXNzQ29udHJvbE1heEFnZUhlYWRlclZhbHVlOiB0aGlzLmxhenlTdHJpbmdBdHRyKFxuICAgICAgICBBdHRyaWJ1dGUucm91dGluZ0hUVFBSZXNwb25zZUFjY2Vzc0NvbnRyb2xNYXhBZ2VIZWFkZXJWYWx1ZSxcbiAgICAgICksXG4gICAgICByb3V0aW5nSHR0cFJlc3BvbnNlQ29udGVudFNlY3VyaXR5UG9saWN5SGVhZGVyVmFsdWU6IHRoaXMubGF6eVN0cmluZ0F0dHIoXG4gICAgICAgIEF0dHJpYnV0ZS5yb3V0aW5nSFRUUFJlc3BvbnNlQ29udGVudFNlY3VyaXR5UG9saWN5SGVhZGVyVmFsdWUsXG4gICAgICApLFxuICAgICAgcm91dGluZ0h0dHBSZXNwb25zZVNlcnZlckVuYWJsZWQ6IHRoaXMubGF6eUJvb2xBdHRyKFxuICAgICAgICBBdHRyaWJ1dGUucm91dGluZ0hUVFBSZXNwb25zZVNlcnZlckVuYWJsZWQsXG4gICAgICApLFxuICAgICAgcm91dGluZ0h0dHBSZXNwb25zZVN0cmljdFRyYW5zcG9ydFNlY3VyaXR5SGVhZGVyVmFsdWU6XG4gICAgICAgIHRoaXMubGF6eVN0cmluZ0F0dHIoXG4gICAgICAgICAgQXR0cmlidXRlLnJvdXRpbmdIVFRQUmVzcG9uc2VTdHJpY3RUcmFuc3BvcnRTZWN1cml0eUhlYWRlclZhbHVlLFxuICAgICAgICApLFxuICAgICAgcm91dGluZ0h0dHBSZXNwb25zZVhDb250ZW50VHlwZU9wdGlvbnNIZWFkZXJWYWx1ZTogdGhpcy5sYXp5U3RyaW5nQXR0cihcbiAgICAgICAgQXR0cmlidXRlLnJvdXRpbmdIVFRQUmVzcG9uc2VYQ29udGVudFR5cGVPcHRpb25zSGVhZGVyVmFsdWUsXG4gICAgICApLFxuICAgICAgcm91dGluZ0h0dHBSZXNwb25zZVhGcmFtZU9wdGlvbnNIZWFkZXJWYWx1ZTogdGhpcy5sYXp5U3RyaW5nQXR0cihcbiAgICAgICAgQXR0cmlidXRlLnJvdXRpbmdIVFRQUmVzcG9uc2VYRnJhbWVPcHRpb25zSGVhZGVyVmFsdWUsXG4gICAgICApLFxuICAgICAgdGNwSWRsZVRpbWVvdXRTZWNvbmRzOiB0aGlzLmxhenlOdW1iZXJBdHRyKFxuICAgICAgICBBdHRyaWJ1dGUudGNwSWRsZVRpbWVvdXRTZWNvbmRzLFxuICAgICAgKSxcbiAgICAgIC4uLmFkZGl0aW9uYWxQcm9wcyxcbiAgICAgIGRlZmF1bHRBY3Rpb246IExhenkuYW55VmFsdWUoe1xuICAgICAgICBwcm9kdWNlOiAoKTogdGZMaXN0ZW5lci5MYkxpc3RlbmVyRGVmYXVsdEFjdGlvbltdID0+IHtcbiAgICAgICAgICBjb25zdCByZW5kZXJlZCA9IHRoaXMuZGVmYXVsdEFjdGlvbj8ucmVuZGVyQWN0aW9ucygpID8/IFtdO1xuICAgICAgICAgIHJldHVybiByZW5kZXJlZC5tYXAodGZMaXN0ZW5lci5sYkxpc3RlbmVyRGVmYXVsdEFjdGlvblRvVGVycmFmb3JtKTtcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICAgLy8gbGlzdGVuZXJBdHRyaWJ1dGVzOiBMYXp5LmFueVZhbHVlKFxuICAgICAgLy8gICB7IHByb2R1Y2U6ICgpID0+IHJlbmRlckF0dHJpYnV0ZXModGhpcy5hdHRyaWJ1dGVzKSB9LFxuICAgICAgLy8gICB7IG9taXRFbXB0eUFycmF5OiB0cnVlIH0sXG4gICAgICAvLyApLFxuICAgIH0pO1xuXG4gICAgdGhpcy5saXN0ZW5lckFybiA9IHJlc291cmNlLmFybjtcbiAgICB0aGlzLm5vZGUuYWRkVmFsaWRhdGlvbih7IHZhbGlkYXRlOiAoKSA9PiB0aGlzLnZhbGlkYXRlTGlzdGVuZXIoKSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgYSBub24tc3RhbmRhcmQgYXR0cmlidXRlIG9uIHRoZSBsaXN0ZW5lclxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1wcm9wZXJ0aWVzLWVsYXN0aWNsb2FkYmFsYW5jaW5ndjItbGlzdGVuZXItbGlzdGVuZXJhdHRyaWJ1dGUuaHRtbFxuICAgKi9cbiAgcHVibGljIHNldEF0dHJpYnV0ZShrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuYXR0cmlidXRlc1trZXldID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGFuIGF0dHJpYnV0ZSBmcm9tIHRoZSBsaXN0ZW5lclxuICAgKi9cbiAgcHVibGljIHJlbW92ZUF0dHJpYnV0ZShrZXk6IHN0cmluZykge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKGtleSwgdW5kZWZpbmVkKTtcbiAgfVxuXG4gIHByaXZhdGUgbGF6eVN0cmluZ0F0dHIoa2V5OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gTGF6eS5zdHJpbmdWYWx1ZSh7XG4gICAgICBwcm9kdWNlOiAoKSA9PiB0aGlzLmF0dHJpYnV0ZXNba2V5XSxcbiAgICB9KTtcbiAgfVxuICBwcml2YXRlIGxhenlCb29sQXR0cihrZXk6IHN0cmluZykge1xuICAgIHJldHVybiBMYXp5LmFueVZhbHVlKHtcbiAgICAgIHByb2R1Y2U6ICgpID0+IGxvb2t1cEJvb2xBdHRyaWJ1dGUodGhpcy5hdHRyaWJ1dGVzLCBrZXkpLFxuICAgIH0pO1xuICB9XG4gIHByaXZhdGUgbGF6eU51bWJlckF0dHIoa2V5OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gTGF6eS5udW1iZXJWYWx1ZSh7XG4gICAgICBwcm9kdWNlOiAoKSA9PiBsb29rdXBOdW1iZXJBdHRyaWJ1dGUodGhpcy5hdHRyaWJ1dGVzLCBrZXkpLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHRoaXMgbGlzdGVuZXJcbiAgICovXG4gIHByb3RlY3RlZCB2YWxpZGF0ZUxpc3RlbmVyKCk6IHN0cmluZ1tdIHtcbiAgICBpZiAoIXRoaXMuZGVmYXVsdEFjdGlvbikge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgXCJMaXN0ZW5lciBuZWVkcyBhdCBsZWFzdCBvbmUgZGVmYXVsdCBhY3Rpb24gb3IgdGFyZ2V0IGdyb3VwIChjYWxsIGFkZFRhcmdldEdyb3VwcyBvciBhZGRBY3Rpb24pXCIsXG4gICAgICBdO1xuICAgIH1cbiAgICByZXR1cm4gW107XG4gIH1cblxuICAvKipcbiAgICogQ29uZmlndXJlIHRoZSBkZWZhdWx0IGFjdGlvblxuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByb3RlY3RlZCBfc2V0RGVmYXVsdEFjdGlvbihhY3Rpb246IElMaXN0ZW5lckFjdGlvbikge1xuICAgIC8vIEl0IG1pZ2h0IG1ha2Ugc2Vuc2UgdG8gJ3Rocm93JyBoZXJlLlxuICAgIC8vXG4gICAgLy8gSG93ZXZlciwgcHJvZ3JhbXMgbWF5IGFscmVhZHkgZXhpc3Qgb3V0IHRoZXJlIHdoaWNoIGNvbmZpZ3VyZWQgYW4gYWN0aW9uIHR3aWNlLFxuICAgIC8vIGluIHdoaWNoIGNhc2UgdGhlIHNlY29uZCBhY3Rpb24gYWNjaWRlbnRhbGx5IG92ZXJ3cml0ZSB0aGUgaW5pdGlhbCBhY3Rpb24sIGFuZCBpbiBzb21lXG4gICAgLy8gd2F5IGVuZGVkIHVwIHdpdGggYSBwcm9ncmFtIHRoYXQgZGlkIHdoYXQgdGhlIGF1dGhvciBpbnRlbmRlZC4gSWYgd2Ugd2VyZSB0byBhZGQgdGhyb3cgbm93LFxuICAgIC8vIHRoZSBwcmV2aW91c2x5IHdvcmtpbmcgcHJvZ3JhbSB3b3VsZCBiZSBicm9rZW4uXG4gICAgLy9cbiAgICAvLyBJbnN0ZWFkLCBzaWduYWwgdGhpcyB0aHJvdWdoIGEgd2FybmluZy5cbiAgICAvLyBAZGVwcmVjYXRlOiB1cG9uIHRoZSBuZXh0IG1ham9yIHZlcnNpb24gYnVtcCwgcmVwbGFjZSB0aGlzIHdpdGggYSBgdGhyb3dgXG4gICAgaWYgKHRoaXMuZGVmYXVsdEFjdGlvbikge1xuICAgICAgLy8gXCJAYXdzLWNkay9hd3MtZWxidjI6bGlzdGVuZXJFeGlzdGluZ0RlZmF1bHRBY3Rpb25SZXBsYWNlZFwiLFxuICAgICAgQW5ub3RhdGlvbnMub2YodGhpcykuYWRkV2FybmluZyhcbiAgICAgICAgXCJBIGRlZmF1bHQgQWN0aW9uIGFscmVhZHkgZXhpc3RlZCBvbiB0aGlzIExpc3RlbmVyIGFuZCB3YXMgcmVwbGFjZWQuIENvbmZpZ3VyZSBleGFjdGx5IG9uZSBkZWZhdWx0IEFjdGlvbi5cIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5kZWZhdWx0QWN0aW9uID0gYWN0aW9uO1xuICB9XG59XG4iXX0=
180
+ BaseListener[_a] = { fqn: "terraconstructs.aws.compute.BaseListener", version: "0.2.6" };
181
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1saXN0ZW5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hd3MvY29tcHV0ZS9sYi1zaGFyZWQvYmFzZS1saXN0ZW5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDJIQUEySDtBQUUzSCxzREFBK0Q7QUFDL0QsaUNBS2U7QUFRZixpQ0FPZ0I7QUFDaEIsdURBQXNFO0FBMkV0RTs7R0FFRztBQUNILE1BQXNCLFlBQ3BCLFNBQVEsZ0NBQWdCO0lBR3hCLE1BQU07SUFDTiwyRUFBMkU7SUFDM0Usb0JBQW9CO0lBQ3BCLGVBQWU7SUFDZixNQUFNO0lBQ04sMENBQTBDO0lBQzFDLHNCQUFzQjtJQUN0QixrREFBa0Q7SUFDbEQsTUFBTTtJQUNOLFNBQVM7SUFDVCxpRUFBaUU7SUFDakUsc0VBQXNFO0lBQ3RFLDRCQUE0QjtJQUM1QixXQUFXO0lBQ1gsMkRBQTJEO0lBQzNELFFBQVE7SUFDUix1QkFBdUI7SUFDdkIsMEZBQTBGO0lBQzFGLFNBQVM7SUFDVCxNQUFNO0lBRU4sa0RBQWtEO0lBQ2xELGdEQUFnRDtJQUNoRCxnRkFBZ0Y7SUFDaEYsTUFBTTtJQUVOLDZEQUE2RDtJQUM3RCx3Q0FBd0M7SUFDeEMsNEVBQTRFO0lBQzVFLGlCQUFpQjtJQUNqQiw0Q0FBNEM7SUFDNUMsMERBQTBEO0lBQzFELHNEQUFzRDtJQUN0RCxnRUFBZ0U7SUFDaEUsMENBQTBDO0lBQzFDLHNEQUFzRDtJQUN0RCx3REFBd0Q7SUFDeEQsc0JBQXNCO0lBQ3RCLG9FQUFvRTtJQUNwRSxzS0FBc0s7SUFDdEssNEJBQTRCO0lBQzVCLGlEQUFpRDtJQUNqRCx3REFBd0Q7SUFDeEQsZ0JBQWdCO0lBRWhCLGtCQUFrQjtJQUNsQixJQUFJO0lBRUo7O09BRUc7SUFDSCxJQUFXLGVBQWU7UUFDeEIsT0FBTztZQUNMLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztTQUM5QixDQUFDO0lBQ0osQ0FBQztJQUNELElBQVcsT0FBTztR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QkFDTCxnR0FBZ0c7YUFDakcsQ0FBQztRQUNKLENBQUM7UUFDRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7OztPQUlHO0lBQ08saUJBQWlCLENBQUMsTUFBdUI7UUFDakQsdUNBQXVDO1FBQ3ZDLEVBQUU7UUFDRixrRkFBa0Y7UUFDbEYseUZBQXlGO1FBQ3pGLDhGQUE4RjtRQUM5RixrREFBa0Q7UUFDbEQsRUFBRTtRQUNGLDBDQUEwQztRQUMxQyw0RUFBNEU7UUFDNUUsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDdkIsOERBQThEO1lBQzlELG1CQUFXLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FDN0IsMkdBQTJHLENBQzVHLENBQUM7UUFDSixDQUFDO1FBRUQsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUM7SUFDOUIsQ0FBQzs7QUE5T0gsb0NBK09DIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvdjIuMTc1LjEvcGFja2FnZXMvYXdzLWNkay1saWIvYXdzLWVsYXN0aWNsb2FkYmFsYW5jaW5ndjIvbGliL3NoYXJlZC9iYXNlLWxpc3RlbmVyLnRzXG5cbmltcG9ydCB7IGxiTGlzdGVuZXIgYXMgdGZMaXN0ZW5lciB9IGZyb20gXCJAY2RrdG4vcHJvdmlkZXItYXdzXCI7XG5pbXBvcnQge1xuICBBbm5vdGF0aW9ucyxcbiAgLy8gQ29udGV4dFByb3ZpZGVyLFxuICBMYXp5LFxuICAvLyBUb2tlbixcbn0gZnJvbSBcImNka3RuXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHtcbiAgTG9hZEJhbGFuY2VyVHlwZSxcbiAgTG9hZEJhbGFuY2VyTGlzdGVuZXJQcm90b2NvbCxcbn0gZnJvbSBcIi4vZ3JpZC1sb29rdXAtdHlwZXNcIjtcbmltcG9ydCB7IExiTGlzdGVuZXJDb25maWcgfSBmcm9tIFwiLi9sYi1saXN0ZW5lci1jb25maWcuZ2VuZXJhdGVkXCI7XG5pbXBvcnQgeyBJTGlzdGVuZXJBY3Rpb24gfSBmcm9tIFwiLi9saXN0ZW5lci1hY3Rpb25cIjtcbmltcG9ydCB7XG4gIEF0dHJpYnV0ZXMsXG4gIC8vIG1hcFRhZ01hcFRvQ3hzY2hlbWEsXG4gIC8vIHJlbmRlckF0dHJpYnV0ZXMsXG4gIExpc3RlbmVyQXR0cmlidXRlIGFzIEF0dHJpYnV0ZSxcbiAgbG9va3VwQm9vbEF0dHJpYnV0ZSxcbiAgbG9va3VwTnVtYmVyQXR0cmlidXRlLFxufSBmcm9tIFwiLi91dGlsXCI7XG5pbXBvcnQgeyBJQXdzQ29uc3RydWN0LCBBd3NDb25zdHJ1Y3RCYXNlIH0gZnJvbSBcIi4uLy4uL2F3cy1jb25zdHJ1Y3RcIjtcbi8qKlxuICogT3B0aW9ucyBmb3IgbGlzdGVuZXIgbG9va3VwXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZUxpc3RlbmVyTG9va3VwT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBGaWx0ZXIgbGlzdGVuZXJzIGJ5IGFzc29jaWF0ZWQgbG9hZCBiYWxhbmNlciBhcm5cbiAgICogQGRlZmF1bHQgLSBkb2VzIG5vdCBmaWx0ZXIgYnkgbG9hZCBiYWxhbmNlciBhcm5cbiAgICovXG4gIHJlYWRvbmx5IGxvYWRCYWxhbmNlckFybj86IHN0cmluZztcblxuICAvKipcbiAgICogRmlsdGVyIGxpc3RlbmVycyBieSBhc3NvY2lhdGVkIGxvYWQgYmFsYW5jZXIgdGFnc1xuICAgKiBAZGVmYXVsdCAtIGRvZXMgbm90IGZpbHRlciBieSBsb2FkIGJhbGFuY2VyIHRhZ3NcbiAgICovXG4gIHJlYWRvbmx5IGxvYWRCYWxhbmNlclRhZ3M/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBGaWx0ZXIgbGlzdGVuZXJzIGJ5IGxpc3RlbmVyIHBvcnRcbiAgICogQGRlZmF1bHQgLSBkb2VzIG5vdCBmaWx0ZXIgYnkgbGlzdGVuZXIgcG9ydFxuICAgKi9cbiAgcmVhZG9ubHkgbGlzdGVuZXJQb3J0PzogbnVtYmVyO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHF1ZXJ5aW5nIHRoZSBsb2FkIGJhbGFuY2VyIGxpc3RlbmVyIGNvbnRleHQgcHJvdmlkZXJcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgaW50ZXJmYWNlIExpc3RlbmVyUXVlcnlDb250ZXh0UHJvdmlkZXJPcHRpb25zIHtcbiAgLyoqXG4gICAqIFVzZXIncyBwcm92aWRlZCBvcHRpb25zXG4gICAqL1xuICByZWFkb25seSB1c2VyT3B0aW9uczogQmFzZUxpc3RlbmVyTG9va3VwT3B0aW9ucztcblxuICAvKipcbiAgICogVHlwZSBvZiBsb2FkIGJhbGFuY2VyIGV4cGVjdGVkXG4gICAqL1xuICByZWFkb25seSBsb2FkQmFsYW5jZXJUeXBlOiBMb2FkQmFsYW5jZXJUeXBlO1xuXG4gIC8qKlxuICAgKiBBUk4gb2YgdGhlIGxpc3RlbmVyIHRvIGxvb2sgdXBcbiAgICogQGRlZmF1bHQgLSBkb2VzIG5vdCBmaWx0ZXIgYnkgbGlzdGVuZXIgYXJuXG4gICAqL1xuICByZWFkb25seSBsaXN0ZW5lckFybj86IHN0cmluZztcblxuICAvKipcbiAgICogT3B0aW9uYWwgcHJvdG9jb2wgb2YgdGhlIGxpc3RlbmVyIHRvIGxvb2sgdXBcbiAgICovXG4gIHJlYWRvbmx5IGxpc3RlbmVyUHJvdG9jb2w/OiBMb2FkQmFsYW5jZXJMaXN0ZW5lclByb3RvY29sO1xufVxuXG4vKipcbiAqIE91dHB1dHMgd2hpY2ggbWF5IGJlIHJlZ2lzdGVyZWQgZm9yIG91dHB1dCB2aWEgdGhlIEdyaWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGlzdGVuZXJPdXRwdXRzIHtcbiAgLyoqXG4gICAqIEFSTiBvZiB0aGUgbGlzdGVuZXJcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgbGlzdGVuZXJBcm46IHN0cmluZztcbn1cblxuLyoqXG4gKiBCYXNlIGludGVyZmFjZSBmb3IgbGlzdGVuZXJzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUxpc3RlbmVyIGV4dGVuZHMgSUF3c0NvbnN0cnVjdCB7XG4gIC8qKiBTdHJvbmdseSB0eXBlZCBvdXRwdXRzICovXG4gIHJlYWRvbmx5IGxpc3RlbmVyT3V0cHV0czogTGlzdGVuZXJPdXRwdXRzO1xuICAvKipcbiAgICogQVJOIG9mIHRoZSBsaXN0ZW5lclxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBsaXN0ZW5lckFybjogc3RyaW5nO1xufVxuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIGxpc3RlbmVyc1xuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZUxpc3RlbmVyXG4gIGV4dGVuZHMgQXdzQ29uc3RydWN0QmFzZVxuICBpbXBsZW1lbnRzIElMaXN0ZW5lclxue1xuICAvLyAvKipcbiAgLy8gICogUXVlcmllcyB0aGUgbG9hZCBiYWxhbmNlciBsaXN0ZW5lciBjb250ZXh0IHByb3ZpZGVyIGZvciBsb2FkIGJhbGFuY2VyXG4gIC8vICAqIGxpc3RlbmVyIGluZm8uXG4gIC8vICAqIEBpbnRlcm5hbFxuICAvLyAgKi9cbiAgLy8gcHJvdGVjdGVkIHN0YXRpYyBfcXVlcnlDb250ZXh0UHJvdmlkZXIoXG4gIC8vICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgLy8gICBvcHRpb25zOiBMaXN0ZW5lclF1ZXJ5Q29udGV4dFByb3ZpZGVyT3B0aW9ucyxcbiAgLy8gKSB7XG4gIC8vICAgaWYgKFxuICAvLyAgICAgVG9rZW4uaXNVbnJlc29sdmVkKG9wdGlvbnMudXNlck9wdGlvbnMubG9hZEJhbGFuY2VyQXJuKSB8fFxuICAvLyAgICAgT2JqZWN0LnZhbHVlcyhvcHRpb25zLnVzZXJPcHRpb25zLmxvYWRCYWxhbmNlclRhZ3MgPz8ge30pLnNvbWUoXG4gIC8vICAgICAgIFRva2VuLmlzVW5yZXNvbHZlZCxcbiAgLy8gICAgICkgfHxcbiAgLy8gICAgIFRva2VuLmlzVW5yZXNvbHZlZChvcHRpb25zLnVzZXJPcHRpb25zLmxpc3RlbmVyUG9ydClcbiAgLy8gICApIHtcbiAgLy8gICAgIHRocm93IG5ldyBFcnJvcihcbiAgLy8gICAgICAgXCJBbGwgYXJndW1lbnRzIHRvIGxvb2sgdXAgYSBsb2FkIGJhbGFuY2VyIGxpc3RlbmVyIG11c3QgYmUgY29uY3JldGUgKG5vIFRva2VucylcIixcbiAgLy8gICAgICk7XG4gIC8vICAgfVxuXG4gIC8vICAgbGV0IGN4c2NoZW1hVGFnczogY3hzY2hlbWEuVGFnW10gfCB1bmRlZmluZWQ7XG4gIC8vICAgaWYgKG9wdGlvbnMudXNlck9wdGlvbnMubG9hZEJhbGFuY2VyVGFncykge1xuICAvLyAgICAgY3hzY2hlbWFUYWdzID0gbWFwVGFnTWFwVG9DeHNjaGVtYShvcHRpb25zLnVzZXJPcHRpb25zLmxvYWRCYWxhbmNlclRhZ3MpO1xuICAvLyAgIH1cblxuICAvLyAgIGNvbnN0IHByb3BzOiBjeGFwaS5Mb2FkQmFsYW5jZXJMaXN0ZW5lckNvbnRleHRSZXNwb25zZSA9XG4gIC8vICAgICBDb250ZXh0UHJvdmlkZXIuZ2V0VmFsdWUoc2NvcGUsIHtcbiAgLy8gICAgICAgcHJvdmlkZXI6IGN4c2NoZW1hLkNvbnRleHRQcm92aWRlci5MT0FEX0JBTEFOQ0VSX0xJU1RFTkVSX1BST1ZJREVSLFxuICAvLyAgICAgICBwcm9wczoge1xuICAvLyAgICAgICAgIGxpc3RlbmVyQXJuOiBvcHRpb25zLmxpc3RlbmVyQXJuLFxuICAvLyAgICAgICAgIGxpc3RlbmVyUG9ydDogb3B0aW9ucy51c2VyT3B0aW9ucy5saXN0ZW5lclBvcnQsXG4gIC8vICAgICAgICAgbGlzdGVuZXJQcm90b2NvbDogb3B0aW9ucy5saXN0ZW5lclByb3RvY29sLFxuICAvLyAgICAgICAgIGxvYWRCYWxhbmNlckFybjogb3B0aW9ucy51c2VyT3B0aW9ucy5sb2FkQmFsYW5jZXJBcm4sXG4gIC8vICAgICAgICAgbG9hZEJhbGFuY2VyVGFnczogY3hzY2hlbWFUYWdzLFxuICAvLyAgICAgICAgIGxvYWRCYWxhbmNlclR5cGU6IG9wdGlvbnMubG9hZEJhbGFuY2VyVHlwZSxcbiAgLy8gICAgICAgfSBhcyBjeHNjaGVtYS5Mb2FkQmFsYW5jZXJMaXN0ZW5lckNvbnRleHRRdWVyeSxcbiAgLy8gICAgICAgZHVtbXlWYWx1ZToge1xuICAvLyAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAY2RrbGFicy9uby1saXRlcmFsLXBhcnRpdGlvblxuICAvLyAgICAgICAgIGxpc3RlbmVyQXJuOiBgYXJuOmF3czplbGFzdGljbG9hZGJhbGFuY2luZzp1cy13ZXN0LTI6MTIzNDU2Nzg5MDEyOmxpc3RlbmVyLyR7b3B0aW9ucy5sb2FkQmFsYW5jZXJUeXBlfS9teS1sb2FkLWJhbGFuY2VyLzUwZGM2YzQ5NWMwYzkxODgvZjJmN2RjOGVmYzUyMmFiMmAsXG4gIC8vICAgICAgICAgbGlzdGVuZXJQb3J0OiA4MCxcbiAgLy8gICAgICAgICBzZWN1cml0eUdyb3VwSWRzOiBbXCJzZy0xMjM0NTY3ODkwMTJcIl0sXG4gIC8vICAgICAgIH0gYXMgY3hhcGkuTG9hZEJhbGFuY2VyTGlzdGVuZXJDb250ZXh0UmVzcG9uc2UsXG4gIC8vICAgICB9KS52YWx1ZTtcblxuICAvLyAgIHJldHVybiBwcm9wcztcbiAgLy8gfVxuXG4gIC8qKlxuICAgKiBTdHJvbmdseSB0eXBlZCBvdXRwdXRzXG4gICAqL1xuICBwdWJsaWMgZ2V0IGxpc3RlbmVyT3V0cHV0cygpOiBMaXN0ZW5lck91dHB1dHMge1xuICAgIHJldHVybiB7XG4gICAgICBsaXN0ZW5lckFybjogdGhpcy5saXN0ZW5lckFybixcbiAgICB9O1xuICB9XG4gIHB1YmxpYyBnZXQgb3V0cHV0cygpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5saXN0ZW5lck91dHB1dHM7XG4gIH1cblxuICAvKipcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGxpc3RlbmVyQXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEF0dHJpYnV0ZXMgc2V0IG9uIHRoaXMgbGlzdGVuZXJcbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgYXR0cmlidXRlczogQXR0cmlidXRlcyA9IHt9O1xuXG4gIHByaXZhdGUgZGVmYXVsdEFjdGlvbj86IElMaXN0ZW5lckFjdGlvbjtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBhZGRpdGlvbmFsUHJvcHM6IExiTGlzdGVuZXJDb25maWcpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgY29uc3QgcmVzb3VyY2UgPSBuZXcgdGZMaXN0ZW5lci5MYkxpc3RlbmVyKHRoaXMsIFwiUmVzb3VyY2VcIiwge1xuICAgICAgLy8gUmV2ZXJzZSBDRk4gTG9hZEJhbGFuY2VyQXR0cmlidXRlcyB0byBUZXJyYWZvcm0gUmVzb3VyY2UgcHJvcGVydGllc1xuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2hhc2hpY29ycC90ZXJyYWZvcm0tcHJvdmlkZXItYXdzL2Jsb2IvdjUuODguMC9pbnRlcm5hbC9zZXJ2aWNlL2VsYnYyL2xpc3RlbmVyLmdvI0w4ODBcbiAgICAgIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1wcm9wZXJ0aWVzLWVsYXN0aWNsb2FkYmFsYW5jaW5ndjItbGlzdGVuZXItbGlzdGVuZXJhdHRyaWJ1dGUuaHRtbFxuICAgICAgLy8gbm90aWNlOiBodHRwczovL2dpdGh1Yi5jb20vaGFzaGljb3JwL3RlcnJhZm9ybS1wcm92aWRlci1hd3MvaXNzdWVzLzQwOTg2XG4gICAgICByb3V0aW5nSHR0cFJlcXVlc3RYQW16bk10bHNDbGllbnRjZXJ0SGVhZGVyTmFtZTogdGhpcy5sYXp5U3RyaW5nQXR0cihcbiAgICAgICAgQXR0cmlidXRlLnJvdXRpbmdIVFRQUmVxdWVzdFhBbXpuTXRsc0NsaWVudGNlcnRIZWFkZXJOYW1lLFxuICAgICAgKSxcbiAgICAgIHJvdXRpbmdIdHRwUmVxdWVzdFhBbXpuTXRsc0NsaWVudGNlcnRJc3N1ZXJIZWFkZXJOYW1lOlxuICAgICAgICB0aGlzLmxhenlTdHJpbmdBdHRyKFxuICAgICAgICAgIEF0dHJpYnV0ZS5yb3V0aW5nSFRUUFJlcXVlc3RYQW16bk10bHNDbGllbnRjZXJ0SXNzdWVySGVhZGVyTmFtZSxcbiAgICAgICAgKSxcbiAgICAgIHJvdXRpbmdIdHRwUmVxdWVzdFhBbXpuTXRsc0NsaWVudGNlcnRMZWFmSGVhZGVyTmFtZTogdGhpcy5sYXp5U3RyaW5nQXR0cihcbiAgICAgICAgQXR0cmlidXRlLnJvdXRpbmdIVFRQUmVxdWVzdFhBbXpuTXRsc0NsaWVudGNlcnRMZWFmSGVhZGVyTmFtZSxcbiAgICAgICksXG4gICAgICByb3V0aW5nSHR0cFJlcXVlc3RYQW16bk10bHNDbGllbnRjZXJ0U2VyaWFsTnVtYmVySGVhZGVyTmFtZTpcbiAgICAgICAgdGhpcy5sYXp5U3RyaW5nQXR0cihcbiAgICAgICAgICBBdHRyaWJ1dGUucm91dGluZ0hUVFBSZXF1ZXN0WEFtem5NdGxzQ2xpZW50Y2VydFNlcmlhbE51bWJlckhlYWRlck5hbWUsXG4gICAgICAgICksXG4gICAgICByb3V0aW5nSHR0cFJlcXVlc3RYQW16bk10bHNDbGllbnRjZXJ0U3ViamVjdEhlYWRlck5hbWU6XG4gICAgICAgIHRoaXMubGF6eVN0cmluZ0F0dHIoXG4gICAgICAgICAgQXR0cmlidXRlLnJvdXRpbmdIVFRQUmVxdWVzdFhBbXpuTXRsc0NsaWVudGNlcnRTdWJqZWN0SGVhZGVyTmFtZSxcbiAgICAgICAgKSxcbiAgICAgIHJvdXRpbmdIdHRwUmVxdWVzdFhBbXpuTXRsc0NsaWVudGNlcnRWYWxpZGl0eUhlYWRlck5hbWU6XG4gICAgICAgIHRoaXMubGF6eVN0cmluZ0F0dHIoXG4gICAgICAgICAgQXR0cmlidXRlLnJvdXRpbmdIVFRQUmVxdWVzdFhBbXpuTXRsc0NsaWVudGNlcnRWYWxpZGl0eUhlYWRlck5hbWUsXG4gICAgICAgICksXG4gICAgICByb3V0aW5nSHR0cFJlcXVlc3RYQW16blRsc0NpcGhlclN1aXRlSGVhZGVyTmFtZTogdGhpcy5sYXp5U3RyaW5nQXR0cihcbiAgICAgICAgQXR0cmlidXRlLnJvdXRpbmdIVFRQUmVxdWVzdFhBbXpuVGxzQ2lwaGVyU3VpdGVIZWFkZXJOYW1lLFxuICAgICAgKSxcbiAgICAgIHJvdXRpbmdIdHRwUmVxdWVzdFhBbXpuVGxzVmVyc2lvbkhlYWRlck5hbWU6IHRoaXMubGF6eVN0cmluZ0F0dHIoXG4gICAgICAgIEF0dHJpYnV0ZS5yb3V0aW5nSFRUUFJlcXVlc3RYQW16blRsc1ZlcnNpb25IZWFkZXJOYW1lLFxuICAgICAgKSxcbiAgICAgIHJvdXRpbmdIdHRwUmVzcG9uc2VBY2Nlc3NDb250cm9sQWxsb3dDcmVkZW50aWFsc0hlYWRlclZhbHVlOlxuICAgICAgICB0aGlzLmxhenlTdHJpbmdBdHRyKFxuICAgICAgICAgIEF0dHJpYnV0ZS5yb3V0aW5nSFRUUFJlc3BvbnNlQWNjZXNzQ29udHJvbEFsbG93Q3JlZGVudGlhbHNIZWFkZXJWYWx1ZSxcbiAgICAgICAgKSxcbiAgICAgIHJvdXRpbmdIdHRwUmVzcG9uc2VBY2Nlc3NDb250cm9sQWxsb3dIZWFkZXJzSGVhZGVyVmFsdWU6XG4gICAgICAgIHRoaXMubGF6eVN0cmluZ0F0dHIoXG4gICAgICAgICAgQXR0cmlidXRlLnJvdXRpbmdIVFRQUmVzcG9uc2VBY2Nlc3NDb250cm9sQWxsb3dIZWFkZXJzSGVhZGVyVmFsdWUsXG4gICAgICAgICksXG4gICAgICByb3V0aW5nSHR0cFJlc3BvbnNlQWNjZXNzQ29udHJvbEFsbG93TWV0aG9kc0hlYWRlclZhbHVlOlxuICAgICAgICB0aGlzLmxhenlTdHJpbmdBdHRyKFxuICAgICAgICAgIEF0dHJpYnV0ZS5yb3V0aW5nSFRUUFJlc3BvbnNlQWNjZXNzQ29udHJvbEFsbG93TWV0aG9kc0hlYWRlclZhbHVlLFxuICAgICAgICApLFxuICAgICAgcm91dGluZ0h0dHBSZXNwb25zZUFjY2Vzc0NvbnRyb2xBbGxvd09yaWdpbkhlYWRlclZhbHVlOlxuICAgICAgICB0aGlzLmxhenlTdHJpbmdBdHRyKFxuICAgICAgICAgIEF0dHJpYnV0ZS5yb3V0aW5nSFRUUFJlc3BvbnNlQWNjZXNzQ29udHJvbEFsbG93T3JpZ2luSGVhZGVyVmFsdWUsXG4gICAgICAgICksXG4gICAgICByb3V0aW5nSHR0cFJlc3BvbnNlQWNjZXNzQ29udHJvbEV4cG9zZUhlYWRlcnNIZWFkZXJWYWx1ZTpcbiAgICAgICAgdGhpcy5sYXp5U3RyaW5nQXR0cihcbiAgICAgICAgICBBdHRyaWJ1dGUucm91dGluZ0hUVFBSZXNwb25zZUFjY2Vzc0NvbnRyb2xFeHBvc2VIZWFkZXJzSGVhZGVyVmFsdWUsXG4gICAgICAgICksXG4gICAgICByb3V0aW5nSHR0cFJlc3BvbnNlQWNjZXNzQ29udHJvbE1heEFnZUhlYWRlclZhbHVlOiB0aGlzLmxhenlTdHJpbmdBdHRyKFxuICAgICAgICBBdHRyaWJ1dGUucm91dGluZ0hUVFBSZXNwb25zZUFjY2Vzc0NvbnRyb2xNYXhBZ2VIZWFkZXJWYWx1ZSxcbiAgICAgICksXG4gICAgICByb3V0aW5nSHR0cFJlc3BvbnNlQ29udGVudFNlY3VyaXR5UG9saWN5SGVhZGVyVmFsdWU6IHRoaXMubGF6eVN0cmluZ0F0dHIoXG4gICAgICAgIEF0dHJpYnV0ZS5yb3V0aW5nSFRUUFJlc3BvbnNlQ29udGVudFNlY3VyaXR5UG9saWN5SGVhZGVyVmFsdWUsXG4gICAgICApLFxuICAgICAgcm91dGluZ0h0dHBSZXNwb25zZVNlcnZlckVuYWJsZWQ6IHRoaXMubGF6eUJvb2xBdHRyKFxuICAgICAgICBBdHRyaWJ1dGUucm91dGluZ0hUVFBSZXNwb25zZVNlcnZlckVuYWJsZWQsXG4gICAgICApLFxuICAgICAgcm91dGluZ0h0dHBSZXNwb25zZVN0cmljdFRyYW5zcG9ydFNlY3VyaXR5SGVhZGVyVmFsdWU6XG4gICAgICAgIHRoaXMubGF6eVN0cmluZ0F0dHIoXG4gICAgICAgICAgQXR0cmlidXRlLnJvdXRpbmdIVFRQUmVzcG9uc2VTdHJpY3RUcmFuc3BvcnRTZWN1cml0eUhlYWRlclZhbHVlLFxuICAgICAgICApLFxuICAgICAgcm91dGluZ0h0dHBSZXNwb25zZVhDb250ZW50VHlwZU9wdGlvbnNIZWFkZXJWYWx1ZTogdGhpcy5sYXp5U3RyaW5nQXR0cihcbiAgICAgICAgQXR0cmlidXRlLnJvdXRpbmdIVFRQUmVzcG9uc2VYQ29udGVudFR5cGVPcHRpb25zSGVhZGVyVmFsdWUsXG4gICAgICApLFxuICAgICAgcm91dGluZ0h0dHBSZXNwb25zZVhGcmFtZU9wdGlvbnNIZWFkZXJWYWx1ZTogdGhpcy5sYXp5U3RyaW5nQXR0cihcbiAgICAgICAgQXR0cmlidXRlLnJvdXRpbmdIVFRQUmVzcG9uc2VYRnJhbWVPcHRpb25zSGVhZGVyVmFsdWUsXG4gICAgICApLFxuICAgICAgdGNwSWRsZVRpbWVvdXRTZWNvbmRzOiB0aGlzLmxhenlOdW1iZXJBdHRyKFxuICAgICAgICBBdHRyaWJ1dGUudGNwSWRsZVRpbWVvdXRTZWNvbmRzLFxuICAgICAgKSxcbiAgICAgIC4uLmFkZGl0aW9uYWxQcm9wcyxcbiAgICAgIGRlZmF1bHRBY3Rpb246IExhenkuYW55VmFsdWUoe1xuICAgICAgICBwcm9kdWNlOiAoKTogdGZMaXN0ZW5lci5MYkxpc3RlbmVyRGVmYXVsdEFjdGlvbltdID0+IHtcbiAgICAgICAgICBjb25zdCByZW5kZXJlZCA9IHRoaXMuZGVmYXVsdEFjdGlvbj8ucmVuZGVyQWN0aW9ucygpID8/IFtdO1xuICAgICAgICAgIHJldHVybiByZW5kZXJlZC5tYXAodGZMaXN0ZW5lci5sYkxpc3RlbmVyRGVmYXVsdEFjdGlvblRvVGVycmFmb3JtKTtcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICAgLy8gbGlzdGVuZXJBdHRyaWJ1dGVzOiBMYXp5LmFueVZhbHVlKFxuICAgICAgLy8gICB7IHByb2R1Y2U6ICgpID0+IHJlbmRlckF0dHJpYnV0ZXModGhpcy5hdHRyaWJ1dGVzKSB9LFxuICAgICAgLy8gICB7IG9taXRFbXB0eUFycmF5OiB0cnVlIH0sXG4gICAgICAvLyApLFxuICAgIH0pO1xuXG4gICAgdGhpcy5saXN0ZW5lckFybiA9IHJlc291cmNlLmFybjtcbiAgICB0aGlzLm5vZGUuYWRkVmFsaWRhdGlvbih7IHZhbGlkYXRlOiAoKSA9PiB0aGlzLnZhbGlkYXRlTGlzdGVuZXIoKSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgYSBub24tc3RhbmRhcmQgYXR0cmlidXRlIG9uIHRoZSBsaXN0ZW5lclxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1wcm9wZXJ0aWVzLWVsYXN0aWNsb2FkYmFsYW5jaW5ndjItbGlzdGVuZXItbGlzdGVuZXJhdHRyaWJ1dGUuaHRtbFxuICAgKi9cbiAgcHVibGljIHNldEF0dHJpYnV0ZShrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuYXR0cmlidXRlc1trZXldID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGFuIGF0dHJpYnV0ZSBmcm9tIHRoZSBsaXN0ZW5lclxuICAgKi9cbiAgcHVibGljIHJlbW92ZUF0dHJpYnV0ZShrZXk6IHN0cmluZykge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKGtleSwgdW5kZWZpbmVkKTtcbiAgfVxuXG4gIHByaXZhdGUgbGF6eVN0cmluZ0F0dHIoa2V5OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gTGF6eS5zdHJpbmdWYWx1ZSh7XG4gICAgICBwcm9kdWNlOiAoKSA9PiB0aGlzLmF0dHJpYnV0ZXNba2V5XSxcbiAgICB9KTtcbiAgfVxuICBwcml2YXRlIGxhenlCb29sQXR0cihrZXk6IHN0cmluZykge1xuICAgIHJldHVybiBMYXp5LmFueVZhbHVlKHtcbiAgICAgIHByb2R1Y2U6ICgpID0+IGxvb2t1cEJvb2xBdHRyaWJ1dGUodGhpcy5hdHRyaWJ1dGVzLCBrZXkpLFxuICAgIH0pO1xuICB9XG4gIHByaXZhdGUgbGF6eU51bWJlckF0dHIoa2V5OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gTGF6eS5udW1iZXJWYWx1ZSh7XG4gICAgICBwcm9kdWNlOiAoKSA9PiBsb29rdXBOdW1iZXJBdHRyaWJ1dGUodGhpcy5hdHRyaWJ1dGVzLCBrZXkpLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHRoaXMgbGlzdGVuZXJcbiAgICovXG4gIHByb3RlY3RlZCB2YWxpZGF0ZUxpc3RlbmVyKCk6IHN0cmluZ1tdIHtcbiAgICBpZiAoIXRoaXMuZGVmYXVsdEFjdGlvbikge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgXCJMaXN0ZW5lciBuZWVkcyBhdCBsZWFzdCBvbmUgZGVmYXVsdCBhY3Rpb24gb3IgdGFyZ2V0IGdyb3VwIChjYWxsIGFkZFRhcmdldEdyb3VwcyBvciBhZGRBY3Rpb24pXCIsXG4gICAgICBdO1xuICAgIH1cbiAgICByZXR1cm4gW107XG4gIH1cblxuICAvKipcbiAgICogQ29uZmlndXJlIHRoZSBkZWZhdWx0IGFjdGlvblxuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByb3RlY3RlZCBfc2V0RGVmYXVsdEFjdGlvbihhY3Rpb246IElMaXN0ZW5lckFjdGlvbikge1xuICAgIC8vIEl0IG1pZ2h0IG1ha2Ugc2Vuc2UgdG8gJ3Rocm93JyBoZXJlLlxuICAgIC8vXG4gICAgLy8gSG93ZXZlciwgcHJvZ3JhbXMgbWF5IGFscmVhZHkgZXhpc3Qgb3V0IHRoZXJlIHdoaWNoIGNvbmZpZ3VyZWQgYW4gYWN0aW9uIHR3aWNlLFxuICAgIC8vIGluIHdoaWNoIGNhc2UgdGhlIHNlY29uZCBhY3Rpb24gYWNjaWRlbnRhbGx5IG92ZXJ3cml0ZSB0aGUgaW5pdGlhbCBhY3Rpb24sIGFuZCBpbiBzb21lXG4gICAgLy8gd2F5IGVuZGVkIHVwIHdpdGggYSBwcm9ncmFtIHRoYXQgZGlkIHdoYXQgdGhlIGF1dGhvciBpbnRlbmRlZC4gSWYgd2Ugd2VyZSB0byBhZGQgdGhyb3cgbm93LFxuICAgIC8vIHRoZSBwcmV2aW91c2x5IHdvcmtpbmcgcHJvZ3JhbSB3b3VsZCBiZSBicm9rZW4uXG4gICAgLy9cbiAgICAvLyBJbnN0ZWFkLCBzaWduYWwgdGhpcyB0aHJvdWdoIGEgd2FybmluZy5cbiAgICAvLyBAZGVwcmVjYXRlOiB1cG9uIHRoZSBuZXh0IG1ham9yIHZlcnNpb24gYnVtcCwgcmVwbGFjZSB0aGlzIHdpdGggYSBgdGhyb3dgXG4gICAgaWYgKHRoaXMuZGVmYXVsdEFjdGlvbikge1xuICAgICAgLy8gXCJAYXdzLWNkay9hd3MtZWxidjI6bGlzdGVuZXJFeGlzdGluZ0RlZmF1bHRBY3Rpb25SZXBsYWNlZFwiLFxuICAgICAgQW5ub3RhdGlvbnMub2YodGhpcykuYWRkV2FybmluZyhcbiAgICAgICAgXCJBIGRlZmF1bHQgQWN0aW9uIGFscmVhZHkgZXhpc3RlZCBvbiB0aGlzIExpc3RlbmVyIGFuZCB3YXMgcmVwbGFjZWQuIENvbmZpZ3VyZSBleGFjdGx5IG9uZSBkZWZhdWx0IEFjdGlvbi5cIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5kZWZhdWx0QWN0aW9uID0gYWN0aW9uO1xuICB9XG59XG4iXX0=
@@ -1,4 +1,4 @@
1
- import { lb as tfLoadBalancer } from "@cdktf/provider-aws";
1
+ import { lb as tfLoadBalancer } from "@cdktn/provider-aws";
2
2
  import { Construct } from "constructs";
3
3
  import * as ec2 from "../";
4
4
  import { LoadBalancerType } from "./grid-lookup-types";
@@ -207,7 +207,7 @@ export declare abstract class BaseLoadBalancer extends AwsConstructBase {
207
207
  */
208
208
  removeAttribute(key: string): void;
209
209
  protected lazyStringAttr(key: string): string;
210
- protected lazyBoolAttr(key: string): import("cdktf").IResolvable;
210
+ protected lazyBoolAttr(key: string): import("cdktn").IResolvable;
211
211
  protected lazyNumberAttr(key: string): number;
212
212
  protected resourcePolicyPrincipal(): iam.IPrincipal;
213
213
  protected validateLoadBalancer(): string[];