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/ACMPCA/Certificate.hs b/gen/Stratosphere/ACMPCA/Certificate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ACMPCA/Certificate.hs
@@ -0,0 +1,100 @@
+module Stratosphere.ACMPCA.Certificate (
+        module Exports, Certificate(..), mkCertificate
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ACMPCA.Certificate.ApiPassthroughProperty as Exports
+import {-# SOURCE #-} Stratosphere.ACMPCA.Certificate.ValidityProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data Certificate
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-acmpca-certificate.html>
+    Certificate {haddock_workaround_ :: (),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-acmpca-certificate.html#cfn-acmpca-certificate-apipassthrough>
+                 apiPassthrough :: (Prelude.Maybe ApiPassthroughProperty),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-acmpca-certificate.html#cfn-acmpca-certificate-certificateauthorityarn>
+                 certificateAuthorityArn :: (Value Prelude.Text),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-acmpca-certificate.html#cfn-acmpca-certificate-certificatesigningrequest>
+                 certificateSigningRequest :: (Value Prelude.Text),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-acmpca-certificate.html#cfn-acmpca-certificate-signingalgorithm>
+                 signingAlgorithm :: (Value Prelude.Text),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-acmpca-certificate.html#cfn-acmpca-certificate-templatearn>
+                 templateArn :: (Prelude.Maybe (Value Prelude.Text)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-acmpca-certificate.html#cfn-acmpca-certificate-validity>
+                 validity :: ValidityProperty,
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-acmpca-certificate.html#cfn-acmpca-certificate-validitynotbefore>
+                 validityNotBefore :: (Prelude.Maybe ValidityProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCertificate ::
+  Value Prelude.Text
+  -> Value Prelude.Text
+     -> Value Prelude.Text -> ValidityProperty -> Certificate
+mkCertificate
+  certificateAuthorityArn
+  certificateSigningRequest
+  signingAlgorithm
+  validity
+  = Certificate
+      {haddock_workaround_ = (),
+       certificateAuthorityArn = certificateAuthorityArn,
+       certificateSigningRequest = certificateSigningRequest,
+       signingAlgorithm = signingAlgorithm, validity = validity,
+       apiPassthrough = Prelude.Nothing, templateArn = Prelude.Nothing,
+       validityNotBefore = Prelude.Nothing}
+instance ToResourceProperties Certificate where
+  toResourceProperties Certificate {..}
+    = ResourceProperties
+        {awsType = "AWS::ACMPCA::Certificate",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["CertificateAuthorityArn" JSON..= certificateAuthorityArn,
+                            "CertificateSigningRequest" JSON..= certificateSigningRequest,
+                            "SigningAlgorithm" JSON..= signingAlgorithm,
+                            "Validity" JSON..= validity]
+                           (Prelude.catMaybes
+                              [(JSON..=) "ApiPassthrough" Prelude.<$> apiPassthrough,
+                               (JSON..=) "TemplateArn" Prelude.<$> templateArn,
+                               (JSON..=) "ValidityNotBefore" Prelude.<$> validityNotBefore]))}
+instance JSON.ToJSON Certificate where
+  toJSON Certificate {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["CertificateAuthorityArn" JSON..= certificateAuthorityArn,
+               "CertificateSigningRequest" JSON..= certificateSigningRequest,
+               "SigningAlgorithm" JSON..= signingAlgorithm,
+               "Validity" JSON..= validity]
+              (Prelude.catMaybes
+                 [(JSON..=) "ApiPassthrough" Prelude.<$> apiPassthrough,
+                  (JSON..=) "TemplateArn" Prelude.<$> templateArn,
+                  (JSON..=) "ValidityNotBefore" Prelude.<$> validityNotBefore])))
+instance Property "ApiPassthrough" Certificate where
+  type PropertyType "ApiPassthrough" Certificate = ApiPassthroughProperty
+  set newValue Certificate {..}
+    = Certificate {apiPassthrough = Prelude.pure newValue, ..}
+instance Property "CertificateAuthorityArn" Certificate where
+  type PropertyType "CertificateAuthorityArn" Certificate = Value Prelude.Text
+  set newValue Certificate {..}
+    = Certificate {certificateAuthorityArn = newValue, ..}
+instance Property "CertificateSigningRequest" Certificate where
+  type PropertyType "CertificateSigningRequest" Certificate = Value Prelude.Text
+  set newValue Certificate {..}
+    = Certificate {certificateSigningRequest = newValue, ..}
+instance Property "SigningAlgorithm" Certificate where
+  type PropertyType "SigningAlgorithm" Certificate = Value Prelude.Text
+  set newValue Certificate {..}
+    = Certificate {signingAlgorithm = newValue, ..}
+instance Property "TemplateArn" Certificate where
+  type PropertyType "TemplateArn" Certificate = Value Prelude.Text
+  set newValue Certificate {..}
+    = Certificate {templateArn = Prelude.pure newValue, ..}
+instance Property "Validity" Certificate where
+  type PropertyType "Validity" Certificate = ValidityProperty
+  set newValue Certificate {..}
+    = Certificate {validity = newValue, ..}
+instance Property "ValidityNotBefore" Certificate where
+  type PropertyType "ValidityNotBefore" Certificate = ValidityProperty
+  set newValue Certificate {..}
+    = Certificate {validityNotBefore = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ACMPCA/Certificate/ApiPassthroughProperty.hs b/gen/Stratosphere/ACMPCA/Certificate/ApiPassthroughProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ACMPCA/Certificate/ApiPassthroughProperty.hs
@@ -0,0 +1,47 @@
+module Stratosphere.ACMPCA.Certificate.ApiPassthroughProperty (
+        module Exports, ApiPassthroughProperty(..),
+        mkApiPassthroughProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ACMPCA.Certificate.ExtensionsProperty as Exports
+import {-# SOURCE #-} Stratosphere.ACMPCA.Certificate.SubjectProperty as Exports
+import Stratosphere.ResourceProperties
+data ApiPassthroughProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-apipassthrough.html>
+    ApiPassthroughProperty {haddock_workaround_ :: (),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-apipassthrough.html#cfn-acmpca-certificate-apipassthrough-extensions>
+                            extensions :: (Prelude.Maybe ExtensionsProperty),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-apipassthrough.html#cfn-acmpca-certificate-apipassthrough-subject>
+                            subject :: (Prelude.Maybe SubjectProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkApiPassthroughProperty :: ApiPassthroughProperty
+mkApiPassthroughProperty
+  = ApiPassthroughProperty
+      {haddock_workaround_ = (), extensions = Prelude.Nothing,
+       subject = Prelude.Nothing}
+instance ToResourceProperties ApiPassthroughProperty where
+  toResourceProperties ApiPassthroughProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ACMPCA::Certificate.ApiPassthrough",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Extensions" Prelude.<$> extensions,
+                            (JSON..=) "Subject" Prelude.<$> subject])}
+instance JSON.ToJSON ApiPassthroughProperty where
+  toJSON ApiPassthroughProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Extensions" Prelude.<$> extensions,
+               (JSON..=) "Subject" Prelude.<$> subject]))
+instance Property "Extensions" ApiPassthroughProperty where
+  type PropertyType "Extensions" ApiPassthroughProperty = ExtensionsProperty
+  set newValue ApiPassthroughProperty {..}
+    = ApiPassthroughProperty {extensions = Prelude.pure newValue, ..}
+instance Property "Subject" ApiPassthroughProperty where
+  type PropertyType "Subject" ApiPassthroughProperty = SubjectProperty
+  set newValue ApiPassthroughProperty {..}
+    = ApiPassthroughProperty {subject = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ACMPCA/Certificate/ApiPassthroughProperty.hs-boot b/gen/Stratosphere/ACMPCA/Certificate/ApiPassthroughProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ACMPCA/Certificate/ApiPassthroughProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ACMPCA.Certificate.ApiPassthroughProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ApiPassthroughProperty :: Prelude.Type
+instance ToResourceProperties ApiPassthroughProperty
+instance Prelude.Eq ApiPassthroughProperty
+instance Prelude.Show ApiPassthroughProperty
+instance JSON.ToJSON ApiPassthroughProperty
diff --git a/gen/Stratosphere/ACMPCA/Certificate/CustomAttributeProperty.hs b/gen/Stratosphere/ACMPCA/Certificate/CustomAttributeProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ACMPCA/Certificate/CustomAttributeProperty.hs
@@ -0,0 +1,42 @@
+module Stratosphere.ACMPCA.Certificate.CustomAttributeProperty (
+        CustomAttributeProperty(..), mkCustomAttributeProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CustomAttributeProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-customattribute.html>
+    CustomAttributeProperty {haddock_workaround_ :: (),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-customattribute.html#cfn-acmpca-certificate-customattribute-objectidentifier>
+                             objectIdentifier :: (Value Prelude.Text),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-customattribute.html#cfn-acmpca-certificate-customattribute-value>
+                             value :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCustomAttributeProperty ::
+  Value Prelude.Text -> Value Prelude.Text -> CustomAttributeProperty
+mkCustomAttributeProperty objectIdentifier value
+  = CustomAttributeProperty
+      {haddock_workaround_ = (), objectIdentifier = objectIdentifier,
+       value = value}
+instance ToResourceProperties CustomAttributeProperty where
+  toResourceProperties CustomAttributeProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ACMPCA::Certificate.CustomAttribute",
+         supportsTags = Prelude.False,
+         properties = ["ObjectIdentifier" JSON..= objectIdentifier,
+                       "Value" JSON..= value]}
+instance JSON.ToJSON CustomAttributeProperty where
+  toJSON CustomAttributeProperty {..}
+    = JSON.object
+        ["ObjectIdentifier" JSON..= objectIdentifier,
+         "Value" JSON..= value]
+instance Property "ObjectIdentifier" CustomAttributeProperty where
+  type PropertyType "ObjectIdentifier" CustomAttributeProperty = Value Prelude.Text
+  set newValue CustomAttributeProperty {..}
+    = CustomAttributeProperty {objectIdentifier = newValue, ..}
+instance Property "Value" CustomAttributeProperty where
+  type PropertyType "Value" CustomAttributeProperty = Value Prelude.Text
+  set newValue CustomAttributeProperty {..}
+    = CustomAttributeProperty {value = newValue, ..}
diff --git a/gen/Stratosphere/ACMPCA/Certificate/CustomAttributeProperty.hs-boot b/gen/Stratosphere/ACMPCA/Certificate/CustomAttributeProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ACMPCA/Certificate/CustomAttributeProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ACMPCA.Certificate.CustomAttributeProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CustomAttributeProperty :: Prelude.Type
+instance ToResourceProperties CustomAttributeProperty
+instance Prelude.Eq CustomAttributeProperty
+instance Prelude.Show CustomAttributeProperty
+instance JSON.ToJSON CustomAttributeProperty
diff --git a/gen/Stratosphere/ACMPCA/Certificate/CustomExtensionProperty.hs b/gen/Stratosphere/ACMPCA/Certificate/CustomExtensionProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ACMPCA/Certificate/CustomExtensionProperty.hs
@@ -0,0 +1,54 @@
+module Stratosphere.ACMPCA.Certificate.CustomExtensionProperty (
+        CustomExtensionProperty(..), mkCustomExtensionProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CustomExtensionProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-customextension.html>
+    CustomExtensionProperty {haddock_workaround_ :: (),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-customextension.html#cfn-acmpca-certificate-customextension-critical>
+                             critical :: (Prelude.Maybe (Value Prelude.Bool)),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-customextension.html#cfn-acmpca-certificate-customextension-objectidentifier>
+                             objectIdentifier :: (Value Prelude.Text),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-customextension.html#cfn-acmpca-certificate-customextension-value>
+                             value :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCustomExtensionProperty ::
+  Value Prelude.Text -> Value Prelude.Text -> CustomExtensionProperty
+mkCustomExtensionProperty objectIdentifier value
+  = CustomExtensionProperty
+      {haddock_workaround_ = (), objectIdentifier = objectIdentifier,
+       value = value, critical = Prelude.Nothing}
+instance ToResourceProperties CustomExtensionProperty where
+  toResourceProperties CustomExtensionProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ACMPCA::Certificate.CustomExtension",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["ObjectIdentifier" JSON..= objectIdentifier,
+                            "Value" JSON..= value]
+                           (Prelude.catMaybes [(JSON..=) "Critical" Prelude.<$> critical]))}
+instance JSON.ToJSON CustomExtensionProperty where
+  toJSON CustomExtensionProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["ObjectIdentifier" JSON..= objectIdentifier,
+               "Value" JSON..= value]
+              (Prelude.catMaybes [(JSON..=) "Critical" Prelude.<$> critical])))
+instance Property "Critical" CustomExtensionProperty where
+  type PropertyType "Critical" CustomExtensionProperty = Value Prelude.Bool
+  set newValue CustomExtensionProperty {..}
+    = CustomExtensionProperty {critical = Prelude.pure newValue, ..}
+instance Property "ObjectIdentifier" CustomExtensionProperty where
+  type PropertyType "ObjectIdentifier" CustomExtensionProperty = Value Prelude.Text
+  set newValue CustomExtensionProperty {..}
+    = CustomExtensionProperty {objectIdentifier = newValue, ..}
+instance Property "Value" CustomExtensionProperty where
+  type PropertyType "Value" CustomExtensionProperty = Value Prelude.Text
+  set newValue CustomExtensionProperty {..}
+    = CustomExtensionProperty {value = newValue, ..}
diff --git a/gen/Stratosphere/ACMPCA/Certificate/CustomExtensionProperty.hs-boot b/gen/Stratosphere/ACMPCA/Certificate/CustomExtensionProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ACMPCA/Certificate/CustomExtensionProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ACMPCA.Certificate.CustomExtensionProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CustomExtensionProperty :: Prelude.Type
+instance ToResourceProperties CustomExtensionProperty
+instance Prelude.Eq CustomExtensionProperty
+instance Prelude.Show CustomExtensionProperty
+instance JSON.ToJSON CustomExtensionProperty
diff --git a/gen/Stratosphere/ACMPCA/Certificate/EdiPartyNameProperty.hs b/gen/Stratosphere/ACMPCA/Certificate/EdiPartyNameProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ACMPCA/Certificate/EdiPartyNameProperty.hs
@@ -0,0 +1,42 @@
+module Stratosphere.ACMPCA.Certificate.EdiPartyNameProperty (
+        EdiPartyNameProperty(..), mkEdiPartyNameProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data EdiPartyNameProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-edipartyname.html>
+    EdiPartyNameProperty {haddock_workaround_ :: (),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-edipartyname.html#cfn-acmpca-certificate-edipartyname-nameassigner>
+                          nameAssigner :: (Value Prelude.Text),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-edipartyname.html#cfn-acmpca-certificate-edipartyname-partyname>
+                          partyName :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkEdiPartyNameProperty ::
+  Value Prelude.Text -> Value Prelude.Text -> EdiPartyNameProperty
+mkEdiPartyNameProperty nameAssigner partyName
+  = EdiPartyNameProperty
+      {haddock_workaround_ = (), nameAssigner = nameAssigner,
+       partyName = partyName}
+instance ToResourceProperties EdiPartyNameProperty where
+  toResourceProperties EdiPartyNameProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ACMPCA::Certificate.EdiPartyName",
+         supportsTags = Prelude.False,
+         properties = ["NameAssigner" JSON..= nameAssigner,
+                       "PartyName" JSON..= partyName]}
+instance JSON.ToJSON EdiPartyNameProperty where
+  toJSON EdiPartyNameProperty {..}
+    = JSON.object
+        ["NameAssigner" JSON..= nameAssigner,
+         "PartyName" JSON..= partyName]
+instance Property "NameAssigner" EdiPartyNameProperty where
+  type PropertyType "NameAssigner" EdiPartyNameProperty = Value Prelude.Text
+  set newValue EdiPartyNameProperty {..}
+    = EdiPartyNameProperty {nameAssigner = newValue, ..}
+instance Property "PartyName" EdiPartyNameProperty where
+  type PropertyType "PartyName" EdiPartyNameProperty = Value Prelude.Text
+  set newValue EdiPartyNameProperty {..}
+    = EdiPartyNameProperty {partyName = newValue, ..}
diff --git a/gen/Stratosphere/ACMPCA/Certificate/EdiPartyNameProperty.hs-boot b/gen/Stratosphere/ACMPCA/Certificate/EdiPartyNameProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ACMPCA/Certificate/EdiPartyNameProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ACMPCA.Certificate.EdiPartyNameProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data EdiPartyNameProperty :: Prelude.Type
+instance ToResourceProperties EdiPartyNameProperty
+instance Prelude.Eq EdiPartyNameProperty
+instance Prelude.Show EdiPartyNameProperty
+instance JSON.ToJSON EdiPartyNameProperty
diff --git a/gen/Stratosphere/ACMPCA/Certificate/ExtendedKeyUsageProperty.hs b/gen/Stratosphere/ACMPCA/Certificate/ExtendedKeyUsageProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ACMPCA/Certificate/ExtendedKeyUsageProperty.hs
@@ -0,0 +1,52 @@
+module Stratosphere.ACMPCA.Certificate.ExtendedKeyUsageProperty (
+        ExtendedKeyUsageProperty(..), mkExtendedKeyUsageProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ExtendedKeyUsageProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-extendedkeyusage.html>
+    ExtendedKeyUsageProperty {haddock_workaround_ :: (),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-extendedkeyusage.html#cfn-acmpca-certificate-extendedkeyusage-extendedkeyusageobjectidentifier>
+                              extendedKeyUsageObjectIdentifier :: (Prelude.Maybe (Value Prelude.Text)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-extendedkeyusage.html#cfn-acmpca-certificate-extendedkeyusage-extendedkeyusagetype>
+                              extendedKeyUsageType :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkExtendedKeyUsageProperty :: ExtendedKeyUsageProperty
+mkExtendedKeyUsageProperty
+  = ExtendedKeyUsageProperty
+      {haddock_workaround_ = (),
+       extendedKeyUsageObjectIdentifier = Prelude.Nothing,
+       extendedKeyUsageType = Prelude.Nothing}
+instance ToResourceProperties ExtendedKeyUsageProperty where
+  toResourceProperties ExtendedKeyUsageProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ACMPCA::Certificate.ExtendedKeyUsage",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "ExtendedKeyUsageObjectIdentifier"
+                              Prelude.<$> extendedKeyUsageObjectIdentifier,
+                            (JSON..=) "ExtendedKeyUsageType"
+                              Prelude.<$> extendedKeyUsageType])}
+instance JSON.ToJSON ExtendedKeyUsageProperty where
+  toJSON ExtendedKeyUsageProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "ExtendedKeyUsageObjectIdentifier"
+                 Prelude.<$> extendedKeyUsageObjectIdentifier,
+               (JSON..=) "ExtendedKeyUsageType"
+                 Prelude.<$> extendedKeyUsageType]))
+instance Property "ExtendedKeyUsageObjectIdentifier" ExtendedKeyUsageProperty where
+  type PropertyType "ExtendedKeyUsageObjectIdentifier" ExtendedKeyUsageProperty = Value Prelude.Text
+  set newValue ExtendedKeyUsageProperty {..}
+    = ExtendedKeyUsageProperty
+        {extendedKeyUsageObjectIdentifier = Prelude.pure newValue, ..}
+instance Property "ExtendedKeyUsageType" ExtendedKeyUsageProperty where
+  type PropertyType "ExtendedKeyUsageType" ExtendedKeyUsageProperty = Value Prelude.Text
+  set newValue ExtendedKeyUsageProperty {..}
+    = ExtendedKeyUsageProperty
+        {extendedKeyUsageType = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ACMPCA/Certificate/ExtendedKeyUsageProperty.hs-boot b/gen/Stratosphere/ACMPCA/Certificate/ExtendedKeyUsageProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ACMPCA/Certificate/ExtendedKeyUsageProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ACMPCA.Certificate.ExtendedKeyUsageProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ExtendedKeyUsageProperty :: Prelude.Type
+instance ToResourceProperties ExtendedKeyUsageProperty
+instance Prelude.Eq ExtendedKeyUsageProperty
+instance Prelude.Show ExtendedKeyUsageProperty
+instance JSON.ToJSON ExtendedKeyUsageProperty
diff --git a/gen/Stratosphere/ACMPCA/Certificate/ExtensionsProperty.hs b/gen/Stratosphere/ACMPCA/Certificate/ExtensionsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ACMPCA/Certificate/ExtensionsProperty.hs
@@ -0,0 +1,79 @@
+module Stratosphere.ACMPCA.Certificate.ExtensionsProperty (
+        module Exports, ExtensionsProperty(..), mkExtensionsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ACMPCA.Certificate.CustomExtensionProperty as Exports
+import {-# SOURCE #-} Stratosphere.ACMPCA.Certificate.ExtendedKeyUsageProperty as Exports
+import {-# SOURCE #-} Stratosphere.ACMPCA.Certificate.GeneralNameProperty as Exports
+import {-# SOURCE #-} Stratosphere.ACMPCA.Certificate.KeyUsageProperty as Exports
+import {-# SOURCE #-} Stratosphere.ACMPCA.Certificate.PolicyInformationProperty as Exports
+import Stratosphere.ResourceProperties
+data ExtensionsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-extensions.html>
+    ExtensionsProperty {haddock_workaround_ :: (),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-extensions.html#cfn-acmpca-certificate-extensions-certificatepolicies>
+                        certificatePolicies :: (Prelude.Maybe [PolicyInformationProperty]),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-extensions.html#cfn-acmpca-certificate-extensions-customextensions>
+                        customExtensions :: (Prelude.Maybe [CustomExtensionProperty]),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-extensions.html#cfn-acmpca-certificate-extensions-extendedkeyusage>
+                        extendedKeyUsage :: (Prelude.Maybe [ExtendedKeyUsageProperty]),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-extensions.html#cfn-acmpca-certificate-extensions-keyusage>
+                        keyUsage :: (Prelude.Maybe KeyUsageProperty),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-extensions.html#cfn-acmpca-certificate-extensions-subjectalternativenames>
+                        subjectAlternativeNames :: (Prelude.Maybe [GeneralNameProperty])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkExtensionsProperty :: ExtensionsProperty
+mkExtensionsProperty
+  = ExtensionsProperty
+      {haddock_workaround_ = (), certificatePolicies = Prelude.Nothing,
+       customExtensions = Prelude.Nothing,
+       extendedKeyUsage = Prelude.Nothing, keyUsage = Prelude.Nothing,
+       subjectAlternativeNames = Prelude.Nothing}
+instance ToResourceProperties ExtensionsProperty where
+  toResourceProperties ExtensionsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ACMPCA::Certificate.Extensions",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "CertificatePolicies" Prelude.<$> certificatePolicies,
+                            (JSON..=) "CustomExtensions" Prelude.<$> customExtensions,
+                            (JSON..=) "ExtendedKeyUsage" Prelude.<$> extendedKeyUsage,
+                            (JSON..=) "KeyUsage" Prelude.<$> keyUsage,
+                            (JSON..=) "SubjectAlternativeNames"
+                              Prelude.<$> subjectAlternativeNames])}
+instance JSON.ToJSON ExtensionsProperty where
+  toJSON ExtensionsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "CertificatePolicies" Prelude.<$> certificatePolicies,
+               (JSON..=) "CustomExtensions" Prelude.<$> customExtensions,
+               (JSON..=) "ExtendedKeyUsage" Prelude.<$> extendedKeyUsage,
+               (JSON..=) "KeyUsage" Prelude.<$> keyUsage,
+               (JSON..=) "SubjectAlternativeNames"
+                 Prelude.<$> subjectAlternativeNames]))
+instance Property "CertificatePolicies" ExtensionsProperty where
+  type PropertyType "CertificatePolicies" ExtensionsProperty = [PolicyInformationProperty]
+  set newValue ExtensionsProperty {..}
+    = ExtensionsProperty
+        {certificatePolicies = Prelude.pure newValue, ..}
+instance Property "CustomExtensions" ExtensionsProperty where
+  type PropertyType "CustomExtensions" ExtensionsProperty = [CustomExtensionProperty]
+  set newValue ExtensionsProperty {..}
+    = ExtensionsProperty {customExtensions = Prelude.pure newValue, ..}
+instance Property "ExtendedKeyUsage" ExtensionsProperty where
+  type PropertyType "ExtendedKeyUsage" ExtensionsProperty = [ExtendedKeyUsageProperty]
+  set newValue ExtensionsProperty {..}
+    = ExtensionsProperty {extendedKeyUsage = Prelude.pure newValue, ..}
+instance Property "KeyUsage" ExtensionsProperty where
+  type PropertyType "KeyUsage" ExtensionsProperty = KeyUsageProperty
+  set newValue ExtensionsProperty {..}
+    = ExtensionsProperty {keyUsage = Prelude.pure newValue, ..}
+instance Property "SubjectAlternativeNames" ExtensionsProperty where
+  type PropertyType "SubjectAlternativeNames" ExtensionsProperty = [GeneralNameProperty]
+  set newValue ExtensionsProperty {..}
+    = ExtensionsProperty
+        {subjectAlternativeNames = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ACMPCA/Certificate/ExtensionsProperty.hs-boot b/gen/Stratosphere/ACMPCA/Certificate/ExtensionsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ACMPCA/Certificate/ExtensionsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ACMPCA.Certificate.ExtensionsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ExtensionsProperty :: Prelude.Type
+instance ToResourceProperties ExtensionsProperty
+instance Prelude.Eq ExtensionsProperty
+instance Prelude.Show ExtensionsProperty
+instance JSON.ToJSON ExtensionsProperty
diff --git a/gen/Stratosphere/ACMPCA/Certificate/GeneralNameProperty.hs b/gen/Stratosphere/ACMPCA/Certificate/GeneralNameProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ACMPCA/Certificate/GeneralNameProperty.hs
@@ -0,0 +1,102 @@
+module Stratosphere.ACMPCA.Certificate.GeneralNameProperty (
+        module Exports, GeneralNameProperty(..), mkGeneralNameProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ACMPCA.Certificate.EdiPartyNameProperty as Exports
+import {-# SOURCE #-} Stratosphere.ACMPCA.Certificate.OtherNameProperty as Exports
+import {-# SOURCE #-} Stratosphere.ACMPCA.Certificate.SubjectProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data GeneralNameProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-generalname.html>
+    GeneralNameProperty {haddock_workaround_ :: (),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-generalname.html#cfn-acmpca-certificate-generalname-directoryname>
+                         directoryName :: (Prelude.Maybe SubjectProperty),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-generalname.html#cfn-acmpca-certificate-generalname-dnsname>
+                         dnsName :: (Prelude.Maybe (Value Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-generalname.html#cfn-acmpca-certificate-generalname-edipartyname>
+                         ediPartyName :: (Prelude.Maybe EdiPartyNameProperty),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-generalname.html#cfn-acmpca-certificate-generalname-ipaddress>
+                         ipAddress :: (Prelude.Maybe (Value Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-generalname.html#cfn-acmpca-certificate-generalname-othername>
+                         otherName :: (Prelude.Maybe OtherNameProperty),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-generalname.html#cfn-acmpca-certificate-generalname-registeredid>
+                         registeredId :: (Prelude.Maybe (Value Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-generalname.html#cfn-acmpca-certificate-generalname-rfc822name>
+                         rfc822Name :: (Prelude.Maybe (Value Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-generalname.html#cfn-acmpca-certificate-generalname-uniformresourceidentifier>
+                         uniformResourceIdentifier :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkGeneralNameProperty :: GeneralNameProperty
+mkGeneralNameProperty
+  = GeneralNameProperty
+      {haddock_workaround_ = (), directoryName = Prelude.Nothing,
+       dnsName = Prelude.Nothing, ediPartyName = Prelude.Nothing,
+       ipAddress = Prelude.Nothing, otherName = Prelude.Nothing,
+       registeredId = Prelude.Nothing, rfc822Name = Prelude.Nothing,
+       uniformResourceIdentifier = Prelude.Nothing}
+instance ToResourceProperties GeneralNameProperty where
+  toResourceProperties GeneralNameProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ACMPCA::Certificate.GeneralName",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "DirectoryName" Prelude.<$> directoryName,
+                            (JSON..=) "DnsName" Prelude.<$> dnsName,
+                            (JSON..=) "EdiPartyName" Prelude.<$> ediPartyName,
+                            (JSON..=) "IpAddress" Prelude.<$> ipAddress,
+                            (JSON..=) "OtherName" Prelude.<$> otherName,
+                            (JSON..=) "RegisteredId" Prelude.<$> registeredId,
+                            (JSON..=) "Rfc822Name" Prelude.<$> rfc822Name,
+                            (JSON..=) "UniformResourceIdentifier"
+                              Prelude.<$> uniformResourceIdentifier])}
+instance JSON.ToJSON GeneralNameProperty where
+  toJSON GeneralNameProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "DirectoryName" Prelude.<$> directoryName,
+               (JSON..=) "DnsName" Prelude.<$> dnsName,
+               (JSON..=) "EdiPartyName" Prelude.<$> ediPartyName,
+               (JSON..=) "IpAddress" Prelude.<$> ipAddress,
+               (JSON..=) "OtherName" Prelude.<$> otherName,
+               (JSON..=) "RegisteredId" Prelude.<$> registeredId,
+               (JSON..=) "Rfc822Name" Prelude.<$> rfc822Name,
+               (JSON..=) "UniformResourceIdentifier"
+                 Prelude.<$> uniformResourceIdentifier]))
+instance Property "DirectoryName" GeneralNameProperty where
+  type PropertyType "DirectoryName" GeneralNameProperty = SubjectProperty
+  set newValue GeneralNameProperty {..}
+    = GeneralNameProperty {directoryName = Prelude.pure newValue, ..}
+instance Property "DnsName" GeneralNameProperty where
+  type PropertyType "DnsName" GeneralNameProperty = Value Prelude.Text
+  set newValue GeneralNameProperty {..}
+    = GeneralNameProperty {dnsName = Prelude.pure newValue, ..}
+instance Property "EdiPartyName" GeneralNameProperty where
+  type PropertyType "EdiPartyName" GeneralNameProperty = EdiPartyNameProperty
+  set newValue GeneralNameProperty {..}
+    = GeneralNameProperty {ediPartyName = Prelude.pure newValue, ..}
+instance Property "IpAddress" GeneralNameProperty where
+  type PropertyType "IpAddress" GeneralNameProperty = Value Prelude.Text
+  set newValue GeneralNameProperty {..}
+    = GeneralNameProperty {ipAddress = Prelude.pure newValue, ..}
+instance Property "OtherName" GeneralNameProperty where
+  type PropertyType "OtherName" GeneralNameProperty = OtherNameProperty
+  set newValue GeneralNameProperty {..}
+    = GeneralNameProperty {otherName = Prelude.pure newValue, ..}
+instance Property "RegisteredId" GeneralNameProperty where
+  type PropertyType "RegisteredId" GeneralNameProperty = Value Prelude.Text
+  set newValue GeneralNameProperty {..}
+    = GeneralNameProperty {registeredId = Prelude.pure newValue, ..}
+instance Property "Rfc822Name" GeneralNameProperty where
+  type PropertyType "Rfc822Name" GeneralNameProperty = Value Prelude.Text
+  set newValue GeneralNameProperty {..}
+    = GeneralNameProperty {rfc822Name = Prelude.pure newValue, ..}
+instance Property "UniformResourceIdentifier" GeneralNameProperty where
+  type PropertyType "UniformResourceIdentifier" GeneralNameProperty = Value Prelude.Text
+  set newValue GeneralNameProperty {..}
+    = GeneralNameProperty
+        {uniformResourceIdentifier = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ACMPCA/Certificate/GeneralNameProperty.hs-boot b/gen/Stratosphere/ACMPCA/Certificate/GeneralNameProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ACMPCA/Certificate/GeneralNameProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ACMPCA.Certificate.GeneralNameProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data GeneralNameProperty :: Prelude.Type
+instance ToResourceProperties GeneralNameProperty
+instance Prelude.Eq GeneralNameProperty
+instance Prelude.Show GeneralNameProperty
+instance JSON.ToJSON GeneralNameProperty
diff --git a/gen/Stratosphere/ACMPCA/Certificate/KeyUsageProperty.hs b/gen/Stratosphere/ACMPCA/Certificate/KeyUsageProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ACMPCA/Certificate/KeyUsageProperty.hs
@@ -0,0 +1,105 @@
+module Stratosphere.ACMPCA.Certificate.KeyUsageProperty (
+        KeyUsageProperty(..), mkKeyUsageProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data KeyUsageProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-keyusage.html>
+    KeyUsageProperty {haddock_workaround_ :: (),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-keyusage.html#cfn-acmpca-certificate-keyusage-crlsign>
+                      cRLSign :: (Prelude.Maybe (Value Prelude.Bool)),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-keyusage.html#cfn-acmpca-certificate-keyusage-dataencipherment>
+                      dataEncipherment :: (Prelude.Maybe (Value Prelude.Bool)),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-keyusage.html#cfn-acmpca-certificate-keyusage-decipheronly>
+                      decipherOnly :: (Prelude.Maybe (Value Prelude.Bool)),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-keyusage.html#cfn-acmpca-certificate-keyusage-digitalsignature>
+                      digitalSignature :: (Prelude.Maybe (Value Prelude.Bool)),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-keyusage.html#cfn-acmpca-certificate-keyusage-encipheronly>
+                      encipherOnly :: (Prelude.Maybe (Value Prelude.Bool)),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-keyusage.html#cfn-acmpca-certificate-keyusage-keyagreement>
+                      keyAgreement :: (Prelude.Maybe (Value Prelude.Bool)),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-keyusage.html#cfn-acmpca-certificate-keyusage-keycertsign>
+                      keyCertSign :: (Prelude.Maybe (Value Prelude.Bool)),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-keyusage.html#cfn-acmpca-certificate-keyusage-keyencipherment>
+                      keyEncipherment :: (Prelude.Maybe (Value Prelude.Bool)),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-keyusage.html#cfn-acmpca-certificate-keyusage-nonrepudiation>
+                      nonRepudiation :: (Prelude.Maybe (Value Prelude.Bool))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkKeyUsageProperty :: KeyUsageProperty
+mkKeyUsageProperty
+  = KeyUsageProperty
+      {haddock_workaround_ = (), cRLSign = Prelude.Nothing,
+       dataEncipherment = Prelude.Nothing, decipherOnly = Prelude.Nothing,
+       digitalSignature = Prelude.Nothing, encipherOnly = Prelude.Nothing,
+       keyAgreement = Prelude.Nothing, keyCertSign = Prelude.Nothing,
+       keyEncipherment = Prelude.Nothing,
+       nonRepudiation = Prelude.Nothing}
+instance ToResourceProperties KeyUsageProperty where
+  toResourceProperties KeyUsageProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ACMPCA::Certificate.KeyUsage",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "CRLSign" Prelude.<$> cRLSign,
+                            (JSON..=) "DataEncipherment" Prelude.<$> dataEncipherment,
+                            (JSON..=) "DecipherOnly" Prelude.<$> decipherOnly,
+                            (JSON..=) "DigitalSignature" Prelude.<$> digitalSignature,
+                            (JSON..=) "EncipherOnly" Prelude.<$> encipherOnly,
+                            (JSON..=) "KeyAgreement" Prelude.<$> keyAgreement,
+                            (JSON..=) "KeyCertSign" Prelude.<$> keyCertSign,
+                            (JSON..=) "KeyEncipherment" Prelude.<$> keyEncipherment,
+                            (JSON..=) "NonRepudiation" Prelude.<$> nonRepudiation])}
+instance JSON.ToJSON KeyUsageProperty where
+  toJSON KeyUsageProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "CRLSign" Prelude.<$> cRLSign,
+               (JSON..=) "DataEncipherment" Prelude.<$> dataEncipherment,
+               (JSON..=) "DecipherOnly" Prelude.<$> decipherOnly,
+               (JSON..=) "DigitalSignature" Prelude.<$> digitalSignature,
+               (JSON..=) "EncipherOnly" Prelude.<$> encipherOnly,
+               (JSON..=) "KeyAgreement" Prelude.<$> keyAgreement,
+               (JSON..=) "KeyCertSign" Prelude.<$> keyCertSign,
+               (JSON..=) "KeyEncipherment" Prelude.<$> keyEncipherment,
+               (JSON..=) "NonRepudiation" Prelude.<$> nonRepudiation]))
+instance Property "CRLSign" KeyUsageProperty where
+  type PropertyType "CRLSign" KeyUsageProperty = Value Prelude.Bool
+  set newValue KeyUsageProperty {..}
+    = KeyUsageProperty {cRLSign = Prelude.pure newValue, ..}
+instance Property "DataEncipherment" KeyUsageProperty where
+  type PropertyType "DataEncipherment" KeyUsageProperty = Value Prelude.Bool
+  set newValue KeyUsageProperty {..}
+    = KeyUsageProperty {dataEncipherment = Prelude.pure newValue, ..}
+instance Property "DecipherOnly" KeyUsageProperty where
+  type PropertyType "DecipherOnly" KeyUsageProperty = Value Prelude.Bool
+  set newValue KeyUsageProperty {..}
+    = KeyUsageProperty {decipherOnly = Prelude.pure newValue, ..}
+instance Property "DigitalSignature" KeyUsageProperty where
+  type PropertyType "DigitalSignature" KeyUsageProperty = Value Prelude.Bool
+  set newValue KeyUsageProperty {..}
+    = KeyUsageProperty {digitalSignature = Prelude.pure newValue, ..}
+instance Property "EncipherOnly" KeyUsageProperty where
+  type PropertyType "EncipherOnly" KeyUsageProperty = Value Prelude.Bool
+  set newValue KeyUsageProperty {..}
+    = KeyUsageProperty {encipherOnly = Prelude.pure newValue, ..}
+instance Property "KeyAgreement" KeyUsageProperty where
+  type PropertyType "KeyAgreement" KeyUsageProperty = Value Prelude.Bool
+  set newValue KeyUsageProperty {..}
+    = KeyUsageProperty {keyAgreement = Prelude.pure newValue, ..}
+instance Property "KeyCertSign" KeyUsageProperty where
+  type PropertyType "KeyCertSign" KeyUsageProperty = Value Prelude.Bool
+  set newValue KeyUsageProperty {..}
+    = KeyUsageProperty {keyCertSign = Prelude.pure newValue, ..}
+instance Property "KeyEncipherment" KeyUsageProperty where
+  type PropertyType "KeyEncipherment" KeyUsageProperty = Value Prelude.Bool
+  set newValue KeyUsageProperty {..}
+    = KeyUsageProperty {keyEncipherment = Prelude.pure newValue, ..}
+instance Property "NonRepudiation" KeyUsageProperty where
+  type PropertyType "NonRepudiation" KeyUsageProperty = Value Prelude.Bool
+  set newValue KeyUsageProperty {..}
+    = KeyUsageProperty {nonRepudiation = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ACMPCA/Certificate/KeyUsageProperty.hs-boot b/gen/Stratosphere/ACMPCA/Certificate/KeyUsageProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ACMPCA/Certificate/KeyUsageProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ACMPCA.Certificate.KeyUsageProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data KeyUsageProperty :: Prelude.Type
+instance ToResourceProperties KeyUsageProperty
+instance Prelude.Eq KeyUsageProperty
+instance Prelude.Show KeyUsageProperty
+instance JSON.ToJSON KeyUsageProperty
diff --git a/gen/Stratosphere/ACMPCA/Certificate/OtherNameProperty.hs b/gen/Stratosphere/ACMPCA/Certificate/OtherNameProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ACMPCA/Certificate/OtherNameProperty.hs
@@ -0,0 +1,38 @@
+module Stratosphere.ACMPCA.Certificate.OtherNameProperty (
+        OtherNameProperty(..), mkOtherNameProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data OtherNameProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-othername.html>
+    OtherNameProperty {haddock_workaround_ :: (),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-othername.html#cfn-acmpca-certificate-othername-typeid>
+                       typeId :: (Value Prelude.Text),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-othername.html#cfn-acmpca-certificate-othername-value>
+                       value :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkOtherNameProperty ::
+  Value Prelude.Text -> Value Prelude.Text -> OtherNameProperty
+mkOtherNameProperty typeId value
+  = OtherNameProperty
+      {haddock_workaround_ = (), typeId = typeId, value = value}
+instance ToResourceProperties OtherNameProperty where
+  toResourceProperties OtherNameProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ACMPCA::Certificate.OtherName",
+         supportsTags = Prelude.False,
+         properties = ["TypeId" JSON..= typeId, "Value" JSON..= value]}
+instance JSON.ToJSON OtherNameProperty where
+  toJSON OtherNameProperty {..}
+    = JSON.object ["TypeId" JSON..= typeId, "Value" JSON..= value]
+instance Property "TypeId" OtherNameProperty where
+  type PropertyType "TypeId" OtherNameProperty = Value Prelude.Text
+  set newValue OtherNameProperty {..}
+    = OtherNameProperty {typeId = newValue, ..}
+instance Property "Value" OtherNameProperty where
+  type PropertyType "Value" OtherNameProperty = Value Prelude.Text
+  set newValue OtherNameProperty {..}
+    = OtherNameProperty {value = newValue, ..}
diff --git a/gen/Stratosphere/ACMPCA/Certificate/OtherNameProperty.hs-boot b/gen/Stratosphere/ACMPCA/Certificate/OtherNameProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ACMPCA/Certificate/OtherNameProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ACMPCA.Certificate.OtherNameProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data OtherNameProperty :: Prelude.Type
+instance ToResourceProperties OtherNameProperty
+instance Prelude.Eq OtherNameProperty
+instance Prelude.Show OtherNameProperty
+instance JSON.ToJSON OtherNameProperty
diff --git a/gen/Stratosphere/ACMPCA/Certificate/PolicyInformationProperty.hs b/gen/Stratosphere/ACMPCA/Certificate/PolicyInformationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ACMPCA/Certificate/PolicyInformationProperty.hs
@@ -0,0 +1,51 @@
+module Stratosphere.ACMPCA.Certificate.PolicyInformationProperty (
+        module Exports, PolicyInformationProperty(..),
+        mkPolicyInformationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ACMPCA.Certificate.PolicyQualifierInfoProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data PolicyInformationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-policyinformation.html>
+    PolicyInformationProperty {haddock_workaround_ :: (),
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-policyinformation.html#cfn-acmpca-certificate-policyinformation-certpolicyid>
+                               certPolicyId :: (Value Prelude.Text),
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-policyinformation.html#cfn-acmpca-certificate-policyinformation-policyqualifiers>
+                               policyQualifiers :: (Prelude.Maybe [PolicyQualifierInfoProperty])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkPolicyInformationProperty ::
+  Value Prelude.Text -> PolicyInformationProperty
+mkPolicyInformationProperty certPolicyId
+  = PolicyInformationProperty
+      {haddock_workaround_ = (), certPolicyId = certPolicyId,
+       policyQualifiers = Prelude.Nothing}
+instance ToResourceProperties PolicyInformationProperty where
+  toResourceProperties PolicyInformationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ACMPCA::Certificate.PolicyInformation",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["CertPolicyId" JSON..= certPolicyId]
+                           (Prelude.catMaybes
+                              [(JSON..=) "PolicyQualifiers" Prelude.<$> policyQualifiers]))}
+instance JSON.ToJSON PolicyInformationProperty where
+  toJSON PolicyInformationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["CertPolicyId" JSON..= certPolicyId]
+              (Prelude.catMaybes
+                 [(JSON..=) "PolicyQualifiers" Prelude.<$> policyQualifiers])))
+instance Property "CertPolicyId" PolicyInformationProperty where
+  type PropertyType "CertPolicyId" PolicyInformationProperty = Value Prelude.Text
+  set newValue PolicyInformationProperty {..}
+    = PolicyInformationProperty {certPolicyId = newValue, ..}
+instance Property "PolicyQualifiers" PolicyInformationProperty where
+  type PropertyType "PolicyQualifiers" PolicyInformationProperty = [PolicyQualifierInfoProperty]
+  set newValue PolicyInformationProperty {..}
+    = PolicyInformationProperty
+        {policyQualifiers = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ACMPCA/Certificate/PolicyInformationProperty.hs-boot b/gen/Stratosphere/ACMPCA/Certificate/PolicyInformationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ACMPCA/Certificate/PolicyInformationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ACMPCA.Certificate.PolicyInformationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data PolicyInformationProperty :: Prelude.Type
+instance ToResourceProperties PolicyInformationProperty
+instance Prelude.Eq PolicyInformationProperty
+instance Prelude.Show PolicyInformationProperty
+instance JSON.ToJSON PolicyInformationProperty
diff --git a/gen/Stratosphere/ACMPCA/Certificate/PolicyQualifierInfoProperty.hs b/gen/Stratosphere/ACMPCA/Certificate/PolicyQualifierInfoProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ACMPCA/Certificate/PolicyQualifierInfoProperty.hs
@@ -0,0 +1,45 @@
+module Stratosphere.ACMPCA.Certificate.PolicyQualifierInfoProperty (
+        module Exports, PolicyQualifierInfoProperty(..),
+        mkPolicyQualifierInfoProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ACMPCA.Certificate.QualifierProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data PolicyQualifierInfoProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-policyqualifierinfo.html>
+    PolicyQualifierInfoProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-policyqualifierinfo.html#cfn-acmpca-certificate-policyqualifierinfo-policyqualifierid>
+                                 policyQualifierId :: (Value Prelude.Text),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-policyqualifierinfo.html#cfn-acmpca-certificate-policyqualifierinfo-qualifier>
+                                 qualifier :: QualifierProperty}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkPolicyQualifierInfoProperty ::
+  Value Prelude.Text
+  -> QualifierProperty -> PolicyQualifierInfoProperty
+mkPolicyQualifierInfoProperty policyQualifierId qualifier
+  = PolicyQualifierInfoProperty
+      {haddock_workaround_ = (), policyQualifierId = policyQualifierId,
+       qualifier = qualifier}
+instance ToResourceProperties PolicyQualifierInfoProperty where
+  toResourceProperties PolicyQualifierInfoProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ACMPCA::Certificate.PolicyQualifierInfo",
+         supportsTags = Prelude.False,
+         properties = ["PolicyQualifierId" JSON..= policyQualifierId,
+                       "Qualifier" JSON..= qualifier]}
+instance JSON.ToJSON PolicyQualifierInfoProperty where
+  toJSON PolicyQualifierInfoProperty {..}
+    = JSON.object
+        ["PolicyQualifierId" JSON..= policyQualifierId,
+         "Qualifier" JSON..= qualifier]
+instance Property "PolicyQualifierId" PolicyQualifierInfoProperty where
+  type PropertyType "PolicyQualifierId" PolicyQualifierInfoProperty = Value Prelude.Text
+  set newValue PolicyQualifierInfoProperty {..}
+    = PolicyQualifierInfoProperty {policyQualifierId = newValue, ..}
+instance Property "Qualifier" PolicyQualifierInfoProperty where
+  type PropertyType "Qualifier" PolicyQualifierInfoProperty = QualifierProperty
+  set newValue PolicyQualifierInfoProperty {..}
+    = PolicyQualifierInfoProperty {qualifier = newValue, ..}
diff --git a/gen/Stratosphere/ACMPCA/Certificate/PolicyQualifierInfoProperty.hs-boot b/gen/Stratosphere/ACMPCA/Certificate/PolicyQualifierInfoProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ACMPCA/Certificate/PolicyQualifierInfoProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ACMPCA.Certificate.PolicyQualifierInfoProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data PolicyQualifierInfoProperty :: Prelude.Type
+instance ToResourceProperties PolicyQualifierInfoProperty
+instance Prelude.Eq PolicyQualifierInfoProperty
+instance Prelude.Show PolicyQualifierInfoProperty
+instance JSON.ToJSON PolicyQualifierInfoProperty
diff --git a/gen/Stratosphere/ACMPCA/Certificate/QualifierProperty.hs b/gen/Stratosphere/ACMPCA/Certificate/QualifierProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ACMPCA/Certificate/QualifierProperty.hs
@@ -0,0 +1,30 @@
+module Stratosphere.ACMPCA.Certificate.QualifierProperty (
+        QualifierProperty(..), mkQualifierProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data QualifierProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-qualifier.html>
+    QualifierProperty {haddock_workaround_ :: (),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-qualifier.html#cfn-acmpca-certificate-qualifier-cpsuri>
+                       cpsUri :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkQualifierProperty :: Value Prelude.Text -> QualifierProperty
+mkQualifierProperty cpsUri
+  = QualifierProperty {haddock_workaround_ = (), cpsUri = cpsUri}
+instance ToResourceProperties QualifierProperty where
+  toResourceProperties QualifierProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ACMPCA::Certificate.Qualifier",
+         supportsTags = Prelude.False,
+         properties = ["CpsUri" JSON..= cpsUri]}
+instance JSON.ToJSON QualifierProperty where
+  toJSON QualifierProperty {..}
+    = JSON.object ["CpsUri" JSON..= cpsUri]
+instance Property "CpsUri" QualifierProperty where
+  type PropertyType "CpsUri" QualifierProperty = Value Prelude.Text
+  set newValue QualifierProperty {..}
+    = QualifierProperty {cpsUri = newValue, ..}
diff --git a/gen/Stratosphere/ACMPCA/Certificate/QualifierProperty.hs-boot b/gen/Stratosphere/ACMPCA/Certificate/QualifierProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ACMPCA/Certificate/QualifierProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ACMPCA.Certificate.QualifierProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data QualifierProperty :: Prelude.Type
+instance ToResourceProperties QualifierProperty
+instance Prelude.Eq QualifierProperty
+instance Prelude.Show QualifierProperty
+instance JSON.ToJSON QualifierProperty
diff --git a/gen/Stratosphere/ACMPCA/Certificate/SubjectProperty.hs b/gen/Stratosphere/ACMPCA/Certificate/SubjectProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ACMPCA/Certificate/SubjectProperty.hs
@@ -0,0 +1,160 @@
+module Stratosphere.ACMPCA.Certificate.SubjectProperty (
+        module Exports, SubjectProperty(..), mkSubjectProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ACMPCA.Certificate.CustomAttributeProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data SubjectProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-subject.html>
+    SubjectProperty {haddock_workaround_ :: (),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-subject.html#cfn-acmpca-certificate-subject-commonname>
+                     commonName :: (Prelude.Maybe (Value Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-subject.html#cfn-acmpca-certificate-subject-country>
+                     country :: (Prelude.Maybe (Value Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-subject.html#cfn-acmpca-certificate-subject-customattributes>
+                     customAttributes :: (Prelude.Maybe [CustomAttributeProperty]),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-subject.html#cfn-acmpca-certificate-subject-distinguishednamequalifier>
+                     distinguishedNameQualifier :: (Prelude.Maybe (Value Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-subject.html#cfn-acmpca-certificate-subject-generationqualifier>
+                     generationQualifier :: (Prelude.Maybe (Value Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-subject.html#cfn-acmpca-certificate-subject-givenname>
+                     givenName :: (Prelude.Maybe (Value Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-subject.html#cfn-acmpca-certificate-subject-initials>
+                     initials :: (Prelude.Maybe (Value Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-subject.html#cfn-acmpca-certificate-subject-locality>
+                     locality :: (Prelude.Maybe (Value Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-subject.html#cfn-acmpca-certificate-subject-organization>
+                     organization :: (Prelude.Maybe (Value Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-subject.html#cfn-acmpca-certificate-subject-organizationalunit>
+                     organizationalUnit :: (Prelude.Maybe (Value Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-subject.html#cfn-acmpca-certificate-subject-pseudonym>
+                     pseudonym :: (Prelude.Maybe (Value Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-subject.html#cfn-acmpca-certificate-subject-serialnumber>
+                     serialNumber :: (Prelude.Maybe (Value Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-subject.html#cfn-acmpca-certificate-subject-state>
+                     state :: (Prelude.Maybe (Value Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-subject.html#cfn-acmpca-certificate-subject-surname>
+                     surname :: (Prelude.Maybe (Value Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-subject.html#cfn-acmpca-certificate-subject-title>
+                     title :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSubjectProperty :: SubjectProperty
+mkSubjectProperty
+  = SubjectProperty
+      {haddock_workaround_ = (), commonName = Prelude.Nothing,
+       country = Prelude.Nothing, customAttributes = Prelude.Nothing,
+       distinguishedNameQualifier = Prelude.Nothing,
+       generationQualifier = Prelude.Nothing, givenName = Prelude.Nothing,
+       initials = Prelude.Nothing, locality = Prelude.Nothing,
+       organization = Prelude.Nothing,
+       organizationalUnit = Prelude.Nothing, pseudonym = Prelude.Nothing,
+       serialNumber = Prelude.Nothing, state = Prelude.Nothing,
+       surname = Prelude.Nothing, title = Prelude.Nothing}
+instance ToResourceProperties SubjectProperty where
+  toResourceProperties SubjectProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ACMPCA::Certificate.Subject",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "CommonName" Prelude.<$> commonName,
+                            (JSON..=) "Country" Prelude.<$> country,
+                            (JSON..=) "CustomAttributes" Prelude.<$> customAttributes,
+                            (JSON..=) "DistinguishedNameQualifier"
+                              Prelude.<$> distinguishedNameQualifier,
+                            (JSON..=) "GenerationQualifier" Prelude.<$> generationQualifier,
+                            (JSON..=) "GivenName" Prelude.<$> givenName,
+                            (JSON..=) "Initials" Prelude.<$> initials,
+                            (JSON..=) "Locality" Prelude.<$> locality,
+                            (JSON..=) "Organization" Prelude.<$> organization,
+                            (JSON..=) "OrganizationalUnit" Prelude.<$> organizationalUnit,
+                            (JSON..=) "Pseudonym" Prelude.<$> pseudonym,
+                            (JSON..=) "SerialNumber" Prelude.<$> serialNumber,
+                            (JSON..=) "State" Prelude.<$> state,
+                            (JSON..=) "Surname" Prelude.<$> surname,
+                            (JSON..=) "Title" Prelude.<$> title])}
+instance JSON.ToJSON SubjectProperty where
+  toJSON SubjectProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "CommonName" Prelude.<$> commonName,
+               (JSON..=) "Country" Prelude.<$> country,
+               (JSON..=) "CustomAttributes" Prelude.<$> customAttributes,
+               (JSON..=) "DistinguishedNameQualifier"
+                 Prelude.<$> distinguishedNameQualifier,
+               (JSON..=) "GenerationQualifier" Prelude.<$> generationQualifier,
+               (JSON..=) "GivenName" Prelude.<$> givenName,
+               (JSON..=) "Initials" Prelude.<$> initials,
+               (JSON..=) "Locality" Prelude.<$> locality,
+               (JSON..=) "Organization" Prelude.<$> organization,
+               (JSON..=) "OrganizationalUnit" Prelude.<$> organizationalUnit,
+               (JSON..=) "Pseudonym" Prelude.<$> pseudonym,
+               (JSON..=) "SerialNumber" Prelude.<$> serialNumber,
+               (JSON..=) "State" Prelude.<$> state,
+               (JSON..=) "Surname" Prelude.<$> surname,
+               (JSON..=) "Title" Prelude.<$> title]))
+instance Property "CommonName" SubjectProperty where
+  type PropertyType "CommonName" SubjectProperty = Value Prelude.Text
+  set newValue SubjectProperty {..}
+    = SubjectProperty {commonName = Prelude.pure newValue, ..}
+instance Property "Country" SubjectProperty where
+  type PropertyType "Country" SubjectProperty = Value Prelude.Text
+  set newValue SubjectProperty {..}
+    = SubjectProperty {country = Prelude.pure newValue, ..}
+instance Property "CustomAttributes" SubjectProperty where
+  type PropertyType "CustomAttributes" SubjectProperty = [CustomAttributeProperty]
+  set newValue SubjectProperty {..}
+    = SubjectProperty {customAttributes = Prelude.pure newValue, ..}
+instance Property "DistinguishedNameQualifier" SubjectProperty where
+  type PropertyType "DistinguishedNameQualifier" SubjectProperty = Value Prelude.Text
+  set newValue SubjectProperty {..}
+    = SubjectProperty
+        {distinguishedNameQualifier = Prelude.pure newValue, ..}
+instance Property "GenerationQualifier" SubjectProperty where
+  type PropertyType "GenerationQualifier" SubjectProperty = Value Prelude.Text
+  set newValue SubjectProperty {..}
+    = SubjectProperty {generationQualifier = Prelude.pure newValue, ..}
+instance Property "GivenName" SubjectProperty where
+  type PropertyType "GivenName" SubjectProperty = Value Prelude.Text
+  set newValue SubjectProperty {..}
+    = SubjectProperty {givenName = Prelude.pure newValue, ..}
+instance Property "Initials" SubjectProperty where
+  type PropertyType "Initials" SubjectProperty = Value Prelude.Text
+  set newValue SubjectProperty {..}
+    = SubjectProperty {initials = Prelude.pure newValue, ..}
+instance Property "Locality" SubjectProperty where
+  type PropertyType "Locality" SubjectProperty = Value Prelude.Text
+  set newValue SubjectProperty {..}
+    = SubjectProperty {locality = Prelude.pure newValue, ..}
+instance Property "Organization" SubjectProperty where
+  type PropertyType "Organization" SubjectProperty = Value Prelude.Text
+  set newValue SubjectProperty {..}
+    = SubjectProperty {organization = Prelude.pure newValue, ..}
+instance Property "OrganizationalUnit" SubjectProperty where
+  type PropertyType "OrganizationalUnit" SubjectProperty = Value Prelude.Text
+  set newValue SubjectProperty {..}
+    = SubjectProperty {organizationalUnit = Prelude.pure newValue, ..}
+instance Property "Pseudonym" SubjectProperty where
+  type PropertyType "Pseudonym" SubjectProperty = Value Prelude.Text
+  set newValue SubjectProperty {..}
+    = SubjectProperty {pseudonym = Prelude.pure newValue, ..}
+instance Property "SerialNumber" SubjectProperty where
+  type PropertyType "SerialNumber" SubjectProperty = Value Prelude.Text
+  set newValue SubjectProperty {..}
+    = SubjectProperty {serialNumber = Prelude.pure newValue, ..}
+instance Property "State" SubjectProperty where
+  type PropertyType "State" SubjectProperty = Value Prelude.Text
+  set newValue SubjectProperty {..}
+    = SubjectProperty {state = Prelude.pure newValue, ..}
+instance Property "Surname" SubjectProperty where
+  type PropertyType "Surname" SubjectProperty = Value Prelude.Text
+  set newValue SubjectProperty {..}
+    = SubjectProperty {surname = Prelude.pure newValue, ..}
+instance Property "Title" SubjectProperty where
+  type PropertyType "Title" SubjectProperty = Value Prelude.Text
+  set newValue SubjectProperty {..}
+    = SubjectProperty {title = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ACMPCA/Certificate/SubjectProperty.hs-boot b/gen/Stratosphere/ACMPCA/Certificate/SubjectProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ACMPCA/Certificate/SubjectProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ACMPCA.Certificate.SubjectProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data SubjectProperty :: Prelude.Type
+instance ToResourceProperties SubjectProperty
+instance Prelude.Eq SubjectProperty
+instance Prelude.Show SubjectProperty
+instance JSON.ToJSON SubjectProperty
diff --git a/gen/Stratosphere/ACMPCA/Certificate/ValidityProperty.hs b/gen/Stratosphere/ACMPCA/Certificate/ValidityProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ACMPCA/Certificate/ValidityProperty.hs
@@ -0,0 +1,38 @@
+module Stratosphere.ACMPCA.Certificate.ValidityProperty (
+        ValidityProperty(..), mkValidityProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ValidityProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-validity.html>
+    ValidityProperty {haddock_workaround_ :: (),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-validity.html#cfn-acmpca-certificate-validity-type>
+                      type' :: (Value Prelude.Text),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-validity.html#cfn-acmpca-certificate-validity-value>
+                      value :: (Value Prelude.Double)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkValidityProperty ::
+  Value Prelude.Text -> Value Prelude.Double -> ValidityProperty
+mkValidityProperty type' value
+  = ValidityProperty
+      {haddock_workaround_ = (), type' = type', value = value}
+instance ToResourceProperties ValidityProperty where
+  toResourceProperties ValidityProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ACMPCA::Certificate.Validity",
+         supportsTags = Prelude.False,
+         properties = ["Type" JSON..= type', "Value" JSON..= value]}
+instance JSON.ToJSON ValidityProperty where
+  toJSON ValidityProperty {..}
+    = JSON.object ["Type" JSON..= type', "Value" JSON..= value]
+instance Property "Type" ValidityProperty where
+  type PropertyType "Type" ValidityProperty = Value Prelude.Text
+  set newValue ValidityProperty {..}
+    = ValidityProperty {type' = newValue, ..}
+instance Property "Value" ValidityProperty where
+  type PropertyType "Value" ValidityProperty = Value Prelude.Double
+  set newValue ValidityProperty {..}
+    = ValidityProperty {value = newValue, ..}
diff --git a/gen/Stratosphere/ACMPCA/Certificate/ValidityProperty.hs-boot b/gen/Stratosphere/ACMPCA/Certificate/ValidityProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ACMPCA/Certificate/ValidityProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ACMPCA.Certificate.ValidityProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ValidityProperty :: Prelude.Type
+instance ToResourceProperties ValidityProperty
+instance Prelude.Eq ValidityProperty
+instance Prelude.Show ValidityProperty
+instance JSON.ToJSON ValidityProperty
diff --git a/gen/Stratosphere/ACMPCA/CertificateAuthority.hs b/gen/Stratosphere/ACMPCA/CertificateAuthority.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ACMPCA/CertificateAuthority.hs
@@ -0,0 +1,118 @@
+module Stratosphere.ACMPCA.CertificateAuthority (
+        module Exports, CertificateAuthority(..), mkCertificateAuthority
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ACMPCA.CertificateAuthority.CsrExtensionsProperty as Exports
+import {-# SOURCE #-} Stratosphere.ACMPCA.CertificateAuthority.RevocationConfigurationProperty as Exports
+import {-# SOURCE #-} Stratosphere.ACMPCA.CertificateAuthority.SubjectProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data CertificateAuthority
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-acmpca-certificateauthority.html>
+    CertificateAuthority {haddock_workaround_ :: (),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-acmpca-certificateauthority.html#cfn-acmpca-certificateauthority-csrextensions>
+                          csrExtensions :: (Prelude.Maybe CsrExtensionsProperty),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-acmpca-certificateauthority.html#cfn-acmpca-certificateauthority-keyalgorithm>
+                          keyAlgorithm :: (Value Prelude.Text),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-acmpca-certificateauthority.html#cfn-acmpca-certificateauthority-keystoragesecuritystandard>
+                          keyStorageSecurityStandard :: (Prelude.Maybe (Value Prelude.Text)),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-acmpca-certificateauthority.html#cfn-acmpca-certificateauthority-revocationconfiguration>
+                          revocationConfiguration :: (Prelude.Maybe RevocationConfigurationProperty),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-acmpca-certificateauthority.html#cfn-acmpca-certificateauthority-signingalgorithm>
+                          signingAlgorithm :: (Value Prelude.Text),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-acmpca-certificateauthority.html#cfn-acmpca-certificateauthority-subject>
+                          subject :: SubjectProperty,
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-acmpca-certificateauthority.html#cfn-acmpca-certificateauthority-tags>
+                          tags :: (Prelude.Maybe [Tag]),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-acmpca-certificateauthority.html#cfn-acmpca-certificateauthority-type>
+                          type' :: (Value Prelude.Text),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-acmpca-certificateauthority.html#cfn-acmpca-certificateauthority-usagemode>
+                          usageMode :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCertificateAuthority ::
+  Value Prelude.Text
+  -> Value Prelude.Text
+     -> SubjectProperty -> Value Prelude.Text -> CertificateAuthority
+mkCertificateAuthority keyAlgorithm signingAlgorithm subject type'
+  = CertificateAuthority
+      {haddock_workaround_ = (), keyAlgorithm = keyAlgorithm,
+       signingAlgorithm = signingAlgorithm, subject = subject,
+       type' = type', csrExtensions = Prelude.Nothing,
+       keyStorageSecurityStandard = Prelude.Nothing,
+       revocationConfiguration = Prelude.Nothing, tags = Prelude.Nothing,
+       usageMode = Prelude.Nothing}
+instance ToResourceProperties CertificateAuthority where
+  toResourceProperties CertificateAuthority {..}
+    = ResourceProperties
+        {awsType = "AWS::ACMPCA::CertificateAuthority",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["KeyAlgorithm" JSON..= keyAlgorithm,
+                            "SigningAlgorithm" JSON..= signingAlgorithm,
+                            "Subject" JSON..= subject, "Type" JSON..= type']
+                           (Prelude.catMaybes
+                              [(JSON..=) "CsrExtensions" Prelude.<$> csrExtensions,
+                               (JSON..=) "KeyStorageSecurityStandard"
+                                 Prelude.<$> keyStorageSecurityStandard,
+                               (JSON..=) "RevocationConfiguration"
+                                 Prelude.<$> revocationConfiguration,
+                               (JSON..=) "Tags" Prelude.<$> tags,
+                               (JSON..=) "UsageMode" Prelude.<$> usageMode]))}
+instance JSON.ToJSON CertificateAuthority where
+  toJSON CertificateAuthority {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["KeyAlgorithm" JSON..= keyAlgorithm,
+               "SigningAlgorithm" JSON..= signingAlgorithm,
+               "Subject" JSON..= subject, "Type" JSON..= type']
+              (Prelude.catMaybes
+                 [(JSON..=) "CsrExtensions" Prelude.<$> csrExtensions,
+                  (JSON..=) "KeyStorageSecurityStandard"
+                    Prelude.<$> keyStorageSecurityStandard,
+                  (JSON..=) "RevocationConfiguration"
+                    Prelude.<$> revocationConfiguration,
+                  (JSON..=) "Tags" Prelude.<$> tags,
+                  (JSON..=) "UsageMode" Prelude.<$> usageMode])))
+instance Property "CsrExtensions" CertificateAuthority where
+  type PropertyType "CsrExtensions" CertificateAuthority = CsrExtensionsProperty
+  set newValue CertificateAuthority {..}
+    = CertificateAuthority {csrExtensions = Prelude.pure newValue, ..}
+instance Property "KeyAlgorithm" CertificateAuthority where
+  type PropertyType "KeyAlgorithm" CertificateAuthority = Value Prelude.Text
+  set newValue CertificateAuthority {..}
+    = CertificateAuthority {keyAlgorithm = newValue, ..}
+instance Property "KeyStorageSecurityStandard" CertificateAuthority where
+  type PropertyType "KeyStorageSecurityStandard" CertificateAuthority = Value Prelude.Text
+  set newValue CertificateAuthority {..}
+    = CertificateAuthority
+        {keyStorageSecurityStandard = Prelude.pure newValue, ..}
+instance Property "RevocationConfiguration" CertificateAuthority where
+  type PropertyType "RevocationConfiguration" CertificateAuthority = RevocationConfigurationProperty
+  set newValue CertificateAuthority {..}
+    = CertificateAuthority
+        {revocationConfiguration = Prelude.pure newValue, ..}
+instance Property "SigningAlgorithm" CertificateAuthority where
+  type PropertyType "SigningAlgorithm" CertificateAuthority = Value Prelude.Text
+  set newValue CertificateAuthority {..}
+    = CertificateAuthority {signingAlgorithm = newValue, ..}
+instance Property "Subject" CertificateAuthority where
+  type PropertyType "Subject" CertificateAuthority = SubjectProperty
+  set newValue CertificateAuthority {..}
+    = CertificateAuthority {subject = newValue, ..}
+instance Property "Tags" CertificateAuthority where
+  type PropertyType "Tags" CertificateAuthority = [Tag]
+  set newValue CertificateAuthority {..}
+    = CertificateAuthority {tags = Prelude.pure newValue, ..}
+instance Property "Type" CertificateAuthority where
+  type PropertyType "Type" CertificateAuthority = Value Prelude.Text
+  set newValue CertificateAuthority {..}
+    = CertificateAuthority {type' = newValue, ..}
+instance Property "UsageMode" CertificateAuthority where
+  type PropertyType "UsageMode" CertificateAuthority = Value Prelude.Text
+  set newValue CertificateAuthority {..}
+    = CertificateAuthority {usageMode = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ACMPCA/CertificateAuthority/AccessDescriptionProperty.hs b/gen/Stratosphere/ACMPCA/CertificateAuthority/AccessDescriptionProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ACMPCA/CertificateAuthority/AccessDescriptionProperty.hs
@@ -0,0 +1,45 @@
+module Stratosphere.ACMPCA.CertificateAuthority.AccessDescriptionProperty (
+        module Exports, AccessDescriptionProperty(..),
+        mkAccessDescriptionProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ACMPCA.CertificateAuthority.AccessMethodProperty as Exports
+import {-# SOURCE #-} Stratosphere.ACMPCA.CertificateAuthority.GeneralNameProperty as Exports
+import Stratosphere.ResourceProperties
+data AccessDescriptionProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-accessdescription.html>
+    AccessDescriptionProperty {haddock_workaround_ :: (),
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-accessdescription.html#cfn-acmpca-certificateauthority-accessdescription-accesslocation>
+                               accessLocation :: GeneralNameProperty,
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-accessdescription.html#cfn-acmpca-certificateauthority-accessdescription-accessmethod>
+                               accessMethod :: AccessMethodProperty}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAccessDescriptionProperty ::
+  GeneralNameProperty
+  -> AccessMethodProperty -> AccessDescriptionProperty
+mkAccessDescriptionProperty accessLocation accessMethod
+  = AccessDescriptionProperty
+      {haddock_workaround_ = (), accessLocation = accessLocation,
+       accessMethod = accessMethod}
+instance ToResourceProperties AccessDescriptionProperty where
+  toResourceProperties AccessDescriptionProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ACMPCA::CertificateAuthority.AccessDescription",
+         supportsTags = Prelude.False,
+         properties = ["AccessLocation" JSON..= accessLocation,
+                       "AccessMethod" JSON..= accessMethod]}
+instance JSON.ToJSON AccessDescriptionProperty where
+  toJSON AccessDescriptionProperty {..}
+    = JSON.object
+        ["AccessLocation" JSON..= accessLocation,
+         "AccessMethod" JSON..= accessMethod]
+instance Property "AccessLocation" AccessDescriptionProperty where
+  type PropertyType "AccessLocation" AccessDescriptionProperty = GeneralNameProperty
+  set newValue AccessDescriptionProperty {..}
+    = AccessDescriptionProperty {accessLocation = newValue, ..}
+instance Property "AccessMethod" AccessDescriptionProperty where
+  type PropertyType "AccessMethod" AccessDescriptionProperty = AccessMethodProperty
+  set newValue AccessDescriptionProperty {..}
+    = AccessDescriptionProperty {accessMethod = newValue, ..}
diff --git a/gen/Stratosphere/ACMPCA/CertificateAuthority/AccessDescriptionProperty.hs-boot b/gen/Stratosphere/ACMPCA/CertificateAuthority/AccessDescriptionProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ACMPCA/CertificateAuthority/AccessDescriptionProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ACMPCA.CertificateAuthority.AccessDescriptionProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AccessDescriptionProperty :: Prelude.Type
+instance ToResourceProperties AccessDescriptionProperty
+instance Prelude.Eq AccessDescriptionProperty
+instance Prelude.Show AccessDescriptionProperty
+instance JSON.ToJSON AccessDescriptionProperty
diff --git a/gen/Stratosphere/ACMPCA/CertificateAuthority/AccessMethodProperty.hs b/gen/Stratosphere/ACMPCA/CertificateAuthority/AccessMethodProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ACMPCA/CertificateAuthority/AccessMethodProperty.hs
@@ -0,0 +1,49 @@
+module Stratosphere.ACMPCA.CertificateAuthority.AccessMethodProperty (
+        AccessMethodProperty(..), mkAccessMethodProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AccessMethodProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-accessmethod.html>
+    AccessMethodProperty {haddock_workaround_ :: (),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-accessmethod.html#cfn-acmpca-certificateauthority-accessmethod-accessmethodtype>
+                          accessMethodType :: (Prelude.Maybe (Value Prelude.Text)),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-accessmethod.html#cfn-acmpca-certificateauthority-accessmethod-customobjectidentifier>
+                          customObjectIdentifier :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAccessMethodProperty :: AccessMethodProperty
+mkAccessMethodProperty
+  = AccessMethodProperty
+      {haddock_workaround_ = (), accessMethodType = Prelude.Nothing,
+       customObjectIdentifier = Prelude.Nothing}
+instance ToResourceProperties AccessMethodProperty where
+  toResourceProperties AccessMethodProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ACMPCA::CertificateAuthority.AccessMethod",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AccessMethodType" Prelude.<$> accessMethodType,
+                            (JSON..=) "CustomObjectIdentifier"
+                              Prelude.<$> customObjectIdentifier])}
+instance JSON.ToJSON AccessMethodProperty where
+  toJSON AccessMethodProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AccessMethodType" Prelude.<$> accessMethodType,
+               (JSON..=) "CustomObjectIdentifier"
+                 Prelude.<$> customObjectIdentifier]))
+instance Property "AccessMethodType" AccessMethodProperty where
+  type PropertyType "AccessMethodType" AccessMethodProperty = Value Prelude.Text
+  set newValue AccessMethodProperty {..}
+    = AccessMethodProperty
+        {accessMethodType = Prelude.pure newValue, ..}
+instance Property "CustomObjectIdentifier" AccessMethodProperty where
+  type PropertyType "CustomObjectIdentifier" AccessMethodProperty = Value Prelude.Text
+  set newValue AccessMethodProperty {..}
+    = AccessMethodProperty
+        {customObjectIdentifier = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ACMPCA/CertificateAuthority/AccessMethodProperty.hs-boot b/gen/Stratosphere/ACMPCA/CertificateAuthority/AccessMethodProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ACMPCA/CertificateAuthority/AccessMethodProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ACMPCA.CertificateAuthority.AccessMethodProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AccessMethodProperty :: Prelude.Type
+instance ToResourceProperties AccessMethodProperty
+instance Prelude.Eq AccessMethodProperty
+instance Prelude.Show AccessMethodProperty
+instance JSON.ToJSON AccessMethodProperty
diff --git a/gen/Stratosphere/ACMPCA/CertificateAuthority/CrlConfigurationProperty.hs b/gen/Stratosphere/ACMPCA/CertificateAuthority/CrlConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ACMPCA/CertificateAuthority/CrlConfigurationProperty.hs
@@ -0,0 +1,110 @@
+module Stratosphere.ACMPCA.CertificateAuthority.CrlConfigurationProperty (
+        module Exports, CrlConfigurationProperty(..),
+        mkCrlConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ACMPCA.CertificateAuthority.CrlDistributionPointExtensionConfigurationProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CrlConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-crlconfiguration.html>
+    CrlConfigurationProperty {haddock_workaround_ :: (),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-crlconfiguration.html#cfn-acmpca-certificateauthority-crlconfiguration-crldistributionpointextensionconfiguration>
+                              crlDistributionPointExtensionConfiguration :: (Prelude.Maybe CrlDistributionPointExtensionConfigurationProperty),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-crlconfiguration.html#cfn-acmpca-certificateauthority-crlconfiguration-crltype>
+                              crlType :: (Prelude.Maybe (Value Prelude.Text)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-crlconfiguration.html#cfn-acmpca-certificateauthority-crlconfiguration-customcname>
+                              customCname :: (Prelude.Maybe (Value Prelude.Text)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-crlconfiguration.html#cfn-acmpca-certificateauthority-crlconfiguration-custompath>
+                              customPath :: (Prelude.Maybe (Value Prelude.Text)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-crlconfiguration.html#cfn-acmpca-certificateauthority-crlconfiguration-enabled>
+                              enabled :: (Value Prelude.Bool),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-crlconfiguration.html#cfn-acmpca-certificateauthority-crlconfiguration-expirationindays>
+                              expirationInDays :: (Prelude.Maybe (Value Prelude.Integer)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-crlconfiguration.html#cfn-acmpca-certificateauthority-crlconfiguration-s3bucketname>
+                              s3BucketName :: (Prelude.Maybe (Value Prelude.Text)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-crlconfiguration.html#cfn-acmpca-certificateauthority-crlconfiguration-s3objectacl>
+                              s3ObjectAcl :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCrlConfigurationProperty ::
+  Value Prelude.Bool -> CrlConfigurationProperty
+mkCrlConfigurationProperty enabled
+  = CrlConfigurationProperty
+      {haddock_workaround_ = (), enabled = enabled,
+       crlDistributionPointExtensionConfiguration = Prelude.Nothing,
+       crlType = Prelude.Nothing, customCname = Prelude.Nothing,
+       customPath = Prelude.Nothing, expirationInDays = Prelude.Nothing,
+       s3BucketName = Prelude.Nothing, s3ObjectAcl = Prelude.Nothing}
+instance ToResourceProperties CrlConfigurationProperty where
+  toResourceProperties CrlConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ACMPCA::CertificateAuthority.CrlConfiguration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Enabled" JSON..= enabled]
+                           (Prelude.catMaybes
+                              [(JSON..=) "CrlDistributionPointExtensionConfiguration"
+                                 Prelude.<$> crlDistributionPointExtensionConfiguration,
+                               (JSON..=) "CrlType" Prelude.<$> crlType,
+                               (JSON..=) "CustomCname" Prelude.<$> customCname,
+                               (JSON..=) "CustomPath" Prelude.<$> customPath,
+                               (JSON..=) "ExpirationInDays" Prelude.<$> expirationInDays,
+                               (JSON..=) "S3BucketName" Prelude.<$> s3BucketName,
+                               (JSON..=) "S3ObjectAcl" Prelude.<$> s3ObjectAcl]))}
+instance JSON.ToJSON CrlConfigurationProperty where
+  toJSON CrlConfigurationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Enabled" JSON..= enabled]
+              (Prelude.catMaybes
+                 [(JSON..=) "CrlDistributionPointExtensionConfiguration"
+                    Prelude.<$> crlDistributionPointExtensionConfiguration,
+                  (JSON..=) "CrlType" Prelude.<$> crlType,
+                  (JSON..=) "CustomCname" Prelude.<$> customCname,
+                  (JSON..=) "CustomPath" Prelude.<$> customPath,
+                  (JSON..=) "ExpirationInDays" Prelude.<$> expirationInDays,
+                  (JSON..=) "S3BucketName" Prelude.<$> s3BucketName,
+                  (JSON..=) "S3ObjectAcl" Prelude.<$> s3ObjectAcl])))
+instance Property "CrlDistributionPointExtensionConfiguration" CrlConfigurationProperty where
+  type PropertyType "CrlDistributionPointExtensionConfiguration" CrlConfigurationProperty = CrlDistributionPointExtensionConfigurationProperty
+  set newValue CrlConfigurationProperty {..}
+    = CrlConfigurationProperty
+        {crlDistributionPointExtensionConfiguration = Prelude.pure
+                                                        newValue,
+         ..}
+instance Property "CrlType" CrlConfigurationProperty where
+  type PropertyType "CrlType" CrlConfigurationProperty = Value Prelude.Text
+  set newValue CrlConfigurationProperty {..}
+    = CrlConfigurationProperty {crlType = Prelude.pure newValue, ..}
+instance Property "CustomCname" CrlConfigurationProperty where
+  type PropertyType "CustomCname" CrlConfigurationProperty = Value Prelude.Text
+  set newValue CrlConfigurationProperty {..}
+    = CrlConfigurationProperty
+        {customCname = Prelude.pure newValue, ..}
+instance Property "CustomPath" CrlConfigurationProperty where
+  type PropertyType "CustomPath" CrlConfigurationProperty = Value Prelude.Text
+  set newValue CrlConfigurationProperty {..}
+    = CrlConfigurationProperty {customPath = Prelude.pure newValue, ..}
+instance Property "Enabled" CrlConfigurationProperty where
+  type PropertyType "Enabled" CrlConfigurationProperty = Value Prelude.Bool
+  set newValue CrlConfigurationProperty {..}
+    = CrlConfigurationProperty {enabled = newValue, ..}
+instance Property "ExpirationInDays" CrlConfigurationProperty where
+  type PropertyType "ExpirationInDays" CrlConfigurationProperty = Value Prelude.Integer
+  set newValue CrlConfigurationProperty {..}
+    = CrlConfigurationProperty
+        {expirationInDays = Prelude.pure newValue, ..}
+instance Property "S3BucketName" CrlConfigurationProperty where
+  type PropertyType "S3BucketName" CrlConfigurationProperty = Value Prelude.Text
+  set newValue CrlConfigurationProperty {..}
+    = CrlConfigurationProperty
+        {s3BucketName = Prelude.pure newValue, ..}
+instance Property "S3ObjectAcl" CrlConfigurationProperty where
+  type PropertyType "S3ObjectAcl" CrlConfigurationProperty = Value Prelude.Text
+  set newValue CrlConfigurationProperty {..}
+    = CrlConfigurationProperty
+        {s3ObjectAcl = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ACMPCA/CertificateAuthority/CrlConfigurationProperty.hs-boot b/gen/Stratosphere/ACMPCA/CertificateAuthority/CrlConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ACMPCA/CertificateAuthority/CrlConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ACMPCA.CertificateAuthority.CrlConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CrlConfigurationProperty :: Prelude.Type
+instance ToResourceProperties CrlConfigurationProperty
+instance Prelude.Eq CrlConfigurationProperty
+instance Prelude.Show CrlConfigurationProperty
+instance JSON.ToJSON CrlConfigurationProperty
diff --git a/gen/Stratosphere/ACMPCA/CertificateAuthority/CrlDistributionPointExtensionConfigurationProperty.hs b/gen/Stratosphere/ACMPCA/CertificateAuthority/CrlDistributionPointExtensionConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ACMPCA/CertificateAuthority/CrlDistributionPointExtensionConfigurationProperty.hs
@@ -0,0 +1,38 @@
+module Stratosphere.ACMPCA.CertificateAuthority.CrlDistributionPointExtensionConfigurationProperty (
+        CrlDistributionPointExtensionConfigurationProperty(..),
+        mkCrlDistributionPointExtensionConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CrlDistributionPointExtensionConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-crldistributionpointextensionconfiguration.html>
+    CrlDistributionPointExtensionConfigurationProperty {haddock_workaround_ :: (),
+                                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-crldistributionpointextensionconfiguration.html#cfn-acmpca-certificateauthority-crldistributionpointextensionconfiguration-omitextension>
+                                                        omitExtension :: (Value Prelude.Bool)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCrlDistributionPointExtensionConfigurationProperty ::
+  Value Prelude.Bool
+  -> CrlDistributionPointExtensionConfigurationProperty
+mkCrlDistributionPointExtensionConfigurationProperty omitExtension
+  = CrlDistributionPointExtensionConfigurationProperty
+      {haddock_workaround_ = (), omitExtension = omitExtension}
+instance ToResourceProperties CrlDistributionPointExtensionConfigurationProperty where
+  toResourceProperties
+    CrlDistributionPointExtensionConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ACMPCA::CertificateAuthority.CrlDistributionPointExtensionConfiguration",
+         supportsTags = Prelude.False,
+         properties = ["OmitExtension" JSON..= omitExtension]}
+instance JSON.ToJSON CrlDistributionPointExtensionConfigurationProperty where
+  toJSON CrlDistributionPointExtensionConfigurationProperty {..}
+    = JSON.object ["OmitExtension" JSON..= omitExtension]
+instance Property "OmitExtension" CrlDistributionPointExtensionConfigurationProperty where
+  type PropertyType "OmitExtension" CrlDistributionPointExtensionConfigurationProperty = Value Prelude.Bool
+  set
+    newValue
+    CrlDistributionPointExtensionConfigurationProperty {..}
+    = CrlDistributionPointExtensionConfigurationProperty
+        {omitExtension = newValue, ..}
diff --git a/gen/Stratosphere/ACMPCA/CertificateAuthority/CrlDistributionPointExtensionConfigurationProperty.hs-boot b/gen/Stratosphere/ACMPCA/CertificateAuthority/CrlDistributionPointExtensionConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ACMPCA/CertificateAuthority/CrlDistributionPointExtensionConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ACMPCA.CertificateAuthority.CrlDistributionPointExtensionConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CrlDistributionPointExtensionConfigurationProperty :: Prelude.Type
+instance ToResourceProperties CrlDistributionPointExtensionConfigurationProperty
+instance Prelude.Eq CrlDistributionPointExtensionConfigurationProperty
+instance Prelude.Show CrlDistributionPointExtensionConfigurationProperty
+instance JSON.ToJSON CrlDistributionPointExtensionConfigurationProperty
diff --git a/gen/Stratosphere/ACMPCA/CertificateAuthority/CsrExtensionsProperty.hs b/gen/Stratosphere/ACMPCA/CertificateAuthority/CsrExtensionsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ACMPCA/CertificateAuthority/CsrExtensionsProperty.hs
@@ -0,0 +1,49 @@
+module Stratosphere.ACMPCA.CertificateAuthority.CsrExtensionsProperty (
+        module Exports, CsrExtensionsProperty(..), mkCsrExtensionsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ACMPCA.CertificateAuthority.AccessDescriptionProperty as Exports
+import {-# SOURCE #-} Stratosphere.ACMPCA.CertificateAuthority.KeyUsageProperty as Exports
+import Stratosphere.ResourceProperties
+data CsrExtensionsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-csrextensions.html>
+    CsrExtensionsProperty {haddock_workaround_ :: (),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-csrextensions.html#cfn-acmpca-certificateauthority-csrextensions-keyusage>
+                           keyUsage :: (Prelude.Maybe KeyUsageProperty),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-csrextensions.html#cfn-acmpca-certificateauthority-csrextensions-subjectinformationaccess>
+                           subjectInformationAccess :: (Prelude.Maybe [AccessDescriptionProperty])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCsrExtensionsProperty :: CsrExtensionsProperty
+mkCsrExtensionsProperty
+  = CsrExtensionsProperty
+      {haddock_workaround_ = (), keyUsage = Prelude.Nothing,
+       subjectInformationAccess = Prelude.Nothing}
+instance ToResourceProperties CsrExtensionsProperty where
+  toResourceProperties CsrExtensionsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ACMPCA::CertificateAuthority.CsrExtensions",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "KeyUsage" Prelude.<$> keyUsage,
+                            (JSON..=) "SubjectInformationAccess"
+                              Prelude.<$> subjectInformationAccess])}
+instance JSON.ToJSON CsrExtensionsProperty where
+  toJSON CsrExtensionsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "KeyUsage" Prelude.<$> keyUsage,
+               (JSON..=) "SubjectInformationAccess"
+                 Prelude.<$> subjectInformationAccess]))
+instance Property "KeyUsage" CsrExtensionsProperty where
+  type PropertyType "KeyUsage" CsrExtensionsProperty = KeyUsageProperty
+  set newValue CsrExtensionsProperty {..}
+    = CsrExtensionsProperty {keyUsage = Prelude.pure newValue, ..}
+instance Property "SubjectInformationAccess" CsrExtensionsProperty where
+  type PropertyType "SubjectInformationAccess" CsrExtensionsProperty = [AccessDescriptionProperty]
+  set newValue CsrExtensionsProperty {..}
+    = CsrExtensionsProperty
+        {subjectInformationAccess = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ACMPCA/CertificateAuthority/CsrExtensionsProperty.hs-boot b/gen/Stratosphere/ACMPCA/CertificateAuthority/CsrExtensionsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ACMPCA/CertificateAuthority/CsrExtensionsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ACMPCA.CertificateAuthority.CsrExtensionsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CsrExtensionsProperty :: Prelude.Type
+instance ToResourceProperties CsrExtensionsProperty
+instance Prelude.Eq CsrExtensionsProperty
+instance Prelude.Show CsrExtensionsProperty
+instance JSON.ToJSON CsrExtensionsProperty
diff --git a/gen/Stratosphere/ACMPCA/CertificateAuthority/CustomAttributeProperty.hs b/gen/Stratosphere/ACMPCA/CertificateAuthority/CustomAttributeProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ACMPCA/CertificateAuthority/CustomAttributeProperty.hs
@@ -0,0 +1,42 @@
+module Stratosphere.ACMPCA.CertificateAuthority.CustomAttributeProperty (
+        CustomAttributeProperty(..), mkCustomAttributeProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CustomAttributeProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-customattribute.html>
+    CustomAttributeProperty {haddock_workaround_ :: (),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-customattribute.html#cfn-acmpca-certificateauthority-customattribute-objectidentifier>
+                             objectIdentifier :: (Value Prelude.Text),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-customattribute.html#cfn-acmpca-certificateauthority-customattribute-value>
+                             value :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCustomAttributeProperty ::
+  Value Prelude.Text -> Value Prelude.Text -> CustomAttributeProperty
+mkCustomAttributeProperty objectIdentifier value
+  = CustomAttributeProperty
+      {haddock_workaround_ = (), objectIdentifier = objectIdentifier,
+       value = value}
+instance ToResourceProperties CustomAttributeProperty where
+  toResourceProperties CustomAttributeProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ACMPCA::CertificateAuthority.CustomAttribute",
+         supportsTags = Prelude.False,
+         properties = ["ObjectIdentifier" JSON..= objectIdentifier,
+                       "Value" JSON..= value]}
+instance JSON.ToJSON CustomAttributeProperty where
+  toJSON CustomAttributeProperty {..}
+    = JSON.object
+        ["ObjectIdentifier" JSON..= objectIdentifier,
+         "Value" JSON..= value]
+instance Property "ObjectIdentifier" CustomAttributeProperty where
+  type PropertyType "ObjectIdentifier" CustomAttributeProperty = Value Prelude.Text
+  set newValue CustomAttributeProperty {..}
+    = CustomAttributeProperty {objectIdentifier = newValue, ..}
+instance Property "Value" CustomAttributeProperty where
+  type PropertyType "Value" CustomAttributeProperty = Value Prelude.Text
+  set newValue CustomAttributeProperty {..}
+    = CustomAttributeProperty {value = newValue, ..}
diff --git a/gen/Stratosphere/ACMPCA/CertificateAuthority/CustomAttributeProperty.hs-boot b/gen/Stratosphere/ACMPCA/CertificateAuthority/CustomAttributeProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ACMPCA/CertificateAuthority/CustomAttributeProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ACMPCA.CertificateAuthority.CustomAttributeProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CustomAttributeProperty :: Prelude.Type
+instance ToResourceProperties CustomAttributeProperty
+instance Prelude.Eq CustomAttributeProperty
+instance Prelude.Show CustomAttributeProperty
+instance JSON.ToJSON CustomAttributeProperty
diff --git a/gen/Stratosphere/ACMPCA/CertificateAuthority/EdiPartyNameProperty.hs b/gen/Stratosphere/ACMPCA/CertificateAuthority/EdiPartyNameProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ACMPCA/CertificateAuthority/EdiPartyNameProperty.hs
@@ -0,0 +1,48 @@
+module Stratosphere.ACMPCA.CertificateAuthority.EdiPartyNameProperty (
+        EdiPartyNameProperty(..), mkEdiPartyNameProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data EdiPartyNameProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-edipartyname.html>
+    EdiPartyNameProperty {haddock_workaround_ :: (),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-edipartyname.html#cfn-acmpca-certificateauthority-edipartyname-nameassigner>
+                          nameAssigner :: (Prelude.Maybe (Value Prelude.Text)),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-edipartyname.html#cfn-acmpca-certificateauthority-edipartyname-partyname>
+                          partyName :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkEdiPartyNameProperty ::
+  Value Prelude.Text -> EdiPartyNameProperty
+mkEdiPartyNameProperty partyName
+  = EdiPartyNameProperty
+      {haddock_workaround_ = (), partyName = partyName,
+       nameAssigner = Prelude.Nothing}
+instance ToResourceProperties EdiPartyNameProperty where
+  toResourceProperties EdiPartyNameProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ACMPCA::CertificateAuthority.EdiPartyName",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["PartyName" JSON..= partyName]
+                           (Prelude.catMaybes
+                              [(JSON..=) "NameAssigner" Prelude.<$> nameAssigner]))}
+instance JSON.ToJSON EdiPartyNameProperty where
+  toJSON EdiPartyNameProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["PartyName" JSON..= partyName]
+              (Prelude.catMaybes
+                 [(JSON..=) "NameAssigner" Prelude.<$> nameAssigner])))
+instance Property "NameAssigner" EdiPartyNameProperty where
+  type PropertyType "NameAssigner" EdiPartyNameProperty = Value Prelude.Text
+  set newValue EdiPartyNameProperty {..}
+    = EdiPartyNameProperty {nameAssigner = Prelude.pure newValue, ..}
+instance Property "PartyName" EdiPartyNameProperty where
+  type PropertyType "PartyName" EdiPartyNameProperty = Value Prelude.Text
+  set newValue EdiPartyNameProperty {..}
+    = EdiPartyNameProperty {partyName = newValue, ..}
diff --git a/gen/Stratosphere/ACMPCA/CertificateAuthority/EdiPartyNameProperty.hs-boot b/gen/Stratosphere/ACMPCA/CertificateAuthority/EdiPartyNameProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ACMPCA/CertificateAuthority/EdiPartyNameProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ACMPCA.CertificateAuthority.EdiPartyNameProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data EdiPartyNameProperty :: Prelude.Type
+instance ToResourceProperties EdiPartyNameProperty
+instance Prelude.Eq EdiPartyNameProperty
+instance Prelude.Show EdiPartyNameProperty
+instance JSON.ToJSON EdiPartyNameProperty
diff --git a/gen/Stratosphere/ACMPCA/CertificateAuthority/GeneralNameProperty.hs b/gen/Stratosphere/ACMPCA/CertificateAuthority/GeneralNameProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ACMPCA/CertificateAuthority/GeneralNameProperty.hs
@@ -0,0 +1,102 @@
+module Stratosphere.ACMPCA.CertificateAuthority.GeneralNameProperty (
+        module Exports, GeneralNameProperty(..), mkGeneralNameProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ACMPCA.CertificateAuthority.EdiPartyNameProperty as Exports
+import {-# SOURCE #-} Stratosphere.ACMPCA.CertificateAuthority.OtherNameProperty as Exports
+import {-# SOURCE #-} Stratosphere.ACMPCA.CertificateAuthority.SubjectProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data GeneralNameProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-generalname.html>
+    GeneralNameProperty {haddock_workaround_ :: (),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-generalname.html#cfn-acmpca-certificateauthority-generalname-directoryname>
+                         directoryName :: (Prelude.Maybe SubjectProperty),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-generalname.html#cfn-acmpca-certificateauthority-generalname-dnsname>
+                         dnsName :: (Prelude.Maybe (Value Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-generalname.html#cfn-acmpca-certificateauthority-generalname-edipartyname>
+                         ediPartyName :: (Prelude.Maybe EdiPartyNameProperty),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-generalname.html#cfn-acmpca-certificateauthority-generalname-ipaddress>
+                         ipAddress :: (Prelude.Maybe (Value Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-generalname.html#cfn-acmpca-certificateauthority-generalname-othername>
+                         otherName :: (Prelude.Maybe OtherNameProperty),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-generalname.html#cfn-acmpca-certificateauthority-generalname-registeredid>
+                         registeredId :: (Prelude.Maybe (Value Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-generalname.html#cfn-acmpca-certificateauthority-generalname-rfc822name>
+                         rfc822Name :: (Prelude.Maybe (Value Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-generalname.html#cfn-acmpca-certificateauthority-generalname-uniformresourceidentifier>
+                         uniformResourceIdentifier :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkGeneralNameProperty :: GeneralNameProperty
+mkGeneralNameProperty
+  = GeneralNameProperty
+      {haddock_workaround_ = (), directoryName = Prelude.Nothing,
+       dnsName = Prelude.Nothing, ediPartyName = Prelude.Nothing,
+       ipAddress = Prelude.Nothing, otherName = Prelude.Nothing,
+       registeredId = Prelude.Nothing, rfc822Name = Prelude.Nothing,
+       uniformResourceIdentifier = Prelude.Nothing}
+instance ToResourceProperties GeneralNameProperty where
+  toResourceProperties GeneralNameProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ACMPCA::CertificateAuthority.GeneralName",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "DirectoryName" Prelude.<$> directoryName,
+                            (JSON..=) "DnsName" Prelude.<$> dnsName,
+                            (JSON..=) "EdiPartyName" Prelude.<$> ediPartyName,
+                            (JSON..=) "IpAddress" Prelude.<$> ipAddress,
+                            (JSON..=) "OtherName" Prelude.<$> otherName,
+                            (JSON..=) "RegisteredId" Prelude.<$> registeredId,
+                            (JSON..=) "Rfc822Name" Prelude.<$> rfc822Name,
+                            (JSON..=) "UniformResourceIdentifier"
+                              Prelude.<$> uniformResourceIdentifier])}
+instance JSON.ToJSON GeneralNameProperty where
+  toJSON GeneralNameProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "DirectoryName" Prelude.<$> directoryName,
+               (JSON..=) "DnsName" Prelude.<$> dnsName,
+               (JSON..=) "EdiPartyName" Prelude.<$> ediPartyName,
+               (JSON..=) "IpAddress" Prelude.<$> ipAddress,
+               (JSON..=) "OtherName" Prelude.<$> otherName,
+               (JSON..=) "RegisteredId" Prelude.<$> registeredId,
+               (JSON..=) "Rfc822Name" Prelude.<$> rfc822Name,
+               (JSON..=) "UniformResourceIdentifier"
+                 Prelude.<$> uniformResourceIdentifier]))
+instance Property "DirectoryName" GeneralNameProperty where
+  type PropertyType "DirectoryName" GeneralNameProperty = SubjectProperty
+  set newValue GeneralNameProperty {..}
+    = GeneralNameProperty {directoryName = Prelude.pure newValue, ..}
+instance Property "DnsName" GeneralNameProperty where
+  type PropertyType "DnsName" GeneralNameProperty = Value Prelude.Text
+  set newValue GeneralNameProperty {..}
+    = GeneralNameProperty {dnsName = Prelude.pure newValue, ..}
+instance Property "EdiPartyName" GeneralNameProperty where
+  type PropertyType "EdiPartyName" GeneralNameProperty = EdiPartyNameProperty
+  set newValue GeneralNameProperty {..}
+    = GeneralNameProperty {ediPartyName = Prelude.pure newValue, ..}
+instance Property "IpAddress" GeneralNameProperty where
+  type PropertyType "IpAddress" GeneralNameProperty = Value Prelude.Text
+  set newValue GeneralNameProperty {..}
+    = GeneralNameProperty {ipAddress = Prelude.pure newValue, ..}
+instance Property "OtherName" GeneralNameProperty where
+  type PropertyType "OtherName" GeneralNameProperty = OtherNameProperty
+  set newValue GeneralNameProperty {..}
+    = GeneralNameProperty {otherName = Prelude.pure newValue, ..}
+instance Property "RegisteredId" GeneralNameProperty where
+  type PropertyType "RegisteredId" GeneralNameProperty = Value Prelude.Text
+  set newValue GeneralNameProperty {..}
+    = GeneralNameProperty {registeredId = Prelude.pure newValue, ..}
+instance Property "Rfc822Name" GeneralNameProperty where
+  type PropertyType "Rfc822Name" GeneralNameProperty = Value Prelude.Text
+  set newValue GeneralNameProperty {..}
+    = GeneralNameProperty {rfc822Name = Prelude.pure newValue, ..}
+instance Property "UniformResourceIdentifier" GeneralNameProperty where
+  type PropertyType "UniformResourceIdentifier" GeneralNameProperty = Value Prelude.Text
+  set newValue GeneralNameProperty {..}
+    = GeneralNameProperty
+        {uniformResourceIdentifier = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ACMPCA/CertificateAuthority/GeneralNameProperty.hs-boot b/gen/Stratosphere/ACMPCA/CertificateAuthority/GeneralNameProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ACMPCA/CertificateAuthority/GeneralNameProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ACMPCA.CertificateAuthority.GeneralNameProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data GeneralNameProperty :: Prelude.Type
+instance ToResourceProperties GeneralNameProperty
+instance Prelude.Eq GeneralNameProperty
+instance Prelude.Show GeneralNameProperty
+instance JSON.ToJSON GeneralNameProperty
diff --git a/gen/Stratosphere/ACMPCA/CertificateAuthority/KeyUsageProperty.hs b/gen/Stratosphere/ACMPCA/CertificateAuthority/KeyUsageProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ACMPCA/CertificateAuthority/KeyUsageProperty.hs
@@ -0,0 +1,105 @@
+module Stratosphere.ACMPCA.CertificateAuthority.KeyUsageProperty (
+        KeyUsageProperty(..), mkKeyUsageProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data KeyUsageProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-keyusage.html>
+    KeyUsageProperty {haddock_workaround_ :: (),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-keyusage.html#cfn-acmpca-certificateauthority-keyusage-crlsign>
+                      cRLSign :: (Prelude.Maybe (Value Prelude.Bool)),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-keyusage.html#cfn-acmpca-certificateauthority-keyusage-dataencipherment>
+                      dataEncipherment :: (Prelude.Maybe (Value Prelude.Bool)),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-keyusage.html#cfn-acmpca-certificateauthority-keyusage-decipheronly>
+                      decipherOnly :: (Prelude.Maybe (Value Prelude.Bool)),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-keyusage.html#cfn-acmpca-certificateauthority-keyusage-digitalsignature>
+                      digitalSignature :: (Prelude.Maybe (Value Prelude.Bool)),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-keyusage.html#cfn-acmpca-certificateauthority-keyusage-encipheronly>
+                      encipherOnly :: (Prelude.Maybe (Value Prelude.Bool)),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-keyusage.html#cfn-acmpca-certificateauthority-keyusage-keyagreement>
+                      keyAgreement :: (Prelude.Maybe (Value Prelude.Bool)),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-keyusage.html#cfn-acmpca-certificateauthority-keyusage-keycertsign>
+                      keyCertSign :: (Prelude.Maybe (Value Prelude.Bool)),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-keyusage.html#cfn-acmpca-certificateauthority-keyusage-keyencipherment>
+                      keyEncipherment :: (Prelude.Maybe (Value Prelude.Bool)),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-keyusage.html#cfn-acmpca-certificateauthority-keyusage-nonrepudiation>
+                      nonRepudiation :: (Prelude.Maybe (Value Prelude.Bool))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkKeyUsageProperty :: KeyUsageProperty
+mkKeyUsageProperty
+  = KeyUsageProperty
+      {haddock_workaround_ = (), cRLSign = Prelude.Nothing,
+       dataEncipherment = Prelude.Nothing, decipherOnly = Prelude.Nothing,
+       digitalSignature = Prelude.Nothing, encipherOnly = Prelude.Nothing,
+       keyAgreement = Prelude.Nothing, keyCertSign = Prelude.Nothing,
+       keyEncipherment = Prelude.Nothing,
+       nonRepudiation = Prelude.Nothing}
+instance ToResourceProperties KeyUsageProperty where
+  toResourceProperties KeyUsageProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ACMPCA::CertificateAuthority.KeyUsage",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "CRLSign" Prelude.<$> cRLSign,
+                            (JSON..=) "DataEncipherment" Prelude.<$> dataEncipherment,
+                            (JSON..=) "DecipherOnly" Prelude.<$> decipherOnly,
+                            (JSON..=) "DigitalSignature" Prelude.<$> digitalSignature,
+                            (JSON..=) "EncipherOnly" Prelude.<$> encipherOnly,
+                            (JSON..=) "KeyAgreement" Prelude.<$> keyAgreement,
+                            (JSON..=) "KeyCertSign" Prelude.<$> keyCertSign,
+                            (JSON..=) "KeyEncipherment" Prelude.<$> keyEncipherment,
+                            (JSON..=) "NonRepudiation" Prelude.<$> nonRepudiation])}
+instance JSON.ToJSON KeyUsageProperty where
+  toJSON KeyUsageProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "CRLSign" Prelude.<$> cRLSign,
+               (JSON..=) "DataEncipherment" Prelude.<$> dataEncipherment,
+               (JSON..=) "DecipherOnly" Prelude.<$> decipherOnly,
+               (JSON..=) "DigitalSignature" Prelude.<$> digitalSignature,
+               (JSON..=) "EncipherOnly" Prelude.<$> encipherOnly,
+               (JSON..=) "KeyAgreement" Prelude.<$> keyAgreement,
+               (JSON..=) "KeyCertSign" Prelude.<$> keyCertSign,
+               (JSON..=) "KeyEncipherment" Prelude.<$> keyEncipherment,
+               (JSON..=) "NonRepudiation" Prelude.<$> nonRepudiation]))
+instance Property "CRLSign" KeyUsageProperty where
+  type PropertyType "CRLSign" KeyUsageProperty = Value Prelude.Bool
+  set newValue KeyUsageProperty {..}
+    = KeyUsageProperty {cRLSign = Prelude.pure newValue, ..}
+instance Property "DataEncipherment" KeyUsageProperty where
+  type PropertyType "DataEncipherment" KeyUsageProperty = Value Prelude.Bool
+  set newValue KeyUsageProperty {..}
+    = KeyUsageProperty {dataEncipherment = Prelude.pure newValue, ..}
+instance Property "DecipherOnly" KeyUsageProperty where
+  type PropertyType "DecipherOnly" KeyUsageProperty = Value Prelude.Bool
+  set newValue KeyUsageProperty {..}
+    = KeyUsageProperty {decipherOnly = Prelude.pure newValue, ..}
+instance Property "DigitalSignature" KeyUsageProperty where
+  type PropertyType "DigitalSignature" KeyUsageProperty = Value Prelude.Bool
+  set newValue KeyUsageProperty {..}
+    = KeyUsageProperty {digitalSignature = Prelude.pure newValue, ..}
+instance Property "EncipherOnly" KeyUsageProperty where
+  type PropertyType "EncipherOnly" KeyUsageProperty = Value Prelude.Bool
+  set newValue KeyUsageProperty {..}
+    = KeyUsageProperty {encipherOnly = Prelude.pure newValue, ..}
+instance Property "KeyAgreement" KeyUsageProperty where
+  type PropertyType "KeyAgreement" KeyUsageProperty = Value Prelude.Bool
+  set newValue KeyUsageProperty {..}
+    = KeyUsageProperty {keyAgreement = Prelude.pure newValue, ..}
+instance Property "KeyCertSign" KeyUsageProperty where
+  type PropertyType "KeyCertSign" KeyUsageProperty = Value Prelude.Bool
+  set newValue KeyUsageProperty {..}
+    = KeyUsageProperty {keyCertSign = Prelude.pure newValue, ..}
+instance Property "KeyEncipherment" KeyUsageProperty where
+  type PropertyType "KeyEncipherment" KeyUsageProperty = Value Prelude.Bool
+  set newValue KeyUsageProperty {..}
+    = KeyUsageProperty {keyEncipherment = Prelude.pure newValue, ..}
+instance Property "NonRepudiation" KeyUsageProperty where
+  type PropertyType "NonRepudiation" KeyUsageProperty = Value Prelude.Bool
+  set newValue KeyUsageProperty {..}
+    = KeyUsageProperty {nonRepudiation = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ACMPCA/CertificateAuthority/KeyUsageProperty.hs-boot b/gen/Stratosphere/ACMPCA/CertificateAuthority/KeyUsageProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ACMPCA/CertificateAuthority/KeyUsageProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ACMPCA.CertificateAuthority.KeyUsageProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data KeyUsageProperty :: Prelude.Type
+instance ToResourceProperties KeyUsageProperty
+instance Prelude.Eq KeyUsageProperty
+instance Prelude.Show KeyUsageProperty
+instance JSON.ToJSON KeyUsageProperty
diff --git a/gen/Stratosphere/ACMPCA/CertificateAuthority/OcspConfigurationProperty.hs b/gen/Stratosphere/ACMPCA/CertificateAuthority/OcspConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ACMPCA/CertificateAuthority/OcspConfigurationProperty.hs
@@ -0,0 +1,49 @@
+module Stratosphere.ACMPCA.CertificateAuthority.OcspConfigurationProperty (
+        OcspConfigurationProperty(..), mkOcspConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data OcspConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-ocspconfiguration.html>
+    OcspConfigurationProperty {haddock_workaround_ :: (),
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-ocspconfiguration.html#cfn-acmpca-certificateauthority-ocspconfiguration-enabled>
+                               enabled :: (Value Prelude.Bool),
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-ocspconfiguration.html#cfn-acmpca-certificateauthority-ocspconfiguration-ocspcustomcname>
+                               ocspCustomCname :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkOcspConfigurationProperty ::
+  Value Prelude.Bool -> OcspConfigurationProperty
+mkOcspConfigurationProperty enabled
+  = OcspConfigurationProperty
+      {haddock_workaround_ = (), enabled = enabled,
+       ocspCustomCname = Prelude.Nothing}
+instance ToResourceProperties OcspConfigurationProperty where
+  toResourceProperties OcspConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ACMPCA::CertificateAuthority.OcspConfiguration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Enabled" JSON..= enabled]
+                           (Prelude.catMaybes
+                              [(JSON..=) "OcspCustomCname" Prelude.<$> ocspCustomCname]))}
+instance JSON.ToJSON OcspConfigurationProperty where
+  toJSON OcspConfigurationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Enabled" JSON..= enabled]
+              (Prelude.catMaybes
+                 [(JSON..=) "OcspCustomCname" Prelude.<$> ocspCustomCname])))
+instance Property "Enabled" OcspConfigurationProperty where
+  type PropertyType "Enabled" OcspConfigurationProperty = Value Prelude.Bool
+  set newValue OcspConfigurationProperty {..}
+    = OcspConfigurationProperty {enabled = newValue, ..}
+instance Property "OcspCustomCname" OcspConfigurationProperty where
+  type PropertyType "OcspCustomCname" OcspConfigurationProperty = Value Prelude.Text
+  set newValue OcspConfigurationProperty {..}
+    = OcspConfigurationProperty
+        {ocspCustomCname = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ACMPCA/CertificateAuthority/OcspConfigurationProperty.hs-boot b/gen/Stratosphere/ACMPCA/CertificateAuthority/OcspConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ACMPCA/CertificateAuthority/OcspConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ACMPCA.CertificateAuthority.OcspConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data OcspConfigurationProperty :: Prelude.Type
+instance ToResourceProperties OcspConfigurationProperty
+instance Prelude.Eq OcspConfigurationProperty
+instance Prelude.Show OcspConfigurationProperty
+instance JSON.ToJSON OcspConfigurationProperty
diff --git a/gen/Stratosphere/ACMPCA/CertificateAuthority/OtherNameProperty.hs b/gen/Stratosphere/ACMPCA/CertificateAuthority/OtherNameProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ACMPCA/CertificateAuthority/OtherNameProperty.hs
@@ -0,0 +1,38 @@
+module Stratosphere.ACMPCA.CertificateAuthority.OtherNameProperty (
+        OtherNameProperty(..), mkOtherNameProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data OtherNameProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-othername.html>
+    OtherNameProperty {haddock_workaround_ :: (),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-othername.html#cfn-acmpca-certificateauthority-othername-typeid>
+                       typeId :: (Value Prelude.Text),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-othername.html#cfn-acmpca-certificateauthority-othername-value>
+                       value :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkOtherNameProperty ::
+  Value Prelude.Text -> Value Prelude.Text -> OtherNameProperty
+mkOtherNameProperty typeId value
+  = OtherNameProperty
+      {haddock_workaround_ = (), typeId = typeId, value = value}
+instance ToResourceProperties OtherNameProperty where
+  toResourceProperties OtherNameProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ACMPCA::CertificateAuthority.OtherName",
+         supportsTags = Prelude.False,
+         properties = ["TypeId" JSON..= typeId, "Value" JSON..= value]}
+instance JSON.ToJSON OtherNameProperty where
+  toJSON OtherNameProperty {..}
+    = JSON.object ["TypeId" JSON..= typeId, "Value" JSON..= value]
+instance Property "TypeId" OtherNameProperty where
+  type PropertyType "TypeId" OtherNameProperty = Value Prelude.Text
+  set newValue OtherNameProperty {..}
+    = OtherNameProperty {typeId = newValue, ..}
+instance Property "Value" OtherNameProperty where
+  type PropertyType "Value" OtherNameProperty = Value Prelude.Text
+  set newValue OtherNameProperty {..}
+    = OtherNameProperty {value = newValue, ..}
diff --git a/gen/Stratosphere/ACMPCA/CertificateAuthority/OtherNameProperty.hs-boot b/gen/Stratosphere/ACMPCA/CertificateAuthority/OtherNameProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ACMPCA/CertificateAuthority/OtherNameProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ACMPCA.CertificateAuthority.OtherNameProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data OtherNameProperty :: Prelude.Type
+instance ToResourceProperties OtherNameProperty
+instance Prelude.Eq OtherNameProperty
+instance Prelude.Show OtherNameProperty
+instance JSON.ToJSON OtherNameProperty
diff --git a/gen/Stratosphere/ACMPCA/CertificateAuthority/RevocationConfigurationProperty.hs b/gen/Stratosphere/ACMPCA/CertificateAuthority/RevocationConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ACMPCA/CertificateAuthority/RevocationConfigurationProperty.hs
@@ -0,0 +1,50 @@
+module Stratosphere.ACMPCA.CertificateAuthority.RevocationConfigurationProperty (
+        module Exports, RevocationConfigurationProperty(..),
+        mkRevocationConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ACMPCA.CertificateAuthority.CrlConfigurationProperty as Exports
+import {-# SOURCE #-} Stratosphere.ACMPCA.CertificateAuthority.OcspConfigurationProperty as Exports
+import Stratosphere.ResourceProperties
+data RevocationConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-revocationconfiguration.html>
+    RevocationConfigurationProperty {haddock_workaround_ :: (),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-revocationconfiguration.html#cfn-acmpca-certificateauthority-revocationconfiguration-crlconfiguration>
+                                     crlConfiguration :: (Prelude.Maybe CrlConfigurationProperty),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-revocationconfiguration.html#cfn-acmpca-certificateauthority-revocationconfiguration-ocspconfiguration>
+                                     ocspConfiguration :: (Prelude.Maybe OcspConfigurationProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkRevocationConfigurationProperty ::
+  RevocationConfigurationProperty
+mkRevocationConfigurationProperty
+  = RevocationConfigurationProperty
+      {haddock_workaround_ = (), crlConfiguration = Prelude.Nothing,
+       ocspConfiguration = Prelude.Nothing}
+instance ToResourceProperties RevocationConfigurationProperty where
+  toResourceProperties RevocationConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ACMPCA::CertificateAuthority.RevocationConfiguration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "CrlConfiguration" Prelude.<$> crlConfiguration,
+                            (JSON..=) "OcspConfiguration" Prelude.<$> ocspConfiguration])}
+instance JSON.ToJSON RevocationConfigurationProperty where
+  toJSON RevocationConfigurationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "CrlConfiguration" Prelude.<$> crlConfiguration,
+               (JSON..=) "OcspConfiguration" Prelude.<$> ocspConfiguration]))
+instance Property "CrlConfiguration" RevocationConfigurationProperty where
+  type PropertyType "CrlConfiguration" RevocationConfigurationProperty = CrlConfigurationProperty
+  set newValue RevocationConfigurationProperty {..}
+    = RevocationConfigurationProperty
+        {crlConfiguration = Prelude.pure newValue, ..}
+instance Property "OcspConfiguration" RevocationConfigurationProperty where
+  type PropertyType "OcspConfiguration" RevocationConfigurationProperty = OcspConfigurationProperty
+  set newValue RevocationConfigurationProperty {..}
+    = RevocationConfigurationProperty
+        {ocspConfiguration = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ACMPCA/CertificateAuthority/RevocationConfigurationProperty.hs-boot b/gen/Stratosphere/ACMPCA/CertificateAuthority/RevocationConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ACMPCA/CertificateAuthority/RevocationConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ACMPCA.CertificateAuthority.RevocationConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data RevocationConfigurationProperty :: Prelude.Type
+instance ToResourceProperties RevocationConfigurationProperty
+instance Prelude.Eq RevocationConfigurationProperty
+instance Prelude.Show RevocationConfigurationProperty
+instance JSON.ToJSON RevocationConfigurationProperty
diff --git a/gen/Stratosphere/ACMPCA/CertificateAuthority/SubjectProperty.hs b/gen/Stratosphere/ACMPCA/CertificateAuthority/SubjectProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ACMPCA/CertificateAuthority/SubjectProperty.hs
@@ -0,0 +1,160 @@
+module Stratosphere.ACMPCA.CertificateAuthority.SubjectProperty (
+        module Exports, SubjectProperty(..), mkSubjectProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ACMPCA.CertificateAuthority.CustomAttributeProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data SubjectProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-subject.html>
+    SubjectProperty {haddock_workaround_ :: (),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-subject.html#cfn-acmpca-certificateauthority-subject-commonname>
+                     commonName :: (Prelude.Maybe (Value Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-subject.html#cfn-acmpca-certificateauthority-subject-country>
+                     country :: (Prelude.Maybe (Value Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-subject.html#cfn-acmpca-certificateauthority-subject-customattributes>
+                     customAttributes :: (Prelude.Maybe [CustomAttributeProperty]),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-subject.html#cfn-acmpca-certificateauthority-subject-distinguishednamequalifier>
+                     distinguishedNameQualifier :: (Prelude.Maybe (Value Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-subject.html#cfn-acmpca-certificateauthority-subject-generationqualifier>
+                     generationQualifier :: (Prelude.Maybe (Value Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-subject.html#cfn-acmpca-certificateauthority-subject-givenname>
+                     givenName :: (Prelude.Maybe (Value Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-subject.html#cfn-acmpca-certificateauthority-subject-initials>
+                     initials :: (Prelude.Maybe (Value Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-subject.html#cfn-acmpca-certificateauthority-subject-locality>
+                     locality :: (Prelude.Maybe (Value Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-subject.html#cfn-acmpca-certificateauthority-subject-organization>
+                     organization :: (Prelude.Maybe (Value Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-subject.html#cfn-acmpca-certificateauthority-subject-organizationalunit>
+                     organizationalUnit :: (Prelude.Maybe (Value Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-subject.html#cfn-acmpca-certificateauthority-subject-pseudonym>
+                     pseudonym :: (Prelude.Maybe (Value Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-subject.html#cfn-acmpca-certificateauthority-subject-serialnumber>
+                     serialNumber :: (Prelude.Maybe (Value Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-subject.html#cfn-acmpca-certificateauthority-subject-state>
+                     state :: (Prelude.Maybe (Value Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-subject.html#cfn-acmpca-certificateauthority-subject-surname>
+                     surname :: (Prelude.Maybe (Value Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-subject.html#cfn-acmpca-certificateauthority-subject-title>
+                     title :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSubjectProperty :: SubjectProperty
+mkSubjectProperty
+  = SubjectProperty
+      {haddock_workaround_ = (), commonName = Prelude.Nothing,
+       country = Prelude.Nothing, customAttributes = Prelude.Nothing,
+       distinguishedNameQualifier = Prelude.Nothing,
+       generationQualifier = Prelude.Nothing, givenName = Prelude.Nothing,
+       initials = Prelude.Nothing, locality = Prelude.Nothing,
+       organization = Prelude.Nothing,
+       organizationalUnit = Prelude.Nothing, pseudonym = Prelude.Nothing,
+       serialNumber = Prelude.Nothing, state = Prelude.Nothing,
+       surname = Prelude.Nothing, title = Prelude.Nothing}
+instance ToResourceProperties SubjectProperty where
+  toResourceProperties SubjectProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ACMPCA::CertificateAuthority.Subject",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "CommonName" Prelude.<$> commonName,
+                            (JSON..=) "Country" Prelude.<$> country,
+                            (JSON..=) "CustomAttributes" Prelude.<$> customAttributes,
+                            (JSON..=) "DistinguishedNameQualifier"
+                              Prelude.<$> distinguishedNameQualifier,
+                            (JSON..=) "GenerationQualifier" Prelude.<$> generationQualifier,
+                            (JSON..=) "GivenName" Prelude.<$> givenName,
+                            (JSON..=) "Initials" Prelude.<$> initials,
+                            (JSON..=) "Locality" Prelude.<$> locality,
+                            (JSON..=) "Organization" Prelude.<$> organization,
+                            (JSON..=) "OrganizationalUnit" Prelude.<$> organizationalUnit,
+                            (JSON..=) "Pseudonym" Prelude.<$> pseudonym,
+                            (JSON..=) "SerialNumber" Prelude.<$> serialNumber,
+                            (JSON..=) "State" Prelude.<$> state,
+                            (JSON..=) "Surname" Prelude.<$> surname,
+                            (JSON..=) "Title" Prelude.<$> title])}
+instance JSON.ToJSON SubjectProperty where
+  toJSON SubjectProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "CommonName" Prelude.<$> commonName,
+               (JSON..=) "Country" Prelude.<$> country,
+               (JSON..=) "CustomAttributes" Prelude.<$> customAttributes,
+               (JSON..=) "DistinguishedNameQualifier"
+                 Prelude.<$> distinguishedNameQualifier,
+               (JSON..=) "GenerationQualifier" Prelude.<$> generationQualifier,
+               (JSON..=) "GivenName" Prelude.<$> givenName,
+               (JSON..=) "Initials" Prelude.<$> initials,
+               (JSON..=) "Locality" Prelude.<$> locality,
+               (JSON..=) "Organization" Prelude.<$> organization,
+               (JSON..=) "OrganizationalUnit" Prelude.<$> organizationalUnit,
+               (JSON..=) "Pseudonym" Prelude.<$> pseudonym,
+               (JSON..=) "SerialNumber" Prelude.<$> serialNumber,
+               (JSON..=) "State" Prelude.<$> state,
+               (JSON..=) "Surname" Prelude.<$> surname,
+               (JSON..=) "Title" Prelude.<$> title]))
+instance Property "CommonName" SubjectProperty where
+  type PropertyType "CommonName" SubjectProperty = Value Prelude.Text
+  set newValue SubjectProperty {..}
+    = SubjectProperty {commonName = Prelude.pure newValue, ..}
+instance Property "Country" SubjectProperty where
+  type PropertyType "Country" SubjectProperty = Value Prelude.Text
+  set newValue SubjectProperty {..}
+    = SubjectProperty {country = Prelude.pure newValue, ..}
+instance Property "CustomAttributes" SubjectProperty where
+  type PropertyType "CustomAttributes" SubjectProperty = [CustomAttributeProperty]
+  set newValue SubjectProperty {..}
+    = SubjectProperty {customAttributes = Prelude.pure newValue, ..}
+instance Property "DistinguishedNameQualifier" SubjectProperty where
+  type PropertyType "DistinguishedNameQualifier" SubjectProperty = Value Prelude.Text
+  set newValue SubjectProperty {..}
+    = SubjectProperty
+        {distinguishedNameQualifier = Prelude.pure newValue, ..}
+instance Property "GenerationQualifier" SubjectProperty where
+  type PropertyType "GenerationQualifier" SubjectProperty = Value Prelude.Text
+  set newValue SubjectProperty {..}
+    = SubjectProperty {generationQualifier = Prelude.pure newValue, ..}
+instance Property "GivenName" SubjectProperty where
+  type PropertyType "GivenName" SubjectProperty = Value Prelude.Text
+  set newValue SubjectProperty {..}
+    = SubjectProperty {givenName = Prelude.pure newValue, ..}
+instance Property "Initials" SubjectProperty where
+  type PropertyType "Initials" SubjectProperty = Value Prelude.Text
+  set newValue SubjectProperty {..}
+    = SubjectProperty {initials = Prelude.pure newValue, ..}
+instance Property "Locality" SubjectProperty where
+  type PropertyType "Locality" SubjectProperty = Value Prelude.Text
+  set newValue SubjectProperty {..}
+    = SubjectProperty {locality = Prelude.pure newValue, ..}
+instance Property "Organization" SubjectProperty where
+  type PropertyType "Organization" SubjectProperty = Value Prelude.Text
+  set newValue SubjectProperty {..}
+    = SubjectProperty {organization = Prelude.pure newValue, ..}
+instance Property "OrganizationalUnit" SubjectProperty where
+  type PropertyType "OrganizationalUnit" SubjectProperty = Value Prelude.Text
+  set newValue SubjectProperty {..}
+    = SubjectProperty {organizationalUnit = Prelude.pure newValue, ..}
+instance Property "Pseudonym" SubjectProperty where
+  type PropertyType "Pseudonym" SubjectProperty = Value Prelude.Text
+  set newValue SubjectProperty {..}
+    = SubjectProperty {pseudonym = Prelude.pure newValue, ..}
+instance Property "SerialNumber" SubjectProperty where
+  type PropertyType "SerialNumber" SubjectProperty = Value Prelude.Text
+  set newValue SubjectProperty {..}
+    = SubjectProperty {serialNumber = Prelude.pure newValue, ..}
+instance Property "State" SubjectProperty where
+  type PropertyType "State" SubjectProperty = Value Prelude.Text
+  set newValue SubjectProperty {..}
+    = SubjectProperty {state = Prelude.pure newValue, ..}
+instance Property "Surname" SubjectProperty where
+  type PropertyType "Surname" SubjectProperty = Value Prelude.Text
+  set newValue SubjectProperty {..}
+    = SubjectProperty {surname = Prelude.pure newValue, ..}
+instance Property "Title" SubjectProperty where
+  type PropertyType "Title" SubjectProperty = Value Prelude.Text
+  set newValue SubjectProperty {..}
+    = SubjectProperty {title = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ACMPCA/CertificateAuthority/SubjectProperty.hs-boot b/gen/Stratosphere/ACMPCA/CertificateAuthority/SubjectProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ACMPCA/CertificateAuthority/SubjectProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ACMPCA.CertificateAuthority.SubjectProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data SubjectProperty :: Prelude.Type
+instance ToResourceProperties SubjectProperty
+instance Prelude.Eq SubjectProperty
+instance Prelude.Show SubjectProperty
+instance JSON.ToJSON SubjectProperty
diff --git a/gen/Stratosphere/ACMPCA/CertificateAuthorityActivation.hs b/gen/Stratosphere/ACMPCA/CertificateAuthorityActivation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ACMPCA/CertificateAuthorityActivation.hs
@@ -0,0 +1,72 @@
+module Stratosphere.ACMPCA.CertificateAuthorityActivation (
+        CertificateAuthorityActivation(..),
+        mkCertificateAuthorityActivation
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CertificateAuthorityActivation
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-acmpca-certificateauthorityactivation.html>
+    CertificateAuthorityActivation {haddock_workaround_ :: (),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-acmpca-certificateauthorityactivation.html#cfn-acmpca-certificateauthorityactivation-certificate>
+                                    certificate :: (Value Prelude.Text),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-acmpca-certificateauthorityactivation.html#cfn-acmpca-certificateauthorityactivation-certificateauthorityarn>
+                                    certificateAuthorityArn :: (Value Prelude.Text),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-acmpca-certificateauthorityactivation.html#cfn-acmpca-certificateauthorityactivation-certificatechain>
+                                    certificateChain :: (Prelude.Maybe (Value Prelude.Text)),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-acmpca-certificateauthorityactivation.html#cfn-acmpca-certificateauthorityactivation-status>
+                                    status :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCertificateAuthorityActivation ::
+  Value Prelude.Text
+  -> Value Prelude.Text -> CertificateAuthorityActivation
+mkCertificateAuthorityActivation
+  certificate
+  certificateAuthorityArn
+  = CertificateAuthorityActivation
+      {haddock_workaround_ = (), certificate = certificate,
+       certificateAuthorityArn = certificateAuthorityArn,
+       certificateChain = Prelude.Nothing, status = Prelude.Nothing}
+instance ToResourceProperties CertificateAuthorityActivation where
+  toResourceProperties CertificateAuthorityActivation {..}
+    = ResourceProperties
+        {awsType = "AWS::ACMPCA::CertificateAuthorityActivation",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Certificate" JSON..= certificate,
+                            "CertificateAuthorityArn" JSON..= certificateAuthorityArn]
+                           (Prelude.catMaybes
+                              [(JSON..=) "CertificateChain" Prelude.<$> certificateChain,
+                               (JSON..=) "Status" Prelude.<$> status]))}
+instance JSON.ToJSON CertificateAuthorityActivation where
+  toJSON CertificateAuthorityActivation {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Certificate" JSON..= certificate,
+               "CertificateAuthorityArn" JSON..= certificateAuthorityArn]
+              (Prelude.catMaybes
+                 [(JSON..=) "CertificateChain" Prelude.<$> certificateChain,
+                  (JSON..=) "Status" Prelude.<$> status])))
+instance Property "Certificate" CertificateAuthorityActivation where
+  type PropertyType "Certificate" CertificateAuthorityActivation = Value Prelude.Text
+  set newValue CertificateAuthorityActivation {..}
+    = CertificateAuthorityActivation {certificate = newValue, ..}
+instance Property "CertificateAuthorityArn" CertificateAuthorityActivation where
+  type PropertyType "CertificateAuthorityArn" CertificateAuthorityActivation = Value Prelude.Text
+  set newValue CertificateAuthorityActivation {..}
+    = CertificateAuthorityActivation
+        {certificateAuthorityArn = newValue, ..}
+instance Property "CertificateChain" CertificateAuthorityActivation where
+  type PropertyType "CertificateChain" CertificateAuthorityActivation = Value Prelude.Text
+  set newValue CertificateAuthorityActivation {..}
+    = CertificateAuthorityActivation
+        {certificateChain = Prelude.pure newValue, ..}
+instance Property "Status" CertificateAuthorityActivation where
+  type PropertyType "Status" CertificateAuthorityActivation = Value Prelude.Text
+  set newValue CertificateAuthorityActivation {..}
+    = CertificateAuthorityActivation
+        {status = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ACMPCA/Permission.hs b/gen/Stratosphere/ACMPCA/Permission.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ACMPCA/Permission.hs
@@ -0,0 +1,64 @@
+module Stratosphere.ACMPCA.Permission (
+        Permission(..), mkPermission
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data Permission
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-acmpca-permission.html>
+    Permission {haddock_workaround_ :: (),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-acmpca-permission.html#cfn-acmpca-permission-actions>
+                actions :: (ValueList Prelude.Text),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-acmpca-permission.html#cfn-acmpca-permission-certificateauthorityarn>
+                certificateAuthorityArn :: (Value Prelude.Text),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-acmpca-permission.html#cfn-acmpca-permission-principal>
+                principal :: (Value Prelude.Text),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-acmpca-permission.html#cfn-acmpca-permission-sourceaccount>
+                sourceAccount :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkPermission ::
+  ValueList Prelude.Text
+  -> Value Prelude.Text -> Value Prelude.Text -> Permission
+mkPermission actions certificateAuthorityArn principal
+  = Permission
+      {haddock_workaround_ = (), actions = actions,
+       certificateAuthorityArn = certificateAuthorityArn,
+       principal = principal, sourceAccount = Prelude.Nothing}
+instance ToResourceProperties Permission where
+  toResourceProperties Permission {..}
+    = ResourceProperties
+        {awsType = "AWS::ACMPCA::Permission", supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Actions" JSON..= actions,
+                            "CertificateAuthorityArn" JSON..= certificateAuthorityArn,
+                            "Principal" JSON..= principal]
+                           (Prelude.catMaybes
+                              [(JSON..=) "SourceAccount" Prelude.<$> sourceAccount]))}
+instance JSON.ToJSON Permission where
+  toJSON Permission {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Actions" JSON..= actions,
+               "CertificateAuthorityArn" JSON..= certificateAuthorityArn,
+               "Principal" JSON..= principal]
+              (Prelude.catMaybes
+                 [(JSON..=) "SourceAccount" Prelude.<$> sourceAccount])))
+instance Property "Actions" Permission where
+  type PropertyType "Actions" Permission = ValueList Prelude.Text
+  set newValue Permission {..} = Permission {actions = newValue, ..}
+instance Property "CertificateAuthorityArn" Permission where
+  type PropertyType "CertificateAuthorityArn" Permission = Value Prelude.Text
+  set newValue Permission {..}
+    = Permission {certificateAuthorityArn = newValue, ..}
+instance Property "Principal" Permission where
+  type PropertyType "Principal" Permission = Value Prelude.Text
+  set newValue Permission {..}
+    = Permission {principal = newValue, ..}
+instance Property "SourceAccount" Permission where
+  type PropertyType "SourceAccount" Permission = Value Prelude.Text
+  set newValue Permission {..}
+    = Permission {sourceAccount = Prelude.pure newValue, ..}
diff --git a/stratosphere-acmpca.cabal b/stratosphere-acmpca.cabal
new file mode 100644
--- /dev/null
+++ b/stratosphere-acmpca.cabal
@@ -0,0 +1,103 @@
+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-acmpca
+version:        1.0.0
+synopsis:       Stratosphere integration for AWS ACMPCA.
+description:    Integration into stratosphere to generate resources and properties for AWS ACMPCA
+category:       AWS, Cloud, ACMPCA
+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.ACMPCA.Certificate
+      Stratosphere.ACMPCA.Certificate.ApiPassthroughProperty
+      Stratosphere.ACMPCA.Certificate.CustomAttributeProperty
+      Stratosphere.ACMPCA.Certificate.CustomExtensionProperty
+      Stratosphere.ACMPCA.Certificate.EdiPartyNameProperty
+      Stratosphere.ACMPCA.Certificate.ExtendedKeyUsageProperty
+      Stratosphere.ACMPCA.Certificate.ExtensionsProperty
+      Stratosphere.ACMPCA.Certificate.GeneralNameProperty
+      Stratosphere.ACMPCA.Certificate.KeyUsageProperty
+      Stratosphere.ACMPCA.Certificate.OtherNameProperty
+      Stratosphere.ACMPCA.Certificate.PolicyInformationProperty
+      Stratosphere.ACMPCA.Certificate.PolicyQualifierInfoProperty
+      Stratosphere.ACMPCA.Certificate.QualifierProperty
+      Stratosphere.ACMPCA.Certificate.SubjectProperty
+      Stratosphere.ACMPCA.Certificate.ValidityProperty
+      Stratosphere.ACMPCA.CertificateAuthority
+      Stratosphere.ACMPCA.CertificateAuthority.AccessDescriptionProperty
+      Stratosphere.ACMPCA.CertificateAuthority.AccessMethodProperty
+      Stratosphere.ACMPCA.CertificateAuthority.CrlConfigurationProperty
+      Stratosphere.ACMPCA.CertificateAuthority.CrlDistributionPointExtensionConfigurationProperty
+      Stratosphere.ACMPCA.CertificateAuthority.CsrExtensionsProperty
+      Stratosphere.ACMPCA.CertificateAuthority.CustomAttributeProperty
+      Stratosphere.ACMPCA.CertificateAuthority.EdiPartyNameProperty
+      Stratosphere.ACMPCA.CertificateAuthority.GeneralNameProperty
+      Stratosphere.ACMPCA.CertificateAuthority.KeyUsageProperty
+      Stratosphere.ACMPCA.CertificateAuthority.OcspConfigurationProperty
+      Stratosphere.ACMPCA.CertificateAuthority.OtherNameProperty
+      Stratosphere.ACMPCA.CertificateAuthority.RevocationConfigurationProperty
+      Stratosphere.ACMPCA.CertificateAuthority.SubjectProperty
+      Stratosphere.ACMPCA.CertificateAuthorityActivation
+      Stratosphere.ACMPCA.Permission
+  other-modules:
+      Paths_stratosphere_acmpca
+  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
