stacktape 2.23.0-alpha.2 → 2.23.0-alpha.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.js.map +7 -0
- package/package.json +14 -14
- package/sdk.js.map +7 -0
package/index.js.map
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/api/npm/ts/index.ts", "../node_modules/change-case/src/index.ts", "../shared/naming/logical-names.ts", "../src/api/npm/ts/child-resources.ts", "../src/api/npm/ts/config.ts", "../src/api/npm/ts/directives.ts", "../src/api/npm/ts/global-aws-services.ts", "../src/api/npm/ts/resource-metadata.ts", "../src/api/npm/ts/resources.ts", "../src/api/npm/ts/type-properties.ts"],
|
|
4
|
+
"sourcesContent": ["// Export base classes and utilities\nexport {\n BaseResource,\n BaseTypeProperties,\n defineConfig,\n type GetConfigParams,\n ResourceParamReference,\n transformConfigWithResources,\n transformValue\n} from './config';\n\n// Export directives\nexport { $CfFormat, $CfResourceParam, $CfStackOutput, $GitInfo, $ResourceParam, $Secret } from './directives';\n\n// Export AWS service constants\nexport { AWS_SES, type GlobalAwsServiceConstant } from './global-aws-services';\n\n// Export resource metadata types\nexport { type ResourceTypeName } from './resource-metadata';\n\n// Export resource classes\nexport {\n ApplicationLoadBalancer,\n Bastion,\n BatchJob,\n Bucket,\n ContainerWorkload,\n DynamoDbTable,\n EfsFilesystem,\n EventBus,\n HostingBucket,\n HttpApiGateway,\n LambdaFunction,\n MongoDbAtlasCluster,\n NetworkLoadBalancer,\n NextjsWeb,\n OpenSearchDomain,\n PrivateService,\n RedisCluster,\n RelationalDatabase,\n SnsTopic,\n SqsQueue,\n StateMachine,\n UpstashRedis,\n UserAuthPool,\n WebAppFirewall,\n WebService,\n WorkerService\n} from './resources';\n\n// Export type/properties classes\nexport {\n AlarmIntegration,\n ApplicationLoadBalancerIntegration,\n AuroraEngineMysql,\n AuroraEnginePostgresql,\n AuroraServerlessEngineMysql,\n AuroraServerlessEnginePostgresql,\n AuroraServerlessV2EngineMysql,\n AuroraServerlessV2EnginePostgresql,\n // Scripts - Bastion Script variants\n BastionScriptWithCommand,\n BastionScriptWithCommands,\n CdnBucketRoute,\n CdnCustomDomainRoute,\n CdnHttpApiGatewayRoute,\n CdnLambdaFunctionRoute,\n // CDN Routes\n CdnLoadBalancerRoute,\n CloudwatchLogIntegration,\n // EFS Mounts\n ContainerEfsMount,\n // Container Workload Integrations\n ContainerWorkloadHttpApiIntegration,\n ContainerWorkloadInternalIntegration,\n ContainerWorkloadServiceConnectIntegration,\n CustomArtifactLambdaPackaging,\n CustomDockerfilePackaging,\n CustomRuleGroup,\n DatadogLogForwarding,\n DynamoDbIntegration,\n EventBusIntegration,\n // Bucket Lifecycle Rules\n ExpirationLifecycleRule,\n ExternalBuildpackPackaging,\n HighlightLogForwarding,\n // Lambda Function Events/Integrations\n HttpApiIntegration,\n // Log Forwarding\n HttpEndpointLogForwarding,\n KafkaTopicIntegration,\n KinesisIntegration,\n LambdaEfsMount,\n // Scripts - Local Script with Bastion Tunneling variants\n LocalScriptWithBastionTunnelingCommand,\n LocalScriptWithBastionTunnelingCommands,\n LocalScriptWithBastionTunnelingFileScript,\n LocalScriptWithBastionTunnelingFileScripts,\n // Scripts - Local Script variants\n LocalScriptWithCommand,\n LocalScriptWithCommands,\n LocalScriptWithFileScript,\n LocalScriptWithFileScripts,\n // Web App Firewall Rules\n ManagedRuleGroup,\n NixpacksPackaging,\n NonCurrentVersionExpirationLifecycleRule,\n // Container Packaging\n PrebuiltImagePackaging,\n RateBasedRule,\n RdsEngineMariadb,\n RdsEngineMysql,\n RdsEngineOracleEE,\n RdsEngineOracleSE2,\n // Database Engines\n RdsEnginePostgres,\n RdsEngineSqlServerEE,\n RdsEngineSqlServerEX,\n RdsEngineSqlServerSE,\n RdsEngineSqlServerWeb,\n S3Integration,\n ScheduleIntegration,\n SnsIntegration,\n SqsIntegration,\n // SQS Queue Integrations\n SqsQueueEventBusIntegration,\n StacktapeImageBuildpackPackaging,\n // Lambda Packaging\n StacktapeLambdaBuildpackPackaging\n} from './type-properties';\n\n// AWS service name type (for connectTo with AWS services like SES)\nexport type AwsServiceName = 'AWS_SES';\n", "// Regexps involved with splitting words in various case formats.\nconst SPLIT_LOWER_UPPER_RE = /([\\p{Ll}\\d])(\\p{Lu})/gu;\nconst SPLIT_UPPER_UPPER_RE = /(\\p{Lu})([\\p{Lu}][\\p{Ll}])/gu;\n\n// Used to iterate over the initial split result and separate numbers.\nconst SPLIT_SEPARATE_NUMBER_RE = /(\\d)\\p{Ll}|(\\p{L})\\d/u;\n\n// Regexp involved with stripping non-word characters from the result.\nconst DEFAULT_STRIP_REGEXP = /[^\\p{L}\\d]+/giu;\n\n// The replacement value for splits.\nconst SPLIT_REPLACE_VALUE = \"$1\\0$2\";\n\n// The default characters to keep after transforming case.\nconst DEFAULT_PREFIX_SUFFIX_CHARACTERS = \"\";\n\n/**\n * Supported locale values. Use `false` to ignore locale.\n * Defaults to `undefined`, which uses the host environment.\n */\nexport type Locale = string[] | string | false | undefined;\n\n/**\n * Options used for converting strings to pascal/camel case.\n */\nexport interface PascalCaseOptions extends Options {\n mergeAmbiguousCharacters?: boolean;\n}\n\n/**\n * Options used for converting strings to any case.\n */\nexport interface Options {\n locale?: Locale;\n split?: (value: string) => string[];\n /** @deprecated Pass `split: splitSeparateNumbers` instead. */\n separateNumbers?: boolean;\n delimiter?: string;\n prefixCharacters?: string;\n suffixCharacters?: string;\n}\n\n/**\n * Split any cased input strings into an array of words.\n */\nexport function split(value: string) {\n let result = value.trim();\n\n result = result\n .replace(SPLIT_LOWER_UPPER_RE, SPLIT_REPLACE_VALUE)\n .replace(SPLIT_UPPER_UPPER_RE, SPLIT_REPLACE_VALUE);\n\n result = result.replace(DEFAULT_STRIP_REGEXP, \"\\0\");\n\n let start = 0;\n let end = result.length;\n\n // Trim the delimiter from around the output string.\n while (result.charAt(start) === \"\\0\") start++;\n if (start === end) return [];\n while (result.charAt(end - 1) === \"\\0\") end--;\n\n return result.slice(start, end).split(/\\0/g);\n}\n\n/**\n * Split the input string into an array of words, separating numbers.\n */\nexport function splitSeparateNumbers(value: string) {\n const words = split(value);\n for (let i = 0; i < words.length; i++) {\n const word = words[i];\n const match = SPLIT_SEPARATE_NUMBER_RE.exec(word);\n if (match) {\n const offset = match.index + (match[1] ?? match[2]).length;\n words.splice(i, 1, word.slice(0, offset), word.slice(offset));\n }\n }\n return words;\n}\n\n/**\n * Convert a string to space separated lower case (`foo bar`).\n */\nexport function noCase(input: string, options?: Options) {\n const [prefix, words, suffix] = splitPrefixSuffix(input, options);\n return (\n prefix +\n words.map(lowerFactory(options?.locale)).join(options?.delimiter ?? \" \") +\n suffix\n );\n}\n\n/**\n * Convert a string to camel case (`fooBar`).\n */\nexport function camelCase(input: string, options?: PascalCaseOptions) {\n const [prefix, words, suffix] = splitPrefixSuffix(input, options);\n const lower = lowerFactory(options?.locale);\n const upper = upperFactory(options?.locale);\n const transform = options?.mergeAmbiguousCharacters\n ? capitalCaseTransformFactory(lower, upper)\n : pascalCaseTransformFactory(lower, upper);\n return (\n prefix +\n words\n .map((word, index) => {\n if (index === 0) return lower(word);\n return transform(word, index);\n })\n .join(options?.delimiter ?? \"\") +\n suffix\n );\n}\n\n/**\n * Convert a string to pascal case (`FooBar`).\n */\nexport function pascalCase(input: string, options?: PascalCaseOptions) {\n const [prefix, words, suffix] = splitPrefixSuffix(input, options);\n const lower = lowerFactory(options?.locale);\n const upper = upperFactory(options?.locale);\n const transform = options?.mergeAmbiguousCharacters\n ? capitalCaseTransformFactory(lower, upper)\n : pascalCaseTransformFactory(lower, upper);\n return prefix + words.map(transform).join(options?.delimiter ?? \"\") + suffix;\n}\n\n/**\n * Convert a string to pascal snake case (`Foo_Bar`).\n */\nexport function pascalSnakeCase(input: string, options?: Options) {\n return capitalCase(input, { delimiter: \"_\", ...options });\n}\n\n/**\n * Convert a string to capital case (`Foo Bar`).\n */\nexport function capitalCase(input: string, options?: Options) {\n const [prefix, words, suffix] = splitPrefixSuffix(input, options);\n const lower = lowerFactory(options?.locale);\n const upper = upperFactory(options?.locale);\n return (\n prefix +\n words\n .map(capitalCaseTransformFactory(lower, upper))\n .join(options?.delimiter ?? \" \") +\n suffix\n );\n}\n\n/**\n * Convert a string to constant case (`FOO_BAR`).\n */\nexport function constantCase(input: string, options?: Options) {\n const [prefix, words, suffix] = splitPrefixSuffix(input, options);\n return (\n prefix +\n words.map(upperFactory(options?.locale)).join(options?.delimiter ?? \"_\") +\n suffix\n );\n}\n\n/**\n * Convert a string to dot case (`foo.bar`).\n */\nexport function dotCase(input: string, options?: Options) {\n return noCase(input, { delimiter: \".\", ...options });\n}\n\n/**\n * Convert a string to kebab case (`foo-bar`).\n */\nexport function kebabCase(input: string, options?: Options) {\n return noCase(input, { delimiter: \"-\", ...options });\n}\n\n/**\n * Convert a string to path case (`foo/bar`).\n */\nexport function pathCase(input: string, options?: Options) {\n return noCase(input, { delimiter: \"/\", ...options });\n}\n\n/**\n * Convert a string to path case (`Foo bar`).\n */\nexport function sentenceCase(input: string, options?: Options) {\n const [prefix, words, suffix] = splitPrefixSuffix(input, options);\n const lower = lowerFactory(options?.locale);\n const upper = upperFactory(options?.locale);\n const transform = capitalCaseTransformFactory(lower, upper);\n return (\n prefix +\n words\n .map((word, index) => {\n if (index === 0) return transform(word);\n return lower(word);\n })\n .join(options?.delimiter ?? \" \") +\n suffix\n );\n}\n\n/**\n * Convert a string to snake case (`foo_bar`).\n */\nexport function snakeCase(input: string, options?: Options) {\n return noCase(input, { delimiter: \"_\", ...options });\n}\n\n/**\n * Convert a string to header case (`Foo-Bar`).\n */\nexport function trainCase(input: string, options?: Options) {\n return capitalCase(input, { delimiter: \"-\", ...options });\n}\n\nfunction lowerFactory(locale: Locale): (input: string) => string {\n return locale === false\n ? (input: string) => input.toLowerCase()\n : (input: string) => input.toLocaleLowerCase(locale);\n}\n\nfunction upperFactory(locale: Locale): (input: string) => string {\n return locale === false\n ? (input: string) => input.toUpperCase()\n : (input: string) => input.toLocaleUpperCase(locale);\n}\n\nfunction capitalCaseTransformFactory(\n lower: (input: string) => string,\n upper: (input: string) => string,\n) {\n return (word: string) => `${upper(word[0])}${lower(word.slice(1))}`;\n}\n\nfunction pascalCaseTransformFactory(\n lower: (input: string) => string,\n upper: (input: string) => string,\n) {\n return (word: string, index: number) => {\n const char0 = word[0];\n const initial =\n index > 0 && char0 >= \"0\" && char0 <= \"9\" ? \"_\" + char0 : upper(char0);\n return initial + lower(word.slice(1));\n };\n}\n\nfunction splitPrefixSuffix(\n input: string,\n options: Options = {},\n): [string, string[], string] {\n const splitFn =\n options.split ?? (options.separateNumbers ? splitSeparateNumbers : split);\n const prefixCharacters =\n options.prefixCharacters ?? DEFAULT_PREFIX_SUFFIX_CHARACTERS;\n const suffixCharacters =\n options.suffixCharacters ?? DEFAULT_PREFIX_SUFFIX_CHARACTERS;\n let prefixIndex = 0;\n let suffixIndex = input.length;\n\n while (prefixIndex < input.length) {\n const char = input.charAt(prefixIndex);\n if (!prefixCharacters.includes(char)) break;\n prefixIndex++;\n }\n\n while (suffixIndex > prefixIndex) {\n const index = suffixIndex - 1;\n const char = input.charAt(index);\n if (!suffixCharacters.includes(char)) break;\n suffixIndex = index;\n }\n\n return [\n input.slice(0, prefixIndex),\n splitFn(input.slice(prefixIndex, suffixIndex)),\n input.slice(suffixIndex),\n ];\n}\n", "import type { CloudformationResourceType } from '@cloudform/resource-types';\nimport { pascalCase } from 'change-case';\n\nexport const cfLogicalNames = {\n bucket(stpResourceName: string) {\n return pascalCase(`${stpResourceName}-bucket`);\n },\n atlasMongoProject() {\n return buildCfLogicalName({\n specifier: { type: 'AtlasMongo' },\n suffix: { cloudformationResourceType: 'MongoDB::StpAtlasV1::Project' }\n });\n },\n atlasMongoCredentialsProvider() {\n return buildCfLogicalName({\n specifier: { type: 'AtlasMongoCredentialsProvider' },\n suffix: { cloudformationResourceType: 'AWS::CloudFormation::CustomResource' }\n });\n },\n atlasMongoProjectVpcNetworkContainer() {\n return buildCfLogicalName({\n specifier: { type: 'AtlasMongo' },\n suffix: { cloudformationResourceType: 'MongoDB::StpAtlasV1::NetworkContainer' }\n });\n },\n atlasMongoProjectVpcNetworkPeering() {\n return buildCfLogicalName({\n specifier: { type: 'AtlasMongo' },\n suffix: { cloudformationResourceType: 'MongoDB::StpAtlasV1::NetworkPeering' }\n });\n },\n atlasMongoProjectIpAccessList() {\n return buildCfLogicalName({\n specifier: { type: 'AtlasMongo' },\n suffix: { cloudformationResourceType: 'MongoDB::StpAtlasV1::ProjectIpAccessList' }\n });\n },\n atlasMongoUserAssociatedWithRole(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: 'AtlasMongo' },\n suffix: { cloudformationResourceType: 'MongoDB::StpAtlasV1::DatabaseUser' }\n });\n },\n atlasMongoClusterMasterUser(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'MongoDB::StpAtlasV1::DatabaseUser' }\n });\n },\n atlasMongoCluster(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'MongoDB::StpAtlasV1::Cluster' }\n });\n },\n redisReplicationGroup(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::ElastiCache::ReplicationGroup' }\n });\n },\n redisLogGroup(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::Logs::LogGroup' }\n });\n },\n redisParameterGroup(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::ElastiCache::ParameterGroup' }\n });\n },\n redisSubnetGroup(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::ElastiCache::SubnetGroup' }\n });\n },\n redisSecurityGroup(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::EC2::SecurityGroup' }\n });\n },\n efsFilesystem(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: {\n cloudformationResourceType: 'AWS::EFS::FileSystem'\n }\n });\n },\n efsAccessPoint({\n stpResourceName,\n efsFilesystemName,\n rootDirectory\n }: {\n stpResourceName: string;\n efsFilesystemName: string;\n rootDirectory?: string;\n }) {\n // Create a unique identifier based on the root directory\n const rootDirIdentifier = rootDirectory ? `${rootDirectory.replace(/\\//g, '-').replace(/^-|-$/g, '')}` : 'Root';\n\n return buildCfLogicalName({\n stpResourceName,\n specifier: {\n type: `${efsFilesystemName}-${rootDirIdentifier}`\n },\n suffix: {\n cloudformationResourceType: 'AWS::EFS::AccessPoint'\n }\n });\n },\n efsMountTarget(stpResourceName: string, mountTargetIndex: number) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: 'Subnet', typeIndex: mountTargetIndex },\n suffix: { cloudformationResourceType: 'AWS::EFS::MountTarget' }\n });\n },\n efsSecurityGroup(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::EC2::SecurityGroup' }\n });\n },\n snsRoleSendSmsFromCognito(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: 'SendSms' },\n suffix: { cloudformationResourceType: 'AWS::IAM::Role' }\n });\n },\n cloudfrontDistribution(stpResourceName: string, distributionIndex: number) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: 'CDN' },\n suffix: { cloudformationResourceType: 'AWS::CloudFront::Distribution', index: distributionIndex }\n });\n },\n cloudfrontCustomCachePolicy(stpResourceName: string, cachingOptionsHash: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: `CDNCacheBehavior${cachingOptionsHash}` },\n suffix: { cloudformationResourceType: 'AWS::CloudFront::CachePolicy' }\n });\n },\n cloudfrontDefaultCachePolicy(type: 'DefDynamic' | 'DefStatic') {\n return buildCfLogicalName({\n specifier: { type: `CDN${type}` },\n suffix: { cloudformationResourceType: 'AWS::CloudFront::CachePolicy' }\n });\n },\n cloudfrontCustomOriginRequestPolicy(stpResourceName: string, forwardingOptionsHash: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: `CDNCacheBehavior${forwardingOptionsHash}` },\n suffix: { cloudformationResourceType: 'AWS::CloudFront::OriginRequestPolicy' }\n });\n },\n cloudfrontDefaultOriginRequestPolicy(type: 'DefDynamic' | 'DefStatic') {\n return buildCfLogicalName({\n specifier: { type: `CDN${type}` },\n suffix: { cloudformationResourceType: 'AWS::CloudFront::OriginRequestPolicy' }\n });\n },\n cloudfrontOriginAccessIdentity(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: 'CDN' },\n suffix: { cloudformationResourceType: 'AWS::CloudFront::CloudFrontOriginAccessIdentity' }\n });\n },\n openNextHostHeaderRewriteFunction(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: 'OpenNextHostHeaderRewrite' },\n suffix: { cloudformationResourceType: 'AWS::CloudFront::Function' }\n });\n },\n openNextAssetReplacerCustomResource(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: 'AssetReplacer' },\n suffix: { cloudformationResourceType: 'AWS::CloudFormation::CustomResource' }\n });\n },\n openNextDynamoInsertCustomResource(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: 'DynamoInsert' },\n suffix: { cloudformationResourceType: 'AWS::CloudFormation::CustomResource' }\n });\n },\n dnsRecord(fullyQualifiedDomainName: string) {\n // we do not build build the resource name conventionally through stpResourceName\n // this is due to update behaviors of Cloudformation\n return buildCfLogicalName({\n stpResourceName: '',\n specifier: { type: getSpecifierForDomainResource(fullyQualifiedDomainName) },\n suffix: { cloudformationResourceType: 'AWS::Route53::RecordSet' }\n });\n },\n dynamoGlobalTable(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::DynamoDB::GlobalTable' }\n });\n },\n dynamoRegionalTable(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::DynamoDB::Table' }\n });\n },\n bucketPolicy(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::S3::BucketPolicy' }\n });\n },\n lambdaLogGroup(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::Logs::LogGroup' }\n });\n },\n eventOnDeliveryFailureSqsQueuePolicy(stpResourceName: string, eventIndex: number) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: {\n type: 'Event',\n typeIndex: eventIndex\n },\n suffix: { cloudformationResourceType: 'AWS::SQS::QueuePolicy' }\n });\n },\n snsEventSubscription(stpResourceName: string, eventIndex: number) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: {\n type: 'Event',\n typeIndex: eventIndex\n },\n suffix: { cloudformationResourceType: 'AWS::SNS::Subscription' }\n });\n },\n snsEventPermission(stpResourceName: string, eventIndex: number) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: {\n type: 'Event',\n typeIndex: eventIndex\n },\n suffix: { cloudformationResourceType: 'AWS::Lambda::Permission' }\n });\n },\n ecrRepo() {\n return buildCfLogicalName({\n specifier: {\n type: 'Container'\n },\n suffix: { cloudformationResourceType: 'AWS::ECR::Repository' }\n });\n },\n deploymentBucket() {\n return buildCfLogicalName({\n specifier: {\n type: 'Deployment'\n },\n suffix: { cloudformationResourceType: 'AWS::S3::Bucket' }\n });\n },\n deploymentBucketPolicy() {\n return buildCfLogicalName({\n specifier: {\n type: 'Deployment'\n },\n suffix: { cloudformationResourceType: 'AWS::S3::BucketPolicy' }\n });\n },\n lambdaInvokeConfig(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::Lambda::EventInvokeConfig' }\n });\n },\n lambdaVersionPublisherCustomResource(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: 'Version' },\n suffix: { cloudformationResourceType: 'AWS::CloudFormation::CustomResource' }\n });\n },\n codeDeployServiceRole() {\n return buildCfLogicalName({\n specifier: {\n type: 'CodeDeploy'\n },\n suffix: { cloudformationResourceType: 'AWS::IAM::Role' }\n });\n },\n batchInstanceRole() {\n return buildCfLogicalName({\n specifier: {\n type: 'BatchInstance'\n },\n suffix: { cloudformationResourceType: 'AWS::IAM::Role' }\n });\n },\n batchInstanceDefaultSecurityGroup() {\n return buildCfLogicalName({\n specifier: {\n type: 'BatchInstance'\n },\n suffix: { cloudformationResourceType: 'AWS::EC2::SecurityGroup' }\n });\n },\n batchInstanceProfile() {\n return buildCfLogicalName({\n specifier: {\n type: 'BatchInstance'\n },\n suffix: { cloudformationResourceType: 'AWS::IAM::InstanceProfile' }\n });\n },\n batchInstanceLaunchTemplate() {\n return buildCfLogicalName({\n specifier: {\n type: 'BatchInstance'\n },\n suffix: { cloudformationResourceType: 'AWS::EC2::LaunchTemplate' }\n });\n },\n batchStateMachineExecutionRole() {\n return buildCfLogicalName({\n specifier: {\n type: 'BatchStateMachine'\n },\n suffix: { cloudformationResourceType: 'AWS::IAM::Role' }\n });\n },\n batchSpotFleetRole() {\n return buildCfLogicalName({\n specifier: {\n type: 'BatchSpotFleet'\n },\n suffix: { cloudformationResourceType: 'AWS::IAM::Role' }\n });\n },\n batchServiceRole() {\n return buildCfLogicalName({\n specifier: {\n type: 'BatchService'\n },\n suffix: { cloudformationResourceType: 'AWS::IAM::Role' }\n });\n },\n batchJobExecutionRole(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::IAM::Role' }\n });\n },\n batchComputeEnvironment(spot: boolean, gpu: boolean) {\n return buildCfLogicalName({\n specifier: {\n type: `Batch-${spot ? 'spot' : 'onDemand'}-${gpu ? 'gpu' : ''}`\n },\n suffix: { cloudformationResourceType: 'AWS::Batch::ComputeEnvironment' }\n });\n },\n batchJobQueue(spot: boolean, gpu: boolean) {\n return buildCfLogicalName({\n specifier: {\n type: `Batch-${spot ? 'spot' : 'onDemand'}-${gpu ? 'gpu' : ''}`\n },\n suffix: { cloudformationResourceType: 'AWS::Batch::JobQueue' }\n });\n },\n subnet(publicSubnet: boolean, subnetIndex: number) {\n return buildCfLogicalName({\n specifier: {\n type: publicSubnet ? 'Public' : 'Private'\n },\n suffix: { cloudformationResourceType: 'AWS::EC2::Subnet', index: subnetIndex }\n });\n },\n vpc() {\n return buildCfLogicalName({\n suffix: { cloudformationResourceType: 'AWS::EC2::VPC' }\n });\n },\n vpcGatewayEndpoint(type: 's3' | 'dynamo-db') {\n return buildCfLogicalName({\n specifier: { type: `${type}-Gateway` },\n suffix: { cloudformationResourceType: 'AWS::EC2::VPCEndpoint' }\n });\n },\n dbSubnetGroup(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::RDS::DBSubnetGroup' }\n });\n },\n auroraDbCluster(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::RDS::DBCluster' }\n });\n },\n auroraDbClusterParameterGroup(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::RDS::DBClusterParameterGroup' }\n });\n },\n auroraDbClusterLogGroup(stpResourceName: string, logGroupType: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: 'Cluster', subtype: logGroupType },\n suffix: { cloudformationResourceType: 'AWS::Logs::LogGroup' }\n });\n },\n dbSecurityGroup(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::EC2::SecurityGroup' }\n });\n },\n dbInstance(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::RDS::DBInstance' }\n });\n },\n dbInstanceLogGroup(stpResourceName: string, logGroupType: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: 'Instance', subtype: logGroupType },\n suffix: { cloudformationResourceType: 'AWS::Logs::LogGroup' }\n });\n },\n openSearchDomainLogGroup(stpResourceName: string, logGroupType: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: 'Instance', subtype: logGroupType },\n suffix: { cloudformationResourceType: 'AWS::Logs::LogGroup' }\n });\n },\n dbOptionGroup(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::RDS::OptionGroup' }\n });\n },\n dbInstanceParameterGroup(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::RDS::DBParameterGroup' }\n });\n },\n dbReplica(stpResourceName: string, replicaNum: number) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: 'Replica', typeIndex: replicaNum },\n suffix: { cloudformationResourceType: 'AWS::RDS::DBInstance' }\n });\n },\n dbReplicaLogGroup(stpResourceName: string, logGroupType: string, replicaNum: number) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: 'Replica', typeIndex: replicaNum, subtype: logGroupType },\n suffix: { cloudformationResourceType: 'AWS::Logs::LogGroup' }\n });\n },\n dbReplicaParameterGroup(stpResourceName: string, replicaNum: number) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: 'Replica', typeIndex: replicaNum },\n suffix: { cloudformationResourceType: 'AWS::RDS::DBParameterGroup' }\n });\n },\n auroraDbInstance(stpResourceName: string, instanceNum: number) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::RDS::DBInstance', index: instanceNum }\n });\n },\n auroraDbInstanceParameterGroup(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: 'Instance' },\n suffix: { cloudformationResourceType: 'AWS::RDS::DBParameterGroup' }\n });\n },\n eventBusRule(stpResourceName: string, eventIndex: number) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: {\n type: 'Event',\n typeIndex: eventIndex\n },\n suffix: { cloudformationResourceType: 'AWS::Events::Rule' }\n });\n },\n customTaggingScheduleRule() {\n return buildCfLogicalName({\n specifier: { type: 'StpCustomTaggingSchedule' },\n suffix: { cloudformationResourceType: 'AWS::Events::Rule' }\n });\n },\n customTaggingScheduleRulePermission() {\n return buildCfLogicalName({\n specifier: { type: 'StpCustomTaggingScheduleRule' },\n suffix: { cloudformationResourceType: 'AWS::Lambda::Permission' }\n });\n },\n cloudWatchLogEventSubscriptionFilter(stpResourceName: string, eventIndex: number) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: {\n type: 'Event',\n typeIndex: eventIndex\n },\n suffix: { cloudformationResourceType: 'AWS::Logs::SubscriptionFilter' }\n });\n },\n eventSourceMapping(stpResourceName: string, eventIndex: number) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: {\n type: 'Event',\n typeIndex: eventIndex\n },\n suffix: { cloudformationResourceType: 'AWS::Lambda::EventSourceMapping' }\n });\n },\n iotEventTopicRule(stpResourceName: string, eventIndex: number) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: {\n type: 'Event',\n typeIndex: eventIndex\n },\n suffix: { cloudformationResourceType: 'AWS::IoT::TopicRule' }\n });\n },\n kinesisEventConsumer(stpResourceName: string, eventIndex: number) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: {\n type: 'Event',\n typeIndex: eventIndex\n },\n suffix: { cloudformationResourceType: 'AWS::Kinesis::StreamConsumer' }\n });\n },\n lambda(stpResourceName: string, isStpServiceFunction?: boolean) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: isStpServiceFunction ? { type: 'CustomResource' } : undefined,\n suffix: { cloudformationResourceType: 'AWS::Lambda::Function' }\n });\n },\n lambdaStpAlias(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: {\n type: 'Stp'\n },\n suffix: { cloudformationResourceType: 'AWS::Lambda::Alias' }\n });\n },\n lambdaUrl(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::Lambda::Url' }\n });\n },\n codeDeployDeploymentGroup(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::CodeDeploy::DeploymentGroup' }\n });\n },\n customResource(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::CloudFormation::CustomResource' }\n });\n },\n scriptCustomResource(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: 'Script' },\n suffix: { cloudformationResourceType: 'AWS::CloudFormation::CustomResource' }\n });\n },\n batchStateMachine(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: 'JobExecution' },\n suffix: { cloudformationResourceType: 'AWS::StepFunctions::StateMachine' }\n });\n },\n batchJobDefinition(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::Batch::JobDefinition' }\n });\n },\n batchJobLogGroup(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::Logs::LogGroup' }\n });\n },\n globalStateMachinesRole() {\n return buildCfLogicalName({\n specifier: {\n type: 'GlobalStateMachine'\n },\n suffix: { cloudformationResourceType: 'AWS::IAM::Role' }\n });\n },\n stateMachine(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::StepFunctions::StateMachine' }\n });\n },\n internetGateway() {\n return buildCfLogicalName({\n suffix: { cloudformationResourceType: 'AWS::EC2::InternetGateway' }\n });\n },\n vpcGatewayAttachment() {\n return buildCfLogicalName({\n suffix: { cloudformationResourceType: 'AWS::EC2::VPCGatewayAttachment' }\n });\n },\n routeTable(publicSubnet: boolean, subnetIndex: number) {\n return buildCfLogicalName({\n specifier: { type: publicSubnet ? 'PublicSubnet' : 'PrivateSubnet', typeIndex: subnetIndex },\n suffix: { cloudformationResourceType: 'AWS::EC2::RouteTable' }\n });\n },\n internetGatewayRoute(subnetIndex: number) {\n return buildCfLogicalName({\n specifier: { type: 'InternetGateway' },\n suffix: { cloudformationResourceType: 'AWS::EC2::Route', index: subnetIndex }\n });\n },\n atlasMongoVpcRoute(publicSubnetTable: boolean, subnetIndex: number) {\n return buildCfLogicalName({\n specifier: { type: `AtlasMongo${publicSubnetTable ? 'PublicSubnet' : 'PrivateSubnet'}` },\n suffix: { cloudformationResourceType: 'AWS::EC2::Route', index: subnetIndex }\n });\n },\n routeTableToSubnetAssociation(publicSubnet: boolean, subnetIndex: number) {\n return buildCfLogicalName({\n specifier: { type: publicSubnet ? 'PublicSubnet' : 'PrivateSubnet', typeIndex: subnetIndex },\n suffix: { cloudformationResourceType: 'AWS::EC2::SubnetRouteTableAssociation' }\n });\n },\n natGateway(azIndex: number) {\n return buildCfLogicalName({\n suffix: { cloudformationResourceType: 'AWS::EC2::NatGateway', index: azIndex }\n });\n },\n natElasticIp(azIndex: number) {\n return buildCfLogicalName({\n specifier: { type: 'Nat' },\n suffix: { cloudformationResourceType: 'AWS::EC2::EIP', index: azIndex }\n });\n },\n natRoute(subnetIndex: number) {\n return buildCfLogicalName({\n specifier: { type: 'NatPrivateSubnet' },\n suffix: { cloudformationResourceType: 'AWS::EC2::Route', index: subnetIndex }\n });\n },\n eventBus(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::Events::EventBus' }\n });\n },\n eventBusArchive(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::Events::Archive' }\n });\n },\n ecsCluster(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::ECS::Cluster' }\n });\n },\n ecsTaskDefinition(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::ECS::TaskDefinition' }\n });\n },\n ecsService(stpResourceName: string, blueGreen: boolean) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: blueGreen ? { type: 'BlueGreen' } : undefined,\n suffix: { cloudformationResourceType: 'AWS::ECS::Service' }\n });\n },\n ecsExecutionRole() {\n return buildCfLogicalName({\n specifier: { type: 'EcsExecution' },\n suffix: { cloudformationResourceType: 'AWS::IAM::Role' }\n });\n },\n ecsEc2InstanceRole() {\n return buildCfLogicalName({\n specifier: {\n type: 'EcsInstance'\n },\n suffix: { cloudformationResourceType: 'AWS::IAM::Role' }\n });\n },\n ecsEc2AutoscalingGroupWarmPool(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::AutoScaling::WarmPool' }\n });\n },\n eventBusRoleForScheduledInstanceRefresh() {\n return buildCfLogicalName({\n specifier: { type: 'ScheduledInstanceRefresh' },\n suffix: { cloudformationResourceType: 'AWS::IAM::Role' }\n });\n },\n schedulerRuleForScheduledInstanceRefresh(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: 'ScheduledInstanceRefresh' },\n suffix: { cloudformationResourceType: 'AWS::Events::Rule' }\n });\n },\n ecsEc2InstanceLaunchTemplate(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::EC2::LaunchTemplate' }\n });\n },\n ecsEc2AutoscalingGroup(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::AutoScaling::AutoScalingGroup' }\n });\n },\n ecsEc2ForceDeleteAutoscalingGroupCustomResource(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: 'ForceDeleteAsg' },\n suffix: { cloudformationResourceType: 'AWS::CloudFormation::CustomResource' }\n });\n },\n ecsDisableManagedTerminationProtectionCustomResource(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: 'DisableManagedTerminationProtection' },\n suffix: { cloudformationResourceType: 'AWS::CloudFormation::CustomResource' }\n });\n },\n\n ecsEc2CapacityProvider(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::ECS::CapacityProvider' }\n });\n },\n ecsEc2CapacityProviderAssociation(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::ECS::ClusterCapacityProviderAssociations' }\n });\n },\n ecsEc2InstanceProfile() {\n return buildCfLogicalName({\n specifier: {\n type: 'EcsInstance'\n },\n suffix: { cloudformationResourceType: 'AWS::IAM::InstanceProfile' }\n });\n },\n ecsTaskRole(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::IAM::Role' }\n });\n },\n ecsAutoScalingRole() {\n return buildCfLogicalName({\n specifier: { type: 'EcsAutoScale' },\n suffix: { cloudformationResourceType: 'AWS::IAM::Role' }\n });\n },\n // ecsScheduledMaintenanceEventBusRule(stpResourceName: string) {\n // return buildCfLogicalName({\n // stpResourceName,\n // specifier: { type: 'ScheduledMaintenance' },\n // suffix: { cloudformationResourceType: 'AWS::Events::Rule' }\n // }).replaceAll('_', '');\n // },\n ecsScheduledMaintenanceLambdaPermission(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: 'ScheduledMaintenance' },\n suffix: { cloudformationResourceType: 'AWS::Lambda::Permission' }\n }).replaceAll('_', '');\n },\n bastionEc2LaunchTemplate(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::EC2::LaunchTemplate' }\n });\n },\n bastionEc2InstanceProfile(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::IAM::InstanceProfile' }\n });\n },\n bastionEc2AutoscalingGroup(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::AutoScaling::AutoScalingGroup' }\n });\n },\n bastionSecurityGroup(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::EC2::SecurityGroup' }\n });\n },\n bastionCwAgentSsmAssociation(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: 'CwAgent' },\n suffix: { cloudformationResourceType: 'AWS::SSM::Association' }\n });\n },\n bastionSsmAgentSsmAssociation(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: 'SsmAgent' },\n suffix: { cloudformationResourceType: 'AWS::SSM::Association' }\n });\n },\n bastionRole(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::IAM::Role' }\n });\n },\n bastionLogGroup(stpResourceName: string, logType: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: pascalCase(logType) },\n suffix: { cloudformationResourceType: 'AWS::Logs::LogGroup' }\n });\n },\n bastionCloudwatchSsmDocument() {\n return buildCfLogicalName({\n specifier: { type: 'BastionCloudwatchAgent' },\n suffix: { cloudformationResourceType: 'AWS::SSM::Document' }\n });\n },\n serviceDiscoveryEcsService(stpResourceName: string, serviceTargetContainerPort: number) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: `Port${serviceTargetContainerPort}Discovery` },\n suffix: { cloudformationResourceType: 'AWS::ServiceDiscovery::Service' }\n });\n },\n workloadSecurityGroup(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::EC2::SecurityGroup' }\n });\n },\n loadBalancerSecurityGroup(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: 'Lb' },\n suffix: { cloudformationResourceType: 'AWS::EC2::SecurityGroup' }\n });\n },\n targetGroup({\n loadBalancerName,\n stpResourceName,\n targetContainerPort,\n blueGreen\n }: {\n stpResourceName: string;\n loadBalancerName: string;\n targetContainerPort?: number;\n blueGreen?: boolean;\n }) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: {\n type: `${loadBalancerName}${targetContainerPort ? `ToPort${targetContainerPort}` : ''}${blueGreen ? 'BG' : ''}`\n },\n suffix: { cloudformationResourceType: 'AWS::ElasticLoadBalancingV2::TargetGroup' }\n });\n },\n lambdaRole(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::IAM::Role' }\n });\n },\n defaultLambdaFunctionRole() {\n return buildCfLogicalName({\n specifier: { type: 'Lambda' },\n suffix: { cloudformationResourceType: 'AWS::IAM::Role' }\n });\n },\n lambdaPermission(stpResourceName: string, eventIndex: number) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: 'Event', typeIndex: eventIndex },\n suffix: { cloudformationResourceType: 'AWS::Lambda::Permission' }\n });\n },\n lambdaPublicUrlPermission(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: 'PublicUrl' },\n suffix: { cloudformationResourceType: 'AWS::Lambda::Permission' }\n });\n },\n lambdaIotEventPermission(workloadName: string, eventIndex: number) {\n return pascalCase(`${workloadName}-Event${eventIndex}-lambda-iotEventPermission`);\n },\n lambdaTargetGroupPermission(stpResourceName: string, loadBalancerName: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: `${loadBalancerName}TargetGroup` },\n suffix: { cloudformationResourceType: 'AWS::Lambda::Permission' }\n });\n },\n httpApi(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::ApiGatewayV2::Api' }\n });\n },\n httpApiLogGroup(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::Logs::LogGroup' }\n });\n },\n httpApiLambdaIntegration({\n stpResourceName,\n stpHttpApiGatewayName\n }: {\n stpResourceName: string;\n stpHttpApiGatewayName: string;\n }) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: stpHttpApiGatewayName },\n suffix: { cloudformationResourceType: 'AWS::ApiGatewayV2::Integration' }\n });\n },\n httpApiContainerWorkloadIntegration({\n stpResourceName,\n stpHttpApiGatewayName,\n targetContainerPort\n }: {\n stpResourceName: string;\n targetContainerPort: number;\n stpHttpApiGatewayName: string;\n }) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: `${stpHttpApiGatewayName}ToPort${targetContainerPort}` },\n suffix: { cloudformationResourceType: 'AWS::ApiGatewayV2::Integration' }\n });\n },\n httpApiAuthorizer({ method, path, stpResourceName }: { method: HttpMethod; path: string; stpResourceName: string }) {\n return buildCfLogicalName({\n stpResourceName: '',\n specifier: {\n type: `${stpResourceName}-${method === '*' ? 'Any' : method}-${path === '*' ? 'Default' : path}`\n },\n suffix: { cloudformationResourceType: 'AWS::ApiGatewayV2::Authorizer' }\n });\n },\n httpApiRoute({ method, path, stpResourceName }: { method: HttpMethod; path: string; stpResourceName: string }) {\n return buildCfLogicalName({\n stpResourceName: '',\n specifier: {\n type: `${stpResourceName}-${method === '*' ? 'Any' : method}-${path === '*' ? 'Default' : path}`\n },\n suffix: { cloudformationResourceType: 'AWS::ApiGatewayV2::Route' }\n });\n },\n httpApiVpcLink(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::ApiGatewayV2::VpcLink' }\n });\n },\n httpApiVpcLinkSecurityGroup(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: 'VpcLink' },\n suffix: { cloudformationResourceType: 'AWS::EC2::SecurityGroup' }\n });\n },\n httpApiLambdaPermission({\n stpResourceNameOfLambda,\n stpResourceNameOfHttpApiGateway\n }: {\n stpResourceNameOfLambda: string;\n stpResourceNameOfHttpApiGateway: string;\n }) {\n return buildCfLogicalName({\n stpResourceName: stpResourceNameOfLambda,\n specifier: { type: stpResourceNameOfHttpApiGateway },\n suffix: { cloudformationResourceType: 'AWS::Lambda::Permission' }\n });\n },\n httpApiStage(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::ApiGatewayV2::Stage' }\n });\n },\n httpApiDomain(fullyQualifiedDomainName: string) {\n // we do not build build the resource name conventionally through stpResourceName\n // this is due to update behaviors of Cloudformation\n return buildCfLogicalName({\n stpResourceName: '',\n specifier: { type: getSpecifierForDomainResource(fullyQualifiedDomainName) },\n suffix: { cloudformationResourceType: 'AWS::ApiGatewayV2::DomainName' }\n });\n },\n httpApiDefaultDomain(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::ApiGatewayV2::DomainName' }\n });\n },\n httpApiDomainMapping(fullyQualifiedDomainName: string) {\n // we do not build build the resource name conventionally through stpResourceName\n // this is due to update behaviors of Cloudformation\n return buildCfLogicalName({\n stpResourceName: '',\n specifier: { type: getSpecifierForDomainResource(fullyQualifiedDomainName) },\n suffix: { cloudformationResourceType: 'AWS::ApiGatewayV2::ApiMapping' }\n });\n },\n httpApiDefaultDomainMapping(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::ApiGatewayV2::ApiMapping' }\n });\n },\n listener(exposurePort: number, stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: `Port${exposurePort}` },\n suffix: { cloudformationResourceType: 'AWS::ElasticLoadBalancingV2::Listener' }\n });\n },\n listenerRule(exposurePort: number, stpResourceName: string, rulePriority: number) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: `Port${exposurePort}Priority${rulePriority}` },\n suffix: { cloudformationResourceType: 'AWS::ElasticLoadBalancingV2::ListenerRule' }\n });\n },\n listenerCertificateList(exposurePort: number, stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: `Port${exposurePort}` },\n suffix: { cloudformationResourceType: 'AWS::ElasticLoadBalancingV2::ListenerCertificate' }\n });\n },\n loadBalancer(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::ElasticLoadBalancingV2::LoadBalancer' }\n });\n },\n ecsLogGroup(stpResourceName: string, containerName: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: containerName },\n suffix: { cloudformationResourceType: 'AWS::Logs::LogGroup' }\n });\n },\n autoScalingTarget(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::ApplicationAutoScaling::ScalableTarget' }\n });\n },\n dynamoAutoScalingTarget(stpResourceName: string, metric: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: metric },\n suffix: { cloudformationResourceType: 'AWS::ApplicationAutoScaling::ScalableTarget' }\n });\n },\n autoScalingPolicy(stpResourceName: string, metric: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: metric },\n suffix: { cloudformationResourceType: 'AWS::ApplicationAutoScaling::ScalingPolicy' }\n });\n },\n customResourceS3Events() {\n return buildCfLogicalName({\n specifier: { type: 'Events' },\n suffix: { cloudformationResourceType: 'AWS::CloudFormation::CustomResource' }\n });\n },\n // @deprecated\n // stacktapeServiceCustomResourceEdgeFunctions() {\n // return buildCfLogicalName({\n // specifier: { type: 'EdgeFunctions' },\n // suffix: { cloudformationResourceType: 'AWS::CloudFormation::CustomResource' }\n // });\n // },\n customResourceSensitiveData() {\n return buildCfLogicalName({\n specifier: { type: 'SensitiveData' },\n suffix: { cloudformationResourceType: 'AWS::CloudFormation::CustomResource' }\n });\n },\n customResourceAcceptVpcPeerings() {\n return buildCfLogicalName({\n specifier: { type: 'AcceptVpcPeerings' },\n suffix: { cloudformationResourceType: 'AWS::CloudFormation::CustomResource' }\n });\n },\n customResourceDefaultDomainCert() {\n return buildCfLogicalName({\n specifier: { type: 'DefaultDomainCert' },\n suffix: { cloudformationResourceType: 'AWS::CloudFormation::CustomResource' }\n });\n },\n customResourceEdgeLambdaBucket() {\n return buildCfLogicalName({\n specifier: { type: 'EdgeLambdaBucket' },\n suffix: { cloudformationResourceType: 'AWS::CloudFormation::CustomResource' }\n });\n },\n customResourceEdgeLambda(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: 'EdgeLambda' },\n suffix: { cloudformationResourceType: 'AWS::CloudFormation::CustomResource' }\n });\n },\n customResourceDefaultDomain(stpResourceName: string, cdn?: boolean) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: `${cdn ? 'Cdn' : ''}DefaultDomain` },\n suffix: { cloudformationResourceType: 'AWS::CloudFormation::CustomResource' }\n });\n },\n customResourceDatabaseDeletionProtection(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: 'DeletionProtection' },\n suffix: { cloudformationResourceType: 'AWS::CloudFormation::CustomResource' }\n });\n },\n userPool(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::Cognito::UserPool' }\n });\n },\n userPoolClient(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::Cognito::UserPoolClient' }\n });\n },\n userPoolDomain(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::Cognito::UserPoolDomain' }\n });\n },\n identityProvider(stpResourceName: string, type: StpUserAuthPool['identityProviders'][number]['type']) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type },\n suffix: { cloudformationResourceType: 'AWS::Cognito::UserPoolIdentityProvider' }\n });\n },\n cognitoLambdaHookPermission(stpResourceName: string, hookName: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: hookName },\n suffix: { cloudformationResourceType: 'AWS::Lambda::Permission' }\n });\n },\n cognitoUserPoolDetailsCustomResource(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: 'UserPoolDetails' },\n suffix: { cloudformationResourceType: 'AWS::CloudFormation::CustomResource' }\n });\n },\n userPoolUiCustomizationAttachment(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::Cognito::UserPoolUICustomizationAttachment' }\n });\n },\n serviceDiscoveryPrivateNamespace() {\n return buildCfLogicalName({\n specifier: { type: 'Discovery' },\n suffix: { cloudformationResourceType: 'AWS::ServiceDiscovery::Service' }\n });\n },\n lambdaCodeDeployApp() {\n return buildCfLogicalName({\n specifier: { type: 'LambdaCodeDeploy' },\n suffix: { cloudformationResourceType: 'AWS::CodeDeploy::Application' }\n });\n },\n ecsCodeDeployApp() {\n return buildCfLogicalName({\n specifier: { type: 'ECSCodeDeploy' },\n suffix: { cloudformationResourceType: 'AWS::CodeDeploy::Application' }\n });\n },\n stackBudget(stackName: string) {\n return buildCfLogicalName({\n specifier: { type: pascalCase(stackName).replaceAll('_', '') },\n suffix: { cloudformationResourceType: 'AWS::Budgets::Budget' }\n });\n },\n upstashRedisDatabase(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'Upstash::DatabasesV1::Database' }\n });\n },\n upstashCredentialsProvider() {\n return buildCfLogicalName({\n specifier: { type: 'UpstashCredentialsProvider' },\n suffix: { cloudformationResourceType: 'AWS::CloudFormation::CustomResource' }\n });\n },\n cloudwatchAlarm(stacktapeAlarmName: string) {\n return buildCfLogicalName({\n stpResourceName: stacktapeAlarmName,\n suffix: { cloudformationResourceType: 'AWS::CloudWatch::Alarm' }\n }).replaceAll('_', '');\n },\n cloudwatchAlarmEventBusNotificationRule(stacktapeAlarmName: string) {\n return buildCfLogicalName({\n stpResourceName: stacktapeAlarmName,\n specifier: { type: 'Notification' },\n suffix: { cloudformationResourceType: 'AWS::Events::Rule' }\n }).replaceAll('_', '');\n },\n cloudwatchAlarmEventBusNotificationRuleLambdaPermission(stacktapeAlarmName: string) {\n return buildCfLogicalName({\n stpResourceName: stacktapeAlarmName,\n specifier: { type: 'Notification' },\n suffix: { cloudformationResourceType: 'AWS::Lambda::Permission' }\n }).replaceAll('_', '');\n },\n sqsQueue(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::SQS::Queue' }\n }).replaceAll('_', '');\n },\n sqsQueuePolicy(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::SQS::QueuePolicy' }\n });\n },\n snsTopic(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::SNS::Topic' }\n }).replaceAll('_', '');\n },\n webAppFirewallCustomResource(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: 'WebAppFirewall' },\n suffix: { cloudformationResourceType: 'AWS::CloudFormation::CustomResource' }\n });\n },\n webAppFirewallAssociation(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::WAFv2::WebACLAssociation' }\n });\n },\n openSearchDomain(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::OpenSearchService::Domain' }\n });\n },\n openSearchCustomResource(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: 'OpenSearch' },\n suffix: { cloudformationResourceType: 'AWS::CloudFormation::CustomResource' }\n });\n },\n openSearchSecurityGroup(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::EC2::SecurityGroup' }\n });\n },\n logForwardingFirehoseToS3Role(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: 'LogForwardingS3' },\n suffix: { cloudformationResourceType: 'AWS::IAM::Role' }\n });\n },\n logForwardingCwToFirehoseRole({ logGroupCfLogicalName }: { logGroupCfLogicalName: string }) {\n return buildCfLogicalName({\n stpResourceName: logGroupCfLogicalName,\n specifier: { type: 'CwToFirehose' },\n suffix: { cloudformationResourceType: 'AWS::IAM::Role' }\n });\n },\n logForwardingFailedEventsBucket(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: 'LogForwardingFailedRecords' },\n suffix: { cloudformationResourceType: 'AWS::S3::Bucket' }\n });\n },\n logForwardingFirehoseDeliveryStream({ logGroupCfLogicalName }: { logGroupCfLogicalName: string }) {\n return buildCfLogicalName({\n stpResourceName: logGroupCfLogicalName,\n suffix: { cloudformationResourceType: 'AWS::KinesisFirehose::DeliveryStream' }\n });\n },\n logForwardingSubscriptionFilter({ logGroupCfLogicalName }: { logGroupCfLogicalName: string }) {\n return buildCfLogicalName({\n stpResourceName: logGroupCfLogicalName,\n suffix: { cloudformationResourceType: 'AWS::Logs::SubscriptionFilter' }\n });\n }\n};\n\nconst buildCfLogicalName = ({\n stpResourceName,\n specifier,\n suffix\n}: {\n stpResourceName?: string;\n specifier?: { type: string; typeIndex?: number; subtype?: string };\n suffix: {\n cloudformationResourceType: CloudformationResourceType | SupportedPrivateCfResourceType;\n index?: number;\n };\n}) => {\n const splittedType = suffix.cloudformationResourceType.split(':');\n const resolvedParentName = stpResourceName || 'Stp';\n const resolvedSpecifier = specifier\n ? `${specifier.type}${specifier.typeIndex !== undefined ? specifier.typeIndex : ''}${\n specifier.subtype !== undefined ? `-${specifier.subtype}` : ''\n }`\n : '';\n const resolvedSuffix = `${splittedType[splittedType.length - 1]}${suffix.index !== undefined ? suffix.index : ''}`;\n return pascalCase(`${resolvedParentName}-${resolvedSpecifier}-${resolvedSuffix}`);\n};\n\nconst getSpecifierForDomainResource = (fullyQualifiedDomainName) => {\n if (pascalCase(fullyQualifiedDomainName).replace('_', '').length < 85) {\n return pascalCase(fullyQualifiedDomainName).replace('_', '');\n }\n const splittedDomain = fullyQualifiedDomainName\n .split('.')\n .map((subdomain) => subdomain.split('-'))\n .flat();\n const maxCharactersPerWord = Math.floor(85 / splittedDomain.length);\n return splittedDomain.map((word) => pascalCase(word.slice(0, maxCharactersPerWord)).replace('_', '')).join('');\n};\n", "import { cfLogicalNames } from '@shared/naming/logical-names';\n\nexport const CHILD_RESOURCES: Record<\n StpResourceType,\n Array<{ logicalName: (...args: any[]) => string; resourceType: string; conditional?: true; unresolvable?: true }>\n> = {\n // ===== BUCKET =====\n bucket: [\n { logicalName: cfLogicalNames.bucket, resourceType: 'AWS::S3::Bucket' },\n { logicalName: cfLogicalNames.bucketPolicy, resourceType: 'AWS::S3::BucketPolicy', conditional: true },\n {\n logicalName: cfLogicalNames.cloudfrontOriginAccessIdentity,\n resourceType: 'AWS::CloudFront::CloudFrontOriginAccessIdentity',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.cloudfrontCustomCachePolicy,\n resourceType: 'AWS::CloudFront::CachePolicy',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.cloudfrontDefaultCachePolicy,\n resourceType: 'AWS::CloudFront::CachePolicy',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.cloudfrontCustomOriginRequestPolicy,\n resourceType: 'AWS::CloudFront::OriginRequestPolicy',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.cloudfrontDefaultOriginRequestPolicy,\n resourceType: 'AWS::CloudFront::OriginRequestPolicy',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.cloudfrontDistribution,\n resourceType: 'AWS::CloudFront::Distribution',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.customResourceDefaultDomain,\n resourceType: 'AWS::CloudFormation::CustomResource',\n conditional: true\n },\n { logicalName: cfLogicalNames.dnsRecord, resourceType: 'AWS::Route53::RecordSet', conditional: true }\n ],\n\n // ===== FUNCTION =====\n function: [\n { logicalName: cfLogicalNames.lambdaRole, resourceType: 'AWS::IAM::Role' },\n { logicalName: cfLogicalNames.lambda, resourceType: 'AWS::Lambda::Function' },\n { logicalName: cfLogicalNames.efsAccessPoint, resourceType: 'AWS::EFS::AccessPoint', conditional: true },\n { logicalName: cfLogicalNames.workloadSecurityGroup, resourceType: 'AWS::EC2::SecurityGroup', conditional: true },\n { logicalName: cfLogicalNames.lambdaUrl, resourceType: 'AWS::Lambda::Url', conditional: true },\n {\n logicalName: cfLogicalNames.lambdaPublicUrlPermission,\n resourceType: 'AWS::Lambda::Permission',\n conditional: true\n },\n { logicalName: cfLogicalNames.lambdaLogGroup, resourceType: 'AWS::Logs::LogGroup', conditional: true },\n {\n logicalName: cfLogicalNames.lambdaInvokeConfig,\n resourceType: 'AWS::Lambda::EventInvokeConfig',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.lambdaCodeDeployApp,\n resourceType: 'AWS::CodeDeploy::Application',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.lambdaVersionPublisherCustomResource,\n resourceType: 'AWS::CloudFormation::CustomResource',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.codeDeployDeploymentGroup,\n resourceType: 'AWS::CodeDeploy::DeploymentGroup',\n conditional: true\n },\n { logicalName: cfLogicalNames.lambdaStpAlias, resourceType: 'AWS::Lambda::Alias', conditional: true },\n {\n logicalName: cfLogicalNames.cloudfrontOriginAccessIdentity,\n resourceType: 'AWS::CloudFront::CloudFrontOriginAccessIdentity',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.cloudfrontCustomCachePolicy,\n resourceType: 'AWS::CloudFront::CachePolicy',\n conditional: true,\n unresolvable: true\n },\n {\n logicalName: cfLogicalNames.cloudfrontDefaultCachePolicy,\n resourceType: 'AWS::CloudFront::CachePolicy',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.cloudfrontCustomOriginRequestPolicy,\n resourceType: 'AWS::CloudFront::OriginRequestPolicy',\n conditional: true,\n unresolvable: true\n },\n {\n logicalName: cfLogicalNames.cloudfrontDefaultOriginRequestPolicy,\n resourceType: 'AWS::CloudFront::OriginRequestPolicy',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.cloudfrontDistribution,\n resourceType: 'AWS::CloudFront::Distribution',\n conditional: true,\n unresolvable: true\n },\n {\n logicalName: cfLogicalNames.customResourceDefaultDomain,\n resourceType: 'AWS::CloudFormation::CustomResource',\n conditional: true\n },\n { logicalName: cfLogicalNames.dnsRecord, resourceType: 'AWS::Route53::RecordSet', conditional: true },\n {\n logicalName: cfLogicalNames.lambdaPermission,\n resourceType: 'AWS::Lambda::Permission',\n conditional: true,\n unresolvable: true\n }\n ],\n\n // ===== RELATIONAL DATABASE =====\n 'relational-database': [\n { logicalName: cfLogicalNames.dbSubnetGroup, resourceType: 'AWS::RDS::DBSubnetGroup' },\n { logicalName: cfLogicalNames.dbSecurityGroup, resourceType: 'AWS::EC2::SecurityGroup' },\n {\n logicalName: cfLogicalNames.customResourceDatabaseDeletionProtection,\n resourceType: 'AWS::CloudFormation::CustomResource',\n conditional: true\n },\n { logicalName: cfLogicalNames.auroraDbCluster, resourceType: 'AWS::RDS::DBCluster', conditional: true },\n {\n logicalName: cfLogicalNames.auroraDbClusterParameterGroup,\n resourceType: 'AWS::RDS::DBClusterParameterGroup',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.auroraDbClusterLogGroup,\n resourceType: 'AWS::Logs::LogGroup',\n conditional: true,\n unresolvable: true\n },\n {\n logicalName: cfLogicalNames.auroraDbInstance,\n resourceType: 'AWS::RDS::DBInstance',\n conditional: true,\n unresolvable: true\n },\n {\n logicalName: cfLogicalNames.auroraDbInstanceParameterGroup,\n resourceType: 'AWS::RDS::DBParameterGroup',\n conditional: true\n },\n { logicalName: cfLogicalNames.dbInstance, resourceType: 'AWS::RDS::DBInstance', conditional: true },\n {\n logicalName: cfLogicalNames.dbInstanceLogGroup,\n resourceType: 'AWS::Logs::LogGroup',\n conditional: true,\n unresolvable: true\n },\n { logicalName: cfLogicalNames.dbOptionGroup, resourceType: 'AWS::RDS::OptionGroup', conditional: true },\n {\n logicalName: cfLogicalNames.dbInstanceParameterGroup,\n resourceType: 'AWS::RDS::DBParameterGroup',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.dbReplica,\n resourceType: 'AWS::RDS::DBInstance',\n conditional: true,\n unresolvable: true\n },\n {\n logicalName: cfLogicalNames.dbReplicaLogGroup,\n resourceType: 'AWS::Logs::LogGroup',\n conditional: true,\n unresolvable: true\n }\n ],\n\n // ===== DYNAMO DB TABLE =====\n 'dynamo-db-table': [{ logicalName: cfLogicalNames.dynamoGlobalTable, resourceType: 'AWS::DynamoDB::GlobalTable' }],\n\n // ===== HTTP API GATEWAY =====\n 'http-api-gateway': [\n { logicalName: cfLogicalNames.httpApi, resourceType: 'AWS::ApiGatewayV2::Api' },\n { logicalName: cfLogicalNames.httpApiStage, resourceType: 'AWS::ApiGatewayV2::Stage' },\n { logicalName: cfLogicalNames.httpApiLogGroup, resourceType: 'AWS::Logs::LogGroup', conditional: true },\n {\n logicalName: cfLogicalNames.httpApiVpcLinkSecurityGroup,\n resourceType: 'AWS::EC2::SecurityGroup',\n conditional: true\n },\n { logicalName: cfLogicalNames.httpApiVpcLink, resourceType: 'AWS::ApiGatewayV2::VpcLink', conditional: true },\n { logicalName: cfLogicalNames.httpApiDomain, resourceType: 'AWS::ApiGatewayV2::DomainName', conditional: true },\n {\n logicalName: cfLogicalNames.httpApiDomainMapping,\n resourceType: 'AWS::ApiGatewayV2::ApiMapping',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.httpApiDefaultDomain,\n resourceType: 'AWS::ApiGatewayV2::DomainName',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.httpApiDefaultDomainMapping,\n resourceType: 'AWS::ApiGatewayV2::ApiMapping',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.customResourceDefaultDomain,\n resourceType: 'AWS::CloudFormation::CustomResource',\n conditional: true\n },\n { logicalName: cfLogicalNames.dnsRecord, resourceType: 'AWS::Route53::RecordSet', conditional: true },\n {\n logicalName: cfLogicalNames.cloudfrontOriginAccessIdentity,\n resourceType: 'AWS::CloudFront::CloudFrontOriginAccessIdentity',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.cloudfrontCustomCachePolicy,\n resourceType: 'AWS::CloudFront::CachePolicy',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.cloudfrontDefaultCachePolicy,\n resourceType: 'AWS::CloudFront::CachePolicy',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.cloudfrontCustomOriginRequestPolicy,\n resourceType: 'AWS::CloudFront::OriginRequestPolicy',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.cloudfrontDefaultOriginRequestPolicy,\n resourceType: 'AWS::CloudFront::OriginRequestPolicy',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.cloudfrontDistribution,\n resourceType: 'AWS::CloudFront::Distribution',\n conditional: true\n }\n ],\n\n // ===== BATCH JOB =====\n 'batch-job': [\n { logicalName: cfLogicalNames.batchServiceRole, resourceType: 'AWS::IAM::Role', conditional: true },\n { logicalName: cfLogicalNames.batchSpotFleetRole, resourceType: 'AWS::IAM::Role', conditional: true },\n { logicalName: cfLogicalNames.batchInstanceRole, resourceType: 'AWS::IAM::Role', conditional: true },\n { logicalName: cfLogicalNames.batchInstanceProfile, resourceType: 'AWS::IAM::InstanceProfile', conditional: true },\n { logicalName: cfLogicalNames.batchStateMachineExecutionRole, resourceType: 'AWS::IAM::Role', conditional: true },\n {\n logicalName: cfLogicalNames.batchInstanceLaunchTemplate,\n resourceType: 'AWS::EC2::LaunchTemplate',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.batchInstanceDefaultSecurityGroup,\n resourceType: 'AWS::EC2::SecurityGroup',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.batchComputeEnvironment,\n resourceType: 'AWS::Batch::ComputeEnvironment',\n conditional: true\n },\n { logicalName: cfLogicalNames.batchJobQueue, resourceType: 'AWS::Batch::JobQueue', conditional: true },\n { logicalName: cfLogicalNames.batchJobDefinition, resourceType: 'AWS::Batch::JobDefinition' },\n { logicalName: cfLogicalNames.batchStateMachine, resourceType: 'AWS::StepFunctions::StateMachine' },\n { logicalName: cfLogicalNames.batchJobLogGroup, resourceType: 'AWS::Logs::LogGroup', conditional: true },\n { logicalName: cfLogicalNames.batchJobExecutionRole, resourceType: 'AWS::IAM::Role' },\n {\n logicalName: cfLogicalNames.atlasMongoUserAssociatedWithRole,\n resourceType: 'MongoDB::StpAtlasV1::DatabaseUser',\n conditional: true\n }\n ],\n\n // ===== EVENT BUS =====\n 'event-bus': [\n { logicalName: cfLogicalNames.eventBus, resourceType: 'AWS::Events::EventBus' },\n { logicalName: cfLogicalNames.eventBusArchive, resourceType: 'AWS::Events::Archive', conditional: true }\n ],\n\n // ===== STATE MACHINE =====\n 'state-machine': [\n { logicalName: cfLogicalNames.globalStateMachinesRole, resourceType: 'AWS::IAM::Role', conditional: true },\n { logicalName: cfLogicalNames.stateMachine, resourceType: 'AWS::StepFunctions::StateMachine' }\n ],\n\n // ===== REDIS CLUSTER =====\n 'redis-cluster': [\n { logicalName: cfLogicalNames.redisParameterGroup, resourceType: 'AWS::ElastiCache::ParameterGroup' },\n { logicalName: cfLogicalNames.redisSubnetGroup, resourceType: 'AWS::ElastiCache::SubnetGroup' },\n { logicalName: cfLogicalNames.redisSecurityGroup, resourceType: 'AWS::EC2::SecurityGroup' },\n { logicalName: cfLogicalNames.redisLogGroup, resourceType: 'AWS::Logs::LogGroup', conditional: true },\n { logicalName: cfLogicalNames.redisReplicationGroup, resourceType: 'AWS::ElastiCache::ReplicationGroup' }\n ],\n\n // ===== MONGO DB ATLAS CLUSTER =====\n 'mongo-db-atlas-cluster': [\n {\n logicalName: cfLogicalNames.atlasMongoCredentialsProvider,\n resourceType: 'AWS::CloudFormation::CustomResource',\n conditional: true\n },\n { logicalName: cfLogicalNames.atlasMongoProject, resourceType: 'MongoDB::StpAtlasV1::Project', conditional: true },\n {\n logicalName: cfLogicalNames.atlasMongoProjectIpAccessList,\n resourceType: 'MongoDB::StpAtlasV1::ProjectIpAccessList',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.atlasMongoProjectVpcNetworkContainer,\n resourceType: 'MongoDB::StpAtlasV1::NetworkContainer',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.atlasMongoProjectVpcNetworkPeering,\n resourceType: 'MongoDB::StpAtlasV1::NetworkPeering',\n conditional: true\n },\n { logicalName: cfLogicalNames.atlasMongoVpcRoute, resourceType: 'AWS::EC2::Route', conditional: true },\n { logicalName: cfLogicalNames.atlasMongoCluster, resourceType: 'MongoDB::StpAtlasV1::Cluster' },\n {\n logicalName: cfLogicalNames.atlasMongoClusterMasterUser,\n resourceType: 'MongoDB::StpAtlasV1::DatabaseUser',\n conditional: true\n }\n ],\n\n // ===== USER AUTH POOL =====\n 'user-auth-pool': [\n { logicalName: cfLogicalNames.userPool, resourceType: 'AWS::Cognito::UserPool' },\n { logicalName: cfLogicalNames.snsRoleSendSmsFromCognito, resourceType: 'AWS::IAM::Role' },\n { logicalName: cfLogicalNames.userPoolClient, resourceType: 'AWS::Cognito::UserPoolClient' },\n { logicalName: cfLogicalNames.userPoolDomain, resourceType: 'AWS::Cognito::UserPoolDomain' },\n {\n logicalName: cfLogicalNames.cognitoUserPoolDetailsCustomResource,\n resourceType: 'AWS::CloudFormation::CustomResource'\n },\n {\n logicalName: cfLogicalNames.identityProvider,\n resourceType: 'AWS::Cognito::UserPoolIdentityProvider',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.cognitoLambdaHookPermission,\n resourceType: 'AWS::Lambda::Permission',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.userPoolUiCustomizationAttachment,\n resourceType: 'AWS::Cognito::UserPoolUICustomizationAttachment',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.webAppFirewallAssociation,\n resourceType: 'AWS::WAFv2::WebACLAssociation',\n conditional: true\n }\n ],\n\n // ===== UPSTASH REDIS =====\n 'upstash-redis': [\n {\n logicalName: cfLogicalNames.upstashCredentialsProvider,\n resourceType: 'AWS::CloudFormation::CustomResource',\n conditional: true\n },\n { logicalName: cfLogicalNames.upstashRedisDatabase, resourceType: 'Upstash::Redis::Database' }\n ],\n\n // ===== APPLICATION LOAD BALANCER =====\n 'application-load-balancer': [\n { logicalName: cfLogicalNames.loadBalancer, resourceType: 'AWS::ElasticLoadBalancingV2::LoadBalancer' },\n { logicalName: cfLogicalNames.loadBalancerSecurityGroup, resourceType: 'AWS::EC2::SecurityGroup' },\n {\n logicalName: cfLogicalNames.webAppFirewallAssociation,\n resourceType: 'AWS::WAFv2::WebACLAssociation',\n conditional: true\n },\n { logicalName: cfLogicalNames.listener, resourceType: 'AWS::ElasticLoadBalancingV2::Listener', conditional: true },\n {\n logicalName: cfLogicalNames.customResourceDefaultDomain,\n resourceType: 'AWS::CloudFormation::CustomResource',\n conditional: true\n },\n { logicalName: cfLogicalNames.dnsRecord, resourceType: 'AWS::Route53::RecordSet', conditional: true },\n {\n logicalName: cfLogicalNames.cloudfrontOriginAccessIdentity,\n resourceType: 'AWS::CloudFront::CloudFrontOriginAccessIdentity',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.cloudfrontCustomCachePolicy,\n resourceType: 'AWS::CloudFront::CachePolicy',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.cloudfrontDefaultCachePolicy,\n resourceType: 'AWS::CloudFront::CachePolicy',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.cloudfrontCustomOriginRequestPolicy,\n resourceType: 'AWS::CloudFront::OriginRequestPolicy',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.cloudfrontDefaultOriginRequestPolicy,\n resourceType: 'AWS::CloudFront::OriginRequestPolicy',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.cloudfrontDistribution,\n resourceType: 'AWS::CloudFront::Distribution',\n conditional: true\n }\n ],\n\n // ===== NETWORK LOAD BALANCER =====\n 'network-load-balancer': [\n { logicalName: cfLogicalNames.loadBalancer, resourceType: 'AWS::ElasticLoadBalancingV2::LoadBalancer' },\n { logicalName: cfLogicalNames.loadBalancerSecurityGroup, resourceType: 'AWS::EC2::SecurityGroup' },\n { logicalName: cfLogicalNames.listener, resourceType: 'AWS::ElasticLoadBalancingV2::Listener', conditional: true },\n {\n logicalName: cfLogicalNames.customResourceDefaultDomain,\n resourceType: 'AWS::CloudFormation::CustomResource',\n conditional: true\n },\n { logicalName: cfLogicalNames.dnsRecord, resourceType: 'AWS::Route53::RecordSet', conditional: true }\n ],\n\n // ===== HOSTING BUCKET =====\n // Hosting bucket delegates to a bucket resource, so it includes all bucket child resources\n 'hosting-bucket': [\n { logicalName: cfLogicalNames.bucket, resourceType: 'AWS::S3::Bucket' },\n { logicalName: cfLogicalNames.bucketPolicy, resourceType: 'AWS::S3::BucketPolicy', conditional: true },\n {\n logicalName: cfLogicalNames.cloudfrontOriginAccessIdentity,\n resourceType: 'AWS::CloudFront::CloudFrontOriginAccessIdentity',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.cloudfrontCustomCachePolicy,\n resourceType: 'AWS::CloudFront::CachePolicy',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.cloudfrontDefaultCachePolicy,\n resourceType: 'AWS::CloudFront::CachePolicy',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.cloudfrontCustomOriginRequestPolicy,\n resourceType: 'AWS::CloudFront::OriginRequestPolicy',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.cloudfrontDefaultOriginRequestPolicy,\n resourceType: 'AWS::CloudFront::OriginRequestPolicy',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.cloudfrontDistribution,\n resourceType: 'AWS::CloudFront::Distribution',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.customResourceDefaultDomain,\n resourceType: 'AWS::CloudFormation::CustomResource',\n conditional: true\n },\n { logicalName: cfLogicalNames.dnsRecord, resourceType: 'AWS::Route53::RecordSet', conditional: true }\n ],\n\n // ===== WEB APP FIREWALL =====\n 'web-app-firewall': [\n { logicalName: cfLogicalNames.webAppFirewallCustomResource, resourceType: 'AWS::CloudFormation::CustomResource' }\n ],\n\n // ===== OPEN SEARCH DOMAIN =====\n 'open-search-domain': [\n { logicalName: cfLogicalNames.openSearchDomain, resourceType: 'AWS::OpenSearchService::Domain' },\n { logicalName: cfLogicalNames.openSearchSecurityGroup, resourceType: 'AWS::EC2::SecurityGroup', conditional: true },\n {\n logicalName: cfLogicalNames.openSearchDomainLogGroup,\n resourceType: 'AWS::Logs::LogGroup',\n conditional: true,\n unresolvable: true\n },\n {\n logicalName: cfLogicalNames.openSearchCustomResource,\n resourceType: 'AWS::CloudFormation::CustomResource',\n conditional: true\n }\n ],\n\n // ===== EFS FILESYSTEM =====\n 'efs-filesystem': [\n { logicalName: cfLogicalNames.efsFilesystem, resourceType: 'AWS::EFS::FileSystem' },\n { logicalName: cfLogicalNames.efsSecurityGroup, resourceType: 'AWS::EC2::SecurityGroup' },\n {\n logicalName: cfLogicalNames.efsMountTarget,\n resourceType: 'AWS::EFS::MountTarget',\n unresolvable: true\n }\n ],\n\n // ===== NEXTJS WEB =====\n // NextJS web delegates to: bucket, imageFunction, revalidationFunction, revalidationQueue,\n // revalidationTable, revalidationInsertFunction, and optionally serverEdgeFunction or serverFunction\n 'nextjs-web': [\n // NextJS-specific resources\n {\n logicalName: cfLogicalNames.openNextHostHeaderRewriteFunction,\n resourceType: 'AWS::CloudFront::Function'\n },\n {\n logicalName: cfLogicalNames.openNextAssetReplacerCustomResource,\n resourceType: 'AWS::CloudFormation::CustomResource'\n },\n {\n logicalName: cfLogicalNames.openNextDynamoInsertCustomResource,\n resourceType: 'AWS::CloudFormation::CustomResource'\n },\n // From bucket\n { logicalName: cfLogicalNames.bucket, resourceType: 'AWS::S3::Bucket' },\n { logicalName: cfLogicalNames.bucketPolicy, resourceType: 'AWS::S3::BucketPolicy', conditional: true },\n {\n logicalName: cfLogicalNames.cloudfrontOriginAccessIdentity,\n resourceType: 'AWS::CloudFront::CloudFrontOriginAccessIdentity',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.cloudfrontCustomCachePolicy,\n resourceType: 'AWS::CloudFront::CachePolicy',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.cloudfrontDefaultCachePolicy,\n resourceType: 'AWS::CloudFront::CachePolicy',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.cloudfrontCustomOriginRequestPolicy,\n resourceType: 'AWS::CloudFront::OriginRequestPolicy',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.cloudfrontDefaultOriginRequestPolicy,\n resourceType: 'AWS::CloudFront::OriginRequestPolicy',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.cloudfrontDistribution,\n resourceType: 'AWS::CloudFront::Distribution',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.customResourceDefaultDomain,\n resourceType: 'AWS::CloudFormation::CustomResource',\n conditional: true\n },\n { logicalName: cfLogicalNames.dnsRecord, resourceType: 'AWS::Route53::RecordSet', conditional: true },\n // From functions (imageFunction, revalidationFunction, serverFunction, warmerFunction, revalidationInsertFunction)\n { logicalName: cfLogicalNames.lambdaRole, resourceType: 'AWS::IAM::Role' },\n { logicalName: cfLogicalNames.lambda, resourceType: 'AWS::Lambda::Function' },\n { logicalName: cfLogicalNames.lambdaLogGroup, resourceType: 'AWS::Logs::LogGroup', conditional: true },\n { logicalName: cfLogicalNames.lambdaUrl, resourceType: 'AWS::Lambda::Url', conditional: true },\n // From edge function (serverEdgeFunction)\n {\n logicalName: cfLogicalNames.customResourceEdgeLambda,\n resourceType: 'AWS::CloudFormation::CustomResource',\n conditional: true\n },\n // From revalidationQueue\n { logicalName: cfLogicalNames.sqsQueue, resourceType: 'AWS::SQS::Queue' },\n { logicalName: cfLogicalNames.sqsQueuePolicy, resourceType: 'AWS::SQS::QueuePolicy', conditional: true },\n // From revalidationTable\n { logicalName: cfLogicalNames.dynamoGlobalTable, resourceType: 'AWS::DynamoDB::GlobalTable' }\n ],\n\n // ===== MULTI-CONTAINER WORKLOAD =====\n 'multi-container-workload': [\n // Shared global resources (conditional - created only once if not exists)\n { logicalName: cfLogicalNames.ecsExecutionRole, resourceType: 'AWS::IAM::Role', conditional: true },\n { logicalName: cfLogicalNames.ecsAutoScalingRole, resourceType: 'AWS::IAM::Role', conditional: true },\n // Scaling resources (conditional - only if scaling is configured)\n {\n logicalName: cfLogicalNames.autoScalingTarget,\n resourceType: 'AWS::ApplicationAutoScaling::ScalableTarget',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.autoScalingPolicy,\n resourceType: 'AWS::ApplicationAutoScaling::ScalingPolicy',\n conditional: true,\n unresolvable: true\n },\n // EC2-based resources (conditional - only if instanceTypes are configured)\n { logicalName: cfLogicalNames.ecsEc2InstanceRole, resourceType: 'AWS::IAM::Role', conditional: true },\n {\n logicalName: cfLogicalNames.eventBusRoleForScheduledInstanceRefresh,\n resourceType: 'AWS::IAM::Role',\n conditional: true\n },\n { logicalName: cfLogicalNames.ecsEc2InstanceProfile, resourceType: 'AWS::IAM::InstanceProfile', conditional: true },\n {\n logicalName: cfLogicalNames.ecsEc2InstanceLaunchTemplate,\n resourceType: 'AWS::EC2::LaunchTemplate',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.ecsEc2AutoscalingGroup,\n resourceType: 'AWS::AutoScaling::AutoScalingGroup',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.ecsEc2ForceDeleteAutoscalingGroupCustomResource,\n resourceType: 'AWS::CloudFormation::CustomResource',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.ecsEc2CapacityProvider,\n resourceType: 'AWS::ECS::CapacityProvider',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.ecsEc2CapacityProviderAssociation,\n resourceType: 'AWS::ECS::ClusterCapacityProviderAssociations',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.schedulerRuleForScheduledInstanceRefresh,\n resourceType: 'AWS::Scheduler::Schedule',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.ecsEc2AutoscalingGroupWarmPool,\n resourceType: 'AWS::AutoScaling::WarmPool',\n conditional: true\n },\n // Deployment resources (conditional - only if deployment is configured)\n { logicalName: cfLogicalNames.ecsCodeDeployApp, resourceType: 'AWS::CodeDeploy::Application', conditional: true },\n {\n logicalName: cfLogicalNames.codeDeployDeploymentGroup,\n resourceType: 'AWS::CodeDeploy::DeploymentGroup',\n conditional: true\n },\n // Core resources (always present)\n { logicalName: cfLogicalNames.ecsCluster, resourceType: 'AWS::ECS::Cluster' },\n { logicalName: cfLogicalNames.workloadSecurityGroup, resourceType: 'AWS::EC2::SecurityGroup' },\n {\n logicalName: cfLogicalNames.ecsService,\n resourceType: 'AWS::ECS::Service',\n unresolvable: true\n },\n { logicalName: cfLogicalNames.ecsTaskRole, resourceType: 'AWS::IAM::Role' },\n { logicalName: cfLogicalNames.ecsTaskDefinition, resourceType: 'AWS::ECS::TaskDefinition' },\n // Conditional resources\n {\n logicalName: cfLogicalNames.ecsLogGroup,\n resourceType: 'AWS::Logs::LogGroup',\n conditional: true,\n unresolvable: true\n },\n { logicalName: cfLogicalNames.efsAccessPoint, resourceType: 'AWS::EFS::AccessPoint', conditional: true },\n {\n logicalName: cfLogicalNames.atlasMongoUserAssociatedWithRole,\n resourceType: 'MongoDB::StpAtlasV1::DatabaseUser',\n conditional: true\n }\n ],\n\n // ===== SQS QUEUE =====\n 'sqs-queue': [\n { logicalName: cfLogicalNames.sqsQueue, resourceType: 'AWS::SQS::Queue' },\n { logicalName: cfLogicalNames.sqsQueuePolicy, resourceType: 'AWS::SQS::QueuePolicy', conditional: true }\n ],\n\n // ===== SNS TOPIC =====\n 'sns-topic': [{ logicalName: cfLogicalNames.snsTopic, resourceType: 'AWS::SNS::Topic' }],\n\n // ===== BASTION =====\n bastion: [\n {\n logicalName: cfLogicalNames.bastionCloudwatchSsmDocument,\n resourceType: 'AWS::SSM::Document',\n conditional: true\n },\n { logicalName: cfLogicalNames.bastionEc2AutoscalingGroup, resourceType: 'AWS::AutoScaling::AutoScalingGroup' },\n { logicalName: cfLogicalNames.bastionSecurityGroup, resourceType: 'AWS::EC2::SecurityGroup' },\n { logicalName: cfLogicalNames.bastionEc2LaunchTemplate, resourceType: 'AWS::EC2::LaunchTemplate' },\n { logicalName: cfLogicalNames.bastionRole, resourceType: 'AWS::IAM::Role' },\n { logicalName: cfLogicalNames.bastionEc2InstanceProfile, resourceType: 'AWS::IAM::InstanceProfile' },\n { logicalName: cfLogicalNames.bastionCwAgentSsmAssociation, resourceType: 'AWS::SSM::Association' },\n { logicalName: cfLogicalNames.bastionSsmAgentSsmAssociation, resourceType: 'AWS::SSM::Association' },\n {\n logicalName: cfLogicalNames.bastionLogGroup,\n resourceType: 'AWS::Logs::LogGroup',\n conditional: true,\n unresolvable: true\n }\n ],\n\n // ===== EDGE LAMBDA FUNCTION =====\n 'edge-lambda-function': [\n { logicalName: cfLogicalNames.customResourceEdgeLambda, resourceType: 'AWS::CloudFormation::CustomResource' }\n ],\n\n // ===== WEB SERVICE =====\n // Web service delegates to: containerWorkload + optionally (httpApiGateway OR loadBalancer OR networkLoadBalancer)\n 'web-service': [\n // From multi-container-workload - core resources (always present)\n { logicalName: cfLogicalNames.ecsCluster, resourceType: 'AWS::ECS::Cluster' },\n { logicalName: cfLogicalNames.workloadSecurityGroup, resourceType: 'AWS::EC2::SecurityGroup' },\n {\n logicalName: cfLogicalNames.ecsService,\n resourceType: 'AWS::ECS::Service',\n unresolvable: true\n },\n { logicalName: cfLogicalNames.ecsTaskRole, resourceType: 'AWS::IAM::Role' },\n { logicalName: cfLogicalNames.ecsTaskDefinition, resourceType: 'AWS::ECS::TaskDefinition' },\n // From multi-container-workload - conditional resources\n { logicalName: cfLogicalNames.ecsExecutionRole, resourceType: 'AWS::IAM::Role', conditional: true },\n { logicalName: cfLogicalNames.ecsAutoScalingRole, resourceType: 'AWS::IAM::Role', conditional: true },\n {\n logicalName: cfLogicalNames.autoScalingTarget,\n resourceType: 'AWS::ApplicationAutoScaling::ScalableTarget',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.autoScalingPolicy,\n resourceType: 'AWS::ApplicationAutoScaling::ScalingPolicy',\n conditional: true,\n unresolvable: true\n },\n { logicalName: cfLogicalNames.ecsEc2InstanceRole, resourceType: 'AWS::IAM::Role', conditional: true },\n {\n logicalName: cfLogicalNames.eventBusRoleForScheduledInstanceRefresh,\n resourceType: 'AWS::IAM::Role',\n conditional: true\n },\n { logicalName: cfLogicalNames.ecsEc2InstanceProfile, resourceType: 'AWS::IAM::InstanceProfile', conditional: true },\n {\n logicalName: cfLogicalNames.ecsEc2InstanceLaunchTemplate,\n resourceType: 'AWS::EC2::LaunchTemplate',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.ecsEc2AutoscalingGroup,\n resourceType: 'AWS::AutoScaling::AutoScalingGroup',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.ecsEc2ForceDeleteAutoscalingGroupCustomResource,\n resourceType: 'AWS::CloudFormation::CustomResource',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.ecsEc2CapacityProvider,\n resourceType: 'AWS::ECS::CapacityProvider',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.ecsEc2CapacityProviderAssociation,\n resourceType: 'AWS::ECS::ClusterCapacityProviderAssociations',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.schedulerRuleForScheduledInstanceRefresh,\n resourceType: 'AWS::Scheduler::Schedule',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.ecsEc2AutoscalingGroupWarmPool,\n resourceType: 'AWS::AutoScaling::WarmPool',\n conditional: true\n },\n { logicalName: cfLogicalNames.ecsCodeDeployApp, resourceType: 'AWS::CodeDeploy::Application', conditional: true },\n {\n logicalName: cfLogicalNames.codeDeployDeploymentGroup,\n resourceType: 'AWS::CodeDeploy::DeploymentGroup',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.ecsLogGroup,\n resourceType: 'AWS::Logs::LogGroup',\n conditional: true,\n unresolvable: true\n },\n { logicalName: cfLogicalNames.efsAccessPoint, resourceType: 'AWS::EFS::AccessPoint', conditional: true },\n // From application-load-balancer (conditional - only if ALB is used)\n {\n logicalName: cfLogicalNames.loadBalancer,\n resourceType: 'AWS::ElasticLoadBalancingV2::LoadBalancer',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.loadBalancerSecurityGroup,\n resourceType: 'AWS::EC2::SecurityGroup',\n conditional: true\n },\n { logicalName: cfLogicalNames.listener, resourceType: 'AWS::ElasticLoadBalancingV2::Listener', conditional: true },\n {\n logicalName: cfLogicalNames.webAppFirewallAssociation,\n resourceType: 'AWS::WAFv2::WebACLAssociation',\n conditional: true\n },\n // From http-api-gateway (conditional - only if HTTP API Gateway is used, alternative to ALB/NLB)\n { logicalName: cfLogicalNames.httpApi, resourceType: 'AWS::ApiGatewayV2::Api', conditional: true },\n { logicalName: cfLogicalNames.httpApiStage, resourceType: 'AWS::ApiGatewayV2::Stage', conditional: true },\n { logicalName: cfLogicalNames.httpApiLogGroup, resourceType: 'AWS::Logs::LogGroup', conditional: true },\n {\n logicalName: cfLogicalNames.httpApiVpcLinkSecurityGroup,\n resourceType: 'AWS::EC2::SecurityGroup',\n conditional: true\n },\n { logicalName: cfLogicalNames.httpApiVpcLink, resourceType: 'AWS::ApiGatewayV2::VpcLink', conditional: true },\n { logicalName: cfLogicalNames.httpApiDomain, resourceType: 'AWS::ApiGatewayV2::DomainName', conditional: true },\n {\n logicalName: cfLogicalNames.httpApiDomainMapping,\n resourceType: 'AWS::ApiGatewayV2::ApiMapping',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.httpApiDefaultDomain,\n resourceType: 'AWS::ApiGatewayV2::DomainName',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.httpApiDefaultDomainMapping,\n resourceType: 'AWS::ApiGatewayV2::ApiMapping',\n conditional: true\n },\n // Common resources (domains, CDN - all conditional)\n {\n logicalName: cfLogicalNames.customResourceDefaultDomain,\n resourceType: 'AWS::CloudFormation::CustomResource',\n conditional: true\n },\n { logicalName: cfLogicalNames.dnsRecord, resourceType: 'AWS::Route53::RecordSet', conditional: true },\n {\n logicalName: cfLogicalNames.cloudfrontOriginAccessIdentity,\n resourceType: 'AWS::CloudFront::CloudFrontOriginAccessIdentity',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.cloudfrontCustomCachePolicy,\n resourceType: 'AWS::CloudFront::CachePolicy',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.cloudfrontDefaultCachePolicy,\n resourceType: 'AWS::CloudFront::CachePolicy',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.cloudfrontCustomOriginRequestPolicy,\n resourceType: 'AWS::CloudFront::OriginRequestPolicy',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.cloudfrontDefaultOriginRequestPolicy,\n resourceType: 'AWS::CloudFront::OriginRequestPolicy',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.cloudfrontDistribution,\n resourceType: 'AWS::CloudFront::Distribution',\n conditional: true\n }\n ],\n\n // ===== PRIVATE SERVICE =====\n // Private service delegates to: containerWorkload + optionally loadBalancer\n 'private-service': [\n // From multi-container-workload - core resources (always present)\n { logicalName: cfLogicalNames.ecsCluster, resourceType: 'AWS::ECS::Cluster' },\n { logicalName: cfLogicalNames.workloadSecurityGroup, resourceType: 'AWS::EC2::SecurityGroup' },\n {\n logicalName: cfLogicalNames.ecsService,\n resourceType: 'AWS::ECS::Service',\n unresolvable: true\n },\n { logicalName: cfLogicalNames.ecsTaskRole, resourceType: 'AWS::IAM::Role' },\n { logicalName: cfLogicalNames.ecsTaskDefinition, resourceType: 'AWS::ECS::TaskDefinition' },\n // From multi-container-workload - conditional resources\n { logicalName: cfLogicalNames.ecsExecutionRole, resourceType: 'AWS::IAM::Role', conditional: true },\n { logicalName: cfLogicalNames.ecsAutoScalingRole, resourceType: 'AWS::IAM::Role', conditional: true },\n {\n logicalName: cfLogicalNames.autoScalingTarget,\n resourceType: 'AWS::ApplicationAutoScaling::ScalableTarget',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.autoScalingPolicy,\n resourceType: 'AWS::ApplicationAutoScaling::ScalingPolicy',\n conditional: true,\n unresolvable: true\n },\n { logicalName: cfLogicalNames.ecsEc2InstanceRole, resourceType: 'AWS::IAM::Role', conditional: true },\n {\n logicalName: cfLogicalNames.eventBusRoleForScheduledInstanceRefresh,\n resourceType: 'AWS::IAM::Role',\n conditional: true\n },\n { logicalName: cfLogicalNames.ecsEc2InstanceProfile, resourceType: 'AWS::IAM::InstanceProfile', conditional: true },\n {\n logicalName: cfLogicalNames.ecsEc2InstanceLaunchTemplate,\n resourceType: 'AWS::EC2::LaunchTemplate',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.ecsEc2AutoscalingGroup,\n resourceType: 'AWS::AutoScaling::AutoScalingGroup',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.ecsEc2ForceDeleteAutoscalingGroupCustomResource,\n resourceType: 'AWS::CloudFormation::CustomResource',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.ecsEc2CapacityProvider,\n resourceType: 'AWS::ECS::CapacityProvider',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.ecsEc2CapacityProviderAssociation,\n resourceType: 'AWS::ECS::ClusterCapacityProviderAssociations',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.schedulerRuleForScheduledInstanceRefresh,\n resourceType: 'AWS::Scheduler::Schedule',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.ecsEc2AutoscalingGroupWarmPool,\n resourceType: 'AWS::AutoScaling::WarmPool',\n conditional: true\n },\n { logicalName: cfLogicalNames.ecsCodeDeployApp, resourceType: 'AWS::CodeDeploy::Application', conditional: true },\n {\n logicalName: cfLogicalNames.codeDeployDeploymentGroup,\n resourceType: 'AWS::CodeDeploy::DeploymentGroup',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.ecsLogGroup,\n resourceType: 'AWS::Logs::LogGroup',\n conditional: true,\n unresolvable: true\n },\n { logicalName: cfLogicalNames.efsAccessPoint, resourceType: 'AWS::EFS::AccessPoint', conditional: true },\n // From application-load-balancer (conditional - only if ALB is configured)\n {\n logicalName: cfLogicalNames.loadBalancer,\n resourceType: 'AWS::ElasticLoadBalancingV2::LoadBalancer',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.loadBalancerSecurityGroup,\n resourceType: 'AWS::EC2::SecurityGroup',\n conditional: true\n },\n { logicalName: cfLogicalNames.listener, resourceType: 'AWS::ElasticLoadBalancingV2::Listener', conditional: true },\n {\n logicalName: cfLogicalNames.customResourceDefaultDomain,\n resourceType: 'AWS::CloudFormation::CustomResource',\n conditional: true\n },\n { logicalName: cfLogicalNames.dnsRecord, resourceType: 'AWS::Route53::RecordSet', conditional: true }\n ],\n\n // ===== WORKER SERVICE =====\n // Worker service delegates to: containerWorkload only\n 'worker-service': [\n // From multi-container-workload - core resources (always present)\n { logicalName: cfLogicalNames.ecsCluster, resourceType: 'AWS::ECS::Cluster' },\n { logicalName: cfLogicalNames.workloadSecurityGroup, resourceType: 'AWS::EC2::SecurityGroup' },\n {\n logicalName: cfLogicalNames.ecsService,\n resourceType: 'AWS::ECS::Service',\n unresolvable: true\n },\n { logicalName: cfLogicalNames.ecsTaskRole, resourceType: 'AWS::IAM::Role' },\n { logicalName: cfLogicalNames.ecsTaskDefinition, resourceType: 'AWS::ECS::TaskDefinition' },\n // From multi-container-workload - conditional resources\n { logicalName: cfLogicalNames.ecsExecutionRole, resourceType: 'AWS::IAM::Role', conditional: true },\n { logicalName: cfLogicalNames.ecsAutoScalingRole, resourceType: 'AWS::IAM::Role', conditional: true },\n {\n logicalName: cfLogicalNames.autoScalingTarget,\n resourceType: 'AWS::ApplicationAutoScaling::ScalableTarget',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.autoScalingPolicy,\n resourceType: 'AWS::ApplicationAutoScaling::ScalingPolicy',\n conditional: true,\n unresolvable: true\n },\n { logicalName: cfLogicalNames.ecsEc2InstanceRole, resourceType: 'AWS::IAM::Role', conditional: true },\n {\n logicalName: cfLogicalNames.eventBusRoleForScheduledInstanceRefresh,\n resourceType: 'AWS::IAM::Role',\n conditional: true\n },\n { logicalName: cfLogicalNames.ecsEc2InstanceProfile, resourceType: 'AWS::IAM::InstanceProfile', conditional: true },\n {\n logicalName: cfLogicalNames.ecsEc2InstanceLaunchTemplate,\n resourceType: 'AWS::EC2::LaunchTemplate',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.ecsEc2AutoscalingGroup,\n resourceType: 'AWS::AutoScaling::AutoScalingGroup',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.ecsEc2ForceDeleteAutoscalingGroupCustomResource,\n resourceType: 'AWS::CloudFormation::CustomResource',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.ecsEc2CapacityProvider,\n resourceType: 'AWS::ECS::CapacityProvider',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.ecsEc2CapacityProviderAssociation,\n resourceType: 'AWS::ECS::ClusterCapacityProviderAssociations',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.schedulerRuleForScheduledInstanceRefresh,\n resourceType: 'AWS::Scheduler::Schedule',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.ecsEc2AutoscalingGroupWarmPool,\n resourceType: 'AWS::AutoScaling::WarmPool',\n conditional: true\n },\n { logicalName: cfLogicalNames.ecsCodeDeployApp, resourceType: 'AWS::CodeDeploy::Application', conditional: true },\n {\n logicalName: cfLogicalNames.codeDeployDeploymentGroup,\n resourceType: 'AWS::CodeDeploy::DeploymentGroup',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.ecsLogGroup,\n resourceType: 'AWS::Logs::LogGroup',\n conditional: true,\n unresolvable: true\n },\n { logicalName: cfLogicalNames.efsAccessPoint, resourceType: 'AWS::EFS::AccessPoint', conditional: true },\n {\n logicalName: cfLogicalNames.atlasMongoUserAssociatedWithRole,\n resourceType: 'MongoDB::StpAtlasV1::DatabaseUser',\n conditional: true\n }\n ],\n\n // ===== OTHER RESOURCES =====\n 'custom-resource-instance': [],\n 'custom-resource-definition': [],\n 'deployment-script': [],\n 'aws-cdk-construct': []\n};\n", "import { CHILD_RESOURCES } from './child-resources';\n\n// Private symbols for internal methods - not accessible from outside\n// Use Symbol.for() so it can be accessed across modules\nconst getParamReferenceSymbol = Symbol.for('stacktape:getParamReference');\nconst getTypeSymbol = Symbol.for('stacktape:getType');\nconst getPropertiesSymbol = Symbol.for('stacktape:getProperties');\nconst getOverridesSymbol = Symbol.for('stacktape:getOverrides');\n\n/**\n * A reference to a resource parameter that will be resolved at runtime\n */\nexport class ResourceParamReference {\n private __resourceName: string;\n private __param: string;\n\n constructor(resourceName: string, param: string) {\n this.__resourceName = resourceName;\n this.__param = param;\n }\n\n toString(): string {\n return `$ResourceParam('${this.__resourceName}', '${this.__param}')`;\n }\n\n toJSON(): string {\n return this.toString();\n }\n\n // Allow the reference to be used directly in template strings\n valueOf(): string {\n return this.toString();\n }\n}\n\n/**\n * Base class for type/properties structures (engines, packaging, events, etc.)\n */\nexport class BaseTypeProperties {\n public readonly type: string;\n public readonly properties: any;\n\n constructor(type: string, properties: any) {\n this.type = type;\n this.properties = properties;\n }\n}\n\n/**\n * Base resource class that provides common functionality\n */\nexport class BaseResource {\n private readonly _type: string;\n private readonly _properties: any;\n private readonly _overrides?: any;\n private readonly _resourceName: string;\n\n constructor(name: string, type: string, properties: any, overrides?: any) {\n this._resourceName = name;\n this._type = type;\n\n // Extract overrides from properties if present\n let finalProperties = properties;\n let finalOverrides = overrides;\n\n if (properties && typeof properties === 'object' && 'overrides' in properties) {\n // Clone properties without overrides\n finalProperties = { ...properties };\n const propertiesOverrides = finalProperties.overrides;\n delete finalProperties.overrides;\n\n // Transform overrides using cfLogicalNames\n if (propertiesOverrides && typeof propertiesOverrides === 'object') {\n finalOverrides = transformOverridesToLogicalNames(name, type, propertiesOverrides);\n }\n }\n\n this._properties = finalProperties;\n this._overrides = finalOverrides;\n }\n\n // Public getter for resource name (used for referencing resources)\n get resourceName(): string {\n return this._resourceName;\n }\n\n // Private methods using symbols - not accessible from outside or in autocomplete\n [getParamReferenceSymbol](paramName: string): ResourceParamReference {\n return new ResourceParamReference(this._resourceName, paramName);\n }\n\n [getTypeSymbol](): string {\n return this._type;\n }\n\n [getPropertiesSymbol](): any {\n return this._properties;\n }\n\n [getOverridesSymbol](): any | undefined {\n return this._overrides;\n }\n}\n\n/**\n * Transform user-friendly overrides (with property names like 'bucket', 'lambdaLogGroup')\n * to CloudFormation logical names using cfLogicalNames\n */\nfunction transformOverridesToLogicalNames(resourceName: string, resourceType: string, overrides: any): any {\n // Get child resources for this resource type\n const childResources = CHILD_RESOURCES[resourceType] || [];\n\n // Build a map of property names to child resources\n const propertyNameMap = new Map<string, any>();\n\n for (const childResource of childResources) {\n // The logicalName function has a name property that matches the property name\n if (childResource.logicalName && childResource.logicalName.name) {\n propertyNameMap.set(childResource.logicalName.name, childResource);\n }\n }\n\n // Transform overrides object\n const transformedOverrides: any = {};\n const errorMessage = `Override of property {propertyName} of resource ${resourceName} is not supported.\\n\nRemove the override, run 'stacktape compile:template' command, and find the logical name of the resource you want to override manually. Then add it to the overrides object.`;\n\n for (const propertyName in overrides) {\n const childResource = propertyNameMap.get(propertyName);\n\n // Skip unresolvable resources\n if (childResource?.unresolvable) {\n throw new Error(errorMessage.replace('{propertyName}', propertyName));\n }\n\n if (childResource) {\n const logicalNameFn = childResource.logicalName;\n // Call the cfLogicalNames function to get the actual CloudFormation logical name\n // Try with resourceName first (most common), then try without arguments\n let logicalName: string;\n try {\n logicalName = logicalNameFn(resourceName);\n } catch {\n try {\n logicalName = logicalNameFn();\n } catch {\n // If both fail, use property name as-is\n logicalName = propertyName;\n }\n }\n if (logicalName.includes('undefined')) {\n throw new Error(errorMessage.replace('{propertyName}', propertyName));\n }\n transformedOverrides[logicalName] = overrides[propertyName];\n } else {\n // If not found in map, use property name as-is (shouldn't happen with proper types)\n transformedOverrides[propertyName] = overrides[propertyName];\n }\n }\n\n return transformedOverrides;\n}\n\nexport type GetConfigParams = {\n /**\n * Stage (\"environment\") used for this operation\n */\n stage: string;\n /**\n * AWS region used for this operation\n * The list of available regions is available at https://www.aws-services.info/regions.html\n */\n region: string;\n /**\n * List of arguments passed to the operation\n */\n cliArgs: Record<string, boolean | number | string | string[]>;\n /**\n * Stacktape command used to perform this operation (can be either deploy, codebuild:deploy, delete, etc.)\n */\n command: string;\n /**\n * Locally-configured AWS profile used to execute the operation.\n * Doesn't apply if you have your AWS account connected in \"automatic\" mode.\n */\n awsProfile: string;\n /**\n * Information about the user performing the stack operation\n */\n user: {\n id: string;\n name: string;\n email: string;\n };\n};\n\n/**\n * Helper function to define a config with automatic transformation\n * Use this when exporting your config for the Stacktape CLI\n */\nexport const defineConfig = (configFn: (params: GetConfigParams) => any): ((params: GetConfigParams) => any) => {\n return (params: GetConfigParams) => {\n const config = configFn(params);\n return transformConfigWithResources(config);\n };\n};\n\n/**\n * Transforms a config with resource instances into a plain config object\n */\nexport const transformConfigWithResources = (config: any): any => {\n if (!config || typeof config !== 'object') {\n return config;\n }\n\n // Transform the config, marking resources and scripts sections specially\n const result: any = {};\n for (const key in config) {\n if (key === 'resources') {\n // Resources are transformed as definitions\n result[key] = transformResourceDefinitions(config[key]);\n } else if (key === 'scripts') {\n // Scripts are also transformed as definitions\n result[key] = transformScriptDefinitions(config[key]);\n } else {\n result[key] = transformValue(config[key]);\n }\n }\n return result;\n};\n\n/**\n * Transforms environment object to array format\n */\nconst transformEnvironment = (env: any): any => {\n if (!env || typeof env !== 'object' || Array.isArray(env)) {\n return env;\n }\n\n // Convert { KEY: value } to [{ name: 'KEY', value }]\n return Object.entries(env).map(([name, value]) => ({\n name,\n value: transformValue(value)\n }));\n};\n\n/**\n * Transforms resource definitions (values in the resources object)\n */\nconst transformResourceDefinitions = (resources: any): any => {\n if (!resources || typeof resources !== 'object') {\n return resources;\n }\n\n const result: any = {};\n for (const key in resources) {\n const resource = resources[key];\n if (resource instanceof BaseResource) {\n const type = (resource as any)[getTypeSymbol]();\n const properties = (resource as any)[getPropertiesSymbol]();\n const overrides = (resource as any)[getOverridesSymbol]();\n result[key] = {\n type,\n properties: transformValue(properties),\n ...(overrides !== undefined && { overrides: transformValue(overrides) })\n };\n } else {\n result[key] = transformValue(resource);\n }\n }\n return result;\n};\n\n/**\n * Transforms script definitions (values in the scripts object)\n */\nconst transformScriptDefinitions = (scripts: any): any => {\n if (!scripts || typeof scripts !== 'object') {\n return scripts;\n }\n\n const result: any = {};\n for (const key in scripts) {\n const script = scripts[key];\n if (script instanceof BaseTypeProperties) {\n result[key] = {\n type: script.type,\n properties: transformValue(script.properties)\n };\n } else {\n result[key] = transformValue(script);\n }\n }\n return result;\n};\n\nexport const transformValue = (value: any): any => {\n if (value === null || value === undefined) {\n return value;\n }\n\n // Transform ResourceParamReference\n if (value instanceof ResourceParamReference) {\n return value.toString();\n }\n\n // Transform BaseResource references (not definitions) to resourceName\n // This handles cases like connectTo: [database]\n if (value instanceof BaseResource) {\n return value.resourceName;\n }\n\n // Transform BaseTypeProperties (engines, packaging, events) to plain object\n if (value instanceof BaseTypeProperties) {\n return {\n type: value.type,\n properties: transformValue(value.properties)\n };\n }\n\n // Transform arrays\n if (Array.isArray(value)) {\n return value.map((item) => {\n // If it's a resource instance in an array (e.g., connectTo), transform to resourceName\n if (item instanceof BaseResource) {\n return item.resourceName;\n }\n return transformValue(item);\n });\n }\n\n // Transform objects\n if (typeof value === 'object') {\n const result: any = {};\n for (const key in value) {\n // Special handling for environment property\n if (key === 'environment') {\n result[key] = transformEnvironment(value[key]);\n } else {\n result[key] = transformValue(value[key]);\n }\n }\n return result;\n }\n\n return value;\n};\n", "/**\n * Returns a reference to a resource parameter.\n * @param resourceName - The name of the resource as specified in the Stacktape config.\n * @param property - The property of the resource. The list of properties is available in the Stacktape docs for every given resource type.\n */\nexport const $ResourceParam = (resourceName: string, property: string) => {\n return `$ResourceParam('${resourceName}','${property}')`;\n};\n\n/**\n * Returns a reference to a CloudFormation resource parameter.\n * @param cloudformationResourceLogicalId - The logical name of the Cloudformation resource.\n * If you are referencing a resource defined in the cloudformationResources section, use its name.\n * To reference a child resource of a Stacktape resource, you can get a list of child resources with the `stacktape stack-info` command\n * @param property - The parameter of the Cloudformation resource to reference.\n * For a list of all referenceable parameters, refer to the [Referencing parameters](https://docs.stacktape.com/configuration/referencing-parameters#parameters-of-cloudformation-resources) section in the Stacktape docs.\n */\nexport const $CfResourceParam = (cloudformationResourceLogicalId: string, property: string) => {\n return `$CfResourceParam('${cloudformationResourceLogicalId}','${property}')`;\n};\n\n/**\n * Returns a reference to a secret.\n * @param secretName - The name of the secret. Must be a valid secret name in the AWS Secrets Manager in the region you're deploying to.\n * If the secret is in JSON format, you can extract nested properties using dot notation.\n * Example: `$Secret('my-secret.api-key')` will return the value of the `api-key` property in the `my-secret` secret.\n */\nexport const $Secret = (secretName: string) => {\n return `$Secret('${secretName}')`;\n};\n\n/**\n * Returns an interpolated string. Unlike the $Format() directive, the $CfFormat() directive can contain runtime-resolved directives as arguments.\n * @param interpolatedString - Occurrences of {} are replaced by the subsequent arguments.\n * @param values - The number of values must be equal to the number of {} placeholders in the first argument.\n * Example:\n * `$CfFormat('{}-{}', 'foo', 'bar')` results in `foo-bar`.\n * $CfFormat('{}-mydomain.com', 'foo') results in foo-mydomain.com.\n * `$CfFormat('{}.mydomain.com', $Stage())` results in `staging.mydomain.com` if the stage is staging.\n */\nexport const $CfFormat = (interpolatedString: string, ...values: any[]) => {\n return `$CfFormat('${interpolatedString}', '${values.join(',')}')`;\n};\n\n/**\n * Returns the output of another stack, allowing you to reference resources deployed in another stack. The referenced stack must already be deployed. If you try to delete a stack that is referenced by another stack, you will get an error.\n * To get the output locally (i.e., download the value and pass it to the configuration), use the $StackOutput() directive.\n * @param stackName - The name of the stack.\n * @param outputName - The name of the output.\n */\nexport const $CfStackOutput = (stackName: string, outputName: string) => {\n return `$CfStackOutput('${stackName}','${outputName}')`;\n};\n\n/**\n * Returns information about the current Git repository.\n *\n * $GitInfo().sha1 - SHA-1 of the latest commit\n *\n * $GitInfo().commit - The latest commit ID\n *\n * $GitInfo().branch - The name of the current branch\n *\n * $GitInfo().message - The message of the last commit\n *\n * $GitInfo().user - Git user's name\n *\n * $GitInfo().email - Git user's email\n *\n * $GitInfo().repository - The name of the git repository\n *\n * $GitInfo().tags - The tags pointing to the current commit\n *\n * $GitInfo().describe - The most recent tag that is reachable from a commit\n */\nexport const $GitInfo = () => {\n return '$GitInfo()';\n};\n", "/**\n * AWS SES (Simple Email Service) reference for connectTo\n * Grants full permissions for AWS SES (ses:*)\n */\nexport const AWS_SES = 'aws:ses' as const;\n\n/**\n * Type that represents any AWS service constant\n */\nexport type GlobalAwsServiceConstant = typeof AWS_SES;\n", "/**\n * Central metadata registry for all Stacktape resources.\n * This is the single source of truth for resource metadata.\n *\n * When adding a new resource:\n * 1. Add it to the RESOURCES array below with its connectTo configuration\n * 2. Add its referenceable params to the REFERENCEABLE_PARAMS object\n * 3. Ensure child resources are defined in child-resources.ts\n * 4. That's it! The types will be generated automatically.\n */\n\nexport type ResourceTypeName =\n | 'RelationalDatabase'\n | 'WebService'\n | 'PrivateService'\n | 'WorkerService'\n | 'ContainerWorkload'\n | 'LambdaFunction'\n | 'BatchJob'\n | 'Bucket'\n | 'HostingBucket'\n | 'DynamoDbTable'\n | 'EventBus'\n | 'HttpApiGateway'\n | 'ApplicationLoadBalancer'\n | 'NetworkLoadBalancer'\n | 'RedisCluster'\n | 'MongoDbAtlasCluster'\n | 'StateMachine'\n | 'UserAuthPool'\n | 'UpstashRedis'\n | 'SqsQueue'\n | 'SnsTopic'\n | 'WebAppFirewall'\n | 'OpenSearchDomain'\n | 'EfsFilesystem'\n | 'NextjsWeb'\n | 'Bastion';\n\nexport type ResourceDefinition = {\n /** Class name for the resource (e.g., 'LambdaFunction') */\n className: ResourceTypeName;\n /** Resource type identifier used in config (e.g., 'function') */\n resourceType: string;\n /** Props type name (e.g., 'LambdaFunctionProps') */\n propsType: string;\n /** Resources and AWS services this resource can connect to */\n canConnectTo?: ResourceTypeName[] | 'GlobalAwsServiceConstant'[];\n /** Whether this resource supports overrides (default: true) */\n supportsOverrides?: boolean;\n /** Whether this resource has augmented connectTo/environment props (default: false) */\n hasAugmentedProps?: boolean;\n};\n\n/**\n * Complete list of all Stacktape resources.\n * This is the single source of truth - all code generation derives from this.\n */\nexport const RESOURCES: ResourceDefinition[] = [\n {\n className: 'RelationalDatabase',\n resourceType: 'relational-database',\n propsType: 'RelationalDatabaseProps',\n canConnectTo: []\n },\n {\n className: 'WebService',\n resourceType: 'web-service',\n propsType: 'WebServiceProps',\n hasAugmentedProps: true,\n canConnectTo: [\n 'RelationalDatabase',\n 'Bucket',\n 'HostingBucket',\n 'DynamoDbTable',\n 'EventBus',\n 'RedisCluster',\n 'MongoDbAtlasCluster',\n 'UpstashRedis',\n 'SqsQueue',\n 'SnsTopic',\n 'OpenSearchDomain',\n 'EfsFilesystem',\n 'PrivateService'\n ]\n },\n {\n className: 'PrivateService',\n resourceType: 'private-service',\n propsType: 'PrivateServiceProps',\n hasAugmentedProps: true,\n canConnectTo: [\n 'RelationalDatabase',\n 'Bucket',\n 'HostingBucket',\n 'DynamoDbTable',\n 'EventBus',\n 'RedisCluster',\n 'MongoDbAtlasCluster',\n 'UpstashRedis',\n 'SqsQueue',\n 'SnsTopic',\n 'OpenSearchDomain',\n 'EfsFilesystem'\n ]\n },\n {\n className: 'WorkerService',\n resourceType: 'worker-service',\n propsType: 'WorkerServiceProps',\n hasAugmentedProps: true,\n canConnectTo: [\n 'RelationalDatabase',\n 'Bucket',\n 'HostingBucket',\n 'DynamoDbTable',\n 'EventBus',\n 'RedisCluster',\n 'MongoDbAtlasCluster',\n 'UpstashRedis',\n 'SqsQueue',\n 'SnsTopic',\n 'OpenSearchDomain',\n 'EfsFilesystem'\n ]\n },\n {\n className: 'ContainerWorkload',\n resourceType: 'multi-container-workload',\n propsType: 'ContainerWorkloadProps',\n hasAugmentedProps: true,\n canConnectTo: [\n 'RelationalDatabase',\n 'Bucket',\n 'HostingBucket',\n 'DynamoDbTable',\n 'EventBus',\n 'RedisCluster',\n 'MongoDbAtlasCluster',\n 'UpstashRedis',\n 'SqsQueue',\n 'SnsTopic',\n 'OpenSearchDomain',\n 'EfsFilesystem'\n ]\n },\n {\n className: 'LambdaFunction',\n resourceType: 'function',\n propsType: 'LambdaFunctionProps',\n hasAugmentedProps: true,\n canConnectTo: [\n 'RelationalDatabase',\n 'Bucket',\n 'HostingBucket',\n 'DynamoDbTable',\n 'EventBus',\n 'RedisCluster',\n 'MongoDbAtlasCluster',\n 'UpstashRedis',\n 'SqsQueue',\n 'SnsTopic',\n 'OpenSearchDomain',\n 'EfsFilesystem',\n 'PrivateService',\n 'WebService'\n ]\n },\n {\n className: 'BatchJob',\n resourceType: 'batch-job',\n propsType: 'BatchJobProps',\n hasAugmentedProps: true,\n canConnectTo: [\n 'RelationalDatabase',\n 'Bucket',\n 'HostingBucket',\n 'DynamoDbTable',\n 'EventBus',\n 'RedisCluster',\n 'MongoDbAtlasCluster',\n 'UpstashRedis',\n 'SqsQueue',\n 'SnsTopic',\n 'OpenSearchDomain',\n 'EfsFilesystem'\n ]\n },\n {\n className: 'Bucket',\n resourceType: 'bucket',\n propsType: 'BucketProps',\n canConnectTo: []\n },\n {\n className: 'HostingBucket',\n resourceType: 'hosting-bucket',\n propsType: 'HostingBucketProps',\n canConnectTo: []\n },\n {\n className: 'DynamoDbTable',\n resourceType: 'dynamo-db-table',\n propsType: 'DynamoDbTableProps',\n canConnectTo: []\n },\n {\n className: 'EventBus',\n resourceType: 'event-bus',\n propsType: 'EventBusProps',\n canConnectTo: []\n },\n {\n className: 'HttpApiGateway',\n resourceType: 'http-api-gateway',\n propsType: 'HttpApiGatewayProps',\n canConnectTo: []\n },\n {\n className: 'ApplicationLoadBalancer',\n resourceType: 'application-load-balancer',\n propsType: 'ApplicationLoadBalancerProps',\n canConnectTo: []\n },\n {\n className: 'NetworkLoadBalancer',\n resourceType: 'network-load-balancer',\n propsType: 'NetworkLoadBalancerProps',\n canConnectTo: []\n },\n {\n className: 'RedisCluster',\n resourceType: 'redis-cluster',\n propsType: 'RedisClusterProps',\n canConnectTo: []\n },\n {\n className: 'MongoDbAtlasCluster',\n resourceType: 'mongo-db-atlas-cluster',\n propsType: 'MongoDbAtlasClusterProps',\n supportsOverrides: false,\n canConnectTo: []\n },\n {\n className: 'StateMachine',\n resourceType: 'state-machine',\n propsType: 'StateMachineProps',\n hasAugmentedProps: true,\n canConnectTo: ['LambdaFunction', 'BatchJob']\n },\n {\n className: 'UserAuthPool',\n resourceType: 'user-auth-pool',\n propsType: 'UserAuthPoolProps',\n canConnectTo: []\n },\n {\n className: 'UpstashRedis',\n resourceType: 'upstash-redis',\n propsType: 'UpstashRedisProps',\n supportsOverrides: false,\n canConnectTo: []\n },\n {\n className: 'SqsQueue',\n resourceType: 'sqs-queue',\n propsType: 'SqsQueueProps',\n canConnectTo: []\n },\n {\n className: 'SnsTopic',\n resourceType: 'sns-topic',\n propsType: 'SnsTopicProps',\n canConnectTo: []\n },\n {\n className: 'WebAppFirewall',\n resourceType: 'web-app-firewall',\n propsType: 'WebAppFirewallProps',\n canConnectTo: []\n },\n {\n className: 'OpenSearchDomain',\n resourceType: 'open-search-domain',\n propsType: 'OpenSearchDomainProps',\n canConnectTo: []\n },\n {\n className: 'EfsFilesystem',\n resourceType: 'efs-filesystem',\n propsType: 'EfsFilesystemProps',\n canConnectTo: []\n },\n {\n className: 'NextjsWeb',\n resourceType: 'nextjs-web',\n propsType: 'NextjsWebProps',\n canConnectTo: []\n },\n {\n className: 'Bastion',\n resourceType: 'bastion',\n propsType: 'BastionProps',\n canConnectTo: []\n }\n];\n\n/**\n * Type properties (engines, packaging, events, integrations, etc.)\n * These are used for database engines, lambda packaging, lambda events, etc.\n */\nexport type TypePropertiesDefinition = {\n /** Class name (e.g., 'StacktapeLambdaBuildpackPackaging') */\n className: string;\n /** Type value that appears in the 'type' field (e.g., 'stacktape-lambda-buildpack') */\n typeValue: string;\n /** Props type name (e.g., 'StpBuildpackLambdaPackagingProps') */\n propsType: string;\n};\n\nexport const TYPE_PROPERTIES: TypePropertiesDefinition[] = [\n // Database Engines\n { className: 'RdsEnginePostgres', typeValue: 'postgres', propsType: 'RdsEngineProperties' },\n { className: 'RdsEngineMariadb', typeValue: 'mariadb', propsType: 'RdsEngineProperties' },\n { className: 'RdsEngineMysql', typeValue: 'mysql', propsType: 'RdsEngineProperties' },\n { className: 'RdsEngineOracleEE', typeValue: 'oracle-ee', propsType: 'RdsEngineProperties' },\n { className: 'RdsEngineOracleSE2', typeValue: 'oracle-se2', propsType: 'RdsEngineProperties' },\n { className: 'RdsEngineSqlServerEE', typeValue: 'sqlserver-ee', propsType: 'RdsEngineProperties' },\n { className: 'RdsEngineSqlServerEX', typeValue: 'sqlserver-ex', propsType: 'RdsEngineProperties' },\n { className: 'RdsEngineSqlServerSE', typeValue: 'sqlserver-se', propsType: 'RdsEngineProperties' },\n { className: 'RdsEngineSqlServerWeb', typeValue: 'sqlserver-web', propsType: 'RdsEngineProperties' },\n { className: 'AuroraEnginePostgresql', typeValue: 'aurora-postgresql', propsType: 'AuroraEngineProperties' },\n { className: 'AuroraEngineMysql', typeValue: 'aurora-mysql', propsType: 'AuroraEngineProperties' },\n {\n className: 'AuroraServerlessEnginePostgresql',\n typeValue: 'aurora-postgresql-serverless',\n propsType: 'AuroraServerlessEngineProperties'\n },\n {\n className: 'AuroraServerlessEngineMysql',\n typeValue: 'aurora-mysql-serverless',\n propsType: 'AuroraServerlessEngineProperties'\n },\n {\n className: 'AuroraServerlessV2EnginePostgresql',\n typeValue: 'aurora-postgresql-serverless-v2',\n propsType: 'AuroraServerlessV2EngineProperties'\n },\n {\n className: 'AuroraServerlessV2EngineMysql',\n typeValue: 'aurora-mysql-serverless-v2',\n propsType: 'AuroraServerlessV2EngineProperties'\n },\n\n // Lambda Packaging\n {\n className: 'StacktapeLambdaBuildpackPackaging',\n typeValue: 'stacktape-lambda-buildpack',\n propsType: 'StpBuildpackLambdaPackagingProps'\n },\n {\n className: 'CustomArtifactLambdaPackaging',\n typeValue: 'custom-artifact',\n propsType: 'CustomArtifactLambdaPackagingProps'\n },\n\n // Container Packaging\n { className: 'PrebuiltImagePackaging', typeValue: 'prebuilt-image', propsType: 'PrebuiltImageCwPackagingProps' },\n {\n className: 'CustomDockerfilePackaging',\n typeValue: 'custom-dockerfile',\n propsType: 'CustomDockerfileCwImagePackagingProps'\n },\n {\n className: 'ExternalBuildpackPackaging',\n typeValue: 'external-buildpack',\n propsType: 'ExternalBuildpackCwImagePackagingProps'\n },\n { className: 'NixpacksPackaging', typeValue: 'nixpacks', propsType: 'NixpacksCwImagePackagingProps' },\n {\n className: 'StacktapeImageBuildpackPackaging',\n typeValue: 'stacktape-image-buildpack',\n propsType: 'StpBuildpackCwImagePackagingProps'\n },\n\n // Lambda Function Events/Integrations\n { className: 'HttpApiIntegration', typeValue: 'http-api-gateway', propsType: 'HttpApiIntegrationProps' },\n { className: 'S3Integration', typeValue: 's3', propsType: 'S3IntegrationProps' },\n { className: 'ScheduleIntegration', typeValue: 'schedule', propsType: 'ScheduleIntegrationProps' },\n { className: 'SnsIntegration', typeValue: 'sns', propsType: 'SnsIntegrationProps' },\n { className: 'SqsIntegration', typeValue: 'sqs', propsType: 'SqsIntegrationProps' },\n { className: 'KinesisIntegration', typeValue: 'kinesis', propsType: 'KinesisIntegrationProps' },\n { className: 'DynamoDbIntegration', typeValue: 'dynamodb', propsType: 'DynamoDbIntegrationProps' },\n {\n className: 'CloudwatchLogIntegration',\n typeValue: 'cloudwatch-logs',\n propsType: 'CloudwatchLogIntegrationProps'\n },\n {\n className: 'ApplicationLoadBalancerIntegration',\n typeValue: 'application-load-balancer',\n propsType: 'ApplicationLoadBalancerIntegrationProps'\n },\n { className: 'EventBusIntegration', typeValue: 'event-bus', propsType: 'EventBusIntegrationProps' },\n { className: 'KafkaTopicIntegration', typeValue: 'kafka-topic', propsType: 'KafkaTopicIntegrationProps' },\n { className: 'AlarmIntegration', typeValue: 'alarm', propsType: 'AlarmIntegrationProps' },\n\n // CDN Routes\n { className: 'CdnLoadBalancerRoute', typeValue: 'application-load-balancer', propsType: 'CdnLoadBalancerOrigin' },\n { className: 'CdnHttpApiGatewayRoute', typeValue: 'http-api-gateway', propsType: 'CdnHttpApiGatewayOrigin' },\n { className: 'CdnLambdaFunctionRoute', typeValue: 'function', propsType: 'CdnLambdaFunctionOrigin' },\n { className: 'CdnCustomDomainRoute', typeValue: 'custom-origin', propsType: 'CdnCustomOrigin' },\n { className: 'CdnBucketRoute', typeValue: 'bucket', propsType: 'CdnBucketOrigin' },\n\n // Web App Firewall Rules\n { className: 'ManagedRuleGroup', typeValue: 'managed-rule-group', propsType: 'ManagedRuleGroupProps' },\n { className: 'CustomRuleGroup', typeValue: 'custom-rule-group', propsType: 'CustomRuleGroupProps' },\n { className: 'RateBasedRule', typeValue: 'rate-based-rule', propsType: 'RateBasedStatementProps' },\n\n // SQS Queue Integrations\n {\n className: 'SqsQueueEventBusIntegration',\n typeValue: 'event-bus',\n propsType: 'SqsQueueEventBusIntegrationProps'\n },\n\n // Container Workload Integrations\n {\n className: 'ContainerWorkloadHttpApiIntegration',\n typeValue: 'http-api-gateway',\n propsType: 'ContainerWorkloadHttpApiIntegrationProps'\n },\n {\n className: 'ContainerWorkloadInternalIntegration',\n typeValue: 'internal',\n propsType: 'ContainerWorkloadInternalIntegrationProps'\n },\n {\n className: 'ContainerWorkloadServiceConnectIntegration',\n typeValue: 'service-connect',\n propsType: 'ContainerWorkloadServiceConnectIntegrationProps'\n },\n\n // Scripts\n { className: 'LocalScriptWithCommand', typeValue: 'local-script', propsType: 'LocalScriptProps' },\n { className: 'LocalScriptWithCommands', typeValue: 'local-script', propsType: 'LocalScriptProps' },\n { className: 'LocalScriptWithFileScript', typeValue: 'local-script', propsType: 'LocalScriptProps' },\n { className: 'LocalScriptWithFileScripts', typeValue: 'local-script', propsType: 'LocalScriptProps' },\n { className: 'BastionScriptWithCommand', typeValue: 'bastion-script', propsType: 'BastionScriptProps' },\n { className: 'BastionScriptWithCommands', typeValue: 'bastion-script', propsType: 'BastionScriptProps' },\n {\n className: 'LocalScriptWithBastionTunnelingCommand',\n typeValue: 'local-script-with-bastion-tunneling',\n propsType: 'LocalScriptWithBastionTunnelingProps'\n },\n {\n className: 'LocalScriptWithBastionTunnelingCommands',\n typeValue: 'local-script-with-bastion-tunneling',\n propsType: 'LocalScriptWithBastionTunnelingProps'\n },\n {\n className: 'LocalScriptWithBastionTunnelingFileScript',\n typeValue: 'local-script-with-bastion-tunneling',\n propsType: 'LocalScriptWithBastionTunnelingProps'\n },\n {\n className: 'LocalScriptWithBastionTunnelingFileScripts',\n typeValue: 'local-script-with-bastion-tunneling',\n propsType: 'LocalScriptWithBastionTunnelingProps'\n },\n\n // Log Forwarding\n {\n className: 'HttpEndpointLogForwarding',\n typeValue: 'http-endpoint',\n propsType: 'HttpEndpointLogForwardingProps'\n },\n { className: 'HighlightLogForwarding', typeValue: 'highlight', propsType: 'HighlightLogForwardingProps' },\n { className: 'DatadogLogForwarding', typeValue: 'datadog', propsType: 'DatadogLogForwardingProps' },\n\n // Bucket Lifecycle Rules\n { className: 'ExpirationLifecycleRule', typeValue: 'expiration', propsType: 'ExpirationProps' },\n {\n className: 'NonCurrentVersionExpirationLifecycleRule',\n typeValue: 'non-current-version-expiration',\n propsType: 'NonCurrentVersionExpirationProps'\n },\n\n // EFS Mounts\n { className: 'ContainerEfsMount', typeValue: 'efs', propsType: 'ContainerEfsMountProps' },\n { className: 'LambdaEfsMount', typeValue: 'efs', propsType: 'LambdaEfsMountProps' }\n];\n\n/**\n * Referenceable parameters for each resource type.\n * These are runtime-accessible properties that can be referenced using $ResourceParam directive.\n */\nexport const REFERENCEABLE_PARAMS: Record<string, Array<{ name: string; description: string }>> = {\n 'relational-database': [\n { name: 'connectionString', description: 'Connection string for the database' },\n { name: 'jdbcConnectionString', description: 'JDBC connection string' },\n { name: 'host', description: 'Database host' },\n { name: 'port', description: 'Database port' },\n { name: 'dbName', description: 'Database name' },\n { name: 'readerHost', description: 'Reader endpoint host' },\n { name: 'readerConnectionString', description: 'Reader connection string' },\n { name: 'readerJdbcConnectionString', description: 'Reader JDBC connection string' }\n ],\n 'web-service': [\n { name: 'domain', description: 'Web service domain' },\n { name: 'url', description: 'Web service URL' },\n { name: 'customDomains', description: 'Custom domains' },\n { name: 'customDomainUrls', description: 'Custom domain URLs' }\n ],\n 'private-service': [{ name: 'address', description: 'Private service address' }],\n bucket: [\n { name: 'name', description: 'Bucket name' },\n { name: 'arn', description: 'Bucket ARN' }\n ],\n 'dynamo-db-table': [\n { name: 'name', description: 'Table name' },\n { name: 'arn', description: 'Table ARN' },\n { name: 'streamArn', description: 'Stream ARN' }\n ],\n function: [\n { name: 'arn', description: 'Function ARN' },\n { name: 'logGroupArn', description: 'Log group ARN' }\n ],\n 'batch-job': [\n { name: 'jobDefinitionArn', description: 'Job definition ARN' },\n { name: 'stateMachineArn', description: 'State machine ARN' },\n { name: 'logGroupArn', description: 'Log group ARN' }\n ],\n 'event-bus': [\n { name: 'arn', description: 'Event bus ARN' },\n { name: 'archiveArn', description: 'Archive ARN' }\n ],\n 'http-api-gateway': [\n { name: 'domain', description: 'API Gateway domain' },\n { name: 'url', description: 'API Gateway URL' },\n { name: 'customDomains', description: 'Custom domains' },\n { name: 'customDomainUrls', description: 'Custom domain URLs' },\n { name: 'customDomainUrl', description: 'First custom domain URL' }\n ],\n 'mongo-db-atlas-cluster': [{ name: 'connectionString', description: 'MongoDB connection string' }],\n 'redis-cluster': [\n { name: 'host', description: 'Redis host' },\n { name: 'readerHost', description: 'Redis reader host' },\n { name: 'port', description: 'Redis port' },\n { name: 'sharding', description: 'Sharding status' }\n ],\n 'state-machine': [\n { name: 'arn', description: 'State machine ARN' },\n { name: 'name', description: 'State machine name' }\n ],\n 'user-auth-pool': [\n { name: 'id', description: 'User pool ID' },\n { name: 'clientId', description: 'Client ID' },\n { name: 'domain', description: 'User pool domain' }\n ],\n 'upstash-redis': [\n { name: 'host', description: 'Upstash Redis host' },\n { name: 'port', description: 'Upstash Redis port' },\n { name: 'password', description: 'Password' },\n { name: 'restToken', description: 'REST token' },\n { name: 'readOnlyRestToken', description: 'Read-only REST token' },\n { name: 'restUrl', description: 'REST URL' },\n { name: 'redisUrl', description: 'Redis URL' }\n ],\n 'application-load-balancer': [\n { name: 'domain', description: 'Load balancer domain' },\n { name: 'customDomains', description: 'Custom domains' }\n ],\n 'network-load-balancer': [\n { name: 'domain', description: 'Load balancer domain' },\n { name: 'customDomains', description: 'Custom domains' }\n ],\n 'hosting-bucket': [\n { name: 'name', description: 'Bucket name' },\n { name: 'arn', description: 'Bucket ARN' }\n ],\n 'web-app-firewall': [\n { name: 'arn', description: 'Firewall ARN' },\n { name: 'scope', description: 'Firewall scope' }\n ],\n 'open-search-domain': [\n { name: 'domainEndpoint', description: 'OpenSearch domain endpoint' },\n { name: 'arn', description: 'Domain ARN' }\n ],\n 'efs-filesystem': [\n { name: 'arn', description: 'EFS ARN' },\n { name: 'id', description: 'EFS ID' }\n ],\n 'nextjs-web': [{ name: 'url', description: 'Website URL' }]\n};\n\n// Helper functions\nexport function getResourceByClassName(className: string): ResourceDefinition | undefined {\n return RESOURCES.find((r) => r.className === className);\n}\n\nexport function getResourceByType(resourceType: string): ResourceDefinition | undefined {\n return RESOURCES.find((r) => r.resourceType === resourceType);\n}\n\nexport function getResourcesWithAugmentedProps(): ResourceDefinition[] {\n return RESOURCES.filter((r) => r.hasAugmentedProps);\n}\n\nexport function getResourcesWithOverrides(): ResourceDefinition[] {\n return RESOURCES.filter((r) => r.supportsOverrides !== false);\n}\n", "import { BaseResource } from './config';\nimport { REFERENCEABLE_PARAMS } from './resource-metadata';\n\n// Private symbol for accessing the internal param reference method\nconst getParamReferenceSymbol = Symbol.for('stacktape:getParamReference');\n\n/**\n * Factory function to create a resource class with referenceable parameters\n */\nfunction createResourceClass(className: string, resourceType: string): any {\n // Create the class dynamically\n const ResourceClass = class extends BaseResource {\n constructor(name: string, properties: any, overrides?: any) {\n super(name, resourceType, properties, overrides);\n }\n };\n\n // Set the class name for better debugging\n Object.defineProperty(ResourceClass, 'name', { value: className });\n\n // Add referenceable parameter getters\n const referenceableParams = REFERENCEABLE_PARAMS[resourceType] || [];\n for (const param of referenceableParams) {\n Object.defineProperty(ResourceClass.prototype, param.name, {\n get(this: BaseResource) {\n return (this as any)[getParamReferenceSymbol](param.name);\n },\n enumerable: false,\n configurable: true\n });\n }\n\n return ResourceClass;\n}\n\n// ==================== RESOURCE CLASSES ====================\n\nexport const RelationalDatabase = createResourceClass('RelationalDatabase', 'relational-database');\nexport const WebService = createResourceClass('WebService', 'web-service');\nexport const PrivateService = createResourceClass('PrivateService', 'private-service');\nexport const WorkerService = createResourceClass('WorkerService', 'worker-service');\nexport const ContainerWorkload = createResourceClass('ContainerWorkload', 'multi-container-workload');\nexport const LambdaFunction = createResourceClass('LambdaFunction', 'function');\nexport const BatchJob = createResourceClass('BatchJob', 'batch-job');\nexport const Bucket = createResourceClass('Bucket', 'bucket');\nexport const HostingBucket = createResourceClass('HostingBucket', 'hosting-bucket');\nexport const DynamoDbTable = createResourceClass('DynamoDbTable', 'dynamo-db-table');\nexport const EventBus = createResourceClass('EventBus', 'event-bus');\nexport const HttpApiGateway = createResourceClass('HttpApiGateway', 'http-api-gateway');\nexport const ApplicationLoadBalancer = createResourceClass('ApplicationLoadBalancer', 'application-load-balancer');\nexport const NetworkLoadBalancer = createResourceClass('NetworkLoadBalancer', 'network-load-balancer');\nexport const RedisCluster = createResourceClass('RedisCluster', 'redis-cluster');\nexport const MongoDbAtlasCluster = createResourceClass('MongoDbAtlasCluster', 'mongo-db-atlas-cluster');\nexport const StateMachine = createResourceClass('StateMachine', 'state-machine');\nexport const UserAuthPool = createResourceClass('UserAuthPool', 'user-auth-pool');\nexport const UpstashRedis = createResourceClass('UpstashRedis', 'upstash-redis');\nexport const SqsQueue = createResourceClass('SqsQueue', 'sqs-queue');\nexport const SnsTopic = createResourceClass('SnsTopic', 'sns-topic');\nexport const WebAppFirewall = createResourceClass('WebAppFirewall', 'web-app-firewall');\nexport const OpenSearchDomain = createResourceClass('OpenSearchDomain', 'open-search-domain');\nexport const EfsFilesystem = createResourceClass('EfsFilesystem', 'efs-filesystem');\nexport const NextjsWeb = createResourceClass('NextjsWeb', 'nextjs-web');\nexport const Bastion = createResourceClass('Bastion', 'bastion');\n", "import { BaseTypeProperties } from './config';\n\n/**\n * Factory function to create a type/properties class\n */\nfunction createTypePropertiesClass(className: string, typeValue: string): any {\n const TypePropertiesClass = class extends BaseTypeProperties {\n constructor(properties: any) {\n super(typeValue, properties);\n }\n };\n\n Object.defineProperty(TypePropertiesClass, 'name', { value: className });\n return TypePropertiesClass;\n}\n\n// ==================== DATABASE ENGINES ====================\n\nexport const RdsEnginePostgres = createTypePropertiesClass('RdsEnginePostgres', 'postgres');\nexport const RdsEngineMariadb = createTypePropertiesClass('RdsEngineMariadb', 'mariadb');\nexport const RdsEngineMysql = createTypePropertiesClass('RdsEngineMysql', 'mysql');\nexport const RdsEngineOracleEE = createTypePropertiesClass('RdsEngineOracleEE', 'oracle-ee');\nexport const RdsEngineOracleSE2 = createTypePropertiesClass('RdsEngineOracleSE2', 'oracle-se2');\nexport const RdsEngineSqlServerEE = createTypePropertiesClass('RdsEngineSqlServerEE', 'sqlserver-ee');\nexport const RdsEngineSqlServerEX = createTypePropertiesClass('RdsEngineSqlServerEX', 'sqlserver-ex');\nexport const RdsEngineSqlServerSE = createTypePropertiesClass('RdsEngineSqlServerSE', 'sqlserver-se');\nexport const RdsEngineSqlServerWeb = createTypePropertiesClass('RdsEngineSqlServerWeb', 'sqlserver-web');\nexport const AuroraEnginePostgresql = createTypePropertiesClass('AuroraEnginePostgresql', 'aurora-postgresql');\nexport const AuroraEngineMysql = createTypePropertiesClass('AuroraEngineMysql', 'aurora-mysql');\nexport const AuroraServerlessEnginePostgresql = createTypePropertiesClass(\n 'AuroraServerlessEnginePostgresql',\n 'aurora-postgresql-serverless'\n);\nexport const AuroraServerlessEngineMysql = createTypePropertiesClass(\n 'AuroraServerlessEngineMysql',\n 'aurora-mysql-serverless'\n);\nexport const AuroraServerlessV2EnginePostgresql = createTypePropertiesClass(\n 'AuroraServerlessV2EnginePostgresql',\n 'aurora-postgresql-serverless-v2'\n);\nexport const AuroraServerlessV2EngineMysql = createTypePropertiesClass(\n 'AuroraServerlessV2EngineMysql',\n 'aurora-mysql-serverless-v2'\n);\n\n// ==================== LAMBDA PACKAGING ====================\n\nexport const StacktapeLambdaBuildpackPackaging = createTypePropertiesClass(\n 'StacktapeLambdaBuildpackPackaging',\n 'stacktape-lambda-buildpack'\n);\nexport const CustomArtifactLambdaPackaging = createTypePropertiesClass(\n 'CustomArtifactLambdaPackaging',\n 'custom-artifact'\n);\n\n// ==================== CONTAINER PACKAGING ====================\n\nexport const PrebuiltImagePackaging = createTypePropertiesClass('PrebuiltImagePackaging', 'prebuilt-image');\nexport const CustomDockerfilePackaging = createTypePropertiesClass('CustomDockerfilePackaging', 'custom-dockerfile');\nexport const ExternalBuildpackPackaging = createTypePropertiesClass('ExternalBuildpackPackaging', 'external-buildpack');\nexport const NixpacksPackaging = createTypePropertiesClass('NixpacksPackaging', 'nixpacks');\nexport const StacktapeImageBuildpackPackaging = createTypePropertiesClass(\n 'StacktapeImageBuildpackPackaging',\n 'stacktape-image-buildpack'\n);\n\n// ==================== LAMBDA FUNCTION EVENTS/INTEGRATIONS ====================\n\nexport const HttpApiIntegration = createTypePropertiesClass('HttpApiIntegration', 'http-api-gateway');\nexport const S3Integration = createTypePropertiesClass('S3Integration', 's3');\nexport const ScheduleIntegration = createTypePropertiesClass('ScheduleIntegration', 'schedule');\nexport const SnsIntegration = createTypePropertiesClass('SnsIntegration', 'sns');\nexport const SqsIntegration = createTypePropertiesClass('SqsIntegration', 'sqs');\nexport const KinesisIntegration = createTypePropertiesClass('KinesisIntegration', 'kinesis');\nexport const DynamoDbIntegration = createTypePropertiesClass('DynamoDbIntegration', 'dynamodb');\nexport const CloudwatchLogIntegration = createTypePropertiesClass('CloudwatchLogIntegration', 'cloudwatch-logs');\nexport const ApplicationLoadBalancerIntegration = createTypePropertiesClass(\n 'ApplicationLoadBalancerIntegration',\n 'application-load-balancer'\n);\nexport const EventBusIntegration = createTypePropertiesClass('EventBusIntegration', 'event-bus');\nexport const KafkaTopicIntegration = createTypePropertiesClass('KafkaTopicIntegration', 'kafka-topic');\nexport const AlarmIntegration = createTypePropertiesClass('AlarmIntegration', 'alarm');\n\n// ==================== CDN ROUTES ====================\n\nexport const CdnLoadBalancerRoute = createTypePropertiesClass('CdnLoadBalancerRoute', 'application-load-balancer');\nexport const CdnHttpApiGatewayRoute = createTypePropertiesClass('CdnHttpApiGatewayRoute', 'http-api-gateway');\nexport const CdnLambdaFunctionRoute = createTypePropertiesClass('CdnLambdaFunctionRoute', 'function');\nexport const CdnCustomDomainRoute = createTypePropertiesClass('CdnCustomDomainRoute', 'custom-origin');\nexport const CdnBucketRoute = createTypePropertiesClass('CdnBucketRoute', 'bucket');\n\n// ==================== WEB APP FIREWALL RULES ====================\n\nexport const ManagedRuleGroup = createTypePropertiesClass('ManagedRuleGroup', 'managed-rule-group');\nexport const CustomRuleGroup = createTypePropertiesClass('CustomRuleGroup', 'custom-rule-group');\nexport const RateBasedRule = createTypePropertiesClass('RateBasedRule', 'rate-based-rule');\n\n// ==================== SQS QUEUE INTEGRATIONS ====================\n\nexport const SqsQueueEventBusIntegration = createTypePropertiesClass('SqsQueueEventBusIntegration', 'event-bus');\n\n// ==================== CONTAINER WORKLOAD INTEGRATIONS ====================\n\nexport const ContainerWorkloadHttpApiIntegration = createTypePropertiesClass(\n 'ContainerWorkloadHttpApiIntegration',\n 'http-api-gateway'\n);\nexport const ContainerWorkloadInternalIntegration = createTypePropertiesClass(\n 'ContainerWorkloadInternalIntegration',\n 'internal'\n);\nexport const ContainerWorkloadServiceConnectIntegration = createTypePropertiesClass(\n 'ContainerWorkloadServiceConnectIntegration',\n 'service-connect'\n);\n\n// ==================== SCRIPTS ====================\n\nexport const LocalScriptWithCommand = createTypePropertiesClass('LocalScriptWithCommand', 'local-script');\nexport const LocalScriptWithCommands = createTypePropertiesClass('LocalScriptWithCommands', 'local-script');\nexport const LocalScriptWithFileScript = createTypePropertiesClass('LocalScriptWithFileScript', 'local-script');\nexport const LocalScriptWithFileScripts = createTypePropertiesClass('LocalScriptWithFileScripts', 'local-script');\nexport const BastionScriptWithCommand = createTypePropertiesClass('BastionScriptWithCommand', 'bastion-script');\nexport const BastionScriptWithCommands = createTypePropertiesClass('BastionScriptWithCommands', 'bastion-script');\nexport const LocalScriptWithBastionTunnelingCommand = createTypePropertiesClass(\n 'LocalScriptWithBastionTunnelingCommand',\n 'local-script-with-bastion-tunneling'\n);\nexport const LocalScriptWithBastionTunnelingCommands = createTypePropertiesClass(\n 'LocalScriptWithBastionTunnelingCommands',\n 'local-script-with-bastion-tunneling'\n);\nexport const LocalScriptWithBastionTunnelingFileScript = createTypePropertiesClass(\n 'LocalScriptWithBastionTunnelingFileScript',\n 'local-script-with-bastion-tunneling'\n);\nexport const LocalScriptWithBastionTunnelingFileScripts = createTypePropertiesClass(\n 'LocalScriptWithBastionTunnelingFileScripts',\n 'local-script-with-bastion-tunneling'\n);\n\n// ==================== LOG FORWARDING ====================\n\nexport const HttpEndpointLogForwarding = createTypePropertiesClass('HttpEndpointLogForwarding', 'http-endpoint');\nexport const HighlightLogForwarding = createTypePropertiesClass('HighlightLogForwarding', 'highlight');\nexport const DatadogLogForwarding = createTypePropertiesClass('DatadogLogForwarding', 'datadog');\n\n// ==================== BUCKET LIFECYCLE RULES ====================\n\nexport const ExpirationLifecycleRule = createTypePropertiesClass('ExpirationLifecycleRule', 'expiration');\nexport const NonCurrentVersionExpirationLifecycleRule = createTypePropertiesClass(\n 'NonCurrentVersionExpirationLifecycleRule',\n 'non-current-version-expiration'\n);\n\n// ==================== EFS MOUNTS ====================\n\nexport const ContainerEfsMount = createTypePropertiesClass('ContainerEfsMount', 'efs');\nexport const LambdaEfsMount = createTypePropertiesClass('LambdaEfsMount', 'efs');\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACCA,IAAM,uBAAuB,WAAA,2BAAA,IAAwB;AACrD,IAAM,uBAAuB,WAAA,iCAAA,IAA8B;AAG3D,IAAM,2BAA2B,WAAA,4BAAA,GAAuB;AAGxD,IAAM,uBAAuB;AAG7B,IAAM,sBAAsB;AAG5B,IAAM,mCAAmC;AA+BnC,SAAU,MAAM,OAAa;AACjC,MAAI,SAAS,MAAM,KAAI;AAEvB,WAAS,OACN,QAAQ,sBAAsB,mBAAmB,EACjD,QAAQ,sBAAsB,mBAAmB;AAEpD,WAAS,OAAO,QAAQ,sBAAsB,IAAI;AAElD,MAAI,QAAQ;AACZ,MAAI,MAAM,OAAO;AAGjB,SAAO,OAAO,OAAO,KAAK,MAAM;AAAM;AACtC,MAAI,UAAU;AAAK,WAAO,CAAA;AAC1B,SAAO,OAAO,OAAO,MAAM,CAAC,MAAM;AAAM;AAExC,SAAO,OAAO,MAAM,OAAO,GAAG,EAAE,MAAM,KAAK;AAC7C;AAlBgB;AAuBV,SAAU,qBAAqB,OAAa;AAChD,QAAM,QAAQ,MAAM,KAAK;AACzB,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,UAAM,OAAO,MAAM,CAAC;AACpB,UAAM,QAAQ,yBAAyB,KAAK,IAAI;AAChD,QAAI,OAAO;AACT,YAAM,SAAS,MAAM,SAAS,MAAM,CAAC,KAAK,MAAM,CAAC,GAAG;AACpD,YAAM,OAAO,GAAG,GAAG,KAAK,MAAM,GAAG,MAAM,GAAG,KAAK,MAAM,MAAM,CAAC;;;AAGhE,SAAO;AACT;AAXgB;AAkDV,SAAU,WAAW,OAAe,SAA2B;AACnE,QAAM,CAAC,QAAQ,OAAO,MAAM,IAAI,kBAAkB,OAAO,OAAO;AAChE,QAAM,QAAQ,aAAa,SAAS,MAAM;AAC1C,QAAM,QAAQ,aAAa,SAAS,MAAM;AAC1C,QAAM,YAAY,SAAS,2BACvB,4BAA4B,OAAO,KAAK,IACxC,2BAA2B,OAAO,KAAK;AAC3C,SAAO,SAAS,MAAM,IAAI,SAAS,EAAE,KAAK,SAAS,aAAa,EAAE,IAAI;AACxE;AARgB;AAoGhB,SAAS,aAAa,QAAc;AAClC,SAAO,WAAW,QACd,CAAC,UAAkB,MAAM,YAAW,IACpC,CAAC,UAAkB,MAAM,kBAAkB,MAAM;AACvD;AAJS;AAMT,SAAS,aAAa,QAAc;AAClC,SAAO,WAAW,QACd,CAAC,UAAkB,MAAM,YAAW,IACpC,CAAC,UAAkB,MAAM,kBAAkB,MAAM;AACvD;AAJS;AAMT,SAAS,4BACP,OACA,OAAgC;AAEhC,SAAO,CAAC,SAAiB,GAAG,MAAM,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC;AACnE;AALS;AAOT,SAAS,2BACP,OACA,OAAgC;AAEhC,SAAO,CAAC,MAAc,UAAiB;AACrC,UAAM,QAAQ,KAAK,CAAC;AACpB,UAAM,UACJ,QAAQ,KAAK,SAAS,OAAO,SAAS,MAAM,MAAM,QAAQ,MAAM,KAAK;AACvE,WAAO,UAAU,MAAM,KAAK,MAAM,CAAC,CAAC;EACtC;AACF;AAVS;AAYT,SAAS,kBACP,OACA,UAAmB,CAAA,GAAE;AAErB,QAAM,UACJ,QAAQ,UAAU,QAAQ,kBAAkB,uBAAuB;AACrE,QAAM,mBACJ,QAAQ,oBAAoB;AAC9B,QAAM,mBACJ,QAAQ,oBAAoB;AAC9B,MAAI,cAAc;AAClB,MAAI,cAAc,MAAM;AAExB,SAAO,cAAc,MAAM,QAAQ;AACjC,UAAM,OAAO,MAAM,OAAO,WAAW;AACrC,QAAI,CAAC,iBAAiB,SAAS,IAAI;AAAG;AACtC;;AAGF,SAAO,cAAc,aAAa;AAChC,UAAM,QAAQ,cAAc;AAC5B,UAAM,OAAO,MAAM,OAAO,KAAK;AAC/B,QAAI,CAAC,iBAAiB,SAAS,IAAI;AAAG;AACtC,kBAAc;;AAGhB,SAAO;IACL,MAAM,MAAM,GAAG,WAAW;IAC1B,QAAQ,MAAM,MAAM,aAAa,WAAW,CAAC;IAC7C,MAAM,MAAM,WAAW;;AAE3B;AA/BS;;;ACtPF,IAAM,iBAAiB;AAAA,EAC5B,OAAO,iBAAyB;AAC9B,WAAO,WAAW,GAAG,eAAe,SAAS;AAAA,EAC/C;AAAA,EACA,oBAAoB;AAClB,WAAO,mBAAmB;AAAA,MACxB,WAAW,EAAE,MAAM,aAAa;AAAA,MAChC,QAAQ,EAAE,4BAA4B,+BAA+B;AAAA,IACvE,CAAC;AAAA,EACH;AAAA,EACA,gCAAgC;AAC9B,WAAO,mBAAmB;AAAA,MACxB,WAAW,EAAE,MAAM,gCAAgC;AAAA,MACnD,QAAQ,EAAE,4BAA4B,sCAAsC;AAAA,IAC9E,CAAC;AAAA,EACH;AAAA,EACA,uCAAuC;AACrC,WAAO,mBAAmB;AAAA,MACxB,WAAW,EAAE,MAAM,aAAa;AAAA,MAChC,QAAQ,EAAE,4BAA4B,wCAAwC;AAAA,IAChF,CAAC;AAAA,EACH;AAAA,EACA,qCAAqC;AACnC,WAAO,mBAAmB;AAAA,MACxB,WAAW,EAAE,MAAM,aAAa;AAAA,MAChC,QAAQ,EAAE,4BAA4B,sCAAsC;AAAA,IAC9E,CAAC;AAAA,EACH;AAAA,EACA,gCAAgC;AAC9B,WAAO,mBAAmB;AAAA,MACxB,WAAW,EAAE,MAAM,aAAa;AAAA,MAChC,QAAQ,EAAE,4BAA4B,2CAA2C;AAAA,IACnF,CAAC;AAAA,EACH;AAAA,EACA,iCAAiC,iBAAyB;AACxD,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,WAAW,EAAE,MAAM,aAAa;AAAA,MAChC,QAAQ,EAAE,4BAA4B,oCAAoC;AAAA,IAC5E,CAAC;AAAA,EACH;AAAA,EACA,4BAA4B,iBAAyB;AACnD,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,QAAQ,EAAE,4BAA4B,oCAAoC;AAAA,IAC5E,CAAC;AAAA,EACH;AAAA,EACA,kBAAkB,iBAAyB;AACzC,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,QAAQ,EAAE,4BAA4B,+BAA+B;AAAA,IACvE,CAAC;AAAA,EACH;AAAA,EACA,sBAAsB,iBAAyB;AAC7C,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,QAAQ,EAAE,4BAA4B,qCAAqC;AAAA,IAC7E,CAAC;AAAA,EACH;AAAA,EACA,cAAc,iBAAyB;AACrC,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,QAAQ,EAAE,4BAA4B,sBAAsB;AAAA,IAC9D,CAAC;AAAA,EACH;AAAA,EACA,oBAAoB,iBAAyB;AAC3C,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,QAAQ,EAAE,4BAA4B,mCAAmC;AAAA,IAC3E,CAAC;AAAA,EACH;AAAA,EACA,iBAAiB,iBAAyB;AACxC,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,QAAQ,EAAE,4BAA4B,gCAAgC;AAAA,IACxE,CAAC;AAAA,EACH;AAAA,EACA,mBAAmB,iBAAyB;AAC1C,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,QAAQ,EAAE,4BAA4B,0BAA0B;AAAA,IAClE,CAAC;AAAA,EACH;AAAA,EACA,cAAc,iBAAyB;AACrC,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,QAAQ;AAAA,QACN,4BAA4B;AAAA,MAC9B;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EACA,eAAe;AAAA,IACb;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAIG;AAED,UAAM,oBAAoB,gBAAgB,GAAG,cAAc,QAAQ,OAAO,GAAG,EAAE,QAAQ,UAAU,EAAE,CAAC,KAAK;AAEzG,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,WAAW;AAAA,QACT,MAAM,GAAG,iBAAiB,IAAI,iBAAiB;AAAA,MACjD;AAAA,MACA,QAAQ;AAAA,QACN,4BAA4B;AAAA,MAC9B;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EACA,eAAe,iBAAyB,kBAA0B;AAChE,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,WAAW,EAAE,MAAM,UAAU,WAAW,iBAAiB;AAAA,MACzD,QAAQ,EAAE,4BAA4B,wBAAwB;AAAA,IAChE,CAAC;AAAA,EACH;AAAA,EACA,iBAAiB,iBAAyB;AACxC,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,QAAQ,EAAE,4BAA4B,0BAA0B;AAAA,IAClE,CAAC;AAAA,EACH;AAAA,EACA,0BAA0B,iBAAyB;AACjD,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,WAAW,EAAE,MAAM,UAAU;AAAA,MAC7B,QAAQ,EAAE,4BAA4B,iBAAiB;AAAA,IACzD,CAAC;AAAA,EACH;AAAA,EACA,uBAAuB,iBAAyB,mBAA2B;AACzE,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,WAAW,EAAE,MAAM,MAAM;AAAA,MACzB,QAAQ,EAAE,4BAA4B,iCAAiC,OAAO,kBAAkB;AAAA,IAClG,CAAC;AAAA,EACH;AAAA,EACA,4BAA4B,iBAAyB,oBAA4B;AAC/E,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,WAAW,EAAE,MAAM,mBAAmB,kBAAkB,GAAG;AAAA,MAC3D,QAAQ,EAAE,4BAA4B,+BAA+B;AAAA,IACvE,CAAC;AAAA,EACH;AAAA,EACA,6BAA6B,MAAkC;AAC7D,WAAO,mBAAmB;AAAA,MACxB,WAAW,EAAE,MAAM,MAAM,IAAI,GAAG;AAAA,MAChC,QAAQ,EAAE,4BAA4B,+BAA+B;AAAA,IACvE,CAAC;AAAA,EACH;AAAA,EACA,oCAAoC,iBAAyB,uBAA+B;AAC1F,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,WAAW,EAAE,MAAM,mBAAmB,qBAAqB,GAAG;AAAA,MAC9D,QAAQ,EAAE,4BAA4B,uCAAuC;AAAA,IAC/E,CAAC;AAAA,EACH;AAAA,EACA,qCAAqC,MAAkC;AACrE,WAAO,mBAAmB;AAAA,MACxB,WAAW,EAAE,MAAM,MAAM,IAAI,GAAG;AAAA,MAChC,QAAQ,EAAE,4BAA4B,uCAAuC;AAAA,IAC/E,CAAC;AAAA,EACH;AAAA,EACA,+BAA+B,iBAAyB;AACtD,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,WAAW,EAAE,MAAM,MAAM;AAAA,MACzB,QAAQ,EAAE,4BAA4B,kDAAkD;AAAA,IAC1F,CAAC;AAAA,EACH;AAAA,EACA,kCAAkC,iBAAyB;AACzD,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,WAAW,EAAE,MAAM,4BAA4B;AAAA,MAC/C,QAAQ,EAAE,4BAA4B,4BAA4B;AAAA,IACpE,CAAC;AAAA,EACH;AAAA,EACA,oCAAoC,iBAAyB;AAC3D,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,WAAW,EAAE,MAAM,gBAAgB;AAAA,MACnC,QAAQ,EAAE,4BAA4B,sCAAsC;AAAA,IAC9E,CAAC;AAAA,EACH;AAAA,EACA,mCAAmC,iBAAyB;AAC1D,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,WAAW,EAAE,MAAM,eAAe;AAAA,MAClC,QAAQ,EAAE,4BAA4B,sCAAsC;AAAA,IAC9E,CAAC;AAAA,EACH;AAAA,EACA,UAAU,0BAAkC;AAG1C,WAAO,mBAAmB;AAAA,MACxB,iBAAiB;AAAA,MACjB,WAAW,EAAE,MAAM,8BAA8B,wBAAwB,EAAE;AAAA,MAC3E,QAAQ,EAAE,4BAA4B,0BAA0B;AAAA,IAClE,CAAC;AAAA,EACH;AAAA,EACA,kBAAkB,iBAAyB;AACzC,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,QAAQ,EAAE,4BAA4B,6BAA6B;AAAA,IACrE,CAAC;AAAA,EACH;AAAA,EACA,oBAAoB,iBAAyB;AAC3C,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,QAAQ,EAAE,4BAA4B,uBAAuB;AAAA,IAC/D,CAAC;AAAA,EACH;AAAA,EACA,aAAa,iBAAyB;AACpC,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,QAAQ,EAAE,4BAA4B,wBAAwB;AAAA,IAChE,CAAC;AAAA,EACH;AAAA,EACA,eAAe,iBAAyB;AACtC,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,QAAQ,EAAE,4BAA4B,sBAAsB;AAAA,IAC9D,CAAC;AAAA,EACH;AAAA,EACA,qCAAqC,iBAAyB,YAAoB;AAChF,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,WAAW;AAAA,QACT,MAAM;AAAA,QACN,WAAW;AAAA,MACb;AAAA,MACA,QAAQ,EAAE,4BAA4B,wBAAwB;AAAA,IAChE,CAAC;AAAA,EACH;AAAA,EACA,qBAAqB,iBAAyB,YAAoB;AAChE,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,WAAW;AAAA,QACT,MAAM;AAAA,QACN,WAAW;AAAA,MACb;AAAA,MACA,QAAQ,EAAE,4BAA4B,yBAAyB;AAAA,IACjE,CAAC;AAAA,EACH;AAAA,EACA,mBAAmB,iBAAyB,YAAoB;AAC9D,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,WAAW;AAAA,QACT,MAAM;AAAA,QACN,WAAW;AAAA,MACb;AAAA,MACA,QAAQ,EAAE,4BAA4B,0BAA0B;AAAA,IAClE,CAAC;AAAA,EACH;AAAA,EACA,UAAU;AACR,WAAO,mBAAmB;AAAA,MACxB,WAAW;AAAA,QACT,MAAM;AAAA,MACR;AAAA,MACA,QAAQ,EAAE,4BAA4B,uBAAuB;AAAA,IAC/D,CAAC;AAAA,EACH;AAAA,EACA,mBAAmB;AACjB,WAAO,mBAAmB;AAAA,MACxB,WAAW;AAAA,QACT,MAAM;AAAA,MACR;AAAA,MACA,QAAQ,EAAE,4BAA4B,kBAAkB;AAAA,IAC1D,CAAC;AAAA,EACH;AAAA,EACA,yBAAyB;AACvB,WAAO,mBAAmB;AAAA,MACxB,WAAW;AAAA,QACT,MAAM;AAAA,MACR;AAAA,MACA,QAAQ,EAAE,4BAA4B,wBAAwB;AAAA,IAChE,CAAC;AAAA,EACH;AAAA,EACA,mBAAmB,iBAAyB;AAC1C,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,QAAQ,EAAE,4BAA4B,iCAAiC;AAAA,IACzE,CAAC;AAAA,EACH;AAAA,EACA,qCAAqC,iBAAyB;AAC5D,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,WAAW,EAAE,MAAM,UAAU;AAAA,MAC7B,QAAQ,EAAE,4BAA4B,sCAAsC;AAAA,IAC9E,CAAC;AAAA,EACH;AAAA,EACA,wBAAwB;AACtB,WAAO,mBAAmB;AAAA,MACxB,WAAW;AAAA,QACT,MAAM;AAAA,MACR;AAAA,MACA,QAAQ,EAAE,4BAA4B,iBAAiB;AAAA,IACzD,CAAC;AAAA,EACH;AAAA,EACA,oBAAoB;AAClB,WAAO,mBAAmB;AAAA,MACxB,WAAW;AAAA,QACT,MAAM;AAAA,MACR;AAAA,MACA,QAAQ,EAAE,4BAA4B,iBAAiB;AAAA,IACzD,CAAC;AAAA,EACH;AAAA,EACA,oCAAoC;AAClC,WAAO,mBAAmB;AAAA,MACxB,WAAW;AAAA,QACT,MAAM;AAAA,MACR;AAAA,MACA,QAAQ,EAAE,4BAA4B,0BAA0B;AAAA,IAClE,CAAC;AAAA,EACH;AAAA,EACA,uBAAuB;AACrB,WAAO,mBAAmB;AAAA,MACxB,WAAW;AAAA,QACT,MAAM;AAAA,MACR;AAAA,MACA,QAAQ,EAAE,4BAA4B,4BAA4B;AAAA,IACpE,CAAC;AAAA,EACH;AAAA,EACA,8BAA8B;AAC5B,WAAO,mBAAmB;AAAA,MACxB,WAAW;AAAA,QACT,MAAM;AAAA,MACR;AAAA,MACA,QAAQ,EAAE,4BAA4B,2BAA2B;AAAA,IACnE,CAAC;AAAA,EACH;AAAA,EACA,iCAAiC;AAC/B,WAAO,mBAAmB;AAAA,MACxB,WAAW;AAAA,QACT,MAAM;AAAA,MACR;AAAA,MACA,QAAQ,EAAE,4BAA4B,iBAAiB;AAAA,IACzD,CAAC;AAAA,EACH;AAAA,EACA,qBAAqB;AACnB,WAAO,mBAAmB;AAAA,MACxB,WAAW;AAAA,QACT,MAAM;AAAA,MACR;AAAA,MACA,QAAQ,EAAE,4BAA4B,iBAAiB;AAAA,IACzD,CAAC;AAAA,EACH;AAAA,EACA,mBAAmB;AACjB,WAAO,mBAAmB;AAAA,MACxB,WAAW;AAAA,QACT,MAAM;AAAA,MACR;AAAA,MACA,QAAQ,EAAE,4BAA4B,iBAAiB;AAAA,IACzD,CAAC;AAAA,EACH;AAAA,EACA,sBAAsB,iBAAyB;AAC7C,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,QAAQ,EAAE,4BAA4B,iBAAiB;AAAA,IACzD,CAAC;AAAA,EACH;AAAA,EACA,wBAAwB,MAAe,KAAc;AACnD,WAAO,mBAAmB;AAAA,MACxB,WAAW;AAAA,QACT,MAAM,SAAS,OAAO,SAAS,UAAU,IAAI,MAAM,QAAQ,EAAE;AAAA,MAC/D;AAAA,MACA,QAAQ,EAAE,4BAA4B,iCAAiC;AAAA,IACzE,CAAC;AAAA,EACH;AAAA,EACA,cAAc,MAAe,KAAc;AACzC,WAAO,mBAAmB;AAAA,MACxB,WAAW;AAAA,QACT,MAAM,SAAS,OAAO,SAAS,UAAU,IAAI,MAAM,QAAQ,EAAE;AAAA,MAC/D;AAAA,MACA,QAAQ,EAAE,4BAA4B,uBAAuB;AAAA,IAC/D,CAAC;AAAA,EACH;AAAA,EACA,OAAO,cAAuB,aAAqB;AACjD,WAAO,mBAAmB;AAAA,MACxB,WAAW;AAAA,QACT,MAAM,eAAe,WAAW;AAAA,MAClC;AAAA,MACA,QAAQ,EAAE,4BAA4B,oBAAoB,OAAO,YAAY;AAAA,IAC/E,CAAC;AAAA,EACH;AAAA,EACA,MAAM;AACJ,WAAO,mBAAmB;AAAA,MACxB,QAAQ,EAAE,4BAA4B,gBAAgB;AAAA,IACxD,CAAC;AAAA,EACH;AAAA,EACA,mBAAmB,MAA0B;AAC3C,WAAO,mBAAmB;AAAA,MACxB,WAAW,EAAE,MAAM,GAAG,IAAI,WAAW;AAAA,MACrC,QAAQ,EAAE,4BAA4B,wBAAwB;AAAA,IAChE,CAAC;AAAA,EACH;AAAA,EACA,cAAc,iBAAyB;AACrC,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,QAAQ,EAAE,4BAA4B,0BAA0B;AAAA,IAClE,CAAC;AAAA,EACH;AAAA,EACA,gBAAgB,iBAAyB;AACvC,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,QAAQ,EAAE,4BAA4B,sBAAsB;AAAA,IAC9D,CAAC;AAAA,EACH;AAAA,EACA,8BAA8B,iBAAyB;AACrD,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,QAAQ,EAAE,4BAA4B,oCAAoC;AAAA,IAC5E,CAAC;AAAA,EACH;AAAA,EACA,wBAAwB,iBAAyB,cAAsB;AACrE,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,WAAW,EAAE,MAAM,WAAW,SAAS,aAAa;AAAA,MACpD,QAAQ,EAAE,4BAA4B,sBAAsB;AAAA,IAC9D,CAAC;AAAA,EACH;AAAA,EACA,gBAAgB,iBAAyB;AACvC,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,QAAQ,EAAE,4BAA4B,0BAA0B;AAAA,IAClE,CAAC;AAAA,EACH;AAAA,EACA,WAAW,iBAAyB;AAClC,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,QAAQ,EAAE,4BAA4B,uBAAuB;AAAA,IAC/D,CAAC;AAAA,EACH;AAAA,EACA,mBAAmB,iBAAyB,cAAsB;AAChE,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,WAAW,EAAE,MAAM,YAAY,SAAS,aAAa;AAAA,MACrD,QAAQ,EAAE,4BAA4B,sBAAsB;AAAA,IAC9D,CAAC;AAAA,EACH;AAAA,EACA,yBAAyB,iBAAyB,cAAsB;AACtE,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,WAAW,EAAE,MAAM,YAAY,SAAS,aAAa;AAAA,MACrD,QAAQ,EAAE,4BAA4B,sBAAsB;AAAA,IAC9D,CAAC;AAAA,EACH;AAAA,EACA,cAAc,iBAAyB;AACrC,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,QAAQ,EAAE,4BAA4B,wBAAwB;AAAA,IAChE,CAAC;AAAA,EACH;AAAA,EACA,yBAAyB,iBAAyB;AAChD,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,QAAQ,EAAE,4BAA4B,6BAA6B;AAAA,IACrE,CAAC;AAAA,EACH;AAAA,EACA,UAAU,iBAAyB,YAAoB;AACrD,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,WAAW,EAAE,MAAM,WAAW,WAAW,WAAW;AAAA,MACpD,QAAQ,EAAE,4BAA4B,uBAAuB;AAAA,IAC/D,CAAC;AAAA,EACH;AAAA,EACA,kBAAkB,iBAAyB,cAAsB,YAAoB;AACnF,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,WAAW,EAAE,MAAM,WAAW,WAAW,YAAY,SAAS,aAAa;AAAA,MAC3E,QAAQ,EAAE,4BAA4B,sBAAsB;AAAA,IAC9D,CAAC;AAAA,EACH;AAAA,EACA,wBAAwB,iBAAyB,YAAoB;AACnE,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,WAAW,EAAE,MAAM,WAAW,WAAW,WAAW;AAAA,MACpD,QAAQ,EAAE,4BAA4B,6BAA6B;AAAA,IACrE,CAAC;AAAA,EACH;AAAA,EACA,iBAAiB,iBAAyB,aAAqB;AAC7D,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,QAAQ,EAAE,4BAA4B,wBAAwB,OAAO,YAAY;AAAA,IACnF,CAAC;AAAA,EACH;AAAA,EACA,+BAA+B,iBAAyB;AACtD,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,WAAW,EAAE,MAAM,WAAW;AAAA,MAC9B,QAAQ,EAAE,4BAA4B,6BAA6B;AAAA,IACrE,CAAC;AAAA,EACH;AAAA,EACA,aAAa,iBAAyB,YAAoB;AACxD,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,WAAW;AAAA,QACT,MAAM;AAAA,QACN,WAAW;AAAA,MACb;AAAA,MACA,QAAQ,EAAE,4BAA4B,oBAAoB;AAAA,IAC5D,CAAC;AAAA,EACH;AAAA,EACA,4BAA4B;AAC1B,WAAO,mBAAmB;AAAA,MACxB,WAAW,EAAE,MAAM,2BAA2B;AAAA,MAC9C,QAAQ,EAAE,4BAA4B,oBAAoB;AAAA,IAC5D,CAAC;AAAA,EACH;AAAA,EACA,sCAAsC;AACpC,WAAO,mBAAmB;AAAA,MACxB,WAAW,EAAE,MAAM,+BAA+B;AAAA,MAClD,QAAQ,EAAE,4BAA4B,0BAA0B;AAAA,IAClE,CAAC;AAAA,EACH;AAAA,EACA,qCAAqC,iBAAyB,YAAoB;AAChF,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,WAAW;AAAA,QACT,MAAM;AAAA,QACN,WAAW;AAAA,MACb;AAAA,MACA,QAAQ,EAAE,4BAA4B,gCAAgC;AAAA,IACxE,CAAC;AAAA,EACH;AAAA,EACA,mBAAmB,iBAAyB,YAAoB;AAC9D,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,WAAW;AAAA,QACT,MAAM;AAAA,QACN,WAAW;AAAA,MACb;AAAA,MACA,QAAQ,EAAE,4BAA4B,kCAAkC;AAAA,IAC1E,CAAC;AAAA,EACH;AAAA,EACA,kBAAkB,iBAAyB,YAAoB;AAC7D,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,WAAW;AAAA,QACT,MAAM;AAAA,QACN,WAAW;AAAA,MACb;AAAA,MACA,QAAQ,EAAE,4BAA4B,sBAAsB;AAAA,IAC9D,CAAC;AAAA,EACH;AAAA,EACA,qBAAqB,iBAAyB,YAAoB;AAChE,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,WAAW;AAAA,QACT,MAAM;AAAA,QACN,WAAW;AAAA,MACb;AAAA,MACA,QAAQ,EAAE,4BAA4B,+BAA+B;AAAA,IACvE,CAAC;AAAA,EACH;AAAA,EACA,OAAO,iBAAyB,sBAAgC;AAC9D,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,WAAW,uBAAuB,EAAE,MAAM,iBAAiB,IAAI;AAAA,MAC/D,QAAQ,EAAE,4BAA4B,wBAAwB;AAAA,IAChE,CAAC;AAAA,EACH;AAAA,EACA,eAAe,iBAAyB;AACtC,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,WAAW;AAAA,QACT,MAAM;AAAA,MACR;AAAA,MACA,QAAQ,EAAE,4BAA4B,qBAAqB;AAAA,IAC7D,CAAC;AAAA,EACH;AAAA,EACA,UAAU,iBAAyB;AACjC,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,QAAQ,EAAE,4BAA4B,mBAAmB;AAAA,IAC3D,CAAC;AAAA,EACH;AAAA,EACA,0BAA0B,iBAAyB;AACjD,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,QAAQ,EAAE,4BAA4B,mCAAmC;AAAA,IAC3E,CAAC;AAAA,EACH;AAAA,EACA,eAAe,iBAAyB;AACtC,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,QAAQ,EAAE,4BAA4B,sCAAsC;AAAA,IAC9E,CAAC;AAAA,EACH;AAAA,EACA,qBAAqB,iBAAyB;AAC5C,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,WAAW,EAAE,MAAM,SAAS;AAAA,MAC5B,QAAQ,EAAE,4BAA4B,sCAAsC;AAAA,IAC9E,CAAC;AAAA,EACH;AAAA,EACA,kBAAkB,iBAAyB;AACzC,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,WAAW,EAAE,MAAM,eAAe;AAAA,MAClC,QAAQ,EAAE,4BAA4B,mCAAmC;AAAA,IAC3E,CAAC;AAAA,EACH;AAAA,EACA,mBAAmB,iBAAyB;AAC1C,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,QAAQ,EAAE,4BAA4B,4BAA4B;AAAA,IACpE,CAAC;AAAA,EACH;AAAA,EACA,iBAAiB,iBAAyB;AACxC,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,QAAQ,EAAE,4BAA4B,sBAAsB;AAAA,IAC9D,CAAC;AAAA,EACH;AAAA,EACA,0BAA0B;AACxB,WAAO,mBAAmB;AAAA,MACxB,WAAW;AAAA,QACT,MAAM;AAAA,MACR;AAAA,MACA,QAAQ,EAAE,4BAA4B,iBAAiB;AAAA,IACzD,CAAC;AAAA,EACH;AAAA,EACA,aAAa,iBAAyB;AACpC,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,QAAQ,EAAE,4BAA4B,mCAAmC;AAAA,IAC3E,CAAC;AAAA,EACH;AAAA,EACA,kBAAkB;AAChB,WAAO,mBAAmB;AAAA,MACxB,QAAQ,EAAE,4BAA4B,4BAA4B;AAAA,IACpE,CAAC;AAAA,EACH;AAAA,EACA,uBAAuB;AACrB,WAAO,mBAAmB;AAAA,MACxB,QAAQ,EAAE,4BAA4B,iCAAiC;AAAA,IACzE,CAAC;AAAA,EACH;AAAA,EACA,WAAW,cAAuB,aAAqB;AACrD,WAAO,mBAAmB;AAAA,MACxB,WAAW,EAAE,MAAM,eAAe,iBAAiB,iBAAiB,WAAW,YAAY;AAAA,MAC3F,QAAQ,EAAE,4BAA4B,uBAAuB;AAAA,IAC/D,CAAC;AAAA,EACH;AAAA,EACA,qBAAqB,aAAqB;AACxC,WAAO,mBAAmB;AAAA,MACxB,WAAW,EAAE,MAAM,kBAAkB;AAAA,MACrC,QAAQ,EAAE,4BAA4B,mBAAmB,OAAO,YAAY;AAAA,IAC9E,CAAC;AAAA,EACH;AAAA,EACA,mBAAmB,mBAA4B,aAAqB;AAClE,WAAO,mBAAmB;AAAA,MACxB,WAAW,EAAE,MAAM,aAAa,oBAAoB,iBAAiB,eAAe,GAAG;AAAA,MACvF,QAAQ,EAAE,4BAA4B,mBAAmB,OAAO,YAAY;AAAA,IAC9E,CAAC;AAAA,EACH;AAAA,EACA,8BAA8B,cAAuB,aAAqB;AACxE,WAAO,mBAAmB;AAAA,MACxB,WAAW,EAAE,MAAM,eAAe,iBAAiB,iBAAiB,WAAW,YAAY;AAAA,MAC3F,QAAQ,EAAE,4BAA4B,wCAAwC;AAAA,IAChF,CAAC;AAAA,EACH;AAAA,EACA,WAAW,SAAiB;AAC1B,WAAO,mBAAmB;AAAA,MACxB,QAAQ,EAAE,4BAA4B,wBAAwB,OAAO,QAAQ;AAAA,IAC/E,CAAC;AAAA,EACH;AAAA,EACA,aAAa,SAAiB;AAC5B,WAAO,mBAAmB;AAAA,MACxB,WAAW,EAAE,MAAM,MAAM;AAAA,MACzB,QAAQ,EAAE,4BAA4B,iBAAiB,OAAO,QAAQ;AAAA,IACxE,CAAC;AAAA,EACH;AAAA,EACA,SAAS,aAAqB;AAC5B,WAAO,mBAAmB;AAAA,MACxB,WAAW,EAAE,MAAM,mBAAmB;AAAA,MACtC,QAAQ,EAAE,4BAA4B,mBAAmB,OAAO,YAAY;AAAA,IAC9E,CAAC;AAAA,EACH;AAAA,EACA,SAAS,iBAAyB;AAChC,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,QAAQ,EAAE,4BAA4B,wBAAwB;AAAA,IAChE,CAAC;AAAA,EACH;AAAA,EACA,gBAAgB,iBAAyB;AACvC,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,QAAQ,EAAE,4BAA4B,uBAAuB;AAAA,IAC/D,CAAC;AAAA,EACH;AAAA,EACA,WAAW,iBAAyB;AAClC,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,QAAQ,EAAE,4BAA4B,oBAAoB;AAAA,IAC5D,CAAC;AAAA,EACH;AAAA,EACA,kBAAkB,iBAAyB;AACzC,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,QAAQ,EAAE,4BAA4B,2BAA2B;AAAA,IACnE,CAAC;AAAA,EACH;AAAA,EACA,WAAW,iBAAyB,WAAoB;AACtD,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,WAAW,YAAY,EAAE,MAAM,YAAY,IAAI;AAAA,MAC/C,QAAQ,EAAE,4BAA4B,oBAAoB;AAAA,IAC5D,CAAC;AAAA,EACH;AAAA,EACA,mBAAmB;AACjB,WAAO,mBAAmB;AAAA,MACxB,WAAW,EAAE,MAAM,eAAe;AAAA,MAClC,QAAQ,EAAE,4BAA4B,iBAAiB;AAAA,IACzD,CAAC;AAAA,EACH;AAAA,EACA,qBAAqB;AACnB,WAAO,mBAAmB;AAAA,MACxB,WAAW;AAAA,QACT,MAAM;AAAA,MACR;AAAA,MACA,QAAQ,EAAE,4BAA4B,iBAAiB;AAAA,IACzD,CAAC;AAAA,EACH;AAAA,EACA,+BAA+B,iBAAyB;AACtD,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,QAAQ,EAAE,4BAA4B,6BAA6B;AAAA,IACrE,CAAC;AAAA,EACH;AAAA,EACA,0CAA0C;AACxC,WAAO,mBAAmB;AAAA,MACxB,WAAW,EAAE,MAAM,2BAA2B;AAAA,MAC9C,QAAQ,EAAE,4BAA4B,iBAAiB;AAAA,IACzD,CAAC;AAAA,EACH;AAAA,EACA,yCAAyC,iBAAyB;AAChE,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,WAAW,EAAE,MAAM,2BAA2B;AAAA,MAC9C,QAAQ,EAAE,4BAA4B,oBAAoB;AAAA,IAC5D,CAAC;AAAA,EACH;AAAA,EACA,6BAA6B,iBAAyB;AACpD,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,QAAQ,EAAE,4BAA4B,2BAA2B;AAAA,IACnE,CAAC;AAAA,EACH;AAAA,EACA,uBAAuB,iBAAyB;AAC9C,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,QAAQ,EAAE,4BAA4B,qCAAqC;AAAA,IAC7E,CAAC;AAAA,EACH;AAAA,EACA,gDAAgD,iBAAyB;AACvE,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,WAAW,EAAE,MAAM,iBAAiB;AAAA,MACpC,QAAQ,EAAE,4BAA4B,sCAAsC;AAAA,IAC9E,CAAC;AAAA,EACH;AAAA,EACA,qDAAqD,iBAAyB;AAC5E,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,WAAW,EAAE,MAAM,sCAAsC;AAAA,MACzD,QAAQ,EAAE,4BAA4B,sCAAsC;AAAA,IAC9E,CAAC;AAAA,EACH;AAAA,EAEA,uBAAuB,iBAAyB;AAC9C,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,QAAQ,EAAE,4BAA4B,6BAA6B;AAAA,IACrE,CAAC;AAAA,EACH;AAAA,EACA,kCAAkC,iBAAyB;AACzD,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,QAAQ,EAAE,4BAA4B,gDAAgD;AAAA,IACxF,CAAC;AAAA,EACH;AAAA,EACA,wBAAwB;AACtB,WAAO,mBAAmB;AAAA,MACxB,WAAW;AAAA,QACT,MAAM;AAAA,MACR;AAAA,MACA,QAAQ,EAAE,4BAA4B,4BAA4B;AAAA,IACpE,CAAC;AAAA,EACH;AAAA,EACA,YAAY,iBAAyB;AACnC,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,QAAQ,EAAE,4BAA4B,iBAAiB;AAAA,IACzD,CAAC;AAAA,EACH;AAAA,EACA,qBAAqB;AACnB,WAAO,mBAAmB;AAAA,MACxB,WAAW,EAAE,MAAM,eAAe;AAAA,MAClC,QAAQ,EAAE,4BAA4B,iBAAiB;AAAA,IACzD,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,wCAAwC,iBAAyB;AAC/D,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,WAAW,EAAE,MAAM,uBAAuB;AAAA,MAC1C,QAAQ,EAAE,4BAA4B,0BAA0B;AAAA,IAClE,CAAC,EAAE,WAAW,KAAK,EAAE;AAAA,EACvB;AAAA,EACA,yBAAyB,iBAAyB;AAChD,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,QAAQ,EAAE,4BAA4B,2BAA2B;AAAA,IACnE,CAAC;AAAA,EACH;AAAA,EACA,0BAA0B,iBAAyB;AACjD,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,QAAQ,EAAE,4BAA4B,4BAA4B;AAAA,IACpE,CAAC;AAAA,EACH;AAAA,EACA,2BAA2B,iBAAyB;AAClD,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,QAAQ,EAAE,4BAA4B,qCAAqC;AAAA,IAC7E,CAAC;AAAA,EACH;AAAA,EACA,qBAAqB,iBAAyB;AAC5C,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,QAAQ,EAAE,4BAA4B,0BAA0B;AAAA,IAClE,CAAC;AAAA,EACH;AAAA,EACA,6BAA6B,iBAAyB;AACpD,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,WAAW,EAAE,MAAM,UAAU;AAAA,MAC7B,QAAQ,EAAE,4BAA4B,wBAAwB;AAAA,IAChE,CAAC;AAAA,EACH;AAAA,EACA,8BAA8B,iBAAyB;AACrD,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,WAAW,EAAE,MAAM,WAAW;AAAA,MAC9B,QAAQ,EAAE,4BAA4B,wBAAwB;AAAA,IAChE,CAAC;AAAA,EACH;AAAA,EACA,YAAY,iBAAyB;AACnC,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,QAAQ,EAAE,4BAA4B,iBAAiB;AAAA,IACzD,CAAC;AAAA,EACH;AAAA,EACA,gBAAgB,iBAAyB,SAAiB;AACxD,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,WAAW,EAAE,MAAM,WAAW,OAAO,EAAE;AAAA,MACvC,QAAQ,EAAE,4BAA4B,sBAAsB;AAAA,IAC9D,CAAC;AAAA,EACH;AAAA,EACA,+BAA+B;AAC7B,WAAO,mBAAmB;AAAA,MACxB,WAAW,EAAE,MAAM,yBAAyB;AAAA,MAC5C,QAAQ,EAAE,4BAA4B,qBAAqB;AAAA,IAC7D,CAAC;AAAA,EACH;AAAA,EACA,2BAA2B,iBAAyB,4BAAoC;AACtF,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,WAAW,EAAE,MAAM,OAAO,0BAA0B,YAAY;AAAA,MAChE,QAAQ,EAAE,4BAA4B,iCAAiC;AAAA,IACzE,CAAC;AAAA,EACH;AAAA,EACA,sBAAsB,iBAAyB;AAC7C,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,QAAQ,EAAE,4BAA4B,0BAA0B;AAAA,IAClE,CAAC;AAAA,EACH;AAAA,EACA,0BAA0B,iBAAyB;AACjD,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,WAAW,EAAE,MAAM,KAAK;AAAA,MACxB,QAAQ,EAAE,4BAA4B,0BAA0B;AAAA,IAClE,CAAC;AAAA,EACH;AAAA,EACA,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAKG;AACD,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,WAAW;AAAA,QACT,MAAM,GAAG,gBAAgB,GAAG,sBAAsB,SAAS,mBAAmB,KAAK,EAAE,GAAG,YAAY,OAAO,EAAE;AAAA,MAC/G;AAAA,MACA,QAAQ,EAAE,4BAA4B,2CAA2C;AAAA,IACnF,CAAC;AAAA,EACH;AAAA,EACA,WAAW,iBAAyB;AAClC,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,QAAQ,EAAE,4BAA4B,iBAAiB;AAAA,IACzD,CAAC;AAAA,EACH;AAAA,EACA,4BAA4B;AAC1B,WAAO,mBAAmB;AAAA,MACxB,WAAW,EAAE,MAAM,SAAS;AAAA,MAC5B,QAAQ,EAAE,4BAA4B,iBAAiB;AAAA,IACzD,CAAC;AAAA,EACH;AAAA,EACA,iBAAiB,iBAAyB,YAAoB;AAC5D,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,WAAW,EAAE,MAAM,SAAS,WAAW,WAAW;AAAA,MAClD,QAAQ,EAAE,4BAA4B,0BAA0B;AAAA,IAClE,CAAC;AAAA,EACH;AAAA,EACA,0BAA0B,iBAAyB;AACjD,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,WAAW,EAAE,MAAM,YAAY;AAAA,MAC/B,QAAQ,EAAE,4BAA4B,0BAA0B;AAAA,IAClE,CAAC;AAAA,EACH;AAAA,EACA,yBAAyB,cAAsB,YAAoB;AACjE,WAAO,WAAW,GAAG,YAAY,SAAS,UAAU,4BAA4B;AAAA,EAClF;AAAA,EACA,4BAA4B,iBAAyB,kBAA0B;AAC7E,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,WAAW,EAAE,MAAM,GAAG,gBAAgB,cAAc;AAAA,MACpD,QAAQ,EAAE,4BAA4B,0BAA0B;AAAA,IAClE,CAAC;AAAA,EACH;AAAA,EACA,QAAQ,iBAAyB;AAC/B,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,QAAQ,EAAE,4BAA4B,yBAAyB;AAAA,IACjE,CAAC;AAAA,EACH;AAAA,EACA,gBAAgB,iBAAyB;AACvC,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,QAAQ,EAAE,4BAA4B,sBAAsB;AAAA,IAC9D,CAAC;AAAA,EACH;AAAA,EACA,yBAAyB;AAAA,IACvB;AAAA,IACA;AAAA,EACF,GAGG;AACD,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,WAAW,EAAE,MAAM,sBAAsB;AAAA,MACzC,QAAQ,EAAE,4BAA4B,iCAAiC;AAAA,IACzE,CAAC;AAAA,EACH;AAAA,EACA,oCAAoC;AAAA,IAClC;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAIG;AACD,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,WAAW,EAAE,MAAM,GAAG,qBAAqB,SAAS,mBAAmB,GAAG;AAAA,MAC1E,QAAQ,EAAE,4BAA4B,iCAAiC;AAAA,IACzE,CAAC;AAAA,EACH;AAAA,EACA,kBAAkB,EAAE,QAAQ,MAAM,gBAAgB,GAAkE;AAClH,WAAO,mBAAmB;AAAA,MACxB,iBAAiB;AAAA,MACjB,WAAW;AAAA,QACT,MAAM,GAAG,eAAe,IAAI,WAAW,MAAM,QAAQ,MAAM,IAAI,SAAS,MAAM,YAAY,IAAI;AAAA,MAChG;AAAA,MACA,QAAQ,EAAE,4BAA4B,gCAAgC;AAAA,IACxE,CAAC;AAAA,EACH;AAAA,EACA,aAAa,EAAE,QAAQ,MAAM,gBAAgB,GAAkE;AAC7G,WAAO,mBAAmB;AAAA,MACxB,iBAAiB;AAAA,MACjB,WAAW;AAAA,QACT,MAAM,GAAG,eAAe,IAAI,WAAW,MAAM,QAAQ,MAAM,IAAI,SAAS,MAAM,YAAY,IAAI;AAAA,MAChG;AAAA,MACA,QAAQ,EAAE,4BAA4B,2BAA2B;AAAA,IACnE,CAAC;AAAA,EACH;AAAA,EACA,eAAe,iBAAyB;AACtC,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,QAAQ,EAAE,4BAA4B,6BAA6B;AAAA,IACrE,CAAC;AAAA,EACH;AAAA,EACA,4BAA4B,iBAAyB;AACnD,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,WAAW,EAAE,MAAM,UAAU;AAAA,MAC7B,QAAQ,EAAE,4BAA4B,0BAA0B;AAAA,IAClE,CAAC;AAAA,EACH;AAAA,EACA,wBAAwB;AAAA,IACtB;AAAA,IACA;AAAA,EACF,GAGG;AACD,WAAO,mBAAmB;AAAA,MACxB,iBAAiB;AAAA,MACjB,WAAW,EAAE,MAAM,gCAAgC;AAAA,MACnD,QAAQ,EAAE,4BAA4B,0BAA0B;AAAA,IAClE,CAAC;AAAA,EACH;AAAA,EACA,aAAa,iBAAyB;AACpC,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,QAAQ,EAAE,4BAA4B,2BAA2B;AAAA,IACnE,CAAC;AAAA,EACH;AAAA,EACA,cAAc,0BAAkC;AAG9C,WAAO,mBAAmB;AAAA,MACxB,iBAAiB;AAAA,MACjB,WAAW,EAAE,MAAM,8BAA8B,wBAAwB,EAAE;AAAA,MAC3E,QAAQ,EAAE,4BAA4B,gCAAgC;AAAA,IACxE,CAAC;AAAA,EACH;AAAA,EACA,qBAAqB,iBAAyB;AAC5C,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,QAAQ,EAAE,4BAA4B,gCAAgC;AAAA,IACxE,CAAC;AAAA,EACH;AAAA,EACA,qBAAqB,0BAAkC;AAGrD,WAAO,mBAAmB;AAAA,MACxB,iBAAiB;AAAA,MACjB,WAAW,EAAE,MAAM,8BAA8B,wBAAwB,EAAE;AAAA,MAC3E,QAAQ,EAAE,4BAA4B,gCAAgC;AAAA,IACxE,CAAC;AAAA,EACH;AAAA,EACA,4BAA4B,iBAAyB;AACnD,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,QAAQ,EAAE,4BAA4B,gCAAgC;AAAA,IACxE,CAAC;AAAA,EACH;AAAA,EACA,SAAS,cAAsB,iBAAyB;AACtD,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,WAAW,EAAE,MAAM,OAAO,YAAY,GAAG;AAAA,MACzC,QAAQ,EAAE,4BAA4B,wCAAwC;AAAA,IAChF,CAAC;AAAA,EACH;AAAA,EACA,aAAa,cAAsB,iBAAyB,cAAsB;AAChF,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,WAAW,EAAE,MAAM,OAAO,YAAY,WAAW,YAAY,GAAG;AAAA,MAChE,QAAQ,EAAE,4BAA4B,4CAA4C;AAAA,IACpF,CAAC;AAAA,EACH;AAAA,EACA,wBAAwB,cAAsB,iBAAyB;AACrE,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,WAAW,EAAE,MAAM,OAAO,YAAY,GAAG;AAAA,MACzC,QAAQ,EAAE,4BAA4B,mDAAmD;AAAA,IAC3F,CAAC;AAAA,EACH;AAAA,EACA,aAAa,iBAAyB;AACpC,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,QAAQ,EAAE,4BAA4B,4CAA4C;AAAA,IACpF,CAAC;AAAA,EACH;AAAA,EACA,YAAY,iBAAyB,eAAuB;AAC1D,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,WAAW,EAAE,MAAM,cAAc;AAAA,MACjC,QAAQ,EAAE,4BAA4B,sBAAsB;AAAA,IAC9D,CAAC;AAAA,EACH;AAAA,EACA,kBAAkB,iBAAyB;AACzC,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,QAAQ,EAAE,4BAA4B,8CAA8C;AAAA,IACtF,CAAC;AAAA,EACH;AAAA,EACA,wBAAwB,iBAAyB,QAAgB;AAC/D,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,WAAW,EAAE,MAAM,OAAO;AAAA,MAC1B,QAAQ,EAAE,4BAA4B,8CAA8C;AAAA,IACtF,CAAC;AAAA,EACH;AAAA,EACA,kBAAkB,iBAAyB,QAAgB;AACzD,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,WAAW,EAAE,MAAM,OAAO;AAAA,MAC1B,QAAQ,EAAE,4BAA4B,6CAA6C;AAAA,IACrF,CAAC;AAAA,EACH;AAAA,EACA,yBAAyB;AACvB,WAAO,mBAAmB;AAAA,MACxB,WAAW,EAAE,MAAM,SAAS;AAAA,MAC5B,QAAQ,EAAE,4BAA4B,sCAAsC;AAAA,IAC9E,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,8BAA8B;AAC5B,WAAO,mBAAmB;AAAA,MACxB,WAAW,EAAE,MAAM,gBAAgB;AAAA,MACnC,QAAQ,EAAE,4BAA4B,sCAAsC;AAAA,IAC9E,CAAC;AAAA,EACH;AAAA,EACA,kCAAkC;AAChC,WAAO,mBAAmB;AAAA,MACxB,WAAW,EAAE,MAAM,oBAAoB;AAAA,MACvC,QAAQ,EAAE,4BAA4B,sCAAsC;AAAA,IAC9E,CAAC;AAAA,EACH;AAAA,EACA,kCAAkC;AAChC,WAAO,mBAAmB;AAAA,MACxB,WAAW,EAAE,MAAM,oBAAoB;AAAA,MACvC,QAAQ,EAAE,4BAA4B,sCAAsC;AAAA,IAC9E,CAAC;AAAA,EACH;AAAA,EACA,iCAAiC;AAC/B,WAAO,mBAAmB;AAAA,MACxB,WAAW,EAAE,MAAM,mBAAmB;AAAA,MACtC,QAAQ,EAAE,4BAA4B,sCAAsC;AAAA,IAC9E,CAAC;AAAA,EACH;AAAA,EACA,yBAAyB,iBAAyB;AAChD,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,WAAW,EAAE,MAAM,aAAa;AAAA,MAChC,QAAQ,EAAE,4BAA4B,sCAAsC;AAAA,IAC9E,CAAC;AAAA,EACH;AAAA,EACA,4BAA4B,iBAAyB,KAAe;AAClE,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,WAAW,EAAE,MAAM,GAAG,MAAM,QAAQ,EAAE,gBAAgB;AAAA,MACtD,QAAQ,EAAE,4BAA4B,sCAAsC;AAAA,IAC9E,CAAC;AAAA,EACH;AAAA,EACA,yCAAyC,iBAAyB;AAChE,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,WAAW,EAAE,MAAM,qBAAqB;AAAA,MACxC,QAAQ,EAAE,4BAA4B,sCAAsC;AAAA,IAC9E,CAAC;AAAA,EACH;AAAA,EACA,SAAS,iBAAyB;AAChC,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,QAAQ,EAAE,4BAA4B,yBAAyB;AAAA,IACjE,CAAC;AAAA,EACH;AAAA,EACA,eAAe,iBAAyB;AACtC,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,QAAQ,EAAE,4BAA4B,+BAA+B;AAAA,IACvE,CAAC;AAAA,EACH;AAAA,EACA,eAAe,iBAAyB;AACtC,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,QAAQ,EAAE,4BAA4B,+BAA+B;AAAA,IACvE,CAAC;AAAA,EACH;AAAA,EACA,iBAAiB,iBAAyB,MAA4D;AACpG,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,WAAW,EAAE,KAAK;AAAA,MAClB,QAAQ,EAAE,4BAA4B,yCAAyC;AAAA,IACjF,CAAC;AAAA,EACH;AAAA,EACA,4BAA4B,iBAAyB,UAAkB;AACrE,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,WAAW,EAAE,MAAM,SAAS;AAAA,MAC5B,QAAQ,EAAE,4BAA4B,0BAA0B;AAAA,IAClE,CAAC;AAAA,EACH;AAAA,EACA,qCAAqC,iBAAyB;AAC5D,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,WAAW,EAAE,MAAM,kBAAkB;AAAA,MACrC,QAAQ,EAAE,4BAA4B,sCAAsC;AAAA,IAC9E,CAAC;AAAA,EACH;AAAA,EACA,kCAAkC,iBAAyB;AACzD,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,QAAQ,EAAE,4BAA4B,kDAAkD;AAAA,IAC1F,CAAC;AAAA,EACH;AAAA,EACA,mCAAmC;AACjC,WAAO,mBAAmB;AAAA,MACxB,WAAW,EAAE,MAAM,YAAY;AAAA,MAC/B,QAAQ,EAAE,4BAA4B,iCAAiC;AAAA,IACzE,CAAC;AAAA,EACH;AAAA,EACA,sBAAsB;AACpB,WAAO,mBAAmB;AAAA,MACxB,WAAW,EAAE,MAAM,mBAAmB;AAAA,MACtC,QAAQ,EAAE,4BAA4B,+BAA+B;AAAA,IACvE,CAAC;AAAA,EACH;AAAA,EACA,mBAAmB;AACjB,WAAO,mBAAmB;AAAA,MACxB,WAAW,EAAE,MAAM,gBAAgB;AAAA,MACnC,QAAQ,EAAE,4BAA4B,+BAA+B;AAAA,IACvE,CAAC;AAAA,EACH;AAAA,EACA,YAAY,WAAmB;AAC7B,WAAO,mBAAmB;AAAA,MACxB,WAAW,EAAE,MAAM,WAAW,SAAS,EAAE,WAAW,KAAK,EAAE,EAAE;AAAA,MAC7D,QAAQ,EAAE,4BAA4B,uBAAuB;AAAA,IAC/D,CAAC;AAAA,EACH;AAAA,EACA,qBAAqB,iBAAyB;AAC5C,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,QAAQ,EAAE,4BAA4B,iCAAiC;AAAA,IACzE,CAAC;AAAA,EACH;AAAA,EACA,6BAA6B;AAC3B,WAAO,mBAAmB;AAAA,MACxB,WAAW,EAAE,MAAM,6BAA6B;AAAA,MAChD,QAAQ,EAAE,4BAA4B,sCAAsC;AAAA,IAC9E,CAAC;AAAA,EACH;AAAA,EACA,gBAAgB,oBAA4B;AAC1C,WAAO,mBAAmB;AAAA,MACxB,iBAAiB;AAAA,MACjB,QAAQ,EAAE,4BAA4B,yBAAyB;AAAA,IACjE,CAAC,EAAE,WAAW,KAAK,EAAE;AAAA,EACvB;AAAA,EACA,wCAAwC,oBAA4B;AAClE,WAAO,mBAAmB;AAAA,MACxB,iBAAiB;AAAA,MACjB,WAAW,EAAE,MAAM,eAAe;AAAA,MAClC,QAAQ,EAAE,4BAA4B,oBAAoB;AAAA,IAC5D,CAAC,EAAE,WAAW,KAAK,EAAE;AAAA,EACvB;AAAA,EACA,wDAAwD,oBAA4B;AAClF,WAAO,mBAAmB;AAAA,MACxB,iBAAiB;AAAA,MACjB,WAAW,EAAE,MAAM,eAAe;AAAA,MAClC,QAAQ,EAAE,4BAA4B,0BAA0B;AAAA,IAClE,CAAC,EAAE,WAAW,KAAK,EAAE;AAAA,EACvB;AAAA,EACA,SAAS,iBAAyB;AAChC,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,QAAQ,EAAE,4BAA4B,kBAAkB;AAAA,IAC1D,CAAC,EAAE,WAAW,KAAK,EAAE;AAAA,EACvB;AAAA,EACA,eAAe,iBAAyB;AACtC,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,QAAQ,EAAE,4BAA4B,wBAAwB;AAAA,IAChE,CAAC;AAAA,EACH;AAAA,EACA,SAAS,iBAAyB;AAChC,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,QAAQ,EAAE,4BAA4B,kBAAkB;AAAA,IAC1D,CAAC,EAAE,WAAW,KAAK,EAAE;AAAA,EACvB;AAAA,EACA,6BAA6B,iBAAyB;AACpD,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,WAAW,EAAE,MAAM,iBAAiB;AAAA,MACpC,QAAQ,EAAE,4BAA4B,sCAAsC;AAAA,IAC9E,CAAC;AAAA,EACH;AAAA,EACA,0BAA0B,iBAAyB;AACjD,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,QAAQ,EAAE,4BAA4B,gCAAgC;AAAA,IACxE,CAAC;AAAA,EACH;AAAA,EACA,iBAAiB,iBAAyB;AACxC,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,QAAQ,EAAE,4BAA4B,iCAAiC;AAAA,IACzE,CAAC;AAAA,EACH;AAAA,EACA,yBAAyB,iBAAyB;AAChD,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,WAAW,EAAE,MAAM,aAAa;AAAA,MAChC,QAAQ,EAAE,4BAA4B,sCAAsC;AAAA,IAC9E,CAAC;AAAA,EACH;AAAA,EACA,wBAAwB,iBAAyB;AAC/C,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,QAAQ,EAAE,4BAA4B,0BAA0B;AAAA,IAClE,CAAC;AAAA,EACH;AAAA,EACA,8BAA8B,iBAAyB;AACrD,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,WAAW,EAAE,MAAM,kBAAkB;AAAA,MACrC,QAAQ,EAAE,4BAA4B,iBAAiB;AAAA,IACzD,CAAC;AAAA,EACH;AAAA,EACA,8BAA8B,EAAE,sBAAsB,GAAsC;AAC1F,WAAO,mBAAmB;AAAA,MACxB,iBAAiB;AAAA,MACjB,WAAW,EAAE,MAAM,eAAe;AAAA,MAClC,QAAQ,EAAE,4BAA4B,iBAAiB;AAAA,IACzD,CAAC;AAAA,EACH;AAAA,EACA,gCAAgC,iBAAyB;AACvD,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,WAAW,EAAE,MAAM,6BAA6B;AAAA,MAChD,QAAQ,EAAE,4BAA4B,kBAAkB;AAAA,IAC1D,CAAC;AAAA,EACH;AAAA,EACA,oCAAoC,EAAE,sBAAsB,GAAsC;AAChG,WAAO,mBAAmB;AAAA,MACxB,iBAAiB;AAAA,MACjB,QAAQ,EAAE,4BAA4B,uCAAuC;AAAA,IAC/E,CAAC;AAAA,EACH;AAAA,EACA,gCAAgC,EAAE,sBAAsB,GAAsC;AAC5F,WAAO,mBAAmB;AAAA,MACxB,iBAAiB;AAAA,MACjB,QAAQ,EAAE,4BAA4B,gCAAgC;AAAA,IACxE,CAAC;AAAA,EACH;AACF;AAEA,IAAM,qBAAqB,wBAAC;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AACF,MAOM;AACJ,QAAM,eAAe,OAAO,2BAA2B,MAAM,GAAG;AAChE,QAAM,qBAAqB,mBAAmB;AAC9C,QAAM,oBAAoB,YACtB,GAAG,UAAU,IAAI,GAAG,UAAU,cAAc,SAAY,UAAU,YAAY,EAAE,GAC9E,UAAU,YAAY,SAAY,IAAI,UAAU,OAAO,KAAK,EAC9D,KACA;AACJ,QAAM,iBAAiB,GAAG,aAAa,aAAa,SAAS,CAAC,CAAC,GAAG,OAAO,UAAU,SAAY,OAAO,QAAQ,EAAE;AAChH,SAAO,WAAW,GAAG,kBAAkB,IAAI,iBAAiB,IAAI,cAAc,EAAE;AAClF,GArB2B;AAuB3B,IAAM,gCAAgC,wBAAC,6BAA6B;AAClE,MAAI,WAAW,wBAAwB,EAAE,QAAQ,KAAK,EAAE,EAAE,SAAS,IAAI;AACrE,WAAO,WAAW,wBAAwB,EAAE,QAAQ,KAAK,EAAE;AAAA,EAC7D;AACA,QAAM,iBAAiB,yBACpB,MAAM,GAAG,EACT,IAAI,CAAC,cAAc,UAAU,MAAM,GAAG,CAAC,EACvC,KAAK;AACR,QAAM,uBAAuB,KAAK,MAAM,KAAK,eAAe,MAAM;AAClE,SAAO,eAAe,IAAI,CAAC,SAAS,WAAW,KAAK,MAAM,GAAG,oBAAoB,CAAC,EAAE,QAAQ,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;AAC/G,GAVsC;;;ACl3C/B,IAAM,kBAGT;AAAA;AAAA,EAEF,QAAQ;AAAA,IACN,EAAE,aAAa,eAAe,QAAQ,cAAc,kBAAkB;AAAA,IACtE,EAAE,aAAa,eAAe,cAAc,cAAc,yBAAyB,aAAa,KAAK;AAAA,IACrG;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA,EAAE,aAAa,eAAe,WAAW,cAAc,2BAA2B,aAAa,KAAK;AAAA,EACtG;AAAA;AAAA,EAGA,UAAU;AAAA,IACR,EAAE,aAAa,eAAe,YAAY,cAAc,iBAAiB;AAAA,IACzE,EAAE,aAAa,eAAe,QAAQ,cAAc,wBAAwB;AAAA,IAC5E,EAAE,aAAa,eAAe,gBAAgB,cAAc,yBAAyB,aAAa,KAAK;AAAA,IACvG,EAAE,aAAa,eAAe,uBAAuB,cAAc,2BAA2B,aAAa,KAAK;AAAA,IAChH,EAAE,aAAa,eAAe,WAAW,cAAc,oBAAoB,aAAa,KAAK;AAAA,IAC7F;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA,EAAE,aAAa,eAAe,gBAAgB,cAAc,uBAAuB,aAAa,KAAK;AAAA,IACrG;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA,EAAE,aAAa,eAAe,gBAAgB,cAAc,sBAAsB,aAAa,KAAK;AAAA,IACpG;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,MACb,cAAc;AAAA,IAChB;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,MACb,cAAc;AAAA,IAChB;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,MACb,cAAc;AAAA,IAChB;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA,EAAE,aAAa,eAAe,WAAW,cAAc,2BAA2B,aAAa,KAAK;AAAA,IACpG;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,MACb,cAAc;AAAA,IAChB;AAAA,EACF;AAAA;AAAA,EAGA,uBAAuB;AAAA,IACrB,EAAE,aAAa,eAAe,eAAe,cAAc,0BAA0B;AAAA,IACrF,EAAE,aAAa,eAAe,iBAAiB,cAAc,0BAA0B;AAAA,IACvF;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA,EAAE,aAAa,eAAe,iBAAiB,cAAc,uBAAuB,aAAa,KAAK;AAAA,IACtG;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,MACb,cAAc;AAAA,IAChB;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,MACb,cAAc;AAAA,IAChB;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA,EAAE,aAAa,eAAe,YAAY,cAAc,wBAAwB,aAAa,KAAK;AAAA,IAClG;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,MACb,cAAc;AAAA,IAChB;AAAA,IACA,EAAE,aAAa,eAAe,eAAe,cAAc,yBAAyB,aAAa,KAAK;AAAA,IACtG;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,MACb,cAAc;AAAA,IAChB;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,MACb,cAAc;AAAA,IAChB;AAAA,EACF;AAAA;AAAA,EAGA,mBAAmB,CAAC,EAAE,aAAa,eAAe,mBAAmB,cAAc,6BAA6B,CAAC;AAAA;AAAA,EAGjH,oBAAoB;AAAA,IAClB,EAAE,aAAa,eAAe,SAAS,cAAc,yBAAyB;AAAA,IAC9E,EAAE,aAAa,eAAe,cAAc,cAAc,2BAA2B;AAAA,IACrF,EAAE,aAAa,eAAe,iBAAiB,cAAc,uBAAuB,aAAa,KAAK;AAAA,IACtG;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA,EAAE,aAAa,eAAe,gBAAgB,cAAc,8BAA8B,aAAa,KAAK;AAAA,IAC5G,EAAE,aAAa,eAAe,eAAe,cAAc,iCAAiC,aAAa,KAAK;AAAA,IAC9G;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA,EAAE,aAAa,eAAe,WAAW,cAAc,2BAA2B,aAAa,KAAK;AAAA,IACpG;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,EACF;AAAA;AAAA,EAGA,aAAa;AAAA,IACX,EAAE,aAAa,eAAe,kBAAkB,cAAc,kBAAkB,aAAa,KAAK;AAAA,IAClG,EAAE,aAAa,eAAe,oBAAoB,cAAc,kBAAkB,aAAa,KAAK;AAAA,IACpG,EAAE,aAAa,eAAe,mBAAmB,cAAc,kBAAkB,aAAa,KAAK;AAAA,IACnG,EAAE,aAAa,eAAe,sBAAsB,cAAc,6BAA6B,aAAa,KAAK;AAAA,IACjH,EAAE,aAAa,eAAe,gCAAgC,cAAc,kBAAkB,aAAa,KAAK;AAAA,IAChH;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA,EAAE,aAAa,eAAe,eAAe,cAAc,wBAAwB,aAAa,KAAK;AAAA,IACrG,EAAE,aAAa,eAAe,oBAAoB,cAAc,4BAA4B;AAAA,IAC5F,EAAE,aAAa,eAAe,mBAAmB,cAAc,mCAAmC;AAAA,IAClG,EAAE,aAAa,eAAe,kBAAkB,cAAc,uBAAuB,aAAa,KAAK;AAAA,IACvG,EAAE,aAAa,eAAe,uBAAuB,cAAc,iBAAiB;AAAA,IACpF;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,EACF;AAAA;AAAA,EAGA,aAAa;AAAA,IACX,EAAE,aAAa,eAAe,UAAU,cAAc,wBAAwB;AAAA,IAC9E,EAAE,aAAa,eAAe,iBAAiB,cAAc,wBAAwB,aAAa,KAAK;AAAA,EACzG;AAAA;AAAA,EAGA,iBAAiB;AAAA,IACf,EAAE,aAAa,eAAe,yBAAyB,cAAc,kBAAkB,aAAa,KAAK;AAAA,IACzG,EAAE,aAAa,eAAe,cAAc,cAAc,mCAAmC;AAAA,EAC/F;AAAA;AAAA,EAGA,iBAAiB;AAAA,IACf,EAAE,aAAa,eAAe,qBAAqB,cAAc,mCAAmC;AAAA,IACpG,EAAE,aAAa,eAAe,kBAAkB,cAAc,gCAAgC;AAAA,IAC9F,EAAE,aAAa,eAAe,oBAAoB,cAAc,0BAA0B;AAAA,IAC1F,EAAE,aAAa,eAAe,eAAe,cAAc,uBAAuB,aAAa,KAAK;AAAA,IACpG,EAAE,aAAa,eAAe,uBAAuB,cAAc,qCAAqC;AAAA,EAC1G;AAAA;AAAA,EAGA,0BAA0B;AAAA,IACxB;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA,EAAE,aAAa,eAAe,mBAAmB,cAAc,gCAAgC,aAAa,KAAK;AAAA,IACjH;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA,EAAE,aAAa,eAAe,oBAAoB,cAAc,mBAAmB,aAAa,KAAK;AAAA,IACrG,EAAE,aAAa,eAAe,mBAAmB,cAAc,+BAA+B;AAAA,IAC9F;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,EACF;AAAA;AAAA,EAGA,kBAAkB;AAAA,IAChB,EAAE,aAAa,eAAe,UAAU,cAAc,yBAAyB;AAAA,IAC/E,EAAE,aAAa,eAAe,2BAA2B,cAAc,iBAAiB;AAAA,IACxF,EAAE,aAAa,eAAe,gBAAgB,cAAc,+BAA+B;AAAA,IAC3F,EAAE,aAAa,eAAe,gBAAgB,cAAc,+BAA+B;AAAA,IAC3F;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,IAChB;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,EACF;AAAA;AAAA,EAGA,iBAAiB;AAAA,IACf;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA,EAAE,aAAa,eAAe,sBAAsB,cAAc,2BAA2B;AAAA,EAC/F;AAAA;AAAA,EAGA,6BAA6B;AAAA,IAC3B,EAAE,aAAa,eAAe,cAAc,cAAc,4CAA4C;AAAA,IACtG,EAAE,aAAa,eAAe,2BAA2B,cAAc,0BAA0B;AAAA,IACjG;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA,EAAE,aAAa,eAAe,UAAU,cAAc,yCAAyC,aAAa,KAAK;AAAA,IACjH;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA,EAAE,aAAa,eAAe,WAAW,cAAc,2BAA2B,aAAa,KAAK;AAAA,IACpG;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,EACF;AAAA;AAAA,EAGA,yBAAyB;AAAA,IACvB,EAAE,aAAa,eAAe,cAAc,cAAc,4CAA4C;AAAA,IACtG,EAAE,aAAa,eAAe,2BAA2B,cAAc,0BAA0B;AAAA,IACjG,EAAE,aAAa,eAAe,UAAU,cAAc,yCAAyC,aAAa,KAAK;AAAA,IACjH;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA,EAAE,aAAa,eAAe,WAAW,cAAc,2BAA2B,aAAa,KAAK;AAAA,EACtG;AAAA;AAAA;AAAA,EAIA,kBAAkB;AAAA,IAChB,EAAE,aAAa,eAAe,QAAQ,cAAc,kBAAkB;AAAA,IACtE,EAAE,aAAa,eAAe,cAAc,cAAc,yBAAyB,aAAa,KAAK;AAAA,IACrG;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA,EAAE,aAAa,eAAe,WAAW,cAAc,2BAA2B,aAAa,KAAK;AAAA,EACtG;AAAA;AAAA,EAGA,oBAAoB;AAAA,IAClB,EAAE,aAAa,eAAe,8BAA8B,cAAc,sCAAsC;AAAA,EAClH;AAAA;AAAA,EAGA,sBAAsB;AAAA,IACpB,EAAE,aAAa,eAAe,kBAAkB,cAAc,iCAAiC;AAAA,IAC/F,EAAE,aAAa,eAAe,yBAAyB,cAAc,2BAA2B,aAAa,KAAK;AAAA,IAClH;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,MACb,cAAc;AAAA,IAChB;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,EACF;AAAA;AAAA,EAGA,kBAAkB;AAAA,IAChB,EAAE,aAAa,eAAe,eAAe,cAAc,uBAAuB;AAAA,IAClF,EAAE,aAAa,eAAe,kBAAkB,cAAc,0BAA0B;AAAA,IACxF;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,cAAc;AAAA,IAChB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,cAAc;AAAA;AAAA,IAEZ;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,IAChB;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,IAChB;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,IAChB;AAAA;AAAA,IAEA,EAAE,aAAa,eAAe,QAAQ,cAAc,kBAAkB;AAAA,IACtE,EAAE,aAAa,eAAe,cAAc,cAAc,yBAAyB,aAAa,KAAK;AAAA,IACrG;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA,EAAE,aAAa,eAAe,WAAW,cAAc,2BAA2B,aAAa,KAAK;AAAA;AAAA,IAEpG,EAAE,aAAa,eAAe,YAAY,cAAc,iBAAiB;AAAA,IACzE,EAAE,aAAa,eAAe,QAAQ,cAAc,wBAAwB;AAAA,IAC5E,EAAE,aAAa,eAAe,gBAAgB,cAAc,uBAAuB,aAAa,KAAK;AAAA,IACrG,EAAE,aAAa,eAAe,WAAW,cAAc,oBAAoB,aAAa,KAAK;AAAA;AAAA,IAE7F;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA;AAAA,IAEA,EAAE,aAAa,eAAe,UAAU,cAAc,kBAAkB;AAAA,IACxE,EAAE,aAAa,eAAe,gBAAgB,cAAc,yBAAyB,aAAa,KAAK;AAAA;AAAA,IAEvG,EAAE,aAAa,eAAe,mBAAmB,cAAc,6BAA6B;AAAA,EAC9F;AAAA;AAAA,EAGA,4BAA4B;AAAA;AAAA,IAE1B,EAAE,aAAa,eAAe,kBAAkB,cAAc,kBAAkB,aAAa,KAAK;AAAA,IAClG,EAAE,aAAa,eAAe,oBAAoB,cAAc,kBAAkB,aAAa,KAAK;AAAA;AAAA,IAEpG;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,MACb,cAAc;AAAA,IAChB;AAAA;AAAA,IAEA,EAAE,aAAa,eAAe,oBAAoB,cAAc,kBAAkB,aAAa,KAAK;AAAA,IACpG;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA,EAAE,aAAa,eAAe,uBAAuB,cAAc,6BAA6B,aAAa,KAAK;AAAA,IAClH;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA;AAAA,IAEA,EAAE,aAAa,eAAe,kBAAkB,cAAc,gCAAgC,aAAa,KAAK;AAAA,IAChH;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA;AAAA,IAEA,EAAE,aAAa,eAAe,YAAY,cAAc,oBAAoB;AAAA,IAC5E,EAAE,aAAa,eAAe,uBAAuB,cAAc,0BAA0B;AAAA,IAC7F;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,cAAc;AAAA,IAChB;AAAA,IACA,EAAE,aAAa,eAAe,aAAa,cAAc,iBAAiB;AAAA,IAC1E,EAAE,aAAa,eAAe,mBAAmB,cAAc,2BAA2B;AAAA;AAAA,IAE1F;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,MACb,cAAc;AAAA,IAChB;AAAA,IACA,EAAE,aAAa,eAAe,gBAAgB,cAAc,yBAAyB,aAAa,KAAK;AAAA,IACvG;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,EACF;AAAA;AAAA,EAGA,aAAa;AAAA,IACX,EAAE,aAAa,eAAe,UAAU,cAAc,kBAAkB;AAAA,IACxE,EAAE,aAAa,eAAe,gBAAgB,cAAc,yBAAyB,aAAa,KAAK;AAAA,EACzG;AAAA;AAAA,EAGA,aAAa,CAAC,EAAE,aAAa,eAAe,UAAU,cAAc,kBAAkB,CAAC;AAAA;AAAA,EAGvF,SAAS;AAAA,IACP;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA,EAAE,aAAa,eAAe,4BAA4B,cAAc,qCAAqC;AAAA,IAC7G,EAAE,aAAa,eAAe,sBAAsB,cAAc,0BAA0B;AAAA,IAC5F,EAAE,aAAa,eAAe,0BAA0B,cAAc,2BAA2B;AAAA,IACjG,EAAE,aAAa,eAAe,aAAa,cAAc,iBAAiB;AAAA,IAC1E,EAAE,aAAa,eAAe,2BAA2B,cAAc,4BAA4B;AAAA,IACnG,EAAE,aAAa,eAAe,8BAA8B,cAAc,wBAAwB;AAAA,IAClG,EAAE,aAAa,eAAe,+BAA+B,cAAc,wBAAwB;AAAA,IACnG;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,MACb,cAAc;AAAA,IAChB;AAAA,EACF;AAAA;AAAA,EAGA,wBAAwB;AAAA,IACtB,EAAE,aAAa,eAAe,0BAA0B,cAAc,sCAAsC;AAAA,EAC9G;AAAA;AAAA;AAAA,EAIA,eAAe;AAAA;AAAA,IAEb,EAAE,aAAa,eAAe,YAAY,cAAc,oBAAoB;AAAA,IAC5E,EAAE,aAAa,eAAe,uBAAuB,cAAc,0BAA0B;AAAA,IAC7F;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,cAAc;AAAA,IAChB;AAAA,IACA,EAAE,aAAa,eAAe,aAAa,cAAc,iBAAiB;AAAA,IAC1E,EAAE,aAAa,eAAe,mBAAmB,cAAc,2BAA2B;AAAA;AAAA,IAE1F,EAAE,aAAa,eAAe,kBAAkB,cAAc,kBAAkB,aAAa,KAAK;AAAA,IAClG,EAAE,aAAa,eAAe,oBAAoB,cAAc,kBAAkB,aAAa,KAAK;AAAA,IACpG;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,MACb,cAAc;AAAA,IAChB;AAAA,IACA,EAAE,aAAa,eAAe,oBAAoB,cAAc,kBAAkB,aAAa,KAAK;AAAA,IACpG;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA,EAAE,aAAa,eAAe,uBAAuB,cAAc,6BAA6B,aAAa,KAAK;AAAA,IAClH;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA,EAAE,aAAa,eAAe,kBAAkB,cAAc,gCAAgC,aAAa,KAAK;AAAA,IAChH;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,MACb,cAAc;AAAA,IAChB;AAAA,IACA,EAAE,aAAa,eAAe,gBAAgB,cAAc,yBAAyB,aAAa,KAAK;AAAA;AAAA,IAEvG;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA,EAAE,aAAa,eAAe,UAAU,cAAc,yCAAyC,aAAa,KAAK;AAAA,IACjH;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA;AAAA,IAEA,EAAE,aAAa,eAAe,SAAS,cAAc,0BAA0B,aAAa,KAAK;AAAA,IACjG,EAAE,aAAa,eAAe,cAAc,cAAc,4BAA4B,aAAa,KAAK;AAAA,IACxG,EAAE,aAAa,eAAe,iBAAiB,cAAc,uBAAuB,aAAa,KAAK;AAAA,IACtG;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA,EAAE,aAAa,eAAe,gBAAgB,cAAc,8BAA8B,aAAa,KAAK;AAAA,IAC5G,EAAE,aAAa,eAAe,eAAe,cAAc,iCAAiC,aAAa,KAAK;AAAA,IAC9G;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA;AAAA,IAEA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA,EAAE,aAAa,eAAe,WAAW,cAAc,2BAA2B,aAAa,KAAK;AAAA,IACpG;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,EACF;AAAA;AAAA;AAAA,EAIA,mBAAmB;AAAA;AAAA,IAEjB,EAAE,aAAa,eAAe,YAAY,cAAc,oBAAoB;AAAA,IAC5E,EAAE,aAAa,eAAe,uBAAuB,cAAc,0BAA0B;AAAA,IAC7F;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,cAAc;AAAA,IAChB;AAAA,IACA,EAAE,aAAa,eAAe,aAAa,cAAc,iBAAiB;AAAA,IAC1E,EAAE,aAAa,eAAe,mBAAmB,cAAc,2BAA2B;AAAA;AAAA,IAE1F,EAAE,aAAa,eAAe,kBAAkB,cAAc,kBAAkB,aAAa,KAAK;AAAA,IAClG,EAAE,aAAa,eAAe,oBAAoB,cAAc,kBAAkB,aAAa,KAAK;AAAA,IACpG;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,MACb,cAAc;AAAA,IAChB;AAAA,IACA,EAAE,aAAa,eAAe,oBAAoB,cAAc,kBAAkB,aAAa,KAAK;AAAA,IACpG;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA,EAAE,aAAa,eAAe,uBAAuB,cAAc,6BAA6B,aAAa,KAAK;AAAA,IAClH;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA,EAAE,aAAa,eAAe,kBAAkB,cAAc,gCAAgC,aAAa,KAAK;AAAA,IAChH;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,MACb,cAAc;AAAA,IAChB;AAAA,IACA,EAAE,aAAa,eAAe,gBAAgB,cAAc,yBAAyB,aAAa,KAAK;AAAA;AAAA,IAEvG;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA,EAAE,aAAa,eAAe,UAAU,cAAc,yCAAyC,aAAa,KAAK;AAAA,IACjH;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA,EAAE,aAAa,eAAe,WAAW,cAAc,2BAA2B,aAAa,KAAK;AAAA,EACtG;AAAA;AAAA;AAAA,EAIA,kBAAkB;AAAA;AAAA,IAEhB,EAAE,aAAa,eAAe,YAAY,cAAc,oBAAoB;AAAA,IAC5E,EAAE,aAAa,eAAe,uBAAuB,cAAc,0BAA0B;AAAA,IAC7F;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,cAAc;AAAA,IAChB;AAAA,IACA,EAAE,aAAa,eAAe,aAAa,cAAc,iBAAiB;AAAA,IAC1E,EAAE,aAAa,eAAe,mBAAmB,cAAc,2BAA2B;AAAA;AAAA,IAE1F,EAAE,aAAa,eAAe,kBAAkB,cAAc,kBAAkB,aAAa,KAAK;AAAA,IAClG,EAAE,aAAa,eAAe,oBAAoB,cAAc,kBAAkB,aAAa,KAAK;AAAA,IACpG;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,MACb,cAAc;AAAA,IAChB;AAAA,IACA,EAAE,aAAa,eAAe,oBAAoB,cAAc,kBAAkB,aAAa,KAAK;AAAA,IACpG;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA,EAAE,aAAa,eAAe,uBAAuB,cAAc,6BAA6B,aAAa,KAAK;AAAA,IAClH;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA,EAAE,aAAa,eAAe,kBAAkB,cAAc,gCAAgC,aAAa,KAAK;AAAA,IAChH;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,MACb,cAAc;AAAA,IAChB;AAAA,IACA,EAAE,aAAa,eAAe,gBAAgB,cAAc,yBAAyB,aAAa,KAAK;AAAA,IACvG;AAAA,MACE,aAAa,eAAe;AAAA,MAC5B,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,EACF;AAAA;AAAA,EAGA,4BAA4B,CAAC;AAAA,EAC7B,8BAA8B,CAAC;AAAA,EAC/B,qBAAqB,CAAC;AAAA,EACtB,qBAAqB,CAAC;AACxB;;;ACxjCA,IAAM,0BAA0B,OAAO,IAAI,6BAA6B;AACxE,IAAM,gBAAgB,OAAO,IAAI,mBAAmB;AACpD,IAAM,sBAAsB,OAAO,IAAI,yBAAyB;AAChE,IAAM,qBAAqB,OAAO,IAAI,wBAAwB;AAKvD,IAAM,yBAAN,MAA6B;AAAA,EAZpC,OAYoC;AAAA;AAAA;AAAA,EAIlC,YAAY,cAAsB,OAAe;AAC/C,SAAK,iBAAiB;AACtB,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,WAAmB;AACjB,WAAO,mBAAmB,KAAK,cAAc,OAAO,KAAK,OAAO;AAAA,EAClE;AAAA,EAEA,SAAiB;AACf,WAAO,KAAK,SAAS;AAAA,EACvB;AAAA;AAAA,EAGA,UAAkB;AAChB,WAAO,KAAK,SAAS;AAAA,EACvB;AACF;AAKO,IAAM,qBAAN,MAAyB;AAAA,EAtChC,OAsCgC;AAAA;AAAA;AAAA,EAI9B,YAAY,MAAc,YAAiB;AACzC,SAAK,OAAO;AACZ,SAAK,aAAa;AAAA,EACpB;AACF;AAKO,IAAM,eAAN,MAAmB;AAAA,EAnD1B,OAmD0B;AAAA;AAAA;AAAA,EAMxB,YAAY,MAAc,MAAc,YAAiB,WAAiB;AACxE,SAAK,gBAAgB;AACrB,SAAK,QAAQ;AAGb,QAAI,kBAAkB;AACtB,QAAI,iBAAiB;AAErB,QAAI,cAAc,OAAO,eAAe,YAAY,eAAe,YAAY;AAE7E,wBAAkB,EAAE,GAAG,WAAW;AAClC,YAAM,sBAAsB,gBAAgB;AAC5C,aAAO,gBAAgB;AAGvB,UAAI,uBAAuB,OAAO,wBAAwB,UAAU;AAClE,yBAAiB,iCAAiC,MAAM,MAAM,mBAAmB;AAAA,MACnF;AAAA,IACF;AAEA,SAAK,cAAc;AACnB,SAAK,aAAa;AAAA,EACpB;AAAA;AAAA,EAGA,IAAI,eAAuB;AACzB,WAAO,KAAK;AAAA,EACd;AAAA;AAAA,EAGA,CAAC,uBAAuB,EAAE,WAA2C;AACnE,WAAO,IAAI,uBAAuB,KAAK,eAAe,SAAS;AAAA,EACjE;AAAA,EAEA,CAAC,aAAa,IAAY;AACxB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,CAAC,mBAAmB,IAAS;AAC3B,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,CAAC,kBAAkB,IAAqB;AACtC,WAAO,KAAK;AAAA,EACd;AACF;AAMA,SAAS,iCAAiC,cAAsB,cAAsB,WAAqB;AAEzG,QAAM,iBAAiB,gBAAgB,YAAY,KAAK,CAAC;AAGzD,QAAM,kBAAkB,oBAAI,IAAiB;AAE7C,aAAW,iBAAiB,gBAAgB;AAE1C,QAAI,cAAc,eAAe,cAAc,YAAY,MAAM;AAC/D,sBAAgB,IAAI,cAAc,YAAY,MAAM,aAAa;AAAA,IACnE;AAAA,EACF;AAGA,QAAM,uBAA4B,CAAC;AACnC,QAAM,eAAe,mDAAmD,YAAY;AAAA;AAAA;AAGpF,aAAW,gBAAgB,WAAW;AACpC,UAAM,gBAAgB,gBAAgB,IAAI,YAAY;AAGtD,QAAI,eAAe,cAAc;AAC/B,YAAM,IAAI,MAAM,aAAa,QAAQ,kBAAkB,YAAY,CAAC;AAAA,IACtE;AAEA,QAAI,eAAe;AACjB,YAAM,gBAAgB,cAAc;AAGpC,UAAI;AACJ,UAAI;AACF,sBAAc,cAAc,YAAY;AAAA,MAC1C,QAAQ;AACN,YAAI;AACF,wBAAc,cAAc;AAAA,QAC9B,QAAQ;AAEN,wBAAc;AAAA,QAChB;AAAA,MACF;AACA,UAAI,YAAY,SAAS,WAAW,GAAG;AACrC,cAAM,IAAI,MAAM,aAAa,QAAQ,kBAAkB,YAAY,CAAC;AAAA,MACtE;AACA,2BAAqB,WAAW,IAAI,UAAU,YAAY;AAAA,IAC5D,OAAO;AAEL,2BAAqB,YAAY,IAAI,UAAU,YAAY;AAAA,IAC7D;AAAA,EACF;AAEA,SAAO;AACT;AArDS;AA4FF,IAAM,eAAe,wBAAC,aAAmF;AAC9G,SAAO,CAAC,WAA4B;AAClC,UAAM,SAAS,SAAS,MAAM;AAC9B,WAAO,6BAA6B,MAAM;AAAA,EAC5C;AACF,GAL4B;AAUrB,IAAM,+BAA+B,wBAAC,WAAqB;AAChE,MAAI,CAAC,UAAU,OAAO,WAAW,UAAU;AACzC,WAAO;AAAA,EACT;AAGA,QAAM,SAAc,CAAC;AACrB,aAAW,OAAO,QAAQ;AACxB,QAAI,QAAQ,aAAa;AAEvB,aAAO,GAAG,IAAI,6BAA6B,OAAO,GAAG,CAAC;AAAA,IACxD,WAAW,QAAQ,WAAW;AAE5B,aAAO,GAAG,IAAI,2BAA2B,OAAO,GAAG,CAAC;AAAA,IACtD,OAAO;AACL,aAAO,GAAG,IAAI,eAAe,OAAO,GAAG,CAAC;AAAA,IAC1C;AAAA,EACF;AACA,SAAO;AACT,GAnB4C;AAwB5C,IAAM,uBAAuB,wBAAC,QAAkB;AAC9C,MAAI,CAAC,OAAO,OAAO,QAAQ,YAAY,MAAM,QAAQ,GAAG,GAAG;AACzD,WAAO;AAAA,EACT;AAGA,SAAO,OAAO,QAAQ,GAAG,EAAE,IAAI,CAAC,CAAC,MAAM,KAAK,OAAO;AAAA,IACjD;AAAA,IACA,OAAO,eAAe,KAAK;AAAA,EAC7B,EAAE;AACJ,GAV6B;AAe7B,IAAM,+BAA+B,wBAAC,cAAwB;AAC5D,MAAI,CAAC,aAAa,OAAO,cAAc,UAAU;AAC/C,WAAO;AAAA,EACT;AAEA,QAAM,SAAc,CAAC;AACrB,aAAW,OAAO,WAAW;AAC3B,UAAM,WAAW,UAAU,GAAG;AAC9B,QAAI,oBAAoB,cAAc;AACpC,YAAM,OAAQ,SAAiB,aAAa,EAAE;AAC9C,YAAM,aAAc,SAAiB,mBAAmB,EAAE;AAC1D,YAAM,YAAa,SAAiB,kBAAkB,EAAE;AACxD,aAAO,GAAG,IAAI;AAAA,QACZ;AAAA,QACA,YAAY,eAAe,UAAU;AAAA,QACrC,GAAI,cAAc,UAAa,EAAE,WAAW,eAAe,SAAS,EAAE;AAAA,MACxE;AAAA,IACF,OAAO;AACL,aAAO,GAAG,IAAI,eAAe,QAAQ;AAAA,IACvC;AAAA,EACF;AACA,SAAO;AACT,GAtBqC;AA2BrC,IAAM,6BAA6B,wBAAC,YAAsB;AACxD,MAAI,CAAC,WAAW,OAAO,YAAY,UAAU;AAC3C,WAAO;AAAA,EACT;AAEA,QAAM,SAAc,CAAC;AACrB,aAAW,OAAO,SAAS;AACzB,UAAM,SAAS,QAAQ,GAAG;AAC1B,QAAI,kBAAkB,oBAAoB;AACxC,aAAO,GAAG,IAAI;AAAA,QACZ,MAAM,OAAO;AAAA,QACb,YAAY,eAAe,OAAO,UAAU;AAAA,MAC9C;AAAA,IACF,OAAO;AACL,aAAO,GAAG,IAAI,eAAe,MAAM;AAAA,IACrC;AAAA,EACF;AACA,SAAO;AACT,GAlBmC;AAoB5B,IAAM,iBAAiB,wBAAC,UAAoB;AACjD,MAAI,UAAU,QAAQ,UAAU,QAAW;AACzC,WAAO;AAAA,EACT;AAGA,MAAI,iBAAiB,wBAAwB;AAC3C,WAAO,MAAM,SAAS;AAAA,EACxB;AAIA,MAAI,iBAAiB,cAAc;AACjC,WAAO,MAAM;AAAA,EACf;AAGA,MAAI,iBAAiB,oBAAoB;AACvC,WAAO;AAAA,MACL,MAAM,MAAM;AAAA,MACZ,YAAY,eAAe,MAAM,UAAU;AAAA,IAC7C;AAAA,EACF;AAGA,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,WAAO,MAAM,IAAI,CAAC,SAAS;AAEzB,UAAI,gBAAgB,cAAc;AAChC,eAAO,KAAK;AAAA,MACd;AACA,aAAO,eAAe,IAAI;AAAA,IAC5B,CAAC;AAAA,EACH;AAGA,MAAI,OAAO,UAAU,UAAU;AAC7B,UAAM,SAAc,CAAC;AACrB,eAAW,OAAO,OAAO;AAEvB,UAAI,QAAQ,eAAe;AACzB,eAAO,GAAG,IAAI,qBAAqB,MAAM,GAAG,CAAC;AAAA,MAC/C,OAAO;AACL,eAAO,GAAG,IAAI,eAAe,MAAM,GAAG,CAAC;AAAA,MACzC;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAEA,SAAO;AACT,GAlD8B;;;ACnSvB,IAAM,iBAAiB,wBAAC,cAAsB,aAAqB;AACxE,SAAO,mBAAmB,YAAY,MAAM,QAAQ;AACtD,GAF8B;AAYvB,IAAM,mBAAmB,wBAAC,iCAAyC,aAAqB;AAC7F,SAAO,qBAAqB,+BAA+B,MAAM,QAAQ;AAC3E,GAFgC;AAUzB,IAAM,UAAU,wBAAC,eAAuB;AAC7C,SAAO,YAAY,UAAU;AAC/B,GAFuB;AAahB,IAAM,YAAY,wBAAC,uBAA+B,WAAkB;AACzE,SAAO,cAAc,kBAAkB,OAAO,OAAO,KAAK,GAAG,CAAC;AAChE,GAFyB;AAUlB,IAAM,iBAAiB,wBAAC,WAAmB,eAAuB;AACvE,SAAO,mBAAmB,SAAS,MAAM,UAAU;AACrD,GAF8B;AAyBvB,IAAM,WAAW,6BAAM;AAC5B,SAAO;AACT,GAFwB;;;ACvEjB,IAAM,UAAU;;;AC6ehB,IAAM,uBAAqF;AAAA,EAChG,uBAAuB;AAAA,IACrB,EAAE,MAAM,oBAAoB,aAAa,qCAAqC;AAAA,IAC9E,EAAE,MAAM,wBAAwB,aAAa,yBAAyB;AAAA,IACtE,EAAE,MAAM,QAAQ,aAAa,gBAAgB;AAAA,IAC7C,EAAE,MAAM,QAAQ,aAAa,gBAAgB;AAAA,IAC7C,EAAE,MAAM,UAAU,aAAa,gBAAgB;AAAA,IAC/C,EAAE,MAAM,cAAc,aAAa,uBAAuB;AAAA,IAC1D,EAAE,MAAM,0BAA0B,aAAa,2BAA2B;AAAA,IAC1E,EAAE,MAAM,8BAA8B,aAAa,gCAAgC;AAAA,EACrF;AAAA,EACA,eAAe;AAAA,IACb,EAAE,MAAM,UAAU,aAAa,qBAAqB;AAAA,IACpD,EAAE,MAAM,OAAO,aAAa,kBAAkB;AAAA,IAC9C,EAAE,MAAM,iBAAiB,aAAa,iBAAiB;AAAA,IACvD,EAAE,MAAM,oBAAoB,aAAa,qBAAqB;AAAA,EAChE;AAAA,EACA,mBAAmB,CAAC,EAAE,MAAM,WAAW,aAAa,0BAA0B,CAAC;AAAA,EAC/E,QAAQ;AAAA,IACN,EAAE,MAAM,QAAQ,aAAa,cAAc;AAAA,IAC3C,EAAE,MAAM,OAAO,aAAa,aAAa;AAAA,EAC3C;AAAA,EACA,mBAAmB;AAAA,IACjB,EAAE,MAAM,QAAQ,aAAa,aAAa;AAAA,IAC1C,EAAE,MAAM,OAAO,aAAa,YAAY;AAAA,IACxC,EAAE,MAAM,aAAa,aAAa,aAAa;AAAA,EACjD;AAAA,EACA,UAAU;AAAA,IACR,EAAE,MAAM,OAAO,aAAa,eAAe;AAAA,IAC3C,EAAE,MAAM,eAAe,aAAa,gBAAgB;AAAA,EACtD;AAAA,EACA,aAAa;AAAA,IACX,EAAE,MAAM,oBAAoB,aAAa,qBAAqB;AAAA,IAC9D,EAAE,MAAM,mBAAmB,aAAa,oBAAoB;AAAA,IAC5D,EAAE,MAAM,eAAe,aAAa,gBAAgB;AAAA,EACtD;AAAA,EACA,aAAa;AAAA,IACX,EAAE,MAAM,OAAO,aAAa,gBAAgB;AAAA,IAC5C,EAAE,MAAM,cAAc,aAAa,cAAc;AAAA,EACnD;AAAA,EACA,oBAAoB;AAAA,IAClB,EAAE,MAAM,UAAU,aAAa,qBAAqB;AAAA,IACpD,EAAE,MAAM,OAAO,aAAa,kBAAkB;AAAA,IAC9C,EAAE,MAAM,iBAAiB,aAAa,iBAAiB;AAAA,IACvD,EAAE,MAAM,oBAAoB,aAAa,qBAAqB;AAAA,IAC9D,EAAE,MAAM,mBAAmB,aAAa,0BAA0B;AAAA,EACpE;AAAA,EACA,0BAA0B,CAAC,EAAE,MAAM,oBAAoB,aAAa,4BAA4B,CAAC;AAAA,EACjG,iBAAiB;AAAA,IACf,EAAE,MAAM,QAAQ,aAAa,aAAa;AAAA,IAC1C,EAAE,MAAM,cAAc,aAAa,oBAAoB;AAAA,IACvD,EAAE,MAAM,QAAQ,aAAa,aAAa;AAAA,IAC1C,EAAE,MAAM,YAAY,aAAa,kBAAkB;AAAA,EACrD;AAAA,EACA,iBAAiB;AAAA,IACf,EAAE,MAAM,OAAO,aAAa,oBAAoB;AAAA,IAChD,EAAE,MAAM,QAAQ,aAAa,qBAAqB;AAAA,EACpD;AAAA,EACA,kBAAkB;AAAA,IAChB,EAAE,MAAM,MAAM,aAAa,eAAe;AAAA,IAC1C,EAAE,MAAM,YAAY,aAAa,YAAY;AAAA,IAC7C,EAAE,MAAM,UAAU,aAAa,mBAAmB;AAAA,EACpD;AAAA,EACA,iBAAiB;AAAA,IACf,EAAE,MAAM,QAAQ,aAAa,qBAAqB;AAAA,IAClD,EAAE,MAAM,QAAQ,aAAa,qBAAqB;AAAA,IAClD,EAAE,MAAM,YAAY,aAAa,WAAW;AAAA,IAC5C,EAAE,MAAM,aAAa,aAAa,aAAa;AAAA,IAC/C,EAAE,MAAM,qBAAqB,aAAa,uBAAuB;AAAA,IACjE,EAAE,MAAM,WAAW,aAAa,WAAW;AAAA,IAC3C,EAAE,MAAM,YAAY,aAAa,YAAY;AAAA,EAC/C;AAAA,EACA,6BAA6B;AAAA,IAC3B,EAAE,MAAM,UAAU,aAAa,uBAAuB;AAAA,IACtD,EAAE,MAAM,iBAAiB,aAAa,iBAAiB;AAAA,EACzD;AAAA,EACA,yBAAyB;AAAA,IACvB,EAAE,MAAM,UAAU,aAAa,uBAAuB;AAAA,IACtD,EAAE,MAAM,iBAAiB,aAAa,iBAAiB;AAAA,EACzD;AAAA,EACA,kBAAkB;AAAA,IAChB,EAAE,MAAM,QAAQ,aAAa,cAAc;AAAA,IAC3C,EAAE,MAAM,OAAO,aAAa,aAAa;AAAA,EAC3C;AAAA,EACA,oBAAoB;AAAA,IAClB,EAAE,MAAM,OAAO,aAAa,eAAe;AAAA,IAC3C,EAAE,MAAM,SAAS,aAAa,iBAAiB;AAAA,EACjD;AAAA,EACA,sBAAsB;AAAA,IACpB,EAAE,MAAM,kBAAkB,aAAa,6BAA6B;AAAA,IACpE,EAAE,MAAM,OAAO,aAAa,aAAa;AAAA,EAC3C;AAAA,EACA,kBAAkB;AAAA,IAChB,EAAE,MAAM,OAAO,aAAa,UAAU;AAAA,IACtC,EAAE,MAAM,MAAM,aAAa,SAAS;AAAA,EACtC;AAAA,EACA,cAAc,CAAC,EAAE,MAAM,OAAO,aAAa,cAAc,CAAC;AAC5D;;;AC9kBA,IAAMA,2BAA0B,OAAO,IAAI,6BAA6B;AAKxE,SAAS,oBAAoB,WAAmB,cAA2B;AAEzE,QAAM,gBAAgB,cAAc,aAAa;AAAA,IAXnD,OAWmD;AAAA;AAAA;AAAA,IAC/C,YAAY,MAAc,YAAiB,WAAiB;AAC1D,YAAM,MAAM,cAAc,YAAY,SAAS;AAAA,IACjD;AAAA,EACF;AAGA,SAAO,eAAe,eAAe,QAAQ,EAAE,OAAO,UAAU,CAAC;AAGjE,QAAM,sBAAsB,qBAAqB,YAAY,KAAK,CAAC;AACnE,aAAW,SAAS,qBAAqB;AACvC,WAAO,eAAe,cAAc,WAAW,MAAM,MAAM;AAAA,MACzD,MAAwB;AACtB,eAAQ,KAAaA,wBAAuB,EAAE,MAAM,IAAI;AAAA,MAC1D;AAAA,MACA,YAAY;AAAA,MACZ,cAAc;AAAA,IAChB,CAAC;AAAA,EACH;AAEA,SAAO;AACT;AAxBS;AA4BF,IAAM,qBAAqB,oBAAoB,sBAAsB,qBAAqB;AAC1F,IAAM,aAAa,oBAAoB,cAAc,aAAa;AAClE,IAAM,iBAAiB,oBAAoB,kBAAkB,iBAAiB;AAC9E,IAAM,gBAAgB,oBAAoB,iBAAiB,gBAAgB;AAC3E,IAAM,oBAAoB,oBAAoB,qBAAqB,0BAA0B;AAC7F,IAAM,iBAAiB,oBAAoB,kBAAkB,UAAU;AACvE,IAAM,WAAW,oBAAoB,YAAY,WAAW;AAC5D,IAAM,SAAS,oBAAoB,UAAU,QAAQ;AACrD,IAAM,gBAAgB,oBAAoB,iBAAiB,gBAAgB;AAC3E,IAAM,gBAAgB,oBAAoB,iBAAiB,iBAAiB;AAC5E,IAAM,WAAW,oBAAoB,YAAY,WAAW;AAC5D,IAAM,iBAAiB,oBAAoB,kBAAkB,kBAAkB;AAC/E,IAAM,0BAA0B,oBAAoB,2BAA2B,2BAA2B;AAC1G,IAAM,sBAAsB,oBAAoB,uBAAuB,uBAAuB;AAC9F,IAAM,eAAe,oBAAoB,gBAAgB,eAAe;AACxE,IAAM,sBAAsB,oBAAoB,uBAAuB,wBAAwB;AAC/F,IAAM,eAAe,oBAAoB,gBAAgB,eAAe;AACxE,IAAM,eAAe,oBAAoB,gBAAgB,gBAAgB;AACzE,IAAM,eAAe,oBAAoB,gBAAgB,eAAe;AACxE,IAAM,WAAW,oBAAoB,YAAY,WAAW;AAC5D,IAAM,WAAW,oBAAoB,YAAY,WAAW;AAC5D,IAAM,iBAAiB,oBAAoB,kBAAkB,kBAAkB;AAC/E,IAAM,mBAAmB,oBAAoB,oBAAoB,oBAAoB;AACrF,IAAM,gBAAgB,oBAAoB,iBAAiB,gBAAgB;AAC3E,IAAM,YAAY,oBAAoB,aAAa,YAAY;AAC/D,IAAM,UAAU,oBAAoB,WAAW,SAAS;;;ACzD/D,SAAS,0BAA0B,WAAmB,WAAwB;AAC5E,QAAM,sBAAsB,cAAc,mBAAmB;AAAA,IAN/D,OAM+D;AAAA;AAAA;AAAA,IAC3D,YAAY,YAAiB;AAC3B,YAAM,WAAW,UAAU;AAAA,IAC7B;AAAA,EACF;AAEA,SAAO,eAAe,qBAAqB,QAAQ,EAAE,OAAO,UAAU,CAAC;AACvE,SAAO;AACT;AATS;AAaF,IAAM,oBAAoB,0BAA0B,qBAAqB,UAAU;AACnF,IAAM,mBAAmB,0BAA0B,oBAAoB,SAAS;AAChF,IAAM,iBAAiB,0BAA0B,kBAAkB,OAAO;AAC1E,IAAM,oBAAoB,0BAA0B,qBAAqB,WAAW;AACpF,IAAM,qBAAqB,0BAA0B,sBAAsB,YAAY;AACvF,IAAM,uBAAuB,0BAA0B,wBAAwB,cAAc;AAC7F,IAAM,uBAAuB,0BAA0B,wBAAwB,cAAc;AAC7F,IAAM,uBAAuB,0BAA0B,wBAAwB,cAAc;AAC7F,IAAM,wBAAwB,0BAA0B,yBAAyB,eAAe;AAChG,IAAM,yBAAyB,0BAA0B,0BAA0B,mBAAmB;AACtG,IAAM,oBAAoB,0BAA0B,qBAAqB,cAAc;AACvF,IAAM,mCAAmC;AAAA,EAC9C;AAAA,EACA;AACF;AACO,IAAM,8BAA8B;AAAA,EACzC;AAAA,EACA;AACF;AACO,IAAM,qCAAqC;AAAA,EAChD;AAAA,EACA;AACF;AACO,IAAM,gCAAgC;AAAA,EAC3C;AAAA,EACA;AACF;AAIO,IAAM,oCAAoC;AAAA,EAC/C;AAAA,EACA;AACF;AACO,IAAM,gCAAgC;AAAA,EAC3C;AAAA,EACA;AACF;AAIO,IAAM,yBAAyB,0BAA0B,0BAA0B,gBAAgB;AACnG,IAAM,4BAA4B,0BAA0B,6BAA6B,mBAAmB;AAC5G,IAAM,6BAA6B,0BAA0B,8BAA8B,oBAAoB;AAC/G,IAAM,oBAAoB,0BAA0B,qBAAqB,UAAU;AACnF,IAAM,mCAAmC;AAAA,EAC9C;AAAA,EACA;AACF;AAIO,IAAM,qBAAqB,0BAA0B,sBAAsB,kBAAkB;AAC7F,IAAM,gBAAgB,0BAA0B,iBAAiB,IAAI;AACrE,IAAM,sBAAsB,0BAA0B,uBAAuB,UAAU;AACvF,IAAM,iBAAiB,0BAA0B,kBAAkB,KAAK;AACxE,IAAM,iBAAiB,0BAA0B,kBAAkB,KAAK;AACxE,IAAM,qBAAqB,0BAA0B,sBAAsB,SAAS;AACpF,IAAM,sBAAsB,0BAA0B,uBAAuB,UAAU;AACvF,IAAM,2BAA2B,0BAA0B,4BAA4B,iBAAiB;AACxG,IAAM,qCAAqC;AAAA,EAChD;AAAA,EACA;AACF;AACO,IAAM,sBAAsB,0BAA0B,uBAAuB,WAAW;AACxF,IAAM,wBAAwB,0BAA0B,yBAAyB,aAAa;AAC9F,IAAM,mBAAmB,0BAA0B,oBAAoB,OAAO;AAI9E,IAAM,uBAAuB,0BAA0B,wBAAwB,2BAA2B;AAC1G,IAAM,yBAAyB,0BAA0B,0BAA0B,kBAAkB;AACrG,IAAM,yBAAyB,0BAA0B,0BAA0B,UAAU;AAC7F,IAAM,uBAAuB,0BAA0B,wBAAwB,eAAe;AAC9F,IAAM,iBAAiB,0BAA0B,kBAAkB,QAAQ;AAI3E,IAAM,mBAAmB,0BAA0B,oBAAoB,oBAAoB;AAC3F,IAAM,kBAAkB,0BAA0B,mBAAmB,mBAAmB;AACxF,IAAM,gBAAgB,0BAA0B,iBAAiB,iBAAiB;AAIlF,IAAM,8BAA8B,0BAA0B,+BAA+B,WAAW;AAIxG,IAAM,sCAAsC;AAAA,EACjD;AAAA,EACA;AACF;AACO,IAAM,uCAAuC;AAAA,EAClD;AAAA,EACA;AACF;AACO,IAAM,6CAA6C;AAAA,EACxD;AAAA,EACA;AACF;AAIO,IAAM,yBAAyB,0BAA0B,0BAA0B,cAAc;AACjG,IAAM,0BAA0B,0BAA0B,2BAA2B,cAAc;AACnG,IAAM,4BAA4B,0BAA0B,6BAA6B,cAAc;AACvG,IAAM,6BAA6B,0BAA0B,8BAA8B,cAAc;AACzG,IAAM,2BAA2B,0BAA0B,4BAA4B,gBAAgB;AACvG,IAAM,4BAA4B,0BAA0B,6BAA6B,gBAAgB;AACzG,IAAM,yCAAyC;AAAA,EACpD;AAAA,EACA;AACF;AACO,IAAM,0CAA0C;AAAA,EACrD;AAAA,EACA;AACF;AACO,IAAM,4CAA4C;AAAA,EACvD;AAAA,EACA;AACF;AACO,IAAM,6CAA6C;AAAA,EACxD;AAAA,EACA;AACF;AAIO,IAAM,4BAA4B,0BAA0B,6BAA6B,eAAe;AACxG,IAAM,yBAAyB,0BAA0B,0BAA0B,WAAW;AAC9F,IAAM,uBAAuB,0BAA0B,wBAAwB,SAAS;AAIxF,IAAM,0BAA0B,0BAA0B,2BAA2B,YAAY;AACjG,IAAM,2CAA2C;AAAA,EACtD;AAAA,EACA;AACF;AAIO,IAAM,oBAAoB,0BAA0B,qBAAqB,KAAK;AAC9E,IAAM,iBAAiB,0BAA0B,kBAAkB,KAAK;",
|
|
6
|
+
"names": ["getParamReferenceSymbol"]
|
|
7
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "stacktape",
|
|
3
|
-
"version": "2.23.0-alpha.
|
|
3
|
+
"version": "2.23.0-alpha.20",
|
|
4
4
|
"description": "PaaS 2.0 that deploys to your own AWS account.",
|
|
5
5
|
"author": "Stacktape team <support@stacktape.com>",
|
|
6
6
|
"license": "MIT",
|
|
@@ -19,29 +19,29 @@
|
|
|
19
19
|
"devops",
|
|
20
20
|
"database"
|
|
21
21
|
],
|
|
22
|
-
"bin": {
|
|
23
|
-
"stacktape": "./bin/stacktape.js",
|
|
24
|
-
"stp": "./bin/stacktape.js"
|
|
25
|
-
},
|
|
26
22
|
"exports": {
|
|
27
23
|
".": {
|
|
28
24
|
"types": "./index.d.ts",
|
|
29
|
-
"default": "./
|
|
25
|
+
"default": "./index.js"
|
|
30
26
|
},
|
|
31
27
|
"./sdk": {
|
|
32
|
-
"types": "./
|
|
33
|
-
"default": "./
|
|
28
|
+
"types": "./sdk.d.ts",
|
|
29
|
+
"default": "./sdk.js"
|
|
34
30
|
}
|
|
35
31
|
},
|
|
36
32
|
"main": "./index.js",
|
|
37
33
|
"types": "./index.d.ts",
|
|
34
|
+
"bin": {
|
|
35
|
+
"stacktape": "./bin/stacktape.js",
|
|
36
|
+
"stp": "./bin/stacktape.js"
|
|
37
|
+
},
|
|
38
38
|
"dependencies": {},
|
|
39
39
|
"optionalDependencies": {
|
|
40
|
-
"@stacktape/cli-
|
|
41
|
-
"@stacktape/cli-
|
|
42
|
-
"@stacktape/cli-
|
|
43
|
-
"@stacktape/cli-
|
|
44
|
-
"@stacktape/cli-
|
|
45
|
-
"@stacktape/cli-
|
|
40
|
+
"@stacktape/cli-alpine-x64": "2.23.0-alpha.20",
|
|
41
|
+
"@stacktape/cli-darwin-arm64": "2.23.0-alpha.20",
|
|
42
|
+
"@stacktape/cli-darwin-x64": "2.23.0-alpha.20",
|
|
43
|
+
"@stacktape/cli-linux-arm64": "2.23.0-alpha.20",
|
|
44
|
+
"@stacktape/cli-linux-x64": "2.23.0-alpha.20",
|
|
45
|
+
"@stacktape/cli-win32-x64": "2.23.0-alpha.20"
|
|
46
46
|
}
|
|
47
47
|
}
|