diff --git a/LICENSE.md b/LICENSE.md
new file mode 100644
--- /dev/null
+++ b/LICENSE.md
@@ -0,0 +1,20 @@
+Copyright (c) 2016 David Reaver
+Copyright (c) 2022 Markus Schirp
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/Listener.hs b/gen/Stratosphere/ElasticLoadBalancingV2/Listener.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/Listener.hs
@@ -0,0 +1,111 @@
+module Stratosphere.ElasticLoadBalancingV2.Listener (
+        module Exports, Listener(..), mkListener
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ElasticLoadBalancingV2.Listener.ActionProperty as Exports
+import {-# SOURCE #-} Stratosphere.ElasticLoadBalancingV2.Listener.CertificateProperty as Exports
+import {-# SOURCE #-} Stratosphere.ElasticLoadBalancingV2.Listener.ListenerAttributeProperty as Exports
+import {-# SOURCE #-} Stratosphere.ElasticLoadBalancingV2.Listener.MutualAuthenticationProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data Listener
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-listener.html>
+    Listener {haddock_workaround_ :: (),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-listener.html#cfn-elasticloadbalancingv2-listener-alpnpolicy>
+              alpnPolicy :: (Prelude.Maybe (ValueList Prelude.Text)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-listener.html#cfn-elasticloadbalancingv2-listener-certificates>
+              certificates :: (Prelude.Maybe [CertificateProperty]),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-listener.html#cfn-elasticloadbalancingv2-listener-defaultactions>
+              defaultActions :: [ActionProperty],
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-listener.html#cfn-elasticloadbalancingv2-listener-listenerattributes>
+              listenerAttributes :: (Prelude.Maybe [ListenerAttributeProperty]),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-listener.html#cfn-elasticloadbalancingv2-listener-loadbalancerarn>
+              loadBalancerArn :: (Value Prelude.Text),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-listener.html#cfn-elasticloadbalancingv2-listener-mutualauthentication>
+              mutualAuthentication :: (Prelude.Maybe MutualAuthenticationProperty),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-listener.html#cfn-elasticloadbalancingv2-listener-port>
+              port :: (Prelude.Maybe (Value Prelude.Integer)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-listener.html#cfn-elasticloadbalancingv2-listener-protocol>
+              protocol :: (Prelude.Maybe (Value Prelude.Text)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-listener.html#cfn-elasticloadbalancingv2-listener-sslpolicy>
+              sslPolicy :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkListener :: [ActionProperty] -> Value Prelude.Text -> Listener
+mkListener defaultActions loadBalancerArn
+  = Listener
+      {haddock_workaround_ = (), defaultActions = defaultActions,
+       loadBalancerArn = loadBalancerArn, alpnPolicy = Prelude.Nothing,
+       certificates = Prelude.Nothing,
+       listenerAttributes = Prelude.Nothing,
+       mutualAuthentication = Prelude.Nothing, port = Prelude.Nothing,
+       protocol = Prelude.Nothing, sslPolicy = Prelude.Nothing}
+instance ToResourceProperties Listener where
+  toResourceProperties Listener {..}
+    = ResourceProperties
+        {awsType = "AWS::ElasticLoadBalancingV2::Listener",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["DefaultActions" JSON..= defaultActions,
+                            "LoadBalancerArn" JSON..= loadBalancerArn]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AlpnPolicy" Prelude.<$> alpnPolicy,
+                               (JSON..=) "Certificates" Prelude.<$> certificates,
+                               (JSON..=) "ListenerAttributes" Prelude.<$> listenerAttributes,
+                               (JSON..=) "MutualAuthentication" Prelude.<$> mutualAuthentication,
+                               (JSON..=) "Port" Prelude.<$> port,
+                               (JSON..=) "Protocol" Prelude.<$> protocol,
+                               (JSON..=) "SslPolicy" Prelude.<$> sslPolicy]))}
+instance JSON.ToJSON Listener where
+  toJSON Listener {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["DefaultActions" JSON..= defaultActions,
+               "LoadBalancerArn" JSON..= loadBalancerArn]
+              (Prelude.catMaybes
+                 [(JSON..=) "AlpnPolicy" Prelude.<$> alpnPolicy,
+                  (JSON..=) "Certificates" Prelude.<$> certificates,
+                  (JSON..=) "ListenerAttributes" Prelude.<$> listenerAttributes,
+                  (JSON..=) "MutualAuthentication" Prelude.<$> mutualAuthentication,
+                  (JSON..=) "Port" Prelude.<$> port,
+                  (JSON..=) "Protocol" Prelude.<$> protocol,
+                  (JSON..=) "SslPolicy" Prelude.<$> sslPolicy])))
+instance Property "AlpnPolicy" Listener where
+  type PropertyType "AlpnPolicy" Listener = ValueList Prelude.Text
+  set newValue Listener {..}
+    = Listener {alpnPolicy = Prelude.pure newValue, ..}
+instance Property "Certificates" Listener where
+  type PropertyType "Certificates" Listener = [CertificateProperty]
+  set newValue Listener {..}
+    = Listener {certificates = Prelude.pure newValue, ..}
+instance Property "DefaultActions" Listener where
+  type PropertyType "DefaultActions" Listener = [ActionProperty]
+  set newValue Listener {..}
+    = Listener {defaultActions = newValue, ..}
+instance Property "ListenerAttributes" Listener where
+  type PropertyType "ListenerAttributes" Listener = [ListenerAttributeProperty]
+  set newValue Listener {..}
+    = Listener {listenerAttributes = Prelude.pure newValue, ..}
+instance Property "LoadBalancerArn" Listener where
+  type PropertyType "LoadBalancerArn" Listener = Value Prelude.Text
+  set newValue Listener {..}
+    = Listener {loadBalancerArn = newValue, ..}
+instance Property "MutualAuthentication" Listener where
+  type PropertyType "MutualAuthentication" Listener = MutualAuthenticationProperty
+  set newValue Listener {..}
+    = Listener {mutualAuthentication = Prelude.pure newValue, ..}
+instance Property "Port" Listener where
+  type PropertyType "Port" Listener = Value Prelude.Integer
+  set newValue Listener {..}
+    = Listener {port = Prelude.pure newValue, ..}
+instance Property "Protocol" Listener where
+  type PropertyType "Protocol" Listener = Value Prelude.Text
+  set newValue Listener {..}
+    = Listener {protocol = Prelude.pure newValue, ..}
+instance Property "SslPolicy" Listener where
+  type PropertyType "SslPolicy" Listener = Value Prelude.Text
+  set newValue Listener {..}
+    = Listener {sslPolicy = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/Listener/ActionProperty.hs b/gen/Stratosphere/ElasticLoadBalancingV2/Listener/ActionProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/Listener/ActionProperty.hs
@@ -0,0 +1,110 @@
+module Stratosphere.ElasticLoadBalancingV2.Listener.ActionProperty (
+        module Exports, ActionProperty(..), mkActionProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ElasticLoadBalancingV2.Listener.AuthenticateCognitoConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.ElasticLoadBalancingV2.Listener.AuthenticateOidcConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.ElasticLoadBalancingV2.Listener.FixedResponseConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.ElasticLoadBalancingV2.Listener.ForwardConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.ElasticLoadBalancingV2.Listener.RedirectConfigProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ActionProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listener-action.html>
+    ActionProperty {haddock_workaround_ :: (),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listener-action.html#cfn-elasticloadbalancingv2-listener-action-authenticatecognitoconfig>
+                    authenticateCognitoConfig :: (Prelude.Maybe AuthenticateCognitoConfigProperty),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listener-action.html#cfn-elasticloadbalancingv2-listener-action-authenticateoidcconfig>
+                    authenticateOidcConfig :: (Prelude.Maybe AuthenticateOidcConfigProperty),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listener-action.html#cfn-elasticloadbalancingv2-listener-action-fixedresponseconfig>
+                    fixedResponseConfig :: (Prelude.Maybe FixedResponseConfigProperty),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listener-action.html#cfn-elasticloadbalancingv2-listener-action-forwardconfig>
+                    forwardConfig :: (Prelude.Maybe ForwardConfigProperty),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listener-action.html#cfn-elasticloadbalancingv2-listener-action-order>
+                    order :: (Prelude.Maybe (Value Prelude.Integer)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listener-action.html#cfn-elasticloadbalancingv2-listener-action-redirectconfig>
+                    redirectConfig :: (Prelude.Maybe RedirectConfigProperty),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listener-action.html#cfn-elasticloadbalancingv2-listener-action-targetgrouparn>
+                    targetGroupArn :: (Prelude.Maybe (Value Prelude.Text)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listener-action.html#cfn-elasticloadbalancingv2-listener-action-type>
+                    type' :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkActionProperty :: Value Prelude.Text -> ActionProperty
+mkActionProperty type'
+  = ActionProperty
+      {haddock_workaround_ = (), type' = type',
+       authenticateCognitoConfig = Prelude.Nothing,
+       authenticateOidcConfig = Prelude.Nothing,
+       fixedResponseConfig = Prelude.Nothing,
+       forwardConfig = Prelude.Nothing, order = Prelude.Nothing,
+       redirectConfig = Prelude.Nothing, targetGroupArn = Prelude.Nothing}
+instance ToResourceProperties ActionProperty where
+  toResourceProperties ActionProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ElasticLoadBalancingV2::Listener.Action",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Type" JSON..= type']
+                           (Prelude.catMaybes
+                              [(JSON..=) "AuthenticateCognitoConfig"
+                                 Prelude.<$> authenticateCognitoConfig,
+                               (JSON..=) "AuthenticateOidcConfig"
+                                 Prelude.<$> authenticateOidcConfig,
+                               (JSON..=) "FixedResponseConfig" Prelude.<$> fixedResponseConfig,
+                               (JSON..=) "ForwardConfig" Prelude.<$> forwardConfig,
+                               (JSON..=) "Order" Prelude.<$> order,
+                               (JSON..=) "RedirectConfig" Prelude.<$> redirectConfig,
+                               (JSON..=) "TargetGroupArn" Prelude.<$> targetGroupArn]))}
+instance JSON.ToJSON ActionProperty where
+  toJSON ActionProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Type" JSON..= type']
+              (Prelude.catMaybes
+                 [(JSON..=) "AuthenticateCognitoConfig"
+                    Prelude.<$> authenticateCognitoConfig,
+                  (JSON..=) "AuthenticateOidcConfig"
+                    Prelude.<$> authenticateOidcConfig,
+                  (JSON..=) "FixedResponseConfig" Prelude.<$> fixedResponseConfig,
+                  (JSON..=) "ForwardConfig" Prelude.<$> forwardConfig,
+                  (JSON..=) "Order" Prelude.<$> order,
+                  (JSON..=) "RedirectConfig" Prelude.<$> redirectConfig,
+                  (JSON..=) "TargetGroupArn" Prelude.<$> targetGroupArn])))
+instance Property "AuthenticateCognitoConfig" ActionProperty where
+  type PropertyType "AuthenticateCognitoConfig" ActionProperty = AuthenticateCognitoConfigProperty
+  set newValue ActionProperty {..}
+    = ActionProperty
+        {authenticateCognitoConfig = Prelude.pure newValue, ..}
+instance Property "AuthenticateOidcConfig" ActionProperty where
+  type PropertyType "AuthenticateOidcConfig" ActionProperty = AuthenticateOidcConfigProperty
+  set newValue ActionProperty {..}
+    = ActionProperty
+        {authenticateOidcConfig = Prelude.pure newValue, ..}
+instance Property "FixedResponseConfig" ActionProperty where
+  type PropertyType "FixedResponseConfig" ActionProperty = FixedResponseConfigProperty
+  set newValue ActionProperty {..}
+    = ActionProperty {fixedResponseConfig = Prelude.pure newValue, ..}
+instance Property "ForwardConfig" ActionProperty where
+  type PropertyType "ForwardConfig" ActionProperty = ForwardConfigProperty
+  set newValue ActionProperty {..}
+    = ActionProperty {forwardConfig = Prelude.pure newValue, ..}
+instance Property "Order" ActionProperty where
+  type PropertyType "Order" ActionProperty = Value Prelude.Integer
+  set newValue ActionProperty {..}
+    = ActionProperty {order = Prelude.pure newValue, ..}
+instance Property "RedirectConfig" ActionProperty where
+  type PropertyType "RedirectConfig" ActionProperty = RedirectConfigProperty
+  set newValue ActionProperty {..}
+    = ActionProperty {redirectConfig = Prelude.pure newValue, ..}
+instance Property "TargetGroupArn" ActionProperty where
+  type PropertyType "TargetGroupArn" ActionProperty = Value Prelude.Text
+  set newValue ActionProperty {..}
+    = ActionProperty {targetGroupArn = Prelude.pure newValue, ..}
+instance Property "Type" ActionProperty where
+  type PropertyType "Type" ActionProperty = Value Prelude.Text
+  set newValue ActionProperty {..}
+    = ActionProperty {type' = newValue, ..}
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/Listener/ActionProperty.hs-boot b/gen/Stratosphere/ElasticLoadBalancingV2/Listener/ActionProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/Listener/ActionProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ElasticLoadBalancingV2.Listener.ActionProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ActionProperty :: Prelude.Type
+instance ToResourceProperties ActionProperty
+instance Prelude.Eq ActionProperty
+instance Prelude.Show ActionProperty
+instance JSON.ToJSON ActionProperty
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/Listener/AuthenticateCognitoConfigProperty.hs b/gen/Stratosphere/ElasticLoadBalancingV2/Listener/AuthenticateCognitoConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/Listener/AuthenticateCognitoConfigProperty.hs
@@ -0,0 +1,117 @@
+module Stratosphere.ElasticLoadBalancingV2.Listener.AuthenticateCognitoConfigProperty (
+        AuthenticateCognitoConfigProperty(..),
+        mkAuthenticateCognitoConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AuthenticateCognitoConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listener-authenticatecognitoconfig.html>
+    AuthenticateCognitoConfigProperty {haddock_workaround_ :: (),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listener-authenticatecognitoconfig.html#cfn-elasticloadbalancingv2-listener-authenticatecognitoconfig-authenticationrequestextraparams>
+                                       authenticationRequestExtraParams :: (Prelude.Maybe (Prelude.Map Prelude.Text (Value Prelude.Text))),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listener-authenticatecognitoconfig.html#cfn-elasticloadbalancingv2-listener-authenticatecognitoconfig-onunauthenticatedrequest>
+                                       onUnauthenticatedRequest :: (Prelude.Maybe (Value Prelude.Text)),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listener-authenticatecognitoconfig.html#cfn-elasticloadbalancingv2-listener-authenticatecognitoconfig-scope>
+                                       scope :: (Prelude.Maybe (Value Prelude.Text)),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listener-authenticatecognitoconfig.html#cfn-elasticloadbalancingv2-listener-authenticatecognitoconfig-sessioncookiename>
+                                       sessionCookieName :: (Prelude.Maybe (Value Prelude.Text)),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listener-authenticatecognitoconfig.html#cfn-elasticloadbalancingv2-listener-authenticatecognitoconfig-sessiontimeout>
+                                       sessionTimeout :: (Prelude.Maybe (Value Prelude.Text)),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listener-authenticatecognitoconfig.html#cfn-elasticloadbalancingv2-listener-authenticatecognitoconfig-userpoolarn>
+                                       userPoolArn :: (Value Prelude.Text),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listener-authenticatecognitoconfig.html#cfn-elasticloadbalancingv2-listener-authenticatecognitoconfig-userpoolclientid>
+                                       userPoolClientId :: (Value Prelude.Text),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listener-authenticatecognitoconfig.html#cfn-elasticloadbalancingv2-listener-authenticatecognitoconfig-userpooldomain>
+                                       userPoolDomain :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAuthenticateCognitoConfigProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Text
+     -> Value Prelude.Text -> AuthenticateCognitoConfigProperty
+mkAuthenticateCognitoConfigProperty
+  userPoolArn
+  userPoolClientId
+  userPoolDomain
+  = AuthenticateCognitoConfigProperty
+      {haddock_workaround_ = (), userPoolArn = userPoolArn,
+       userPoolClientId = userPoolClientId,
+       userPoolDomain = userPoolDomain,
+       authenticationRequestExtraParams = Prelude.Nothing,
+       onUnauthenticatedRequest = Prelude.Nothing,
+       scope = Prelude.Nothing, sessionCookieName = Prelude.Nothing,
+       sessionTimeout = Prelude.Nothing}
+instance ToResourceProperties AuthenticateCognitoConfigProperty where
+  toResourceProperties AuthenticateCognitoConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ElasticLoadBalancingV2::Listener.AuthenticateCognitoConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["UserPoolArn" JSON..= userPoolArn,
+                            "UserPoolClientId" JSON..= userPoolClientId,
+                            "UserPoolDomain" JSON..= userPoolDomain]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AuthenticationRequestExtraParams"
+                                 Prelude.<$> authenticationRequestExtraParams,
+                               (JSON..=) "OnUnauthenticatedRequest"
+                                 Prelude.<$> onUnauthenticatedRequest,
+                               (JSON..=) "Scope" Prelude.<$> scope,
+                               (JSON..=) "SessionCookieName" Prelude.<$> sessionCookieName,
+                               (JSON..=) "SessionTimeout" Prelude.<$> sessionTimeout]))}
+instance JSON.ToJSON AuthenticateCognitoConfigProperty where
+  toJSON AuthenticateCognitoConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["UserPoolArn" JSON..= userPoolArn,
+               "UserPoolClientId" JSON..= userPoolClientId,
+               "UserPoolDomain" JSON..= userPoolDomain]
+              (Prelude.catMaybes
+                 [(JSON..=) "AuthenticationRequestExtraParams"
+                    Prelude.<$> authenticationRequestExtraParams,
+                  (JSON..=) "OnUnauthenticatedRequest"
+                    Prelude.<$> onUnauthenticatedRequest,
+                  (JSON..=) "Scope" Prelude.<$> scope,
+                  (JSON..=) "SessionCookieName" Prelude.<$> sessionCookieName,
+                  (JSON..=) "SessionTimeout" Prelude.<$> sessionTimeout])))
+instance Property "AuthenticationRequestExtraParams" AuthenticateCognitoConfigProperty where
+  type PropertyType "AuthenticationRequestExtraParams" AuthenticateCognitoConfigProperty = Prelude.Map Prelude.Text (Value Prelude.Text)
+  set newValue AuthenticateCognitoConfigProperty {..}
+    = AuthenticateCognitoConfigProperty
+        {authenticationRequestExtraParams = Prelude.pure newValue, ..}
+instance Property "OnUnauthenticatedRequest" AuthenticateCognitoConfigProperty where
+  type PropertyType "OnUnauthenticatedRequest" AuthenticateCognitoConfigProperty = Value Prelude.Text
+  set newValue AuthenticateCognitoConfigProperty {..}
+    = AuthenticateCognitoConfigProperty
+        {onUnauthenticatedRequest = Prelude.pure newValue, ..}
+instance Property "Scope" AuthenticateCognitoConfigProperty where
+  type PropertyType "Scope" AuthenticateCognitoConfigProperty = Value Prelude.Text
+  set newValue AuthenticateCognitoConfigProperty {..}
+    = AuthenticateCognitoConfigProperty
+        {scope = Prelude.pure newValue, ..}
+instance Property "SessionCookieName" AuthenticateCognitoConfigProperty where
+  type PropertyType "SessionCookieName" AuthenticateCognitoConfigProperty = Value Prelude.Text
+  set newValue AuthenticateCognitoConfigProperty {..}
+    = AuthenticateCognitoConfigProperty
+        {sessionCookieName = Prelude.pure newValue, ..}
+instance Property "SessionTimeout" AuthenticateCognitoConfigProperty where
+  type PropertyType "SessionTimeout" AuthenticateCognitoConfigProperty = Value Prelude.Text
+  set newValue AuthenticateCognitoConfigProperty {..}
+    = AuthenticateCognitoConfigProperty
+        {sessionTimeout = Prelude.pure newValue, ..}
+instance Property "UserPoolArn" AuthenticateCognitoConfigProperty where
+  type PropertyType "UserPoolArn" AuthenticateCognitoConfigProperty = Value Prelude.Text
+  set newValue AuthenticateCognitoConfigProperty {..}
+    = AuthenticateCognitoConfigProperty {userPoolArn = newValue, ..}
+instance Property "UserPoolClientId" AuthenticateCognitoConfigProperty where
+  type PropertyType "UserPoolClientId" AuthenticateCognitoConfigProperty = Value Prelude.Text
+  set newValue AuthenticateCognitoConfigProperty {..}
+    = AuthenticateCognitoConfigProperty
+        {userPoolClientId = newValue, ..}
+instance Property "UserPoolDomain" AuthenticateCognitoConfigProperty where
+  type PropertyType "UserPoolDomain" AuthenticateCognitoConfigProperty = Value Prelude.Text
+  set newValue AuthenticateCognitoConfigProperty {..}
+    = AuthenticateCognitoConfigProperty {userPoolDomain = newValue, ..}
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/Listener/AuthenticateCognitoConfigProperty.hs-boot b/gen/Stratosphere/ElasticLoadBalancingV2/Listener/AuthenticateCognitoConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/Listener/AuthenticateCognitoConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ElasticLoadBalancingV2.Listener.AuthenticateCognitoConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AuthenticateCognitoConfigProperty :: Prelude.Type
+instance ToResourceProperties AuthenticateCognitoConfigProperty
+instance Prelude.Eq AuthenticateCognitoConfigProperty
+instance Prelude.Show AuthenticateCognitoConfigProperty
+instance JSON.ToJSON AuthenticateCognitoConfigProperty
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/Listener/AuthenticateOidcConfigProperty.hs b/gen/Stratosphere/ElasticLoadBalancingV2/Listener/AuthenticateOidcConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/Listener/AuthenticateOidcConfigProperty.hs
@@ -0,0 +1,158 @@
+module Stratosphere.ElasticLoadBalancingV2.Listener.AuthenticateOidcConfigProperty (
+        AuthenticateOidcConfigProperty(..),
+        mkAuthenticateOidcConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AuthenticateOidcConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listener-authenticateoidcconfig.html>
+    AuthenticateOidcConfigProperty {haddock_workaround_ :: (),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listener-authenticateoidcconfig.html#cfn-elasticloadbalancingv2-listener-authenticateoidcconfig-authenticationrequestextraparams>
+                                    authenticationRequestExtraParams :: (Prelude.Maybe (Prelude.Map Prelude.Text (Value Prelude.Text))),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listener-authenticateoidcconfig.html#cfn-elasticloadbalancingv2-listener-authenticateoidcconfig-authorizationendpoint>
+                                    authorizationEndpoint :: (Value Prelude.Text),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listener-authenticateoidcconfig.html#cfn-elasticloadbalancingv2-listener-authenticateoidcconfig-clientid>
+                                    clientId :: (Value Prelude.Text),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listener-authenticateoidcconfig.html#cfn-elasticloadbalancingv2-listener-authenticateoidcconfig-clientsecret>
+                                    clientSecret :: (Prelude.Maybe (Value Prelude.Text)),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listener-authenticateoidcconfig.html#cfn-elasticloadbalancingv2-listener-authenticateoidcconfig-issuer>
+                                    issuer :: (Value Prelude.Text),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listener-authenticateoidcconfig.html#cfn-elasticloadbalancingv2-listener-authenticateoidcconfig-onunauthenticatedrequest>
+                                    onUnauthenticatedRequest :: (Prelude.Maybe (Value Prelude.Text)),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listener-authenticateoidcconfig.html#cfn-elasticloadbalancingv2-listener-authenticateoidcconfig-scope>
+                                    scope :: (Prelude.Maybe (Value Prelude.Text)),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listener-authenticateoidcconfig.html#cfn-elasticloadbalancingv2-listener-authenticateoidcconfig-sessioncookiename>
+                                    sessionCookieName :: (Prelude.Maybe (Value Prelude.Text)),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listener-authenticateoidcconfig.html#cfn-elasticloadbalancingv2-listener-authenticateoidcconfig-sessiontimeout>
+                                    sessionTimeout :: (Prelude.Maybe (Value Prelude.Text)),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listener-authenticateoidcconfig.html#cfn-elasticloadbalancingv2-listener-authenticateoidcconfig-tokenendpoint>
+                                    tokenEndpoint :: (Value Prelude.Text),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listener-authenticateoidcconfig.html#cfn-elasticloadbalancingv2-listener-authenticateoidcconfig-useexistingclientsecret>
+                                    useExistingClientSecret :: (Prelude.Maybe (Value Prelude.Bool)),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listener-authenticateoidcconfig.html#cfn-elasticloadbalancingv2-listener-authenticateoidcconfig-userinfoendpoint>
+                                    userInfoEndpoint :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAuthenticateOidcConfigProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Text
+     -> Value Prelude.Text
+        -> Value Prelude.Text
+           -> Value Prelude.Text -> AuthenticateOidcConfigProperty
+mkAuthenticateOidcConfigProperty
+  authorizationEndpoint
+  clientId
+  issuer
+  tokenEndpoint
+  userInfoEndpoint
+  = AuthenticateOidcConfigProperty
+      {haddock_workaround_ = (),
+       authorizationEndpoint = authorizationEndpoint, clientId = clientId,
+       issuer = issuer, tokenEndpoint = tokenEndpoint,
+       userInfoEndpoint = userInfoEndpoint,
+       authenticationRequestExtraParams = Prelude.Nothing,
+       clientSecret = Prelude.Nothing,
+       onUnauthenticatedRequest = Prelude.Nothing,
+       scope = Prelude.Nothing, sessionCookieName = Prelude.Nothing,
+       sessionTimeout = Prelude.Nothing,
+       useExistingClientSecret = Prelude.Nothing}
+instance ToResourceProperties AuthenticateOidcConfigProperty where
+  toResourceProperties AuthenticateOidcConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ElasticLoadBalancingV2::Listener.AuthenticateOidcConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["AuthorizationEndpoint" JSON..= authorizationEndpoint,
+                            "ClientId" JSON..= clientId, "Issuer" JSON..= issuer,
+                            "TokenEndpoint" JSON..= tokenEndpoint,
+                            "UserInfoEndpoint" JSON..= userInfoEndpoint]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AuthenticationRequestExtraParams"
+                                 Prelude.<$> authenticationRequestExtraParams,
+                               (JSON..=) "ClientSecret" Prelude.<$> clientSecret,
+                               (JSON..=) "OnUnauthenticatedRequest"
+                                 Prelude.<$> onUnauthenticatedRequest,
+                               (JSON..=) "Scope" Prelude.<$> scope,
+                               (JSON..=) "SessionCookieName" Prelude.<$> sessionCookieName,
+                               (JSON..=) "SessionTimeout" Prelude.<$> sessionTimeout,
+                               (JSON..=) "UseExistingClientSecret"
+                                 Prelude.<$> useExistingClientSecret]))}
+instance JSON.ToJSON AuthenticateOidcConfigProperty where
+  toJSON AuthenticateOidcConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["AuthorizationEndpoint" JSON..= authorizationEndpoint,
+               "ClientId" JSON..= clientId, "Issuer" JSON..= issuer,
+               "TokenEndpoint" JSON..= tokenEndpoint,
+               "UserInfoEndpoint" JSON..= userInfoEndpoint]
+              (Prelude.catMaybes
+                 [(JSON..=) "AuthenticationRequestExtraParams"
+                    Prelude.<$> authenticationRequestExtraParams,
+                  (JSON..=) "ClientSecret" Prelude.<$> clientSecret,
+                  (JSON..=) "OnUnauthenticatedRequest"
+                    Prelude.<$> onUnauthenticatedRequest,
+                  (JSON..=) "Scope" Prelude.<$> scope,
+                  (JSON..=) "SessionCookieName" Prelude.<$> sessionCookieName,
+                  (JSON..=) "SessionTimeout" Prelude.<$> sessionTimeout,
+                  (JSON..=) "UseExistingClientSecret"
+                    Prelude.<$> useExistingClientSecret])))
+instance Property "AuthenticationRequestExtraParams" AuthenticateOidcConfigProperty where
+  type PropertyType "AuthenticationRequestExtraParams" AuthenticateOidcConfigProperty = Prelude.Map Prelude.Text (Value Prelude.Text)
+  set newValue AuthenticateOidcConfigProperty {..}
+    = AuthenticateOidcConfigProperty
+        {authenticationRequestExtraParams = Prelude.pure newValue, ..}
+instance Property "AuthorizationEndpoint" AuthenticateOidcConfigProperty where
+  type PropertyType "AuthorizationEndpoint" AuthenticateOidcConfigProperty = Value Prelude.Text
+  set newValue AuthenticateOidcConfigProperty {..}
+    = AuthenticateOidcConfigProperty
+        {authorizationEndpoint = newValue, ..}
+instance Property "ClientId" AuthenticateOidcConfigProperty where
+  type PropertyType "ClientId" AuthenticateOidcConfigProperty = Value Prelude.Text
+  set newValue AuthenticateOidcConfigProperty {..}
+    = AuthenticateOidcConfigProperty {clientId = newValue, ..}
+instance Property "ClientSecret" AuthenticateOidcConfigProperty where
+  type PropertyType "ClientSecret" AuthenticateOidcConfigProperty = Value Prelude.Text
+  set newValue AuthenticateOidcConfigProperty {..}
+    = AuthenticateOidcConfigProperty
+        {clientSecret = Prelude.pure newValue, ..}
+instance Property "Issuer" AuthenticateOidcConfigProperty where
+  type PropertyType "Issuer" AuthenticateOidcConfigProperty = Value Prelude.Text
+  set newValue AuthenticateOidcConfigProperty {..}
+    = AuthenticateOidcConfigProperty {issuer = newValue, ..}
+instance Property "OnUnauthenticatedRequest" AuthenticateOidcConfigProperty where
+  type PropertyType "OnUnauthenticatedRequest" AuthenticateOidcConfigProperty = Value Prelude.Text
+  set newValue AuthenticateOidcConfigProperty {..}
+    = AuthenticateOidcConfigProperty
+        {onUnauthenticatedRequest = Prelude.pure newValue, ..}
+instance Property "Scope" AuthenticateOidcConfigProperty where
+  type PropertyType "Scope" AuthenticateOidcConfigProperty = Value Prelude.Text
+  set newValue AuthenticateOidcConfigProperty {..}
+    = AuthenticateOidcConfigProperty
+        {scope = Prelude.pure newValue, ..}
+instance Property "SessionCookieName" AuthenticateOidcConfigProperty where
+  type PropertyType "SessionCookieName" AuthenticateOidcConfigProperty = Value Prelude.Text
+  set newValue AuthenticateOidcConfigProperty {..}
+    = AuthenticateOidcConfigProperty
+        {sessionCookieName = Prelude.pure newValue, ..}
+instance Property "SessionTimeout" AuthenticateOidcConfigProperty where
+  type PropertyType "SessionTimeout" AuthenticateOidcConfigProperty = Value Prelude.Text
+  set newValue AuthenticateOidcConfigProperty {..}
+    = AuthenticateOidcConfigProperty
+        {sessionTimeout = Prelude.pure newValue, ..}
+instance Property "TokenEndpoint" AuthenticateOidcConfigProperty where
+  type PropertyType "TokenEndpoint" AuthenticateOidcConfigProperty = Value Prelude.Text
+  set newValue AuthenticateOidcConfigProperty {..}
+    = AuthenticateOidcConfigProperty {tokenEndpoint = newValue, ..}
+instance Property "UseExistingClientSecret" AuthenticateOidcConfigProperty where
+  type PropertyType "UseExistingClientSecret" AuthenticateOidcConfigProperty = Value Prelude.Bool
+  set newValue AuthenticateOidcConfigProperty {..}
+    = AuthenticateOidcConfigProperty
+        {useExistingClientSecret = Prelude.pure newValue, ..}
+instance Property "UserInfoEndpoint" AuthenticateOidcConfigProperty where
+  type PropertyType "UserInfoEndpoint" AuthenticateOidcConfigProperty = Value Prelude.Text
+  set newValue AuthenticateOidcConfigProperty {..}
+    = AuthenticateOidcConfigProperty {userInfoEndpoint = newValue, ..}
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/Listener/AuthenticateOidcConfigProperty.hs-boot b/gen/Stratosphere/ElasticLoadBalancingV2/Listener/AuthenticateOidcConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/Listener/AuthenticateOidcConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ElasticLoadBalancingV2.Listener.AuthenticateOidcConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AuthenticateOidcConfigProperty :: Prelude.Type
+instance ToResourceProperties AuthenticateOidcConfigProperty
+instance Prelude.Eq AuthenticateOidcConfigProperty
+instance Prelude.Show AuthenticateOidcConfigProperty
+instance JSON.ToJSON AuthenticateOidcConfigProperty
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/Listener/CertificateProperty.hs b/gen/Stratosphere/ElasticLoadBalancingV2/Listener/CertificateProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/Listener/CertificateProperty.hs
@@ -0,0 +1,36 @@
+module Stratosphere.ElasticLoadBalancingV2.Listener.CertificateProperty (
+        CertificateProperty(..), mkCertificateProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CertificateProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listener-certificate.html>
+    CertificateProperty {haddock_workaround_ :: (),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listener-certificate.html#cfn-elasticloadbalancingv2-listener-certificate-certificatearn>
+                         certificateArn :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCertificateProperty :: CertificateProperty
+mkCertificateProperty
+  = CertificateProperty
+      {haddock_workaround_ = (), certificateArn = Prelude.Nothing}
+instance ToResourceProperties CertificateProperty where
+  toResourceProperties CertificateProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ElasticLoadBalancingV2::Listener.Certificate",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "CertificateArn" Prelude.<$> certificateArn])}
+instance JSON.ToJSON CertificateProperty where
+  toJSON CertificateProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "CertificateArn" Prelude.<$> certificateArn]))
+instance Property "CertificateArn" CertificateProperty where
+  type PropertyType "CertificateArn" CertificateProperty = Value Prelude.Text
+  set newValue CertificateProperty {..}
+    = CertificateProperty {certificateArn = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/Listener/CertificateProperty.hs-boot b/gen/Stratosphere/ElasticLoadBalancingV2/Listener/CertificateProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/Listener/CertificateProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ElasticLoadBalancingV2.Listener.CertificateProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CertificateProperty :: Prelude.Type
+instance ToResourceProperties CertificateProperty
+instance Prelude.Eq CertificateProperty
+instance Prelude.Show CertificateProperty
+instance JSON.ToJSON CertificateProperty
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/Listener/FixedResponseConfigProperty.hs b/gen/Stratosphere/ElasticLoadBalancingV2/Listener/FixedResponseConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/Listener/FixedResponseConfigProperty.hs
@@ -0,0 +1,58 @@
+module Stratosphere.ElasticLoadBalancingV2.Listener.FixedResponseConfigProperty (
+        FixedResponseConfigProperty(..), mkFixedResponseConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data FixedResponseConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listener-fixedresponseconfig.html>
+    FixedResponseConfigProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listener-fixedresponseconfig.html#cfn-elasticloadbalancingv2-listener-fixedresponseconfig-contenttype>
+                                 contentType :: (Prelude.Maybe (Value Prelude.Text)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listener-fixedresponseconfig.html#cfn-elasticloadbalancingv2-listener-fixedresponseconfig-messagebody>
+                                 messageBody :: (Prelude.Maybe (Value Prelude.Text)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listener-fixedresponseconfig.html#cfn-elasticloadbalancingv2-listener-fixedresponseconfig-statuscode>
+                                 statusCode :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkFixedResponseConfigProperty ::
+  Value Prelude.Text -> FixedResponseConfigProperty
+mkFixedResponseConfigProperty statusCode
+  = FixedResponseConfigProperty
+      {haddock_workaround_ = (), statusCode = statusCode,
+       contentType = Prelude.Nothing, messageBody = Prelude.Nothing}
+instance ToResourceProperties FixedResponseConfigProperty where
+  toResourceProperties FixedResponseConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ElasticLoadBalancingV2::Listener.FixedResponseConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["StatusCode" JSON..= statusCode]
+                           (Prelude.catMaybes
+                              [(JSON..=) "ContentType" Prelude.<$> contentType,
+                               (JSON..=) "MessageBody" Prelude.<$> messageBody]))}
+instance JSON.ToJSON FixedResponseConfigProperty where
+  toJSON FixedResponseConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["StatusCode" JSON..= statusCode]
+              (Prelude.catMaybes
+                 [(JSON..=) "ContentType" Prelude.<$> contentType,
+                  (JSON..=) "MessageBody" Prelude.<$> messageBody])))
+instance Property "ContentType" FixedResponseConfigProperty where
+  type PropertyType "ContentType" FixedResponseConfigProperty = Value Prelude.Text
+  set newValue FixedResponseConfigProperty {..}
+    = FixedResponseConfigProperty
+        {contentType = Prelude.pure newValue, ..}
+instance Property "MessageBody" FixedResponseConfigProperty where
+  type PropertyType "MessageBody" FixedResponseConfigProperty = Value Prelude.Text
+  set newValue FixedResponseConfigProperty {..}
+    = FixedResponseConfigProperty
+        {messageBody = Prelude.pure newValue, ..}
+instance Property "StatusCode" FixedResponseConfigProperty where
+  type PropertyType "StatusCode" FixedResponseConfigProperty = Value Prelude.Text
+  set newValue FixedResponseConfigProperty {..}
+    = FixedResponseConfigProperty {statusCode = newValue, ..}
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/Listener/FixedResponseConfigProperty.hs-boot b/gen/Stratosphere/ElasticLoadBalancingV2/Listener/FixedResponseConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/Listener/FixedResponseConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ElasticLoadBalancingV2.Listener.FixedResponseConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data FixedResponseConfigProperty :: Prelude.Type
+instance ToResourceProperties FixedResponseConfigProperty
+instance Prelude.Eq FixedResponseConfigProperty
+instance Prelude.Show FixedResponseConfigProperty
+instance JSON.ToJSON FixedResponseConfigProperty
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/Listener/ForwardConfigProperty.hs b/gen/Stratosphere/ElasticLoadBalancingV2/Listener/ForwardConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/Listener/ForwardConfigProperty.hs
@@ -0,0 +1,50 @@
+module Stratosphere.ElasticLoadBalancingV2.Listener.ForwardConfigProperty (
+        module Exports, ForwardConfigProperty(..), mkForwardConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ElasticLoadBalancingV2.Listener.TargetGroupStickinessConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.ElasticLoadBalancingV2.Listener.TargetGroupTupleProperty as Exports
+import Stratosphere.ResourceProperties
+data ForwardConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listener-forwardconfig.html>
+    ForwardConfigProperty {haddock_workaround_ :: (),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listener-forwardconfig.html#cfn-elasticloadbalancingv2-listener-forwardconfig-targetgroupstickinessconfig>
+                           targetGroupStickinessConfig :: (Prelude.Maybe TargetGroupStickinessConfigProperty),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listener-forwardconfig.html#cfn-elasticloadbalancingv2-listener-forwardconfig-targetgroups>
+                           targetGroups :: (Prelude.Maybe [TargetGroupTupleProperty])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkForwardConfigProperty :: ForwardConfigProperty
+mkForwardConfigProperty
+  = ForwardConfigProperty
+      {haddock_workaround_ = (),
+       targetGroupStickinessConfig = Prelude.Nothing,
+       targetGroups = Prelude.Nothing}
+instance ToResourceProperties ForwardConfigProperty where
+  toResourceProperties ForwardConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ElasticLoadBalancingV2::Listener.ForwardConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "TargetGroupStickinessConfig"
+                              Prelude.<$> targetGroupStickinessConfig,
+                            (JSON..=) "TargetGroups" Prelude.<$> targetGroups])}
+instance JSON.ToJSON ForwardConfigProperty where
+  toJSON ForwardConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "TargetGroupStickinessConfig"
+                 Prelude.<$> targetGroupStickinessConfig,
+               (JSON..=) "TargetGroups" Prelude.<$> targetGroups]))
+instance Property "TargetGroupStickinessConfig" ForwardConfigProperty where
+  type PropertyType "TargetGroupStickinessConfig" ForwardConfigProperty = TargetGroupStickinessConfigProperty
+  set newValue ForwardConfigProperty {..}
+    = ForwardConfigProperty
+        {targetGroupStickinessConfig = Prelude.pure newValue, ..}
+instance Property "TargetGroups" ForwardConfigProperty where
+  type PropertyType "TargetGroups" ForwardConfigProperty = [TargetGroupTupleProperty]
+  set newValue ForwardConfigProperty {..}
+    = ForwardConfigProperty {targetGroups = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/Listener/ForwardConfigProperty.hs-boot b/gen/Stratosphere/ElasticLoadBalancingV2/Listener/ForwardConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/Listener/ForwardConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ElasticLoadBalancingV2.Listener.ForwardConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ForwardConfigProperty :: Prelude.Type
+instance ToResourceProperties ForwardConfigProperty
+instance Prelude.Eq ForwardConfigProperty
+instance Prelude.Show ForwardConfigProperty
+instance JSON.ToJSON ForwardConfigProperty
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/Listener/ListenerAttributeProperty.hs b/gen/Stratosphere/ElasticLoadBalancingV2/Listener/ListenerAttributeProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/Listener/ListenerAttributeProperty.hs
@@ -0,0 +1,45 @@
+module Stratosphere.ElasticLoadBalancingV2.Listener.ListenerAttributeProperty (
+        ListenerAttributeProperty(..), mkListenerAttributeProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ListenerAttributeProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listener-listenerattribute.html>
+    ListenerAttributeProperty {haddock_workaround_ :: (),
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listener-listenerattribute.html#cfn-elasticloadbalancingv2-listener-listenerattribute-key>
+                               key :: (Prelude.Maybe (Value Prelude.Text)),
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listener-listenerattribute.html#cfn-elasticloadbalancingv2-listener-listenerattribute-value>
+                               value :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkListenerAttributeProperty :: ListenerAttributeProperty
+mkListenerAttributeProperty
+  = ListenerAttributeProperty
+      {haddock_workaround_ = (), key = Prelude.Nothing,
+       value = Prelude.Nothing}
+instance ToResourceProperties ListenerAttributeProperty where
+  toResourceProperties ListenerAttributeProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ElasticLoadBalancingV2::Listener.ListenerAttribute",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Key" Prelude.<$> key,
+                            (JSON..=) "Value" Prelude.<$> value])}
+instance JSON.ToJSON ListenerAttributeProperty where
+  toJSON ListenerAttributeProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Key" Prelude.<$> key,
+               (JSON..=) "Value" Prelude.<$> value]))
+instance Property "Key" ListenerAttributeProperty where
+  type PropertyType "Key" ListenerAttributeProperty = Value Prelude.Text
+  set newValue ListenerAttributeProperty {..}
+    = ListenerAttributeProperty {key = Prelude.pure newValue, ..}
+instance Property "Value" ListenerAttributeProperty where
+  type PropertyType "Value" ListenerAttributeProperty = Value Prelude.Text
+  set newValue ListenerAttributeProperty {..}
+    = ListenerAttributeProperty {value = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/Listener/ListenerAttributeProperty.hs-boot b/gen/Stratosphere/ElasticLoadBalancingV2/Listener/ListenerAttributeProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/Listener/ListenerAttributeProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ElasticLoadBalancingV2.Listener.ListenerAttributeProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ListenerAttributeProperty :: Prelude.Type
+instance ToResourceProperties ListenerAttributeProperty
+instance Prelude.Eq ListenerAttributeProperty
+instance Prelude.Show ListenerAttributeProperty
+instance JSON.ToJSON ListenerAttributeProperty
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/Listener/MutualAuthenticationProperty.hs b/gen/Stratosphere/ElasticLoadBalancingV2/Listener/MutualAuthenticationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/Listener/MutualAuthenticationProperty.hs
@@ -0,0 +1,70 @@
+module Stratosphere.ElasticLoadBalancingV2.Listener.MutualAuthenticationProperty (
+        MutualAuthenticationProperty(..), mkMutualAuthenticationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data MutualAuthenticationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listener-mutualauthentication.html>
+    MutualAuthenticationProperty {haddock_workaround_ :: (),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listener-mutualauthentication.html#cfn-elasticloadbalancingv2-listener-mutualauthentication-advertisetruststorecanames>
+                                  advertiseTrustStoreCaNames :: (Prelude.Maybe (Value Prelude.Text)),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listener-mutualauthentication.html#cfn-elasticloadbalancingv2-listener-mutualauthentication-ignoreclientcertificateexpiry>
+                                  ignoreClientCertificateExpiry :: (Prelude.Maybe (Value Prelude.Bool)),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listener-mutualauthentication.html#cfn-elasticloadbalancingv2-listener-mutualauthentication-mode>
+                                  mode :: (Prelude.Maybe (Value Prelude.Text)),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listener-mutualauthentication.html#cfn-elasticloadbalancingv2-listener-mutualauthentication-truststorearn>
+                                  trustStoreArn :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkMutualAuthenticationProperty :: MutualAuthenticationProperty
+mkMutualAuthenticationProperty
+  = MutualAuthenticationProperty
+      {haddock_workaround_ = (),
+       advertiseTrustStoreCaNames = Prelude.Nothing,
+       ignoreClientCertificateExpiry = Prelude.Nothing,
+       mode = Prelude.Nothing, trustStoreArn = Prelude.Nothing}
+instance ToResourceProperties MutualAuthenticationProperty where
+  toResourceProperties MutualAuthenticationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ElasticLoadBalancingV2::Listener.MutualAuthentication",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AdvertiseTrustStoreCaNames"
+                              Prelude.<$> advertiseTrustStoreCaNames,
+                            (JSON..=) "IgnoreClientCertificateExpiry"
+                              Prelude.<$> ignoreClientCertificateExpiry,
+                            (JSON..=) "Mode" Prelude.<$> mode,
+                            (JSON..=) "TrustStoreArn" Prelude.<$> trustStoreArn])}
+instance JSON.ToJSON MutualAuthenticationProperty where
+  toJSON MutualAuthenticationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AdvertiseTrustStoreCaNames"
+                 Prelude.<$> advertiseTrustStoreCaNames,
+               (JSON..=) "IgnoreClientCertificateExpiry"
+                 Prelude.<$> ignoreClientCertificateExpiry,
+               (JSON..=) "Mode" Prelude.<$> mode,
+               (JSON..=) "TrustStoreArn" Prelude.<$> trustStoreArn]))
+instance Property "AdvertiseTrustStoreCaNames" MutualAuthenticationProperty where
+  type PropertyType "AdvertiseTrustStoreCaNames" MutualAuthenticationProperty = Value Prelude.Text
+  set newValue MutualAuthenticationProperty {..}
+    = MutualAuthenticationProperty
+        {advertiseTrustStoreCaNames = Prelude.pure newValue, ..}
+instance Property "IgnoreClientCertificateExpiry" MutualAuthenticationProperty where
+  type PropertyType "IgnoreClientCertificateExpiry" MutualAuthenticationProperty = Value Prelude.Bool
+  set newValue MutualAuthenticationProperty {..}
+    = MutualAuthenticationProperty
+        {ignoreClientCertificateExpiry = Prelude.pure newValue, ..}
+instance Property "Mode" MutualAuthenticationProperty where
+  type PropertyType "Mode" MutualAuthenticationProperty = Value Prelude.Text
+  set newValue MutualAuthenticationProperty {..}
+    = MutualAuthenticationProperty {mode = Prelude.pure newValue, ..}
+instance Property "TrustStoreArn" MutualAuthenticationProperty where
+  type PropertyType "TrustStoreArn" MutualAuthenticationProperty = Value Prelude.Text
+  set newValue MutualAuthenticationProperty {..}
+    = MutualAuthenticationProperty
+        {trustStoreArn = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/Listener/MutualAuthenticationProperty.hs-boot b/gen/Stratosphere/ElasticLoadBalancingV2/Listener/MutualAuthenticationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/Listener/MutualAuthenticationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ElasticLoadBalancingV2.Listener.MutualAuthenticationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data MutualAuthenticationProperty :: Prelude.Type
+instance ToResourceProperties MutualAuthenticationProperty
+instance Prelude.Eq MutualAuthenticationProperty
+instance Prelude.Show MutualAuthenticationProperty
+instance JSON.ToJSON MutualAuthenticationProperty
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/Listener/RedirectConfigProperty.hs b/gen/Stratosphere/ElasticLoadBalancingV2/Listener/RedirectConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/Listener/RedirectConfigProperty.hs
@@ -0,0 +1,82 @@
+module Stratosphere.ElasticLoadBalancingV2.Listener.RedirectConfigProperty (
+        RedirectConfigProperty(..), mkRedirectConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data RedirectConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listener-redirectconfig.html>
+    RedirectConfigProperty {haddock_workaround_ :: (),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listener-redirectconfig.html#cfn-elasticloadbalancingv2-listener-redirectconfig-host>
+                            host :: (Prelude.Maybe (Value Prelude.Text)),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listener-redirectconfig.html#cfn-elasticloadbalancingv2-listener-redirectconfig-path>
+                            path :: (Prelude.Maybe (Value Prelude.Text)),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listener-redirectconfig.html#cfn-elasticloadbalancingv2-listener-redirectconfig-port>
+                            port :: (Prelude.Maybe (Value Prelude.Text)),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listener-redirectconfig.html#cfn-elasticloadbalancingv2-listener-redirectconfig-protocol>
+                            protocol :: (Prelude.Maybe (Value Prelude.Text)),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listener-redirectconfig.html#cfn-elasticloadbalancingv2-listener-redirectconfig-query>
+                            query :: (Prelude.Maybe (Value Prelude.Text)),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listener-redirectconfig.html#cfn-elasticloadbalancingv2-listener-redirectconfig-statuscode>
+                            statusCode :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkRedirectConfigProperty ::
+  Value Prelude.Text -> RedirectConfigProperty
+mkRedirectConfigProperty statusCode
+  = RedirectConfigProperty
+      {haddock_workaround_ = (), statusCode = statusCode,
+       host = Prelude.Nothing, path = Prelude.Nothing,
+       port = Prelude.Nothing, protocol = Prelude.Nothing,
+       query = Prelude.Nothing}
+instance ToResourceProperties RedirectConfigProperty where
+  toResourceProperties RedirectConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ElasticLoadBalancingV2::Listener.RedirectConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["StatusCode" JSON..= statusCode]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Host" Prelude.<$> host,
+                               (JSON..=) "Path" Prelude.<$> path,
+                               (JSON..=) "Port" Prelude.<$> port,
+                               (JSON..=) "Protocol" Prelude.<$> protocol,
+                               (JSON..=) "Query" Prelude.<$> query]))}
+instance JSON.ToJSON RedirectConfigProperty where
+  toJSON RedirectConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["StatusCode" JSON..= statusCode]
+              (Prelude.catMaybes
+                 [(JSON..=) "Host" Prelude.<$> host,
+                  (JSON..=) "Path" Prelude.<$> path,
+                  (JSON..=) "Port" Prelude.<$> port,
+                  (JSON..=) "Protocol" Prelude.<$> protocol,
+                  (JSON..=) "Query" Prelude.<$> query])))
+instance Property "Host" RedirectConfigProperty where
+  type PropertyType "Host" RedirectConfigProperty = Value Prelude.Text
+  set newValue RedirectConfigProperty {..}
+    = RedirectConfigProperty {host = Prelude.pure newValue, ..}
+instance Property "Path" RedirectConfigProperty where
+  type PropertyType "Path" RedirectConfigProperty = Value Prelude.Text
+  set newValue RedirectConfigProperty {..}
+    = RedirectConfigProperty {path = Prelude.pure newValue, ..}
+instance Property "Port" RedirectConfigProperty where
+  type PropertyType "Port" RedirectConfigProperty = Value Prelude.Text
+  set newValue RedirectConfigProperty {..}
+    = RedirectConfigProperty {port = Prelude.pure newValue, ..}
+instance Property "Protocol" RedirectConfigProperty where
+  type PropertyType "Protocol" RedirectConfigProperty = Value Prelude.Text
+  set newValue RedirectConfigProperty {..}
+    = RedirectConfigProperty {protocol = Prelude.pure newValue, ..}
+instance Property "Query" RedirectConfigProperty where
+  type PropertyType "Query" RedirectConfigProperty = Value Prelude.Text
+  set newValue RedirectConfigProperty {..}
+    = RedirectConfigProperty {query = Prelude.pure newValue, ..}
+instance Property "StatusCode" RedirectConfigProperty where
+  type PropertyType "StatusCode" RedirectConfigProperty = Value Prelude.Text
+  set newValue RedirectConfigProperty {..}
+    = RedirectConfigProperty {statusCode = newValue, ..}
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/Listener/RedirectConfigProperty.hs-boot b/gen/Stratosphere/ElasticLoadBalancingV2/Listener/RedirectConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/Listener/RedirectConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ElasticLoadBalancingV2.Listener.RedirectConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data RedirectConfigProperty :: Prelude.Type
+instance ToResourceProperties RedirectConfigProperty
+instance Prelude.Eq RedirectConfigProperty
+instance Prelude.Show RedirectConfigProperty
+instance JSON.ToJSON RedirectConfigProperty
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/Listener/TargetGroupStickinessConfigProperty.hs b/gen/Stratosphere/ElasticLoadBalancingV2/Listener/TargetGroupStickinessConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/Listener/TargetGroupStickinessConfigProperty.hs
@@ -0,0 +1,49 @@
+module Stratosphere.ElasticLoadBalancingV2.Listener.TargetGroupStickinessConfigProperty (
+        TargetGroupStickinessConfigProperty(..),
+        mkTargetGroupStickinessConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data TargetGroupStickinessConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listener-targetgroupstickinessconfig.html>
+    TargetGroupStickinessConfigProperty {haddock_workaround_ :: (),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listener-targetgroupstickinessconfig.html#cfn-elasticloadbalancingv2-listener-targetgroupstickinessconfig-durationseconds>
+                                         durationSeconds :: (Prelude.Maybe (Value Prelude.Integer)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listener-targetgroupstickinessconfig.html#cfn-elasticloadbalancingv2-listener-targetgroupstickinessconfig-enabled>
+                                         enabled :: (Prelude.Maybe (Value Prelude.Bool))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTargetGroupStickinessConfigProperty ::
+  TargetGroupStickinessConfigProperty
+mkTargetGroupStickinessConfigProperty
+  = TargetGroupStickinessConfigProperty
+      {haddock_workaround_ = (), durationSeconds = Prelude.Nothing,
+       enabled = Prelude.Nothing}
+instance ToResourceProperties TargetGroupStickinessConfigProperty where
+  toResourceProperties TargetGroupStickinessConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ElasticLoadBalancingV2::Listener.TargetGroupStickinessConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "DurationSeconds" Prelude.<$> durationSeconds,
+                            (JSON..=) "Enabled" Prelude.<$> enabled])}
+instance JSON.ToJSON TargetGroupStickinessConfigProperty where
+  toJSON TargetGroupStickinessConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "DurationSeconds" Prelude.<$> durationSeconds,
+               (JSON..=) "Enabled" Prelude.<$> enabled]))
+instance Property "DurationSeconds" TargetGroupStickinessConfigProperty where
+  type PropertyType "DurationSeconds" TargetGroupStickinessConfigProperty = Value Prelude.Integer
+  set newValue TargetGroupStickinessConfigProperty {..}
+    = TargetGroupStickinessConfigProperty
+        {durationSeconds = Prelude.pure newValue, ..}
+instance Property "Enabled" TargetGroupStickinessConfigProperty where
+  type PropertyType "Enabled" TargetGroupStickinessConfigProperty = Value Prelude.Bool
+  set newValue TargetGroupStickinessConfigProperty {..}
+    = TargetGroupStickinessConfigProperty
+        {enabled = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/Listener/TargetGroupStickinessConfigProperty.hs-boot b/gen/Stratosphere/ElasticLoadBalancingV2/Listener/TargetGroupStickinessConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/Listener/TargetGroupStickinessConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ElasticLoadBalancingV2.Listener.TargetGroupStickinessConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data TargetGroupStickinessConfigProperty :: Prelude.Type
+instance ToResourceProperties TargetGroupStickinessConfigProperty
+instance Prelude.Eq TargetGroupStickinessConfigProperty
+instance Prelude.Show TargetGroupStickinessConfigProperty
+instance JSON.ToJSON TargetGroupStickinessConfigProperty
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/Listener/TargetGroupTupleProperty.hs b/gen/Stratosphere/ElasticLoadBalancingV2/Listener/TargetGroupTupleProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/Listener/TargetGroupTupleProperty.hs
@@ -0,0 +1,46 @@
+module Stratosphere.ElasticLoadBalancingV2.Listener.TargetGroupTupleProperty (
+        TargetGroupTupleProperty(..), mkTargetGroupTupleProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data TargetGroupTupleProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listener-targetgrouptuple.html>
+    TargetGroupTupleProperty {haddock_workaround_ :: (),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listener-targetgrouptuple.html#cfn-elasticloadbalancingv2-listener-targetgrouptuple-targetgrouparn>
+                              targetGroupArn :: (Prelude.Maybe (Value Prelude.Text)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listener-targetgrouptuple.html#cfn-elasticloadbalancingv2-listener-targetgrouptuple-weight>
+                              weight :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTargetGroupTupleProperty :: TargetGroupTupleProperty
+mkTargetGroupTupleProperty
+  = TargetGroupTupleProperty
+      {haddock_workaround_ = (), targetGroupArn = Prelude.Nothing,
+       weight = Prelude.Nothing}
+instance ToResourceProperties TargetGroupTupleProperty where
+  toResourceProperties TargetGroupTupleProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ElasticLoadBalancingV2::Listener.TargetGroupTuple",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "TargetGroupArn" Prelude.<$> targetGroupArn,
+                            (JSON..=) "Weight" Prelude.<$> weight])}
+instance JSON.ToJSON TargetGroupTupleProperty where
+  toJSON TargetGroupTupleProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "TargetGroupArn" Prelude.<$> targetGroupArn,
+               (JSON..=) "Weight" Prelude.<$> weight]))
+instance Property "TargetGroupArn" TargetGroupTupleProperty where
+  type PropertyType "TargetGroupArn" TargetGroupTupleProperty = Value Prelude.Text
+  set newValue TargetGroupTupleProperty {..}
+    = TargetGroupTupleProperty
+        {targetGroupArn = Prelude.pure newValue, ..}
+instance Property "Weight" TargetGroupTupleProperty where
+  type PropertyType "Weight" TargetGroupTupleProperty = Value Prelude.Integer
+  set newValue TargetGroupTupleProperty {..}
+    = TargetGroupTupleProperty {weight = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/Listener/TargetGroupTupleProperty.hs-boot b/gen/Stratosphere/ElasticLoadBalancingV2/Listener/TargetGroupTupleProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/Listener/TargetGroupTupleProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ElasticLoadBalancingV2.Listener.TargetGroupTupleProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data TargetGroupTupleProperty :: Prelude.Type
+instance ToResourceProperties TargetGroupTupleProperty
+instance Prelude.Eq TargetGroupTupleProperty
+instance Prelude.Show TargetGroupTupleProperty
+instance JSON.ToJSON TargetGroupTupleProperty
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/ListenerCertificate.hs b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerCertificate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerCertificate.hs
@@ -0,0 +1,43 @@
+module Stratosphere.ElasticLoadBalancingV2.ListenerCertificate (
+        module Exports, ListenerCertificate(..), mkListenerCertificate
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ElasticLoadBalancingV2.ListenerCertificate.CertificateProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ListenerCertificate
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-listenercertificate.html>
+    ListenerCertificate {haddock_workaround_ :: (),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-listenercertificate.html#cfn-elasticloadbalancingv2-listenercertificate-certificates>
+                         certificates :: [CertificateProperty],
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-listenercertificate.html#cfn-elasticloadbalancingv2-listenercertificate-listenerarn>
+                         listenerArn :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkListenerCertificate ::
+  [CertificateProperty] -> Value Prelude.Text -> ListenerCertificate
+mkListenerCertificate certificates listenerArn
+  = ListenerCertificate
+      {haddock_workaround_ = (), certificates = certificates,
+       listenerArn = listenerArn}
+instance ToResourceProperties ListenerCertificate where
+  toResourceProperties ListenerCertificate {..}
+    = ResourceProperties
+        {awsType = "AWS::ElasticLoadBalancingV2::ListenerCertificate",
+         supportsTags = Prelude.False,
+         properties = ["Certificates" JSON..= certificates,
+                       "ListenerArn" JSON..= listenerArn]}
+instance JSON.ToJSON ListenerCertificate where
+  toJSON ListenerCertificate {..}
+    = JSON.object
+        ["Certificates" JSON..= certificates,
+         "ListenerArn" JSON..= listenerArn]
+instance Property "Certificates" ListenerCertificate where
+  type PropertyType "Certificates" ListenerCertificate = [CertificateProperty]
+  set newValue ListenerCertificate {..}
+    = ListenerCertificate {certificates = newValue, ..}
+instance Property "ListenerArn" ListenerCertificate where
+  type PropertyType "ListenerArn" ListenerCertificate = Value Prelude.Text
+  set newValue ListenerCertificate {..}
+    = ListenerCertificate {listenerArn = newValue, ..}
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/ListenerCertificate/CertificateProperty.hs b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerCertificate/CertificateProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerCertificate/CertificateProperty.hs
@@ -0,0 +1,36 @@
+module Stratosphere.ElasticLoadBalancingV2.ListenerCertificate.CertificateProperty (
+        CertificateProperty(..), mkCertificateProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CertificateProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listener-certificates.html>
+    CertificateProperty {haddock_workaround_ :: (),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listener-certificates.html#cfn-elasticloadbalancingv2-listener-certificates-certificatearn>
+                         certificateArn :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCertificateProperty :: CertificateProperty
+mkCertificateProperty
+  = CertificateProperty
+      {haddock_workaround_ = (), certificateArn = Prelude.Nothing}
+instance ToResourceProperties CertificateProperty where
+  toResourceProperties CertificateProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ElasticLoadBalancingV2::ListenerCertificate.Certificate",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "CertificateArn" Prelude.<$> certificateArn])}
+instance JSON.ToJSON CertificateProperty where
+  toJSON CertificateProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "CertificateArn" Prelude.<$> certificateArn]))
+instance Property "CertificateArn" CertificateProperty where
+  type PropertyType "CertificateArn" CertificateProperty = Value Prelude.Text
+  set newValue CertificateProperty {..}
+    = CertificateProperty {certificateArn = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/ListenerCertificate/CertificateProperty.hs-boot b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerCertificate/CertificateProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerCertificate/CertificateProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ElasticLoadBalancingV2.ListenerCertificate.CertificateProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CertificateProperty :: Prelude.Type
+instance ToResourceProperties CertificateProperty
+instance Prelude.Eq CertificateProperty
+instance Prelude.Show CertificateProperty
+instance JSON.ToJSON CertificateProperty
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule.hs b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule.hs
@@ -0,0 +1,75 @@
+module Stratosphere.ElasticLoadBalancingV2.ListenerRule (
+        module Exports, ListenerRule(..), mkListenerRule
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ElasticLoadBalancingV2.ListenerRule.ActionProperty as Exports
+import {-# SOURCE #-} Stratosphere.ElasticLoadBalancingV2.ListenerRule.RuleConditionProperty as Exports
+import {-# SOURCE #-} Stratosphere.ElasticLoadBalancingV2.ListenerRule.TransformProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ListenerRule
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-listenerrule.html>
+    ListenerRule {haddock_workaround_ :: (),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-listenerrule.html#cfn-elasticloadbalancingv2-listenerrule-actions>
+                  actions :: [ActionProperty],
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-listenerrule.html#cfn-elasticloadbalancingv2-listenerrule-conditions>
+                  conditions :: [RuleConditionProperty],
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-listenerrule.html#cfn-elasticloadbalancingv2-listenerrule-listenerarn>
+                  listenerArn :: (Prelude.Maybe (Value Prelude.Text)),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-listenerrule.html#cfn-elasticloadbalancingv2-listenerrule-priority>
+                  priority :: (Value Prelude.Integer),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-listenerrule.html#cfn-elasticloadbalancingv2-listenerrule-transforms>
+                  transforms :: (Prelude.Maybe [TransformProperty])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkListenerRule ::
+  [ActionProperty]
+  -> [RuleConditionProperty] -> Value Prelude.Integer -> ListenerRule
+mkListenerRule actions conditions priority
+  = ListenerRule
+      {haddock_workaround_ = (), actions = actions,
+       conditions = conditions, priority = priority,
+       listenerArn = Prelude.Nothing, transforms = Prelude.Nothing}
+instance ToResourceProperties ListenerRule where
+  toResourceProperties ListenerRule {..}
+    = ResourceProperties
+        {awsType = "AWS::ElasticLoadBalancingV2::ListenerRule",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Actions" JSON..= actions, "Conditions" JSON..= conditions,
+                            "Priority" JSON..= priority]
+                           (Prelude.catMaybes
+                              [(JSON..=) "ListenerArn" Prelude.<$> listenerArn,
+                               (JSON..=) "Transforms" Prelude.<$> transforms]))}
+instance JSON.ToJSON ListenerRule where
+  toJSON ListenerRule {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Actions" JSON..= actions, "Conditions" JSON..= conditions,
+               "Priority" JSON..= priority]
+              (Prelude.catMaybes
+                 [(JSON..=) "ListenerArn" Prelude.<$> listenerArn,
+                  (JSON..=) "Transforms" Prelude.<$> transforms])))
+instance Property "Actions" ListenerRule where
+  type PropertyType "Actions" ListenerRule = [ActionProperty]
+  set newValue ListenerRule {..}
+    = ListenerRule {actions = newValue, ..}
+instance Property "Conditions" ListenerRule where
+  type PropertyType "Conditions" ListenerRule = [RuleConditionProperty]
+  set newValue ListenerRule {..}
+    = ListenerRule {conditions = newValue, ..}
+instance Property "ListenerArn" ListenerRule where
+  type PropertyType "ListenerArn" ListenerRule = Value Prelude.Text
+  set newValue ListenerRule {..}
+    = ListenerRule {listenerArn = Prelude.pure newValue, ..}
+instance Property "Priority" ListenerRule where
+  type PropertyType "Priority" ListenerRule = Value Prelude.Integer
+  set newValue ListenerRule {..}
+    = ListenerRule {priority = newValue, ..}
+instance Property "Transforms" ListenerRule where
+  type PropertyType "Transforms" ListenerRule = [TransformProperty]
+  set newValue ListenerRule {..}
+    = ListenerRule {transforms = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/ActionProperty.hs b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/ActionProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/ActionProperty.hs
@@ -0,0 +1,110 @@
+module Stratosphere.ElasticLoadBalancingV2.ListenerRule.ActionProperty (
+        module Exports, ActionProperty(..), mkActionProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ElasticLoadBalancingV2.ListenerRule.AuthenticateCognitoConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.ElasticLoadBalancingV2.ListenerRule.AuthenticateOidcConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.ElasticLoadBalancingV2.ListenerRule.FixedResponseConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.ElasticLoadBalancingV2.ListenerRule.ForwardConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.ElasticLoadBalancingV2.ListenerRule.RedirectConfigProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ActionProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-action.html>
+    ActionProperty {haddock_workaround_ :: (),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-action.html#cfn-elasticloadbalancingv2-listenerrule-action-authenticatecognitoconfig>
+                    authenticateCognitoConfig :: (Prelude.Maybe AuthenticateCognitoConfigProperty),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-action.html#cfn-elasticloadbalancingv2-listenerrule-action-authenticateoidcconfig>
+                    authenticateOidcConfig :: (Prelude.Maybe AuthenticateOidcConfigProperty),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-action.html#cfn-elasticloadbalancingv2-listenerrule-action-fixedresponseconfig>
+                    fixedResponseConfig :: (Prelude.Maybe FixedResponseConfigProperty),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-action.html#cfn-elasticloadbalancingv2-listenerrule-action-forwardconfig>
+                    forwardConfig :: (Prelude.Maybe ForwardConfigProperty),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-action.html#cfn-elasticloadbalancingv2-listenerrule-action-order>
+                    order :: (Prelude.Maybe (Value Prelude.Integer)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-action.html#cfn-elasticloadbalancingv2-listenerrule-action-redirectconfig>
+                    redirectConfig :: (Prelude.Maybe RedirectConfigProperty),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-action.html#cfn-elasticloadbalancingv2-listenerrule-action-targetgrouparn>
+                    targetGroupArn :: (Prelude.Maybe (Value Prelude.Text)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-action.html#cfn-elasticloadbalancingv2-listenerrule-action-type>
+                    type' :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkActionProperty :: Value Prelude.Text -> ActionProperty
+mkActionProperty type'
+  = ActionProperty
+      {haddock_workaround_ = (), type' = type',
+       authenticateCognitoConfig = Prelude.Nothing,
+       authenticateOidcConfig = Prelude.Nothing,
+       fixedResponseConfig = Prelude.Nothing,
+       forwardConfig = Prelude.Nothing, order = Prelude.Nothing,
+       redirectConfig = Prelude.Nothing, targetGroupArn = Prelude.Nothing}
+instance ToResourceProperties ActionProperty where
+  toResourceProperties ActionProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ElasticLoadBalancingV2::ListenerRule.Action",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Type" JSON..= type']
+                           (Prelude.catMaybes
+                              [(JSON..=) "AuthenticateCognitoConfig"
+                                 Prelude.<$> authenticateCognitoConfig,
+                               (JSON..=) "AuthenticateOidcConfig"
+                                 Prelude.<$> authenticateOidcConfig,
+                               (JSON..=) "FixedResponseConfig" Prelude.<$> fixedResponseConfig,
+                               (JSON..=) "ForwardConfig" Prelude.<$> forwardConfig,
+                               (JSON..=) "Order" Prelude.<$> order,
+                               (JSON..=) "RedirectConfig" Prelude.<$> redirectConfig,
+                               (JSON..=) "TargetGroupArn" Prelude.<$> targetGroupArn]))}
+instance JSON.ToJSON ActionProperty where
+  toJSON ActionProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Type" JSON..= type']
+              (Prelude.catMaybes
+                 [(JSON..=) "AuthenticateCognitoConfig"
+                    Prelude.<$> authenticateCognitoConfig,
+                  (JSON..=) "AuthenticateOidcConfig"
+                    Prelude.<$> authenticateOidcConfig,
+                  (JSON..=) "FixedResponseConfig" Prelude.<$> fixedResponseConfig,
+                  (JSON..=) "ForwardConfig" Prelude.<$> forwardConfig,
+                  (JSON..=) "Order" Prelude.<$> order,
+                  (JSON..=) "RedirectConfig" Prelude.<$> redirectConfig,
+                  (JSON..=) "TargetGroupArn" Prelude.<$> targetGroupArn])))
+instance Property "AuthenticateCognitoConfig" ActionProperty where
+  type PropertyType "AuthenticateCognitoConfig" ActionProperty = AuthenticateCognitoConfigProperty
+  set newValue ActionProperty {..}
+    = ActionProperty
+        {authenticateCognitoConfig = Prelude.pure newValue, ..}
+instance Property "AuthenticateOidcConfig" ActionProperty where
+  type PropertyType "AuthenticateOidcConfig" ActionProperty = AuthenticateOidcConfigProperty
+  set newValue ActionProperty {..}
+    = ActionProperty
+        {authenticateOidcConfig = Prelude.pure newValue, ..}
+instance Property "FixedResponseConfig" ActionProperty where
+  type PropertyType "FixedResponseConfig" ActionProperty = FixedResponseConfigProperty
+  set newValue ActionProperty {..}
+    = ActionProperty {fixedResponseConfig = Prelude.pure newValue, ..}
+instance Property "ForwardConfig" ActionProperty where
+  type PropertyType "ForwardConfig" ActionProperty = ForwardConfigProperty
+  set newValue ActionProperty {..}
+    = ActionProperty {forwardConfig = Prelude.pure newValue, ..}
+instance Property "Order" ActionProperty where
+  type PropertyType "Order" ActionProperty = Value Prelude.Integer
+  set newValue ActionProperty {..}
+    = ActionProperty {order = Prelude.pure newValue, ..}
+instance Property "RedirectConfig" ActionProperty where
+  type PropertyType "RedirectConfig" ActionProperty = RedirectConfigProperty
+  set newValue ActionProperty {..}
+    = ActionProperty {redirectConfig = Prelude.pure newValue, ..}
+instance Property "TargetGroupArn" ActionProperty where
+  type PropertyType "TargetGroupArn" ActionProperty = Value Prelude.Text
+  set newValue ActionProperty {..}
+    = ActionProperty {targetGroupArn = Prelude.pure newValue, ..}
+instance Property "Type" ActionProperty where
+  type PropertyType "Type" ActionProperty = Value Prelude.Text
+  set newValue ActionProperty {..}
+    = ActionProperty {type' = newValue, ..}
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/ActionProperty.hs-boot b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/ActionProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/ActionProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ElasticLoadBalancingV2.ListenerRule.ActionProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ActionProperty :: Prelude.Type
+instance ToResourceProperties ActionProperty
+instance Prelude.Eq ActionProperty
+instance Prelude.Show ActionProperty
+instance JSON.ToJSON ActionProperty
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/AuthenticateCognitoConfigProperty.hs b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/AuthenticateCognitoConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/AuthenticateCognitoConfigProperty.hs
@@ -0,0 +1,117 @@
+module Stratosphere.ElasticLoadBalancingV2.ListenerRule.AuthenticateCognitoConfigProperty (
+        AuthenticateCognitoConfigProperty(..),
+        mkAuthenticateCognitoConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AuthenticateCognitoConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-authenticatecognitoconfig.html>
+    AuthenticateCognitoConfigProperty {haddock_workaround_ :: (),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-authenticatecognitoconfig.html#cfn-elasticloadbalancingv2-listenerrule-authenticatecognitoconfig-authenticationrequestextraparams>
+                                       authenticationRequestExtraParams :: (Prelude.Maybe (Prelude.Map Prelude.Text (Value Prelude.Text))),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-authenticatecognitoconfig.html#cfn-elasticloadbalancingv2-listenerrule-authenticatecognitoconfig-onunauthenticatedrequest>
+                                       onUnauthenticatedRequest :: (Prelude.Maybe (Value Prelude.Text)),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-authenticatecognitoconfig.html#cfn-elasticloadbalancingv2-listenerrule-authenticatecognitoconfig-scope>
+                                       scope :: (Prelude.Maybe (Value Prelude.Text)),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-authenticatecognitoconfig.html#cfn-elasticloadbalancingv2-listenerrule-authenticatecognitoconfig-sessioncookiename>
+                                       sessionCookieName :: (Prelude.Maybe (Value Prelude.Text)),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-authenticatecognitoconfig.html#cfn-elasticloadbalancingv2-listenerrule-authenticatecognitoconfig-sessiontimeout>
+                                       sessionTimeout :: (Prelude.Maybe (Value Prelude.Integer)),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-authenticatecognitoconfig.html#cfn-elasticloadbalancingv2-listenerrule-authenticatecognitoconfig-userpoolarn>
+                                       userPoolArn :: (Value Prelude.Text),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-authenticatecognitoconfig.html#cfn-elasticloadbalancingv2-listenerrule-authenticatecognitoconfig-userpoolclientid>
+                                       userPoolClientId :: (Value Prelude.Text),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-authenticatecognitoconfig.html#cfn-elasticloadbalancingv2-listenerrule-authenticatecognitoconfig-userpooldomain>
+                                       userPoolDomain :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAuthenticateCognitoConfigProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Text
+     -> Value Prelude.Text -> AuthenticateCognitoConfigProperty
+mkAuthenticateCognitoConfigProperty
+  userPoolArn
+  userPoolClientId
+  userPoolDomain
+  = AuthenticateCognitoConfigProperty
+      {haddock_workaround_ = (), userPoolArn = userPoolArn,
+       userPoolClientId = userPoolClientId,
+       userPoolDomain = userPoolDomain,
+       authenticationRequestExtraParams = Prelude.Nothing,
+       onUnauthenticatedRequest = Prelude.Nothing,
+       scope = Prelude.Nothing, sessionCookieName = Prelude.Nothing,
+       sessionTimeout = Prelude.Nothing}
+instance ToResourceProperties AuthenticateCognitoConfigProperty where
+  toResourceProperties AuthenticateCognitoConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ElasticLoadBalancingV2::ListenerRule.AuthenticateCognitoConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["UserPoolArn" JSON..= userPoolArn,
+                            "UserPoolClientId" JSON..= userPoolClientId,
+                            "UserPoolDomain" JSON..= userPoolDomain]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AuthenticationRequestExtraParams"
+                                 Prelude.<$> authenticationRequestExtraParams,
+                               (JSON..=) "OnUnauthenticatedRequest"
+                                 Prelude.<$> onUnauthenticatedRequest,
+                               (JSON..=) "Scope" Prelude.<$> scope,
+                               (JSON..=) "SessionCookieName" Prelude.<$> sessionCookieName,
+                               (JSON..=) "SessionTimeout" Prelude.<$> sessionTimeout]))}
+instance JSON.ToJSON AuthenticateCognitoConfigProperty where
+  toJSON AuthenticateCognitoConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["UserPoolArn" JSON..= userPoolArn,
+               "UserPoolClientId" JSON..= userPoolClientId,
+               "UserPoolDomain" JSON..= userPoolDomain]
+              (Prelude.catMaybes
+                 [(JSON..=) "AuthenticationRequestExtraParams"
+                    Prelude.<$> authenticationRequestExtraParams,
+                  (JSON..=) "OnUnauthenticatedRequest"
+                    Prelude.<$> onUnauthenticatedRequest,
+                  (JSON..=) "Scope" Prelude.<$> scope,
+                  (JSON..=) "SessionCookieName" Prelude.<$> sessionCookieName,
+                  (JSON..=) "SessionTimeout" Prelude.<$> sessionTimeout])))
+instance Property "AuthenticationRequestExtraParams" AuthenticateCognitoConfigProperty where
+  type PropertyType "AuthenticationRequestExtraParams" AuthenticateCognitoConfigProperty = Prelude.Map Prelude.Text (Value Prelude.Text)
+  set newValue AuthenticateCognitoConfigProperty {..}
+    = AuthenticateCognitoConfigProperty
+        {authenticationRequestExtraParams = Prelude.pure newValue, ..}
+instance Property "OnUnauthenticatedRequest" AuthenticateCognitoConfigProperty where
+  type PropertyType "OnUnauthenticatedRequest" AuthenticateCognitoConfigProperty = Value Prelude.Text
+  set newValue AuthenticateCognitoConfigProperty {..}
+    = AuthenticateCognitoConfigProperty
+        {onUnauthenticatedRequest = Prelude.pure newValue, ..}
+instance Property "Scope" AuthenticateCognitoConfigProperty where
+  type PropertyType "Scope" AuthenticateCognitoConfigProperty = Value Prelude.Text
+  set newValue AuthenticateCognitoConfigProperty {..}
+    = AuthenticateCognitoConfigProperty
+        {scope = Prelude.pure newValue, ..}
+instance Property "SessionCookieName" AuthenticateCognitoConfigProperty where
+  type PropertyType "SessionCookieName" AuthenticateCognitoConfigProperty = Value Prelude.Text
+  set newValue AuthenticateCognitoConfigProperty {..}
+    = AuthenticateCognitoConfigProperty
+        {sessionCookieName = Prelude.pure newValue, ..}
+instance Property "SessionTimeout" AuthenticateCognitoConfigProperty where
+  type PropertyType "SessionTimeout" AuthenticateCognitoConfigProperty = Value Prelude.Integer
+  set newValue AuthenticateCognitoConfigProperty {..}
+    = AuthenticateCognitoConfigProperty
+        {sessionTimeout = Prelude.pure newValue, ..}
+instance Property "UserPoolArn" AuthenticateCognitoConfigProperty where
+  type PropertyType "UserPoolArn" AuthenticateCognitoConfigProperty = Value Prelude.Text
+  set newValue AuthenticateCognitoConfigProperty {..}
+    = AuthenticateCognitoConfigProperty {userPoolArn = newValue, ..}
+instance Property "UserPoolClientId" AuthenticateCognitoConfigProperty where
+  type PropertyType "UserPoolClientId" AuthenticateCognitoConfigProperty = Value Prelude.Text
+  set newValue AuthenticateCognitoConfigProperty {..}
+    = AuthenticateCognitoConfigProperty
+        {userPoolClientId = newValue, ..}
+instance Property "UserPoolDomain" AuthenticateCognitoConfigProperty where
+  type PropertyType "UserPoolDomain" AuthenticateCognitoConfigProperty = Value Prelude.Text
+  set newValue AuthenticateCognitoConfigProperty {..}
+    = AuthenticateCognitoConfigProperty {userPoolDomain = newValue, ..}
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/AuthenticateCognitoConfigProperty.hs-boot b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/AuthenticateCognitoConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/AuthenticateCognitoConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ElasticLoadBalancingV2.ListenerRule.AuthenticateCognitoConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AuthenticateCognitoConfigProperty :: Prelude.Type
+instance ToResourceProperties AuthenticateCognitoConfigProperty
+instance Prelude.Eq AuthenticateCognitoConfigProperty
+instance Prelude.Show AuthenticateCognitoConfigProperty
+instance JSON.ToJSON AuthenticateCognitoConfigProperty
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/AuthenticateOidcConfigProperty.hs b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/AuthenticateOidcConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/AuthenticateOidcConfigProperty.hs
@@ -0,0 +1,158 @@
+module Stratosphere.ElasticLoadBalancingV2.ListenerRule.AuthenticateOidcConfigProperty (
+        AuthenticateOidcConfigProperty(..),
+        mkAuthenticateOidcConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AuthenticateOidcConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-authenticateoidcconfig.html>
+    AuthenticateOidcConfigProperty {haddock_workaround_ :: (),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-authenticateoidcconfig.html#cfn-elasticloadbalancingv2-listenerrule-authenticateoidcconfig-authenticationrequestextraparams>
+                                    authenticationRequestExtraParams :: (Prelude.Maybe (Prelude.Map Prelude.Text (Value Prelude.Text))),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-authenticateoidcconfig.html#cfn-elasticloadbalancingv2-listenerrule-authenticateoidcconfig-authorizationendpoint>
+                                    authorizationEndpoint :: (Value Prelude.Text),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-authenticateoidcconfig.html#cfn-elasticloadbalancingv2-listenerrule-authenticateoidcconfig-clientid>
+                                    clientId :: (Value Prelude.Text),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-authenticateoidcconfig.html#cfn-elasticloadbalancingv2-listenerrule-authenticateoidcconfig-clientsecret>
+                                    clientSecret :: (Prelude.Maybe (Value Prelude.Text)),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-authenticateoidcconfig.html#cfn-elasticloadbalancingv2-listenerrule-authenticateoidcconfig-issuer>
+                                    issuer :: (Value Prelude.Text),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-authenticateoidcconfig.html#cfn-elasticloadbalancingv2-listenerrule-authenticateoidcconfig-onunauthenticatedrequest>
+                                    onUnauthenticatedRequest :: (Prelude.Maybe (Value Prelude.Text)),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-authenticateoidcconfig.html#cfn-elasticloadbalancingv2-listenerrule-authenticateoidcconfig-scope>
+                                    scope :: (Prelude.Maybe (Value Prelude.Text)),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-authenticateoidcconfig.html#cfn-elasticloadbalancingv2-listenerrule-authenticateoidcconfig-sessioncookiename>
+                                    sessionCookieName :: (Prelude.Maybe (Value Prelude.Text)),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-authenticateoidcconfig.html#cfn-elasticloadbalancingv2-listenerrule-authenticateoidcconfig-sessiontimeout>
+                                    sessionTimeout :: (Prelude.Maybe (Value Prelude.Integer)),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-authenticateoidcconfig.html#cfn-elasticloadbalancingv2-listenerrule-authenticateoidcconfig-tokenendpoint>
+                                    tokenEndpoint :: (Value Prelude.Text),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-authenticateoidcconfig.html#cfn-elasticloadbalancingv2-listenerrule-authenticateoidcconfig-useexistingclientsecret>
+                                    useExistingClientSecret :: (Prelude.Maybe (Value Prelude.Bool)),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-authenticateoidcconfig.html#cfn-elasticloadbalancingv2-listenerrule-authenticateoidcconfig-userinfoendpoint>
+                                    userInfoEndpoint :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAuthenticateOidcConfigProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Text
+     -> Value Prelude.Text
+        -> Value Prelude.Text
+           -> Value Prelude.Text -> AuthenticateOidcConfigProperty
+mkAuthenticateOidcConfigProperty
+  authorizationEndpoint
+  clientId
+  issuer
+  tokenEndpoint
+  userInfoEndpoint
+  = AuthenticateOidcConfigProperty
+      {haddock_workaround_ = (),
+       authorizationEndpoint = authorizationEndpoint, clientId = clientId,
+       issuer = issuer, tokenEndpoint = tokenEndpoint,
+       userInfoEndpoint = userInfoEndpoint,
+       authenticationRequestExtraParams = Prelude.Nothing,
+       clientSecret = Prelude.Nothing,
+       onUnauthenticatedRequest = Prelude.Nothing,
+       scope = Prelude.Nothing, sessionCookieName = Prelude.Nothing,
+       sessionTimeout = Prelude.Nothing,
+       useExistingClientSecret = Prelude.Nothing}
+instance ToResourceProperties AuthenticateOidcConfigProperty where
+  toResourceProperties AuthenticateOidcConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ElasticLoadBalancingV2::ListenerRule.AuthenticateOidcConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["AuthorizationEndpoint" JSON..= authorizationEndpoint,
+                            "ClientId" JSON..= clientId, "Issuer" JSON..= issuer,
+                            "TokenEndpoint" JSON..= tokenEndpoint,
+                            "UserInfoEndpoint" JSON..= userInfoEndpoint]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AuthenticationRequestExtraParams"
+                                 Prelude.<$> authenticationRequestExtraParams,
+                               (JSON..=) "ClientSecret" Prelude.<$> clientSecret,
+                               (JSON..=) "OnUnauthenticatedRequest"
+                                 Prelude.<$> onUnauthenticatedRequest,
+                               (JSON..=) "Scope" Prelude.<$> scope,
+                               (JSON..=) "SessionCookieName" Prelude.<$> sessionCookieName,
+                               (JSON..=) "SessionTimeout" Prelude.<$> sessionTimeout,
+                               (JSON..=) "UseExistingClientSecret"
+                                 Prelude.<$> useExistingClientSecret]))}
+instance JSON.ToJSON AuthenticateOidcConfigProperty where
+  toJSON AuthenticateOidcConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["AuthorizationEndpoint" JSON..= authorizationEndpoint,
+               "ClientId" JSON..= clientId, "Issuer" JSON..= issuer,
+               "TokenEndpoint" JSON..= tokenEndpoint,
+               "UserInfoEndpoint" JSON..= userInfoEndpoint]
+              (Prelude.catMaybes
+                 [(JSON..=) "AuthenticationRequestExtraParams"
+                    Prelude.<$> authenticationRequestExtraParams,
+                  (JSON..=) "ClientSecret" Prelude.<$> clientSecret,
+                  (JSON..=) "OnUnauthenticatedRequest"
+                    Prelude.<$> onUnauthenticatedRequest,
+                  (JSON..=) "Scope" Prelude.<$> scope,
+                  (JSON..=) "SessionCookieName" Prelude.<$> sessionCookieName,
+                  (JSON..=) "SessionTimeout" Prelude.<$> sessionTimeout,
+                  (JSON..=) "UseExistingClientSecret"
+                    Prelude.<$> useExistingClientSecret])))
+instance Property "AuthenticationRequestExtraParams" AuthenticateOidcConfigProperty where
+  type PropertyType "AuthenticationRequestExtraParams" AuthenticateOidcConfigProperty = Prelude.Map Prelude.Text (Value Prelude.Text)
+  set newValue AuthenticateOidcConfigProperty {..}
+    = AuthenticateOidcConfigProperty
+        {authenticationRequestExtraParams = Prelude.pure newValue, ..}
+instance Property "AuthorizationEndpoint" AuthenticateOidcConfigProperty where
+  type PropertyType "AuthorizationEndpoint" AuthenticateOidcConfigProperty = Value Prelude.Text
+  set newValue AuthenticateOidcConfigProperty {..}
+    = AuthenticateOidcConfigProperty
+        {authorizationEndpoint = newValue, ..}
+instance Property "ClientId" AuthenticateOidcConfigProperty where
+  type PropertyType "ClientId" AuthenticateOidcConfigProperty = Value Prelude.Text
+  set newValue AuthenticateOidcConfigProperty {..}
+    = AuthenticateOidcConfigProperty {clientId = newValue, ..}
+instance Property "ClientSecret" AuthenticateOidcConfigProperty where
+  type PropertyType "ClientSecret" AuthenticateOidcConfigProperty = Value Prelude.Text
+  set newValue AuthenticateOidcConfigProperty {..}
+    = AuthenticateOidcConfigProperty
+        {clientSecret = Prelude.pure newValue, ..}
+instance Property "Issuer" AuthenticateOidcConfigProperty where
+  type PropertyType "Issuer" AuthenticateOidcConfigProperty = Value Prelude.Text
+  set newValue AuthenticateOidcConfigProperty {..}
+    = AuthenticateOidcConfigProperty {issuer = newValue, ..}
+instance Property "OnUnauthenticatedRequest" AuthenticateOidcConfigProperty where
+  type PropertyType "OnUnauthenticatedRequest" AuthenticateOidcConfigProperty = Value Prelude.Text
+  set newValue AuthenticateOidcConfigProperty {..}
+    = AuthenticateOidcConfigProperty
+        {onUnauthenticatedRequest = Prelude.pure newValue, ..}
+instance Property "Scope" AuthenticateOidcConfigProperty where
+  type PropertyType "Scope" AuthenticateOidcConfigProperty = Value Prelude.Text
+  set newValue AuthenticateOidcConfigProperty {..}
+    = AuthenticateOidcConfigProperty
+        {scope = Prelude.pure newValue, ..}
+instance Property "SessionCookieName" AuthenticateOidcConfigProperty where
+  type PropertyType "SessionCookieName" AuthenticateOidcConfigProperty = Value Prelude.Text
+  set newValue AuthenticateOidcConfigProperty {..}
+    = AuthenticateOidcConfigProperty
+        {sessionCookieName = Prelude.pure newValue, ..}
+instance Property "SessionTimeout" AuthenticateOidcConfigProperty where
+  type PropertyType "SessionTimeout" AuthenticateOidcConfigProperty = Value Prelude.Integer
+  set newValue AuthenticateOidcConfigProperty {..}
+    = AuthenticateOidcConfigProperty
+        {sessionTimeout = Prelude.pure newValue, ..}
+instance Property "TokenEndpoint" AuthenticateOidcConfigProperty where
+  type PropertyType "TokenEndpoint" AuthenticateOidcConfigProperty = Value Prelude.Text
+  set newValue AuthenticateOidcConfigProperty {..}
+    = AuthenticateOidcConfigProperty {tokenEndpoint = newValue, ..}
+instance Property "UseExistingClientSecret" AuthenticateOidcConfigProperty where
+  type PropertyType "UseExistingClientSecret" AuthenticateOidcConfigProperty = Value Prelude.Bool
+  set newValue AuthenticateOidcConfigProperty {..}
+    = AuthenticateOidcConfigProperty
+        {useExistingClientSecret = Prelude.pure newValue, ..}
+instance Property "UserInfoEndpoint" AuthenticateOidcConfigProperty where
+  type PropertyType "UserInfoEndpoint" AuthenticateOidcConfigProperty = Value Prelude.Text
+  set newValue AuthenticateOidcConfigProperty {..}
+    = AuthenticateOidcConfigProperty {userInfoEndpoint = newValue, ..}
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/AuthenticateOidcConfigProperty.hs-boot b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/AuthenticateOidcConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/AuthenticateOidcConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ElasticLoadBalancingV2.ListenerRule.AuthenticateOidcConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AuthenticateOidcConfigProperty :: Prelude.Type
+instance ToResourceProperties AuthenticateOidcConfigProperty
+instance Prelude.Eq AuthenticateOidcConfigProperty
+instance Prelude.Show AuthenticateOidcConfigProperty
+instance JSON.ToJSON AuthenticateOidcConfigProperty
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/FixedResponseConfigProperty.hs b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/FixedResponseConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/FixedResponseConfigProperty.hs
@@ -0,0 +1,58 @@
+module Stratosphere.ElasticLoadBalancingV2.ListenerRule.FixedResponseConfigProperty (
+        FixedResponseConfigProperty(..), mkFixedResponseConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data FixedResponseConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-fixedresponseconfig.html>
+    FixedResponseConfigProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-fixedresponseconfig.html#cfn-elasticloadbalancingv2-listenerrule-fixedresponseconfig-contenttype>
+                                 contentType :: (Prelude.Maybe (Value Prelude.Text)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-fixedresponseconfig.html#cfn-elasticloadbalancingv2-listenerrule-fixedresponseconfig-messagebody>
+                                 messageBody :: (Prelude.Maybe (Value Prelude.Text)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-fixedresponseconfig.html#cfn-elasticloadbalancingv2-listenerrule-fixedresponseconfig-statuscode>
+                                 statusCode :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkFixedResponseConfigProperty ::
+  Value Prelude.Text -> FixedResponseConfigProperty
+mkFixedResponseConfigProperty statusCode
+  = FixedResponseConfigProperty
+      {haddock_workaround_ = (), statusCode = statusCode,
+       contentType = Prelude.Nothing, messageBody = Prelude.Nothing}
+instance ToResourceProperties FixedResponseConfigProperty where
+  toResourceProperties FixedResponseConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ElasticLoadBalancingV2::ListenerRule.FixedResponseConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["StatusCode" JSON..= statusCode]
+                           (Prelude.catMaybes
+                              [(JSON..=) "ContentType" Prelude.<$> contentType,
+                               (JSON..=) "MessageBody" Prelude.<$> messageBody]))}
+instance JSON.ToJSON FixedResponseConfigProperty where
+  toJSON FixedResponseConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["StatusCode" JSON..= statusCode]
+              (Prelude.catMaybes
+                 [(JSON..=) "ContentType" Prelude.<$> contentType,
+                  (JSON..=) "MessageBody" Prelude.<$> messageBody])))
+instance Property "ContentType" FixedResponseConfigProperty where
+  type PropertyType "ContentType" FixedResponseConfigProperty = Value Prelude.Text
+  set newValue FixedResponseConfigProperty {..}
+    = FixedResponseConfigProperty
+        {contentType = Prelude.pure newValue, ..}
+instance Property "MessageBody" FixedResponseConfigProperty where
+  type PropertyType "MessageBody" FixedResponseConfigProperty = Value Prelude.Text
+  set newValue FixedResponseConfigProperty {..}
+    = FixedResponseConfigProperty
+        {messageBody = Prelude.pure newValue, ..}
+instance Property "StatusCode" FixedResponseConfigProperty where
+  type PropertyType "StatusCode" FixedResponseConfigProperty = Value Prelude.Text
+  set newValue FixedResponseConfigProperty {..}
+    = FixedResponseConfigProperty {statusCode = newValue, ..}
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/FixedResponseConfigProperty.hs-boot b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/FixedResponseConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/FixedResponseConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ElasticLoadBalancingV2.ListenerRule.FixedResponseConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data FixedResponseConfigProperty :: Prelude.Type
+instance ToResourceProperties FixedResponseConfigProperty
+instance Prelude.Eq FixedResponseConfigProperty
+instance Prelude.Show FixedResponseConfigProperty
+instance JSON.ToJSON FixedResponseConfigProperty
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/ForwardConfigProperty.hs b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/ForwardConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/ForwardConfigProperty.hs
@@ -0,0 +1,50 @@
+module Stratosphere.ElasticLoadBalancingV2.ListenerRule.ForwardConfigProperty (
+        module Exports, ForwardConfigProperty(..), mkForwardConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ElasticLoadBalancingV2.ListenerRule.TargetGroupStickinessConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.ElasticLoadBalancingV2.ListenerRule.TargetGroupTupleProperty as Exports
+import Stratosphere.ResourceProperties
+data ForwardConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-forwardconfig.html>
+    ForwardConfigProperty {haddock_workaround_ :: (),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-forwardconfig.html#cfn-elasticloadbalancingv2-listenerrule-forwardconfig-targetgroupstickinessconfig>
+                           targetGroupStickinessConfig :: (Prelude.Maybe TargetGroupStickinessConfigProperty),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-forwardconfig.html#cfn-elasticloadbalancingv2-listenerrule-forwardconfig-targetgroups>
+                           targetGroups :: (Prelude.Maybe [TargetGroupTupleProperty])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkForwardConfigProperty :: ForwardConfigProperty
+mkForwardConfigProperty
+  = ForwardConfigProperty
+      {haddock_workaround_ = (),
+       targetGroupStickinessConfig = Prelude.Nothing,
+       targetGroups = Prelude.Nothing}
+instance ToResourceProperties ForwardConfigProperty where
+  toResourceProperties ForwardConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ElasticLoadBalancingV2::ListenerRule.ForwardConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "TargetGroupStickinessConfig"
+                              Prelude.<$> targetGroupStickinessConfig,
+                            (JSON..=) "TargetGroups" Prelude.<$> targetGroups])}
+instance JSON.ToJSON ForwardConfigProperty where
+  toJSON ForwardConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "TargetGroupStickinessConfig"
+                 Prelude.<$> targetGroupStickinessConfig,
+               (JSON..=) "TargetGroups" Prelude.<$> targetGroups]))
+instance Property "TargetGroupStickinessConfig" ForwardConfigProperty where
+  type PropertyType "TargetGroupStickinessConfig" ForwardConfigProperty = TargetGroupStickinessConfigProperty
+  set newValue ForwardConfigProperty {..}
+    = ForwardConfigProperty
+        {targetGroupStickinessConfig = Prelude.pure newValue, ..}
+instance Property "TargetGroups" ForwardConfigProperty where
+  type PropertyType "TargetGroups" ForwardConfigProperty = [TargetGroupTupleProperty]
+  set newValue ForwardConfigProperty {..}
+    = ForwardConfigProperty {targetGroups = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/ForwardConfigProperty.hs-boot b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/ForwardConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/ForwardConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ElasticLoadBalancingV2.ListenerRule.ForwardConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ForwardConfigProperty :: Prelude.Type
+instance ToResourceProperties ForwardConfigProperty
+instance Prelude.Eq ForwardConfigProperty
+instance Prelude.Show ForwardConfigProperty
+instance JSON.ToJSON ForwardConfigProperty
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/HostHeaderConfigProperty.hs b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/HostHeaderConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/HostHeaderConfigProperty.hs
@@ -0,0 +1,46 @@
+module Stratosphere.ElasticLoadBalancingV2.ListenerRule.HostHeaderConfigProperty (
+        HostHeaderConfigProperty(..), mkHostHeaderConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data HostHeaderConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-hostheaderconfig.html>
+    HostHeaderConfigProperty {haddock_workaround_ :: (),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-hostheaderconfig.html#cfn-elasticloadbalancingv2-listenerrule-hostheaderconfig-regexvalues>
+                              regexValues :: (Prelude.Maybe (ValueList Prelude.Text)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-hostheaderconfig.html#cfn-elasticloadbalancingv2-listenerrule-hostheaderconfig-values>
+                              values :: (Prelude.Maybe (ValueList Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkHostHeaderConfigProperty :: HostHeaderConfigProperty
+mkHostHeaderConfigProperty
+  = HostHeaderConfigProperty
+      {haddock_workaround_ = (), regexValues = Prelude.Nothing,
+       values = Prelude.Nothing}
+instance ToResourceProperties HostHeaderConfigProperty where
+  toResourceProperties HostHeaderConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ElasticLoadBalancingV2::ListenerRule.HostHeaderConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "RegexValues" Prelude.<$> regexValues,
+                            (JSON..=) "Values" Prelude.<$> values])}
+instance JSON.ToJSON HostHeaderConfigProperty where
+  toJSON HostHeaderConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "RegexValues" Prelude.<$> regexValues,
+               (JSON..=) "Values" Prelude.<$> values]))
+instance Property "RegexValues" HostHeaderConfigProperty where
+  type PropertyType "RegexValues" HostHeaderConfigProperty = ValueList Prelude.Text
+  set newValue HostHeaderConfigProperty {..}
+    = HostHeaderConfigProperty
+        {regexValues = Prelude.pure newValue, ..}
+instance Property "Values" HostHeaderConfigProperty where
+  type PropertyType "Values" HostHeaderConfigProperty = ValueList Prelude.Text
+  set newValue HostHeaderConfigProperty {..}
+    = HostHeaderConfigProperty {values = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/HostHeaderConfigProperty.hs-boot b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/HostHeaderConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/HostHeaderConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ElasticLoadBalancingV2.ListenerRule.HostHeaderConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data HostHeaderConfigProperty :: Prelude.Type
+instance ToResourceProperties HostHeaderConfigProperty
+instance Prelude.Eq HostHeaderConfigProperty
+instance Prelude.Show HostHeaderConfigProperty
+instance JSON.ToJSON HostHeaderConfigProperty
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/HttpHeaderConfigProperty.hs b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/HttpHeaderConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/HttpHeaderConfigProperty.hs
@@ -0,0 +1,55 @@
+module Stratosphere.ElasticLoadBalancingV2.ListenerRule.HttpHeaderConfigProperty (
+        HttpHeaderConfigProperty(..), mkHttpHeaderConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data HttpHeaderConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-httpheaderconfig.html>
+    HttpHeaderConfigProperty {haddock_workaround_ :: (),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-httpheaderconfig.html#cfn-elasticloadbalancingv2-listenerrule-httpheaderconfig-httpheadername>
+                              httpHeaderName :: (Prelude.Maybe (Value Prelude.Text)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-httpheaderconfig.html#cfn-elasticloadbalancingv2-listenerrule-httpheaderconfig-regexvalues>
+                              regexValues :: (Prelude.Maybe (ValueList Prelude.Text)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-httpheaderconfig.html#cfn-elasticloadbalancingv2-listenerrule-httpheaderconfig-values>
+                              values :: (Prelude.Maybe (ValueList Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkHttpHeaderConfigProperty :: HttpHeaderConfigProperty
+mkHttpHeaderConfigProperty
+  = HttpHeaderConfigProperty
+      {haddock_workaround_ = (), httpHeaderName = Prelude.Nothing,
+       regexValues = Prelude.Nothing, values = Prelude.Nothing}
+instance ToResourceProperties HttpHeaderConfigProperty where
+  toResourceProperties HttpHeaderConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ElasticLoadBalancingV2::ListenerRule.HttpHeaderConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "HttpHeaderName" Prelude.<$> httpHeaderName,
+                            (JSON..=) "RegexValues" Prelude.<$> regexValues,
+                            (JSON..=) "Values" Prelude.<$> values])}
+instance JSON.ToJSON HttpHeaderConfigProperty where
+  toJSON HttpHeaderConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "HttpHeaderName" Prelude.<$> httpHeaderName,
+               (JSON..=) "RegexValues" Prelude.<$> regexValues,
+               (JSON..=) "Values" Prelude.<$> values]))
+instance Property "HttpHeaderName" HttpHeaderConfigProperty where
+  type PropertyType "HttpHeaderName" HttpHeaderConfigProperty = Value Prelude.Text
+  set newValue HttpHeaderConfigProperty {..}
+    = HttpHeaderConfigProperty
+        {httpHeaderName = Prelude.pure newValue, ..}
+instance Property "RegexValues" HttpHeaderConfigProperty where
+  type PropertyType "RegexValues" HttpHeaderConfigProperty = ValueList Prelude.Text
+  set newValue HttpHeaderConfigProperty {..}
+    = HttpHeaderConfigProperty
+        {regexValues = Prelude.pure newValue, ..}
+instance Property "Values" HttpHeaderConfigProperty where
+  type PropertyType "Values" HttpHeaderConfigProperty = ValueList Prelude.Text
+  set newValue HttpHeaderConfigProperty {..}
+    = HttpHeaderConfigProperty {values = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/HttpHeaderConfigProperty.hs-boot b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/HttpHeaderConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/HttpHeaderConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ElasticLoadBalancingV2.ListenerRule.HttpHeaderConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data HttpHeaderConfigProperty :: Prelude.Type
+instance ToResourceProperties HttpHeaderConfigProperty
+instance Prelude.Eq HttpHeaderConfigProperty
+instance Prelude.Show HttpHeaderConfigProperty
+instance JSON.ToJSON HttpHeaderConfigProperty
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/HttpRequestMethodConfigProperty.hs b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/HttpRequestMethodConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/HttpRequestMethodConfigProperty.hs
@@ -0,0 +1,37 @@
+module Stratosphere.ElasticLoadBalancingV2.ListenerRule.HttpRequestMethodConfigProperty (
+        HttpRequestMethodConfigProperty(..),
+        mkHttpRequestMethodConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data HttpRequestMethodConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-httprequestmethodconfig.html>
+    HttpRequestMethodConfigProperty {haddock_workaround_ :: (),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-httprequestmethodconfig.html#cfn-elasticloadbalancingv2-listenerrule-httprequestmethodconfig-values>
+                                     values :: (Prelude.Maybe (ValueList Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkHttpRequestMethodConfigProperty ::
+  HttpRequestMethodConfigProperty
+mkHttpRequestMethodConfigProperty
+  = HttpRequestMethodConfigProperty
+      {haddock_workaround_ = (), values = Prelude.Nothing}
+instance ToResourceProperties HttpRequestMethodConfigProperty where
+  toResourceProperties HttpRequestMethodConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ElasticLoadBalancingV2::ListenerRule.HttpRequestMethodConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes [(JSON..=) "Values" Prelude.<$> values])}
+instance JSON.ToJSON HttpRequestMethodConfigProperty where
+  toJSON HttpRequestMethodConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes [(JSON..=) "Values" Prelude.<$> values]))
+instance Property "Values" HttpRequestMethodConfigProperty where
+  type PropertyType "Values" HttpRequestMethodConfigProperty = ValueList Prelude.Text
+  set newValue HttpRequestMethodConfigProperty {..}
+    = HttpRequestMethodConfigProperty
+        {values = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/HttpRequestMethodConfigProperty.hs-boot b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/HttpRequestMethodConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/HttpRequestMethodConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ElasticLoadBalancingV2.ListenerRule.HttpRequestMethodConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data HttpRequestMethodConfigProperty :: Prelude.Type
+instance ToResourceProperties HttpRequestMethodConfigProperty
+instance Prelude.Eq HttpRequestMethodConfigProperty
+instance Prelude.Show HttpRequestMethodConfigProperty
+instance JSON.ToJSON HttpRequestMethodConfigProperty
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/PathPatternConfigProperty.hs b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/PathPatternConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/PathPatternConfigProperty.hs
@@ -0,0 +1,46 @@
+module Stratosphere.ElasticLoadBalancingV2.ListenerRule.PathPatternConfigProperty (
+        PathPatternConfigProperty(..), mkPathPatternConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data PathPatternConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-pathpatternconfig.html>
+    PathPatternConfigProperty {haddock_workaround_ :: (),
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-pathpatternconfig.html#cfn-elasticloadbalancingv2-listenerrule-pathpatternconfig-regexvalues>
+                               regexValues :: (Prelude.Maybe (ValueList Prelude.Text)),
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-pathpatternconfig.html#cfn-elasticloadbalancingv2-listenerrule-pathpatternconfig-values>
+                               values :: (Prelude.Maybe (ValueList Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkPathPatternConfigProperty :: PathPatternConfigProperty
+mkPathPatternConfigProperty
+  = PathPatternConfigProperty
+      {haddock_workaround_ = (), regexValues = Prelude.Nothing,
+       values = Prelude.Nothing}
+instance ToResourceProperties PathPatternConfigProperty where
+  toResourceProperties PathPatternConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ElasticLoadBalancingV2::ListenerRule.PathPatternConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "RegexValues" Prelude.<$> regexValues,
+                            (JSON..=) "Values" Prelude.<$> values])}
+instance JSON.ToJSON PathPatternConfigProperty where
+  toJSON PathPatternConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "RegexValues" Prelude.<$> regexValues,
+               (JSON..=) "Values" Prelude.<$> values]))
+instance Property "RegexValues" PathPatternConfigProperty where
+  type PropertyType "RegexValues" PathPatternConfigProperty = ValueList Prelude.Text
+  set newValue PathPatternConfigProperty {..}
+    = PathPatternConfigProperty
+        {regexValues = Prelude.pure newValue, ..}
+instance Property "Values" PathPatternConfigProperty where
+  type PropertyType "Values" PathPatternConfigProperty = ValueList Prelude.Text
+  set newValue PathPatternConfigProperty {..}
+    = PathPatternConfigProperty {values = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/PathPatternConfigProperty.hs-boot b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/PathPatternConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/PathPatternConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ElasticLoadBalancingV2.ListenerRule.PathPatternConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data PathPatternConfigProperty :: Prelude.Type
+instance ToResourceProperties PathPatternConfigProperty
+instance Prelude.Eq PathPatternConfigProperty
+instance Prelude.Show PathPatternConfigProperty
+instance JSON.ToJSON PathPatternConfigProperty
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/QueryStringConfigProperty.hs b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/QueryStringConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/QueryStringConfigProperty.hs
@@ -0,0 +1,35 @@
+module Stratosphere.ElasticLoadBalancingV2.ListenerRule.QueryStringConfigProperty (
+        module Exports, QueryStringConfigProperty(..),
+        mkQueryStringConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ElasticLoadBalancingV2.ListenerRule.QueryStringKeyValueProperty as Exports
+import Stratosphere.ResourceProperties
+data QueryStringConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-querystringconfig.html>
+    QueryStringConfigProperty {haddock_workaround_ :: (),
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-querystringconfig.html#cfn-elasticloadbalancingv2-listenerrule-querystringconfig-values>
+                               values :: (Prelude.Maybe [QueryStringKeyValueProperty])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkQueryStringConfigProperty :: QueryStringConfigProperty
+mkQueryStringConfigProperty
+  = QueryStringConfigProperty
+      {haddock_workaround_ = (), values = Prelude.Nothing}
+instance ToResourceProperties QueryStringConfigProperty where
+  toResourceProperties QueryStringConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ElasticLoadBalancingV2::ListenerRule.QueryStringConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes [(JSON..=) "Values" Prelude.<$> values])}
+instance JSON.ToJSON QueryStringConfigProperty where
+  toJSON QueryStringConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes [(JSON..=) "Values" Prelude.<$> values]))
+instance Property "Values" QueryStringConfigProperty where
+  type PropertyType "Values" QueryStringConfigProperty = [QueryStringKeyValueProperty]
+  set newValue QueryStringConfigProperty {..}
+    = QueryStringConfigProperty {values = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/QueryStringConfigProperty.hs-boot b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/QueryStringConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/QueryStringConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ElasticLoadBalancingV2.ListenerRule.QueryStringConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data QueryStringConfigProperty :: Prelude.Type
+instance ToResourceProperties QueryStringConfigProperty
+instance Prelude.Eq QueryStringConfigProperty
+instance Prelude.Show QueryStringConfigProperty
+instance JSON.ToJSON QueryStringConfigProperty
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/QueryStringKeyValueProperty.hs b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/QueryStringKeyValueProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/QueryStringKeyValueProperty.hs
@@ -0,0 +1,45 @@
+module Stratosphere.ElasticLoadBalancingV2.ListenerRule.QueryStringKeyValueProperty (
+        QueryStringKeyValueProperty(..), mkQueryStringKeyValueProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data QueryStringKeyValueProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-querystringkeyvalue.html>
+    QueryStringKeyValueProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-querystringkeyvalue.html#cfn-elasticloadbalancingv2-listenerrule-querystringkeyvalue-key>
+                                 key :: (Prelude.Maybe (Value Prelude.Text)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-querystringkeyvalue.html#cfn-elasticloadbalancingv2-listenerrule-querystringkeyvalue-value>
+                                 value :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkQueryStringKeyValueProperty :: QueryStringKeyValueProperty
+mkQueryStringKeyValueProperty
+  = QueryStringKeyValueProperty
+      {haddock_workaround_ = (), key = Prelude.Nothing,
+       value = Prelude.Nothing}
+instance ToResourceProperties QueryStringKeyValueProperty where
+  toResourceProperties QueryStringKeyValueProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ElasticLoadBalancingV2::ListenerRule.QueryStringKeyValue",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Key" Prelude.<$> key,
+                            (JSON..=) "Value" Prelude.<$> value])}
+instance JSON.ToJSON QueryStringKeyValueProperty where
+  toJSON QueryStringKeyValueProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Key" Prelude.<$> key,
+               (JSON..=) "Value" Prelude.<$> value]))
+instance Property "Key" QueryStringKeyValueProperty where
+  type PropertyType "Key" QueryStringKeyValueProperty = Value Prelude.Text
+  set newValue QueryStringKeyValueProperty {..}
+    = QueryStringKeyValueProperty {key = Prelude.pure newValue, ..}
+instance Property "Value" QueryStringKeyValueProperty where
+  type PropertyType "Value" QueryStringKeyValueProperty = Value Prelude.Text
+  set newValue QueryStringKeyValueProperty {..}
+    = QueryStringKeyValueProperty {value = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/QueryStringKeyValueProperty.hs-boot b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/QueryStringKeyValueProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/QueryStringKeyValueProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ElasticLoadBalancingV2.ListenerRule.QueryStringKeyValueProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data QueryStringKeyValueProperty :: Prelude.Type
+instance ToResourceProperties QueryStringKeyValueProperty
+instance Prelude.Eq QueryStringKeyValueProperty
+instance Prelude.Show QueryStringKeyValueProperty
+instance JSON.ToJSON QueryStringKeyValueProperty
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/RedirectConfigProperty.hs b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/RedirectConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/RedirectConfigProperty.hs
@@ -0,0 +1,82 @@
+module Stratosphere.ElasticLoadBalancingV2.ListenerRule.RedirectConfigProperty (
+        RedirectConfigProperty(..), mkRedirectConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data RedirectConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-redirectconfig.html>
+    RedirectConfigProperty {haddock_workaround_ :: (),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-redirectconfig.html#cfn-elasticloadbalancingv2-listenerrule-redirectconfig-host>
+                            host :: (Prelude.Maybe (Value Prelude.Text)),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-redirectconfig.html#cfn-elasticloadbalancingv2-listenerrule-redirectconfig-path>
+                            path :: (Prelude.Maybe (Value Prelude.Text)),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-redirectconfig.html#cfn-elasticloadbalancingv2-listenerrule-redirectconfig-port>
+                            port :: (Prelude.Maybe (Value Prelude.Text)),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-redirectconfig.html#cfn-elasticloadbalancingv2-listenerrule-redirectconfig-protocol>
+                            protocol :: (Prelude.Maybe (Value Prelude.Text)),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-redirectconfig.html#cfn-elasticloadbalancingv2-listenerrule-redirectconfig-query>
+                            query :: (Prelude.Maybe (Value Prelude.Text)),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-redirectconfig.html#cfn-elasticloadbalancingv2-listenerrule-redirectconfig-statuscode>
+                            statusCode :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkRedirectConfigProperty ::
+  Value Prelude.Text -> RedirectConfigProperty
+mkRedirectConfigProperty statusCode
+  = RedirectConfigProperty
+      {haddock_workaround_ = (), statusCode = statusCode,
+       host = Prelude.Nothing, path = Prelude.Nothing,
+       port = Prelude.Nothing, protocol = Prelude.Nothing,
+       query = Prelude.Nothing}
+instance ToResourceProperties RedirectConfigProperty where
+  toResourceProperties RedirectConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ElasticLoadBalancingV2::ListenerRule.RedirectConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["StatusCode" JSON..= statusCode]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Host" Prelude.<$> host,
+                               (JSON..=) "Path" Prelude.<$> path,
+                               (JSON..=) "Port" Prelude.<$> port,
+                               (JSON..=) "Protocol" Prelude.<$> protocol,
+                               (JSON..=) "Query" Prelude.<$> query]))}
+instance JSON.ToJSON RedirectConfigProperty where
+  toJSON RedirectConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["StatusCode" JSON..= statusCode]
+              (Prelude.catMaybes
+                 [(JSON..=) "Host" Prelude.<$> host,
+                  (JSON..=) "Path" Prelude.<$> path,
+                  (JSON..=) "Port" Prelude.<$> port,
+                  (JSON..=) "Protocol" Prelude.<$> protocol,
+                  (JSON..=) "Query" Prelude.<$> query])))
+instance Property "Host" RedirectConfigProperty where
+  type PropertyType "Host" RedirectConfigProperty = Value Prelude.Text
+  set newValue RedirectConfigProperty {..}
+    = RedirectConfigProperty {host = Prelude.pure newValue, ..}
+instance Property "Path" RedirectConfigProperty where
+  type PropertyType "Path" RedirectConfigProperty = Value Prelude.Text
+  set newValue RedirectConfigProperty {..}
+    = RedirectConfigProperty {path = Prelude.pure newValue, ..}
+instance Property "Port" RedirectConfigProperty where
+  type PropertyType "Port" RedirectConfigProperty = Value Prelude.Text
+  set newValue RedirectConfigProperty {..}
+    = RedirectConfigProperty {port = Prelude.pure newValue, ..}
+instance Property "Protocol" RedirectConfigProperty where
+  type PropertyType "Protocol" RedirectConfigProperty = Value Prelude.Text
+  set newValue RedirectConfigProperty {..}
+    = RedirectConfigProperty {protocol = Prelude.pure newValue, ..}
+instance Property "Query" RedirectConfigProperty where
+  type PropertyType "Query" RedirectConfigProperty = Value Prelude.Text
+  set newValue RedirectConfigProperty {..}
+    = RedirectConfigProperty {query = Prelude.pure newValue, ..}
+instance Property "StatusCode" RedirectConfigProperty where
+  type PropertyType "StatusCode" RedirectConfigProperty = Value Prelude.Text
+  set newValue RedirectConfigProperty {..}
+    = RedirectConfigProperty {statusCode = newValue, ..}
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/RedirectConfigProperty.hs-boot b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/RedirectConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/RedirectConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ElasticLoadBalancingV2.ListenerRule.RedirectConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data RedirectConfigProperty :: Prelude.Type
+instance ToResourceProperties RedirectConfigProperty
+instance Prelude.Eq RedirectConfigProperty
+instance Prelude.Show RedirectConfigProperty
+instance JSON.ToJSON RedirectConfigProperty
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/RewriteConfigObjectProperty.hs b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/RewriteConfigObjectProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/RewriteConfigObjectProperty.hs
@@ -0,0 +1,33 @@
+module Stratosphere.ElasticLoadBalancingV2.ListenerRule.RewriteConfigObjectProperty (
+        module Exports, RewriteConfigObjectProperty(..),
+        mkRewriteConfigObjectProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ElasticLoadBalancingV2.ListenerRule.RewriteConfigProperty as Exports
+import Stratosphere.ResourceProperties
+data RewriteConfigObjectProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-rewriteconfigobject.html>
+    RewriteConfigObjectProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-rewriteconfigobject.html#cfn-elasticloadbalancingv2-listenerrule-rewriteconfigobject-rewrites>
+                                 rewrites :: [RewriteConfigProperty]}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkRewriteConfigObjectProperty ::
+  [RewriteConfigProperty] -> RewriteConfigObjectProperty
+mkRewriteConfigObjectProperty rewrites
+  = RewriteConfigObjectProperty
+      {haddock_workaround_ = (), rewrites = rewrites}
+instance ToResourceProperties RewriteConfigObjectProperty where
+  toResourceProperties RewriteConfigObjectProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ElasticLoadBalancingV2::ListenerRule.RewriteConfigObject",
+         supportsTags = Prelude.False,
+         properties = ["Rewrites" JSON..= rewrites]}
+instance JSON.ToJSON RewriteConfigObjectProperty where
+  toJSON RewriteConfigObjectProperty {..}
+    = JSON.object ["Rewrites" JSON..= rewrites]
+instance Property "Rewrites" RewriteConfigObjectProperty where
+  type PropertyType "Rewrites" RewriteConfigObjectProperty = [RewriteConfigProperty]
+  set newValue RewriteConfigObjectProperty {..}
+    = RewriteConfigObjectProperty {rewrites = newValue, ..}
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/RewriteConfigObjectProperty.hs-boot b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/RewriteConfigObjectProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/RewriteConfigObjectProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ElasticLoadBalancingV2.ListenerRule.RewriteConfigObjectProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data RewriteConfigObjectProperty :: Prelude.Type
+instance ToResourceProperties RewriteConfigObjectProperty
+instance Prelude.Eq RewriteConfigObjectProperty
+instance Prelude.Show RewriteConfigObjectProperty
+instance JSON.ToJSON RewriteConfigObjectProperty
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/RewriteConfigProperty.hs b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/RewriteConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/RewriteConfigProperty.hs
@@ -0,0 +1,38 @@
+module Stratosphere.ElasticLoadBalancingV2.ListenerRule.RewriteConfigProperty (
+        RewriteConfigProperty(..), mkRewriteConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data RewriteConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-rewriteconfig.html>
+    RewriteConfigProperty {haddock_workaround_ :: (),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-rewriteconfig.html#cfn-elasticloadbalancingv2-listenerrule-rewriteconfig-regex>
+                           regex :: (Value Prelude.Text),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-rewriteconfig.html#cfn-elasticloadbalancingv2-listenerrule-rewriteconfig-replace>
+                           replace :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkRewriteConfigProperty ::
+  Value Prelude.Text -> Value Prelude.Text -> RewriteConfigProperty
+mkRewriteConfigProperty regex replace
+  = RewriteConfigProperty
+      {haddock_workaround_ = (), regex = regex, replace = replace}
+instance ToResourceProperties RewriteConfigProperty where
+  toResourceProperties RewriteConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ElasticLoadBalancingV2::ListenerRule.RewriteConfig",
+         supportsTags = Prelude.False,
+         properties = ["Regex" JSON..= regex, "Replace" JSON..= replace]}
+instance JSON.ToJSON RewriteConfigProperty where
+  toJSON RewriteConfigProperty {..}
+    = JSON.object ["Regex" JSON..= regex, "Replace" JSON..= replace]
+instance Property "Regex" RewriteConfigProperty where
+  type PropertyType "Regex" RewriteConfigProperty = Value Prelude.Text
+  set newValue RewriteConfigProperty {..}
+    = RewriteConfigProperty {regex = newValue, ..}
+instance Property "Replace" RewriteConfigProperty where
+  type PropertyType "Replace" RewriteConfigProperty = Value Prelude.Text
+  set newValue RewriteConfigProperty {..}
+    = RewriteConfigProperty {replace = newValue, ..}
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/RewriteConfigProperty.hs-boot b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/RewriteConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/RewriteConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ElasticLoadBalancingV2.ListenerRule.RewriteConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data RewriteConfigProperty :: Prelude.Type
+instance ToResourceProperties RewriteConfigProperty
+instance Prelude.Eq RewriteConfigProperty
+instance Prelude.Show RewriteConfigProperty
+instance JSON.ToJSON RewriteConfigProperty
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/RuleConditionProperty.hs b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/RuleConditionProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/RuleConditionProperty.hs
@@ -0,0 +1,120 @@
+module Stratosphere.ElasticLoadBalancingV2.ListenerRule.RuleConditionProperty (
+        module Exports, RuleConditionProperty(..), mkRuleConditionProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ElasticLoadBalancingV2.ListenerRule.HostHeaderConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.ElasticLoadBalancingV2.ListenerRule.HttpHeaderConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.ElasticLoadBalancingV2.ListenerRule.HttpRequestMethodConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.ElasticLoadBalancingV2.ListenerRule.PathPatternConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.ElasticLoadBalancingV2.ListenerRule.QueryStringConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.ElasticLoadBalancingV2.ListenerRule.SourceIpConfigProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data RuleConditionProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-rulecondition.html>
+    RuleConditionProperty {haddock_workaround_ :: (),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-rulecondition.html#cfn-elasticloadbalancingv2-listenerrule-rulecondition-field>
+                           field :: (Prelude.Maybe (Value Prelude.Text)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-rulecondition.html#cfn-elasticloadbalancingv2-listenerrule-rulecondition-hostheaderconfig>
+                           hostHeaderConfig :: (Prelude.Maybe HostHeaderConfigProperty),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-rulecondition.html#cfn-elasticloadbalancingv2-listenerrule-rulecondition-httpheaderconfig>
+                           httpHeaderConfig :: (Prelude.Maybe HttpHeaderConfigProperty),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-rulecondition.html#cfn-elasticloadbalancingv2-listenerrule-rulecondition-httprequestmethodconfig>
+                           httpRequestMethodConfig :: (Prelude.Maybe HttpRequestMethodConfigProperty),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-rulecondition.html#cfn-elasticloadbalancingv2-listenerrule-rulecondition-pathpatternconfig>
+                           pathPatternConfig :: (Prelude.Maybe PathPatternConfigProperty),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-rulecondition.html#cfn-elasticloadbalancingv2-listenerrule-rulecondition-querystringconfig>
+                           queryStringConfig :: (Prelude.Maybe QueryStringConfigProperty),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-rulecondition.html#cfn-elasticloadbalancingv2-listenerrule-rulecondition-regexvalues>
+                           regexValues :: (Prelude.Maybe (ValueList Prelude.Text)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-rulecondition.html#cfn-elasticloadbalancingv2-listenerrule-rulecondition-sourceipconfig>
+                           sourceIpConfig :: (Prelude.Maybe SourceIpConfigProperty),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-rulecondition.html#cfn-elasticloadbalancingv2-listenerrule-rulecondition-values>
+                           values :: (Prelude.Maybe (ValueList Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkRuleConditionProperty :: RuleConditionProperty
+mkRuleConditionProperty
+  = RuleConditionProperty
+      {haddock_workaround_ = (), field = Prelude.Nothing,
+       hostHeaderConfig = Prelude.Nothing,
+       httpHeaderConfig = Prelude.Nothing,
+       httpRequestMethodConfig = Prelude.Nothing,
+       pathPatternConfig = Prelude.Nothing,
+       queryStringConfig = Prelude.Nothing, regexValues = Prelude.Nothing,
+       sourceIpConfig = Prelude.Nothing, values = Prelude.Nothing}
+instance ToResourceProperties RuleConditionProperty where
+  toResourceProperties RuleConditionProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ElasticLoadBalancingV2::ListenerRule.RuleCondition",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Field" Prelude.<$> field,
+                            (JSON..=) "HostHeaderConfig" Prelude.<$> hostHeaderConfig,
+                            (JSON..=) "HttpHeaderConfig" Prelude.<$> httpHeaderConfig,
+                            (JSON..=) "HttpRequestMethodConfig"
+                              Prelude.<$> httpRequestMethodConfig,
+                            (JSON..=) "PathPatternConfig" Prelude.<$> pathPatternConfig,
+                            (JSON..=) "QueryStringConfig" Prelude.<$> queryStringConfig,
+                            (JSON..=) "RegexValues" Prelude.<$> regexValues,
+                            (JSON..=) "SourceIpConfig" Prelude.<$> sourceIpConfig,
+                            (JSON..=) "Values" Prelude.<$> values])}
+instance JSON.ToJSON RuleConditionProperty where
+  toJSON RuleConditionProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Field" Prelude.<$> field,
+               (JSON..=) "HostHeaderConfig" Prelude.<$> hostHeaderConfig,
+               (JSON..=) "HttpHeaderConfig" Prelude.<$> httpHeaderConfig,
+               (JSON..=) "HttpRequestMethodConfig"
+                 Prelude.<$> httpRequestMethodConfig,
+               (JSON..=) "PathPatternConfig" Prelude.<$> pathPatternConfig,
+               (JSON..=) "QueryStringConfig" Prelude.<$> queryStringConfig,
+               (JSON..=) "RegexValues" Prelude.<$> regexValues,
+               (JSON..=) "SourceIpConfig" Prelude.<$> sourceIpConfig,
+               (JSON..=) "Values" Prelude.<$> values]))
+instance Property "Field" RuleConditionProperty where
+  type PropertyType "Field" RuleConditionProperty = Value Prelude.Text
+  set newValue RuleConditionProperty {..}
+    = RuleConditionProperty {field = Prelude.pure newValue, ..}
+instance Property "HostHeaderConfig" RuleConditionProperty where
+  type PropertyType "HostHeaderConfig" RuleConditionProperty = HostHeaderConfigProperty
+  set newValue RuleConditionProperty {..}
+    = RuleConditionProperty
+        {hostHeaderConfig = Prelude.pure newValue, ..}
+instance Property "HttpHeaderConfig" RuleConditionProperty where
+  type PropertyType "HttpHeaderConfig" RuleConditionProperty = HttpHeaderConfigProperty
+  set newValue RuleConditionProperty {..}
+    = RuleConditionProperty
+        {httpHeaderConfig = Prelude.pure newValue, ..}
+instance Property "HttpRequestMethodConfig" RuleConditionProperty where
+  type PropertyType "HttpRequestMethodConfig" RuleConditionProperty = HttpRequestMethodConfigProperty
+  set newValue RuleConditionProperty {..}
+    = RuleConditionProperty
+        {httpRequestMethodConfig = Prelude.pure newValue, ..}
+instance Property "PathPatternConfig" RuleConditionProperty where
+  type PropertyType "PathPatternConfig" RuleConditionProperty = PathPatternConfigProperty
+  set newValue RuleConditionProperty {..}
+    = RuleConditionProperty
+        {pathPatternConfig = Prelude.pure newValue, ..}
+instance Property "QueryStringConfig" RuleConditionProperty where
+  type PropertyType "QueryStringConfig" RuleConditionProperty = QueryStringConfigProperty
+  set newValue RuleConditionProperty {..}
+    = RuleConditionProperty
+        {queryStringConfig = Prelude.pure newValue, ..}
+instance Property "RegexValues" RuleConditionProperty where
+  type PropertyType "RegexValues" RuleConditionProperty = ValueList Prelude.Text
+  set newValue RuleConditionProperty {..}
+    = RuleConditionProperty {regexValues = Prelude.pure newValue, ..}
+instance Property "SourceIpConfig" RuleConditionProperty where
+  type PropertyType "SourceIpConfig" RuleConditionProperty = SourceIpConfigProperty
+  set newValue RuleConditionProperty {..}
+    = RuleConditionProperty
+        {sourceIpConfig = Prelude.pure newValue, ..}
+instance Property "Values" RuleConditionProperty where
+  type PropertyType "Values" RuleConditionProperty = ValueList Prelude.Text
+  set newValue RuleConditionProperty {..}
+    = RuleConditionProperty {values = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/RuleConditionProperty.hs-boot b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/RuleConditionProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/RuleConditionProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ElasticLoadBalancingV2.ListenerRule.RuleConditionProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data RuleConditionProperty :: Prelude.Type
+instance ToResourceProperties RuleConditionProperty
+instance Prelude.Eq RuleConditionProperty
+instance Prelude.Show RuleConditionProperty
+instance JSON.ToJSON RuleConditionProperty
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/SourceIpConfigProperty.hs b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/SourceIpConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/SourceIpConfigProperty.hs
@@ -0,0 +1,34 @@
+module Stratosphere.ElasticLoadBalancingV2.ListenerRule.SourceIpConfigProperty (
+        SourceIpConfigProperty(..), mkSourceIpConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data SourceIpConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-sourceipconfig.html>
+    SourceIpConfigProperty {haddock_workaround_ :: (),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-sourceipconfig.html#cfn-elasticloadbalancingv2-listenerrule-sourceipconfig-values>
+                            values :: (Prelude.Maybe (ValueList Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSourceIpConfigProperty :: SourceIpConfigProperty
+mkSourceIpConfigProperty
+  = SourceIpConfigProperty
+      {haddock_workaround_ = (), values = Prelude.Nothing}
+instance ToResourceProperties SourceIpConfigProperty where
+  toResourceProperties SourceIpConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ElasticLoadBalancingV2::ListenerRule.SourceIpConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes [(JSON..=) "Values" Prelude.<$> values])}
+instance JSON.ToJSON SourceIpConfigProperty where
+  toJSON SourceIpConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes [(JSON..=) "Values" Prelude.<$> values]))
+instance Property "Values" SourceIpConfigProperty where
+  type PropertyType "Values" SourceIpConfigProperty = ValueList Prelude.Text
+  set newValue SourceIpConfigProperty {..}
+    = SourceIpConfigProperty {values = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/SourceIpConfigProperty.hs-boot b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/SourceIpConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/SourceIpConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ElasticLoadBalancingV2.ListenerRule.SourceIpConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data SourceIpConfigProperty :: Prelude.Type
+instance ToResourceProperties SourceIpConfigProperty
+instance Prelude.Eq SourceIpConfigProperty
+instance Prelude.Show SourceIpConfigProperty
+instance JSON.ToJSON SourceIpConfigProperty
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/TargetGroupStickinessConfigProperty.hs b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/TargetGroupStickinessConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/TargetGroupStickinessConfigProperty.hs
@@ -0,0 +1,49 @@
+module Stratosphere.ElasticLoadBalancingV2.ListenerRule.TargetGroupStickinessConfigProperty (
+        TargetGroupStickinessConfigProperty(..),
+        mkTargetGroupStickinessConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data TargetGroupStickinessConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-targetgroupstickinessconfig.html>
+    TargetGroupStickinessConfigProperty {haddock_workaround_ :: (),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-targetgroupstickinessconfig.html#cfn-elasticloadbalancingv2-listenerrule-targetgroupstickinessconfig-durationseconds>
+                                         durationSeconds :: (Prelude.Maybe (Value Prelude.Integer)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-targetgroupstickinessconfig.html#cfn-elasticloadbalancingv2-listenerrule-targetgroupstickinessconfig-enabled>
+                                         enabled :: (Prelude.Maybe (Value Prelude.Bool))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTargetGroupStickinessConfigProperty ::
+  TargetGroupStickinessConfigProperty
+mkTargetGroupStickinessConfigProperty
+  = TargetGroupStickinessConfigProperty
+      {haddock_workaround_ = (), durationSeconds = Prelude.Nothing,
+       enabled = Prelude.Nothing}
+instance ToResourceProperties TargetGroupStickinessConfigProperty where
+  toResourceProperties TargetGroupStickinessConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ElasticLoadBalancingV2::ListenerRule.TargetGroupStickinessConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "DurationSeconds" Prelude.<$> durationSeconds,
+                            (JSON..=) "Enabled" Prelude.<$> enabled])}
+instance JSON.ToJSON TargetGroupStickinessConfigProperty where
+  toJSON TargetGroupStickinessConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "DurationSeconds" Prelude.<$> durationSeconds,
+               (JSON..=) "Enabled" Prelude.<$> enabled]))
+instance Property "DurationSeconds" TargetGroupStickinessConfigProperty where
+  type PropertyType "DurationSeconds" TargetGroupStickinessConfigProperty = Value Prelude.Integer
+  set newValue TargetGroupStickinessConfigProperty {..}
+    = TargetGroupStickinessConfigProperty
+        {durationSeconds = Prelude.pure newValue, ..}
+instance Property "Enabled" TargetGroupStickinessConfigProperty where
+  type PropertyType "Enabled" TargetGroupStickinessConfigProperty = Value Prelude.Bool
+  set newValue TargetGroupStickinessConfigProperty {..}
+    = TargetGroupStickinessConfigProperty
+        {enabled = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/TargetGroupStickinessConfigProperty.hs-boot b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/TargetGroupStickinessConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/TargetGroupStickinessConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ElasticLoadBalancingV2.ListenerRule.TargetGroupStickinessConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data TargetGroupStickinessConfigProperty :: Prelude.Type
+instance ToResourceProperties TargetGroupStickinessConfigProperty
+instance Prelude.Eq TargetGroupStickinessConfigProperty
+instance Prelude.Show TargetGroupStickinessConfigProperty
+instance JSON.ToJSON TargetGroupStickinessConfigProperty
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/TargetGroupTupleProperty.hs b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/TargetGroupTupleProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/TargetGroupTupleProperty.hs
@@ -0,0 +1,46 @@
+module Stratosphere.ElasticLoadBalancingV2.ListenerRule.TargetGroupTupleProperty (
+        TargetGroupTupleProperty(..), mkTargetGroupTupleProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data TargetGroupTupleProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-targetgrouptuple.html>
+    TargetGroupTupleProperty {haddock_workaround_ :: (),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-targetgrouptuple.html#cfn-elasticloadbalancingv2-listenerrule-targetgrouptuple-targetgrouparn>
+                              targetGroupArn :: (Prelude.Maybe (Value Prelude.Text)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-targetgrouptuple.html#cfn-elasticloadbalancingv2-listenerrule-targetgrouptuple-weight>
+                              weight :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTargetGroupTupleProperty :: TargetGroupTupleProperty
+mkTargetGroupTupleProperty
+  = TargetGroupTupleProperty
+      {haddock_workaround_ = (), targetGroupArn = Prelude.Nothing,
+       weight = Prelude.Nothing}
+instance ToResourceProperties TargetGroupTupleProperty where
+  toResourceProperties TargetGroupTupleProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ElasticLoadBalancingV2::ListenerRule.TargetGroupTuple",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "TargetGroupArn" Prelude.<$> targetGroupArn,
+                            (JSON..=) "Weight" Prelude.<$> weight])}
+instance JSON.ToJSON TargetGroupTupleProperty where
+  toJSON TargetGroupTupleProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "TargetGroupArn" Prelude.<$> targetGroupArn,
+               (JSON..=) "Weight" Prelude.<$> weight]))
+instance Property "TargetGroupArn" TargetGroupTupleProperty where
+  type PropertyType "TargetGroupArn" TargetGroupTupleProperty = Value Prelude.Text
+  set newValue TargetGroupTupleProperty {..}
+    = TargetGroupTupleProperty
+        {targetGroupArn = Prelude.pure newValue, ..}
+instance Property "Weight" TargetGroupTupleProperty where
+  type PropertyType "Weight" TargetGroupTupleProperty = Value Prelude.Integer
+  set newValue TargetGroupTupleProperty {..}
+    = TargetGroupTupleProperty {weight = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/TargetGroupTupleProperty.hs-boot b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/TargetGroupTupleProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/TargetGroupTupleProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ElasticLoadBalancingV2.ListenerRule.TargetGroupTupleProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data TargetGroupTupleProperty :: Prelude.Type
+instance ToResourceProperties TargetGroupTupleProperty
+instance Prelude.Eq TargetGroupTupleProperty
+instance Prelude.Show TargetGroupTupleProperty
+instance JSON.ToJSON TargetGroupTupleProperty
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/TransformProperty.hs b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/TransformProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/TransformProperty.hs
@@ -0,0 +1,60 @@
+module Stratosphere.ElasticLoadBalancingV2.ListenerRule.TransformProperty (
+        module Exports, TransformProperty(..), mkTransformProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ElasticLoadBalancingV2.ListenerRule.RewriteConfigObjectProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data TransformProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-transform.html>
+    TransformProperty {haddock_workaround_ :: (),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-transform.html#cfn-elasticloadbalancingv2-listenerrule-transform-hostheaderrewriteconfig>
+                       hostHeaderRewriteConfig :: (Prelude.Maybe RewriteConfigObjectProperty),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-transform.html#cfn-elasticloadbalancingv2-listenerrule-transform-type>
+                       type' :: (Value Prelude.Text),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-transform.html#cfn-elasticloadbalancingv2-listenerrule-transform-urlrewriteconfig>
+                       urlRewriteConfig :: (Prelude.Maybe RewriteConfigObjectProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTransformProperty :: Value Prelude.Text -> TransformProperty
+mkTransformProperty type'
+  = TransformProperty
+      {haddock_workaround_ = (), type' = type',
+       hostHeaderRewriteConfig = Prelude.Nothing,
+       urlRewriteConfig = Prelude.Nothing}
+instance ToResourceProperties TransformProperty where
+  toResourceProperties TransformProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ElasticLoadBalancingV2::ListenerRule.Transform",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Type" JSON..= type']
+                           (Prelude.catMaybes
+                              [(JSON..=) "HostHeaderRewriteConfig"
+                                 Prelude.<$> hostHeaderRewriteConfig,
+                               (JSON..=) "UrlRewriteConfig" Prelude.<$> urlRewriteConfig]))}
+instance JSON.ToJSON TransformProperty where
+  toJSON TransformProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Type" JSON..= type']
+              (Prelude.catMaybes
+                 [(JSON..=) "HostHeaderRewriteConfig"
+                    Prelude.<$> hostHeaderRewriteConfig,
+                  (JSON..=) "UrlRewriteConfig" Prelude.<$> urlRewriteConfig])))
+instance Property "HostHeaderRewriteConfig" TransformProperty where
+  type PropertyType "HostHeaderRewriteConfig" TransformProperty = RewriteConfigObjectProperty
+  set newValue TransformProperty {..}
+    = TransformProperty
+        {hostHeaderRewriteConfig = Prelude.pure newValue, ..}
+instance Property "Type" TransformProperty where
+  type PropertyType "Type" TransformProperty = Value Prelude.Text
+  set newValue TransformProperty {..}
+    = TransformProperty {type' = newValue, ..}
+instance Property "UrlRewriteConfig" TransformProperty where
+  type PropertyType "UrlRewriteConfig" TransformProperty = RewriteConfigObjectProperty
+  set newValue TransformProperty {..}
+    = TransformProperty {urlRewriteConfig = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/TransformProperty.hs-boot b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/TransformProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/ListenerRule/TransformProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ElasticLoadBalancingV2.ListenerRule.TransformProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data TransformProperty :: Prelude.Type
+instance ToResourceProperties TransformProperty
+instance Prelude.Eq TransformProperty
+instance Prelude.Show TransformProperty
+instance JSON.ToJSON TransformProperty
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/LoadBalancer.hs b/gen/Stratosphere/ElasticLoadBalancingV2/LoadBalancer.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/LoadBalancer.hs
@@ -0,0 +1,172 @@
+module Stratosphere.ElasticLoadBalancingV2.LoadBalancer (
+        module Exports, LoadBalancer(..), mkLoadBalancer
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ElasticLoadBalancingV2.LoadBalancer.LoadBalancerAttributeProperty as Exports
+import {-# SOURCE #-} Stratosphere.ElasticLoadBalancingV2.LoadBalancer.MinimumLoadBalancerCapacityProperty as Exports
+import {-# SOURCE #-} Stratosphere.ElasticLoadBalancingV2.LoadBalancer.SubnetMappingProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data LoadBalancer
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html>
+    LoadBalancer {haddock_workaround_ :: (),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html#cfn-elasticloadbalancingv2-loadbalancer-enablecapacityreservationprovisionstabilize>
+                  enableCapacityReservationProvisionStabilize :: (Prelude.Maybe (Value Prelude.Bool)),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html#cfn-elasticloadbalancingv2-loadbalancer-enableprefixforipv6sourcenat>
+                  enablePrefixForIpv6SourceNat :: (Prelude.Maybe (Value Prelude.Text)),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html#cfn-elasticloadbalancingv2-loadbalancer-enforcesecuritygroupinboundrulesonprivatelinktraffic>
+                  enforceSecurityGroupInboundRulesOnPrivateLinkTraffic :: (Prelude.Maybe (Value Prelude.Text)),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html#cfn-elasticloadbalancingv2-loadbalancer-ipaddresstype>
+                  ipAddressType :: (Prelude.Maybe (Value Prelude.Text)),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html#cfn-elasticloadbalancingv2-loadbalancer-ipv4ipampoolid>
+                  ipv4IpamPoolId :: (Prelude.Maybe (Value Prelude.Text)),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html#cfn-elasticloadbalancingv2-loadbalancer-loadbalancerattributes>
+                  loadBalancerAttributes :: (Prelude.Maybe [LoadBalancerAttributeProperty]),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html#cfn-elasticloadbalancingv2-loadbalancer-minimumloadbalancercapacity>
+                  minimumLoadBalancerCapacity :: (Prelude.Maybe MinimumLoadBalancerCapacityProperty),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html#cfn-elasticloadbalancingv2-loadbalancer-name>
+                  name :: (Prelude.Maybe (Value Prelude.Text)),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html#cfn-elasticloadbalancingv2-loadbalancer-scheme>
+                  scheme :: (Prelude.Maybe (Value Prelude.Text)),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html#cfn-elasticloadbalancingv2-loadbalancer-securitygroups>
+                  securityGroups :: (Prelude.Maybe (ValueList Prelude.Text)),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html#cfn-elasticloadbalancingv2-loadbalancer-subnetmappings>
+                  subnetMappings :: (Prelude.Maybe [SubnetMappingProperty]),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html#cfn-elasticloadbalancingv2-loadbalancer-subnets>
+                  subnets :: (Prelude.Maybe (ValueList Prelude.Text)),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html#cfn-elasticloadbalancingv2-loadbalancer-tags>
+                  tags :: (Prelude.Maybe [Tag]),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html#cfn-elasticloadbalancingv2-loadbalancer-type>
+                  type' :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkLoadBalancer :: LoadBalancer
+mkLoadBalancer
+  = LoadBalancer
+      {haddock_workaround_ = (),
+       enableCapacityReservationProvisionStabilize = Prelude.Nothing,
+       enablePrefixForIpv6SourceNat = Prelude.Nothing,
+       enforceSecurityGroupInboundRulesOnPrivateLinkTraffic = Prelude.Nothing,
+       ipAddressType = Prelude.Nothing, ipv4IpamPoolId = Prelude.Nothing,
+       loadBalancerAttributes = Prelude.Nothing,
+       minimumLoadBalancerCapacity = Prelude.Nothing,
+       name = Prelude.Nothing, scheme = Prelude.Nothing,
+       securityGroups = Prelude.Nothing, subnetMappings = Prelude.Nothing,
+       subnets = Prelude.Nothing, tags = Prelude.Nothing,
+       type' = Prelude.Nothing}
+instance ToResourceProperties LoadBalancer where
+  toResourceProperties LoadBalancer {..}
+    = ResourceProperties
+        {awsType = "AWS::ElasticLoadBalancingV2::LoadBalancer",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "EnableCapacityReservationProvisionStabilize"
+                              Prelude.<$> enableCapacityReservationProvisionStabilize,
+                            (JSON..=) "EnablePrefixForIpv6SourceNat"
+                              Prelude.<$> enablePrefixForIpv6SourceNat,
+                            (JSON..=) "EnforceSecurityGroupInboundRulesOnPrivateLinkTraffic"
+                              Prelude.<$> enforceSecurityGroupInboundRulesOnPrivateLinkTraffic,
+                            (JSON..=) "IpAddressType" Prelude.<$> ipAddressType,
+                            (JSON..=) "Ipv4IpamPoolId" Prelude.<$> ipv4IpamPoolId,
+                            (JSON..=) "LoadBalancerAttributes"
+                              Prelude.<$> loadBalancerAttributes,
+                            (JSON..=) "MinimumLoadBalancerCapacity"
+                              Prelude.<$> minimumLoadBalancerCapacity,
+                            (JSON..=) "Name" Prelude.<$> name,
+                            (JSON..=) "Scheme" Prelude.<$> scheme,
+                            (JSON..=) "SecurityGroups" Prelude.<$> securityGroups,
+                            (JSON..=) "SubnetMappings" Prelude.<$> subnetMappings,
+                            (JSON..=) "Subnets" Prelude.<$> subnets,
+                            (JSON..=) "Tags" Prelude.<$> tags,
+                            (JSON..=) "Type" Prelude.<$> type'])}
+instance JSON.ToJSON LoadBalancer where
+  toJSON LoadBalancer {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "EnableCapacityReservationProvisionStabilize"
+                 Prelude.<$> enableCapacityReservationProvisionStabilize,
+               (JSON..=) "EnablePrefixForIpv6SourceNat"
+                 Prelude.<$> enablePrefixForIpv6SourceNat,
+               (JSON..=) "EnforceSecurityGroupInboundRulesOnPrivateLinkTraffic"
+                 Prelude.<$> enforceSecurityGroupInboundRulesOnPrivateLinkTraffic,
+               (JSON..=) "IpAddressType" Prelude.<$> ipAddressType,
+               (JSON..=) "Ipv4IpamPoolId" Prelude.<$> ipv4IpamPoolId,
+               (JSON..=) "LoadBalancerAttributes"
+                 Prelude.<$> loadBalancerAttributes,
+               (JSON..=) "MinimumLoadBalancerCapacity"
+                 Prelude.<$> minimumLoadBalancerCapacity,
+               (JSON..=) "Name" Prelude.<$> name,
+               (JSON..=) "Scheme" Prelude.<$> scheme,
+               (JSON..=) "SecurityGroups" Prelude.<$> securityGroups,
+               (JSON..=) "SubnetMappings" Prelude.<$> subnetMappings,
+               (JSON..=) "Subnets" Prelude.<$> subnets,
+               (JSON..=) "Tags" Prelude.<$> tags,
+               (JSON..=) "Type" Prelude.<$> type']))
+instance Property "EnableCapacityReservationProvisionStabilize" LoadBalancer where
+  type PropertyType "EnableCapacityReservationProvisionStabilize" LoadBalancer = Value Prelude.Bool
+  set newValue LoadBalancer {..}
+    = LoadBalancer
+        {enableCapacityReservationProvisionStabilize = Prelude.pure
+                                                         newValue,
+         ..}
+instance Property "EnablePrefixForIpv6SourceNat" LoadBalancer where
+  type PropertyType "EnablePrefixForIpv6SourceNat" LoadBalancer = Value Prelude.Text
+  set newValue LoadBalancer {..}
+    = LoadBalancer
+        {enablePrefixForIpv6SourceNat = Prelude.pure newValue, ..}
+instance Property "EnforceSecurityGroupInboundRulesOnPrivateLinkTraffic" LoadBalancer where
+  type PropertyType "EnforceSecurityGroupInboundRulesOnPrivateLinkTraffic" LoadBalancer = Value Prelude.Text
+  set newValue LoadBalancer {..}
+    = LoadBalancer
+        {enforceSecurityGroupInboundRulesOnPrivateLinkTraffic = Prelude.pure
+                                                                  newValue,
+         ..}
+instance Property "IpAddressType" LoadBalancer where
+  type PropertyType "IpAddressType" LoadBalancer = Value Prelude.Text
+  set newValue LoadBalancer {..}
+    = LoadBalancer {ipAddressType = Prelude.pure newValue, ..}
+instance Property "Ipv4IpamPoolId" LoadBalancer where
+  type PropertyType "Ipv4IpamPoolId" LoadBalancer = Value Prelude.Text
+  set newValue LoadBalancer {..}
+    = LoadBalancer {ipv4IpamPoolId = Prelude.pure newValue, ..}
+instance Property "LoadBalancerAttributes" LoadBalancer where
+  type PropertyType "LoadBalancerAttributes" LoadBalancer = [LoadBalancerAttributeProperty]
+  set newValue LoadBalancer {..}
+    = LoadBalancer {loadBalancerAttributes = Prelude.pure newValue, ..}
+instance Property "MinimumLoadBalancerCapacity" LoadBalancer where
+  type PropertyType "MinimumLoadBalancerCapacity" LoadBalancer = MinimumLoadBalancerCapacityProperty
+  set newValue LoadBalancer {..}
+    = LoadBalancer
+        {minimumLoadBalancerCapacity = Prelude.pure newValue, ..}
+instance Property "Name" LoadBalancer where
+  type PropertyType "Name" LoadBalancer = Value Prelude.Text
+  set newValue LoadBalancer {..}
+    = LoadBalancer {name = Prelude.pure newValue, ..}
+instance Property "Scheme" LoadBalancer where
+  type PropertyType "Scheme" LoadBalancer = Value Prelude.Text
+  set newValue LoadBalancer {..}
+    = LoadBalancer {scheme = Prelude.pure newValue, ..}
+instance Property "SecurityGroups" LoadBalancer where
+  type PropertyType "SecurityGroups" LoadBalancer = ValueList Prelude.Text
+  set newValue LoadBalancer {..}
+    = LoadBalancer {securityGroups = Prelude.pure newValue, ..}
+instance Property "SubnetMappings" LoadBalancer where
+  type PropertyType "SubnetMappings" LoadBalancer = [SubnetMappingProperty]
+  set newValue LoadBalancer {..}
+    = LoadBalancer {subnetMappings = Prelude.pure newValue, ..}
+instance Property "Subnets" LoadBalancer where
+  type PropertyType "Subnets" LoadBalancer = ValueList Prelude.Text
+  set newValue LoadBalancer {..}
+    = LoadBalancer {subnets = Prelude.pure newValue, ..}
+instance Property "Tags" LoadBalancer where
+  type PropertyType "Tags" LoadBalancer = [Tag]
+  set newValue LoadBalancer {..}
+    = LoadBalancer {tags = Prelude.pure newValue, ..}
+instance Property "Type" LoadBalancer where
+  type PropertyType "Type" LoadBalancer = Value Prelude.Text
+  set newValue LoadBalancer {..}
+    = LoadBalancer {type' = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/LoadBalancer/LoadBalancerAttributeProperty.hs b/gen/Stratosphere/ElasticLoadBalancingV2/LoadBalancer/LoadBalancerAttributeProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/LoadBalancer/LoadBalancerAttributeProperty.hs
@@ -0,0 +1,45 @@
+module Stratosphere.ElasticLoadBalancingV2.LoadBalancer.LoadBalancerAttributeProperty (
+        LoadBalancerAttributeProperty(..), mkLoadBalancerAttributeProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data LoadBalancerAttributeProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-loadbalancer-loadbalancerattribute.html>
+    LoadBalancerAttributeProperty {haddock_workaround_ :: (),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-loadbalancer-loadbalancerattribute.html#cfn-elasticloadbalancingv2-loadbalancer-loadbalancerattribute-key>
+                                   key :: (Prelude.Maybe (Value Prelude.Text)),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-loadbalancer-loadbalancerattribute.html#cfn-elasticloadbalancingv2-loadbalancer-loadbalancerattribute-value>
+                                   value :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkLoadBalancerAttributeProperty :: LoadBalancerAttributeProperty
+mkLoadBalancerAttributeProperty
+  = LoadBalancerAttributeProperty
+      {haddock_workaround_ = (), key = Prelude.Nothing,
+       value = Prelude.Nothing}
+instance ToResourceProperties LoadBalancerAttributeProperty where
+  toResourceProperties LoadBalancerAttributeProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ElasticLoadBalancingV2::LoadBalancer.LoadBalancerAttribute",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Key" Prelude.<$> key,
+                            (JSON..=) "Value" Prelude.<$> value])}
+instance JSON.ToJSON LoadBalancerAttributeProperty where
+  toJSON LoadBalancerAttributeProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Key" Prelude.<$> key,
+               (JSON..=) "Value" Prelude.<$> value]))
+instance Property "Key" LoadBalancerAttributeProperty where
+  type PropertyType "Key" LoadBalancerAttributeProperty = Value Prelude.Text
+  set newValue LoadBalancerAttributeProperty {..}
+    = LoadBalancerAttributeProperty {key = Prelude.pure newValue, ..}
+instance Property "Value" LoadBalancerAttributeProperty where
+  type PropertyType "Value" LoadBalancerAttributeProperty = Value Prelude.Text
+  set newValue LoadBalancerAttributeProperty {..}
+    = LoadBalancerAttributeProperty {value = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/LoadBalancer/LoadBalancerAttributeProperty.hs-boot b/gen/Stratosphere/ElasticLoadBalancingV2/LoadBalancer/LoadBalancerAttributeProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/LoadBalancer/LoadBalancerAttributeProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ElasticLoadBalancingV2.LoadBalancer.LoadBalancerAttributeProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data LoadBalancerAttributeProperty :: Prelude.Type
+instance ToResourceProperties LoadBalancerAttributeProperty
+instance Prelude.Eq LoadBalancerAttributeProperty
+instance Prelude.Show LoadBalancerAttributeProperty
+instance JSON.ToJSON LoadBalancerAttributeProperty
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/LoadBalancer/MinimumLoadBalancerCapacityProperty.hs b/gen/Stratosphere/ElasticLoadBalancingV2/LoadBalancer/MinimumLoadBalancerCapacityProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/LoadBalancer/MinimumLoadBalancerCapacityProperty.hs
@@ -0,0 +1,34 @@
+module Stratosphere.ElasticLoadBalancingV2.LoadBalancer.MinimumLoadBalancerCapacityProperty (
+        MinimumLoadBalancerCapacityProperty(..),
+        mkMinimumLoadBalancerCapacityProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data MinimumLoadBalancerCapacityProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-loadbalancer-minimumloadbalancercapacity.html>
+    MinimumLoadBalancerCapacityProperty {haddock_workaround_ :: (),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-loadbalancer-minimumloadbalancercapacity.html#cfn-elasticloadbalancingv2-loadbalancer-minimumloadbalancercapacity-capacityunits>
+                                         capacityUnits :: (Value Prelude.Integer)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkMinimumLoadBalancerCapacityProperty ::
+  Value Prelude.Integer -> MinimumLoadBalancerCapacityProperty
+mkMinimumLoadBalancerCapacityProperty capacityUnits
+  = MinimumLoadBalancerCapacityProperty
+      {haddock_workaround_ = (), capacityUnits = capacityUnits}
+instance ToResourceProperties MinimumLoadBalancerCapacityProperty where
+  toResourceProperties MinimumLoadBalancerCapacityProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ElasticLoadBalancingV2::LoadBalancer.MinimumLoadBalancerCapacity",
+         supportsTags = Prelude.False,
+         properties = ["CapacityUnits" JSON..= capacityUnits]}
+instance JSON.ToJSON MinimumLoadBalancerCapacityProperty where
+  toJSON MinimumLoadBalancerCapacityProperty {..}
+    = JSON.object ["CapacityUnits" JSON..= capacityUnits]
+instance Property "CapacityUnits" MinimumLoadBalancerCapacityProperty where
+  type PropertyType "CapacityUnits" MinimumLoadBalancerCapacityProperty = Value Prelude.Integer
+  set newValue MinimumLoadBalancerCapacityProperty {..}
+    = MinimumLoadBalancerCapacityProperty
+        {capacityUnits = newValue, ..}
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/LoadBalancer/MinimumLoadBalancerCapacityProperty.hs-boot b/gen/Stratosphere/ElasticLoadBalancingV2/LoadBalancer/MinimumLoadBalancerCapacityProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/LoadBalancer/MinimumLoadBalancerCapacityProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ElasticLoadBalancingV2.LoadBalancer.MinimumLoadBalancerCapacityProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data MinimumLoadBalancerCapacityProperty :: Prelude.Type
+instance ToResourceProperties MinimumLoadBalancerCapacityProperty
+instance Prelude.Eq MinimumLoadBalancerCapacityProperty
+instance Prelude.Show MinimumLoadBalancerCapacityProperty
+instance JSON.ToJSON MinimumLoadBalancerCapacityProperty
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/LoadBalancer/SubnetMappingProperty.hs b/gen/Stratosphere/ElasticLoadBalancingV2/LoadBalancer/SubnetMappingProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/LoadBalancer/SubnetMappingProperty.hs
@@ -0,0 +1,76 @@
+module Stratosphere.ElasticLoadBalancingV2.LoadBalancer.SubnetMappingProperty (
+        SubnetMappingProperty(..), mkSubnetMappingProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data SubnetMappingProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-loadbalancer-subnetmapping.html>
+    SubnetMappingProperty {haddock_workaround_ :: (),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-loadbalancer-subnetmapping.html#cfn-elasticloadbalancingv2-loadbalancer-subnetmapping-allocationid>
+                           allocationId :: (Prelude.Maybe (Value Prelude.Text)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-loadbalancer-subnetmapping.html#cfn-elasticloadbalancingv2-loadbalancer-subnetmapping-ipv6address>
+                           iPv6Address :: (Prelude.Maybe (Value Prelude.Text)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-loadbalancer-subnetmapping.html#cfn-elasticloadbalancingv2-loadbalancer-subnetmapping-privateipv4address>
+                           privateIPv4Address :: (Prelude.Maybe (Value Prelude.Text)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-loadbalancer-subnetmapping.html#cfn-elasticloadbalancingv2-loadbalancer-subnetmapping-sourcenatipv6prefix>
+                           sourceNatIpv6Prefix :: (Prelude.Maybe (Value Prelude.Text)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-loadbalancer-subnetmapping.html#cfn-elasticloadbalancingv2-loadbalancer-subnetmapping-subnetid>
+                           subnetId :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSubnetMappingProperty ::
+  Value Prelude.Text -> SubnetMappingProperty
+mkSubnetMappingProperty subnetId
+  = SubnetMappingProperty
+      {haddock_workaround_ = (), subnetId = subnetId,
+       allocationId = Prelude.Nothing, iPv6Address = Prelude.Nothing,
+       privateIPv4Address = Prelude.Nothing,
+       sourceNatIpv6Prefix = Prelude.Nothing}
+instance ToResourceProperties SubnetMappingProperty where
+  toResourceProperties SubnetMappingProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ElasticLoadBalancingV2::LoadBalancer.SubnetMapping",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["SubnetId" JSON..= subnetId]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AllocationId" Prelude.<$> allocationId,
+                               (JSON..=) "IPv6Address" Prelude.<$> iPv6Address,
+                               (JSON..=) "PrivateIPv4Address" Prelude.<$> privateIPv4Address,
+                               (JSON..=) "SourceNatIpv6Prefix" Prelude.<$> sourceNatIpv6Prefix]))}
+instance JSON.ToJSON SubnetMappingProperty where
+  toJSON SubnetMappingProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["SubnetId" JSON..= subnetId]
+              (Prelude.catMaybes
+                 [(JSON..=) "AllocationId" Prelude.<$> allocationId,
+                  (JSON..=) "IPv6Address" Prelude.<$> iPv6Address,
+                  (JSON..=) "PrivateIPv4Address" Prelude.<$> privateIPv4Address,
+                  (JSON..=) "SourceNatIpv6Prefix" Prelude.<$> sourceNatIpv6Prefix])))
+instance Property "AllocationId" SubnetMappingProperty where
+  type PropertyType "AllocationId" SubnetMappingProperty = Value Prelude.Text
+  set newValue SubnetMappingProperty {..}
+    = SubnetMappingProperty {allocationId = Prelude.pure newValue, ..}
+instance Property "IPv6Address" SubnetMappingProperty where
+  type PropertyType "IPv6Address" SubnetMappingProperty = Value Prelude.Text
+  set newValue SubnetMappingProperty {..}
+    = SubnetMappingProperty {iPv6Address = Prelude.pure newValue, ..}
+instance Property "PrivateIPv4Address" SubnetMappingProperty where
+  type PropertyType "PrivateIPv4Address" SubnetMappingProperty = Value Prelude.Text
+  set newValue SubnetMappingProperty {..}
+    = SubnetMappingProperty
+        {privateIPv4Address = Prelude.pure newValue, ..}
+instance Property "SourceNatIpv6Prefix" SubnetMappingProperty where
+  type PropertyType "SourceNatIpv6Prefix" SubnetMappingProperty = Value Prelude.Text
+  set newValue SubnetMappingProperty {..}
+    = SubnetMappingProperty
+        {sourceNatIpv6Prefix = Prelude.pure newValue, ..}
+instance Property "SubnetId" SubnetMappingProperty where
+  type PropertyType "SubnetId" SubnetMappingProperty = Value Prelude.Text
+  set newValue SubnetMappingProperty {..}
+    = SubnetMappingProperty {subnetId = newValue, ..}
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/LoadBalancer/SubnetMappingProperty.hs-boot b/gen/Stratosphere/ElasticLoadBalancingV2/LoadBalancer/SubnetMappingProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/LoadBalancer/SubnetMappingProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ElasticLoadBalancingV2.LoadBalancer.SubnetMappingProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data SubnetMappingProperty :: Prelude.Type
+instance ToResourceProperties SubnetMappingProperty
+instance Prelude.Eq SubnetMappingProperty
+instance Prelude.Show SubnetMappingProperty
+instance JSON.ToJSON SubnetMappingProperty
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/TargetGroup.hs b/gen/Stratosphere/ElasticLoadBalancingV2/TargetGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/TargetGroup.hs
@@ -0,0 +1,208 @@
+module Stratosphere.ElasticLoadBalancingV2.TargetGroup (
+        module Exports, TargetGroup(..), mkTargetGroup
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ElasticLoadBalancingV2.TargetGroup.MatcherProperty as Exports
+import {-# SOURCE #-} Stratosphere.ElasticLoadBalancingV2.TargetGroup.TargetDescriptionProperty as Exports
+import {-# SOURCE #-} Stratosphere.ElasticLoadBalancingV2.TargetGroup.TargetGroupAttributeProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data TargetGroup
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-targetgroup.html>
+    TargetGroup {haddock_workaround_ :: (),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-targetgroup.html#cfn-elasticloadbalancingv2-targetgroup-healthcheckenabled>
+                 healthCheckEnabled :: (Prelude.Maybe (Value Prelude.Bool)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-targetgroup.html#cfn-elasticloadbalancingv2-targetgroup-healthcheckintervalseconds>
+                 healthCheckIntervalSeconds :: (Prelude.Maybe (Value Prelude.Integer)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-targetgroup.html#cfn-elasticloadbalancingv2-targetgroup-healthcheckpath>
+                 healthCheckPath :: (Prelude.Maybe (Value Prelude.Text)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-targetgroup.html#cfn-elasticloadbalancingv2-targetgroup-healthcheckport>
+                 healthCheckPort :: (Prelude.Maybe (Value Prelude.Text)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-targetgroup.html#cfn-elasticloadbalancingv2-targetgroup-healthcheckprotocol>
+                 healthCheckProtocol :: (Prelude.Maybe (Value Prelude.Text)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-targetgroup.html#cfn-elasticloadbalancingv2-targetgroup-healthchecktimeoutseconds>
+                 healthCheckTimeoutSeconds :: (Prelude.Maybe (Value Prelude.Integer)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-targetgroup.html#cfn-elasticloadbalancingv2-targetgroup-healthythresholdcount>
+                 healthyThresholdCount :: (Prelude.Maybe (Value Prelude.Integer)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-targetgroup.html#cfn-elasticloadbalancingv2-targetgroup-ipaddresstype>
+                 ipAddressType :: (Prelude.Maybe (Value Prelude.Text)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-targetgroup.html#cfn-elasticloadbalancingv2-targetgroup-matcher>
+                 matcher :: (Prelude.Maybe MatcherProperty),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-targetgroup.html#cfn-elasticloadbalancingv2-targetgroup-name>
+                 name :: (Prelude.Maybe (Value Prelude.Text)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-targetgroup.html#cfn-elasticloadbalancingv2-targetgroup-port>
+                 port :: (Prelude.Maybe (Value Prelude.Integer)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-targetgroup.html#cfn-elasticloadbalancingv2-targetgroup-protocol>
+                 protocol :: (Prelude.Maybe (Value Prelude.Text)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-targetgroup.html#cfn-elasticloadbalancingv2-targetgroup-protocolversion>
+                 protocolVersion :: (Prelude.Maybe (Value Prelude.Text)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-targetgroup.html#cfn-elasticloadbalancingv2-targetgroup-tags>
+                 tags :: (Prelude.Maybe [Tag]),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-targetgroup.html#cfn-elasticloadbalancingv2-targetgroup-targetgroupattributes>
+                 targetGroupAttributes :: (Prelude.Maybe [TargetGroupAttributeProperty]),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-targetgroup.html#cfn-elasticloadbalancingv2-targetgroup-targettype>
+                 targetType :: (Prelude.Maybe (Value Prelude.Text)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-targetgroup.html#cfn-elasticloadbalancingv2-targetgroup-targets>
+                 targets :: (Prelude.Maybe [TargetDescriptionProperty]),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-targetgroup.html#cfn-elasticloadbalancingv2-targetgroup-unhealthythresholdcount>
+                 unhealthyThresholdCount :: (Prelude.Maybe (Value Prelude.Integer)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-targetgroup.html#cfn-elasticloadbalancingv2-targetgroup-vpcid>
+                 vpcId :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTargetGroup :: TargetGroup
+mkTargetGroup
+  = TargetGroup
+      {haddock_workaround_ = (), healthCheckEnabled = Prelude.Nothing,
+       healthCheckIntervalSeconds = Prelude.Nothing,
+       healthCheckPath = Prelude.Nothing,
+       healthCheckPort = Prelude.Nothing,
+       healthCheckProtocol = Prelude.Nothing,
+       healthCheckTimeoutSeconds = Prelude.Nothing,
+       healthyThresholdCount = Prelude.Nothing,
+       ipAddressType = Prelude.Nothing, matcher = Prelude.Nothing,
+       name = Prelude.Nothing, port = Prelude.Nothing,
+       protocol = Prelude.Nothing, protocolVersion = Prelude.Nothing,
+       tags = Prelude.Nothing, targetGroupAttributes = Prelude.Nothing,
+       targetType = Prelude.Nothing, targets = Prelude.Nothing,
+       unhealthyThresholdCount = Prelude.Nothing, vpcId = Prelude.Nothing}
+instance ToResourceProperties TargetGroup where
+  toResourceProperties TargetGroup {..}
+    = ResourceProperties
+        {awsType = "AWS::ElasticLoadBalancingV2::TargetGroup",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "HealthCheckEnabled" Prelude.<$> healthCheckEnabled,
+                            (JSON..=) "HealthCheckIntervalSeconds"
+                              Prelude.<$> healthCheckIntervalSeconds,
+                            (JSON..=) "HealthCheckPath" Prelude.<$> healthCheckPath,
+                            (JSON..=) "HealthCheckPort" Prelude.<$> healthCheckPort,
+                            (JSON..=) "HealthCheckProtocol" Prelude.<$> healthCheckProtocol,
+                            (JSON..=) "HealthCheckTimeoutSeconds"
+                              Prelude.<$> healthCheckTimeoutSeconds,
+                            (JSON..=) "HealthyThresholdCount"
+                              Prelude.<$> healthyThresholdCount,
+                            (JSON..=) "IpAddressType" Prelude.<$> ipAddressType,
+                            (JSON..=) "Matcher" Prelude.<$> matcher,
+                            (JSON..=) "Name" Prelude.<$> name,
+                            (JSON..=) "Port" Prelude.<$> port,
+                            (JSON..=) "Protocol" Prelude.<$> protocol,
+                            (JSON..=) "ProtocolVersion" Prelude.<$> protocolVersion,
+                            (JSON..=) "Tags" Prelude.<$> tags,
+                            (JSON..=) "TargetGroupAttributes"
+                              Prelude.<$> targetGroupAttributes,
+                            (JSON..=) "TargetType" Prelude.<$> targetType,
+                            (JSON..=) "Targets" Prelude.<$> targets,
+                            (JSON..=) "UnhealthyThresholdCount"
+                              Prelude.<$> unhealthyThresholdCount,
+                            (JSON..=) "VpcId" Prelude.<$> vpcId])}
+instance JSON.ToJSON TargetGroup where
+  toJSON TargetGroup {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "HealthCheckEnabled" Prelude.<$> healthCheckEnabled,
+               (JSON..=) "HealthCheckIntervalSeconds"
+                 Prelude.<$> healthCheckIntervalSeconds,
+               (JSON..=) "HealthCheckPath" Prelude.<$> healthCheckPath,
+               (JSON..=) "HealthCheckPort" Prelude.<$> healthCheckPort,
+               (JSON..=) "HealthCheckProtocol" Prelude.<$> healthCheckProtocol,
+               (JSON..=) "HealthCheckTimeoutSeconds"
+                 Prelude.<$> healthCheckTimeoutSeconds,
+               (JSON..=) "HealthyThresholdCount"
+                 Prelude.<$> healthyThresholdCount,
+               (JSON..=) "IpAddressType" Prelude.<$> ipAddressType,
+               (JSON..=) "Matcher" Prelude.<$> matcher,
+               (JSON..=) "Name" Prelude.<$> name,
+               (JSON..=) "Port" Prelude.<$> port,
+               (JSON..=) "Protocol" Prelude.<$> protocol,
+               (JSON..=) "ProtocolVersion" Prelude.<$> protocolVersion,
+               (JSON..=) "Tags" Prelude.<$> tags,
+               (JSON..=) "TargetGroupAttributes"
+                 Prelude.<$> targetGroupAttributes,
+               (JSON..=) "TargetType" Prelude.<$> targetType,
+               (JSON..=) "Targets" Prelude.<$> targets,
+               (JSON..=) "UnhealthyThresholdCount"
+                 Prelude.<$> unhealthyThresholdCount,
+               (JSON..=) "VpcId" Prelude.<$> vpcId]))
+instance Property "HealthCheckEnabled" TargetGroup where
+  type PropertyType "HealthCheckEnabled" TargetGroup = Value Prelude.Bool
+  set newValue TargetGroup {..}
+    = TargetGroup {healthCheckEnabled = Prelude.pure newValue, ..}
+instance Property "HealthCheckIntervalSeconds" TargetGroup where
+  type PropertyType "HealthCheckIntervalSeconds" TargetGroup = Value Prelude.Integer
+  set newValue TargetGroup {..}
+    = TargetGroup
+        {healthCheckIntervalSeconds = Prelude.pure newValue, ..}
+instance Property "HealthCheckPath" TargetGroup where
+  type PropertyType "HealthCheckPath" TargetGroup = Value Prelude.Text
+  set newValue TargetGroup {..}
+    = TargetGroup {healthCheckPath = Prelude.pure newValue, ..}
+instance Property "HealthCheckPort" TargetGroup where
+  type PropertyType "HealthCheckPort" TargetGroup = Value Prelude.Text
+  set newValue TargetGroup {..}
+    = TargetGroup {healthCheckPort = Prelude.pure newValue, ..}
+instance Property "HealthCheckProtocol" TargetGroup where
+  type PropertyType "HealthCheckProtocol" TargetGroup = Value Prelude.Text
+  set newValue TargetGroup {..}
+    = TargetGroup {healthCheckProtocol = Prelude.pure newValue, ..}
+instance Property "HealthCheckTimeoutSeconds" TargetGroup where
+  type PropertyType "HealthCheckTimeoutSeconds" TargetGroup = Value Prelude.Integer
+  set newValue TargetGroup {..}
+    = TargetGroup
+        {healthCheckTimeoutSeconds = Prelude.pure newValue, ..}
+instance Property "HealthyThresholdCount" TargetGroup where
+  type PropertyType "HealthyThresholdCount" TargetGroup = Value Prelude.Integer
+  set newValue TargetGroup {..}
+    = TargetGroup {healthyThresholdCount = Prelude.pure newValue, ..}
+instance Property "IpAddressType" TargetGroup where
+  type PropertyType "IpAddressType" TargetGroup = Value Prelude.Text
+  set newValue TargetGroup {..}
+    = TargetGroup {ipAddressType = Prelude.pure newValue, ..}
+instance Property "Matcher" TargetGroup where
+  type PropertyType "Matcher" TargetGroup = MatcherProperty
+  set newValue TargetGroup {..}
+    = TargetGroup {matcher = Prelude.pure newValue, ..}
+instance Property "Name" TargetGroup where
+  type PropertyType "Name" TargetGroup = Value Prelude.Text
+  set newValue TargetGroup {..}
+    = TargetGroup {name = Prelude.pure newValue, ..}
+instance Property "Port" TargetGroup where
+  type PropertyType "Port" TargetGroup = Value Prelude.Integer
+  set newValue TargetGroup {..}
+    = TargetGroup {port = Prelude.pure newValue, ..}
+instance Property "Protocol" TargetGroup where
+  type PropertyType "Protocol" TargetGroup = Value Prelude.Text
+  set newValue TargetGroup {..}
+    = TargetGroup {protocol = Prelude.pure newValue, ..}
+instance Property "ProtocolVersion" TargetGroup where
+  type PropertyType "ProtocolVersion" TargetGroup = Value Prelude.Text
+  set newValue TargetGroup {..}
+    = TargetGroup {protocolVersion = Prelude.pure newValue, ..}
+instance Property "Tags" TargetGroup where
+  type PropertyType "Tags" TargetGroup = [Tag]
+  set newValue TargetGroup {..}
+    = TargetGroup {tags = Prelude.pure newValue, ..}
+instance Property "TargetGroupAttributes" TargetGroup where
+  type PropertyType "TargetGroupAttributes" TargetGroup = [TargetGroupAttributeProperty]
+  set newValue TargetGroup {..}
+    = TargetGroup {targetGroupAttributes = Prelude.pure newValue, ..}
+instance Property "TargetType" TargetGroup where
+  type PropertyType "TargetType" TargetGroup = Value Prelude.Text
+  set newValue TargetGroup {..}
+    = TargetGroup {targetType = Prelude.pure newValue, ..}
+instance Property "Targets" TargetGroup where
+  type PropertyType "Targets" TargetGroup = [TargetDescriptionProperty]
+  set newValue TargetGroup {..}
+    = TargetGroup {targets = Prelude.pure newValue, ..}
+instance Property "UnhealthyThresholdCount" TargetGroup where
+  type PropertyType "UnhealthyThresholdCount" TargetGroup = Value Prelude.Integer
+  set newValue TargetGroup {..}
+    = TargetGroup {unhealthyThresholdCount = Prelude.pure newValue, ..}
+instance Property "VpcId" TargetGroup where
+  type PropertyType "VpcId" TargetGroup = Value Prelude.Text
+  set newValue TargetGroup {..}
+    = TargetGroup {vpcId = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/TargetGroup/MatcherProperty.hs b/gen/Stratosphere/ElasticLoadBalancingV2/TargetGroup/MatcherProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/TargetGroup/MatcherProperty.hs
@@ -0,0 +1,45 @@
+module Stratosphere.ElasticLoadBalancingV2.TargetGroup.MatcherProperty (
+        MatcherProperty(..), mkMatcherProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data MatcherProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-targetgroup-matcher.html>
+    MatcherProperty {haddock_workaround_ :: (),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-targetgroup-matcher.html#cfn-elasticloadbalancingv2-targetgroup-matcher-grpccode>
+                     grpcCode :: (Prelude.Maybe (Value Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-targetgroup-matcher.html#cfn-elasticloadbalancingv2-targetgroup-matcher-httpcode>
+                     httpCode :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkMatcherProperty :: MatcherProperty
+mkMatcherProperty
+  = MatcherProperty
+      {haddock_workaround_ = (), grpcCode = Prelude.Nothing,
+       httpCode = Prelude.Nothing}
+instance ToResourceProperties MatcherProperty where
+  toResourceProperties MatcherProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ElasticLoadBalancingV2::TargetGroup.Matcher",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "GrpcCode" Prelude.<$> grpcCode,
+                            (JSON..=) "HttpCode" Prelude.<$> httpCode])}
+instance JSON.ToJSON MatcherProperty where
+  toJSON MatcherProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "GrpcCode" Prelude.<$> grpcCode,
+               (JSON..=) "HttpCode" Prelude.<$> httpCode]))
+instance Property "GrpcCode" MatcherProperty where
+  type PropertyType "GrpcCode" MatcherProperty = Value Prelude.Text
+  set newValue MatcherProperty {..}
+    = MatcherProperty {grpcCode = Prelude.pure newValue, ..}
+instance Property "HttpCode" MatcherProperty where
+  type PropertyType "HttpCode" MatcherProperty = Value Prelude.Text
+  set newValue MatcherProperty {..}
+    = MatcherProperty {httpCode = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/TargetGroup/MatcherProperty.hs-boot b/gen/Stratosphere/ElasticLoadBalancingV2/TargetGroup/MatcherProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/TargetGroup/MatcherProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ElasticLoadBalancingV2.TargetGroup.MatcherProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data MatcherProperty :: Prelude.Type
+instance ToResourceProperties MatcherProperty
+instance Prelude.Eq MatcherProperty
+instance Prelude.Show MatcherProperty
+instance JSON.ToJSON MatcherProperty
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/TargetGroup/TargetDescriptionProperty.hs b/gen/Stratosphere/ElasticLoadBalancingV2/TargetGroup/TargetDescriptionProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/TargetGroup/TargetDescriptionProperty.hs
@@ -0,0 +1,57 @@
+module Stratosphere.ElasticLoadBalancingV2.TargetGroup.TargetDescriptionProperty (
+        TargetDescriptionProperty(..), mkTargetDescriptionProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data TargetDescriptionProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-targetgroup-targetdescription.html>
+    TargetDescriptionProperty {haddock_workaround_ :: (),
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-targetgroup-targetdescription.html#cfn-elasticloadbalancingv2-targetgroup-targetdescription-availabilityzone>
+                               availabilityZone :: (Prelude.Maybe (Value Prelude.Text)),
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-targetgroup-targetdescription.html#cfn-elasticloadbalancingv2-targetgroup-targetdescription-id>
+                               id :: (Value Prelude.Text),
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-targetgroup-targetdescription.html#cfn-elasticloadbalancingv2-targetgroup-targetdescription-port>
+                               port :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTargetDescriptionProperty ::
+  Value Prelude.Text -> TargetDescriptionProperty
+mkTargetDescriptionProperty id
+  = TargetDescriptionProperty
+      {haddock_workaround_ = (), id = id,
+       availabilityZone = Prelude.Nothing, port = Prelude.Nothing}
+instance ToResourceProperties TargetDescriptionProperty where
+  toResourceProperties TargetDescriptionProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ElasticLoadBalancingV2::TargetGroup.TargetDescription",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Id" JSON..= id]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AvailabilityZone" Prelude.<$> availabilityZone,
+                               (JSON..=) "Port" Prelude.<$> port]))}
+instance JSON.ToJSON TargetDescriptionProperty where
+  toJSON TargetDescriptionProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Id" JSON..= id]
+              (Prelude.catMaybes
+                 [(JSON..=) "AvailabilityZone" Prelude.<$> availabilityZone,
+                  (JSON..=) "Port" Prelude.<$> port])))
+instance Property "AvailabilityZone" TargetDescriptionProperty where
+  type PropertyType "AvailabilityZone" TargetDescriptionProperty = Value Prelude.Text
+  set newValue TargetDescriptionProperty {..}
+    = TargetDescriptionProperty
+        {availabilityZone = Prelude.pure newValue, ..}
+instance Property "Id" TargetDescriptionProperty where
+  type PropertyType "Id" TargetDescriptionProperty = Value Prelude.Text
+  set newValue TargetDescriptionProperty {..}
+    = TargetDescriptionProperty {id = newValue, ..}
+instance Property "Port" TargetDescriptionProperty where
+  type PropertyType "Port" TargetDescriptionProperty = Value Prelude.Integer
+  set newValue TargetDescriptionProperty {..}
+    = TargetDescriptionProperty {port = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/TargetGroup/TargetDescriptionProperty.hs-boot b/gen/Stratosphere/ElasticLoadBalancingV2/TargetGroup/TargetDescriptionProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/TargetGroup/TargetDescriptionProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ElasticLoadBalancingV2.TargetGroup.TargetDescriptionProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data TargetDescriptionProperty :: Prelude.Type
+instance ToResourceProperties TargetDescriptionProperty
+instance Prelude.Eq TargetDescriptionProperty
+instance Prelude.Show TargetDescriptionProperty
+instance JSON.ToJSON TargetDescriptionProperty
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/TargetGroup/TargetGroupAttributeProperty.hs b/gen/Stratosphere/ElasticLoadBalancingV2/TargetGroup/TargetGroupAttributeProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/TargetGroup/TargetGroupAttributeProperty.hs
@@ -0,0 +1,45 @@
+module Stratosphere.ElasticLoadBalancingV2.TargetGroup.TargetGroupAttributeProperty (
+        TargetGroupAttributeProperty(..), mkTargetGroupAttributeProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data TargetGroupAttributeProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-targetgroup-targetgroupattribute.html>
+    TargetGroupAttributeProperty {haddock_workaround_ :: (),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-targetgroup-targetgroupattribute.html#cfn-elasticloadbalancingv2-targetgroup-targetgroupattribute-key>
+                                  key :: (Prelude.Maybe (Value Prelude.Text)),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-targetgroup-targetgroupattribute.html#cfn-elasticloadbalancingv2-targetgroup-targetgroupattribute-value>
+                                  value :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTargetGroupAttributeProperty :: TargetGroupAttributeProperty
+mkTargetGroupAttributeProperty
+  = TargetGroupAttributeProperty
+      {haddock_workaround_ = (), key = Prelude.Nothing,
+       value = Prelude.Nothing}
+instance ToResourceProperties TargetGroupAttributeProperty where
+  toResourceProperties TargetGroupAttributeProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ElasticLoadBalancingV2::TargetGroup.TargetGroupAttribute",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Key" Prelude.<$> key,
+                            (JSON..=) "Value" Prelude.<$> value])}
+instance JSON.ToJSON TargetGroupAttributeProperty where
+  toJSON TargetGroupAttributeProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Key" Prelude.<$> key,
+               (JSON..=) "Value" Prelude.<$> value]))
+instance Property "Key" TargetGroupAttributeProperty where
+  type PropertyType "Key" TargetGroupAttributeProperty = Value Prelude.Text
+  set newValue TargetGroupAttributeProperty {..}
+    = TargetGroupAttributeProperty {key = Prelude.pure newValue, ..}
+instance Property "Value" TargetGroupAttributeProperty where
+  type PropertyType "Value" TargetGroupAttributeProperty = Value Prelude.Text
+  set newValue TargetGroupAttributeProperty {..}
+    = TargetGroupAttributeProperty {value = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/TargetGroup/TargetGroupAttributeProperty.hs-boot b/gen/Stratosphere/ElasticLoadBalancingV2/TargetGroup/TargetGroupAttributeProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/TargetGroup/TargetGroupAttributeProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ElasticLoadBalancingV2.TargetGroup.TargetGroupAttributeProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data TargetGroupAttributeProperty :: Prelude.Type
+instance ToResourceProperties TargetGroupAttributeProperty
+instance Prelude.Eq TargetGroupAttributeProperty
+instance Prelude.Show TargetGroupAttributeProperty
+instance JSON.ToJSON TargetGroupAttributeProperty
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/TrustStore.hs b/gen/Stratosphere/ElasticLoadBalancingV2/TrustStore.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/TrustStore.hs
@@ -0,0 +1,82 @@
+module Stratosphere.ElasticLoadBalancingV2.TrustStore (
+        TrustStore(..), mkTrustStore
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data TrustStore
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-truststore.html>
+    TrustStore {haddock_workaround_ :: (),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-truststore.html#cfn-elasticloadbalancingv2-truststore-cacertificatesbundles3bucket>
+                caCertificatesBundleS3Bucket :: (Prelude.Maybe (Value Prelude.Text)),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-truststore.html#cfn-elasticloadbalancingv2-truststore-cacertificatesbundles3key>
+                caCertificatesBundleS3Key :: (Prelude.Maybe (Value Prelude.Text)),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-truststore.html#cfn-elasticloadbalancingv2-truststore-cacertificatesbundles3objectversion>
+                caCertificatesBundleS3ObjectVersion :: (Prelude.Maybe (Value Prelude.Text)),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-truststore.html#cfn-elasticloadbalancingv2-truststore-name>
+                name :: (Prelude.Maybe (Value Prelude.Text)),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-truststore.html#cfn-elasticloadbalancingv2-truststore-tags>
+                tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTrustStore :: TrustStore
+mkTrustStore
+  = TrustStore
+      {haddock_workaround_ = (),
+       caCertificatesBundleS3Bucket = Prelude.Nothing,
+       caCertificatesBundleS3Key = Prelude.Nothing,
+       caCertificatesBundleS3ObjectVersion = Prelude.Nothing,
+       name = Prelude.Nothing, tags = Prelude.Nothing}
+instance ToResourceProperties TrustStore where
+  toResourceProperties TrustStore {..}
+    = ResourceProperties
+        {awsType = "AWS::ElasticLoadBalancingV2::TrustStore",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "CaCertificatesBundleS3Bucket"
+                              Prelude.<$> caCertificatesBundleS3Bucket,
+                            (JSON..=) "CaCertificatesBundleS3Key"
+                              Prelude.<$> caCertificatesBundleS3Key,
+                            (JSON..=) "CaCertificatesBundleS3ObjectVersion"
+                              Prelude.<$> caCertificatesBundleS3ObjectVersion,
+                            (JSON..=) "Name" Prelude.<$> name,
+                            (JSON..=) "Tags" Prelude.<$> tags])}
+instance JSON.ToJSON TrustStore where
+  toJSON TrustStore {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "CaCertificatesBundleS3Bucket"
+                 Prelude.<$> caCertificatesBundleS3Bucket,
+               (JSON..=) "CaCertificatesBundleS3Key"
+                 Prelude.<$> caCertificatesBundleS3Key,
+               (JSON..=) "CaCertificatesBundleS3ObjectVersion"
+                 Prelude.<$> caCertificatesBundleS3ObjectVersion,
+               (JSON..=) "Name" Prelude.<$> name,
+               (JSON..=) "Tags" Prelude.<$> tags]))
+instance Property "CaCertificatesBundleS3Bucket" TrustStore where
+  type PropertyType "CaCertificatesBundleS3Bucket" TrustStore = Value Prelude.Text
+  set newValue TrustStore {..}
+    = TrustStore
+        {caCertificatesBundleS3Bucket = Prelude.pure newValue, ..}
+instance Property "CaCertificatesBundleS3Key" TrustStore where
+  type PropertyType "CaCertificatesBundleS3Key" TrustStore = Value Prelude.Text
+  set newValue TrustStore {..}
+    = TrustStore
+        {caCertificatesBundleS3Key = Prelude.pure newValue, ..}
+instance Property "CaCertificatesBundleS3ObjectVersion" TrustStore where
+  type PropertyType "CaCertificatesBundleS3ObjectVersion" TrustStore = Value Prelude.Text
+  set newValue TrustStore {..}
+    = TrustStore
+        {caCertificatesBundleS3ObjectVersion = Prelude.pure newValue, ..}
+instance Property "Name" TrustStore where
+  type PropertyType "Name" TrustStore = Value Prelude.Text
+  set newValue TrustStore {..}
+    = TrustStore {name = Prelude.pure newValue, ..}
+instance Property "Tags" TrustStore where
+  type PropertyType "Tags" TrustStore = [Tag]
+  set newValue TrustStore {..}
+    = TrustStore {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/TrustStoreRevocation.hs b/gen/Stratosphere/ElasticLoadBalancingV2/TrustStoreRevocation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/TrustStoreRevocation.hs
@@ -0,0 +1,47 @@
+module Stratosphere.ElasticLoadBalancingV2.TrustStoreRevocation (
+        module Exports, TrustStoreRevocation(..), mkTrustStoreRevocation
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ElasticLoadBalancingV2.TrustStoreRevocation.RevocationContentProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data TrustStoreRevocation
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-truststorerevocation.html>
+    TrustStoreRevocation {haddock_workaround_ :: (),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-truststorerevocation.html#cfn-elasticloadbalancingv2-truststorerevocation-revocationcontents>
+                          revocationContents :: (Prelude.Maybe [RevocationContentProperty]),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-truststorerevocation.html#cfn-elasticloadbalancingv2-truststorerevocation-truststorearn>
+                          trustStoreArn :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTrustStoreRevocation :: TrustStoreRevocation
+mkTrustStoreRevocation
+  = TrustStoreRevocation
+      {haddock_workaround_ = (), revocationContents = Prelude.Nothing,
+       trustStoreArn = Prelude.Nothing}
+instance ToResourceProperties TrustStoreRevocation where
+  toResourceProperties TrustStoreRevocation {..}
+    = ResourceProperties
+        {awsType = "AWS::ElasticLoadBalancingV2::TrustStoreRevocation",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "RevocationContents" Prelude.<$> revocationContents,
+                            (JSON..=) "TrustStoreArn" Prelude.<$> trustStoreArn])}
+instance JSON.ToJSON TrustStoreRevocation where
+  toJSON TrustStoreRevocation {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "RevocationContents" Prelude.<$> revocationContents,
+               (JSON..=) "TrustStoreArn" Prelude.<$> trustStoreArn]))
+instance Property "RevocationContents" TrustStoreRevocation where
+  type PropertyType "RevocationContents" TrustStoreRevocation = [RevocationContentProperty]
+  set newValue TrustStoreRevocation {..}
+    = TrustStoreRevocation
+        {revocationContents = Prelude.pure newValue, ..}
+instance Property "TrustStoreArn" TrustStoreRevocation where
+  type PropertyType "TrustStoreArn" TrustStoreRevocation = Value Prelude.Text
+  set newValue TrustStoreRevocation {..}
+    = TrustStoreRevocation {trustStoreArn = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/TrustStoreRevocation/RevocationContentProperty.hs b/gen/Stratosphere/ElasticLoadBalancingV2/TrustStoreRevocation/RevocationContentProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/TrustStoreRevocation/RevocationContentProperty.hs
@@ -0,0 +1,64 @@
+module Stratosphere.ElasticLoadBalancingV2.TrustStoreRevocation.RevocationContentProperty (
+        RevocationContentProperty(..), mkRevocationContentProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data RevocationContentProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-truststorerevocation-revocationcontent.html>
+    RevocationContentProperty {haddock_workaround_ :: (),
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-truststorerevocation-revocationcontent.html#cfn-elasticloadbalancingv2-truststorerevocation-revocationcontent-revocationtype>
+                               revocationType :: (Prelude.Maybe (Value Prelude.Text)),
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-truststorerevocation-revocationcontent.html#cfn-elasticloadbalancingv2-truststorerevocation-revocationcontent-s3bucket>
+                               s3Bucket :: (Prelude.Maybe (Value Prelude.Text)),
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-truststorerevocation-revocationcontent.html#cfn-elasticloadbalancingv2-truststorerevocation-revocationcontent-s3key>
+                               s3Key :: (Prelude.Maybe (Value Prelude.Text)),
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-truststorerevocation-revocationcontent.html#cfn-elasticloadbalancingv2-truststorerevocation-revocationcontent-s3objectversion>
+                               s3ObjectVersion :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkRevocationContentProperty :: RevocationContentProperty
+mkRevocationContentProperty
+  = RevocationContentProperty
+      {haddock_workaround_ = (), revocationType = Prelude.Nothing,
+       s3Bucket = Prelude.Nothing, s3Key = Prelude.Nothing,
+       s3ObjectVersion = Prelude.Nothing}
+instance ToResourceProperties RevocationContentProperty where
+  toResourceProperties RevocationContentProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ElasticLoadBalancingV2::TrustStoreRevocation.RevocationContent",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "RevocationType" Prelude.<$> revocationType,
+                            (JSON..=) "S3Bucket" Prelude.<$> s3Bucket,
+                            (JSON..=) "S3Key" Prelude.<$> s3Key,
+                            (JSON..=) "S3ObjectVersion" Prelude.<$> s3ObjectVersion])}
+instance JSON.ToJSON RevocationContentProperty where
+  toJSON RevocationContentProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "RevocationType" Prelude.<$> revocationType,
+               (JSON..=) "S3Bucket" Prelude.<$> s3Bucket,
+               (JSON..=) "S3Key" Prelude.<$> s3Key,
+               (JSON..=) "S3ObjectVersion" Prelude.<$> s3ObjectVersion]))
+instance Property "RevocationType" RevocationContentProperty where
+  type PropertyType "RevocationType" RevocationContentProperty = Value Prelude.Text
+  set newValue RevocationContentProperty {..}
+    = RevocationContentProperty
+        {revocationType = Prelude.pure newValue, ..}
+instance Property "S3Bucket" RevocationContentProperty where
+  type PropertyType "S3Bucket" RevocationContentProperty = Value Prelude.Text
+  set newValue RevocationContentProperty {..}
+    = RevocationContentProperty {s3Bucket = Prelude.pure newValue, ..}
+instance Property "S3Key" RevocationContentProperty where
+  type PropertyType "S3Key" RevocationContentProperty = Value Prelude.Text
+  set newValue RevocationContentProperty {..}
+    = RevocationContentProperty {s3Key = Prelude.pure newValue, ..}
+instance Property "S3ObjectVersion" RevocationContentProperty where
+  type PropertyType "S3ObjectVersion" RevocationContentProperty = Value Prelude.Text
+  set newValue RevocationContentProperty {..}
+    = RevocationContentProperty
+        {s3ObjectVersion = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/TrustStoreRevocation/RevocationContentProperty.hs-boot b/gen/Stratosphere/ElasticLoadBalancingV2/TrustStoreRevocation/RevocationContentProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/TrustStoreRevocation/RevocationContentProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ElasticLoadBalancingV2.TrustStoreRevocation.RevocationContentProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data RevocationContentProperty :: Prelude.Type
+instance ToResourceProperties RevocationContentProperty
+instance Prelude.Eq RevocationContentProperty
+instance Prelude.Show RevocationContentProperty
+instance JSON.ToJSON RevocationContentProperty
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/TrustStoreRevocation/TrustStoreRevocationProperty.hs b/gen/Stratosphere/ElasticLoadBalancingV2/TrustStoreRevocation/TrustStoreRevocationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/TrustStoreRevocation/TrustStoreRevocationProperty.hs
@@ -0,0 +1,69 @@
+module Stratosphere.ElasticLoadBalancingV2.TrustStoreRevocation.TrustStoreRevocationProperty (
+        TrustStoreRevocationProperty(..), mkTrustStoreRevocationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data TrustStoreRevocationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-truststorerevocation-truststorerevocation.html>
+    TrustStoreRevocationProperty {haddock_workaround_ :: (),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-truststorerevocation-truststorerevocation.html#cfn-elasticloadbalancingv2-truststorerevocation-truststorerevocation-numberofrevokedentries>
+                                  numberOfRevokedEntries :: (Prelude.Maybe (Value Prelude.Integer)),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-truststorerevocation-truststorerevocation.html#cfn-elasticloadbalancingv2-truststorerevocation-truststorerevocation-revocationid>
+                                  revocationId :: (Prelude.Maybe (Value Prelude.Text)),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-truststorerevocation-truststorerevocation.html#cfn-elasticloadbalancingv2-truststorerevocation-truststorerevocation-revocationtype>
+                                  revocationType :: (Prelude.Maybe (Value Prelude.Text)),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-truststorerevocation-truststorerevocation.html#cfn-elasticloadbalancingv2-truststorerevocation-truststorerevocation-truststorearn>
+                                  trustStoreArn :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTrustStoreRevocationProperty :: TrustStoreRevocationProperty
+mkTrustStoreRevocationProperty
+  = TrustStoreRevocationProperty
+      {haddock_workaround_ = (),
+       numberOfRevokedEntries = Prelude.Nothing,
+       revocationId = Prelude.Nothing, revocationType = Prelude.Nothing,
+       trustStoreArn = Prelude.Nothing}
+instance ToResourceProperties TrustStoreRevocationProperty where
+  toResourceProperties TrustStoreRevocationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ElasticLoadBalancingV2::TrustStoreRevocation.TrustStoreRevocation",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "NumberOfRevokedEntries"
+                              Prelude.<$> numberOfRevokedEntries,
+                            (JSON..=) "RevocationId" Prelude.<$> revocationId,
+                            (JSON..=) "RevocationType" Prelude.<$> revocationType,
+                            (JSON..=) "TrustStoreArn" Prelude.<$> trustStoreArn])}
+instance JSON.ToJSON TrustStoreRevocationProperty where
+  toJSON TrustStoreRevocationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "NumberOfRevokedEntries"
+                 Prelude.<$> numberOfRevokedEntries,
+               (JSON..=) "RevocationId" Prelude.<$> revocationId,
+               (JSON..=) "RevocationType" Prelude.<$> revocationType,
+               (JSON..=) "TrustStoreArn" Prelude.<$> trustStoreArn]))
+instance Property "NumberOfRevokedEntries" TrustStoreRevocationProperty where
+  type PropertyType "NumberOfRevokedEntries" TrustStoreRevocationProperty = Value Prelude.Integer
+  set newValue TrustStoreRevocationProperty {..}
+    = TrustStoreRevocationProperty
+        {numberOfRevokedEntries = Prelude.pure newValue, ..}
+instance Property "RevocationId" TrustStoreRevocationProperty where
+  type PropertyType "RevocationId" TrustStoreRevocationProperty = Value Prelude.Text
+  set newValue TrustStoreRevocationProperty {..}
+    = TrustStoreRevocationProperty
+        {revocationId = Prelude.pure newValue, ..}
+instance Property "RevocationType" TrustStoreRevocationProperty where
+  type PropertyType "RevocationType" TrustStoreRevocationProperty = Value Prelude.Text
+  set newValue TrustStoreRevocationProperty {..}
+    = TrustStoreRevocationProperty
+        {revocationType = Prelude.pure newValue, ..}
+instance Property "TrustStoreArn" TrustStoreRevocationProperty where
+  type PropertyType "TrustStoreArn" TrustStoreRevocationProperty = Value Prelude.Text
+  set newValue TrustStoreRevocationProperty {..}
+    = TrustStoreRevocationProperty
+        {trustStoreArn = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ElasticLoadBalancingV2/TrustStoreRevocation/TrustStoreRevocationProperty.hs-boot b/gen/Stratosphere/ElasticLoadBalancingV2/TrustStoreRevocation/TrustStoreRevocationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ElasticLoadBalancingV2/TrustStoreRevocation/TrustStoreRevocationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ElasticLoadBalancingV2.TrustStoreRevocation.TrustStoreRevocationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data TrustStoreRevocationProperty :: Prelude.Type
+instance ToResourceProperties TrustStoreRevocationProperty
+instance Prelude.Eq TrustStoreRevocationProperty
+instance Prelude.Show TrustStoreRevocationProperty
+instance JSON.ToJSON TrustStoreRevocationProperty
diff --git a/stratosphere-elasticloadbalancingv2.cabal b/stratosphere-elasticloadbalancingv2.cabal
new file mode 100644
--- /dev/null
+++ b/stratosphere-elasticloadbalancingv2.cabal
@@ -0,0 +1,118 @@
+cabal-version: 1.12
+
+-- This file has been generated from package.yaml by hpack version 0.38.2.
+--
+-- see: https://github.com/sol/hpack
+
+name:           stratosphere-elasticloadbalancingv2
+version:        1.0.0
+synopsis:       Stratosphere integration for AWS ElasticLoadBalancingV2.
+description:    Integration into stratosphere to generate resources and properties for AWS ElasticLoadBalancingV2
+category:       AWS, Cloud, ElasticLoadBalancingV2
+stability:      experimental
+homepage:       https://github.com/mbj/stratosphere#readme
+bug-reports:    https://github.com/mbj/stratosphere/issues
+maintainer:     Markus Schirp
+license:        MIT
+license-file:   LICENSE.md
+build-type:     Simple
+
+source-repository head
+  type: git
+  location: https://github.com/mbj/stratosphere
+
+flag development
+  description: Run GHC with development flags
+  manual: True
+  default: False
+
+library
+  exposed-modules:
+      Stratosphere.ElasticLoadBalancingV2.Listener
+      Stratosphere.ElasticLoadBalancingV2.Listener.ActionProperty
+      Stratosphere.ElasticLoadBalancingV2.Listener.AuthenticateCognitoConfigProperty
+      Stratosphere.ElasticLoadBalancingV2.Listener.AuthenticateOidcConfigProperty
+      Stratosphere.ElasticLoadBalancingV2.Listener.CertificateProperty
+      Stratosphere.ElasticLoadBalancingV2.Listener.FixedResponseConfigProperty
+      Stratosphere.ElasticLoadBalancingV2.Listener.ForwardConfigProperty
+      Stratosphere.ElasticLoadBalancingV2.Listener.ListenerAttributeProperty
+      Stratosphere.ElasticLoadBalancingV2.Listener.MutualAuthenticationProperty
+      Stratosphere.ElasticLoadBalancingV2.Listener.RedirectConfigProperty
+      Stratosphere.ElasticLoadBalancingV2.Listener.TargetGroupStickinessConfigProperty
+      Stratosphere.ElasticLoadBalancingV2.Listener.TargetGroupTupleProperty
+      Stratosphere.ElasticLoadBalancingV2.ListenerCertificate
+      Stratosphere.ElasticLoadBalancingV2.ListenerCertificate.CertificateProperty
+      Stratosphere.ElasticLoadBalancingV2.ListenerRule
+      Stratosphere.ElasticLoadBalancingV2.ListenerRule.ActionProperty
+      Stratosphere.ElasticLoadBalancingV2.ListenerRule.AuthenticateCognitoConfigProperty
+      Stratosphere.ElasticLoadBalancingV2.ListenerRule.AuthenticateOidcConfigProperty
+      Stratosphere.ElasticLoadBalancingV2.ListenerRule.FixedResponseConfigProperty
+      Stratosphere.ElasticLoadBalancingV2.ListenerRule.ForwardConfigProperty
+      Stratosphere.ElasticLoadBalancingV2.ListenerRule.HostHeaderConfigProperty
+      Stratosphere.ElasticLoadBalancingV2.ListenerRule.HttpHeaderConfigProperty
+      Stratosphere.ElasticLoadBalancingV2.ListenerRule.HttpRequestMethodConfigProperty
+      Stratosphere.ElasticLoadBalancingV2.ListenerRule.PathPatternConfigProperty
+      Stratosphere.ElasticLoadBalancingV2.ListenerRule.QueryStringConfigProperty
+      Stratosphere.ElasticLoadBalancingV2.ListenerRule.QueryStringKeyValueProperty
+      Stratosphere.ElasticLoadBalancingV2.ListenerRule.RedirectConfigProperty
+      Stratosphere.ElasticLoadBalancingV2.ListenerRule.RewriteConfigObjectProperty
+      Stratosphere.ElasticLoadBalancingV2.ListenerRule.RewriteConfigProperty
+      Stratosphere.ElasticLoadBalancingV2.ListenerRule.RuleConditionProperty
+      Stratosphere.ElasticLoadBalancingV2.ListenerRule.SourceIpConfigProperty
+      Stratosphere.ElasticLoadBalancingV2.ListenerRule.TargetGroupStickinessConfigProperty
+      Stratosphere.ElasticLoadBalancingV2.ListenerRule.TargetGroupTupleProperty
+      Stratosphere.ElasticLoadBalancingV2.ListenerRule.TransformProperty
+      Stratosphere.ElasticLoadBalancingV2.LoadBalancer
+      Stratosphere.ElasticLoadBalancingV2.LoadBalancer.LoadBalancerAttributeProperty
+      Stratosphere.ElasticLoadBalancingV2.LoadBalancer.MinimumLoadBalancerCapacityProperty
+      Stratosphere.ElasticLoadBalancingV2.LoadBalancer.SubnetMappingProperty
+      Stratosphere.ElasticLoadBalancingV2.TargetGroup
+      Stratosphere.ElasticLoadBalancingV2.TargetGroup.MatcherProperty
+      Stratosphere.ElasticLoadBalancingV2.TargetGroup.TargetDescriptionProperty
+      Stratosphere.ElasticLoadBalancingV2.TargetGroup.TargetGroupAttributeProperty
+      Stratosphere.ElasticLoadBalancingV2.TrustStore
+      Stratosphere.ElasticLoadBalancingV2.TrustStoreRevocation
+      Stratosphere.ElasticLoadBalancingV2.TrustStoreRevocation.RevocationContentProperty
+      Stratosphere.ElasticLoadBalancingV2.TrustStoreRevocation.TrustStoreRevocationProperty
+  other-modules:
+      Paths_stratosphere_elasticloadbalancingv2
+  hs-source-dirs:
+      gen
+  default-extensions:
+      DataKinds
+      DeriveGeneric
+      DerivingStrategies
+      DerivingVia
+      DuplicateRecordFields
+      FlexibleContexts
+      FlexibleInstances
+      GADTs
+      GeneralizedNewtypeDeriving
+      InstanceSigs
+      LambdaCase
+      MultiParamTypeClasses
+      NoFieldSelectors
+      NoImplicitPrelude
+      NumericUnderscores
+      OverloadedLists
+      OverloadedRecordDot
+      OverloadedStrings
+      PolyKinds
+      RecordWildCards
+      ScopedTypeVariables
+      StandaloneDeriving
+      Strict
+      TemplateHaskell
+      TupleSections
+      TypeApplications
+      TypeFamilies
+  ghc-options: -Wall -Wcompat -Widentities -Wimplicit-prelude -Wincomplete-record-updates -Wincomplete-uni-patterns -Wmissing-local-signatures -Wmissing-signatures -Wmonomorphism-restriction -Wredundant-constraints -fhide-source-paths -funbox-strict-fields -optP-Wno-nonportable-include-path -Wno-unused-imports
+  build-depends:
+      aeson ==2.*
+    , base >=4.8 && <4.22
+    , stratosphere ==1.0.0
+  default-language: Haskell2010
+  if flag(development)
+    ghc-options: -Werror
+  else
+    ghc-options: -Wwarn
