text: # -*- coding: utf-8 -*-
  
  """
  This code is auto generated from troposphere_mate.code_generator.__init__.py scripts.
  """
  
  import sys
  if sys.version_info.major >= 3 and sys.version_info.minor >= 5:  # pragma: no cover
      from typing import Union, List, Any
  
  import troposphere.elasticache
  
  from troposphere.elasticache import (
      GlobalReplicationGroupMember as _GlobalReplicationGroupMember,
      NodeGroupConfiguration as _NodeGroupConfiguration,
      RegionalConfiguration as _RegionalConfiguration,
      ReshardingConfiguration as _ReshardingConfiguration,
      Tags as _Tags,
  )
  
  
  from troposphere import Template, AWSHelperFn
  from troposphere_mate.core.mate import preprocess_init_kwargs, Mixin
  from troposphere_mate.core.sentiel import REQUIRED, NOTHING
  
  
  
  class CacheCluster(troposphere.elasticache.CacheCluster, Mixin):
      def __init__(self,
                   title, # type: str
                   template=None, # type: Template
                   validation=True, # type: bool
                   CacheNodeType=REQUIRED, # type: Union[str, AWSHelperFn]
                   Engine=REQUIRED, # type: Union[str, AWSHelperFn]
                   NumCacheNodes=REQUIRED, # type: int
                   AutoMinorVersionUpgrade=NOTHING, # type: bool
                   AZMode=NOTHING, # type: Union[str, AWSHelperFn]
                   CacheParameterGroupName=NOTHING, # type: Union[str, AWSHelperFn]
                   CacheSecurityGroupNames=NOTHING, # type: List[Union[str, AWSHelperFn]]
                   CacheSubnetGroupName=NOTHING, # type: Union[str, AWSHelperFn]
                   ClusterName=NOTHING, # type: Union[str, AWSHelperFn]
                   EngineVersion=NOTHING, # type: Union[str, AWSHelperFn]
                   NotificationTopicArn=NOTHING, # type: Union[str, AWSHelperFn]
                   Port=NOTHING, # type: int
                   PreferredAvailabilityZone=NOTHING, # type: Union[str, AWSHelperFn]
                   PreferredAvailabilityZones=NOTHING, # type: List[Union[str, AWSHelperFn]]
                   PreferredMaintenanceWindow=NOTHING, # type: Union[str, AWSHelperFn]
                   SnapshotArns=NOTHING, # type: List[Union[str, AWSHelperFn]]
                   SnapshotName=NOTHING, # type: Union[str, AWSHelperFn]
                   SnapshotRetentionLimit=NOTHING, # type: int
                   SnapshotWindow=NOTHING, # type: Union[str, AWSHelperFn]
                   Tags=NOTHING, # type: _Tags
                   VpcSecurityGroupIds=NOTHING, # type: List[Union[str, AWSHelperFn]]
                   **kwargs):
          processed_kwargs = preprocess_init_kwargs(
              title=title,
              template=template,
              validation=validation,
              CacheNodeType=CacheNodeType,
              Engine=Engine,
              NumCacheNodes=NumCacheNodes,
              AutoMinorVersionUpgrade=AutoMinorVersionUpgrade,
              AZMode=AZMode,
              CacheParameterGroupName=CacheParameterGroupName,
              CacheSecurityGroupNames=CacheSecurityGroupNames,
              CacheSubnetGroupName=CacheSubnetGroupName,
              ClusterName=ClusterName,
              EngineVersion=EngineVersion,
              NotificationTopicArn=NotificationTopicArn,
              Port=Port,
              PreferredAvailabilityZone=PreferredAvailabilityZone,
              PreferredAvailabilityZones=PreferredAvailabilityZones,
              PreferredMaintenanceWindow=PreferredMaintenanceWindow,
              SnapshotArns=SnapshotArns,
              SnapshotName=SnapshotName,
              SnapshotRetentionLimit=SnapshotRetentionLimit,
              SnapshotWindow=SnapshotWindow,
              Tags=Tags,
              VpcSecurityGroupIds=VpcSecurityGroupIds,
              **kwargs
          )
          super(CacheCluster, self).__init__(**processed_kwargs)
  
  
  class GlobalReplicationGroupMember(troposphere.elasticache.GlobalReplicationGroupMember, Mixin):
      def __init__(self,
                   title=None,
                   ReplicationGroupId=NOTHING, # type: Union[str, AWSHelperFn]
                   ReplicationGroupRegion=NOTHING, # type: Union[str, AWSHelperFn]
                   Role=NOTHING, # type: Union[str, AWSHelperFn]
                   **kwargs):
          processed_kwargs = preprocess_init_kwargs(
              title=title,
              ReplicationGroupId=ReplicationGroupId,
              ReplicationGroupRegion=ReplicationGroupRegion,
              Role=Role,
              **kwargs
          )
          super(GlobalReplicationGroupMember, self).__init__(**processed_kwargs)
  
  
  class ReshardingConfiguration(troposphere.elasticache.ReshardingConfiguration, Mixin):
      def __init__(self,
                   title=None,
                   NodeGroupId=NOTHING, # type: Union[str, AWSHelperFn]
                   PreferredAvailabilityZones=NOTHING, # type: List[Union[str, AWSHelperFn]]
                   **kwargs):
          processed_kwargs = preprocess_init_kwargs(
              title=title,
              NodeGroupId=NodeGroupId,
              PreferredAvailabilityZones=PreferredAvailabilityZones,
              **kwargs
          )
          super(ReshardingConfiguration, self).__init__(**processed_kwargs)
  
  
  class RegionalConfiguration(troposphere.elasticache.RegionalConfiguration, Mixin):
      def __init__(self,
                   title=None,
                   ReplicationGroupId=NOTHING, # type: Union[str, AWSHelperFn]
                   ReplicationGroupRegion=NOTHING, # type: Union[str, AWSHelperFn]
                   ReshardingConfigurations=NOTHING, # type: List[_ReshardingConfiguration]
                   **kwargs):
          processed_kwargs = preprocess_init_kwargs(
              title=title,
              ReplicationGroupId=ReplicationGroupId,
              ReplicationGroupRegion=ReplicationGroupRegion,
              ReshardingConfigurations=ReshardingConfigurations,
              **kwargs
          )
          super(RegionalConfiguration, self).__init__(**processed_kwargs)
  
  
  class GlobalReplicationGroup(troposphere.elasticache.GlobalReplicationGroup, Mixin):
      def __init__(self,
                   title, # type: str
                   template=None, # type: Template
                   validation=True, # type: bool
                   Members=REQUIRED, # type: List[_GlobalReplicationGroupMember]
                   AutomaticFailoverEnabled=NOTHING, # type: bool
                   CacheNodeType=NOTHING, # type: Union[str, AWSHelperFn]
                   CacheParameterGroupName=NOTHING, # type: Union[str, AWSHelperFn]
                   EngineVersion=NOTHING, # type: Union[str, AWSHelperFn]
                   GlobalNodeGroupCount=NOTHING, # type: int
                   GlobalReplicationGroupDescription=NOTHING, # type: Union[str, AWSHelperFn]
                   GlobalReplicationGroupIdSuffix=NOTHING, # type: Union[str, AWSHelperFn]
                   RegionalConfigurations=NOTHING, # type: List[_RegionalConfiguration]
                   **kwargs):
          processed_kwargs = preprocess_init_kwargs(
              title=title,
              template=template,
              validation=validation,
              Members=Members,
              AutomaticFailoverEnabled=AutomaticFailoverEnabled,
              CacheNodeType=CacheNodeType,
              CacheParameterGroupName=CacheParameterGroupName,
              EngineVersion=EngineVersion,
              GlobalNodeGroupCount=GlobalNodeGroupCount,
              GlobalReplicationGroupDescription=GlobalReplicationGroupDescription,
              GlobalReplicationGroupIdSuffix=GlobalReplicationGroupIdSuffix,
              RegionalConfigurations=RegionalConfigurations,
              **kwargs
          )
          super(GlobalReplicationGroup, self).__init__(**processed_kwargs)
  
  
  class ParameterGroup(troposphere.elasticache.ParameterGroup, Mixin):
      def __init__(self,
                   title, # type: str
                   template=None, # type: Template
                   validation=True, # type: bool
                   CacheParameterGroupFamily=REQUIRED, # type: Union[str, AWSHelperFn]
                   Description=REQUIRED, # type: Union[str, AWSHelperFn]
                   Properties=REQUIRED, # type: dict
                   **kwargs):
          processed_kwargs = preprocess_init_kwargs(
              title=title,
              template=template,
              validation=validation,
              CacheParameterGroupFamily=CacheParameterGroupFamily,
              Description=Description,
              Properties=Properties,
              **kwargs
          )
          super(ParameterGroup, self).__init__(**processed_kwargs)
  
  
  class SecurityGroup(troposphere.elasticache.SecurityGroup, Mixin):
      def __init__(self,
                   title, # type: str
                   template=None, # type: Template
                   validation=True, # type: bool
                   Description=NOTHING, # type: Union[str, AWSHelperFn]
                   **kwargs):
          processed_kwargs = preprocess_init_kwargs(
              title=title,
              template=template,
              validation=validation,
              Description=Description,
              **kwargs
          )
          super(SecurityGroup, self).__init__(**processed_kwargs)
  
  
  class SecurityGroupIngress(troposphere.elasticache.SecurityGroupIngress, Mixin):
      def __init__(self,
                   title, # type: str
                   template=None, # type: Template
                   validation=True, # type: bool
                   CacheSecurityGroupName=REQUIRED, # type: Union[str, AWSHelperFn]
                   EC2SecurityGroupName=REQUIRED, # type: Union[str, AWSHelperFn]
                   EC2SecurityGroupOwnerId=NOTHING, # type: Union[str, AWSHelperFn]
                   **kwargs):
          processed_kwargs = preprocess_init_kwargs(
              title=title,
              template=template,
              validation=validation,
              CacheSecurityGroupName=CacheSecurityGroupName,
              EC2SecurityGroupName=EC2SecurityGroupName,
              EC2SecurityGroupOwnerId=EC2SecurityGroupOwnerId,
              **kwargs
          )
          super(SecurityGroupIngress, self).__init__(**processed_kwargs)
  
  
  class SubnetGroup(troposphere.elasticache.SubnetGroup, Mixin):
      def __init__(self,
                   title, # type: str
                   template=None, # type: Template
                   validation=True, # type: bool
                   Description=REQUIRED, # type: Union[str, AWSHelperFn]
                   SubnetIds=REQUIRED, # type: list
                   CacheSubnetGroupName=NOTHING, # type: Union[str, AWSHelperFn]
                   **kwargs):
          processed_kwargs = preprocess_init_kwargs(
              title=title,
              template=template,
              validation=validation,
              Description=Description,
              SubnetIds=SubnetIds,
              CacheSubnetGroupName=CacheSubnetGroupName,
              **kwargs
          )
          super(SubnetGroup, self).__init__(**processed_kwargs)
  
  
  class NodeGroupConfiguration(troposphere.elasticache.NodeGroupConfiguration, Mixin):
      def __init__(self,
                   title=None,
                   NodeGroupId=NOTHING, # type: Any
                   PrimaryAvailabilityZone=NOTHING, # type: Union[str, AWSHelperFn]
                   ReplicaAvailabilityZones=NOTHING, # type: List[Union[str, AWSHelperFn]]
                   ReplicaCount=NOTHING, # type: int
                   Slots=NOTHING, # type: Union[str, AWSHelperFn]
                   **kwargs):
          processed_kwargs = preprocess_init_kwargs(
              title=title,
              NodeGroupId=NodeGroupId,
              PrimaryAvailabilityZone=PrimaryAvailabilityZone,
              ReplicaAvailabilityZones=ReplicaAvailabilityZones,
              ReplicaCount=ReplicaCount,
              Slots=Slots,
              **kwargs
          )
          super(NodeGroupConfiguration, self).__init__(**processed_kwargs)
  
  
  class ReplicationGroup(troposphere.elasticache.ReplicationGroup, Mixin):
      def __init__(self,
                   title, # type: str
                   template=None, # type: Template
                   validation=True, # type: bool
                   ReplicationGroupDescription=REQUIRED, # type: Union[str, AWSHelperFn]
                   AtRestEncryptionEnabled=NOTHING, # type: bool
                   AuthToken=NOTHING, # type: Union[str, AWSHelperFn]
                   AutoMinorVersionUpgrade=NOTHING, # type: bool
                   AutomaticFailoverEnabled=NOTHING, # type: bool
                   CacheNodeType=NOTHING, # type: Union[str, AWSHelperFn]
                   CacheParameterGroupName=NOTHING, # type: Union[str, AWSHelperFn]
                   CacheSecurityGroupNames=NOTHING, # type: List[Union[str, AWSHelperFn]]
                   CacheSubnetGroupName=NOTHING, # type: Union[str, AWSHelperFn]
                   Engine=NOTHING, # type: Union[str, AWSHelperFn]
                   EngineVersion=NOTHING, # type: Union[str, AWSHelperFn]
                   KmsKeyId=NOTHING, # type: Union[str, AWSHelperFn]
                   MultiAZEnabled=NOTHING, # type: bool
                   NodeGroupConfiguration=NOTHING, # type: List[_NodeGroupConfiguration]
                   NotificationTopicArn=NOTHING, # type: Union[str, AWSHelperFn]
                   NumCacheClusters=NOTHING, # type: int
                   NumNodeGroups=NOTHING, # type: int
                   Port=NOTHING, # type: int
                   PreferredCacheClusterAZs=NOTHING, # type: List[Union[str, AWSHelperFn]]
                   PreferredMaintenanceWindow=NOTHING, # type: Union[str, AWSHelperFn]
                   PrimaryClusterId=NOTHING, # type: Union[str, AWSHelperFn]
                   ReplicasPerNodeGroup=NOTHING, # type: int
                   ReplicationGroupId=NOTHING, # type: Union[str, AWSHelperFn]
                   SecurityGroupIds=NOTHING, # type: List[Union[str, AWSHelperFn]]
                   SnapshotArns=NOTHING, # type: List[Union[str, AWSHelperFn]]
                   SnapshotName=NOTHING, # type: Union[str, AWSHelperFn]
                   SnapshotRetentionLimit=NOTHING, # type: int
                   SnapshotWindow=NOTHING, # type: Union[str, AWSHelperFn]
                   SnapshottingClusterId=NOTHING, # type: Union[str, AWSHelperFn]
                   Tags=NOTHING, # type: _Tags
                   TransitEncryptionEnabled=NOTHING, # type: bool
                   UserGroupIds=NOTHING, # type: List[Union[str, AWSHelperFn]]
                   **kwargs):
          processed_kwargs = preprocess_init_kwargs(
              title=title,
              template=template,
              validation=validation,
              ReplicationGroupDescription=ReplicationGroupDescription,
              AtRestEncryptionEnabled=AtRestEncryptionEnabled,
              AuthToken=AuthToken,
              AutoMinorVersionUpgrade=AutoMinorVersionUpgrade,
              AutomaticFailoverEnabled=AutomaticFailoverEnabled,
              CacheNodeType=CacheNodeType,
              CacheParameterGroupName=CacheParameterGroupName,
              CacheSecurityGroupNames=CacheSecurityGroupNames,
              CacheSubnetGroupName=CacheSubnetGroupName,
              Engine=Engine,
              EngineVersion=EngineVersion,
              KmsKeyId=KmsKeyId,
              MultiAZEnabled=MultiAZEnabled,
              NodeGroupConfiguration=NodeGroupConfiguration,
              NotificationTopicArn=NotificationTopicArn,
              NumCacheClusters=NumCacheClusters,
              NumNodeGroups=NumNodeGroups,
              Port=Port,
              PreferredCacheClusterAZs=PreferredCacheClusterAZs,
              PreferredMaintenanceWindow=PreferredMaintenanceWindow,
              PrimaryClusterId=PrimaryClusterId,
              ReplicasPerNodeGroup=ReplicasPerNodeGroup,
              ReplicationGroupId=ReplicationGroupId,
              SecurityGroupIds=SecurityGroupIds,
              SnapshotArns=SnapshotArns,
              SnapshotName=SnapshotName,
              SnapshotRetentionLimit=SnapshotRetentionLimit,
              SnapshotWindow=SnapshotWindow,
              SnapshottingClusterId=SnapshottingClusterId,
              Tags=Tags,
              TransitEncryptionEnabled=TransitEncryptionEnabled,
              UserGroupIds=UserGroupIds,
              **kwargs
          )
          super(ReplicationGroup, self).__init__(**processed_kwargs)
  