terraconstructs 0.0.25 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (422) hide show
  1. package/.jsii +83939 -55116
  2. package/.mise.toml +2 -2
  3. package/.nvmrc +1 -1
  4. package/LICENSE +202 -674
  5. package/go.mod +1 -1
  6. package/go.sum +2 -2
  7. package/lib/asset-manager.d.ts +23 -0
  8. package/lib/asset-manager.js +3 -0
  9. package/lib/asset-staging.d.ts +178 -0
  10. package/lib/asset-staging.js +589 -0
  11. package/lib/assets.d.ts +359 -0
  12. package/lib/assets.js +55 -0
  13. package/lib/aws/arn.js +16 -15
  14. package/lib/aws/aws-asset-manager.d.ts +91 -0
  15. package/lib/aws/aws-asset-manager.js +244 -0
  16. package/lib/aws/aws-construct.js +1 -1
  17. package/lib/aws/aws-stack.d.ts +37 -0
  18. package/lib/aws/aws-stack.js +30 -9
  19. package/lib/aws/aws-tags.js +2 -2
  20. package/lib/aws/cloudwatch/actions/appscaling.d.ts +15 -0
  21. package/lib/aws/cloudwatch/actions/appscaling.js +24 -0
  22. package/lib/aws/cloudwatch/actions/ec2.js +1 -1
  23. package/lib/aws/cloudwatch/actions/index.d.ts +3 -0
  24. package/lib/aws/cloudwatch/actions/index.js +4 -4
  25. package/lib/aws/cloudwatch/actions/lambda.js +1 -1
  26. package/lib/aws/cloudwatch/actions/sns.d.ts +14 -0
  27. package/lib/aws/cloudwatch/actions/sns.js +23 -0
  28. package/lib/aws/cloudwatch/actions/ssm.d.ts +72 -0
  29. package/lib/aws/cloudwatch/actions/ssm.js +104 -0
  30. package/lib/aws/cloudwatch/alarm-base.js +1 -1
  31. package/lib/aws/cloudwatch/alarm-rule.js +1 -1
  32. package/lib/aws/cloudwatch/alarm-status-widget.js +1 -1
  33. package/lib/aws/cloudwatch/alarm.js +1 -1
  34. package/lib/aws/cloudwatch/composite-alarm.js +1 -1
  35. package/lib/aws/cloudwatch/dashboard.js +1 -1
  36. package/lib/aws/cloudwatch/data-protection-policy.js +3 -3
  37. package/lib/aws/cloudwatch/graph.js +8 -8
  38. package/lib/aws/cloudwatch/layout.js +3 -3
  39. package/lib/aws/cloudwatch/log-destinations/kinesis.js +1 -1
  40. package/lib/aws/cloudwatch/log-destinations/lambda.js +1 -1
  41. package/lib/aws/cloudwatch/log-group.js +1 -1
  42. package/lib/aws/cloudwatch/log-query.js +1 -1
  43. package/lib/aws/cloudwatch/log-stream.js +1 -1
  44. package/lib/aws/cloudwatch/metric-filter.js +1 -1
  45. package/lib/aws/cloudwatch/metric.js +2 -2
  46. package/lib/aws/cloudwatch/pattern.js +3 -3
  47. package/lib/aws/cloudwatch/policy.js +1 -1
  48. package/lib/aws/cloudwatch/query-definition.js +2 -2
  49. package/lib/aws/cloudwatch/stats.js +1 -1
  50. package/lib/aws/cloudwatch/subscription-filter.js +1 -1
  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 +478 -0
  55. package/lib/aws/compute/access-log.js +649 -0
  56. package/lib/aws/compute/activity.js +1 -1
  57. package/lib/aws/compute/alb/application-listener-action.js +1 -1
  58. package/lib/aws/compute/alb/application-listener-certificate.js +1 -1
  59. package/lib/aws/compute/alb/application-listener-rule.js +1 -1
  60. package/lib/aws/compute/alb/application-listener.js +1 -1
  61. package/lib/aws/compute/alb/application-load-balancer.js +1 -1
  62. package/lib/aws/compute/alb/application-target-group.js +1 -1
  63. package/lib/aws/compute/alb/conditions.js +1 -1
  64. package/lib/aws/compute/alb/trust-store-revocation.js +1 -1
  65. package/lib/aws/compute/alb/trust-store.js +1 -1
  66. package/lib/aws/compute/api-definition.d.ts +106 -0
  67. package/lib/aws/compute/api-definition.js +200 -0
  68. package/lib/aws/compute/api-key.d.ts +184 -0
  69. package/lib/aws/compute/api-key.js +197 -0
  70. package/lib/aws/compute/apigateway-canned-metrics.generated.d.ts +169 -0
  71. package/lib/aws/compute/apigateway-canned-metrics.generated.js +63 -0
  72. package/lib/aws/compute/apigateway-util.d.ts +31 -0
  73. package/lib/aws/compute/apigateway-util.js +152 -0
  74. package/lib/aws/compute/architecture.js +1 -1
  75. package/lib/aws/compute/aspects/require-imdsv2-aspect.js +2 -2
  76. package/lib/aws/compute/authorizer.d.ts +35 -0
  77. package/lib/aws/compute/authorizer.js +28 -0
  78. package/lib/aws/compute/authorizers/identity-source.d.ts +37 -0
  79. package/lib/aws/compute/authorizers/identity-source.js +61 -0
  80. package/lib/aws/compute/authorizers/index.d.ts +2 -0
  81. package/lib/aws/compute/authorizers/index.js +20 -0
  82. package/lib/aws/compute/authorizers/lambda.d.ts +140 -0
  83. package/lib/aws/compute/authorizers/lambda.js +208 -0
  84. package/lib/aws/compute/base-path-mapping.d.ts +49 -0
  85. package/lib/aws/compute/base-path-mapping.js +52 -0
  86. package/lib/aws/compute/base-scalable-attribute.js +3 -3
  87. package/lib/aws/compute/bastion-host.js +1 -1
  88. package/lib/aws/compute/chain.js +1 -1
  89. package/lib/aws/compute/client-vpn-authorization-rule.js +1 -1
  90. package/lib/aws/compute/client-vpn-endpoint.js +2 -2
  91. package/lib/aws/compute/client-vpn-route.js +2 -2
  92. package/lib/aws/compute/code.d.ts +415 -0
  93. package/lib/aws/compute/code.js +424 -0
  94. package/lib/aws/compute/condition.js +1 -1
  95. package/lib/aws/compute/connections.js +1 -1
  96. package/lib/aws/compute/cors.d.ts +102 -0
  97. package/lib/aws/compute/cors.js +33 -0
  98. package/lib/aws/compute/deployment.d.ts +83 -0
  99. package/lib/aws/compute/deployment.js +158 -0
  100. package/lib/aws/compute/domain-name.d.ts +153 -0
  101. package/lib/aws/compute/domain-name.js +158 -0
  102. package/lib/aws/compute/event-invoke-config.d.ts +2 -2
  103. package/lib/aws/compute/event-invoke-config.js +4 -4
  104. package/lib/aws/compute/event-source-filter.js +2 -2
  105. package/lib/aws/compute/event-source-mapping.d.ts +2 -2
  106. package/lib/aws/compute/event-source-mapping.js +9 -7
  107. package/lib/aws/compute/event-sources/s3-onfailure-destination.js +1 -1
  108. package/lib/aws/compute/event-sources/s3.js +1 -1
  109. package/lib/aws/compute/event-sources/sqs-dlq.js +1 -1
  110. package/lib/aws/compute/event-sources/sqs.js +3 -2
  111. package/lib/aws/compute/fields.js +4 -4
  112. package/lib/aws/compute/function-alias.d.ts +2 -0
  113. package/lib/aws/compute/function-alias.js +14 -2
  114. package/lib/aws/compute/function-base.d.ts +23 -0
  115. package/lib/aws/compute/function-base.js +4 -4
  116. package/lib/aws/compute/function-destinations/event-bridge.js +1 -1
  117. package/lib/aws/compute/function-destinations/function.js +1 -1
  118. package/lib/aws/compute/function-destinations/sqs.js +1 -1
  119. package/lib/aws/compute/function-nodejs/bundling.d.ts +75 -0
  120. package/lib/aws/compute/function-nodejs/bundling.js +405 -0
  121. package/lib/aws/compute/function-nodejs/function.d.ts +99 -0
  122. package/lib/aws/compute/function-nodejs/function.js +175 -0
  123. package/lib/aws/compute/function-nodejs/index.d.ts +2 -0
  124. package/lib/aws/compute/function-nodejs/index.js +19 -0
  125. package/lib/aws/compute/function-nodejs/package-installation.d.ts +8 -0
  126. package/lib/aws/compute/function-nodejs/package-installation.js +36 -0
  127. package/lib/aws/compute/function-nodejs/package-manager.d.ts +33 -0
  128. package/lib/aws/compute/function-nodejs/package-manager.js +99 -0
  129. package/lib/aws/compute/function-nodejs/types.d.ts +410 -0
  130. package/lib/aws/compute/function-nodejs/types.js +81 -0
  131. package/lib/aws/compute/function-nodejs/util.d.ts +60 -0
  132. package/lib/aws/compute/function-nodejs/util.js +202 -0
  133. package/lib/aws/compute/function-url.d.ts +2 -2
  134. package/lib/aws/compute/function-url.js +4 -4
  135. package/lib/aws/compute/function.d.ts +43 -5
  136. package/lib/aws/compute/function.js +106 -18
  137. package/lib/aws/compute/gateway-response.d.ts +157 -0
  138. package/lib/aws/compute/gateway-response.js +156 -0
  139. package/lib/aws/compute/handler.d.ts +10 -0
  140. package/lib/aws/compute/handler.js +20 -0
  141. package/lib/aws/compute/index.d.ts +27 -0
  142. package/lib/aws/compute/index.js +29 -1
  143. package/lib/aws/compute/instance-types.js +1 -1
  144. package/lib/aws/compute/instance.js +1 -1
  145. package/lib/aws/compute/integration.d.ts +311 -0
  146. package/lib/aws/compute/integration.js +165 -0
  147. package/lib/aws/compute/integrations/aws.d.ts +72 -0
  148. package/lib/aws/compute/integrations/aws.js +55 -0
  149. package/lib/aws/compute/integrations/http.d.ts +37 -0
  150. package/lib/aws/compute/integrations/http.js +35 -0
  151. package/lib/aws/compute/integrations/index.d.ts +6 -0
  152. package/lib/aws/compute/integrations/index.js +24 -0
  153. package/lib/aws/compute/integrations/lambda.d.ts +40 -0
  154. package/lib/aws/compute/integrations/lambda.js +73 -0
  155. package/lib/aws/compute/integrations/mock.d.ts +16 -0
  156. package/lib/aws/compute/integrations/mock.js +30 -0
  157. package/lib/aws/compute/integrations/request-context.d.ts +144 -0
  158. package/lib/aws/compute/integrations/request-context.js +3 -0
  159. package/lib/aws/compute/integrations/stepfunctions.d.ts +102 -0
  160. package/lib/aws/compute/integrations/stepfunctions.js +268 -0
  161. package/lib/aws/compute/ip-addresses.js +2 -2
  162. package/lib/aws/compute/ipam.js +1 -1
  163. package/lib/aws/compute/json-schema.d.ts +75 -0
  164. package/lib/aws/compute/json-schema.js +23 -0
  165. package/lib/aws/compute/key-pair.js +1 -1
  166. package/lib/aws/compute/lambda-api.d.ts +46 -0
  167. package/lib/aws/compute/lambda-api.js +64 -0
  168. package/lib/aws/compute/launch-template.js +2 -2
  169. package/lib/aws/compute/lb-shared/base-listener.js +1 -1
  170. package/lib/aws/compute/lb-shared/base-load-balancer.js +2 -2
  171. package/lib/aws/compute/lb-shared/base-target-group.js +1 -1
  172. package/lib/aws/compute/lb-shared/listener-certificate.js +1 -1
  173. package/lib/aws/compute/lb-shared/load-balancer-targets.js +2 -2
  174. package/lib/aws/compute/lb-targets/alb-target.js +3 -3
  175. package/lib/aws/compute/lb-targets/instance-target.js +2 -2
  176. package/lib/aws/compute/lb-targets/ip-target.js +1 -1
  177. package/lib/aws/compute/lb-targets/lambda-target.js +1 -1
  178. package/lib/aws/compute/load-balancer.js +3 -3
  179. package/lib/aws/compute/machine-image/amazon-linux-2022.js +2 -2
  180. package/lib/aws/compute/machine-image/amazon-linux-2023.js +2 -2
  181. package/lib/aws/compute/machine-image/amazon-linux2.js +2 -2
  182. package/lib/aws/compute/machine-image/common.js +1 -1
  183. package/lib/aws/compute/machine-image/machine-image.js +8 -8
  184. package/lib/aws/compute/method.d.ts +219 -0
  185. package/lib/aws/compute/method.js +396 -0
  186. package/lib/aws/compute/methodresponse.d.ts +28 -0
  187. package/lib/aws/compute/methodresponse.js +3 -0
  188. package/lib/aws/compute/model.d.ts +143 -0
  189. package/lib/aws/compute/model.js +141 -0
  190. package/lib/aws/compute/nat.js +5 -5
  191. package/lib/aws/compute/network-acl-types.js +2 -2
  192. package/lib/aws/compute/network-acl.js +3 -3
  193. package/lib/aws/compute/nlb/network-listener-action.js +1 -1
  194. package/lib/aws/compute/nlb/network-listener.js +1 -1
  195. package/lib/aws/compute/nlb/network-load-balancer.js +1 -1
  196. package/lib/aws/compute/nlb/network-target-group.js +1 -1
  197. package/lib/aws/compute/peer.js +1 -1
  198. package/lib/aws/compute/placement-group.js +1 -1
  199. package/lib/aws/compute/port.js +1 -1
  200. package/lib/aws/compute/prefix-list.js +1 -1
  201. package/lib/aws/compute/requestvalidator.d.ts +50 -0
  202. package/lib/aws/compute/requestvalidator.js +59 -0
  203. package/lib/aws/compute/resource.d.ts +223 -0
  204. package/lib/aws/compute/resource.js +316 -0
  205. package/lib/aws/compute/restapi.d.ts +510 -0
  206. package/lib/aws/compute/restapi.js +626 -0
  207. package/lib/aws/compute/route.js +8 -8
  208. package/lib/aws/compute/runtime.d.ts +282 -0
  209. package/lib/aws/compute/runtime.js +337 -0
  210. package/lib/aws/compute/scalable-target.js +3 -3
  211. package/lib/aws/compute/schedule.js +3 -3
  212. package/lib/aws/compute/security-group.js +1 -1
  213. package/lib/aws/compute/stage.d.ts +350 -0
  214. package/lib/aws/compute/stage.js +304 -0
  215. package/lib/aws/compute/state-graph.js +1 -1
  216. package/lib/aws/compute/state-machine-fragment.js +1 -1
  217. package/lib/aws/compute/state-machine.js +4 -4
  218. package/lib/aws/compute/states/choice.js +1 -1
  219. package/lib/aws/compute/states/custom-state.js +1 -1
  220. package/lib/aws/compute/states/distributed-map/item-batcher.js +1 -1
  221. package/lib/aws/compute/states/distributed-map/item-reader.js +5 -5
  222. package/lib/aws/compute/states/distributed-map/result-writer.js +1 -1
  223. package/lib/aws/compute/states/distributed-map.js +1 -1
  224. package/lib/aws/compute/states/fail.js +1 -1
  225. package/lib/aws/compute/states/map-base.js +1 -1
  226. package/lib/aws/compute/states/map.js +1 -1
  227. package/lib/aws/compute/states/parallel.js +1 -1
  228. package/lib/aws/compute/states/pass.js +2 -2
  229. package/lib/aws/compute/states/state.js +1 -1
  230. package/lib/aws/compute/states/succeed.js +1 -1
  231. package/lib/aws/compute/states/task-base.js +2 -2
  232. package/lib/aws/compute/states/task.js +1 -1
  233. package/lib/aws/compute/states/wait.js +2 -2
  234. package/lib/aws/compute/step-scaling-action.js +3 -3
  235. package/lib/aws/compute/step-scaling-policy.js +1 -1
  236. package/lib/aws/compute/stepfunctions-api.d.ts +103 -0
  237. package/lib/aws/compute/stepfunctions-api.js +39 -0
  238. package/lib/aws/compute/subnet-v2.js +2 -2
  239. package/lib/aws/compute/subnet.js +1 -1
  240. package/lib/aws/compute/target-tracking-scaling-policy.js +3 -3
  241. package/lib/aws/compute/task-credentials.js +1 -1
  242. package/lib/aws/compute/task-input.js +1 -1
  243. package/lib/aws/compute/tasks/aws-sdk/call-aws-service.js +1 -1
  244. package/lib/aws/compute/tasks/eventbridge/put-events.js +1 -1
  245. package/lib/aws/compute/tasks/http/invoke.js +1 -1
  246. package/lib/aws/compute/tasks/lambda/invoke.js +1 -1
  247. package/lib/aws/compute/tasks/sqs/send-message.js +1 -1
  248. package/lib/aws/compute/tasks/stepfunctions/invoke-activity.js +1 -1
  249. package/lib/aws/compute/tasks/stepfunctions/start-execution.js +1 -1
  250. package/lib/aws/compute/types.js +1 -1
  251. package/lib/aws/compute/usage-plan.d.ts +194 -0
  252. package/lib/aws/compute/usage-plan.js +174 -0
  253. package/lib/aws/compute/user-data.js +3 -3
  254. package/lib/aws/compute/volume.js +2 -2
  255. package/lib/aws/compute/vpc-endpoint-service.js +1 -1
  256. package/lib/aws/compute/vpc-endpoint.js +6 -6
  257. package/lib/aws/compute/vpc-flow-logs.js +4 -4
  258. package/lib/aws/compute/vpc-link.d.ts +104 -0
  259. package/lib/aws/compute/vpc-link.js +137 -0
  260. package/lib/aws/compute/vpc-v2-base.js +1 -1
  261. package/lib/aws/compute/vpc-v2.js +2 -2
  262. package/lib/aws/compute/vpc.js +4 -4
  263. package/lib/aws/compute/vpn.js +3 -3
  264. package/lib/aws/edge/certificate.js +1 -1
  265. package/lib/aws/edge/distribution.js +3 -3
  266. package/lib/aws/edge/dns-alias-record-targets.js +3 -3
  267. package/lib/aws/edge/dns-record.js +13 -13
  268. package/lib/aws/edge/dns-zone.js +1 -1
  269. package/lib/aws/edge/function.js +2 -2
  270. package/lib/aws/edge/key-value-store.js +4 -4
  271. package/lib/aws/edge/origin.js +3 -3
  272. package/lib/aws/edge/response-headers-policy.js +1 -1
  273. package/lib/aws/encryption/alias.js +1 -1
  274. package/lib/aws/encryption/key.js +1 -1
  275. package/lib/aws/encryption/via-service-principal.js +1 -1
  276. package/lib/aws/iam/grant.js +2 -2
  277. package/lib/aws/iam/group.js +1 -1
  278. package/lib/aws/iam/instance-profile.js +1 -1
  279. package/lib/aws/iam/managed-policy.js +1 -1
  280. package/lib/aws/iam/oidc-provider.js +1 -1
  281. package/lib/aws/iam/policy-document.js +1 -1
  282. package/lib/aws/iam/policy-statement.js +1 -1
  283. package/lib/aws/iam/policy.js +1 -1
  284. package/lib/aws/iam/principals.js +20 -20
  285. package/lib/aws/iam/role.js +1 -1
  286. package/lib/aws/iam/saml-provider.js +2 -2
  287. package/lib/aws/iam/unknown-principal.js +1 -1
  288. package/lib/aws/iam/user.js +5 -5
  289. package/lib/aws/index.d.ts +1 -0
  290. package/lib/aws/index.js +4 -1
  291. package/lib/aws/network/simple-ipv4-vpc.js +1 -1
  292. package/lib/aws/network/subnet-group.js +3 -3
  293. package/lib/aws/network/subnet.js +4 -4
  294. package/lib/aws/notify/archive.js +1 -1
  295. package/lib/aws/notify/connection.js +3 -3
  296. package/lib/aws/notify/event-bus.js +3 -3
  297. package/lib/aws/notify/event-pattern.js +1 -1
  298. package/lib/aws/notify/input.js +2 -2
  299. package/lib/aws/notify/kinesis-stream.js +1 -1
  300. package/lib/aws/notify/notification-rule.d.ts +1 -1
  301. package/lib/aws/notify/notification-rule.js +5 -5
  302. package/lib/aws/notify/policy.js +1 -1
  303. package/lib/aws/notify/queue-policy.js +1 -1
  304. package/lib/aws/notify/queue.js +1 -1
  305. package/lib/aws/notify/resource-policy.js +1 -1
  306. package/lib/aws/notify/rule.js +1 -1
  307. package/lib/aws/notify/schedule.js +1 -1
  308. package/lib/aws/notify/subscription-filter.js +1 -1
  309. package/lib/aws/notify/subscription.js +4 -4
  310. package/lib/aws/notify/subscriptions/email.js +1 -1
  311. package/lib/aws/notify/subscriptions/lambda.js +1 -1
  312. package/lib/aws/notify/subscriptions/sms.js +1 -1
  313. package/lib/aws/notify/subscriptions/sqs.js +1 -1
  314. package/lib/aws/notify/subscriptions/url.js +1 -1
  315. package/lib/aws/notify/targets/event-bus.js +1 -1
  316. package/lib/aws/notify/targets/function.js +1 -1
  317. package/lib/aws/notify/targets/log-group.js +2 -2
  318. package/lib/aws/notify/targets/sqs.js +1 -1
  319. package/lib/aws/notify/targets/state-machine.js +1 -1
  320. package/lib/aws/notify/topic-base.js +1 -1
  321. package/lib/aws/notify/topic.js +6 -5
  322. package/lib/aws/partition.d.ts +21 -0
  323. package/lib/aws/partition.js +42 -0
  324. package/lib/aws/storage/assets/image-asset.d.ts +379 -0
  325. package/lib/aws/storage/assets/image-asset.js +247 -0
  326. package/lib/aws/storage/assets/index.d.ts +2 -0
  327. package/lib/aws/storage/assets/index.js +21 -0
  328. package/lib/aws/storage/assets/s3.d.ts +125 -0
  329. package/lib/aws/storage/assets/s3.js +80 -0
  330. package/lib/aws/storage/auth-token.d.ts +25 -0
  331. package/lib/aws/storage/auth-token.js +54 -0
  332. package/lib/aws/storage/billing.js +1 -1
  333. package/lib/aws/storage/bucket-notifications.js +1 -1
  334. package/lib/aws/storage/bucket-policy.js +1 -1
  335. package/lib/aws/storage/bucket-source.d.ts +1 -1
  336. package/lib/aws/storage/bucket-source.js +4 -4
  337. package/lib/aws/storage/bucket.d.ts +14 -6
  338. package/lib/aws/storage/bucket.js +48 -40
  339. package/lib/aws/storage/capacity.js +1 -1
  340. package/lib/aws/storage/ecr-lifecycle.d.ts +88 -0
  341. package/lib/aws/storage/ecr-lifecycle.js +23 -0
  342. package/lib/aws/storage/ecr-repository.d.ts +446 -0
  343. package/lib/aws/storage/ecr-repository.js +685 -0
  344. package/lib/aws/storage/encryption.js +1 -1
  345. package/lib/aws/storage/index.d.ts +5 -0
  346. package/lib/aws/storage/index.js +10 -3
  347. package/lib/aws/storage/location.d.ts +17 -0
  348. package/lib/aws/storage/location.js +4 -0
  349. package/lib/aws/storage/notification-targets/function.js +1 -1
  350. package/lib/aws/storage/notification-targets/queue.js +1 -1
  351. package/lib/aws/storage/origin-access-identity.js +1 -1
  352. package/lib/aws/storage/parameter.js +2 -2
  353. package/lib/aws/storage/table.js +3 -3
  354. package/lib/aws/storage/util.d.ts +8 -20
  355. package/lib/aws/storage/util.js +56 -34
  356. package/lib/aws/util.d.ts +1 -0
  357. package/lib/aws/util.js +6 -1
  358. package/lib/bundling.d.ts +434 -0
  359. package/lib/bundling.js +368 -0
  360. package/lib/construct-base.js +2 -2
  361. package/lib/duration.js +1 -1
  362. package/lib/expiration.js +1 -1
  363. package/lib/fs/copy.d.ts +2 -0
  364. package/lib/fs/copy.js +57 -0
  365. package/lib/fs/fingerprint.d.ts +21 -0
  366. package/lib/fs/fingerprint.js +165 -0
  367. package/lib/fs/ignore.d.ts +107 -0
  368. package/lib/fs/ignore.js +190 -0
  369. package/lib/fs/index.d.ts +47 -0
  370. package/lib/fs/index.js +88 -0
  371. package/lib/fs/options.d.ts +110 -0
  372. package/lib/fs/options.js +60 -0
  373. package/lib/fs/utils.d.ts +11 -0
  374. package/lib/fs/utils.js +34 -0
  375. package/lib/index.d.ts +5 -0
  376. package/lib/index.js +7 -1
  377. package/lib/private/asset-staging.d.ts +83 -0
  378. package/lib/private/asset-staging.js +205 -0
  379. package/lib/private/cache.d.ts +17 -0
  380. package/lib/private/cache.js +35 -0
  381. package/lib/private/jsii-deprecated.d.ts +2 -0
  382. package/lib/private/jsii-deprecated.js +19 -0
  383. package/lib/private/unique-resource-name.js +3 -2
  384. package/lib/size.js +1 -1
  385. package/lib/stack-base.js +1 -1
  386. package/lib/terra-func.js +2 -2
  387. package/lib/time-zone.js +1 -1
  388. package/node_modules/@balena/dockerignore/CHANGELOG.md +31 -0
  389. package/node_modules/@balena/dockerignore/LICENSE.md +206 -0
  390. package/node_modules/@balena/dockerignore/README.md +261 -0
  391. package/node_modules/@balena/dockerignore/ignore.js +363 -0
  392. package/node_modules/@balena/dockerignore/index.d.ts +45 -0
  393. package/node_modules/@balena/dockerignore/package.json +49 -0
  394. package/node_modules/balanced-match/.github/FUNDING.yml +2 -0
  395. package/node_modules/balanced-match/LICENSE.md +21 -0
  396. package/node_modules/balanced-match/README.md +97 -0
  397. package/node_modules/balanced-match/index.js +62 -0
  398. package/node_modules/balanced-match/package.json +48 -0
  399. package/node_modules/concat-map/.travis.yml +4 -0
  400. package/node_modules/concat-map/LICENSE +18 -0
  401. package/node_modules/concat-map/README.markdown +62 -0
  402. package/node_modules/concat-map/example/map.js +6 -0
  403. package/node_modules/concat-map/index.js +13 -0
  404. package/node_modules/concat-map/package.json +43 -0
  405. package/node_modules/concat-map/test/map.js +39 -0
  406. package/node_modules/ignore/LICENSE-MIT +21 -0
  407. package/node_modules/ignore/README.md +412 -0
  408. package/node_modules/ignore/index.d.ts +61 -0
  409. package/node_modules/ignore/index.js +636 -0
  410. package/node_modules/ignore/legacy.js +559 -0
  411. package/node_modules/ignore/package.json +74 -0
  412. package/node_modules/minimatch/LICENSE +15 -0
  413. package/node_modules/minimatch/README.md +230 -0
  414. package/node_modules/minimatch/minimatch.js +947 -0
  415. package/node_modules/minimatch/node_modules/brace-expansion/LICENSE +21 -0
  416. package/node_modules/minimatch/node_modules/brace-expansion/README.md +129 -0
  417. package/node_modules/minimatch/node_modules/brace-expansion/index.js +201 -0
  418. package/node_modules/minimatch/node_modules/brace-expansion/package.json +47 -0
  419. package/node_modules/minimatch/package.json +33 -0
  420. package/package.json +14 -5
  421. package/lib/aws/compute/function-nodejs.d.ts +0 -55
  422. package/lib/aws/compute/function-nodejs.js +0 -70
@@ -0,0 +1,396 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.AuthorizationType = exports.Method = void 0;
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ // https://github.com/aws/aws-cdk/blob/v2.186.0/packages/aws-cdk-lib/aws-apigateway/lib/method.ts
7
+ const provider_aws_1 = require("@cdktf/provider-aws");
8
+ const cdktf_1 = require("cdktf");
9
+ const apigateway_canned_metrics_generated_1 = require("./apigateway-canned-metrics.generated");
10
+ const apigateway_util_1 = require("./apigateway-util");
11
+ const authorizer_1 = require("./authorizer");
12
+ const mock_1 = require("./integrations/mock");
13
+ const restapi_1 = require("./restapi");
14
+ // import { Fn } from "../../terra-func";
15
+ const arn_1 = require("../arn");
16
+ const aws_construct_1 = require("../aws-construct");
17
+ const aws_stack_1 = require("../aws-stack");
18
+ const cloudwatch = require("../cloudwatch");
19
+ const iam = require("../iam");
20
+ class Method extends aws_construct_1.AwsConstructBase {
21
+ get outputs() {
22
+ return {
23
+ methodId: this.methodId,
24
+ httpMethod: this.httpMethod,
25
+ methodArn: this.methodArn,
26
+ };
27
+ }
28
+ constructor(scope, id, props) {
29
+ super(scope, id, props);
30
+ this._methodResponses = [];
31
+ this.resource = props.resource;
32
+ this.api = props.resource.api;
33
+ this.httpMethod = props.httpMethod.toUpperCase();
34
+ (0, apigateway_util_1.validateHttpMethod)(this.httpMethod);
35
+ const options = props.options || {};
36
+ const defaultMethodOptions = props.resource.defaultMethodOptions || {};
37
+ const authorizer = options.authorizationType === AuthorizationType.NONE &&
38
+ options.authorizer == undefined
39
+ ? undefined
40
+ : options.authorizer || defaultMethodOptions.authorizer;
41
+ const authorizerId = authorizer?.authorizerId
42
+ ? authorizer.authorizerId
43
+ : undefined;
44
+ /**
45
+ * Get and validate authorization type from the values set by API resource and method.
46
+ *
47
+ * REST API Resource
48
+ * └── defaultMethodOptions: Method options to use as a default for all methods created within this API unless custom options are specified.
49
+ * ├── authorizationType: Specifies the default authorization type unless custom options are specified, recommended to not be specified.
50
+ * └── authorizer: Specifies the default authorizer for all methods created within this API unless custom options are specified.
51
+ * └── authorizerType: The default authorization type of this authorizer.
52
+ *
53
+ * REST API Method
54
+ * └── options: Method options.
55
+ * ├── authorizationType: Specifies the authorization type, recommended to not be specified.
56
+ * └── authorizer: Specifies an authorizer to use for this method.
57
+ * └── authorizerType: The authorization type of this authorizer.
58
+ *
59
+ * Authorization type is first set to "authorizer.authorizerType", falling back to method's "authorizationType",
60
+ * falling back to API resource's default "authorizationType", and lastly "Authorizer.NONE".
61
+ *
62
+ * Note that "authorizer.authorizerType" should match method or resource's "authorizationType" if exists.
63
+ */
64
+ const authorizationType = this.getMethodAuthorizationType(options, defaultMethodOptions, authorizer);
65
+ // AuthorizationScope should only be applied to COGNITO_USER_POOLS AuthorizationType.
66
+ const defaultScopes = options.authorizationScopes ?? defaultMethodOptions.authorizationScopes;
67
+ const authorizationScopes = authorizationType === AuthorizationType.COGNITO
68
+ ? defaultScopes
69
+ : undefined;
70
+ if (authorizationType !== AuthorizationType.COGNITO && defaultScopes) {
71
+ // '@aws-cdk/aws-apigateway:invalidAuthScope'
72
+ cdktf_1.Annotations.of(this).addWarning("'AuthorizationScopes' can only be set when 'AuthorizationType' sets 'COGNITO_USER_POOLS'. Default to ignore the values set in 'AuthorizationScopes'.");
73
+ }
74
+ if (authorizer_1.Authorizer.isAuthorizer(authorizer)) {
75
+ authorizer._attachToApi(this.api);
76
+ }
77
+ for (const mr of options.methodResponses ??
78
+ defaultMethodOptions.methodResponses ??
79
+ []) {
80
+ this.addMethodResponse(mr);
81
+ }
82
+ const requestValidatorIdValue = this.resolveRequestValidatorId(options);
83
+ const integration = props.integration ??
84
+ this.resource.defaultIntegration ??
85
+ new mock_1.MockIntegration();
86
+ this.bindResult = integration.bind(this);
87
+ const methodProps = {
88
+ restApiId: this.api.restApiId,
89
+ resourceId: props.resource.resourceId,
90
+ httpMethod: this.httpMethod,
91
+ authorization: authorizationType,
92
+ authorizerId,
93
+ apiKeyRequired: options.apiKeyRequired ?? defaultMethodOptions.apiKeyRequired,
94
+ operationName: options.operationName || defaultMethodOptions.operationName,
95
+ requestParameters: options.requestParameters || defaultMethodOptions.requestParameters,
96
+ requestModels: this.renderRequestModels(options.requestModels || defaultMethodOptions.requestModels),
97
+ requestValidatorId: requestValidatorIdValue,
98
+ authorizationScopes: authorizationScopes,
99
+ };
100
+ this.methodResource = new provider_aws_1.apiGatewayMethod.ApiGatewayMethod(this, "Resource", methodProps);
101
+ this.methodId = this.methodResource.id;
102
+ if (restapi_1.RestApiBase._isRestApiBase(this.api)) {
103
+ this.api._attachMethod(this);
104
+ }
105
+ const deployment = props.resource.api.latestDeployment;
106
+ if (deployment) {
107
+ deployment.node.addDependency(this.methodResource);
108
+ // Fn.sha1(Fn.jsonencode()) causes nested Tokens and Resolver errors?
109
+ deployment.addToTriggers({
110
+ method: {
111
+ ...methodProps,
112
+ integrationToken: this.bindResult?.deploymentToken,
113
+ },
114
+ });
115
+ // addToLogicalId is CDK specific removalPolicy.RETAIN functionality
116
+ // deployment.addToLogicalId({
117
+ // method: {
118
+ // ...methodProps,
119
+ // integrationToken: bindResult?.deploymentToken,
120
+ // },
121
+ // });
122
+ }
123
+ }
124
+ /**
125
+ * The RestApi associated with this Method
126
+ * @deprecated - Throws an error if this Resource is not associated with an instance of `RestApi`. Use `api` instead.
127
+ */
128
+ get restApi() {
129
+ if (!(this.api instanceof restapi_1.RestApi)) {
130
+ throw new Error("not available on Resource not connected to an instance of RestApi");
131
+ }
132
+ return this.api;
133
+ }
134
+ /**
135
+ * Returns an execute-api ARN for this method:
136
+ *
137
+ * arn:aws:execute-api:{region}:{account}:{restApiId}/{stage}/{method}/{path}
138
+ *
139
+ * NOTE: {stage} will refer to the `restApi.deploymentStage`, which will
140
+ * automatically set if auto-deploy is enabled, or can be explicitly assigned.
141
+ * When not configured, {stage} will be set to '*', as a shorthand for 'all stages'.
142
+ *
143
+ * @attribute
144
+ */
145
+ get methodArn() {
146
+ const stage = this.api.deploymentStage?.stageName;
147
+ return this.api.arnForExecuteApi(this.httpMethod, pathForArn(this.resource.path), stage);
148
+ }
149
+ /**
150
+ * Returns an execute-api ARN for this method's "test-invoke-stage" stage.
151
+ * This stage is used by the AWS Console UI when testing the method.
152
+ */
153
+ get testMethodArn() {
154
+ return this.api.arnForExecuteApi(this.httpMethod, pathForArn(this.resource.path), "test-invoke-stage");
155
+ }
156
+ /**
157
+ * Add a method response to this method
158
+ *
159
+ * If a method response for the same status code already exists, the `responseModels`
160
+ * and `responseParameters` maps will be merged.
161
+ */
162
+ addMethodResponse(methodResponse) {
163
+ // https://github.com/aws/aws-cdk/blob/v2.186.0/packages/aws-cdk-lib/aws-apigateway/lib/method.ts#L316
164
+ // + fix from https://github.com/aws/aws-cdk/pull/26718/files
165
+ const i = this._methodResponses.findIndex((mr) => mr.statusCode === methodResponse.statusCode);
166
+ if (i >= 0) {
167
+ // Need to do a splice because MethodResponses are immutable
168
+ const existing = this._methodResponses[i];
169
+ this._methodResponses.splice(i, 1, {
170
+ statusCode: methodResponse.statusCode,
171
+ responseModels: mergeDicts(existing.responseModels, methodResponse.responseModels),
172
+ responseParameters: mergeDicts(existing.responseParameters, methodResponse.responseParameters),
173
+ });
174
+ }
175
+ else {
176
+ this._methodResponses.push(methodResponse);
177
+ }
178
+ }
179
+ getMethodAuthorizationType(options, defaultMethodOptions, authorizer) {
180
+ const authorizerAuthType = authorizer?.authorizationType;
181
+ const optionsAuthType = options.authorizationType || defaultMethodOptions.authorizationType;
182
+ const finalAuthType = authorizerAuthType || optionsAuthType || AuthorizationType.NONE;
183
+ if (authorizerAuthType &&
184
+ optionsAuthType &&
185
+ authorizerAuthType !== optionsAuthType) {
186
+ throw new Error(`${this.resource}/${this.httpMethod} - Authorization type is set to ${optionsAuthType} ` +
187
+ `which is different from what is required by the authorizer [${authorizerAuthType}]`);
188
+ }
189
+ return finalAuthType;
190
+ }
191
+ renderRequestModels(requestModels) {
192
+ if (!requestModels) {
193
+ return undefined;
194
+ }
195
+ const models = {};
196
+ for (const contentType in requestModels) {
197
+ if (requestModels.hasOwnProperty(contentType)) {
198
+ models[contentType] = requestModels[contentType].modelId;
199
+ }
200
+ }
201
+ return models;
202
+ }
203
+ resolveRequestValidatorId(options) {
204
+ if (options.requestValidator && options.requestValidatorOptions) {
205
+ throw new Error("Only one of 'requestValidator' or 'requestValidatorOptions' must be specified.");
206
+ }
207
+ if (options.requestValidatorOptions) {
208
+ // Assuming APIGATEWAY_REQUEST_VALIDATOR_UNIQUE_ID is effectively true for TerraConstructs
209
+ const id = aws_stack_1.AwsStack.ofAwsConstruct(this).uniqueResourceName(new cdktf_1.TerraformElement(this, "Validator"), {
210
+ maxLength: 64,
211
+ allowedSpecialCharacters: "-_",
212
+ });
213
+ const validator = this.api.addRequestValidator(id, options.requestValidatorOptions);
214
+ return validator.requestValidatorId;
215
+ }
216
+ return options.requestValidator?.requestValidatorId;
217
+ }
218
+ metric(metricName, stage, props) {
219
+ return new cloudwatch.Metric({
220
+ namespace: "AWS/ApiGateway",
221
+ metricName,
222
+ dimensionsMap: {
223
+ ApiName: this.api.restApiName,
224
+ Method: this.httpMethod,
225
+ Resource: this.resource.path,
226
+ Stage: stage.stageName,
227
+ },
228
+ ...props,
229
+ }).attachTo(this);
230
+ }
231
+ metricClientError(stage, props) {
232
+ return this.cannedMetric(apigateway_canned_metrics_generated_1.ApiGatewayMetrics._4XxErrorSum, stage, props);
233
+ }
234
+ metricServerError(stage, props) {
235
+ return this.cannedMetric(apigateway_canned_metrics_generated_1.ApiGatewayMetrics._5XxErrorSum, stage, props);
236
+ }
237
+ metricCacheHitCount(stage, props) {
238
+ return this.cannedMetric(apigateway_canned_metrics_generated_1.ApiGatewayMetrics.cacheHitCountSum, stage, props);
239
+ }
240
+ metricCacheMissCount(stage, props) {
241
+ return this.cannedMetric(apigateway_canned_metrics_generated_1.ApiGatewayMetrics.cacheMissCountSum, stage, props);
242
+ }
243
+ metricCount(stage, props) {
244
+ return this.cannedMetric(apigateway_canned_metrics_generated_1.ApiGatewayMetrics.countSum, stage, {
245
+ statistic: "SampleCount",
246
+ ...props,
247
+ });
248
+ }
249
+ metricIntegrationLatency(stage, props) {
250
+ return this.cannedMetric(apigateway_canned_metrics_generated_1.ApiGatewayMetrics.integrationLatencyAverage, stage, props);
251
+ }
252
+ metricLatency(stage, props) {
253
+ return this.cannedMetric(apigateway_canned_metrics_generated_1.ApiGatewayMetrics.latencyAverage, stage, props);
254
+ }
255
+ grantExecute(grantee) {
256
+ return iam.Grant.addToPrincipal({
257
+ grantee,
258
+ actions: ["execute-api:Invoke"],
259
+ resourceArns: [this.methodArn],
260
+ });
261
+ }
262
+ cannedMetric(fn, stage, props) {
263
+ return new cloudwatch.Metric({
264
+ ...fn({
265
+ ApiName: this.api.restApiName,
266
+ Method: this.httpMethod,
267
+ Resource: this.resource.path,
268
+ Stage: stage.stageName,
269
+ }),
270
+ ...props,
271
+ }).attachTo(this);
272
+ }
273
+ /**
274
+ * Adds resource to the terraform JSON output.
275
+ *
276
+ * called by TerraformStack.prepareStack()
277
+ */
278
+ toTerraform() {
279
+ if (this._methodResponses.length === 0 && !this.bindResult) {
280
+ return {};
281
+ }
282
+ // NOTE: The TerraformDependendableAspect will propgate construct tree dependencies
283
+ const methodResponses = {};
284
+ for (let i = 0; i < this._methodResponses.length; i++) {
285
+ const mrProps = this._methodResponses[i];
286
+ // unique id by status code
287
+ const id = `MethodResponse${mrProps.statusCode}`;
288
+ // no re-create if already generated
289
+ const methodResponse = this.node.tryFindChild(id);
290
+ if (methodResponse) {
291
+ methodResponses[mrProps.statusCode] =
292
+ methodResponse;
293
+ continue;
294
+ }
295
+ // generate new ApiGatewayMethodResponse
296
+ methodResponses[mrProps.statusCode] =
297
+ new provider_aws_1.apiGatewayMethodResponse.ApiGatewayMethodResponse(this, id, {
298
+ restApiId: this.api.restApiId,
299
+ resourceId: this.resource.resourceId,
300
+ httpMethod: this.methodResource.httpMethod,
301
+ statusCode: mrProps.statusCode,
302
+ responseParameters: mrProps.responseParameters,
303
+ responseModels: this.renderResponseModels(mrProps.responseModels),
304
+ });
305
+ }
306
+ // add integration resources
307
+ const integrationId = "Integration";
308
+ if (this.bindResult && !this.node.tryFindChild(integrationId)) {
309
+ const integrationResource = new provider_aws_1.apiGatewayIntegration.ApiGatewayIntegration(this, integrationId, this.renderIntegration(this.bindResult));
310
+ // add integration responses (with dependencies on integration)
311
+ this.bindResult.options?.integrationResponses?.forEach((ir) => {
312
+ const irId = `IntegrationResponse${ir.statusCode}`;
313
+ if (this.node.tryFindChild(irId))
314
+ return;
315
+ new provider_aws_1.apiGatewayIntegrationResponse.ApiGatewayIntegrationResponse(this, irId, this.renderIntegrationResponse(integrationResource, ir, methodResponses));
316
+ });
317
+ }
318
+ return {};
319
+ }
320
+ renderResponseModels(responseModels) {
321
+ if (!responseModels) {
322
+ return undefined;
323
+ }
324
+ return Object.fromEntries(Object.entries(responseModels).map(([contentType, rm]) => [
325
+ contentType,
326
+ rm.modelId,
327
+ ]));
328
+ }
329
+ renderIntegration(bindResult) {
330
+ const options = bindResult.options ?? {};
331
+ let credentials;
332
+ if (options.credentialsRole) {
333
+ credentials = options.credentialsRole.roleArn;
334
+ }
335
+ else if (options.credentialsPassthrough) {
336
+ credentials = aws_stack_1.AwsStack.ofAwsConstruct(this).formatArn({
337
+ service: "iam",
338
+ region: "",
339
+ account: "*",
340
+ resource: "user",
341
+ arnFormat: arn_1.ArnFormat.SLASH_RESOURCE_NAME,
342
+ resourceName: "*",
343
+ });
344
+ }
345
+ return {
346
+ restApiId: this.api.restApiId,
347
+ resourceId: this.resource.resourceId,
348
+ httpMethod: this.methodResource.httpMethod, // Frontend method's HTTP verb
349
+ type: bindResult.type,
350
+ uri: bindResult.uri,
351
+ integrationHttpMethod: bindResult.integrationHttpMethod, // Backend method's HTTP verb
352
+ cacheKeyParameters: options.cacheKeyParameters,
353
+ cacheNamespace: options.cacheNamespace,
354
+ contentHandling: options.contentHandling,
355
+ requestParameters: options.requestParameters,
356
+ requestTemplates: options.requestTemplates,
357
+ passthroughBehavior: options.passthroughBehavior,
358
+ connectionType: options.connectionType,
359
+ connectionId: options.vpcLink ? options.vpcLink.vpcLinkId : undefined,
360
+ credentials,
361
+ timeoutMilliseconds: options.timeout?.toMilliseconds(),
362
+ };
363
+ }
364
+ renderIntegrationResponse(integration, ir, mr) {
365
+ const methodResponse = mr[ir.statusCode];
366
+ return {
367
+ restApiId: this.api.restApiId,
368
+ resourceId: this.resource.resourceId,
369
+ httpMethod: this.methodResource.httpMethod,
370
+ // TODO: Is this correct to not create a methodResponse?
371
+ statusCode: methodResponse ? methodResponse.statusCode : ir.statusCode,
372
+ contentHandling: ir.contentHandling,
373
+ responseParameters: ir.responseParameters,
374
+ responseTemplates: ir.responseTemplates,
375
+ selectionPattern: ir.selectionPattern,
376
+ dependsOn: [integration],
377
+ };
378
+ }
379
+ }
380
+ exports.Method = Method;
381
+ _a = JSII_RTTI_SYMBOL_1;
382
+ Method[_a] = { fqn: "terraconstructs.aws.compute.Method", version: "0.1.1" };
383
+ var AuthorizationType;
384
+ (function (AuthorizationType) {
385
+ AuthorizationType["NONE"] = "NONE";
386
+ AuthorizationType["IAM"] = "AWS_IAM";
387
+ AuthorizationType["CUSTOM"] = "CUSTOM";
388
+ AuthorizationType["COGNITO"] = "COGNITO_USER_POOLS";
389
+ })(AuthorizationType || (exports.AuthorizationType = AuthorizationType = {}));
390
+ function pathForArn(path) {
391
+ return path.replace(/\{[^\}]*\}/g, "*");
392
+ }
393
+ function mergeDicts(xs, ys) {
394
+ return xs || ys ? Object.assign(xs ?? {}, ys) : undefined;
395
+ }
396
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0aG9kLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F3cy9jb21wdXRlL21ldGhvZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLGlHQUFpRztBQUVqRyxzREFLNkI7QUFDN0IsaUNBQXNEO0FBRXRELCtGQUEwRTtBQUMxRSx1REFBdUQ7QUFDdkQsNkNBQXVEO0FBTXZELDhDQUFzRDtBQUt0RCx1Q0FBMkQ7QUFFM0QseUNBQXlDO0FBQ3pDLGdDQUFtQztBQUNuQyxvREFBdUU7QUFDdkUsNENBQXdDO0FBQ3hDLDRDQUE0QztBQUM1Qyw4QkFBOEI7QUFvSjlCLE1BQWEsTUFBTyxTQUFRLGdDQUFnQjtJQWExQyxJQUFXLE9BQU87UUFDaEIsT0FBTztZQUNMLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDM0IsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO1NBQzFCLENBQUM7SUFDSixDQUFDO0lBRUQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFrQjtRQUMxRCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQWJULHFCQUFnQixHQUFxQixFQUFFLENBQUM7UUFldkQsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO1FBQy9CLElBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7UUFDOUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRWpELElBQUEsb0NBQWtCLEVBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRXBDLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDO1FBQ3BDLE1BQU0sb0JBQW9CLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxvQkFB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QyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxVQUFVO1lBQ3RFLGVBQWUsRUFBRSxFQUFFLENBQUMsZUFBZTtZQUNuQyxrQkFBa0IsRUFBRSxFQUFFLENBQUMsa0JBQWtCO1lBQ3pDLGlCQUFpQixFQUFFLEVBQUUsQ0FBQyxpQkFBaUI7WUFDdkMsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDLGdCQUFnQjtZQUNyQyxTQUFTLEVBQUUsQ0FBQyxXQUFXLENBQUM7U0FDekIsQ0FBQztJQUNKLENBQUM7O0FBdmhCSCx3QkF3aEJDOzs7QUFFRCxJQUFZLGlCQUtYO0FBTEQsV0FBWSxpQkFBaUI7SUFDM0Isa0NBQWEsQ0FBQTtJQUNiLG9DQUFlLENBQUE7SUFDZixzQ0FBaUIsQ0FBQTtJQUNqQixtREFBOEIsQ0FBQTtBQUNoQyxDQUFDLEVBTFcsaUJBQWlCLGlDQUFqQixpQkFBaUIsUUFLNUI7QUFFRCxTQUFTLFVBQVUsQ0FBQyxJQUFZO0lBQzlCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDMUMsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUNqQixFQUFzQixFQUN0QixFQUFzQjtJQUV0QixPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQzVELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvYmxvYi92Mi4xODYuMC9wYWNrYWdlcy9hd3MtY2RrLWxpYi9hd3MtYXBpZ2F0ZXdheS9saWIvbWV0aG9kLnRzXG5cbmltcG9ydCB7XG4gIGFwaUdhdGV3YXlNZXRob2QsXG4gIGFwaUdhdGV3YXlJbnRlZ3JhdGlvbixcbiAgYXBpR2F0ZXdheU1ldGhvZFJlc3BvbnNlLFxuICBhcGlHYXRld2F5SW50ZWdyYXRpb25SZXNwb25zZSxcbn0gZnJvbSBcIkBjZGt0Zi9wcm92aWRlci1hd3NcIjtcbmltcG9ydCB7IEFubm90YXRpb25zLCBUZXJyYWZvcm1FbGVtZW50IH0gZnJvbSBcImNka3RmXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgQXBpR2F0ZXdheU1ldHJpY3MgfSBmcm9tIFwiLi9hcGlnYXRld2F5LWNhbm5lZC1tZXRyaWNzLmdlbmVyYXRlZFwiO1xuaW1wb3J0IHsgdmFsaWRhdGVIdHRwTWV0aG9kIH0gZnJvbSBcIi4vYXBpZ2F0ZXdheS11dGlsXCI7XG5pbXBvcnQgeyBBdXRob3JpemVyLCBJQXV0aG9yaXplciB9IGZyb20gXCIuL2F1dGhvcml6ZXJcIjtcbmltcG9ydCB7XG4gIEludGVncmF0aW9uLFxuICBJbnRlZ3JhdGlvbkNvbmZpZyxcbiAgSW50ZWdyYXRpb25SZXNwb25zZSxcbn0gZnJvbSBcIi4vaW50ZWdyYXRpb25cIjtcbmltcG9ydCB7IE1vY2tJbnRlZ3JhdGlvbiB9IGZyb20gXCIuL2ludGVncmF0aW9ucy9tb2NrXCI7XG5pbXBvcnQgeyBNZXRob2RSZXNwb25zZSB9IGZyb20gXCIuL21ldGhvZHJlc3BvbnNlXCI7XG5pbXBvcnQgeyBJTW9kZWwgfSBmcm9tIFwiLi9tb2RlbFwiO1xuaW1wb3J0IHsgSVJlcXVlc3RWYWxpZGF0b3IsIFJlcXVlc3RWYWxpZGF0b3JPcHRpb25zIH0gZnJvbSBcIi4vcmVxdWVzdHZhbGlkYXRvclwiO1xuaW1wb3J0IHsgSVJlc291cmNlIH0gZnJvbSBcIi4vcmVzb3VyY2VcIjtcbmltcG9ydCB7IElSZXN0QXBpLCBSZXN0QXBpLCBSZXN0QXBpQmFzZSB9IGZyb20gXCIuL3Jlc3RhcGlcIjtcbmltcG9ydCB7IElTdGFnZSB9IGZyb20gXCIuL3N0YWdlXCI7XG4vLyBpbXBvcnQgeyBGbiB9IGZyb20gXCIuLi8uLi90ZXJyYS1mdW5jXCI7XG5pbXBvcnQgeyBBcm5Gb3JtYXQgfSBmcm9tIFwiLi4vYXJuXCI7XG5pbXBvcnQgeyBBd3NDb25zdHJ1Y3RCYXNlLCBBd3NDb25zdHJ1Y3RQcm9wcyB9IGZyb20gXCIuLi9hd3MtY29uc3RydWN0XCI7XG5pbXBvcnQgeyBBd3NTdGFjayB9IGZyb20gXCIuLi9hd3Mtc3RhY2tcIjtcbmltcG9ydCAqIGFzIGNsb3Vkd2F0Y2ggZnJvbSBcIi4uL2Nsb3Vkd2F0Y2hcIjtcbmltcG9ydCAqIGFzIGlhbSBmcm9tIFwiLi4vaWFtXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWV0aG9kT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBBIGZyaWVuZGx5IG9wZXJhdGlvbiBuYW1lIGZvciB0aGUgbWV0aG9kLiBGb3IgZXhhbXBsZSwgeW91IGNhbiBhc3NpZ24gdGhlXG4gICAqIE9wZXJhdGlvbk5hbWUgb2YgTGlzdFBldHMgZm9yIHRoZSBHRVQgL3BldHMgbWV0aG9kLlxuICAgKi9cbiAgcmVhZG9ubHkgb3BlcmF0aW9uTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogTWV0aG9kIGF1dGhvcml6YXRpb24uXG4gICAqIElmIHRoZSB2YWx1ZSBpcyBzZXQgb2YgYEN1c3RvbWAsIGFuIGBhdXRob3JpemVyYCBtdXN0IGFsc28gYmUgc3BlY2lmaWVkLlxuICAgKlxuICAgKiBJZiB5b3UncmUgdXNpbmcgb25lIG9mIHRoZSBhdXRob3JpemVycyB0aGF0IGFyZSBhdmFpbGFibGUgdmlhIHRoZSBgQXV0aG9yaXplcmAgY2xhc3MsIHN1Y2ggYXMgYEF1dGhvcml6ZXIjdG9rZW4oKWAsXG4gICAqIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgdGhpcyBvcHRpb24gbm90IGJlIHNwZWNpZmllZC4gVGhlIGF1dGhvcml6ZXIgd2lsbCB0YWtlIGNhcmUgb2Ygc2V0dGluZyB0aGUgY29ycmVjdCBhdXRob3JpemF0aW9uIHR5cGUuXG4gICAqIEhvd2V2ZXIsIHNwZWNpZnlpbmcgYW4gYXV0aG9yaXphdGlvbiB0eXBlIHVzaW5nIHRoaXMgcHJvcGVydHkgdGhhdCBjb25mbGljdHMgd2l0aCB3aGF0IGlzIGV4cGVjdGVkIGJ5IHRoZSBgQXV0aG9yaXplcmBcbiAgICogd2lsbCByZXN1bHQgaW4gYW4gZXJyb3IuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gb3BlbiBhY2Nlc3MgdW5sZXNzIGBhdXRob3JpemVyYCBpcyBzcGVjaWZpZWRcbiAgICovXG4gIHJlYWRvbmx5IGF1dGhvcml6YXRpb25UeXBlPzogQXV0aG9yaXphdGlvblR5cGU7XG5cbiAgLyoqXG4gICAqIElmIGBhdXRob3JpemF0aW9uVHlwZWAgaXMgYEN1c3RvbWAsIHRoaXMgc3BlY2lmaWVzIHRoZSBJRCBvZiB0aGUgbWV0aG9kXG4gICAqIGF1dGhvcml6ZXIgcmVzb3VyY2UuXG4gICAqIElmIHNwZWNpZmllZCwgdGhlIHZhbHVlIG9mIGBhdXRob3JpemF0aW9uVHlwZWAgbXVzdCBiZSBzZXQgdG8gYEN1c3RvbWBcbiAgICovXG4gIHJlYWRvbmx5IGF1dGhvcml6ZXI/OiBJQXV0aG9yaXplcjtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIG1ldGhvZCByZXF1aXJlcyBjbGllbnRzIHRvIHN1Ym1pdCBhIHZhbGlkIEFQSSBrZXkuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBhcGlLZXlSZXF1aXJlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSByZXNwb25zZXMgdGhhdCBjYW4gYmUgc2VudCB0byB0aGUgY2xpZW50IHdobyBjYWxscyB0aGUgbWV0aG9kLlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqXG4gICAqIFRoaXMgcHJvcGVydHkgaXMgbm90IHJlcXVpcmVkLCBidXQgaWYgdGhlc2UgYXJlIG5vdCBzdXBwbGllZCBmb3IgYSBMYW1iZGFcbiAgICogcHJveHkgaW50ZWdyYXRpb24sIHRoZSBMYW1iZGEgZnVuY3Rpb24gbXVzdCByZXR1cm4gYSB2YWx1ZSBvZiB0aGUgY29ycmVjdCBmb3JtYXQsXG4gICAqIGZvciB0aGUgaW50ZWdyYXRpb24gcmVzcG9uc2UgdG8gYmUgY29ycmVjdGx5IG1hcHBlZCB0byBhIHJlc3BvbnNlIHRvIHRoZSBjbGllbnQuXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FwaWdhdGV3YXkvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2FwaS1nYXRld2F5LW1ldGhvZC1zZXR0aW5ncy1tZXRob2QtcmVzcG9uc2UuaHRtbFxuICAgKi9cbiAgcmVhZG9ubHkgbWV0aG9kUmVzcG9uc2VzPzogTWV0aG9kUmVzcG9uc2VbXTtcblxuICAvKipcbiAgICogVGhlIHJlcXVlc3QgcGFyYW1ldGVycyB0aGF0IEFQSSBHYXRld2F5IGFjY2VwdHMuIFNwZWNpZnkgcmVxdWVzdCBwYXJhbWV0ZXJzXG4gICAqIGFzIGtleS12YWx1ZSBwYWlycyAoc3RyaW5nLXRvLUJvb2xlYW4gbWFwcGluZyksIHdpdGggYSBzb3VyY2UgYXMgdGhlIGtleSBhbmRcbiAgICogYSBCb29sZWFuIGFzIHRoZSB2YWx1ZS4gVGhlIEJvb2xlYW4gc3BlY2lmaWVzIHdoZXRoZXIgYSBwYXJhbWV0ZXIgaXMgcmVxdWlyZWQuXG4gICAqIEEgc291cmNlIG11c3QgbWF0Y2ggdGhlIGZvcm1hdCBtZXRob2QucmVxdWVzdC5sb2NhdGlvbi5uYW1lLCB3aGVyZSB0aGUgbG9jYXRpb25cbiAgICogaXMgcXVlcnlzdHJpbmcsIHBhdGgsIG9yIGhlYWRlciwgYW5kIG5hbWUgaXMgYSB2YWxpZCwgdW5pcXVlIHBhcmFtZXRlciBuYW1lLlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSByZXF1ZXN0UGFyYW1ldGVycz86IHsgW3BhcmFtOiBzdHJpbmddOiBib29sZWFuIH07XG5cbiAgLyoqXG4gICAqIFRoZSBtb2RlbHMgd2hpY2ggZGVzY3JpYmUgZGF0YSBzdHJ1Y3R1cmUgb2YgcmVxdWVzdCBwYXlsb2FkLiBXaGVuXG4gICAqIGNvbWJpbmVkIHdpdGggYHJlcXVlc3RWYWxpZGF0b3JgIG9yIGByZXF1ZXN0VmFsaWRhdG9yT3B0aW9uc2AsIHRoZSBzZXJ2aWNlXG4gICAqIHdpbGwgdmFsaWRhdGUgdGhlIEFQSSByZXF1ZXN0IHBheWxvYWQgYmVmb3JlIGl0IHJlYWNoZXMgdGhlIEFQSSdzIEludGVncmF0aW9uIChpbmNsdWRpbmcgcHJveGllcykuXG4gICAqIFNwZWNpZnkgYHJlcXVlc3RNb2RlbHNgIGFzIGtleS12YWx1ZSBwYWlycywgd2l0aCBhIGNvbnRlbnQgdHlwZVxuICAgKiAoZS5nLiBgJ2FwcGxpY2F0aW9uL2pzb24nYCkgYXMgdGhlIGtleSBhbmQgYW4gQVBJIEdhdGV3YXkgTW9kZWwgYXMgdGhlIHZhbHVlLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKlxuICAgKiAgICAgZGVjbGFyZSBjb25zdCBhcGk6IGFwaWdhdGV3YXkuUmVzdEFwaTtcbiAgICogICAgIGRlY2xhcmUgY29uc3QgdXNlckxhbWJkYTogbGFtYmRhLkZ1bmN0aW9uO1xuICAgKlxuICAgKiAgICAgY29uc3QgdXNlck1vZGVsOiBhcGlnYXRld2F5Lk1vZGVsID0gYXBpLmFkZE1vZGVsKCdVc2VyTW9kZWwnLCB7XG4gICAqICAgICAgICAgc2NoZW1hOiB7XG4gICAqICAgICAgICAgICAgIHR5cGU6IGFwaWdhdGV3YXkuSnNvblNjaGVtYVR5cGUuT0JKRUNULFxuICAgKiAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAqICAgICAgICAgICAgICAgICB1c2VySWQ6IHtcbiAgICogICAgICAgICAgICAgICAgICAgICB0eXBlOiBhcGlnYXRld2F5Lkpzb25TY2hlbWFUeXBlLlNUUklOR1xuICAgKiAgICAgICAgICAgICAgICAgfSxcbiAgICogICAgICAgICAgICAgICAgIG5hbWU6IHtcbiAgICogICAgICAgICAgICAgICAgICAgICB0eXBlOiBhcGlnYXRld2F5Lkpzb25TY2hlbWFUeXBlLlNUUklOR1xuICAgKiAgICAgICAgICAgICAgICAgfVxuICAgKiAgICAgICAgICAgICB9LFxuICAgKiAgICAgICAgICAgICByZXF1aXJlZDogWyd1c2VySWQnXVxuICAgKiAgICAgICAgIH1cbiAgICogICAgIH0pO1xuICAgKiAgICAgYXBpLnJvb3QuYWRkUmVzb3VyY2UoJ3VzZXInKS5hZGRNZXRob2QoJ1BPU1QnLFxuICAgKiAgICAgICAgIG5ldyBhcGlnYXRld2F5LkxhbWJkYUludGVncmF0aW9uKHVzZXJMYW1iZGEpLCB7XG4gICAqICAgICAgICAgICAgIHJlcXVlc3RNb2RlbHM6IHtcbiAgICogICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJzogdXNlck1vZGVsXG4gICAqICAgICAgICAgICAgIH1cbiAgICogICAgICAgICB9XG4gICAqICAgICApO1xuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hcGlnYXRld2F5L2xhdGVzdC9kZXZlbG9wZXJndWlkZS9hcGktZ2F0ZXdheS1tZXRob2Qtc2V0dGluZ3MtbWV0aG9kLXJlcXVlc3QuaHRtbCNzZXR1cC1tZXRob2QtcmVxdWVzdC1tb2RlbFxuICAgKi9cbiAgcmVhZG9ubHkgcmVxdWVzdE1vZGVscz86IHsgW3BhcmFtOiBzdHJpbmddOiBJTW9kZWwgfTtcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBhc3NvY2lhdGVkIHJlcXVlc3QgdmFsaWRhdG9yLlxuICAgKiBPbmx5IG9uZSBvZiBgcmVxdWVzdFZhbGlkYXRvcmAgb3IgYHJlcXVlc3RWYWxpZGF0b3JPcHRpb25zYCBtdXN0IGJlIHNwZWNpZmllZC5cbiAgICogV29ya3MgdG9nZXRoZXIgd2l0aCBgcmVxdWVzdE1vZGVsc2Agb3IgYHJlcXVlc3RQYXJhbWV0ZXJzYCB0byB2YWxpZGF0ZVxuICAgKiB0aGUgcmVxdWVzdCBiZWZvcmUgaXQgcmVhY2hlcyBpbnRlZ3JhdGlvbiBsaWtlIExhbWJkYSBQcm94eSBJbnRlZ3JhdGlvbi5cbiAgICogQGRlZmF1bHQgLSBObyBkZWZhdWx0IHZhbGlkYXRvclxuICAgKi9cbiAgcmVhZG9ubHkgcmVxdWVzdFZhbGlkYXRvcj86IElSZXF1ZXN0VmFsaWRhdG9yO1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgYXV0aG9yaXphdGlvbiBzY29wZXMgY29uZmlndXJlZCBvbiB0aGUgbWV0aG9kLiBUaGUgc2NvcGVzIGFyZSB1c2VkIHdpdGhcbiAgICogYSBDT0dOSVRPX1VTRVJfUE9PTFMgYXV0aG9yaXplciB0byBhdXRob3JpemUgdGhlIG1ldGhvZCBpbnZvY2F0aW9uLlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1hcGlnYXRld2F5LW1ldGhvZC5odG1sI2Nmbi1hcGlnYXRld2F5LW1ldGhvZC1hdXRob3JpemF0aW9uc2NvcGVzXG4gICAqIEBkZWZhdWx0IC0gbm8gYXV0aG9yaXphdGlvbiBzY29wZXNcbiAgICovXG4gIHJlYWRvbmx5IGF1dGhvcml6YXRpb25TY29wZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogUmVxdWVzdCB2YWxpZGF0b3Igb3B0aW9ucyB0byBjcmVhdGUgbmV3IHZhbGlkYXRvclxuICAgKiBPbmx5IG9uZSBvZiBgcmVxdWVzdFZhbGlkYXRvcmAgb3IgYHJlcXVlc3RWYWxpZGF0b3JPcHRpb25zYCBtdXN0IGJlIHNwZWNpZmllZC5cbiAgICogV29ya3MgdG9nZXRoZXIgd2l0aCBgcmVxdWVzdE1vZGVsc2Agb3IgYHJlcXVlc3RQYXJhbWV0ZXJzYCB0byB2YWxpZGF0ZVxuICAgKiB0aGUgcmVxdWVzdCBiZWZvcmUgaXQgcmVhY2hlcyBpbnRlZ3JhdGlvbiBsaWtlIExhbWJkYSBQcm94eSBJbnRlZ3JhdGlvbi5cbiAgICogQGRlZmF1bHQgLSBObyBkZWZhdWx0IHZhbGlkYXRvclxuICAgKi9cbiAgcmVhZG9ubHkgcmVxdWVzdFZhbGlkYXRvck9wdGlvbnM/OiBSZXF1ZXN0VmFsaWRhdG9yT3B0aW9ucztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNZXRob2RQcm9wcyBleHRlbmRzIEF3c0NvbnN0cnVjdFByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSByZXNvdXJjZSB0aGlzIG1ldGhvZCBpcyBhc3NvY2lhdGVkIHdpdGguIEZvciByb290IHJlc291cmNlIG1ldGhvZHMsXG4gICAqIHNwZWNpZnkgdGhlIGBSZXN0QXBpYCBvYmplY3QuXG4gICAqL1xuICByZWFkb25seSByZXNvdXJjZTogSVJlc291cmNlO1xuXG4gIC8qKlxuICAgKiBUaGUgSFRUUCBtZXRob2QgKFwiR0VUXCIsIFwiUE9TVFwiLCBcIlBVVFwiLCAuLi4pIHRoYXQgY2xpZW50cyB1c2UgdG8gY2FsbCB0aGlzIG1ldGhvZC5cbiAgICovXG4gIHJlYWRvbmx5IGh0dHBNZXRob2Q6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGJhY2tlbmQgc3lzdGVtIHRoYXQgdGhlIG1ldGhvZCBjYWxscyB3aGVuIGl0IHJlY2VpdmVzIGEgcmVxdWVzdC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBhIG5ldyBgTW9ja0ludGVncmF0aW9uYC5cbiAgICovXG4gIHJlYWRvbmx5IGludGVncmF0aW9uPzogSW50ZWdyYXRpb247XG5cbiAgLyoqXG4gICAqIE1ldGhvZCBvcHRpb25zLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIG9wdGlvbnMuXG4gICAqL1xuICByZWFkb25seSBvcHRpb25zPzogTWV0aG9kT3B0aW9ucztcbn1cblxuZXhwb3J0IGNsYXNzIE1ldGhvZCBleHRlbmRzIEF3c0NvbnN0cnVjdEJhc2Uge1xuICBwdWJsaWMgcmVhZG9ubHkgbWV0aG9kSWQ6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGh0dHBNZXRob2Q6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHJlc291cmNlOiBJUmVzb3VyY2U7XG4gIC8qKlxuICAgKiBUaGUgQVBJIEdhdGV3YXkgUmVzdEFwaSBhc3NvY2lhdGVkIHdpdGggdGhpcyBtZXRob2QuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYXBpOiBJUmVzdEFwaTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9tZXRob2RSZXNwb25zZXM6IE1ldGhvZFJlc3BvbnNlW10gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBtZXRob2RSZXNvdXJjZTogYXBpR2F0ZXdheU1ldGhvZC5BcGlHYXRld2F5TWV0aG9kO1xuICBwcml2YXRlIHJlYWRvbmx5IGJpbmRSZXN1bHQ/OiBJbnRlZ3JhdGlvbkNvbmZpZztcblxuICBwdWJsaWMgZ2V0IG91dHB1dHMoKTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1ldGhvZElkOiB0aGlzLm1ldGhvZElkLFxuICAgICAgaHR0cE1ldGhvZDogdGhpcy5odHRwTWV0aG9kLFxuICAgICAgbWV0aG9kQXJuOiB0aGlzLm1ldGhvZEFybixcbiAgICB9O1xuICB9XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IE1ldGhvZFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG5cbiAgICB0aGlzLnJlc291cmNlID0gcHJvcHMucmVzb3VyY2U7XG4gICAgdGhpcy5hcGkgPSBwcm9wcy5yZXNvdXJjZS5hcGk7XG4gICAgdGhpcy5odHRwTWV0aG9kID0gcHJvcHMuaHR0cE1ldGhvZC50b1VwcGVyQ2FzZSgpO1xuXG4gICAgdmFsaWRhdGVIdHRwTWV0aG9kKHRoaXMuaHR0cE1ldGhvZCk7XG5cbiAgICBjb25zdCBvcHRpb25zID0gcHJvcHMub3B0aW9ucyB8fCB7fTtcbiAgICBjb25zdCBkZWZhdWx0TWV0aG9kT3B0aW9ucyA9IHByb3BzLnJlc291cmNlLmRlZmF1bHRNZXRob2RPcHRpb25zIHx8IHt9O1xuXG4gICAgY29uc3QgYXV0aG9yaXplciA9XG4gICAgICBvcHRpb25zLmF1dGhvcml6YXRpb25UeXBlID09PSBBdXRob3JpemF0aW9uVHlwZS5OT05FICYmXG4gICAgICBvcHRpb25zLmF1dGhvcml6ZXIgPT0gdW5kZWZpbmVkXG4gICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgIDogb3B0aW9ucy5hdXRob3JpemVyIHx8IGRlZmF1bHRNZXRob2RPcHRpb25zLmF1dGhvcml6ZXI7XG4gICAgY29uc3QgYXV0aG9yaXplcklkID0gYXV0aG9yaXplcj8uYXV0aG9yaXplcklkXG4gICAgICA/IGF1dGhvcml6ZXIuYXV0aG9yaXplcklkXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIC8qKlxuICAgICAqIEdldCBhbmQgdmFsaWRhdGUgYXV0aG9yaXphdGlvbiB0eXBlIGZyb20gdGhlIHZhbHVlcyBzZXQgYnkgQVBJIHJlc291cmNlIGFuZCBtZXRob2QuXG4gICAgICpcbiAgICAgKiBSRVNUIEFQSSBSZXNvdXJjZVxuICAgICAqIOKUlOKUgOKUgCBkZWZhdWx0TWV0aG9kT3B0aW9uczogTWV0aG9kIG9wdGlvbnMgdG8gdXNlIGFzIGEgZGVmYXVsdCBmb3IgYWxsIG1ldGhvZHMgY3JlYXRlZCB3aXRoaW4gdGhpcyBBUEkgdW5sZXNzIGN1c3RvbSBvcHRpb25zIGFyZSBzcGVjaWZpZWQuXG4gICAgICogICAg4pSc4pSA4pSAIGF1dGhvcml6YXRpb25UeXBlOiBTcGVjaWZpZXMgdGhlIGRlZmF1bHQgYXV0aG9yaXphdGlvbiB0eXBlIHVubGVzcyBjdXN0b20gb3B0aW9ucyBhcmUgc3BlY2lmaWVkLCByZWNvbW1lbmRlZCB0byBub3QgYmUgc3BlY2lmaWVkLlxuICAgICAqICAgIOKUlOKUgOKUgCBhdXRob3JpemVyOiBTcGVjaWZpZXMgdGhlIGRlZmF1bHQgYXV0aG9yaXplciBmb3IgYWxsIG1ldGhvZHMgY3JlYXRlZCB3aXRoaW4gdGhpcyBBUEkgdW5sZXNzIGN1c3RvbSBvcHRpb25zIGFyZSBzcGVjaWZpZWQuXG4gICAgICogICAgICAgIOKUlOKUgOKUgCBhdXRob3JpemVyVHlwZTogVGhlIGRlZmF1bHQgYXV0aG9yaXphdGlvbiB0eXBlIG9mIHRoaXMgYXV0aG9yaXplci5cbiAgICAgKlxuICAgICAqIFJFU1QgQVBJIE1ldGhvZFxuICAgICAqIOKUlOKUgOKUgCBvcHRpb25zOiBNZXRob2Qgb3B0aW9ucy5cbiAgICAgKiAgICDilJzilIDilIAgYXV0aG9yaXphdGlvblR5cGU6IFNwZWNpZmllcyB0aGUgYXV0aG9yaXphdGlvbiB0eXBlLCByZWNvbW1lbmRlZCB0byBub3QgYmUgc3BlY2lmaWVkLlxuICAgICAqICAgIOKUlOKUgOKUgCBhdXRob3JpemVyOiBTcGVjaWZpZXMgYW4gYXV0aG9yaXplciB0byB1c2UgZm9yIHRoaXMgbWV0aG9kLlxuICAgICAqICAgICAgICDilJTilIDilIAgYXV0aG9yaXplclR5cGU6IFRoZSBhdXRob3JpemF0aW9uIHR5cGUgb2YgdGhpcyBhdXRob3JpemVyLlxuICAgICAqXG4gICAgICogQXV0aG9yaXphdGlvbiB0eXBlIGlzIGZpcnN0IHNldCB0byBcImF1dGhvcml6ZXIuYXV0aG9yaXplclR5cGVcIiwgZmFsbGluZyBiYWNrIHRvIG1ldGhvZCdzIFwiYXV0aG9yaXphdGlvblR5cGVcIixcbiAgICAgKiBmYWxsaW5nIGJhY2sgdG8gQVBJIHJlc291cmNlJ3MgZGVmYXVsdCBcImF1dGhvcml6YXRpb25UeXBlXCIsIGFuZCBsYXN0bHkgXCJBdXRob3JpemVyLk5PTkVcIi5cbiAgICAgKlxuICAgICAqIE5vdGUgdGhhdCBcImF1dGhvcml6ZXIuYXV0aG9yaXplclR5cGVcIiBzaG91bGQgbWF0Y2ggbWV0aG9kIG9yIHJlc291cmNlJ3MgXCJhdXRob3JpemF0aW9uVHlwZVwiIGlmIGV4aXN0cy5cbiAgICAgKi9cbiAgICBjb25zdCBhdXRob3JpemF0aW9uVHlwZSA9IHRoaXMuZ2V0TWV0aG9kQXV0aG9yaXphdGlvblR5cGUoXG4gICAgICBvcHRpb25zLFxuICAgICAgZGVmYXVsdE1ldGhvZE9wdGlvbnMsXG4gICAgICBhdXRob3JpemVyLFxuICAgICk7XG5cbiAgICAvLyBBdXRob3JpemF0aW9uU2NvcGUgc2hvdWxkIG9ubHkgYmUgYXBwbGllZCB0byBDT0dOSVRPX1VTRVJfUE9PTFMgQXV0aG9yaXphdGlvblR5cGUuXG4gICAgY29uc3QgZGVmYXVsdFNjb3BlcyA9XG4gICAgICBvcHRpb25zLmF1dGhvcml6YXRpb25TY29wZXMgPz8gZGVmYXVsdE1ldGhvZE9wdGlvbnMuYXV0aG9yaXphdGlvblNjb3BlcztcbiAgICBjb25zdCBhdXRob3JpemF0aW9uU2NvcGVzID1cbiAgICAgIGF1dGhvcml6YXRpb25UeXBlID09PSBBdXRob3JpemF0aW9uVHlwZS5DT0dOSVRPXG4gICAgICAgID8gZGVmYXVsdFNjb3Blc1xuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICBpZiAoYXV0aG9yaXphdGlvblR5cGUgIT09IEF1dGhvcml6YXRpb25UeXBlLkNPR05JVE8gJiYgZGVmYXVsdFNjb3Blcykge1xuICAgICAgLy8gJ0Bhd3MtY2RrL2F3cy1hcGlnYXRld2F5OmludmFsaWRBdXRoU2NvcGUnXG4gICAgICBBbm5vdGF0aW9ucy5vZih0aGlzKS5hZGRXYXJuaW5nKFxuICAgICAgICBcIidBdXRob3JpemF0aW9uU2NvcGVzJyBjYW4gb25seSBiZSBzZXQgd2hlbiAnQXV0aG9yaXphdGlvblR5cGUnIHNldHMgJ0NPR05JVE9fVVNFUl9QT09MUycuIERlZmF1bHQgdG8gaWdub3JlIHRoZSB2YWx1ZXMgc2V0IGluICdBdXRob3JpemF0aW9uU2NvcGVzJy5cIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKEF1dGhvcml6ZXIuaXNBdXRob3JpemVyKGF1dGhvcml6ZXIpKSB7XG4gICAgICBhdXRob3JpemVyLl9hdHRhY2hUb0FwaSh0aGlzLmFwaSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBtciBvZiBvcHRpb25zLm1ldGhvZFJlc3BvbnNlcyA/P1xuICAgICAgZGVmYXVsdE1ldGhvZE9wdGlvbnMubWV0aG9kUmVzcG9uc2VzID8/XG4gICAgICBbXSkge1xuICAgICAgdGhpcy5hZGRNZXRob2RSZXNwb25zZShtcik7XG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdFZhbGlkYXRvcklkVmFsdWUgPSB0aGlzLnJlc29sdmVSZXF1ZXN0VmFsaWRhdG9ySWQob3B0aW9ucyk7XG5cbiAgICBjb25zdCBpbnRlZ3JhdGlvbiA9XG4gICAgICBwcm9wcy5pbnRlZ3JhdGlvbiA/P1xuICAgICAgdGhpcy5yZXNvdXJjZS5kZWZhdWx0SW50ZWdyYXRpb24gPz9cbiAgICAgIG5ldyBNb2NrSW50ZWdyYXRpb24oKTtcbiAgICB0aGlzLmJpbmRSZXN1bHQgPSBpbnRlZ3JhdGlvbi5iaW5kKHRoaXMpO1xuXG4gICAgY29uc3QgbWV0aG9kUHJvcHM6IGFwaUdhdGV3YXlNZXRob2QuQXBpR2F0ZXdheU1ldGhvZENvbmZpZyA9IHtcbiAgICAgIHJlc3RBcGlJZDogdGhpcy5hcGkucmVzdEFwaUlkLFxuICAgICAgcmVzb3VyY2VJZDogcHJvcHMucmVzb3VyY2UucmVzb3VyY2VJZCxcbiAgICAgIGh0dHBNZXRob2Q6IHRoaXMuaHR0cE1ldGhvZCxcbiAgICAgIGF1dGhvcml6YXRpb246IGF1dGhvcml6YXRpb25UeXBlLFxuICAgICAgYXV0aG9yaXplcklkLFxuICAgICAgYXBpS2V5UmVxdWlyZWQ6XG4gICAgICAgIG9wdGlvbnMuYXBpS2V5UmVxdWlyZWQgPz8gZGVmYXVsdE1ldGhvZE9wdGlvbnMuYXBpS2V5UmVxdWlyZWQsXG4gICAgICBvcGVyYXRpb25OYW1lOlxuICAgICAgICBvcHRpb25zLm9wZXJhdGlvbk5hbWUgfHwgZGVmYXVsdE1ldGhvZE9wdGlvbnMub3BlcmF0aW9uTmFtZSxcbiAgICAgIHJlcXVlc3RQYXJhbWV0ZXJzOlxuICAgICAgICBvcHRpb25zLnJlcXVlc3RQYXJhbWV0ZXJzIHx8IGRlZmF1bHRNZXRob2RPcHRpb25zLnJlcXVlc3RQYXJhbWV0ZXJzLFxuICAgICAgcmVxdWVzdE1vZGVsczogdGhpcy5yZW5kZXJSZXF1ZXN0TW9kZWxzKFxuICAgICAgICBvcHRpb25zLnJlcXVlc3RNb2RlbHMgfHwgZGVmYXVsdE1ldGhvZE9wdGlvbnMucmVxdWVzdE1vZGVscyxcbiAgICAgICksXG4gICAgICByZXF1ZXN0VmFsaWRhdG9ySWQ6IHJlcXVlc3RWYWxpZGF0b3JJZFZhbHVlLFxuICAgICAgYXV0aG9yaXphdGlvblNjb3BlczogYXV0aG9yaXphdGlvblNjb3BlcyxcbiAgICB9O1xuXG4gICAgdGhpcy5tZXRob2RSZXNvdXJjZSA9IG5ldyBhcGlHYXRld2F5TWV0aG9kLkFwaUdhdGV3YXlNZXRob2QoXG4gICAgICB0aGlzLFxuICAgICAgXCJSZXNvdXJjZVwiLFxuICAgICAgbWV0aG9kUHJvcHMsXG4gICAgKTtcblxuICAgIHRoaXMubWV0aG9kSWQgPSB0aGlzLm1ldGhvZFJlc291cmNlLmlkO1xuICAgIGlmIChSZXN0QXBpQmFzZS5faXNSZXN0QXBpQmFzZSh0aGlzLmFwaSkpIHtcbiAgICAgIHRoaXMuYXBpLl9hdHRhY2hNZXRob2QodGhpcyk7XG4gICAgfVxuXG4gICAgY29uc3QgZGVwbG95bWVudCA9IHByb3BzLnJlc291cmNlLmFwaS5sYXRlc3REZXBsb3ltZW50O1xuICAgIGlmIChkZXBsb3ltZW50KSB7XG4gICAgICBkZXBsb3ltZW50Lm5vZGUuYWRkRGVwZW5kZW5jeSh0aGlzLm1ldGhvZFJlc291cmNlKTtcbiAgICAgIC8vIEZuLnNoYTEoRm4uanNvbmVuY29kZSgpKSBjYXVzZXMgbmVzdGVkIFRva2VucyBhbmQgUmVzb2x2ZXIgZXJyb3JzP1xuICAgICAgZGVwbG95bWVudC5hZGRUb1RyaWdnZXJzKHtcbiAgICAgICAgbWV0aG9kOiB7XG4gICAgICAgICAgLi4ubWV0aG9kUHJvcHMsXG4gICAgICAgICAgaW50ZWdyYXRpb25Ub2tlbjogdGhpcy5iaW5kUmVzdWx0Py5kZXBsb3ltZW50VG9rZW4sXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIC8vIGFkZFRvTG9naWNhbElkIGlzIENESyBzcGVjaWZpYyByZW1vdmFsUG9saWN5LlJFVEFJTiBmdW5jdGlvbmFsaXR5XG4gICAgICAvLyBkZXBsb3ltZW50LmFkZFRvTG9naWNhbElkKHtcbiAgICAgIC8vICAgbWV0aG9kOiB7XG4gICAgICAvLyAgICAgLi4ubWV0aG9kUHJvcHMsXG4gICAgICAvLyAgICAgaW50ZWdyYXRpb25Ub2tlbjogYmluZFJlc3VsdD8uZGVwbG95bWVudFRva2VuLFxuICAgICAgLy8gICB9LFxuICAgICAgLy8gfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBSZXN0QXBpIGFzc29jaWF0ZWQgd2l0aCB0aGlzIE1ldGhvZFxuICAgKiBAZGVwcmVjYXRlZCAtIFRocm93cyBhbiBlcnJvciBpZiB0aGlzIFJlc291cmNlIGlzIG5vdCBhc3NvY2lhdGVkIHdpdGggYW4gaW5zdGFuY2Ugb2YgYFJlc3RBcGlgLiBVc2UgYGFwaWAgaW5zdGVhZC5cbiAgICovXG4gIHB1YmxpYyBnZXQgcmVzdEFwaSgpOiBSZXN0QXBpIHtcbiAgICBpZiAoISh0aGlzLmFwaSBpbnN0YW5jZW9mIFJlc3RBcGkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwibm90IGF2YWlsYWJsZSBvbiBSZXNvdXJjZSBub3QgY29ubmVjdGVkIHRvIGFuIGluc3RhbmNlIG9mIFJlc3RBcGlcIixcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmFwaTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIGV4ZWN1dGUtYXBpIEFSTiBmb3IgdGhpcyBtZXRob2Q6XG4gICAqXG4gICAqICAgYXJuOmF3czpleGVjdXRlLWFwaTp7cmVnaW9ufTp7YWNjb3VudH06e3Jlc3RBcGlJZH0ve3N0YWdlfS97bWV0aG9kfS97cGF0aH1cbiAgICpcbiAgICogTk9URToge3N0YWdlfSB3aWxsIHJlZmVyIHRvIHRoZSBgcmVzdEFwaS5kZXBsb3ltZW50U3RhZ2VgLCB3aGljaCB3aWxsXG4gICAqIGF1dG9tYXRpY2FsbHkgc2V0IGlmIGF1dG8tZGVwbG95IGlzIGVuYWJsZWQsIG9yIGNhbiBiZSBleHBsaWNpdGx5IGFzc2lnbmVkLlxuICAgKiBXaGVuIG5vdCBjb25maWd1cmVkLCB7c3RhZ2V9IHdpbGwgYmUgc2V0IHRvICcqJywgYXMgYSBzaG9ydGhhbmQgZm9yICdhbGwgc3RhZ2VzJy5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIGdldCBtZXRob2RBcm4oKTogc3RyaW5nIHtcbiAgICBjb25zdCBzdGFnZSA9IHRoaXMuYXBpLmRlcGxveW1lbnRTdGFnZT8uc3RhZ2VOYW1lO1xuICAgIHJldHVybiB0aGlzLmFwaS5hcm5Gb3JFeGVjdXRlQXBpKFxuICAgICAgdGhpcy5odHRwTWV0aG9kLFxuICAgICAgcGF0aEZvckFybih0aGlzLnJlc291cmNlLnBhdGgpLFxuICAgICAgc3RhZ2UsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIGV4ZWN1dGUtYXBpIEFSTiBmb3IgdGhpcyBtZXRob2QncyBcInRlc3QtaW52b2tlLXN0YWdlXCIgc3RhZ2UuXG4gICAqIFRoaXMgc3RhZ2UgaXMgdXNlZCBieSB0aGUgQVdTIENvbnNvbGUgVUkgd2hlbiB0ZXN0aW5nIHRoZSBtZXRob2QuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHRlc3RNZXRob2RBcm4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5hcGkuYXJuRm9yRXhlY3V0ZUFwaShcbiAgICAgIHRoaXMuaHR0cE1ldGhvZCxcbiAgICAgIHBhdGhGb3JBcm4odGhpcy5yZXNvdXJjZS5wYXRoKSxcbiAgICAgIFwidGVzdC1pbnZva2Utc3RhZ2VcIixcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIG1ldGhvZCByZXNwb25zZSB0byB0aGlzIG1ldGhvZFxuICAgKlxuICAgKiBJZiBhIG1ldGhvZCByZXNwb25zZSBmb3IgdGhlIHNhbWUgc3RhdHVzIGNvZGUgYWxyZWFkeSBleGlzdHMsIHRoZSBgcmVzcG9uc2VNb2RlbHNgXG4gICAqIGFuZCBgcmVzcG9uc2VQYXJhbWV0ZXJzYCBtYXBzIHdpbGwgYmUgbWVyZ2VkLlxuICAgKi9cbiAgcHVibGljIGFkZE1ldGhvZFJlc3BvbnNlKG1ldGhvZFJlc3BvbnNlOiBNZXRob2RSZXNwb25zZSk6IHZvaWQge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL3YyLjE4Ni4wL3BhY2thZ2VzL2F3cy1jZGstbGliL2F3cy1hcGlnYXRld2F5L2xpYi9tZXRob2QudHMjTDMxNlxuICAgIC8vICsgZml4IGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL3B1bGwvMjY3MTgvZmlsZXNcbiAgICBjb25zdCBpID0gdGhpcy5fbWV0aG9kUmVzcG9uc2VzLmZpbmRJbmRleChcbiAgICAgIChtcikgPT4gbXIuc3RhdHVzQ29kZSA9PT0gbWV0aG9kUmVzcG9uc2Uuc3RhdHVzQ29kZSxcbiAgICApO1xuICAgIGlmIChpID49IDApIHtcbiAgICAgIC8vIE5lZWQgdG8gZG8gYSBzcGxpY2UgYmVjYXVzZSBNZXRob2RSZXNwb25zZXMgYXJlIGltbXV0YWJsZVxuICAgICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLl9tZXRob2RSZXNwb25zZXNbaV07XG4gICAgICB0aGlzLl9tZXRob2RSZXNwb25zZXMuc3BsaWNlKGksIDEsIHtcbiAgICAgICAgc3RhdHVzQ29kZTogbWV0aG9kUmVzcG9uc2Uuc3RhdHVzQ29kZSxcbiAgICAgICAgcmVzcG9uc2VNb2RlbHM6IG1lcmdlRGljdHMoXG4gICAgICAgICAgZXhpc3RpbmcucmVzcG9uc2VNb2RlbHMsXG4gICAgICAgICAgbWV0aG9kUmVzcG9uc2UucmVzcG9uc2VNb2RlbHMsXG4gICAgICAgICksXG4gICAgICAgIHJlc3BvbnNlUGFyYW1ldGVyczogbWVyZ2VEaWN0cyhcbiAgICAgICAgICBleGlzdGluZy5yZXNwb25zZVBhcmFtZXRlcnMsXG4gICAgICAgICAgbWV0aG9kUmVzcG9uc2UucmVzcG9uc2VQYXJhbWV0ZXJzLFxuICAgICAgICApLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX21ldGhvZFJlc3BvbnNlcy5wdXNoKG1ldGhvZFJlc3BvbnNlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldE1ldGhvZEF1dGhvcml6YXRpb25UeXBlKFxuICAgIG9wdGlvbnM6IE1ldGhvZE9wdGlvbnMsXG4gICAgZGVmYXVsdE1ldGhvZE9wdGlvbnM6IE1ldGhvZE9wdGlvbnMsXG4gICAgYXV0aG9yaXplcj86IElBdXRob3JpemVyLFxuICApOiBzdHJpbmcge1xuICAgIGNvbnN0IGF1dGhvcml6ZXJBdXRoVHlwZSA9IGF1dGhvcml6ZXI/LmF1dGhvcml6YXRpb25UeXBlO1xuICAgIGNvbnN0IG9wdGlvbnNBdXRoVHlwZSA9XG4gICAgICBvcHRpb25zLmF1dGhvcml6YXRpb25UeXBlIHx8IGRlZmF1bHRNZXRob2RPcHRpb25zLmF1dGhvcml6YXRpb25UeXBlO1xuICAgIGNvbnN0IGZpbmFsQXV0aFR5cGUgPVxuICAgICAgYXV0aG9yaXplckF1dGhUeXBlIHx8IG9wdGlvbnNBdXRoVHlwZSB8fCBBdXRob3JpemF0aW9uVHlwZS5OT05FO1xuXG4gICAgaWYgKFxuICAgICAgYXV0aG9yaXplckF1dGhUeXBlICYmXG4gICAgICBvcHRpb25zQXV0aFR5cGUgJiZcbiAgICAgIGF1dGhvcml6ZXJBdXRoVHlwZSAhPT0gb3B0aW9uc0F1dGhUeXBlXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGAke3RoaXMucmVzb3VyY2V9LyR7dGhpcy5odHRwTWV0aG9kfSAtIEF1dGhvcml6YXRpb24gdHlwZSBpcyBzZXQgdG8gJHtvcHRpb25zQXV0aFR5cGV9IGAgK1xuICAgICAgICAgIGB3aGljaCBpcyBkaWZmZXJlbnQgZnJvbSB3aGF0IGlzIHJlcXVpcmVkIGJ5IHRoZSBhdXRob3JpemVyIFske2F1dGhvcml6ZXJBdXRoVHlwZX1dYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbmFsQXV0aFR5cGU7XG4gIH1cblxuICBwcml2YXRlIHJlbmRlclJlcXVlc3RNb2RlbHMoXG4gICAgcmVxdWVzdE1vZGVsczogeyBbcGFyYW06IHN0cmluZ106IElNb2RlbCB9IHwgdW5kZWZpbmVkLFxuICApOiB7IFtwYXJhbTogc3RyaW5nXTogc3RyaW5nIH0gfCB1bmRlZmluZWQge1xuICAgIGlmICghcmVxdWVzdE1vZGVscykge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBtb2RlbHM6IHsgW3BhcmFtOiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xuICAgIGZvciAoY29uc3QgY29udGVudFR5cGUgaW4gcmVxdWVzdE1vZGVscykge1xuICAgICAgaWYgKHJlcXVlc3RNb2RlbHMuaGFzT3duUHJvcGVydHkoY29udGVudFR5cGUpKSB7XG4gICAgICAgIG1vZGVsc1tjb250ZW50VHlwZV0gPSByZXF1ZXN0TW9kZWxzW2NvbnRlbnRUeXBlXS5tb2RlbElkO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbW9kZWxzO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlUmVxdWVzdFZhbGlkYXRvcklkKFxuICAgIG9wdGlvbnM6IE1ldGhvZE9wdGlvbnMsXG4gICk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKG9wdGlvbnMucmVxdWVzdFZhbGlkYXRvciAmJiBvcHRpb25zLnJlcXVlc3RWYWxpZGF0b3JPcHRpb25zKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiT25seSBvbmUgb2YgJ3JlcXVlc3RWYWxpZGF0b3InIG9yICdyZXF1ZXN0VmFsaWRhdG9yT3B0aW9ucycgbXVzdCBiZSBzcGVjaWZpZWQuXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnJlcXVlc3RWYWxpZGF0b3JPcHRpb25zKSB7XG4gICAgICAvLyBBc3N1bWluZyBBUElHQVRFV0FZX1JFUVVFU1RfVkFMSURBVE9SX1VOSVFVRV9JRCBpcyBlZmZlY3RpdmVseSB0cnVlIGZvciBUZXJyYUNvbnN0cnVjdHNcbiAgICAgIGNvbnN0IGlkID0gQXdzU3RhY2sub2ZBd3NDb25zdHJ1Y3QodGhpcykudW5pcXVlUmVzb3VyY2VOYW1lKFxuICAgICAgICBuZXcgVGVycmFmb3JtRWxlbWVudCh0aGlzLCBcIlZhbGlkYXRvclwiKSxcbiAgICAgICAge1xuICAgICAgICAgIG1heExlbmd0aDogNjQsXG4gICAgICAgICAgYWxsb3dlZFNwZWNpYWxDaGFyYWN0ZXJzOiBcIi1fXCIsXG4gICAgICAgIH0sXG4gICAgICApO1xuICAgICAgY29uc3QgdmFsaWRhdG9yID0gKHRoaXMuYXBpIGFzIFJlc3RBcGkpLmFkZFJlcXVlc3RWYWxpZGF0b3IoXG4gICAgICAgIGlkLFxuICAgICAgICBvcHRpb25zLnJlcXVlc3RWYWxpZGF0b3JPcHRpb25zLFxuICAgICAgKTtcbiAgICAgIHJldHVybiB2YWxpZGF0b3IucmVxdWVzdFZhbGlkYXRvcklkO1xuICAgIH1cblxuICAgIHJldHVybiBvcHRpb25zLnJlcXVlc3RWYWxpZGF0b3I/LnJlcXVlc3RWYWxpZGF0b3JJZDtcbiAgfVxuXG4gIHB1YmxpYyBtZXRyaWMoXG4gICAgbWV0cmljTmFtZTogc3RyaW5nLFxuICAgIHN0YWdlOiBJU3RhZ2UsXG4gICAgcHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMsXG4gICk6IGNsb3Vkd2F0Y2guTWV0cmljIHtcbiAgICByZXR1cm4gbmV3IGNsb3Vkd2F0Y2guTWV0cmljKHtcbiAgICAgIG5hbWVzcGFjZTogXCJBV1MvQXBpR2F0ZXdheVwiLFxuICAgICAgbWV0cmljTmFtZSxcbiAgICAgIGRpbWVuc2lvbnNNYXA6IHtcbiAgICAgICAgQXBpTmFtZTogdGhpcy5hcGkucmVzdEFwaU5hbWUsXG4gICAgICAgIE1ldGhvZDogdGhpcy5odHRwTWV0aG9kLFxuICAgICAgICBSZXNvdXJjZTogdGhpcy5yZXNvdXJjZS5wYXRoLFxuICAgICAgICBTdGFnZTogc3RhZ2Uuc3RhZ2VOYW1lLFxuICAgICAgfSxcbiAgICAgIC4uLnByb3BzLFxuICAgIH0pLmF0dGFjaFRvKHRoaXMpO1xuICB9XG5cbiAgcHVibGljIG1ldHJpY0NsaWVudEVycm9yKFxuICAgIHN0YWdlOiBJU3RhZ2UsXG4gICAgcHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMsXG4gICk6IGNsb3Vkd2F0Y2guTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5jYW5uZWRNZXRyaWMoQXBpR2F0ZXdheU1ldHJpY3MuXzRYeEVycm9yU3VtLCBzdGFnZSwgcHJvcHMpO1xuICB9XG5cbiAgcHVibGljIG1ldHJpY1NlcnZlckVycm9yKFxuICAgIHN0YWdlOiBJU3RhZ2UsXG4gICAgcHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMsXG4gICk6IGNsb3Vkd2F0Y2guTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5jYW5uZWRNZXRyaWMoQXBpR2F0ZXdheU1ldHJpY3MuXzVYeEVycm9yU3VtLCBzdGFnZSwgcHJvcHMpO1xuICB9XG5cbiAgcHVibGljIG1ldHJpY0NhY2hlSGl0Q291bnQoXG4gICAgc3RhZ2U6IElTdGFnZSxcbiAgICBwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyxcbiAgKTogY2xvdWR3YXRjaC5NZXRyaWMge1xuICAgIHJldHVybiB0aGlzLmNhbm5lZE1ldHJpYyhBcGlHYXRld2F5TWV0cmljcy5jYWNoZUhpdENvdW50U3VtLCBzdGFnZSwgcHJvcHMpO1xuICB9XG5cbiAgcHVibGljIG1ldHJpY0NhY2hlTWlzc0NvdW50KFxuICAgIHN0YWdlOiBJU3RhZ2UsXG4gICAgcHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMsXG4gICk6IGNsb3Vkd2F0Y2guTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5jYW5uZWRNZXRyaWMoQXBpR2F0ZXdheU1ldHJpY3MuY2FjaGVNaXNzQ291bnRTdW0sIHN0YWdlLCBwcm9wcyk7XG4gIH1cblxuICBwdWJsaWMgbWV0cmljQ291bnQoXG4gICAgc3RhZ2U6IElTdGFnZSxcbiAgICBwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyxcbiAgKTogY2xvdWR3YXRjaC5NZXRyaWMge1xuICAgIHJldHVybiB0aGlzLmNhbm5lZE1ldHJpYyhBcGlHYXRld2F5TWV0cmljcy5jb3VudFN1bSwgc3RhZ2UsIHtcbiAgICAgIHN0YXRpc3RpYzogXCJTYW1wbGVDb3VudFwiLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbWV0cmljSW50ZWdyYXRpb25MYXRlbmN5KFxuICAgIHN0YWdlOiBJU3RhZ2UsXG4gICAgcHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMsXG4gICk6IGNsb3Vkd2F0Y2guTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5jYW5uZWRNZXRyaWMoXG4gICAgICBBcGlHYXRld2F5TWV0cmljcy5pbnRlZ3JhdGlvbkxhdGVuY3lBdmVyYWdlLFxuICAgICAgc3RhZ2UsXG4gICAgICBwcm9wcyxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIG1ldHJpY0xhdGVuY3koXG4gICAgc3RhZ2U6IElTdGFnZSxcbiAgICBwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyxcbiAgKTogY2xvdWR3YXRjaC5NZXRyaWMge1xuICAgIHJldHVybiB0aGlzLmNhbm5lZE1ldHJpYyhBcGlHYXRld2F5TWV0cmljcy5sYXRlbmN5QXZlcmFnZSwgc3RhZ2UsIHByb3BzKTtcbiAgfVxuXG4gIHB1YmxpYyBncmFudEV4ZWN1dGUoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQge1xuICAgIHJldHVybiBpYW0uR3JhbnQuYWRkVG9QcmluY2lwYWwoe1xuICAgICAgZ3JhbnRlZSxcbiAgICAgIGFjdGlvbnM6IFtcImV4ZWN1dGUtYXBpOkludm9rZVwiXSxcbiAgICAgIHJlc291cmNlQXJuczogW3RoaXMubWV0aG9kQXJuXSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY2FubmVkTWV0cmljKFxuICAgIGZuOiAoZGltczoge1xuICAgICAgQXBpTmFtZTogc3RyaW5nO1xuICAgICAgTWV0aG9kOiBzdHJpbmc7XG4gICAgICBSZXNvdXJjZTogc3RyaW5nO1xuICAgICAgU3RhZ2U6IHN0cmluZztcbiAgICB9KSA9PiBjbG91ZHdhdGNoLk1ldHJpY1Byb3BzLFxuICAgIHN0YWdlOiBJU3RhZ2UsXG4gICAgcHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMsXG4gICkge1xuICAgIHJldHVybiBuZXcgY2xvdWR3YXRjaC5NZXRyaWMoe1xuICAgICAgLi4uZm4oe1xuICAgICAgICBBcGlOYW1lOiB0aGlzLmFwaS5yZXN0QXBpTmFtZSxcbiAgICAgICAgTWV0aG9kOiB0aGlzLmh0dHBNZXRob2QsXG4gICAgICAgIFJlc291cmNlOiB0aGlzLnJlc291cmNlLnBhdGgsXG4gICAgICAgIFN0YWdlOiBzdGFnZS5zdGFnZU5hbWUsXG4gICAgICB9KSxcbiAgICAgIC4uLnByb3BzLFxuICAgIH0pLmF0dGFjaFRvKHRoaXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgcmVzb3VyY2UgdG8gdGhlIHRlcnJhZm9ybSBKU09OIG91dHB1dC5cbiAgICpcbiAgICogY2FsbGVkIGJ5IFRlcnJhZm9ybVN0YWNrLnByZXBhcmVTdGFjaygpXG4gICAqL1xuICBwdWJsaWMgdG9UZXJyYWZvcm0oKTogYW55IHtcbiAgICBpZiAodGhpcy5fbWV0aG9kUmVzcG9uc2VzLmxlbmd0aCA9PT0gMCAmJiAhdGhpcy5iaW5kUmVzdWx0KSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuXG4gICAgLy8gTk9URTogVGhlIFRlcnJhZm9ybURlcGVuZGVuZGFibGVBc3BlY3Qgd2lsbCBwcm9wZ2F0ZSBjb25zdHJ1Y3QgdHJlZSBkZXBlbmRlbmNpZXNcbiAgICBjb25zdCBtZXRob2RSZXNwb25zZXM6IFJlY29yZDxcbiAgICAgIHN0cmluZyxcbiAgICAgIGFwaUdhdGV3YXlNZXRob2RSZXNwb25zZS5BcGlHYXRld2F5TWV0aG9kUmVzcG9uc2VcbiAgICA+ID0ge307XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9tZXRob2RSZXNwb25zZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IG1yUHJvcHMgPSB0aGlzLl9tZXRob2RSZXNwb25zZXNbaV07XG4gICAgICAvLyB1bmlxdWUgaWQgYnkgc3RhdHVzIGNvZGVcbiAgICAgIGNvbnN0IGlkID0gYE1ldGhvZFJlc3BvbnNlJHttclByb3BzLnN0YXR1c0NvZGV9YDtcbiAgICAgIC8vIG5vIHJlLWNyZWF0ZSBpZiBhbHJlYWR5IGdlbmVyYXRlZFxuICAgICAgY29uc3QgbWV0aG9kUmVzcG9uc2UgPSB0aGlzLm5vZGUudHJ5RmluZENoaWxkKGlkKTtcbiAgICAgIGlmIChtZXRob2RSZXNwb25zZSkge1xuICAgICAgICBtZXRob2RSZXNwb25zZXNbbXJQcm9wcy5zdGF0dXNDb2RlXSA9XG4gICAgICAgICAgbWV0aG9kUmVzcG9uc2UgYXMgYXBpR2F0ZXdheU1ldGhvZFJlc3BvbnNlLkFwaUdhdGV3YXlNZXRob2RSZXNwb25zZTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIGdlbmVyYXRlIG5ldyBBcGlHYXRld2F5TWV0aG9kUmVzcG9uc2VcbiAgICAgIG1ldGhvZFJlc3BvbnNlc1ttclByb3BzLnN0YXR1c0NvZGVdID1cbiAgICAgICAgbmV3IGFwaUdhdGV3YXlNZXRob2RSZXNwb25zZS5BcGlHYXRld2F5TWV0aG9kUmVzcG9uc2UodGhpcywgaWQsIHtcbiAgICAgICAgICByZXN0QXBpSWQ6IHRoaXMuYXBpLnJlc3RBcGlJZCxcbiAgICAgICAgICByZXNvdXJjZUlkOiB0aGlzLnJlc291cmNlLnJlc291cmNlSWQsXG4gICAgICAgICAgaHR0cE1ldGhvZDogdGhpcy5tZXRob2RSZXNvdXJjZS5odHRwTWV0aG9kLFxuICAgICAgICAgIHN0YXR1c0NvZGU6IG1yUHJvcHMuc3RhdHVzQ29kZSxcbiAgICAgICAgICByZXNwb25zZVBhcmFtZXRlcnM6IG1yUHJvcHMucmVzcG9uc2VQYXJhbWV0ZXJzLFxuICAgICAgICAgIHJlc3BvbnNlTW9kZWxzOiB0aGlzLnJlbmRlclJlc3BvbnNlTW9kZWxzKG1yUHJvcHMucmVzcG9uc2VNb2RlbHMpLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBhZGQgaW50ZWdyYXRpb24gcmVzb3VyY2VzXG4gICAgY29uc3QgaW50ZWdyYXRpb25JZCA9IFwiSW50ZWdyYXRpb25cIjtcbiAgICBpZiAodGhpcy5iaW5kUmVzdWx0ICYmICF0aGlzLm5vZGUudHJ5RmluZENoaWxkKGludGVncmF0aW9uSWQpKSB7XG4gICAgICBjb25zdCBpbnRlZ3JhdGlvblJlc291cmNlID1cbiAgICAgICAgbmV3IGFwaUdhdGV3YXlJbnRlZ3JhdGlvbi5BcGlHYXRld2F5SW50ZWdyYXRpb24oXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBpbnRlZ3JhdGlvbklkLFxuICAgICAgICAgIHRoaXMucmVuZGVySW50ZWdyYXRpb24odGhpcy5iaW5kUmVzdWx0KSxcbiAgICAgICAgKTtcbiAgICAgIC8vIGFkZCBpbnRlZ3JhdGlvbiByZXNwb25zZXMgKHdpdGggZGVwZW5kZW5jaWVzIG9uIGludGVncmF0aW9uKVxuICAgICAgdGhpcy5iaW5kUmVzdWx0Lm9wdGlvbnM/LmludGVncmF0aW9uUmVzcG9uc2VzPy5mb3JFYWNoKChpcikgPT4ge1xuICAgICAgICBjb25zdCBpcklkID0gYEludGVncmF0aW9uUmVzcG9uc2Uke2lyLnN0YXR1c0NvZGV9YDtcbiAgICAgICAgaWYgKHRoaXMubm9kZS50cnlGaW5kQ2hpbGQoaXJJZCkpIHJldHVybjtcbiAgICAgICAgbmV3IGFwaUdhdGV3YXlJbnRlZ3JhdGlvblJlc3BvbnNlLkFwaUdhdGV3YXlJbnRlZ3JhdGlvblJlc3BvbnNlKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgaXJJZCxcbiAgICAgICAgICB0aGlzLnJlbmRlckludGVncmF0aW9uUmVzcG9uc2UoXG4gICAgICAgICAgICBpbnRlZ3JhdGlvblJlc291cmNlLFxuICAgICAgICAgICAgaXIsXG4gICAgICAgICAgICBtZXRob2RSZXNwb25zZXMsXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyUmVzcG9uc2VNb2RlbHMoXG4gICAgcmVzcG9uc2VNb2RlbHM6IHsgW2NvbnRlbnRUeXBlOiBzdHJpbmddOiBJTW9kZWwgfSB8IHVuZGVmaW5lZCxcbiAgKTogeyBbY29udGVudFR5cGU6IHN0cmluZ106IHN0cmluZyB9IHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXJlc3BvbnNlTW9kZWxzKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgT2JqZWN0LmVudHJpZXMocmVzcG9uc2VNb2RlbHMpLm1hcCgoW2NvbnRlbnRUeXBlLCBybV0pID0+IFtcbiAgICAgICAgY29udGVudFR5cGUsXG4gICAgICAgIHJtLm1vZGVsSWQsXG4gICAgICBdKSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJJbnRlZ3JhdGlvbihcbiAgICBiaW5kUmVzdWx0OiBJbnRlZ3JhdGlvbkNvbmZpZyxcbiAgKTogYXBpR2F0ZXdheUludGVncmF0aW9uLkFwaUdhdGV3YXlJbnRlZ3JhdGlvbkNvbmZpZyB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IGJpbmRSZXN1bHQub3B0aW9ucyA/PyB7fTtcbiAgICBsZXQgY3JlZGVudGlhbHM6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpZiAob3B0aW9ucy5jcmVkZW50aWFsc1JvbGUpIHtcbiAgICAgIGNyZWRlbnRpYWxzID0gb3B0aW9ucy5jcmVkZW50aWFsc1JvbGUucm9sZUFybjtcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuY3JlZGVudGlhbHNQYXNzdGhyb3VnaCkge1xuICAgICAgY3JlZGVudGlhbHMgPSBBd3NTdGFjay5vZkF3c0NvbnN0cnVjdCh0aGlzKS5mb3JtYXRBcm4oe1xuICAgICAgICBzZXJ2aWNlOiBcImlhbVwiLFxuICAgICAgICByZWdpb246IFwiXCIsXG4gICAgICAgIGFjY291bnQ6IFwiKlwiLFxuICAgICAgICByZXNvdXJjZTogXCJ1c2VyXCIsXG4gICAgICAgIGFybkZvcm1hdDogQXJuRm9ybWF0LlNMQVNIX1JFU09VUkNFX05BTUUsXG4gICAgICAgIHJlc291cmNlTmFtZTogXCIqXCIsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgcmVzdEFwaUlkOiB0aGlzLmFwaS5yZXN0QXBpSWQsXG4gICAgICByZXNvdXJjZUlkOiB0aGlzLnJlc291cmNlLnJlc291cmNlSWQsXG4gICAgICBodHRwTWV0aG9kOiB0aGlzLm1ldGhvZFJlc291cmNlLmh0dHBNZXRob2QsIC8vIEZyb250ZW5kIG1ldGhvZCdzIEhUVFAgdmVyYlxuICAgICAgdHlwZTogYmluZFJlc3VsdC50eXBlLFxuICAgICAgdXJpOiBiaW5kUmVzdWx0LnVyaSxcbiAgICAgIGludGVncmF0aW9uSHR0cE1ldGhvZDogYmluZFJlc3VsdC5pbnRlZ3JhdGlvbkh0dHBNZXRob2QsIC8vIEJhY2tlbmQgbWV0aG9kJ3MgSFRUUCB2ZXJiXG4gICAgICBjYWNoZUtleVBhcmFtZXRlcnM6IG9wdGlvbnMuY2FjaGVLZXlQYXJhbWV0ZXJzLFxuICAgICAgY2FjaGVOYW1lc3BhY2U6IG9wdGlvbnMuY2FjaGVOYW1lc3BhY2UsXG4gICAgICBjb250ZW50SGFuZGxpbmc6IG9wdGlvbnMuY29udGVudEhhbmRsaW5nLFxuICAgICAgcmVxdWVzdFBhcmFtZXRlcnM6IG9wdGlvbnMucmVxdWVzdFBhcmFtZXRlcnMsXG4gICAgICByZXF1ZXN0VGVtcGxhdGVzOiBvcHRpb25zLnJlcXVlc3RUZW1wbGF0ZXMsXG4gICAgICBwYXNzdGhyb3VnaEJlaGF2aW9yOiBvcHRpb25zLnBhc3N0aHJvdWdoQmVoYXZpb3IsXG4gICAgICBjb25uZWN0aW9uVHlwZTogb3B0aW9ucy5jb25uZWN0aW9uVHlwZSxcbiAgICAgIGNvbm5lY3Rpb25JZDogb3B0aW9ucy52cGNMaW5rID8gb3B0aW9ucy52cGNMaW5rLnZwY0xpbmtJZCA6IHVuZGVmaW5lZCxcbiAgICAgIGNyZWRlbnRpYWxzLFxuICAgICAgdGltZW91dE1pbGxpc2Vjb25kczogb3B0aW9ucy50aW1lb3V0Py50b01pbGxpc2Vjb25kcygpLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHJlbmRlckludGVncmF0aW9uUmVzcG9uc2UoXG4gICAgaW50ZWdyYXRpb246IGFwaUdhdGV3YXlJbnRlZ3JhdGlvbi5BcGlHYXRld2F5SW50ZWdyYXRpb24sXG4gICAgaXI6IEludGVncmF0aW9uUmVzcG9uc2UsXG4gICAgbXI6IFJlY29yZDxzdHJpbmcsIGFwaUdhdGV3YXlNZXRob2RSZXNwb25zZS5BcGlHYXRld2F5TWV0aG9kUmVzcG9uc2U+LFxuICApOiBhcGlHYXRld2F5SW50ZWdyYXRpb25SZXNwb25zZS5BcGlHYXRld2F5SW50ZWdyYXRpb25SZXNwb25zZUNvbmZpZyB7XG4gICAgY29uc3QgbWV0aG9kUmVzcG9uc2UgPSBtcltpci5zdGF0dXNDb2RlXTtcbiAgICByZXR1cm4ge1xuICAgICAgcmVzdEFwaUlkOiB0aGlzLmFwaS5yZXN0QXBpSWQsXG4gICAgICByZXNvdXJjZUlkOiB0aGlzLnJlc291cmNlLnJlc291cmNlSWQsXG4gICAgICBodHRwTWV0aG9kOiB0aGlzLm1ldGhvZFJlc291cmNlLmh0dHBNZXRob2QsXG4gICAgICAvLyBUT0RPOiBJcyB0aGlzIGNvcnJlY3QgdG8gbm90IGNyZWF0ZSBhIG1ldGhvZFJlc3BvbnNlP1xuICAgICAgc3RhdHVzQ29kZTogbWV0aG9kUmVzcG9uc2UgPyBtZXRob2RSZXNwb25zZS5zdGF0dXNDb2RlIDogaXIuc3RhdHVzQ29kZSxcbiAgICAgIGNvbnRlbnRIYW5kbGluZzogaXIuY29udGVudEhhbmRsaW5nLFxuICAgICAgcmVzcG9uc2VQYXJhbWV0ZXJzOiBpci5yZXNwb25zZVBhcmFtZXRlcnMsXG4gICAgICByZXNwb25zZVRlbXBsYXRlczogaXIucmVzcG9uc2VUZW1wbGF0ZXMsXG4gICAgICBzZWxlY3Rpb25QYXR0ZXJuOiBpci5zZWxlY3Rpb25QYXR0ZXJuLFxuICAgICAgZGVwZW5kc09uOiBbaW50ZWdyYXRpb25dLFxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGVudW0gQXV0aG9yaXphdGlvblR5cGUge1xuICBOT05FID0gXCJOT05FXCIsXG4gIElBTSA9IFwiQVdTX0lBTVwiLFxuICBDVVNUT00gPSBcIkNVU1RPTVwiLFxuICBDT0dOSVRPID0gXCJDT0dOSVRPX1VTRVJfUE9PTFNcIixcbn1cblxuZnVuY3Rpb24gcGF0aEZvckFybihwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcGF0aC5yZXBsYWNlKC9cXHtbXlxcfV0qXFx9L2csIFwiKlwiKTtcbn1cblxuZnVuY3Rpb24gbWVyZ2VEaWN0czxUPihcbiAgeHM/OiBSZWNvcmQ8c3RyaW5nLCBUPixcbiAgeXM/OiBSZWNvcmQ8c3RyaW5nLCBUPixcbik6IFJlY29yZDxzdHJpbmcsIFQ+IHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIHhzIHx8IHlzID8gT2JqZWN0LmFzc2lnbih4cyA/PyB7fSwgeXMpIDogdW5kZWZpbmVkO1xufVxuIl19
@@ -0,0 +1,28 @@
1
+ import { IModel } from "./model";
2
+ export interface MethodResponse {
3
+ /**
4
+ * The method response's status code, which you map to an IntegrationResponse.
5
+ * Required.
6
+ */
7
+ readonly statusCode: string;
8
+ /**
9
+ * Response parameters that API Gateway sends to the client that called a method.
10
+ * Specify response parameters as key-value pairs (string-to-Boolean maps), with
11
+ * a destination as the key and a Boolean as the value. Specify the destination
12
+ * using the following pattern: method.response.header.name, where the name is a
13
+ * valid, unique header name. The Boolean specifies whether a parameter is required.
14
+ * @default None
15
+ */
16
+ readonly responseParameters?: {
17
+ [destination: string]: boolean;
18
+ };
19
+ /**
20
+ * The resources used for the response's content type. Specify response models as
21
+ * key-value pairs (string-to-string maps), with a content type as the key and a Model
22
+ * resource name as the value.
23
+ * @default None
24
+ */
25
+ readonly responseModels?: {
26
+ [contentType: string]: IModel;
27
+ };
28
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0aG9kcmVzcG9uc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXdzL2NvbXB1dGUvbWV0aG9kcmVzcG9uc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElNb2RlbCB9IGZyb20gXCIuL21vZGVsXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWV0aG9kUmVzcG9uc2Uge1xuICAvKipcbiAgICogVGhlIG1ldGhvZCByZXNwb25zZSdzIHN0YXR1cyBjb2RlLCB3aGljaCB5b3UgbWFwIHRvIGFuIEludGVncmF0aW9uUmVzcG9uc2UuXG4gICAqIFJlcXVpcmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhdHVzQ29kZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZXNwb25zZSBwYXJhbWV0ZXJzIHRoYXQgQVBJIEdhdGV3YXkgc2VuZHMgdG8gdGhlIGNsaWVudCB0aGF0IGNhbGxlZCBhIG1ldGhvZC5cbiAgICogU3BlY2lmeSByZXNwb25zZSBwYXJhbWV0ZXJzIGFzIGtleS12YWx1ZSBwYWlycyAoc3RyaW5nLXRvLUJvb2xlYW4gbWFwcyksIHdpdGhcbiAgICogYSBkZXN0aW5hdGlvbiBhcyB0aGUga2V5IGFuZCBhIEJvb2xlYW4gYXMgdGhlIHZhbHVlLiBTcGVjaWZ5IHRoZSBkZXN0aW5hdGlvblxuICAgKiB1c2luZyB0aGUgZm9sbG93aW5nIHBhdHRlcm46IG1ldGhvZC5yZXNwb25zZS5oZWFkZXIubmFtZSwgd2hlcmUgdGhlIG5hbWUgaXMgYVxuICAgKiB2YWxpZCwgdW5pcXVlIGhlYWRlciBuYW1lLiBUaGUgQm9vbGVhbiBzcGVjaWZpZXMgd2hldGhlciBhIHBhcmFtZXRlciBpcyByZXF1aXJlZC5cbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgcmVzcG9uc2VQYXJhbWV0ZXJzPzogeyBbZGVzdGluYXRpb246IHN0cmluZ106IGJvb2xlYW4gfTtcblxuICAvKipcbiAgICogVGhlIHJlc291cmNlcyB1c2VkIGZvciB0aGUgcmVzcG9uc2UncyBjb250ZW50IHR5cGUuIFNwZWNpZnkgcmVzcG9uc2UgbW9kZWxzIGFzXG4gICAqIGtleS12YWx1ZSBwYWlycyAoc3RyaW5nLXRvLXN0cmluZyBtYXBzKSwgd2l0aCBhIGNvbnRlbnQgdHlwZSBhcyB0aGUga2V5IGFuZCBhIE1vZGVsXG4gICAqIHJlc291cmNlIG5hbWUgYXMgdGhlIHZhbHVlLlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSByZXNwb25zZU1vZGVscz86IHsgW2NvbnRlbnRUeXBlOiBzdHJpbmddOiBJTW9kZWwgfTtcbn1cbiJdfQ==